Résolution d'un bug de switch entre les PNJ lorsqu'on essai de passer directement de l'un à l'autre

Ajout de dossiers pour la partie PNJ pour qu'on puisse les regrouper par cité par exemple et que ce soit plus lisible
This commit is contained in:
2026-06-08 11:05:07 +02:00
parent edc4434298
commit ed22d9f29c
14 changed files with 145 additions and 32 deletions

View File

@@ -63,11 +63,18 @@ class NotebookDeepUseCase:
async def stream(
self,
source_ids: list[str],
question: str,
messages: list[ChatMessage],
context: str = "",
history_limit: int = 8,
) -> AsyncIterator[dict]:
"""Yield des évènements : {type:'progress',current,total}, {type:'token',token},
{type:'done'}. (Les erreurs LLM des lots sont tolérées : lot ignoré.)"""
{type:'done'}. (Les erreurs LLM des lots sont tolérées : lot ignoré.)
La dernière question utilisateur sert à la LECTURE du document (map) ; la
SYNTHÈSE (reduce) reçoit les `history_limit` derniers messages → les relances
conversationnelles (« et pour les autres ? ») fonctionnent aussi en approfondi.
"""
question = next((m.content for m in reversed(messages) if m.role == "user"), "")
chunks: list[dict] = []
for sid in source_ids:
chunks.extend(vector_store.all_chunks(sid))
@@ -102,10 +109,11 @@ class NotebookDeepUseCase:
if context.strip() else ""
)
system_prompt = _REDUCE_SYSTEM.format(context_block=context_block, notes_block=notes_block)
# Historique récent pour la cohérence des relances ; on garantit que le
# dernier message est bien la question courante.
reduce_messages = messages[-history_limit:] if messages else [ChatMessage(role="user", content=question)]
llm_chat: LLMChatProvider = self._llm # type: ignore[assignment]
async for token in llm_chat.stream_chat(
[ChatMessage(role="user", content=question)], system_prompt=system_prompt
):
async for token in llm_chat.stream_chat(reduce_messages, system_prompt=system_prompt):
yield {"type": "token", "token": token}
yield {"type": "done"}