Added support for preserving the prompt used during enhancement on
This commit is contained in:
parent
4dc50ec9ee
commit
2aac1020f8
@ -11,10 +11,11 @@ final class Transcription {
|
||||
var audioFileURL: String?
|
||||
var transcriptionModelName: String?
|
||||
var aiEnhancementModelName: String?
|
||||
var promptName: String?
|
||||
var transcriptionDuration: TimeInterval?
|
||||
var enhancementDuration: TimeInterval?
|
||||
|
||||
init(text: String, duration: TimeInterval, enhancedText: String? = nil, audioFileURL: String? = nil, transcriptionModelName: String? = nil, aiEnhancementModelName: String? = nil, transcriptionDuration: TimeInterval? = nil, enhancementDuration: TimeInterval? = nil) {
|
||||
init(text: String, duration: TimeInterval, enhancedText: String? = nil, audioFileURL: String? = nil, transcriptionModelName: String? = nil, aiEnhancementModelName: String? = nil, promptName: String? = nil, transcriptionDuration: TimeInterval? = nil, enhancementDuration: TimeInterval? = nil) {
|
||||
self.id = UUID()
|
||||
self.text = text
|
||||
self.enhancedText = enhancedText
|
||||
@ -23,6 +24,7 @@ final class Transcription {
|
||||
self.audioFileURL = audioFileURL
|
||||
self.transcriptionModelName = transcriptionModelName
|
||||
self.aiEnhancementModelName = aiEnhancementModelName
|
||||
self.promptName = promptName
|
||||
self.transcriptionDuration = transcriptionDuration
|
||||
self.enhancementDuration = enhancementDuration
|
||||
}
|
||||
|
||||
@ -325,15 +325,16 @@ class AIEnhancementService: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
func enhance(_ text: String) async throws -> (String, TimeInterval) {
|
||||
func enhance(_ text: String) async throws -> (String, TimeInterval, String?) {
|
||||
let startTime = Date()
|
||||
let enhancementPrompt: EnhancementPrompt = .transcriptionEnhancement
|
||||
let promptName = activePrompt?.title
|
||||
|
||||
do {
|
||||
let result = try await makeRequest(text: text, mode: enhancementPrompt)
|
||||
let endTime = Date()
|
||||
let duration = endTime.timeIntervalSince(startTime)
|
||||
return (result, duration)
|
||||
return (result, duration, promptName)
|
||||
} catch {
|
||||
throw error
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ class AudioTranscriptionManager: ObservableObject {
|
||||
enhancementService.isConfigured {
|
||||
processingPhase = .enhancing
|
||||
do {
|
||||
let (enhancedText, enhancementDuration) = try await enhancementService.enhance(text)
|
||||
let (enhancedText, enhancementDuration, promptName) = try await enhancementService.enhance(text)
|
||||
let transcription = Transcription(
|
||||
text: text,
|
||||
duration: duration,
|
||||
@ -132,6 +132,7 @@ class AudioTranscriptionManager: ObservableObject {
|
||||
audioFileURL: permanentURL.absoluteString,
|
||||
transcriptionModelName: currentModel.displayName,
|
||||
aiEnhancementModelName: enhancementService.getAIService()?.currentModel,
|
||||
promptName: promptName,
|
||||
transcriptionDuration: transcriptionDuration,
|
||||
enhancementDuration: enhancementDuration
|
||||
)
|
||||
@ -146,6 +147,7 @@ class AudioTranscriptionManager: ObservableObject {
|
||||
duration: duration,
|
||||
audioFileURL: permanentURL.absoluteString,
|
||||
transcriptionModelName: currentModel.displayName,
|
||||
promptName: nil,
|
||||
transcriptionDuration: transcriptionDuration
|
||||
)
|
||||
modelContext.insert(transcription)
|
||||
@ -159,6 +161,7 @@ class AudioTranscriptionManager: ObservableObject {
|
||||
duration: duration,
|
||||
audioFileURL: permanentURL.absoluteString,
|
||||
transcriptionModelName: currentModel.displayName,
|
||||
promptName: nil,
|
||||
transcriptionDuration: transcriptionDuration
|
||||
)
|
||||
modelContext.insert(transcription)
|
||||
|
||||
@ -95,7 +95,7 @@ class AudioTranscriptionService: ObservableObject {
|
||||
enhancementService.isEnhancementEnabled,
|
||||
enhancementService.isConfigured {
|
||||
do {
|
||||
let (enhancedText, enhancementDuration) = try await enhancementService.enhance(text)
|
||||
let (enhancedText, enhancementDuration, promptName) = try await enhancementService.enhance(text)
|
||||
|
||||
let newTranscription = Transcription(
|
||||
text: text,
|
||||
@ -104,6 +104,7 @@ class AudioTranscriptionService: ObservableObject {
|
||||
audioFileURL: permanentURLString,
|
||||
transcriptionModelName: model.displayName,
|
||||
aiEnhancementModelName: enhancementService.getAIService()?.currentModel,
|
||||
promptName: promptName,
|
||||
transcriptionDuration: transcriptionDuration,
|
||||
enhancementDuration: enhancementDuration
|
||||
)
|
||||
@ -126,6 +127,7 @@ class AudioTranscriptionService: ObservableObject {
|
||||
duration: duration,
|
||||
audioFileURL: permanentURLString,
|
||||
transcriptionModelName: model.displayName,
|
||||
promptName: nil,
|
||||
transcriptionDuration: transcriptionDuration
|
||||
)
|
||||
modelContext.insert(newTranscription)
|
||||
@ -148,6 +150,7 @@ class AudioTranscriptionService: ObservableObject {
|
||||
duration: duration,
|
||||
audioFileURL: permanentURLString,
|
||||
transcriptionModelName: model.displayName,
|
||||
promptName: nil,
|
||||
transcriptionDuration: transcriptionDuration
|
||||
)
|
||||
modelContext.insert(newTranscription)
|
||||
|
||||
@ -24,19 +24,20 @@ class VoiceInkCSVExportService {
|
||||
}
|
||||
|
||||
private func generateCSV(for transcriptions: [Transcription]) -> String {
|
||||
var csvString = "Original Transcript,Enhanced Transcript,Enhancement Model,Transcription Model,Enhancement Time,Transcription Time,Timestamp,Duration\n"
|
||||
var csvString = "Original Transcript,Enhanced Transcript,Enhancement Model,Prompt Name,Transcription Model,Enhancement Time,Transcription Time,Timestamp,Duration\n"
|
||||
|
||||
for transcription in transcriptions {
|
||||
let originalText = escapeCSVString(transcription.text)
|
||||
let enhancedText = escapeCSVString(transcription.enhancedText ?? "")
|
||||
let enhancementModel = escapeCSVString(transcription.aiEnhancementModelName ?? "")
|
||||
let promptName = escapeCSVString(transcription.promptName ?? "")
|
||||
let transcriptionModel = escapeCSVString(transcription.transcriptionModelName ?? "")
|
||||
let enhancementTime = transcription.enhancementDuration ?? 0
|
||||
let transcriptionTime = transcription.transcriptionDuration ?? 0
|
||||
let timestamp = transcription.timestamp.ISO8601Format()
|
||||
let duration = transcription.duration
|
||||
|
||||
let row = "\(originalText),\(enhancedText),\(enhancementModel),\(transcriptionModel),\(enhancementTime),\(transcriptionTime),\(timestamp),\(duration)\n"
|
||||
let row = "\(originalText),\(enhancedText),\(enhancementModel),\(promptName),\(transcriptionModel),\(enhancementTime),\(transcriptionTime),\(timestamp),\(duration)\n"
|
||||
csvString.append(row)
|
||||
}
|
||||
|
||||
|
||||
@ -99,6 +99,9 @@ struct TranscriptionCard: View {
|
||||
if let aiModel = transcription.aiEnhancementModelName {
|
||||
metadataRow(icon: "sparkles", label: "Enhancement Model", value: aiModel)
|
||||
}
|
||||
if let promptName = transcription.promptName {
|
||||
metadataRow(icon: "text.bubble.fill", label: "Prompt Used", value: promptName)
|
||||
}
|
||||
if let duration = transcription.transcriptionDuration {
|
||||
metadataRow(icon: "clock.fill", label: "Transcription Time", value: formatTiming(duration))
|
||||
}
|
||||
@ -139,6 +142,7 @@ struct TranscriptionCard: View {
|
||||
private var hasMetadata: Bool {
|
||||
transcription.transcriptionModelName != nil ||
|
||||
transcription.aiEnhancementModelName != nil ||
|
||||
transcription.promptName != nil ||
|
||||
transcription.transcriptionDuration != nil ||
|
||||
transcription.enhancementDuration != nil
|
||||
}
|
||||
|
||||
@ -297,7 +297,7 @@ class WhisperState: NSObject, ObservableObject {
|
||||
|
||||
await MainActor.run { self.recordingState = .enhancing }
|
||||
let textForAI = promptDetectionResult?.processedText ?? text
|
||||
let (enhancedText, enhancementDuration) = try await enhancementService.enhance(textForAI)
|
||||
let (enhancedText, enhancementDuration, promptName) = try await enhancementService.enhance(textForAI)
|
||||
let newTranscription = Transcription(
|
||||
text: originalText,
|
||||
duration: actualDuration,
|
||||
@ -305,6 +305,7 @@ class WhisperState: NSObject, ObservableObject {
|
||||
audioFileURL: url.absoluteString,
|
||||
transcriptionModelName: model.displayName,
|
||||
aiEnhancementModelName: enhancementService.getAIService()?.currentModel,
|
||||
promptName: promptName,
|
||||
transcriptionDuration: transcriptionDuration,
|
||||
enhancementDuration: enhancementDuration
|
||||
)
|
||||
@ -319,6 +320,7 @@ class WhisperState: NSObject, ObservableObject {
|
||||
enhancedText: "Enhancement failed: \(error)",
|
||||
audioFileURL: url.absoluteString,
|
||||
transcriptionModelName: model.displayName,
|
||||
promptName: nil,
|
||||
transcriptionDuration: transcriptionDuration
|
||||
)
|
||||
modelContext.insert(newTranscription)
|
||||
@ -338,6 +340,7 @@ class WhisperState: NSObject, ObservableObject {
|
||||
duration: actualDuration,
|
||||
audioFileURL: url.absoluteString,
|
||||
transcriptionModelName: model.displayName,
|
||||
promptName: nil,
|
||||
transcriptionDuration: transcriptionDuration
|
||||
)
|
||||
modelContext.insert(newTranscription)
|
||||
@ -391,7 +394,8 @@ class WhisperState: NSObject, ObservableObject {
|
||||
text: "Transcription Failed: \(fullErrorText)",
|
||||
duration: duration,
|
||||
enhancedText: nil,
|
||||
audioFileURL: url.absoluteString
|
||||
audioFileURL: url.absoluteString,
|
||||
promptName: nil
|
||||
)
|
||||
|
||||
modelContext.insert(failedTranscription)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user