@mastra/memory 1.27.0-alpha.3 → 1.27.0
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/CHANGELOG.md +63 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/processors/index.cjs +1 -1
- package/dist/processors/index.js +1 -1
- package/dist/processors/observational-memory/observation-strategies/async-buffer.d.ts.map +1 -1
- package/dist/processors/observational-memory/observation-strategies/sync.d.ts.map +1 -1
- package/dist/processors/observational-memory/observer-agent.d.ts +13 -0
- package/dist/processors/observational-memory/observer-agent.d.ts.map +1 -1
- package/dist/processors/observational-memory/observer-runner.d.ts.map +1 -1
- package/dist/processors/observational-memory/reflector-runner.d.ts.map +1 -1
- package/dist/{src-Ik0ksTOt.cjs → src-CxkQ-ICG.cjs} +54 -8
- package/dist/{src-Ik0ksTOt.cjs.map → src-CxkQ-ICG.cjs.map} +1 -1
- package/dist/{src-t_4yoTX9.js → src-aTfbkxBl.js} +54 -8
- package/dist/{src-t_4yoTX9.js.map → src-aTfbkxBl.js.map} +1 -1
- package/package.json +7 -7
|
@@ -18945,6 +18945,52 @@ function detectDegenerateRepetition(text) {
|
|
|
18945
18945
|
return false;
|
|
18946
18946
|
}
|
|
18947
18947
|
/**
|
|
18948
|
+
* Build a single-line diagnostic description of output flagged by
|
|
18949
|
+
* {@link detectDegenerateRepetition}. Used when logging or surfacing a
|
|
18950
|
+
* degenerate-output failure so the discarded model output can be inspected —
|
|
18951
|
+
* without it there is no way to tell a real repetition loop apart from a
|
|
18952
|
+
* detector false-positive on legitimately repetitive content.
|
|
18953
|
+
*
|
|
18954
|
+
* Reuses the detector's sampling parameters (200-char windows, ~50 samples)
|
|
18955
|
+
* so the reported duplicate ratio and most-repeated window match what
|
|
18956
|
+
* triggered the detection. Snippets are JSON-escaped so the result stays on
|
|
18957
|
+
* one line.
|
|
18958
|
+
*/
|
|
18959
|
+
function describeDegenerateOutput(text, snippetChars = 400) {
|
|
18960
|
+
const windowSize = 200;
|
|
18961
|
+
const step = Math.max(1, Math.floor(text.length / 50));
|
|
18962
|
+
const seen = /* @__PURE__ */ new Map();
|
|
18963
|
+
let duplicateWindows = 0;
|
|
18964
|
+
let totalWindows = 0;
|
|
18965
|
+
for (let i = 0; i + windowSize <= text.length; i += step) {
|
|
18966
|
+
const window = text.slice(i, i + windowSize);
|
|
18967
|
+
totalWindows++;
|
|
18968
|
+
const count = (seen.get(window) ?? 0) + 1;
|
|
18969
|
+
seen.set(window, count);
|
|
18970
|
+
if (count > 1) duplicateWindows++;
|
|
18971
|
+
}
|
|
18972
|
+
let topWindow = "";
|
|
18973
|
+
let topCount = 0;
|
|
18974
|
+
for (const [window, count] of seen) if (count > topCount) {
|
|
18975
|
+
topCount = count;
|
|
18976
|
+
topWindow = window;
|
|
18977
|
+
}
|
|
18978
|
+
let longestLine = 0;
|
|
18979
|
+
for (const line of text.split("\n")) if (line.length > longestLine) longestLine = line.length;
|
|
18980
|
+
const duplicateRatio = totalWindows > 0 ? (duplicateWindows / totalWindows).toFixed(2) : "n/a";
|
|
18981
|
+
const parts = [
|
|
18982
|
+
`length=${text.length}`,
|
|
18983
|
+
`sampledWindows=${totalWindows}`,
|
|
18984
|
+
`duplicateRatio=${duplicateRatio}`,
|
|
18985
|
+
`longestLine=${longestLine}`,
|
|
18986
|
+
`topWindowCount=${topCount}`
|
|
18987
|
+
];
|
|
18988
|
+
if (topCount > 1) parts.push(`topWindow=${JSON.stringify(topWindow)}`);
|
|
18989
|
+
parts.push(`head=${JSON.stringify(text.slice(0, snippetChars))}`);
|
|
18990
|
+
if (text.length > snippetChars * 2) parts.push(`tail=${JSON.stringify(text.slice(-snippetChars))}`);
|
|
18991
|
+
return parts.join(" ");
|
|
18992
|
+
}
|
|
18993
|
+
/**
|
|
18948
18994
|
* Check if observations contain a Current Task section.
|
|
18949
18995
|
* Supports both XML format and legacy markdown format.
|
|
18950
18996
|
*/
|
|
@@ -19347,13 +19393,13 @@ var ObserverRunner = class {
|
|
|
19347
19393
|
let parsed = parseObserverOutput(result.text, activeExtractors);
|
|
19348
19394
|
let retriedDueToDegenerate = false;
|
|
19349
19395
|
if (parsed.degenerate) {
|
|
19350
|
-
omDebug(`[OM:callObserver] degenerate repetition detected, retrying once`);
|
|
19396
|
+
omDebug(`[OM:callObserver] degenerate repetition detected, retrying once. ${describeDegenerateOutput(result.text, 2e3)}`);
|
|
19351
19397
|
result = await doGenerate();
|
|
19352
19398
|
parsed = parseObserverOutput(result.text, activeExtractors);
|
|
19353
19399
|
retriedDueToDegenerate = true;
|
|
19354
19400
|
if (parsed.degenerate) {
|
|
19355
|
-
omDebug(`[OM:callObserver] degenerate repetition on retry, failing`);
|
|
19356
|
-
throw new Error(
|
|
19401
|
+
omDebug(`[OM:callObserver] degenerate repetition on retry, failing. ${describeDegenerateOutput(result.text, 2e3)}`);
|
|
19402
|
+
throw new Error(`Observer produced degenerate output after retry. ${describeDegenerateOutput(result.text)}`);
|
|
19357
19403
|
}
|
|
19358
19404
|
}
|
|
19359
19405
|
const structuredExtraction = await extractStructuredValues({
|
|
@@ -19497,13 +19543,13 @@ var ObserverRunner = class {
|
|
|
19497
19543
|
let parsed = parseMultiThreadObserverOutput(result.text, activeExtractors);
|
|
19498
19544
|
let retriedDueToDegenerate = false;
|
|
19499
19545
|
if (parsed.degenerate) {
|
|
19500
|
-
omDebug(`[OM:callMultiThreadObserver] degenerate repetition detected, retrying once`);
|
|
19546
|
+
omDebug(`[OM:callMultiThreadObserver] degenerate repetition detected, retrying once. ${describeDegenerateOutput(result.text, 2e3)}`);
|
|
19501
19547
|
result = await doGenerate();
|
|
19502
19548
|
parsed = parseMultiThreadObserverOutput(result.text, activeExtractors);
|
|
19503
19549
|
retriedDueToDegenerate = true;
|
|
19504
19550
|
if (parsed.degenerate) {
|
|
19505
|
-
omDebug(`[OM:callMultiThreadObserver] degenerate repetition on retry, failing`);
|
|
19506
|
-
throw new Error(
|
|
19551
|
+
omDebug(`[OM:callMultiThreadObserver] degenerate repetition on retry, failing. ${describeDegenerateOutput(result.text, 2e3)}`);
|
|
19552
|
+
throw new Error(`Multi-thread observer produced degenerate output after retry. ${describeDegenerateOutput(result.text)}`);
|
|
19507
19553
|
}
|
|
19508
19554
|
}
|
|
19509
19555
|
const structuredExtractionByThread = /* @__PURE__ */ new Map();
|
|
@@ -25446,7 +25492,7 @@ var ReflectorRunner = class {
|
|
|
25446
25492
|
finalProviderMetadata = result.providerMetadata ?? finalProviderMetadata;
|
|
25447
25493
|
parsed = parseReflectorOutput(result.text, observations, activeExtractors);
|
|
25448
25494
|
if (parsed.degenerate) {
|
|
25449
|
-
omDebug(`[OM:callReflector] attempt #${attemptNumber}: degenerate repetition detected, treating as compression failure`);
|
|
25495
|
+
omDebug(`[OM:callReflector] attempt #${attemptNumber}: degenerate repetition detected, treating as compression failure. ${describeDegenerateOutput(result.text, 2e3)}`);
|
|
25450
25496
|
reflectedTokens = originalTokens;
|
|
25451
25497
|
} else reflectedTokens = this.tokenCounter.countObservations(parsed.observations);
|
|
25452
25498
|
omDebug(`[OM:callReflector] attempt #${attemptNumber} parsed: reflectedTokens=${reflectedTokens}, targetThreshold=${targetThreshold}, compressionValid=${validateCompression(reflectedTokens, targetThreshold)}, parsedObsLen=${parsed.observations?.length}, degenerate=${parsed.degenerate ?? false}`);
|
|
@@ -31285,4 +31331,4 @@ Notes:
|
|
|
31285
31331
|
//#endregion
|
|
31286
31332
|
export { formatMessagesForObserver as A, OBSERVATION_CONTINUATION_HINT as B, SUMMARIZE_THREAD_DEFAULTS as C, buildObserverPrompt as D, OBSERVER_SYSTEM_PROMPT as E, parseAnchorId as F, ModelByInputTokens as G, KnowledgeSemanticIndexCoordinator as H, stripEphemeralAnchorIds as I, SUBCONSCIOUS_ACTIVITY_STATE_ID as J, SubconsciousCaptureExtractor as K, OBSERVATIONAL_MEMORY_DEFAULTS as L, optimizeObservationsForContext as M, parseObserverOutput as N, buildObserverSystemPrompt as O, injectAnchorIds as P, Extractor as Q, OBSERVATION_CONTEXT_INSTRUCTIONS as R, WorkingMemoryExtractor as S, TokenCounter as T, StaleKnowledgeSemanticIndexError as U, Subconscious as V, SubconsciousRemindExtractor as W, publishSubconsciousActivity as X, buildSubconsciousActivitySnapshot as Y, renderSubconsciousActivity as Z, reconcileObservationGroupsFromReflection as _, extractWorkingMemoryContent as a, wrapInObservationGroup as b, WORKING_MEMORY_STATE_ID as c, getObservationsAsOf as d, ObservationalMemoryProcessor as f, parseObservationGroups as g, deriveObservationGroupProvenance as h, WorkingMemory as i, hasCurrentTaskSection as j, extractCurrentTask as k, WORKING_MEMORY_STATE_PROCESSOR_ID as l, combineObservationGroupRanges as m, MessageHistory$1 as n, extractWorkingMemoryTags as o, ObservationalMemory as p, subconsciousCaptureSchema as q, SemanticRecall as r, removeWorkingMemoryTags as s, Memory as t, WorkingMemoryStateProcessor as u, renderObservationGroupsForReflection as v, summarizeConversation as w, deepMergeWorkingMemory as x, stripObservationGroups as y, OBSERVATION_CONTEXT_PROMPT as z };
|
|
31287
31333
|
|
|
31288
|
-
//# sourceMappingURL=src-
|
|
31334
|
+
//# sourceMappingURL=src-aTfbkxBl.js.map
|