Plusieurs gros ajouts :
- Possibilité de discuter avec un PDF ; RAG ou analyse approfondie. Enlèvement de l'autre outil PDF de discussion qui analysait d'abord un PDF en proposant directement une intégration sans attendre qu'on pose de question - Mise en place de l'import directement dans les outils dans la sidebar - Mise en place d'un outil pour créer des tables aléatoires avec possibilité d'utiliser pendant la partie - Mise en place d'un outil pour mettre en place des PNJ, scènes, chapitre.... directement à partir de la discussion avec le PDF - Mise en place RAG avec mistal-embeding ou nomic si on utilise ollama - Mise en place mistral, google en fournisseurs alternatifs pour l'IA dans le cloud - version 0.11.0-bêta
This commit is contained in:
49
web/src/app/services/notebook-action.model.ts
Normal file
49
web/src/app/services/notebook-action.model.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Protocole d'« actions » proposées par l'IA dans le chat d'un atelier : des blocs
|
||||
* ```loremind-action {json} ``` que le front transforme en cartes « Créer dans la
|
||||
* campagne ». Ce module définit les types + le parseur (extraction + texte nettoyé).
|
||||
*/
|
||||
|
||||
export interface NotebookActionEntry {
|
||||
minRoll: number;
|
||||
maxRoll: number;
|
||||
label: string;
|
||||
detail?: string;
|
||||
}
|
||||
|
||||
export interface NotebookAction {
|
||||
type: 'npc' | 'scene' | 'chapter' | 'arc' | 'table';
|
||||
name: string;
|
||||
description?: string;
|
||||
content?: string;
|
||||
arcType?: 'LINEAR' | 'HUB';
|
||||
diceFormula?: string;
|
||||
entries?: NotebookActionEntry[];
|
||||
}
|
||||
|
||||
const ACTION_RE = /```loremind-action\s*([\s\S]*?)```/g;
|
||||
const VALID_TYPES = new Set(['npc', 'scene', 'chapter', 'arc', 'table']);
|
||||
|
||||
/**
|
||||
* Extrait les blocs d'action COMPLETS d'un message et renvoie le texte sans ces
|
||||
* blocs. Les blocs encore en cours de streaming (clôture absente) ne matchent pas
|
||||
* → ils restent affichés tels quels brièvement, puis deviennent une carte.
|
||||
*/
|
||||
export function parseNotebookActions(content: string): { text: string; actions: NotebookAction[] } {
|
||||
const actions: NotebookAction[] = [];
|
||||
if (!content) return { text: '', actions };
|
||||
let match: RegExpExecArray | null;
|
||||
ACTION_RE.lastIndex = 0;
|
||||
while ((match = ACTION_RE.exec(content)) !== null) {
|
||||
try {
|
||||
const obj = JSON.parse(match[1].trim());
|
||||
if (obj && typeof obj.type === 'string' && VALID_TYPES.has(obj.type) && typeof obj.name === 'string') {
|
||||
actions.push(obj as NotebookAction);
|
||||
}
|
||||
} catch {
|
||||
/* bloc JSON invalide : ignoré */
|
||||
}
|
||||
}
|
||||
const text = content.replace(ACTION_RE, '').trim();
|
||||
return { text, actions };
|
||||
}
|
||||
Reference in New Issue
Block a user