agentic-api 2.0.31 → 2.0.491
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/dist/src/agents/agents.example.js +21 -22
- package/dist/src/agents/authentication.js +1 -2
- package/dist/src/agents/prompts.d.ts +5 -4
- package/dist/src/agents/prompts.js +44 -87
- package/dist/src/agents/reducer.core.d.ts +24 -2
- package/dist/src/agents/reducer.core.js +125 -35
- package/dist/src/agents/reducer.loaders.d.ts +55 -1
- package/dist/src/agents/reducer.loaders.js +114 -1
- package/dist/src/agents/reducer.types.d.ts +45 -2
- package/dist/src/agents/semantic.js +1 -2
- package/dist/src/agents/simulator.d.ts +11 -3
- package/dist/src/agents/simulator.executor.d.ts +14 -4
- package/dist/src/agents/simulator.executor.js +81 -23
- package/dist/src/agents/simulator.js +128 -42
- package/dist/src/agents/simulator.prompts.d.ts +9 -7
- package/dist/src/agents/simulator.prompts.js +66 -86
- package/dist/src/agents/simulator.types.d.ts +23 -5
- package/dist/src/agents/simulator.utils.d.ts +7 -2
- package/dist/src/agents/simulator.utils.js +31 -11
- package/dist/src/agents/system.js +1 -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/legacy.js +460 -0
- package/dist/src/execute/modelconfig.d.ts +19 -0
- package/dist/src/execute/modelconfig.js +56 -0
- package/dist/src/execute/responses.d.ts +55 -0
- package/dist/src/execute/responses.js +594 -0
- package/dist/src/execute/shared.d.ts +83 -0
- package/dist/src/execute/shared.js +188 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/{princing.openai.d.ts → pricing.llm.d.ts} +6 -0
- package/dist/src/pricing.llm.js +255 -0
- package/dist/src/prompts.d.ts +13 -4
- package/dist/src/prompts.js +221 -114
- package/dist/src/rag/embeddings.d.ts +36 -18
- package/dist/src/rag/embeddings.js +131 -128
- package/dist/src/rag/index.d.ts +5 -5
- package/dist/src/rag/index.js +14 -17
- package/dist/src/rag/parser.d.ts +2 -1
- package/dist/src/rag/parser.js +11 -14
- package/dist/src/rag/rag.examples.d.ts +27 -0
- package/dist/src/rag/rag.examples.js +151 -0
- package/dist/src/rag/rag.manager.d.ts +383 -0
- package/dist/src/rag/rag.manager.js +1390 -0
- package/dist/src/rag/types.d.ts +128 -12
- package/dist/src/rag/types.js +100 -1
- package/dist/src/rag/usecase.d.ts +37 -0
- package/dist/src/rag/usecase.js +96 -7
- package/dist/src/rules/git/git.e2e.helper.js +22 -2
- package/dist/src/rules/git/git.health.d.ts +61 -2
- package/dist/src/rules/git/git.health.js +333 -11
- package/dist/src/rules/git/index.d.ts +2 -2
- package/dist/src/rules/git/index.js +13 -1
- package/dist/src/rules/git/repo.d.ts +160 -0
- package/dist/src/rules/git/repo.js +777 -0
- package/dist/src/rules/git/repo.pr.js +117 -13
- package/dist/src/rules/git/repo.tools.d.ts +22 -1
- package/dist/src/rules/git/repo.tools.js +50 -1
- package/dist/src/rules/types.d.ts +27 -14
- package/dist/src/rules/utils.matter.d.ts +0 -4
- package/dist/src/rules/utils.matter.js +35 -7
- package/dist/src/scrapper.d.ts +15 -22
- package/dist/src/scrapper.js +58 -110
- package/dist/src/stategraph/index.d.ts +1 -1
- package/dist/src/stategraph/stategraph.d.ts +56 -2
- package/dist/src/stategraph/stategraph.js +134 -6
- package/dist/src/stategraph/stategraph.storage.js +8 -0
- package/dist/src/stategraph/types.d.ts +27 -0
- package/dist/src/types.d.ts +46 -9
- package/dist/src/types.js +8 -7
- package/dist/src/usecase.d.ts +11 -2
- package/dist/src/usecase.js +27 -35
- package/dist/src/utils.d.ts +32 -18
- package/dist/src/utils.js +87 -129
- package/package.json +10 -3
- package/dist/src/agents/digestor.test.d.ts +0 -1
- package/dist/src/agents/digestor.test.js +0 -45
- package/dist/src/agents/reducer.example.d.ts +0 -28
- package/dist/src/agents/reducer.example.js +0 -118
- package/dist/src/agents/reducer.process.d.ts +0 -16
- package/dist/src/agents/reducer.process.js +0 -143
- package/dist/src/agents/reducer.tools.d.ts +0 -29
- package/dist/src/agents/reducer.tools.js +0 -157
- package/dist/src/agents/simpleExample.d.ts +0 -3
- package/dist/src/agents/simpleExample.js +0 -38
- package/dist/src/agents/system-review.d.ts +0 -5
- package/dist/src/agents/system-review.js +0 -181
- package/dist/src/agents/systemReview.d.ts +0 -4
- package/dist/src/agents/systemReview.js +0 -22
- package/dist/src/execute.d.ts +0 -49
- package/dist/src/execute.js +0 -564
- package/dist/src/princing.openai.js +0 -54
- package/dist/src/rag/tools.d.ts +0 -76
- package/dist/src/rag/tools.js +0 -196
- package/dist/src/rules/user.mapper.d.ts +0 -61
- package/dist/src/rules/user.mapper.js +0 -160
- package/dist/src/rules/utils/slug.d.ts +0 -22
- package/dist/src/rules/utils/slug.js +0 -35
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DummyWritable = void 0;
|
|
4
|
+
exports.sendFeedback = sendFeedback;
|
|
5
|
+
exports.normalizeOptionsForResponses = normalizeOptionsForResponses;
|
|
6
|
+
exports.normalizedFunctionCallFromResponse = normalizedFunctionCallFromResponse;
|
|
7
|
+
exports.normalizeOutputFromResponses = normalizeOutputFromResponses;
|
|
8
|
+
exports.convertMessagesToResponsesInput = convertMessagesToResponsesInput;
|
|
9
|
+
//
|
|
10
|
+
// Writable vide pour les tests
|
|
11
|
+
exports.DummyWritable = {
|
|
12
|
+
write: () => { }
|
|
13
|
+
};
|
|
14
|
+
//
|
|
15
|
+
// Envoi de feedback temps réel vers l'UX
|
|
16
|
+
// Informe l'utilisateur de l'état de l'analyse : agent actif, description, usage, state
|
|
17
|
+
function sendFeedback(params) {
|
|
18
|
+
const { agent, stdout, description, usage, state, verbose } = params;
|
|
19
|
+
const feedback = {
|
|
20
|
+
agent,
|
|
21
|
+
description,
|
|
22
|
+
usage,
|
|
23
|
+
state
|
|
24
|
+
};
|
|
25
|
+
// if(verbose) {
|
|
26
|
+
// console.log('--- DBG sendFeedback:',agent, description || '--', state);
|
|
27
|
+
// }
|
|
28
|
+
//
|
|
29
|
+
// send agent state and description
|
|
30
|
+
stdout.write(`\n<step>${JSON.stringify(feedback)}</step>\n`);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Normalise les options pour l'API Responses
|
|
34
|
+
*
|
|
35
|
+
* Transforme les paramètres du format Chat Completions vers Responses API:
|
|
36
|
+
* - Tools: { type: "function", function: {...} } → { type: "function", name, description, parameters, strict }
|
|
37
|
+
* - Autres transformations futures si nécessaire
|
|
38
|
+
*
|
|
39
|
+
* @param options - Options à normaliser
|
|
40
|
+
* @returns Options normalisées pour Responses API
|
|
41
|
+
*/
|
|
42
|
+
function normalizeOptionsForResponses(options) {
|
|
43
|
+
const normalized = { ...options };
|
|
44
|
+
// Transformer les tools au format Responses API
|
|
45
|
+
if (normalized.tools && normalized.tools.length > 0) {
|
|
46
|
+
normalized.tools = normalized.tools.map((tool) => {
|
|
47
|
+
if (tool.type === 'function' && tool.function) {
|
|
48
|
+
// Format Chat Completions → Responses API
|
|
49
|
+
return {
|
|
50
|
+
type: 'function',
|
|
51
|
+
name: tool.function.name,
|
|
52
|
+
description: tool.function.description,
|
|
53
|
+
parameters: tool.function.parameters,
|
|
54
|
+
strict: tool.function.strict ?? true
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Déjà au bon format ou type différent
|
|
58
|
+
return tool;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return normalized;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Normalise un function call du format Responses vers Chat Completions
|
|
65
|
+
*
|
|
66
|
+
* Responses API: { type: "function_call", name, arguments, call_id }
|
|
67
|
+
* Chat Completions: { id, type: "function", function: { name, arguments } }
|
|
68
|
+
*
|
|
69
|
+
* Si déjà au format Chat Completions (avec .function), retourne tel quel
|
|
70
|
+
*
|
|
71
|
+
* @param functionCall - Function call au format Responses ou Chat Completions
|
|
72
|
+
* @returns Function call au format Chat Completions
|
|
73
|
+
*/
|
|
74
|
+
function normalizedFunctionCallFromResponse(functionCall) {
|
|
75
|
+
// Si déjà au format Chat Completions, retourner tel quel
|
|
76
|
+
if (functionCall.function) {
|
|
77
|
+
return functionCall;
|
|
78
|
+
}
|
|
79
|
+
// Transformer du format Responses vers Chat Completions
|
|
80
|
+
return {
|
|
81
|
+
id: functionCall.call_id,
|
|
82
|
+
type: "function",
|
|
83
|
+
function: {
|
|
84
|
+
name: functionCall.name,
|
|
85
|
+
arguments: functionCall.arguments
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Normalise l'output de l'API Responses vers le format Chat Completions
|
|
91
|
+
*
|
|
92
|
+
* Transforme la structure Responses API vers le format attendu par le reste du code
|
|
93
|
+
*
|
|
94
|
+
* Format Responses API (result.output array):
|
|
95
|
+
* - { type: "reasoning", summary: [] }
|
|
96
|
+
* - { type: "message", content: [{ type: "output_text", text: "..." }] }
|
|
97
|
+
* - { type: "function_call", name, arguments, call_id }
|
|
98
|
+
*
|
|
99
|
+
* Format Chat Completions compatible:
|
|
100
|
+
* - { choices: [{ message: { content, tool_calls, reasoning_text } }], usage: {...}, id: "..." }
|
|
101
|
+
*
|
|
102
|
+
* @param result - Résultat de stream.finalResponse()
|
|
103
|
+
* @returns Résultat au format Chat Completions avec reasoning_text si présent
|
|
104
|
+
*/
|
|
105
|
+
function normalizeOutputFromResponses(result) {
|
|
106
|
+
let text = '';
|
|
107
|
+
let reasoningText = ''; // ✅ Capturer reasoning_text pour modèles reasoning (o-series, gpt-5)
|
|
108
|
+
const functionCalls = [];
|
|
109
|
+
// Parcourir les output items pour extraire text, reasoning et function_calls
|
|
110
|
+
if (result.output && Array.isArray(result.output)) {
|
|
111
|
+
for (const item of result.output) {
|
|
112
|
+
// Function calls sont directement dans output
|
|
113
|
+
if (item.type === 'function_call') {
|
|
114
|
+
functionCalls.push(item);
|
|
115
|
+
}
|
|
116
|
+
// ✅ Capturer reasoning (v5.22.0)
|
|
117
|
+
else if (item.type === 'reasoning' && item.summary) {
|
|
118
|
+
reasoningText = Array.isArray(item.summary) ? item.summary.join('\n') : String(item.summary);
|
|
119
|
+
}
|
|
120
|
+
// Messages contiennent le texte
|
|
121
|
+
else if (item.type === 'message' && item.content) {
|
|
122
|
+
for (const content of item.content) {
|
|
123
|
+
if (content.type === 'output_text' && content.text) {
|
|
124
|
+
text += content.text;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Transformer tous les function_calls vers le format Chat Completions
|
|
131
|
+
const toolCalls = functionCalls.map(normalizedFunctionCallFromResponse);
|
|
132
|
+
// Retourner au format Chat Completions avec reasoning_text optionnel
|
|
133
|
+
return {
|
|
134
|
+
choices: [{
|
|
135
|
+
message: {
|
|
136
|
+
tool_calls: toolCalls,
|
|
137
|
+
content: text,
|
|
138
|
+
reasoning_text: reasoningText || undefined // ✅ Optionnel, seulement si présent
|
|
139
|
+
}
|
|
140
|
+
}],
|
|
141
|
+
usage: {
|
|
142
|
+
prompt_tokens: result.usage?.input_tokens || 0,
|
|
143
|
+
completion_tokens: result.usage?.output_tokens || 0,
|
|
144
|
+
total_tokens: (result.usage?.input_tokens || 0) + (result.usage?.output_tokens || 0)
|
|
145
|
+
},
|
|
146
|
+
id: result.id
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Convertit les messages du stateGraph vers le format Responses API input
|
|
151
|
+
* Gère les messages normaux, tool_calls (Chat Completions), et function_call_output (Responses)
|
|
152
|
+
*
|
|
153
|
+
* Utilisée par:
|
|
154
|
+
* - readCompletionsStream (responses.ts) pour le follow-up après tool calls
|
|
155
|
+
* - executeAgentSet (responses.ts) pour préparer l'input initial
|
|
156
|
+
*
|
|
157
|
+
* @param messages Messages du stateGraph
|
|
158
|
+
* @returns Array d'items au format Responses API input
|
|
159
|
+
*/
|
|
160
|
+
function convertMessagesToResponsesInput(messages) {
|
|
161
|
+
return messages.flatMap((m) => {
|
|
162
|
+
// ✅ Messages function_call_output ont un format différent (pas de role)
|
|
163
|
+
if (m.type === 'function_call_output') {
|
|
164
|
+
return [{ type: m.type, call_id: m.call_id, output: m.output }];
|
|
165
|
+
}
|
|
166
|
+
// ✅ Messages avec tool_calls → convertir vers le format Responses API
|
|
167
|
+
// Documentation: "input_list += response.output" ajoute reasoning + function_calls
|
|
168
|
+
if (m.tool_calls && m.tool_calls.length > 0) {
|
|
169
|
+
const result = [];
|
|
170
|
+
// Ajouter le message assistant si content présent
|
|
171
|
+
if (m.content) {
|
|
172
|
+
result.push({ role: m.role, content: m.content });
|
|
173
|
+
}
|
|
174
|
+
// Convertir chaque tool_call (Chat Completions) en function_call (Responses)
|
|
175
|
+
for (const tc of m.tool_calls) {
|
|
176
|
+
result.push({
|
|
177
|
+
type: "function_call",
|
|
178
|
+
call_id: tc.id,
|
|
179
|
+
name: tc.function.name,
|
|
180
|
+
arguments: tc.function.arguments
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
// Messages normaux avec role
|
|
186
|
+
return [{ role: m.role, content: m.content }];
|
|
187
|
+
});
|
|
188
|
+
}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * from './utils';
|
|
|
6
6
|
export * from './types';
|
|
7
7
|
export * from './stategraph';
|
|
8
8
|
export * from './execute';
|
|
9
|
-
export * from './
|
|
9
|
+
export * from './pricing.llm';
|
|
10
10
|
export * from './scrapper';
|
|
11
11
|
export * from './agents/reducer';
|
|
12
12
|
export * from './agents/semantic';
|
package/dist/src/index.js
CHANGED
|
@@ -24,9 +24,9 @@ __exportStar(require("./utils"), exports);
|
|
|
24
24
|
__exportStar(require("./types"), exports);
|
|
25
25
|
// StateGraph - nouvelle architecture de gestion des discussions
|
|
26
26
|
__exportStar(require("./stategraph"), exports);
|
|
27
|
-
// Execute
|
|
27
|
+
// Execute (avec feature toggle legacy/responses)
|
|
28
28
|
__exportStar(require("./execute"), exports);
|
|
29
|
-
__exportStar(require("./
|
|
29
|
+
__exportStar(require("./pricing.llm"), exports);
|
|
30
30
|
// Scrapper
|
|
31
31
|
__exportStar(require("./scrapper"), exports);
|
|
32
32
|
// Agents
|
|
@@ -8,4 +8,10 @@ type ModelPricing = {
|
|
|
8
8
|
export declare const modelPricing: Record<string, ModelPricing>;
|
|
9
9
|
export declare function calculateCost(model: string, usage?: CompletionUsage): number;
|
|
10
10
|
export declare function accumulateCost(currentUsage: Usage, model: string, usage?: CompletionUsage): number;
|
|
11
|
+
export declare function LLM(openai: any, forceThinking?: boolean): any;
|
|
12
|
+
export declare const LLMxai: any;
|
|
13
|
+
/**
|
|
14
|
+
* Get model mapping for OpenAI
|
|
15
|
+
*/
|
|
16
|
+
export declare const LLMopenai: any;
|
|
11
17
|
export {};
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LLMopenai = exports.LLMxai = exports.modelPricing = void 0;
|
|
4
|
+
exports.calculateCost = calculateCost;
|
|
5
|
+
exports.accumulateCost = accumulateCost;
|
|
6
|
+
exports.LLM = LLM;
|
|
7
|
+
//
|
|
8
|
+
// get/update pricing from openai
|
|
9
|
+
// - https://platform.openai.com/docs/pricing#latest-models
|
|
10
|
+
exports.modelPricing = {
|
|
11
|
+
"gpt-4.5-preview": { input: 0.000075, cachedInput: 0.0000325, output: 0.000125 },
|
|
12
|
+
"gpt-4.1": { input: 0.000002, cachedInput: 0.0000005, output: 0.000008 },
|
|
13
|
+
"gpt-4.1-mini": { input: 0.0000004, cachedInput: 0.0000001, output: 0.0000016 },
|
|
14
|
+
"gpt-4.1-nano": { input: 0.0000001, cachedInput: 0.000000025, output: 0.0000004 },
|
|
15
|
+
"gpt-4o": { input: 0.0000025, cachedInput: 0.00000125, output: 0.00001 },
|
|
16
|
+
"gpt-4o-audio-preview": { input: 0.0000025, output: 0.00001 },
|
|
17
|
+
"gpt-4o-realtime-preview": { input: 0.000005, cachedInput: 0.0000025, output: 0.00002 },
|
|
18
|
+
"gpt-4o-search-preview": { input: 0.000005, cachedInput: 0.0000025, output: 0.00002 },
|
|
19
|
+
"gpt-4o-mini": { input: 0.00000015, cachedInput: 0.000000075, output: 0.0000006 },
|
|
20
|
+
"gpt-4o-mini-audio-preview": { input: 0.00000015, output: 0.0000006 },
|
|
21
|
+
"gpt-4o-mini-realtime-preview": { input: 0.0000006, cachedInput: 0.0000003, output: 0.0000024 },
|
|
22
|
+
"gpt-4o-mini-search-preview": { input: 0.0000015, cachedInput: 0.00000075, output: 0.000006 },
|
|
23
|
+
// GPT-5 family
|
|
24
|
+
"gpt-5": { input: 0.00000125, output: 0.00001 },
|
|
25
|
+
"gpt-5.1": { input: 0.00000125, output: 0.00001 },
|
|
26
|
+
"gpt-5-mini": { input: 0.00000025, output: 0.000002 },
|
|
27
|
+
"gpt-5-nano": { input: 0.00000005, output: 0.0000004 },
|
|
28
|
+
"o1": { input: 0.000015, cachedInput: 0.0000075, output: 0.00006 },
|
|
29
|
+
"o4-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
|
|
30
|
+
"o3-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
|
|
31
|
+
"o1-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
|
|
32
|
+
// Grok 4 family - Official pricing from xAI docs (per million tokens)
|
|
33
|
+
"grok-4-fast-reasoning": { input: 0.0002, cachedInput: 0.0001, output: 0.0005 },
|
|
34
|
+
"grok-4-fast-non-reasoning": { input: 0.0002, cachedInput: 0.0001, output: 0.0005 },
|
|
35
|
+
"grok-4-0709": { input: 0.003, cachedInput: 0.0015, output: 0.015 },
|
|
36
|
+
"grok-code-fast-1": { input: 0.0002, cachedInput: 0.0001, output: 0.0015 },
|
|
37
|
+
};
|
|
38
|
+
function calculateCost(model, usage) {
|
|
39
|
+
if (!usage) {
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
if (!exports.modelPricing[model]) {
|
|
43
|
+
throw new Error("Unknown model");
|
|
44
|
+
}
|
|
45
|
+
const pricing = exports.modelPricing[model];
|
|
46
|
+
const cost = usage.prompt_tokens * pricing.input +
|
|
47
|
+
// usage.completion_tokens * (pricing.cachedInput || 0) +
|
|
48
|
+
usage.completion_tokens * pricing.output;
|
|
49
|
+
return cost;
|
|
50
|
+
}
|
|
51
|
+
function accumulateCost(currentUsage, model, usage) {
|
|
52
|
+
if (!usage) {
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
currentUsage.prompt += usage.prompt_tokens || 0;
|
|
56
|
+
currentUsage.completion += usage.completion_tokens || 0;
|
|
57
|
+
currentUsage.total += usage.total_tokens || 0;
|
|
58
|
+
const cost = calculateCost(model, usage);
|
|
59
|
+
currentUsage.cost += cost;
|
|
60
|
+
return currentUsage.cost;
|
|
61
|
+
}
|
|
62
|
+
//
|
|
63
|
+
// depending on the API source, return the correct mapping between ALIAS and destination models and options.
|
|
64
|
+
// - LOW-fast: openai => gpt-5-nano, xAI => grok-4-nano
|
|
65
|
+
// - etc.
|
|
66
|
+
function LLM(openai, forceThinking) {
|
|
67
|
+
//
|
|
68
|
+
// Detect provider based on baseURL
|
|
69
|
+
const mapping = openai?.baseURL ? LLMmapping[openai?.baseURL] : LLMmapping["default"];
|
|
70
|
+
// FIXME: this is a temporary solution to force reasoning effort to high if thinking is enabled
|
|
71
|
+
if (mapping.reasoning_effort && forceThinking) {
|
|
72
|
+
mapping.reasoning_effort = "high";
|
|
73
|
+
}
|
|
74
|
+
return mapping;
|
|
75
|
+
}
|
|
76
|
+
exports.LLMxai = {
|
|
77
|
+
"LOW-fast": {
|
|
78
|
+
temperature: 0.2,
|
|
79
|
+
model: "grok-code-fast-1", // Fast code model, good for low-complexity tasks
|
|
80
|
+
stream: true
|
|
81
|
+
},
|
|
82
|
+
"LOW": {
|
|
83
|
+
temperature: 0.2,
|
|
84
|
+
model: "grok-4-fast-non-reasoning", // Fast non-reasoning model
|
|
85
|
+
stream: true
|
|
86
|
+
},
|
|
87
|
+
"LOW-medium": {
|
|
88
|
+
temperature: 0.2,
|
|
89
|
+
model: "grok-4-fast-non-reasoning", // Fast non-reasoning model
|
|
90
|
+
stream: true
|
|
91
|
+
},
|
|
92
|
+
"MEDIUM-fast": {
|
|
93
|
+
temperature: 0.2,
|
|
94
|
+
model: "grok-4-fast-reasoning", // Fast reasoning model
|
|
95
|
+
stream: true
|
|
96
|
+
},
|
|
97
|
+
"MEDIUM": {
|
|
98
|
+
temperature: 0.2,
|
|
99
|
+
model: "grok-4-fast-reasoning", // Fast reasoning model
|
|
100
|
+
stream: true
|
|
101
|
+
},
|
|
102
|
+
"HIGH-fast": {
|
|
103
|
+
model: "grok-4-fast-reasoning",
|
|
104
|
+
temperature: 0.2,
|
|
105
|
+
stream: true
|
|
106
|
+
},
|
|
107
|
+
"HIGH-low": {
|
|
108
|
+
model: "grok-4-0709", // Most capable Grok-4 model
|
|
109
|
+
temperature: 0.2,
|
|
110
|
+
stream: true
|
|
111
|
+
},
|
|
112
|
+
"HIGH-medium": {
|
|
113
|
+
model: "grok-4-0709", // Most capable Grok-4 model
|
|
114
|
+
temperature: 0.2,
|
|
115
|
+
stream: true
|
|
116
|
+
},
|
|
117
|
+
"SEARCH-fast": {
|
|
118
|
+
temperature: 0.2,
|
|
119
|
+
model: "grok-code-fast-1",
|
|
120
|
+
web_search_options: {
|
|
121
|
+
user_location: {
|
|
122
|
+
type: "approximate",
|
|
123
|
+
approximate: {
|
|
124
|
+
country: "CH",
|
|
125
|
+
city: "Geneva",
|
|
126
|
+
region: "Geneva",
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
"SEARCH": {
|
|
132
|
+
temperature: 0.2,
|
|
133
|
+
model: "grok-4-fast-non-reasoning",
|
|
134
|
+
web_search_options: {
|
|
135
|
+
user_location: {
|
|
136
|
+
type: "approximate",
|
|
137
|
+
approximate: {
|
|
138
|
+
country: "CH",
|
|
139
|
+
city: "Geneva",
|
|
140
|
+
region: "Geneva",
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Get model mapping for OpenAI
|
|
148
|
+
*/
|
|
149
|
+
exports.LLMopenai = {
|
|
150
|
+
"LOW-fast": {
|
|
151
|
+
temperature: 1,
|
|
152
|
+
frequency_penalty: 0.0,
|
|
153
|
+
presence_penalty: 0.0,
|
|
154
|
+
model: "gpt-5-nano",
|
|
155
|
+
reasoning_effort: "minimal",
|
|
156
|
+
verbosity: "low",
|
|
157
|
+
stream: true
|
|
158
|
+
},
|
|
159
|
+
"LOW": {
|
|
160
|
+
temperature: 1,
|
|
161
|
+
frequency_penalty: 0.0,
|
|
162
|
+
presence_penalty: 0.0,
|
|
163
|
+
model: "gpt-5-nano",
|
|
164
|
+
reasoning_effort: "low",
|
|
165
|
+
verbosity: "low",
|
|
166
|
+
stream: true
|
|
167
|
+
},
|
|
168
|
+
"LOW-medium": {
|
|
169
|
+
temperature: 1,
|
|
170
|
+
frequency_penalty: 0.0,
|
|
171
|
+
presence_penalty: 0.0,
|
|
172
|
+
model: "gpt-5-nano",
|
|
173
|
+
reasoning_effort: "medium",
|
|
174
|
+
verbosity: "low",
|
|
175
|
+
stream: true
|
|
176
|
+
},
|
|
177
|
+
"LOW-4fast": {
|
|
178
|
+
temperature: .2,
|
|
179
|
+
frequency_penalty: 0.0,
|
|
180
|
+
presence_penalty: 0.0,
|
|
181
|
+
model: "gpt-4.1-nano",
|
|
182
|
+
stream: true
|
|
183
|
+
},
|
|
184
|
+
"MEDIUM-4.1-mini": {
|
|
185
|
+
temperature: .2,
|
|
186
|
+
frequency_penalty: 0.0,
|
|
187
|
+
presence_penalty: 0.0,
|
|
188
|
+
model: "gpt-4.1-mini",
|
|
189
|
+
stream: true
|
|
190
|
+
},
|
|
191
|
+
"MEDIUM-4.1": {
|
|
192
|
+
temperature: .2,
|
|
193
|
+
frequency_penalty: 0.0,
|
|
194
|
+
presence_penalty: 0.0,
|
|
195
|
+
model: "gpt-4.1",
|
|
196
|
+
stream: true
|
|
197
|
+
},
|
|
198
|
+
"MEDIUM-fast": {
|
|
199
|
+
temperature: 1,
|
|
200
|
+
frequency_penalty: 0.0,
|
|
201
|
+
presence_penalty: 0.0,
|
|
202
|
+
model: "gpt-5-mini",
|
|
203
|
+
reasoning_effort: "minimal",
|
|
204
|
+
verbosity: "low",
|
|
205
|
+
stream: true
|
|
206
|
+
},
|
|
207
|
+
"MEDIUM": {
|
|
208
|
+
temperature: 1,
|
|
209
|
+
frequency_penalty: 0.0,
|
|
210
|
+
presence_penalty: 0.0,
|
|
211
|
+
model: "gpt-5-mini",
|
|
212
|
+
reasoning_effort: "low",
|
|
213
|
+
verbosity: "low",
|
|
214
|
+
stream: true
|
|
215
|
+
},
|
|
216
|
+
"HIGH-fast": {
|
|
217
|
+
model: "gpt-5.1",
|
|
218
|
+
reasoning_effort: "none",
|
|
219
|
+
verbosity: "low",
|
|
220
|
+
temperature: 1,
|
|
221
|
+
stream: true
|
|
222
|
+
},
|
|
223
|
+
"HIGH": {
|
|
224
|
+
model: "gpt-5.1",
|
|
225
|
+
reasoning_effort: "low",
|
|
226
|
+
verbosity: "low",
|
|
227
|
+
stream: true
|
|
228
|
+
},
|
|
229
|
+
"HIGH-medium": {
|
|
230
|
+
model: "gpt-5",
|
|
231
|
+
reasoning_effort: "medium",
|
|
232
|
+
verbosity: "low",
|
|
233
|
+
stream: true
|
|
234
|
+
},
|
|
235
|
+
"SEARCH": {
|
|
236
|
+
model: "gpt-5-mini",
|
|
237
|
+
reasoning: { effort: "low" },
|
|
238
|
+
tools: [
|
|
239
|
+
{
|
|
240
|
+
type: "web_search_preview",
|
|
241
|
+
user_location: {
|
|
242
|
+
type: "approximate",
|
|
243
|
+
country: "CH",
|
|
244
|
+
city: "Geneva",
|
|
245
|
+
region: "Geneva",
|
|
246
|
+
},
|
|
247
|
+
}
|
|
248
|
+
],
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
const LLMmapping = {
|
|
252
|
+
"https://api.x.ai/v1": exports.LLMxai,
|
|
253
|
+
"https://api.openai.com/v1": exports.LLMopenai,
|
|
254
|
+
"default": exports.LLMopenai
|
|
255
|
+
};
|
package/dist/src/prompts.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
export declare const transferAgentPrompt_ = "Triggers a transfer of the user to a more specialized agent. \n Calls escalate to a more specialized LLM agent or to a human agent, with additional context. \n Only call this function if one of the available agents is appropriate. Don't transfer to your own agent type.\n \n Let the user know you're about to transfer them before doing so.\n\
|
|
2
|
-
export declare const
|
|
1
|
+
export declare const transferAgentPrompt_ = "Triggers a transfer of the user to a more specialized agent. \n Calls escalate to a more specialized LLM agent or to a human agent, with additional context. \n Only call this function if one of the available agents is appropriate. Don't transfer to your own agent type.\n \n Let the user know you're about to transfer them before doing so.\n \n Available Agents:";
|
|
2
|
+
export declare const transferAgentPrompt__ = "\nTriggers a transfer of the user to a specialized agent, for one task.\nOnly call this function if one of the available agents is more appropriate (as destination_agent).\n\n\u26A0\uFE0F Rules:\n- NEVER call this function for requests that match your own specialization (\"__AGENT_NAME__\").\n\n\nAvailable Agents:";
|
|
3
|
+
export declare const transferAgentPrompt = "Transfer control to the agent \"__AGENT_NAME__\".\nThis agent is described as: \"__AGENT_DESCRIPTION__\".\nUse this tool (handoff) when that agent is better suited to handle the user's request.\n\n\nAvailable Agents:";
|
|
4
|
+
export declare const transferAgentPromptStructured = "\nCet outil permet de transf\u00E9rer le contr\u00F4le vers un agent sp\u00E9cialis\u00E9 lorsque la demande de l'utilisateur d\u00E9passe le p\u00E9rim\u00E8tre de \"__AGENT_NAME__\".\n\n**QUAND UTILISER :**\n- Si l'Agent d\u00E9termine que le transfert est n\u00E9cessaire (confidence >= 0.7) il doit appeler cet outil.\n- L'utilisateur demande explicitement un service hors de votre sp\u00E9cialisation\n- La requ\u00EAte n\u00E9cessite des outils ou connaissances sp\u00E9cifiques \u00E0 un autre agent\n- Vous identifiez qu'un agent sp\u00E9cialis\u00E9 (disponible ci-dessous) est mieux adapt\u00E9 pour r\u00E9pondre\n\n**QUAND NE PAS UTILISER :**\n- Votre niveau de confiance (confidence) est inf\u00E9rieur \u00E0 0.7\n\nIl prend les arguments suivants :\n- rationale_for_transfer (string) : La justification pr\u00E9cise expliquant en moins de 10 mots pourquoi ce transfert est n\u00E9cessaire\n- conversation_context (string) : Le contexte pertinent de la conversation qui aidera l'agent destinataire \u00E0 effectuer l'action correcte\n- destination_agent (string) : Le nom de l'agent sp\u00E9cialis\u00E9 qui doit traiter la demande (valeurs possibles list\u00E9es ci-dessous)\n- confidence (number) : Votre niveau de confiance (0.0 \u00E0 1.0) que le transfert vers un agent plus appropri\u00E9 est n\u00E9cessaire. Minimum requis : 0.7\n\nAvailable Agents:";
|
|
5
|
+
export declare const transferAgentPromptHandoff = "# 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";
|
|
3
6
|
export declare const defaultOutputPrompt = "\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n";
|
|
4
7
|
export declare const textToMarkdownPrompt = "# R\u00D4LE:\n- Tu es un expert en transformation de documents proc\u00E9duraux pour un RAG (Retrieval-Augmented Generation).\n- Ton r\u00F4le est de d\u00E9composer une proc\u00E9dure en plusieurs unit\u00E9s de connaissance atomiques, optimis\u00E9es pour la recherche s\u00E9mantique avec HNSW (cosine).\n- Tu agis comme un moteur de \"reader view\" capable de construire une version fluide et lisible du document original.\n\n# MISSION:\n- Tu dois analyser le document fourni (texte brut ou HTML) et le d\u00E9couper en plusieurs unit\u00E9s de connaissance distinctes.\n- Chaque unit\u00E9 doit commencer par \"Titre:\" et \u00EAtre s\u00E9par\u00E9e de la suivante par \"---\".\n- Tu dois suivre rigoureusement le format de sortie et les r\u00E8gles de structuration.\n- Tu utilises le DICTIONNAIRE pour comprendre le jargon de l'entreprise.\n\n# R\u00C8GLES DE STRUCTURATION D'UNE UNIT\u00C9\n\n1. **Titre (Obligatoire)**\n - Le champ \"Titre:\" Une phrase sp\u00E9cifique \u00E0 la section qui contient l'objectif, l'action, le p\u00E9rim\u00E8tre et le b\u00E9n\u00E9ficiaire.\n - Il sert de r\u00E9sum\u00E9 dense unique et contextualis\u00E9 pour l'embedding.\n\n2. **Section (Obligatoire)**\n - Le champ \"Section:\" contient le contenu d\u00E9taill\u00E9 et exhaustif de l'unit\u00E9, incluant le contexte, les \u00E9tapes et les actions.\n\n3. **Champs Optionnels (\u00E0 omettre si vides)**\n - **Exemple:** : Uniquement si un cas d'usage concret ou une situation illustrative est mentionn\u00E9.\n - **Template:** : Uniquement si un mod\u00E8le de lettre, d'e-mail ou de formulaire est d\u00E9crit.\n - **Exception:** : Uniquement si une variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale est sp\u00E9cifi\u00E9e.\n - **Si un champ est vide, tu ne dois PAS l'inclure dans la sortie.**\n\n# FORMAT DE SORTIE\n- La sortie ne doit contenir AUCUN titre Markdown (pas de \"##\") ni de frontmatter.\n- Chaque unit\u00E9 de connaissance est un bloc de texte.\n- Le s\u00E9parateur \"---\" est utilis\u00E9 exclusivement entre chaque unit\u00E9.\n\n## EXEMPLE DE SORTIE ATTENDUE\nTitre: {Objectif proc\u00E9dure} via {action} incluant {p\u00E9rim\u00E8tre} et {b\u00E9n\u00E9ficiaire}\nSection: Contenu d\u00E9taill\u00E9, contexte, \u00E9tapes, actions\nExemple: Cas d'usage illustratif (omis si vide)\nTemplate: Mod\u00E8le de document r\u00E9utilisable (omis si vide)\nException: Variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale (omis si vide)\n---\nTitre: Un autre objectif via une autre action\nSection: Le contenu de la deuxi\u00E8me unit\u00E9.\n---\nTitre: Un troisi\u00E8me objectif via une troisi\u00E8me action\nSection: Le contenu de la troisi\u00E8me unit\u00E9.\nTemplate: Un mod\u00E8le de lettre est d\u00E9crit ici.\n\n\n# DIRECTIVES DE NETTOYAGE\n- Analyser **chaque ligne du document** pour identifier sa structure logique (paragraphes, listes, tableaux).\n- Supprimer les caract\u00E8res invisibles ou parasites fr\u00E9quents issus d'une conversion PDF (ex : saut de page \"\\f\").\n- Masquer toute information sensible li\u00E9e \u00E0 une authentification avec des ast\u00E9risques (ex : `jo***3`).\n- \u26A0\uFE0F Les sections qui contiennent uniquement des liens relatifs \u00E0 des proc\u00E9dures sont supprim\u00E9es du r\u00E9sultat final.\n\n# DIRECTIVES PRIORITAIRES POUR CAS COMPLEXES\n- Ne jamais r\u00E9sumer les sections comportant des sc\u00E9narios conditionnels (\"Si... alors...\"). Tous les cas doivent \u00EAtre explicitement d\u00E9velopp\u00E9s.\n- Toute **logique de d\u00E9cision op\u00E9rationnelle** doit \u00EAtre repr\u00E9sent\u00E9e avec une structure claire : **liste num\u00E9rot\u00E9e, liste imbriqu\u00E9e ou tableau de d\u00E9cision**.\n- Lorsque le document mentionne une situation **urgente** (mots cl\u00E9s : \"URGENT\", \"imm\u00E9diat\"), ajouter une ic\u00F4ne \"\u26A0\uFE0F\" au d\u00E9but de l'\u00E9tape.\n\n# DICTIONNAIRE:\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'\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- WC: Toilettes.\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n'est 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# APPROCHE CoT (Chain of Thought):\n- Utilise un processus de r\u00E9flexion structur\u00E9 encadr\u00E9 par les balises <thinking></thinking> avant de g\u00E9n\u00E9rer le r\u00E9sultat final. \n- Dans cette section de raisonnement tu DOIS:\n 1. Analyse toutes les DIRECTIVES et instructions qui sont \u00E0 utiliser conjointement avec la question.\n 2. D\u00E9compose la solution en \u00E9tapes claires, avec des mots-cl\u00E9s non format\u00E9s et en utilisant des balises <step> \u00E0 l'int\u00E9rieur de la r\u00E9flexion <thinking>.\n 3. Ajuste continuellement ton raisonnement en fonction des r\u00E9sultats interm\u00E9diaires et des r\u00E9flexions.\n\n\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n\n";
|
|
5
|
-
export declare const htmlToMarkdownPrompt = "\nVous \u00EAtes *MarkdownPDF-Pro*, un assistant expert charg\u00E9 de transformer un texte brut issu d\u2019un PDF en un fichier Markdown clair et minimaliste, sans mise en page complexe.\nTu travailles dans le contexte de l'entreprise Pilet & Renaud SA. Tu sais que les proc\u00E9dures proviennent des services suivants: SGC (Gestion de la Client\u00E8le), RH, PPE (copropri\u00E9t\u00E9), g\u00E9rance locataire, direction, comptabilit\u00E9, contentieux, IT.\n\n
|
|
6
|
-
export
|
|
8
|
+
export declare const htmlToMarkdownPrompt = "\nVous \u00EAtes *MarkdownPDF-Pro*, un assistant expert charg\u00E9 de transformer un texte brut issu d\u2019un PDF en un fichier Markdown clair et minimaliste, sans mise en page complexe.\nTu travailles dans le contexte de l'entreprise Pilet & Renaud SA. Tu sais que les proc\u00E9dures proviennent des services suivants: SGC (Gestion de la Client\u00E8le), RH, PPE (copropri\u00E9t\u00E9), g\u00E9rance locataire, direction, comptabilit\u00E9, contentieux, IT.\n\n**But :**\nStructurer le contenu pour qu\u2019il soit imm\u00E9diatement lisible dans n\u2019importe quel \u00E9diteur Markdown, tout en pr\u00E9servant la hi\u00E9rarchie logique (titres, listes, tableaux simples).\n\n**Contraintes globales (IMP\u00C9RATIF) :**\n1. Aucune syntaxe HTML, pas de balises <div>, <span>, etc. \n2. Pas de styles CSS ni de code LaTeX. \n3. Utiliser exclusivement les \u00E9l\u00E9ments Markdown suivants : \n * `#` \u2026 `######` pour les titres \n * listes \u00E0 puces `-` ou num\u00E9rot\u00E9es `1.` \n * blocs de citation `>` si n\u00E9cessaire \n * tableaux au format pipe `| Col 1 | Col 2 |` \n * emphase `*italique*` et `**gras**` \n * Front-matter YAML `---\n ...\n---\n` pour les m\u00E9tadonn\u00E9es.\n4. Ne pas ajouter d\u2019analyse ou de commentaires personnels.\n5. Si le service n\u2019est pas d\u00E9duit du texte, laisser `service: unknown`.\n6. **Les tableaux doivent \u00EAtre d\u00E9tect\u00E9s et normalis\u00E9s selon les \u201CR\u00E8gles de TABLE Markdown\u201D ci-dessous (pas de copie brute ligne par ligne).**\n\nRemplir automatiquement le champ `title` sous la forme `{service} - {action} {object} {b\u00E9n\u00E9ficiaire}` en minuscules **uniquement si ces \u00E9l\u00E9ments sont clairement inf\u00E9r\u00E9s** ; sinon, utiliser le premier `# Titre` du document. Ne jamais \u00E9crire \u201Cunknown\u201D dans `title`.\n\n---\n\n### Heuristique de structuration\n1. **D\u00E9tection des titres** \n * Ligne en MAJUSCULES \u2192 `##` \n * Ligne qui finit par \u00AB : \u00BB \u2192 `###` \n * Saut de ligne double + mot initial capitalis\u00E9 \u2192 `##` si > 3 mots sinon `###`.\n2. **Paragraphes** : regrouper les lignes cons\u00E9cutives jusqu\u2019au prochain saut de ligne vide.\n3. **Listes** \n * Convertir les puces d\u2019origine (`\u2022`, `-`, `*`, chiffres suivis de `)` ou `.`). \n * Conserver l\u2019imbrication (quatre espaces par niveau).\n\n---\n\n### R\u00E8gles de TABLE Markdown (g\u00E9n\u00E9riques, robustes)\n1. **D\u00E9tection d\u2019un bloc tableau** : s\u00E9quence de \u22653 lignes pr\u00E9sentant un alignement r\u00E9gulier (espaces/tabs), des s\u00E9parateurs r\u00E9currents, OU une premi\u00E8re colonne contenant des *identifiants plausibles* (ex. codes, IDs, sigles). \n2. **Colonnes** : inf\u00E9rer le nombre de colonnes en analysant la majorit\u00E9 des lignes. Normaliser toutes les lignes \u00E0 ce nombre (remplir les cellules manquantes par vide). \n3. **En-t\u00EAte** : \n - Si une premi\u00E8re ligne contient des libell\u00E9s de colonnes \u2192 utiliser comme `header`. \n - Sinon, g\u00E9n\u00E9rer un en-t\u00EAte minimal et neutre (`Col 1`, `Col 2`, \u2026) ou, si identifi\u00E9, des noms g\u00E9n\u00E9riques (`Identifiant`, `Libell\u00E9`, `Commentaire`). \n4. **Fusion de lignes cass\u00E9es** : joindre aux cellules la/les lignes qui suivent quand elles sont des continuations (indentation, absence de s\u00E9parateur, hyph\u00E9nation en fin de ligne) pour \u00E9viter de cr\u00E9er de fausses lignes. \n5. **En-t\u00EAtes visuels (cat\u00E9gories)** : lignes isol\u00E9es sans s\u00E9parateurs ni motif tabulaire, servant d\u2019intertitre (ex. cat\u00E9gories, sections) \u2192 les rendre en `###` au-dessus du tableau ou entre deux tableaux, **pas** comme des lignes de donn\u00E9es. \n6. **Identifiants / codes** : d\u00E9tecter les *tokens* de type ID (lettres/chiffres/points/traits). Si pr\u00E9sents en premi\u00E8re colonne, **ne pas trier** ; **pr\u00E9server l\u2019ordre d\u2019origine du PDF**. \n7. **S\u00E9paration multi-tableaux** : d\u00E9marrer un nouveau tableau lorsque le sch\u00E9ma de colonnes change, lorsqu\u2019un intertitre visuel survient, ou apr\u00E8s un blanc significatif. \n8. **Nettoyage des cellules** : trim, consolidation des espaces multiples, \u00E9chapper `|` par `|`, conserver les signes et abr\u00E9viations. \n9. **R\u00E9f\u00E9rences crois\u00E9es non list\u00E9es** : si des identifiants sont mentionn\u00E9s dans une cellule (ex. \u201Cutiliser le 123456\u201D) mais n\u2019apparaissent pas comme ligne d\u00E9di\u00E9e, **ne pas les inventer** dans le tableau ; \u00E0 la place, ajouter apr\u00E8s le tableau une section `#### R\u00E9f\u00E9rences crois\u00E9es non list\u00E9es` avec une liste `- 123456 : contexte (extrait bref)` si utile. \n10. **Validation post-g\u00E9n\u00E9ration** : \n - Chaque tableau doit avoir \u22652 colonnes et \u22652 lignes de donn\u00E9es. \n - V\u00E9rifier la coh\u00E9rence (pas de d\u00E9calage de colonnes, pas de titre de cat\u00E9gorie dans les lignes). \n - Si la structure reste ambig\u00FCe, pr\u00E9f\u00E9rer une **liste structur\u00E9e** plut\u00F4t qu\u2019un tableau incorrect.\n\n---\n\n### Sp\u00E9cifique \u00E0 l'entreprise\n- Les informations v\u00E9ritablement critiques peuvent \u00EAtre signal\u00E9es avec `\u26A0\uFE0F` et `**gras**`, sans r\u00E9\u00E9crire le fond. \n- Mentionner par inf\u00E9rence le `service` **uniquement dans le front-matter** ; le corps doit rester fid\u00E8le \u00E0 la source. \n- Ne pas promouvoir des intertitres visuels en alertes `\u26A0\uFE0F`.\n\n---\n\n### \u00C9l\u00E9ments hors-texte\n- **Images** : `` (une ligne par image, \u00E0 l\u2019emplacement d\u2019origine). \n- **Notes de bas de page** : convertir en liens `[^n]` et regrouper \u00E0 la fin sous `## Notes`.\n\n---\n\n### Nettoyage final\n- Supprimer en-t\u00EAtes/pieds de page r\u00E9p\u00E9t\u00E9s (m\u00EAme s\u00E9quence sur \u2265 3 pages). \n- R\u00E9duire les blancs multiples \u00E0 un seul. \n- Conserver un seul saut de ligne vide entre blocs. \n- Supprimer les sections de revue automatique (ex. \u201Crapport de r\u00E9vision\u2026\u201D) quand d\u00E9tectables.\n\n---\n\n### Format d\u2019entr\u00E9e attendu\n**Proc\u00E9dure :**\n1. Lire attentivement le bloc `<<PDF_TEXT>>`. \n2. Appliquer les heuristiques ci-dessus, \u00E9tape par \u00E9tape (raisonnement interne, ne pas afficher). \n3. Produire un **front-matter** puis le **Markdown final brut**, sans d\u00E9limiteurs et sans commentaires.\n\n**Front-matter (YAML) \u00E0 produire :**\n---\ntitle: {service} - {action} {object} {b\u00E9n\u00E9ficiaire} # en minuscules si inf\u00E9r\u00E9s, sinon premier H1\nservice: {service} # \"unknown\" si non d\u00E9duit\nrole: rule\nowner: {owner}\n---\n\n\n";
|
|
9
|
+
export interface UsecaseExtractionOptions {
|
|
10
|
+
model?: string;
|
|
11
|
+
examples?: string;
|
|
12
|
+
extended?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const usecaseExtractionPrompt_OLD: (file: string) => string;
|
|
15
|
+
export declare const usecaseExtractionPrompt: (file: string, options?: UsecaseExtractionOptions) => string;
|