Get embedding for the provided text using the specified provider and model. Args: text: The text to embed provider: Optional provider name, defaults to preferred_embedding_provider model: Optional model name, defaults to the provider's configured model timeo
(
text: str,
provider: str | None = None,
model: str | None = None,
timeout: int = 30,
query_params: dict | None = None
)
| 26 | } |
| 27 | |
| 28 | async def get_embedding( |
| 29 | text: str, |
| 30 | provider: str | None = None, |
| 31 | model: str | None = None, |
| 32 | timeout: int = 30, |
| 33 | query_params: dict | None = None |
| 34 | ) -> list[float]: |
| 35 | """ |
| 36 | Get embedding for the provided text using the specified provider and model. |
| 37 | |
| 38 | Args: |
| 39 | text: The text to embed |
| 40 | provider: Optional provider name, defaults to preferred_embedding_provider |
| 41 | model: Optional model name, defaults to the provider's configured model |
| 42 | timeout: Maximum time to wait for embedding response in seconds |
| 43 | query_params: Optional query parameters from HTTP request |
| 44 | |
| 45 | Returns: |
| 46 | List of floats representing the embedding vector |
| 47 | """ |
| 48 | # Allow overriding provider in development mode |
| 49 | if CONFIG.is_development_mode() and query_params and 'embedding_provider' in query_params: |
| 50 | provider = query_params['embedding_provider'] |
| 51 | logger.debug(f"Overriding embedding provider to: {provider}") |
| 52 | |
| 53 | provider = provider or CONFIG.preferred_embedding_provider |
| 54 | |
| 55 | # Truncate text to 20k characters to avoid token limit issues |
| 56 | MAX_CHARS = 20000 |
| 57 | original_length = len(text) |
| 58 | if original_length > MAX_CHARS: |
| 59 | text = text[:MAX_CHARS] |
| 60 | logger.warning(f"Truncated text from {original_length} to {MAX_CHARS} characters for embedding generation") |
| 61 | |
| 62 | logger.debug(f"Getting embedding with provider: {provider}") |
| 63 | logger.debug(f"Text length: {len(text)} chars") |
| 64 | |
| 65 | if provider not in CONFIG.embedding_providers: |
| 66 | error_msg = f"Unknown embedding provider '{provider}'" |
| 67 | logger.error(error_msg) |
| 68 | raise ValueError(error_msg) |
| 69 | |
| 70 | # Get provider config using the helper method |
| 71 | provider_config = CONFIG.get_embedding_provider(provider) |
| 72 | if not provider_config: |
| 73 | error_msg = f"Missing configuration for embedding provider '{provider}'" |
| 74 | logger.error(error_msg) |
| 75 | raise ValueError(error_msg) |
| 76 | |
| 77 | # Use the provided model or fall back to the configured model |
| 78 | model_id = model or provider_config.model |
| 79 | if not model_id: |
| 80 | error_msg = f"No embedding model specified for provider '{provider}'" |
| 81 | logger.error(error_msg) |
| 82 | raise ValueError(error_msg) |
| 83 | |
| 84 | logger.debug(f"Using embedding model: {model_id}") |
| 85 |
no test coverage detected