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)