praisonai 1.3.5 → 1.4.0
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/agent/context.d.ts +6 -0
- package/dist/agent/context.js +24 -3
- package/dist/agent/enhanced.d.ts +6 -0
- package/dist/agent/enhanced.js +32 -6
- package/dist/agent/image.d.ts +6 -0
- package/dist/agent/image.js +28 -5
- package/dist/agent/prompt-expander.d.ts +3 -0
- package/dist/agent/prompt-expander.js +18 -3
- package/dist/agent/query-rewriter.d.ts +3 -0
- package/dist/agent/query-rewriter.js +18 -3
- package/dist/agent/research.d.ts +3 -0
- package/dist/agent/research.js +20 -4
- package/dist/agent/simple.d.ts +1 -1
- package/dist/agent/simple.js +3 -2
- package/dist/ai/agent-loop.d.ts +177 -0
- package/dist/ai/agent-loop.js +313 -0
- package/dist/ai/devtools.d.ts +74 -0
- package/dist/ai/devtools.js +216 -0
- package/dist/ai/embed.d.ts +71 -0
- package/dist/ai/embed.js +154 -0
- package/dist/ai/generate-image.d.ts +66 -0
- package/dist/ai/generate-image.js +138 -0
- package/dist/ai/generate-object.d.ts +132 -0
- package/dist/ai/generate-object.js +206 -0
- package/dist/ai/generate-text.d.ts +201 -0
- package/dist/ai/generate-text.js +253 -0
- package/dist/ai/index.d.ts +27 -0
- package/dist/ai/index.js +140 -0
- package/dist/ai/mcp.d.ts +181 -0
- package/dist/ai/mcp.js +234 -0
- package/dist/ai/middleware.d.ts +110 -0
- package/dist/ai/middleware.js +186 -0
- package/dist/ai/models.d.ts +67 -0
- package/dist/ai/models.js +249 -0
- package/dist/ai/multimodal.d.ts +125 -0
- package/dist/ai/multimodal.js +270 -0
- package/dist/ai/nextjs.d.ts +122 -0
- package/dist/ai/nextjs.js +218 -0
- package/dist/ai/server.d.ts +126 -0
- package/dist/ai/server.js +336 -0
- package/dist/ai/speech.d.ts +135 -0
- package/dist/ai/speech.js +296 -0
- package/dist/ai/telemetry.d.ts +162 -0
- package/dist/ai/telemetry.js +311 -0
- package/dist/ai/tool-approval.d.ts +225 -0
- package/dist/ai/tool-approval.js +407 -0
- package/dist/ai/tools.d.ts +93 -0
- package/dist/ai/tools.js +89 -0
- package/dist/ai/types.d.ts +47 -0
- package/dist/ai/types.js +5 -0
- package/dist/ai/ui-message.d.ts +218 -0
- package/dist/ai/ui-message.js +291 -0
- package/dist/auto/index.d.ts +6 -0
- package/dist/auto/index.js +24 -3
- package/dist/cli/commands/approval.d.ts +10 -0
- package/dist/cli/commands/approval.js +274 -0
- package/dist/cli/commands/chat.js +2 -2
- package/dist/cli/commands/observability.d.ts +7 -0
- package/dist/cli/commands/observability.js +202 -12
- package/dist/cli/commands/providers.d.ts +5 -2
- package/dist/cli/commands/providers.js +204 -5
- package/dist/cli/commands/tools.d.ts +11 -1
- package/dist/cli/commands/tools.js +450 -64
- package/dist/cli/output/errors.d.ts +1 -0
- package/dist/cli/output/errors.js +1 -0
- package/dist/cli/spec/cli-spec.js +17 -0
- package/dist/guardrails/llm-guardrail.d.ts +6 -0
- package/dist/guardrails/llm-guardrail.js +24 -3
- package/dist/index.d.ts +12 -1
- package/dist/index.js +233 -19
- package/dist/integrations/computer-use.d.ts +182 -0
- package/dist/integrations/computer-use.js +356 -0
- package/dist/integrations/postgres.d.ts +162 -0
- package/dist/integrations/postgres.js +396 -0
- package/dist/integrations/slack.d.ts +145 -0
- package/dist/integrations/slack.js +270 -0
- package/dist/llm/providers/ai-sdk/types.d.ts +49 -3
- package/dist/llm/providers/ai-sdk/types.js +169 -15
- package/dist/observability/adapters/console.d.ts +33 -0
- package/dist/observability/adapters/console.js +71 -0
- package/dist/observability/adapters/external/arize.d.ts +20 -0
- package/dist/observability/adapters/external/arize.js +22 -0
- package/dist/observability/adapters/external/axiom.d.ts +20 -0
- package/dist/observability/adapters/external/axiom.js +22 -0
- package/dist/observability/adapters/external/braintrust.d.ts +20 -0
- package/dist/observability/adapters/external/braintrust.js +22 -0
- package/dist/observability/adapters/external/helicone.d.ts +20 -0
- package/dist/observability/adapters/external/helicone.js +22 -0
- package/dist/observability/adapters/external/laminar.d.ts +20 -0
- package/dist/observability/adapters/external/laminar.js +22 -0
- package/dist/observability/adapters/external/langfuse.d.ts +28 -0
- package/dist/observability/adapters/external/langfuse.js +186 -0
- package/dist/observability/adapters/external/langsmith.d.ts +21 -0
- package/dist/observability/adapters/external/langsmith.js +83 -0
- package/dist/observability/adapters/external/langwatch.d.ts +20 -0
- package/dist/observability/adapters/external/langwatch.js +22 -0
- package/dist/observability/adapters/external/maxim.d.ts +20 -0
- package/dist/observability/adapters/external/maxim.js +22 -0
- package/dist/observability/adapters/external/patronus.d.ts +20 -0
- package/dist/observability/adapters/external/patronus.js +22 -0
- package/dist/observability/adapters/external/scorecard.d.ts +20 -0
- package/dist/observability/adapters/external/scorecard.js +22 -0
- package/dist/observability/adapters/external/signoz.d.ts +20 -0
- package/dist/observability/adapters/external/signoz.js +22 -0
- package/dist/observability/adapters/external/traceloop.d.ts +20 -0
- package/dist/observability/adapters/external/traceloop.js +22 -0
- package/dist/observability/adapters/external/weave.d.ts +20 -0
- package/dist/observability/adapters/external/weave.js +22 -0
- package/dist/observability/adapters/index.d.ts +19 -0
- package/dist/observability/adapters/index.js +289 -0
- package/dist/observability/adapters/memory.d.ts +41 -0
- package/dist/observability/adapters/memory.js +190 -0
- package/dist/observability/adapters/noop.d.ts +25 -0
- package/dist/observability/adapters/noop.js +64 -0
- package/dist/observability/index.d.ts +39 -78
- package/dist/observability/index.js +99 -150
- package/dist/observability/types.d.ts +165 -0
- package/dist/observability/types.js +165 -0
- package/dist/tools/builtins/airweave.d.ts +32 -0
- package/dist/tools/builtins/airweave.js +119 -0
- package/dist/tools/builtins/bedrock-agentcore.d.ts +62 -0
- package/dist/tools/builtins/bedrock-agentcore.js +233 -0
- package/dist/tools/builtins/code-execution.d.ts +36 -0
- package/dist/tools/builtins/code-execution.js +136 -0
- package/dist/tools/builtins/code-mode.d.ts +54 -0
- package/dist/tools/builtins/code-mode.js +167 -0
- package/dist/tools/builtins/custom.d.ts +42 -0
- package/dist/tools/builtins/custom.js +195 -0
- package/dist/tools/builtins/exa.d.ts +53 -0
- package/dist/tools/builtins/exa.js +112 -0
- package/dist/tools/builtins/firecrawl.d.ts +56 -0
- package/dist/tools/builtins/firecrawl.js +158 -0
- package/dist/tools/builtins/index.d.ts +45 -0
- package/dist/tools/builtins/index.js +180 -0
- package/dist/tools/builtins/parallel.d.ts +30 -0
- package/dist/tools/builtins/parallel.js +113 -0
- package/dist/tools/builtins/perplexity.d.ts +32 -0
- package/dist/tools/builtins/perplexity.js +113 -0
- package/dist/tools/builtins/superagent.d.ts +66 -0
- package/dist/tools/builtins/superagent.js +187 -0
- package/dist/tools/builtins/tavily.d.ts +99 -0
- package/dist/tools/builtins/tavily.js +285 -0
- package/dist/tools/builtins/valyu.d.ts +65 -0
- package/dist/tools/builtins/valyu.js +193 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.js +10 -2
- package/dist/tools/registry/index.d.ts +9 -0
- package/dist/tools/registry/index.js +28 -0
- package/dist/tools/registry/middleware.d.ts +43 -0
- package/dist/tools/registry/middleware.js +220 -0
- package/dist/tools/registry/registry.d.ts +92 -0
- package/dist/tools/registry/registry.js +280 -0
- package/dist/tools/registry/types.d.ts +217 -0
- package/dist/tools/registry/types.js +49 -0
- package/dist/tools/tools.d.ts +74 -0
- package/dist/tools/tools.js +133 -0
- package/package.json +4 -1
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Loop - Manual Agent Loop Control
|
|
4
|
+
*
|
|
5
|
+
* Provides utilities for manual control of agent execution loops.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.AgentLoop = void 0;
|
|
42
|
+
exports.createAgentLoop = createAgentLoop;
|
|
43
|
+
exports.stopAfterSteps = stopAfterSteps;
|
|
44
|
+
exports.stopWhenNoToolCalls = stopWhenNoToolCalls;
|
|
45
|
+
exports.stopWhen = stopWhen;
|
|
46
|
+
/**
|
|
47
|
+
* Create a manual agent loop for fine-grained control.
|
|
48
|
+
*
|
|
49
|
+
* @example Basic usage
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const loop = createAgentLoop({
|
|
52
|
+
* model: 'gpt-4o',
|
|
53
|
+
* system: 'You are a helpful assistant',
|
|
54
|
+
* tools: {
|
|
55
|
+
* search: {
|
|
56
|
+
* description: 'Search the web',
|
|
57
|
+
* parameters: z.object({ query: z.string() }),
|
|
58
|
+
* execute: async ({ query }) => searchWeb(query)
|
|
59
|
+
* }
|
|
60
|
+
* },
|
|
61
|
+
* maxSteps: 5
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* const result = await loop.run('Find information about AI');
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @example With approval
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const loop = createAgentLoop({
|
|
70
|
+
* model: 'gpt-4o',
|
|
71
|
+
* tools: { ... },
|
|
72
|
+
* onToolCall: async (toolCall) => {
|
|
73
|
+
* const approved = await askUserForApproval(toolCall);
|
|
74
|
+
* return approved;
|
|
75
|
+
* }
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example Step-by-step control
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const loop = createAgentLoop({ model: 'gpt-4o', tools: { ... } });
|
|
82
|
+
*
|
|
83
|
+
* // Initialize with a prompt
|
|
84
|
+
* loop.addMessage({ role: 'user', content: 'Hello' });
|
|
85
|
+
*
|
|
86
|
+
* // Run one step at a time
|
|
87
|
+
* while (!loop.isComplete()) {
|
|
88
|
+
* const step = await loop.step();
|
|
89
|
+
* console.log('Step:', step);
|
|
90
|
+
*
|
|
91
|
+
* // Optionally modify messages or tools between steps
|
|
92
|
+
* if (needsMoreContext) {
|
|
93
|
+
* loop.addMessage({ role: 'user', content: 'Additional context...' });
|
|
94
|
+
* }
|
|
95
|
+
* }
|
|
96
|
+
*
|
|
97
|
+
* const result = loop.getResult();
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
function createAgentLoop(config) {
|
|
101
|
+
return new AgentLoop(config);
|
|
102
|
+
}
|
|
103
|
+
class AgentLoop {
|
|
104
|
+
constructor(config) {
|
|
105
|
+
this.messages = [];
|
|
106
|
+
this.steps = [];
|
|
107
|
+
this.currentStep = 0;
|
|
108
|
+
this.complete = false;
|
|
109
|
+
this.totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
|
|
110
|
+
this.config = {
|
|
111
|
+
maxSteps: 10,
|
|
112
|
+
...config,
|
|
113
|
+
};
|
|
114
|
+
// Add system message if provided
|
|
115
|
+
if (config.system) {
|
|
116
|
+
this.messages.push({ role: 'system', content: config.system });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Add a message to the conversation.
|
|
121
|
+
*/
|
|
122
|
+
addMessage(message) {
|
|
123
|
+
this.messages.push(message);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get all messages in the conversation.
|
|
127
|
+
*/
|
|
128
|
+
getMessages() {
|
|
129
|
+
return [...this.messages];
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if the loop is complete.
|
|
133
|
+
*/
|
|
134
|
+
isComplete() {
|
|
135
|
+
return this.complete;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Run a single step of the agent loop.
|
|
139
|
+
*/
|
|
140
|
+
async step() {
|
|
141
|
+
if (this.complete) {
|
|
142
|
+
throw new Error('Agent loop is already complete');
|
|
143
|
+
}
|
|
144
|
+
this.currentStep++;
|
|
145
|
+
// Check max steps
|
|
146
|
+
if (this.currentStep > (this.config.maxSteps || 10)) {
|
|
147
|
+
this.complete = true;
|
|
148
|
+
throw new Error(`Maximum steps (${this.config.maxSteps}) reached`);
|
|
149
|
+
}
|
|
150
|
+
// Import and call generateText
|
|
151
|
+
const { generateText } = await Promise.resolve().then(() => __importStar(require('./generate-text')));
|
|
152
|
+
const result = await generateText({
|
|
153
|
+
model: this.config.model,
|
|
154
|
+
messages: this.messages,
|
|
155
|
+
tools: this.config.tools,
|
|
156
|
+
maxSteps: 1, // Single step
|
|
157
|
+
});
|
|
158
|
+
// Build step result
|
|
159
|
+
const step = {
|
|
160
|
+
stepNumber: this.currentStep,
|
|
161
|
+
text: result.text,
|
|
162
|
+
toolCalls: result.toolCalls.map(tc => ({
|
|
163
|
+
toolCallId: tc.toolCallId,
|
|
164
|
+
toolName: tc.toolName,
|
|
165
|
+
args: tc.args,
|
|
166
|
+
})),
|
|
167
|
+
toolResults: result.toolResults.map(tr => ({
|
|
168
|
+
toolCallId: tr.toolCallId,
|
|
169
|
+
toolName: tr.toolName,
|
|
170
|
+
result: tr.result,
|
|
171
|
+
})),
|
|
172
|
+
usage: result.usage,
|
|
173
|
+
finishReason: result.finishReason,
|
|
174
|
+
};
|
|
175
|
+
// Update total usage
|
|
176
|
+
this.totalUsage.promptTokens += result.usage.promptTokens;
|
|
177
|
+
this.totalUsage.completionTokens += result.usage.completionTokens;
|
|
178
|
+
this.totalUsage.totalTokens += result.usage.totalTokens;
|
|
179
|
+
// Add assistant message
|
|
180
|
+
if (result.text) {
|
|
181
|
+
this.messages.push({ role: 'assistant', content: result.text });
|
|
182
|
+
}
|
|
183
|
+
// Handle tool calls
|
|
184
|
+
if (step.toolCalls.length > 0) {
|
|
185
|
+
// Check for approval if callback provided
|
|
186
|
+
if (this.config.onToolCall) {
|
|
187
|
+
for (const toolCall of step.toolCalls) {
|
|
188
|
+
const approved = await this.config.onToolCall(toolCall);
|
|
189
|
+
if (!approved) {
|
|
190
|
+
this.complete = true;
|
|
191
|
+
step.finishReason = 'tool_rejected';
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Add tool call message
|
|
197
|
+
const toolCallParts = step.toolCalls.map(tc => ({
|
|
198
|
+
type: 'tool-call',
|
|
199
|
+
toolCallId: tc.toolCallId,
|
|
200
|
+
toolName: tc.toolName,
|
|
201
|
+
args: tc.args,
|
|
202
|
+
}));
|
|
203
|
+
this.messages.push({ role: 'assistant', content: '', toolCalls: toolCallParts });
|
|
204
|
+
// Add tool results
|
|
205
|
+
for (const tr of step.toolResults) {
|
|
206
|
+
const toolResultPart = {
|
|
207
|
+
type: 'tool-result',
|
|
208
|
+
toolCallId: tr.toolCallId,
|
|
209
|
+
toolName: tr.toolName,
|
|
210
|
+
result: tr.result,
|
|
211
|
+
};
|
|
212
|
+
this.messages.push({
|
|
213
|
+
role: 'tool',
|
|
214
|
+
content: [toolResultPart],
|
|
215
|
+
toolCallId: tr.toolCallId,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Store step
|
|
220
|
+
this.steps.push(step);
|
|
221
|
+
// Call step finish callback
|
|
222
|
+
if (this.config.onStepFinish) {
|
|
223
|
+
await this.config.onStepFinish(step);
|
|
224
|
+
}
|
|
225
|
+
// Check stop conditions
|
|
226
|
+
if (this.shouldStop(step)) {
|
|
227
|
+
this.complete = true;
|
|
228
|
+
}
|
|
229
|
+
return step;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Run the full agent loop until completion.
|
|
233
|
+
*/
|
|
234
|
+
async run(prompt) {
|
|
235
|
+
// Add user message
|
|
236
|
+
this.addMessage({ role: 'user', content: prompt });
|
|
237
|
+
// Run steps until complete
|
|
238
|
+
while (!this.isComplete()) {
|
|
239
|
+
try {
|
|
240
|
+
await this.step();
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
if (error.message.includes('Maximum steps')) {
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return this.getResult();
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get the final result.
|
|
253
|
+
*/
|
|
254
|
+
getResult() {
|
|
255
|
+
const lastStep = this.steps[this.steps.length - 1];
|
|
256
|
+
return {
|
|
257
|
+
text: lastStep?.text || '',
|
|
258
|
+
steps: this.steps,
|
|
259
|
+
totalUsage: this.totalUsage,
|
|
260
|
+
finishReason: lastStep?.finishReason || 'unknown',
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Check if the loop should stop.
|
|
265
|
+
*/
|
|
266
|
+
shouldStop(step) {
|
|
267
|
+
// Check custom stop condition
|
|
268
|
+
if (this.config.stopWhen) {
|
|
269
|
+
switch (this.config.stopWhen.type) {
|
|
270
|
+
case 'stepCount':
|
|
271
|
+
return this.currentStep >= this.config.stopWhen.count;
|
|
272
|
+
case 'noToolCalls':
|
|
273
|
+
return step.toolCalls.length === 0;
|
|
274
|
+
case 'custom':
|
|
275
|
+
return this.config.stopWhen.check(step);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Default: stop when no tool calls
|
|
279
|
+
return step.toolCalls.length === 0 && step.finishReason === 'stop';
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Reset the agent loop.
|
|
283
|
+
*/
|
|
284
|
+
reset() {
|
|
285
|
+
this.messages = [];
|
|
286
|
+
this.steps = [];
|
|
287
|
+
this.currentStep = 0;
|
|
288
|
+
this.complete = false;
|
|
289
|
+
this.totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
|
|
290
|
+
if (this.config.system) {
|
|
291
|
+
this.messages.push({ role: 'system', content: this.config.system });
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
exports.AgentLoop = AgentLoop;
|
|
296
|
+
/**
|
|
297
|
+
* Create a stop condition that stops after N steps.
|
|
298
|
+
*/
|
|
299
|
+
function stopAfterSteps(count) {
|
|
300
|
+
return { type: 'stepCount', count };
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Create a stop condition that stops when no tool calls are made.
|
|
304
|
+
*/
|
|
305
|
+
function stopWhenNoToolCalls() {
|
|
306
|
+
return { type: 'noToolCalls' };
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Create a custom stop condition.
|
|
310
|
+
*/
|
|
311
|
+
function stopWhen(check) {
|
|
312
|
+
return { type: 'custom', check };
|
|
313
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevTools - AI SDK v6 DevTools Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides optional DevTools integration for debugging AI SDK calls.
|
|
5
|
+
* This is an optional dependency that provides visibility into LLM calls.
|
|
6
|
+
*/
|
|
7
|
+
export interface DevToolsConfig {
|
|
8
|
+
/** Enable DevTools (default: auto-detect from NODE_ENV) */
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
/** DevTools server port (default: 3001) */
|
|
11
|
+
port?: number;
|
|
12
|
+
/** DevTools server host (default: localhost) */
|
|
13
|
+
host?: string;
|
|
14
|
+
/** Project name for DevTools UI */
|
|
15
|
+
projectName?: string;
|
|
16
|
+
/** Custom metadata to include */
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export interface DevToolsState {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
initialized: boolean;
|
|
22
|
+
port?: number;
|
|
23
|
+
host?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Enable AI SDK DevTools for debugging.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Enable in development
|
|
31
|
+
* if (process.env.NODE_ENV === 'development') {
|
|
32
|
+
* await enableDevTools();
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @example With configuration
|
|
37
|
+
* ```typescript
|
|
38
|
+
* await enableDevTools({
|
|
39
|
+
* port: 3001,
|
|
40
|
+
* projectName: 'My AI App'
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function enableDevTools(config?: DevToolsConfig): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Disable DevTools.
|
|
47
|
+
*/
|
|
48
|
+
export declare function disableDevTools(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if DevTools is enabled.
|
|
51
|
+
*/
|
|
52
|
+
export declare function isDevToolsEnabled(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get DevTools state.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getDevToolsState(): DevToolsState;
|
|
57
|
+
/**
|
|
58
|
+
* Get DevTools URL.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getDevToolsUrl(): string | null;
|
|
61
|
+
/**
|
|
62
|
+
* Create middleware that logs to DevTools.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const model = wrapModel(openai('gpt-4o'), createDevToolsMiddleware());
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function createDevToolsMiddleware(): any;
|
|
70
|
+
/**
|
|
71
|
+
* Auto-enable DevTools if in development mode.
|
|
72
|
+
* Call this at app startup.
|
|
73
|
+
*/
|
|
74
|
+
export declare function autoEnableDevTools(): Promise<void>;
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DevTools - AI SDK v6 DevTools Integration
|
|
4
|
+
*
|
|
5
|
+
* Provides optional DevTools integration for debugging AI SDK calls.
|
|
6
|
+
* This is an optional dependency that provides visibility into LLM calls.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.enableDevTools = enableDevTools;
|
|
43
|
+
exports.disableDevTools = disableDevTools;
|
|
44
|
+
exports.isDevToolsEnabled = isDevToolsEnabled;
|
|
45
|
+
exports.getDevToolsState = getDevToolsState;
|
|
46
|
+
exports.getDevToolsUrl = getDevToolsUrl;
|
|
47
|
+
exports.createDevToolsMiddleware = createDevToolsMiddleware;
|
|
48
|
+
exports.autoEnableDevTools = autoEnableDevTools;
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Global State
|
|
51
|
+
// ============================================================================
|
|
52
|
+
let devToolsState = {
|
|
53
|
+
enabled: false,
|
|
54
|
+
initialized: false,
|
|
55
|
+
};
|
|
56
|
+
let devToolsInstance = null;
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// DevTools Functions
|
|
59
|
+
// ============================================================================
|
|
60
|
+
/**
|
|
61
|
+
* Enable AI SDK DevTools for debugging.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* // Enable in development
|
|
66
|
+
* if (process.env.NODE_ENV === 'development') {
|
|
67
|
+
* await enableDevTools();
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @example With configuration
|
|
72
|
+
* ```typescript
|
|
73
|
+
* await enableDevTools({
|
|
74
|
+
* port: 3001,
|
|
75
|
+
* projectName: 'My AI App'
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
async function enableDevTools(config) {
|
|
80
|
+
if (devToolsState.initialized && devToolsState.enabled) {
|
|
81
|
+
return; // Already enabled
|
|
82
|
+
}
|
|
83
|
+
// Check if we should enable
|
|
84
|
+
const shouldEnable = config?.enabled ??
|
|
85
|
+
(process.env.NODE_ENV === 'development' || process.env.PRAISONAI_DEVTOOLS === 'true');
|
|
86
|
+
if (!shouldEnable) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
// Try to import @ai-sdk/devtools (optional dependency)
|
|
91
|
+
// @ts-ignore - Optional dependency
|
|
92
|
+
const devtools = await Promise.resolve().then(() => __importStar(require('@ai-sdk/devtools')));
|
|
93
|
+
if ('enableDevTools' in devtools) {
|
|
94
|
+
await devtools.enableDevTools({
|
|
95
|
+
port: config?.port,
|
|
96
|
+
host: config?.host,
|
|
97
|
+
projectName: config?.projectName,
|
|
98
|
+
metadata: config?.metadata,
|
|
99
|
+
});
|
|
100
|
+
devToolsInstance = devtools;
|
|
101
|
+
devToolsState = {
|
|
102
|
+
enabled: true,
|
|
103
|
+
initialized: true,
|
|
104
|
+
port: config?.port || 3001,
|
|
105
|
+
host: config?.host || 'localhost',
|
|
106
|
+
};
|
|
107
|
+
console.log(`🔧 AI SDK DevTools enabled at http://${devToolsState.host}:${devToolsState.port}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND') {
|
|
112
|
+
console.warn('⚠️ @ai-sdk/devtools not installed. Install with:\n' +
|
|
113
|
+
' npm install @ai-sdk/devtools\n' +
|
|
114
|
+
' or: pnpm add @ai-sdk/devtools');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.warn('⚠️ Failed to enable DevTools:', error.message);
|
|
118
|
+
}
|
|
119
|
+
devToolsState = {
|
|
120
|
+
enabled: false,
|
|
121
|
+
initialized: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Disable DevTools.
|
|
127
|
+
*/
|
|
128
|
+
async function disableDevTools() {
|
|
129
|
+
if (!devToolsState.enabled) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
if (devToolsInstance && typeof devToolsInstance.disableDevTools === 'function') {
|
|
134
|
+
await devToolsInstance.disableDevTools();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Ignore errors during disable
|
|
139
|
+
}
|
|
140
|
+
devToolsState = {
|
|
141
|
+
enabled: false,
|
|
142
|
+
initialized: true,
|
|
143
|
+
};
|
|
144
|
+
devToolsInstance = null;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if DevTools is enabled.
|
|
148
|
+
*/
|
|
149
|
+
function isDevToolsEnabled() {
|
|
150
|
+
return devToolsState.enabled;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get DevTools state.
|
|
154
|
+
*/
|
|
155
|
+
function getDevToolsState() {
|
|
156
|
+
return { ...devToolsState };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get DevTools URL.
|
|
160
|
+
*/
|
|
161
|
+
function getDevToolsUrl() {
|
|
162
|
+
if (!devToolsState.enabled) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return `http://${devToolsState.host || 'localhost'}:${devToolsState.port || 3001}`;
|
|
166
|
+
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Middleware for DevTools
|
|
169
|
+
// ============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* Create middleware that logs to DevTools.
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* const model = wrapModel(openai('gpt-4o'), createDevToolsMiddleware());
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
function createDevToolsMiddleware() {
|
|
179
|
+
return {
|
|
180
|
+
transformParams: async ({ params }) => {
|
|
181
|
+
if (!devToolsState.enabled) {
|
|
182
|
+
return params;
|
|
183
|
+
}
|
|
184
|
+
// Add DevTools metadata
|
|
185
|
+
return {
|
|
186
|
+
...params,
|
|
187
|
+
experimental_telemetry: {
|
|
188
|
+
...params.experimental_telemetry,
|
|
189
|
+
isEnabled: true,
|
|
190
|
+
metadata: {
|
|
191
|
+
...params.experimental_telemetry?.metadata,
|
|
192
|
+
devtools: true,
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// ============================================================================
|
|
200
|
+
// Auto-enable in Development
|
|
201
|
+
// ============================================================================
|
|
202
|
+
/**
|
|
203
|
+
* Auto-enable DevTools if in development mode.
|
|
204
|
+
* Call this at app startup.
|
|
205
|
+
*/
|
|
206
|
+
async function autoEnableDevTools() {
|
|
207
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
208
|
+
const isExplicitlyEnabled = process.env.PRAISONAI_DEVTOOLS === 'true';
|
|
209
|
+
const isExplicitlyDisabled = process.env.PRAISONAI_DEVTOOLS === 'false';
|
|
210
|
+
if (isExplicitlyDisabled) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (isDev || isExplicitlyEnabled) {
|
|
214
|
+
await enableDevTools();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embed - AI SDK Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Provides embed and embedMany functions for text embeddings.
|
|
5
|
+
*/
|
|
6
|
+
export interface EmbedOptions {
|
|
7
|
+
/** Model to use (e.g., 'text-embedding-3-small', 'openai/text-embedding-3-large') */
|
|
8
|
+
model: string;
|
|
9
|
+
/** Text to embed */
|
|
10
|
+
value: string;
|
|
11
|
+
/** Maximum retries */
|
|
12
|
+
maxRetries?: number;
|
|
13
|
+
/** Abort signal */
|
|
14
|
+
abortSignal?: AbortSignal;
|
|
15
|
+
/** Additional headers */
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
export interface EmbedResult {
|
|
19
|
+
/** Embedding vector */
|
|
20
|
+
embedding: number[];
|
|
21
|
+
/** Token usage */
|
|
22
|
+
usage: {
|
|
23
|
+
tokens: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface EmbedManyOptions {
|
|
27
|
+
/** Model to use */
|
|
28
|
+
model: string;
|
|
29
|
+
/** Texts to embed */
|
|
30
|
+
values: string[];
|
|
31
|
+
/** Maximum retries */
|
|
32
|
+
maxRetries?: number;
|
|
33
|
+
/** Abort signal */
|
|
34
|
+
abortSignal?: AbortSignal;
|
|
35
|
+
/** Additional headers */
|
|
36
|
+
headers?: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
export interface EmbedManyResult {
|
|
39
|
+
/** Embedding vectors */
|
|
40
|
+
embeddings: number[][];
|
|
41
|
+
/** Token usage */
|
|
42
|
+
usage: {
|
|
43
|
+
tokens: number;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Embed a single text using an embedding model.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const result = await embed({
|
|
52
|
+
* model: 'text-embedding-3-small',
|
|
53
|
+
* value: 'Hello, world!'
|
|
54
|
+
* });
|
|
55
|
+
* console.log(result.embedding); // [0.1, 0.2, ...]
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function embed(options: EmbedOptions): Promise<EmbedResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Embed multiple texts using an embedding model.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const result = await embedMany({
|
|
65
|
+
* model: 'text-embedding-3-small',
|
|
66
|
+
* values: ['Hello', 'World']
|
|
67
|
+
* });
|
|
68
|
+
* console.log(result.embeddings); // [[0.1, ...], [0.2, ...]]
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function embedMany(options: EmbedManyOptions): Promise<EmbedManyResult>;
|