LLMProviders / scripts /update_openrouter.py
CrispStrobe
init
ffba252
import re
import json
import os
def parse_openrouter_yml(file_path):
with open(file_path, 'r') as f:
content = f.read()
# Split by model block start
# Simplified regex-based parsing for YAML-like structure
models = []
# Each model entry starts with "- id:"
blocks = content.split('\n - id: ')
if len(blocks) <= 1:
# Try without space
blocks = content.split('\n- id: ')
for block in blocks[1:]: # skip the header
lines = block.split('\n')
model_id = lines[0].strip().strip('"')
input_price = 0.0
output_price = 0.0
for line in lines:
if 'input_mtok:' in line:
m = re.search(r'input_mtok:\s*([0-9\.]+)', line)
if m: input_price = float(m.group(1))
if 'output_mtok:' in line:
m = re.search(r'output_mtok:\s*([0-9\.]+)', line)
if m: output_price = float(m.group(1))
# Determine size from id if possible
size_match = re.search(r'(\d+)b', model_id.lower())
size_b = int(size_match.group(1)) if size_match else None
models.append({
"name": model_id,
"type": "chat",
"size_b": size_b,
"input_price_per_1m": input_price,
"output_price_per_1m": output_price,
"currency": "USD"
})
return models
openrouter_models = parse_openrouter_yml('openrouter_prices.yml')
# Load existing providers
with open('data/providers.json', 'r') as f:
data = json.load(f)
# Update or Add OpenRouter
found = False
for provider in data['providers']:
if provider['name'] == 'OpenRouter':
provider['models'] = openrouter_models
found = True
break
if not found:
data['providers'].append({
"name": "OpenRouter",
"url": "https://openrouter.ai/models",
"headquarters": "USA",
"region": "Global",
"gdpr_compliant": False,
"eu_endpoints": False,
"models": openrouter_models
})
with open('data/providers.json', 'w') as f:
json.dump(data, f, indent=2)
print(f"Updated OpenRouter with {len(openrouter_models)} models.")