Intégration du graphe et du multi-branche pour la partie campagne

This commit is contained in:
2026-04-21 05:05:11 +02:00
parent 1a5b6f8d79
commit 67818f0d3d
31 changed files with 1933 additions and 13 deletions

View File

@@ -24,6 +24,7 @@ from app.domain.models import (
PageContext,
PageGenerationContext,
PageSummary,
SceneBranchHint,
SceneSummary,
)
from app.domain.ports import LLMProvider, LLMProviderError
@@ -105,6 +106,14 @@ class PageContextDTO(BaseModel):
values: dict[str, str] = Field(default_factory=dict)
class SceneBranchHintDTO(BaseModel):
"""Indice d'une branche narrative (le Core a deja resolu le nom cible)."""
label: str
target_scene_name: str
condition: str | None = None
class SceneSummaryDTO(BaseModel):
"""Résumé d'une scène : nom + description courte (synopsis)."""
@@ -113,6 +122,8 @@ class SceneSummaryDTO(BaseModel):
# Optionnel : le Core Java ne serialise illustration_count QUE si > 0
# (payload plus leger). Defaut 0 = pas d'illustrations ou champ absent.
illustration_count: int = 0
# Branches narratives sortantes, omises cote Core si vides.
branches: list[SceneBranchHintDTO] = Field(default_factory=list)
class ChapterSummaryDTO(BaseModel):
@@ -357,6 +368,14 @@ def _to_campaign_context(dto: CampaignContextDTO | None) -> CampaignStructuralCo
name=sc.name,
description=sc.description,
illustration_count=sc.illustration_count,
branches=[
SceneBranchHint(
label=br.label,
target_scene_name=br.target_scene_name,
condition=br.condition,
)
for br in sc.branches
],
)
for sc in ch.scenes
],