@sweetretry/ai-sdk-volcengine-adapter 0.1.0 → 0.1.2

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 (62) hide show
  1. package/dist/chat/convert-to-volcengine-chat-message.d.ts +3 -0
  2. package/dist/chat/convert-to-volcengine-chat-message.js +189 -0
  3. package/dist/chat/convert-to-volcengine-chat-message.js.map +1 -0
  4. package/dist/chat/convert-volcengine-chat-usage.d.ts +28 -0
  5. package/dist/chat/convert-volcengine-chat-usage.js +51 -0
  6. package/dist/chat/convert-volcengine-chat-usage.js.map +1 -0
  7. package/dist/chat/get-response-metadata.d.ts +9 -0
  8. package/dist/chat/get-response-metadata.js +9 -0
  9. package/dist/chat/get-response-metadata.js.map +1 -0
  10. package/dist/chat/index.d.ts +2 -0
  11. package/dist/chat/index.js +3 -0
  12. package/dist/chat/index.js.map +1 -0
  13. package/dist/chat/map-volcengine-finish-reason.d.ts +2 -0
  14. package/dist/chat/map-volcengine-finish-reason.js +32 -0
  15. package/dist/chat/map-volcengine-finish-reason.js.map +1 -0
  16. package/dist/chat/volcengine-chat-language-model.d.ts +22 -0
  17. package/dist/chat/volcengine-chat-language-model.js +443 -0
  18. package/dist/chat/volcengine-chat-language-model.js.map +1 -0
  19. package/dist/chat/volcengine-chat-options.d.ts +16 -0
  20. package/dist/chat/volcengine-chat-options.js +29 -0
  21. package/dist/chat/volcengine-chat-options.js.map +1 -0
  22. package/dist/chat/volcengine-chat-prompt.d.ts +49 -0
  23. package/dist/chat/volcengine-chat-prompt.js +4 -0
  24. package/dist/chat/volcengine-chat-prompt.js.map +1 -0
  25. package/dist/chat/volcengine-error.d.ts +1 -0
  26. package/dist/chat/volcengine-error.js +16 -0
  27. package/dist/chat/volcengine-error.js.map +1 -0
  28. package/dist/chat/volcengine-prepare-tools.d.ts +30 -0
  29. package/dist/chat/volcengine-prepare-tools.js +96 -0
  30. package/dist/chat/volcengine-prepare-tools.js.map +1 -0
  31. package/dist/convert-to-volcengine-chat-message.js +12 -0
  32. package/dist/convert-to-volcengine-chat-message.js.map +1 -1
  33. package/dist/image/index.d.ts +1 -0
  34. package/dist/image/index.js +3 -0
  35. package/dist/image/index.js.map +1 -0
  36. package/dist/image/volcengine-image-api.d.ts +22 -0
  37. package/dist/image/volcengine-image-api.js +22 -0
  38. package/dist/image/volcengine-image-api.js.map +1 -0
  39. package/dist/image/volcengine-image-model.d.ts +29 -0
  40. package/dist/image/volcengine-image-model.js +99 -0
  41. package/dist/image/volcengine-image-model.js.map +1 -0
  42. package/dist/image/volcengine-image-options.d.ts +24 -0
  43. package/dist/image/volcengine-image-options.js +32 -0
  44. package/dist/image/volcengine-image-options.js.map +1 -0
  45. package/dist/index.d.ts +4 -3
  46. package/dist/index.js +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/tool/image-generation.d.ts +107 -0
  49. package/dist/tool/image-generation.js +79 -0
  50. package/dist/tool/image-generation.js.map +1 -0
  51. package/dist/tool/web-search.d.ts +70 -2
  52. package/dist/tool/web-search.js +42 -29
  53. package/dist/tool/web-search.js.map +1 -1
  54. package/dist/volcengine-chat-prompt.d.ts +3 -0
  55. package/dist/volcengine-chat-prompt.js.map +1 -1
  56. package/dist/volcengine-prepare-tools.js +46 -5
  57. package/dist/volcengine-prepare-tools.js.map +1 -1
  58. package/dist/volcengine-provider.d.ts +12 -2
  59. package/dist/volcengine-provider.js +24 -23
  60. package/dist/volcengine-provider.js.map +1 -1
  61. package/dist/volcengine-tools.d.ts +3 -1
  62. package/package.json +12 -3
