veryfront 0.1.438 → 0.1.440
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/esm/deno.js +1 -1
- package/esm/extensions/ext-anthropic/src/anthropic-provider.d.ts.map +1 -1
- package/esm/extensions/ext-anthropic/src/anthropic-provider.js +23 -5
- package/esm/extensions/ext-google/src/google-provider.d.ts.map +1 -1
- package/esm/extensions/ext-google/src/google-provider.js +22 -2
- package/esm/extensions/ext-openai/src/openai-provider.d.ts.map +1 -1
- package/esm/extensions/ext-openai/src/openai-provider.js +23 -2
- package/esm/src/agent/hosted-durable-chat-run-start.d.ts +46 -0
- package/esm/src/agent/hosted-durable-chat-run-start.d.ts.map +1 -0
- package/esm/src/agent/hosted-durable-chat-run-start.js +148 -0
- package/esm/src/agent/index.d.ts +2 -0
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +1 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.js +38 -2
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts +7 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts.map +1 -1
- package/esm/src/agent/runtime-message-file-url-refresh.d.ts.map +1 -1
- package/esm/src/agent/runtime-message-file-url-refresh.js +64 -10
- package/esm/src/chat/conversation.d.ts.map +1 -1
- package/esm/src/chat/conversation.js +8 -5
- package/esm/src/provider/runtime-loader.d.ts +14 -1
- package/esm/src/provider/runtime-loader.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader.js +19 -1
- package/esm/src/runtime/runtime-bridge.d.ts.map +1 -1
- package/esm/src/runtime/runtime-bridge.js +3 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/extensions/ext-anthropic/src/anthropic-provider.ts +28 -5
- package/src/extensions/ext-google/src/google-provider.ts +27 -2
- package/src/extensions/ext-openai/src/openai-provider.ts +29 -2
- package/src/src/agent/hosted-durable-chat-run-start.ts +246 -0
- package/src/src/agent/index.ts +12 -0
- package/src/src/agent/runtime/text-generation-runtime-message-converter.ts +41 -2
- package/src/src/agent/runtime/text-generation-runtime-message-types.ts +8 -1
- package/src/src/agent/runtime-message-file-url-refresh.ts +78 -12
- package/src/src/chat/conversation.ts +15 -9
- package/src/src/provider/runtime-loader.ts +46 -3
- package/src/src/runtime/runtime-bridge.ts +10 -2
- package/src/src/utils/version-constant.ts +1 -1
|
@@ -1,28 +1,82 @@
|
|
|
1
1
|
export async function resolveRuntimeMessageFileUrls(messages, resolveFileUrl) {
|
|
2
2
|
const urlByUploadId = new Map();
|
|
3
3
|
return Promise.all(messages.map(async (message) => {
|
|
4
|
-
if (!message.parts.some((part) => part
|
|
4
|
+
if (!message.parts.some((part) => getUploadId(part))) {
|
|
5
5
|
return message;
|
|
6
6
|
}
|
|
7
7
|
const parts = await Promise.all(message.parts.map(async (part) => {
|
|
8
|
-
|
|
8
|
+
const uploadId = getUploadId(part);
|
|
9
|
+
if (!uploadId)
|
|
9
10
|
return part;
|
|
10
|
-
let urlPromise = urlByUploadId.get(
|
|
11
|
+
let urlPromise = urlByUploadId.get(uploadId);
|
|
11
12
|
if (!urlPromise) {
|
|
12
|
-
urlPromise = resolveFileUrl({
|
|
13
|
-
|
|
13
|
+
urlPromise = resolveFileUrl({
|
|
14
|
+
uploadId,
|
|
15
|
+
part: toResolverPart(part, uploadId),
|
|
16
|
+
message,
|
|
17
|
+
});
|
|
18
|
+
urlByUploadId.set(uploadId, urlPromise);
|
|
14
19
|
}
|
|
15
20
|
const signedUrl = await urlPromise;
|
|
16
|
-
if (!signedUrl
|
|
17
|
-
return part;
|
|
21
|
+
if (!signedUrl)
|
|
22
|
+
return normalizeUploadedFilePart(part, uploadId);
|
|
18
23
|
return {
|
|
19
|
-
...part,
|
|
24
|
+
...normalizeUploadedFilePart(part, uploadId),
|
|
20
25
|
url: signedUrl,
|
|
21
26
|
};
|
|
22
27
|
}));
|
|
23
28
|
return { ...message, parts };
|
|
24
29
|
}));
|
|
25
30
|
}
|
|
26
|
-
function
|
|
27
|
-
return
|
|
31
|
+
function isRecord(value) {
|
|
32
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
function getStringField(part, key) {
|
|
35
|
+
if (!isRecord(part))
|
|
36
|
+
return undefined;
|
|
37
|
+
const value = part[key];
|
|
38
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
39
|
+
}
|
|
40
|
+
function getUploadId(part) {
|
|
41
|
+
if (!isRecord(part) || (part.type !== "file" && part.type !== "image")) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return getStringField(part, "uploadId") ?? getStringField(part, "upload_id");
|
|
45
|
+
}
|
|
46
|
+
function getMediaType(part) {
|
|
47
|
+
return getStringField(part, "mediaType") ?? getStringField(part, "media_type");
|
|
48
|
+
}
|
|
49
|
+
function normalizeUploadedFilePart(part, uploadId) {
|
|
50
|
+
if (!isRecord(part))
|
|
51
|
+
return part;
|
|
52
|
+
const partRecord = part;
|
|
53
|
+
const partType = partRecord.type;
|
|
54
|
+
if (partType !== "file" && partType !== "image")
|
|
55
|
+
return part;
|
|
56
|
+
const mediaType = getMediaType(part);
|
|
57
|
+
const url = getStringField(part, "url");
|
|
58
|
+
if (!mediaType || !url)
|
|
59
|
+
return part;
|
|
60
|
+
const filename = getStringField(part, "filename");
|
|
61
|
+
const uploadPath = getStringField(part, "uploadPath") ?? getStringField(part, "upload_path");
|
|
62
|
+
return {
|
|
63
|
+
type: partType === "image" ? "image" : "file",
|
|
64
|
+
mediaType,
|
|
65
|
+
url,
|
|
66
|
+
...(filename ? { filename } : {}),
|
|
67
|
+
uploadId,
|
|
68
|
+
...(uploadPath ? { uploadPath } : {}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function toResolverPart(part, uploadId) {
|
|
72
|
+
const normalized = normalizeUploadedFilePart(part, uploadId);
|
|
73
|
+
if (isRecord(normalized) && normalized.type === "file") {
|
|
74
|
+
return normalized;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
type: "file",
|
|
78
|
+
mediaType: getMediaType(part) ?? "application/octet-stream",
|
|
79
|
+
url: getStringField(part, "url") ?? "",
|
|
80
|
+
uploadId,
|
|
81
|
+
};
|
|
28
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/src/chat/conversation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/src/chat/conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -389,19 +389,22 @@ function toJsonValue(value) {
|
|
|
389
389
|
return JSON.stringify(value);
|
|
390
390
|
}
|
|
391
391
|
function getFilePart(part) {
|
|
392
|
-
if (!isRecord(part) || part.type !== "file") {
|
|
392
|
+
if (!isRecord(part) || (part.type !== "file" && part.type !== "image")) {
|
|
393
393
|
return null;
|
|
394
394
|
}
|
|
395
|
-
const mediaType = getNonEmptyStringField(part, "mediaType")
|
|
395
|
+
const mediaType = getNonEmptyStringField(part, "mediaType") ??
|
|
396
|
+
getNonEmptyStringField(part, "media_type");
|
|
396
397
|
const data = getNonEmptyStringField(part, "url");
|
|
397
398
|
if (!mediaType || !data) {
|
|
398
399
|
return null;
|
|
399
400
|
}
|
|
400
401
|
const filename = getNonEmptyStringField(part, "filename");
|
|
401
|
-
const uploadId = getNonEmptyStringField(part, "uploadId")
|
|
402
|
-
|
|
402
|
+
const uploadId = getNonEmptyStringField(part, "uploadId") ??
|
|
403
|
+
getNonEmptyStringField(part, "upload_id");
|
|
404
|
+
const uploadPath = getNonEmptyStringField(part, "uploadPath") ??
|
|
405
|
+
getNonEmptyStringField(part, "upload_path");
|
|
403
406
|
return {
|
|
404
|
-
type: "file",
|
|
407
|
+
type: part.type === "image" ? "image" : "file",
|
|
405
408
|
mediaType,
|
|
406
409
|
data,
|
|
407
410
|
url: data,
|
|
@@ -16,6 +16,11 @@ export type RuntimePromptMessage = {
|
|
|
16
16
|
content: Array<{
|
|
17
17
|
type: "text";
|
|
18
18
|
text: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: "image" | "file";
|
|
21
|
+
mediaType: string;
|
|
22
|
+
url: string;
|
|
23
|
+
filename?: string;
|
|
19
24
|
}>;
|
|
20
25
|
} | {
|
|
21
26
|
role: "assistant";
|
|
@@ -62,7 +67,15 @@ export type OpenAICompatibleChatMessage = {
|
|
|
62
67
|
content: string;
|
|
63
68
|
} | {
|
|
64
69
|
role: "user";
|
|
65
|
-
content: string
|
|
70
|
+
content: string | Array<{
|
|
71
|
+
type: "text";
|
|
72
|
+
text: string;
|
|
73
|
+
} | {
|
|
74
|
+
type: "image_url";
|
|
75
|
+
image_url: {
|
|
76
|
+
url: string;
|
|
77
|
+
};
|
|
78
|
+
}>;
|
|
66
79
|
} | {
|
|
67
80
|
role: "assistant";
|
|
68
81
|
content: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-loader.d.ts","sourceRoot":"","sources":["../../../src/src/provider/runtime-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,aAAa,GACd,CAAC;AACF,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnC;
|
|
1
|
+
{"version":3,"file":"runtime-loader.d.ts","sourceRoot":"","sources":["../../../src/src/provider/runtime-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,24 @@ export function readTextParts(parts) {
|
|
|
32
32
|
}
|
|
33
33
|
return text;
|
|
34
34
|
}
|
|
35
|
+
function toOpenAICompatibleUserContent(parts) {
|
|
36
|
+
if (!parts.some((part) => part.type !== "text" && part.mediaType.startsWith("image/"))) {
|
|
37
|
+
return readTextParts(parts);
|
|
38
|
+
}
|
|
39
|
+
const content = [];
|
|
40
|
+
for (const part of parts) {
|
|
41
|
+
if (part.type === "text") {
|
|
42
|
+
if (part.text.length > 0) {
|
|
43
|
+
content.push({ type: "text", text: part.text });
|
|
44
|
+
}
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (part.type === "image" || part.mediaType.startsWith("image/")) {
|
|
48
|
+
content.push({ type: "image_url", image_url: { url: part.url } });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return content.length > 0 ? content : readTextParts(parts);
|
|
52
|
+
}
|
|
35
53
|
export function toOpenAICompatibleMessages(prompt) {
|
|
36
54
|
const messages = [];
|
|
37
55
|
for (const message of prompt) {
|
|
@@ -40,7 +58,7 @@ export function toOpenAICompatibleMessages(prompt) {
|
|
|
40
58
|
messages.push({ role: "system", content: message.content });
|
|
41
59
|
break;
|
|
42
60
|
case "user":
|
|
43
|
-
messages.push({ role: "user", content:
|
|
61
|
+
messages.push({ role: "user", content: toOpenAICompatibleUserContent(message.content) });
|
|
44
62
|
break;
|
|
45
63
|
case "assistant": {
|
|
46
64
|
let text = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-bridge.d.ts","sourceRoot":"","sources":["../../../src/src/runtime/runtime-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2DAA2D,CAAC;AAC9G,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,6BAA6B,EAC7B,cAAc,EACf,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAEb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,4BAA4B,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2BAA2B,CAAC,EAAE,6BAA6B,CAAC;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,4BAA4B,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2BAA2B,CAAC,EAAE,6BAA6B,CAAC;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-bridge.d.ts","sourceRoot":"","sources":["../../../src/src/runtime/runtime-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2DAA2D,CAAC;AAC9G,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,6BAA6B,EAC7B,cAAc,EACf,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAEb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,4BAA4B,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2BAA2B,CAAC,EAAE,6BAA6B,CAAC;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,4BAA4B,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2BAA2B,CAAC,EAAE,6BAA6B,CAAC;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AA8aF,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAuBjG;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,CAsC1E;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY;;;;;;;;GAW1C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB;;;;;;;GAUlD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAsBjE"}
|
|
@@ -29,7 +29,9 @@ function toRuntimePrompt(system, messages) {
|
|
|
29
29
|
case "user":
|
|
30
30
|
prompt.push({
|
|
31
31
|
role: "user",
|
|
32
|
-
content:
|
|
32
|
+
content: typeof message.content === "string"
|
|
33
|
+
? [{ type: "text", text: message.content }]
|
|
34
|
+
: message.content,
|
|
33
35
|
});
|
|
34
36
|
break;
|
|
35
37
|
case "assistant":
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.440";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
|
@@ -26,7 +26,6 @@ import {
|
|
|
26
26
|
ProviderRequestError,
|
|
27
27
|
readProviderOptions,
|
|
28
28
|
readRecord,
|
|
29
|
-
readTextParts,
|
|
30
29
|
requestJson,
|
|
31
30
|
requestStream,
|
|
32
31
|
stringifyJsonValue,
|
|
@@ -283,6 +282,33 @@ function pushAnthropicUserContent(
|
|
|
283
282
|
});
|
|
284
283
|
}
|
|
285
284
|
|
|
285
|
+
function toAnthropicUserContent(
|
|
286
|
+
parts: Extract<RuntimePromptMessage, { role: "user" }>["content"],
|
|
287
|
+
): Array<Record<string, unknown>> {
|
|
288
|
+
const content: Array<Record<string, unknown>> = [];
|
|
289
|
+
|
|
290
|
+
for (const part of parts) {
|
|
291
|
+
if (part.type === "text") {
|
|
292
|
+
if (part.text.length > 0) {
|
|
293
|
+
content.push({ type: "text", text: part.text });
|
|
294
|
+
}
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (part.type === "image" || part.mediaType.startsWith("image/")) {
|
|
299
|
+
content.push({
|
|
300
|
+
type: "image",
|
|
301
|
+
source: {
|
|
302
|
+
type: "url",
|
|
303
|
+
url: part.url,
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return content;
|
|
310
|
+
}
|
|
311
|
+
|
|
286
312
|
/**
|
|
287
313
|
* Resolves a {@link ProviderCacheTtl} into Anthropic's `cache_control` shape.
|
|
288
314
|
*
|
|
@@ -320,10 +346,7 @@ function toAnthropicMessages(
|
|
|
320
346
|
}
|
|
321
347
|
break;
|
|
322
348
|
case "user":
|
|
323
|
-
pushAnthropicUserContent(messages,
|
|
324
|
-
type: "text",
|
|
325
|
-
text: readTextParts(message.content),
|
|
326
|
-
}]);
|
|
349
|
+
pushAnthropicUserContent(messages, toAnthropicUserContent(message.content));
|
|
327
350
|
break;
|
|
328
351
|
case "assistant":
|
|
329
352
|
messages.push({
|
|
@@ -27,7 +27,6 @@ import {
|
|
|
27
27
|
ProviderRequestError,
|
|
28
28
|
readProviderOptions,
|
|
29
29
|
readRecord,
|
|
30
|
-
readTextParts,
|
|
31
30
|
requestJson,
|
|
32
31
|
requestStream,
|
|
33
32
|
stringifyJsonValue,
|
|
@@ -249,7 +248,7 @@ function toGoogleContents(
|
|
|
249
248
|
case "user":
|
|
250
249
|
contents.push({
|
|
251
250
|
role: "user",
|
|
252
|
-
parts:
|
|
251
|
+
parts: toGoogleUserParts(message.content),
|
|
253
252
|
});
|
|
254
253
|
break;
|
|
255
254
|
case "assistant": {
|
|
@@ -300,6 +299,32 @@ function toGoogleContents(
|
|
|
300
299
|
};
|
|
301
300
|
}
|
|
302
301
|
|
|
302
|
+
function toGoogleUserParts(
|
|
303
|
+
parts: Extract<RuntimePromptMessage, { role: "user" }>["content"],
|
|
304
|
+
): Array<Record<string, unknown>> {
|
|
305
|
+
const content: Array<Record<string, unknown>> = [];
|
|
306
|
+
|
|
307
|
+
for (const part of parts) {
|
|
308
|
+
if (part.type === "text") {
|
|
309
|
+
if (part.text.length > 0) {
|
|
310
|
+
content.push({ text: part.text });
|
|
311
|
+
}
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (part.type === "image" || part.mediaType.startsWith("image/")) {
|
|
316
|
+
content.push({
|
|
317
|
+
fileData: {
|
|
318
|
+
mimeType: part.mediaType,
|
|
319
|
+
fileUri: part.url,
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return content;
|
|
326
|
+
}
|
|
327
|
+
|
|
303
328
|
function toGoogleTools(
|
|
304
329
|
tools: RuntimeToolDefinition[] | undefined,
|
|
305
330
|
): Array<Record<string, unknown>> | undefined {
|
|
@@ -27,7 +27,6 @@ import {
|
|
|
27
27
|
ProviderRequestError,
|
|
28
28
|
readProviderOptions,
|
|
29
29
|
readRecord,
|
|
30
|
-
readTextParts,
|
|
31
30
|
requestJson,
|
|
32
31
|
requestStream,
|
|
33
32
|
stringifyJsonValue,
|
|
@@ -751,7 +750,7 @@ function toOpenAIResponsesInput(
|
|
|
751
750
|
case "user":
|
|
752
751
|
input.push({
|
|
753
752
|
role: "user",
|
|
754
|
-
content:
|
|
753
|
+
content: toOpenAIResponsesUserContent(message.content),
|
|
755
754
|
});
|
|
756
755
|
break;
|
|
757
756
|
case "assistant": {
|
|
@@ -816,6 +815,34 @@ function toOpenAIResponsesInput(
|
|
|
816
815
|
};
|
|
817
816
|
}
|
|
818
817
|
|
|
818
|
+
function toOpenAIResponsesUserContent(
|
|
819
|
+
parts: Extract<RuntimePromptMessage, { role: "user" }>["content"],
|
|
820
|
+
): Array<Record<string, unknown>> {
|
|
821
|
+
const content: Array<Record<string, unknown>> = [];
|
|
822
|
+
|
|
823
|
+
for (const part of parts) {
|
|
824
|
+
if (part.type === "text") {
|
|
825
|
+
if (part.text.length > 0) {
|
|
826
|
+
content.push({ type: "input_text", text: part.text });
|
|
827
|
+
}
|
|
828
|
+
continue;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
if (part.type === "image" || part.mediaType.startsWith("image/")) {
|
|
832
|
+
content.push({ type: "input_image", image_url: part.url, detail: "auto" });
|
|
833
|
+
continue;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
content.push({
|
|
837
|
+
type: "input_file",
|
|
838
|
+
file_url: part.url,
|
|
839
|
+
...(part.filename ? { filename: part.filename } : {}),
|
|
840
|
+
});
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
return content;
|
|
844
|
+
}
|
|
845
|
+
|
|
819
846
|
/**
|
|
820
847
|
* Tools on the Responses API differ from Chat Completions: instead of
|
|
821
848
|
* `{ type: "function", function: { name, parameters } }` the function
|