Initial commit

This commit is contained in:
Felipe M 2025-09-18 19:56:06 +02:00
commit 1db16227b2
Signed by: fmartingr
GPG key ID: CCFBC5637D4000A8
31 changed files with 2175 additions and 0 deletions

View file

@ -0,0 +1,32 @@
import Foundation
import CoreUtils
public protocol STTEngine {
func transcribe(audioData: Data, language: String?) async throws -> String
func isModelLoaded() -> Bool
func loadModel(at path: URL) async throws
func unloadModel()
}
public enum STTError: Error, LocalizedError {
case modelNotFound
case modelLoadFailed(String)
case transcriptionFailed(String)
case unsupportedFormat
case invalidAudioData
public var errorDescription: String? {
switch self {
case .modelNotFound:
return NSLocalizedString("error.model.not_found", comment: "Model not found error")
case .modelLoadFailed(let reason):
return NSLocalizedString("error.model.load_failed", comment: "Model load failed error") + ": \(reason)"
case .transcriptionFailed(let reason):
return NSLocalizedString("error.transcription.failed", comment: "Transcription failed error") + ": \(reason)"
case .unsupportedFormat:
return "Unsupported audio format"
case .invalidAudioData:
return "Invalid audio data"
}
}
}

View file

@ -0,0 +1,35 @@
import Foundation
import CoreUtils
public class WhisperCPPEngine: STTEngine {
private let logger = Logger(category: "WhisperCPPEngine")
private var modelPath: URL?
private var isLoaded = false
public init() {
// WhisperCPP integration will be implemented in Phase 2
}
public func transcribe(audioData: Data, language: String?) async throws -> String {
logger.info("Transcribing audio data")
// TODO: Implement whisper.cpp integration in Phase 2
throw STTError.transcriptionFailed("Not implemented yet")
}
public func isModelLoaded() -> Bool {
return isLoaded
}
public func loadModel(at path: URL) async throws {
logger.info("Loading model at path: \(path.path)")
self.modelPath = path
// TODO: Implement model loading in Phase 2
isLoaded = true
}
public func unloadModel() {
logger.info("Unloading model")
modelPath = nil
isLoaded = false
}
}