Spaces:
Sleeping
Sleeping
| """Benchmark several OpenRouter models (manual tool; not part of pytest).""" | |
| from __future__ import annotations | |
| import json | |
| import os | |
| import time | |
| import httpx | |
| from dotenv import load_dotenv | |
| _BACKEND_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| load_dotenv(os.path.join(_BACKEND_ROOT, ".env")) | |
| MODELS = [ | |
| "nvidia/nemotron-3-super-120b-a12b:free", | |
| "meta-llama/llama-3.3-70b-instruct:free", | |
| "openai/gpt-oss-120b:free", | |
| "z-ai/glm-4.5-air:free", | |
| "minimax/minimax-m2.5:free", | |
| "google/gemma-4-26b-a4b-it:free", | |
| "google/gemma-4-31b-it:free", | |
| ] | |
| PROMPT = ( | |
| "Cho hình chữ nhật ABCD có AB bằng 5 và AD bằng 10. Gọi E là điểm nằm trong đoạn CD sao cho CE = 2ED. " | |
| "Vẽ đoạn thẳng AE. Vẽ thêm P là điểm nằm trên đường thẳng BC sao cho BP = 2PC, tính chu vi tam giác PEA" | |
| ) | |
| def main() -> None: | |
| api_key = os.getenv("OPENROUTER_API_KEY_1") or os.getenv("OPENROUTER_API_KEY") | |
| base_url = "https://openrouter.ai/api/v1/chat/completions" | |
| if not api_key: | |
| print("Missing OPENROUTER_API_KEY_1 or OPENROUTER_API_KEY in .env") | |
| return | |
| print("Benchmark OpenRouter models\nPrompt:", PROMPT, "\n") | |
| results = [] | |
| for model in MODELS: | |
| print(f"Calling {model}...", end="", flush=True) | |
| headers = { | |
| "Authorization": f"Bearer {api_key}", | |
| "Content-Type": "application/json", | |
| "HTTP-Referer": "https://mathsolver.io", | |
| "X-Title": "MathSolver Benchmark Tool", | |
| } | |
| payload = {"model": model, "messages": [{"role": "user", "content": PROMPT}]} | |
| start = time.time() | |
| try: | |
| with httpx.Client(timeout=120.0) as client: | |
| r = client.post(base_url, headers=headers, json=payload) | |
| r.raise_for_status() | |
| data = r.json() | |
| answer = data["choices"][0]["message"]["content"] | |
| duration = time.time() - start | |
| results.append( | |
| {"model": model, "duration": duration, "answer": answer, "status": "success"} | |
| ) | |
| print(f" OK ({duration:.2f}s)") | |
| except Exception as e: | |
| duration = time.time() - start | |
| results.append( | |
| {"model": model, "duration": duration, "error": str(e), "status": "error"} | |
| ) | |
| print(f" FAIL ({duration:.2f}s) {e}") | |
| print("\n" + "=" * 80) | |
| for res in results: | |
| print(json.dumps(res, ensure_ascii=False, indent=2)[:2000]) | |
| print("-" * 40) | |
| if __name__ == "__main__": | |
| main() | |