New version v2.3.6
This commit is contained in:
@@ -110,7 +110,8 @@ class OpenRouterProvider: AIProvider {
|
||||
return output.contains("image")
|
||||
}
|
||||
return false
|
||||
}()
|
||||
}(),
|
||||
thinking: modelData.supportedParameters?.contains("reasoning") ?? false
|
||||
),
|
||||
architecture: modelData.architecture.map { arch in
|
||||
ModelInfo.Architecture(
|
||||
@@ -368,6 +369,10 @@ class OpenRouterProvider: AIProvider {
|
||||
effectiveModel = request.model
|
||||
}
|
||||
|
||||
let reasoningConfig: ReasoningAPIConfig? = request.reasoning.map {
|
||||
ReasoningAPIConfig(effort: $0.effort, exclude: $0.exclude ? true : nil)
|
||||
}
|
||||
|
||||
return OpenRouterChatRequest(
|
||||
model: effectiveModel,
|
||||
messages: apiMessages,
|
||||
@@ -377,7 +382,8 @@ class OpenRouterProvider: AIProvider {
|
||||
topP: request.topP,
|
||||
tools: request.tools,
|
||||
toolChoice: request.tools != nil ? "auto" : nil,
|
||||
modalities: request.imageGeneration ? ["text", "image"] : nil
|
||||
modalities: request.imageGeneration ? ["text", "image"] : nil,
|
||||
reasoning: reasoningConfig
|
||||
)
|
||||
}
|
||||
|
||||
@@ -416,7 +422,11 @@ class OpenRouterProvider: AIProvider {
|
||||
throw ProviderError.invalidResponse
|
||||
}
|
||||
|
||||
let images = choice.delta.images.flatMap { decodeImageOutputs($0) }
|
||||
// Merge images from both sources: top-level `images` field and content-block images
|
||||
let topLevelImages = choice.delta.images.flatMap { decodeImageOutputs($0) } ?? []
|
||||
let blockImages = decodeImageOutputs(choice.delta.contentBlockImages) ?? []
|
||||
let allImages = topLevelImages + blockImages
|
||||
let images: [Data]? = allImages.isEmpty ? nil : allImages
|
||||
|
||||
return StreamChunk(
|
||||
id: apiChunk.id,
|
||||
@@ -424,7 +434,8 @@ class OpenRouterProvider: AIProvider {
|
||||
delta: StreamChunk.Delta(
|
||||
content: choice.delta.content,
|
||||
role: choice.delta.role,
|
||||
images: images
|
||||
images: images,
|
||||
thinking: choice.delta.reasoning
|
||||
),
|
||||
finishReason: choice.finishReason,
|
||||
usage: apiChunk.usage.map { usage in
|
||||
|
||||
Reference in New Issue
Block a user