@mcpmesh/sdk 0.8.0 → 0.9.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/__tests__/claude-handler.test.js +17 -71
  2. package/dist/__tests__/claude-handler.test.js.map +1 -1
  3. package/dist/__tests__/llm-provider.test.js +3 -3
  4. package/dist/__tests__/llm-provider.test.js.map +1 -1
  5. package/dist/__tests__/provider-handler-registry.test.js +6 -6
  6. package/dist/__tests__/provider-handler-registry.test.js.map +1 -1
  7. package/dist/index.d.ts +3 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/llm-agent.d.ts +37 -2
  12. package/dist/llm-agent.d.ts.map +1 -1
  13. package/dist/llm-agent.js +206 -14
  14. package/dist/llm-agent.js.map +1 -1
  15. package/dist/llm-provider.d.ts +7 -0
  16. package/dist/llm-provider.d.ts.map +1 -1
  17. package/dist/llm-provider.js +42 -15
  18. package/dist/llm-provider.js.map +1 -1
  19. package/dist/llm.d.ts.map +1 -1
  20. package/dist/llm.js +21 -6
  21. package/dist/llm.js.map +1 -1
  22. package/dist/provider-handlers/claude-handler.d.ts +16 -31
  23. package/dist/provider-handlers/claude-handler.d.ts.map +1 -1
  24. package/dist/provider-handlers/claude-handler.js +34 -115
  25. package/dist/provider-handlers/claude-handler.js.map +1 -1
  26. package/dist/provider-handlers/gemini-handler.d.ts +12 -9
  27. package/dist/provider-handlers/gemini-handler.d.ts.map +1 -1
  28. package/dist/provider-handlers/gemini-handler.js +68 -17
  29. package/dist/provider-handlers/gemini-handler.js.map +1 -1
  30. package/dist/provider-handlers/index.d.ts +1 -1
  31. package/dist/provider-handlers/index.d.ts.map +1 -1
  32. package/dist/provider-handlers/index.js +1 -1
  33. package/dist/provider-handlers/index.js.map +1 -1
  34. package/dist/provider-handlers/openai-handler.d.ts +7 -10
  35. package/dist/provider-handlers/openai-handler.d.ts.map +1 -1
  36. package/dist/provider-handlers/openai-handler.js +61 -19
  37. package/dist/provider-handlers/openai-handler.js.map +1 -1
  38. package/dist/provider-handlers/provider-handler.d.ts +11 -0
  39. package/dist/provider-handlers/provider-handler.d.ts.map +1 -1
  40. package/dist/provider-handlers/provider-handler.js +106 -2
  41. package/dist/provider-handlers/provider-handler.js.map +1 -1
  42. package/dist/types.d.ts +2 -2
  43. package/dist/types.d.ts.map +1 -1
  44. package/package.json +2 -2
