@yourgpt/llm-sdk 2.5.1-beta.1 → 2.5.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +1 -19
  2. package/dist/adapters/index.d.mts +4 -4
  3. package/dist/adapters/index.d.ts +4 -4
  4. package/dist/adapters/index.js +14 -139
  5. package/dist/adapters/index.mjs +14 -139
  6. package/dist/{base-Cxq3ni0t.d.ts → base-C58Dsr9p.d.ts} +1 -5
  7. package/dist/{base-BYQKp9TW.d.mts → base-tNgbBaSo.d.mts} +1 -5
  8. package/dist/fallback/index.d.mts +4 -4
  9. package/dist/fallback/index.d.ts +4 -4
  10. package/dist/index.d.mts +8 -60
  11. package/dist/index.d.ts +8 -60
  12. package/dist/index.js +0 -59
  13. package/dist/index.mjs +0 -59
  14. package/dist/providers/anthropic/index.d.mts +3 -3
  15. package/dist/providers/anthropic/index.d.ts +3 -3
  16. package/dist/providers/anthropic/index.js +10 -91
  17. package/dist/providers/anthropic/index.mjs +10 -91
  18. package/dist/providers/azure/index.d.mts +3 -3
  19. package/dist/providers/azure/index.d.ts +3 -3
  20. package/dist/providers/azure/index.js +1 -0
  21. package/dist/providers/azure/index.mjs +1 -0
  22. package/dist/providers/fireworks/index.d.mts +1 -1
  23. package/dist/providers/fireworks/index.d.ts +1 -1
  24. package/dist/providers/fireworks/index.js +1 -0
  25. package/dist/providers/fireworks/index.mjs +1 -0
  26. package/dist/providers/google/index.d.mts +3 -3
  27. package/dist/providers/google/index.d.ts +3 -3
  28. package/dist/providers/google/index.js +3 -51
  29. package/dist/providers/google/index.mjs +3 -51
  30. package/dist/providers/ollama/index.d.mts +4 -4
  31. package/dist/providers/ollama/index.d.ts +4 -4
  32. package/dist/providers/ollama/index.js +1 -0
  33. package/dist/providers/ollama/index.mjs +1 -0
  34. package/dist/providers/openai/index.d.mts +3 -3
  35. package/dist/providers/openai/index.d.ts +3 -3
  36. package/dist/providers/openai/index.js +3 -51
  37. package/dist/providers/openai/index.mjs +3 -51
  38. package/dist/providers/openrouter/index.d.mts +3 -3
  39. package/dist/providers/openrouter/index.d.ts +3 -3
  40. package/dist/providers/openrouter/index.js +3 -51
  41. package/dist/providers/openrouter/index.mjs +3 -51
  42. package/dist/providers/togetherai/index.d.mts +3 -3
  43. package/dist/providers/togetherai/index.d.ts +3 -3
  44. package/dist/providers/togetherai/index.js +3 -51
  45. package/dist/providers/togetherai/index.mjs +3 -51
  46. package/dist/providers/xai/index.d.mts +3 -3
  47. package/dist/providers/xai/index.d.ts +3 -3
  48. package/dist/providers/xai/index.js +3 -51
  49. package/dist/providers/xai/index.mjs +3 -51
  50. package/dist/{types-mwMhCwOq.d.mts → types-B6dhnguR.d.mts} +1 -1
  51. package/dist/{types-TMilS-Dz.d.ts → types-BQ31QIsA.d.ts} +2 -2
  52. package/dist/{types-BvkiJ1dd.d.mts → types-BSSiJW2o.d.mts} +2 -2
  53. package/dist/{types-D774b0dg.d.mts → types-BkQCSiIt.d.mts} +2 -57
  54. package/dist/{types-D774b0dg.d.ts → types-BkQCSiIt.d.ts} +2 -57
  55. package/dist/{types-ChORafYS.d.ts → types-CCxPmkmK.d.ts} +1 -1
  56. package/dist/yourgpt/index.d.mts +1 -1
  57. package/dist/yourgpt/index.d.ts +1 -1
  58. package/package.json +1 -1
