@yourgpt/llm-sdk 2.1.5 → 2.1.6

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 (41) hide show
  1. package/dist/adapters/index.d.mts +11 -37
  2. package/dist/adapters/index.d.ts +11 -37
  3. package/dist/adapters/index.js +41 -192
  4. package/dist/adapters/index.mjs +42 -192
  5. package/dist/{base-5n-UuPfS.d.mts → base-D-U61JaB.d.mts} +22 -2
  6. package/dist/{base-Di31iy_8.d.ts → base-iGi9Va6Z.d.ts} +22 -2
  7. package/dist/fallback/index.d.mts +3 -3
  8. package/dist/fallback/index.d.ts +3 -3
  9. package/dist/index.d.mts +5 -5
  10. package/dist/index.d.ts +5 -5
  11. package/dist/index.js +96 -76
  12. package/dist/index.mjs +96 -76
  13. package/dist/providers/anthropic/index.d.mts +2 -2
  14. package/dist/providers/anthropic/index.d.ts +2 -2
  15. package/dist/providers/azure/index.d.mts +2 -2
  16. package/dist/providers/azure/index.d.ts +2 -2
  17. package/dist/providers/azure/index.js +4 -2
  18. package/dist/providers/azure/index.mjs +4 -2
  19. package/dist/providers/google/index.d.mts +2 -2
  20. package/dist/providers/google/index.d.ts +2 -2
  21. package/dist/providers/google/index.js +527 -339
  22. package/dist/providers/google/index.mjs +527 -339
  23. package/dist/providers/ollama/index.d.mts +3 -3
  24. package/dist/providers/ollama/index.d.ts +3 -3
  25. package/dist/providers/openai/index.d.mts +2 -2
  26. package/dist/providers/openai/index.d.ts +2 -2
  27. package/dist/providers/openai/index.js +34 -11
  28. package/dist/providers/openai/index.mjs +34 -11
  29. package/dist/providers/openrouter/index.d.mts +2 -2
  30. package/dist/providers/openrouter/index.d.ts +2 -2
  31. package/dist/providers/openrouter/index.js +34 -11
  32. package/dist/providers/openrouter/index.mjs +34 -11
  33. package/dist/providers/xai/index.d.mts +2 -2
  34. package/dist/providers/xai/index.d.ts +2 -2
  35. package/dist/providers/xai/index.js +355 -46
  36. package/dist/providers/xai/index.mjs +355 -46
  37. package/dist/{types-CNL8ZRne.d.ts → types-38yolWJn.d.ts} +1 -1
  38. package/dist/{types-C0vLXzuw.d.ts → types-BctsnC3g.d.ts} +1 -1
  39. package/dist/{types-BQl1suAv.d.mts → types-D4YfrQJR.d.mts} +1 -1
  40. package/dist/{types-VDgiUvH2.d.mts → types-DRqxMIjF.d.mts} +1 -1
  41. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
- import { c as OllamaProviderConfig, A as AIProvider } from '../../types-VDgiUvH2.mjs';
2
- export { d as OllamaModelOptions } from '../../types-VDgiUvH2.mjs';
3
- import '../../base-5n-UuPfS.mjs';
1
+ import { c as OllamaProviderConfig, A as AIProvider } from '../../types-DRqxMIjF.mjs';
2
+ export { d as OllamaModelOptions } from '../../types-DRqxMIjF.mjs';
3
+ import '../../base-D-U61JaB.mjs';
4
4
  import '../../types-CR8mi9I0.mjs';
5
5
  import 'zod';
6
6
 
@@ -1,6 +1,6 @@
1
- import { c as OllamaProviderConfig, A as AIProvider } from '../../types-C0vLXzuw.js';
2
- export { d as OllamaModelOptions } from '../../types-C0vLXzuw.js';
3
- import '../../base-Di31iy_8.js';
1
+ import { c as OllamaProviderConfig, A as AIProvider } from '../../types-BctsnC3g.js';
2
+ export { d as OllamaModelOptions } from '../../types-BctsnC3g.js';
3
+ import '../../base-iGi9Va6Z.js';
4
4
  import '../../types-CR8mi9I0.js';
