@@ -179,27 +179,31 @@ pub fn create_embedding_driver(
179179 provider : & str ,
180180 model : & str ,
181181 api_key_env : & str ,
182+ custom_base_url : Option < & str > ,
182183) -> Result < Box < dyn EmbeddingDriver + Send + Sync > , EmbeddingError > {
183184 let api_key = if api_key_env. is_empty ( ) {
184185 String :: new ( )
185186 } else {
186187 std:: env:: var ( api_key_env) . unwrap_or_default ( )
187188 } ;
188189
189- let base_url = match provider {
190- "openai" => OPENAI_BASE_URL . to_string ( ) ,
191- "groq" => GROQ_BASE_URL . to_string ( ) ,
192- "together" => TOGETHER_BASE_URL . to_string ( ) ,
193- "fireworks" => FIREWORKS_BASE_URL . to_string ( ) ,
194- "mistral" => MISTRAL_BASE_URL . to_string ( ) ,
195- "ollama" => OLLAMA_BASE_URL . to_string ( ) ,
196- "vllm" => VLLM_BASE_URL . to_string ( ) ,
197- "lmstudio" => LMSTUDIO_BASE_URL . to_string ( ) ,
198- other => {
199- warn ! ( "Unknown embedding provider '{other}', using OpenAI-compatible format" ) ;
200- format ! ( "https://{other}/v1" )
201- }
202- } ;
190+ let base_url = custom_base_url
191+ . filter ( |u| !u. is_empty ( ) )
192+ . map ( |u| u. to_string ( ) )
193+ . unwrap_or_else ( || match provider {
194+ "openai" => OPENAI_BASE_URL . to_string ( ) ,
195+ "groq" => GROQ_BASE_URL . to_string ( ) ,
196+ "together" => TOGETHER_BASE_URL . to_string ( ) ,
197+ "fireworks" => FIREWORKS_BASE_URL . to_string ( ) ,
198+ "mistral" => MISTRAL_BASE_URL . to_string ( ) ,
199+ "ollama" => OLLAMA_BASE_URL . to_string ( ) ,
200+ "vllm" => VLLM_BASE_URL . to_string ( ) ,
201+ "lmstudio" => LMSTUDIO_BASE_URL . to_string ( ) ,
202+ other => {
203+ warn ! ( "Unknown embedding provider '{other}', using OpenAI-compatible format" ) ;
204+ format ! ( "https://{other}/v1" )
205+ }
206+ } ) ;
203207
204208 // SECURITY: Warn when embedding requests will be sent to an external API
205209 let is_local = base_url. contains ( "localhost" )
@@ -351,7 +355,7 @@ mod tests {
351355 #[ test]
352356 fn test_create_embedding_driver_ollama ( ) {
353357 // Should succeed even without API key (ollama is local)
354- let driver = create_embedding_driver ( "ollama" , "all-MiniLM-L6-v2" , "" ) ;
358+ let driver = create_embedding_driver ( "ollama" , "all-MiniLM-L6-v2" , "" , None ) ;
355359 assert ! ( driver. is_ok( ) ) ;
356360 assert_eq ! ( driver. unwrap( ) . dimensions( ) , 384 ) ;
357361 }
0 commit comments