@@ -11,7 +11,7 @@ use crate::{
11
11
error:: ServerError ,
12
12
server:: RustDocsServer , // Import the updated RustDocsServer
13
13
} ;
14
- use async_openai:: Client as OpenAIClient ;
14
+ use async_openai:: { Client as OpenAIClient , config :: OpenAIConfig } ;
15
15
use bincode:: config;
16
16
use cargo:: core:: PackageIdSpec ;
17
17
use clap:: Parser ; // Import clap Parser
@@ -182,7 +182,12 @@ async fn main() -> Result<(), ServerError> {
182
182
let mut documents_for_server: Vec < Document > = loaded_documents_from_cache. unwrap_or_default ( ) ;
183
183
184
184
// --- Initialize OpenAI Client (needed for question embedding even if cache hit) ---
185
- let openai_client = OpenAIClient :: new ( ) ;
185
+ let openai_client = if let Ok ( api_base) = env:: var ( "OPENAI_API_BASE" ) {
186
+ let config = OpenAIConfig :: new ( ) . with_api_base ( api_base) ;
187
+ OpenAIClient :: with_config ( config)
188
+ } else {
189
+ OpenAIClient :: new ( )
190
+ } ;
186
191
OPENAI_CLIENT
187
192
. set ( openai_client. clone ( ) ) // Clone the client for the OnceCell
188
193
. expect ( "Failed to set OpenAI client" ) ;
@@ -209,12 +214,10 @@ async fn main() -> Result<(), ServerError> {
209
214
documents_for_server = loaded_documents. clone ( ) ;
210
215
211
216
eprintln ! ( "Generating embeddings..." ) ;
212
- let ( generated_embeddings, total_tokens) = generate_embeddings (
213
- & openai_client,
214
- & loaded_documents,
215
- "text-embedding-3-small" ,
216
- )
217
- . await ?;
217
+ let embedding_model: String = env:: var ( "EMBEDDING_MODEL" )
218
+ . unwrap_or_else ( |_| "text-embedding-3-small" . to_string ( ) ) ;
219
+ let ( generated_embeddings, total_tokens) =
220
+ generate_embeddings ( & openai_client, & loaded_documents, & embedding_model) . await ?;
218
221
219
222
let cost_per_million = 0.02 ;
220
223
let estimated_cost = ( total_tokens as f64 / 1_000_000.0 ) * cost_per_million;
0 commit comments