From 67769dd68d26e0df9f9fd5284f64cc117faba4ff Mon Sep 17 00:00:00 2001 From: Michele Date: Mon, 9 Mar 2026 00:30:47 +0100 Subject: [PATCH] feat(03-02): topic_overrides in CalendarRequest + pipeline wiring - Aggiunto campo topic_overrides: Optional[dict[int, str]] a CalendarRequest - GenerationPipeline._run_generation ora controlla request.topic_overrides prima di chiamare LLM per generare il topic - Slot con override saltano la chiamata LLM per il topic - Log informativo quando un override viene applicato - Slot senza override continuano a funzionare come prima --- backend/schemas/calendar.py | 5 +++++ backend/services/generation_pipeline.py | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/schemas/calendar.py b/backend/schemas/calendar.py index 1ed48f2..540e902 100644 --- a/backend/schemas/calendar.py +++ b/backend/schemas/calendar.py @@ -88,6 +88,11 @@ class CalendarRequest(BaseModel): description="Data di inizio del calendario in formato YYYY-MM-DD. " "Se None, usa la data corrente.", ) + topic_overrides: Optional[dict[int, str]] = Field( + default=None, + description="Override topic per slot specifici. Chiave: indice slot (0-12), valore: topic. " + "Gli slot con override skipperanno la generazione topic LLM.", + ) class CalendarResponse(BaseModel): diff --git a/backend/services/generation_pipeline.py b/backend/services/generation_pipeline.py index 0e8f7de..f2840c7 100644 --- a/backend/services/generation_pipeline.py +++ b/backend/services/generation_pipeline.py @@ -307,8 +307,17 @@ class GenerationPipeline: slot.target_nicchia, ) - # Genera topic se non presente nello slot + # Genera topic se non presente nello slot. + # Controlla prima gli override passati dall'utente dallo Swipe File. topic = slot.topic + if not topic and request.topic_overrides and slot.indice in request.topic_overrides: + topic = request.topic_overrides[slot.indice] + logger.info( + "Topic override applicato | job_id=%s | slot=%d | topic=%s", + job_id, + slot.indice, + topic[:60], + ) if not topic: # Usa asyncio.to_thread per non bloccare l'event loop # (generate_topic usa time.sleep per inter_request_delay)