| 338 | } |
| 339 | |
| 340 | async fn get_embedding_dimensions(&self) -> GraphBitResult<usize> { |
| 341 | // Common `OpenAI` embedding dimensions |
| 342 | match self.config.model.as_str() { |
| 343 | "text-embedding-ada-002" => Ok(1536), |
| 344 | "text-embedding-3-small" => Ok(1536), |
| 345 | "text-embedding-3-large" => Ok(3072), |
| 346 | _ => { |
| 347 | // Make a test request to determine dimensions |
| 348 | let test_request = EmbeddingRequest { |
| 349 | input: EmbeddingInput::Single("test".to_string()), |
| 350 | user: None, |
| 351 | params: HashMap::new(), |
| 352 | }; |
| 353 | let response = self.generate_embeddings(test_request).await?; |
| 354 | Ok(response |
| 355 | .embeddings |
| 356 | .first() |
| 357 | .map(Vec::<f32>::len) |
| 358 | .unwrap_or(1536)) |
| 359 | } |
| 360 | } |
| 361 | } |
| 362 | |
| 363 | fn max_batch_size(&self) -> usize { |
| 364 | 2048 // `OpenAI`'s current limit |