@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.
Files changed (47) hide show
  1. package/README.md +66 -10
  2. package/dist/chat/convert-to-volcengine-chat-message.d.ts +2 -2
  3. package/dist/chat/convert-to-volcengine-chat-message.js +47 -47
  4. package/dist/chat/convert-to-volcengine-chat-message.js.map +1 -1
  5. package/dist/chat/convert-volcengine-chat-usage.d.ts +1 -1
  6. package/dist/chat/convert-volcengine-chat-usage.js.map +1 -1
  7. package/dist/chat/get-response-metadata.js.map +1 -1
  8. package/dist/chat/index.d.ts +2 -2
  9. package/dist/chat/index.js +1 -1
  10. package/dist/chat/index.js.map +1 -1
  11. package/dist/chat/map-volcengine-finish-reason.d.ts +1 -1
  12. package/dist/chat/map-volcengine-finish-reason.js +10 -10
  13. package/dist/chat/map-volcengine-finish-reason.js.map +1 -1
  14. package/dist/chat/volcengine-chat-language-model.d.ts +2 -2
  15. package/dist/chat/volcengine-chat-language-model.js +53 -53
  16. package/dist/chat/volcengine-chat-language-model.js.map +1 -1
  17. package/dist/chat/volcengine-chat-options.d.ts +1 -1
  18. package/dist/chat/volcengine-chat-options.js +20 -20
  19. package/dist/chat/volcengine-chat-options.js.map +1 -1
  20. package/dist/chat/volcengine-chat-prompt.js.map +1 -1
  21. package/dist/chat/volcengine-error.js +2 -2
  22. package/dist/chat/volcengine-error.js.map +1 -1
  23. package/dist/image/index.d.ts +1 -1
  24. package/dist/image/index.js +1 -1
  25. package/dist/image/index.js.map +1 -1
  26. package/dist/image/volcengine-image-api.d.ts +1 -1
  27. package/dist/image/volcengine-image-api.js +1 -1
  28. package/dist/image/volcengine-image-api.js.map +1 -1
  29. package/dist/image/volcengine-image-model.d.ts +3 -3
  30. package/dist/image/volcengine-image-model.js +13 -13
  31. package/dist/image/volcengine-image-model.js.map +1 -1
  32. package/dist/index.d.ts +3 -6
  33. package/dist/index.js +1 -3
  34. package/dist/index.js.map +1 -1
  35. package/dist/tool/index.d.ts +1 -1
  36. package/dist/tool/index.js +1 -1
  37. package/dist/tool/index.js.map +1 -1
  38. package/dist/tool/web-search.d.ts +1 -1
  39. package/dist/tool/web-search.js +4 -4
  40. package/dist/tool/web-search.js.map +1 -1
  41. package/dist/version.js.map +1 -1
  42. package/dist/volcengine-provider.d.ts +5 -5
  43. package/dist/volcengine-provider.js +13 -13
  44. package/dist/volcengine-provider.js.map +1 -1
  45. package/dist/volcengine-tools.js +1 -1
  46. package/dist/volcengine-tools.js.map +1 -1
  47. 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 "@ai-sdk/provider";
