From fcc7b4783fce401aec0ab04e7014abfba625fbbe Mon Sep 17 00:00:00 2001 From: Beingpax Date: Fri, 7 Nov 2025 22:29:44 +0545 Subject: [PATCH] Add reasoning parameter support for Gemini and OpenAI models --- .../AIEnhancement/AIEnhancementService.swift | 7 +++++- .../AIEnhancement/ReasoningConfig.swift | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 VoiceInk/Services/AIEnhancement/ReasoningConfig.swift diff --git a/VoiceInk/Services/AIEnhancement/AIEnhancementService.swift b/VoiceInk/Services/AIEnhancement/AIEnhancementService.swift index e3f0fa1..f75a758 100644 --- a/VoiceInk/Services/AIEnhancement/AIEnhancementService.swift +++ b/VoiceInk/Services/AIEnhancement/AIEnhancementService.swift @@ -292,13 +292,18 @@ class AIEnhancementService: ObservableObject { ["role": "user", "content": formattedText] ] - let requestBody: [String: Any] = [ + var requestBody: [String: Any] = [ "model": aiService.currentModel, "messages": messages, "temperature": aiService.currentModel.lowercased().hasPrefix("gpt-5") ? 1.0 : 0.3, "stream": false ] + // Add reasoning_effort parameter if the model supports it + if let reasoningEffort = ReasoningConfig.getReasoningParameter(for: aiService.currentModel) { + requestBody["reasoning_effort"] = reasoningEffort + } + request.httpBody = try? JSONSerialization.data(withJSONObject: requestBody) do { diff --git a/VoiceInk/Services/AIEnhancement/ReasoningConfig.swift b/VoiceInk/Services/AIEnhancement/ReasoningConfig.swift new file mode 100644 index 0000000..8a0b1be --- /dev/null +++ b/VoiceInk/Services/AIEnhancement/ReasoningConfig.swift @@ -0,0 +1,24 @@ +import Foundation + +struct ReasoningConfig { + static let geminiReasoningModels: Set = [ + "gemini-2.5-flash", + "gemini-2.5-flash-lite" + ] + + static let openAIReasoningModels: Set = [ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano" + ] + + static func getReasoningParameter(for modelName: String) -> String? { + if geminiReasoningModels.contains(modelName) { + return "low" + } else if openAIReasoningModels.contains(modelName) { + return "minimal" + } + return nil + } +} +