@sweetretry/ai-sdk-volcengine-adapter 0.1.2 → 0.1.4
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/README.md +66 -10
- package/dist/chat/convert-to-volcengine-chat-message.d.ts +2 -2
- package/dist/chat/convert-to-volcengine-chat-message.js +47 -47
- package/dist/chat/convert-to-volcengine-chat-message.js.map +1 -1
- package/dist/chat/convert-volcengine-chat-usage.d.ts +1 -1
- package/dist/chat/convert-volcengine-chat-usage.js.map +1 -1
- package/dist/chat/get-response-metadata.js.map +1 -1
- package/dist/chat/index.d.ts +2 -2
- package/dist/chat/index.js +1 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/map-volcengine-finish-reason.d.ts +1 -1
- package/dist/chat/map-volcengine-finish-reason.js +10 -10
- package/dist/chat/map-volcengine-finish-reason.js.map +1 -1
- package/dist/chat/volcengine-chat-language-model.d.ts +2 -2
- package/dist/chat/volcengine-chat-language-model.js +53 -53
- package/dist/chat/volcengine-chat-language-model.js.map +1 -1
- package/dist/chat/volcengine-chat-options.d.ts +1 -1
- package/dist/chat/volcengine-chat-options.js +20 -20
- package/dist/chat/volcengine-chat-options.js.map +1 -1
- package/dist/chat/volcengine-chat-prompt.js.map +1 -1
- package/dist/chat/volcengine-error.js +2 -2
- package/dist/chat/volcengine-error.js.map +1 -1
- package/dist/image/index.d.ts +1 -1
- package/dist/image/index.js +1 -1
- package/dist/image/index.js.map +1 -1
- package/dist/image/volcengine-image-api.d.ts +1 -1
- package/dist/image/volcengine-image-api.js +1 -1
- package/dist/image/volcengine-image-api.js.map +1 -1
- package/dist/image/volcengine-image-model.d.ts +3 -3
- package/dist/image/volcengine-image-model.js +13 -13
- package/dist/image/volcengine-image-model.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/tool/index.d.ts +1 -1
- package/dist/tool/index.js +1 -1
- package/dist/tool/index.js.map +1 -1
- package/dist/tool/web-search.d.ts +1 -1
- package/dist/tool/web-search.js +4 -4
- package/dist/tool/web-search.js.map +1 -1
- package/dist/version.js.map +1 -1
- package/dist/volcengine-provider.d.ts +5 -5
- package/dist/volcengine-provider.js +13 -13
- package/dist/volcengine-provider.js.map +1 -1
- package/dist/volcengine-tools.js +1 -1
- package/dist/volcengine-tools.js.map +1 -1
- package/package.json +8 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install ai-sdk-volcengine-adapter
|
|
8
|
+
npm install @sweetretry/ai-sdk-volcengine-adapter
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Setup
|
|
@@ -19,7 +19,7 @@ export ARK_API_KEY=your-api-key
|
|
|
19
19
|
Or pass it directly when creating the provider:
|
|
20
20
|
|
|
21
21
|
```typescript
|
|
22
|
-
import { createVolcengine } from 'ai-sdk-volcengine-adapter';
|
|
22
|
+
import { createVolcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
23
23
|
|
|
24
24
|
const volcengine = createVolcengine({
|
|
25
25
|
apiKey: 'your-api-key',
|
|
@@ -32,7 +32,7 @@ const volcengine = createVolcengine({
|
|
|
32
32
|
|
|
33
33
|
```typescript
|
|
34
34
|
import { generateText } from 'ai';
|
|
35
|
-
import { volcengine } from 'ai-sdk-volcengine-adapter';
|
|
35
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
36
36
|
|
|
37
37
|
const { text } = await generateText({
|
|
38
38
|
model: volcengine('doubao-seed-1-8-251228'),
|
|
@@ -46,7 +46,7 @@ console.log(text);
|
|
|
46
46
|
|
|
47
47
|
```typescript
|
|
48
48
|
import { streamText } from 'ai';
|
|
49
|
-
import { volcengine } from 'ai-sdk-volcengine-adapter';
|
|
49
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
50
50
|
|
|
51
51
|
const result = streamText({
|
|
52
52
|
model: volcengine('doubao-seed-1-8-251228'),
|
|
@@ -64,7 +64,7 @@ Enable extended thinking to get reasoning content from the model:
|
|
|
64
64
|
|
|
65
65
|
```typescript
|
|
66
66
|
import { streamText } from 'ai';
|
|
67
|
-
import { volcengine } from 'ai-sdk-volcengine-adapter';
|
|
67
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
68
68
|
|
|
69
69
|
const result = streamText({
|
|
70
70
|
model: volcengine('doubao-seed-1-8-251228'),
|
|
@@ -85,11 +85,60 @@ for await (const part of result.fullStream) {
|
|
|
85
85
|
}
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
### PDF File Support
|
|
89
|
+
|
|
90
|
+
You can include PDF files in your messages:
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { generateText } from 'ai';
|
|
94
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
95
|
+
import fs from 'fs';
|
|
96
|
+
|
|
97
|
+
const pdfBuffer = fs.readFileSync('document.pdf');
|
|
98
|
+
|
|
99
|
+
const { text } = await generateText({
|
|
100
|
+
model: volcengine('doubao-seed-1-6-vision-250815'),
|
|
101
|
+
messages: [
|
|
102
|
+
{
|
|
103
|
+
role: 'user',
|
|
104
|
+
content: [
|
|
105
|
+
{
|
|
106
|
+
type: 'file',
|
|
107
|
+
data: pdfBuffer,
|
|
108
|
+
mimeType: 'application/pdf',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'text',
|
|
112
|
+
text: 'Summarize this PDF document.',
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Image Generation
|
|
121
|
+
|
|
122
|
+
Generate images using Volcengine's image models:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { generateImage } from 'ai';
|
|
126
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
127
|
+
|
|
128
|
+
const { images } = await generateImage({
|
|
129
|
+
model: volcengine.image('doubao-seedream-4-5-251128'),
|
|
130
|
+
prompt: 'A beautiful sunset over mountains',
|
|
131
|
+
size: '1024x1024',
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// images[0] contains the base64 encoded image
|
|
135
|
+
```
|
|
136
|
+
|
|
88
137
|
### Tool Calling
|
|
89
138
|
|
|
90
139
|
```typescript
|
|
91
140
|
import { generateText } from 'ai';
|
|
92
|
-
import { volcengine } from 'ai-sdk-volcengine-adapter';
|
|
141
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
93
142
|
import { z } from 'zod';
|
|
94
143
|
|
|
95
144
|
const { text, toolCalls } = await generateText({
|
|
@@ -115,7 +164,7 @@ Use the built-in web search tool:
|
|
|
115
164
|
|
|
116
165
|
```typescript
|
|
117
166
|
import { generateText } from 'ai';
|
|
118
|
-
import { volcengine, volcengineTools } from 'ai-sdk-volcengine-adapter';
|
|
167
|
+
import { volcengine, volcengineTools } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
119
168
|
|
|
120
169
|
const { text } = await generateText({
|
|
121
170
|
model: volcengine('doubao-seed-1-8-251228'),
|
|
@@ -128,18 +177,25 @@ const { text } = await generateText({
|
|
|
128
177
|
|
|
129
178
|
## Supported Models
|
|
130
179
|
|
|
180
|
+
### Chat Models
|
|
181
|
+
|
|
131
182
|
- `doubao-seed-1-8-251228` - Latest Doubao Seed model
|
|
132
183
|
- `doubao-seed-code-preview-251028` - Code-optimized model
|
|
133
184
|
- `doubao-seed-1-6-lite-251015` - Lightweight model
|
|
134
185
|
- `doubao-seed-1-6-flash-250828` - Fast inference model
|
|
135
|
-
- `doubao-seed-1-6-vision-250815` - Vision-capable model
|
|
186
|
+
- `doubao-seed-1-6-vision-250815` - Vision-capable model (supports images and PDFs)
|
|
187
|
+
|
|
188
|
+
### Image Models
|
|
189
|
+
|
|
190
|
+
- `doubao-seedream-4-5-251128` - Latest Seedream image generation model
|
|
191
|
+
- `doubao-seedream-4-0-250828` - Seedream 4.0 model
|
|
136
192
|
|
|
137
193
|
You can also use any model ID string for custom endpoints.
|
|
138
194
|
|
|
139
195
|
## Provider Options
|
|
140
196
|
|
|
141
197
|
```typescript
|
|
142
|
-
import { createVolcengine } from 'ai-sdk-volcengine-adapter';
|
|
198
|
+
import { createVolcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
143
199
|
|
|
144
200
|
const volcengine = createVolcengine({
|
|
145
201
|
// Custom base URL (default: https://ark.cn-beijing.volces.com/api/v3)
|
|
@@ -162,7 +218,7 @@ const volcengine = createVolcengine({
|
|
|
162
218
|
|
|
163
219
|
```typescript
|
|
164
220
|
import { generateText } from 'ai';
|
|
165
|
-
import { volcengine } from 'ai-sdk-volcengine-adapter';
|
|
221
|
+
import { volcengine } from '@sweetretry/ai-sdk-volcengine-adapter';
|
|
166
222
|
|
|
167
223
|
const { text } = await generateText({
|
|
168
224
|
model: volcengine('doubao-seed-1-8-251228'),
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { LanguageModelV3Prompt } from
|
|
2
|
-
import { VolcengineChatPrompt } from
|
|
1
|
+
import { LanguageModelV3Prompt } from '@ai-sdk/provider';
|
|
2
|
+
import { VolcengineChatPrompt } from './volcengine-chat-prompt';
|
|
3
3
|
export declare function convertToVolcengineChatMessages(prompt: LanguageModelV3Prompt): VolcengineChatPrompt;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { UnsupportedFunctionalityError } from
|
|
2
|
-
import { convertToBase64 } from
|
|
1
|
+
import { UnsupportedFunctionalityError } from '@ai-sdk/provider';
|
|
2
|
+
import { convertToBase64 } from '@ai-sdk/provider-utils';
|
|
3
3
|
function formatDataUrl(data, mediaType) {
|
|
4
4
|
if (data instanceof URL) {
|
|
5
5
|
return data.toString();
|
|
6
6
|
}
|
|
7
|
-
if (typeof data ===
|
|
8
|
-
return data.startsWith(
|
|
7
|
+
if (typeof data === 'string') {
|
|
8
|
+
return data.startsWith('data:') ? data : `data:${mediaType};base64,${data}`;
|
|
9
9
|
}
|
|
10
10
|
return `data:${mediaType};base64,${convertToBase64(data)}`;
|
|
11
11
|
}
|
|
@@ -13,74 +13,74 @@ export function convertToVolcengineChatMessages(prompt) {
|
|
|
13
13
|
const messages = [];
|
|
14
14
|
for (const message of prompt){
|
|
15
15
|
switch(message.role){
|
|
16
|
-
case
|
|
16
|
+
case 'system':
|
|
17
17
|
{
|
|
18
18
|
messages.push({
|
|
19
|
-
role:
|
|
19
|
+
role: 'system',
|
|
20
20
|
content: message.content
|
|
21
21
|
});
|
|
22
22
|
break;
|
|
23
23
|
}
|
|
24
|
-
case
|
|
24
|
+
case 'user':
|
|
25
25
|
{
|
|
26
26
|
messages.push({
|
|
27
|
-
role:
|
|
27
|
+
role: 'user',
|
|
28
28
|
content: message.content.map((part)=>{
|
|
29
29
|
switch(part.type){
|
|
30
|
-
case
|
|
30
|
+
case 'text':
|
|
31
31
|
return {
|
|
32
|
-
type:
|
|
32
|
+
type: 'text',
|
|
33
33
|
text: part.text
|
|
34
34
|
};
|
|
35
|
-
case
|
|
35
|
+
case 'file':
|
|
36
36
|
{
|
|
37
37
|
const { mediaType, data } = part;
|
|
38
|
-
if (mediaType.startsWith(
|
|
38
|
+
if (mediaType.startsWith('image/')) {
|
|
39
39
|
return {
|
|
40
|
-
type:
|
|
40
|
+
type: 'image_url',
|
|
41
41
|
image_url: {
|
|
42
42
|
url: formatDataUrl(data, mediaType)
|
|
43
43
|
}
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
if (mediaType.startsWith(
|
|
46
|
+
if (mediaType.startsWith('video/')) {
|
|
47
47
|
return {
|
|
48
|
-
type:
|
|
48
|
+
type: 'video_url',
|
|
49
49
|
video_url: {
|
|
50
50
|
url: formatDataUrl(data, mediaType)
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
if (mediaType ===
|
|
54
|
+
if (mediaType === 'application/pdf') {
|
|
55
55
|
// URL format
|
|
56
56
|
if (data instanceof URL) {
|
|
57
57
|
return {
|
|
58
|
-
type:
|
|
58
|
+
type: 'input_file',
|
|
59
59
|
file_url: data.toString()
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
// String: could be URL or base64
|
|
63
|
-
if (typeof data ===
|
|
63
|
+
if (typeof data === 'string') {
|
|
64
64
|
// Check if it's a URL (http/https) or data URL
|
|
65
|
-
if (data.startsWith(
|
|
65
|
+
if (data.startsWith('http://') || data.startsWith('https://')) {
|
|
66
66
|
return {
|
|
67
|
-
type:
|
|
67
|
+
type: 'input_file',
|
|
68
68
|
file_url: data
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
// Base64 string or data URL
|
|
72
|
-
const base64Data = data.startsWith(
|
|
72
|
+
const base64Data = data.startsWith('data:') ? data : `data:application/pdf;base64,${data}`;
|
|
73
73
|
return {
|
|
74
|
-
type:
|
|
74
|
+
type: 'input_file',
|
|
75
75
|
file_data: base64Data,
|
|
76
|
-
filename: part.filename ??
|
|
76
|
+
filename: part.filename ?? 'document.pdf'
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
// Uint8Array: convert to base64
|
|
80
80
|
return {
|
|
81
|
-
type:
|
|
81
|
+
type: 'input_file',
|
|
82
82
|
file_data: `data:application/pdf;base64,${convertToBase64(data)}`,
|
|
83
|
-
filename: part.filename ??
|
|
83
|
+
filename: part.filename ?? 'document.pdf'
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
throw new UnsupportedFunctionalityError({
|
|
@@ -99,31 +99,31 @@ export function convertToVolcengineChatMessages(prompt) {
|
|
|
99
99
|
});
|
|
100
100
|
break;
|
|
101
101
|
}
|
|
102
|
-
case
|
|
102
|
+
case 'assistant':
|
|
103
103
|
{
|
|
104
|
-
let text =
|
|
104
|
+
let text = '';
|
|
105
105
|
let reasoningContent;
|
|
106
106
|
const toolCalls = [];
|
|
107
107
|
for (const part of message.content){
|
|
108
108
|
switch(part.type){
|
|
109
|
-
case
|
|
109
|
+
case 'text':
|
|
110
110
|
text += part.text;
|
|
111
111
|
break;
|
|
112
|
-
case
|
|
113
|
-
reasoningContent = (reasoningContent ??
|
|
112
|
+
case 'reasoning':
|
|
113
|
+
reasoningContent = (reasoningContent ?? '') + part.text;
|
|
114
114
|
break;
|
|
115
|
-
case
|
|
115
|
+
case 'tool-call':
|
|
116
116
|
toolCalls.push({
|
|
117
117
|
id: part.toolCallId,
|
|
118
|
-
type:
|
|
118
|
+
type: 'function',
|
|
119
119
|
function: {
|
|
120
120
|
name: part.toolName,
|
|
121
|
-
arguments: typeof part.input ===
|
|
121
|
+
arguments: typeof part.input === 'string' ? part.input : JSON.stringify(part.input)
|
|
122
122
|
}
|
|
123
123
|
});
|
|
124
124
|
break;
|
|
125
|
-
case
|
|
126
|
-
case
|
|
125
|
+
case 'file':
|
|
126
|
+
case 'tool-result':
|
|
127
127
|
break;
|
|
128
128
|
default:
|
|
129
129
|
{
|
|
@@ -135,39 +135,39 @@ export function convertToVolcengineChatMessages(prompt) {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
messages.push({
|
|
138
|
-
role:
|
|
138
|
+
role: 'assistant',
|
|
139
139
|
content: text,
|
|
140
140
|
reasoning_content: reasoningContent,
|
|
141
141
|
tool_calls: toolCalls.length > 0 ? toolCalls : undefined
|
|
142
142
|
});
|
|
143
143
|
break;
|
|
144
144
|
}
|
|
145
|
-
case
|
|
145
|
+
case 'tool':
|
|
146
146
|
{
|
|
147
147
|
for (const toolResponse of message.content){
|
|
148
|
-
if (toolResponse.type ===
|
|
148
|
+
if (toolResponse.type === 'tool-approval-response') {
|
|
149
149
|
continue;
|
|
150
150
|
}
|
|
151
151
|
const { output } = toolResponse;
|
|
152
152
|
let content;
|
|
153
153
|
switch(output.type){
|
|
154
|
-
case
|
|
155
|
-
case
|
|
154
|
+
case 'text':
|
|
155
|
+
case 'error-text':
|
|
156
156
|
content = output.value;
|
|
157
157
|
break;
|
|
158
|
-
case
|
|
159
|
-
case
|
|
158
|
+
case 'json':
|
|
159
|
+
case 'error-json':
|
|
160
160
|
content = JSON.stringify(output.value);
|
|
161
161
|
break;
|
|
162
|
-
case
|
|
163
|
-
content = output.reason ??
|
|
162
|
+
case 'execution-denied':
|
|
163
|
+
content = output.reason ?? 'Tool execution denied.';
|
|
164
164
|
break;
|
|
165
|
-
case
|
|
166
|
-
content = output.value.map((v)=>v.type ===
|
|
165
|
+
case 'content':
|
|
166
|
+
content = output.value.map((v)=>v.type === 'text' ? v.text : JSON.stringify(v)).join('\n');
|
|
167
167
|
break;
|
|
168
168
|
}
|
|
169
169
|
messages.push({
|
|
170
|
-
role:
|
|
170
|
+
role: 'tool',
|
|
171
171
|
tool_call_id: toolResponse.toolCallId,
|
|
172
172
|
content
|
|
173
173
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/convert-to-volcengine-chat-message.ts"],"sourcesContent":["import {\n LanguageModelV3DataContent,\n LanguageModelV3Prompt,\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertToBase64 } from \"@ai-sdk/provider-utils\";\nimport {\n VolcengineChatAssistantMessage,\n VolcengineChatPrompt,\n VolcengineChatUserMessageContent\n} from \"./volcengine-chat-prompt\";\n\nfunction formatDataUrl(data: LanguageModelV3DataContent, mediaType: string): string {\n if (data instanceof URL) {\n return data.toString();\n }\n if (typeof data === \"string\") {\n return data.startsWith(\"data:\") ? data : `data:${mediaType};base64,${data}`;\n }\n return `data:${mediaType};base64,${convertToBase64(data)}`;\n}\n\n\nexport function convertToVolcengineChatMessages(\n prompt: LanguageModelV3Prompt\n): VolcengineChatPrompt {\n const messages: VolcengineChatPrompt = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: message.content\n });\n break;\n }\n\n case \"user\": {\n messages.push({\n role: \"user\",\n content: message.content.map((part): VolcengineChatUserMessageContent => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"file\": {\n const { mediaType, data } = part;\n\n if (mediaType.startsWith(\"image/\")) {\n return {\n type: \"image_url\",\n image_url: { url: formatDataUrl(data, mediaType) }\n };\n }\n if (mediaType.startsWith(\"video/\")) {\n return {\n type: \"video_url\",\n video_url: { url: formatDataUrl(data, mediaType) }\n };\n }\n if (mediaType === \"application/pdf\") {\n // URL format\n if (data instanceof URL) {\n return {\n type: \"input_file\",\n file_url: data.toString()\n };\n }\n // String: could be URL or base64\n if (typeof data === \"string\") {\n // Check if it's a URL (http/https) or data URL\n if (data.startsWith(\"http://\") || data.startsWith(\"https://\")) {\n return {\n type: \"input_file\",\n file_url: data\n };\n }\n // Base64 string or data URL\n const base64Data = data.startsWith(\"data:\")\n ? data\n : `data:application/pdf;base64,${data}`;\n return {\n type: \"input_file\",\n file_data: base64Data,\n filename: part.filename ?? \"document.pdf\"\n };\n }\n // Uint8Array: convert to base64\n return {\n type: \"input_file\",\n file_data: `data:application/pdf;base64,${convertToBase64(data)}`,\n filename: part.filename ?? \"document.pdf\"\n };\n }\n throw new UnsupportedFunctionalityError({\n functionality: `File type: ${mediaType}`\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `User message part type: ${(_exhaustiveCheck as { type: string }).type}`\n });\n }\n }\n })\n });\n break;\n }\n\n case \"assistant\": {\n let text = \"\";\n let reasoningContent: string | undefined;\n const toolCalls: VolcengineChatAssistantMessage[\"tool_calls\"] = [];\n\n for (const part of message.content) {\n switch (part.type) {\n case \"text\":\n text += part.text;\n break;\n case \"reasoning\":\n reasoningContent = (reasoningContent ?? \"\") + part.text;\n break;\n case \"tool-call\":\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments:\n typeof part.input === \"string\"\n ? part.input\n : JSON.stringify(part.input)\n }\n });\n break;\n case \"file\":\n case \"tool-result\":\n // Skip file and tool-result in assistant messages\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `Assistant message part type: ${(_exhaustiveCheck as { type: string }).type}`\n });\n }\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: text,\n reasoning_content: reasoningContent,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined\n });\n break;\n }\n\n case \"tool\": {\n for (const toolResponse of message.content) {\n if (toolResponse.type === \"tool-approval-response\") {\n continue;\n }\n\n const { output } = toolResponse;\n let content: string;\n\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n content = output.value;\n break;\n case \"json\":\n case \"error-json\":\n content = JSON.stringify(output.value);\n break;\n case \"execution-denied\":\n content = output.reason ?? \"Tool execution denied.\";\n break;\n case \"content\":\n content = output.value\n .map((v) => (v.type === \"text\" ? v.text : JSON.stringify(v)))\n .join(\"\\n\");\n break;\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = message;\n throw new UnsupportedFunctionalityError({\n functionality: `Message role: ${(_exhaustiveCheck as { role: string }).role}`\n });\n }\n }\n }\n\n return messages;\n}\n"],"names":["UnsupportedFunctionalityError","convertToBase64","formatDataUrl","data","mediaType","URL","toString","startsWith","convertToVolcengineChatMessages","prompt","messages","message","role","push","content","map","part","type","text","image_url","url","video_url","file_url","base64Data","file_data","filename","functionality","_exhaustiveCheck","reasoningContent","toolCalls","id","toolCallId","function","name","toolName","arguments","input","JSON","stringify","reasoning_content","tool_calls","length","undefined","toolResponse","output","value","reason","v","join","tool_call_id"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/chat/convert-to-volcengine-chat-message.ts"],"sourcesContent":["import {\n LanguageModelV3DataContent,\n LanguageModelV3Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport {\n VolcengineChatAssistantMessage,\n VolcengineChatPrompt,\n VolcengineChatUserMessageContent,\n} from './volcengine-chat-prompt';\n\nfunction formatDataUrl(\n data: LanguageModelV3DataContent,\n mediaType: string,\n): string {\n if (data instanceof URL) {\n return data.toString();\n }\n if (typeof data === 'string') {\n return data.startsWith('data:') ? data : `data:${mediaType};base64,${data}`;\n }\n return `data:${mediaType};base64,${convertToBase64(data)}`;\n}\n\nexport function convertToVolcengineChatMessages(\n prompt: LanguageModelV3Prompt,\n): VolcengineChatPrompt {\n const messages: VolcengineChatPrompt = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case 'system': {\n messages.push({\n role: 'system',\n content: message.content,\n });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: message.content.map(\n (part): VolcengineChatUserMessageContent => {\n switch (part.type) {\n case 'text':\n return { type: 'text', text: part.text };\n\n case 'file': {\n const { mediaType, data } = part;\n\n if (mediaType.startsWith('image/')) {\n return {\n type: 'image_url',\n image_url: { url: formatDataUrl(data, mediaType) },\n };\n }\n if (mediaType.startsWith('video/')) {\n return {\n type: 'video_url',\n video_url: { url: formatDataUrl(data, mediaType) },\n };\n }\n if (mediaType === 'application/pdf') {\n // URL format\n if (data instanceof URL) {\n return {\n type: 'input_file',\n file_url: data.toString(),\n };\n }\n // String: could be URL or base64\n if (typeof data === 'string') {\n // Check if it's a URL (http/https) or data URL\n if (\n data.startsWith('http://') ||\n data.startsWith('https://')\n ) {\n return {\n type: 'input_file',\n file_url: data,\n };\n }\n // Base64 string or data URL\n const base64Data = data.startsWith('data:')\n ? data\n : `data:application/pdf;base64,${data}`;\n return {\n type: 'input_file',\n file_data: base64Data,\n filename: part.filename ?? 'document.pdf',\n };\n }\n // Uint8Array: convert to base64\n return {\n type: 'input_file',\n file_data: `data:application/pdf;base64,${convertToBase64(data)}`,\n filename: part.filename ?? 'document.pdf',\n };\n }\n throw new UnsupportedFunctionalityError({\n functionality: `File type: ${mediaType}`,\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `User message part type: ${(_exhaustiveCheck as { type: string }).type}`,\n });\n }\n }\n },\n ),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoningContent: string | undefined;\n const toolCalls: VolcengineChatAssistantMessage['tool_calls'] = [];\n\n for (const part of message.content) {\n switch (part.type) {\n case 'text':\n text += part.text;\n break;\n case 'reasoning':\n reasoningContent = (reasoningContent ?? '') + part.text;\n break;\n case 'tool-call':\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments:\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input),\n },\n });\n break;\n case 'file':\n case 'tool-result':\n // Skip file and tool-result in assistant messages\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `Assistant message part type: ${(_exhaustiveCheck as { type: string }).type}`,\n });\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n reasoning_content: reasoningContent,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n break;\n }\n\n case 'tool': {\n for (const toolResponse of message.content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\n const { output } = toolResponse;\n let content: string;\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n content = output.value;\n break;\n case 'json':\n case 'error-json':\n content = JSON.stringify(output.value);\n break;\n case 'execution-denied':\n content = output.reason ?? 'Tool execution denied.';\n break;\n case 'content':\n content = output.value\n .map(v => (v.type === 'text' ? v.text : JSON.stringify(v)))\n .join('\\n');\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = message;\n throw new UnsupportedFunctionalityError({\n functionality: `Message role: ${(_exhaustiveCheck as { role: string }).role}`,\n });\n }\n }\n }\n\n return messages;\n}\n"],"names":["UnsupportedFunctionalityError","convertToBase64","formatDataUrl","data","mediaType","URL","toString","startsWith","convertToVolcengineChatMessages","prompt","messages","message","role","push","content","map","part","type","text","image_url","url","video_url","file_url","base64Data","file_data","filename","functionality","_exhaustiveCheck","reasoningContent","toolCalls","id","toolCallId","function","name","toolName","arguments","input","JSON","stringify","reasoning_content","tool_calls","length","undefined","toolResponse","output","value","reason","v","join","tool_call_id"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/convert-volcengine-chat-usage.ts"],"sourcesContent":["import { LanguageModelV3Usage } from
|
|
1
|
+
{"version":3,"sources":["../../src/chat/convert-volcengine-chat-usage.ts"],"sourcesContent":["import { LanguageModelV3Usage } from '@ai-sdk/provider';\n\n/**\n * Volcengine API usage response structure\n * @see https://www.volcengine.com/docs/82379/1494384\n */\nexport type VolcengineUsage = {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n};\n\n/**\n * Converts Volcengine usage data to the AI SDK's LanguageModelV3Usage format.\n *\n * Field mappings:\n * - prompt_tokens → inputTokens.total\n * - prompt_tokens - cached_tokens → inputTokens.noCache\n * - cached_tokens → inputTokens.cacheRead\n * - completion_tokens → outputTokens.total\n * - completion_tokens - reasoning_tokens → outputTokens.text\n * - reasoning_tokens → outputTokens.reasoning\n */\nexport function convertVolcengineUsage(\n usage: VolcengineUsage | undefined | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n }\n\n const promptTokens = usage.prompt_tokens;\n const completionTokens = usage.completion_tokens;\n const cachedTokens = usage.prompt_tokens_details?.cached_tokens;\n const reasoningTokens = usage.completion_tokens_details?.reasoning_tokens;\n\n // Calculate non-cached input tokens\n const noCacheTokens =\n promptTokens != null && cachedTokens != null\n ? promptTokens - cachedTokens\n : promptTokens;\n\n // Calculate text output tokens (completion minus reasoning)\n const textTokens =\n completionTokens != null && reasoningTokens != null\n ? completionTokens - reasoningTokens\n : completionTokens;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: noCacheTokens,\n cacheRead: cachedTokens,\n cacheWrite: undefined, // Volcengine API doesn't report cache write tokens\n },\n outputTokens: {\n total: completionTokens,\n text: textTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n"],"names":["convertVolcengineUsage","usage","inputTokens","total","undefined","noCache","cacheRead","cacheWrite","outputTokens","text","reasoning","promptTokens","prompt_tokens","completionTokens","completion_tokens","cachedTokens","prompt_tokens_details","cached_tokens","reasoningTokens","completion_tokens_details","reasoning_tokens","noCacheTokens","textTokens","raw"],"mappings":"AAkBA;;;;;;;;;;CAUC,GACD,OAAO,SAASA,uBACdC,KAAyC;IAEzC,IAAIA,SAAS,MAAM;QACjB,OAAO;YACLC,aAAa;gBACXC,OAAOC;gBACPC,SAASD;gBACTE,WAAWF;gBACXG,YAAYH;YACd;YACAI,cAAc;gBACZL,OAAOC;gBACPK,MAAML;gBACNM,WAAWN;YACb;QACF;IACF;IAEA,MAAMO,eAAeV,MAAMW,aAAa;IACxC,MAAMC,mBAAmBZ,MAAMa,iBAAiB;IAChD,MAAMC,eAAed,MAAMe,qBAAqB,EAAEC;IAClD,MAAMC,kBAAkBjB,MAAMkB,yBAAyB,EAAEC;IAEzD,oCAAoC;IACpC,MAAMC,gBACJV,gBAAgB,QAAQI,gBAAgB,OACpCJ,eAAeI,eACfJ;IAEN,4DAA4D;IAC5D,MAAMW,aACJT,oBAAoB,QAAQK,mBAAmB,OAC3CL,mBAAmBK,kBACnBL;IAEN,OAAO;QACLX,aAAa;YACXC,OAAOQ;YACPN,SAASgB;YACTf,WAAWS;YACXR,YAAYH;QACd;QACAI,cAAc;YACZL,OAAOU;YACPJ,MAAMa;YACNZ,WAAWQ;QACb;QACAK,KAAKtB;IACP;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/get-response-metadata.ts"],"sourcesContent":["export function getResponseMetadata(response: {\n id?: string;\n model?: string;\n created?: number;\n}) {\n return {\n id: response.id,\n modelId: response.model,\n timestamp
|
|
1
|
+
{"version":3,"sources":["../../src/chat/get-response-metadata.ts"],"sourcesContent":["export function getResponseMetadata(response: {\n id?: string;\n model?: string;\n created?: number;\n}) {\n return {\n id: response.id,\n modelId: response.model,\n timestamp:\n response.created != null ? new Date(response.created * 1000) : undefined,\n };\n}\n"],"names":["getResponseMetadata","response","id","modelId","model","timestamp","created","Date","undefined"],"mappings":"AAAA,OAAO,SAASA,oBAAoBC,QAInC;IACC,OAAO;QACLC,IAAID,SAASC,EAAE;QACfC,SAASF,SAASG,KAAK;QACvBC,WACEJ,SAASK,OAAO,IAAI,OAAO,IAAIC,KAAKN,SAASK,OAAO,GAAG,QAAQE;IACnE;AACF"}
|
package/dist/chat/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { VolcengineChatLanguageModel, type VolcengineChatConfig, } from
|
|
2
|
-
export { type VolcengineChatOptions, type VolcengineModelId, } from
|
|
1
|
+
export { VolcengineChatLanguageModel, type VolcengineChatConfig, } from './volcengine-chat-language-model';
|
|
2
|
+
export { type VolcengineChatOptions, type VolcengineModelId, } from './volcengine-chat-options';
|
package/dist/chat/index.js
CHANGED
package/dist/chat/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/index.ts"],"sourcesContent":["export {\n VolcengineChatLanguageModel,\n type VolcengineChatConfig,\n} from
|
|
1
|
+
{"version":3,"sources":["../../src/chat/index.ts"],"sourcesContent":["export {\n VolcengineChatLanguageModel,\n type VolcengineChatConfig,\n} from './volcengine-chat-language-model';\nexport {\n type VolcengineChatOptions,\n type VolcengineModelId,\n} from './volcengine-chat-options';\n"],"names":["VolcengineChatLanguageModel"],"mappings":"AAAA,SACEA,2BAA2B,QAEtB,mCAAmC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { LanguageModelV3FinishReason } from
|
|
1
|
+
import { LanguageModelV3FinishReason } from '@ai-sdk/provider';
|
|
2
2
|
export declare function mapVolcengineFinishReason(finishReason: string | null | undefined): LanguageModelV3FinishReason;
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
export function mapVolcengineFinishReason(finishReason) {
|
|
2
2
|
switch(finishReason){
|
|
3
|
-
case
|
|
3
|
+
case 'stop':
|
|
4
4
|
return {
|
|
5
|
-
unified:
|
|
5
|
+
unified: 'stop',
|
|
6
6
|
raw: finishReason
|
|
7
7
|
};
|
|
8
|
-
case
|
|
8
|
+
case 'length':
|
|
9
9
|
return {
|
|
10
|
-
unified:
|
|
10
|
+
unified: 'length',
|
|
11
11
|
raw: finishReason
|
|
12
12
|
};
|
|
13
|
-
case
|
|
14
|
-
case
|
|
13
|
+
case 'tool_calls':
|
|
14
|
+
case 'function_call':
|
|
15
15
|
return {
|
|
16
|
-
unified:
|
|
16
|
+
unified: 'tool-calls',
|
|
17
17
|
raw: finishReason
|
|
18
18
|
};
|
|
19
|
-
case
|
|
19
|
+
case 'content_filter':
|
|
20
20
|
return {
|
|
21
|
-
unified:
|
|
21
|
+
unified: 'content-filter',
|
|
22
22
|
raw: finishReason
|
|
23
23
|
};
|
|
24
24
|
default:
|
|
25
25
|
return {
|
|
26
|
-
unified:
|
|
26
|
+
unified: 'other',
|
|
27
27
|
raw: finishReason ?? undefined
|
|
28
28
|
};
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/map-volcengine-finish-reason.ts"],"sourcesContent":["import { LanguageModelV3FinishReason } from
|
|
1
|
+
{"version":3,"sources":["../../src/chat/map-volcengine-finish-reason.ts"],"sourcesContent":["import { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapVolcengineFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n switch (finishReason) {\n case 'stop':\n return { unified: 'stop', raw: finishReason };\n case 'length':\n return { unified: 'length', raw: finishReason };\n case 'tool_calls':\n case 'function_call':\n return { unified: 'tool-calls', raw: finishReason };\n case 'content_filter':\n return { unified: 'content-filter', raw: finishReason };\n default:\n return { unified: 'other', raw: finishReason ?? undefined };\n }\n}\n"],"names":["mapVolcengineFinishReason","finishReason","unified","raw","undefined"],"mappings":"AAEA,OAAO,SAASA,0BACdC,YAAuC;IAEvC,OAAQA;QACN,KAAK;YACH,OAAO;gBAAEC,SAAS;gBAAQC,KAAKF;YAAa;QAC9C,KAAK;YACH,OAAO;gBAAEC,SAAS;gBAAUC,KAAKF;YAAa;QAChD,KAAK;QACL,KAAK;YACH,OAAO;gBAAEC,SAAS;gBAAcC,KAAKF;YAAa;QACpD,KAAK;YACH,OAAO;gBAAEC,SAAS;gBAAkBC,KAAKF;YAAa;QACxD;YACE,OAAO;gBAAEC,SAAS;gBAASC,KAAKF,gBAAgBG;YAAU;IAC9D;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult } from
|
|
2
|
-
import { FetchFunction } from
|
|
1
|
+
import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult } from '@ai-sdk/provider';
|
|
2
|
+
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
export type VolcengineChatConfig = {
|
|
4
4
|
provider: string;
|
|
5
5
|
baseURL: string;
|