diff --git a/apps/desktop/src/settings/ai/stt/selection.test.ts b/apps/desktop/src/settings/ai/stt/selection.test.ts index 83e1925c51..db5cc74d81 100644 --- a/apps/desktop/src/settings/ai/stt/selection.test.ts +++ b/apps/desktop/src/settings/ai/stt/selection.test.ts @@ -18,6 +18,9 @@ describe("getDefaultSttModel", () => { expect(getDefaultSttModel("groq")).toBe("whisper-large-v3-turbo"); expect(getDefaultSttModel("openrouter")).toBe("openai/gpt-transcribe"); expect(getDefaultSttModel("xai")).toBe("xai-stt"); + expect(getDefaultSttModel("google_generative_ai")).toBe( + "gemini-3.5-transcribe-live", + ); expect(getDefaultSttModel("together")).toBe("openai/whisper-large-v3"); expect(getDefaultSttModel("speechmatics")).toBe("enhanced"); expect(getDefaultSttModel("azure_speech")).toBe("fast-transcription"); diff --git a/apps/desktop/src/settings/ai/stt/shared.tsx b/apps/desktop/src/settings/ai/stt/shared.tsx index cedf7c58df..0e5fad2322 100644 --- a/apps/desktop/src/settings/ai/stt/shared.tsx +++ b/apps/desktop/src/settings/ai/stt/shared.tsx @@ -8,8 +8,8 @@ import { Cohere, ElevenLabs, Fireworks, - GoogleCloud, Gemini, + GoogleCloud, Groq, Mistral, OpenAI, diff --git a/crates/listener2-core/src/lib.rs b/crates/listener2-core/src/lib.rs index b5382ad5f1..683216ede7 100644 --- a/crates/listener2-core/src/lib.rs +++ b/crates/listener2-core/src/lib.rs @@ -172,7 +172,7 @@ pub fn suggest_providers_for_languages_batch(languages: &[anlg_language::Languag with_support .into_iter() - .map(|(kind, _)| format!("{:?}", kind).to_lowercase()) + .map(|(kind, _)| kind.to_string()) .collect() } diff --git a/crates/owhisper-client/src/adapter/google_generative_ai/live.rs b/crates/owhisper-client/src/adapter/google_generative_ai/live.rs index 6c1d83d055..9b3fab6fc8 100644 --- a/crates/owhisper-client/src/adapter/google_generative_ai/live.rs +++ b/crates/owhisper-client/src/adapter/google_generative_ai/live.rs @@ -254,12 +254,18 @@ fn transcription_response( }) .collect(); + let from_finalize = is_final + && value + .get("finished") + .and_then(serde_json::Value::as_bool) + .unwrap_or(false); + Some(StreamResponse::TranscriptResponse { start, duration: (end - start).max(0.0), is_final, speech_final: is_final, - from_finalize: false, + from_finalize, channel: Channel { alternatives: vec![Alternatives { transcript: text.to_string(), @@ -405,6 +411,14 @@ mod tests { assert_eq!(channel.alternatives[0].words[0].speaker, Some(2)); assert_eq!(*start, 0.1); assert!((*duration - 0.7).abs() < f64::EPSILON); + + let finalize_flush = adapter.parse_response( + r#"{"serverContent":{"inputTranscription":{"text":"hello there","finished":true}}}"#, + ); + let StreamResponse::TranscriptResponse { from_finalize, .. } = &finalize_flush[0] else { + panic!("expected finalize flush"); + }; + assert!(*from_finalize); } #[test] diff --git a/crates/owhisper-client/src/providers.rs b/crates/owhisper-client/src/providers.rs index cc81317f39..2388727c59 100644 --- a/crates/owhisper-client/src/providers.rs +++ b/crates/owhisper-client/src/providers.rs @@ -326,11 +326,11 @@ impl Provider { Self::AwsTranscribe | Self::AzureSpeech | Self::GoogleCloud + | Self::GoogleGenerativeAi | Self::Groq | Self::RevAi | Self::Speechmatics | Self::Together - | Self::GoogleGenerativeAi | Self::Xai => None, } } diff --git a/packages/changelog/content/1.4.14.md b/packages/changelog/content/1.4.14.md index aee0b1e1fd..843047c42f 100644 --- a/packages/changelog/content/1.4.14.md +++ b/packages/changelog/content/1.4.14.md @@ -23,6 +23,8 @@ summary: "Anarlog 1.4.14 keeps live meetings going through brief network drops, - Choose a local whisper.cpp `.bin` model file from Settings → Transcription instead of relying only on bundled downloads +- Transcribe live with Google Gemini 3.5 Transcribe, then refine the recording + with speaker labels and word timestamps using the same API key - Keep Mistral batch transcription speaker labels aligned with the words they belong to - Load ChatGPT subscription models from the current catalog instead of a diff --git a/plugins/transcription/src/listener/commands.rs b/plugins/transcription/src/listener/commands.rs index dbdae96133..a9bab90530 100644 --- a/plugins/transcription/src/listener/commands.rs +++ b/plugins/transcription/src/listener/commands.rs @@ -164,7 +164,7 @@ pub async fn suggest_providers_for_languages_live( let supported: Vec = with_support .into_iter() - .map(|(kind, _)| format!("{:?}", kind).to_lowercase()) + .map(|(kind, _)| kind.to_string()) .collect(); Ok(supported)