@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.
- package/dist/adapters/index.d.mts +11 -37
- package/dist/adapters/index.d.ts +11 -37
- package/dist/adapters/index.js +41 -192
- package/dist/adapters/index.mjs +42 -192
- package/dist/{base-5n-UuPfS.d.mts → base-D-U61JaB.d.mts} +22 -2
- package/dist/{base-Di31iy_8.d.ts → base-iGi9Va6Z.d.ts} +22 -2
- package/dist/fallback/index.d.mts +3 -3
- package/dist/fallback/index.d.ts +3 -3
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +96 -76
- package/dist/index.mjs +96 -76
- package/dist/providers/anthropic/index.d.mts +2 -2
- package/dist/providers/anthropic/index.d.ts +2 -2
- package/dist/providers/azure/index.d.mts +2 -2
- package/dist/providers/azure/index.d.ts +2 -2
- package/dist/providers/azure/index.js +4 -2
- package/dist/providers/azure/index.mjs +4 -2
- package/dist/providers/google/index.d.mts +2 -2
- package/dist/providers/google/index.d.ts +2 -2
- package/dist/providers/google/index.js +527 -339
- package/dist/providers/google/index.mjs +527 -339
- package/dist/providers/ollama/index.d.mts +3 -3
- package/dist/providers/ollama/index.d.ts +3 -3
- package/dist/providers/openai/index.d.mts +2 -2
- package/dist/providers/openai/index.d.ts +2 -2
- package/dist/providers/openai/index.js +34 -11
- package/dist/providers/openai/index.mjs +34 -11
- package/dist/providers/openrouter/index.d.mts +2 -2
- package/dist/providers/openrouter/index.d.ts +2 -2
- package/dist/providers/openrouter/index.js +34 -11
- package/dist/providers/openrouter/index.mjs +34 -11
- package/dist/providers/xai/index.d.mts +2 -2
- package/dist/providers/xai/index.d.ts +2 -2
- package/dist/providers/xai/index.js +355 -46
- package/dist/providers/xai/index.mjs +355 -46
- package/dist/{types-CNL8ZRne.d.ts → types-38yolWJn.d.ts} +1 -1
- package/dist/{types-C0vLXzuw.d.ts → types-BctsnC3g.d.ts} +1 -1
- package/dist/{types-BQl1suAv.d.mts → types-D4YfrQJR.d.mts} +1 -1
- package/dist/{types-VDgiUvH2.d.mts → types-DRqxMIjF.d.mts} +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as OllamaProviderConfig, A as AIProvider } from '../../types-
|
|
2
|
-
export { d as OllamaModelOptions } from '../../types-
|
|
3
|
-
import '../../base-
|
|
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-
|
|
2
|
-
export { d as OllamaModelOptions } from '../../types-
|
|
3
|
-
import '../../base-
|
|
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-
|
|
2
|
+
import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-DRqxMIjF.mjs';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
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-
|
|
2
|
+
import { O as OpenAIProviderConfig, A as AIProvider } from '../../types-BctsnC3g.js';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
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:
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
818
|
-
|
|
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
|
-
...
|
|
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:
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
816
|
-
|
|
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
|
-
...
|
|
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-
|
|
2
|
+
import { A as AIProvider } from '../../types-DRqxMIjF.mjs';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
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-
|
|
2
|
+
import { A as AIProvider } from '../../types-BctsnC3g.js';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
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:
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
804
|
-
|
|
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
|
-
...
|
|
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:
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
802
|
-
|
|
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
|
-
...
|
|
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-
|
|
2
|
+
import { X as XAIProviderConfig, A as AIProvider } from '../../types-DRqxMIjF.mjs';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
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-
|
|
2
|
+
import { X as XAIProviderConfig, A as AIProvider } from '../../types-BctsnC3g.js';
|
|
3
3
|
import 'zod';
|
|
4
|
-
import '../../base-
|
|
4
|
+
import '../../base-iGi9Va6Z.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* xAI Provider - Modern Pattern
|