@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
@@ -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",
@@ -537,6 +511,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
537
511
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
538
512
  if (baseUrl.includes("x.ai")) return "xai";
539
513
  if (baseUrl.includes("azure")) return "azure";
514
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
540
515
  return "openai";
541
516
  }
542
517
  async getClient() {
@@ -550,14 +525,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
550
525
  return this.client;
551
526
  }
552
527
  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
528
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
562
529
  }
563
530
  buildResponsesInput(request) {
@@ -618,7 +585,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
618
585
  strict: true,
619
586
  defer_loading: tool.deferLoading === true
620
587
  }));
621
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
588
+ return [{ type: "tool_search" }, ...nativeTools];
622
589
  }
623
590
  parseResponsesResult(response) {
624
591
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -650,30 +617,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
650
617
  const responsesTextFormat = toOpenAIResponsesTextFormat(
651
618
  request.config?.responseFormat
652
619
  );
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
620
  const payload = {
666
621
  model: request.config?.model || this.model,
667
622
  instructions: request.systemPrompt,
668
623
  input: this.buildResponsesInput(request),
669
- tools: tools.length > 0 ? tools : void 0,
624
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
670
625
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
671
626
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
672
627
  temperature: request.config?.temperature ?? this.config.temperature,
673
628
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
674
629
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
675
- ...reasoning ? { reasoning } : {},
676
- store: false,
677
630
  stream: false
678
631
  };
679
632
  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",
@@ -491,6 +465,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
491
465
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
492
466
  if (baseUrl.includes("x.ai")) return "xai";
493
467
  if (baseUrl.includes("azure")) return "azure";
468
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
494
469
  return "openai";
495
470
  }
496
471
  async getClient() {
@@ -504,14 +479,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
504
479
  return this.client;
505
480
  }
506
481
  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
482
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
516
483
  }
517
484
  buildResponsesInput(request) {
@@ -572,7 +539,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
572
539
  strict: true,
573
540
  defer_loading: tool.deferLoading === true
574
541
  }));
575
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
542
+ return [{ type: "tool_search" }, ...nativeTools];
576
543
  }
577
544
  parseResponsesResult(response) {
578
545
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -604,30 +571,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
604
571
  const responsesTextFormat = toOpenAIResponsesTextFormat(
605
572
  request.config?.responseFormat
606
573
  );
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
574
  const payload = {
620
575
  model: request.config?.model || this.model,
621
576
  instructions: request.systemPrompt,
622
577
  input: this.buildResponsesInput(request),
623
- tools: tools.length > 0 ? tools : void 0,
578
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
624
579
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
625
580
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
626
581
  temperature: request.config?.temperature ?? this.config.temperature,
627
582
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
628
583
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
629
- ...reasoning ? { reasoning } : {},
630
- store: false,
631
584
  stream: false
632
585
  };
633
586
  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",
@@ -489,6 +463,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
489
463
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
490
464
  if (baseUrl.includes("x.ai")) return "xai";
491
465
  if (baseUrl.includes("azure")) return "azure";
466
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
492
467
  return "openai";
493
468
  }
494
469
  async getClient() {
@@ -502,14 +477,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
502
477
  return this.client;
503
478
  }
504
479
  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
480
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
514
481
  }
515
482
  buildResponsesInput(request) {
@@ -570,7 +537,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
570
537
  strict: true,
571
538
  defer_loading: tool.deferLoading === true
572
539
  }));
573
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
540
+ return [{ type: "tool_search" }, ...nativeTools];
574
541
  }
575
542
  parseResponsesResult(response) {
576
543
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -602,30 +569,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
602
569
  const responsesTextFormat = toOpenAIResponsesTextFormat(
603
570
  request.config?.responseFormat
604
571
  );
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
572
  const payload = {
618
573
  model: request.config?.model || this.model,
619
574
  instructions: request.systemPrompt,
620
575
  input: this.buildResponsesInput(request),
621
- tools: tools.length > 0 ? tools : void 0,
576
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
622
577
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
623
578
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
624
579
  temperature: request.config?.temperature ?? this.config.temperature,
625
580
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
626
581
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
627
- ...reasoning ? { reasoning } : {},
628
- store: false,
629
582
  stream: false
630
583
  };
631
584
  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",
@@ -515,6 +489,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
515
489
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
516
490
  if (baseUrl.includes("x.ai")) return "xai";
517
491
  if (baseUrl.includes("azure")) return "azure";
492
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
518
493
  return "openai";
519
494
  }
520
495
  async getClient() {
@@ -528,14 +503,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
528
503
  return this.client;
529
504
  }
530
505
  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
506
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
540
507
  }
541
508
  buildResponsesInput(request) {
@@ -596,7 +563,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
596
563
  strict: true,
597
564
  defer_loading: tool.deferLoading === true
598
565
  }));
