fix: route OpenRouter-only providers through OpenRouter API (#38)
Providers without their own public API now use OpenRouter as their base_url with OPENROUTER_API_KEY, making them testable and usable when the user has an OpenRouter key configured. - 20 OpenRouter-only providers: set base_url to openrouter.ai/api/v1 - morph: set correct official API (api.morphllm.com/v1) - sync-pricing.py: default to OpenRouter routing for new providers
This commit is contained in:
21 files changed
+66
-67
No files matched your search
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "aion-labs"
|
id = "aion-labs"
|
||||||
display_name = "Aion Labs"
|
display_name = "Aion Labs"
|
||||||
api_key_env = "AION_LABS_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "aion-1.0"
|
id = "aion-1.0"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "allenai"
|
id = "allenai"
|
||||||
display_name = "Allenai"
|
display_name = "Allenai"
|
||||||
api_key_env = "ALLENAI_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "olmo-2-0325-32b-instruct"
|
id = "olmo-2-0325-32b-instruct"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "deepcogito"
|
id = "deepcogito"
|
||||||
display_name = "Deepcogito"
|
display_name = "Deepcogito"
|
||||||
api_key_env = "DEEPCOGITO_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "cogito-v2.1-671b"
|
id = "cogito-v2.1-671b"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "eleutherai"
|
id = "eleutherai"
|
||||||
display_name = "Eleutherai"
|
display_name = "Eleutherai"
|
||||||
api_key_env = "ELEUTHERAI_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "llemma_7b"
|
id = "llemma_7b"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "essentialai"
|
id = "essentialai"
|
||||||
display_name = "Essentialai"
|
display_name = "Essentialai"
|
||||||
api_key_env = "ESSENTIALAI_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "rnj-1-instruct"
|
id = "rnj-1-instruct"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "ibm-granite"
|
id = "ibm-granite"
|
||||||
display_name = "Ibm Granite"
|
display_name = "Ibm Granite"
|
||||||
api_key_env = "IBM_GRANITE_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "granite-4.0-h-micro"
|
id = "granite-4.0-h-micro"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "inflection"
|
id = "inflection"
|
||||||
display_name = "Inflection"
|
display_name = "Inflection"
|
||||||
api_key_env = "INFLECTION_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "inflection-3-pi"
|
id = "inflection-3-pi"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "kwaipilot"
|
id = "kwaipilot"
|
||||||
display_name = "Kwaipilot"
|
display_name = "Kwaipilot"
|
||||||
api_key_env = "KWAIPILOT_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "kat-coder-pro"
|
id = "kat-coder-pro"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "liquid"
|
id = "liquid"
|
||||||
display_name = "Liquid"
|
display_name = "Liquid"
|
||||||
api_key_env = "LIQUID_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "lfm-2-24b-a2b"
|
id = "lfm-2-24b-a2b"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "meituan"
|
id = "meituan"
|
||||||
display_name = "Meituan"
|
display_name = "Meituan"
|
||||||
api_key_env = "MEITUAN_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "longcat-flash-chat"
|
id = "longcat-flash-chat"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "meta-llama"
|
id = "meta-llama"
|
||||||
display_name = "Meta Llama"
|
display_name = "Meta Llama"
|
||||||
api_key_env = "META_LLAMA_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "llama-3-70b-instruct"
|
id = "llama-3-70b-instruct"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "microsoft"
|
id = "microsoft"
|
||||||
display_name = "Microsoft"
|
display_name = "Microsoft"
|
||||||
api_key_env = "MICROSOFT_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "phi-4"
|
id = "phi-4"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "nex-agi"
|
id = "nex-agi"
|
||||||
display_name = "Nex Agi"
|
display_name = "Nex Agi"
|
||||||
api_key_env = "NEX_AGI_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "deepseek-v3.1-nex-n1"
|
id = "deepseek-v3.1-nex-n1"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "nousresearch"
|
id = "nousresearch"
|
||||||
display_name = "Nousresearch"
|
display_name = "Nousresearch"
|
||||||
api_key_env = "NOUSRESEARCH_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "hermes-2-pro-llama-3-8b"
|
id = "hermes-2-pro-llama-3-8b"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "prime-intellect"
|
id = "prime-intellect"
|
||||||
display_name = "Prime Intellect"
|
display_name = "Prime Intellect"
|
||||||
api_key_env = "PRIME_INTELLECT_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "intellect-3"
|
id = "intellect-3"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "relace"
|
id = "relace"
|
||||||
display_name = "Relace"
|
display_name = "Relace"
|
||||||
api_key_env = "RELACE_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "relace-apply-3"
|
id = "relace-apply-3"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "switchpoint"
|
id = "switchpoint"
|
||||||
display_name = "Switchpoint"
|
display_name = "Switchpoint"
|
||||||
api_key_env = "SWITCHPOINT_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "router"
|
id = "router"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "tencent"
|
id = "tencent"
|
||||||
display_name = "Tencent"
|
display_name = "Tencent"
|
||||||
api_key_env = "TENCENT_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "hunyuan-a13b-instruct"
|
id = "hunyuan-a13b-instruct"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "tngtech"
|
id = "tngtech"
|
||||||
display_name = "Tngtech"
|
display_name = "Tngtech"
|
||||||
api_key_env = "TNGTECH_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "deepseek-r1t2-chimera"
|
id = "deepseek-r1t2-chimera"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
[provider]
|
[provider]
|
||||||
id = "xiaomi"
|
id = "xiaomi"
|
||||||
display_name = "Xiaomi"
|
display_name = "Xiaomi"
|
||||||
api_key_env = "XIAOMI_API_KEY"
|
api_key_env = "OPENROUTER_API_KEY"
|
||||||
base_url = ""
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
key_required = false
|
key_required = true
|
||||||
|
|
||||||
[[models]]
|
[[models]]
|
||||||
id = "mimo-v2-flash"
|
id = "mimo-v2-flash"
|
||||||
|
|||||||
@@ -47,11 +47,11 @@ SKIP_DUPLICATES = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Providers with known public APIs — set their official base_url + api_key_env.
|
# Providers with known public APIs — set their official base_url + api_key_env.
|
||||||
# Providers NOT in this map are OpenRouter-only and get key_required = false.
|
# Providers NOT in this map route through OpenRouter.
|
||||||
PROVIDER_API = {
|
PROVIDER_API = {
|
||||||
"arcee-ai": ("https://api.arcee.ai/v1", "ARCEE_API_KEY"),
|
"arcee-ai": ("https://api.arcee.ai/v1", "ARCEE_API_KEY"),
|
||||||
"inception": ("https://api.inceptionlabs.ai/v1", "INCEPTION_API_KEY"),
|
"inception": ("https://api.inceptionlabs.ai/v1", "INCEPTION_API_KEY"),
|
||||||
"morph": ("https://api.morphlabs.io/v1", "MORPH_API_KEY"),
|
"morph": ("https://api.morphllm.com/v1", "MORPH_API_KEY"),
|
||||||
"nvidia": ("https://integrate.api.nvidia.com/v1", "NVIDIA_API_KEY"),
|
"nvidia": ("https://integrate.api.nvidia.com/v1", "NVIDIA_API_KEY"),
|
||||||
"reka": ("https://api.reka.ai/v1", "REKA_API_KEY"),
|
"reka": ("https://api.reka.ai/v1", "REKA_API_KEY"),
|
||||||
"upstage": ("https://api.upstage.ai/v1", "UPSTAGE_API_KEY"),
|
"upstage": ("https://api.upstage.ai/v1", "UPSTAGE_API_KEY"),
|
||||||
@@ -146,12 +146,11 @@ def generate_provider_toml(provider_id, models, dry_run=False):
|
|||||||
# Check if provider has a known public API
|
# Check if provider has a known public API
|
||||||
if our_name in PROVIDER_API:
|
if our_name in PROVIDER_API:
|
||||||
base_url, env_key = PROVIDER_API[our_name]
|
base_url, env_key = PROVIDER_API[our_name]
|
||||||
key_required = "true"
|
|
||||||
else:
|
else:
|
||||||
# No known public API — only accessible via OpenRouter/hosting providers
|
# No known public API — route through OpenRouter
|
||||||
env_key = our_name.upper().replace("-", "_") + "_API_KEY"
|
base_url = "https://openrouter.ai/api/v1"
|
||||||
base_url = ""
|
env_key = "OPENROUTER_API_KEY"
|
||||||
key_required = "false"
|
key_required = "true"
|
||||||
|
|
||||||
lines = [
|
lines = [
|
||||||
f'# {provider_id} — auto-generated from OpenRouter API',
|
f'# {provider_id} — auto-generated from OpenRouter API',
|
||||||
|
|||||||
Reference in new issue
Block a user