File size: 2,198 Bytes
f756647 375ef93 f756647 375ef93 f756647 375ef93 f756647 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | from fastapi import APIRouter, HTTPException, Header
from fastapi.responses import FileResponse
import json
import tempfile
from datetime import datetime
from core.state import results, completed_task_ids
from core.database import save_results_to_hf, load_results_from_hf
from config import MASTER_SECRET
router = APIRouter(prefix="/api/results", tags=["results"])
@router.get("/")
async def get_results():
try:
memory_results = results[-50:]
hf_results = load_results_from_hf(50)
all_results = memory_results.copy()
existing_ids = {r.get("task_id") for r in all_results}
for r in hf_results:
if r.get("task_id") not in existing_ids:
all_results.append(r)
existing_ids.add(r.get("task_id"))
return {
"total": len(all_results),
"results": all_results[-100:],
"memory_count": len(memory_results),
"hf_count": len(hf_results),
"completed_task_ids": list(completed_task_ids)[-100:],
"total_completed": len(completed_task_ids),
}
except Exception as e:
print(f"❌ Results error: {e}")
raise HTTPException(500, str(e))
@router.post("/save")
async def force_save(api_key: str = Header(..., alias="X-API-Key")):
try:
if api_key != MASTER_SECRET:
raise HTTPException(401, "Invalid API key")
success = save_results_to_hf(results)
return {"status": "saved" if success else "failed", "count": len(results)}
except HTTPException:
raise
except Exception as e:
print(f"❌ Force save error: {e}")
raise HTTPException(500, str(e))
@router.get("/export")
async def export_results():
try:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"results_export_{timestamp}.json"
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
json.dump(results, f, indent=2, default=str)
tmp_path = f.name
return FileResponse(path=tmp_path, filename=filename, media_type="application/json")
except Exception as e:
raise HTTPException(500, str(e)) |