Files
infra-docker-configs/servers/tools-pve/litellm/render_config.py
T

66 lines
2.7 KiB
Python

"""Render only credential-ready routes; credentials remain environment references."""
import os
import json
from pathlib import Path
import yaml
def oauth_ready(path):
try:
record = json.loads(path.read_text())
return isinstance(record, dict) and bool(record.get('access_token'))
except (OSError, ValueError):
return False
def build_config(catalog, env, exists):
routes = []
def add(alias, model, key=None, **params):
if key:
params['api_key'] = 'os.environ/' + key
routes.append({'model_name': alias, 'litellm_params': {'model': model, **params}})
for key, suffix in [('ZENMUX_SUBSCRIPTION_API_KEY', ''), ('ZENMUX_PAYG_API_KEY', '-payg')]:
if env.get(key):
for alias, model in catalog['zenmux'].items():
# Strip only the LiteLLM provider prefix, retaining ZenMux's vendor prefix.
add(alias + suffix, 'anthropic/' + model, key,
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')
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')
for provider, token_var, default_dir in [
('chatgpt', 'CHATGPT_TOKEN_DIR', '/tokens/chatgpt'),
('xai', 'XAI_OAUTH_TOKEN_DIR', '/tokens/xai'),
]:
if exists(Path(env.get(token_var, default_dir)) / 'auth.json'):
for alias, model in catalog[provider].items():
extra = {'use_xai_oauth': True} if provider == 'xai' else {}
add(alias, provider + '/' + model, **extra)
return {
'model_list': routes,
'general_settings': {
'master_key': 'os.environ/LITELLM_MASTER_KEY',
'database_url': 'os.environ/DATABASE_URL',
'store_model_in_db': False,
'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},
}
if __name__ == '__main__':
catalog = yaml.safe_load(Path('/etc/litellm/models.yaml').read_text())
config = build_config(catalog, os.environ, oauth_ready)
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']))