diff --git a/nanobot/config/schema.py b/nanobot/config/schema.py index 521c583dc..098b93efe 100644 --- a/nanobot/config/schema.py +++ b/nanobot/config/schema.py @@ -269,6 +269,7 @@ class ProvidersConfig(Base): ant_ling: ProviderConfig = Field(default_factory=ProviderConfig) # Ant Ling aihubmix: ProviderConfig = Field(default_factory=ProviderConfig) # AiHubMix API gateway siliconflow: ProviderConfig = Field(default_factory=ProviderConfig) # SiliconFlow (硅基流动) + edenai: ProviderConfig = Field(default_factory=ProviderConfig) # Eden AI API gateway (EU, OpenAI-compatible) novita: ProviderConfig = Field(default_factory=ProviderConfig) # Novita AI volcengine: ProviderConfig = Field(default_factory=ProviderConfig) # VolcEngine (火山引擎) volcengine_coding_plan: ProviderConfig = Field(default_factory=ProviderConfig) # VolcEngine Coding Plan diff --git a/nanobot/providers/registry.py b/nanobot/providers/registry.py index f46b54f90..4e96ea416 100644 --- a/nanobot/providers/registry.py +++ b/nanobot/providers/registry.py @@ -196,6 +196,19 @@ PROVIDERS: tuple[ProviderSpec, ...] = ( supports_prompt_caching=True, gateway_reasoning_style="reasoning_effort", ), + # Eden AI: EU-hosted, OpenAI-compatible gateway. Models use the "provider/model" + # naming scheme (e.g. "anthropic/claude-sonnet-4-5"); the full id is sent upstream. + ProviderSpec( + name="edenai", + keywords=("edenai", "eden"), + env_key="EDENAI_API_KEY", + display_name="Eden AI", + backend="openai_compat", + is_gateway=True, + detect_by_base_keyword="edenai", + default_api_base="https://api.edenai.run/v3", + gateway_reasoning_style="reasoning_effort", + ), # OpenCode Zen: OpenAI-compatible chat-completions gateway for coding models. # models.dev/OpenCode use provider id "opencode" and model ids like # "opencode/"; send the bare model upstream.