|
19 | 19 | from typing import Literal |
20 | 20 | from uuid import UUID, uuid5 |
21 | 21 |
|
| 22 | +import logfire |
22 | 23 | from fastapi import APIRouter, Depends, HTTPException |
23 | 24 | from pydantic import BaseModel, Field |
24 | 25 | from sqlmodel import Session, select |
@@ -285,6 +286,18 @@ def _build_response( |
285 | 286 | ) |
286 | 287 |
|
287 | 288 |
|
| 289 | +def _trigger_modal_report(report_id: str, tax_benefit_model_name: str) -> None: |
| 290 | + """Trigger Modal function for economic impact report.""" |
| 291 | + import modal |
| 292 | + |
| 293 | + if tax_benefit_model_name == "policyengine_uk": |
| 294 | + fn = modal.Function.from_name("policyengine", "run_report_uk") |
| 295 | + else: |
| 296 | + fn = modal.Function.from_name("policyengine", "run_report_us") |
| 297 | + |
| 298 | + fn.spawn(report_id=report_id) |
| 299 | + |
| 300 | + |
288 | 301 | @router.post("/economic-impact", response_model=EconomicImpactResponse) |
289 | 302 | def economic_impact( |
290 | 303 | request: EconomicImpactRequest, |
@@ -333,6 +346,11 @@ def economic_impact( |
333 | 346 |
|
334 | 347 | report = _get_or_create_report(baseline_sim.id, reform_sim.id, label, session) |
335 | 348 |
|
| 349 | + # Trigger Modal if report is pending |
| 350 | + if report.status == ReportStatus.PENDING: |
| 351 | + with logfire.span("trigger_modal_report", report_id=str(report.id)): |
| 352 | + _trigger_modal_report(str(report.id), request.tax_benefit_model_name) |
| 353 | + |
336 | 354 | return _build_response(report, baseline_sim, reform_sim, session) |
337 | 355 |
|
338 | 356 |
|
|
0 commit comments