@yourgpt/llm-sdk 2.5.1-beta.0 → 2.5.1-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/README.md +19 -1
- package/dist/adapters/index.d.mts +4 -4
- package/dist/adapters/index.d.ts +4 -4
- package/dist/adapters/index.js +139 -12
- package/dist/adapters/index.mjs +139 -12
- package/dist/{base-tNgbBaSo.d.mts → base-BYQKp9TW.d.mts} +5 -1
- package/dist/{base-C58Dsr9p.d.ts → base-Cxq3ni0t.d.ts} +5 -1
- package/dist/fallback/index.d.mts +4 -4
- package/dist/fallback/index.d.ts +4 -4
- package/dist/index.d.mts +60 -8
- package/dist/index.d.ts +60 -8
- package/dist/index.js +59 -0
- package/dist/index.mjs +59 -0
- package/dist/providers/anthropic/index.d.mts +3 -3
- package/dist/providers/anthropic/index.d.ts +3 -3
- package/dist/providers/anthropic/index.js +91 -10
- package/dist/providers/anthropic/index.mjs +91 -10
- package/dist/providers/azure/index.d.mts +3 -3
- package/dist/providers/azure/index.d.ts +3 -3
- package/dist/providers/fireworks/index.d.mts +1 -1
- package/dist/providers/fireworks/index.d.ts +1 -1
- package/dist/providers/google/index.d.mts +3 -3
- package/dist/providers/google/index.d.ts +3 -3
- package/dist/providers/google/index.js +51 -2
- package/dist/providers/google/index.mjs +51 -2
- package/dist/providers/ollama/index.d.mts +4 -4
- package/dist/providers/ollama/index.d.ts +4 -4
- package/dist/providers/openai/index.d.mts +3 -3
- package/dist/providers/openai/index.d.ts +3 -3
- package/dist/providers/openai/index.js +51 -2
- package/dist/providers/openai/index.mjs +51 -2
- package/dist/providers/openrouter/index.d.mts +3 -3
- package/dist/providers/openrouter/index.d.ts +3 -3
- package/dist/providers/openrouter/index.js +51 -2
- package/dist/providers/openrouter/index.mjs +51 -2
- package/dist/providers/togetherai/index.d.mts +3 -3
- package/dist/providers/togetherai/index.d.ts +3 -3
- package/dist/providers/togetherai/index.js +51 -2
- package/dist/providers/togetherai/index.mjs +51 -2
- package/dist/providers/xai/index.d.mts +3 -3
- package/dist/providers/xai/index.d.ts +3 -3
- package/dist/providers/xai/index.js +51 -2
- package/dist/providers/xai/index.mjs +51 -2
- package/dist/{types-BSSiJW2o.d.mts → types-BvkiJ1dd.d.mts} +2 -2
- package/dist/{types-CCxPmkmK.d.ts → types-ChORafYS.d.ts} +1 -1
- package/dist/{types-BkQCSiIt.d.mts → types-D774b0dg.d.mts} +57 -2
- package/dist/{types-BkQCSiIt.d.ts → types-D774b0dg.d.ts} +57 -2
- package/dist/{types-BQ31QIsA.d.ts → types-TMilS-Dz.d.ts} +2 -2
- package/dist/{types-B6dhnguR.d.mts → types-mwMhCwOq.d.mts} +1 -1
- package/dist/yourgpt/index.d.mts +1 -1
- package/dist/yourgpt/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -132,6 +132,33 @@ function toOpenAIResponsesTextFormat(rf) {
|
|
|
132
132
|
strict: rf.json_schema.strict ?? true
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
+
function toOpenAIResponsesMcpTools(mcpServers) {
|
|
136
|
+
if (!mcpServers || mcpServers.length === 0) return [];
|
|
137
|
+
return mcpServers.map((mcp) => ({
|
|
138
|
+
type: "mcp",
|
|
139
|
+
server_label: mcp.label,
|
|
140
|
+
server_url: mcp.url,
|
|
141
|
+
...mcp.headers ? { headers: mcp.headers } : {},
|
|
142
|
+
...mcp.allowedTools ? { allowed_tools: mcp.allowedTools } : {},
|
|
143
|
+
require_approval: mcp.requireApproval ?? "never"
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
function isStringEffort(effort) {
|
|
147
|
+
return typeof effort === "string" && (effort === "minimal" || effort === "low" || effort === "medium" || effort === "high");
|
|
148
|
+
}
|
|
149
|
+
function toOpenAIReasoning(effort) {
|
|
150
|
+
if (!effort) return void 0;
|
|
151
|
+
if (typeof effort === "object" && "raw" in effort) return effort.raw;
|
|
152
|
+
if (typeof effort === "object" && "budgetTokens" in effort) {
|
|
153
|
+
const budget = effort.budgetTokens;
|
|
154
|
+
const mapped = budget >= 16e3 ? "high" : budget >= 8e3 ? "medium" : "low";
|
|
155
|
+
return { effort: mapped, summary: "auto" };
|
|
156
|
+
}
|
|
157
|
+
if (isStringEffort(effort)) {
|
|
158
|
+
return { effort, summary: "auto" };
|
|
159
|
+
}
|
|
160
|
+
return void 0;
|
|
161
|
+
}
|
|
135
162
|
function formatTools(actions) {
|
|
136
163
|
return actions.map((action) => ({
|
|
137
164
|
type: "function",
|
|
@@ -525,6 +552,14 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
525
552
|
return this.client;
|
|
526
553
|
}
|
|
527
554
|
shouldUseResponsesApi(request) {
|
|
555
|
+
if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
|
|
556
|
+
if (this.provider !== "openai" && this.provider !== "azure") {
|
|
557
|
+
throw new Error(
|
|
558
|
+
`[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
|
|
559
|
+
);
|
|
560
|
+
}
|
|
561
|
+
return true;
|
|
562
|
+
}
|
|
528
563
|
return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
|
|
529
564
|
}
|
|
530
565
|
buildResponsesInput(request) {
|
|
@@ -585,7 +620,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
585
620
|
strict: true,
|
|
586
621
|
defer_loading: tool.deferLoading === true
|
|
587
622
|
}));
|
|
588
|
-
return [{ type: "tool_search" }, ...nativeTools];
|
|
623
|
+
return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
|
|
589
624
|
}
|
|
590
625
|
parseResponsesResult(response) {
|
|
591
626
|
const content = typeof response?.output_text === "string" ? response.output_text : "";
|
|
@@ -617,16 +652,30 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
617
652
|
const responsesTextFormat = toOpenAIResponsesTextFormat(
|
|
618
653
|
request.config?.responseFormat
|
|
619
654
|
);
|
|
655
|
+
const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
|
|
656
|
+
const modelId = request.config?.model || this.model;
|
|
657
|
+
const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
|
|
658
|
+
if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
|
|
659
|
+
console.warn(
|
|
660
|
+
`[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
|
|
661
|
+
);
|
|
662
|
+
}
|
|
663
|
+
const functionTools = this.buildResponsesTools(
|
|
664
|
+
request.toolDefinitions ?? []
|
|
665
|
+
);
|
|
666
|
+
const tools = [...functionTools, ...mcpTools];
|
|
620
667
|
const payload = {
|
|
621
668
|
model: request.config?.model || this.model,
|
|
622
669
|
instructions: request.systemPrompt,
|
|
623
670
|
input: this.buildResponsesInput(request),
|
|
624
|
-
tools:
|
|
671
|
+
tools: tools.length > 0 ? tools : void 0,
|
|
625
672
|
tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
|
|
626
673
|
parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
|
|
627
674
|
temperature: request.config?.temperature ?? this.config.temperature,
|
|
628
675
|
max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
|
|
629
676
|
...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
|
|
677
|
+
...reasoning ? { reasoning } : {},
|
|
678
|
+
store: false,
|
|
630
679
|
stream: false
|
|
631
680
|
};
|
|
632
681
|
logProviderPayload("openai", "request payload", payload, request.debug);
|
|
@@ -130,6 +130,33 @@ function toOpenAIResponsesTextFormat(rf) {
|
|
|
130
130
|
strict: rf.json_schema.strict ?? true
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
|
+
function toOpenAIResponsesMcpTools(mcpServers) {
|
|
134
|
+
if (!mcpServers || mcpServers.length === 0) return [];
|
|
135
|
+
return mcpServers.map((mcp) => ({
|
|
136
|
+
type: "mcp",
|
|
137
|
+
server_label: mcp.label,
|
|
138
|
+
server_url: mcp.url,
|
|
139
|
+
...mcp.headers ? { headers: mcp.headers } : {},
|
|
140
|
+
...mcp.allowedTools ? { allowed_tools: mcp.allowedTools } : {},
|
|
141
|
+
require_approval: mcp.requireApproval ?? "never"
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
function isStringEffort(effort) {
|
|
145
|
+
return typeof effort === "string" && (effort === "minimal" || effort === "low" || effort === "medium" || effort === "high");
|
|
146
|
+
}
|
|
147
|
+
function toOpenAIReasoning(effort) {
|
|
148
|
+
if (!effort) return void 0;
|
|
149
|
+
if (typeof effort === "object" && "raw" in effort) return effort.raw;
|
|
150
|
+
if (typeof effort === "object" && "budgetTokens" in effort) {
|
|
151
|
+
const budget = effort.budgetTokens;
|
|
152
|
+
const mapped = budget >= 16e3 ? "high" : budget >= 8e3 ? "medium" : "low";
|
|
153
|
+
return { effort: mapped, summary: "auto" };
|
|
154
|
+
}
|
|
155
|
+
if (isStringEffort(effort)) {
|
|
156
|
+
return { effort, summary: "auto" };
|
|
157
|
+
}
|
|
158
|
+
return void 0;
|
|
159
|
+
}
|
|
133
160
|
function formatTools(actions) {
|
|
134
161
|
return actions.map((action) => ({
|
|
135
162
|
type: "function",
|
|
@@ -523,6 +550,14 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
523
550
|
return this.client;
|
|
524
551
|
}
|
|
525
552
|
shouldUseResponsesApi(request) {
|
|
553
|
+
if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
|
|
554
|
+
if (this.provider !== "openai" && this.provider !== "azure") {
|
|
555
|
+
throw new Error(
|
|
556
|
+
`[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
return true;
|
|
560
|
+
}
|
|
526
561
|
return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
|
|
527
562
|
}
|
|
528
563
|
buildResponsesInput(request) {
|
|
@@ -583,7 +618,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
583
618
|
strict: true,
|
|
584
619
|
defer_loading: tool.deferLoading === true
|
|
585
620
|
}));
|
|
586
|
-
return [{ type: "tool_search" }, ...nativeTools];
|
|
621
|
+
return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
|
|
587
622
|
}
|
|
588
623
|
parseResponsesResult(response) {
|
|
589
624
|
const content = typeof response?.output_text === "string" ? response.output_text : "";
|
|
@@ -615,16 +650,30 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
615
650
|
const responsesTextFormat = toOpenAIResponsesTextFormat(
|
|
616
651
|
request.config?.responseFormat
|
|
617
652
|
);
|
|
653
|
+
const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
|
|
654
|
+
const modelId = request.config?.model || this.model;
|
|
655
|
+
const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
|
|
656
|
+
if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
|
|
657
|
+
console.warn(
|
|
658
|
+
`[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
|
|
659
|
+
);
|
|
660
|
+
}
|
|
661
|
+
const functionTools = this.buildResponsesTools(
|
|
662
|
+
request.toolDefinitions ?? []
|
|
663
|
+
);
|
|
664
|
+
const tools = [...functionTools, ...mcpTools];
|
|
618
665
|
const payload = {
|
|
619
666
|
model: request.config?.model || this.model,
|
|
620
667
|
instructions: request.systemPrompt,
|
|
621
668
|
input: this.buildResponsesInput(request),
|
|
622
|
-
tools:
|
|
669
|
+
tools: tools.length > 0 ? tools : void 0,
|
|
623
670
|
tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
|
|
624
671
|
parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
|
|
625
672
|
temperature: request.config?.temperature ?? this.config.temperature,
|
|
626
673
|
max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
|
|
627
674
|
...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
|
|
675
|
+
...reasoning ? { reasoning } : {},
|
|
676
|
+
store: false,
|
|
628
677
|
stream: false
|
|
629
678
|
};
|
|
630
679
|
logProviderPayload("openai", "request payload", payload, request.debug);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L as LanguageModel } from '../../types-
|
|
2
|
-
import { A as AIProvider } from '../../types-
|
|
1
|
+
import { L as LanguageModel } from '../../types-D774b0dg.mjs';
|
|
2
|
+
import { A as AIProvider } from '../../types-BvkiJ1dd.mjs';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
4
|
+
import '../../base-BYQKp9TW.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Together AI Provider
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L as LanguageModel } from '../../types-
|
|
2
|
-
import { A as AIProvider } from '../../types-
|
|
1
|
+
import { L as LanguageModel } from '../../types-D774b0dg.js';
|
|
2
|
+
import { A as AIProvider } from '../../types-TMilS-Dz.js';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
4
|
+
import '../../base-Cxq3ni0t.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Together AI Provider
|
|
@@ -132,6 +132,33 @@ function toOpenAIResponsesTextFormat(rf) {
|
|
|
132
132
|
strict: rf.json_schema.strict ?? true
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
+
function toOpenAIResponsesMcpTools(mcpServers) {
|
|
136
|
+
if (!mcpServers || mcpServers.length === 0) return [];
|
|
137
|
+
return mcpServers.map((mcp) => ({
|
|
138
|
+
type: "mcp",
|
|
139
|
+
server_label: mcp.label,
|
|
140
|
+
server_url: mcp.url,
|
|
141
|
+
...mcp.headers ? { headers: mcp.headers } : {},
|
|
142
|
+
...mcp.allowedTools ? { allowed_tools: mcp.allowedTools } : {},
|
|
143
|
+
require_approval: mcp.requireApproval ?? "never"
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
function isStringEffort(effort) {
|
|
147
|
+
return typeof effort === "string" && (effort === "minimal" || effort === "low" || effort === "medium" || effort === "high");
|
|
148
|
+
}
|
|
149
|
+
function toOpenAIReasoning(effort) {
|
|
150
|
+
if (!effort) return void 0;
|
|
151
|
+
if (typeof effort === "object" && "raw" in effort) return effort.raw;
|
|
152
|
+
if (typeof effort === "object" && "budgetTokens" in effort) {
|
|
153
|
+
const budget = effort.budgetTokens;
|
|
154
|
+
const mapped = budget >= 16e3 ? "high" : budget >= 8e3 ? "medium" : "low";
|
|
155
|
+
return { effort: mapped, summary: "auto" };
|
|
156
|
+
}
|
|
157
|
+
if (isStringEffort(effort)) {
|
|
158
|
+
return { effort, summary: "auto" };
|
|
159
|
+
}
|
|
160
|
+
return void 0;
|
|
161
|
+
}
|
|
135
162
|
function formatTools(actions) {
|
|
136
163
|
return actions.map((action) => ({
|
|
137
164
|
type: "function",
|
|
@@ -477,6 +504,14 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
477
504
|
return this.client;
|
|
478
505
|
}
|
|
479
506
|
shouldUseResponsesApi(request) {
|
|
507
|
+
if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
|
|
508
|
+
if (this.provider !== "openai" && this.provider !== "azure") {
|
|
509
|
+
throw new Error(
|
|
510
|
+
`[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
return true;
|
|
514
|
+
}
|
|
480
515
|
return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
|
|
481
516
|
}
|
|
482
517
|
buildResponsesInput(request) {
|
|
@@ -537,7 +572,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
537
572
|
strict: true,
|
|
538
573
|
defer_loading: tool.deferLoading === true
|
|
539
574
|
}));
|
|
540
|
-
return [{ type: "tool_search" }, ...nativeTools];
|
|
575
|
+
return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
|
|
541
576
|
}
|
|
542
577
|
parseResponsesResult(response) {
|
|
543
578
|
const content = typeof response?.output_text === "string" ? response.output_text : "";
|
|
@@ -569,16 +604,30 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
569
604
|
const responsesTextFormat = toOpenAIResponsesTextFormat(
|
|
570
605
|
request.config?.responseFormat
|
|
571
606
|
);
|
|
607
|
+
const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
|
|
608
|
+
const modelId = request.config?.model || this.model;
|
|
609
|
+
const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
|
|
610
|
+
if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
|
|
611
|
+
console.warn(
|
|
612
|
+
`[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
|
|
613
|
+
);
|
|
614
|
+
}
|
|
615
|
+
const functionTools = this.buildResponsesTools(
|
|
616
|
+
request.toolDefinitions ?? []
|
|
617
|
+
);
|
|
618
|
+
const tools = [...functionTools, ...mcpTools];
|
|
572
619
|
const payload = {
|
|
573
620
|
model: request.config?.model || this.model,
|
|
574
621
|
instructions: request.systemPrompt,
|
|
575
622
|
input: this.buildResponsesInput(request),
|
|
576
|
-
tools:
|
|
623
|
+
tools: tools.length > 0 ? tools : void 0,
|
|
577
624
|
tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
|
|
578
625
|
parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
|
|
579
626
|
temperature: request.config?.temperature ?? this.config.temperature,
|
|
580
627
|
max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
|
|
581
628
|
...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
|
|
629
|
+
...reasoning ? { reasoning } : {},
|
|
630
|
+
store: false,
|
|
582
631
|
stream: false
|
|
583
632
|
};
|
|
584
633
|
logProviderPayload("openai", "request payload", payload, request.debug);
|
|
@@ -130,6 +130,33 @@ function toOpenAIResponsesTextFormat(rf) {
|
|
|
130
130
|
strict: rf.json_schema.strict ?? true
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
|
+
function toOpenAIResponsesMcpTools(mcpServers) {
|
|
134
|
+
if (!mcpServers || mcpServers.length === 0) return [];
|
|
135
|
+
return mcpServers.map((mcp) => ({
|
|
136
|
+
type: "mcp",
|
|
137
|
+
server_label: mcp.label,
|
|
138
|
+
server_url: mcp.url,
|
|
139
|
+
...mcp.headers ? { headers: mcp.headers } : {},
|
|
140
|
+
...mcp.allowedTools ? { allowed_tools: mcp.allowedTools } : {},
|
|
141
|
+
require_approval: mcp.requireApproval ?? "never"
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
function isStringEffort(effort) {
|
|
145
|
+
return typeof effort === "string" && (effort === "minimal" || effort === "low" || effort === "medium" || effort === "high");
|
|
146
|
+
}
|
|
147
|
+
function toOpenAIReasoning(effort) {
|
|
148
|
+
if (!effort) return void 0;
|
|
149
|
+
if (typeof effort === "object" && "raw" in effort) return effort.raw;
|
|
150
|
+
if (typeof effort === "object" && "budgetTokens" in effort) {
|
|
151
|
+
const budget = effort.budgetTokens;
|
|
152
|
+
const mapped = budget >= 16e3 ? "high" : budget >= 8e3 ? "medium" : "low";
|
|
153
|
+
return { effort: mapped, summary: "auto" };
|
|
154
|
+
}
|
|
155
|
+
if (isStringEffort(effort)) {
|
|
156
|
+
return { effort, summary: "auto" };
|
|
157
|
+
}
|
|
158
|
+
return void 0;
|
|
159
|
+
}
|
|
133
160
|
function formatTools(actions) {
|
|
134
161
|
return actions.map((action) => ({
|
|
135
162
|
type: "function",
|
|
@@ -475,6 +502,14 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
475
502
|
return this.client;
|
|
476
503
|
}
|
|
477
504
|
shouldUseResponsesApi(request) {
|
|
505
|
+
if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
|
|
506
|
+
if (this.provider !== "openai" && this.provider !== "azure") {
|
|
507
|
+
throw new Error(
|
|
508
|
+
`[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
|
|
509
|
+
);
|
|
510
|
+
}
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
478
513
|
return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
|
|
479
514
|
}
|
|
480
515
|
buildResponsesInput(request) {
|
|
@@ -535,7 +570,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
535
570
|
strict: true,
|
|
536
571
|
defer_loading: tool.deferLoading === true
|
|
537
572
|
}));
|
|
538
|
-
return [{ type: "tool_search" }, ...nativeTools];
|
|
573
|
+
return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
|
|
539
574
|
}
|
|
540
575
|
parseResponsesResult(response) {
|
|
541
576
|
const content = typeof response?.output_text === "string" ? response.output_text : "";
|
|
@@ -567,16 +602,30 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
567
602
|
const responsesTextFormat = toOpenAIResponsesTextFormat(
|
|
568
603
|
request.config?.responseFormat
|
|
569
604
|
);
|
|
605
|
+
const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
|
|
606
|
+
const modelId = request.config?.model || this.model;
|
|
607
|
+
const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
|
|
608
|
+
if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
|
|
609
|
+
console.warn(
|
|
610
|
+
`[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
|
|
611
|
+
);
|
|
612
|
+
}
|
|
613
|
+
const functionTools = this.buildResponsesTools(
|
|
614
|
+
request.toolDefinitions ?? []
|
|
615
|
+
);
|
|
616
|
+
const tools = [...functionTools, ...mcpTools];
|
|
570
617
|
const payload = {
|
|
571
618
|
model: request.config?.model || this.model,
|
|
572
619
|
instructions: request.systemPrompt,
|
|
573
620
|
input: this.buildResponsesInput(request),
|
|
574
|
-
tools:
|
|
621
|
+
tools: tools.length > 0 ? tools : void 0,
|
|
575
622
|
tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
|
|
576
623
|
parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
|
|
577
624
|
temperature: request.config?.temperature ?? this.config.temperature,
|
|
578
625
|
max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
|
|
579
626
|
...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
|
|
627
|
+
...reasoning ? { reasoning } : {},
|
|
628
|
+
store: false,
|
|
580
629
|
stream: false
|
|
581
630
|
};
|
|
582
631
|
logProviderPayload("openai", "request payload", payload, request.debug);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L as LanguageModel } from '../../types-
|
|
2
|
-
import { X as XAIProviderConfig, A as AIProvider } from '../../types-
|
|
1
|
+
import { L as LanguageModel } from '../../types-D774b0dg.mjs';
|
|
2
|
+
import { X as XAIProviderConfig, A as AIProvider } from '../../types-BvkiJ1dd.mjs';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
4
|
+
import '../../base-BYQKp9TW.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* xAI Provider - Modern Pattern
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L as LanguageModel } from '../../types-
|
|
2
|
-
import { X as XAIProviderConfig, A as AIProvider } from '../../types-
|
|
1
|
+
import { L as LanguageModel } from '../../types-D774b0dg.js';
|
|
2
|
+
import { X as XAIProviderConfig, A as AIProvider } from '../../types-TMilS-Dz.js';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
4
|
+
import '../../base-Cxq3ni0t.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* xAI Provider - Modern Pattern
|
|
@@ -132,6 +132,33 @@ function toOpenAIResponsesTextFormat(rf) {
|
|
|
132
132
|
strict: rf.json_schema.strict ?? true
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
+
function toOpenAIResponsesMcpTools(mcpServers) {
|
|
136
|
+
if (!mcpServers || mcpServers.length === 0) return [];
|
|
137
|
+
return mcpServers.map((mcp) => ({
|
|
138
|
+
type: "mcp",
|
|
139
|
+
server_label: mcp.label,
|
|
140
|
+
server_url: mcp.url,
|
|
141
|
+
...mcp.headers ? { headers: mcp.headers } : {},
|
|
142
|
+
...mcp.allowedTools ? { allowed_tools: mcp.allowedTools } : {},
|
|
143
|
+
require_approval: mcp.requireApproval ?? "never"
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
function isStringEffort(effort) {
|
|
147
|
+
return typeof effort === "string" && (effort === "minimal" || effort === "low" || effort === "medium" || effort === "high");
|
|
148
|
+
}
|
|
149
|
+
function toOpenAIReasoning(effort) {
|
|
150
|
+
if (!effort) return void 0;
|
|
151
|
+
if (typeof effort === "object" && "raw" in effort) return effort.raw;
|
|
152
|
+
if (typeof effort === "object" && "budgetTokens" in effort) {
|
|
153
|
+
const budget = effort.budgetTokens;
|
|
154
|
+
const mapped = budget >= 16e3 ? "high" : budget >= 8e3 ? "medium" : "low";
|
|
155
|
+
return { effort: mapped, summary: "auto" };
|
|
156
|
+
}
|
|
157
|
+
if (isStringEffort(effort)) {
|
|
158
|
+
return { effort, summary: "auto" };
|
|
159
|
+
}
|
|
160
|
+
return void 0;
|
|
161
|
+
}
|
|
135
162
|
function formatTools(actions) {
|
|
136
163
|
return actions.map((action) => ({
|
|
137
164
|
type: "function",
|
|
@@ -501,6 +528,14 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
501
528
|
return this.client;
|
|
502
529
|
}
|
|
503
530
|
shouldUseResponsesApi(request) {
|
|
531
|
+
if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
|
|
532
|
+
if (this.provider !== "openai" && this.provider !== "azure") {
|
|
533
|
+
throw new Error(
|
|
534
|
+
`[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
return true;
|
|
538
|
+
}
|
|
504
539
|
return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
|
|
505
540
|
}
|
|
506
541
|
buildResponsesInput(request) {
|
|
@@ -561,7 +596,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
561
596
|
strict: true,
|
|
562
597
|
defer_loading: tool.deferLoading === true
|
|
563
598
|
}));
|
|
564
|
-
return [{ type: "tool_search" }, ...nativeTools];
|
|
599
|
+
return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
|
|
565
600
|
}
|
|
566
601
|
parseResponsesResult(response) {
|
|
567
602
|
const content = typeof response?.output_text === "string" ? response.output_text : "";
|
|
@@ -593,16 +628,30 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
593
628
|
const responsesTextFormat = toOpenAIResponsesTextFormat(
|
|
594
629
|
request.config?.responseFormat
|
|
595
630
|
);
|
|
631
|
+
const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
|
|
632
|
+
const modelId = request.config?.model || this.model;
|
|
633
|
+
const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
|
|
634
|
+
if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
|
|
635
|
+
console.warn(
|
|
636
|
+
`[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
const functionTools = this.buildResponsesTools(
|
|
640
|
+
request.toolDefinitions ?? []
|
|
641
|
+
);
|
|
642
|
+
const tools = [...functionTools, ...mcpTools];
|
|
596
643
|
const payload = {
|
|
597
644
|
model: request.config?.model || this.model,
|
|
598
645
|
instructions: request.systemPrompt,
|
|
599
646
|
input: this.buildResponsesInput(request),
|
|
600
|
-
tools:
|
|
647
|
+
tools: tools.length > 0 ? tools : void 0,
|
|
601
648
|
tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
|
|
602
649
|
parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
|
|
603
650
|
temperature: request.config?.temperature ?? this.config.temperature,
|
|
604
651
|
max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
|
|
605
652
|
...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
|
|
653
|
+
...reasoning ? { reasoning } : {},
|
|
654
|
+
store: false,
|
|
606
655
|
stream: false
|
|
607
656
|
};
|
|
608
657
|
logProviderPayload("openai", "request payload", payload, request.debug);
|
|
@@ -130,6 +130,33 @@ function toOpenAIResponsesTextFormat(rf) {
|
|
|
130
130
|
strict: rf.json_schema.strict ?? true
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
|
+
function toOpenAIResponsesMcpTools(mcpServers) {
|
|
134
|
+
if (!mcpServers || mcpServers.length === 0) return [];
|
|
135
|
+
return mcpServers.map((mcp) => ({
|
|
136
|
+
type: "mcp",
|
|
137
|
+
server_label: mcp.label,
|
|
138
|
+
server_url: mcp.url,
|
|
139
|
+
...mcp.headers ? { headers: mcp.headers } : {},
|
|
140
|
+
...mcp.allowedTools ? { allowed_tools: mcp.allowedTools } : {},
|
|
141
|
+
require_approval: mcp.requireApproval ?? "never"
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
function isStringEffort(effort) {
|
|
145
|
+
return typeof effort === "string" && (effort === "minimal" || effort === "low" || effort === "medium" || effort === "high");
|
|
146
|
+
}
|
|
147
|
+
function toOpenAIReasoning(effort) {
|
|
148
|
+
if (!effort) return void 0;
|
|
149
|
+
if (typeof effort === "object" && "raw" in effort) return effort.raw;
|
|
150
|
+
if (typeof effort === "object" && "budgetTokens" in effort) {
|
|
151
|
+
const budget = effort.budgetTokens;
|
|
152
|
+
const mapped = budget >= 16e3 ? "high" : budget >= 8e3 ? "medium" : "low";
|
|
153
|
+
return { effort: mapped, summary: "auto" };
|
|
154
|
+
}
|
|
155
|
+
if (isStringEffort(effort)) {
|
|
156
|
+
return { effort, summary: "auto" };
|
|
157
|
+
}
|
|
158
|
+
return void 0;
|
|
159
|
+
}
|
|
133
160
|
function formatTools(actions) {
|
|
134
161
|
return actions.map((action) => ({
|
|
135
162
|
type: "function",
|
|
@@ -499,6 +526,14 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
499
526
|
return this.client;
|
|
500
527
|
}
|
|
501
528
|
shouldUseResponsesApi(request) {
|
|
529
|
+
if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
|
|
530
|
+
if (this.provider !== "openai" && this.provider !== "azure") {
|
|
531
|
+
throw new Error(
|
|
532
|
+
`[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
502
537
|
return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
|
|
503
538
|
}
|
|
504
539
|
buildResponsesInput(request) {
|
|
@@ -559,7 +594,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
559
594
|
strict: true,
|
|
560
595
|
defer_loading: tool.deferLoading === true
|
|
561
596
|
}));
|
|
562
|
-
return [{ type: "tool_search" }, ...nativeTools];
|
|
597
|
+
return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
|
|
563
598
|
}
|
|
564
599
|
parseResponsesResult(response) {
|
|
565
600
|
const content = typeof response?.output_text === "string" ? response.output_text : "";
|
|
@@ -591,16 +626,30 @@ var OpenAIAdapter = class _OpenAIAdapter {
|
|
|
591
626
|
const responsesTextFormat = toOpenAIResponsesTextFormat(
|
|
592
627
|
request.config?.responseFormat
|
|
593
628
|
);
|
|
629
|
+
const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
|
|
630
|
+
const modelId = request.config?.model || this.model;
|
|
631
|
+
const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
|
|
632
|
+
if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
|
|
633
|
+
console.warn(
|
|
634
|
+
`[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
|
|
635
|
+
);
|
|
636
|
+
}
|
|
637
|
+
const functionTools = this.buildResponsesTools(
|
|
638
|
+
request.toolDefinitions ?? []
|
|
639
|
+
);
|
|
640
|
+
const tools = [...functionTools, ...mcpTools];
|
|
594
641
|
const payload = {
|
|
595
642
|
model: request.config?.model || this.model,
|
|
596
643
|
instructions: request.systemPrompt,
|
|
597
644
|
input: this.buildResponsesInput(request),
|
|
598
|
-
tools:
|
|
645
|
+
tools: tools.length > 0 ? tools : void 0,
|
|
599
646
|
tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
|
|
600
647
|
parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
|
|
601
648
|
temperature: request.config?.temperature ?? this.config.temperature,
|
|
602
649
|
max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
|
|
603
650
|
...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
|
|
651
|
+
...reasoning ? { reasoning } : {},
|
|
652
|
+
store: false,
|
|
604
653
|
stream: false
|
|
605
654
|
};
|
|
606
655
|
logProviderPayload("openai", "request payload", payload, request.debug);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as ToolDefinition,
|
|
2
|
-
import { L as LLMAdapter } from './base-
|
|
1
|
+
import { d as ToolDefinition, $ as UnifiedToolCall, a0 as UnifiedToolResult } from './types-D774b0dg.mjs';
|
|
2
|
+
import { L as LLMAdapter } from './base-BYQKp9TW.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Provider Types
|