2
- import { VolcengineChatPrompt } from "./volcengine-chat-prompt";
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 "@ai-sdk/provider";
2
- import { convertToBase64 } from "@ai-sdk/provider-utils";
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 === "string") {
8
- return data.startsWith("data:") ? data : `data:${mediaType};base64,${data}`;
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 "system":
16
+ case 'system':
17
17
  {
18
18
  messages.push({
19
- role: "system",
19
+ role: 'system',
20
20
  content: message.content
21
21
  });
22
22
  break;
23
23
  }
24
- case "user":
24
+ case 'user':
25
25
  {
26
26
  messages.push({
27
- role: "user",
27
+ role: 'user',
28
28
  content: message.content.map((part)=>{
29
29
  switch(part.type){
30
- case "text":
30
+ case 'text':
31
31
  return {
32
- type: "text",
32
+ type: 'text',
33
33
  text: part.text
34
34
  };
35
- case "file":
35
+ case 'file':
36
36
  {
37
37
  const { mediaType, data } = part;
38
- if (mediaType.startsWith("image/")) {
38
+ if (mediaType.startsWith('image/')) {
39
39
  return {
40
- type: "image_url",
40
+ type: 'image_url',
41
41
  image_url: {
42
42
  url: formatDataUrl(data, mediaType)
43
43
  }
44
44
  };
45
45
  }
46
- if (mediaType.startsWith("video/")) {
46
+ if (mediaType.startsWith('video/')) {
47
47
  return {
48
- type: "video_url",
48
+ type: 'video_url',
49
49
  video_url: {
50
50
  url: formatDataUrl(data, mediaType)
51
51
  }
52
52
  };
53
53
  }
54
- if (mediaType === "application/pdf") {
54
+ if (mediaType === 'application/pdf') {
55
55
  // URL format
56
56
  if (data instanceof URL) {
57
57
  return {
58
- type: "input_file",
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 === "string") {
63
+ if (typeof data === 'string') {
64
64
  // Check if it's a URL (http/https) or data URL
65
- if (data.startsWith("http://") || data.startsWith("https://")) {
65
+ if (data.startsWith('http://') || data.startsWith('https://')) {
66
66
  return {
67
- type: "input_file",
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("data:") ? data : `data:application/pdf;base64,${data}`;
72
+ const base64Data = data.startsWith('data:') ? data : `data:application/pdf;base64,${data}`;
73
73
  return {
74
- type: "input_file",
74
+ type: 'input_file',
75
75
  file_data: base64Data,
76
- filename: part.filename ?? "document.pdf"
76
+ filename: part.filename ?? 'document.pdf'
77
77
  };
78
78
  }
79
79
  // Uint8Array: convert to base64
80
80
  return {
81
- type: "input_file",
81
+ type: 'input_file',
82
82
  file_data: `data:application/pdf;base64,${convertToBase64(data)}`,
83
- filename: part.filename ?? "document.pdf"
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 "assistant":
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 "text":
109
+ case 'text':
110
110
  text += part.text;
111
111
  break;
112
- case "reasoning":
113
- reasoningContent = (reasoningContent ?? "") + part.text;
112
+ case 'reasoning':
113
+ reasoningContent = (reasoningContent ?? '') + part.text;
114
114
  break;
115
- case "tool-call":
115
+ case 'tool-call':
116
116
  toolCalls.push({
117
117
  id: part.toolCallId,
118
- type: "function",
118
+ type: 'function',
119
119
  function: {
120
120
  name: part.toolName,
121
- arguments: typeof part.input === "string" ? part.input : JSON.stringify(part.input)
121
+ arguments: typeof part.input === 'string' ? part.input : JSON.stringify(part.input)
122
122
  }
123
123
  });
124
124
  break;
125
- case "file":
126
- case "tool-result":
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: "assistant",
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 "tool":
145
+ case 'tool':
146
146
  {
147
147
  for (const toolResponse of message.content){
148
- if (toolResponse.type === "tool-approval-response") {
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 "text":
155
- case "error-text":
154
+ case 'text':
155
+ case 'error-text':
156
156
  content = output.value;
157
157
  break;
158
- case "json":
159
- case "error-json":
158
+ case 'json':
159
+ case 'error-json':
160
160
  content = JSON.stringify(output.value);
161
161
  break;
162
- case "execution-denied":
163
- content = output.reason ?? "Tool execution denied.";
162
+ case 'execution-denied':
163
+ content = output.reason ?? 'Tool execution denied.';
164
164
  break;
165
- case "content":
166
- content = output.value.map((v)=>v.type === "text" ? v.text : JSON.stringify(v)).join("\n");
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: "tool",
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,4 +1,4 @@
1
- import { LanguageModelV3Usage } from "@ai-sdk/provider";
1
+ import { LanguageModelV3Usage } from '@ai-sdk/provider';
2
2
  /**
3
3
  * Volcengine API usage response structure
4
4
  * @see https://www.volcengine.com/docs/82379/1494384
@@ -1 +1 @@
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
+ {"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: 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,WAAWJ,SAASK,OAAO,IAAI,OAAO,IAAIC,KAAKN,SAASK,OAAO,GAAG,QAAQE;IAC5E;AACF"}
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"}
@@ -1,2 +1,2 @@
1
- export { VolcengineChatLanguageModel, type VolcengineChatConfig, } from "./volcengine-chat-language-model";
2
- export { type VolcengineChatOptions, type VolcengineModelId, } from "./volcengine-chat-options";
1
+ export { VolcengineChatLanguageModel, type VolcengineChatConfig, } from './volcengine-chat-language-model';
2
+ export { type VolcengineChatOptions, type VolcengineModelId, } from './volcengine-chat-options';
@@ -1,3 +1,3 @@
1
- export { VolcengineChatLanguageModel } from "./volcengine-chat-language-model";
1
+ export { VolcengineChatLanguageModel } from './volcengine-chat-language-model';
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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
+ {"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 "@ai-sdk/provider";
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 "stop":
3
+ case 'stop':
4
4
  return {
5
- unified: "stop",
5
+ unified: 'stop',
6
6
  raw: finishReason
7
7
  };
8
- case "length":
8
+ case 'length':
9
9
  return {
10
- unified: "length",
10
+ unified: 'length',
11
11
  raw: finishReason
12
12
  };
13
- case "tool_calls":
14
- case "function_call":
13
+ case 'tool_calls':
14
+ case 'function_call':
15
15
  return {
16
- unified: "tool-calls",
16
+ unified: 'tool-calls',
17
17
  raw: finishReason
18
18
  };
19
- case "content_filter":
19
+ case 'content_filter':
20
20
  return {
21
- unified: "content-filter",
21
+ unified: 'content-filter',
22
22
  raw: finishReason
23
23
  };
24
24
  default:
25
25
  return {
26
- unified: "other",
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 \"@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
+ {"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 "@ai-sdk/provider";
2
- import { FetchFunction } from "@ai-sdk/provider-utils";
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;