@qduc/term2 0.2.0 → 0.3.1
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/app.d.ts.map +1 -1
- package/dist/app.js +14 -6
- package/dist/app.js.map +1 -1
- package/dist/components/BottomArea.d.ts +3 -2
- package/dist/components/BottomArea.d.ts.map +1 -1
- package/dist/components/BottomArea.js.map +1 -1
- package/dist/components/Input/PopupManager.d.ts +1 -1
- package/dist/components/Input/PopupManager.d.ts.map +1 -1
- package/dist/components/Input/PopupManager.js.map +1 -1
- package/dist/components/Input/determine-active-menu.d.ts +2 -1
- package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
- package/dist/components/Input/determine-active-menu.js +41 -28
- package/dist/components/Input/determine-active-menu.js.map +1 -1
- package/dist/components/InputBox.d.ts +3 -2
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +46 -11
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/InputBox.menu-logic.test.js +55 -15
- package/dist/components/InputBox.menu-logic.test.js.map +1 -1
- package/dist/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/components/MarkdownRenderer.js +36 -24
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/MessageList.test.js +14 -0
- package/dist/components/MessageList.test.js.map +1 -1
- package/dist/components/SlashCommandMenu.d.ts +1 -6
- package/dist/components/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/SlashCommandMenu.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +1 -1
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +4 -0
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +2 -1
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +6 -4
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +32 -11
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-model-selection.test.js +107 -10
- package/dist/hooks/use-model-selection.test.js.map +1 -1
- package/dist/hooks/use-slash-commands.d.ts +1 -1
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-trigger-detection.d.ts +3 -1
- package/dist/hooks/use-trigger-detection.d.ts.map +1 -1
- package/dist/hooks/use-trigger-detection.js +3 -3
- package/dist/hooks/use-trigger-detection.js.map +1 -1
- package/dist/lib/openai-agent-client.d.ts +2 -1
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.js +2 -4
- package/dist/lib/openai-agent-client.js.map +1 -1
- package/dist/lib/openai-agent-client.test.js +1 -1
- package/dist/lib/openai-agent-client.test.js.map +1 -1
- package/dist/lib/retry-executor.d.ts.map +1 -1
- package/dist/lib/retry-executor.js +1 -2
- package/dist/lib/retry-executor.js.map +1 -1
- package/dist/lib/retry-executor.test.js +1 -2
- package/dist/lib/retry-executor.test.js.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.d.ts +8 -0
- package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.js +70 -0
- package/dist/providers/ai-sdk-message-normalizer.js.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.test.d.ts +2 -0
- package/dist/providers/ai-sdk-message-normalizer.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.test.js +195 -0
- package/dist/providers/ai-sdk-message-normalizer.test.js.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.d.ts +24 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.js +27 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.d.ts +2 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.js +68 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.js.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.d.ts +16 -0
- package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.js +22 -0
- package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.d.ts +2 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.js +70 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.js.map +1 -0
- package/dist/providers/common/openai-compatible-messages.d.ts +8 -0
- package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-messages.js +356 -0
- package/dist/providers/common/openai-compatible-messages.js.map +1 -0
- package/dist/providers/common/openai-compatible-messages.test.d.ts +2 -0
- package/dist/providers/common/openai-compatible-messages.test.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-messages.test.js +26 -0
- package/dist/providers/common/openai-compatible-messages.test.js.map +1 -0
- package/dist/providers/common/openai-compatible-utils.d.ts +11 -0
- package/dist/providers/common/openai-compatible-utils.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-utils.js +33 -0
- package/dist/providers/common/openai-compatible-utils.js.map +1 -0
- package/dist/providers/common/provider-errors.d.ts +13 -0
- package/dist/providers/common/provider-errors.d.ts.map +1 -0
- package/dist/providers/common/provider-errors.js +25 -0
- package/dist/providers/common/provider-errors.js.map +1 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.d.ts +2 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.d.ts.map +1 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.js +39 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.js.map +1 -0
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +18 -8
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +1 -3
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/openrouter.provider.createRunner.test.js +28 -0
- package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
- package/dist/providers/openrouter.provider.js +14 -5
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/scripts/eval-auto-approval/dataset.d.ts +2 -2
- package/dist/services/conversation-session.d.ts +3 -2
- package/dist/services/conversation-session.d.ts.map +1 -1
- package/dist/services/conversation-session.js +12 -6
- package/dist/services/conversation-session.js.map +1 -1
- package/dist/services/conversation-store.d.ts +2 -0
- package/dist/services/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation-store.js +27 -0
- package/dist/services/conversation-store.js.map +1 -1
- package/dist/services/conversation-store.test.js +34 -0
- package/dist/services/conversation-store.test.js.map +1 -1
- package/dist/services/logging-contract.d.ts +3 -3
- package/dist/services/logging-service.d.ts.map +1 -1
- package/dist/services/logging-service.js +5 -1
- package/dist/services/logging-service.js.map +1 -1
- package/dist/services/model-service.test.js +1 -5
- package/dist/services/model-service.test.js.map +1 -1
- package/dist/services/settings-schema.d.ts +12 -8
- package/dist/services/settings-schema.d.ts.map +1 -1
- package/dist/services/settings-schema.js +9 -0
- package/dist/services/settings-schema.js.map +1 -1
- package/dist/services/stream-event-parsing.js +1 -1
- package/dist/services/stream-event-parsing.js.map +1 -1
- package/dist/services/stream-event-parsing.test.js +13 -0
- package/dist/services/stream-event-parsing.test.js.map +1 -1
- package/dist/slash-commands.d.ts +20 -0
- package/dist/slash-commands.d.ts.map +1 -0
- package/dist/slash-commands.js +2 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/types/user-turn.d.ts +16 -0
- package/dist/types/user-turn.d.ts.map +1 -0
- package/dist/types/user-turn.js +27 -0
- package/dist/types/user-turn.js.map +1 -0
- package/dist/types/user-turn.test.d.ts +2 -0
- package/dist/types/user-turn.test.d.ts.map +1 -0
- package/dist/types/user-turn.test.js +32 -0
- package/dist/types/user-turn.test.js.map +1 -0
- package/dist/utils/log-truncation.d.ts +7 -0
- package/dist/utils/log-truncation.d.ts.map +1 -0
- package/dist/utils/log-truncation.js +66 -0
- package/dist/utils/log-truncation.js.map +1 -0
- package/dist/utils/log-truncation.test.d.ts +2 -0
- package/dist/utils/log-truncation.test.d.ts.map +1 -0
- package/dist/utils/log-truncation.test.js +44 -0
- package/dist/utils/log-truncation.test.js.map +1 -0
- package/dist/utils/settings-command.d.ts +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +2 -0
- package/dist/utils/settings-command.js.map +1 -1
- package/package.json +6 -2
- package/readme.md +29 -24
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
function isAssistantReasoningOnlyMessage(message) {
|
|
2
|
+
const content = message?.content;
|
|
3
|
+
if (message?.role === 'assistant' &&
|
|
4
|
+
Array.isArray(content) &&
|
|
5
|
+
content.length > 0 &&
|
|
6
|
+
content.every((part) => part?.type === 'reasoning') &&
|
|
7
|
+
!Array.isArray(message.tool_calls)) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
return (message?.role === 'assistant' &&
|
|
11
|
+
typeof message.reasoning_content === 'string' &&
|
|
12
|
+
(message.content === '' || message.content === null || message.content === undefined) &&
|
|
13
|
+
!Array.isArray(message.tool_calls));
|
|
14
|
+
}
|
|
15
|
+
function isAssistantToolCallMessage(message) {
|
|
16
|
+
const content = message?.content;
|
|
17
|
+
if (message?.role === 'assistant' &&
|
|
18
|
+
Array.isArray(content) &&
|
|
19
|
+
content.some((part) => part?.type === 'tool-call') &&
|
|
20
|
+
message.reasoning_content === undefined) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return message?.role === 'assistant' && Array.isArray(message.tool_calls) && message.reasoning_content === undefined;
|
|
24
|
+
}
|
|
25
|
+
export function mergeAssistantReasoningIntoToolCalls(messages) {
|
|
26
|
+
const merged = [];
|
|
27
|
+
for (const message of messages) {
|
|
28
|
+
const previous = merged[merged.length - 1];
|
|
29
|
+
if (isAssistantReasoningOnlyMessage(previous) && isAssistantToolCallMessage(message)) {
|
|
30
|
+
if (Array.isArray(previous.content) && Array.isArray(message.content)) {
|
|
31
|
+
merged[merged.length - 1] = {
|
|
32
|
+
...message,
|
|
33
|
+
content: [...previous.content, ...message.content],
|
|
34
|
+
};
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
merged[merged.length - 1] = {
|
|
38
|
+
...message,
|
|
39
|
+
reasoning_content: previous.reasoning_content,
|
|
40
|
+
};
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
merged.push(message);
|
|
44
|
+
}
|
|
45
|
+
return merged;
|
|
46
|
+
}
|
|
47
|
+
function normalizeOptions(options) {
|
|
48
|
+
if (!Array.isArray(options?.prompt) && !Array.isArray(options?.messages)) {
|
|
49
|
+
return options;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
...options,
|
|
53
|
+
...(Array.isArray(options.prompt) ? { prompt: mergeAssistantReasoningIntoToolCalls(options.prompt) } : {}),
|
|
54
|
+
...(Array.isArray(options.messages) ? { messages: mergeAssistantReasoningIntoToolCalls(options.messages) } : {}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function withMergedAssistantReasoning(model) {
|
|
58
|
+
return new Proxy(model, {
|
|
59
|
+
get(target, property) {
|
|
60
|
+
if (property === 'doGenerate') {
|
|
61
|
+
return (options) => target.doGenerate(normalizeOptions(options));
|
|
62
|
+
}
|
|
63
|
+
if (property === 'doStream') {
|
|
64
|
+
return (options) => target.doStream(normalizeOptions(options));
|
|
65
|
+
}
|
|
66
|
+
return Reflect.get(target, property, target);
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=ai-sdk-message-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-message-normalizer.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-message-normalizer.test.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { mergeAssistantReasoningIntoToolCalls, withMergedAssistantReasoning } from './ai-sdk-message-normalizer.js';
|
|
3
|
+
test('mergeAssistantReasoningIntoToolCalls folds assistant reasoning into following assistant tool call', (t) => {
|
|
4
|
+
const messages = [
|
|
5
|
+
{ role: 'user', content: 'what time is it?' },
|
|
6
|
+
{
|
|
7
|
+
role: 'assistant',
|
|
8
|
+
content: '',
|
|
9
|
+
reasoning_content: 'Need to use the shell for the exact time.',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
role: 'assistant',
|
|
13
|
+
content: null,
|
|
14
|
+
tool_calls: [
|
|
15
|
+
{
|
|
16
|
+
id: 'shell:0',
|
|
17
|
+
type: 'function',
|
|
18
|
+
function: {
|
|
19
|
+
name: 'shell',
|
|
20
|
+
arguments: '{"command":"date"}',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
t.deepEqual(mergeAssistantReasoningIntoToolCalls(messages), [
|
|
27
|
+
{ role: 'user', content: 'what time is it?' },
|
|
28
|
+
{
|
|
29
|
+
role: 'assistant',
|
|
30
|
+
content: null,
|
|
31
|
+
reasoning_content: 'Need to use the shell for the exact time.',
|
|
32
|
+
tool_calls: [
|
|
33
|
+
{
|
|
34
|
+
id: 'shell:0',
|
|
35
|
+
type: 'function',
|
|
36
|
+
function: {
|
|
37
|
+
name: 'shell',
|
|
38
|
+
arguments: '{"command":"date"}',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
});
|
|
45
|
+
test('mergeAssistantReasoningIntoToolCalls folds AI SDK reasoning content part into following assistant tool call', (t) => {
|
|
46
|
+
const messages = [
|
|
47
|
+
{
|
|
48
|
+
role: 'assistant',
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'reasoning',
|
|
52
|
+
text: 'Need to use the shell for the exact time.',
|
|
53
|
+
providerOptions: {},
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
providerOptions: {},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
role: 'assistant',
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'tool-call',
|
|
63
|
+
toolCallId: 'shell:0',
|
|
64
|
+
toolName: 'shell',
|
|
65
|
+
input: {
|
|
66
|
+
command: 'date',
|
|
67
|
+
},
|
|
68
|
+
providerOptions: {},
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
providerOptions: {},
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
t.deepEqual(mergeAssistantReasoningIntoToolCalls(messages), [
|
|
75
|
+
{
|
|
76
|
+
role: 'assistant',
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: 'reasoning',
|
|
80
|
+
text: 'Need to use the shell for the exact time.',
|
|
81
|
+
providerOptions: {},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'tool-call',
|
|
85
|
+
toolCallId: 'shell:0',
|
|
86
|
+
toolName: 'shell',
|
|
87
|
+
input: {
|
|
88
|
+
command: 'date',
|
|
89
|
+
},
|
|
90
|
+
providerOptions: {},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
providerOptions: {},
|
|
94
|
+
},
|
|
95
|
+
]);
|
|
96
|
+
});
|
|
97
|
+
test('mergeAssistantReasoningIntoToolCalls preserves messages that are not split reasoning and tool calls', (t) => {
|
|
98
|
+
const messages = [
|
|
99
|
+
{
|
|
100
|
+
role: 'assistant',
|
|
101
|
+
content: 'visible text',
|
|
102
|
+
reasoning_content: 'internal reasoning',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
role: 'assistant',
|
|
106
|
+
content: null,
|
|
107
|
+
tool_calls: [{ id: 'call:0' }],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
role: 'assistant',
|
|
111
|
+
content: '',
|
|
112
|
+
reasoning_content: 'already has a tool call',
|
|
113
|
+
tool_calls: [{ id: 'call:1' }],
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
t.deepEqual(mergeAssistantReasoningIntoToolCalls(messages), messages);
|
|
117
|
+
});
|
|
118
|
+
test('withMergedAssistantReasoning normalizes doGenerate messages before delegating', async (t) => {
|
|
119
|
+
let delegatedOptions;
|
|
120
|
+
const model = withMergedAssistantReasoning({
|
|
121
|
+
provider: 'example',
|
|
122
|
+
modelId: 'model',
|
|
123
|
+
specificationVersion: 'v3',
|
|
124
|
+
supportedUrls: {},
|
|
125
|
+
doGenerate: async (options) => {
|
|
126
|
+
delegatedOptions = options;
|
|
127
|
+
return { text: 'ok' };
|
|
128
|
+
},
|
|
129
|
+
doStream: async () => ({ stream: [] }),
|
|
130
|
+
});
|
|
131
|
+
await model.doGenerate({
|
|
132
|
+
temperature: 0,
|
|
133
|
+
messages: [
|
|
134
|
+
{ role: 'assistant', content: '', reasoning_content: 'reasoning' },
|
|
135
|
+
{ role: 'assistant', content: null, tool_calls: [{ id: 'call:0' }] },
|
|
136
|
+
],
|
|
137
|
+
});
|
|
138
|
+
t.deepEqual(delegatedOptions, {
|
|
139
|
+
temperature: 0,
|
|
140
|
+
messages: [{ role: 'assistant', content: null, reasoning_content: 'reasoning', tool_calls: [{ id: 'call:0' }] }],
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
test('withMergedAssistantReasoning normalizes doStream messages before delegating', async (t) => {
|
|
144
|
+
let delegatedOptions;
|
|
145
|
+
const model = withMergedAssistantReasoning({
|
|
146
|
+
provider: 'example',
|
|
147
|
+
modelId: 'model',
|
|
148
|
+
specificationVersion: 'v3',
|
|
149
|
+
supportedUrls: {},
|
|
150
|
+
doGenerate: async () => ({ text: 'ok' }),
|
|
151
|
+
doStream: async (options) => {
|
|
152
|
+
delegatedOptions = options;
|
|
153
|
+
return { stream: [] };
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
await model.doStream({
|
|
157
|
+
messages: [
|
|
158
|
+
{ role: 'assistant', content: '', reasoning_content: 'reasoning' },
|
|
159
|
+
{ role: 'assistant', content: null, tool_calls: [{ id: 'call:0' }] },
|
|
160
|
+
],
|
|
161
|
+
});
|
|
162
|
+
t.deepEqual(delegatedOptions.messages, [
|
|
163
|
+
{ role: 'assistant', content: null, reasoning_content: 'reasoning', tool_calls: [{ id: 'call:0' }] },
|
|
164
|
+
]);
|
|
165
|
+
});
|
|
166
|
+
test('withMergedAssistantReasoning preserves model properties exposed by getters', (t) => {
|
|
167
|
+
class GetterBackedModel {
|
|
168
|
+
#provider = 'example.chat';
|
|
169
|
+
#modelId = 'selected-model';
|
|
170
|
+
get provider() {
|
|
171
|
+
return this.#provider;
|
|
172
|
+
}
|
|
173
|
+
get modelId() {
|
|
174
|
+
return this.#modelId;
|
|
175
|
+
}
|
|
176
|
+
get specificationVersion() {
|
|
177
|
+
return 'v3';
|
|
178
|
+
}
|
|
179
|
+
get supportedUrls() {
|
|
180
|
+
return {};
|
|
181
|
+
}
|
|
182
|
+
async doGenerate() {
|
|
183
|
+
return { text: 'ok' };
|
|
184
|
+
}
|
|
185
|
+
async doStream() {
|
|
186
|
+
return { stream: [] };
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const model = withMergedAssistantReasoning(new GetterBackedModel());
|
|
190
|
+
t.is(model.provider, 'example.chat');
|
|
191
|
+
t.is(model.modelId, 'selected-model');
|
|
192
|
+
t.is(model.specificationVersion, 'v3');
|
|
193
|
+
t.deepEqual(model.supportedUrls, {});
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=ai-sdk-message-normalizer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-message-normalizer.test.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-message-normalizer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ModelProvider, type Model } from '@openai/agents-core';
|
|
2
|
+
export type AiSdkOpenAICompatibleConfig = {
|
|
3
|
+
baseURL: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
headers?: Record<string, string>;
|
|
6
|
+
};
|
|
7
|
+
export type AiSdkOpenAICompatibleProviderFactory = (options: {
|
|
8
|
+
name: string;
|
|
9
|
+
baseURL: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
includeUsage?: boolean;
|
|
13
|
+
}) => (modelId: string) => any;
|
|
14
|
+
export declare class AiSdkOpenAICompatibleProvider implements ModelProvider {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(deps: {
|
|
17
|
+
label: string;
|
|
18
|
+
defaultModel: string;
|
|
19
|
+
resolveConfig: () => AiSdkOpenAICompatibleConfig;
|
|
20
|
+
createProvider?: AiSdkOpenAICompatibleProviderFactory;
|
|
21
|
+
});
|
|
22
|
+
getModel(modelName?: string): Promise<Model> | Model;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=ai-sdk-openai-compatible.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openai-compatible.provider.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG,CAAC,OAAO,EAAE;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;AAE/B,qBAAa,6BAA8B,YAAW,aAAa;;gBAMrD,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,2BAA2B,CAAC;QACjD,cAAc,CAAC,EAAE,oCAAoC,CAAC;KACvD;IAOD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;CAYrD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { aisdk } from '@openai/agents-extensions/ai-sdk';
|
|
2
|
+
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
3
|
+
import { withMergedAssistantReasoning } from './ai-sdk-message-normalizer.js';
|
|
4
|
+
export class AiSdkOpenAICompatibleProvider {
|
|
5
|
+
#label;
|
|
6
|
+
#defaultModel;
|
|
7
|
+
#resolveConfig;
|
|
8
|
+
#createProvider;
|
|
9
|
+
constructor(deps) {
|
|
10
|
+
this.#label = deps.label;
|
|
11
|
+
this.#defaultModel = deps.defaultModel;
|
|
12
|
+
this.#resolveConfig = deps.resolveConfig;
|
|
13
|
+
this.#createProvider = deps.createProvider ?? createOpenAICompatible;
|
|
14
|
+
}
|
|
15
|
+
getModel(modelName) {
|
|
16
|
+
const config = this.#resolveConfig();
|
|
17
|
+
const provider = this.#createProvider({
|
|
18
|
+
name: this.#label,
|
|
19
|
+
baseURL: config.baseURL,
|
|
20
|
+
apiKey: config.apiKey,
|
|
21
|
+
headers: config.headers,
|
|
22
|
+
includeUsage: true,
|
|
23
|
+
});
|
|
24
|
+
return aisdk(withMergedAssistantReasoning(provider(modelName || this.#defaultModel)));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ai-sdk-openai-compatible.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openai-compatible.provider.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAgB9E,MAAM,OAAO,6BAA6B;IACxC,MAAM,CAAS;IACf,aAAa,CAAS;IACtB,cAAc,CAAoC;IAClD,eAAe,CAAuC;IAEtD,YAAY,IAKX;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAK,sBAA+D,CAAC;IACjH,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,4BAA4B,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAqB,CAAC;IAC5G,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openai-compatible.provider.test.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { AiSdkOpenAICompatibleProvider } from './ai-sdk-openai-compatible.provider.js';
|
|
3
|
+
test('AiSdkOpenAICompatibleProvider creates an AI SDK model with resolved settings', (t) => {
|
|
4
|
+
const calls = [];
|
|
5
|
+
let requestedModel;
|
|
6
|
+
const provider = new AiSdkOpenAICompatibleProvider({
|
|
7
|
+
label: 'Example',
|
|
8
|
+
defaultModel: 'fallback-model',
|
|
9
|
+
resolveConfig: () => ({
|
|
10
|
+
baseURL: 'https://example.test/v1',
|
|
11
|
+
apiKey: 'test-key',
|
|
12
|
+
headers: {
|
|
13
|
+
'X-Test': 'yes',
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
createProvider: (options) => {
|
|
17
|
+
calls.push(options);
|
|
18
|
+
return (modelId) => {
|
|
19
|
+
requestedModel = modelId;
|
|
20
|
+
return {
|
|
21
|
+
specificationVersion: 'v3',
|
|
22
|
+
provider: 'example.chat',
|
|
23
|
+
modelId,
|
|
24
|
+
supportedUrls: {},
|
|
25
|
+
doGenerate: async () => ({}),
|
|
26
|
+
doStream: async () => ({ stream: [] }),
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
const model = provider.getModel('selected-model');
|
|
32
|
+
t.is(calls.length, 1);
|
|
33
|
+
t.like(calls[0], {
|
|
34
|
+
name: 'Example',
|
|
35
|
+
baseURL: 'https://example.test/v1',
|
|
36
|
+
apiKey: 'test-key',
|
|
37
|
+
headers: {
|
|
38
|
+
'X-Test': 'yes',
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
t.is(requestedModel, 'selected-model');
|
|
42
|
+
t.is(typeof model.getResponse, 'function');
|
|
43
|
+
t.is(typeof model.getStreamedResponse, 'function');
|
|
44
|
+
});
|
|
45
|
+
test('AiSdkOpenAICompatibleProvider uses the default model when none is requested', (t) => {
|
|
46
|
+
let requestedModel;
|
|
47
|
+
const provider = new AiSdkOpenAICompatibleProvider({
|
|
48
|
+
label: 'Example',
|
|
49
|
+
defaultModel: 'fallback-model',
|
|
50
|
+
resolveConfig: () => ({
|
|
51
|
+
baseURL: 'https://example.test/v1',
|
|
52
|
+
}),
|
|
53
|
+
createProvider: () => (modelId) => {
|
|
54
|
+
requestedModel = modelId;
|
|
55
|
+
return {
|
|
56
|
+
specificationVersion: 'v3',
|
|
57
|
+
provider: 'example.chat',
|
|
58
|
+
modelId,
|
|
59
|
+
supportedUrls: {},
|
|
60
|
+
doGenerate: async () => ({}),
|
|
61
|
+
doStream: async () => ({ stream: [] }),
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
provider.getModel();
|
|
66
|
+
t.is(requestedModel, 'fallback-model');
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=ai-sdk-openai-compatible.provider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openai-compatible.provider.test.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-openai-compatible.provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AAEvF,IAAI,CAAC,8EAA8E,EAAE,CAAC,CAAC,EAAE,EAAE;IACzF,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,IAAI,cAAkC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAAC;QACjD,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,OAAO,EAAE,yBAAyB;YAClC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE;gBACP,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC;QACF,cAAc,EAAE,CAAC,OAAY,EAAE,EAAE;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,CAAC,OAAe,EAAE,EAAE;gBACzB,cAAc,GAAG,OAAO,CAAC;gBACzB,OAAO;oBACL,oBAAoB,EAAE,IAAI;oBAC1B,QAAQ,EAAE,cAAc;oBACxB,OAAO;oBACP,aAAa,EAAE,EAAE;oBACjB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC5B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;iBAChC,CAAC;YACX,CAAC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAElD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,yBAAyB;QAClC,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACvC,CAAC,CAAC,EAAE,CAAC,OAAQ,KAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC,EAAE,CAAC,OAAQ,KAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6EAA6E,EAAE,CAAC,CAAC,EAAE,EAAE;IACxF,IAAI,cAAkC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAAC;QACjD,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,OAAO,EAAE,yBAAyB;SACnC,CAAC;QACF,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,OAAe,EAAE,EAAE;YACxC,cAAc,GAAG,OAAO,CAAC;YACzB,OAAO;gBACL,oBAAoB,EAAE,IAAI;gBAC1B,QAAQ,EAAE,cAAc;gBACxB,OAAO;gBACP,aAAa,EAAE,EAAE;gBACjB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aAChC,CAAC;QACX,CAAC;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEpB,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type OpenRouterProviderSettings } from '@openrouter/ai-sdk-provider';
|
|
2
|
+
import { type ModelProvider, type Model } from '@openai/agents-core';
|
|
3
|
+
export type AiSdkOpenRouterConfig = Pick<OpenRouterProviderSettings, 'baseURL' | 'apiKey' | 'headers' | 'appName' | 'appUrl'>;
|
|
4
|
+
export type AiSdkOpenRouterProviderFactory = (options: AiSdkOpenRouterConfig & {
|
|
5
|
+
compatibility?: 'strict' | 'compatible';
|
|
6
|
+
}) => (modelId: string) => any;
|
|
7
|
+
export declare class AiSdkOpenRouterProvider implements ModelProvider {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(deps: {
|
|
10
|
+
defaultModel: string;
|
|
11
|
+
resolveConfig: () => AiSdkOpenRouterConfig;
|
|
12
|
+
createProvider?: AiSdkOpenRouterProviderFactory;
|
|
13
|
+
});
|
|
14
|
+
getModel(modelName?: string): Promise<Model> | Model;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ai-sdk-openrouter.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openrouter.provider.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-openrouter.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,0BAA0B,EAC1B,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CACxD,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,CAC3C,OAAO,EAAE,qBAAqB,GAAG;IAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAA;CAAE,KACzE,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;AAE9B,qBAAa,uBAAwB,YAAW,aAAa;;gBAK/C,IAAI,EAAE;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,qBAAqB,CAAC;QAC3C,cAAc,CAAC,EAAE,8BAA8B,CAAC;KACjD;IAMD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;CASrD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { aisdk } from '@openai/agents-extensions/ai-sdk';
|
|
2
|
+
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
|
|
3
|
+
import { withMergedAssistantReasoning } from './ai-sdk-message-normalizer.js';
|
|
4
|
+
export class AiSdkOpenRouterProvider {
|
|
5
|
+
#defaultModel;
|
|
6
|
+
#resolveConfig;
|
|
7
|
+
#createProvider;
|
|
8
|
+
constructor(deps) {
|
|
9
|
+
this.#defaultModel = deps.defaultModel;
|
|
10
|
+
this.#resolveConfig = deps.resolveConfig;
|
|
11
|
+
this.#createProvider = deps.createProvider ?? createOpenRouter;
|
|
12
|
+
}
|
|
13
|
+
getModel(modelName) {
|
|
14
|
+
const config = this.#resolveConfig();
|
|
15
|
+
const provider = this.#createProvider({
|
|
16
|
+
...config,
|
|
17
|
+
compatibility: 'strict',
|
|
18
|
+
});
|
|
19
|
+
return aisdk(withMergedAssistantReasoning(provider(modelName || this.#defaultModel)));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ai-sdk-openrouter.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openrouter.provider.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-openrouter.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAmC,MAAM,6BAA6B,CAAC;AAEhG,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAW9E,MAAM,OAAO,uBAAuB;IAClC,aAAa,CAAS;IACtB,cAAc,CAA8B;IAC5C,eAAe,CAAiC;IAEhD,YAAY,IAIX;QACC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAK,gBAAmD,CAAC;IACrG,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,GAAG,MAAM;YACT,aAAa,EAAE,QAAQ;SACxB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,4BAA4B,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAqB,CAAC;IAC5G,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openrouter.provider.test.d.ts","sourceRoot":"","sources":["../../source/providers/ai-sdk-openrouter.provider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { AiSdkOpenRouterProvider } from './ai-sdk-openrouter.provider.js';
|
|
3
|
+
test('AiSdkOpenRouterProvider creates an AI SDK model with OpenRouter settings', (t) => {
|
|
4
|
+
const calls = [];
|
|
5
|
+
let requestedModel;
|
|
6
|
+
const provider = new AiSdkOpenRouterProvider({
|
|
7
|
+
defaultModel: 'openrouter/auto',
|
|
8
|
+
resolveConfig: () => ({
|
|
9
|
+
baseURL: 'https://openrouter.test/api/v1',
|
|
10
|
+
apiKey: 'sk-test',
|
|
11
|
+
headers: {
|
|
12
|
+
'HTTP-Referer': 'https://term2.test',
|
|
13
|
+
'X-Title': 'term2',
|
|
14
|
+
},
|
|
15
|
+
appName: 'term2',
|
|
16
|
+
appUrl: 'https://term2.test',
|
|
17
|
+
}),
|
|
18
|
+
createProvider: (options) => {
|
|
19
|
+
calls.push(options);
|
|
20
|
+
return (modelId) => {
|
|
21
|
+
requestedModel = modelId;
|
|
22
|
+
return {
|
|
23
|
+
specificationVersion: 'v3',
|
|
24
|
+
provider: 'openrouter.chat',
|
|
25
|
+
modelId,
|
|
26
|
+
supportedUrls: {},
|
|
27
|
+
doGenerate: async () => ({}),
|
|
28
|
+
doStream: async () => ({ stream: [] }),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const model = provider.getModel('anthropic/claude-sonnet-4.5');
|
|
34
|
+
t.is(calls.length, 1);
|
|
35
|
+
t.like(calls[0], {
|
|
36
|
+
baseURL: 'https://openrouter.test/api/v1',
|
|
37
|
+
apiKey: 'sk-test',
|
|
38
|
+
headers: {
|
|
39
|
+
'HTTP-Referer': 'https://term2.test',
|
|
40
|
+
'X-Title': 'term2',
|
|
41
|
+
},
|
|
42
|
+
appName: 'term2',
|
|
43
|
+
appUrl: 'https://term2.test',
|
|
44
|
+
compatibility: 'strict',
|
|
45
|
+
});
|
|
46
|
+
t.is(requestedModel, 'anthropic/claude-sonnet-4.5');
|
|
47
|
+
t.is(typeof model.getResponse, 'function');
|
|
48
|
+
t.is(typeof model.getStreamedResponse, 'function');
|
|
49
|
+
});
|
|
50
|
+
test('AiSdkOpenRouterProvider uses the default model when none is requested', (t) => {
|
|
51
|
+
let requestedModel;
|
|
52
|
+
const provider = new AiSdkOpenRouterProvider({
|
|
53
|
+
defaultModel: 'openrouter/auto',
|
|
54
|
+
resolveConfig: () => ({}),
|
|
55
|
+
createProvider: () => (modelId) => {
|
|
56
|
+
requestedModel = modelId;
|
|
57
|
+
return {
|
|
58
|
+
specificationVersion: 'v3',
|
|
59
|
+
provider: 'openrouter.chat',
|
|
60
|
+
modelId,
|
|
61
|
+
supportedUrls: {},
|
|
62
|
+
doGenerate: async () => ({}),
|
|
63
|
+
doStream: async () => ({ stream: [] }),
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
provider.getModel();
|
|
68
|
+
t.is(requestedModel, 'openrouter/auto');
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=ai-sdk-openrouter.provider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-openrouter.provider.test.js","sourceRoot":"","sources":["../../source/providers/ai-sdk-openrouter.provider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ModelRequest } from '@openai/agents-core';
|
|
2
|
+
import type { ILoggingService } from '../../services/service-interfaces.js';
|
|
3
|
+
export declare function addCacheControlToLastUserMessage(messages: any[]): void;
|
|
4
|
+
export declare function addCacheControlToLastToolMessage(messages: any[]): void;
|
|
5
|
+
export declare function buildMessagesFromRequest(req: ModelRequest, modelId?: string, loggingService?: ILoggingService): any[];
|
|
6
|
+
export declare function extractFunctionToolsFromRequest(req: ModelRequest): any[];
|
|
7
|
+
export declare function extractModelSettingsForRequest(settings: any): any;
|
|
8
|
+
//# sourceMappingURL=openai-compatible-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible-messages.d.ts","sourceRoot":"","sources":["../../../source/providers/common/openai-compatible-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAwI5E,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAwBtE;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAwBtE;AAuBD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,eAAe,GAAG,GAAG,EAAE,CAmIrH;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,YAAY,GAAG,GAAG,EAAE,CAsBxE;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,CAiCjE"}
|