@@ -112,6 +112,7 @@ function buildOpenAITokenParams(modelId, maxTokens, temperature) {
112
112
  function toOpenAIResponseFormat(rf) {
113
113
  if (!rf) return void 0;
114
114
  if (rf.type === "json_object") return { type: "json_object" };
115
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
115
116
  return {
116
117
  type: "json_schema",
117
118
  json_schema: {
@@ -130,33 +131,6 @@ function toOpenAIResponsesTextFormat(rf) {
130
131
  strict: rf.json_schema.strict ?? true
131
132
  };
132
133
  }
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
- }
160
134
  function formatTools(actions) {
161
135
  return actions.map((action) => ({
162
136
  type: "function",
@@ -564,14 +538,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
564
538
  return this.client;
565
539
  }
566
540
  shouldUseResponsesApi(request) {
567
- if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
568
- if (this.provider !== "openai" && this.provider !== "azure") {
569
- throw new Error(
570
- `[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
571
- );
572
- }
573
- return true;
574
- }
575
541
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
576
542
  }
577
543
  buildResponsesInput(request) {
@@ -632,7 +598,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
632
598
  strict: true,
633
599
  defer_loading: tool.deferLoading === true
634
600
  }));
635
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
601
+ return [{ type: "tool_search" }, ...nativeTools];
636
602
  }
637
603
  parseResponsesResult(response) {
638
604
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -664,30 +630,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
664
630
  const responsesTextFormat = toOpenAIResponsesTextFormat(
665
631
  request.config?.responseFormat
666
632
  );
667
- const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
668
- const modelId = request.config?.model || this.model;
669
- const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
670
- if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
671
- console.warn(
672
- `[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
673
- );
674
- }
675
- const functionTools = this.buildResponsesTools(
676
- request.toolDefinitions ?? []
677
- );
678
- const tools = [...functionTools, ...mcpTools];
679
633
  const payload = {
680
634
  model: request.config?.model || this.model,
681
635
  instructions: request.systemPrompt,
682
636
  input: this.buildResponsesInput(request),
683
- tools: tools.length > 0 ? tools : void 0,
637
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
684
638
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
685
639
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
686
640
  temperature: request.config?.temperature ?? this.config.temperature,
687
641
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
688
642
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
689
- ...reasoning ? { reasoning } : {},
690
- store: false,
691
643
  stream: false
692
644
  };
693
645
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.mjs';
2
- import { A as AIProvider } from '../../types-BvkiJ1dd.mjs';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.mjs';
2
+ import { A as AIProvider } from '../../types-BSSiJW2o.mjs';
3
3
  import 'zod';
4
- import '../../base-BYQKp9TW.mjs';
4
+ import '../../base-tNgbBaSo.mjs';
5
5
 
6
6
  /**
7
7
  * OpenRouter Provider - Modern Pattern
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.js';
2
- import { A as AIProvider } from '../../types-TMilS-Dz.js';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.js';
2
+ import { A as AIProvider } from '../../types-BQ31QIsA.js';
3
3
  import 'zod';
4
- import '../../base-Cxq3ni0t.js';
4
+ import '../../base-C58Dsr9p.js';
5
5
 
6
6
  /**
7
7
  * OpenRouter Provider - Modern Pattern
@@ -114,6 +114,7 @@ function buildOpenAITokenParams(modelId, maxTokens, temperature) {
114
114
  function toOpenAIResponseFormat(rf) {
115
115
  if (!rf) return void 0;
116
116
  if (rf.type === "json_object") return { type: "json_object" };
117
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
117
118
  return {
118
119
  type: "json_schema",
119
120
  json_schema: {
@@ -132,33 +133,6 @@ function toOpenAIResponsesTextFormat(rf) {
132
133
  strict: rf.json_schema.strict ?? true
133
134
  };
134
135
  }
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
- }
162
136
  function formatTools(actions) {
163
137
  return actions.map((action) => ({
164
138
  type: "function",
@@ -552,14 +526,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
552
526
  return this.client;
553
527
  }
554
528
  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
- }
563
529
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
564
530
  }
565
531
  buildResponsesInput(request) {
@@ -620,7 +586,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
620
586
  strict: true,
621
587
  defer_loading: tool.deferLoading === true
622
588
  }));
623
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
589
+ return [{ type: "tool_search" }, ...nativeTools];
624
590
  }
625
591
  parseResponsesResult(response) {
626
592
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -652,30 +618,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
652
618
  const responsesTextFormat = toOpenAIResponsesTextFormat(
653
619
  request.config?.responseFormat
654
620
  );
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];
667
621
  const payload = {
668
622
  model: request.config?.model || this.model,
669
623
  instructions: request.systemPrompt,
670
624
  input: this.buildResponsesInput(request),
671
- tools: tools.length > 0 ? tools : void 0,
625
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
672
626
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
673
627
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
674
628
  temperature: request.config?.temperature ?? this.config.temperature,
675
629
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
676
630
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
677
- ...reasoning ? { reasoning } : {},
678
- store: false,
679
631
  stream: false
680
632
  };
681
633
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -112,6 +112,7 @@ function buildOpenAITokenParams(modelId, maxTokens, temperature) {
112
112
  function toOpenAIResponseFormat(rf) {
113
113
  if (!rf) return void 0;
114
114
  if (rf.type === "json_object") return { type: "json_object" };
115
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
115
116
  return {
116
117
  type: "json_schema",
117
118
  json_schema: {
@@ -130,33 +131,6 @@ function toOpenAIResponsesTextFormat(rf) {
130
131
  strict: rf.json_schema.strict ?? true
131
132
  };
132
133
  }
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
- }
160
134
  function formatTools(actions) {
161
135
  return actions.map((action) => ({
162
136
  type: "function",
@@ -550,14 +524,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
550
524
  return this.client;
551
525
  }
552
526
  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
- }
561
527
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
562
528
  }
563
529
  buildResponsesInput(request) {
@@ -618,7 +584,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
618
584
  strict: true,
619
585
  defer_loading: tool.deferLoading === true
620
586
  }));
621
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
587
+ return [{ type: "tool_search" }, ...nativeTools];
622
588
  }
623
589
  parseResponsesResult(response) {
624
590
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -650,30 +616,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
650
616
  const responsesTextFormat = toOpenAIResponsesTextFormat(
651
617
  request.config?.responseFormat
652
618
  );
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];
665
619
  const payload = {
666
620
  model: request.config?.model || this.model,
667
621
  instructions: request.systemPrompt,
668
622
  input: this.buildResponsesInput(request),
669
- tools: tools.length > 0 ? tools : void 0,
623
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
670
624
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
671
625
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
672
626
  temperature: request.config?.temperature ?? this.config.temperature,
673
627
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
674
628
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
675
- ...reasoning ? { reasoning } : {},
676
- store: false,
677
629
  stream: false
678
630
  };
679
631
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.mjs';
2
- import { A as AIProvider } from '../../types-BvkiJ1dd.mjs';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.mjs';
2
+ import { A as AIProvider } from '../../types-BSSiJW2o.mjs';
3
3
  import 'zod';
4
- import '../../base-BYQKp9TW.mjs';
4
+ import '../../base-tNgbBaSo.mjs';
5
5
 
6
6
  /**
7
7
  * Together AI Provider
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.js';
2
- import { A as AIProvider } from '../../types-TMilS-Dz.js';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.js';
2
+ import { A as AIProvider } from '../../types-BQ31QIsA.js';
3
3
  import 'zod';
4
- import '../../base-Cxq3ni0t.js';
4
+ import '../../base-C58Dsr9p.js';
5
5
 
6
6
  /**
7
7
  * Together AI Provider
@@ -114,6 +114,7 @@ function buildOpenAITokenParams(modelId, maxTokens, temperature) {
114
114
  function toOpenAIResponseFormat(rf) {
115
115
  if (!rf) return void 0;
116
116
  if (rf.type === "json_object") return { type: "json_object" };
117
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
117
118
  return {
118
119
  type: "json_schema",
119
120
  json_schema: {
@@ -132,33 +133,6 @@ function toOpenAIResponsesTextFormat(rf) {
132
133
  strict: rf.json_schema.strict ?? true
133
134
  };
134
135
  }
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
- }
162
136
  function formatTools(actions) {
163
137
  return actions.map((action) => ({
164
138
  type: "function",
@@ -504,14 +478,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
504
478
  return this.client;
505
479
  }
506
480
  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
- }
515
481
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
516
482
  }
517
483
  buildResponsesInput(request) {
@@ -572,7 +538,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
572
538
  strict: true,
573
539
  defer_loading: tool.deferLoading === true
574
540
  }));
575
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
541
+ return [{ type: "tool_search" }, ...nativeTools];
576
542
  }
577
543
  parseResponsesResult(response) {
578
544
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -604,30 +570,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
604
570
  const responsesTextFormat = toOpenAIResponsesTextFormat(
605
571
  request.config?.responseFormat
606
572
  );
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];
619
573
  const payload = {
620
574
  model: request.config?.model || this.model,
621
575
  instructions: request.systemPrompt,
622
576
  input: this.buildResponsesInput(request),
623
- tools: tools.length > 0 ? tools : void 0,
577
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
624
578
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
625
579
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
626
580
  temperature: request.config?.temperature ?? this.config.temperature,
627
581
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
628
582
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
629
- ...reasoning ? { reasoning } : {},
630
- store: false,
631
583
  stream: false
632
584
  };
633
585
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -112,6 +112,7 @@ function buildOpenAITokenParams(modelId, maxTokens, temperature) {
112
112
  function toOpenAIResponseFormat(rf) {
113
113
  if (!rf) return void 0;
114
114
  if (rf.type === "json_object") return { type: "json_object" };
115
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
115
116
  return {
116
117
  type: "json_schema",
117
118
  json_schema: {
@@ -130,33 +131,6 @@ function toOpenAIResponsesTextFormat(rf) {
130
131
  strict: rf.json_schema.strict ?? true
131
132
  };
132
133
  }
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
- }
160
134
  function formatTools(actions) {
161
135
  return actions.map((action) => ({
162
136
  type: "function",
@@ -502,14 +476,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
502
476
  return this.client;
503
477
  }
504
478
  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
- }
513
479
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
514
480
  }
515
481
  buildResponsesInput(request) {
@@ -570,7 +536,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
570
536
  strict: true,
571
537
  defer_loading: tool.deferLoading === true
572
538
  }));
573
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
539
+ return [{ type: "tool_search" }, ...nativeTools];
574
540
  }
575
541
  parseResponsesResult(response) {
576
542
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -602,30 +568,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
602
568
  const responsesTextFormat = toOpenAIResponsesTextFormat(
603
569
  request.config?.responseFormat
604
570
  );
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];
617
571
  const payload = {
618
572
  model: request.config?.model || this.model,
619
573
  instructions: request.systemPrompt,
620
574
  input: this.buildResponsesInput(request),
621
- tools: tools.length > 0 ? tools : void 0,
575
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
622
576
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
623
577
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
624
578
  temperature: request.config?.temperature ?? this.config.temperature,
625
579
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
626
580
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
627
- ...reasoning ? { reasoning } : {},
628
- store: false,
629
581
  stream: false
630
582
  };
631
583
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.mjs';
2
- import { X as XAIProviderConfig, A as AIProvider } from '../../types-BvkiJ1dd.mjs';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.mjs';
2
+ import { X as XAIProviderConfig, A as AIProvider } from '../../types-BSSiJW2o.mjs';
3
3
  import 'zod';
4
- import '../../base-BYQKp9TW.mjs';
4
+ import '../../base-tNgbBaSo.mjs';
5
5
 
6
6
  /**
7
7
  * xAI Provider - Modern Pattern
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.js';
2
- import { X as XAIProviderConfig, A as AIProvider } from '../../types-TMilS-Dz.js';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.js';
2
+ import { X as XAIProviderConfig, A as AIProvider } from '../../types-BQ31QIsA.js';
3
3
  import 'zod';
4
- import '../../base-Cxq3ni0t.js';
4
+ import '../../base-C58Dsr9p.js';
5
5
 
6
6
  /**
7
7
  * xAI Provider - Modern Pattern
@@ -114,6 +114,7 @@ function buildOpenAITokenParams(modelId, maxTokens, temperature) {
114
114
  function toOpenAIResponseFormat(rf) {
115
115
  if (!rf) return void 0;
116
116
  if (rf.type === "json_object") return { type: "json_object" };
117
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
117
118
  return {
118
119
  type: "json_schema",
119
120
  json_schema: {
@@ -132,33 +133,6 @@ function toOpenAIResponsesTextFormat(rf) {
132
133
  strict: rf.json_schema.strict ?? true
133
134
  };
134
135
  }
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
- }
162
136
  function formatTools(actions) {
163
137
  return actions.map((action) => ({
164
138
  type: "function",
@@ -528,14 +502,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
528
502
  return this.client;
529
503
  }
530
504
  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
- }
539
505
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
540
506
  }
541
507
  buildResponsesInput(request) {
@@ -596,7 +562,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
596
562
  strict: true,
597
563
  defer_loading: tool.deferLoading === true
598
564
  }));
599
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
565
+ return [{ type: "tool_search" }, ...nativeTools];
600
566
  }
601
567
  parseResponsesResult(response) {
602
568
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -628,30 +594,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
628
594
  const responsesTextFormat = toOpenAIResponsesTextFormat(
629
595
  request.config?.responseFormat
630
596
  );
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];
643
597
  const payload = {
644
598
  model: request.config?.model || this.model,
645
599
  instructions: request.systemPrompt,
646
600
  input: this.buildResponsesInput(request),
647
- tools: tools.length > 0 ? tools : void 0,
601
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
648
602
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
649
603
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
650
604
  temperature: request.config?.temperature ?? this.config.temperature,
651
605
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
652
606
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
653
- ...reasoning ? { reasoning } : {},
654
- store: false,
655
607
  stream: false
656
608
  };
657
609
  logProviderPayload("openai", "request payload", payload, request.debug);