Spaces:
Sleeping
Sleeping
| from llama_index.core.llms import LLM | |
| from rag.config import MAX_ANSWER_TOKENS, PROVIDERS | |
| def make_llm(provider: str, api_key: str, model: str, **kwargs) -> LLM: | |
| """Build an LLM client for a single request. | |
| Args: | |
| provider: a slug from `config.PROVIDERS` ("openai" | "gemini" | "anthropic"). | |
| api_key: the key the user pasted into the UI. | |
| model: a model ID, one of the provider's `models`. | |
| **kwargs: passed through to the underlying LlamaIndex class. | |
| Raises: | |
| ValueError: unknown provider, or a blank API key. | |
| """ | |
| spec = PROVIDERS.get(provider) | |
| if spec is None: | |
| raise ValueError( | |
| f"Unknown provider {provider!r}. Expected one of: {', '.join(PROVIDERS)}" | |
| ) | |
| api_key = (api_key or "").strip() | |
| if not api_key: | |
| raise ValueError(f"No API key provided. Please paste your {spec.key_label}.") | |
| # We leave temperature at each provider's default, because the gpt-5 family | |
| # rejects any value other than 1. | |
| kwargs.setdefault("max_tokens", MAX_ANSWER_TOKENS) | |
| if provider == "openai": | |
| from llama_index.llms.openai import OpenAI | |
| return OpenAI(model=model, api_key=api_key, **kwargs) | |
| if provider == "gemini": | |
| from llama_index.llms.google_genai import GoogleGenAI | |
| return GoogleGenAI(model=model, api_key=api_key, **kwargs) | |
| if provider == "anthropic": | |
| from llama_index.llms.anthropic import Anthropic | |
| return Anthropic(model=model, api_key=api_key, **kwargs) | |
| raise ValueError(f"Provider {provider!r} is configured but not implemented.") | |