Files
openclaw/apps/ios/Sources/Voice/TalkRealtimeClientSession.swift
2026-05-26 15:37:32 -07:00

87 lines
1.8 KiB
Swift

import Foundation
struct TalkRealtimeClientCreateParams: Encodable {
var mode = "realtime"
var provider: String?
var transport = "webrtc"
var brain = "agent-consult"
var model: String?
var voice: String?
}
struct TalkRealtimeClientSession: Decodable {
let provider: String
let transport: String
let clientSecret: String
let offerUrl: String?
let offerHeaders: [String: String]?
let model: String?
let voice: String?
let expiresAt: Double?
var isWebRTC: Bool {
self.transport.caseInsensitiveCompare("webrtc") == .orderedSame
}
}
struct TalkRealtimeToolCallResponse: Decodable {
let runId: String?
let idempotencyKey: String?
}
struct TalkRealtimeServerEvent: Decodable {
let type: String
let itemId: String?
let item: TalkRealtimeServerItem?
let callId: String?
let name: String?
let delta: String?
let arguments: String?
let transcript: String?
let text: String?
enum CodingKeys: String, CodingKey {
case type
case itemId = "item_id"
case item
case callId = "call_id"
case name
case delta
case arguments
case transcript
case text
}
var resolvedItemId: String? {
self.itemId ?? self.item?.id
}
var resolvedCallId: String? {
self.callId ?? self.item?.callId
}
var resolvedName: String? {
self.name ?? self.item?.name
}
var resolvedArguments: String? {
self.arguments ?? self.item?.arguments
}
}
struct TalkRealtimeServerItem: Decodable {
let id: String?
let type: String?
let callId: String?
let name: String?
let arguments: String?
enum CodingKeys: String, CodingKey {
case id
case type
case callId = "call_id"
case name
case arguments
}
}