Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, HTTPException | |
| from typing import Dict, Any | |
| import asyncio | |
| from ..models.jobs import JobCreate, JobStatus | |
| from ..services import scrape_pipeline | |
| from ..services.metrics_logger import save_job_metrics_to_supabase | |
| from ..services.scrape_pipeline import ENABLE_METRICS | |
| router = APIRouter() | |
| async def run_job(body: JobCreate) -> JobStatus: | |
| """ | |
| Temporary endpoint to exercise the pipeline synchronously. | |
| In production this should enqueue a background job. | |
| """ | |
| try: | |
| status_text, system_prompt, name, history, msg_update, send_update, stats = await scrape_pipeline.run_full_research_new( | |
| str(body.url), force_refresh=body.force_refresh | |
| ) | |
| stats_out: Dict[str, Any] = { | |
| "status_text": status_text, | |
| "name": name, | |
| "history": history, | |
| "system_prompt": system_prompt, | |
| "searches_run": stats.get("searches_run", 0), | |
| "pages_scraped": stats.get("pages_scraped", 0), | |
| "gaps_found": stats.get("gaps_found", 0), | |
| "tcr_seconds": stats.get("tcr_seconds", 0.0), | |
| "cache_hit": bool(stats.get("cache_hit", False)), | |
| } | |
| if ENABLE_METRICS: | |
| try: | |
| save_job_metrics_to_supabase( | |
| url=str(body.url), | |
| stats=stats, | |
| user_id=body.user_id, | |
| ) | |
| except Exception as exc: | |
| print(f"⚠️ Metrics logging skipped: {exc}") | |
| return JobStatus( | |
| job_id="dev-inline", | |
| status="completed", | |
| progress=100.0, | |
| stats=stats_out, | |
| errors=None, | |
| ) | |
| except Exception as exc: | |
| raise HTTPException(status_code=500, detail=str(exc)) | |