78 lines
4.1 KiB
Python
78 lines
4.1 KiB
Python
"""HK-compatible public routes on DC1, with separately named official OpenAI API."""
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
from provider_routes import build_config, namespace_config, add_bailian_routes
|
|
from provider_policy import without_subscription, apply_provider_policy
|
|
|
|
|
|
def build_hk_config(catalog, env):
|
|
env = without_subscription(catalog, env)
|
|
config = build_config(catalog, env, lambda path: False, namespaced=False)
|
|
config['general_settings'] = {'master_key': 'os.environ/LITELLM_MASTER_KEY'}
|
|
routes = config['model_list']
|
|
routes[:] = [route for route in routes if route['model_name'] != 'gemini-transcribe-personal']
|
|
if env.get('ZENMUX_SUBSCRIPTION_API_KEY'):
|
|
asr_models = {
|
|
'asr-gpt': 'openai/gpt-transcribe',
|
|
'asr-qwen': 'qwen/qwen-audio-3.1-asr-flash',
|
|
'asr-doubao': 'bytedance/doubao-seed-asr-2.0',
|
|
'asr-mimo': 'xiaomi/mimo-v2.5-asr',
|
|
}
|
|
for alias, model in asr_models.items():
|
|
routes.append({'model_name': alias, 'litellm_params': {
|
|
'model': 'openai/' + model,
|
|
'api_key': 'os.environ/ZENMUX_SUBSCRIPTION_API_KEY',
|
|
'api_base': 'https://zenmux.ai/api/v1',
|
|
'max_retries': 0}})
|
|
if env.get('GOOGLE_AI_STUDIO_API_KEY'):
|
|
routes.append({'model_name': 'gemini-transcribe', 'litellm_params': {
|
|
'model': 'gemini/gemini-3.5-transcribe',
|
|
'api_key': 'os.environ/GOOGLE_AI_STUDIO_API_KEY'}})
|
|
if env.get('VERTEXAI_ENABLED', '').lower() == 'true' and env.get('VERTEXAI_PROJECT'):
|
|
routes.append({'model_name': 'gemini-transcribe-personal', 'litellm_params': {
|
|
'model': 'vertex_ai/gemini-3.5-transcribe',
|
|
'vertex_project': 'os.environ/VERTEXAI_PROJECT',
|
|
'vertex_location': 'global',
|
|
'personal_dictation': True}})
|
|
# Keep old client aliases; the old 3.6 alias now follows the verified Flash map.
|
|
legacy = {
|
|
'gemini-3.6-flash': catalog['google_vertex']['gemini-flash-vertex'],
|
|
'gemini-3.5-flash-lite': catalog['google_vertex']['gemini-flash-lite-vertex'],
|
|
'google/gemini-embedding-2': 'gemini-embedding-2',
|
|
'google/gemini-3.8-flash': catalog['google_vertex']['gemini-flash-vertex'],
|
|
}
|
|
for alias, model in legacy.items():
|
|
routes.append({'model_name': alias, 'litellm_params': {
|
|
'model': 'vertex_ai/' + model,
|
|
'vertex_project': 'os.environ/VERTEXAI_PROJECT',
|
|
'vertex_location': 'os.environ/VERTEXAI_LOCATION'}})
|
|
config = add_bailian_routes(namespace_config(config), env, '/credentials/personal-vocabulary.json')
|
|
if env.get('OPENAI_API_KEY'):
|
|
models = dict(catalog.get('openai', {}))
|
|
for alias, model in catalog.get('chatgpt', {}).items():
|
|
models[alias if alias.endswith('-latest') else model] = model
|
|
for alias, model in models.items():
|
|
config['model_list'].append({'model_name': 'openai/' + alias, 'litellm_params': {
|
|
'model': 'openai/' + model, 'api_base': 'https://api.openai.com/v1',
|
|
'api_key': 'os.environ/OPENAI_API_KEY', 'max_retries': 0}})
|
|
config['model_list'] = [r for r in config['model_list'] if r['model_name'] != 'asr-gpt']
|
|
config['model_list'].append({'model_name': 'asr-gpt', 'litellm_params': {
|
|
'model': 'openai/gpt-transcribe', 'api_base': 'https://api.openai.com/v1',
|
|
'api_key': 'os.environ/OPENAI_API_KEY', 'max_retries': 0}})
|
|
if env.get('ZENMUX_SUBSCRIPTION_API_KEY'):
|
|
config['router_settings']['fallbacks'].append({'asr-gpt': ['zenmux/gpt-transcribe']})
|
|
config['_public_gateway'] = True
|
|
return apply_provider_policy(config, catalog, env)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
catalog = yaml.safe_load(Path('/etc/litellm/models.yaml').read_text())
|
|
config = build_hk_config(catalog, os.environ)
|
|
output = Path('/tmp/litellm.yaml')
|
|
output.write_text(yaml.safe_dump(config, allow_unicode=True, sort_keys=False))
|
|
output.chmod(0o600)
|
|
print('Configured routes:', ', '.join(route['model_name'] for route in config['model_list']))
|