@mcpmesh/sdk 0.8.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.
- package/dist/__tests__/claude-handler.test.d.ts +7 -0
- package/dist/__tests__/claude-handler.test.d.ts.map +1 -0
- package/dist/__tests__/claude-handler.test.js +455 -0
- package/dist/__tests__/claude-handler.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +7 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +156 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +7 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +170 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/generic-handler.test.d.ts +7 -0
- package/dist/__tests__/generic-handler.test.d.ts.map +1 -0
- package/dist/__tests__/generic-handler.test.js +243 -0
- package/dist/__tests__/generic-handler.test.js.map +1 -0
- package/dist/__tests__/llm-provider.test.d.ts +7 -0
- package/dist/__tests__/llm-provider.test.d.ts.map +1 -0
- package/dist/__tests__/llm-provider.test.js +217 -0
- package/dist/__tests__/llm-provider.test.js.map +1 -0
- package/dist/__tests__/openai-handler.test.d.ts +7 -0
- package/dist/__tests__/openai-handler.test.d.ts.map +1 -0
- package/dist/__tests__/openai-handler.test.js +359 -0
- package/dist/__tests__/openai-handler.test.js.map +1 -0
- package/dist/__tests__/provider-handler-registry.test.d.ts +9 -0
- package/dist/__tests__/provider-handler-registry.test.d.ts.map +1 -0
- package/dist/__tests__/provider-handler-registry.test.js +187 -0
- package/dist/__tests__/provider-handler-registry.test.js.map +1 -0
- package/dist/__tests__/response-parser.test.d.ts +7 -0
- package/dist/__tests__/response-parser.test.d.ts.map +1 -0
- package/dist/__tests__/response-parser.test.js +360 -0
- package/dist/__tests__/response-parser.test.js.map +1 -0
- package/dist/__tests__/route.test.d.ts +7 -0
- package/dist/__tests__/route.test.d.ts.map +1 -0
- package/dist/__tests__/route.test.js +281 -0
- package/dist/__tests__/route.test.js.map +1 -0
- package/dist/__tests__/sse.test.d.ts +7 -0
- package/dist/__tests__/sse.test.d.ts.map +1 -0
- package/dist/__tests__/sse.test.js +172 -0
- package/dist/__tests__/sse.test.js.map +1 -0
- package/dist/__tests__/template.test.d.ts +7 -0
- package/dist/__tests__/template.test.d.ts.map +1 -0
- package/dist/__tests__/template.test.js +176 -0
- package/dist/__tests__/template.test.js.map +1 -0
- package/dist/__tests__/tracing.test.d.ts +7 -0
- package/dist/__tests__/tracing.test.d.ts.map +1 -0
- package/dist/__tests__/tracing.test.js +264 -0
- package/dist/__tests__/tracing.test.js.map +1 -0
- package/dist/agent.d.ts +165 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +626 -0
- package/dist/agent.js.map +1 -0
- package/dist/api-runtime.d.ts +166 -0
- package/dist/api-runtime.d.ts.map +1 -0
- package/dist/api-runtime.js +459 -0
- package/dist/api-runtime.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +60 -0
- package/dist/config.js.map +1 -0
- package/dist/debug.d.ts +47 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +86 -0
- package/dist/debug.js.map +1 -0
- package/dist/errors.d.ts +99 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +110 -0
- package/dist/errors.js.map +1 -0
- package/dist/express.d.ts +146 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +371 -0
- package/dist/express.js.map +1 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/llm-agent.d.ts +193 -0
- package/dist/llm-agent.d.ts.map +1 -0
- package/dist/llm-agent.js +634 -0
- package/dist/llm-agent.js.map +1 -0
- package/dist/llm-provider.d.ts +323 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +446 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/llm.d.ts +194 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +304 -0
- package/dist/llm.js.map +1 -0
- package/dist/provider-handlers/claude-handler.d.ts +98 -0
- package/dist/provider-handlers/claude-handler.d.ts.map +1 -0
- package/dist/provider-handlers/claude-handler.js +268 -0
- package/dist/provider-handlers/claude-handler.js.map +1 -0
- package/dist/provider-handlers/gemini-handler.d.ts +82 -0
- package/dist/provider-handlers/gemini-handler.d.ts.map +1 -0
- package/dist/provider-handlers/gemini-handler.js +152 -0
- package/dist/provider-handlers/gemini-handler.js.map +1 -0
- package/dist/provider-handlers/generic-handler.d.ts +78 -0
- package/dist/provider-handlers/generic-handler.d.ts.map +1 -0
- package/dist/provider-handlers/generic-handler.js +152 -0
- package/dist/provider-handlers/generic-handler.js.map +1 -0
- package/dist/provider-handlers/index.d.ts +29 -0
- package/dist/provider-handlers/index.d.ts.map +1 -0
- package/dist/provider-handlers/index.js +32 -0
- package/dist/provider-handlers/index.js.map +1 -0
- package/dist/provider-handlers/openai-handler.d.ts +86 -0
- package/dist/provider-handlers/openai-handler.d.ts.map +1 -0
- package/dist/provider-handlers/openai-handler.js +160 -0
- package/dist/provider-handlers/openai-handler.js.map +1 -0
- package/dist/provider-handlers/provider-handler-registry.d.ts +124 -0
- package/dist/provider-handlers/provider-handler-registry.d.ts.map +1 -0
- package/dist/provider-handlers/provider-handler-registry.js +180 -0
- package/dist/provider-handlers/provider-handler-registry.js.map +1 -0
- package/dist/provider-handlers/provider-handler.d.ts +245 -0
- package/dist/provider-handlers/provider-handler.d.ts.map +1 -0
- package/dist/provider-handlers/provider-handler.js +238 -0
- package/dist/provider-handlers/provider-handler.js.map +1 -0
- package/dist/proxy.d.ts +44 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +324 -0
- package/dist/proxy.js.map +1 -0
- package/dist/response-parser.d.ts +103 -0
- package/dist/response-parser.d.ts.map +1 -0
- package/dist/response-parser.js +232 -0
- package/dist/response-parser.js.map +1 -0
- package/dist/route.d.ts +185 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/route.js +310 -0
- package/dist/route.js.map +1 -0
- package/dist/sse.d.ts +45 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +77 -0
- package/dist/sse.js.map +1 -0
- package/dist/template.d.ts +86 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +206 -0
- package/dist/template.js.map +1 -0
- package/dist/tracing.d.ts +88 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +193 -0
- package/dist/tracing.js.map +1 -0
- package/dist/types.d.ts +618 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/claude-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini/Google provider handler.
|
|
3
|
+
*
|
|
4
|
+
* Optimized for Gemini models (Gemini 2.0 Flash, Gemini 1.5 Pro, etc.)
|
|
5
|
+
* using Google's best practices for tool calling and structured output.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Native structured output via response_format (via Vercel AI SDK)
|
|
9
|
+
* - Native function calling support
|
|
10
|
+
* - Support for Gemini 2.x and 3.x models
|
|
11
|
+
* - Large context windows (up to 2M tokens)
|
|
12
|
+
*
|
|
13
|
+
* Based on Python's GeminiHandler:
|
|
14
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/gemini_handler.py
|
|
15
|
+
*
|
|
16
|
+
* Reference:
|
|
17
|
+
* - https://ai.google.dev/gemini-api/docs
|
|
18
|
+
*/
|
|
19
|
+
import type { LlmMessage } from "../types.js";
|
|
20
|
+
import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type OutputSchema, type PreparedRequest, type OutputMode } from "./provider-handler.js";
|
|
21
|
+
/**
|
|
22
|
+
* Provider handler for Google Gemini models.
|
|
23
|
+
*
|
|
24
|
+
* Gemini Characteristics:
|
|
25
|
+
* - Native structured output via response_format (Vercel AI SDK translates)
|
|
26
|
+
* - Native function calling support
|
|
27
|
+
* - Large context windows (1M-2M tokens)
|
|
28
|
+
* - Multimodal support (text, images, video, audio)
|
|
29
|
+
* - Works well with concise, focused prompts
|
|
30
|
+
*
|
|
31
|
+
* Key Similarities with OpenAI:
|
|
32
|
+
* - Uses response_format for structured output (via Vercel AI SDK)
|
|
33
|
+
* - Native function calling format
|
|
34
|
+
* - Similar schema enforcement requirements
|
|
35
|
+
*
|
|
36
|
+
* Supported Models (via Vercel AI SDK):
|
|
37
|
+
* - gemini-2.0-flash (fast, efficient)
|
|
38
|
+
* - gemini-2.0-flash-lite (fastest, most efficient)
|
|
39
|
+
* - gemini-1.5-pro (high capability)
|
|
40
|
+
* - gemini-1.5-flash (balanced)
|
|
41
|
+
* - gemini-3-flash-preview (reasoning support)
|
|
42
|
+
* - gemini-3-pro-preview (advanced reasoning)
|
|
43
|
+
*/
|
|
44
|
+
export declare class GeminiHandler implements ProviderHandler {
|
|
45
|
+
readonly vendor = "google";
|
|
46
|
+
/**
|
|
47
|
+
* Prepare request parameters for Gemini API via Vercel AI SDK.
|
|
48
|
+
*
|
|
49
|
+
* Gemini Strategy:
|
|
50
|
+
* - Use response_format parameter for structured JSON output
|
|
51
|
+
* - Vercel AI SDK handles translation to Gemini's native format
|
|
52
|
+
* - Skip structured output for text mode (string return types)
|
|
53
|
+
*/
|
|
54
|
+
prepareRequest(messages: LlmMessage[], tools: ToolSchema[] | null, outputSchema: OutputSchema | null, options?: {
|
|
55
|
+
outputMode?: OutputMode;
|
|
56
|
+
temperature?: number;
|
|
57
|
+
maxOutputTokens?: number;
|
|
58
|
+
topP?: number;
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
}): PreparedRequest;
|
|
61
|
+
/**
|
|
62
|
+
* Format system prompt for Gemini (concise approach).
|
|
63
|
+
*
|
|
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
|
|
69
|
+
*/
|
|
70
|
+
formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
|
|
71
|
+
/**
|
|
72
|
+
* Return Gemini-specific capabilities.
|
|
73
|
+
*/
|
|
74
|
+
getCapabilities(): VendorCapabilities;
|
|
75
|
+
/**
|
|
76
|
+
* Determine output mode - Gemini uses strict mode for schemas.
|
|
77
|
+
*
|
|
78
|
+
* Uses the default implementation since Gemini has good structured output support.
|
|
79
|
+
*/
|
|
80
|
+
determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=gemini-handler.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini/Google provider handler.
|
|
3
|
+
*
|
|
4
|
+
* Optimized for Gemini models (Gemini 2.0 Flash, Gemini 1.5 Pro, etc.)
|
|
5
|
+
* using Google's best practices for tool calling and structured output.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Native structured output via response_format (via Vercel AI SDK)
|
|
9
|
+
* - Native function calling support
|
|
10
|
+
* - Support for Gemini 2.x and 3.x models
|
|
11
|
+
* - Large context windows (up to 2M tokens)
|
|
12
|
+
*
|
|
13
|
+
* Based on Python's GeminiHandler:
|
|
14
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/gemini_handler.py
|
|
15
|
+
*
|
|
16
|
+
* Reference:
|
|
17
|
+
* - https://ai.google.dev/gemini-api/docs
|
|
18
|
+
*/
|
|
19
|
+
import { createDebug } from "../debug.js";
|
|
20
|
+
import { convertMessagesToVercelFormat, makeSchemaStrict, defaultDetermineOutputMode, BASE_TOOL_INSTRUCTIONS, } from "./provider-handler.js";
|
|
21
|
+
import { ProviderHandlerRegistry } from "./provider-handler-registry.js";
|
|
22
|
+
const debug = createDebug("gemini-handler");
|
|
23
|
+
/**
|
|
24
|
+
* Provider handler for Google Gemini models.
|
|
25
|
+
*
|
|
26
|
+
* Gemini Characteristics:
|
|
27
|
+
* - Native structured output via response_format (Vercel AI SDK translates)
|
|
28
|
+
* - Native function calling support
|
|
29
|
+
* - Large context windows (1M-2M tokens)
|
|
30
|
+
* - Multimodal support (text, images, video, audio)
|
|
31
|
+
* - Works well with concise, focused prompts
|
|
32
|
+
*
|
|
33
|
+
* Key Similarities with OpenAI:
|
|
34
|
+
* - Uses response_format for structured output (via Vercel AI SDK)
|
|
35
|
+
* - Native function calling format
|
|
36
|
+
* - Similar schema enforcement requirements
|
|
37
|
+
*
|
|
38
|
+
* Supported Models (via Vercel AI SDK):
|
|
39
|
+
* - gemini-2.0-flash (fast, efficient)
|
|
40
|
+
* - gemini-2.0-flash-lite (fastest, most efficient)
|
|
41
|
+
* - gemini-1.5-pro (high capability)
|
|
42
|
+
* - gemini-1.5-flash (balanced)
|
|
43
|
+
* - gemini-3-flash-preview (reasoning support)
|
|
44
|
+
* - gemini-3-pro-preview (advanced reasoning)
|
|
45
|
+
*/
|
|
46
|
+
export class GeminiHandler {
|
|
47
|
+
vendor = "google";
|
|
48
|
+
/**
|
|
49
|
+
* Prepare request parameters for Gemini API via Vercel AI SDK.
|
|
50
|
+
*
|
|
51
|
+
* Gemini Strategy:
|
|
52
|
+
* - Use response_format parameter for structured JSON output
|
|
53
|
+
* - Vercel AI SDK handles translation to Gemini's native format
|
|
54
|
+
* - Skip structured output for text mode (string return types)
|
|
55
|
+
*/
|
|
56
|
+
prepareRequest(messages, tools, outputSchema, options) {
|
|
57
|
+
const { outputMode, temperature, maxOutputTokens: maxTokens, topP, ...rest } = options ?? {};
|
|
58
|
+
const determinedMode = this.determineOutputMode(outputSchema, outputMode);
|
|
59
|
+
// Convert messages to Vercel AI SDK format (shared utility)
|
|
60
|
+
const convertedMessages = convertMessagesToVercelFormat(messages);
|
|
61
|
+
const request = {
|
|
62
|
+
messages: convertedMessages,
|
|
63
|
+
...rest,
|
|
64
|
+
};
|
|
65
|
+
// Add tools if provided
|
|
66
|
+
// Vercel AI SDK will convert to Gemini's function_declarations format
|
|
67
|
+
if (tools && tools.length > 0) {
|
|
68
|
+
request.tools = tools;
|
|
69
|
+
}
|
|
70
|
+
// Add standard parameters if provided
|
|
71
|
+
if (temperature !== undefined) {
|
|
72
|
+
request.temperature = temperature;
|
|
73
|
+
}
|
|
74
|
+
if (maxTokens !== undefined) {
|
|
75
|
+
request.maxOutputTokens = maxTokens;
|
|
76
|
+
}
|
|
77
|
+
if (topP !== undefined) {
|
|
78
|
+
request.topP = topP;
|
|
79
|
+
}
|
|
80
|
+
// Skip structured output for text mode or no schema
|
|
81
|
+
if (determinedMode === "text" || !outputSchema) {
|
|
82
|
+
return request;
|
|
83
|
+
}
|
|
84
|
+
// Only add response_format in "strict" mode
|
|
85
|
+
// Hint mode relies on prompt instructions instead
|
|
86
|
+
if (determinedMode === "strict") {
|
|
87
|
+
// Vercel AI SDK translates this to Gemini's native format
|
|
88
|
+
const strictSchema = makeSchemaStrict(outputSchema.schema, { addAllRequired: true });
|
|
89
|
+
request.responseFormat = {
|
|
90
|
+
type: "json_schema",
|
|
91
|
+
jsonSchema: {
|
|
92
|
+
name: outputSchema.name,
|
|
93
|
+
schema: strictSchema,
|
|
94
|
+
strict: true, // Enforce schema compliance
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
debug(`Using response_format with strict schema: ${outputSchema.name}`);
|
|
98
|
+
}
|
|
99
|
+
return request;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Format system prompt for Gemini (concise approach).
|
|
103
|
+
*
|
|
104
|
+
* 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
|
|
109
|
+
*/
|
|
110
|
+
formatSystemPrompt(basePrompt, toolSchemas, outputSchema, outputMode) {
|
|
111
|
+
let systemContent = basePrompt;
|
|
112
|
+
const determinedMode = this.determineOutputMode(outputSchema, outputMode);
|
|
113
|
+
// Add tool calling instructions if tools available
|
|
114
|
+
if (toolSchemas && toolSchemas.length > 0) {
|
|
115
|
+
systemContent += BASE_TOOL_INSTRUCTIONS;
|
|
116
|
+
}
|
|
117
|
+
// Skip JSON note for text mode
|
|
118
|
+
if (determinedMode === "text" || !outputSchema) {
|
|
119
|
+
return systemContent;
|
|
120
|
+
}
|
|
121
|
+
// Add brief JSON note (response_format handles enforcement)
|
|
122
|
+
systemContent += `
|
|
123
|
+
|
|
124
|
+
Your final response will be structured as JSON matching the ${outputSchema.name} format.`;
|
|
125
|
+
return systemContent;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Return Gemini-specific capabilities.
|
|
129
|
+
*/
|
|
130
|
+
getCapabilities() {
|
|
131
|
+
return {
|
|
132
|
+
nativeToolCalling: true, // Gemini has native function calling
|
|
133
|
+
structuredOutput: true, // Supports structured output via response_format
|
|
134
|
+
streaming: true, // Supports streaming
|
|
135
|
+
vision: true, // Gemini supports multimodal (images, video, audio)
|
|
136
|
+
jsonMode: true, // Native JSON mode via response_format
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Determine output mode - Gemini uses strict mode for schemas.
|
|
141
|
+
*
|
|
142
|
+
* Uses the default implementation since Gemini has good structured output support.
|
|
143
|
+
*/
|
|
144
|
+
determineOutputMode(outputSchema, overrideMode) {
|
|
145
|
+
return defaultDetermineOutputMode(outputSchema, overrideMode);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// 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);
|
|
152
|
+
//# sourceMappingURL=gemini-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/gemini-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic provider handler for unknown/unsupported vendors.
|
|
3
|
+
*
|
|
4
|
+
* Provides sensible defaults using prompt-based approach similar to Claude.
|
|
5
|
+
*
|
|
6
|
+
* Based on Python's GenericHandler:
|
|
7
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/generic_handler.py
|
|
8
|
+
*/
|
|
9
|
+
import type { LlmMessage } from "../types.js";
|
|
10
|
+
import type { ProviderHandler, VendorCapabilities, ToolSchema, OutputSchema, PreparedRequest, OutputMode } from "./provider-handler.js";
|
|
11
|
+
/**
|
|
12
|
+
* Generic provider handler for vendors without specific handlers.
|
|
13
|
+
*
|
|
14
|
+
* This handler provides a safe, conservative approach that should work
|
|
15
|
+
* with most LLM providers that follow OpenAI-compatible APIs:
|
|
16
|
+
* - Uses prompt-based JSON instructions
|
|
17
|
+
* - Standard tool calling format (via Vercel AI SDK normalization)
|
|
18
|
+
* - No vendor-specific features
|
|
19
|
+
* - Maximum compatibility
|
|
20
|
+
*
|
|
21
|
+
* Use Cases:
|
|
22
|
+
* - Fallback for unknown vendors
|
|
23
|
+
* - New providers before dedicated handler is created
|
|
24
|
+
* - Testing with custom/local models
|
|
25
|
+
* - Providers like: Cohere, Together, Replicate, Ollama, etc.
|
|
26
|
+
*
|
|
27
|
+
* Strategy:
|
|
28
|
+
* - Conservative, prompt-based approach
|
|
29
|
+
* - Relies on Vercel AI SDK to normalize vendor differences
|
|
30
|
+
* - Works with any provider that Vercel AI SDK supports
|
|
31
|
+
*/
|
|
32
|
+
export declare class GenericHandler implements ProviderHandler {
|
|
33
|
+
readonly vendor: string;
|
|
34
|
+
constructor(vendor?: string);
|
|
35
|
+
/**
|
|
36
|
+
* Prepare request with standard parameters.
|
|
37
|
+
*
|
|
38
|
+
* Generic Strategy:
|
|
39
|
+
* - Use standard message format
|
|
40
|
+
* - Include tools if provided (Vercel AI SDK will normalize)
|
|
41
|
+
* - No vendor-specific parameters
|
|
42
|
+
* - Let Vercel AI SDK handle vendor differences
|
|
43
|
+
*/
|
|
44
|
+
prepareRequest(messages: LlmMessage[], tools: ToolSchema[] | null, _outputSchema: OutputSchema | null, // unused in generic handler, but required by interface
|
|
45
|
+
options?: {
|
|
46
|
+
outputMode?: OutputMode;
|
|
47
|
+
temperature?: number;
|
|
48
|
+
maxOutputTokens?: number;
|
|
49
|
+
topP?: number;
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
}): PreparedRequest;
|
|
52
|
+
/**
|
|
53
|
+
* Format system prompt with explicit JSON instructions.
|
|
54
|
+
*
|
|
55
|
+
* Generic Strategy:
|
|
56
|
+
* - Use detailed prompt instructions (works with most models)
|
|
57
|
+
* - Explicit JSON schema (since we can't assume response_format)
|
|
58
|
+
* - Clear tool calling guidelines
|
|
59
|
+
* - Maximum explicitness for compatibility
|
|
60
|
+
* - Skip JSON schema for text mode (string return type)
|
|
61
|
+
*/
|
|
62
|
+
formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
|
|
63
|
+
/**
|
|
64
|
+
* Return conservative capability flags.
|
|
65
|
+
*
|
|
66
|
+
* For generic handler, we assume minimal capabilities
|
|
67
|
+
* to ensure maximum compatibility.
|
|
68
|
+
*/
|
|
69
|
+
getCapabilities(): VendorCapabilities;
|
|
70
|
+
/**
|
|
71
|
+
* Determine output mode - generic handler always uses "hint" for schemas.
|
|
72
|
+
*
|
|
73
|
+
* Since we can't assume structured output support, we rely on
|
|
74
|
+
* prompt-based instructions (hint mode) for JSON schema compliance.
|
|
75
|
+
*/
|
|
76
|
+
determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=generic-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/generic-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,EACX,MAAM,uBAAuB,CAAC;AAG/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,GAAE,MAAkB;IAItC;;;;;;;;OAQG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,aAAa,EAAE,YAAY,GAAG,IAAI,EAAE,uDAAuD;IAC3F,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;IA8BlB;;;;;;;;;OASG;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;IAwCT;;;;;OAKG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;;OAKG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAed"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic provider handler for unknown/unsupported vendors.
|
|
3
|
+
*
|
|
4
|
+
* Provides sensible defaults using prompt-based approach similar to Claude.
|
|
5
|
+
*
|
|
6
|
+
* Based on Python's GenericHandler:
|
|
7
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/generic_handler.py
|
|
8
|
+
*/
|
|
9
|
+
import { ProviderHandlerRegistry } from "./provider-handler-registry.js";
|
|
10
|
+
/**
|
|
11
|
+
* Generic provider handler for vendors without specific handlers.
|
|
12
|
+
*
|
|
13
|
+
* This handler provides a safe, conservative approach that should work
|
|
14
|
+
* with most LLM providers that follow OpenAI-compatible APIs:
|
|
15
|
+
* - Uses prompt-based JSON instructions
|
|
16
|
+
* - Standard tool calling format (via Vercel AI SDK normalization)
|
|
17
|
+
* - No vendor-specific features
|
|
18
|
+
* - Maximum compatibility
|
|
19
|
+
*
|
|
20
|
+
* Use Cases:
|
|
21
|
+
* - Fallback for unknown vendors
|
|
22
|
+
* - New providers before dedicated handler is created
|
|
23
|
+
* - Testing with custom/local models
|
|
24
|
+
* - Providers like: Cohere, Together, Replicate, Ollama, etc.
|
|
25
|
+
*
|
|
26
|
+
* Strategy:
|
|
27
|
+
* - Conservative, prompt-based approach
|
|
28
|
+
* - Relies on Vercel AI SDK to normalize vendor differences
|
|
29
|
+
* - Works with any provider that Vercel AI SDK supports
|
|
30
|
+
*/
|
|
31
|
+
export class GenericHandler {
|
|
32
|
+
vendor;
|
|
33
|
+
constructor(vendor = "unknown") {
|
|
34
|
+
this.vendor = vendor;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Prepare request with standard parameters.
|
|
38
|
+
*
|
|
39
|
+
* Generic Strategy:
|
|
40
|
+
* - Use standard message format
|
|
41
|
+
* - Include tools if provided (Vercel AI SDK will normalize)
|
|
42
|
+
* - No vendor-specific parameters
|
|
43
|
+
* - Let Vercel AI SDK handle vendor differences
|
|
44
|
+
*/
|
|
45
|
+
prepareRequest(messages, tools, _outputSchema, // unused in generic handler, but required by interface
|
|
46
|
+
options) {
|
|
47
|
+
const { outputMode, temperature, maxOutputTokens: maxTokens, topP, ...rest } = options ?? {};
|
|
48
|
+
const request = {
|
|
49
|
+
messages: [...messages],
|
|
50
|
+
...rest,
|
|
51
|
+
};
|
|
52
|
+
// Add tools if provided (Vercel AI SDK will convert to vendor format)
|
|
53
|
+
if (tools && tools.length > 0) {
|
|
54
|
+
request.tools = tools;
|
|
55
|
+
}
|
|
56
|
+
// Add standard parameters if provided
|
|
57
|
+
if (temperature !== undefined) {
|
|
58
|
+
request.temperature = temperature;
|
|
59
|
+
}
|
|
60
|
+
if (maxTokens !== undefined) {
|
|
61
|
+
request.maxOutputTokens = maxTokens;
|
|
62
|
+
}
|
|
63
|
+
if (topP !== undefined) {
|
|
64
|
+
request.topP = topP;
|
|
65
|
+
}
|
|
66
|
+
// Don't add responseFormat - not all vendors support it
|
|
67
|
+
// Rely on prompt-based JSON instructions instead
|
|
68
|
+
return request;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Format system prompt with explicit JSON instructions.
|
|
72
|
+
*
|
|
73
|
+
* Generic Strategy:
|
|
74
|
+
* - Use detailed prompt instructions (works with most models)
|
|
75
|
+
* - Explicit JSON schema (since we can't assume response_format)
|
|
76
|
+
* - Clear tool calling guidelines
|
|
77
|
+
* - Maximum explicitness for compatibility
|
|
78
|
+
* - Skip JSON schema for text mode (string return type)
|
|
79
|
+
*/
|
|
80
|
+
formatSystemPrompt(basePrompt, toolSchemas, outputSchema, outputMode) {
|
|
81
|
+
let systemContent = basePrompt;
|
|
82
|
+
const mode = this.determineOutputMode(outputSchema, outputMode);
|
|
83
|
+
// Add tool calling instructions if tools available
|
|
84
|
+
if (toolSchemas && toolSchemas.length > 0) {
|
|
85
|
+
systemContent += `
|
|
86
|
+
|
|
87
|
+
TOOL CALLING RULES:
|
|
88
|
+
- You can call tools to gather information
|
|
89
|
+
- Make one tool call at a time
|
|
90
|
+
- Wait for tool results before making additional calls
|
|
91
|
+
- Use standard JSON function calling format
|
|
92
|
+
- Provide your final response after gathering needed information
|
|
93
|
+
`;
|
|
94
|
+
}
|
|
95
|
+
// Skip JSON schema for text mode
|
|
96
|
+
if (mode === "text" || !outputSchema) {
|
|
97
|
+
return systemContent;
|
|
98
|
+
}
|
|
99
|
+
// Add explicit JSON schema instructions
|
|
100
|
+
// (since we can't rely on vendor-specific structured output)
|
|
101
|
+
const schemaStr = JSON.stringify(outputSchema.schema, null, 2);
|
|
102
|
+
systemContent += `
|
|
103
|
+
|
|
104
|
+
IMPORTANT: Return your final response as valid JSON matching this exact schema:
|
|
105
|
+
${schemaStr}
|
|
106
|
+
|
|
107
|
+
Rules:
|
|
108
|
+
- Return ONLY the JSON object, no markdown, no additional text
|
|
109
|
+
- Ensure all required fields are present
|
|
110
|
+
- Match the schema exactly
|
|
111
|
+
- Use double quotes for strings
|
|
112
|
+
- Do not include comments`;
|
|
113
|
+
return systemContent;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Return conservative capability flags.
|
|
117
|
+
*
|
|
118
|
+
* For generic handler, we assume minimal capabilities
|
|
119
|
+
* to ensure maximum compatibility.
|
|
120
|
+
*/
|
|
121
|
+
getCapabilities() {
|
|
122
|
+
return {
|
|
123
|
+
nativeToolCalling: true, // Most modern LLMs support this via Vercel AI SDK
|
|
124
|
+
structuredOutput: false, // Can't assume all vendors support response_format
|
|
125
|
+
streaming: false, // Conservative - not all vendors support streaming
|
|
126
|
+
vision: false, // Conservative - not all models support vision
|
|
127
|
+
jsonMode: false, // Conservative - use prompt-based JSON instead
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Determine output mode - generic handler always uses "hint" for schemas.
|
|
132
|
+
*
|
|
133
|
+
* Since we can't assume structured output support, we rely on
|
|
134
|
+
* prompt-based instructions (hint mode) for JSON schema compliance.
|
|
135
|
+
*/
|
|
136
|
+
determineOutputMode(outputSchema, overrideMode) {
|
|
137
|
+
// Allow explicit override
|
|
138
|
+
if (overrideMode) {
|
|
139
|
+
return overrideMode;
|
|
140
|
+
}
|
|
141
|
+
// No schema means text mode
|
|
142
|
+
if (!outputSchema) {
|
|
143
|
+
return "text";
|
|
144
|
+
}
|
|
145
|
+
// Generic handler uses hint mode (prompt-based JSON instructions)
|
|
146
|
+
// since we can't assume structured output support
|
|
147
|
+
return "hint";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Register as fallback handler
|
|
151
|
+
ProviderHandlerRegistry.setFallbackHandler(GenericHandler);
|
|
152
|
+
//# sourceMappingURL=generic-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/generic-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-specific handlers for LLM vendors.
|
|
3
|
+
*
|
|
4
|
+
* This package provides vendor-specific customization for different LLM providers
|
|
5
|
+
* (Claude, OpenAI, Gemini, etc.) to optimize API calls and response handling.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ProviderHandlerRegistry } from "@mcpmesh/sdk/provider-handlers";
|
|
10
|
+
*
|
|
11
|
+
* const handler = ProviderHandlerRegistry.getHandler("anthropic");
|
|
12
|
+
* const request = handler.prepareRequest(messages, tools, outputSchema);
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Based on Python's provider_handlers package:
|
|
16
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/
|
|
17
|
+
*/
|
|
18
|
+
export type { ProviderHandler, VendorCapabilities, ToolSchema, OutputSchema, PreparedRequest, OutputMode, } from "./provider-handler.js";
|
|
19
|
+
export { convertMessagesToVercelFormat } from "./provider-handler.js";
|
|
20
|
+
export { ProviderHandlerRegistry, type ProviderHandlerConstructor, } from "./provider-handler-registry.js";
|
|
21
|
+
import "./generic-handler.js";
|
|
22
|
+
import "./claude-handler.js";
|
|
23
|
+
import "./openai-handler.js";
|
|
24
|
+
import "./gemini-handler.js";
|
|
25
|
+
export { GenericHandler } from "./generic-handler.js";
|
|
26
|
+
export { ClaudeHandler } from "./claude-handler.js";
|
|
27
|
+
export { OpenAIHandler } from "./openai-handler.js";
|
|
28
|
+
export { GeminiHandler } from "./gemini-handler.js";
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EACL,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,gCAAgC,CAAC;AAIxC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-specific handlers for LLM vendors.
|
|
3
|
+
*
|
|
4
|
+
* This package provides vendor-specific customization for different LLM providers
|
|
5
|
+
* (Claude, OpenAI, Gemini, etc.) to optimize API calls and response handling.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ProviderHandlerRegistry } from "@mcpmesh/sdk/provider-handlers";
|
|
10
|
+
*
|
|
11
|
+
* const handler = ProviderHandlerRegistry.getHandler("anthropic");
|
|
12
|
+
* const request = handler.prepareRequest(messages, tools, outputSchema);
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Based on Python's provider_handlers package:
|
|
16
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/
|
|
17
|
+
*/
|
|
18
|
+
export { convertMessagesToVercelFormat } from "./provider-handler.js";
|
|
19
|
+
// Export registry
|
|
20
|
+
export { ProviderHandlerRegistry, } from "./provider-handler-registry.js";
|
|
21
|
+
// Import handlers to trigger their self-registration
|
|
22
|
+
// Order matters: generic-handler sets fallback, then specific handlers register
|
|
23
|
+
import "./generic-handler.js";
|
|
24
|
+
import "./claude-handler.js";
|
|
25
|
+
import "./openai-handler.js";
|
|
26
|
+
import "./gemini-handler.js";
|
|
27
|
+
// Re-export handler classes for direct use or extension
|
|
28
|
+
export { GenericHandler } from "./generic-handler.js";
|
|
29
|
+
export { ClaudeHandler } from "./claude-handler.js";
|
|
30
|
+
export { OpenAIHandler } from "./openai-handler.js";
|
|
31
|
+
export { GeminiHandler } from "./gemini-handler.js";
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE,kBAAkB;AAClB,OAAO,EACL,uBAAuB,GAExB,MAAM,gCAAgC,CAAC;AAExC,qDAAqD;AACrD,gFAAgF;AAChF,OAAO,sBAAsB,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAE7B,wDAAwD;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI provider handler.
|
|
3
|
+
*
|
|
4
|
+
* Optimized for OpenAI models (GPT-4, GPT-4 Turbo, GPT-3.5-turbo)
|
|
5
|
+
* using OpenAI's native structured output capabilities.
|
|
6
|
+
*
|
|
7
|
+
* Based on Python's OpenAIHandler:
|
|
8
|
+
* src/runtime/python/_mcp_mesh/engine/provider_handlers/openai_handler.py
|
|
9
|
+
*/
|
|
10
|
+
import type { LlmMessage } from "../types.js";
|
|
11
|
+
import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type OutputSchema, type PreparedRequest, type OutputMode } from "./provider-handler.js";
|
|
12
|
+
/**
|
|
13
|
+
* Provider handler for OpenAI models.
|
|
14
|
+
*
|
|
15
|
+
* OpenAI Characteristics:
|
|
16
|
+
* - Native structured output via response_format parameter
|
|
17
|
+
* - Strict JSON schema enforcement
|
|
18
|
+
* - Built-in function calling
|
|
19
|
+
* - Works best with concise, focused prompts
|
|
20
|
+
* - response_format ensures valid JSON matching schema
|
|
21
|
+
*
|
|
22
|
+
* Key Difference from Claude:
|
|
23
|
+
* - Uses response_format instead of prompt-based JSON instructions
|
|
24
|
+
* - OpenAI API guarantees JSON schema compliance
|
|
25
|
+
* - More strict parsing, less tolerance for malformed JSON
|
|
26
|
+
* - Shorter system prompts work better
|
|
27
|
+
*
|
|
28
|
+
* Supported Models:
|
|
29
|
+
* - gpt-4-turbo-preview and later
|
|
30
|
+
* - gpt-4-0125-preview and later
|
|
31
|
+
* - gpt-3.5-turbo-0125 and later
|
|
32
|
+
* - All gpt-4o models
|
|
33
|
+
*
|
|
34
|
+
* Reference: https://platform.openai.com/docs/guides/structured-outputs
|
|
35
|
+
*/
|
|
36
|
+
export declare class OpenAIHandler implements ProviderHandler {
|
|
37
|
+
readonly vendor = "openai";
|
|
38
|
+
/**
|
|
39
|
+
* Prepare request parameters for OpenAI API with structured output.
|
|
40
|
+
*
|
|
41
|
+
* OpenAI Strategy:
|
|
42
|
+
* - Use response_format parameter for guaranteed JSON schema compliance
|
|
43
|
+
* - This is the KEY difference from Claude handler
|
|
44
|
+
* - response_format.json_schema ensures the response matches output schema
|
|
45
|
+
* - Skip structured output for text mode (string return types)
|
|
46
|
+
*
|
|
47
|
+
* Message Format (OpenAI-specific):
|
|
48
|
+
* - Assistant messages with tool_calls → content blocks with type "tool-call"
|
|
49
|
+
* - Tool result messages → content blocks with type "tool-result"
|
|
50
|
+
* This is required for Vercel AI SDK to properly convert to OpenAI's native format.
|
|
51
|
+
*/
|
|
52
|
+
prepareRequest(messages: LlmMessage[], tools: ToolSchema[] | null, outputSchema: OutputSchema | null, options?: {
|
|
53
|
+
outputMode?: OutputMode;
|
|
54
|
+
temperature?: number;
|
|
55
|
+
maxOutputTokens?: number;
|
|
56
|
+
topP?: number;
|
|
57
|
+
[key: string]: unknown;
|
|
58
|
+
}): PreparedRequest;
|
|
59
|
+
/**
|
|
60
|
+
* Format system prompt for OpenAI (concise approach).
|
|
61
|
+
*
|
|
62
|
+
* OpenAI Strategy:
|
|
63
|
+
* 1. Use base prompt as-is
|
|
64
|
+
* 2. Add tool calling instructions if tools present
|
|
65
|
+
* 3. NO JSON schema instructions (response_format handles this)
|
|
66
|
+
* 4. Keep prompt concise - OpenAI works well with shorter prompts
|
|
67
|
+
* 5. Skip JSON note for text mode (string return type)
|
|
68
|
+
*
|
|
69
|
+
* Key Difference from Claude:
|
|
70
|
+
* - No JSON schema in prompt (response_format ensures compliance)
|
|
71
|
+
* - Shorter, more focused instructions
|
|
72
|
+
* - Let response_format handle output structure
|
|
73
|
+
*/
|
|
74
|
+
formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
|
|
75
|
+
/**
|
|
76
|
+
* Return OpenAI-specific capabilities.
|
|
77
|
+
*/
|
|
78
|
+
getCapabilities(): VendorCapabilities;
|
|
79
|
+
/**
|
|
80
|
+
* Determine output mode - OpenAI always uses strict mode for schemas.
|
|
81
|
+
*
|
|
82
|
+
* Uses the default implementation since OpenAI has excellent structured output support.
|
|
83
|
+
*/
|
|
84
|
+
determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=openai-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/openai-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,YAAY;IAE3B;;;;;;;;;;;;;OAaG;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;IAyDlB;;;;;;;;;;;;;;OAcG;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;IA2BT;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;OAIG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAGd"}
|