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:
@@ -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"}
|
||||
|
||||
|
||||
@@ -1100,7 +1100,8 @@ async def chat_notebook_deep_stream(
|
||||
) -> StreamingResponse:
|
||||
"""Analyse APPROFONDIE (map-reduce sur tout le document). Évènements SSE :
|
||||
`progress` {current,total} pendant la lecture, puis `token` {token}, puis `done`."""
|
||||
question = next((m.content for m in reversed(body.messages) if m.role == "user"), "")
|
||||
messages = [ChatMessage(role=m.role, content=m.content) for m in body.messages]
|
||||
question = next((m.content for m in reversed(messages) if m.role == "user"), "")
|
||||
|
||||
def _sse(event: str, data: dict) -> str:
|
||||
return f"event: {event}\ndata: {json.dumps(data, ensure_ascii=False)}\n\n"
|
||||
@@ -1110,7 +1111,7 @@ async def chat_notebook_deep_stream(
|
||||
yield _sse("error", {"message": "Question vide."})
|
||||
return
|
||||
try:
|
||||
async for ev in use_case.stream(body.source_ids, question, context=body.context):
|
||||
async for ev in use_case.stream(body.source_ids, messages, context=body.context):
|
||||
ev_type = ev.pop("type")
|
||||
yield _sse(ev_type, ev)
|
||||
except (LLMProviderError, EmbeddingError) as exc:
|
||||
|
||||
Reference in New Issue
Block a user