Spaces:
Paused
Paused
File size: 1,827 Bytes
0017280 35a8be0 0017280 35a8be0 0017280 83087ed 0017280 106354e 83087ed 0017280 68a6539 fbd18c8 f95cdb7 68a6539 0017280 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | """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)
|