Spaces:
Running
Running
| from dataclasses import asdict | |
| from fastapi import APIRouter, HTTPException | |
| from typing import Any, Dict, List | |
| from app.config.benchmarks import EEG_BENCHMARKS | |
| router = APIRouter() | |
| # Fields that are internal implementation details, not exposed via API | |
| _INTERNAL_FIELDS = {"accuracy_field"} | |
| def _benchmark_to_dict(key: str, benchmark) -> Dict[str, Any]: | |
| """Convert a BenchmarkInfo dataclass to a JSON-serializable dict.""" | |
| d = asdict(benchmark) | |
| for field in _INTERNAL_FIELDS: | |
| d.pop(field, None) | |
| d["key"] = key | |
| return d | |
| async def list_benchmarks() -> List[Dict[str, Any]]: | |
| """Return all registered EEG benchmarks with metadata.""" | |
| return [_benchmark_to_dict(k, b) for k, b in EEG_BENCHMARKS.items()] | |
| async def get_benchmark(key: str) -> Dict[str, Any]: | |
| """Return a single benchmark's details by key.""" | |
| benchmark = EEG_BENCHMARKS.get(key) | |
| if not benchmark: | |
| raise HTTPException( | |
| status_code=404, | |
| detail=f"Benchmark '{key}' not found. Available: {list(EEG_BENCHMARKS.keys())}", | |
| ) | |
| return _benchmark_to_dict(key, benchmark) | |