package/dist/llm.js CHANGED
@@ -230,18 +230,33 @@ export function buildLlmAgentSpecs() {
230
230
  const registry = LlmToolRegistry.getInstance();
231
231
  const specs = [];
232
232
  for (const [, config] of registry.getAllConfigs()) {
233
- // Serialize provider to JSON
234
- const providerJson = typeof config.provider === "string"
235
- ? JSON.stringify({ direct: config.provider })
236
- : JSON.stringify(config.provider);
233
+ // Apply MESH_LLM_* env var overrides (matches Python SDK behavior)
234
+ // ENV > config > defaults
235
+ // MESH_LLM_PROVIDER: Override provider for direct mode (not mesh delegation)
236
+ let resolvedProvider;
237
+ if (typeof config.provider === "string") {
238
+ resolvedProvider = process.env.MESH_LLM_PROVIDER || config.provider;
239
+ }
240
+ else {
241
+ resolvedProvider = config.provider; // mesh delegation - no override
242
+ }
243
+ const providerJson = typeof resolvedProvider === "string"
244
+ ? JSON.stringify({ direct: resolvedProvider })
245
+ : JSON.stringify(resolvedProvider);
237
246
  // Serialize filter to JSON if present
238
247
  const filterJson = config.filter ? JSON.stringify(config.filter) : undefined;
248
+ // MESH_LLM_FILTER_MODE: Override filter mode
249
+ const resolvedFilterMode = process.env.MESH_LLM_FILTER_MODE || config.filterMode;
250
+ // MESH_LLM_MAX_ITERATIONS: Override max iterations
251
+ const resolvedMaxIterations = process.env.MESH_LLM_MAX_ITERATIONS
252
+ ? parseInt(process.env.MESH_LLM_MAX_ITERATIONS, 10)
253
+ : config.maxIterations;
239
254
  specs.push({
240
255
  functionId: config.functionId,
241
256
  provider: providerJson,
242
257
  filter: filterJson,
243
- filterMode: config.filterMode,
244
- maxIterations: config.maxIterations,
258
+ filterMode: resolvedFilterMode,
259
+ maxIterations: resolvedMaxIterations,
245
260
  });
246
261
  }
247
262
  return specs;
package/dist/llm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
@@ -4,20 +4,19 @@
4
4
  * Optimized for Claude API (Claude 3.x, Sonnet, Opus, Haiku)
5
5
  * using Anthropic's best practices for tool calling and JSON responses.
6
6
  *
7
- * Supports three output modes for performance/reliability tradeoffs:
8
- * - strict: Use response_format for guaranteed schema compliance (slowest, 100% reliable)
9
- * - hint: Use prompt-based JSON instructions (medium speed, ~95% reliable)
7
+ * Supports two output modes (TEXT + HINT only):
8
+ * - hint: Use prompt-based JSON instructions with DECISION GUIDE (~95% reliable)
10
9
  * - text: Plain text output for str return types (fastest)
11
10
  *
11
+ * Native response_format (strict mode) is NOT used due to cross-runtime
12
+ * incompatibilities when tools are present, and grammar compilation overhead.
13
+ *
12
14
  * Features:
13
15
  * - Anti-XML tool calling instructions
14
- * - Output mode optimization based on return type
16
+ * - DECISION GUIDE for tool vs. direct JSON response decisions
15
17
  *
16
18
  * Note: Prompt caching is not yet implemented for AI SDK v6.
17
19
  * TODO: Re-enable via experimental_providerOptions when AI SDK v6 supports it.
18
- *
19
- * Based on Python's ClaudeHandler:
20
- * src/runtime/python/_mcp_mesh/engine/provider_handlers/claude_handler.py
21
20
  */
22
21
  import type { LlmMessage } from "../types.js";
23
22
  import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type OutputSchema, type PreparedRequest, type OutputMode } from "./provider-handler.js";
@@ -26,18 +25,18 @@ import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type Ou
26
25
  *
27
26
  * Claude Characteristics:
28
27
  * - Excellent at following detailed instructions
29
- * - Native structured output via response_format (requires strict schema)
30
28
  * - Native tool calling (via Anthropic messages API)
31
29
  * - Performs best with anti-XML tool calling instructions
32
30
  *
33
- * Output Modes:
34
- * - strict: response_format with JSON schema (slowest, guaranteed valid JSON)
35
- * - hint: JSON schema in prompt (medium speed, usually valid JSON)
31
+ * Output Modes (TEXT + HINT only):
32
+ * - hint: JSON schema in prompt with DECISION GUIDE (~95% reliable)
36
33
  * - text: Plain text output for str return types (fastest)
37
34
  *
35
+ * Native response_format (strict mode) is not used. HINT mode with
36
+ * detailed prompt instructions provides sufficient reliability (~95%)
37
+ * without cross-runtime incompatibilities and grammar compilation overhead.
38
+ *
38
39
  * Best Practices (from Anthropic docs):
39
- * - Use response_format for guaranteed JSON schema compliance
40
- * - Schema must have additionalProperties: false on all objects
41
40
  * - Add anti-XML instructions to prevent <invoke> style tool calls
42
41
  * - Use one tool call at a time for better reliability
43
42
  */
