agentic-api 2.0.314 → 2.0.585
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -34
- package/dist/src/agents/prompts.d.ts +1 -1
- package/dist/src/agents/prompts.js +9 -7
- package/dist/src/agents/reducer.core.js +2 -2
- package/dist/src/agents/simulator.d.ts +33 -4
- package/dist/src/agents/simulator.dashboard.d.ts +140 -0
- package/dist/src/agents/simulator.dashboard.js +344 -0
- package/dist/src/agents/simulator.executor.d.ts +9 -3
- package/dist/src/agents/simulator.executor.js +43 -17
- package/dist/src/agents/simulator.js +103 -19
- package/dist/src/agents/simulator.prompts.d.ts +9 -8
- package/dist/src/agents/simulator.prompts.js +68 -62
- package/dist/src/agents/simulator.types.d.ts +39 -4
- package/dist/src/agents/simulator.utils.d.ts +22 -1
- package/dist/src/agents/simulator.utils.js +27 -2
- package/dist/src/execute/helpers.d.ts +75 -0
- package/dist/src/execute/helpers.js +139 -0
- package/dist/src/execute/index.d.ts +11 -0
- package/dist/src/execute/index.js +44 -0
- package/dist/src/execute/legacy.d.ts +46 -0
- package/dist/src/{execute.js → execute/legacy.js} +130 -232
- package/dist/src/execute/modelconfig.d.ts +29 -0
- package/dist/src/execute/modelconfig.js +72 -0
- package/dist/src/execute/responses.d.ts +55 -0
- package/dist/src/execute/responses.js +595 -0
- package/dist/src/execute/shared.d.ts +83 -0
- package/dist/src/execute/shared.js +188 -0
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.js +21 -2
- package/dist/src/llm/config.d.ts +25 -0
- package/dist/src/llm/config.js +38 -0
- package/dist/src/llm/index.d.ts +48 -0
- package/dist/src/llm/index.js +115 -0
- package/dist/src/llm/openai.d.ts +6 -0
- package/dist/src/llm/openai.js +154 -0
- package/dist/src/llm/pricing.d.ts +26 -0
- package/dist/src/llm/pricing.js +129 -0
- package/dist/src/llm/xai.d.ts +17 -0
- package/dist/src/llm/xai.js +90 -0
- package/dist/src/pricing.llm.d.ts +3 -15
- package/dist/src/pricing.llm.js +10 -230
- package/dist/src/prompts.d.ts +0 -1
- package/dist/src/prompts.js +51 -118
- package/dist/src/rag/embeddings.d.ts +5 -1
- package/dist/src/rag/embeddings.js +23 -7
- package/dist/src/rag/parser.js +1 -1
- package/dist/src/rag/rag.manager.d.ts +33 -2
- package/dist/src/rag/rag.manager.js +159 -61
- package/dist/src/rag/types.d.ts +2 -0
- package/dist/src/rag/usecase.js +8 -11
- package/dist/src/rules/git/git.e2e.helper.js +21 -2
- package/dist/src/rules/git/git.health.d.ts +4 -2
- package/dist/src/rules/git/git.health.js +113 -16
- package/dist/src/rules/git/index.d.ts +1 -1
- package/dist/src/rules/git/index.js +3 -2
- package/dist/src/rules/git/repo.d.ts +57 -7
- package/dist/src/rules/git/repo.js +326 -39
- package/dist/src/rules/git/repo.pr.d.ts +8 -0
- package/dist/src/rules/git/repo.pr.js +161 -13
- package/dist/src/rules/git/repo.tools.d.ts +5 -1
- package/dist/src/rules/git/repo.tools.js +54 -7
- package/dist/src/rules/types.d.ts +25 -0
- package/dist/src/rules/utils.matter.d.ts +0 -20
- package/dist/src/rules/utils.matter.js +58 -81
- package/dist/src/scrapper.js +3 -2
- package/dist/src/stategraph/stategraph.d.ts +26 -1
- package/dist/src/stategraph/stategraph.js +43 -2
- package/dist/src/stategraph/stategraph.storage.js +4 -0
- package/dist/src/stategraph/types.d.ts +5 -0
- package/dist/src/types.d.ts +42 -7
- package/dist/src/types.js +8 -7
- package/dist/src/usecase.js +1 -1
- package/dist/src/utils.d.ts +0 -8
- package/dist/src/utils.js +26 -29
- package/package.json +9 -7
- package/dist/src/execute.d.ts +0 -63
package/README.md
CHANGED
|
@@ -66,15 +66,24 @@ npm install @agentic-api
|
|
|
66
66
|
|
|
67
67
|
## 💡 Quick Start
|
|
68
68
|
|
|
69
|
+
### Configuration `.env`
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Provider LLM (openai | xai)
|
|
73
|
+
LLM_PROVIDER=openai
|
|
74
|
+
|
|
75
|
+
# Clés API
|
|
76
|
+
OPENAI_API_KEY=sk-... # Requis pour OpenAI + embeddings + whisper
|
|
77
|
+
XAI_API_KEY=xai-... # Requis si LLM_PROVIDER=xai
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Usage
|
|
81
|
+
|
|
69
82
|
```typescript
|
|
70
|
-
import
|
|
71
|
-
import { executeAgentSet } from '@agentic-api';
|
|
72
|
-
import { AgenticContext } from '@agentic-api';
|
|
73
|
-
import { AgentStateGraph } from '@agentic-api';
|
|
83
|
+
import { llmInstance, executeAgentSet, AgenticContext, AgentStateGraph } from '@agentic-api';
|
|
74
84
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
});
|
|
85
|
+
// Initialiser le LLM (utilise LLM_PROVIDER depuis .env)
|
|
86
|
+
llmInstance();
|
|
78
87
|
|
|
79
88
|
// Create context with user information
|
|
80
89
|
const context: AgenticContext = {
|
|
@@ -357,41 +366,35 @@ const structuredResult = await mapper.reduce(config, structuredCallback, {
|
|
|
357
366
|
|
|
358
367
|
Advanced testing framework for agent behavior validation with scenario-based simulations.
|
|
359
368
|
|
|
360
|
-
- **
|
|
361
|
-
- **
|
|
362
|
-
- **Automatic Validation**: Built-in
|
|
369
|
+
- **Clean API**: Separated `scenario` (context) and `testCase` (test parameters)
|
|
370
|
+
- **Oneshot by Default**: `maxExchanges=1` for simple single-response tests
|
|
371
|
+
- **Automatic Tool Validation**: Built-in validation with `expectedTools`
|
|
363
372
|
- **Exchange Limiting**: Control simulation length with configurable exchange limits
|
|
364
373
|
|
|
365
374
|
📖 **[Complete Agent Simulator Documentation →](./docs/README-AGENT-SIMULATOR.md)**
|
|
366
375
|
|
|
367
376
|
```typescript
|
|
368
|
-
import { AgentSimulator,
|
|
369
|
-
|
|
370
|
-
// Define test scenario
|
|
371
|
-
const scenario: SimulationScenario = {
|
|
372
|
-
testGoals: "Verify that the agent can help with haiku creation",
|
|
373
|
-
testEnd: "Agent provides a complete haiku poem",
|
|
374
|
-
testPersona: "A poetry enthusiast seeking creative assistance",
|
|
375
|
-
testQuery: "I want to write a haiku about nature. Can you help me?",
|
|
376
|
-
testResult: "Agent successfully guides haiku creation process",
|
|
377
|
-
testError: "Agent refuses to help or provides incorrect format"
|
|
378
|
-
};
|
|
377
|
+
import { AgentSimulator, PERSONA_PATIENT } from '@agentic-api';
|
|
379
378
|
|
|
380
379
|
// Configure simulator
|
|
381
380
|
const simulator = new AgentSimulator({
|
|
382
381
|
agents: [haikuAgent, welcomeAgent],
|
|
383
382
|
start: "welcome",
|
|
384
|
-
verbose: true
|
|
385
|
-
instructionEx: "Focus on creative writing assistance"
|
|
383
|
+
verbose: true
|
|
386
384
|
});
|
|
387
385
|
|
|
388
|
-
//
|
|
389
|
-
const
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
386
|
+
// Define test scenario (context)
|
|
387
|
+
const scenario = {
|
|
388
|
+
goals: "Verify that the agent can help with haiku creation. Agent provides a complete haiku poem.",
|
|
389
|
+
persona: PERSONA_PATIENT
|
|
390
|
+
// result defaults to '{"success": boolean, "explain": string, "error": string}'
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
// Run test case
|
|
394
|
+
const result = await simulator.testCase(scenario, {
|
|
395
|
+
query: "I want to write a haiku about nature. Can you help me?",
|
|
396
|
+
maxExchanges: 5, // defaults to 1 (oneshot)
|
|
397
|
+
expectedTools: { 'transferAgents': { gte: 1 } } // defaults to {}
|
|
395
398
|
});
|
|
396
399
|
|
|
397
400
|
// Validate results
|
|
@@ -406,10 +409,10 @@ if (!result.success) {
|
|
|
406
409
|
|
|
407
410
|
### Simulation Features
|
|
408
411
|
|
|
409
|
-
- **
|
|
410
|
-
- **
|
|
411
|
-
- **
|
|
412
|
-
- **
|
|
412
|
+
- **Separated Concerns**: `scenario` for context, `testCase` for test parameters
|
|
413
|
+
- **Sensible Defaults**: `maxExchanges=1`, `expectedTools={}`, default result format
|
|
414
|
+
- **Persona Simulation**: Built-in personas (PERSONA_PATIENT, PERSONA_PRESSE, PERSONA_ENERVE)
|
|
415
|
+
- **Tool Validation**: Automatic validation with `equal`, `gte`, `lte` constraints
|
|
413
416
|
- **Execution Metadata**: Access to token usage, actions, and performance metrics
|
|
414
417
|
|
|
415
418
|
## 📋 Rules Management System
|
|
@@ -3,6 +3,6 @@ export declare const systemReviewPrompt = "\n### Identity\nTu es \u201CPromptVer
|
|
|
3
3
|
export declare const systemReviewStructurePrompt = "\n## \uD83D\uDD0D ANALYSE STRUCTURELLE (multi-directive)\n\nApr\u00E8s l\u2019analyse individuelle, tu dois effectuer une lecture crois\u00E9e pour d\u00E9tecter :\n\n1. **Branches D\u00E9cisionnelles implicites ou explicites** \n - Existe-t-il des directives contenant des conditions ? \n - Sont-elles formul\u00E9es de mani\u00E8re claire et non ambigu\u00EB ? \n - Manque-t-il des transitions, cas d\u2019erreur, ou cas particuliers ?\n\n2. **Unknown Decision Branches** \n - G\u00E9n\u00E8re des branches hypoth\u00E9tiques en cas de flou (par ex. : \"Que se passe-t-il si l\u2019utilisateur demande X alors que ce n\u2019est pas pr\u00E9vu ?\").\n\n3. **Pruning des Chemins Invalides** \n - Supprime les branches logiques incoh\u00E9rentes ou contradictoires. \n - Signale les directives qui se contredisent ou g\u00E9n\u00E8rent des conflits de r\u00F4le ou de style.\n\n4. **Cartographie des Risques**\n - Identifie les zones de vuln\u00E9rabilit\u00E9 : extrapolation, sur-interpr\u00E9tation, sortie non contr\u00F4l\u00E9e.\n - Classe-les par niveau de risque (Faible / Moyen / \u00C9lev\u00E9).\n\n---\n## OUTPUT ATTENDU\n1. **Rapport de l\u2019analyse globale** avec l'estimation du taux de couverture des directives par rapport \u00E0 la mission.\n2. **Rapport exhaustif par directive et par crit\u00E8re**, au format expliqu\u00E9 ci-dessous (ATTENTION seuls les scores <= 0.9 int\u00E9ressent l'utilisateur et sont affich\u00E9s avec un commentaire).\n3. **Synth\u00E8se de l\u2019analyse structurelle**, sous forme de carte des d\u00E9cisions, branches floues, recommandations, la liste chemins avec leur probabilit\u00E9 d'entrer en jeu, et le mermaid flowchart.\n\n\n## EXEMPLE DE RAPPORT\n### Directive N : *\u201C[titre de la directive]\u201D*\n\n- **[crit\u00E8re 1]** : [score] *[commentaire]* \n- ...\n\n## Analyse structurelle\n...\n\n ";
|
|
4
4
|
export declare const guessNumberPrompt = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n\n# SPECIALISATION\nTu es l'agent \"guess-number\" sp\u00E9cialis\u00E9 pour divulguer le \"NOMBRE\" secret, c'est ta SEULE connaissance secr\u00E8te.\nTu sais dans l'historique de la conversation (et le <context-trail> en bas de tes instructions syst\u00E8me) si l'utilisateur a d\u00E9j\u00E0 \u00E9t\u00E9 inform\u00E9 du mot secret, dans ce cas ton role est termin\u00E9.\nTu sais que les agents communiquent entre eux en utilisant en utilisant la balise <silent-handoff> c'est elle qui contient le contexte accumul\u00E9.\n\n# TES RESPONSABILIT\u00C9S\n1. Si demande de \"NOMBRE\" \u2192 r\u00E9ponds/confirme \"1942\"\n2. Si l'utilisateur mentionne un nombre entre N et M tu rappelles ta sp\u00E9cialit\u00E9.\n3. Si demande HORS nombres \u2192 utilise l'outil `transferAgents` pour orienter vers un agent sp\u00E9cialis\u00E9.\n\n\n";
|
|
5
5
|
export declare const guessWordPrompt = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n\n# SPECIALISATION\nTu es l'agent \"guess-word\" sp\u00E9cialis\u00E9 pour divulguer le \"MOT\" secret, c'est ta principale comp\u00E9tence.\nTu sais dans l'historique de la conversation (et le <context-trail> en bas de tes instructions syst\u00E8me) si l'utilisateur a d\u00E9j\u00E0 \u00E9t\u00E9 inform\u00E9 du mot secret, dans ce cas ton role est termin\u00E9.\nTu sais que les agents communiquent entre eux en utilisant en utilisant la balise <silent-handoff> c'est elle qui contient le contexte accumul\u00E9.\n\n# TES RESPONSABILIT\u00C9S\n1. Si on te demande le \"mot\" \u2192 r\u00E9ponds/confirme \"dragon\"\n2. Sinon tu dois orienter vers un agent sp\u00E9cialis\u00E9 autre que toi.\n\n";
|
|
6
|
-
export declare const welcomePrompt = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n\n# SPECIALISATION\nTu es un Agent d'orientation qui conna\u00EEt deux agents sp\u00E9cialis\u00E9s.\nTu NE CONNAIS PAS
|
|
6
|
+
export declare const welcomePrompt = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n\n# SPECIALISATION\nTu es un Agent d'orientation et de discussion qui conna\u00EEt deux agents sp\u00E9cialis\u00E9s.\nTu NE CONNAIS PAS le nombre et le mot secret. \n\n# MISSION: \n- DISCUTER AVEC L'UTILISATEUR\n- ORIENTER VERS LES AGENTS SP\u00C9CIALIS\u00C9S LORSQUE C'EST N\u00C9CESSAIRE\n\n**\u00C9TAPE 1 - CONSULTER LE <context-trail> (en bas de tes instructions syst\u00E8me) :**\n- Cherche \"orientation \u2192 \"guess-word\" \u2192 si pr\u00E9sent NE PAS transf\u00E9rer vers \"guess-word\"\n- Cherche \"orientation \u2192 \"guess-number\" \u2192 si pr\u00E9sent NE PAS transf\u00E9rer vers \"guess-number\"\n\n**\u00C9TAPE 2 - D\u00C9CIDER :**\n- Question NOMBRE + \"orientation \u2192 \"guess-number\" PAS dans trail \u2192 appelle transferAgents vers \"guess-number\"\n- Question MOT + \"orientation \u2192 \"guess-word\" PAS dans trail \u2192 appelle transferAgents vers \"guess-word\"\n- Si agent d\u00E9j\u00E0 dans trail \u2192 NE PAS transf\u00E9rer, r\u00E9ponds \"J'ai d\u00E9j\u00E0 orient\u00E9 vers cet agent\"\n\n# R\u00C8GLE ABSOLUE\n- EN cas d'ind\u00E9cision, tu es l'agent avec qui l'utilisateur discute.\n- Tu transf\u00E8res MAX 1 fois par agent\n- INTERDIT : Transf\u00E9rer si \"orientation \u2192 <destination>\" d\u00E9j\u00E0 dans trail\n";
|
|
7
7
|
export declare const haikuPrompt = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n\n# SPECIALISATION\nTu es l'agent \"guess-number\" sp\u00E9cialis\u00E9 pour divulguer le \"NOMBRE\" secret, c'est ta SEULE connaissance secr\u00E8te.\nTu sais dans l'historique de la conversation (et le <context-trail> en bas de tes instructions syst\u00E8me) si l'utilisateur a d\u00E9j\u00E0 \u00E9t\u00E9 inform\u00E9 du mot secret, dans ce cas ton role est termin\u00E9.\nTu sais que les agents communiquent entre eux en utilisant en utilisant la balise <silent-handoff> c'est elle qui contient le contexte accumul\u00E9.\n\n# TES RESPONSABILIT\u00C9S\n1. Si demande de \"NOMBRE\" \u2192 r\u00E9ponds/confirme \"1942\"\n2. Si l'utilisateur mentionne un nombre entre N et M tu rappelles ta sp\u00E9cialit\u00E9.\n3. Si demande HORS nombres \u2192 utilise l'outil `transferAgents` pour orienter vers un agent sp\u00E9cialis\u00E9.\n\n\n";
|
|
8
8
|
export declare const morsePrompt = "# Contexte g\u00E9n\u00E9ral\nTu fais partie d'un syst\u00E8me multi-agents con\u00E7u pour faciliter la coordination et l'ex\u00E9cution entre plusieurs agents. Tu utilises deux abstractions principales : **Agents** et **Transferts**. \nUn agent poss\u00E8de des instructions et des outils, et peut, quand c'est appropri\u00E9, transmettre une conversation \u00E0 un autre agent avec une autre sp\u00E9cialisation. Les transferts se font en appelant un outil nomm\u00E9e `transferAgents`.\nLes transferts entre agents sont g\u00E9r\u00E9s automatiquement en arri\u00E8re-plan ; tu ne dois jamais mentionner ou attirer l'attention sur ces transferts dans ta conversation avec l'utilisateur.\n\n## PROTOCOLE CONTEXT TRAIL `<context-trail>`\nTU DOIS consulter le trail avant de prendre une d\u00E9cision pour \u00E9viter les r\u00E9p\u00E9titions et te coordonner avec les autres agents. Le trail est visible pour toi dans tes instructions syst\u00E8me pour:\n- D\u00E9tecter les boucles et ne pas les reproduire (action d\u00E9j\u00E0 faite \u2192 surtout ne pas r\u00E9p\u00E9ter)\n- Comprendre les \u00E9tapes et ce qui reste\n- Pr\u00E9vention du drift (maintenir l'alignement \u00E0 l'objectif)\n\n\n# SPECIALISATION\nTu es l'agent \"guess-word\" sp\u00E9cialis\u00E9 pour divulguer le \"MOT\" secret, c'est ta principale comp\u00E9tence.\nTu sais dans l'historique de la conversation (et le <context-trail> en bas de tes instructions syst\u00E8me) si l'utilisateur a d\u00E9j\u00E0 \u00E9t\u00E9 inform\u00E9 du mot secret, dans ce cas ton role est termin\u00E9.\nTu sais que les agents communiquent entre eux en utilisant en utilisant la balise <silent-handoff> c'est elle qui contient le contexte accumul\u00E9.\n\n# TES RESPONSABILIT\u00C9S\n1. Si on te demande le \"mot\" \u2192 r\u00E9ponds/confirme \"dragon\"\n2. Sinon tu dois orienter vers un agent sp\u00E9cialis\u00E9 autre que toi.\n\n";
|
|
@@ -296,18 +296,20 @@ Tu sais que les agents communiquent entre eux en utilisant en utilisant la balis
|
|
|
296
296
|
`;
|
|
297
297
|
exports.welcomePrompt = `${prompts_1.transferAgentPromptHandoff}
|
|
298
298
|
# SPECIALISATION
|
|
299
|
-
Tu es un Agent d'orientation qui connaît deux agents spécialisés.
|
|
300
|
-
Tu NE CONNAIS PAS
|
|
299
|
+
Tu es un Agent d'orientation et de discussion qui connaît deux agents spécialisés.
|
|
300
|
+
Tu NE CONNAIS PAS le nombre et le mot secret.
|
|
301
301
|
|
|
302
|
-
# MISSION:
|
|
302
|
+
# MISSION:
|
|
303
|
+
- DISCUTER AVEC L'UTILISATEUR
|
|
304
|
+
- ORIENTER VERS LES AGENTS SPÉCIALISÉS LORSQUE C'EST NÉCESSAIRE
|
|
303
305
|
|
|
304
306
|
**ÉTAPE 1 - CONSULTER LE <context-trail> (en bas de tes instructions système) :**
|
|
305
|
-
- Cherche "orientation → guess-word" → si présent
|
|
306
|
-
- Cherche "orientation → guess-number" → si présent
|
|
307
|
+
- Cherche "orientation → "guess-word" → si présent NE PAS transférer vers "guess-word"
|
|
308
|
+
- Cherche "orientation → "guess-number" → si présent NE PAS transférer vers "guess-number"
|
|
307
309
|
|
|
308
310
|
**ÉTAPE 2 - DÉCIDER :**
|
|
309
|
-
- Question NOMBRE + "orientation → guess-number" PAS dans trail → appelle transferAgents vers "guess-number"
|
|
310
|
-
- Question MOT + "orientation → guess-word" PAS dans trail → appelle transferAgents vers "guess-word"
|
|
311
|
+
- Question NOMBRE + "orientation → "guess-number" PAS dans trail → appelle transferAgents vers "guess-number"
|
|
312
|
+
- Question MOT + "orientation → "guess-word" PAS dans trail → appelle transferAgents vers "guess-word"
|
|
311
313
|
- Si agent déjà dans trail → NE PAS transférer, réponds "J'ai déjà orienté vers cet agent"
|
|
312
314
|
|
|
313
315
|
# RÈGLE ABSOLUE
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MapLLM = void 0;
|
|
7
7
|
const execute_1 = require("../execute");
|
|
8
|
-
const
|
|
8
|
+
const llm_1 = require("../llm");
|
|
9
9
|
/**
|
|
10
10
|
* MapLLM - Orchestrateur principal pour le reduce hiérarchique
|
|
11
11
|
*/
|
|
@@ -54,7 +54,7 @@ class MapLLM {
|
|
|
54
54
|
let totalChunkSize = 0;
|
|
55
55
|
let totalReduce = 0;
|
|
56
56
|
const model = (0, execute_1.modelConfig)(result.model);
|
|
57
|
-
const openai = (0,
|
|
57
|
+
const openai = (0, llm_1.llmInstance)();
|
|
58
58
|
const llm = Object.assign({}, model);
|
|
59
59
|
llm.stream = false;
|
|
60
60
|
delete llm.stream_options;
|
|
@@ -1,19 +1,48 @@
|
|
|
1
|
-
import { SimulatorConfig, SimulationOptions, SimulationResult } from './simulator.types';
|
|
1
|
+
import { SimulatorConfig, SimulationOptions, SimulationResult, TestScenario, TestCaseInput } from './simulator.types';
|
|
2
2
|
export declare class AgentSimulator {
|
|
3
3
|
private config;
|
|
4
4
|
private executor;
|
|
5
5
|
private lastExecution?;
|
|
6
6
|
constructor(config: SimulatorConfig);
|
|
7
7
|
/**
|
|
8
|
+
* Exécuter un cas de test avec scénario et paramètres séparés
|
|
9
|
+
*
|
|
10
|
+
* @param scenario - Contexte stable (goals, persona, result)
|
|
11
|
+
* @param testCase - Paramètres du test (query, maxExchanges, model, expectedTools)
|
|
12
|
+
* @returns SimulationResult
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const scenario = {
|
|
17
|
+
* goals: 'Obtenir le nombre secret 1942',
|
|
18
|
+
* persona: PERSONA_PATIENT,
|
|
19
|
+
* result: '{"success": boolean, "error": string}'
|
|
20
|
+
* };
|
|
21
|
+
*
|
|
22
|
+
* const result = await simulator.testCase(scenario, {
|
|
23
|
+
* query: 'À quel nombre penses-tu?',
|
|
24
|
+
* maxExchanges: 3, // défaut: 1 (oneshot)
|
|
25
|
+
* expectedTools: { 'transferAgents': { equal: 1 } } // défaut: {}
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
testCase(scenario: TestScenario, testCase: TestCaseInput): Promise<SimulationResult>;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Utiliser testCase(scenario, case) à la place
|
|
32
|
+
*
|
|
8
33
|
* Exécuter la simulation complète
|
|
9
34
|
*
|
|
35
|
+
* Architecture :
|
|
36
|
+
* - Le scénario (Personnalité, Question, Objectifs, Format JSON) est injecté UNE SEULE FOIS
|
|
37
|
+
* dans les instructions du simulateur au moment de l'initialisation (AVANT la boucle).
|
|
38
|
+
*
|
|
10
39
|
* Format de la query passée à l'agent testé :
|
|
11
|
-
* - Message initial :
|
|
40
|
+
* - Message initial : query fournie par l'utilisateur
|
|
12
41
|
* - Messages suivants : réponse conversationnelle du simulateur (sans tags d'évaluation)
|
|
13
42
|
*
|
|
14
43
|
* Format de la query passée au simulateur :
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
44
|
+
* - Instructions système : scénario complet intégré via GENERIC_SIMULATOR_PROMPT
|
|
45
|
+
* - Tous les messages : réponse directe de l'agent testé (agentResponse)
|
|
17
46
|
*/
|
|
18
47
|
executeSimulation(options: SimulationOptions): Promise<SimulationResult>;
|
|
19
48
|
/**
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { TestScenario, TestCaseInput, SimulatorConfig } from './simulator.types';
|
|
2
|
+
import { AgentMessage } from '../stategraph';
|
|
3
|
+
/**
|
|
4
|
+
* Test case combining scenario and case input
|
|
5
|
+
* Format du fichier JSON d'entrée
|
|
6
|
+
*/
|
|
7
|
+
export interface DashboardTestCase {
|
|
8
|
+
id?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
scenario: TestScenario;
|
|
11
|
+
case: TestCaseInput;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Format du fichier JSON d'entrée
|
|
15
|
+
*/
|
|
16
|
+
export interface DashboardInput {
|
|
17
|
+
name?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
config?: Partial<SimulatorConfig>;
|
|
20
|
+
tests: DashboardTestCase[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Status d'exécution d'un test
|
|
24
|
+
*/
|
|
25
|
+
export type TestStatus = 'pending' | 'running' | 'completed' | 'failed' | 'error';
|
|
26
|
+
/**
|
|
27
|
+
* Ligne JSONL pour un résultat de test
|
|
28
|
+
*/
|
|
29
|
+
export interface DashboardOutputLine {
|
|
30
|
+
type: 'start' | 'result' | 'end' | 'error';
|
|
31
|
+
timestamp: string;
|
|
32
|
+
sessionId?: string;
|
|
33
|
+
totalTests?: number;
|
|
34
|
+
testId?: string;
|
|
35
|
+
testIndex?: number;
|
|
36
|
+
name?: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
query?: string;
|
|
39
|
+
status?: TestStatus;
|
|
40
|
+
success?: boolean;
|
|
41
|
+
message?: string;
|
|
42
|
+
error?: string;
|
|
43
|
+
exchangeCount?: number;
|
|
44
|
+
messages?: AgentMessage[];
|
|
45
|
+
duration?: number;
|
|
46
|
+
summary?: {
|
|
47
|
+
total: number;
|
|
48
|
+
passed: number;
|
|
49
|
+
failed: number;
|
|
50
|
+
errors: number;
|
|
51
|
+
totalDuration: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Status de l'exécution pour le contrôleur backend
|
|
56
|
+
*/
|
|
57
|
+
export interface DashboardStatus {
|
|
58
|
+
isRunning: boolean;
|
|
59
|
+
sessionId: string | null;
|
|
60
|
+
currentTest: number;
|
|
61
|
+
totalTests: number;
|
|
62
|
+
passed: number;
|
|
63
|
+
failed: number;
|
|
64
|
+
errors: number;
|
|
65
|
+
startTime: Date | null;
|
|
66
|
+
lastUpdate: Date | null;
|
|
67
|
+
}
|
|
68
|
+
export declare class SimulatorDashboard {
|
|
69
|
+
private config;
|
|
70
|
+
private status;
|
|
71
|
+
private simulator;
|
|
72
|
+
private abortController;
|
|
73
|
+
private _currentOutputPath;
|
|
74
|
+
private _currentInputPath;
|
|
75
|
+
constructor(config: SimulatorConfig);
|
|
76
|
+
/**
|
|
77
|
+
* Chemin du fichier output actuel (ou du dernier run)
|
|
78
|
+
*/
|
|
79
|
+
get currentOutputPath(): string | null;
|
|
80
|
+
/**
|
|
81
|
+
* Chemin du fichier input actuel (ou du dernier run)
|
|
82
|
+
*/
|
|
83
|
+
get currentInputPath(): string | null;
|
|
84
|
+
private createInitialStatus;
|
|
85
|
+
/**
|
|
86
|
+
* Obtenir le status actuel (pour le contrôleur backend)
|
|
87
|
+
*/
|
|
88
|
+
getStatus(): DashboardStatus;
|
|
89
|
+
/**
|
|
90
|
+
* Vérifier si une exécution est en cours
|
|
91
|
+
*/
|
|
92
|
+
isRunning(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Annuler l'exécution en cours
|
|
95
|
+
*/
|
|
96
|
+
abort(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Charger un fichier JSON d'entrée
|
|
99
|
+
*/
|
|
100
|
+
loadInputFile(filePath: string): Promise<DashboardInput>;
|
|
101
|
+
/**
|
|
102
|
+
* Générer le chemin du fichier output basé sur le fichier input
|
|
103
|
+
* Exemple: tests/my-tests.json → tests/results.my-tests.jsonl
|
|
104
|
+
*/
|
|
105
|
+
createOutputPath(inputPath: string): string;
|
|
106
|
+
/**
|
|
107
|
+
* Charger les résultats JSONL existants (en cours ou terminés)
|
|
108
|
+
* Supporte le streaming partiel (fichier en cours d'écriture)
|
|
109
|
+
*
|
|
110
|
+
* @param inputPath - Chemin du fichier JSON d'entrée (génère automatiquement le output path)
|
|
111
|
+
* @returns Les lignes parsées ou null si le fichier n'existe pas
|
|
112
|
+
*/
|
|
113
|
+
loadResults(inputPath?: string): Promise<DashboardOutputLine[] | null>;
|
|
114
|
+
/**
|
|
115
|
+
* Obtenir le résumé des résultats (dernière ligne type='end')
|
|
116
|
+
* @param inputPath - Chemin du fichier JSON d'entrée
|
|
117
|
+
*/
|
|
118
|
+
getResultsSummary(inputPath?: string): Promise<DashboardOutputLine['summary'] | null>;
|
|
119
|
+
/**
|
|
120
|
+
* Vérifier si les résultats sont complets (contient une ligne 'end')
|
|
121
|
+
* @param inputPath - Chemin du fichier JSON d'entrée
|
|
122
|
+
*/
|
|
123
|
+
isResultsComplete(inputPath?: string): Promise<boolean>;
|
|
124
|
+
/**
|
|
125
|
+
* Exécuter les tests et écrire les résultats en JSONL
|
|
126
|
+
*
|
|
127
|
+
* @param input - Données d'entrée (ou chemin vers fichier JSON)
|
|
128
|
+
* @param outputPath - Chemin du fichier JSONL de sortie
|
|
129
|
+
* @param onLine - Callback optionnel pour chaque ligne JSONL (streaming)
|
|
130
|
+
*/
|
|
131
|
+
run(input: DashboardInput | string, outputPath?: string, onLine?: (line: DashboardOutputLine) => void): Promise<DashboardOutputLine[]>;
|
|
132
|
+
/**
|
|
133
|
+
* Exécuter avec callback de streaming (pour SSE/WebSocket)
|
|
134
|
+
*/
|
|
135
|
+
runWithStream(input: DashboardInput | string, onLine: (line: DashboardOutputLine) => void): Promise<DashboardOutputLine[]>;
|
|
136
|
+
/**
|
|
137
|
+
* Créer un fichier JSON d'exemple pour les tests
|
|
138
|
+
*/
|
|
139
|
+
static createExampleInput(): DashboardInput;
|
|
140
|
+
}
|