veryfront 0.1.1117 → 0.1.1119

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.1117",
3
+ "version": "0.1.1119",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -1 +1 @@
1
- {"version":3,"file":"load-skill-tool.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/load-skill-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAchD,OAAO,KAAK,EAEV,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAG7B,yFAAyF;AACzF,eAAO,MAAM,oCAAoC,2mBACiU,CAAC;AAEnX,mDAAmD;AACnD,eAAO,MAAM,8BAA8B,4lBAC2d,CAAC;AAqEvgB,2CAA2C;AAC3C,MAAM,MAAM,2BAA2B,GAAG,0BAA0B,GAAG;IACrE,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAClE,6BAA6B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;CACrF,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjG,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAClE,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAEvF,mDAAmD;AACnD,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,2BAA2B,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,yBAAyB,CAAC;IAC9C,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,4BAA4B,CAAC;IACxC,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,kCAAkC;;;GAS9C,CAAC;AAKF,iDAAiD;AACjD,MAAM,MAAM,yBAAyB,GAAG,WAAW,CACjD,UAAU,CAAC,OAAO,kCAAkC,CAAC,CACtD,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,mCAAmC,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,0BAA0B,GAClC,0BAA0B,GAC1B,mCAAmC,GACnC,2BAA2B,CAAC;AAmThC,sCAAsC;AACtC,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,IAAI,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,CAiE7D"}
1
+ {"version":3,"file":"load-skill-tool.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/load-skill-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAchD,OAAO,KAAK,EAEV,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAG7B,yFAAyF;AACzF,eAAO,MAAM,oCAAoC,2mBACiU,CAAC;AAEnX,mDAAmD;AACnD,eAAO,MAAM,8BAA8B,4lBAC2d,CAAC;AAqEvgB,2CAA2C;AAC3C,MAAM,MAAM,2BAA2B,GAAG,0BAA0B,GAAG;IACrE,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAClE,6BAA6B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;CACrF,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjG,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAClE,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAEvF,mDAAmD;AACnD,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,2BAA2B,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,yBAAyB,CAAC;IAC9C,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,4BAA4B,CAAC;IACxC,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,kCAAkC;;;GAS9C,CAAC;AAKF,iDAAiD;AACjD,MAAM,MAAM,yBAAyB,GAAG,WAAW,CACjD,UAAU,CAAC,OAAO,kCAAkC,CAAC,CACtD,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,mCAAmC,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,0BAA0B,GAClC,0BAA0B,GAC1B,mCAAmC,GACnC,2BAA2B,CAAC;AAkVhC,sCAAsC;AACtC,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,IAAI,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,CAmE7D"}
@@ -184,6 +184,14 @@ function getLoadedRuntimeSkillIds(options) {
184
184
  .filter((skillId) => typeof skillId === "string" && skillId.length > 0)),
185
185
  ].sort();
186
186
  }
