From 150055ce5c4147fe77d8344132f36be5bca7ffeb Mon Sep 17 00:00:00 2001 From: Evan Hu Date: Fri, 3 Apr 2026 00:22:57 +0900 Subject: [PATCH] fix: clean up OpenRouter-generated provider configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Merge unique models from duplicate providers into their hand-written counterparts and remove the duplicates: - alibaba (tongyi-deepresearch) → qwen - amazon (nova-2-lite, nova-micro, nova-premier) → bedrock - bytedance (ui-tars) → volcengine - nvidia (nemotron-3-nano, nemotron-3-super, etc.) → nvidia-nim - rekaai (reka-flash-3) → reka - Set correct official API base_url for providers with public APIs: arcee-ai, inception, morph, reka, upstage - Set key_required=false for 20 providers only accessible through hosting platforms (no public API) - Update sync-pricing.py with SKIP_DUPLICATES, PROVIDER_API mapping, and default key_required=false for future auto-generated providers --- providers/aion-labs.toml | 2 +- providers/alibaba.toml | 18 ----- providers/allenai.toml | 2 +- providers/amazon.toml | 58 ---------------- providers/arcee-ai.toml | 4 +- providers/bedrock.toml | 30 +++++++++ providers/bytedance.toml | 18 ----- providers/deepcogito.toml | 2 +- providers/eleutherai.toml | 2 +- providers/essentialai.toml | 2 +- providers/ibm-granite.toml | 2 +- providers/inception.toml | 2 +- providers/inflection.toml | 2 +- providers/kwaipilot.toml | 2 +- providers/liquid.toml | 2 +- providers/meituan.toml | 2 +- providers/meta-llama.toml | 2 +- providers/microsoft.toml | 2 +- providers/morph.toml | 2 +- providers/nex-agi.toml | 2 +- providers/nousresearch.toml | 2 +- providers/nvidia-nim.toml | 41 ++++++++++++ providers/nvidia.toml | 118 --------------------------------- providers/prime-intellect.toml | 2 +- providers/qwen.toml | 10 +++ providers/reka.toml | 12 +++- providers/rekaai.toml | 18 ----- providers/relace.toml | 2 +- providers/switchpoint.toml | 2 +- providers/tencent.toml | 2 +- providers/tngtech.toml | 2 +- providers/upstage.toml | 2 +- providers/volcengine.toml | 10 +++ providers/xiaomi.toml | 2 +- scripts/sync-pricing.py | 39 +++++++++-- 35 files changed, 162 insertions(+), 260 deletions(-) delete mode 100644 providers/alibaba.toml delete mode 100644 providers/amazon.toml delete mode 100644 providers/bytedance.toml delete mode 100644 providers/nvidia.toml delete mode 100644 providers/rekaai.toml diff --git a/providers/aion-labs.toml b/providers/aion-labs.toml index 8503f93..3f16a43 100644 --- a/providers/aion-labs.toml +++ b/providers/aion-labs.toml @@ -5,7 +5,7 @@ id = "aion-labs" display_name = "Aion Labs" api_key_env = "AION_LABS_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "aion-1.0" diff --git a/providers/alibaba.toml b/providers/alibaba.toml deleted file mode 100644 index e48a1c4..0000000 --- a/providers/alibaba.toml +++ /dev/null @@ -1,18 +0,0 @@ -# alibaba — auto-generated from OpenRouter API - -[provider] -id = "alibaba" -display_name = "Alibaba" -api_key_env = "ALIBABA_API_KEY" -base_url = "" -key_required = true - -[[models]] -id = "tongyi-deepresearch-30b-a3b" -display_name = "Tongyi DeepResearch 30B A3B" -tier = "fast" -context_window = 131072 -max_output_tokens = 131072 -input_cost_per_m = 0.09 -output_cost_per_m = 0.45 -supports_streaming = true diff --git a/providers/allenai.toml b/providers/allenai.toml index 96efd3f..df5489e 100644 --- a/providers/allenai.toml +++ b/providers/allenai.toml @@ -5,7 +5,7 @@ id = "allenai" display_name = "Allenai" api_key_env = "ALLENAI_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "olmo-2-0325-32b-instruct" diff --git a/providers/amazon.toml b/providers/amazon.toml deleted file mode 100644 index f361e5a..0000000 --- a/providers/amazon.toml +++ /dev/null @@ -1,58 +0,0 @@ -# amazon — auto-generated from OpenRouter API - -[provider] -id = "amazon" -display_name = "Amazon" -api_key_env = "AMAZON_API_KEY" -base_url = "" -key_required = true - -[[models]] -id = "nova-2-lite-v1" -display_name = "Amazon: Nova 2 Lite" -tier = "fast" -context_window = 1000000 -max_output_tokens = 65535 -input_cost_per_m = 0.3 -output_cost_per_m = 2.5 -supports_streaming = true - -[[models]] -id = "nova-lite-v1" -display_name = "Amazon: Nova Lite 1.0" -tier = "fast" -context_window = 300000 -max_output_tokens = 5120 -input_cost_per_m = 0.06 -output_cost_per_m = 0.24 -supports_streaming = true - -[[models]] -id = "nova-micro-v1" -display_name = "Amazon: Nova Micro 1.0" -tier = "fast" -context_window = 128000 -max_output_tokens = 5120 -input_cost_per_m = 0.035 -output_cost_per_m = 0.14 -supports_streaming = true - -[[models]] -id = "nova-premier-v1" -display_name = "Amazon: Nova Premier 1.0" -tier = "smart" -context_window = 1000000 -max_output_tokens = 32000 -input_cost_per_m = 2.5 -output_cost_per_m = 12.5 -supports_streaming = true - -[[models]] -id = "nova-pro-v1" -display_name = "Amazon: Nova Pro 1.0" -tier = "smart" -context_window = 300000 -max_output_tokens = 5120 -input_cost_per_m = 0.8 -output_cost_per_m = 3.2 -supports_streaming = true diff --git a/providers/arcee-ai.toml b/providers/arcee-ai.toml index 023df06..684cdd9 100644 --- a/providers/arcee-ai.toml +++ b/providers/arcee-ai.toml @@ -3,8 +3,8 @@ [provider] id = "arcee-ai" display_name = "Arcee Ai" -api_key_env = "ARCEE_AI_API_KEY" -base_url = "" +api_key_env = "ARCEE_API_KEY" +base_url = "https://api.arcee.ai/v1" key_required = true [[models]] diff --git a/providers/bedrock.toml b/providers/bedrock.toml index ab27b3d..9afe975 100644 --- a/providers/bedrock.toml +++ b/providers/bedrock.toml @@ -111,3 +111,33 @@ supports_tools = true supports_vision = false supports_streaming = true aliases = [] + +[[models]] +id = "bedrock/amazon.nova-2-lite-v1:0" +display_name = "Amazon: Nova 2 Lite" +tier = "fast" +context_window = 1000000 +max_output_tokens = 65535 +input_cost_per_m = 0.3 +output_cost_per_m = 2.5 +supports_streaming = true + +[[models]] +id = "bedrock/amazon.nova-micro-v1:0" +display_name = "Amazon: Nova Micro 1.0" +tier = "fast" +context_window = 128000 +max_output_tokens = 5120 +input_cost_per_m = 0.035 +output_cost_per_m = 0.14 +supports_streaming = true + +[[models]] +id = "bedrock/amazon.nova-premier-v1:0" +display_name = "Amazon: Nova Premier 1.0" +tier = "frontier" +context_window = 1000000 +max_output_tokens = 65535 +input_cost_per_m = 2.5 +output_cost_per_m = 12.5 +supports_streaming = true diff --git a/providers/bytedance.toml b/providers/bytedance.toml deleted file mode 100644 index 2f0e2b2..0000000 --- a/providers/bytedance.toml +++ /dev/null @@ -1,18 +0,0 @@ -# bytedance — auto-generated from OpenRouter API - -[provider] -id = "bytedance" -display_name = "Bytedance" -api_key_env = "BYTEDANCE_API_KEY" -base_url = "" -key_required = true - -[[models]] -id = "ui-tars-1.5-7b" -display_name = "ByteDance: UI-TARS 7B " -tier = "fast" -context_window = 128000 -max_output_tokens = 2048 -input_cost_per_m = 0.1 -output_cost_per_m = 0.2 -supports_streaming = true diff --git a/providers/deepcogito.toml b/providers/deepcogito.toml index b9f4731..ee8490f 100644 --- a/providers/deepcogito.toml +++ b/providers/deepcogito.toml @@ -5,7 +5,7 @@ id = "deepcogito" display_name = "Deepcogito" api_key_env = "DEEPCOGITO_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "cogito-v2.1-671b" diff --git a/providers/eleutherai.toml b/providers/eleutherai.toml index afd24ac..a57b9f8 100644 --- a/providers/eleutherai.toml +++ b/providers/eleutherai.toml @@ -5,7 +5,7 @@ id = "eleutherai" display_name = "Eleutherai" api_key_env = "ELEUTHERAI_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "llemma_7b" diff --git a/providers/essentialai.toml b/providers/essentialai.toml index 7672b6e..d9a9560 100644 --- a/providers/essentialai.toml +++ b/providers/essentialai.toml @@ -5,7 +5,7 @@ id = "essentialai" display_name = "Essentialai" api_key_env = "ESSENTIALAI_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "rnj-1-instruct" diff --git a/providers/ibm-granite.toml b/providers/ibm-granite.toml index 4bc6490..80223da 100644 --- a/providers/ibm-granite.toml +++ b/providers/ibm-granite.toml @@ -5,7 +5,7 @@ id = "ibm-granite" display_name = "Ibm Granite" api_key_env = "IBM_GRANITE_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "granite-4.0-h-micro" diff --git a/providers/inception.toml b/providers/inception.toml index 0c486f8..c8ae324 100644 --- a/providers/inception.toml +++ b/providers/inception.toml @@ -4,7 +4,7 @@ id = "inception" display_name = "Inception" api_key_env = "INCEPTION_API_KEY" -base_url = "" +base_url = "https://api.inceptionlabs.ai/v1" key_required = true [[models]] diff --git a/providers/inflection.toml b/providers/inflection.toml index 8ef3c6c..49c5e87 100644 --- a/providers/inflection.toml +++ b/providers/inflection.toml @@ -5,7 +5,7 @@ id = "inflection" display_name = "Inflection" api_key_env = "INFLECTION_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "inflection-3-pi" diff --git a/providers/kwaipilot.toml b/providers/kwaipilot.toml index 9560d4f..d13a68d 100644 --- a/providers/kwaipilot.toml +++ b/providers/kwaipilot.toml @@ -5,7 +5,7 @@ id = "kwaipilot" display_name = "Kwaipilot" api_key_env = "KWAIPILOT_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "kat-coder-pro" diff --git a/providers/liquid.toml b/providers/liquid.toml index 3e820c3..40fe700 100644 --- a/providers/liquid.toml +++ b/providers/liquid.toml @@ -5,7 +5,7 @@ id = "liquid" display_name = "Liquid" api_key_env = "LIQUID_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "lfm-2-24b-a2b" diff --git a/providers/meituan.toml b/providers/meituan.toml index 5520f78..b5ea70d 100644 --- a/providers/meituan.toml +++ b/providers/meituan.toml @@ -5,7 +5,7 @@ id = "meituan" display_name = "Meituan" api_key_env = "MEITUAN_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "longcat-flash-chat" diff --git a/providers/meta-llama.toml b/providers/meta-llama.toml index 6255537..b6f6109 100644 --- a/providers/meta-llama.toml +++ b/providers/meta-llama.toml @@ -5,7 +5,7 @@ id = "meta-llama" display_name = "Meta Llama" api_key_env = "META_LLAMA_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "llama-3-70b-instruct" diff --git a/providers/microsoft.toml b/providers/microsoft.toml index 0176c29..f43228e 100644 --- a/providers/microsoft.toml +++ b/providers/microsoft.toml @@ -5,7 +5,7 @@ id = "microsoft" display_name = "Microsoft" api_key_env = "MICROSOFT_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "phi-4" diff --git a/providers/morph.toml b/providers/morph.toml index f6d24ff..8e75334 100644 --- a/providers/morph.toml +++ b/providers/morph.toml @@ -4,7 +4,7 @@ id = "morph" display_name = "Morph" api_key_env = "MORPH_API_KEY" -base_url = "" +base_url = "https://api.morphlabs.io/v1" key_required = true [[models]] diff --git a/providers/nex-agi.toml b/providers/nex-agi.toml index 488622d..0ef4508 100644 --- a/providers/nex-agi.toml +++ b/providers/nex-agi.toml @@ -5,7 +5,7 @@ id = "nex-agi" display_name = "Nex Agi" api_key_env = "NEX_AGI_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "deepseek-v3.1-nex-n1" diff --git a/providers/nousresearch.toml b/providers/nousresearch.toml index 6f785da..6d20c7e 100644 --- a/providers/nousresearch.toml +++ b/providers/nousresearch.toml @@ -5,7 +5,7 @@ id = "nousresearch" display_name = "Nousresearch" api_key_env = "NOUSRESEARCH_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "hermes-2-pro-llama-3-8b" diff --git a/providers/nvidia-nim.toml b/providers/nvidia-nim.toml index 3b2059d..234b19a 100644 --- a/providers/nvidia-nim.toml +++ b/providers/nvidia-nim.toml @@ -307,3 +307,44 @@ supports_tools = true supports_vision = false supports_streaming = true aliases = ["phi-4-mini"] + +[[models]] +id = "nvidia/nemotron-3-nano-30b-a3b" +display_name = "Nvidia: Nemotron 3 Nano 30B" +tier = "fast" +context_window = 131072 +max_output_tokens = 32768 +input_cost_per_m = 0.0 +output_cost_per_m = 0.0 +supports_streaming = true + +[[models]] +id = "nvidia/nemotron-3-super-120b-a12b" +display_name = "Nvidia: Nemotron 3 Super 120B" +tier = "smart" +context_window = 131072 +max_output_tokens = 32768 +input_cost_per_m = 0.0 +output_cost_per_m = 0.0 +supports_streaming = true + +[[models]] +id = "nvidia/nemotron-nano-12b-v2-vl" +display_name = "Nvidia: Nemotron Nano 12B V2 VL" +tier = "fast" +context_window = 131072 +max_output_tokens = 32768 +input_cost_per_m = 0.0 +output_cost_per_m = 0.0 +supports_vision = true +supports_streaming = true + +[[models]] +id = "nvidia/nemotron-nano-9b-v2" +display_name = "Nvidia: Nemotron Nano 9B V2" +tier = "fast" +context_window = 131072 +max_output_tokens = 32768 +input_cost_per_m = 0.0 +output_cost_per_m = 0.0 +supports_streaming = true diff --git a/providers/nvidia.toml b/providers/nvidia.toml deleted file mode 100644 index af61017..0000000 --- a/providers/nvidia.toml +++ /dev/null @@ -1,118 +0,0 @@ -# nvidia — auto-generated from OpenRouter API - -[provider] -id = "nvidia" -display_name = "Nvidia" -api_key_env = "NVIDIA_API_KEY" -base_url = "" -key_required = true - -[[models]] -id = "llama-3.1-nemotron-70b-instruct" -display_name = "NVIDIA: Llama 3.1 Nemotron 70B Instruct" -tier = "smart" -context_window = 131072 -max_output_tokens = 16384 -input_cost_per_m = 1.2 -output_cost_per_m = 1.2 -supports_streaming = true - -[[models]] -id = "llama-3.1-nemotron-ultra-253b-v1" -display_name = "NVIDIA: Llama 3.1 Nemotron Ultra 253B v1" -tier = "smart" -context_window = 131072 -max_output_tokens = 16384 -input_cost_per_m = 0.6 -output_cost_per_m = 1.8 -supports_streaming = true - -[[models]] -id = "llama-3.3-nemotron-super-49b-v1.5" -display_name = "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5" -tier = "fast" -context_window = 131072 -max_output_tokens = 16384 -input_cost_per_m = 0.1 -output_cost_per_m = 0.4 -supports_streaming = true - -[[models]] -id = "nemotron-3-nano-30b-a3b" -display_name = "NVIDIA: Nemotron 3 Nano 30B A3B" -tier = "fast" -context_window = 262144 -max_output_tokens = 16384 -input_cost_per_m = 0.05 -output_cost_per_m = 0.2 -supports_streaming = true - -[[models]] -id = "nemotron-3-nano-30b-a3b:free" -display_name = "NVIDIA: Nemotron 3 Nano 30B A3B (free)" -tier = "fast" -context_window = 256000 -max_output_tokens = 16384 -input_cost_per_m = 0.0 -output_cost_per_m = 0.0 -supports_streaming = true - -[[models]] -id = "nemotron-3-super-120b-a12b" -display_name = "NVIDIA: Nemotron 3 Super" -tier = "fast" -context_window = 262144 -max_output_tokens = 16384 -input_cost_per_m = 0.1 -output_cost_per_m = 0.5 -supports_streaming = true - -[[models]] -id = "nemotron-3-super-120b-a12b:free" -display_name = "NVIDIA: Nemotron 3 Super (free)" -tier = "fast" -context_window = 262144 -max_output_tokens = 262144 -input_cost_per_m = 0.0 -output_cost_per_m = 0.0 -supports_streaming = true - -[[models]] -id = "nemotron-nano-12b-v2-vl" -display_name = "NVIDIA: Nemotron Nano 12B 2 VL" -tier = "fast" -context_window = 131072 -max_output_tokens = 16384 -input_cost_per_m = 0.2 -output_cost_per_m = 0.6 -supports_streaming = true - -[[models]] -id = "nemotron-nano-12b-v2-vl:free" -display_name = "NVIDIA: Nemotron Nano 12B 2 VL (free)" -tier = "fast" -context_window = 128000 -max_output_tokens = 128000 -input_cost_per_m = 0.0 -output_cost_per_m = 0.0 -supports_streaming = true - -[[models]] -id = "nemotron-nano-9b-v2" -display_name = "NVIDIA: Nemotron Nano 9B V2" -tier = "fast" -context_window = 131072 -max_output_tokens = 16384 -input_cost_per_m = 0.04 -output_cost_per_m = 0.16 -supports_streaming = true - -[[models]] -id = "nemotron-nano-9b-v2:free" -display_name = "NVIDIA: Nemotron Nano 9B V2 (free)" -tier = "fast" -context_window = 128000 -max_output_tokens = 16384 -input_cost_per_m = 0.0 -output_cost_per_m = 0.0 -supports_streaming = true diff --git a/providers/prime-intellect.toml b/providers/prime-intellect.toml index d181611..ee294e0 100644 --- a/providers/prime-intellect.toml +++ b/providers/prime-intellect.toml @@ -5,7 +5,7 @@ id = "prime-intellect" display_name = "Prime Intellect" api_key_env = "PRIME_INTELLECT_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "intellect-3" diff --git a/providers/qwen.toml b/providers/qwen.toml index a8b3354..b04261c 100644 --- a/providers/qwen.toml +++ b/providers/qwen.toml @@ -157,3 +157,13 @@ supports_tools = false supports_vision = true supports_streaming = true aliases = [] + +[[models]] +id = "tongyi-deepresearch-30b-a3b" +display_name = "Tongyi DeepResearch 30B A3B" +tier = "fast" +context_window = 131072 +max_output_tokens = 131072 +input_cost_per_m = 0.09 +output_cost_per_m = 0.45 +supports_streaming = true diff --git a/providers/reka.toml b/providers/reka.toml index 0950f73..c1835fe 100644 --- a/providers/reka.toml +++ b/providers/reka.toml @@ -4,7 +4,7 @@ id = "reka" display_name = "Reka" api_key_env = "REKA_API_KEY" -base_url = "" +base_url = "https://api.reka.ai/v1" key_required = true [[models]] @@ -16,3 +16,13 @@ max_output_tokens = 16384 input_cost_per_m = 0.1 output_cost_per_m = 0.1 supports_streaming = true + +[[models]] +id = "reka-flash-3" +display_name = "Reka: Flash 3" +tier = "fast" +context_window = 131072 +max_output_tokens = 32768 +input_cost_per_m = 0.15 +output_cost_per_m = 0.6 +supports_streaming = true diff --git a/providers/rekaai.toml b/providers/rekaai.toml deleted file mode 100644 index 49a4346..0000000 --- a/providers/rekaai.toml +++ /dev/null @@ -1,18 +0,0 @@ -# rekaai — auto-generated from OpenRouter API - -[provider] -id = "rekaai" -display_name = "Rekaai" -api_key_env = "REKAAI_API_KEY" -base_url = "" -key_required = true - -[[models]] -id = "reka-flash-3" -display_name = "Reka: Flash 3" -tier = "fast" -context_window = 65536 -max_output_tokens = 65536 -input_cost_per_m = 0.1 -output_cost_per_m = 0.2 -supports_streaming = true diff --git a/providers/relace.toml b/providers/relace.toml index d454745..9a57b2c 100644 --- a/providers/relace.toml +++ b/providers/relace.toml @@ -5,7 +5,7 @@ id = "relace" display_name = "Relace" api_key_env = "RELACE_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "relace-apply-3" diff --git a/providers/switchpoint.toml b/providers/switchpoint.toml index b98b865..9c2a7d9 100644 --- a/providers/switchpoint.toml +++ b/providers/switchpoint.toml @@ -5,7 +5,7 @@ id = "switchpoint" display_name = "Switchpoint" api_key_env = "SWITCHPOINT_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "router" diff --git a/providers/tencent.toml b/providers/tencent.toml index 8702200..c29130f 100644 --- a/providers/tencent.toml +++ b/providers/tencent.toml @@ -5,7 +5,7 @@ id = "tencent" display_name = "Tencent" api_key_env = "TENCENT_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "hunyuan-a13b-instruct" diff --git a/providers/tngtech.toml b/providers/tngtech.toml index 47a4634..0ae6750 100644 --- a/providers/tngtech.toml +++ b/providers/tngtech.toml @@ -5,7 +5,7 @@ id = "tngtech" display_name = "Tngtech" api_key_env = "TNGTECH_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "deepseek-r1t2-chimera" diff --git a/providers/upstage.toml b/providers/upstage.toml index d86a3dc..6c31405 100644 --- a/providers/upstage.toml +++ b/providers/upstage.toml @@ -4,7 +4,7 @@ id = "upstage" display_name = "Upstage" api_key_env = "UPSTAGE_API_KEY" -base_url = "" +base_url = "https://api.upstage.ai/v1" key_required = true [[models]] diff --git a/providers/volcengine.toml b/providers/volcengine.toml index f5426de..3ba0110 100644 --- a/providers/volcengine.toml +++ b/providers/volcengine.toml @@ -98,3 +98,13 @@ supports_tools = true supports_vision = true supports_streaming = true aliases = ["doubao-vision"] + +[[models]] +id = "ui-tars-1.5-7b" +display_name = "ByteDance: UI-TARS 7B" +tier = "fast" +context_window = 128000 +max_output_tokens = 2048 +input_cost_per_m = 0.1 +output_cost_per_m = 0.2 +supports_streaming = true diff --git a/providers/xiaomi.toml b/providers/xiaomi.toml index 7634e09..8a6e958 100644 --- a/providers/xiaomi.toml +++ b/providers/xiaomi.toml @@ -5,7 +5,7 @@ id = "xiaomi" display_name = "Xiaomi" api_key_env = "XIAOMI_API_KEY" base_url = "" -key_required = true +key_required = false [[models]] id = "mimo-v2-flash" diff --git a/scripts/sync-pricing.py b/scripts/sync-pricing.py index 4da3e27..dbdd6f7 100644 --- a/scripts/sync-pricing.py +++ b/scripts/sync-pricing.py @@ -36,6 +36,27 @@ "anthracite-org", "alpindale", "alfredpros", "mancer", } +# Skip creating NEW provider files for these — they overlap with hand-written +# providers but may contain unique models, so existing files are kept. +SKIP_DUPLICATES = { + "alibaba", # overlaps with qwen.toml but has unique models + "amazon", # overlaps with bedrock.toml but has unique models + "bytedance", # overlaps with volcengine.toml but has unique models + "nvidia", # overlaps with nvidia-nim.toml but has unique models + "rekaai", # overlaps with reka.toml but has unique models +} + +# 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. +PROVIDER_API = { + "arcee-ai": ("https://api.arcee.ai/v1", "ARCEE_API_KEY"), + "inception": ("https://api.inceptionlabs.ai/v1", "INCEPTION_API_KEY"), + "morph": ("https://api.morphlabs.io/v1", "MORPH_API_KEY"), + "nvidia": ("https://integrate.api.nvidia.com/v1", "NVIDIA_API_KEY"), + "reka": ("https://api.reka.ai/v1", "REKA_API_KEY"), + "upstage": ("https://api.upstage.ai/v1", "UPSTAGE_API_KEY"), +} + def fetch_openrouter_models(): """Fetch all models from OpenRouter.""" @@ -119,8 +140,18 @@ def generate_provider_toml(provider_id, models, dry_run=False): if toml_path.exists(): return 0 - # Derive api_key_env from provider name: FOO_BAR -> FOO_BAR_API_KEY - env_key = our_name.upper().replace("-", "_") + "_API_KEY" + if our_name in SKIP_DUPLICATES: + return 0 + + # Check if provider has a known public API + if our_name in PROVIDER_API: + base_url, env_key = PROVIDER_API[our_name] + key_required = "true" + else: + # No known public API — only accessible via OpenRouter/hosting providers + env_key = our_name.upper().replace("-", "_") + "_API_KEY" + base_url = "" + key_required = "false" lines = [ f'# {provider_id} — auto-generated from OpenRouter API', @@ -129,8 +160,8 @@ def generate_provider_toml(provider_id, models, dry_run=False): f'id = "{our_name}"', f'display_name = "{provider_id.replace("-", " ").title()}"', f'api_key_env = "{env_key}"', - f'base_url = ""', - f"key_required = true", + f'base_url = "{base_url}"', + f"key_required = {key_required}", f"", ]