diff --git a/VoiceInk/Services/AIEnhancementOutputFilter.swift b/VoiceInk/Services/AIEnhancementOutputFilter.swift
new file mode 100644
index 0000000..c1601ee
--- /dev/null
+++ b/VoiceInk/Services/AIEnhancementOutputFilter.swift
@@ -0,0 +1,25 @@
+import Foundation
+
+struct AIEnhancementOutputFilter {
+ private static let reasoningPatterns = [
+ #"(?s).*?"#,
+ #"(?s).*?"#,
+ #"(?s).*?"#,
+ ]
+
+ static func filter(_ text: String) -> String {
+ var filteredText = text
+
+ for pattern in reasoningPatterns {
+ if let regex = try? NSRegularExpression(pattern: pattern) {
+ let range = NSRange(filteredText.startIndex..., in: filteredText)
+ filteredText = regex.stringByReplacingMatches(in: filteredText, options: [], range: range, withTemplate: "")
+ }
+ }
+
+ filteredText = filteredText.replacingOccurrences(of: #"\s{2,}"#, with: " ", options: .regularExpression)
+ filteredText = filteredText.trimmingCharacters(in: .whitespacesAndNewlines)
+
+ return filteredText
+ }
+}
\ No newline at end of file
diff --git a/VoiceInk/Services/AIEnhancementService.swift b/VoiceInk/Services/AIEnhancementService.swift
index 30084cd..ce383ee 100644
--- a/VoiceInk/Services/AIEnhancementService.swift
+++ b/VoiceInk/Services/AIEnhancementService.swift
@@ -181,7 +181,8 @@ class AIEnhancementService: ObservableObject {
if aiService.selectedProvider == .ollama {
do {
let result = try await aiService.enhanceWithOllama(text: formattedText, systemPrompt: systemMessage)
- return result
+ let filteredResult = AIEnhancementOutputFilter.filter(result)
+ return filteredResult
} catch let error as LocalAIError {
switch error {
case .serviceUnavailable:
@@ -251,7 +252,8 @@ class AIEnhancementService: ObservableObject {
throw EnhancementError.enhancementFailed
}
- return enhancedText.trimmingCharacters(in: .whitespacesAndNewlines)
+ let filteredText = AIEnhancementOutputFilter.filter(enhancedText.trimmingCharacters(in: .whitespacesAndNewlines))
+ return filteredText
case 401:
throw EnhancementError.authenticationFailed
@@ -306,7 +308,8 @@ class AIEnhancementService: ObservableObject {
throw EnhancementError.enhancementFailed
}
- return enhancedText.trimmingCharacters(in: .whitespacesAndNewlines)
+ let filteredText = AIEnhancementOutputFilter.filter(enhancedText.trimmingCharacters(in: .whitespacesAndNewlines))
+ return filteredText
case 401:
throw EnhancementError.authenticationFailed
@@ -368,7 +371,8 @@ class AIEnhancementService: ObservableObject {
throw EnhancementError.enhancementFailed
}
- return enhancedText.trimmingCharacters(in: .whitespacesAndNewlines)
+ let filteredText = AIEnhancementOutputFilter.filter(enhancedText.trimmingCharacters(in: .whitespacesAndNewlines))
+ return filteredText
case 401:
throw EnhancementError.authenticationFailed
diff --git a/VoiceInk/Services/AIService.swift b/VoiceInk/Services/AIService.swift
index f06cf2e..042ef7b 100644
--- a/VoiceInk/Services/AIService.swift
+++ b/VoiceInk/Services/AIService.swift
@@ -52,7 +52,7 @@ enum AIProvider: String, CaseIterable {
case .deepSeek:
return "deepseek-chat"
case .gemini:
- return "gemini-2.5-pro"
+ return "gemini-2.0-flash-lite"
case .anthropic:
return "claude-sonnet-4-0"
case .mistral:
@@ -75,7 +75,8 @@ enum AIProvider: String, CaseIterable {
case .groq:
return [
"llama-3.3-70b-versatile",
- "llama-3.1-8b-instant"
+ "llama-3.1-8b-instant",
+ "qwen/qwen3-32b"
]
case .openAI:
return [
diff --git a/VoiceInk/Views/EnhancementSettingsView.swift b/VoiceInk/Views/EnhancementSettingsView.swift
index 7bd8ee2..714d677 100644
--- a/VoiceInk/Views/EnhancementSettingsView.swift
+++ b/VoiceInk/Views/EnhancementSettingsView.swift
@@ -73,7 +73,6 @@ struct EnhancementSettingsView: View {
.padding()
.background(Color(.windowBackgroundColor).opacity(0.4))
.cornerRadius(10)
- .opacity(enhancementService.isEnhancementEnabled ? 1.0 : 0.6)
// 3. Enhancement Modes & Assistant Section
VStack(alignment: .leading, spacing: 16) {
@@ -102,7 +101,6 @@ struct EnhancementSettingsView: View {
}
.padding()
.background(CardBackground(isSelected: false))
- .opacity(enhancementService.isEnhancementEnabled ? 1.0 : 0.6)
}
}
.padding(24)