Mise en place de la sélection des source que l'on souhaite que ce soit la partie RAG ou la partie analyse approfondie : on est plus obligé d'envoyer tous les PDFs qu'on a dans la partie atelier PDF + IA.
Some checks failed
Build & Push Images / build (brain) (push) Successful in 1m41s
Build & Push Images / build (core) (push) Failing after 1m46s
Build & Push Images / build-switcher (push) Successful in 26s
Build & Push Images / build (web) (push) Successful in 1m54s

Les réponses ne ce baseront que sur les sources que l'on aura cocher au préalable
This commit is contained in:
2026-06-12 15:58:45 +02:00
parent 8cc90bd24d
commit 6740ed2177
9 changed files with 113 additions and 16 deletions

View File

@@ -47,8 +47,11 @@ export class NotebookService {
/**
* Chat ancré streamé. fetch() + ReadableStream (HttpClient bufferise les SSE).
* Émissions forcées dans la zone Angular pour la détection de changement.
*
* `sourceIds` : sous-ensemble de sources à utiliser pour ce tour (cases cochées) ;
* undefined = toutes les sources prêtes du notebook.
*/
streamChat(notebookId: string, message: string, deep = false): Observable<NotebookChatEvent> {
streamChat(notebookId: string, message: string, deep = false, sourceIds?: string[]): Observable<NotebookChatEvent> {
return new Observable<NotebookChatEvent>((subscriber) => {
const controller = new AbortController();
const emit = (ev: NotebookChatEvent) => this.zone.run(() => subscriber.next(ev));
@@ -59,7 +62,7 @@ export class NotebookService {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'text/event-stream' },
credentials: 'include',
body: JSON.stringify({ message, deep }),
body: JSON.stringify({ message, deep, sourceIds: sourceIds ?? null }),
signal: controller.signal,
});
if (!response.ok || !response.body) {