From f42a44817a0aab79ea962795939a940be1087f71 Mon Sep 17 00:00:00 2001 From: "Victor M. SMITH" <72023257+MVS-source@users.noreply.github.com> Date: Thu, 9 Jul 2026 16:39:17 +0200 Subject: [PATCH] feat(providers): add Eden AI as an OpenAI-compatible gateway provider Eden AI (https://www.edenai.co) is an EU-hosted, OpenAI-compatible gateway exposing 100+ models from many providers through a single endpoint and API key. Models use the provider/model naming scheme (the full id is sent upstream, like OpenRouter). Adds it following the registry's documented two-step recipe: - a ProviderSpec in providers/registry.py (backend openai_compat, gateway, default_api_base https://api.edenai.run/v3, EDENAI_API_KEY, reasoning_effort) - the matching field in ProvidersConfig (config/schema.py) API key via EDENAI_API_KEY only; never hardcoded. Signed-off-by: Victor M. SMITH <72023257+MVS-source@users.noreply.github.com> --- nanobot/config/schema.py | 1 + nanobot/providers/registry.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) 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.