agentic-api 1.0.1
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 +198 -0
- package/dist/src/agents/authentication.d.ts +6 -0
- package/dist/src/agents/authentication.js +216 -0
- package/dist/src/agents/digestor.d.ts +7 -0
- package/dist/src/agents/digestor.js +60 -0
- package/dist/src/agents/memory.d.ts +0 -0
- package/dist/src/agents/memory.js +1 -0
- package/dist/src/agents/prompts.d.ts +7 -0
- package/dist/src/agents/prompts.js +302 -0
- package/dist/src/agents/semantic.d.ts +4 -0
- package/dist/src/agents/semantic.js +20 -0
- package/dist/src/agents/simpleExample.d.ts +3 -0
- package/dist/src/agents/simpleExample.js +38 -0
- package/dist/src/agents/system-review.d.ts +5 -0
- package/dist/src/agents/system-review.js +181 -0
- package/dist/src/agents/system.d.ts +4 -0
- package/dist/src/agents/system.js +21 -0
- package/dist/src/agents/systemReview.d.ts +4 -0
- package/dist/src/agents/systemReview.js +22 -0
- package/dist/src/execute.d.ts +42 -0
- package/dist/src/execute.js +289 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +32 -0
- package/dist/src/princing.openai.d.ts +4 -0
- package/dist/src/princing.openai.js +49 -0
- package/dist/src/prompts.d.ts +5 -0
- package/dist/src/prompts.js +136 -0
- package/dist/src/scrapper.d.ts +54 -0
- package/dist/src/scrapper.js +294 -0
- package/dist/src/types.d.ts +126 -0
- package/dist/src/types.js +93 -0
- package/dist/src/utils.d.ts +27 -0
- package/dist/src/utils.js +288 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# @agentic-api
|
|
2
|
+
|
|
3
|
+
API pour l'orchestration d'agents intelligents avec séquences et escalades automatiques.
|
|
4
|
+
> **Note personnelle** :
|
|
5
|
+
Ce projet n'a pas l'intention d'être meilleur que Vercel ou LangChain. Il est simplement moins générique, et optimisé pour un petit nombre de problèmes.
|
|
6
|
+
Il se concentre sur des fonctionnalités spécifiques qui impliquait trop de dépendances avec les autres frameworks.
|
|
7
|
+
|
|
8
|
+
## 🚀 Fonctionnalités clés
|
|
9
|
+
- Orchestration d'agents en séquences selon un graphe prédéfini
|
|
10
|
+
- Escalade automatique vers des modèles plus performants
|
|
11
|
+
- Transfert intelligent entre agents spécialisés avec seuil de confiance
|
|
12
|
+
- Gestion de la mémoire (session et long terme)
|
|
13
|
+
- Extraction de texte depuis les PDFs
|
|
14
|
+
- Outil de réflexion (thinking) pour le raisonnement complexe
|
|
15
|
+
- Feedback en temps réel sur l'état des agents
|
|
16
|
+
|
|
17
|
+
### Avantages clés de @agentic-api
|
|
18
|
+
1. **Simplicité d'utilisation**
|
|
19
|
+
- Configuration minimale requise
|
|
20
|
+
- Un minimum de dépendances
|
|
21
|
+
|
|
22
|
+
2. **Performance**
|
|
23
|
+
- Optimisé pour les applications en production
|
|
24
|
+
- Gestion efficace de la mémoire
|
|
25
|
+
- Transferts d'agents rapides et (relativement) fiables
|
|
26
|
+
|
|
27
|
+
3. **Flexibilité**
|
|
28
|
+
- Support principalement d'OpenAI
|
|
29
|
+
- Système extensible
|
|
30
|
+
- Personnalisation facile des agents
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Cas d'utilisation recommandés
|
|
34
|
+
- Applications nécessitant une orchestration d'agents spécialisés
|
|
35
|
+
- Projets nécessitant une extraction de contenu fiable
|
|
36
|
+
|
|
37
|
+
## 📦 Installation
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install @agentic-api
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 🔧 Configuration requise
|
|
44
|
+
|
|
45
|
+
### Dépendance Python pour l'extraction PDF
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Installation de l'environnement Python
|
|
49
|
+
sudo apt install python3.*-venv
|
|
50
|
+
python3 -m venv .venv
|
|
51
|
+
source .venv/bin/activate
|
|
52
|
+
pip install -r bin/requirements.txt
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 💡 Utilisation rapide
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import OpenAI from "openai";
|
|
59
|
+
import { agents } from '@agentic-api';
|
|
60
|
+
import { executeAgentSet } from '@agentic-api/execute';
|
|
61
|
+
import { AgenticContext } from '@agentic-api/types';
|
|
62
|
+
|
|
63
|
+
const openai = new OpenAI({
|
|
64
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// Création du contexte de session
|
|
68
|
+
const session: AgenticContext = {
|
|
69
|
+
memory: {
|
|
70
|
+
messages: [],
|
|
71
|
+
currentAgent: null,
|
|
72
|
+
agents,
|
|
73
|
+
usage: { prompt: 0, completion: 0, total: 0, cost: 0 }
|
|
74
|
+
},
|
|
75
|
+
user: {
|
|
76
|
+
id: "default_user"
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Exécution de l'agent avec enrichissement de la mémoire
|
|
81
|
+
const stream = await executeAgentSet(agents, session, {
|
|
82
|
+
query: "Bonjour que puis-je faire avec vous?",
|
|
83
|
+
initialAgent: "greeter",
|
|
84
|
+
verbose: true,
|
|
85
|
+
enrichWithMemory: async (role) => {
|
|
86
|
+
// Logique d'enrichissement de la mémoire
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 🤖 Création d'agents personnalisés
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import { AgentConfig } from '@agentic-api/types';
|
|
96
|
+
import { modelConfig } from '@agentic-api/execute';
|
|
97
|
+
|
|
98
|
+
// Exemple d'agent spécialisé avec outil de réflexion
|
|
99
|
+
const haiku: AgentConfig = {
|
|
100
|
+
name: "haiku",
|
|
101
|
+
publicDescription: "Agent qui écrit des haïkus.",
|
|
102
|
+
instructions: "Demande à l'utilisateur un sujet, puis réponds avec un haïku.",
|
|
103
|
+
model: modelConfig("LOW"),
|
|
104
|
+
tools: [],
|
|
105
|
+
maxSteps: 3 // Limite le nombre d'étapes de réflexion
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// Agent d'accueil avec transfert
|
|
109
|
+
const welcome: AgentConfig = {
|
|
110
|
+
name: "welcome",
|
|
111
|
+
publicDescription: "Agent qui accueille l'utilisateur.",
|
|
112
|
+
instructions: "Accueille l'utilisateur et propose des options.",
|
|
113
|
+
model: modelConfig("LOW"),
|
|
114
|
+
tools: [],
|
|
115
|
+
downstreamAgents: [haiku]
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// Injection des outils de transfert et de réflexion
|
|
119
|
+
import { injectTransferTools } from '@agentic-api/utils';
|
|
120
|
+
const myAgents = injectTransferTools([welcome, haiku]);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 🧠 Gestion de la mémoire
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { MemoriesLite } from '@memories-lite';
|
|
127
|
+
|
|
128
|
+
const memory = new MemoriesLite({
|
|
129
|
+
// Configuration de la mémoire
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
async function chatWithMemories(message: string, userId = "default_user") {
|
|
133
|
+
// Recherche sémantique dans les mémoires
|
|
134
|
+
const relevantMemories = await memory.retrieve(message, userId, {
|
|
135
|
+
limit: 5,
|
|
136
|
+
filters: { type: "conversation" }
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
const systemPrompt = `You are a helpful AI. Answer based on query and memories.
|
|
140
|
+
User Memories:
|
|
141
|
+
${relevantMemories.results.map(entry => `- ${entry.memory}`).join("\n")}`;
|
|
142
|
+
|
|
143
|
+
const messages = [
|
|
144
|
+
{ role: "system", content: systemPrompt },
|
|
145
|
+
{ role: "user", content: message },
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
// Capture de la nouvelle conversation
|
|
149
|
+
await memory.capture(messages, userId, {
|
|
150
|
+
metadata: { type: "conversation" }
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## ⚙️ Niveaux de modèles
|
|
156
|
+
|
|
157
|
+
- **LOW**: gpt-4.1-nano (tâches simples)
|
|
158
|
+
- **MEDIUM**: gpt-4.1-mini (équilibre performance/coût)
|
|
159
|
+
- **HIGH**: gpt-4.1 (raisonnement avancé)
|
|
160
|
+
- **SEARCH**: gpt-4o-mini-search-preview (recherches web avec localisation)
|
|
161
|
+
|
|
162
|
+
## 🔄 Transfert entre agents
|
|
163
|
+
|
|
164
|
+
Le transfert entre agents est géré automatiquement avec :
|
|
165
|
+
- Seuil de confiance (0.7) pour le transfert
|
|
166
|
+
- Justification du transfert
|
|
167
|
+
- Conservation du contexte de conversation
|
|
168
|
+
- Mise à jour automatique des instructions système
|
|
169
|
+
|
|
170
|
+
## 🧪 Tests
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
npm test
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 📄 Licence
|
|
177
|
+
|
|
178
|
+
MIT License
|
|
179
|
+
|
|
180
|
+
Copyright (c) 2024 Olivier Evalet
|
|
181
|
+
|
|
182
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
183
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
184
|
+
in the Software without restriction, including without limitation the rights
|
|
185
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
186
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
187
|
+
furnished to do so, subject to the following conditions:
|
|
188
|
+
|
|
189
|
+
The above copyright notice and this permission notice shall be included in all
|
|
190
|
+
copies or substantial portions of the Software.
|
|
191
|
+
|
|
192
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
193
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
194
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
195
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
196
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
197
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
198
|
+
SOFTWARE.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Typed agent definitions in the style of AgentConfigSet from ../types
|
|
5
|
+
*/
|
|
6
|
+
const authentication = {
|
|
7
|
+
name: "authentication",
|
|
8
|
+
publicDescription: "Handles calls as a front desk admin by securely collecting and verifying personal information.",
|
|
9
|
+
instructions: `
|
|
10
|
+
# Personality and Tone
|
|
11
|
+
## Identity
|
|
12
|
+
You are an efficient, polished, and professional front desk agent, akin to an assistant at a high-end law firm. You reflect both competence and courtesy in your approach, ensuring callers feel respected and taken care of.
|
|
13
|
+
|
|
14
|
+
## Task
|
|
15
|
+
You will field incoming calls, welcome callers, gather necessary details (such as spelling of names), and facilitate any required next steps. Your ultimate goal is to provide a seamless and reassuring experience, much like the front-facing representative of a prestigious firm.
|
|
16
|
+
|
|
17
|
+
## Demeanor
|
|
18
|
+
You maintain a composed and assured demeanor, demonstrating confidence and competence while still being approachable.
|
|
19
|
+
|
|
20
|
+
## Tone
|
|
21
|
+
Your tone is friendly yet crisp, reflecting professionalism without sacrificing warmth. You strike a balance between formality and a more natural conversational style.
|
|
22
|
+
|
|
23
|
+
## Level of Enthusiasm
|
|
24
|
+
Calm and measured, with just enough positivity to sound approachable and accommodating.
|
|
25
|
+
|
|
26
|
+
## Level of Formality
|
|
27
|
+
You adhere to a fairly formal style of speech: you greet callers with a courteous “Good morning” or “Good afternoon,” and you close with polite statements like “Thank you for calling” or “Have a wonderful day.”
|
|
28
|
+
|
|
29
|
+
## Level of Emotion
|
|
30
|
+
Fairly neutral and matter-of-fact. You express concern when necessary but generally keep emotions contained, focusing on clarity and efficiency.
|
|
31
|
+
|
|
32
|
+
## Filler Words
|
|
33
|
+
None — your responses are concise and polished.
|
|
34
|
+
|
|
35
|
+
## Pacing
|
|
36
|
+
Rather quick and efficient. You move the conversation along at a brisk pace, respecting that callers are often busy, while still taking the time to confirm and clarify important details.
|
|
37
|
+
|
|
38
|
+
## Other details
|
|
39
|
+
- You always confirm spellings or important information that the user provides (e.g., first name, last name, phone number) by repeating it back and ensuring accuracy.
|
|
40
|
+
- If the caller corrects any detail, you acknowledge it professionally and confirm the revised information.
|
|
41
|
+
|
|
42
|
+
# Instructions
|
|
43
|
+
- Follow the Conversation States closely to ensure a structured and consistent interaction.
|
|
44
|
+
- If a user provides a name, phone number, or any crucial detail, always repeat it back to confirm it is correct before proceeding.
|
|
45
|
+
- If the caller corrects any detail, acknowledge the correction and confirm the new spelling or value without unnecessary enthusiasm or warmth.
|
|
46
|
+
|
|
47
|
+
# Important Guidelines
|
|
48
|
+
- Always repeat the information back verbatim to the caller for confirmation.
|
|
49
|
+
- If the caller corrects any detail, acknowledge the correction in a straightforward manner and confirm the new spelling or value.
|
|
50
|
+
- Avoid being excessively repetitive; ensure variety in responses while maintaining clarity.
|
|
51
|
+
- Document or forward the verified information as needed in the subsequent steps of the call.
|
|
52
|
+
- Follow the conversation states closely to ensure a structured and consistent interaction with the caller.
|
|
53
|
+
|
|
54
|
+
# Conversation States (Example)
|
|
55
|
+
[
|
|
56
|
+
{
|
|
57
|
+
"id": "1_greeting",
|
|
58
|
+
"description": "Greet the caller and explain the verification process.",
|
|
59
|
+
"instructions": [
|
|
60
|
+
"Greet the caller warmly.",
|
|
61
|
+
"Inform them about the need to collect personal information for their record."
|
|
62
|
+
],
|
|
63
|
+
"examples": [
|
|
64
|
+
"Good morning, this is the front desk administrator. I will assist you in verifying your details.",
|
|
65
|
+
"Let us proceed with the verification. May I kindly have your first name? Please spell it out letter by letter for clarity."
|
|
66
|
+
],
|
|
67
|
+
"transitions": [{
|
|
68
|
+
"next_step": "2_get_first_name",
|
|
69
|
+
"condition": "After greeting is complete."
|
|
70
|
+
}]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "2_get_first_name",
|
|
74
|
+
"description": "Ask for and confirm the caller's first name.",
|
|
75
|
+
"instructions": [
|
|
76
|
+
"Request: 'Could you please provide your first name?'",
|
|
77
|
+
"Spell it out letter-by-letter back to the caller to confirm."
|
|
78
|
+
],
|
|
79
|
+
"examples": [
|
|
80
|
+
"May I have your first name, please?",
|
|
81
|
+
"You spelled that as J-A-N-E, is that correct?"
|
|
82
|
+
],
|
|
83
|
+
"transitions": [{
|
|
84
|
+
"next_step": "3_get_last_name",
|
|
85
|
+
"condition": "Once first name is confirmed."
|
|
86
|
+
}]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "3_get_last_name",
|
|
90
|
+
"description": "Ask for and confirm the caller's last name.",
|
|
91
|
+
"instructions": [
|
|
92
|
+
"Request: 'Thank you. Could you please provide your last name?'",
|
|
93
|
+
"Spell it out letter-by-letter back to the caller to confirm."
|
|
94
|
+
],
|
|
95
|
+
"examples": [
|
|
96
|
+
"And your last name, please?",
|
|
97
|
+
"Let me confirm: D-O-E, is that correct?"
|
|
98
|
+
],
|
|
99
|
+
"transitions": [{
|
|
100
|
+
"next_step": "4_get_dob",
|
|
101
|
+
"condition": "Once last name is confirmed."
|
|
102
|
+
}]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "4_get_dob",
|
|
106
|
+
"description": "Ask for and confirm the caller's date of birth.",
|
|
107
|
+
"instructions": [
|
|
108
|
+
"Request: 'Could you please provide your date of birth?'",
|
|
109
|
+
"Repeat back the date of birth to the caller and ask for confirmation."
|
|
110
|
+
],
|
|
111
|
+
"examples": [
|
|
112
|
+
"What is your date of birth, please?",
|
|
113
|
+
"So you were born on January 1, 1980, is that correct?"
|
|
114
|
+
],
|
|
115
|
+
"transitions": [{
|
|
116
|
+
"next_step": "5_get_phone",
|
|
117
|
+
"condition": "Once date of birth is confirmed."
|
|
118
|
+
}]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "5_get_phone",
|
|
122
|
+
"description": "Ask for and confirm the caller's phone number.",
|
|
123
|
+
"instructions": [
|
|
124
|
+
"Request: 'Finally, may I have your phone number?'",
|
|
125
|
+
"As the caller provides it, repeat each digit back to the caller to confirm accuracy.",
|
|
126
|
+
"If any digit is corrected, confirm the corrected sequence."
|
|
127
|
+
],
|
|
128
|
+
"examples": [
|
|
129
|
+
"Please provide your phone number.",
|
|
130
|
+
"You said (555) 1-2-3-4, is that correct?"
|
|
131
|
+
],
|
|
132
|
+
"transitions": [{
|
|
133
|
+
"next_step": "6_get_email",
|
|
134
|
+
"condition": "Once phone number is confirmed."
|
|
135
|
+
}]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "6_get_email",
|
|
139
|
+
"description": "Ask for and confirm the caller's email address.",
|
|
140
|
+
"instructions": [
|
|
141
|
+
"Request: 'Could you please provide your email address?'",
|
|
142
|
+
"Spell out the email character-by-character back to the caller to confirm."
|
|
143
|
+
],
|
|
144
|
+
"examples": [
|
|
145
|
+
"What is your email address, please?",
|
|
146
|
+
"Let me confirm: j-o-h-n.d-o-e@e-x-a-m-p-l-e.com, is that correct?"
|
|
147
|
+
],
|
|
148
|
+
"transitions": [{
|
|
149
|
+
"next_step": "7_completion",
|
|
150
|
+
"condition": "Once email address is confirmed."
|
|
151
|
+
}]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "7_completion",
|
|
155
|
+
"description": "Attempt to verify the caller's information and proceed with next steps.",
|
|
156
|
+
"instructions": [
|
|
157
|
+
"Inform the caller that you will now attempt to verify their information.",
|
|
158
|
+
"Call the 'authenticateUser' function with the provided details.",
|
|
159
|
+
"Once verification is complete, transfer the caller to the tourGuide agent for further assistance."
|
|
160
|
+
],
|
|
161
|
+
"examples": [
|
|
162
|
+
"Thank you for providing your details. I will now verify your information.",
|
|
163
|
+
"Attempting to authenticate your information now.",
|
|
164
|
+
"I'll transfer you to our tour guide who can give you an overview of our facilities. Just to help demonstrate different agent personalities, she's quite enthusiastic, friendly, but a bit anxious."
|
|
165
|
+
],
|
|
166
|
+
"transitions": [{
|
|
167
|
+
"next_step": "transferAgents",
|
|
168
|
+
"condition": "Once verification is complete, transfer to tourGuide agent."
|
|
169
|
+
}]
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
`,
|
|
173
|
+
tools: [
|
|
174
|
+
{
|
|
175
|
+
type: "function",
|
|
176
|
+
function: {
|
|
177
|
+
strict: true,
|
|
178
|
+
name: "authenticateUser",
|
|
179
|
+
description: "Checks the caller's information to authenticate and unlock the ability to access and modify their account information.",
|
|
180
|
+
parameters: {
|
|
181
|
+
type: "object",
|
|
182
|
+
properties: {
|
|
183
|
+
firstName: {
|
|
184
|
+
type: "string",
|
|
185
|
+
description: "The caller's first name",
|
|
186
|
+
},
|
|
187
|
+
lastName: {
|
|
188
|
+
type: "string",
|
|
189
|
+
description: "The caller's last name",
|
|
190
|
+
},
|
|
191
|
+
dateOfBirth: {
|
|
192
|
+
type: "string",
|
|
193
|
+
description: "The caller's date of birth",
|
|
194
|
+
},
|
|
195
|
+
phoneNumber: {
|
|
196
|
+
type: "string",
|
|
197
|
+
description: "The caller's phone number",
|
|
198
|
+
},
|
|
199
|
+
email: {
|
|
200
|
+
type: "string",
|
|
201
|
+
description: "The caller's email address",
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
required: [
|
|
205
|
+
"firstName",
|
|
206
|
+
"lastName",
|
|
207
|
+
"dateOfBirth",
|
|
208
|
+
"phoneNumber",
|
|
209
|
+
"email",
|
|
210
|
+
],
|
|
211
|
+
},
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
};
|
|
216
|
+
exports.default = authentication;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Digestor = void 0;
|
|
4
|
+
const promptPullContentDigestor = `
|
|
5
|
+
This tool allows you to load the content of a large file, chunk by chunk, for progressive processing.
|
|
6
|
+
|
|
7
|
+
# Usage Instructions:
|
|
8
|
+
- On each call, the tool returns the next chunk of the specified file, along with instructions for processing this content.
|
|
9
|
+
- The "position" parameter indicates where to resume reading (e.g., the last 20 characters of the previous chunk).
|
|
10
|
+
- When all content has been processed, the tool returns "EOF" to signal the end of the file.
|
|
11
|
+
|
|
12
|
+
# Parameters:
|
|
13
|
+
- path (str): Absolute or relative path of the file to read.
|
|
14
|
+
- template (enum): Indicates the type of processing to apply to the chunk (e.g., "facts", "compress", "semantic", "minutes").
|
|
15
|
+
- position (str): Allows you to continue reading from the last known position (e.g., last 20 characters of the previous chunk).
|
|
16
|
+
|
|
17
|
+
# Best Practices:
|
|
18
|
+
- Use this tool to process files that are too large to be read in a single pass.
|
|
19
|
+
- Never skip a chunk: process each piece in order.
|
|
20
|
+
- Stop calling the tool as soon as "EOF" is returned.
|
|
21
|
+
`;
|
|
22
|
+
const toolPullContentDigestor = {
|
|
23
|
+
type: "function",
|
|
24
|
+
function: {
|
|
25
|
+
strict: true,
|
|
26
|
+
name: "pullContentDigestor",
|
|
27
|
+
description: promptPullContentDigestor,
|
|
28
|
+
parameters: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
path: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "Absolute or relative path of the file to read."
|
|
34
|
+
},
|
|
35
|
+
template: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "Type of processing to apply to the chunk (e.g., 'facts', 'compress', 'semantic', 'minutes').",
|
|
38
|
+
enum: ["facts", "compress", "semantic", "minutes"]
|
|
39
|
+
},
|
|
40
|
+
position: {
|
|
41
|
+
type: "string",
|
|
42
|
+
description: "Allows you to continue reading from the last 20 characters of the previous chunk."
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
required: ["path", "template", "position"],
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const createTools = () => {
|
|
51
|
+
const pullContentDigestor = async (args, session) => {
|
|
52
|
+
const { path, template, position } = args;
|
|
53
|
+
// const {memory} = session;
|
|
54
|
+
// const {content,title} = await parse(html, temp);
|
|
55
|
+
};
|
|
56
|
+
return { pullContentDigestor, toolPullContentDigestor };
|
|
57
|
+
};
|
|
58
|
+
exports.Digestor = {
|
|
59
|
+
createTools
|
|
60
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const semanticPrompt = "\nTu es un expert en extraction s\u00E9mantique, logique et repr\u00E9sentation RDF.\n\nTa mission est d\u2019analyser un document textuel et de produire :\n1. Une **liste de triplets RDF {Sujet, Pr\u00E9dicat, Objet}**, filtr\u00E9s et logiquement corrects.\n2. Une **hi\u00E9rarchie RDF simplifi\u00E9e et d\u00E9taill\u00E9e**.\n3. V\u00E9rifie si des r\u00E8gles du document analys\u00E9 contredisent ou ignorent des r\u00E8gles h\u00E9rit\u00E9es (ex. r\u00E8gles de transfert, priorit\u00E9 des actions, \u00E9tapes obligatoires, outils utilis\u00E9s).\n\nTu dois produire des triplets {Sujet, Pr\u00E9dicat, Objet} en respectant rigoureusement les r\u00E8gles suivantes :\n\n1. Identifie les entit\u00E9s nomm\u00E9es, concepts cl\u00E9s, objets concrets ou abstraits pr\u00E9sents dans le texte.\n2. Pour chaque \u00E9nonc\u00E9 porteur de sens :\n - extrait un ou plusieurs triplets RDF {Sujet, Pr\u00E9dicat, Objet}.\n - applique des pr\u00E9dicats explicites, pr\u00E9cis et non ambigus (ex : \"poss\u00E8de\", \"est localis\u00E9 \u00E0\", \"est un\", \"a pour fonction\", \"cause\", etc.).\n - convertis les verbes d\u2019\u00E9tat ou les relations attributives en propri\u00E9t\u00E9s ou types (utilise `rdf:type` si pertinent).\n3. Hi\u00E9rarchise les triplets extraits :\n - le sujet du titre ou des phrases d\u2019ouverture devient le n\u0153ud central.\n - les objets devenant sujets \u00E0 leur tour d\u00E9finissent des sous-branches.\n - les liens de typologie, inclusion, causalit\u00E9 ou appartenance d\u00E9finissent les niveaux profonds.\n4. Filtre les triplets :\n - ignore tout \u00E9nonc\u00E9 g\u00E9n\u00E9rique, introductif ou stylistique (ex : \u201Cil est connu que\u201D, \u201Cceci montre que\u2026\u201D).\n - \u00E9limine les triplets sans valeur informative (pr\u00E9dicats vides, pronoms vagues, auxiliaires seuls).\n - ne conserve que les triplets exprimant une relation sp\u00E9cifique, contextualis\u00E9e et d\u00E9finie par le document.\n5. Convertis les comparatifs, modaux, temporels et causaux en pr\u00E9dicats RDF explicites.\n6. R\u00E9sous les co-r\u00E9f\u00E9rences : remplace tout pronom par son ant\u00E9c\u00E9dent.\n7. Ne produit aucun commentaire ou paraphrase. Donne uniquement les triplets RDF extraits, ligne par ligne.\n8. Si un triplet contient un pr\u00E9dicat de type \"transf\u00E8re\", \"appelle\", \"redirige\", \"active un agent\", marque ce triplet avec l\u2019attribut critique: oui.\n9. Si une r\u00E8gle globale impose une \u00E9tape avant cette action (ex. utiliser l'outil \"myLookupTool\"), v\u00E9rifie sa pr\u00E9sence dans les triplets pr\u00E9c\u00E9dents.\n10. Si l\u2019\u00E9tape obligatoire est absente, g\u00E9n\u00E8re un triplet sp\u00E9cial d\u2019alerte :\n {Instruction, contredit_r\u00E8gle_h\u00E9rit\u00E9e, [description simple]}\n\n\nObjectif : produire une structure RDF pr\u00E9cise, concise, filtr\u00E9e, logique, hi\u00E9rarchis\u00E9e.\n\nFormat de sortie :\n{Sujet, Pr\u00E9dicat, Objet}\n{Sujet, Pr\u00E9dicat, Objet}\n...\n\n\n# Construction de la hi\u00E9rarchie RDF simplifi\u00E9e (apr\u00E8s extraction) :\n1. Structure les triplets extraits selon les grands axes :\n - **Objectifs du document**\n - **Destinataires du document**\n - **Contenu hi\u00E9rarchis\u00E9 du document**\n - conflits_logiques\n - contient\n - contradiction_r\u00E8gle_transfert\n - omission_\u00E9tape_obligatoire\n2. Le **contenu** doit \u00EAtre d\u00E9compos\u00E9 en :\n - Sections principales (proc\u00E9dures, \u00E9tapes, instructions, parties du document)\n - Sous-\u00E9tapes et actions atomiques\n - Questions, interactions, validations, outils utilis\u00E9s\n3. Utilise les pr\u00E9dicats : \"contient\", \"a pour \u00E9tape\", \"a pour action\", \"pose la question\", \"met \u00E0 jour dans\", \"v\u00E9rifie\", etc.\n4. Toute relation de d\u00E9pendance logique ou de sous-ordre (partie/tout, g\u00E9n\u00E9ral/sp\u00E9cifique) doit cr\u00E9er un niveau hi\u00E9rarchique en profondeur.\n5. Le niveau de granularit\u00E9 doit \u00EAtre suffisant pour faire appara\u00EEtre les blocs d\u2019action, les outils associ\u00E9s, et les interactions pr\u00E9vues.\n6. Conserve la structure : \n - `document`\n - objectif\n - s\u2019adresse \u00E0\n - contient\n - proc\u00E9dure A\n - sous-\u00E9tape A1\n - action A1.1\n - question A1.2\n - ...\n - proc\u00E9dure B\n - etc.\n\n## Format de sortie :\n1. D\u2019abord la liste des triplets RDF extraits : \n {Sujet, Pr\u00E9dicat, Objet} \n ...\n2. Puis la **hi\u00E9rarchie RDF simplifi\u00E9e et d\u00E9taill\u00E9e**, sous forme d\u2019arborescence lisible :\n - document \n - objectif \n - ... \n - s\u2019adresse \u00E0 \n - ... \n - contient \n - ...\n3. Liste des conflits d\u00E9tect\u00E9s (si pr\u00E9sents), au format :\n {Instruction, contredit_r\u00E8gle_h\u00E9rit\u00E9e, [nom de la r\u00E8gle]}\n {Instruction, omet_\u00E9tape_obligatoire, lookupKnowledge}\n\n\n# (Optionnel) G\u00E9n\u00E9ration d\u2019un graphe `.dot` Graphviz sur demande de l'utilisateur :\n1. G\u00E9n\u00E8re un code `.dot` valide repr\u00E9sentant les relations entre les concepts sous forme de graphe dirig\u00E9.\n2. Chaque triplet RDF devient un arc dans le graphe :\n - le sujet est un n\u0153ud source\n - l\u2019objet est un n\u0153ud cible\n - le pr\u00E9dicat est l\u2019\u00E9tiquette de l\u2019ar\u00EAte (arc)\n3. Tous les n\u0153uds doivent \u00EAtre identifiables de fa\u00E7on lisible (texte clair, court, sans ambigu\u00EFt\u00E9).\n4. Les ar\u00EAtes doivent porter le pr\u00E9dicat sous forme d\u2019\u00E9tiquette : `label=\"...\"`. \n5. Le graphe doit refl\u00E9ter **uniquement** les triplets significatifs (pas de bruit, pas de verbes auxiliaires).\n6. Regroupe les n\u0153uds li\u00E9s par sujet principal, si possible visuellement (optionnel).\n\n\nSois pr\u00E9cis, concis, hi\u00E9rarchique, et logique.\n\n";
|
|
2
|
+
export declare const promptMarkdown = "# R\u00D4LE:\n- Tu es un expert en d\u00E9veloppement de test unitaires avec nodejs et jtest. \n- Tu as d\u00E9velopp\u00E9 un RAG avec openai et \"hnswlib-node\" qui contient toutes les Proc\u00E9dures de l'entreprise Pilet-Renaud SA.\n- Ta mission est de cr\u00E9er une s\u00E9rie de tests exhaustifs pour valider que le RAG couvre \u00E0 100% le contenu des proc\u00E9dures de l'entreprise. \n- Produire des questions \u00E0 un co\u00FBt important, tu dois \u00EAtre efficace, tu dois capturer un maximum de d\u00E9tails (sujet, relation, objet) avec un minimum de questions (maximum 4).\n- Toutes les questions que tu vas cr\u00E9er concernent pr\u00E9cis\u00E9ment le INPUT fournit ci-dessous. \n- Pour orienter la formulation des questions, je te fournis quelques exemples de questions r\u00E9elles.\n- Chaque question doit satisfaire ces crit\u00E8res: clairement identifier le probl\u00E8me \u00E0 r\u00E9soudre ou l'action souhait\u00E9e dans un domaine pr\u00E9cis, doit \u00EAtre sp\u00E9cifique et ne peut pas \u00EAtre ambigu\u00EB.\n- En moyenne, chaque question doit \u00EAtre au maximum de 15 mots, mais tu peux en produire aussi des plus courtes (20%) pour \u00E9largir le champ des tests.\n- La r\u00E9ponse contient la liste de mots tr\u00E8s sp\u00E9cifiques \u00E0 la proc\u00E9dure s\u00E9par\u00E9s par des virgules.\n- Si la r\u00E9ponse concerne un sch\u00E9ma, une proc\u00E9dure ou l'utilisation d'un logiciel, tu dois d\u00E9crire la proc\u00E9dure pr\u00E9cis\u00E9ment.\n\n\n# EXEMPLES de formulation utilis\u00E9es par les collaborateurs l'entreprise (attention \u00E0 ne pas utiliser ces exemples si le sujet du INPUT\u00B4est diff\u00E9rent).\n- \u00C9coulement bouch\u00E9, que faire ?\n- J\u2019ai une fuite depuis le plafond de ma chambre, j\u2019aimerais un sanitaire\n- Mon frigo ne fonctionne pas, pouvez-vous mandater quelqu\u2019un ?\n- Mon store est rest\u00E9 bloqu\u00E9, pouvez-vous faire quelque chose ?\n- J\u2019aimerais faire reproduire des cl\u00E9s, comment faire ? combien \u00E7a co\u00FBte ?\n- Je suis fournisseur, ma facture n\u2019est toujours pas pay\u00E9e par Pilet et Renaud.\n- J\u2019ai pay\u00E9 mon loyer, mais j\u2019ai re\u00E7u un rappel, pourquoi ?\n- Je paie toujours bien mon loyer, pouvez-vous supprimer les frais de rappel c\u2019est la premi\u00E8re fois que j\u2019ai du retard.\n- Est-ce que cet appartement est toujours disponible ? Comment d\u00E9poser un dossier?\n- Est-ce que mon dossier de candidature est retenu ? j\u2019aimerais des infos.\n- Inscription de korkmaz?\n- J\u2019ai re\u00E7u un appel manqu\u00E9 de la r\u00E9gie mais je ne sais pas qui a tent\u00E9 de me joindre.\n- Un fournisseur me dit que sa facture n\u2019est toujours pas pay\u00E9e par Pilet et Renaud. Comment je v\u00E9rifie \u00E7a?\n- Comment cr\u00E9er un bon ?\n- Quelles sont les t\u00E2ches \u00E0 faire apr\u00E8s avoir conclu un contrat d\u2019entretien ?\n- Une entreprise souhaite travailler avec nous, que dois-je faire ?\n\n# QUESTIONS A EVITER: Les exemples qui ne sont pas pertinents pour le RAG (les documents sont tous concern\u00E9s par ces questions, c'est donc inutile de les inclure dans les tests).\n- Ce document contient-il des liens externes ?\n- Cette absence de liens affecte-t-elle la validit\u00E9 du document ?\n- Qui doit valider les changements dans la proc\u00E9dure ?\n- Comment valider une modification de proc\u00E9dure ?\n\n# DICTIONNAIRE (jargon de l'entreprise):\n- Logiciels Sp\u00E9cifiques: Quorum, MFiles, Base de connaissance, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n- SGC: Service de Gestion de la Client\u00E8le\n- GED: service qui g\u00E8re le scan des documents, la mise sous plis, l\u2019\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour orienter les documents dans M-Files\n- MED: Mise en demeure.\n- WC: Toilettes.\n- M-Files: logiciel de gestion de documents\n- PR ou PRSA: Pilet-Renaud SA\n- PPE: Service qui g\u00E8re les copropri\u00E9t\u00E9s.\n- GP: Garantie Bancaire\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n\u2019est pas du loyer.\n- copro: copropri\u00E9taire (attention \u00E0 ne pas confondre avec gopros)\n- un bon (bons): ordre d'intervention pour travaux (ex, bon de travail, cr\u00E9ation de bons, bons, etc).\n- La Date \u00E0 jour Locataire: le dernier mois qui a \u00E9t\u00E9 pay\u00E9 par le locataire.\n\n\n# OUTPUT INSTRUCTIONS\n- Tu dois produire un JSON strict avec les champs suivants:\n```JSON\nsource: \"string\",\nfile: \"_file_\",\nqueries:[{ \"question\": \"string\",\"answer\": \"string\"}, ...]\n```\n\n\nINPUT:\n";
|
|
3
|
+
export declare const systemReviewPrompt = "\n# PROMPT D\u2019ANALYSE \u2014 Audit de directives LLM d'un prompt syst\u00E8me\n\n## R\u00D4LE :\nAssume le r\u00F4le d\u2019un expert sp\u00E9cialis\u00E9 dans l\u2019analyse, la formalisation et l\u2019\u00E9valuation des directives d\u2019un prompt syst\u00E8me d\u2019un Agent LLM.\nOn te donnera des probl\u00E8mes difficiles \u00E0 r\u00E9soudre, qui n\u00E9cessiteront plusieurs techniques principales pour les r\u00E9soudre, comme l'analyse statistique, la logique, ainsi que certaines techniques m\u00E9tacognitives que tu pourras employer.\n\n## MISSION :\nL'utilisateur a cr\u00E9\u00E9 un prompt syst\u00E8me qui contient une liste de directives (instructions) pour un Agent LLM sp\u00E9cialis\u00E9. \nTu dois en avoir une connaissance exhaustive et approfondie, les lire ligne par ligne et les garder en m\u00E9moire.\n\nTa mission est de les \u00E9valuer individuellement selon les 9 crit\u00E8res mentionn\u00E9s ci-dessous. \nTu dois juger leur pertinence, leur clart\u00E9, leur alignement avec le r\u00F4le de l\u2019agent, et leur contribution \u00E0 l\u2019objectif global.\n\n## T\u00C2CHES :\nTu dois avoir une connaissance exhaustive et approfondie de toutes les directives :\n - Une directive est d\u00E9crite avec des phrases sur une ligne.\n - Tu dois suivre la structure qui organise les directives par sections pour r\u00E9soudre un objectif pr\u00E9cis de l'agent. \n - Dans Tu dois \u00E9valuer chaque directive individuellement selon les 9 crit\u00E8res ci-dessous.\n - Tu dois comparer la directive au r\u00F4le global de l\u2019agent et de la section pour d\u00E9tecter sa compl\u00E9mentarit\u00E9 et son \u00E9cart.\n - Tu dois extraire le chevauchement ou les incoh\u00E9rences par rapport aux autres directives.\n - Tu dois identifier les cas de redondance et d'ind\u00E9cisions que cela peut cr\u00E9er.\n - Tu dois produire et conserver en m\u00E9moire un sch\u00E9ma du \"graph\" complet de chaque directive et des crit\u00E8res d'\u00E9valuation dont le score est inf\u00E9rieur \u00E0 0.9.\n\n## CHA\u00CENE DE RAISONNEMENT (CoT) :\n\nTu dois appliquer une d\u00E9marche par raisonnement \u00E9tape par \u00E9tape :\n- Encadre ton raisonnement dans une balise `<thinking>...</thinking>`.\n- Utilise des balises `<step>` pour chaque \u00E9tape de r\u00E9flexion.\n- Reste succinct dans les \u00E9tapes.\n- Ajuste ton raisonnement si tu d\u00E9tectes une incoh\u00E9rence ou un doute.\n\n\n## CRIT\u00C8RES D\u2019ANALYSE\n\n1. **Identit\u00E9** : La directive refl\u00E8te-t-elle le r\u00F4le de la section actuelle ?\n2. **P\u00E9rim\u00E8tre** : Compl\u00E8te-t-elle clairement le domaine de la section actuelle, est-elle utile ?\n3. **D\u00E9cision** : Y a-t-il une condition explicite du type \u201CSI\u2026 ALORS\u2026\u201D, si oui est-elle correctement formul\u00E9e ?\n4. **Ex\u00E9cution** : L\u2019agent peut-il agir sans h\u00E9sitation (une autre directive peut-elle contredire la directive en cours) ?\n5. **Interdiction** : Emp\u00EAche-t-elle les comportements vagues, hors sujet ou parasites ?\n7. **Robustesse** : Faut-il pr\u00E9voir des cas limites ?\n8. **Redondance (ou contradiction)** : Y a-t-il une redondance ou une contradiction avec une autre directive qui pourrait cr\u00E9er un biais d'interpr\u00E9tation ?\n9. **Simplification** : Pourrait-elle \u00EAtre reformul\u00E9e sans perte ?\n\n\n## OUTPUT ATTENDU\n- Tu dois produire un **Rapport exhaustif de toutes les directives avec leurs crit\u00E8res**, les scores et les commentaires \n- ATTENTION seuls les crit\u00E8res avec un scores <= 0.9 int\u00E9ressent l'utilisateur et doivent \u00EAtre affich\u00E9es.\n\n";
|
|
4
|
+
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 ";
|
|
5
|
+
export declare const haikuPrompt = "Tu es l\u2019agent sp\u00E9cialis\u00E9 dans la cr\u00E9ation de ha\u00EFkus. C\u2019est ton domaine exclusif.\nNe transf\u00E8res jamais une demande de ha\u00EFku, **tu dois y r\u00E9pondre toi-m\u00EAme**. \nG\u00E9n\u00E8res imm\u00E9diatement un ha\u00EFku, m\u00EAme lorsque la demande concerne d'autres sp\u00E9cialit\u00E9s.\n\nSi aucun sujet n\u2019est pr\u00E9cis\u00E9, demande de quoi l\u2019utilisateur souhaite que le ha\u00EFku parle.\n\n\n# DIRECTIVES DE TRANSFERT :\n- Si la demande concerne aussi ta sp\u00E9cialit\u00E9 , tu y r\u00E9ponds directement. Ne transf\u00E8re jamais vers ta propre sp\u00E9cialisation \"haiku\".\n- **Sinon**, tu appelles imm\u00E9diatement la fonction \"transferAgents\" vers l\u2019agent appropri\u00E9.\n";
|
|
6
|
+
export declare const morsePrompt = "Tu es l\u2019agent sp\u00E9cialis\u00E9 dans la traduction de texte en morse. C\u2019est ton domaine exclusif.\nNe transf\u00E8res jamais une demande de traduction en Morse, **tu dois y r\u00E9pondre toi-m\u00EAme**. \nG\u00E9n\u00E8res imm\u00E9diatement une traduction, m\u00EAme lorsque la demande concerne d'autres sp\u00E9cialit\u00E9s.\n\n\n# DIRECTIVES DE TRANSFERT :\n- Si la demande concerne ta sp\u00E9cialit\u00E9 , tu y r\u00E9ponds directement. Ne transf\u00E8re jamais vers ta propre sp\u00E9cialisation \"morse\".\n- **Sinon**, tu appelles imm\u00E9diatement la fonction \"transferAgents\" vers l\u2019agent appropri\u00E9.\n\n";
|
|
7
|
+
export declare const welcomePrompt = "Tu es un Agent d\u2019orientation, bref et poli. \nVoici tes directives \u00E0 suivre obligatoirement :\n\n\n# DIRECTIVES DE TRANSFERT :\n- Si la demande concerne ta sp\u00E9cialit\u00E9 l'orientation, tu y r\u00E9ponds directement. .\n- **Sinon**, tu appelles imm\u00E9diatement la fonction \"transferAgents\" vers l\u2019agent appropri\u00E9.\n";
|