187
+ function getReferenceableLoadedRuntimeSkillIds(options) {
188
+ return [
189
+ ...new Set(Object.values(options.context.loadedSkillResponses ?? {})
190
+ .filter((response) => (response.references?.length ?? 0) > 0)
191
+ .map((response) => response.skillId)
192
+ .filter((skillId) => typeof skillId === "string" && skillId.length > 0)),
193
+ ].sort();
194
+ }
187
195
  function buildRuntimeLoadSkillInputSchema(options) {
188
196
  const knownIds = getKnownRuntimeSkillIds(options);
189
197
  if (!knownIds || knownIds.length === 0) {
@@ -192,19 +200,28 @@ function buildRuntimeLoadSkillInputSchema(options) {
192
200
  const knownIdSet = new Set(knownIds);
193
201
  const loadedIds = getLoadedRuntimeSkillIds(options).filter((skillId) => knownIdSet.has(skillId));
194
202
  const loadedIdSet = new Set(loadedIds);
203
+ const referenceableLoadedIds = getReferenceableLoadedRuntimeSkillIds(options)
204
+ .filter((skillId) => knownIdSet.has(skillId));
195
205
  const unloadedIds = knownIds.filter((skillId) => !loadedIdSet.has(skillId));
196
- if (loadedIds.length > 0 && unloadedIds.length === 0) {
206
+ if (loadedIds.length > 0 && unloadedIds.length === 0 && referenceableLoadedIds.length === 0) {
197
207
  const [firstLoaded, ...restLoaded] = loadedIds;
198
208
  const loadedEnumValues = [firstLoaded, ...restLoaded];
199
209
  return defineSchema((v) => v.object({
200
- skillId: v.enum(loadedEnumValues).describe(`Already-loaded skill ID. Body reloads are not allowed; use this only with file for listed references. Loaded skill IDs: ${loadedIds.join(", ")}`),
210
+ skillId: v.enum(loadedEnumValues).describe(`Already-loaded skill ID with no advertised reference files. Calling load_skill again is a no-op. Loaded skill IDs: ${loadedIds.join(", ")}`),
211
+ }).strict())();
212
+ }
213
+ if (referenceableLoadedIds.length > 0 && unloadedIds.length === 0) {
214
+ const [firstLoaded, ...restLoaded] = referenceableLoadedIds;
215
+ const loadedEnumValues = [firstLoaded, ...restLoaded];
216
+ return defineSchema((v) => v.object({
217
+ skillId: v.enum(loadedEnumValues).describe(`Already-loaded skill ID. Body reloads are not allowed; use this only with file for listed references. Loaded skill IDs: ${referenceableLoadedIds.join(", ")}`),
201
218
  file: v.string().describe("Required reference file to load from an already-loaded skill. Do not call load_skill again for the skill body."),
202
219
  }))();
203
220
  }
204
- if (loadedIds.length > 0) {
221
+ if (referenceableLoadedIds.length > 0) {
205
222
  const [firstUnloaded, ...restUnloaded] = unloadedIds;
206
223
  const unloadedEnumValues = [firstUnloaded, ...restUnloaded];
207
- const [firstLoaded, ...restLoaded] = loadedIds;
224
+ const [firstLoaded, ...restLoaded] = referenceableLoadedIds;
208
225
  const loadedEnumValues = [firstLoaded, ...restLoaded];
209
226
  return defineSchema((v) => v.union([
210
227
  v.object({
@@ -212,15 +229,15 @@ function buildRuntimeLoadSkillInputSchema(options) {
212
229
  file: v.string().optional().describe("Optional reference file to load. First load the skill with only skillId, then use file only for a reference path listed by that loaded skill."),
213
230
  }),
214
231
  v.object({
215
- skillId: v.enum(loadedEnumValues).describe(`Already-loaded skill ID. Body reloads are not allowed; use this only with file for listed references. Loaded skill IDs: ${loadedIds.join(", ")}`),
232
+ skillId: v.enum(loadedEnumValues).describe(`Already-loaded skill ID. Body reloads are not allowed; use this only with file for listed references. Loaded skill IDs: ${referenceableLoadedIds.join(", ")}`),
216
233
  file: v.string().describe("Required reference file to load from an already-loaded skill. Do not call load_skill again for the skill body."),
217
234
  }),
218
235
  ]))();
219
236
  }
220
- const [first, ...rest] = knownIds;
237
+ const [first, ...rest] = unloadedIds;
221
238
  const enumValues = [first, ...rest];
222
239
  return defineSchema((v) => v.object({
223
- skillId: v.enum(enumValues).describe(`The skill ID to load. Available skill IDs: ${knownIds.join(", ")}`),
240
+ skillId: v.enum(enumValues).describe(`Unloaded skill ID to load. Available unloaded skill IDs: ${unloadedIds.join(", ")}`),
224
241
  file: v.string().optional().describe("Optional reference file to load. First load the skill with only skillId, then use file only for a reference path listed by that loaded skill."),
225
242
  }))();
226
243
  }
@@ -275,7 +292,7 @@ export function createRuntimeLoadSkillTool(options) {
275
292
  async function execute({ skillId, file }) {
276
293
  let parsed;
277
294
  try {
278
- parsed = buildRuntimeLoadSkillInputSchema(options).parse({ skillId, file });
295
+ parsed = buildRuntimeLoadSkillInputSchema(options).parse(file === undefined ? { skillId } : { skillId, file });
279
296
  }
280
297
  catch (error) {
281
298
  throw INPUT_VALIDATION_FAILED.create({
@@ -27,7 +27,7 @@ export declare const metrics: {
27
27
  pattern: string;
28
28
  flags?: string;
29
29
  }) => EvalMetric;
30
- readonly jsonMatch: (options: {
30
+ readonly jsonMatch: (options?: {
31
31
  expected?: unknown;
32
32
  }) => EvalMetric;
33
33
  readonly groundedness: (options?: EvalAnswerGroundednessMetricOptions) => EvalMetric;
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/src/eval/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mCAAmC,EACnC,kCAAkC,EAElC,6BAA6B,EAC7B,mCAAmC,EACnC,UAAU,EAMV,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AA8BpB,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE,CAAC;AA2DF,iBAAS,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAQ9C;AASD,iBAAS,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C;AA8iBD,0FAA0F;AAC1F,eAAO,MAAM,OAAO;;mCAEF,UAAU;qCAON;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE,KAAG,UAAU;kCAWzD;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;sCAY5C;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,KAAG,UAAU;0CAShC,mCAAmC,KAAQ,UAAU;;;sCAgD1D,UAAU;oCAgBV,MAAM,YAAY,wBAAwB,KAAG,UAAU;uCAcpD,MAAM,KAAG,UAAU;uCAcnB,MAAM,WAAW,wBAAwB,KAAG,UAAU;;;sCAgBvD,mCAAmC,KAAG,UAAU;yCAoC7C,mCAAmC,KAAG,UAAU;gCAuCzD,6BAA6B,KAAG,UAAU;+CA0C5B,kCAAkC,KAAQ,UAAU;4CA0CvD,kCAAkC,KAAQ,UAAU;;;oCAuD3D;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;mCAc/B;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;iCAoB3E;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;;;mCAsB7B,gBAAgB,KAAG,UAAU;;CAmCvC,CAAC;AAEX,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/src/eval/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mCAAmC,EACnC,kCAAkC,EAElC,6BAA6B,EAC7B,mCAAmC,EACnC,UAAU,EAMV,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AA8BpB,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE,CAAC;AA2DF,iBAAS,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAQ9C;AAuBD,iBAAS,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C;AA8iBD,0FAA0F;AAC1F,eAAO,MAAM,OAAO;;mCAEF,UAAU;qCAON;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE,KAAG,UAAU;kCAWzD;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;uCAY5C;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,KAAQ,UAAU;0CAgBrC,mCAAmC,KAAQ,UAAU;;;sCAgD1D,UAAU;oCAgBV,MAAM,YAAY,wBAAwB,KAAG,UAAU;uCAcpD,MAAM,KAAG,UAAU;uCAcnB,MAAM,WAAW,wBAAwB,KAAG,UAAU;;;sCAgBvD,mCAAmC,KAAG,UAAU;yCAoC7C,mCAAmC,KAAG,UAAU;gCAuCzD,6BAA6B,KAAG,UAAU;+CA0C5B,kCAAkC,KAAQ,UAAU;4CA0CvD,kCAAkC,KAAQ,UAAU;;;oCAuD3D;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;mCAc/B;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;iCAoB3E;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,KAAG,UAAU;;;mCAsB7B,gBAAgB,KAAG,UAAU;;CAmCvC,CAAC;AAEX,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
@@ -66,11 +66,25 @@ function getOutputText(output) {
66
66
  }
67
67
  return stableStringify(output);
68
68
  }
69
+ const INVALID_JSON_TEXT = Symbol("invalid-json-text");
69
70
  function getOutputJson(output) {
70
- if (output && typeof output === "object" && "json" in output) {
71
- return output.json;
71
+ if (output && typeof output === "object") {
72
+ const record = output;
73
+ if (Object.hasOwn(record, "json"))
74
+ return { fromText: false, value: record.json };
75
+ if (Object.hasOwn(record, "text") && typeof record.text === "string") {
76
+ return { fromText: true, value: parseJsonText(record.text) };
77
+ }
78
+ }
79
+ return { fromText: false, value: output };
80
+ }
81
+ function parseJsonText(text) {
82
+ try {
83
+ return JSON.parse(text);
84
+ }
85
+ catch {
86
+ return INVALID_JSON_TEXT;
72
87
  }
73
- return output;
74
88
  }
75
89
  function stableStringify(value) {
76
90
  return JSON.stringify(sortJsonValue(value));
@@ -80,7 +94,7 @@ function sortJsonValue(value) {
80
94
  return value.map(sortJsonValue);
81
95
  if (!value || typeof value !== "object")
82
96
  return value;
83
- const sorted = {};
97
+ const sorted = Object.create(null);
84
98
  for (const key of Object.keys(value).sort()) {
85
99
  sorted[key] = sortJsonValue(value[key]);
86
100
  }
@@ -544,11 +558,19 @@ export const metrics = {
544
558
  return scoreResult("answer.regex", "answer", "gate", pattern.test(getOutputText(record.output)));
545
559
  }, options);
546
560
  },
547
- jsonMatch(options) {
561
+ jsonMatch(options = {}) {
548
562
  return createMetric("answer.jsonMatch", "answer", (record) => {
549
- const expected = Object.hasOwn(options, "expected") ? options.expected : record.reference;
563
+ const hasExpectedOption = Object.hasOwn(options, "expected");
564
+ const expectedInput = hasExpectedOption ? options.expected : record.reference;
550
565
  const actual = getOutputJson(record.output);
551
- const pass = stableStringify(actual) === stableStringify(expected);
566
+ let expected = expectedInput;
567
+ if (actual.fromText && !hasExpectedOption && typeof expectedInput === "string") {
568
+ const parsedReference = parseJsonText(expectedInput);
569
+ if (parsedReference !== INVALID_JSON_TEXT)
570
+ expected = parsedReference;
571
+ }
572
+ const pass = actual.value !== INVALID_JSON_TEXT && expected !== INVALID_JSON_TEXT &&
573
+ stableStringify(actual.value) === stableStringify(expected);
552
574
  return scoreResult("answer.jsonMatch", "answer", "gate", pass);
553
575
  }, options);
554
576
  },
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.1117";
2
+ export declare const VERSION = "0.1.1119";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.1117";
4
+ export const VERSION = "0.1.1119";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.1117",
3
+ "version": "0.1.1119",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
@@ -332,10 +332,10 @@
332
332
  "@types/react": "19.2.14",
333
333
  "@types/react-dom": "19.2.3",
334
334
  "ws": "8.21.0",
335
- "@veryfront/ext-bundler-esbuild": "0.1.1117",
336
- "@veryfront/ext-content-mdx": "0.1.1117",
337
- "@veryfront/ext-css-tailwind": "0.1.1117",
338
- "@veryfront/ext-parser-babel": "0.1.1117"
335
+ "@veryfront/ext-bundler-esbuild": "0.1.1119",
336
+ "@veryfront/ext-content-mdx": "0.1.1119",
337
+ "@veryfront/ext-css-tailwind": "0.1.1119",
338
+ "@veryfront/ext-parser-babel": "0.1.1119"
339
339
  },
340
340
  "devDependencies": {
341
341
  "@types/node": "20.9.0"