@sweetretry/ai-sdk-volcengine-adapter 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat/convert-to-volcengine-chat-message.d.ts +3 -0
- package/dist/chat/convert-to-volcengine-chat-message.js +189 -0
- package/dist/chat/convert-to-volcengine-chat-message.js.map +1 -0
- package/dist/chat/convert-volcengine-chat-usage.d.ts +28 -0
- package/dist/chat/convert-volcengine-chat-usage.js +51 -0
- package/dist/chat/convert-volcengine-chat-usage.js.map +1 -0
- package/dist/chat/get-response-metadata.d.ts +9 -0
- package/dist/chat/get-response-metadata.js +9 -0
- package/dist/chat/get-response-metadata.js.map +1 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +3 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/map-volcengine-finish-reason.d.ts +2 -0
- package/dist/chat/map-volcengine-finish-reason.js +32 -0
- package/dist/chat/map-volcengine-finish-reason.js.map +1 -0
- package/dist/chat/volcengine-chat-language-model.d.ts +22 -0
- package/dist/chat/volcengine-chat-language-model.js +443 -0
- package/dist/chat/volcengine-chat-language-model.js.map +1 -0
- package/dist/chat/volcengine-chat-options.d.ts +16 -0
- package/dist/chat/volcengine-chat-options.js +29 -0
- package/dist/chat/volcengine-chat-options.js.map +1 -0
- package/dist/chat/volcengine-chat-prompt.d.ts +49 -0
- package/dist/chat/volcengine-chat-prompt.js +4 -0
- package/dist/chat/volcengine-chat-prompt.js.map +1 -0
- package/dist/chat/volcengine-error.d.ts +1 -0
- package/dist/chat/volcengine-error.js +16 -0
- package/dist/chat/volcengine-error.js.map +1 -0
- package/dist/chat/volcengine-prepare-tools.d.ts +30 -0
- package/dist/chat/volcengine-prepare-tools.js +96 -0
- package/dist/chat/volcengine-prepare-tools.js.map +1 -0
- package/dist/convert-to-volcengine-chat-message.js +12 -0
- package/dist/convert-to-volcengine-chat-message.js.map +1 -1
- package/dist/image/index.d.ts +1 -0
- package/dist/image/index.js +3 -0
- package/dist/image/index.js.map +1 -0
- package/dist/image/volcengine-image-api.d.ts +22 -0
- package/dist/image/volcengine-image-api.js +22 -0
- package/dist/image/volcengine-image-api.js.map +1 -0
- package/dist/image/volcengine-image-model.d.ts +29 -0
- package/dist/image/volcengine-image-model.js +99 -0
- package/dist/image/volcengine-image-model.js.map +1 -0
- package/dist/image/volcengine-image-options.d.ts +24 -0
- package/dist/image/volcengine-image-options.js +32 -0
- package/dist/image/volcengine-image-options.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tool/image-generation.d.ts +107 -0
- package/dist/tool/image-generation.js +79 -0
- package/dist/tool/image-generation.js.map +1 -0
- package/dist/tool/web-search.d.ts +70 -2
- package/dist/tool/web-search.js +42 -29
- package/dist/tool/web-search.js.map +1 -1
- package/dist/volcengine-chat-prompt.d.ts +3 -0
- package/dist/volcengine-chat-prompt.js.map +1 -1
- package/dist/volcengine-prepare-tools.js +46 -5
- package/dist/volcengine-prepare-tools.js.map +1 -1
- package/dist/volcengine-provider.d.ts +12 -2
- package/dist/volcengine-provider.js +24 -23
- package/dist/volcengine-provider.js.map +1 -1
- package/dist/volcengine-tools.d.ts +3 -1
- package/package.json +2 -2
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { LanguageModelV3CallOptions, SharedV3Warning } from '@ai-sdk/provider';
|
|
2
|
+
export type VolcengineToolChoice = 'auto' | 'none' | 'required' | {
|
|
3
|
+
type: 'function';
|
|
4
|
+
function: {
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export type VolcengineTool = {
|
|
9
|
+
type: 'function';
|
|
10
|
+
function: {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string | undefined;
|
|
13
|
+
parameters: unknown;
|
|
14
|
+
};
|
|
15
|
+
} | {
|
|
16
|
+
type: 'web_search';
|
|
17
|
+
web_search?: {
|
|
18
|
+
max_keyword?: number;
|
|
19
|
+
limit?: number;
|
|
20
|
+
max_tool_calls?: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export declare function prepareTools({ tools, toolChoice, }: {
|
|
24
|
+
tools: LanguageModelV3CallOptions['tools'];
|
|
25
|
+
toolChoice?: LanguageModelV3CallOptions['toolChoice'];
|
|
26
|
+
}): Promise<{
|
|
27
|
+
tools: VolcengineTool[] | undefined;
|
|
28
|
+
toolChoice: VolcengineToolChoice | undefined;
|
|
29
|
+
toolWarnings: SharedV3Warning[];
|
|
30
|
+
}>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { UnsupportedFunctionalityError } from '@ai-sdk/provider';
|
|
2
|
+
import { validateTypes } from '@ai-sdk/provider-utils';
|
|
3
|
+
import { webSearchArgsSchema } from '../tool/web-search';
|
|
4
|
+
export async function prepareTools({ tools, toolChoice }) {
|
|
5
|
+
// when the tools array is empty, change it to undefined to prevent errors:
|
|
6
|
+
tools = tools?.length ? tools : undefined;
|
|
7
|
+
const toolWarnings = [];
|
|
8
|
+
if (tools == null) {
|
|
9
|
+
return {
|
|
10
|
+
tools: undefined,
|
|
11
|
+
toolChoice: undefined,
|
|
12
|
+
toolWarnings
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const volcengineTools = [];
|
|
16
|
+
for (const tool of tools){
|
|
17
|
+
if (tool.type === 'provider') {
|
|
18
|
+
const toolId = tool.id;
|
|
19
|
+
switch(toolId){
|
|
20
|
+
case 'volcengine.web_search':
|
|
21
|
+
{
|
|
22
|
+
const args = await validateTypes({
|
|
23
|
+
value: tool.args,
|
|
24
|
+
schema: webSearchArgsSchema
|
|
25
|
+
});
|
|
26
|
+
volcengineTools.push({
|
|
27
|
+
type: 'web_search',
|
|
28
|
+
web_search: {
|
|
29
|
+
max_keyword: args.maxKeyword,
|
|
30
|
+
limit: args.limit,
|
|
31
|
+
max_tool_calls: args.maxToolCalls
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
default:
|
|
37
|
+
toolWarnings.push({
|
|
38
|
+
type: 'unsupported',
|
|
39
|
+
feature: `provider-defined tool ${toolId}`
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
volcengineTools.push({
|
|
44
|
+
type: 'function',
|
|
45
|
+
function: {
|
|
46
|
+
name: tool.name,
|
|
47
|
+
description: tool.description,
|
|
48
|
+
parameters: tool.inputSchema
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (toolChoice == null) {
|
|
54
|
+
return {
|
|
55
|
+
tools: volcengineTools,
|
|
56
|
+
toolChoice: undefined,
|
|
57
|
+
toolWarnings
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const type = toolChoice.type;
|
|
61
|
+
switch(type){
|
|
62
|
+
case 'auto':
|
|
63
|
+
case 'none':
|
|
64
|
+
return {
|
|
65
|
+
tools: volcengineTools,
|
|
66
|
+
toolChoice: type,
|
|
67
|
+
toolWarnings
|
|
68
|
+
};
|
|
69
|
+
case 'required':
|
|
70
|
+
return {
|
|
71
|
+
tools: volcengineTools,
|
|
72
|
+
toolChoice: 'required',
|
|
73
|
+
toolWarnings
|
|
74
|
+
};
|
|
75
|
+
case 'tool':
|
|
76
|
+
return {
|
|
77
|
+
tools: volcengineTools,
|
|
78
|
+
toolChoice: {
|
|
79
|
+
type: 'function',
|
|
80
|
+
function: {
|
|
81
|
+
name: toolChoice.toolName
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
toolWarnings
|
|
85
|
+
};
|
|
86
|
+
default:
|
|
87
|
+
{
|
|
88
|
+
const _exhaustiveCheck = type;
|
|
89
|
+
throw new UnsupportedFunctionalityError({
|
|
90
|
+
functionality: `tool choice type: ${_exhaustiveCheck}`
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=volcengine-prepare-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/chat/volcengine-prepare-tools.ts"],"sourcesContent":["import {\n LanguageModelV3CallOptions,\n SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { validateTypes } from '@ai-sdk/provider-utils';\nimport { webSearchArgsSchema } from '../tool/web-search';\n\nexport type VolcengineToolChoice =\n | 'auto'\n | 'none'\n | 'required'\n | { type: 'function'; function: { name: string } };\n\nexport type VolcengineTool =\n | {\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }\n | {\n type: 'web_search';\n web_search?: {\n max_keyword?: number;\n limit?: number;\n max_tool_calls?: number;\n };\n };\n\nexport async function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): Promise<{\n tools: VolcengineTool[] | undefined;\n toolChoice: VolcengineToolChoice | undefined;\n toolWarnings: SharedV3Warning[];\n}> {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const volcengineTools: VolcengineTool[] = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n const toolId = tool.id;\n\n switch (toolId) {\n case 'volcengine.web_search': {\n const args = await validateTypes({\n value: tool.args,\n schema: webSearchArgsSchema,\n });\n\n volcengineTools.push({\n type: 'web_search',\n web_search: {\n max_keyword: args.maxKeyword,\n limit: args.limit,\n max_tool_calls: args.maxToolCalls,\n },\n });\n break;\n }\n\n default:\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${toolId}`,\n });\n }\n } else {\n volcengineTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: volcengineTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n return { tools: volcengineTools, toolChoice: type, toolWarnings };\n case 'required':\n return { tools: volcengineTools, toolChoice: 'required', toolWarnings };\n case 'tool':\n return {\n tools: volcengineTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"names":["UnsupportedFunctionalityError","validateTypes","webSearchArgsSchema","prepareTools","tools","toolChoice","length","undefined","toolWarnings","volcengineTools","tool","type","toolId","id","args","value","schema","push","web_search","max_keyword","maxKeyword","limit","max_tool_calls","maxToolCalls","feature","function","name","description","parameters","inputSchema","toolName","_exhaustiveCheck","functionality"],"mappings":"AAAA,SAGEA,6BAA6B,QACxB,mBAAmB;AAC1B,SAASC,aAAa,QAAQ,yBAAyB;AACvD,SAASC,mBAAmB,QAAQ,qBAAqB;AA0BzD,OAAO,eAAeC,aAAa,EACjCC,KAAK,EACLC,UAAU,EAIX;IAKC,2EAA2E;IAC3ED,QAAQA,OAAOE,SAASF,QAAQG;IAEhC,MAAMC,eAAkC,EAAE;IAE1C,IAAIJ,SAAS,MAAM;QACjB,OAAO;YAAEA,OAAOG;YAAWF,YAAYE;YAAWC;QAAa;IACjE;IAEA,MAAMC,kBAAoC,EAAE;IAE5C,KAAK,MAAMC,QAAQN,MAAO;QACxB,IAAIM,KAAKC,IAAI,KAAK,YAAY;YAC5B,MAAMC,SAASF,KAAKG,EAAE;YAEtB,OAAQD;gBACN,KAAK;oBAAyB;wBAC5B,MAAME,OAAO,MAAMb,cAAc;4BAC/Bc,OAAOL,KAAKI,IAAI;4BAChBE,QAAQd;wBACV;wBAEAO,gBAAgBQ,IAAI,CAAC;4BACnBN,MAAM;4BACNO,YAAY;gCACVC,aAAaL,KAAKM,UAAU;gCAC5BC,OAAOP,KAAKO,KAAK;gCACjBC,gBAAgBR,KAAKS,YAAY;4BACnC;wBACF;wBACA;oBACF;gBAEA;oBACEf,aAAaS,IAAI,CAAC;wBAChBN,MAAM;wBACNa,SAAS,CAAC,sBAAsB,EAAEZ,QAAQ;oBAC5C;YACJ;QACF,OAAO;YACLH,gBAAgBQ,IAAI,CAAC;gBACnBN,MAAM;gBACNc,UAAU;oBACRC,MAAMhB,KAAKgB,IAAI;oBACfC,aAAajB,KAAKiB,WAAW;oBAC7BC,YAAYlB,KAAKmB,WAAW;gBAC9B;YACF;QACF;IACF;IAEA,IAAIxB,cAAc,MAAM;QACtB,OAAO;YAAED,OAAOK;YAAiBJ,YAAYE;YAAWC;QAAa;IACvE;IAEA,MAAMG,OAAON,WAAWM,IAAI;IAE5B,OAAQA;QACN,KAAK;QACL,KAAK;YACH,OAAO;gBAAEP,OAAOK;gBAAiBJ,YAAYM;gBAAMH;YAAa;QAClE,KAAK;YACH,OAAO;gBAAEJ,OAAOK;gBAAiBJ,YAAY;gBAAYG;YAAa;QACxE,KAAK;YACH,OAAO;gBACLJ,OAAOK;gBACPJ,YAAY;oBACVM,MAAM;oBACNc,UAAU;wBAAEC,MAAMrB,WAAWyB,QAAQ;oBAAC;gBACxC;gBACAtB;YACF;QACF;YAAS;gBACP,MAAMuB,mBAA0BpB;gBAChC,MAAM,IAAIX,8BAA8B;oBACtCgC,eAAe,CAAC,kBAAkB,EAAED,kBAAkB;gBACxD;YACF;IACF;AACF"}
|
|
@@ -51,6 +51,18 @@ export function convertToVolcengineChatMessages(prompt) {
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
+
if (mediaType === "application/pdf") {
|
|
55
|
+
if (!(data instanceof URL) && typeof data !== "string") {
|
|
56
|
+
throw new UnsupportedFunctionalityError({
|
|
57
|
+
functionality: "PDF file from binary data (only URL is supported)"
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const fileUrl = data instanceof URL ? data.toString() : data;
|
|
61
|
+
return {
|
|
62
|
+
type: "input_file",
|
|
63
|
+
file_url: fileUrl
|
|
64
|
+
};
|
|
65
|
+
}
|
|
54
66
|
throw new UnsupportedFunctionalityError({
|
|
55
67
|
functionality: `File type: ${mediaType}`
|
|
56
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/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 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","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":"AAAA,SAGEA,6BAA6B,QACxB,mBAAmB;AAC1B,SAASC,eAAe,QAAQ,yBAAyB;AAOzD,SAASC,cAAcC,IAAgC,EAAEC,SAAiB;IACxE,IAAID,gBAAgBE,KAAK;QACvB,OAAOF,KAAKG,QAAQ;IACtB;IACA,IAAI,OAAOH,SAAS,UAAU;QAC5B,OAAOA,KAAKI,UAAU,CAAC,WAAWJ,OAAO,CAAC,KAAK,EAAEC,UAAU,QAAQ,EAAED,MAAM;IAC7E;IACA,OAAO,CAAC,KAAK,EAAEC,UAAU,QAAQ,EAAEH,gBAAgBE,OAAO;AAC5D;AAGA,OAAO,SAASK,gCACdC,MAA6B;IAE7B,MAAMC,WAAiC,EAAE;IAEzC,KAAK,MAAMC,WAAWF,OAAQ;QAC5B,OAAQE,QAAQC,IAAI;YAClB,KAAK;gBAAU;oBACbF,SAASG,IAAI,CAAC;wBACZD,MAAM;wBACNE,SAASH,QAAQG,OAAO;oBAC1B;oBACA;gBACF;YAEA,KAAK;gBAAQ;oBACXJ,SAASG,IAAI,CAAC;wBACZD,MAAM;wBACNE,SAASH,QAAQG,OAAO,CAACC,GAAG,CAAC,CAACC;4BAC5B,OAAQA,KAAKC,IAAI;gCACf,KAAK;oCACH,OAAO;wCAAEA,MAAM;wCAAQC,MAAMF,KAAKE,IAAI;oCAAC;gCAEzC,KAAK;oCAAQ;wCACX,MAAM,EAAEd,SAAS,EAAED,IAAI,EAAE,GAAGa;wCAE5B,IAAIZ,UAAUG,UAAU,CAAC,WAAW;4CAClC,OAAO;gDACLU,MAAM;gDACNE,WAAW;oDAAEC,KAAKlB,cAAcC,MAAMC;gDAAW;4CACnD;wCACF;wCACA,IAAIA,UAAUG,UAAU,CAAC,WAAW;4CAClC,OAAO;gDACLU,MAAM;gDACNI,WAAW;oDAAED,KAAKlB,cAAcC,MAAMC;gDAAW;4CACnD;wCACF;wCACA,MAAM,
|
|
1
|
+
{"version":3,"sources":["../src/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 if (!(data instanceof URL) && typeof data !== \"string\") {\n throw new UnsupportedFunctionalityError({\n functionality: \"PDF file from binary data (only URL is supported)\"\n });\n }\n const fileUrl = data instanceof URL ? data.toString() : data;\n return {\n type: \"input_file\",\n file_url: fileUrl\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","functionality","fileUrl","file_url","_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 @@
|
|
|
1
|
+
export { VolcengineImageModel, type VolcengineImageModelId, type VolcengineImageConfig, } from "./volcengine-image-model";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/image/index.ts"],"sourcesContent":["export {\n VolcengineImageModel,\n type VolcengineImageModelId,\n\n type VolcengineImageConfig,\n} from \"./volcengine-image-model\";\n"],"names":["VolcengineImageModel"],"mappings":"AAAA,SACEA,oBAAoB,QAIf,2BAA2B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Response schema for Volcengine image generation API.
|
|
4
|
+
*
|
|
5
|
+
* Uses a minimal schema to limit breakages when the API changes
|
|
6
|
+
* and increases efficiency.
|
|
7
|
+
*/
|
|
8
|
+
export declare const volcengineImageResponseSchema: z.ZodObject<{
|
|
9
|
+
model: z.ZodOptional<z.ZodString>;
|
|
10
|
+
created: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
data: z.ZodArray<z.ZodObject<{
|
|
12
|
+
url: z.ZodOptional<z.ZodString>;
|
|
13
|
+
b64_json: z.ZodOptional<z.ZodString>;
|
|
14
|
+
size: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
usage: z.ZodOptional<z.ZodObject<{
|
|
17
|
+
generated_images: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
total_tokens: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
}, z.core.$strip>>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type VolcengineImageResponse = z.infer<typeof volcengineImageResponseSchema>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Response schema for Volcengine image generation API.
|
|
4
|
+
*
|
|
5
|
+
* Uses a minimal schema to limit breakages when the API changes
|
|
6
|
+
* and increases efficiency.
|
|
7
|
+
*/ export const volcengineImageResponseSchema = z.object({
|
|
8
|
+
model: z.string().optional(),
|
|
9
|
+
created: z.number().optional(),
|
|
10
|
+
data: z.array(z.object({
|
|
11
|
+
url: z.string().optional(),
|
|
12
|
+
b64_json: z.string().optional(),
|
|
13
|
+
size: z.string().optional()
|
|
14
|
+
})),
|
|
15
|
+
usage: z.object({
|
|
16
|
+
generated_images: z.number().optional(),
|
|
17
|
+
output_tokens: z.number().optional(),
|
|
18
|
+
total_tokens: z.number().optional()
|
|
19
|
+
}).optional()
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=volcengine-image-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/image/volcengine-image-api.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/**\n * Response schema for Volcengine image generation API.\n *\n * Uses a minimal schema to limit breakages when the API changes\n * and increases efficiency.\n */\nexport const volcengineImageResponseSchema = z.object({\n model: z.string().optional(),\n created: z.number().optional(),\n data: z.array(\n z.object({\n url: z.string().optional(),\n b64_json: z.string().optional(),\n size: z.string().optional(),\n })\n ),\n usage: z\n .object({\n generated_images: z.number().optional(),\n output_tokens: z.number().optional(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type VolcengineImageResponse = z.infer<typeof volcengineImageResponseSchema>;\n"],"names":["z","volcengineImageResponseSchema","object","model","string","optional","created","number","data","array","url","b64_json","size","usage","generated_images","output_tokens","total_tokens"],"mappings":"AAAA,SAASA,CAAC,QAAQ,MAAM;AAExB;;;;;CAKC,GACD,OAAO,MAAMC,gCAAgCD,EAAEE,MAAM,CAAC;IACpDC,OAAOH,EAAEI,MAAM,GAAGC,QAAQ;IAC1BC,SAASN,EAAEO,MAAM,GAAGF,QAAQ;IAC5BG,MAAMR,EAAES,KAAK,CACXT,EAAEE,MAAM,CAAC;QACPQ,KAAKV,EAAEI,MAAM,GAAGC,QAAQ;QACxBM,UAAUX,EAAEI,MAAM,GAAGC,QAAQ;QAC7BO,MAAMZ,EAAEI,MAAM,GAAGC,QAAQ;IAC3B;IAEFQ,OAAOb,EACJE,MAAM,CAAC;QACNY,kBAAkBd,EAAEO,MAAM,GAAGF,QAAQ;QACrCU,eAAef,EAAEO,MAAM,GAAGF,QAAQ;QAClCW,cAAchB,EAAEO,MAAM,GAAGF,QAAQ;IACnC,GACCA,QAAQ;AACb,GAAG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ImageModelV3, ImageModelV3CallOptions, ImageModelV3ProviderMetadata, ImageModelV3Usage, SharedV3Warning } from "@ai-sdk/provider";
|
|
2
|
+
import { FetchFunction } from "@ai-sdk/provider-utils";
|
|
3
|
+
export type VolcengineImageModelId = "doubao-seedream-4-5-251128" | "doubao-seedream-4-0-250828" | (string & {});
|
|
4
|
+
export interface VolcengineImageConfig {
|
|
5
|
+
provider: string;
|
|
6
|
+
baseURL: string;
|
|
7
|
+
headers: () => Record<string, string>;
|
|
8
|
+
fetch?: FetchFunction;
|
|
9
|
+
}
|
|
10
|
+
export declare class VolcengineImageModel implements ImageModelV3 {
|
|
11
|
+
readonly modelId: VolcengineImageModelId;
|
|
12
|
+
private readonly config;
|
|
13
|
+
readonly specificationVersion: "v3";
|
|
14
|
+
get maxImagesPerCall(): number;
|
|
15
|
+
get provider(): string;
|
|
16
|
+
constructor(modelId: VolcengineImageModelId, config: VolcengineImageConfig);
|
|
17
|
+
doGenerate({ prompt, files, size, aspectRatio, seed, providerOptions, headers, abortSignal, }: ImageModelV3CallOptions): Promise<{
|
|
18
|
+
images: Array<string> | Array<Uint8Array>;
|
|
19
|
+
warnings: Array<SharedV3Warning>;
|
|
20
|
+
providerMetadata?: ImageModelV3ProviderMetadata;
|
|
21
|
+
response: {
|
|
22
|
+
timestamp: Date;
|
|
23
|
+
modelId: string;
|
|
24
|
+
headers: Record<string, string> | undefined;
|
|
25
|
+
};
|
|
26
|
+
usage?: ImageModelV3Usage;
|
|
27
|
+
}>;
|
|
28
|
+
private convertFileToDataUrl;
|
|
29
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { combineHeaders, createJsonResponseHandler, postJsonToApi } from "@ai-sdk/provider-utils";
|
|
2
|
+
import { volcengineFailedResponseHandler } from "../chat/volcengine-error";
|
|
3
|
+
import { volcengineImageResponseSchema } from "./volcengine-image-api";
|
|
4
|
+
export class VolcengineImageModel {
|
|
5
|
+
modelId;
|
|
6
|
+
config;
|
|
7
|
+
specificationVersion = "v3";
|
|
8
|
+
get maxImagesPerCall() {
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
get provider() {
|
|
12
|
+
return this.config.provider;
|
|
13
|
+
}
|
|
14
|
+
constructor(modelId, config){
|
|
15
|
+
this.modelId = modelId;
|
|
16
|
+
this.config = config;
|
|
17
|
+
}
|
|
18
|
+
async doGenerate({ prompt, files, size, aspectRatio, seed, providerOptions, headers, abortSignal }) {
|
|
19
|
+
const warnings = [];
|
|
20
|
+
// Handle unsupported options
|
|
21
|
+
if (aspectRatio != null) {
|
|
22
|
+
warnings.push({
|
|
23
|
+
type: "unsupported",
|
|
24
|
+
feature: "aspectRatio"
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (seed != null) {
|
|
28
|
+
warnings.push({
|
|
29
|
+
type: "unsupported",
|
|
30
|
+
feature: "seed"
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Build request body
|
|
34
|
+
const body = {
|
|
35
|
+
model: this.modelId,
|
|
36
|
+
prompt,
|
|
37
|
+
size: size ?? "1024x1024",
|
|
38
|
+
response_format: "b64_json",
|
|
39
|
+
...providerOptions.volcengine ?? {}
|
|
40
|
+
};
|
|
41
|
+
// Handle reference images for image-to-image generation
|
|
42
|
+
if (files && files.length > 0) {
|
|
43
|
+
const imageUrls = files.map((file)=>this.convertFileToDataUrl(file));
|
|
44
|
+
if (imageUrls.length === 1) {
|
|
45
|
+
body.image = imageUrls[0];
|
|
46
|
+
} else {
|
|
47
|
+
body.image = imageUrls;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const { value: response, responseHeaders } = await postJsonToApi({
|
|
51
|
+
url: `${this.config.baseURL}/images/generations`,
|
|
52
|
+
headers: combineHeaders(this.config.headers(), headers),
|
|
53
|
+
body,
|
|
54
|
+
failedResponseHandler: volcengineFailedResponseHandler,
|
|
55
|
+
successfulResponseHandler: createJsonResponseHandler(volcengineImageResponseSchema),
|
|
56
|
+
abortSignal,
|
|
57
|
+
fetch: this.config.fetch
|
|
58
|
+
});
|
|
59
|
+
// Extract images from response
|
|
60
|
+
const images = response.data.map((item)=>{
|
|
61
|
+
if (item.b64_json) {
|
|
62
|
+
return item.b64_json;
|
|
63
|
+
}
|
|
64
|
+
if (item.url) {
|
|
65
|
+
return item.url;
|
|
66
|
+
}
|
|
67
|
+
throw new Error("No image data in response");
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
images,
|
|
71
|
+
warnings,
|
|
72
|
+
response: {
|
|
73
|
+
timestamp: new Date(),
|
|
74
|
+
modelId: response.model ?? this.modelId,
|
|
75
|
+
headers: responseHeaders
|
|
76
|
+
},
|
|
77
|
+
usage: response.usage ? {
|
|
78
|
+
inputTokens: undefined,
|
|
79
|
+
outputTokens: response.usage.output_tokens,
|
|
80
|
+
totalTokens: response.usage.total_tokens
|
|
81
|
+
} : undefined
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
convertFileToDataUrl(file) {
|
|
85
|
+
if (file.type === "url") {
|
|
86
|
+
return file.url;
|
|
87
|
+
}
|
|
88
|
+
// file.type === "file"
|
|
89
|
+
if (typeof file.data === "string") {
|
|
90
|
+
// base64 string - convert to data URL
|
|
91
|
+
return `data:${file.mediaType};base64,${file.data}`;
|
|
92
|
+
}
|
|
93
|
+
// Uint8Array - convert to base64 data URL
|
|
94
|
+
const base64 = btoa(String.fromCharCode(...file.data));
|
|
95
|
+
return `data:${file.mediaType};base64,${base64}`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=volcengine-image-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/image/volcengine-image-model.ts"],"sourcesContent":["import {\n ImageModelV3,\n ImageModelV3CallOptions,\n ImageModelV3File,\n ImageModelV3ProviderMetadata,\n ImageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { volcengineFailedResponseHandler } from \"../chat/volcengine-error\";\nimport { volcengineImageResponseSchema } from \"./volcengine-image-api\";\n\nexport type VolcengineImageModelId =\n | \"doubao-seedream-4-5-251128\"\n | \"doubao-seedream-4-0-250828\"\n | (string & {});\n\n\nexport interface VolcengineImageConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n}\n\nexport class VolcengineImageModel implements ImageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n\n\n get maxImagesPerCall(): number {\n return 1;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n\n\n\n constructor(\n readonly modelId: VolcengineImageModelId,\n private readonly config: VolcengineImageConfig,\n ) { }\n\n\n async doGenerate({ prompt,\n files,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: ImageModelV3CallOptions): Promise<{\n images: Array<string> | Array<Uint8Array>;\n warnings: Array<SharedV3Warning>;\n providerMetadata?: ImageModelV3ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n usage?: ImageModelV3Usage;\n }> {\n const warnings: SharedV3Warning[] = [];\n\n // Handle unsupported options\n if (aspectRatio != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"aspectRatio\",\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"seed\",\n });\n }\n\n // Build request body\n const body: Record<string, unknown> = {\n model: this.modelId,\n prompt,\n size: size ?? \"1024x1024\",\n response_format: \"b64_json\",\n ...(providerOptions.volcengine ?? {}),\n };\n\n // Handle reference images for image-to-image generation\n if (files && files.length > 0) {\n const imageUrls = files.map((file) =>\n this.convertFileToDataUrl(file)\n );\n\n if (imageUrls.length === 1) {\n body.image = imageUrls[0];\n } else {\n body.image = imageUrls;\n }\n }\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/images/generations`,\n headers: combineHeaders(this.config.headers(), headers),\n body,\n failedResponseHandler: volcengineFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n volcengineImageResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n // Extract images from response\n const images: string[] = response.data.map((item) => {\n if (item.b64_json) {\n return item.b64_json;\n }\n if (item.url) {\n return item.url;\n }\n throw new Error(\"No image data in response\");\n });\n\n return {\n images,\n warnings,\n response: {\n timestamp: new Date(),\n modelId: response.model ?? this.modelId,\n headers: responseHeaders,\n },\n usage: response.usage\n ? {\n inputTokens: undefined,\n outputTokens: response.usage.output_tokens,\n totalTokens: response.usage.total_tokens,\n }\n : undefined,\n };\n }\n\n private convertFileToDataUrl(file: ImageModelV3File): string {\n if (file.type === \"url\") {\n return file.url;\n }\n\n // file.type === \"file\"\n if (typeof file.data === \"string\") {\n // base64 string - convert to data URL\n return `data:${file.mediaType};base64,${file.data}`;\n }\n\n // Uint8Array - convert to base64 data URL\n const base64 = btoa(String.fromCharCode(...file.data));\n return `data:${file.mediaType};base64,${base64}`;\n }\n}\n"],"names":["combineHeaders","createJsonResponseHandler","postJsonToApi","volcengineFailedResponseHandler","volcengineImageResponseSchema","VolcengineImageModel","specificationVersion","maxImagesPerCall","provider","config","modelId","doGenerate","prompt","files","size","aspectRatio","seed","providerOptions","headers","abortSignal","warnings","push","type","feature","body","model","response_format","volcengine","length","imageUrls","map","file","convertFileToDataUrl","image","value","response","responseHeaders","url","baseURL","failedResponseHandler","successfulResponseHandler","fetch","images","data","item","b64_json","Error","timestamp","Date","usage","inputTokens","undefined","outputTokens","output_tokens","totalTokens","total_tokens","mediaType","base64","btoa","String","fromCharCode"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export type VolcengineImageModelId = "doubao-seedream-4-5-251128" | "doubao-seedream-4-0-250828" | (string & {});
|
|
3
|
+
export declare const modelMaxImagesPerCall: Record<string, number>;
|
|
4
|
+
export interface VolcengineImageSettings {
|
|
5
|
+
/**
|
|
6
|
+
* Override the maximum number of images per call.
|
|
7
|
+
*/
|
|
8
|
+
maxImagesPerCall?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const volcengineImageProviderOptions: z.ZodObject<{
|
|
11
|
+
watermark: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
responseFormat: z.ZodOptional<z.ZodEnum<{
|
|
13
|
+
url: "url";
|
|
14
|
+
b64_json: "b64_json";
|
|
15
|
+
}>>;
|
|
16
|
+
logoInfo: z.ZodOptional<z.ZodObject<{
|
|
17
|
+
addLogo: z.ZodOptional<z.ZodBoolean>;
|
|
18
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
language: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
opacity: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
}, z.core.$strip>>;
|
|
22
|
+
imageStrength: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
export type VolcengineImageProviderOptions = z.infer<typeof volcengineImageProviderOptions>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const modelMaxImagesPerCall = {
|
|
3
|
+
"doubao-seedream-4-5-251128": 1,
|
|
4
|
+
"doubao-seedream-4-0-250828": 1
|
|
5
|
+
};
|
|
6
|
+
export const volcengineImageProviderOptions = z.object({
|
|
7
|
+
/**
|
|
8
|
+
* Whether to add watermark to the generated image.
|
|
9
|
+
* @default false
|
|
10
|
+
*/ watermark: z.boolean().optional(),
|
|
11
|
+
/**
|
|
12
|
+
* The format of the response.
|
|
13
|
+
* @default "b64_json"
|
|
14
|
+
*/ responseFormat: z.enum([
|
|
15
|
+
"url",
|
|
16
|
+
"b64_json"
|
|
17
|
+
]).optional(),
|
|
18
|
+
/**
|
|
19
|
+
* Logo information to embed in the image.
|
|
20
|
+
*/ logoInfo: z.object({
|
|
21
|
+
addLogo: z.boolean().optional(),
|
|
22
|
+
position: z.number().optional(),
|
|
23
|
+
language: z.number().optional(),
|
|
24
|
+
opacity: z.number().optional()
|
|
25
|
+
}).optional(),
|
|
26
|
+
/**
|
|
27
|
+
* Reference image strength for image-to-image generation.
|
|
28
|
+
* Value between 0 and 1.
|
|
29
|
+
*/ imageStrength: z.number().min(0).max(1).optional()
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=volcengine-image-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/image/volcengine-image-options.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type VolcengineImageModelId =\n | \"doubao-seedream-4-5-251128\"\n | \"doubao-seedream-4-0-250828\"\n | (string & {});\n\nexport const modelMaxImagesPerCall: Record<string, number> = {\n \"doubao-seedream-4-5-251128\": 1,\n \"doubao-seedream-4-0-250828\": 1,\n};\n\nexport interface VolcengineImageSettings {\n /**\n * Override the maximum number of images per call.\n */\n maxImagesPerCall?: number;\n}\n\nexport const volcengineImageProviderOptions = z.object({\n /**\n * Whether to add watermark to the generated image.\n * @default false\n */\n watermark: z.boolean().optional(),\n\n /**\n * The format of the response.\n * @default \"b64_json\"\n */\n responseFormat: z.enum([\"url\", \"b64_json\"]).optional(),\n\n /**\n * Logo information to embed in the image.\n */\n logoInfo: z\n .object({\n addLogo: z.boolean().optional(),\n position: z.number().optional(),\n language: z.number().optional(),\n opacity: z.number().optional(),\n })\n .optional(),\n\n /**\n * Reference image strength for image-to-image generation.\n * Value between 0 and 1.\n */\n imageStrength: z.number().min(0).max(1).optional(),\n});\n\nexport type VolcengineImageProviderOptions = z.infer<\n typeof volcengineImageProviderOptions\n>;\n"],"names":["z","modelMaxImagesPerCall","volcengineImageProviderOptions","object","watermark","boolean","optional","responseFormat","enum","logoInfo","addLogo","position","number","language","opacity","imageStrength","min","max"],"mappings":"AAAA,SAASA,CAAC,QAAQ,MAAM;AAOxB,OAAO,MAAMC,wBAAgD;IAC3D,8BAA8B;IAC9B,8BAA8B;AAChC,EAAE;AASF,OAAO,MAAMC,iCAAiCF,EAAEG,MAAM,CAAC;IACrD;;;GAGC,GACDC,WAAWJ,EAAEK,OAAO,GAAGC,QAAQ;IAE/B;;;GAGC,GACDC,gBAAgBP,EAAEQ,IAAI,CAAC;QAAC;QAAO;KAAW,EAAEF,QAAQ;IAEpD;;GAEC,GACDG,UAAUT,EACPG,MAAM,CAAC;QACNO,SAASV,EAAEK,OAAO,GAAGC,QAAQ;QAC7BK,UAAUX,EAAEY,MAAM,GAAGN,QAAQ;QAC7BO,UAAUb,EAAEY,MAAM,GAAGN,QAAQ;QAC7BQ,SAASd,EAAEY,MAAM,GAAGN,QAAQ;IAC9B,GACCA,QAAQ;IAEX;;;GAGC,GACDS,eAAef,EAAEY,MAAM,GAAGI,GAAG,CAAC,GAAGC,GAAG,CAAC,GAAGX,QAAQ;AAClD,GAAG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { createVolcengine, volcengine } from "./volcengine-provider";
|
|
2
2
|
export type { VolcengineProvider, VolcengineProviderSettings } from "./volcengine-provider";
|
|
3
|
-
export type { VolcengineChatOptions } from './
|
|
4
|
-
export {
|
|
5
|
-
export type { VolcengineUsage } from './convert-volcengine-usage';
|
|
3
|
+
export type { VolcengineChatOptions } from './chat';
|
|
4
|
+
export type { VolcengineImageModelId, } from './image';
|
|
6
5
|
export { volcengineTools } from './volcengine-tools';
|
|
6
|
+
export { convertVolcengineUsage } from './chat/convert-volcengine-chat-usage';
|
|
7
|
+
export type { VolcengineUsage } from './chat/convert-volcengine-chat-usage';
|
|
7
8
|
export { VERSION } from './version';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createVolcengine, volcengine } from "./volcengine-provider";
|
|
2
|
-
export { convertVolcengineUsage } from './convert-volcengine-usage';
|
|
3
2
|
export { volcengineTools } from './volcengine-tools';
|
|
3
|
+
export { convertVolcengineUsage } from './chat/convert-volcengine-chat-usage';
|
|
4
4
|
export { VERSION } from './version';
|
|
5
5
|
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { createVolcengine, volcengine } from \"./volcengine-provider\";\nexport type {\n VolcengineProvider,\n VolcengineProviderSettings\n} from \"./volcengine-provider\";\nexport type { VolcengineChatOptions } from './
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { createVolcengine, volcengine } from \"./volcengine-provider\";\nexport type {\n VolcengineProvider,\n VolcengineProviderSettings\n} from \"./volcengine-provider\";\nexport type { VolcengineChatOptions } from './chat';\nexport type {\n VolcengineImageModelId,\n\n} from './image';\nexport { volcengineTools } from './volcengine-tools';\nexport { convertVolcengineUsage } from './chat/convert-volcengine-chat-usage';\nexport type { VolcengineUsage } from './chat/convert-volcengine-chat-usage';\nexport { VERSION } from './version';"],"names":["createVolcengine","volcengine","volcengineTools","convertVolcengineUsage","VERSION"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,UAAU,QAAQ,wBAAwB;AAUrE,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,sBAAsB,QAAQ,uCAAuC;AAE9E,SAASC,OAAO,QAAQ,YAAY"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
export declare const imageGenerationArgsSchema: import("@ai-sdk/provider-utils").LazySchema<{
|
|
2
|
+
model?: string | undefined;
|
|
3
|
+
size?: "2K" | "4K" | undefined;
|
|
4
|
+
responseFormat?: "url" | "b64_json" | undefined;
|
|
5
|
+
image?: string | string[] | undefined;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const imageGenerationOutputSchema: import("@ai-sdk/provider-utils").LazySchema<{
|
|
8
|
+
model: string;
|
|
9
|
+
created: number;
|
|
10
|
+
data: {
|
|
11
|
+
size: string;
|
|
12
|
+
url?: string | undefined;
|
|
13
|
+
b64_json?: string | undefined;
|
|
14
|
+
}[];
|
|
15
|
+
usage: {
|
|
16
|
+
generated_images: number;
|
|
17
|
+
output_tokens: number;
|
|
18
|
+
total_tokens: number;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Image generation input options.
|
|
23
|
+
*/
|
|
24
|
+
export interface ImageGenerationArgs {
|
|
25
|
+
/**
|
|
26
|
+
* Model ID for image generation.
|
|
27
|
+
* @default "doubao-seedream-4-5-251128"
|
|
28
|
+
*/
|
|
29
|
+
model?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Image resolution.
|
|
32
|
+
* @default "2K"
|
|
33
|
+
*/
|
|
34
|
+
size?: "2K" | "4K";
|
|
35
|
+
/**
|
|
36
|
+
* Response format for the generated image.
|
|
37
|
+
* - "url": Returns image download URL (valid for 24 hours)
|
|
38
|
+
* - "b64_json": Returns Base64 encoded image data
|
|
39
|
+
* @default "url"
|
|
40
|
+
*/
|
|
41
|
+
responseFormat?: "url" | "b64_json";
|
|
42
|
+
/**
|
|
43
|
+
* Reference image URL(s) for image-to-image generation.
|
|
44
|
+
* - Single URL string for single image reference
|
|
45
|
+
* - Array of URLs for multi-image reference
|
|
46
|
+
*/
|
|
47
|
+
image?: string | string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Image generation output.
|
|
51
|
+
*/
|
|
52
|
+
export interface ImageGenerationOutput {
|
|
53
|
+
model: string;
|
|
54
|
+
created: number;
|
|
55
|
+
data: Array<{
|
|
56
|
+
/** Image URL, returned when response_format is url */
|
|
57
|
+
url?: string;
|
|
58
|
+
/** Base64 encoded image, returned when response_format is b64_json */
|
|
59
|
+
b64_json?: string;
|
|
60
|
+
/** Image dimensions (e.g., "3104x1312") */
|
|
61
|
+
size: string;
|
|
62
|
+
}>;
|
|
63
|
+
usage: {
|
|
64
|
+
generated_images: number;
|
|
65
|
+
output_tokens: number;
|
|
66
|
+
total_tokens: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Volcengine Image Generation Tool
|
|
71
|
+
*
|
|
72
|
+
* Enables the model to generate images from text prompts or reference images.
|
|
73
|
+
*
|
|
74
|
+
* Supports three modes:
|
|
75
|
+
* - Text-to-Image: Generate images from text prompts only
|
|
76
|
+
* - Image-to-Image: Generate images using a single reference image
|
|
77
|
+
* - Multi-Image-to-Image: Generate images using multiple reference images
|
|
78
|
+
*
|
|
79
|
+
* @see https://www.volcengine.com/docs/82379/1824121
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* // Text-to-Image
|
|
84
|
+
* volcengineTools.imageGeneration({
|
|
85
|
+
* size: "2K",
|
|
86
|
+
* })
|
|
87
|
+
*
|
|
88
|
+
* // Image-to-Image
|
|
89
|
+
* volcengineTools.imageGeneration({
|
|
90
|
+
* size: "2K",
|
|
91
|
+
* image: "https://example.com/reference.png",
|
|
92
|
+
* })
|
|
93
|
+
*
|
|
94
|
+
* // Multi-Image-to-Image
|
|
95
|
+
* volcengineTools.imageGeneration({
|
|
96
|
+
* size: "2K",
|
|
97
|
+
* image: ["https://example.com/img1.png", "https://example.com/img2.png"],
|
|
98
|
+
* })
|
|
99
|
+
*
|
|
100
|
+
* // Get Base64 encoded image
|
|
101
|
+
* volcengineTools.imageGeneration({
|
|
102
|
+
* size: "2K",
|
|
103
|
+
* responseFormat: "b64_json",
|
|
104
|
+
* })
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare const imageGeneration: (args?: ImageGenerationArgs) => import("@ai-sdk/provider-utils").Tool<{}, ImageGenerationOutput>;
|