feat(config): named LLM provider list via env vars, runtime selection
- Config.llm_profiles: LLM_PROVIDERS declares names, each group defined by LLM_<NAME>_BASE_URL/_API_KEY/_MODEL (required) and optional _TIMEOUT_SECONDS/ _MAX_RETRIES/_TEMPERATURE/_EXTRA_BODY; JSON-dict form of LLM_PROVIDERS also supported. LLM_PROVIDER selects the active group at runtime; empty/fake = offline scripted model - removed fixed openai/kimi groups (AGENT_LLM_PROVIDER, KIMI_LLM_*) - validate(): incomplete groups and unknown LLM_PROVIDER fail fast with the configured-name list - OpenAILLMService: http client trust_env from LLM_HTTP_TRUST_ENV (default False - local gateways must bypass the Windows system proxy) - build_llm_service(provider): explicit name or LLM_PROVIDER default - .env/.env.example: deepseek + kimi groups side by side, switch by LLM_PROVIDER=kimi (thinking off via EXTRA_BODY reasoning_effort=none) - eval probe scripts updated to the new config interface Verified: 172 unit tests; live calls succeed on both providers (deepseek 28s, kimi 6.6s, both emitting valid <state> prefixes)
This commit is contained in:
@@ -39,13 +39,13 @@ def main():
|
||||
path = args.prompt_dir / (name+'.md')
|
||||
return path.read_text(encoding='utf-8') if path.exists() else original_loader(name)
|
||||
registry.load_prompt = snapshot_loader
|
||||
if Config.AGENT_BACKEND != 'langgraph' or Config.AGENT_LLM_PROVIDER != 'openai':
|
||||
if Config.AGENT_BACKEND != 'langgraph' or not Config.LLM_PROVIDER or Config.LLM_PROVIDER == 'fake':
|
||||
raise SystemExit('Requires langgraph backend and real openai provider')
|
||||
args.output_dir.mkdir(parents=True, exist_ok=True)
|
||||
cases = load_cases(DEFAULT_CASES_DIR, args.case)
|
||||
from src.agent.prompts import load_prompt
|
||||
metadata = {
|
||||
'model': Config.LLM_MODEL, 'temperature': Config.LLM_TEMPERATURE,
|
||||
**{k: v for k, v in (Config.llm_profile(Config.LLM_PROVIDER) or {}).items() if k in ('model', 'temperature')},
|
||||
'backend': Config.AGENT_BACKEND, 'workers': args.workers,
|
||||
'commit': subprocess.check_output(['git', 'rev-parse', 'HEAD'], text=True).strip(),
|
||||
'case_hashes': {str(p.relative_to(DEFAULT_CASES_DIR)): sha256(p.read_bytes()).hexdigest()
|
||||
|
||||
Reference in New Issue
Block a user