feat(litellm): add provider namespaces with legacy compatibility
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import unittest
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from render_config import build_config, oauth_ready
|
||||
@@ -17,6 +18,29 @@ class ConfigTests(unittest.TestCase):
|
||||
def test_missing_credentials_exclude_routes(self):
|
||||
self.assertEqual(build_config(self.catalog, {}, lambda _: False)['model_list'], [])
|
||||
|
||||
def test_namespaces_preserve_every_legacy_route(self):
|
||||
catalog = yaml.safe_load(Path(__file__).with_name('models.yaml').read_text())
|
||||
env = {key: 'synthetic' for key in ['ZENMUX_SUBSCRIPTION_API_KEY',
|
||||
'ZENMUX_PAYG_API_KEY', 'OPENROUTER_API_KEY', 'GOOGLE_AI_STUDIO_API_KEY',
|
||||
'VERTEXAI_PROJECT']}
|
||||
env['VERTEXAI_ENABLED'] = 'true'
|
||||
old = build_config(catalog, env, lambda _: True, namespaced=False)
|
||||
new = build_config(catalog, env, lambda _: True)
|
||||
routes = {r['model_name']: r for r in new['model_list']}
|
||||
self.assertEqual(len(routes), len(new['model_list']))
|
||||
for route in old['model_list']:
|
||||
self.assertEqual(route, routes[route['model_name']])
|
||||
for old_name, new_name in {
|
||||
'claude-sonnet-latest': 'zenmux/claude-sonnet-latest',
|
||||
'claude-opus-latest-payg': 'zenmux-payg/claude-opus-latest',
|
||||
'grok-latest': 'xai/grok-latest', 'gpt-sol-latest': 'codex/gpt-sol-latest',
|
||||
'gpt-work-sol': 'codex/gpt-6-sol', 'gpt-review-5.5': 'codex/gpt-5.5',
|
||||
'gemini-transcribe-personal': 'aistudio/gemini-transcribe-personal',
|
||||
'gemini-embedding-2-studio': 'aistudio/gemini-embedding-2',
|
||||
'google-rerank-fast': 'vertex/rerank-fast-latest',
|
||||
}.items():
|
||||
self.assertEqual(routes[old_name]['litellm_params'], routes[new_name]['litellm_params'])
|
||||
|
||||
def test_env_ui_login_disabled(self):
|
||||
settings = build_config(self.catalog, {}, lambda _: False)['general_settings']
|
||||
self.assertTrue(settings['disable_env_credential_login'])
|
||||
@@ -32,7 +56,7 @@ class ConfigTests(unittest.TestCase):
|
||||
|
||||
def test_oauth_requires_persistent_file(self):
|
||||
routes = build_config(self.catalog, {}, lambda path: str(path) == '/tokens/xai/auth.json')['model_list']
|
||||
self.assertEqual(len(routes), 1)
|
||||
self.assertEqual(len(routes), 2)
|
||||
self.assertTrue(routes[0]['litellm_params']['use_xai_oauth'])
|
||||
self.assertNotIn('api_key', routes[0]['litellm_params'])
|
||||
|
||||
@@ -61,7 +85,12 @@ class ConfigTests(unittest.TestCase):
|
||||
routes = {r['model_name']: r for r in config['model_list']}
|
||||
self.assertEqual(routes['glm-latest']['litellm_params']['model'], 'openai/z-ai/glm-5.3-prime')
|
||||
self.assertEqual(routes['glm-latest-openrouter']['litellm_params']['model'], 'openrouter/z-ai/glm-5.3-prime')
|
||||
self.assertEqual(config['router_settings']['fallbacks'], [{'glm-latest': ['glm-latest-openrouter']}])
|
||||
self.assertEqual(config['router_settings']['fallbacks'], [
|
||||
{'glm-latest': ['glm-latest-openrouter']},
|
||||
{'auto/glm-latest': ['openrouter/glm-latest']}])
|
||||
self.assertEqual(routes['auto/glm-latest']['litellm_params'], routes['glm-latest']['litellm_params'])
|
||||
self.assertEqual(routes['zenmux/glm-latest']['litellm_params'], routes['glm-latest']['litellm_params'])
|
||||
self.assertNotIn('zenmux/glm-latest', str(config['router_settings']['fallbacks']))
|
||||
self.assertEqual(routes['glm-latest']['model_info']['cooldown_time'], 60)
|
||||
self.assertNotIn('glm-latest-payg', routes)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user