5
5
  import 'zod';
6
6
 
@@ -1,7 +1,7 @@
1
1
  import { L as LanguageModel } from '../../types-CR8mi9I0.mjs';
2
- import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-VDgiUvH2.mjs';
2
+ import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-DRqxMIjF.mjs';
3
3
  import 'zod';
4
- import '../../base-5n-UuPfS.mjs';
4
+ import '../../base-D-U61JaB.mjs';
5
5
 
6
6
  /**
7
7
  * OpenAI Provider - Modern Pattern
@@ -1,7 +1,7 @@
1
1
  import { L as LanguageModel } from '../../types-CR8mi9I0.js';
2
- import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-C0vLXzuw.js';
2
+ import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-BctsnC3g.js';
3
3
  import 'zod';
4
- import '../../base-Di31iy_8.js';
4
+ import '../../base-iGi9Va6Z.js';
5
5
 
6
6
  /**
7
7
  * OpenAI Provider - Modern Pattern
@@ -454,11 +454,13 @@ function formatMessagesForOpenAI2(messages, systemPrompt) {
454
454
  content: messageToOpenAIContent(msg)
455
455
  });
456
456
  } else if (msg.role === "assistant") {
457
+ const hasToolCalls = msg.tool_calls && msg.tool_calls.length > 0;
457
458
  const assistantMsg = {
458
459
  role: "assistant",
459
- content: msg.content
460
+ // Gemini/xAI (OpenAI-compatible) reject content: "" on assistant messages with tool_calls
461
+ content: hasToolCalls ? msg.content || null : msg.content
460
462
  };
461
- if (msg.tool_calls && msg.tool_calls.length > 0) {
463
+ if (hasToolCalls) {
462
464
  assistantMsg.tool_calls = msg.tool_calls;
463
465
  }
464
466
  formatted.push(assistantMsg);
@@ -474,11 +476,18 @@ function formatMessagesForOpenAI2(messages, systemPrompt) {
474
476
  }
475
477
 
476
478
  // src/adapters/openai.ts
477
- var OpenAIAdapter = class {
479
+ var OpenAIAdapter = class _OpenAIAdapter {
478
480
  constructor(config) {
479
- this.provider = "openai";
480
481
  this.config = config;
481
482
  this.model = config.model || "gpt-4o";
483
+ this.provider = _OpenAIAdapter.resolveProviderName(config.baseUrl);
484
+ }
485
+ static resolveProviderName(baseUrl) {
486
+ if (!baseUrl) return "openai";
487
+ if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
488
+ if (baseUrl.includes("x.ai")) return "xai";
489
+ if (baseUrl.includes("azure")) return "azure";
490
+ return "openai";
482
491
  }
483
492
  async getClient() {
484
493
  if (!this.client) {
@@ -640,6 +649,9 @@ var OpenAIAdapter = class {
640
649
  let messages;
641
650
  if (request.rawMessages && request.rawMessages.length > 0) {
642
651
  const processedMessages = request.rawMessages.map((msg) => {
652
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
653
+ return { ...msg, content: null };
654
+ }
643
655
  const hasAttachments = msg.attachments && Array.isArray(msg.attachments) && msg.attachments.length > 0;
644
656
  if (hasAttachments) {
645
657
  const content = [];
@@ -761,15 +773,18 @@ var OpenAIAdapter = class {
761
773
  args: currentToolCall.arguments
762
774
  };
763
775
  }
776
+ const tcExtraContent = toolCall.extra_content;
764
777
  currentToolCall = {
765
778
  id: toolCall.id,
766
779
  name: toolCall.function?.name || "",
767
- arguments: toolCall.function?.arguments || ""
780
+ arguments: toolCall.function?.arguments || "",
781
+ ...tcExtraContent ? { extra_content: tcExtraContent } : {}
768
782
  };
769
783
  yield {
770
784
  type: "action:start",
771
785
  id: currentToolCall.id,
772
- name: currentToolCall.name
786
+ name: currentToolCall.name,
787
+ ...currentToolCall.extra_content ? { extra_content: currentToolCall.extra_content } : {}
773
788
  };
774
789
  } else if (currentToolCall && toolCall.function?.arguments) {
775
790
  currentToolCall.arguments += toolCall.function.arguments;
@@ -803,7 +818,7 @@ var OpenAIAdapter = class {
803
818
  yield {
804
819
  type: "error",
805
820
  message: error instanceof Error ? error.message : "Unknown error",
806
- code: "OPENAI_ERROR"
821
+ code: `${this.provider.toUpperCase()}_ERROR`
807
822
  };
808
823
  }
809
824
  }
@@ -814,12 +829,19 @@ var OpenAIAdapter = class {
814
829
  const client = await this.getClient();
815
830
  let messages;
816
831
  if (request.rawMessages && request.rawMessages.length > 0) {
817
- messages = request.rawMessages;
818
- if (request.systemPrompt && !messages.some((message2) => message2.role === "system")) {
832
+ const sanitized = request.rawMessages.map((msg) => {
833
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
834
+ return { ...msg, content: null };
835
+ }
836
+ return msg;
837
+ });
838
+ if (request.systemPrompt && !sanitized.some((message2) => message2.role === "system")) {
819
839
  messages = [
820
840
  { role: "system", content: request.systemPrompt },
821
- ...messages
841
+ ...sanitized
822
842
  ];
843
+ } else {
844
+ messages = sanitized;
823
845
  }
824
846
  } else {
825
847
  messages = formatMessagesForOpenAI2(
@@ -861,7 +883,8 @@ var OpenAIAdapter = class {
861
883
  } catch {
862
884
  return {};
863
885
  }
864
- })()
886
+ })(),
887
+ ...toolCall.extra_content ? { extra_content: toolCall.extra_content } : {}
865
888
  })) ?? [],
866
889
  usage: response.usage ? {
867
890
  promptTokens: response.usage.prompt_tokens,
@@ -452,11 +452,13 @@ function formatMessagesForOpenAI2(messages, systemPrompt) {
452
452
  content: messageToOpenAIContent(msg)
453
453
  });
454
454
  } else if (msg.role === "assistant") {
455
+ const hasToolCalls = msg.tool_calls && msg.tool_calls.length > 0;
455
456
  const assistantMsg = {
456
457
  role: "assistant",
457
- content: msg.content
458
+ // Gemini/xAI (OpenAI-compatible) reject content: "" on assistant messages with tool_calls
459
+ content: hasToolCalls ? msg.content || null : msg.content
458
460
  };
459
- if (msg.tool_calls && msg.tool_calls.length > 0) {
461
+ if (hasToolCalls) {
460
462
  assistantMsg.tool_calls = msg.tool_calls;
461
463
  }
462
464
  formatted.push(assistantMsg);
@@ -472,11 +474,18 @@ function formatMessagesForOpenAI2(messages, systemPrompt) {
472
474
  }
473
475
 
474
476
  // src/adapters/openai.ts
475
- var OpenAIAdapter = class {
477
+ var OpenAIAdapter = class _OpenAIAdapter {
476
478
  constructor(config) {
477
- this.provider = "openai";
478
479
  this.config = config;
479
480
  this.model = config.model || "gpt-4o";
481
+ this.provider = _OpenAIAdapter.resolveProviderName(config.baseUrl);
482
+ }
483
+ static resolveProviderName(baseUrl) {
484
+ if (!baseUrl) return "openai";
485
+ if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
486
+ if (baseUrl.includes("x.ai")) return "xai";
487
+ if (baseUrl.includes("azure")) return "azure";
488
+ return "openai";
480
489
  }
481
490
  async getClient() {
482
491
  if (!this.client) {
@@ -638,6 +647,9 @@ var OpenAIAdapter = class {
638
647
  let messages;
639
648
  if (request.rawMessages && request.rawMessages.length > 0) {
640
649
  const processedMessages = request.rawMessages.map((msg) => {
650
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
651
+ return { ...msg, content: null };
652
+ }
641
653
  const hasAttachments = msg.attachments && Array.isArray(msg.attachments) && msg.attachments.length > 0;
642
654
  if (hasAttachments) {
643
655
  const content = [];
@@ -759,15 +771,18 @@ var OpenAIAdapter = class {
759
771
  args: currentToolCall.arguments
760
772
  };
761
773
  }
774
+ const tcExtraContent = toolCall.extra_content;
762
775
  currentToolCall = {
763
776
  id: toolCall.id,
764
777
  name: toolCall.function?.name || "",
765
- arguments: toolCall.function?.arguments || ""
778
+ arguments: toolCall.function?.arguments || "",
779
+ ...tcExtraContent ? { extra_content: tcExtraContent } : {}
766
780
  };
767
781
  yield {
768
782
  type: "action:start",
769
783
  id: currentToolCall.id,
770
- name: currentToolCall.name
784
+ name: currentToolCall.name,
785
+ ...currentToolCall.extra_content ? { extra_content: currentToolCall.extra_content } : {}
771
786
  };
772
787
  } else if (currentToolCall && toolCall.function?.arguments) {
773
788
  currentToolCall.arguments += toolCall.function.arguments;
@@ -801,7 +816,7 @@ var OpenAIAdapter = class {
801
816
  yield {
802
817
  type: "error",
803
818
  message: error instanceof Error ? error.message : "Unknown error",
804
- code: "OPENAI_ERROR"
819
+ code: `${this.provider.toUpperCase()}_ERROR`
805
820
  };
806
821
  }
807
822
  }
@@ -812,12 +827,19 @@ var OpenAIAdapter = class {
812
827
  const client = await this.getClient();
813
828
  let messages;
814
829
  if (request.rawMessages && request.rawMessages.length > 0) {
815
- messages = request.rawMessages;
816
- if (request.systemPrompt && !messages.some((message2) => message2.role === "system")) {
830
+ const sanitized = request.rawMessages.map((msg) => {
831
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
832
+ return { ...msg, content: null };
833
+ }
834
+ return msg;
835
+ });
836
+ if (request.systemPrompt && !sanitized.some((message2) => message2.role === "system")) {
817
837
  messages = [
818
838
  { role: "system", content: request.systemPrompt },
819
- ...messages
839
+ ...sanitized
820
840
  ];
841
+ } else {
842
+ messages = sanitized;
821
843
  }
822
844
  } else {
823
845
  messages = formatMessagesForOpenAI2(
@@ -859,7 +881,8 @@ var OpenAIAdapter = class {
859
881
  } catch {
860
882
  return {};
861
883
  }
862
- })()
884
+ })(),
885
+ ...toolCall.extra_content ? { extra_content: toolCall.extra_content } : {}
863
886
  })) ?? [],
864
887
  usage: response.usage ? {
865
888
  promptTokens: response.usage.prompt_tokens,
@@ -1,7 +1,7 @@
1
1
  import { L as LanguageModel } from '../../types-CR8mi9I0.mjs';
2
- import { A as AIProvider } from '../../types-VDgiUvH2.mjs';
2
+ import { A as AIProvider } from '../../types-DRqxMIjF.mjs';
3
3
  import 'zod';
4
- import '../../base-5n-UuPfS.mjs';
4
+ import '../../base-D-U61JaB.mjs';
5
5
 
6
6
  /**
7
7
  * OpenRouter Provider - Modern Pattern
@@ -1,7 +1,7 @@
1
1
  import { L as LanguageModel } from '../../types-CR8mi9I0.js';
2
- import { A as AIProvider } from '../../types-C0vLXzuw.js';
2
+ import { A as AIProvider } from '../../types-BctsnC3g.js';
3
3
  import 'zod';
4
- import '../../base-Di31iy_8.js';
4
+ import '../../base-iGi9Va6Z.js';
5
5
 
6
6
  /**
7
7
  * OpenRouter Provider - Modern Pattern
@@ -440,11 +440,13 @@ function formatMessagesForOpenAI(messages, systemPrompt) {
440
440
  content: messageToOpenAIContent(msg)
441
441
  });
442
442
  } else if (msg.role === "assistant") {
443
+ const hasToolCalls = msg.tool_calls && msg.tool_calls.length > 0;
443
444
  const assistantMsg = {
444
445
  role: "assistant",
445
- content: msg.content
446
+ // Gemini/xAI (OpenAI-compatible) reject content: "" on assistant messages with tool_calls
447
+ content: hasToolCalls ? msg.content || null : msg.content
446
448
  };
447
- if (msg.tool_calls && msg.tool_calls.length > 0) {
449
+ if (hasToolCalls) {
448
450
  assistantMsg.tool_calls = msg.tool_calls;
449
451
  }
450
452
  formatted.push(assistantMsg);
@@ -460,11 +462,18 @@ function formatMessagesForOpenAI(messages, systemPrompt) {
460
462
  }
461
463
 
462
464
  // src/adapters/openai.ts
463
- var OpenAIAdapter = class {
465
+ var OpenAIAdapter = class _OpenAIAdapter {
464
466
  constructor(config) {
465
- this.provider = "openai";
466
467
  this.config = config;
467
468
  this.model = config.model || "gpt-4o";
469
+ this.provider = _OpenAIAdapter.resolveProviderName(config.baseUrl);
470
+ }
471
+ static resolveProviderName(baseUrl) {
472
+ if (!baseUrl) return "openai";
473
+ if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
474
+ if (baseUrl.includes("x.ai")) return "xai";
475
+ if (baseUrl.includes("azure")) return "azure";
476
+ return "openai";
468
477
  }
469
478
  async getClient() {
470
479
  if (!this.client) {
@@ -626,6 +635,9 @@ var OpenAIAdapter = class {
626
635
  let messages;
627
636
  if (request.rawMessages && request.rawMessages.length > 0) {
628
637
  const processedMessages = request.rawMessages.map((msg) => {
638
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
639
+ return { ...msg, content: null };
640
+ }
629
641
  const hasAttachments = msg.attachments && Array.isArray(msg.attachments) && msg.attachments.length > 0;
630
642
  if (hasAttachments) {
631
643
  const content = [];
@@ -747,15 +759,18 @@ var OpenAIAdapter = class {
747
759
  args: currentToolCall.arguments
748
760
  };
749
761
  }
762
+ const tcExtraContent = toolCall.extra_content;
750
763
  currentToolCall = {
751
764
  id: toolCall.id,
752
765
  name: toolCall.function?.name || "",
753
- arguments: toolCall.function?.arguments || ""
766
+ arguments: toolCall.function?.arguments || "",
767
+ ...tcExtraContent ? { extra_content: tcExtraContent } : {}
754
768
  };
755
769
  yield {
756
770
  type: "action:start",
757
771
  id: currentToolCall.id,
758
- name: currentToolCall.name
772
+ name: currentToolCall.name,
773
+ ...currentToolCall.extra_content ? { extra_content: currentToolCall.extra_content } : {}
759
774
  };
760
775
  } else if (currentToolCall && toolCall.function?.arguments) {
761
776
  currentToolCall.arguments += toolCall.function.arguments;
@@ -789,7 +804,7 @@ var OpenAIAdapter = class {
789
804
  yield {
790
805
  type: "error",
791
806
  message: error instanceof Error ? error.message : "Unknown error",
792
- code: "OPENAI_ERROR"
807
+ code: `${this.provider.toUpperCase()}_ERROR`
793
808
  };
794
809
  }
795
810
  }
@@ -800,12 +815,19 @@ var OpenAIAdapter = class {
800
815
  const client = await this.getClient();
801
816
  let messages;
802
817
  if (request.rawMessages && request.rawMessages.length > 0) {
803
- messages = request.rawMessages;
804
- if (request.systemPrompt && !messages.some((message2) => message2.role === "system")) {
818
+ const sanitized = request.rawMessages.map((msg) => {
819
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
820
+ return { ...msg, content: null };
821
+ }
822
+ return msg;
823
+ });
824
+ if (request.systemPrompt && !sanitized.some((message2) => message2.role === "system")) {
805
825
  messages = [
806
826
  { role: "system", content: request.systemPrompt },
807
- ...messages
827
+ ...sanitized
808
828
  ];
829
+ } else {
830
+ messages = sanitized;
809
831
  }
810
832
  } else {
811
833
  messages = formatMessagesForOpenAI(
@@ -847,7 +869,8 @@ var OpenAIAdapter = class {
847
869
  } catch {
848
870
  return {};
849
871
  }
850
- })()
872
+ })(),
873
+ ...toolCall.extra_content ? { extra_content: toolCall.extra_content } : {}
851
874
  })) ?? [],
852
875
  usage: response.usage ? {
853
876
  promptTokens: response.usage.prompt_tokens,
@@ -438,11 +438,13 @@ function formatMessagesForOpenAI(messages, systemPrompt) {
438
438
  content: messageToOpenAIContent(msg)
439
439
  });
440
440
  } else if (msg.role === "assistant") {
441
+ const hasToolCalls = msg.tool_calls && msg.tool_calls.length > 0;
441
442
  const assistantMsg = {
442
443
  role: "assistant",
443
- content: msg.content
444
+ // Gemini/xAI (OpenAI-compatible) reject content: "" on assistant messages with tool_calls
445
+ content: hasToolCalls ? msg.content || null : msg.content
444
446
  };
445
- if (msg.tool_calls && msg.tool_calls.length > 0) {
447
+ if (hasToolCalls) {
446
448
  assistantMsg.tool_calls = msg.tool_calls;
447
449
  }
448
450
  formatted.push(assistantMsg);
@@ -458,11 +460,18 @@ function formatMessagesForOpenAI(messages, systemPrompt) {
458
460
  }
459
461
 
460
462
  // src/adapters/openai.ts
461
- var OpenAIAdapter = class {
463
+ var OpenAIAdapter = class _OpenAIAdapter {
462
464
  constructor(config) {
463
- this.provider = "openai";
464
465
  this.config = config;
465
466
  this.model = config.model || "gpt-4o";
467
+ this.provider = _OpenAIAdapter.resolveProviderName(config.baseUrl);
468
+ }
469
+ static resolveProviderName(baseUrl) {
470
+ if (!baseUrl) return "openai";
471
+ if (baseUrl.includes("generativelanguage.googleapis.com")) return "google";
472
+ if (baseUrl.includes("x.ai")) return "xai";
473
+ if (baseUrl.includes("azure")) return "azure";
474
+ return "openai";
466
475
  }
467
476
  async getClient() {
468
477
  if (!this.client) {
@@ -624,6 +633,9 @@ var OpenAIAdapter = class {
624
633
  let messages;
625
634
  if (request.rawMessages && request.rawMessages.length > 0) {
626
635
  const processedMessages = request.rawMessages.map((msg) => {
636
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
637
+ return { ...msg, content: null };
638
+ }
627
639
  const hasAttachments = msg.attachments && Array.isArray(msg.attachments) && msg.attachments.length > 0;
628
640
  if (hasAttachments) {
629
641
  const content = [];
@@ -745,15 +757,18 @@ var OpenAIAdapter = class {
745
757
  args: currentToolCall.arguments
746
758
  };
747
759
  }
760
+ const tcExtraContent = toolCall.extra_content;
748
761
  currentToolCall = {
749
762
  id: toolCall.id,
750
763
  name: toolCall.function?.name || "",
751
- arguments: toolCall.function?.arguments || ""
764
+ arguments: toolCall.function?.arguments || "",
765
+ ...tcExtraContent ? { extra_content: tcExtraContent } : {}
752
766
  };
753
767
  yield {
754
768
  type: "action:start",
755
769
  id: currentToolCall.id,
756
- name: currentToolCall.name
770
+ name: currentToolCall.name,
771
+ ...currentToolCall.extra_content ? { extra_content: currentToolCall.extra_content } : {}
757
772
  };
758
773
  } else if (currentToolCall && toolCall.function?.arguments) {
759
774
  currentToolCall.arguments += toolCall.function.arguments;
@@ -787,7 +802,7 @@ var OpenAIAdapter = class {
787
802
  yield {
788
803
  type: "error",
789
804
  message: error instanceof Error ? error.message : "Unknown error",
790
- code: "OPENAI_ERROR"
805
+ code: `${this.provider.toUpperCase()}_ERROR`
791
806
  };
792
807
  }
793
808
  }
@@ -798,12 +813,19 @@ var OpenAIAdapter = class {
798
813
  const client = await this.getClient();
799
814
  let messages;
800
815
  if (request.rawMessages && request.rawMessages.length > 0) {
801
- messages = request.rawMessages;
802
- if (request.systemPrompt && !messages.some((message2) => message2.role === "system")) {
816
+ const sanitized = request.rawMessages.map((msg) => {
817
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0 && msg.content === "") {
818
+ return { ...msg, content: null };
819
+ }
820
+ return msg;
821
+ });
822
+ if (request.systemPrompt && !sanitized.some((message2) => message2.role === "system")) {
803
823
  messages = [
804
824
  { role: "system", content: request.systemPrompt },
805
- ...messages
825
+ ...sanitized
806
826
  ];
827
+ } else {
828
+ messages = sanitized;
807
829
  }
808
830
  } else {
809
831
  messages = formatMessagesForOpenAI(
@@ -845,7 +867,8 @@ var OpenAIAdapter = class {
845
867
  } catch {
846
868
  return {};
847
869
  }
848
- })()
870
+ })(),
871
+ ...toolCall.extra_content ? { extra_content: toolCall.extra_content } : {}
849
872
  })) ?? [],
850
873
  usage: response.usage ? {
851
874
  promptTokens: response.usage.prompt_tokens,
@@ -1,7 +1,7 @@
1
1
  import { L as LanguageModel } from '../../types-CR8mi9I0.mjs';
2
- import { X as XAIProviderConfig, A as AIProvider } from '../../types-VDgiUvH2.mjs';
2
+ import { X as XAIProviderConfig, A as AIProvider } from '../../types-DRqxMIjF.mjs';
3
3
  import 'zod';
4
- import '../../base-5n-UuPfS.mjs';
4
+ import '../../base-D-U61JaB.mjs';
5
5
 
6
6
  /**
7
7
  * xAI Provider - Modern Pattern
@@ -1,7 +1,7 @@
1
1
  import { L as LanguageModel } from '../../types-CR8mi9I0.js';
2
- import { X as XAIProviderConfig, A as AIProvider } from '../../types-C0vLXzuw.js';
2
+ import { X as XAIProviderConfig, A as AIProvider } from '../../types-BctsnC3g.js';
3
3
  import 'zod';
4
- import '../../base-Di31iy_8.js';
4
+ import '../../base-iGi9Va6Z.js';
5
5
 
6
6
  /**
7
7
  * xAI Provider - Modern Pattern