Skip to content

Commit fe1bc41

Browse files
Merge pull request #181 from jamesrochabrun/feature/realtime-response-done-error-handling
Add response.done message handling for Realtime API error reporting
2 parents 50bedb1 + 1bc5b03 commit fe1bc41

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

Sources/OpenAI/Private/Realtime/OpenAIRealtimeSession.swift

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,34 @@ open class OpenAIRealtimeSession {
249249

250250
continuation?.yield(.mcpListToolsFailed(fullError))
251251

252+
case "response.done":
253+
// Handle response completion (may contain errors like insufficient_quota)
254+
if
255+
let response = json["response"] as? [String: Any],
256+
let status = response["status"] as? String
257+
{
258+
logger.debug("Response done with status: \(status)")
259+
260+
// Pass the full response object for detailed error handling
261+
continuation?.yield(.responseDone(status: status, statusDetails: response))
262+
263+
// Log errors for debugging
264+
if
265+
let statusDetails = response["status_details"] as? [String: Any],
266+
let error = statusDetails["error"] as? [String: Any]
267+
{
268+
let code = error["code"] as? String ?? "unknown"
269+
let message = error["message"] as? String ?? "Unknown error"
270+
logger.error("Response error: [\(code)] \(message)")
271+
}
272+
} else {
273+
logger.warning("Received response.done with unexpected format")
274+
}
275+
252276
default:
253-
// Log unhandled message types for debugging
254-
logger.debug("Unhandled message type: \(messageType)")
277+
// Log unhandled message types with more detail for debugging
278+
logger.warning("⚠️ Unhandled message type: \(messageType)")
279+
logger.debug("Full JSON: \(String(describing: json))")
255280
break
256281
}
257282

Sources/OpenAI/Public/ResponseModels/Realtime/OpenAIRealtimeMessage.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,7 @@ public enum OpenAIRealtimeMessage: Sendable {
2626
case mcpListToolsInProgress // "mcp_list_tools.in_progress"
2727
case mcpListToolsCompleted([String: Any]) // "mcp_list_tools.completed" with tools data
2828
case mcpListToolsFailed(String?) // "mcp_list_tools.failed" with error details
29+
30+
/// Response completion with potential errors
31+
case responseDone(status: String, statusDetails: [String: Any]?) // "response.done"
2932
}

0 commit comments

Comments
 (0)