@@ -46,9 +45,8 @@ export declare class ClaudeHandler implements ProviderHandler {
46
45
  /**
47
46
  * Prepare request parameters for Claude API with output mode support.
48
47
  *
49
- * Output Mode Strategy:
50
- * - strict: Use response_format for guaranteed JSON schema compliance (slowest)
51
- * - hint: No response_format, rely on prompt instructions (medium speed)
48
+ * Output Mode Strategy (TEXT + HINT only):
49
+ * - hint: No response_format, rely on prompt instructions (~95% reliable)
52
50
  * - text: No response_format, plain text output (fastest)
53
51
  *
54
52
  * Message Format (Anthropic-specific):
@@ -66,9 +64,8 @@ export declare class ClaudeHandler implements ProviderHandler {
66
64
  /**
67
65
  * Format system prompt for Claude with output mode support.
68
66
  *
69
- * Output Mode Strategy:
70
- * - strict: Minimal JSON instructions (response_format handles schema)
71
- * - hint: Add detailed JSON schema instructions in prompt
67
+ * Output Mode Strategy (TEXT + HINT only):
68
+ * - hint: Add detailed JSON schema instructions with DECISION GUIDE in prompt
72
69
  * - text: No JSON instructions (plain text output)
73
70
  */
74
71
  formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
@@ -91,17 +88,5 @@ export declare class ClaudeHandler implements ProviderHandler {
91
88
  * - If schema exists, always use "hint" mode (prompt-based)
92
89
  */
93
90
  determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
94
- /**
95
- * Append JSON schema instructions to the system prompt for "hint" mode.
96
- *
97
- * This enables fast, prompt-based structured output instead of slow generateObject().
98
- * Claude is excellent at following detailed instructions, so this approach is
99
- * ~95% reliable while being much faster than native structured output.
100
- *
101
- * @param messages - Messages with system prompt
102
- * @param outputSchema - Schema to include in instructions
103
- * @returns Messages with updated system prompt
104
- */
105
- private appendJsonInstructionsToSystemPrompt;
106
91
  }
107
92
  //# sourceMappingURL=claude-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/claude-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAS/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,eAAe;IAE9B;;;;;;;;;;;;OAYG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IA0DlB;;;;;;;OAOG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IAwET;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAWrC;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;IAoBb;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oCAAoC;CA+D7C"}
1
+ {"version":3,"file":"claude-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/claude-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAS/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,eAAe;IAE9B;;;;;;;;;;;OAWG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IAuClB;;;;;;OAMG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IAyET;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAWrC;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAgBd"}
@@ -4,23 +4,22 @@
4
4
  * Optimized for Claude API (Claude 3.x, Sonnet, Opus, Haiku)
5
5
  * using Anthropic's best practices for tool calling and JSON responses.
6
6
  *
7
- * Supports three output modes for performance/reliability tradeoffs:
8
- * - strict: Use response_format for guaranteed schema compliance (slowest, 100% reliable)
9
- * - hint: Use prompt-based JSON instructions (medium speed, ~95% reliable)
7
+ * Supports two output modes (TEXT + HINT only):
8
+ * - hint: Use prompt-based JSON instructions with DECISION GUIDE (~95% reliable)
10
9
  * - text: Plain text output for str return types (fastest)
11
10
  *
11
+ * Native response_format (strict mode) is NOT used due to cross-runtime
12
+ * incompatibilities when tools are present, and grammar compilation overhead.
13
+ *
12
14
  * Features:
13
15
  * - Anti-XML tool calling instructions
14
- * - Output mode optimization based on return type
16
+ * - DECISION GUIDE for tool vs. direct JSON response decisions
15
17
  *
16
18
  * Note: Prompt caching is not yet implemented for AI SDK v6.
17
19
  * TODO: Re-enable via experimental_providerOptions when AI SDK v6 supports it.
18
- *
19
- * Based on Python's ClaudeHandler:
20
- * src/runtime/python/_mcp_mesh/engine/provider_handlers/claude_handler.py
21
20
  */
22
21
  import { createDebug } from "../debug.js";
23
- import { convertMessagesToVercelFormat, makeSchemaStrict, BASE_TOOL_INSTRUCTIONS, CLAUDE_ANTI_XML_INSTRUCTION, } from "./provider-handler.js";
22
+ import { convertMessagesToVercelFormat, BASE_TOOL_INSTRUCTIONS, CLAUDE_ANTI_XML_INSTRUCTION, } from "./provider-handler.js";
24
23
  import { ProviderHandlerRegistry } from "./provider-handler-registry.js";
25
24
  const debug = createDebug("claude-handler");
26
25
  // ============================================================================
@@ -31,18 +30,18 @@ const debug = createDebug("claude-handler");
31
30
  *
32
31
  * Claude Characteristics:
33
32
  * - Excellent at following detailed instructions
34
- * - Native structured output via response_format (requires strict schema)
35
33
  * - Native tool calling (via Anthropic messages API)
36
34
  * - Performs best with anti-XML tool calling instructions
37
35
  *
38
- * Output Modes:
39
- * - strict: response_format with JSON schema (slowest, guaranteed valid JSON)
40
- * - hint: JSON schema in prompt (medium speed, usually valid JSON)
36
+ * Output Modes (TEXT + HINT only):
37
+ * - hint: JSON schema in prompt with DECISION GUIDE (~95% reliable)
41
38
  * - text: Plain text output for str return types (fastest)
42
39
  *
40
+ * Native response_format (strict mode) is not used. HINT mode with
41
+ * detailed prompt instructions provides sufficient reliability (~95%)
42
+ * without cross-runtime incompatibilities and grammar compilation overhead.
43
+ *
43
44
  * Best Practices (from Anthropic docs):
44
- * - Use response_format for guaranteed JSON schema compliance
45
- * - Schema must have additionalProperties: false on all objects
46
45
  * - Add anti-XML instructions to prevent <invoke> style tool calls
47
46
  * - Use one tool call at a time for better reliability
48
47
  */
@@ -51,9 +50,8 @@ export class ClaudeHandler {
51
50
  /**
52
51
  * Prepare request parameters for Claude API with output mode support.
53
52
  *
54
- * Output Mode Strategy:
55
- * - strict: Use response_format for guaranteed JSON schema compliance (slowest)
56
- * - hint: No response_format, rely on prompt instructions (medium speed)
53
+ * Output Mode Strategy (TEXT + HINT only):
54
+ * - hint: No response_format, rely on prompt instructions (~95% reliable)
57
55
  * - text: No response_format, plain text output (fastest)
58
56
  *
59
57
  * Message Format (Anthropic-specific):
@@ -66,11 +64,11 @@ export class ClaudeHandler {
66
64
  const determinedMode = this.determineOutputMode(outputSchema, outputMode);
67
65
  // Convert messages to Vercel AI SDK format (shared utility)
68
66
  let convertedMessages = convertMessagesToVercelFormat(messages);
69
- // For "hint" mode, append JSON instructions to the system prompt
70
- // This is the fast, prompt-based approach instead of slow generateObject()
67
+ // Note: In hint mode, JSON instructions are added by formatSystemPrompt() which
68
+ // is called by llm-provider.ts before prepareRequest(). We don't duplicate here.
69
+ // The formatSystemPrompt() method handles the DECISION GUIDE when tools are present.
71
70
  if (determinedMode === "hint" && outputSchema) {
72
- convertedMessages = this.appendJsonInstructionsToSystemPrompt(convertedMessages, outputSchema);
73
- debug(`Using hint mode with JSON instructions in prompt for schema: ${outputSchema.name}`);
71
+ debug(`Using hint mode (JSON instructions added by formatSystemPrompt)`);
74
72
  }
75
73
  const request = {
76
74
  messages: convertedMessages,
@@ -91,29 +89,13 @@ export class ClaudeHandler {
91
89
  if (topP !== undefined) {
92
90
  request.topP = topP;
93
91
  }
94
- // Only add response_format in "strict" mode (not used for Claude anymore)
95
- if (determinedMode === "strict" && outputSchema) {
96
- // Claude requires additionalProperties: false on all object types
97
- // Unlike OpenAI/Gemini, Claude doesn't require all properties in 'required'
98
- const strictSchema = makeSchemaStrict(outputSchema.schema, { addAllRequired: false });
99
- request.responseFormat = {
100
- type: "json_schema",
101
- jsonSchema: {
102
- name: outputSchema.name,
103
- schema: strictSchema,
104
- strict: false, // Allow optional fields with defaults
105
- },
106
- };
107
- debug(`Using strict mode with response_format for schema: ${outputSchema.name}`);
108
- }
109
92
  return request;
110
93
  }
111
94
  /**
112
95
  * Format system prompt for Claude with output mode support.
113
96
  *
114
- * Output Mode Strategy:
115
- * - strict: Minimal JSON instructions (response_format handles schema)
116
- * - hint: Add detailed JSON schema instructions in prompt
97
+ * Output Mode Strategy (TEXT + HINT only):
98
+ * - hint: Add detailed JSON schema instructions with DECISION GUIDE in prompt
117
99
  * - text: No JSON instructions (plain text output)
118
100
  */
119
101
  formatSystemPrompt(basePrompt, toolSchemas, outputSchema, outputMode) {
@@ -131,15 +113,6 @@ export class ClaudeHandler {
131
113
  // Text mode: No JSON instructions
132
114
  return systemContent;
133
115
  }
134
- if (determinedMode === "strict") {
135
- // Strict mode: Minimal instructions (response_format handles schema)
136
- if (outputSchema) {
137
- systemContent += `
138
-
139
- Your final response will be structured as JSON matching the ${outputSchema.name} format.`;
140
- }
141
- return systemContent;
142
- }
143
116
  // Hint mode: Add detailed JSON schema instructions
144
117
  if (determinedMode === "hint" && outputSchema) {
145
118
  const properties = (outputSchema.schema.properties ?? {});
@@ -156,8 +129,18 @@ Your final response will be structured as JSON matching the ${outputSchema.name}
156
129
  }
157
130
  const fieldsText = fieldDescriptions.join("\n");
158
131
  const exampleFormat = Object.fromEntries(Object.entries(properties).map(([k, v]) => [k, `<${v.type ?? "value"}>`]));
132
+ // Add DECISION GUIDE when tools are present to help Claude know when NOT to use tools
133
+ let decisionGuide = "";
134
+ if (toolSchemas && toolSchemas.length > 0) {
135
+ decisionGuide = `
136
+ DECISION GUIDE:
137
+ - If your answer requires real-time data (weather, calculations, etc.), call the appropriate tool FIRST, then format your response as JSON.
138
+ - If your answer is general knowledge (like facts, explanations, definitions), directly return your response as JSON WITHOUT calling tools.
139
+ - After calling a tool and receiving results, STOP calling tools and return your final JSON response.
140
+ `;
141
+ }
159
142
  systemContent += `
160
-
143
+ ${decisionGuide}
161
144
  RESPONSE FORMAT:
162
145
  You MUST respond with valid JSON matching this schema:
163
146
  {
@@ -180,10 +163,10 @@ CRITICAL: Your response must be ONLY the raw JSON object.
180
163
  getCapabilities() {
181
164
  return {
182
165
  nativeToolCalling: true, // Claude has native function calling
183
- structuredOutput: true, // Native response_format support via Vercel AI SDK
166
+ structuredOutput: false, // Uses HINT mode (prompt-based), not native response_format
184
167
  streaming: true, // Supports streaming
185
168
  vision: true, // Claude 3+ supports vision
186
- jsonMode: true, // Native JSON mode via response_format
169
+ jsonMode: false, // No native JSON mode used
187
170
  promptCaching: false, // TODO: Re-enable via experimental_providerOptions
188
171
  };
189
172
  }
@@ -214,70 +197,6 @@ CRITICAL: Your response must be ONLY the raw JSON object.
214
197
  // and native structured output is slow. Prompt-based JSON is fast and reliable.
215
198
  return "hint";
216
199
  }
217
- // ==========================================================================
218
- // Private Helper Methods
219
- // ==========================================================================
220
- /**
221
- * Append JSON schema instructions to the system prompt for "hint" mode.
222
- *
223
- * This enables fast, prompt-based structured output instead of slow generateObject().
224
- * Claude is excellent at following detailed instructions, so this approach is
225
- * ~95% reliable while being much faster than native structured output.
226
- *
227
- * @param messages - Messages with system prompt
228
- * @param outputSchema - Schema to include in instructions
229
- * @returns Messages with updated system prompt
230
- */
231
- appendJsonInstructionsToSystemPrompt(messages, outputSchema) {
232
- const properties = (outputSchema.schema.properties ?? {});
233
- const required = (outputSchema.schema.required ?? []);
234
- // Build human-readable schema description
235
- const fieldDescriptions = [];
236
- for (const [fieldName, fieldSchema] of Object.entries(properties)) {
237
- const fieldType = fieldSchema.type ?? "any";
238
- const isRequired = required.includes(fieldName);
239
- const reqMarker = isRequired ? " (required)" : " (optional)";
240
- const desc = fieldSchema.description ?? "";
241
- const descText = desc ? ` - ${desc}` : "";
242
- fieldDescriptions.push(` - ${fieldName}: ${fieldType}${reqMarker}${descText}`);
243
- }
244
- const fieldsText = fieldDescriptions.join("\n");
245
- const exampleFormat = Object.fromEntries(Object.entries(properties).map(([k, v]) => [k, `<${v.type ?? "value"}>`]));
246
- const jsonInstructions = `
247
-
248
- RESPONSE FORMAT:
249
- You MUST respond with valid JSON matching the ${outputSchema.name} schema:
250
- {
251
- ${fieldsText}
252
- }
253
-
254
- Example format:
255
- ${JSON.stringify(exampleFormat, null, 2)}
256
-
257
- CRITICAL: Your response must be ONLY the raw JSON object.
258
- - DO NOT wrap in markdown code fences (\`\`\`json or \`\`\`)
259
- - DO NOT include any text before or after the JSON
260
- - Start directly with { and end with }`;
261
- // Find and update system message, or prepend one if none exists
262
- const updatedMessages = [...messages];
263
- const systemIndex = updatedMessages.findIndex((m) => m.role === "system");
264
- if (systemIndex >= 0) {
265
- // Append to existing system message
266
- const systemMsg = updatedMessages[systemIndex];
267
- updatedMessages[systemIndex] = {
268
- ...systemMsg,
269
- content: (systemMsg.content ?? "") + jsonInstructions,
270
- };
271
- }
272
- else {
273
- // Prepend new system message with JSON instructions
274
- updatedMessages.unshift({
275
- role: "system",
276
- content: jsonInstructions.trim(),
277
- });
278
- }
279
- return updatedMessages;
280
- }
281
200
  }
282
201
  // Register with the registry
283
202
  ProviderHandlerRegistry.register("anthropic", ClaudeHandler);
@@ -1 +1 @@
1
- {"version":3,"file":"claude-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/claude-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/claude-handler.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Gemini/Google provider handler.
2
+ * Gemini/Google provider handler for Gemini 3.x models.
3
3
  *
4
- * Optimized for Gemini models (Gemini 2.0 Flash, Gemini 1.5 Pro, etc.)
4
+ * Optimized for Gemini models (Gemini 3 Flash Preview, Gemini 2.0 Flash, etc.)
5
5
  * using Google's best practices for tool calling and structured output.
6
6
  *
7
7
  * Features:
@@ -34,12 +34,12 @@ import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type Ou
34
34
  * - Similar schema enforcement requirements
35
35
  *
36
36
  * Supported Models (via Vercel AI SDK):
37
+ * - gemini-3-flash-preview (reasoning support)
38
+ * - gemini-3-pro-preview (advanced reasoning)
37
39
  * - gemini-2.0-flash (fast, efficient)
38
40
  * - gemini-2.0-flash-lite (fastest, most efficient)
39
41
  * - gemini-1.5-pro (high capability)
40
42
  * - gemini-1.5-flash (balanced)
41
- * - gemini-3-flash-preview (reasoning support)
42
- * - gemini-3-pro-preview (advanced reasoning)
43
43
  */
44
44
  export declare class GeminiHandler implements ProviderHandler {
45
45
  readonly vendor = "google";
@@ -59,13 +59,16 @@ export declare class GeminiHandler implements ProviderHandler {
59
59
  [key: string]: unknown;
60
60
  }): PreparedRequest;
61
61
  /**
62
- * Format system prompt for Gemini (concise approach).
62
+ * Format system prompt for Gemini with output mode support.
63
63
  *
64
64
  * Gemini Strategy:
65
- * 1. Use base prompt as-is
66
- * 2. Add tool calling instructions if tools present
67
- * 3. Minimal JSON instructions (response_format handles structure)
68
- * 4. Keep prompt concise - Gemini works well with clear, direct prompts
65
+ * - strict mode: Brief JSON note (response_format handles schema)
66
+ * - hint mode: Detailed JSON schema instructions in prompt
67
+ * - text mode: No JSON instructions
68
+ *
69
+ * When tools are present, llm-provider forces "hint" mode because
70
+ * generateObject() doesn't support tools, so we need prompt-based
71
+ * JSON instructions to ensure structured output.
69
72
  */
70
73
  formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
71
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/gemini-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAK/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,YAAY;IAE3B;;;;;;;OAOG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IAuDlB;;;;;;;;OAQG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IAsBT;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;OAIG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAGd"}
1
+ {"version":3,"file":"gemini-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/gemini-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAK/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,YAAY;IAE3B;;;;;;;OAOG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IAwDlB;;;;;;;;;;;OAWG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IA0ET;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;OAIG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAGd"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Gemini/Google provider handler.
2
+ * Gemini/Google provider handler for Gemini 3.x models.
3
3
  *
4
- * Optimized for Gemini models (Gemini 2.0 Flash, Gemini 1.5 Pro, etc.)
4
+ * Optimized for Gemini models (Gemini 3 Flash Preview, Gemini 2.0 Flash, etc.)
5
5
  * using Google's best practices for tool calling and structured output.
6
6
  *
7
7
  * Features:
@@ -17,7 +17,7 @@
17
17
  * - https://ai.google.dev/gemini-api/docs
18
18
  */
19
19
  import { createDebug } from "../debug.js";
20
- import { convertMessagesToVercelFormat, makeSchemaStrict, defaultDetermineOutputMode, BASE_TOOL_INSTRUCTIONS, } from "./provider-handler.js";
20
+ import { convertMessagesToVercelFormat, makeSchemaStrict, sanitizeSchemaForStructuredOutput, defaultDetermineOutputMode, BASE_TOOL_INSTRUCTIONS, } from "./provider-handler.js";
21
21
  import { ProviderHandlerRegistry } from "./provider-handler-registry.js";
22
22
  const debug = createDebug("gemini-handler");
23
23
  /**
@@ -36,12 +36,12 @@ const debug = createDebug("gemini-handler");
36
36
  * - Similar schema enforcement requirements
37
37
  *
38
38
  * Supported Models (via Vercel AI SDK):
39
+ * - gemini-3-flash-preview (reasoning support)
40
+ * - gemini-3-pro-preview (advanced reasoning)
39
41
  * - gemini-2.0-flash (fast, efficient)
40
42
  * - gemini-2.0-flash-lite (fastest, most efficient)
41
43
  * - gemini-1.5-pro (high capability)
42
44
  * - gemini-1.5-flash (balanced)
43
- * - gemini-3-flash-preview (reasoning support)
44
- * - gemini-3-pro-preview (advanced reasoning)
45
45
  */
46
46
  export class GeminiHandler {
47
47
  vendor = "google";
@@ -85,7 +85,8 @@ export class GeminiHandler {
85
85
  // Hint mode relies on prompt instructions instead
86
86
  if (determinedMode === "strict") {
87
87
  // Vercel AI SDK translates this to Gemini's native format
88
- const strictSchema = makeSchemaStrict(outputSchema.schema, { addAllRequired: true });
88
+ const sanitizedSchema = sanitizeSchemaForStructuredOutput(outputSchema.schema);
89
+ const strictSchema = makeSchemaStrict(sanitizedSchema, { addAllRequired: true });
89
90
  request.responseFormat = {
90
91
  type: "json_schema",
91
92
  jsonSchema: {
@@ -99,13 +100,16 @@ export class GeminiHandler {
99
100
  return request;
100
101
  }
101
102
  /**
102
- * Format system prompt for Gemini (concise approach).
103
+ * Format system prompt for Gemini with output mode support.
103
104
  *
104
105
  * Gemini Strategy:
105
- * 1. Use base prompt as-is
106
- * 2. Add tool calling instructions if tools present
107
- * 3. Minimal JSON instructions (response_format handles structure)
108
- * 4. Keep prompt concise - Gemini works well with clear, direct prompts
106
+ * - strict mode: Brief JSON note (response_format handles schema)
107
+ * - hint mode: Detailed JSON schema instructions in prompt
108
+ * - text mode: No JSON instructions
109
+ *
110
+ * When tools are present, llm-provider forces "hint" mode because
111
+ * generateObject() doesn't support tools, so we need prompt-based
112
+ * JSON instructions to ensure structured output.
109
113
  */
110
114
  formatSystemPrompt(basePrompt, toolSchemas, outputSchema, outputMode) {
111
115
  let systemContent = basePrompt;
@@ -114,14 +118,61 @@ export class GeminiHandler {
114
118
  if (toolSchemas && toolSchemas.length > 0) {
115
119
  systemContent += BASE_TOOL_INSTRUCTIONS;
116
120
  }
117
- // Skip JSON note for text mode
121
+ // Skip JSON instructions for text mode or no schema
118
122
  if (determinedMode === "text" || !outputSchema) {
119
123
  return systemContent;
120
124
  }
121
- // Add brief JSON note (response_format handles enforcement)
122
- systemContent += `
125
+ // Strict mode: Brief note (response_format handles enforcement)
126
+ if (determinedMode === "strict") {
127
+ systemContent += `
123
128
 
124
129
  Your final response will be structured as JSON matching the ${outputSchema.name} format.`;
130
+ return systemContent;
131
+ }
132
+ // Hint mode: Add detailed JSON schema instructions
133
+ // This is used when tools are present (can't use generateObject)
134
+ const schema = outputSchema.schema;
135
+ const properties = (schema.properties ?? {});
136
+ const required = (schema.required ?? []);
137
+ // Build human-readable schema description
138
+ const fieldDescriptions = [];
139
+ for (const [fieldName, fieldSchema] of Object.entries(properties)) {
140
+ const fieldType = fieldSchema.type ?? "any";
141
+ const isRequired = required.includes(fieldName);
142
+ const reqMarker = isRequired ? " (required)" : " (optional)";
143
+ const desc = fieldSchema.description;
144
+ const descText = desc ? ` - ${desc}` : "";
145
+ fieldDescriptions.push(` - ${fieldName}: ${fieldType}${reqMarker}${descText}`);
146
+ }
147
+ const fieldsText = fieldDescriptions.join("\n");
148
+ const exampleObj = {};
149
+ for (const [k, v] of Object.entries(properties)) {
150
+ exampleObj[k] = `<${v.type ?? "value"}>`;
151
+ }
152
+ // Add DECISION GUIDE when tools are present to help Gemini know when NOT to use tools
153
+ let decisionGuide = "";
154
+ if (toolSchemas && toolSchemas.length > 0) {
155
+ decisionGuide = `
156
+ DECISION GUIDE:
157
+ - If your answer requires real-time data (weather, calculations, etc.), call the appropriate tool FIRST, then format your response as JSON.
158
+ - If your answer is general knowledge (like facts, explanations, definitions), directly return your response as JSON WITHOUT calling tools.
159
+ `;
160
+ }
161
+ systemContent += `
162
+ ${decisionGuide}
163
+ FINAL RESPONSE FORMAT:
164
+ After gathering all needed information using tools, your FINAL response MUST be valid JSON matching this schema:
165
+ {
166
+ ${fieldsText}
167
+ }
168
+
169
+ Example format:
170
+ ${JSON.stringify(exampleObj, null, 2)}
171
+
172
+ IMPORTANT:
173
+ - First, use the available tools to gather information if needed
174
+ - Only after you have all the data, provide your final JSON response
175
+ - The final response must be ONLY valid JSON - no markdown code fences, no preamble text`;
125
176
  return systemContent;
126
177
  }
127
178
  /**
@@ -146,7 +197,7 @@ Your final response will be structured as JSON matching the ${outputSchema.name}
146
197
  }
147
198
  }
148
199
  // Register with the registry
149
- // Use "google" as vendor name to match Vercel AI SDK model extraction
150
- // (e.g., "google/gemini-2.0-flash" vendor "google")
151
- ProviderHandlerRegistry.register("google", GeminiHandler);
200
+ // Use "gemini" as vendor name to match model prefix (e.g., "gemini/gemini-3-flash-preview")
201
+ // This is consistent with Python SDK's registration
202
+ ProviderHandlerRegistry.register("gemini", GeminiHandler);
152
203
  //# sourceMappingURL=gemini-handler.js.map