@falai/agent 0.1.0 → 0.1.2
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/core/Agent.d.ts +18 -6
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +45 -6
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/Events.d.ts +2 -2
- package/dist/core/Events.d.ts.map +1 -1
- package/dist/core/Events.js +1 -1
- package/dist/core/Events.js.map +1 -1
- package/dist/core/Observation.d.ts +3 -3
- package/dist/core/Observation.d.ts.map +1 -1
- package/dist/core/PromptBuilder.d.ts +8 -4
- package/dist/core/PromptBuilder.d.ts.map +1 -1
- package/dist/core/PromptBuilder.js +35 -3
- package/dist/core/PromptBuilder.js.map +1 -1
- package/dist/core/Route.d.ts +3 -3
- package/dist/core/Route.d.ts.map +1 -1
- package/dist/core/Route.js +1 -1
- package/dist/core/Route.js.map +1 -1
- package/dist/core/State.d.ts +3 -3
- package/dist/core/State.d.ts.map +1 -1
- package/dist/core/State.js +2 -2
- package/dist/core/State.js.map +1 -1
- package/dist/core/Tool.d.ts +1 -1
- package/dist/core/Tool.d.ts.map +1 -1
- package/dist/core/Transition.d.ts +2 -2
- package/dist/core/Transition.d.ts.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +1 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +19 -2
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +77 -1
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +77 -1
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/types/ai.d.ts +24 -0
- package/dist/types/ai.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +71 -2
- package/docs/CONTRIBUTING.md +2 -2
- package/package.json +1 -1
- package/src/core/Agent.ts +66 -10
- package/src/core/Events.ts +2 -2
- package/src/core/Observation.ts +3 -3
- package/src/core/PromptBuilder.ts +45 -6
- package/src/core/Route.ts +3 -3
- package/src/core/State.ts +9 -5
- package/src/core/Tool.ts +1 -1
- package/src/core/Transition.ts +2 -2
- package/src/index.ts +11 -10
- package/src/providers/GeminiProvider.ts +22 -3
- package/src/providers/OpenAIProvider.ts +86 -2
- package/src/providers/OpenRouterProvider.ts +86 -2
- package/src/types/ai.ts +25 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Google Gemini AI provider implementation with retry and backup models
|
|
3
3
|
*/
|
|
4
4
|
import { GoogleGenAI } from "@google/genai";
|
|
5
|
-
import { withTimeoutAndRetry } from "
|
|
5
|
+
import { withTimeoutAndRetry } from "../utils/retry";
|
|
6
6
|
const DEFAULT_RETRY_CONFIG = {
|
|
7
7
|
timeout: 60000,
|
|
8
8
|
retries: 3,
|
|
@@ -101,15 +101,31 @@ export class GeminiProvider {
|
|
|
101
101
|
}
|
|
102
102
|
async generateWithModel(model, input) {
|
|
103
103
|
const operation = async () => {
|
|
104
|
+
// Enable JSON mode if requested
|
|
105
|
+
const configOverride = { ...this.config };
|
|
106
|
+
if (input.parameters?.jsonMode) {
|
|
107
|
+
configOverride.responseMimeType = "application/json";
|
|
108
|
+
}
|
|
104
109
|
const response = await this.genAI.models.generateContent({
|
|
105
110
|
model,
|
|
106
111
|
contents: input.prompt,
|
|
107
|
-
config:
|
|
112
|
+
config: configOverride,
|
|
108
113
|
});
|
|
109
114
|
const message = response.text;
|
|
110
115
|
if (!message) {
|
|
111
116
|
throw new Error("No response from Gemini");
|
|
112
117
|
}
|
|
118
|
+
// Parse JSON response if JSON mode was enabled
|
|
119
|
+
let structured;
|
|
120
|
+
if (input.parameters?.jsonMode) {
|
|
121
|
+
try {
|
|
122
|
+
structured = JSON.parse(message);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.warn("[GEMINI] Failed to parse JSON response:", error);
|
|
126
|
+
// Fall back to treating the message as plain text
|
|
127
|
+
}
|
|
128
|
+
}
|
|
113
129
|
return {
|
|
114
130
|
message,
|
|
115
131
|
metadata: {
|
|
@@ -118,6 +134,7 @@ export class GeminiProvider {
|
|
|
118
134
|
promptTokens: response.usageMetadata?.promptTokenCount,
|
|
119
135
|
completionTokens: response.usageMetadata?.candidatesTokenCount,
|
|
120
136
|
},
|
|
137
|
+
structured,
|
|
121
138
|
};
|
|
122
139
|
};
|
|
123
140
|
return withTimeoutAndRetry(operation, this.retryConfig.timeout, this.retryConfig.retries, `Gemini ${model}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* OpenAI provider implementation with retry and backup models
|
|
3
3
|
*/
|
|
4
4
|
import type { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions";
|
|
5
|
-
import type { AiProvider, GenerateMessageInput, GenerateMessageOutput } from "
|
|
5
|
+
import type { AiProvider, GenerateMessageInput, GenerateMessageOutput } from "../types/ai";
|
|
6
6
|
/**
|
|
7
7
|
* Configuration options for OpenAI provider
|
|
8
8
|
* Uses types from openai package
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAQrB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CACd,IAAI,CAAC,sCAAsC,EAAE,OAAO,GAAG,UAAU,CAAC,CACnE,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAwED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAEb;IACF,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAiCpC,eAAe,CAAC,QAAQ,GAAG,OAAO,EACtC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC;YAInB,kBAAkB;YA2DlB,iBAAiB;CAkIhC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* OpenAI provider implementation with retry and backup models
|
|
3
3
|
*/
|
|
4
4
|
import OpenAI from "openai";
|
|
5
|
-
import { withTimeoutAndRetry } from "
|
|
5
|
+
import { withTimeoutAndRetry } from "../utils/retry";
|
|
6
6
|
const DEFAULT_RETRY_CONFIG = {
|
|
7
7
|
timeout: 60000,
|
|
8
8
|
retries: 3,
|
|
@@ -142,6 +142,82 @@ export class OpenAIProvider {
|
|
|
142
142
|
if (input.parameters?.maxOutputTokens !== undefined) {
|
|
143
143
|
params.max_tokens = input.parameters.maxOutputTokens;
|
|
144
144
|
}
|
|
145
|
+
// Use structured output API if JSON mode is enabled
|
|
146
|
+
if (input.parameters?.jsonMode) {
|
|
147
|
+
// Define the JSON schema for agent response
|
|
148
|
+
const agentResponseSchema = {
|
|
149
|
+
type: "object",
|
|
150
|
+
properties: {
|
|
151
|
+
message: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description: "The actual message to send to the user",
|
|
154
|
+
},
|
|
155
|
+
route: {
|
|
156
|
+
type: ["string", "null"],
|
|
157
|
+
description: "The title of the route chosen (or null if no specific route)",
|
|
158
|
+
},
|
|
159
|
+
state: {
|
|
160
|
+
type: ["string", "null"],
|
|
161
|
+
description: "The current state within the route (or null if not in a route)",
|
|
162
|
+
},
|
|
163
|
+
toolCalls: {
|
|
164
|
+
type: "array",
|
|
165
|
+
items: {
|
|
166
|
+
type: "object",
|
|
167
|
+
properties: {
|
|
168
|
+
toolName: {
|
|
169
|
+
type: "string",
|
|
170
|
+
description: "Name of the tool to call",
|
|
171
|
+
},
|
|
172
|
+
arguments: {
|
|
173
|
+
type: "object",
|
|
174
|
+
description: "Arguments to pass to the tool",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
required: ["toolName", "arguments"],
|
|
178
|
+
},
|
|
179
|
+
description: "Tool calls the agent wants to execute",
|
|
180
|
+
},
|
|
181
|
+
reasoning: {
|
|
182
|
+
type: "string",
|
|
183
|
+
description: "Optional: Internal reasoning for this response",
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
required: ["message"],
|
|
187
|
+
additionalProperties: false,
|
|
188
|
+
};
|
|
189
|
+
const response = await this.client.responses.parse({
|
|
190
|
+
model,
|
|
191
|
+
instructions: input.prompt,
|
|
192
|
+
input: "",
|
|
193
|
+
reasoning: {
|
|
194
|
+
effort: input.parameters?.reasoning?.effort || "low",
|
|
195
|
+
},
|
|
196
|
+
text: {
|
|
197
|
+
format: {
|
|
198
|
+
type: "json_schema",
|
|
199
|
+
name: "agentResponseSchema",
|
|
200
|
+
schema: agentResponseSchema,
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
if (!response.output_parsed) {
|
|
205
|
+
throw new Error("No parsed output returned from OpenAI");
|
|
206
|
+
}
|
|
207
|
+
const structured = response.output_parsed;
|
|
208
|
+
const message = structured.message;
|
|
209
|
+
return {
|
|
210
|
+
message,
|
|
211
|
+
metadata: {
|
|
212
|
+
model: response.model,
|
|
213
|
+
tokensUsed: response.usage?.total_tokens,
|
|
214
|
+
promptTokens: response.usage?.input_tokens,
|
|
215
|
+
completionTokens: response.usage?.output_tokens,
|
|
216
|
+
},
|
|
217
|
+
structured,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// Fall back to regular chat completions API if JSON mode not enabled
|
|
145
221
|
const response = await this.client.chat.completions.create(params);
|
|
146
222
|
const message = response.choices[0]?.message?.content;
|
|
147
223
|
if (!message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAS5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,oBAAoB,GAAG;IAC3B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,CAAC;CACX,CAAC;AAoCF;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAW,EAAE;IACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IACE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,cAAc;IACT,IAAI,GAAG,QAAQ,CAAC;IACxB,MAAM,CAAS;IACf,YAAY,CAAS;IACrB,YAAY,CAAW;IACvB,MAAM,CAEZ;IACM,WAAW,CAAuC;IAE1D,YAAY,OAA8B;QACxC,MAAM,EACJ,MAAM,EACN,YAAY,EACZ,KAAK,EACL,YAAY,GAAG,EAAE,EACjB,MAAM,EACN,WAAW,GACZ,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,0CAA0C;QAE1C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM;YACN,YAAY;SACb,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG;YACjB,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;YAC7D,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;SAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAqC;QAErC,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,KAAqC;QAErC,0BAA0B;QAC1B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,YAAqB,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,0BAA0B,IAAI,CAAC,YAAY,YAAY,aAAa,EAAE,CACvE,CAAC;YAEF,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAE7C,IAAI,eAAe,GAAY,YAAY,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CACT,gCAAgC,CAAC,GAAG,CAAC,IACnC,IAAI,CAAC,YAAY,CAAC,MACpB,KAAK,WAAW,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAChE,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,YAAY,CAAC,CAAC;oBAC9D,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,WAAoB,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;oBAClD,OAAO,CAAC,IAAI,CACV,yBAAyB,WAAW,YAAY,YAAY,EAAE,CAC/D,CAAC;oBACF,eAAe,GAAG,WAAW,CAAC;oBAE9B,IACE,CAAC,oBAAoB,CAAC,WAAW,CAAC;wBAClC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;wBACD,OAAO,CAAC,GAAG,CACT,kEAAkE,CACnE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CACX,wCAAwC,aAAa,kBAAkB,gBAAgB,EAAE,CAC1F,CAAC;YACF,MAAM,eAAe,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAAa,EACb,KAAqC;QAErC,MAAM,SAAS,GAAG,KAAK,IAAoC,EAAE;YAC3D,MAAM,MAAM,GAA2C;gBACrD,KAAK;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,KAAK,CAAC,MAAM;qBACtB;iBACF;gBACD,GAAG,IAAI,CAAC,MAAM;aACf,CAAC;YAEF,6CAA6C;YAC7C,IAAI,KAAK,CAAC,UAAU,EAAE,eAAe,KAAK,SAAS,EAAE,CAAC;gBACpD,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;YACvD,CAAC;YAED,oDAAoD;YACpD,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC/B,4CAA4C;gBAC5C,MAAM,mBAAmB,GAAG;oBAC1B,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wCAAwC;yBACtD;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;4BACxB,WAAW,EACT,8DAA8D;yBACjE;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;4BACxB,WAAW,EACT,gEAAgE;yBACnE;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE;oCACV,QAAQ,EAAE;wCACR,IAAI,EAAE,QAAQ;wCACd,WAAW,EAAE,0BAA0B;qCACxC;oCACD,SAAS,EAAE;wCACT,IAAI,EAAE,QAAQ;wCACd,WAAW,EAAE,+BAA+B;qCAC7C;iCACF;gCACD,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;6BACpC;4BACD,WAAW,EAAE,uCAAuC;yBACrD;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,gDAAgD;yBAC9D;qBACF;oBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;oBACrB,oBAAoB,EAAE,KAAK;iBAC5B,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;oBACjD,KAAK;oBACL,YAAY,EAAE,KAAK,CAAC,MAAM;oBAC1B,KAAK,EAAE,EAAE;oBACT,SAAS,EAAE;wBACT,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,KAAK;qBACrD;oBACD,IAAI,EAAE;wBACJ,MAAM,EAAE;4BACN,IAAI,EAAE,aAAa;4BACnB,IAAI,EAAE,qBAAqB;4BAC3B,MAAM,EAAE,mBAAmB;yBAC5B;qBACF;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;gBAED,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAwC,CAAC;gBACrE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gBAEnC,OAAO;oBACL,OAAO;oBACP,QAAQ,EAAE;wBACR,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY;wBACxC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY;wBAC1C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa;qBAChD;oBACD,UAAU;iBACX,CAAC;YACJ,CAAC;YAED,qEAAqE;YACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,OAAO;gBACL,OAAO;gBACP,QAAQ,EAAE;oBACR,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa;oBAChD,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY;oBACxC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa;oBAC3C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB;iBACpD;aACF,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,mBAAmB,CACxB,SAAS,EACT,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,UAAU,KAAK,EAAE,CAClB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* OpenRouter provides access to multiple AI models through a unified OpenAI-compatible API
|
|
4
4
|
*/
|
|
5
5
|
import type { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions";
|
|
6
|
-
import type { AiProvider, GenerateMessageInput, GenerateMessageOutput } from "
|
|
6
|
+
import type { AiProvider, GenerateMessageInput, GenerateMessageOutput } from "../types/ai";
|
|
7
7
|
/**
|
|
8
8
|
* Configuration options for OpenRouter provider
|
|
9
9
|
* Uses types from openai package (OpenRouter is OpenAI-compatible)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,
|
|
1
|
+
{"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,EAEV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAQrB;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CACd,IAAI,CAAC,sCAAsC,EAAE,OAAO,GAAG,UAAU,CAAC,CACnE,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAyED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,SAAgB,IAAI,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAEb;IACF,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,yBAAyB;IAsCxC,eAAe,CAAC,QAAQ,GAAG,OAAO,EACtC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC;YAInB,kBAAkB;YA2DlB,iBAAiB;CAkIhC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* OpenRouter provides access to multiple AI models through a unified OpenAI-compatible API
|
|
4
4
|
*/
|
|
5
5
|
import OpenAI from "openai";
|
|
6
|
-
import { withTimeoutAndRetry } from "
|
|
6
|
+
import { withTimeoutAndRetry } from "../utils/retry";
|
|
7
7
|
const DEFAULT_RETRY_CONFIG = {
|
|
8
8
|
timeout: 60000,
|
|
9
9
|
retries: 3,
|
|
@@ -149,6 +149,82 @@ export class OpenRouterProvider {
|
|
|
149
149
|
if (input.parameters?.maxOutputTokens !== undefined) {
|
|
150
150
|
params.max_tokens = input.parameters.maxOutputTokens;
|
|
151
151
|
}
|
|
152
|
+
// Use structured output API if JSON mode is enabled
|
|
153
|
+
if (input.parameters?.jsonMode) {
|
|
154
|
+
// Define the JSON schema for agent response
|
|
155
|
+
const agentResponseSchema = {
|
|
156
|
+
type: "object",
|
|
157
|
+
properties: {
|
|
158
|
+
message: {
|
|
159
|
+
type: "string",
|
|
160
|
+
description: "The actual message to send to the user",
|
|
161
|
+
},
|
|
162
|
+
route: {
|
|
163
|
+
type: ["string", "null"],
|
|
164
|
+
description: "The title of the route chosen (or null if no specific route)",
|
|
165
|
+
},
|
|
166
|
+
state: {
|
|
167
|
+
type: ["string", "null"],
|
|
168
|
+
description: "The current state within the route (or null if not in a route)",
|
|
169
|
+
},
|
|
170
|
+
toolCalls: {
|
|
171
|
+
type: "array",
|
|
172
|
+
items: {
|
|
173
|
+
type: "object",
|
|
174
|
+
properties: {
|
|
175
|
+
toolName: {
|
|
176
|
+
type: "string",
|
|
177
|
+
description: "Name of the tool to call",
|
|
178
|
+
},
|
|
179
|
+
arguments: {
|
|
180
|
+
type: "object",
|
|
181
|
+
description: "Arguments to pass to the tool",
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
required: ["toolName", "arguments"],
|
|
185
|
+
},
|
|
186
|
+
description: "Tool calls the agent wants to execute",
|
|
187
|
+
},
|
|
188
|
+
reasoning: {
|
|
189
|
+
type: "string",
|
|
190
|
+
description: "Optional: Internal reasoning for this response",
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
required: ["message"],
|
|
194
|
+
additionalProperties: false,
|
|
195
|
+
};
|
|
196
|
+
const response = await this.client.responses.parse({
|
|
197
|
+
model,
|
|
198
|
+
instructions: input.prompt,
|
|
199
|
+
input: "",
|
|
200
|
+
reasoning: {
|
|
201
|
+
effort: input.parameters?.reasoning?.effort || "low",
|
|
202
|
+
},
|
|
203
|
+
text: {
|
|
204
|
+
format: {
|
|
205
|
+
type: "json_schema",
|
|
206
|
+
name: "agentResponseSchema",
|
|
207
|
+
schema: agentResponseSchema,
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
if (!response.output_parsed) {
|
|
212
|
+
throw new Error("No parsed output returned from OpenRouter");
|
|
213
|
+
}
|
|
214
|
+
const structured = response.output_parsed;
|
|
215
|
+
const message = structured.message;
|
|
216
|
+
return {
|
|
217
|
+
message,
|
|
218
|
+
metadata: {
|
|
219
|
+
model: response.model,
|
|
220
|
+
tokensUsed: response.usage?.total_tokens,
|
|
221
|
+
promptTokens: response.usage?.input_tokens,
|
|
222
|
+
completionTokens: response.usage?.output_tokens,
|
|
223
|
+
},
|
|
224
|
+
structured,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// Fall back to regular chat completions API if JSON mode not enabled
|
|
152
228
|
const response = await this.client.chat.completions.create(params);
|
|
153
229
|
const message = response.choices[0]?.message?.content;
|
|
154
230
|
if (!message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterProvider.js","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenRouterProvider.js","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/types/ai.d.ts
CHANGED
|
@@ -42,10 +42,32 @@ export interface GenerateMessageInput<TContext = unknown> {
|
|
|
42
42
|
maxOutputTokens?: number;
|
|
43
43
|
/** Reasoning/thinking configuration */
|
|
44
44
|
reasoning?: ReasoningConfig;
|
|
45
|
+
/** Enable structured JSON output mode */
|
|
46
|
+
jsonMode?: boolean;
|
|
45
47
|
};
|
|
46
48
|
/** Abort signal for cancellation */
|
|
47
49
|
signal?: AbortSignal;
|
|
48
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Structured response from AI containing message and metadata
|
|
53
|
+
*/
|
|
54
|
+
export interface AgentStructuredResponse {
|
|
55
|
+
/** The actual message to send to the user */
|
|
56
|
+
message: string;
|
|
57
|
+
/** Route chosen by the agent (route title or null if no route) */
|
|
58
|
+
route?: string | null;
|
|
59
|
+
/** Current state within the route (state description or null) */
|
|
60
|
+
state?: string | null;
|
|
61
|
+
/** Tool calls the agent wants to execute */
|
|
62
|
+
toolCalls?: Array<{
|
|
63
|
+
/** Name of the tool to call */
|
|
64
|
+
toolName: string;
|
|
65
|
+
/** Arguments to pass to the tool */
|
|
66
|
+
arguments: Record<string, unknown>;
|
|
67
|
+
}>;
|
|
68
|
+
/** Additional reasoning or internal thoughts (optional) */
|
|
69
|
+
reasoning?: string;
|
|
70
|
+
}
|
|
49
71
|
/**
|
|
50
72
|
* Output from AI message generation
|
|
51
73
|
*/
|
|
@@ -63,6 +85,8 @@ export interface GenerateMessageOutput {
|
|
|
63
85
|
/** Additional provider-specific data */
|
|
64
86
|
[key: string]: unknown;
|
|
65
87
|
};
|
|
88
|
+
/** Structured response data (when JSON mode is enabled) */
|
|
89
|
+
structured?: AgentStructuredResponse;
|
|
66
90
|
}
|
|
67
91
|
/**
|
|
68
92
|
* AI provider interface (strategy pattern)
|
package/dist/types/ai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/types/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,QAAQ,GAAG,OAAO;IACtD,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE;QACX,wCAAwC;QACxC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,uCAAuC;QACvC,SAAS,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/types/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,QAAQ,GAAG,OAAO;IACtD,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE;QACX,wCAAwC;QACxC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,uCAAuC;QACvC,SAAS,CAAC,EAAE,eAAe,CAAC;QAC5B,yCAAyC;QACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,oCAAoC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,+BAA+B;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,oCAAoC;QACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC,CAAC;IACH,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE;QACT,iBAAiB;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,sBAAsB;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,wCAAwC;QACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,2DAA2D;IAC3D,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,eAAe,CAAC,QAAQ,GAAG,OAAO,EAChC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC"}
|
package/docs/API_REFERENCE.md
CHANGED
|
@@ -46,17 +46,58 @@ Registers a domain with tools/methods. Returns `this` for chaining.
|
|
|
46
46
|
|
|
47
47
|
##### `respond(input: RespondInput<TContext>): Promise<RespondOutput>`
|
|
48
48
|
|
|
49
|
-
Generates an AI response based on conversation history.
|
|
49
|
+
Generates an AI response based on conversation history with structured output including route, state, and tool call information.
|
|
50
50
|
|
|
51
51
|
```typescript
|
|
52
52
|
interface RespondInput<TContext> {
|
|
53
53
|
history: Event[];
|
|
54
|
+
state?: StateRef;
|
|
54
55
|
contextOverride?: Partial<TContext>;
|
|
56
|
+
signal?: AbortSignal;
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
interface RespondOutput {
|
|
60
|
+
/** The message to send to the user */
|
|
58
61
|
message: string;
|
|
59
|
-
|
|
62
|
+
/** Route chosen by the agent (if applicable) */
|
|
63
|
+
route?: { id: string; title: string };
|
|
64
|
+
/** Current state within the route (if applicable) */
|
|
65
|
+
state?: { id: string; description?: string };
|
|
66
|
+
/** Tool calls requested by the agent */
|
|
67
|
+
toolCalls?: Array<{
|
|
68
|
+
toolName: string;
|
|
69
|
+
arguments: Record<string, unknown>;
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Enhanced Response Information:**
|
|
75
|
+
|
|
76
|
+
- Uses structured JSON output via `responses.parse()` API (OpenAI/OpenRouter) or JSON mode (Gemini)
|
|
77
|
+
- Automatically detects which route the agent chose based on conversation context
|
|
78
|
+
- Provides current state information for tracking conversation flow
|
|
79
|
+
- Returns tool calls for execution in your application
|
|
80
|
+
|
|
81
|
+
**Example:**
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const response = await agent.respond({
|
|
85
|
+
history: conversationHistory,
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Save to database
|
|
89
|
+
await db.agentMessages.create({
|
|
90
|
+
sessionId: session.id,
|
|
91
|
+
role: "agent",
|
|
92
|
+
content: response.message,
|
|
93
|
+
route: response.route?.title,
|
|
94
|
+
state: response.state?.description,
|
|
95
|
+
toolCalls: response.toolCalls || [],
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Check if conversation is complete
|
|
99
|
+
if (response.route?.title === END_ROUTE) {
|
|
100
|
+
await markSessionComplete(session.id);
|
|
60
101
|
}
|
|
61
102
|
```
|
|
62
103
|
|
|
@@ -432,6 +473,34 @@ interface ToolResult<TReturn> {
|
|
|
432
473
|
|
|
433
474
|
---
|
|
434
475
|
|
|
476
|
+
## Types
|
|
477
|
+
|
|
478
|
+
### `AgentStructuredResponse`
|
|
479
|
+
|
|
480
|
+
The structured response format returned by AI providers when JSON mode is enabled.
|
|
481
|
+
|
|
482
|
+
```typescript
|
|
483
|
+
interface AgentStructuredResponse {
|
|
484
|
+
/** The actual message to send to the user */
|
|
485
|
+
message: string;
|
|
486
|
+
/** Route chosen by the agent (route title or null if no route) */
|
|
487
|
+
route?: string | null;
|
|
488
|
+
/** Current state within the route (state description or null) */
|
|
489
|
+
state?: string | null;
|
|
490
|
+
/** Tool calls the agent wants to execute */
|
|
491
|
+
toolCalls?: Array<{
|
|
492
|
+
toolName: string;
|
|
493
|
+
arguments: Record<string, unknown>;
|
|
494
|
+
}>;
|
|
495
|
+
/** Additional reasoning or internal thoughts (optional) */
|
|
496
|
+
reasoning?: string;
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
This type represents the structured JSON output that AI providers return when using the enhanced response format. The `Agent.respond()` method automatically parses this and returns a more convenient format.
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
435
504
|
## Constants
|
|
436
505
|
|
|
437
506
|
### `END_ROUTE`
|
package/docs/CONTRIBUTING.md
CHANGED
|
@@ -324,8 +324,8 @@ const agent = new Agent<any>({
|
|
|
324
324
|
|
|
325
325
|
// Imports - group by: external, internal types, internal code
|
|
326
326
|
import { ExternalLib } from "external-lib";
|
|
327
|
-
import type { MyType } from "
|
|
328
|
-
import { MyClass } from "
|
|
327
|
+
import type { MyType } from "@types/mytype";
|
|
328
|
+
import { MyClass } from "@core/MyClass";
|
|
329
329
|
|
|
330
330
|
// Constants
|
|
331
331
|
const DEFAULT_VALUE = 10;
|
package/package.json
CHANGED
package/src/core/Agent.ts
CHANGED
|
@@ -8,14 +8,14 @@ import type {
|
|
|
8
8
|
Guideline,
|
|
9
9
|
GuidelineMatch,
|
|
10
10
|
Capability,
|
|
11
|
-
} from "
|
|
12
|
-
import type { Event, StateRef } from "
|
|
13
|
-
import type { RouteOptions } from "
|
|
11
|
+
} from "../types/agent";
|
|
12
|
+
import type { Event, StateRef } from "../types/index";
|
|
13
|
+
import type { RouteOptions } from "../types/route";
|
|
14
14
|
|
|
15
|
-
import { Route } from "
|
|
16
|
-
import { DomainRegistry } from "
|
|
17
|
-
import { PromptBuilder } from "
|
|
18
|
-
import { Observation } from "
|
|
15
|
+
import { Route } from "./Route";
|
|
16
|
+
import { DomainRegistry } from "./DomainRegistry";
|
|
17
|
+
import { PromptBuilder } from "./PromptBuilder";
|
|
18
|
+
import { Observation } from "./Observation";
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Main Agent class with generic context support
|
|
@@ -175,7 +175,12 @@ export class Agent<TContext = unknown> {
|
|
|
175
175
|
state?: StateRef;
|
|
176
176
|
contextOverride?: Partial<TContext>;
|
|
177
177
|
signal?: AbortSignal;
|
|
178
|
-
}): Promise<{
|
|
178
|
+
}): Promise<{
|
|
179
|
+
message: string;
|
|
180
|
+
route?: { id: string; title: string } | null;
|
|
181
|
+
state?: { id: string; description?: string } | null;
|
|
182
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
183
|
+
}> {
|
|
179
184
|
const { history, contextOverride, signal } = params;
|
|
180
185
|
|
|
181
186
|
// Merge context
|
|
@@ -247,19 +252,70 @@ export class Agent<TContext = unknown> {
|
|
|
247
252
|
);
|
|
248
253
|
}
|
|
249
254
|
|
|
255
|
+
// Add JSON response schema instructions
|
|
256
|
+
promptBuilder.addJsonResponseSchema();
|
|
257
|
+
|
|
250
258
|
// Build final prompt
|
|
251
259
|
const prompt = promptBuilder.build();
|
|
252
260
|
|
|
253
|
-
// Generate message using AI provider
|
|
261
|
+
// Generate message using AI provider with JSON mode enabled
|
|
254
262
|
const result = await this.options.ai.generateMessage({
|
|
255
263
|
prompt,
|
|
256
264
|
history,
|
|
257
265
|
context: effectiveContext,
|
|
258
266
|
signal,
|
|
267
|
+
parameters: {
|
|
268
|
+
jsonMode: true,
|
|
269
|
+
},
|
|
259
270
|
});
|
|
260
271
|
|
|
272
|
+
// Parse structured response
|
|
273
|
+
let message = result.message;
|
|
274
|
+
let route: { id: string; title: string } | null = null;
|
|
275
|
+
let state: { id: string; description?: string } | null = null;
|
|
276
|
+
let toolCalls:
|
|
277
|
+
| Array<{ toolName: string; arguments: Record<string, unknown> }>
|
|
278
|
+
| undefined;
|
|
279
|
+
|
|
280
|
+
if (result.structured) {
|
|
281
|
+
// Extract data from structured response
|
|
282
|
+
message = result.structured.message || message;
|
|
283
|
+
|
|
284
|
+
// Find route by title
|
|
285
|
+
if (result.structured.route) {
|
|
286
|
+
const foundRoute = this.routes.find(
|
|
287
|
+
(r) => r.title === result.structured?.route
|
|
288
|
+
);
|
|
289
|
+
if (foundRoute) {
|
|
290
|
+
route = {
|
|
291
|
+
id: foundRoute.id,
|
|
292
|
+
title: foundRoute.title,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Create state reference if provided
|
|
298
|
+
if (result.structured.state) {
|
|
299
|
+
state = {
|
|
300
|
+
id: "dynamic_state",
|
|
301
|
+
description: result.structured.state,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Extract tool calls
|
|
306
|
+
if (
|
|
307
|
+
result.structured.toolCalls &&
|
|
308
|
+
result.structured.toolCalls.length > 0
|
|
309
|
+
) {
|
|
310
|
+
toolCalls = result.structured.toolCalls;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
261
314
|
return {
|
|
262
|
-
message
|
|
315
|
+
message,
|
|
316
|
+
route: route || undefined,
|
|
317
|
+
state: state || undefined,
|
|
318
|
+
toolCalls,
|
|
263
319
|
};
|
|
264
320
|
}
|
|
265
321
|
|
package/src/core/Events.ts
CHANGED
|
@@ -8,8 +8,8 @@ import type {
|
|
|
8
8
|
MessageEventData,
|
|
9
9
|
ToolEventData,
|
|
10
10
|
ToolCall,
|
|
11
|
-
} from "
|
|
12
|
-
import { EventKind, EventSource } from "
|
|
11
|
+
} from "../types/history";
|
|
12
|
+
import { EventKind, EventSource } from "../types/history";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Adapt an event for inclusion in prompts
|