Route open models through ZenMux with OpenRouter fallback
This commit is contained in:
@@ -16,6 +16,7 @@ def oauth_ready(path):
|
||||
|
||||
def build_config(catalog, env, exists):
|
||||
routes = []
|
||||
fallbacks = []
|
||||
|
||||
def add(alias, model, key=None, **params):
|
||||
if key:
|
||||
@@ -30,7 +31,26 @@ def build_config(catalog, env, exists):
|
||||
api_base='https://zenmux.ai/api/anthropic')
|
||||
if env.get('OPENROUTER_API_KEY'):
|
||||
for alias, model in catalog['openrouter'].items():
|
||||
add(alias, 'openrouter/' + model, 'OPENROUTER_API_KEY')
|
||||
primary = catalog.get('zenmux_open_models', {}).get(alias)
|
||||
if primary and env.get('ZENMUX_SUBSCRIPTION_API_KEY'):
|
||||
if primary != model:
|
||||
raise ValueError('Cross-provider model mismatch: ' + alias)
|
||||
add(alias, 'openai/' + primary, 'ZENMUX_SUBSCRIPTION_API_KEY',
|
||||
api_base='https://zenmux.ai/api/v1', max_retries=0)
|
||||
routes[-1]['model_info'] = {'cooldown_time': 60,
|
||||
'allowed_fails_policy': {'RateLimitErrorAllowedFails': 0,
|
||||
'AuthenticationErrorAllowedFails': 0,
|
||||
'InternalServerErrorAllowedFails': 0,
|
||||
'ServiceUnavailableErrorAllowedFails': 0,
|
||||
'TimeoutErrorAllowedFails': 0}}
|
||||
add(alias + '-openrouter', 'openrouter/' + model, 'OPENROUTER_API_KEY')
|
||||
fallbacks.append({alias: [alias + '-openrouter']})
|
||||
else:
|
||||
add(alias, 'openrouter/' + model, 'OPENROUTER_API_KEY')
|
||||
elif env.get('ZENMUX_SUBSCRIPTION_API_KEY'):
|
||||
for alias, model in catalog.get('zenmux_open_models', {}).items():
|
||||
add(alias, 'openai/' + model, 'ZENMUX_SUBSCRIPTION_API_KEY',
|
||||
api_base='https://zenmux.ai/api/v1', max_retries=0)
|
||||
if env.get('GOOGLE_AI_STUDIO_API_KEY'):
|
||||
for alias, model in catalog['google_ai_studio'].items():
|
||||
add(alias, 'gemini/' + model, 'GOOGLE_AI_STUDIO_API_KEY')
|
||||
@@ -56,8 +76,8 @@ def build_config(catalog, env, exists):
|
||||
'disable_env_credential_login': True,
|
||||
},
|
||||
'litellm_settings': {'drop_params': False, 'set_verbose': False},
|
||||
# No cross-provider or subscription-to-PAYG fallback without an explicit decision.
|
||||
'router_settings': {'num_retries': 1, 'timeout': 180},
|
||||
# Only explicitly approved open-model routes have cross-provider fallbacks.
|
||||
'router_settings': {'num_retries': 1, 'timeout': 180, 'fallbacks': fallbacks},
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user