Files
routstr-core/model_fetching_experiments.py
T

59 lines
1.9 KiB
Python

import asyncio
import os
import httpx
async def fetch_models(base_url: str, api_key: str | None = None) -> dict:
url = f"{base_url.rstrip('/')}/models"
headers = {"Authorization": f"Bearer {api_key}"} if api_key else None
async with httpx.AsyncClient(timeout=30.0) as client:
response = await client.get(url, headers=headers)
response.raise_for_status()
return response.json()
def parse_model_ids(response: dict) -> list[str]:
return [model.get("id") for model in response.get("data", []) if "id" in model]
if __name__ == "__main__":
api_key = os.environ["API_KEY"]
base_url = os.environ.get("API_BASE_URL", "https://api.openai.com/v1")
async def main() -> None:
or_models_response, provider_models_response = await asyncio.gather(
fetch_models("https://openrouter.ai/api/v1"),
fetch_models(base_url, api_key),
)
provider_model_ids = parse_model_ids(provider_models_response)
or_models = or_models_response.get("data", [])
found_models = []
not_found_models = []
for model_id in provider_model_ids:
model = next(
(
model
for model in or_models
if (model.get("id") == model_id)
or (model.get("id").split("/")[-1] == model_id)
or (model.get("canonical_slug") == model_id)
or (model.get("canonical_slug").split("/")[-1] == model_id)
),
None,
)
if model:
found_models.append(model)
else:
not_found_models.append(model_id)
print("\nFound models:")
for model in found_models:
print(model.get("id").split("/")[-1], model.get("pricing").get("prompt"))
print("\nNot found models:")
for model in not_found_models:
print(model)
asyncio.run(main())