PERI-AI-dev / src /llm /__init__.py
Nelly-43's picture
Update src/llm/__init__.py
35a8be0 verified
Raw History Blame Contribute Delete
1.83 kB
"""LLM provider registry."""
from src.llm import openai as _openai
from src.llm import anthropic as _anthropic
from src.llm import gemini as _gemini
from src.llm import hugging_face as hf
from src.config_loader import get_api_key
PROVIDERS = {
"openai": _openai,
"anthropic": _anthropic,
"gemini": _gemini,
"hugging-face": hf,
}
def generate(system_prompt: str, user_message: str, cfg: dict,
provider: str = None, max_tokens: int = None) -> str:
llm_cfg = cfg.get("llm", {})
provider = provider or llm_cfg.get("provider", "openai")
if provider not in PROVIDERS:
raise ValueError(f"Unknown provider: {provider}. Available: {list(PROVIDERS.keys())}")
api_key = get_api_key(cfg, provider)
if not api_key:
raise ValueError(f"API key not set for {provider}. Set it in .env or config.yaml.")
model = llm_cfg.get("model") or None
temperature = llm_cfg.get("temperature", 0.0)
if max_tokens is None:
max_tokens = llm_cfg.get("max_tokens", 8192)
# Validate parameters
try:
temperature = max(0.0, min(float(temperature), 2.0))
except (ValueError, TypeError):
temperature = 0.0
# Anthropic max temperature is 1.0
if provider == "anthropic":
temperature = min(temperature, 1.0)
try:
max_tokens = max(1, min(int(max_tokens), 128000))
except (ValueError, TypeError):
max_tokens = 8192
return PROVIDERS[provider].generate(
system_prompt=system_prompt, user_message=user_message,
api_key=api_key, model=model, temperature=temperature, max_tokens=max_tokens,
)
def list_models(provider: str, api_key: str) -> list[str]:
if provider not in PROVIDERS:
raise ValueError(f"Unknown provider: {provider}")
return PROVIDERS[provider].list_models(api_key)