Morget-01 / api /results.py
MGFeng's picture
Update api/results.py
375ef93 verified
Raw
History Blame Contribute Delete
2.2 kB
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))