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
This commit is contained in:
Michele
2026-03-09 00:30:47 +01:00
parent babdf8a250
commit 67769dd68d
2 changed files with 15 additions and 1 deletions

View File

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

View File

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