refactor: remove redundant 'openai' auxiliary provider, clean up docs
The 'openai' provider was redundant — using OPENAI_BASE_URL + OPENAI_API_KEY with provider: 'main' already covers direct OpenAI API. Provider options are now: auto, openrouter, nous, codex, main. - Removed _try_openai(), _OPENAI_AUX_MODEL, _OPENAI_BASE_URL - Replaced openai tests with codex provider tests - Updated all docs to remove 'openai' option and clarify 'main' - 'main' description now explicitly mentions it works with OpenAI API, local models, and any OpenAI-compatible endpoint Tests: 2467 passed.
This commit is contained in:
parent
71e81728ac
commit
2d1a1c1c47
5 changed files with 34 additions and 59 deletions
|
|
@ -21,7 +21,7 @@ Resolution order for vision/multimodal tasks (auto mode):
|
|||
|
||||
Per-task provider overrides (e.g. AUXILIARY_VISION_PROVIDER,
|
||||
CONTEXT_COMPRESSION_PROVIDER) can force a specific provider for each task:
|
||||
"openrouter", "nous", "openai", or "main" (= steps 3-5).
|
||||
"openrouter", "nous", "codex", or "main" (= steps 3-5).
|
||||
Default "auto" follows the chains above.
|
||||
|
||||
Per-task model overrides (e.g. AUXILIARY_VISION_MODEL,
|
||||
|
|
@ -71,11 +71,6 @@ _NOUS_MODEL = "gemini-3-flash"
|
|||
_NOUS_DEFAULT_BASE_URL = "https://inference-api.nousresearch.com/v1"
|
||||
_AUTH_JSON_PATH = Path.home() / ".hermes" / "auth.json"
|
||||
|
||||
# OpenAI direct: uses OPENAI_API_KEY with the official API endpoint.
|
||||
# gpt-4o-mini is cheap/fast and supports vision — good default for auxiliary tasks.
|
||||
_OPENAI_AUX_MODEL = "gpt-4o-mini"
|
||||
_OPENAI_BASE_URL = "https://api.openai.com/v1"
|
||||
|
||||
# Codex fallback: uses the Responses API (the only endpoint the Codex
|
||||
# OAuth token can access) with a fast model for auxiliary tasks.
|
||||
_CODEX_AUX_MODEL = "gpt-5.3-codex"
|
||||
|
|
@ -440,15 +435,6 @@ def _try_nous() -> Tuple[Optional[OpenAI], Optional[str]]:
|
|||
)
|
||||
|
||||
|
||||
def _try_openai() -> Tuple[Optional[OpenAI], Optional[str]]:
|
||||
"""Try OpenAI direct API (api.openai.com) using OPENAI_API_KEY."""
|
||||
api_key = os.getenv("OPENAI_API_KEY", "").strip()
|
||||
if not api_key:
|
||||
return None, None
|
||||
logger.debug("Auxiliary client: OpenAI direct (%s)", _OPENAI_AUX_MODEL)
|
||||
return OpenAI(api_key=api_key, base_url=_OPENAI_BASE_URL), _OPENAI_AUX_MODEL
|
||||
|
||||
|
||||
def _try_custom_endpoint() -> Tuple[Optional[OpenAI], Optional[str]]:
|
||||
custom_base = os.getenv("OPENAI_BASE_URL")
|
||||
custom_key = os.getenv("OPENAI_API_KEY")
|
||||
|
|
@ -482,12 +468,6 @@ def _resolve_forced_provider(forced: str) -> Tuple[Optional[OpenAI], Optional[st
|
|||
logger.warning("auxiliary.provider=nous but Nous Portal not configured (run: hermes login)")
|
||||
return client, model
|
||||
|
||||
if forced == "openai":
|
||||
client, model = _try_openai()
|
||||
if client is None:
|
||||
logger.warning("auxiliary.provider=openai but OPENAI_API_KEY not set")
|
||||
return client, model
|
||||
|
||||
if forced == "codex":
|
||||
client, model = _try_codex()
|
||||
if client is None:
|
||||
|
|
@ -606,10 +586,6 @@ def auxiliary_max_tokens_param(value: int) -> dict:
|
|||
The Codex adapter translates max_tokens internally, so we use max_tokens
|
||||
for it as well.
|
||||
"""
|
||||
# Check if any auxiliary task is explicitly forced to "openai"
|
||||
for task in ("vision", "web_extract", "compression"):
|
||||
if _get_auxiliary_provider(task) == "openai":
|
||||
return {"max_completion_tokens": value}
|
||||
custom_base = os.getenv("OPENAI_BASE_URL", "")
|
||||
or_key = os.getenv("OPENROUTER_API_KEY")
|
||||
# Only use max_completion_tokens for direct OpenAI custom endpoints
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue