diff --git a/oAI/Providers/OpenRouterModels.swift b/oAI/Providers/OpenRouterModels.swift index f658252..68e1662 100644 --- a/oAI/Providers/OpenRouterModels.swift +++ b/oAI/Providers/OpenRouterModels.swift @@ -485,10 +485,9 @@ struct OpenRouterImageGenerationResponse: Codable { struct OpenRouterErrorResponse: Codable { let error: ErrorDetail - + struct ErrorDetail: Codable { let message: String let type: String? - let code: String? } } diff --git a/oAI/Providers/OpenRouterProvider.swift b/oAI/Providers/OpenRouterProvider.swift index a6809c5..d38d9d3 100644 --- a/oAI/Providers/OpenRouterProvider.swift +++ b/oAI/Providers/OpenRouterProvider.swift @@ -347,8 +347,16 @@ class OpenRouterProvider: AIProvider { } guard httpResponse.statusCode == 200 else { - Log.api.error("OpenRouter stream HTTP \(httpResponse.statusCode)") - continuation.finish(throwing: ProviderError.unknown("HTTP \(httpResponse.statusCode)")) + var errorBody = "" + for try await line in bytes.lines { errorBody += line } + if let errorData = errorBody.data(using: .utf8), + let errorResponse = try? JSONDecoder().decode(OpenRouterErrorResponse.self, from: errorData) { + Log.api.error("OpenRouter stream HTTP \(httpResponse.statusCode): \(errorResponse.error.message)") + continuation.finish(throwing: ProviderError.unknown(errorResponse.error.message)) + } else { + Log.api.error("OpenRouter stream HTTP \(httpResponse.statusCode)") + continuation.finish(throwing: ProviderError.unknown("HTTP \(httpResponse.statusCode)")) + } return }