@falai/agent 0.5.1 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +5 -3
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/State.js +2 -1
- package/dist/cjs/core/State.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +15 -0
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +89 -4
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +7 -0
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +13 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +7 -0
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +13 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/types/route.d.ts +2 -0
- package/dist/cjs/types/route.d.ts.map +1 -1
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +5 -3
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/State.js +2 -1
- package/dist/core/State.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +15 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +90 -5
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +7 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +13 -1
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +7 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +13 -1
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/types/route.d.ts +2 -0
- package/dist/types/route.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +83 -13
- package/docs/ARCHITECTURE.md +48 -1
- package/docs/PERSISTENCE.md +18 -6
- package/examples/custom-database-persistence.ts +533 -0
- package/examples/prisma-persistence.ts +13 -2
- package/package.json +1 -1
- package/src/core/ResponseEngine.ts +6 -3
- package/src/core/State.ts +1 -1
- package/src/providers/GeminiProvider.ts +114 -5
- package/src/providers/OpenAIProvider.ts +17 -1
- package/src/providers/OpenRouterProvider.ts +19 -1
- package/src/types/route.ts +2 -0
- package/dist/cjs/utils/schema.d.ts +0 -17
- package/dist/cjs/utils/schema.d.ts.map +0 -1
- package/dist/cjs/utils/schema.js +0 -32
- package/dist/cjs/utils/schema.js.map +0 -1
- package/dist/utils/schema.d.ts +0 -17
- package/dist/utils/schema.d.ts.map +0 -1
- package/dist/utils/schema.js +0 -27
- package/dist/utils/schema.js.map +0 -1
- package/src/utils/schema.ts +0 -32
|
@@ -6,8 +6,9 @@ import type {
|
|
|
6
6
|
GoogleGenAI as GoogleGenAIType,
|
|
7
7
|
GenerateContentConfig,
|
|
8
8
|
GenerateContentResponse,
|
|
9
|
+
Schema,
|
|
9
10
|
} from "@google/genai";
|
|
10
|
-
import { GoogleGenAI } from "@google/genai";
|
|
11
|
+
import { GoogleGenAI, Type } from "@google/genai";
|
|
11
12
|
|
|
12
13
|
import type {
|
|
13
14
|
AiProvider,
|
|
@@ -16,6 +17,7 @@ import type {
|
|
|
16
17
|
GenerateMessageStreamChunk,
|
|
17
18
|
AgentStructuredResponse,
|
|
18
19
|
} from "../types/ai";
|
|
20
|
+
import type { StructuredSchema } from "../types/schema";
|
|
19
21
|
import { withTimeoutAndRetry } from "../utils/retry";
|
|
20
22
|
|
|
21
23
|
const DEFAULT_RETRY_CONFIG = {
|
|
@@ -147,6 +149,109 @@ export class GeminiProvider implements AiProvider {
|
|
|
147
149
|
};
|
|
148
150
|
}
|
|
149
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Adapt common schema format to Gemini's specific requirements.
|
|
154
|
+
* Gemini has strict validation:
|
|
155
|
+
* - OBJECT types MUST have non-empty properties
|
|
156
|
+
* - Empty objects cause 400 Bad Request errors
|
|
157
|
+
* - Uses Gemini's Schema type with Type enums
|
|
158
|
+
*
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
private adaptSchemaForGemini(schema: StructuredSchema): Schema {
|
|
162
|
+
const geminiSchema: Schema = {};
|
|
163
|
+
|
|
164
|
+
// Convert type
|
|
165
|
+
if (schema.type) {
|
|
166
|
+
if (Array.isArray(schema.type)) {
|
|
167
|
+
// For now, take the first type (Gemini doesn't support union types the same way)
|
|
168
|
+
geminiSchema.type = this.mapToGeminiType(schema.type[0]);
|
|
169
|
+
} else {
|
|
170
|
+
geminiSchema.type = this.mapToGeminiType(schema.type);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Handle description
|
|
175
|
+
if (schema.description) {
|
|
176
|
+
geminiSchema.description = schema.description;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Handle nullable
|
|
180
|
+
if (schema.nullable !== undefined) {
|
|
181
|
+
geminiSchema.nullable = schema.nullable;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Handle enum
|
|
185
|
+
if (schema.enum) {
|
|
186
|
+
geminiSchema.enum = schema.enum as string[];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Handle object properties - Gemini requires non-empty properties for OBJECT type
|
|
190
|
+
if (
|
|
191
|
+
geminiSchema.type === Type.OBJECT ||
|
|
192
|
+
schema.type === "object" ||
|
|
193
|
+
(Array.isArray(schema.type) && schema.type.includes("object"))
|
|
194
|
+
) {
|
|
195
|
+
if (!schema.properties || Object.keys(schema.properties).length === 0) {
|
|
196
|
+
console.warn(
|
|
197
|
+
"[GeminiProvider] Gemini requires OBJECT types to have non-empty properties. Converting empty object to STRING."
|
|
198
|
+
);
|
|
199
|
+
geminiSchema.type = Type.STRING;
|
|
200
|
+
return geminiSchema;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Recursively convert nested properties
|
|
204
|
+
geminiSchema.properties = {};
|
|
205
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
206
|
+
geminiSchema.properties[key] = this.adaptSchemaForGemini(value);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Handle required fields
|
|
210
|
+
if (schema.required && schema.required.length > 0) {
|
|
211
|
+
geminiSchema.required = schema.required;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Handle array items
|
|
216
|
+
if (
|
|
217
|
+
geminiSchema.type === Type.ARRAY ||
|
|
218
|
+
schema.type === "array" ||
|
|
219
|
+
(Array.isArray(schema.type) && schema.type.includes("array"))
|
|
220
|
+
) {
|
|
221
|
+
if (schema.items) {
|
|
222
|
+
geminiSchema.items = this.adaptSchemaForGemini(schema.items);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return geminiSchema;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Map common JSON Schema type strings to Gemini's Type enum
|
|
231
|
+
* @private
|
|
232
|
+
*/
|
|
233
|
+
private mapToGeminiType(type: string): Type {
|
|
234
|
+
switch (type.toLowerCase()) {
|
|
235
|
+
case "string":
|
|
236
|
+
return Type.STRING;
|
|
237
|
+
case "number":
|
|
238
|
+
return Type.NUMBER;
|
|
239
|
+
case "integer":
|
|
240
|
+
return Type.INTEGER;
|
|
241
|
+
case "boolean":
|
|
242
|
+
return Type.BOOLEAN;
|
|
243
|
+
case "array":
|
|
244
|
+
return Type.ARRAY;
|
|
245
|
+
case "object":
|
|
246
|
+
return Type.OBJECT;
|
|
247
|
+
default:
|
|
248
|
+
console.warn(
|
|
249
|
+
`[GeminiProvider] Unknown type "${type}", defaulting to STRING`
|
|
250
|
+
);
|
|
251
|
+
return Type.STRING;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
150
255
|
async generateMessage<
|
|
151
256
|
TContext = unknown,
|
|
152
257
|
TStructured = AgentStructuredResponse
|
|
@@ -239,9 +344,10 @@ export class GeminiProvider implements AiProvider {
|
|
|
239
344
|
const configOverride: Partial<GenerateContentConfig> = { ...this.config };
|
|
240
345
|
if (input.parameters?.jsonSchema) {
|
|
241
346
|
configOverride.responseMimeType = "application/json";
|
|
242
|
-
//
|
|
243
|
-
|
|
244
|
-
|
|
347
|
+
// Adapt common schema format to Gemini's specific requirements
|
|
348
|
+
configOverride.responseSchema = this.adaptSchemaForGemini(
|
|
349
|
+
input.parameters.jsonSchema
|
|
350
|
+
);
|
|
245
351
|
}
|
|
246
352
|
|
|
247
353
|
const response: GenerateContentResponse =
|
|
@@ -360,7 +466,10 @@ export class GeminiProvider implements AiProvider {
|
|
|
360
466
|
const configOverride: Partial<GenerateContentConfig> = { ...this.config };
|
|
361
467
|
if (input.parameters?.jsonSchema) {
|
|
362
468
|
configOverride.responseMimeType = "application/json";
|
|
363
|
-
|
|
469
|
+
// Adapt common schema format to Gemini's specific requirements
|
|
470
|
+
configOverride.responseSchema = this.adaptSchemaForGemini(
|
|
471
|
+
input.parameters.jsonSchema
|
|
472
|
+
);
|
|
364
473
|
}
|
|
365
474
|
|
|
366
475
|
const stream = await this.genAI.models.generateContentStream({
|
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
GenerateMessageStreamChunk,
|
|
13
13
|
AgentStructuredResponse,
|
|
14
14
|
} from "../types/ai";
|
|
15
|
+
import type { StructuredSchema } from "../types/schema";
|
|
15
16
|
import { withTimeoutAndRetry } from "../utils/retry";
|
|
16
17
|
|
|
17
18
|
const DEFAULT_RETRY_CONFIG = {
|
|
@@ -159,6 +160,20 @@ export class OpenAIProvider implements AiProvider {
|
|
|
159
160
|
};
|
|
160
161
|
}
|
|
161
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Adapt common schema format to OpenAI's format.
|
|
165
|
+
* OpenAI uses standard JSON Schema, so this is mostly a passthrough.
|
|
166
|
+
*
|
|
167
|
+
* @private
|
|
168
|
+
*/
|
|
169
|
+
private adaptSchemaForOpenAI(
|
|
170
|
+
schema: StructuredSchema
|
|
171
|
+
): Record<string, unknown> {
|
|
172
|
+
// OpenAI's responses.parse API uses standard JSON Schema
|
|
173
|
+
// Our StructuredSchema is already JSON Schema compatible
|
|
174
|
+
return schema as Record<string, unknown>;
|
|
175
|
+
}
|
|
176
|
+
|
|
162
177
|
async generateMessage<
|
|
163
178
|
TContext = unknown,
|
|
164
179
|
TStructured = AgentStructuredResponse
|
|
@@ -279,7 +294,8 @@ export class OpenAIProvider implements AiProvider {
|
|
|
279
294
|
format: {
|
|
280
295
|
type: "json_schema",
|
|
281
296
|
name: input.parameters?.schemaName || "structured_output",
|
|
282
|
-
schema
|
|
297
|
+
// Adapt common schema format to OpenAI's format
|
|
298
|
+
schema: this.adaptSchemaForOpenAI(input.parameters.jsonSchema),
|
|
283
299
|
},
|
|
284
300
|
},
|
|
285
301
|
});
|
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
GenerateMessageOutput,
|
|
14
14
|
GenerateMessageStreamChunk,
|
|
15
15
|
} from "../types/ai";
|
|
16
|
+
import type { StructuredSchema } from "../types/schema";
|
|
16
17
|
import { withTimeoutAndRetry } from "../utils/retry";
|
|
17
18
|
|
|
18
19
|
const DEFAULT_RETRY_CONFIG = {
|
|
@@ -169,6 +170,20 @@ export class OpenRouterProvider implements AiProvider {
|
|
|
169
170
|
};
|
|
170
171
|
}
|
|
171
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Adapt common schema format to OpenRouter's format.
|
|
175
|
+
* OpenRouter is OpenAI-compatible and uses standard JSON Schema.
|
|
176
|
+
*
|
|
177
|
+
* @private
|
|
178
|
+
*/
|
|
179
|
+
private adaptSchemaForOpenRouter(
|
|
180
|
+
schema: StructuredSchema
|
|
181
|
+
): Record<string, unknown> {
|
|
182
|
+
// OpenRouter is OpenAI-compatible and uses standard JSON Schema
|
|
183
|
+
// Our StructuredSchema is already JSON Schema compatible
|
|
184
|
+
return schema as Record<string, unknown>;
|
|
185
|
+
}
|
|
186
|
+
|
|
172
187
|
async generateMessage<
|
|
173
188
|
TContext = unknown,
|
|
174
189
|
TStructured = AgentStructuredResponse
|
|
@@ -286,7 +301,10 @@ export class OpenRouterProvider implements AiProvider {
|
|
|
286
301
|
format: {
|
|
287
302
|
type: "json_schema",
|
|
288
303
|
name: input.parameters?.schemaName || "structured_output",
|
|
289
|
-
schema
|
|
304
|
+
// Adapt common schema format to OpenRouter's format
|
|
305
|
+
schema: this.adaptSchemaForOpenRouter(
|
|
306
|
+
input.parameters.jsonSchema
|
|
307
|
+
),
|
|
290
308
|
},
|
|
291
309
|
},
|
|
292
310
|
});
|
package/src/types/route.ts
CHANGED
|
@@ -70,6 +70,8 @@ export interface RouteOptions<TExtracted = unknown> {
|
|
|
70
70
|
* Specification for a state transition
|
|
71
71
|
*/
|
|
72
72
|
export interface TransitionSpec<TContext = unknown, TExtracted = unknown> {
|
|
73
|
+
/** Custom ID for this state (optional - will generate deterministic ID if not provided) */
|
|
74
|
+
id?: string;
|
|
73
75
|
/** Transition to a chat state with this description */
|
|
74
76
|
chatState?: string;
|
|
75
77
|
/** Transition to execute a tool */
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { StructuredSchema } from "../types/schema";
|
|
2
|
-
/**
|
|
3
|
-
* Convert our StructuredSchema to the OpenAI/OpenRouter JSON schema format
|
|
4
|
-
* (they already accept standard JSON Schema for responses.parse)
|
|
5
|
-
*/
|
|
6
|
-
export declare function convertToOpenAIJsonSchema(schema: StructuredSchema): object;
|
|
7
|
-
/**
|
|
8
|
-
* Convert our StructuredSchema to Gemini responseSchema (Type mapping)
|
|
9
|
-
* The @google/genai expects a slightly different shape
|
|
10
|
-
*/
|
|
11
|
-
export declare function convertToGeminiSchema(schema: StructuredSchema): object;
|
|
12
|
-
/**
|
|
13
|
-
* Convert our StructuredSchema into Anthropic system prompt constraints.
|
|
14
|
-
* Since Anthropic lacks native schema parsing, we embed a concise instruction.
|
|
15
|
-
*/
|
|
16
|
-
export declare function convertToAnthropicConstraint(schema: StructuredSchema): string;
|
|
17
|
-
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAI1E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAItE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAK7E"}
|
package/dist/cjs/utils/schema.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertToOpenAIJsonSchema = convertToOpenAIJsonSchema;
|
|
4
|
-
exports.convertToGeminiSchema = convertToGeminiSchema;
|
|
5
|
-
exports.convertToAnthropicConstraint = convertToAnthropicConstraint;
|
|
6
|
-
/**
|
|
7
|
-
* Convert our StructuredSchema to the OpenAI/OpenRouter JSON schema format
|
|
8
|
-
* (they already accept standard JSON Schema for responses.parse)
|
|
9
|
-
*/
|
|
10
|
-
function convertToOpenAIJsonSchema(schema) {
|
|
11
|
-
// For now our schema aligns well with JSON Schema draft-like structure
|
|
12
|
-
// Return as-is; callers should ensure correctness
|
|
13
|
-
return schema;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Convert our StructuredSchema to Gemini responseSchema (Type mapping)
|
|
17
|
-
* The @google/genai expects a slightly different shape
|
|
18
|
-
*/
|
|
19
|
-
function convertToGeminiSchema(schema) {
|
|
20
|
-
// Basic passthrough. If needed, a deeper mapping can be added later.
|
|
21
|
-
// Gemini supports a similar structure (type, properties, items, enum, etc.)
|
|
22
|
-
return schema;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Convert our StructuredSchema into Anthropic system prompt constraints.
|
|
26
|
-
* Since Anthropic lacks native schema parsing, we embed a concise instruction.
|
|
27
|
-
*/
|
|
28
|
-
function convertToAnthropicConstraint(schema) {
|
|
29
|
-
// Keep it concise to avoid context bloat
|
|
30
|
-
return `You must respond with valid JSON that matches this schema: ${JSON.stringify(schema)}`;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":";;AAMA,8DAIC;AAMD,sDAIC;AAMD,oEAKC;AA7BD;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,MAAwB;IAChE,uEAAuE;IACvE,kDAAkD;IAClD,OAAO,MAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,MAAwB;IAC5D,qEAAqE;IACrE,4EAA4E;IAC5E,OAAO,MAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAgB,4BAA4B,CAAC,MAAwB;IACnE,yCAAyC;IACzC,OAAO,8DAA8D,IAAI,CAAC,SAAS,CACjF,MAAM,CACP,EAAE,CAAC;AACN,CAAC"}
|
package/dist/utils/schema.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { StructuredSchema } from "../types/schema";
|
|
2
|
-
/**
|
|
3
|
-
* Convert our StructuredSchema to the OpenAI/OpenRouter JSON schema format
|
|
4
|
-
* (they already accept standard JSON Schema for responses.parse)
|
|
5
|
-
*/
|
|
6
|
-
export declare function convertToOpenAIJsonSchema(schema: StructuredSchema): object;
|
|
7
|
-
/**
|
|
8
|
-
* Convert our StructuredSchema to Gemini responseSchema (Type mapping)
|
|
9
|
-
* The @google/genai expects a slightly different shape
|
|
10
|
-
*/
|
|
11
|
-
export declare function convertToGeminiSchema(schema: StructuredSchema): object;
|
|
12
|
-
/**
|
|
13
|
-
* Convert our StructuredSchema into Anthropic system prompt constraints.
|
|
14
|
-
* Since Anthropic lacks native schema parsing, we embed a concise instruction.
|
|
15
|
-
*/
|
|
16
|
-
export declare function convertToAnthropicConstraint(schema: StructuredSchema): string;
|
|
17
|
-
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAI1E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAItE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAK7E"}
|
package/dist/utils/schema.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert our StructuredSchema to the OpenAI/OpenRouter JSON schema format
|
|
3
|
-
* (they already accept standard JSON Schema for responses.parse)
|
|
4
|
-
*/
|
|
5
|
-
export function convertToOpenAIJsonSchema(schema) {
|
|
6
|
-
// For now our schema aligns well with JSON Schema draft-like structure
|
|
7
|
-
// Return as-is; callers should ensure correctness
|
|
8
|
-
return schema;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Convert our StructuredSchema to Gemini responseSchema (Type mapping)
|
|
12
|
-
* The @google/genai expects a slightly different shape
|
|
13
|
-
*/
|
|
14
|
-
export function convertToGeminiSchema(schema) {
|
|
15
|
-
// Basic passthrough. If needed, a deeper mapping can be added later.
|
|
16
|
-
// Gemini supports a similar structure (type, properties, items, enum, etc.)
|
|
17
|
-
return schema;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Convert our StructuredSchema into Anthropic system prompt constraints.
|
|
21
|
-
* Since Anthropic lacks native schema parsing, we embed a concise instruction.
|
|
22
|
-
*/
|
|
23
|
-
export function convertToAnthropicConstraint(schema) {
|
|
24
|
-
// Keep it concise to avoid context bloat
|
|
25
|
-
return `You must respond with valid JSON that matches this schema: ${JSON.stringify(schema)}`;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=schema.js.map
|
package/dist/utils/schema.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAwB;IAChE,uEAAuE;IACvE,kDAAkD;IAClD,OAAO,MAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,qEAAqE;IACrE,4EAA4E;IAC5E,OAAO,MAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAwB;IACnE,yCAAyC;IACzC,OAAO,8DAA8D,IAAI,CAAC,SAAS,CACjF,MAAM,CACP,EAAE,CAAC;AACN,CAAC"}
|
package/src/utils/schema.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { StructuredSchema } from "../types/schema";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Convert our StructuredSchema to the OpenAI/OpenRouter JSON schema format
|
|
5
|
-
* (they already accept standard JSON Schema for responses.parse)
|
|
6
|
-
*/
|
|
7
|
-
export function convertToOpenAIJsonSchema(schema: StructuredSchema): object {
|
|
8
|
-
// For now our schema aligns well with JSON Schema draft-like structure
|
|
9
|
-
// Return as-is; callers should ensure correctness
|
|
10
|
-
return schema as object;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Convert our StructuredSchema to Gemini responseSchema (Type mapping)
|
|
15
|
-
* The @google/genai expects a slightly different shape
|
|
16
|
-
*/
|
|
17
|
-
export function convertToGeminiSchema(schema: StructuredSchema): object {
|
|
18
|
-
// Basic passthrough. If needed, a deeper mapping can be added later.
|
|
19
|
-
// Gemini supports a similar structure (type, properties, items, enum, etc.)
|
|
20
|
-
return schema as object;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Convert our StructuredSchema into Anthropic system prompt constraints.
|
|
25
|
-
* Since Anthropic lacks native schema parsing, we embed a concise instruction.
|
|
26
|
-
*/
|
|
27
|
-
export function convertToAnthropicConstraint(schema: StructuredSchema): string {
|
|
28
|
-
// Keep it concise to avoid context bloat
|
|
29
|
-
return `You must respond with valid JSON that matches this schema: ${JSON.stringify(
|
|
30
|
-
schema
|
|
31
|
-
)}`;
|
|
32
|
-
}
|