From fbce9a5fe357601c2f0dd793fa150ff851407617 Mon Sep 17 00:00:00 2001 From: Illia Polosukhin Date: Sun, 22 Mar 2026 00:25:54 -0700 Subject: [PATCH] refactor(llm): move transcription module into src/llm/ (#1559) * refactor(llm): move transcription module into src/llm/ Transcription is an LLM capability (Whisper, Chat Completions audio). Move it from a top-level module into src/llm/transcription/ to reflect this, and update all references across the codebase. Co-Authored-By: Claude Opus 4.6 (1M context) * style: fix rustfmt formatting after module move Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) --- src/agent/agent_loop.rs | 2 +- src/config/transcription.rs | 15 +++++++++------ src/lib.rs | 1 - src/llm/mod.rs | 1 + src/{ => llm}/transcription/chat_completions.rs | 0 src/{ => llm}/transcription/mod.rs | 0 src/{ => llm}/transcription/openai.rs | 0 src/main.rs | 9 +++++---- 8 files changed, 16 insertions(+), 12 deletions(-) rename src/{ => llm}/transcription/chat_completions.rs (100%) rename src/{ => llm}/transcription/mod.rs (100%) rename src/{ => llm}/transcription/openai.rs (100%) diff --git a/src/agent/agent_loop.rs b/src/agent/agent_loop.rs index 54575ecc..5cbd8166 100644 --- a/src/agent/agent_loop.rs +++ b/src/agent/agent_loop.rs @@ -162,7 +162,7 @@ pub struct AgentDeps { /// HTTP interceptor for trace recording/replay. pub http_interceptor: Option>, /// Audio transcription middleware for voice messages. - pub transcription: Option>, + pub transcription: Option>, /// Document text extraction middleware for PDF, DOCX, PPTX, etc. pub document_extraction: Option>, /// Sandbox readiness state for full-job routine dispatch. diff --git a/src/config/transcription.rs b/src/config/transcription.rs index fc296c9a..191d2a02 100644 --- a/src/config/transcription.rs +++ b/src/config/transcription.rs @@ -89,7 +89,9 @@ impl TranscriptionConfig { } /// Create the transcription provider if enabled and configured. - pub fn create_provider(&self) -> Option> { + pub fn create_provider( + &self, + ) -> Option> { if !self.enabled { return None; } @@ -103,10 +105,11 @@ impl TranscriptionConfig { "Audio transcription enabled via Chat Completions API" ); - let mut provider = crate::transcription::ChatCompletionsTranscriptionProvider::new( - api_key.clone(), - ) - .with_model(&self.model); + let mut provider = + crate::llm::transcription::ChatCompletionsTranscriptionProvider::new( + api_key.clone(), + ) + .with_model(&self.model); if let Some(ref base_url) = self.base_url { provider = provider.with_base_url(base_url); @@ -121,7 +124,7 @@ impl TranscriptionConfig { ); let mut provider = - crate::transcription::OpenAiWhisperProvider::new(api_key.clone()) + crate::llm::transcription::OpenAiWhisperProvider::new(api_key.clone()) .with_model(&self.model); if let Some(ref base_url) = self.base_url { diff --git a/src/lib.rs b/src/lib.rs index c87a31b2..9bdce343 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -72,7 +72,6 @@ pub mod skills; pub mod timezone; pub mod tools; pub mod tracing_fmt; -pub mod transcription; pub mod tunnel; pub mod util; pub mod webhooks; diff --git a/src/llm/mod.rs b/src/llm/mod.rs index 141cedf0..64ecd519 100644 --- a/src/llm/mod.rs +++ b/src/llm/mod.rs @@ -35,6 +35,7 @@ mod rig_adapter; pub mod session; pub mod smart_routing; mod token_refreshing; +pub mod transcription; #[cfg(test)] mod codex_test_helpers; diff --git a/src/transcription/chat_completions.rs b/src/llm/transcription/chat_completions.rs similarity index 100% rename from src/transcription/chat_completions.rs rename to src/llm/transcription/chat_completions.rs diff --git a/src/transcription/mod.rs b/src/llm/transcription/mod.rs similarity index 100% rename from src/transcription/mod.rs rename to src/llm/transcription/mod.rs diff --git a/src/transcription/openai.rs b/src/llm/transcription/openai.rs similarity index 100% rename from src/transcription/openai.rs rename to src/llm/transcription/openai.rs diff --git a/src/main.rs b/src/main.rs index 3fbd0453..23224d0f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -846,10 +846,11 @@ async fn async_main() -> anyhow::Result<()> { cost_guard: components.cost_guard, sse_tx: sse_sender, http_interceptor, - transcription: config - .transcription - .create_provider() - .map(|p| Arc::new(ironclaw::transcription::TranscriptionMiddleware::new(p))), + transcription: config.transcription.create_provider().map(|p| { + Arc::new(ironclaw::llm::transcription::TranscriptionMiddleware::new( + p, + )) + }), document_extraction: Some(Arc::new( ironclaw::document_extraction::DocumentExtractionMiddleware::new(), )),