"""Resolve OpenAI-compatible API key and base URL per role (master, worker, judge).""" from __future__ import annotations import os from typing import Any, Dict, Optional def _first(*values: Optional[str]) -> Optional[str]: for v in values: if v is not None and str(v).strip() != "": return str(v).strip() return None def openai_client_kwargs_master() -> Dict[str, Any]: """Credentials for the master model (inference loop).""" api_key = _first( os.getenv("CORP_MASTER_API_KEY"), os.getenv("HF_TOKEN"), os.getenv("OPENAI_API_KEY"), os.getenv("API_KEY"), ) base_url = _first( os.getenv("CORP_MASTER_BASE_URL"), os.getenv("API_BASE_URL"), os.getenv("OPENAI_BASE_URL"), ) return _kwargs(api_key, base_url) def openai_client_kwargs_worker(canonical_agent_id: str) -> Dict[str, Any]: """ Credentials for a frozen worker (dev_agent, hr_agent, finance_agent). Per-agent overrides use uppercase id with hyphens as underscores, e.g.: CORP_WORKER_DEV_AGENT_API_KEY, CORP_WORKER_DEV_AGENT_BASE_URL """ suffix = canonical_agent_id.upper().replace("-", "_") api_key = _first( os.getenv(f"CORP_WORKER_{suffix}_API_KEY"), os.getenv("CORP_WORKER_DEFAULT_API_KEY"), os.getenv("OPENAI_API_KEY"), os.getenv("HF_TOKEN"), os.getenv("API_KEY"), ) base_url = _first( os.getenv(f"CORP_WORKER_{suffix}_BASE_URL"), os.getenv("CORP_WORKER_DEFAULT_BASE_URL"), os.getenv("API_BASE_URL"), os.getenv("OPENAI_BASE_URL"), ) return _kwargs(api_key, base_url) def openai_client_kwargs_judge() -> Dict[str, Any]: """Credentials for the optional LLM judge (reward).""" api_key = _first( os.getenv("CORP_JUDGE_API_KEY"), os.getenv("OPENAI_API_KEY"), os.getenv("HF_TOKEN"), os.getenv("API_KEY"), ) base_url = _first( os.getenv("CORP_JUDGE_BASE_URL"), os.getenv("API_BASE_URL"), os.getenv("OPENAI_BASE_URL"), ) return _kwargs(api_key, base_url) def _kwargs(api_key: Optional[str], base_url: Optional[str]) -> Dict[str, Any]: out: Dict[str, Any] = {} if api_key: out["api_key"] = api_key if base_url: out["base_url"] = base_url return out def worker_model_for(canonical_agent_id: str) -> str: suffix = canonical_agent_id.upper().replace("-", "_") return _first( os.getenv(f"CORP_WORKER_{suffix}_MODEL"), os.getenv("CORP_WORKER_DEFAULT_MODEL"), os.getenv("CORP_WORKER_MODEL"), os.getenv("MODEL_NAME"), ) or "Qwen/Qwen2.5-7B-Instruct"