From c1dc8d3f554a4f299aec01d26f04cd91c89c68ec Mon Sep 17 00:00:00 2001 From: pinhua33 Date: Sun, 8 Feb 2026 16:33:46 +0800 Subject: [PATCH] fix: integrate OpenAI Codex provider with new registry system - Add OpenAI Codex ProviderSpec to registry.py - Add openai_codex config field to ProvidersConfig in schema.py - Mark Codex as OAuth-based (no API key required) - Set appropriate default_api_base for Codex API This integrates the Codex OAuth provider with the refactored provider registry system introduced in upstream commit 299d8b3. --- nanobot/config/schema.py | 1 + nanobot/providers/registry.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/nanobot/config/schema.py b/nanobot/config/schema.py index ea8f8ba..1707797 100644 --- a/nanobot/config/schema.py +++ b/nanobot/config/schema.py @@ -81,6 +81,7 @@ class ProvidersConfig(BaseModel): gemini: ProviderConfig = Field(default_factory=ProviderConfig) moonshot: ProviderConfig = Field(default_factory=ProviderConfig) aihubmix: ProviderConfig = Field(default_factory=ProviderConfig) # AiHubMix API gateway + openai_codex: ProviderConfig = Field(default_factory=ProviderConfig) # OpenAI Codex (OAuth) # AiHubMix API gateway class GatewayConfig(BaseModel): diff --git a/nanobot/providers/registry.py b/nanobot/providers/registry.py index aa4a76e..d7226e7 100644 --- a/nanobot/providers/registry.py +++ b/nanobot/providers/registry.py @@ -141,6 +141,24 @@ PROVIDERS: tuple[ProviderSpec, ...] = ( model_overrides=(), ), + # OpenAI Codex: uses OAuth, not API key. + ProviderSpec( + name="openai_codex", + keywords=("openai-codex", "codex"), + env_key="", # OAuth-based, no API key + display_name="OpenAI Codex", + litellm_prefix="", # Not routed through LiteLLM + skip_prefixes=(), + env_extras=(), + is_gateway=False, + is_local=False, + detect_by_key_prefix="", + detect_by_base_keyword="codex", + default_api_base="https://chatgpt.com/backend-api", + strip_model_prefix=False, + model_overrides=(), + ), + # DeepSeek: needs "deepseek/" prefix for LiteLLM routing. ProviderSpec( name="deepseek",