From 4e551926e7b3efd2d9ca2ee716350bcd96602487 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Sun, 28 Dec 2025 12:16:59 +0545 Subject: [PATCH] Fix Soniox vocabulary integration to read from SwiftData --- .../CloudTranscriptionService.swift | 10 ++++++++-- .../SonioxTranscriptionService.swift | 20 ++++++++++++------- .../TranscriptionServiceRegistry.swift | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/VoiceInk/Services/CloudTranscription/CloudTranscriptionService.swift b/VoiceInk/Services/CloudTranscription/CloudTranscriptionService.swift index 75af540..4ac7131 100644 --- a/VoiceInk/Services/CloudTranscription/CloudTranscriptionService.swift +++ b/VoiceInk/Services/CloudTranscription/CloudTranscriptionService.swift @@ -1,4 +1,5 @@ import Foundation +import SwiftData import os enum CloudTranscriptionError: Error, LocalizedError { @@ -34,14 +35,19 @@ enum CloudTranscriptionError: Error, LocalizedError { } class CloudTranscriptionService: TranscriptionService { - + private let modelContext: ModelContext + + init(modelContext: ModelContext) { + self.modelContext = modelContext + } + private lazy var groqService = GroqTranscriptionService() private lazy var elevenLabsService = ElevenLabsTranscriptionService() private lazy var deepgramService = DeepgramTranscriptionService() private lazy var mistralService = MistralTranscriptionService() private lazy var geminiService = GeminiTranscriptionService() private lazy var openAICompatibleService = OpenAICompatibleTranscriptionService() - private lazy var sonioxService = SonioxTranscriptionService() + private lazy var sonioxService = SonioxTranscriptionService(modelContext: modelContext) func transcribe(audioURL: URL, model: any TranscriptionModel) async throws -> String { var text: String diff --git a/VoiceInk/Services/CloudTranscription/SonioxTranscriptionService.swift b/VoiceInk/Services/CloudTranscription/SonioxTranscriptionService.swift index 49dd357..95cece6 100644 --- a/VoiceInk/Services/CloudTranscription/SonioxTranscriptionService.swift +++ b/VoiceInk/Services/CloudTranscription/SonioxTranscriptionService.swift @@ -1,7 +1,13 @@ import Foundation +import SwiftData class SonioxTranscriptionService { private let apiBase = "https://api.soniox.com/v1" + private let modelContext: ModelContext + + init(modelContext: ModelContext) { + self.modelContext = modelContext + } func transcribe(audioURL: URL, model: any TranscriptionModel) async throws -> String { let config = try getAPIConfig(for: model) @@ -170,16 +176,16 @@ class SonioxTranscriptionService { } private func getCustomDictionaryTerms() -> [String] { - guard let data = UserDefaults.standard.data(forKey: "CustomVocabularyItems") else { + // Fetch vocabulary words from SwiftData + let descriptor = FetchDescriptor(sortBy: [SortDescriptor(\.word)]) + guard let vocabularyWords = try? modelContext.fetch(descriptor) else { return [] } - // Decode without depending on UI layer types; extract "word" strings - guard let json = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]] else { - return [] - } - let words = json.compactMap { $0["word"] as? String } - .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + + let words = vocabularyWords + .map { $0.word.trimmingCharacters(in: .whitespacesAndNewlines) } .filter { !$0.isEmpty } + // De-duplicate while preserving order var seen = Set() var unique: [String] = [] diff --git a/VoiceInk/Services/TranscriptionServiceRegistry.swift b/VoiceInk/Services/TranscriptionServiceRegistry.swift index a7703ea..5171a82 100644 --- a/VoiceInk/Services/TranscriptionServiceRegistry.swift +++ b/VoiceInk/Services/TranscriptionServiceRegistry.swift @@ -12,7 +12,7 @@ class TranscriptionServiceRegistry { modelsDirectory: modelsDirectory, whisperState: whisperState ) - private(set) lazy var cloudTranscriptionService = CloudTranscriptionService() + private(set) lazy var cloudTranscriptionService = CloudTranscriptionService(modelContext: whisperState.modelContext) private(set) lazy var nativeAppleTranscriptionService = NativeAppleTranscriptionService() private(set) lazy var parakeetTranscriptionService = ParakeetTranscriptionService()