Spaces:
Sleeping
Sleeping
| """Check Gemini API key, available models, and rate limits.""" | |
| import asyncio, os, sys | |
| from dotenv import load_dotenv | |
| import httpx | |
| load_dotenv() | |
| KEY = os.getenv("GOOGLE_API_KEY", "") | |
| BASE = "https://generativelanguage.googleapis.com/v1beta" | |
| MODELS_TO_TEST = [ | |
| "gemini-2.5-flash", | |
| "gemini-2.5-pro", | |
| "gemini-2.0-flash", | |
| "gemini-1.5-flash", | |
| "gemini-1.5-pro", | |
| ] | |
| async def main(): | |
| if not KEY: | |
| print("[X] GOOGLE_API_KEY not set in .env") | |
| sys.exit(1) | |
| print(f"Key: ...{KEY[-6:]}\n") | |
| async with httpx.AsyncClient(timeout=20) as c: | |
| # 1) List all available models | |
| print("=" * 55) | |
| print("AVAILABLE MODELS") | |
| print("=" * 55) | |
| r = await c.get(f"{BASE}/models?key={KEY}") | |
| if r.status_code != 200: | |
| print(f"[X] Could not list models: {r.status_code} {r.text[:200]}") | |
| else: | |
| models = r.json().get("models", []) | |
| gen_models = [m for m in models if "generateContent" in m.get("supportedGenerationMethods", [])] | |
| for m in gen_models: | |
| name = m["name"].replace("models/", "") | |
| limit = m.get("description", "")[:60] | |
| print(f" {name:<35} rpm={m.get('rpmLimit','?'):>6} tpm={m.get('tpmLimit','?'):>10}") | |
| # 2) Test each target model with a tiny call | |
| print("\n" + "=" * 55) | |
| print("MODEL PING TEST") | |
| print("=" * 55) | |
| body = {"contents": [{"parts": [{"text": "Say OK"}]}], | |
| "generationConfig": {"maxOutputTokens": 5}} | |
| for model in MODELS_TO_TEST: | |
| url = f"{BASE}/models/{model}:generateContent?key={KEY}" | |
| r = await c.post(url, json=body) | |
| if r.status_code == 200: | |
| status = "[OK]" | |
| elif r.status_code == 429: | |
| status = "[429 rate limit]" | |
| elif r.status_code == 404: | |
| status = "[404 not found]" | |
| elif r.status_code == 403: | |
| status = "[403 denied]" | |
| else: | |
| status = f"[{r.status_code}]" | |
| print(f" {model:<30} {status}") | |
| # 3) Quota info from a real call on the working model | |
| print("\n" + "=" * 55) | |
| print("RATE LIMITS (from API metadata)") | |
| print("=" * 55) | |
| r = await c.get(f"{BASE}/models/gemini-2.5-flash?key={KEY}") | |
| if r.status_code == 200: | |
| m = r.json() | |
| print(f" Model : {m.get('displayName','')}") | |
| print(f" Input limit : {m.get('inputTokenLimit','?'):,} tokens") | |
| print(f" Output limit : {m.get('outputTokenLimit','?'):,} tokens") | |
| print(f" RPM limit : {m.get('rpmLimit', 'see https://ai.dev/rate-limit')}") | |
| print(f" TPM limit : {m.get('tpmLimit', 'see https://ai.dev/rate-limit')}") | |
| print(f"\n Free tier caps: 15 RPM / 1,000,000 TPM / 1,500 RPD") | |
| print(f" Full limits : https://ai.google.dev/gemini-api/docs/rate-limits") | |
| asyncio.run(main()) | |