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))