veryfront 0.1.566 → 0.1.567
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/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.js +1 -9
- package/esm/src/chat/message-prep.d.ts.map +1 -1
- package/esm/src/chat/message-prep.js +54 -1
- package/esm/src/chat/types.js +1 -1
- package/esm/src/embedding/upload-handler.d.ts.map +1 -1
- package/esm/src/embedding/upload-handler.js +4 -4
- package/esm/src/security/input-validation/parsers.d.ts.map +1 -1
- package/esm/src/security/input-validation/parsers.js +4 -4
- 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/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-generation-runtime-message-converter.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/text-generation-runtime-message-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAGV,4BAA4B,EAI7B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAGL,KAAK,OAAO,EAGb,MAAM,aAAa,CAAC;AA0ErB;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,OAAO,GAAG,4BAA4B,CA2FhG;AA8BD;;GAEG;AACH,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,OAAO,EAAE,GAClB,4BAA4B,EAAE,
|
|
1
|
+
{"version":3,"file":"text-generation-runtime-message-converter.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/text-generation-runtime-message-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAGV,4BAA4B,EAI7B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAGL,KAAK,OAAO,EAGb,MAAM,aAAa,CAAC;AA0ErB;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,OAAO,GAAG,4BAA4B,CA2FhG;AA8BD;;GAEG;AACH,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,OAAO,EAAE,GAClB,4BAA4B,EAAE,CA4BhC"}
|
|
@@ -181,7 +181,6 @@ function hasProviderSendableAssistantContent(message) {
|
|
|
181
181
|
*/
|
|
182
182
|
export function convertToTextGenerationRuntimeMessages(messages) {
|
|
183
183
|
const textGenerationRuntimeMessages = [];
|
|
184
|
-
const toolResultMessageIndexes = new Map();
|
|
185
184
|
for (const message of messages) {
|
|
186
185
|
if (!hasProviderSendableAssistantContent(message)) {
|
|
187
186
|
continue;
|
|
@@ -196,14 +195,7 @@ export function convertToTextGenerationRuntimeMessages(messages) {
|
|
|
196
195
|
continue;
|
|
197
196
|
}
|
|
198
197
|
for (const toolResultPart of toolResultParts) {
|
|
199
|
-
|
|
200
|
-
const existingIndex = toolResultMessageIndexes.get(toolResultPart.toolCallId);
|
|
201
|
-
if (existingIndex === undefined) {
|
|
202
|
-
toolResultMessageIndexes.set(toolResultPart.toolCallId, textGenerationRuntimeMessages.length);
|
|
203
|
-
textGenerationRuntimeMessages.push(toolResultMessage);
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
206
|
-
textGenerationRuntimeMessages[existingIndex] = toolResultMessage;
|
|
198
|
+
textGenerationRuntimeMessages.push(convertToolResultPart(toolResultPart));
|
|
207
199
|
}
|
|
208
200
|
}
|
|
209
201
|
return textGenerationRuntimeMessages;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-prep.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-prep.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAQjC,OAAO,EAKL,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAIpB,uBAAuB;AACvB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAOD,qBAAqB;AACrB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,oBAAoB,EAAE,CAiCxB;AAqCD,kDAAkD;AAClD,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,oBAAoB,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,oBAAoB,EAAE,CAiExB;AA+BD,4DAA4D;AAC5D,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,gDAAgD;AAChD,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAwB7F;AAED,qDAAqD;AACrD,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,EAAE,CAmDjB;
|
|
1
|
+
{"version":3,"file":"message-prep.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-prep.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAQjC,OAAO,EAKL,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAIpB,uBAAuB;AACvB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAOD,qBAAqB;AACrB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,oBAAoB,EAAE,CAiCxB;AAqCD,kDAAkD;AAClD,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,oBAAoB,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,oBAAoB,EAAE,CAiExB;AA+BD,4DAA4D;AAC5D,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,gDAAgD;AAChD,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAwB7F;AAED,qDAAqD;AACrD,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,EAAE,CAmDjB;AAyCD,gCAAgC;AAChC,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAiBhF;AAsFD,wCAAwC;AACxC,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,oBAAoB,EAAE,GAC/B,oBAAoB,EAAE,CAwBxB;AAED;;GAEG;AACH,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,sCAAgC,CAAC;AAYnE,wDAAwD;AACxD,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,aAAa,EAAE,GACxB,oBAAoB,EAAE,CAiBxB;AA4FD,6BAA6B;AAC7B,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,oBAAoB,EAAE,CAsE3F;AAWD,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,oBAAoB,EAAE,CA4IxF;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,oBAAoB,EAAE,CA4B7F;AAED,wBAAwB;AACxB,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,QAAQ,GAAE,MAAU,GACnB,oBAAoB,EAAE,CAexB;AAED,2BAA2B;AAC3B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,oBAAoB,EAAE,CA0D1F;AAED,4BAA4B;AAC5B,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,MAAM,GAAE,MAA6B,EACrC,QAAQ,GAAE,MAAU,GACnB,oBAAoB,EAAE,CAMxB;AAED;;GAEG;AACH,4DAA4D;AAC5D,eAAO,MAAM,kCAAkC,mDAA6C,CAAC"}
|
|
@@ -237,6 +237,25 @@ function isPendingToolPart(part) {
|
|
|
237
237
|
}
|
|
238
238
|
return part.type === "dynamic-tool" || part.type === "tool_call" || part.type.startsWith("tool-");
|
|
239
239
|
}
|
|
240
|
+
function getToolPartCallId(part) {
|
|
241
|
+
if (!isRecord(part)) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
const toolCallId = part.toolCallId;
|
|
245
|
+
return typeof toolCallId === "string" && toolCallId.length > 0 ? toolCallId : null;
|
|
246
|
+
}
|
|
247
|
+
function isToolLikePart(part) {
|
|
248
|
+
return isRecord(part) && typeof part.type === "string" &&
|
|
249
|
+
(part.type === "dynamic-tool" || part.type === "tool_call" || part.type.startsWith("tool-"));
|
|
250
|
+
}
|
|
251
|
+
function hasToolState(part, state) {
|
|
252
|
+
return isRecord(part) && part.state === state && isToolLikePart(part);
|
|
253
|
+
}
|
|
254
|
+
function isToolErrorState(part) {
|
|
255
|
+
return isRecord(part) &&
|
|
256
|
+
(part.state === "output-error" || part.state === "output-denied" || part.state === "error") &&
|
|
257
|
+
isToolLikePart(part);
|
|
258
|
+
}
|
|
240
259
|
/** Strip pending tool parts. */
|
|
241
260
|
export function stripPendingToolParts(messages) {
|
|
242
261
|
return messages.flatMap((message) => {
|
|
@@ -253,6 +272,39 @@ export function stripPendingToolParts(messages) {
|
|
|
253
272
|
return [{ ...message, parts }];
|
|
254
273
|
});
|
|
255
274
|
}
|
|
275
|
+
function stripSupersededToolErrorParts(messages) {
|
|
276
|
+
return messages.flatMap((message) => {
|
|
277
|
+
if (message.role !== "assistant" || message.parts.length === 0) {
|
|
278
|
+
return [message];
|
|
279
|
+
}
|
|
280
|
+
const completedToolCallIds = new Set();
|
|
281
|
+
for (const part of message.parts) {
|
|
282
|
+
if (hasToolState(part, "output-available")) {
|
|
283
|
+
const toolCallId = getToolPartCallId(part);
|
|
284
|
+
if (toolCallId) {
|
|
285
|
+
completedToolCallIds.add(toolCallId);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (completedToolCallIds.size === 0) {
|
|
290
|
+
return [message];
|
|
291
|
+
}
|
|
292
|
+
const parts = message.parts.filter((part) => {
|
|
293
|
+
if (!isToolErrorState(part)) {
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
const toolCallId = getToolPartCallId(part);
|
|
297
|
+
return !toolCallId || !completedToolCallIds.has(toolCallId);
|
|
298
|
+
});
|
|
299
|
+
if (parts.length === message.parts.length) {
|
|
300
|
+
return [message];
|
|
301
|
+
}
|
|
302
|
+
if (parts.length === 0) {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
return [{ ...message, parts }];
|
|
306
|
+
});
|
|
307
|
+
}
|
|
256
308
|
function isKeepableModelPart(part, includeReasoning) {
|
|
257
309
|
if (!isRecord(part) || typeof part.type !== "string")
|
|
258
310
|
return false;
|
|
@@ -344,7 +396,8 @@ export function prepareProviderModelMessagesFromUiMessages(messages) {
|
|
|
344
396
|
const validMessages = messages.filter((message) => message && typeof message === "object" && "role" in message);
|
|
345
397
|
const normalizedMessages = normalizeMessageFilePartMediaTypes(validMessages);
|
|
346
398
|
const strippedPendingToolMessages = stripPendingToolParts(normalizedMessages);
|
|
347
|
-
const
|
|
399
|
+
const strippedSupersededToolMessages = stripSupersededToolErrorParts(strippedPendingToolMessages);
|
|
400
|
+
const rewrittenMessages = rewriteUnsupportedFilePartsAsAnnotations(strippedSupersededToolMessages);
|
|
348
401
|
const providerModelMessages = convertUiMessagesToProviderModelMessages(rewrittenMessages);
|
|
349
402
|
const patchedMessages = ensureToolCallInputs(dedupeToolHistory(providerModelMessages));
|
|
350
403
|
const sanitized = sanitizeProviderModelMessages(patchedMessages);
|
package/esm/src/chat/types.js
CHANGED
|
@@ -111,7 +111,7 @@ export const getMessageMetadataSchema = defineSchema((v) => v.object({
|
|
|
111
111
|
*/
|
|
112
112
|
export const messageMetadataSchema = lazySchema(getMessageMetadataSchema);
|
|
113
113
|
/** Zod schema for get chat UI message role. */
|
|
114
|
-
export const getChatUiMessageRoleSchema = defineSchema((v) => v.enum(["system", "user", "assistant"]));
|
|
114
|
+
export const getChatUiMessageRoleSchema = defineSchema((v) => v.enum(["system", "user", "assistant", "tool"]));
|
|
115
115
|
/** Schema for chat ui message role.
|
|
116
116
|
* @deprecated Use getChatUiMessageRoleSchema()
|
|
117
117
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-handler.d.ts","sourceRoot":"","sources":["../../../src/src/embedding/upload-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"upload-handler.d.ts","sourceRoot":"","sources":["../../../src/src/embedding/upload-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAqF3C,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA2CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EACf,MAAM,CAAC,EAAE,mBAAmB;oBAIC,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC;eA8ElC,OAAO,CAAC,QAAQ,CAAC;uBAW3B,OAAO,WACR;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAC1C,OAAO,CAAC,QAAQ,CAAC;EA0BrB"}
|
|
@@ -2,9 +2,9 @@ import { isVeryfrontCloudEnabled } from "../platform/cloud/resolver.js";
|
|
|
2
2
|
import { VeryfrontCloudBlobStorage } from "../workflow/blob/veryfront-cloud-storage.js";
|
|
3
3
|
import { serverLogger } from "../utils/index.js";
|
|
4
4
|
import { loadUpload } from "./upload-loader.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import * as nodeBuffer from "node:buffer";
|
|
6
|
+
const FileCtor = globalThis.File ??
|
|
7
|
+
nodeBuffer.File;
|
|
8
8
|
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB
|
|
9
9
|
const MAX_FILE_NAME_LENGTH = 200;
|
|
10
10
|
const CLOUD_UPLOAD_PREFIX = ".veryfront/rag/uploads/";
|
|
@@ -145,7 +145,7 @@ export function createUploadHandler(store, config) {
|
|
|
145
145
|
try {
|
|
146
146
|
const formData = await request.formData();
|
|
147
147
|
const file = formData.get("file");
|
|
148
|
-
if (!file || !(file instanceof
|
|
148
|
+
if (!file || !(file instanceof FileCtor)) {
|
|
149
149
|
return Response.json({ error: "No file provided" }, { status: 400 });
|
|
150
150
|
}
|
|
151
151
|
if (file.size > maxSize) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../../src/src/security/input-validation/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAI/D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../../src/src/security/input-validation/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAI/D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM1F,8CAA8C;AAC9C,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAED,6DAA6D;AAC7D,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CA2B1E"}
|
|
@@ -2,9 +2,9 @@ import { createValidationError, VeryfrontError } from "./errors.js";
|
|
|
2
2
|
import { readBodyWithLimit, validateContentType, validateRequestLimits } from "./limits.js";
|
|
3
3
|
import { sanitizeData } from "./sanitizers.js";
|
|
4
4
|
import { DEFAULT_LIMITS } from "./types.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import * as nodeBuffer from "node:buffer";
|
|
6
|
+
const FileCtor = globalThis.File ??
|
|
7
|
+
nodeBuffer.File;
|
|
8
8
|
/** Parse and validate a JSON request body. */
|
|
9
9
|
export async function parseJsonBody(request, schema, options) {
|
|
10
10
|
validateRequestLimits(request, options?.limits);
|
|
@@ -42,7 +42,7 @@ export async function parseFormData(request, schema, options) {
|
|
|
42
42
|
const data = {};
|
|
43
43
|
const maxFileSize = options?.limits?.maxFileSize ?? DEFAULT_LIMITS.maxFileSize;
|
|
44
44
|
for (const [key, value] of formData.entries()) {
|
|
45
|
-
if (value instanceof
|
|
45
|
+
if (value instanceof FileCtor && value.size > maxFileSize) {
|
|
46
46
|
throw createValidationError(`File ${key} too large`, {
|
|
47
47
|
maxSize: maxFileSize,
|
|
48
48
|
actualSize: value.size,
|