@absolutejs/rag 0.24.1 → 0.24.3

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.
@@ -34,6 +34,8 @@ export type ResearchReviewCheckpoint = {
34
34
  pass: number;
35
35
  stage?: "extract" | "review";
36
36
  nextField: number;
37
+ /** Reduced after a settled failed batch; never increases the configured maximum. */
38
+ nextBatchSize?: number;
37
39
  pending: boolean;
38
40
  finished?: boolean;
39
41
  draft: unknown;
@@ -123563,8 +123563,10 @@ var createResearch = (config) => {
123563
123563
  reviewBatchSize
123564
123564
  });
123565
123565
  const resumed = input.resumeReview;
123566
- if (resumed && (resumed.version !== 1 || resumed.fingerprint !== fingerprint || resumed.pending || !Number.isSafeInteger(resumed.nextField) || resumed.nextField < 0 || !Number.isSafeInteger(resumed.pass) || resumed.pass < 0 || resumed.pass > evidenceRepairs))
123566
+ if (resumed && (resumed.version !== 1 || resumed.fingerprint !== fingerprint || resumed.pending || resumed.nextBatchSize !== undefined && (!Number.isSafeInteger(resumed.nextBatchSize) || resumed.nextBatchSize < 1 || resumed.nextBatchSize > reviewBatchSize) || !Number.isSafeInteger(resumed.nextField) || resumed.nextField < 0 || !Number.isSafeInteger(resumed.pass) || resumed.pass < 0 || resumed.pass > evidenceRepairs))
123567
123567
  throw new Error("Review checkpoint requires reconciliation or does not match this task");
123568
+ const legacyFailedReview = resumed && !resumed.pending && resumed.result.operations.at(-1)?.kind === "review" && resumed.result.operations.at(-1)?.status === "unknown";
123569
+ let nextBatchSize = resumed?.nextBatchSize ?? (legacyFailedReview ? Math.max(1, Math.floor(reviewBatchSize / 2)) : reviewBatchSize);
123568
123570
  const result = resumed ? structuredClone(resumed.result) : {
123569
123571
  id: crypto.randomUUID(),
123570
123572
  status: "unavailable",
@@ -123599,6 +123601,7 @@ var createResearch = (config) => {
123599
123601
  pass,
123600
123602
  stage,
123601
123603
  nextField,
123604
+ nextBatchSize,
123602
123605
  pending,
123603
123606
  finished,
123604
123607
  draft: structuredClone(draft),
@@ -123968,9 +123971,17 @@ Correct the previous schema-invalid response using the validation diagnostics. T
123968
123971
  if (!continuing)
123969
123972
  result.fields = [];
123970
123973
  await persistReview(pass, continuing ? resumed.nextField : 0, false, data);
123971
- const leaves = researchLeaves(data, Number.MAX_SAFE_INTEGER);
123972
- if (continuing && (resumed.nextField > leaves.length || result.fields.length !== resumed.nextField || result.fields.some((field, index) => field.path !== leaves[index]?.path || field.value !== leaves[index]?.value)))
123973
- throw new Error("Review checkpoint fields do not match draft");
123974
+ let leaves = researchLeaves(data, Number.MAX_SAFE_INTEGER);
123975
+ if (continuing) {
123976
+ const byPath = new Map(leaves.map((field) => [field.path, field]));
123977
+ const completedPaths = new Set(result.fields.map((field) => field.path));
123978
+ if (resumed.nextField > leaves.length || result.fields.length !== resumed.nextField || completedPaths.size !== result.fields.length || result.fields.some((field) => !byPath.has(field.path) || byPath.get(field.path).value !== field.value))
123979
+ throw new Error("Review checkpoint fields do not match draft");
123980
+ leaves = [
123981
+ ...result.fields.map(({ path, value }) => ({ path, value })),
123982
+ ...leaves.filter((field) => !completedPaths.has(field.path))
123983
+ ];
123984
+ }
123974
123985
  if (!leaves.length) {
123975
123986
  result.data = data;
123976
123987
  result.status = result.limitations.length ? "partial" : "empty";
@@ -123979,13 +123990,13 @@ Correct the previous schema-invalid response using the validation diagnostics. T
123979
123990
  }
123980
123991
  const reviewSources = researchPassages(result.sources);
123981
123992
  const reviewStart = continuing ? resumed.nextField : 0;
123982
- for (let offset = reviewStart;offset < leaves.length; offset += Math.min(reviewBatchSize, limits.fields - (offset - reviewStart))) {
123993
+ for (let offset = reviewStart;offset < leaves.length; offset += Math.min(nextBatchSize, limits.fields - (offset - reviewStart))) {
123983
123994
  if (offset - reviewStart >= limits.fields) {
123984
123995
  result.status = "partial";
123985
123996
  result.limitations.push("Review field allowance reached; remaining fields are saved for explicit continuation");
123986
123997
  return result;
123987
123998
  }
123988
- const batch = leaves.slice(offset, offset + Math.min(reviewBatchSize, limits.fields - (offset - reviewStart)));
123999
+ const batch = leaves.slice(offset, offset + Math.min(nextBatchSize, limits.fields - (offset - reviewStart)));
123989
124000
  await persistReview(pass, offset, true, data);
123990
124001
  let reviewed;
123991
124002
  try {
@@ -124002,6 +124013,8 @@ Correct the previous schema-invalid response using the validation diagnostics. T
124002
124013
  });
124003
124014
  } catch (error) {
124004
124015
  const known = error instanceof Error && error.message === "Research budget denied" || !admit && await config.isReviewFailureSettled?.(error) === true;
124016
+ if (known && !(error instanceof Error && error.message === "Research budget denied"))
124017
+ nextBatchSize = Math.max(1, Math.floor(batch.length / 2));
124005
124018
  await persistReview(pass, offset, !known, data);
124006
124019
  throw error;
124007
124020
  }
@@ -124198,5 +124211,5 @@ export {
124198
124211
  webIndexPostgresSchemaSql
124199
124212
  };
124200
124213
 
124201
- //# debugId=1C3B8A3EB19C58AF64756E2164756E21
124214
+ //# debugId=222ABFDFD829B1BC64756E2164756E21
124202
124215
  //# sourceMappingURL=index.js.map