599
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
566
+ return [{ type: "tool_search" }, ...nativeTools];
600
567
  }
601
568
  parseResponsesResult(response) {
602
569
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -628,30 +595,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
628
595
  const responsesTextFormat = toOpenAIResponsesTextFormat(
629
596
  request.config?.responseFormat
630
597
  );
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
598
  const payload = {
644
599
  model: request.config?.model || this.model,
645
600
  instructions: request.systemPrompt,
646
601
  input: this.buildResponsesInput(request),
647
- tools: tools.length > 0 ? tools : void 0,
602
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
648
603
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
649
604
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
650
605
  temperature: request.config?.temperature ?? this.config.temperature,
651
606
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
652
607
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
653
- ...reasoning ? { reasoning } : {},
654
- store: false,
655
608
  stream: false
656
609
  };
657
610
  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",
@@ -513,6 +487,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
513
487
  if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
514
488
  if (baseUrl.includes("x.ai")) return "xai";
515
489
  if (baseUrl.includes("azure")) return "azure";
490
+ if (baseUrl.includes("fireworks.ai")) return "fireworks";
516
491
  return "openai";
517
492
  }
518
493
  async getClient() {
@@ -526,14 +501,6 @@ var OpenAIAdapter = class _OpenAIAdapter {
526
501
  return this.client;
527
502
  }
528
503
  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
- }
537
504
  return request.providerToolOptions?.openai?.nativeToolSearch?.enabled === true && request.providerToolOptions.openai.nativeToolSearch.useResponsesApi !== false && Array.isArray(request.toolDefinitions) && request.toolDefinitions.length > 0;
538
505
  }
539
506
  buildResponsesInput(request) {
@@ -594,7 +561,7 @@ var OpenAIAdapter = class _OpenAIAdapter {
594
561
  strict: true,
595
562
  defer_loading: tool.deferLoading === true
596
563
  }));
597
- return nativeTools.length > 0 ? [{ type: "tool_search" }, ...nativeTools] : [];
564
+ return [{ type: "tool_search" }, ...nativeTools];
598
565
  }
599
566
  parseResponsesResult(response) {
600
567
  const content = typeof response?.output_text === "string" ? response.output_text : "";
@@ -626,30 +593,16 @@ var OpenAIAdapter = class _OpenAIAdapter {
626
593
  const responsesTextFormat = toOpenAIResponsesTextFormat(
627
594
  request.config?.responseFormat
628
595
  );
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];
641
596
  const payload = {
642
597
  model: request.config?.model || this.model,
643
598
  instructions: request.systemPrompt,
644
599
  input: this.buildResponsesInput(request),
645
- tools: tools.length > 0 ? tools : void 0,
600
+ tools: this.buildResponsesTools(request.toolDefinitions ?? []),
646
601
  tool_choice: openaiToolOptions?.toolChoice === "required" ? "required" : openaiToolOptions?.toolChoice === "auto" ? "auto" : void 0,
647
602
  parallel_tool_calls: openaiToolOptions?.parallelToolCalls,
648
603
  temperature: request.config?.temperature ?? this.config.temperature,
649
604
  max_output_tokens: request.config?.maxTokens ?? this.config.maxTokens,
650
605
  ...responsesTextFormat ? { text: { format: responsesTextFormat } } : {},
651
- ...reasoning ? { reasoning } : {},
652
- store: false,
653
606
  stream: false
654
607
  };
655
608
  logProviderPayload("openai", "request payload", payload, request.debug);
@@ -1,4 +1,4 @@
1
- import { L as LLMAdapter } from './base-BYQKp9TW.mjs';
1
+ import { L as LLMAdapter } from './base-tNgbBaSo.mjs';
2
2
 
3
3
  /**
4
4
  * Fallback Chain & Routing Strategy Types
@@ -1,5 +1,5 @@
1
- import { d as ToolDefinition, $ as UnifiedToolCall, a0 as UnifiedToolResult } from './types-D774b0dg.js';
2
- import { L as LLMAdapter } from './base-Cxq3ni0t.js';
1
+ import { d as ToolDefinition, Z as UnifiedToolCall, _ as UnifiedToolResult } from './types-BkQCSiIt.js';
2
+ import { L as LLMAdapter } from './base-C58Dsr9p.js';
3
3
 
4
4
  /**
5
5
  * Provider Types
@@ -1,5 +1,5 @@
1
- import { d as ToolDefinition, $ as UnifiedToolCall, a0 as UnifiedToolResult } from './types-D774b0dg.mjs';
2
- import { L as LLMAdapter } from './base-BYQKp9TW.mjs';
1
+ import { d as ToolDefinition, Z as UnifiedToolCall, _ as UnifiedToolResult } from './types-BkQCSiIt.mjs';
2
+ import { L as LLMAdapter } from './base-tNgbBaSo.mjs';
3
3
 
4
4
  /**
5
5
  * Provider Types