@@ -0,0 +1,3 @@
1
+ import { LanguageModelV3Prompt } from "@ai-sdk/provider";
2
+ import { VolcengineChatPrompt } from "./volcengine-chat-prompt";
3
+ export declare function convertToVolcengineChatMessages(prompt: LanguageModelV3Prompt): VolcengineChatPrompt;
@@ -0,0 +1,189 @@
1
+ import { UnsupportedFunctionalityError } from "@ai-sdk/provider";
2
+ import { convertToBase64 } from "@ai-sdk/provider-utils";
3
+ function formatDataUrl(data, mediaType) {
4
+ if (data instanceof URL) {
5
+ return data.toString();
6
+ }
7
+ if (typeof data === "string") {
8
+ return data.startsWith("data:") ? data : `data:${mediaType};base64,${data}`;
9
+ }
10
+ return `data:${mediaType};base64,${convertToBase64(data)}`;
11
+ }
12
+ export function convertToVolcengineChatMessages(prompt) {
13
+ const messages = [];
14
+ for (const message of prompt){
15
+ switch(message.role){
16
+ case "system":
17
+ {
18
+ messages.push({
19
+ role: "system",
20
+ content: message.content
21
+ });
22
+ break;
23
+ }
24
+ case "user":
25
+ {
26
+ messages.push({
27
+ role: "user",
28
+ content: message.content.map((part)=>{
29
+ switch(part.type){
30
+ case "text":
31
+ return {
32
+ type: "text",
33
+ text: part.text
34
+ };
35
+ case "file":
36
+ {
37
+ const { mediaType, data } = part;
38
+ if (mediaType.startsWith("image/")) {
39
+ return {
40
+ type: "image_url",
41
+ image_url: {
42
+ url: formatDataUrl(data, mediaType)
43
+ }
44
+ };
45
+ }
46
+ if (mediaType.startsWith("video/")) {
47
+ return {
48
+ type: "video_url",
49
+ video_url: {
50
+ url: formatDataUrl(data, mediaType)
51
+ }
52
+ };
53
+ }
54
+ if (mediaType === "application/pdf") {
55
+ // URL format
56
+ if (data instanceof URL) {
57
+ return {
58
+ type: "input_file",
59
+ file_url: data.toString()
60
+ };
61
+ }
62
+ // String: could be URL or base64
63
+ if (typeof data === "string") {
64
+ // Check if it's a URL (http/https) or data URL
65
+ if (data.startsWith("http://") || data.startsWith("https://")) {
66
+ return {
67
+ type: "input_file",
68
+ file_url: data
69
+ };
70
+ }
71
+ // Base64 string or data URL
72
+ const base64Data = data.startsWith("data:") ? data : `data:application/pdf;base64,${data}`;
73
+ return {
74
+ type: "input_file",
75
+ file_data: base64Data,
76
+ filename: part.filename ?? "document.pdf"
77
+ };
78
+ }
79
+ // Uint8Array: convert to base64
80
+ return {
81
+ type: "input_file",
82
+ file_data: `data:application/pdf;base64,${convertToBase64(data)}`,
83
+ filename: part.filename ?? "document.pdf"
84
+ };
85
+ }
86
+ throw new UnsupportedFunctionalityError({
87
+ functionality: `File type: ${mediaType}`
88
+ });
89
+ }
90
+ default:
91
+ {
92
+ const _exhaustiveCheck = part;
93
+ throw new UnsupportedFunctionalityError({
94
+ functionality: `User message part type: ${_exhaustiveCheck.type}`
95
+ });
96
+ }
97
+ }
98
+ })
99
+ });
100
+ break;
101
+ }
102
+ case "assistant":
103
+ {
104
+ let text = "";
105
+ let reasoningContent;
106
+ const toolCalls = [];
107
+ for (const part of message.content){
108
+ switch(part.type){
109
+ case "text":
110
+ text += part.text;
111
+ break;
112
+ case "reasoning":
113
+ reasoningContent = (reasoningContent ?? "") + part.text;
114
+ break;
115
+ case "tool-call":
116
+ toolCalls.push({
117
+ id: part.toolCallId,
118
+ type: "function",
119
+ function: {
120
+ name: part.toolName,
121
+ arguments: typeof part.input === "string" ? part.input : JSON.stringify(part.input)
122
+ }
123
+ });
124
+ break;
125
+ case "file":
126
+ case "tool-result":
127
+ break;
128
+ default:
129
+ {
130
+ const _exhaustiveCheck = part;
131
+ throw new UnsupportedFunctionalityError({
132
+ functionality: `Assistant message part type: ${_exhaustiveCheck.type}`
133
+ });
134
+ }
135
+ }
136
+ }
137
+ messages.push({
138
+ role: "assistant",
139
+ content: text,
140
+ reasoning_content: reasoningContent,
141
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined
142
+ });
143
+ break;
144
+ }
145
+ case "tool":
146
+ {
147
+ for (const toolResponse of message.content){
148
+ if (toolResponse.type === "tool-approval-response") {
149
+ continue;
150
+ }
151
+ const { output } = toolResponse;
152
+ let content;
153
+ switch(output.type){
154
+ case "text":
155
+ case "error-text":
156
+ content = output.value;
157
+ break;
158
+ case "json":
159
+ case "error-json":
160
+ content = JSON.stringify(output.value);
161
+ break;
162
+ case "execution-denied":
163
+ content = output.reason ?? "Tool execution denied.";
164
+ break;
165
+ case "content":
166
+ content = output.value.map((v)=>v.type === "text" ? v.text : JSON.stringify(v)).join("\n");
167
+ break;
168
+ }
169
+ messages.push({
170
+ role: "tool",
171
+ tool_call_id: toolResponse.toolCallId,
172
+ content
173
+ });
174
+ }
175
+ break;
176
+ }
177
+ default:
178
+ {
179
+ const _exhaustiveCheck = message;
180
+ throw new UnsupportedFunctionalityError({
181
+ functionality: `Message role: ${_exhaustiveCheck.role}`
182
+ });
183
+ }
184
+ }
185
+ }
186
+ return messages;
187
+ }
188
+
189
+ //# sourceMappingURL=convert-to-volcengine-chat-message.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,28 @@
1
+ import { LanguageModelV3Usage } from "@ai-sdk/provider";
2
+ /**
3
+ * Volcengine API usage response structure
4
+ * @see https://www.volcengine.com/docs/82379/1494384
5
+ */
6
+ export type VolcengineUsage = {
7
+ prompt_tokens?: number;
8
+ completion_tokens?: number;
9
+ total_tokens?: number;
10
+ prompt_tokens_details?: {
11
+ cached_tokens?: number;
12
+ };
13
+ completion_tokens_details?: {
14
+ reasoning_tokens?: number;
15
+ };
16
+ };
17
+ /**
18
+ * Converts Volcengine usage data to the AI SDK's LanguageModelV3Usage format.
19
+ *
20
+ * Field mappings:
21
+ * - prompt_tokens → inputTokens.total
22
+ * - prompt_tokens - cached_tokens → inputTokens.noCache
23
+ * - cached_tokens → inputTokens.cacheRead
24
+ * - completion_tokens → outputTokens.total
25
+ * - completion_tokens - reasoning_tokens → outputTokens.text
26
+ * - reasoning_tokens → outputTokens.reasoning
27
+ */
28
+ export declare function convertVolcengineUsage(usage: VolcengineUsage | undefined | null): LanguageModelV3Usage;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Converts Volcengine usage data to the AI SDK's LanguageModelV3Usage format.
3
+ *
4
+ * Field mappings:
5
+ * - prompt_tokens → inputTokens.total
6
+ * - prompt_tokens - cached_tokens → inputTokens.noCache
7
+ * - cached_tokens → inputTokens.cacheRead
8
+ * - completion_tokens → outputTokens.total
9
+ * - completion_tokens - reasoning_tokens → outputTokens.text
10
+ * - reasoning_tokens → outputTokens.reasoning
11
+ */ export function convertVolcengineUsage(usage) {
12
+ if (usage == null) {
13
+ return {
14
+ inputTokens: {
15
+ total: undefined,
16
+ noCache: undefined,
17
+ cacheRead: undefined,
18
+ cacheWrite: undefined
19
+ },
20
+ outputTokens: {
21
+ total: undefined,
22
+ text: undefined,
23
+ reasoning: undefined
24
+ }
25
+ };
26
+ }
27
+ const promptTokens = usage.prompt_tokens;
28
+ const completionTokens = usage.completion_tokens;
29
+ const cachedTokens = usage.prompt_tokens_details?.cached_tokens;
30
+ const reasoningTokens = usage.completion_tokens_details?.reasoning_tokens;
31
+ // Calculate non-cached input tokens
32
+ const noCacheTokens = promptTokens != null && cachedTokens != null ? promptTokens - cachedTokens : promptTokens;
33
+ // Calculate text output tokens (completion minus reasoning)
34
+ const textTokens = completionTokens != null && reasoningTokens != null ? completionTokens - reasoningTokens : completionTokens;
35
+ return {
36
+ inputTokens: {
37
+ total: promptTokens,
38
+ noCache: noCacheTokens,
39
+ cacheRead: cachedTokens,
40
+ cacheWrite: undefined
41
+ },
42
+ outputTokens: {
43
+ total: completionTokens,
44
+ text: textTokens,
45
+ reasoning: reasoningTokens
46
+ },
47
+ raw: usage
48
+ };
49
+ }
50
+
51
+ //# sourceMappingURL=convert-volcengine-chat-usage.js.map
@@ -0,0 +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"}
@@ -0,0 +1,9 @@
1
+ export declare function getResponseMetadata(response: {
2
+ id?: string;
3
+ model?: string;
4
+ created?: number;
5
+ }): {
6
+ id: string | undefined;
7
+ modelId: string | undefined;
8
+ timestamp: Date | undefined;
9
+ };
@@ -0,0 +1,9 @@
1
+ export function getResponseMetadata(response) {
2
+ return {
3
+ id: response.id,
4
+ modelId: response.model,
5
+ timestamp: response.created != null ? new Date(response.created * 1000) : undefined
6
+ };
7
+ }
8
+
9
+ //# sourceMappingURL=get-response-metadata.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export { VolcengineChatLanguageModel, type VolcengineChatConfig, } from "./volcengine-chat-language-model";
2
+ export { type VolcengineChatOptions, type VolcengineModelId, } from "./volcengine-chat-options";
@@ -0,0 +1,3 @@
1
+ export { VolcengineChatLanguageModel } from "./volcengine-chat-language-model";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ import { LanguageModelV3FinishReason } from "@ai-sdk/provider";
2
+ export declare function mapVolcengineFinishReason(finishReason: string | null | undefined): LanguageModelV3FinishReason;
@@ -0,0 +1,32 @@
1
+ export function mapVolcengineFinishReason(finishReason) {
2
+ switch(finishReason){
3
+ case "stop":
4
+ return {
5
+ unified: "stop",
6
+ raw: finishReason
7
+ };
8
+ case "length":
9
+ return {
10
+ unified: "length",
11
+ raw: finishReason
12
+ };
13
+ case "tool_calls":
14
+ case "function_call":
15
+ return {
16
+ unified: "tool-calls",
17
+ raw: finishReason
18
+ };
19
+ case "content_filter":
20
+ return {
21
+ unified: "content-filter",
22
+ raw: finishReason
23
+ };
24
+ default:
25
+ return {
26
+ unified: "other",
27
+ raw: finishReason ?? undefined
28
+ };
29
+ }
30
+ }
31
+
32
+ //# sourceMappingURL=map-volcengine-finish-reason.js.map
@@ -0,0 +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"}
@@ -0,0 +1,22 @@
1
+ import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult } from "@ai-sdk/provider";
2
+ import { FetchFunction } from "@ai-sdk/provider-utils";
3
+ export type VolcengineChatConfig = {
4
+ provider: string;
5
+ baseURL: string;
6
+ headers: () => Record<string, string>;
7
+ fetch?: FetchFunction;
8
+ generateId?: () => string;
9
+ };
10
+ export declare class VolcengineChatLanguageModel implements LanguageModelV3 {
11
+ readonly specificationVersion: "v3";
12
+ readonly provider: string;
13
+ readonly modelId: string;
14
+ readonly supportedUrls: Record<string, RegExp[]>;
15
+ private readonly config;
16
+ private readonly generateId;
17
+ constructor(modelId: string, config: VolcengineChatConfig);
18
+ private getArgs;
19
+ doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult>;
20
+ doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult>;
21
+ private extractContent;
22
+ }