Python Examples
These examples use the requests library. Install it with pip install requests.
Setup
import requests
BASE_URL = "https://api.modelgraph.ai/api/v1"
List all providers
response = requests.get(f"{BASE_URL}/providers")
providers = response.json()["providers"]
for provider in providers:
print(f"{provider['name']}: {provider['model_count']} models")
Get a model family timeline
response = requests.get(f"{BASE_URL}/families/claude-sonnet")
family = response.json()
print(f"Family: {family['name']}")
for model in family["models"]:
print(f" {model['display_name']} ({model['status']}) — {model['release_date']}")
Resolve a model string and check for upgrades
def check_model(model_string):
"""Check if a model string is outdated and get the upgrade."""
response = requests.get(f"{BASE_URL}/resolve", params={"q": model_string})
if response.status_code == 404:
print(f"Unknown model: {model_string}")
return None
data = response.json()
model = data["matched_model"]
if data["is_latest"]:
print(f"✓ {model_string} → {model['display_name']} (already latest)")
else:
upgrade = data["upgrade"]
upgrade_alias = data["upgrade_alias"]["alias"]
print(f"⬆ {model_string} → upgrade to {upgrade_alias} ({upgrade['display_name']})")
return data
check_model("claude-3-sonnet-20240229")
check_model("anthropic.claude-3-5-sonnet-20241022-v2:0")
check_model("gpt-4o-2024-08-06")
Search for models
response = requests.get(f"{BASE_URL}/search", params={"q": "llama 70b"})
results = response.json()["results"]
for result in results:
print(f"{result['display_name']} ({result['provider']['name']}) — score: {result['score']}")
List deprecated models by provider
response = requests.get(f"{BASE_URL}/models", params={
"provider": "openai",
"status": "deprecated",
})
models = response.json()["models"]
print(f"Found {len(models)} deprecated OpenAI models:")
for model in models:
print(f" {model['display_name']}")
if model["deprecation_date"]:
print(f" Deprecated: {model['deprecation_date']}")
if model["sunset_date"]:
print(f" Sunset: {model['sunset_date']}")
Batch-check a list of model strings
model_strings = [
"claude-3-sonnet-20240229",
"gpt-4-0613",
"anthropic.claude-3-5-sonnet-20241022-v2:0",
"mistral-large-2402",
"claude-sonnet-4-6",
]
print("Checking model strings for upgrades...\n")
for model_string in model_strings:
response = requests.get(f"{BASE_URL}/resolve", params={"q": model_string})
if response.status_code == 404:
print(f" ? {model_string} — not found")
continue
data = response.json()
if data["is_latest"]:
print(f" ✓ {model_string} — up to date")
else:
upgrade = data["upgrade_alias"]["alias"]
print(f" ⬆ {model_string} → {upgrade}")
Error handling
def safe_resolve(model_string):
"""Resolve a model string with proper error handling."""
try:
response = requests.get(
f"{BASE_URL}/resolve",
params={"q": model_string},
timeout=10,
)
if response.status_code == 200:
return response.json()
elif response.status_code == 404:
return None
elif response.status_code == 429:
retry_after = int(response.headers.get("X-RateLimit-Reset", 60))
print(f"Rate limited. Retry after {retry_after}s")
return None
else:
error = response.json().get("error", {})
print(f"API error: {error.get('message', 'Unknown error')}")
return None
except requests.exceptions.Timeout:
print("Request timed out")
return None
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
return None