rust-docs-assistant / rag /providers.py
pppp24
rust docs RAG pipeline, eval suite, and data ingestion
005e9fd
Raw
History Blame Contribute Delete
1.61 kB
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.")