New version v2.3.6

This commit is contained in:
2026-03-04 10:19:16 +01:00
parent 65a35cd508
commit 49f842f119
52 changed files with 14034 additions and 358 deletions

View File

@@ -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