first commit
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# OpenRouter Model Sync Script
|
||||
|
||||
## Context
|
||||
User wants a Python script that fetches all available models from the OpenRouter API (`GET https://openrouter.ai/api/v1/models`) and generates:
|
||||
1. `~/.litellm/config.yaml` — LiteLLM proxy config with all matching models
|
||||
2. `~/.env_keys.example` — single `OPENROUTER_API_KEY` entry
|
||||
|
||||
Filtering is controlled by a YAML config file with provider-level and model-name-pattern include/exclude rules. The script overwrites (not merges) the target files.
|
||||
|
||||
## Files to Create
|
||||
|
||||
### 1. `~/.litellm/openrouter_sync.yaml` — Filter config (with defaults/example)
|
||||
|
||||
```yaml
|
||||
# Which providers/models to include or exclude from OpenRouter.
|
||||
# Filters are evaluated in order: include first, then exclude.
|
||||
# Glob patterns supported (fnmatch-style).
|
||||
|
||||
filters:
|
||||
providers:
|
||||
include: [] # empty = all providers included
|
||||
exclude: [] # e.g. ["openrouter", "auto"]
|
||||
|
||||
models:
|
||||
include: [] # empty = all models included (after provider filter)
|
||||
exclude: [] # e.g. ["*:free", "*-preview", "*/old-*"]
|
||||
|
||||
# Output paths (defaults shown)
|
||||
output:
|
||||
config_yaml: "~/.litellm/config.yaml"
|
||||
env_keys: "~/.env_keys.example"
|
||||
```
|
||||
|
||||
**Filter logic:**
|
||||
- `providers.include`: if non-empty, only models from these providers are kept. Provider = first path segment of model id (e.g. `google` from `google/gemini-2.0-flash`).
|
||||
- `providers.exclude`: remove models from these providers (applied after include).
|
||||
- `models.include`: if non-empty, only model ids matching any of these glob patterns are kept.
|
||||
- `models.exclude`: remove model ids matching any of these glob patterns.
|
||||
|
||||
### 2. `~/.litellm/sync_openrouter.py` — Main script
|
||||
|
||||
**Logic:**
|
||||
1. Load filter config from `~/.litellm/openrouter_sync.yaml` (create default if missing).
|
||||
2. `GET https://openrouter.ai/api/v1/models` — fetch all models.
|
||||
3. Apply provider include/exclude filters.
|
||||
4. Apply model name include/exclude filters (fnmatch glob).
|
||||
5. Build LiteLLM `model_list` entries:
|
||||
```yaml
|
||||
model_list:
|
||||
- model_name: google/gemini-2.0-flash # the OpenRouter model id
|
||||
litellm_params:
|
||||
model: openrouter/google/gemini-2.0-flash
|
||||
api_key: os.environ/OPENROUTER_API_KEY
|
||||
```
|
||||
6. Write `config.yaml` (overwrite).
|
||||
7. Write `.env_keys.example` with single line: `export OPENROUTER_API_KEY="sk-or-REPLACE_ME"`.
|
||||
8. Print summary: total models fetched, filtered count, written count.
|
||||
|
||||
**Dependencies:** `requests`, `pyyaml` (both common; script will check and error clearly if missing).
|
||||
|
||||
**No external packages beyond stdlib+requests+pyyaml.** Uses `fnmatch` from stdlib for glob matching.
|
||||
|
||||
## Verification
|
||||
1. Run `python ~/.litellm/sync_openrouter.py` with default (empty) filters — should populate config.yaml with all OpenRouter models.
|
||||
2. Edit `openrouter_sync.yaml` to exclude a provider, re-run, confirm those models are gone.
|
||||
3. Verify `~/.env_keys.example` contains the OPENROUTER_API_KEY line.
|
||||
4. Validate generated `config.yaml` with `python -c "import yaml; yaml.safe_load(open('config.yaml'))"`.
|
||||
Reference in New Issue
Block a user