"""Temporal worker entry point for report generation workflows.""" from __future__ import annotations import asyncio import logging from app.config import settings logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) async def main() -> None: try: from temporalio.client import Client from temporalio.worker import Worker except ImportError as exc: # pragma: no cover raise SystemExit( "temporalio is required for the worker. Install: pip install 'report-genius-ai[temporal]'" ) from exc from app.db.database import init_db from app.services.generation_stale import generation_stale_sweeper_loop await init_db() if int(getattr(settings, "generation_stale_sweep_seconds", 120)) > 0: asyncio.create_task(generation_stale_sweeper_loop()) from app.workflows.report_activities import ( assemble_report, execute_report_generation, fetch_sources, generate_section_activity, retrieve_context, validate_output, ) from app.workflows.report_workflow import ReportGenerationWorkflow client = await Client.connect( settings.temporal_host, namespace=settings.temporal_namespace, ) worker = Worker( client, task_queue=settings.temporal_task_queue, workflows=[ReportGenerationWorkflow], activities=[ fetch_sources, retrieve_context, generate_section_activity, execute_report_generation, validate_output, assemble_report, ], ) logger.info( "Temporal worker started queue=%s host=%s", settings.temporal_task_queue, settings.temporal_host, ) await worker.run() if __name__ == "__main__": asyncio.run(main())