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

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 +15 -139
  5. package/dist/adapters/index.mjs +15 -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 +67 -2
  23. package/dist/providers/fireworks/index.d.ts +67 -2
  24. package/dist/providers/fireworks/index.js +721 -1
  25. package/dist/providers/fireworks/index.mjs +719 -1
  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 +4 -51
  29. package/dist/providers/google/index.mjs +4 -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 +4 -51
  37. package/dist/providers/openai/index.mjs +4 -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 +4 -51
  41. package/dist/providers/openrouter/index.mjs +4 -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 +4 -51
  45. package/dist/providers/togetherai/index.mjs +4 -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 +4 -51
  49. package/dist/providers/xai/index.mjs +4 -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
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.mjs';
2
- import { G as GoogleProviderConfig, A as AIProvider } from '../../types-BvkiJ1dd.mjs';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.mjs';
2
+ import { G as GoogleProviderConfig, 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
  * Google Provider - OpenAI-Compatible
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.js';
2
- import { G as GoogleProviderConfig, A as AIProvider } from '../../types-TMilS-Dz.js';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.js';
2
+ import { G as GoogleProviderConfig, 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
  * Google Provider - OpenAI-Compatible
@@ -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",
@@ -566,6 +540,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
566
540
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
567
541
  if (baseUrl.includes("x.ai")) return "xai";
568
542
  if (baseUrl.includes("azure")) return "azure";
543
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
569
544
  return "openai";
570
545
  }
571
546
  async getClient() {
@@ -579,14 +554,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
579
554
  return this.client;
580
555
  }
581
556
  shouldUseResponsesApi(request) {
582
- if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
583
- if (this.provider !== "openai" && this.provider !== "azure") {
584
- throw new Error(
585
- `[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
586
- );
587
- }
588
- return true;
589
- }
590
557
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
591
558
  }
592
559
  buildResponsesInput(request) {
@@ -647,7 +614,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
647
614
  strict: true,
648
615
  defer_loading: tool.deferLoading === true
649
616
  }));
650
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
617
+ return [{ type: "tool_search" }, ...nativeTools];
651
618
  }
652
619
  parseResponsesResult(response) {
653
620
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -679,30 +646,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
679
646
  const responsesTextFormat = toOpenAIResponsesTextFormat(
680
647
  request.config?.responseFormat
681
648
  );
682
- const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
683
- const modelId = request.config?.model || this.model;
684
- const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
685
- if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
686
- console.warn(
687
- `[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
688
- );
689
- }
690
- const functionTools = this.buildResponsesTools(
691
- request.toolDefinitions ?? []
692
- );
693
- const tools = [...functionTools, ...mcpTools];
694
649
  const payload = {
695
650
  model: request.config?.model || this.model,
696
651
  instructions: request.systemPrompt,
697
652
  input: this.buildResponsesInput(request),
698
- tools: tools.length > 0 ? tools : void 0,
653
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
699
654
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
700
655
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
701
656
  temperature: request.config?.temperature ?? this.config.temperature,
702
657
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
703
658
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
704
- ...reasoning ? { reasoning } : {},
705
- store: false,
706
659
  stream: false
707
660
  };
708
661
  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",
@@ -564,6 +538,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
564
538
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
565
539
  if (baseUrl.includes("x.ai")) return "xai";
566
540
  if (baseUrl.includes("azure")) return "azure";
541
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
567
542
  return "openai";
568
543
  }
569
544
  async getClient() {
@@ -577,14 +552,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
577
552
  return this.client;
578
553
  }
579
554
  shouldUseResponsesApi(request) {
580
- if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
581
- if (this.provider !== "openai" && this.provider !== "azure") {
582
- throw new Error(
583
- `[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
584
- );
585
- }
586
- return true;
587
- }
588
555
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
589
556
  }
590
557
  buildResponsesInput(request) {
@@ -645,7 +612,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
645
612
  strict: true,
646
613
  defer_loading: tool.deferLoading === true
647
614
  }));
648
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
615
+ return [{ type: "tool_search" }, ...nativeTools];
649
616
  }
650
617
  parseResponsesResult(response) {
651
618
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -677,30 +644,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
677
644
  const responsesTextFormat = toOpenAIResponsesTextFormat(
678
645
  request.config?.responseFormat
679
646
  );
680
- const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
681
- const modelId = request.config?.model || this.model;
682
- const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
683
- if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
684
- console.warn(
685
- `[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
686
- );
687
- }
688
- const functionTools = this.buildResponsesTools(
689
- request.toolDefinitions ?? []
690
- );
691
- const tools = [...functionTools, ...mcpTools];
692
647
  const payload = {
693
648
  model: request.config?.model || this.model,
694
649
  instructions: request.systemPrompt,
695
650
  input: this.buildResponsesInput(request),
696
- tools: tools.length > 0 ? tools : void 0,
651
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
697
652
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
698
653
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
699
654
  temperature: request.config?.temperature ?? this.config.temperature,
700
655
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
701
656
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
702
- ...reasoning ? { reasoning } : {},
703
- store: false,
704
657
  stream: false
705
658
  };
706
659
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -1,8 +1,8 @@
1
- import { c as OllamaProviderConfig, A as AIProvider } from '../../types-BvkiJ1dd.mjs';
2
- export { d as OllamaModelOptions } from '../../types-BvkiJ1dd.mjs';
3
- import '../../types-D774b0dg.mjs';
1
+ import { c as OllamaProviderConfig, A as AIProvider } from '../../types-BSSiJW2o.mjs';
2
+ export { d as OllamaModelOptions } from '../../types-BSSiJW2o.mjs';
3
+ import '../../types-BkQCSiIt.mjs';
4
4
  import 'zod';
5
- import '../../base-BYQKp9TW.mjs';
5
+ import '../../base-tNgbBaSo.mjs';
6
6
 
7
7
  /**
8
8
  * Ollama Provider
@@ -1,8 +1,8 @@
1
- import { c as OllamaProviderConfig, A as AIProvider } from '../../types-TMilS-Dz.js';
2
- export { d as OllamaModelOptions } from '../../types-TMilS-Dz.js';
3
- import '../../types-D774b0dg.js';
1
+ import { c as OllamaProviderConfig, A as AIProvider } from '../../types-BQ31QIsA.js';
2
+ export { d as OllamaModelOptions } from '../../types-BQ31QIsA.js';
3
+ import '../../types-BkQCSiIt.js';
4
4
  import 'zod';
5
- import '../../base-Cxq3ni0t.js';
5
+ import '../../base-C58Dsr9p.js';
6
6
 
7
7
  /**
8
8
  * Ollama Provider
@@ -81,6 +81,7 @@ function parameterToJsonSchema(param) {
81
81
  function toOllamaFormat(rf) {
82
82
  if (!rf) return void 0;
83
83
  if (rf.type === "json_object") return "json";
84
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
84
85
  return rf.json_schema.schema;
85
86
  }
86
87
  function formatTools(actions) {
@@ -79,6 +79,7 @@ function parameterToJsonSchema(param) {
79
79
  function toOllamaFormat(rf) {
80
80
  if (!rf) return void 0;
81
81
  if (rf.type === "json_object") return "json";
82
+ if (rf.type !== "json_schema" || !rf.json_schema) return void 0;
82
83
  return rf.json_schema.schema;
83
84
  }
84
85
  function formatTools(actions) {
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.mjs';
2
- import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-BvkiJ1dd.mjs';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.mjs';
2
+ import { O as OpenAIProviderConfig, 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
  * OpenAI Provider - Modern Pattern
@@ -1,7 +1,7 @@
1
- import { L as LanguageModel } from '../../types-D774b0dg.js';
2
- import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-TMilS-Dz.js';
1
+ import { L as LanguageModel } from '../../types-BkQCSiIt.js';
2
+ import { O as OpenAIProviderConfig, 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
  * OpenAI 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",
@@ -553,6 +527,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
553
527
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
554
528
  if (baseUrl.includes("x.ai")) return "xai";
555
529
  if (baseUrl.includes("azure")) return "azure";
530
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
556
531
  return "openai";
557
532
  }
558
533
  async getClient() {
@@ -566,14 +541,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
566
541
  return this.client;
567
542
  }
568
543
  shouldUseResponsesApi(request) {
569
- if (request.config?.mcpServers && request.config.mcpServers.length > 0 || request.config?.reasoningEffort !== void 0) {
570
- if (this.provider !== "openai" && this.provider !== "azure") {
571
- throw new Error(
572
- `[llm-sdk] Provider "${this.provider}" does not support MCP servers or per-request reasoning effort. Use OpenAI or Anthropic for these features.`
573
- );
574
- }
575
- return true;
576
- }
577
544
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
578
545
  }
579
546
  buildResponsesInput(request) {
@@ -634,7 +601,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
634
601
  strict: true,
635
602
  defer_loading: tool.deferLoading === true
636
603
  }));
637
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
604
+ return [{ type: "tool_search" }, ...nativeTools];
638
605
  }
639
606
  parseResponsesResult(response) {
640
607
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -666,30 +633,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
666
633
  const responsesTextFormat = toOpenAIResponsesTextFormat(
667
634
  request.config?.responseFormat
668
635
  );
669
- const mcpTools = toOpenAIResponsesMcpTools(request.config?.mcpServers);
670
- const modelId = request.config?.model || this.model;
671
- const reasoning = isOpenAIReasoningModel(modelId) ? toOpenAIReasoning(request.config?.reasoningEffort) : void 0;
672
- if (request.config?.reasoningEffort && !isOpenAIReasoningModel(modelId)) {
673
- console.warn(
674
- `[llm-sdk] openai/${modelId} is not a reasoning model; \`reasoningEffort\` is ignored. Use o1/o3/o4/gpt-5.x for reasoning.`
675
- );
676
- }
677
- const functionTools = this.buildResponsesTools(
678
- request.toolDefinitions ?? []
679
- );
680
- const tools = [...functionTools, ...mcpTools];
681
636
  const payload = {
682
637
  model: request.config?.model || this.model,
683
638
  instructions: request.systemPrompt,
684
639
  input: this.buildResponsesInput(request),
685
- tools: tools.length > 0 ? tools : void 0,
640
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
686
641
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
687
642
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
688
643
  temperature: request.config?.temperature ?? this.config.temperature,
689
644
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
690
645
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
691
- ...reasoning ? { reasoning } : {},
692
- store: false,
693
646
  stream: false
694
647
  };
695
648
  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",
@@ -551,6 +525,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
551
525
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
552
526
  if (baseUrl.includes("x.ai")) return "xai";
553
527
  if (baseUrl.includes("azure")) return "azure";
528
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
554
529
  return "openai";
555
530
  }
556
531
  async getClient() {
@@ -564,14 +539,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
564
539
  return this.client;
565
540
  }
566
541
  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
542
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
576
543
  }
577
544
  buildResponsesInput(request) {
@@ -632,7 +599,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
632
599
  strict: true,
633
600
  defer_loading: tool.deferLoading === true
634
601
  }));
635
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
602
+ return [{ type: "tool_search" }, ...nativeTools];
636
603
  }
637
604
  parseResponsesResult(response) {
638
605
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -664,30 +631,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
664
631
  const responsesTextFormat = toOpenAIResponsesTextFormat(
665
632
  request.config?.responseFormat
666
633
  );
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
634
  const payload = {
680
635
  model: request.config?.model || this.model,
681
636
  instructions: request.systemPrompt,
682
637
  input: this.buildResponsesInput(request),
683
- tools: tools.length > 0 ? tools : void 0,
638
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
684
639
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
685
640
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
686
641
  temperature: request.config?.temperature ?? this.config.temperature,
687
642
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
688
643
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
689
- ...reasoning ? { reasoning } : {},
690
- store: false,
691
644
  stream: false
692
645
  };
693
646
  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",
@@ -539,6 +513,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
539
513
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
540
514
  if (baseUrl.includes("x.ai")) return "xai";
541
515
  if (baseUrl.includes("azure")) return "azure";
516
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
542
517
  return "openai";
543
518
  }
544
519
  async getClient() {
@@ -552,14 +527,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
552
527
  return this.client;
553
528
  }
554
529
  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
530
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
564
531
  }
565
532
  buildResponsesInput(request) {
@@ -620,7 +587,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
620
587
  strict: true,
621
588
  defer_loading: tool.deferLoading === true
622
589
  }));
623
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
590
+ return [{ type: "tool_search" }, ...nativeTools];
624
591
  }
625
592
  parseResponsesResult(response) {
626
593
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -652,30 +619,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
652
619
  const responsesTextFormat = toOpenAIResponsesTextFormat(
653
620
  request.config?.responseFormat
654
621
  );
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
622
  const payload = {
668
623
  model: request.config?.model || this.model,
669
624
  instructions: request.systemPrompt,
670
625
  input: this.buildResponsesInput(request),
671
- tools: tools.length > 0 ? tools : void 0,
626
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
672
627
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
673
628
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
674
629
  temperature: request.config?.temperature ?? this.config.temperature,
675
630
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
676
631
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
677
- ...reasoning ? { reasoning } : {},
678
- store: false,
679
632
  stream: false
680
633
  };
681
634
  logProviderPayload("openai", "request payload", payload, request.debug);