@snoai/memory 1.2.13 → 1.5.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.
Files changed (152) hide show
  1. package/README.md +1 -1
  2. package/dist/{access-tracker-CglGg8uS.d.ts → access-tracker-B1H2AJlH.d.ts} +4 -4
  3. package/dist/{adapter-Cxyzdq6H.d.ts → adapter-CgdVA88V.d.ts} +2 -2
  4. package/dist/{agent-llm-port-DY2290EK.d.ts → agent-llm-port-BlFrD2ro.d.ts} +5 -0
  5. package/dist/{atomic-memory-extraction-DO4yTfch.d.ts → atomic-memory-extraction-DCMTQ0h-.d.ts} +4 -4
  6. package/dist/{atomic-memory-extraction-DWhlXJT6.js → atomic-memory-extraction-De86y7O-.js} +4 -4
  7. package/dist/{b-profile-section-dictionary-provider-BkUdS1SY.d.ts → b-profile-section-dictionary-provider-DbqdRYMw.d.ts} +1 -1
  8. package/dist/{capture-policy-detector-C7MA4jSr.d.ts → capture-policy-detector-D4ziS7KF.d.ts} +1 -1
  9. package/dist/client.d.ts +1 -1
  10. package/dist/{config-D_KOwEyg.js → config-DWeuetYo.js} +740 -447
  11. package/dist/{derived-suppression-cache-CmS4xAaN.d.ts → derived-suppression-cache-2xOq6XHX.d.ts} +1 -1
  12. package/dist/diagnostic-encoder.js +1 -1
  13. package/dist/{embedding-provider-client-vynZMuit.d.ts → embedding-provider-client-CELWtPgt.d.ts} +6 -0
  14. package/dist/{embedding-provider-client-40tpzKou.js → embedding-provider-client-CgpUK_1G.js} +16 -1
  15. package/dist/{index-Pb9LrHgL.d.ts → index-BGu91bjB.d.ts} +25 -19
  16. package/dist/{index-CTi1R9T4.d.ts → index-PjHhlG6e.d.ts} +2 -2
  17. package/dist/index.d.ts +11 -11
  18. package/dist/index.js +5 -5
  19. package/dist/internal/config/index.d.ts +2 -2
  20. package/dist/internal/config/index.js +25 -19
  21. package/dist/internal/config/plugin-config-schema.d.ts +1 -1
  22. package/dist/internal/config/plugin-config-schema.js +1 -1
  23. package/dist/internal/config/product-mode.d.ts +1 -1
  24. package/dist/internal/config/settings.d.ts +1 -1
  25. package/dist/internal/config/settings.js +3 -30
  26. package/dist/internal/config/skin-defaults.d.ts +1 -1
  27. package/dist/internal/contract/profile.d.ts +1 -1
  28. package/dist/internal/contract/routes.d.ts +1 -1
  29. package/dist/internal/engine/bindings/memory-cli-shared.d.ts +5 -5
  30. package/dist/internal/engine/bindings/memory-forget-tool.js +1 -1
  31. package/dist/internal/engine/bindings/memory-list-tool.js +1 -1
  32. package/dist/internal/engine/bindings/memory-recall-tool.js +1 -1
  33. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +1 -1
  34. package/dist/internal/engine/bindings/memory-stats-tool.js +1 -1
  35. package/dist/internal/engine/bindings/memory-store-tool.js +3 -3
  36. package/dist/internal/engine/bindings/memory-tool-access.d.ts +1 -1
  37. package/dist/internal/engine/bindings/memory-tool-access.js +1 -1
  38. package/dist/internal/engine/bindings/memory-tool-results.d.ts +1 -1
  39. package/dist/internal/engine/bindings/memory-tool-results.js +1 -1
  40. package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +6 -6
  41. package/dist/internal/engine/bindings/memory-tool-schemas.js +1 -1
  42. package/dist/internal/engine/bindings/memory-update-tool.js +2 -2
  43. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +5 -5
  44. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +2 -2
  45. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +4 -4
  46. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +1 -1
  47. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +7 -7
  48. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +2 -2
  49. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +2 -2
  50. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +4 -4
  51. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +1 -1
  52. package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +1 -1
  53. package/dist/internal/engine/extraction/atomic-memory-extraction.js +1 -1
  54. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +1 -1
  55. package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +5 -5
  56. package/dist/internal/engine/extraction/capture-policy-detector.d.ts +1 -1
  57. package/dist/internal/engine/extraction/embedding-provider-client.d.ts +1 -1
  58. package/dist/internal/engine/extraction/embedding-provider-client.js +1 -1
  59. package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +2 -2
  60. package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +1 -1
  61. package/dist/internal/engine/extraction/memory-temporality-classifier.js +1 -1
  62. package/dist/internal/engine/observability/adapter.d.ts +1 -1
  63. package/dist/internal/engine/observability/memory-snapshot.d.ts +1 -1
  64. package/dist/internal/engine/observability/observable-embedder.d.ts +1 -1
  65. package/dist/internal/engine/observability/observable-embedder.js +1 -1
  66. package/dist/internal/engine/observability/observable-llm-client.d.ts +1 -1
  67. package/dist/internal/engine/observability/observable-memory-store.d.ts +1 -1
  68. package/dist/internal/engine/observability/observable-memory-store.js +1 -1
  69. package/dist/internal/engine/observability/observable-retriever.d.ts +1 -1
  70. package/dist/internal/engine/observability/observable-retriever.js +1 -1
  71. package/dist/internal/engine/observability/runtime-diagnostics.d.ts +1 -1
  72. package/dist/internal/engine/observability/runtime-diagnostics.js +1 -1
  73. package/dist/internal/engine/operations/memory-tier-promoter.d.ts +1 -1
  74. package/dist/internal/engine/operations/runtime-audit-log.d.ts +2 -2
  75. package/dist/internal/engine/provider/provider-registration.d.ts +4 -4
  76. package/dist/internal/engine/provider/provider-row-renderer.d.ts +1 -1
  77. package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +1 -1
  78. package/dist/internal/engine/reflection/reflection-command-hooks.js +1 -1
  79. package/dist/internal/engine/reflection/reflection-deps.d.ts +1 -1
  80. package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +1 -1
  81. package/dist/internal/engine/reflection/reflection-embedded-generator.js +1 -1
  82. package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +1 -1
  83. package/dist/internal/engine/reflection/reflection-injection-hooks.js +1 -1
  84. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +1 -1
  85. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +1 -1
  86. package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +3 -3
  87. package/dist/internal/engine/reflection/strategy-hook-runner.js +2 -2
  88. package/dist/internal/engine/retrieval/access-tracker.d.ts +1 -1
  89. package/dist/internal/engine/retrieval/retriever.d.ts +2 -2
  90. package/dist/internal/engine/retrieval/retriever.js +1 -1
  91. package/dist/internal/engine/shared/memory-kind-policy.d.ts +1 -1
  92. package/dist/internal/engine/shared/paths.d.ts +2 -2
  93. package/dist/internal/engine/shared/types.d.ts +2 -2
  94. package/dist/internal/engine/shared/types.js +1 -1
  95. package/dist/internal/engine/telemetry/observe-ledger.d.ts +1 -1
  96. package/dist/internal/model/agent-llm-port.d.ts +1 -1
  97. package/dist/internal/model/llm-client.d.ts +2 -2
  98. package/dist/internal/model/llm-client.js +1 -1
  99. package/dist/internal/model/llm-mode-routing.d.ts +1 -1
  100. package/dist/internal/store/maintenance.d.ts +2 -2
  101. package/dist/internal/store/maintenance.js +4 -4
  102. package/dist/internal/store/store.d.ts +2 -2
  103. package/dist/internal/store/store.js +1 -1
  104. package/dist/{llm-client-B7LSFL_m.d.ts → llm-client-C-K7oyfu.d.ts} +1 -1
  105. package/dist/{llm-client-C7yyFWu-.js → llm-client-DDdUjYWS.js} +10 -3
  106. package/dist/{log-site-catalog.generated-BODn_6Kx.js → log-site-catalog.generated-Cn8rTa65.js} +94 -73
  107. package/dist/log-site-catalog.json +1 -1
  108. package/dist/{memory-kind-policy-B4IBMAlv.d.ts → memory-kind-policy-DgPCjfY4.d.ts} +1 -1
  109. package/dist/{memory-metadata-codec-BQ8tBY-g.d.ts → memory-metadata-codec-CfP9JLVO.d.ts} +1 -1
  110. package/dist/{memory-runtime-4iOpeP09.js → memory-runtime-jQke2sBc.js} +118 -78
  111. package/dist/{memory-snapshot-B8mQbWR-.d.ts → memory-snapshot-B6a-6nJ7.d.ts} +2 -2
  112. package/dist/{memory-store-base-CTAMKigD.d.ts → memory-store-base-upd9MuG6.d.ts} +4 -4
  113. package/dist/{memory-temporality-classifier-epuZlfXa.js → memory-temporality-classifier-BwBKEQbL.js} +1 -1
  114. package/dist/{memory-temporality-classifier-LByFBiFJ.d.ts → memory-temporality-classifier-DPk3_9Or.d.ts} +1 -1
  115. package/dist/{memory-tier-promoter-CSGa4LBH.d.ts → memory-tier-promoter-Cq23yveQ.d.ts} +1 -1
  116. package/dist/memory-tool-dependencies-C9qgVGOn.d.ts +14 -0
  117. package/dist/{memory-tool-dependencies-xLaWzwpI.js → memory-tool-dependencies-aAr7Pkuj.js} +1 -1
  118. package/dist/{observable-embedder-Da0teBqx.d.ts → observable-embedder-DihQuuQD.d.ts} +2 -2
  119. package/dist/{observable-llm-client-i0sp0veF.d.ts → observable-llm-client-BglDBFN5.d.ts} +3 -3
  120. package/dist/{observable-memory-store-CS87pitJ.d.ts → observable-memory-store--n02Dre8.d.ts} +5 -5
  121. package/dist/{observable-retriever-Bhfg9DsZ.d.ts → observable-retriever-CV6odifA.d.ts} +6 -6
  122. package/dist/paths-qJqwGcKl.d.ts +1 -0
  123. package/dist/{plugin-config-schema-CvAGFPyE.js → plugin-config-schema-D9riSXDg.js} +3 -20
  124. package/dist/{plugin-config-schema-CcEeAEdi.d.ts → plugin-config-schema-dV2_HgBo.d.ts} +2 -8
  125. package/dist/{profile-BMvnRqf5.d.ts → profile-CoLKGobS.d.ts} +1 -1
  126. package/dist/{profile-section-writer-DeD9GPQJ.js → profile-section-writer-Dd4FKpt5.js} +2 -2
  127. package/dist/{reflection-command-hooks-S5L6ZWeh.js → reflection-command-hooks-B2P4zDr6.js} +3 -3
  128. package/dist/{reflection-command-hooks-CFXyoVvE.d.ts → reflection-command-hooks-Cfv836Wc.d.ts} +4 -4
  129. package/dist/{reflection-deps-BPMrDU0a.d.ts → reflection-deps-DihlwQxE.d.ts} +4 -4
  130. package/dist/{reflection-embedded-generator-CF-NbuPS.d.ts → reflection-embedded-generator-DCZaS6kz.d.ts} +4 -4
  131. package/dist/{reflection-embedded-generator-nmVrj4AZ.js → reflection-embedded-generator-DV-NkeU-.js} +1 -1
  132. package/dist/{reflection-injection-hooks-BRIr3lJM.d.ts → reflection-injection-hooks-BYxkrds6.d.ts} +4 -4
  133. package/dist/{reflection-lifecycle-hooks-Ci8y4qHk.d.ts → reflection-lifecycle-hooks-Bwq2y5pe.d.ts} +3 -3
  134. package/dist/{rem-batch-executor-CfWChDAk.js → rem-batch-executor-B_49KivZ.js} +1 -1
  135. package/dist/{rem-trigger-B1P5_RqV.js → rem-trigger-DL0MlLeo.js} +180 -160
  136. package/dist/{retriever-CpyZs2ND.js → retriever-CsBW6MZv.js} +158 -162
  137. package/dist/{retriever-DdikFSDC.d.ts → retriever-hTIkt3CJ.d.ts} +19 -26
  138. package/dist/{runtime-audit-log-BVOxzkh7.d.ts → runtime-audit-log-eBrt_iPp.d.ts} +1 -1
  139. package/dist/{server-DOL3D6bb.js → server-BnBzsvMF.js} +9 -9
  140. package/dist/sidecar/main.js +2 -2
  141. package/dist/sno-station-mem-runtime-dependencies-9L8WkMMV.d.ts +31 -0
  142. package/dist/{sno-station-mem-runtime-dependencies-DZe3z4RY.js → sno-station-mem-runtime-dependencies-DrVDRAmf.js} +6 -6
  143. package/dist/{store-DY_rWx__.js → store-COwW7mIh.js} +1 -1
  144. package/dist/{store-DraRJ-HI.d.ts → store-DEG06TLb.d.ts} +2 -2
  145. package/dist/{strategy-hook-runner-CltVTtzk.js → strategy-hook-runner-CALbWcys.js} +1 -1
  146. package/dist/{strategy-hook-runner-DH7OEQrH.d.ts → strategy-hook-runner-D1sRVThs.d.ts} +7 -7
  147. package/dist/{types-DZGL4QXi.d.ts → types-DBEwNYdR.d.ts} +1 -1
  148. package/package.json +2 -2
  149. package/settings.default.json +0 -4
  150. package/dist/memory-tool-dependencies-Bl11T6Xm.d.ts +0 -14
  151. package/dist/paths-B5y-npWs.d.ts +0 -1
  152. package/dist/sno-station-mem-runtime-dependencies-DgAm7WqA.d.ts +0 -31
@@ -1,14 +1,14 @@
1
- import { $ as FIXED_IDX_MEMORY_ACTIVE_TASK_CURRENT_REVISION, A as modelCallDestination, At as FIXED_MEMORY_PROFILE_RECOVERY_ENTRIES, B as FIXED_EXTERNAL_VALUE_49, C as getSnoStationMemStateDir, Cn as CHUNK_OVERLAP_TOKENS, Cr as CachedEmbeddingProvider, Ct as FIXED_MEMORY_CHUNKS_MEM_FACET_IDX, D as settingsToPluginConfig, Dn as DEFAULT_IMPORTANCE, Dr as LocalEmbedProvider, Dt as FIXED_MEMORY_MEMORIES_FACT_ID_INSERT_GUARD, En as DEFAULT_BM25_WEIGHT, Et as FIXED_MEMORY_MEMORIES, Fn as DEFAULT_VECTOR_WEIGHT, G as FIXED_EXTERNAL_VALUE_55, Gn as IMPORTANCE_WEIGHT_BASE, H as FIXED_EXTERNAL_VALUE_52, Hn as HEAD_EXTRACT_MIN_CONTENT_TOKENS, In as EMBEDDER_DIM, Ir as REM_SIDECAR_TOKEN_HEADER, It as FIXED_MEMORY_SNO_EXTRACT_CHAT, J as FIXED_EXTERNAL_VALUE_58, Jn as LIGHTWEIGHT_COSINE_WEIGHT, K as FIXED_EXTERNAL_VALUE_56, Kt as FIXED_PROTOCOL_VALUE_69, Ln as EMBEDDER_MODEL_DEFAULT, Mn as DEFAULT_RERANK_MODEL, Mt as FIXED_MEMORY_PROVIDER_PROJECT_AGENTS, Nn as DEFAULT_RERANK_TIMEOUT_MS, Nt as FIXED_MEMORY_PROVIDER_PROJECT_MAPPINGS, O as MODEL_CALLS, On as DEFAULT_RECALL_LIFECYCLE, Or as ensureModelDownloaded, Ot as FIXED_MEMORY_MEMORIES_FACT_ID_UPDATE_GUARD, P as observeAgentId, Q as FIXED_IDX_MEMORY, Rn as EMBEDDER_PROVIDER_DEFAULT, Rt as FIXED_MEMORY_TASK_LIFECYCLE_COMMANDS, Sn as CHUNK_MIN_TOKENS, St as FIXED_MEMORY_CHUNKS_MEMORY_ID_IDX, T as readSettings, Tn as CHUNK_TOKENIZER_MODE, Tr as LOCAL_EMBEDDING_MODEL, Tt as FIXED_MEMORY_EXTRACTION_TIMESTAMPS, U as FIXED_EXTERNAL_VALUE_53, Un as HEAD_EXTRACT_OVERLAP_DROP_RATIO, V as FIXED_EXTERNAL_VALUE_51, W as FIXED_EXTERNAL_VALUE_54, Wn as HEAD_EXTRACT_TOKEN_BUDGET, X as FIXED_EXTERNAL_VALUE_8, Xn as LIGHTWEIGHT_RERANK_PENALTY, Y as FIXED_EXTERNAL_VALUE_62, Yn as LIGHTWEIGHT_FUSION_WEIGHT, Z as FIXED_EXTERNAL_VALUE_9, _t as FIXED_MEMORY_CHUNKS, a as REM_MODEL_OUTPUT_TOKEN_CAP, an as PERSISTED_PROVIDER_SYSTEM, ar as MMR_LAMBDA, at as FIXED_IDX_MEMORY_MEMORIES_LANE_PROJECT, bn as CHUNKING_VERSION$1, br as experimentCandidatePoolOverride, bt as FIXED_MEMORY_CHUNKS_AU, cn as SUPPORTED_LOCALES, ct as FIXED_IDX_MEMORY_MEMORIES_PROJECT_FACT_KEY_ACTIVE, d as getRemDiscoveryPath, dn as ADJACENCY_BONUS_PER_PAIR, dt as FIXED_MEMORY_ACTIVE_TASK_EVIDENCE, en as FIXED_VEC_MEMORY, er as MAX_CHUNK_FETCH_LIMIT, et as FIXED_IDX_MEMORY_ACTIVE_TASK_EVIDENCE_INSTANCE, fr as RERANK_BLEND_CROSS, ft as FIXED_MEMORY_ACTIVE_TASK_INSTANCES, g as readRemOperationalConfig, gr as TIME_DECAY_FLOOR, gt as FIXED_MEMORY_ACTIVE_TASK_TRANSITIONS, ht as FIXED_MEMORY_ACTIVE_TASK_REVISIONS, in as PERSISTED_CONTENT_HASH_V3, it as FIXED_IDX_MEMORY_MEMORIES_FACT_ID, jt as FIXED_MEMORY_PROVIDER_AGENT_MAPPINGS, k as MODEL_CALL_WORKLOAD, kt as FIXED_MEMORY_MIGRATION_MARKERS, lr as RECENCY_WEIGHT, lt as FIXED_IDX_MEMORY_MEMORIES_PROJECT_TIMESTAMP, mr as RETRIEVAL_STORAGE_CHUNK_PROFILE, mt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_MANIFESTS, nn as PERSISTED_CANDIDATE_HASH_V1, nt as FIXED_IDX_MEMORY_MEMORIES_CATEGORY, o as REM_RUN_PATH, or as MULTI_HIT_BONUS_CAP, ot as FIXED_IDX_MEMORY_MEMORIES_PROJECT, pr as RERANK_BLEND_VECTOR, pt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_EVIDENCE, q as FIXED_EXTERNAL_VALUE_57, qn as INTRA_MEMORY_COSINE_THRESHOLD, qt as FIXED_PROTOCOL_VALUE_73, r as REM_CORRELATION_ID_HEADER, rn as PERSISTED_CONTENT_HASH_V1, rt as FIXED_IDX_MEMORY_MEMORIES_CONTENT_HASH, s as REM_SIDECAR_HOST, sn as llmRoutingConfigSchema, sr as MULTI_HIT_BONUS_PER_HIT, st as FIXED_IDX_MEMORY_MEMORIES_PROJECT_CONTENT_HASH, tn as FIXED_VEC_MEMORY_CHUNKS, tr as MAX_LIST_LIMIT, tt as FIXED_IDX_MEMORY_ACTIVE_TASK_INSTANCES_PROJECTION, un as ADJACENCY_BONUS_CAP, ut as FIXED_MEMORY, vn as BONUS_TOTAL_INVARIANT, vt as FIXED_MEMORY_CHUNKS_AD, wn as CHUNK_TARGET_TOKENS, wr as LOCAL_EMBEDDING_CACHE_DIR_DEFAULT, wt as FIXED_MEMORY_CHUNKS_MEM_IDX, xn as CHUNK_MAX_TOKENS, xr as experimentMmrDisabled, xt as FIXED_MEMORY_CHUNKS_FTS, yn as CACHE_TTL_MS, yt as FIXED_MEMORY_CHUNKS_AI, zn as EVAL_QA_TRACES_FILENAME, zt as FIXED_MEMORY_UNPLACED_CANDIDATES } from "./config-D_KOwEyg.js";
1
+ import { $ as FIXED_IDX_MEMORY_ACTIVE_TASK_CURRENT_REVISION, $n as MAX_CHUNK_FETCH_LIMIT, A as modelCallDestination, At as FIXED_MEMORY_PROFILE_RECOVERY_ENTRIES, B as FIXED_EXTERNAL_VALUE_49, C as getSnoStationMemStateDir, Cn as CHUNK_OVERLAP_TOKENS, Cr as LOCAL_EMBEDDING_CACHE_DIR_DEFAULT, Ct as FIXED_MEMORY_CHUNKS_MEM_FACET_IDX, D as settingsToPluginConfig, Dn as DEFAULT_IMPORTANCE, Dr as LocalReranker, Dt as FIXED_MEMORY_MEMORIES_FACT_ID_INSERT_GUARD, En as DEFAULT_BM25_WEIGHT, Er as LocalEmbedProvider, Et as FIXED_MEMORY_MEMORIES, Fn as EMBEDDER_DIM, G as FIXED_EXTERNAL_VALUE_55, H as FIXED_EXTERNAL_VALUE_52, Hn as HEAD_EXTRACT_OVERLAP_DROP_RATIO, In as EMBEDDER_MODEL_DEFAULT, Ir as REM_SIDECAR_TOKEN_HEADER, It as FIXED_MEMORY_SNO_EXTRACT_CHAT, J as FIXED_EXTERNAL_VALUE_58, Jn as LIGHTWEIGHT_FUSION_WEIGHT, K as FIXED_EXTERNAL_VALUE_56, Kn as INTRA_MEMORY_COSINE_THRESHOLD, Kt as FIXED_PROTOCOL_VALUE_69, Ln as EMBEDDER_PROVIDER_DEFAULT, Mn as DEFAULT_RERANK_TIMEOUT_MS, Mt as FIXED_MEMORY_PROVIDER_PROJECT_AGENTS, Nt as FIXED_MEMORY_PROVIDER_PROJECT_MAPPINGS, O as MODEL_CALLS, On as DEFAULT_RECALL_LIFECYCLE, Or as ensureModelDownloaded, Ot as FIXED_MEMORY_MEMORIES_FACT_ID_UPDATE_GUARD, P as observeAgentId, Pn as DEFAULT_VECTOR_WEIGHT, Q as FIXED_IDX_MEMORY, Rn as EVAL_QA_TRACES_FILENAME, Rt as FIXED_MEMORY_TASK_LIFECYCLE_COMMANDS, Sn as CHUNK_MIN_TOKENS, Sr as CachedEmbeddingProvider, St as FIXED_MEMORY_CHUNKS_MEMORY_ID_IDX, T as readSettings, Tn as CHUNK_TOKENIZER_MODE, Tt as FIXED_MEMORY_EXTRACTION_TIMESTAMPS, U as FIXED_EXTERNAL_VALUE_53, Un as HEAD_EXTRACT_TOKEN_BUDGET, V as FIXED_EXTERNAL_VALUE_51, Vn as HEAD_EXTRACT_MIN_CONTENT_TOKENS, W as FIXED_EXTERNAL_VALUE_54, Wn as IMPORTANCE_WEIGHT_BASE, X as FIXED_EXTERNAL_VALUE_8, Y as FIXED_EXTERNAL_VALUE_62, Yn as LIGHTWEIGHT_RERANK_PENALTY, Z as FIXED_EXTERNAL_VALUE_9, _t as FIXED_MEMORY_CHUNKS, a as REM_MODEL_OUTPUT_TOKEN_CAP, an as PERSISTED_PROVIDER_SYSTEM, ar as MULTI_HIT_BONUS_CAP, at as FIXED_IDX_MEMORY_MEMORIES_LANE_PROJECT, bn as CHUNKING_VERSION$1, br as experimentMmrDisabled, bt as FIXED_MEMORY_CHUNKS_AU, cn as SUPPORTED_LOCALES, cr as RECENCY_WEIGHT, ct as FIXED_IDX_MEMORY_MEMORIES_PROJECT_FACT_KEY_ACTIVE, d as getRemDiscoveryPath, dn as ADJACENCY_BONUS_PER_PAIR, dr as RERANK_BLEND_CROSS, dt as FIXED_MEMORY_ACTIVE_TASK_EVIDENCE, en as FIXED_VEC_MEMORY, er as MAX_LIST_LIMIT, et as FIXED_IDX_MEMORY_ACTIVE_TASK_EVIDENCE_INSTANCE, fr as RERANK_BLEND_VECTOR, ft as FIXED_MEMORY_ACTIVE_TASK_INSTANCES, g as readRemOperationalConfig, gt as FIXED_MEMORY_ACTIVE_TASK_TRANSITIONS, hr as TIME_DECAY_FLOOR, ht as FIXED_MEMORY_ACTIVE_TASK_REVISIONS, in as PERSISTED_CONTENT_HASH_V3, ir as MMR_LAMBDA, it as FIXED_IDX_MEMORY_MEMORIES_FACT_ID, jt as FIXED_MEMORY_PROVIDER_AGENT_MAPPINGS, k as MODEL_CALL_WORKLOAD, kt as FIXED_MEMORY_MIGRATION_MARKERS, lt as FIXED_IDX_MEMORY_MEMORIES_PROJECT_TIMESTAMP, mt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_MANIFESTS, nn as PERSISTED_CANDIDATE_HASH_V1, nt as FIXED_IDX_MEMORY_MEMORIES_CATEGORY, o as REM_RUN_PATH, or as MULTI_HIT_BONUS_PER_HIT, ot as FIXED_IDX_MEMORY_MEMORIES_PROJECT, pr as RETRIEVAL_STORAGE_CHUNK_PROFILE, pt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_EVIDENCE, q as FIXED_EXTERNAL_VALUE_57, qn as LIGHTWEIGHT_COSINE_WEIGHT, qt as FIXED_PROTOCOL_VALUE_73, r as REM_CORRELATION_ID_HEADER, rn as PERSISTED_CONTENT_HASH_V1, rt as FIXED_IDX_MEMORY_MEMORIES_CONTENT_HASH, s as REM_SIDECAR_HOST, sn as llmRoutingConfigSchema, st as FIXED_IDX_MEMORY_MEMORIES_PROJECT_CONTENT_HASH, tn as FIXED_VEC_MEMORY_CHUNKS, tt as FIXED_IDX_MEMORY_ACTIVE_TASK_INSTANCES_PROJECTION, un as ADJACENCY_BONUS_CAP, ut as FIXED_MEMORY, vn as BONUS_TOTAL_INVARIANT, vt as FIXED_MEMORY_CHUNKS_AD, wn as CHUNK_TARGET_TOKENS, wr as LOCAL_EMBEDDING_MODEL, wt as FIXED_MEMORY_CHUNKS_MEM_IDX, xn as CHUNK_MAX_TOKENS, xt as FIXED_MEMORY_CHUNKS_FTS, yn as CACHE_TTL_MS, yr as experimentCandidatePoolOverride, yt as FIXED_MEMORY_CHUNKS_AI, zt as FIXED_MEMORY_UNPLACED_CANDIDATES } from "./config-DWeuetYo.js";
2
2
  import { createLogger, createLogger as createLogger$1, currentLogContext, privateLogReference, withLogContext } from "@snoai/utils/logger";
3
3
  import path, { dirname, join, resolve } from "node:path";
4
4
  import { appendFileSync, closeSync, createReadStream, existsSync, fstatSync, fsyncSync, ftruncateSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, writeSync } from "node:fs";
5
5
  import { arch, availableParallelism, platform } from "node:os";
6
6
  import { fileURLToPath } from "node:url";
7
+ import { createHash, createHmac, createPublicKey, randomUUID, randomUUID as randomUUID$1, timingSafeEqual, verify } from "node:crypto";
7
8
  import { LRUCache } from "lru-cache";
8
9
  import { z } from "zod";
9
10
  import { CHUNKING_VERSION, aggregateChunksToMemories, buildChunkId, buildDensePayload, chunk, chunk as chunk$1, countTokens, expandSnippetWindow, extractMetadataHeader, headExtract, shouldDropSummary } from "@snoai/chunking";
10
11
  import { AsyncLocalStorage } from "node:async_hooks";
11
- import { createHash, createHmac, createPublicKey, randomUUID, randomUUID as randomUUID$1, timingSafeEqual, verify } from "node:crypto";
12
12
  import { getDek, openEncryptedDb, openEncryptedDbReadonly } from "@snoai/sqlite-crypto";
13
13
  import { appendFile, mkdir, open, readFile, rename, rm } from "node:fs/promises";
14
14
  import { Temporal } from "@js-temporal/polyfill";
@@ -7413,6 +7413,7 @@ function createLlmClient(config) {
7413
7413
  const hostInFlight = ++hostRequestsInFlight;
7414
7414
  const result = await withLogContext({ attempt_id: randomUUID() }, async () => {
7415
7415
  let outcome = "failed";
7416
+ let hostReport = {};
7416
7417
  try {
7417
7418
  const completion = await agentPort.complete({
7418
7419
  system: systemContent,
@@ -7423,6 +7424,7 @@ function createLlmClient(config) {
7423
7424
  ...request.signal ? { signal: request.signal } : {}
7424
7425
  });
7425
7426
  outcome = completion.kind;
7427
+ if (completion.kind === "ok") hostReport = completion;
7426
7428
  return completion;
7427
7429
  } finally {
7428
7430
  hostRequestsInFlight -= 1;
@@ -7434,8 +7436,13 @@ function createLlmClient(config) {
7434
7436
  duration_ms: performance.now() - hostStarted,
7435
7437
  in_flight_at_dispatch: hostInFlight,
7436
7438
  requested_model: "unavailable",
7437
- returned_model: "unavailable",
7438
- usage: { source: "unavailable" },
7439
+ returned_model: hostReport.model ?? "unavailable",
7440
+ usage: hostReport.usage ? {
7441
+ source: "provider_reported",
7442
+ inputTokens: hostReport.usage.inputTokens,
7443
+ outputTokens: hostReport.usage.outputTokens,
7444
+ totalTokens: hostReport.usage.inputTokens + hostReport.usage.outputTokens
7445
+ } : { source: "unavailable" },
7439
7446
  prompt_template_hash: request.promptTemplateHash ?? "unavailable",
7440
7447
  extraction_skill_hash: request.extractionSkillHash ?? "unavailable",
7441
7448
  prompt_template_unavailable_reason: request.promptTemplateHash ? void 0 : "caller_does_not_provide_template_identity",
@@ -7454,7 +7461,7 @@ function createLlmClient(config) {
7454
7461
  dispatch_to_headers_ms: "unavailable",
7455
7462
  headers_to_body_ms: "unavailable",
7456
7463
  first_token_ms: "unavailable",
7457
- provider_unavailable_reason: "host_port_does_not_report_provider_fields"
7464
+ ...hostReport.usage || hostReport.model ? {} : { provider_unavailable_reason: "host_port_does_not_report_provider_fields" }
7458
7465
  }, {
7459
7466
  event_name: "llm.request.completed",
7460
7467
  file: "packages/memory/src/model/llm-client.ts",
@@ -26393,6 +26400,7 @@ var Embedder = class {
26393
26400
  model;
26394
26401
  warmupPromise = null;
26395
26402
  modelDownload;
26403
+ reranker;
26396
26404
  /**
26397
26405
  * Initializes embedding generation collaborators while keeping runtime work in explicit
26398
26406
  * methods.
@@ -26410,6 +26418,12 @@ var Embedder = class {
26410
26418
  this.dimensions = inner.dimension;
26411
26419
  this.providerKind = providerKind;
26412
26420
  this.model = config.model && config.model.trim().length > 0 ? config.model : LOCAL_EMBEDDING_MODEL;
26421
+ this.reranker = new LocalReranker({
26422
+ cacheDir: resolveEmbeddingCacheDir(config),
26423
+ offline: config.offline === true,
26424
+ ...config.mirror ? { mirror: config.mirror } : {},
26425
+ intraOpNumThreads: config.sessionOptions?.intraOpNumThreads ?? Math.max(1, Math.min(4, Math.floor(availableParallelism() / 2)))
26426
+ });
26413
26427
  this.provider = new CachedEmbeddingProvider(inner, {
26414
26428
  maxSize: 256,
26415
26429
  ttlMs: CACHE_TTL_MS
@@ -26579,11 +26593,19 @@ var Embedder = class {
26579
26593
  });
26580
26594
  return this.warmupPromise;
26581
26595
  }
26596
+ /**
26597
+ * Local relevance scores (raw logits, higher is more relevant) for each text against the query, or undefined while
26598
+ * the local reranker is not loaded; the first call starts loading it in the background.
26599
+ */
26600
+ scoreRelevance(query, texts, signal) {
26601
+ return this.reranker.score(query, texts, signal);
26602
+ }
26582
26603
  /** Implements dispose as the local embedding generation operation. */
26583
26604
  async dispose() {
26584
26605
  const warmup = this.warmupPromise;
26585
26606
  if (warmup) await warmup.catch(() => void 0);
26586
26607
  await this.provider.dispose();
26608
+ await this.reranker.dispose();
26587
26609
  }
26588
26610
  };
26589
26611
  /** Creates the embedder facade around the local ONNX provider. */
@@ -27194,9 +27216,7 @@ const DEFAULT_RETRIEVAL_CONFIG = {
27194
27216
  recencyWeight: RECENCY_WEIGHT,
27195
27217
  temporalExpiry: false,
27196
27218
  temporalDecay: true,
27197
- rerankModel: DEFAULT_RERANK_MODEL,
27198
27219
  rerankTimeoutMs: DEFAULT_RERANK_TIMEOUT_MS,
27199
- rerankProvider: "voyage",
27200
27220
  lengthNormAnchor: 0,
27201
27221
  hardMinScore: 0,
27202
27222
  timeDecayHalfLifeDays: 60,
@@ -27501,11 +27521,10 @@ Object.assign(MemoryRetriever.prototype, {
27501
27521
  this.throwIfAborted(context);
27502
27522
  const rerankStageMetadata = rerankOutcome.fallback ? {
27503
27523
  ...rerankOutcome.stats,
27504
- rerankFallbackReason: rerankOutcome.fallback.reason,
27505
- rerankFallbackProvider: rerankOutcome.fallback.provider
27524
+ rerankFallbackReason: rerankOutcome.fallback.reason
27506
27525
  } : rerankOutcome.stats;
27507
27526
  trace?.endStage(fused.map((r) => r.entry.id), fused.map((r) => r.score), rerankStageMetadata);
27508
- fused = this.applyScoringPipeline(fused, trace, context.limit);
27527
+ fused = this.applyScoringPipeline(fused, trace, context.limit, rerankOutcome.modelOrder);
27509
27528
  trace?.startStage("min_score_filter", fused.map((result) => result.entry.id));
27510
27529
  fused = fused.filter((result) => result.score >= (context.minScore ?? this.config.minScore));
27511
27530
  trace?.endStage(fused.map((result) => result.entry.id), fused.map((result) => result.score));
@@ -27574,100 +27593,31 @@ Object.assign(MemoryRetriever.prototype, {
27574
27593
  });
27575
27594
  //#endregion
27576
27595
  //#region src/engine/retrieval/retrieval-rerank-provider.ts
27577
- /** @file retrieval-rerank-provider.ts
27578
- * @purpose Adapts external rerank provider request and response formats.
27579
- * @boundary HTTP payload shaping and response parsing only.
27580
- */
27581
- const RERANK_DEFAULT_ENDPOINTS = {
27582
- voyage: "https://api.voyageai.com/v1/rerank",
27583
- jina: "https://api.jina.ai/v1/rerank",
27584
- pinecone: "https://api.pinecone.io/rerank",
27585
- dashscope: "https://dashscope.aliyuncs.com/api/v1/services/rerank"
27586
- };
27587
- function buildRerankHttpError(status) {
27588
- if (classifyLlmFailure({ status }).category === "auth") return new RetrievalError(`Rerank API failed with status ${status}`);
27589
- }
27590
- function buildRerankRequest(provider, apiKey, model, query, candidates, topN) {
27591
- switch (provider) {
27592
- case "tei":
27593
- case "sno-gpu": return {
27594
- headers: {
27595
- "Content-Type": "application/json",
27596
- Authorization: `Bearer ${apiKey}`,
27597
- ...provider === "sno-gpu" ? {
27598
- "X-Sno-Source": "sno-station",
27599
- "X-Sno-Workload": "station-rerank"
27600
- } : {}
27601
- },
27602
- body: {
27603
- query,
27604
- texts: candidates,
27605
- raw_scores: true
27606
- }
27607
- };
27608
- case "dashscope": return {
27609
- headers: {
27610
- "Content-Type": "application/json",
27611
- Authorization: `Bearer ${apiKey}`
27612
- },
27613
- body: {
27614
- model,
27615
- input: {
27616
- query,
27617
- documents: candidates
27618
- }
27619
- }
27620
- };
27621
- case "pinecone": return {
27622
- headers: {
27623
- "Content-Type": "application/json",
27624
- "Api-Key": apiKey,
27625
- "X-Pinecone-API-Version": "2024-10"
27626
- },
27627
- body: {
27628
- model,
27629
- query,
27630
- documents: candidates.map((text) => ({ text })),
27631
- top_n: topN,
27632
- rank_fields: ["text"]
27633
- }
27634
- };
27635
- case "voyage": return {
27636
- headers: {
27637
- "Content-Type": "application/json",
27638
- Authorization: `Bearer ${apiKey}`
27639
- },
27640
- body: {
27641
- model,
27642
- query,
27643
- documents: candidates,
27644
- top_k: topN
27645
- }
27646
- };
27647
- default: return {
27648
- headers: {
27649
- "Content-Type": "application/json",
27650
- Authorization: `Bearer ${apiKey}`
27651
- },
27652
- body: {
27653
- model,
27654
- query,
27655
- documents: candidates,
27656
- top_n: topN
27657
- }
27658
- };
27659
- }
27596
+ function buildRerankRequest(apiKey, query, candidates) {
27597
+ return {
27598
+ headers: {
27599
+ "Content-Type": "application/json",
27600
+ Authorization: `Bearer ${apiKey}`,
27601
+ "X-Sno-Source": "sno-station",
27602
+ "X-Sno-Workload": "station-rerank"
27603
+ },
27604
+ body: {
27605
+ query,
27606
+ texts: candidates,
27607
+ raw_scores: true
27608
+ }
27609
+ };
27660
27610
  }
27661
- function parseRerankResponse(provider, data) {
27662
- /** Parses items into the normalized shape used by precision recall retrieval ranking. */
27663
- const parseItems = (items, scoreKeys) => {
27611
+ /** Sno's reranker answers a list of `{index, score}`, bare or under `results` / `data`. */
27612
+ function parseRerankResponse(data) {
27613
+ const parseItems = (items) => {
27664
27614
  if (!Array.isArray(items)) return void 0;
27665
27615
  const parsed = [];
27666
27616
  for (const raw of items) {
27667
27617
  const index = typeof raw?.index === "number" ? raw.index : Number(raw?.index);
27668
27618
  if (!Number.isFinite(index)) continue;
27669
27619
  let score;
27670
- for (const key of scoreKeys) {
27620
+ for (const key of ["score", "relevance_score"]) {
27671
27621
  const value = raw?.[key];
27672
27622
  const n = typeof value === "number" ? value : Number(value);
27673
27623
  if (Number.isFinite(n)) {
@@ -27684,18 +27634,7 @@ function parseRerankResponse(provider, data) {
27684
27634
  return parsed.length > 0 ? parsed : void 0;
27685
27635
  };
27686
27636
  const objectData = data && typeof data === "object" && !Array.isArray(data) ? data : void 0;
27687
- switch (provider) {
27688
- case "tei":
27689
- case "sno-gpu": return parseItems(data, ["score", "relevance_score"]) ?? parseItems(objectData?.results, ["score", "relevance_score"]) ?? parseItems(objectData?.data, ["score", "relevance_score"]);
27690
- case "dashscope": {
27691
- const output = objectData?.output;
27692
- if (output) return parseItems(output.results, ["relevance_score", "score"]);
27693
- return parseItems(objectData?.results, ["relevance_score", "score"]);
27694
- }
27695
- case "pinecone": return parseItems(objectData?.data, ["score", "relevance_score"]) ?? parseItems(objectData?.results, ["score", "relevance_score"]);
27696
- case "voyage": return parseItems(objectData?.data, ["relevance_score", "score"]) ?? parseItems(objectData?.results, ["relevance_score", "score"]);
27697
- default: return parseItems(objectData?.results, ["relevance_score", "score"]) ?? parseItems(objectData?.data, ["relevance_score", "score"]);
27698
- }
27637
+ return parseItems(data) ?? parseItems(objectData?.results) ?? parseItems(objectData?.data);
27699
27638
  }
27700
27639
  //#endregion
27701
27640
  //#region src/engine/retrieval/retriever-rerank.ts
@@ -27763,11 +27702,9 @@ async function fetchRerankWithRetry(send, stop) {
27763
27702
  for (let attempt = 1; attempt <= RERANK_TRANSIENT_ATTEMPTS; attempt += 1) {
27764
27703
  let retryDelayMs = RERANK_TRANSIENT_BACKOFF_MS * attempt;
27765
27704
  try {
27766
- const response = await send();
27767
- if (response.ok) return {
27768
- response,
27769
- data: await response.json()
27770
- };
27705
+ const reply = await send();
27706
+ const { response } = reply;
27707
+ if (response.ok) return reply;
27771
27708
  if (!RERANK_TRANSIENT_STATUSES.has(response.status) || attempt === RERANK_TRANSIENT_ATTEMPTS) return { response };
27772
27709
  if (response.status === 429) {
27773
27710
  const retryAfter = response.headers.get("retry-after");
@@ -27799,13 +27736,12 @@ Object.assign(MemoryRetriever.prototype, {
27799
27736
  async rerank(query, candidates, queryVector, options) {
27800
27737
  if (candidates.length === 0) return { candidates };
27801
27738
  if (this.config.rerank === "none") return { candidates };
27802
- const provider = this.config.rerankProvider ?? "none";
27803
- const unranked = () => provider === "sno-gpu" ? this.rerankLightweight(candidates, queryVector) : candidates;
27804
- if (this.config.rerank === "cross-encoder" && !this.config.rerankApiKey) throw new RetrievalError(`rerank "cross-encoder" requires retrieval.rerankApiKey (provider: ${provider}); set the key, or set retrieval.rerank to "lightweight" to choose the local ranker`);
27805
- if (this.config.rerank === "lightweight" || !this.config.rerankApiKey) return { candidates: this.rerankLightweight(candidates, queryVector) };
27806
- const rerankEndpoint = this.config.rerankEndpoint ?? RERANK_DEFAULT_ENDPOINTS[provider];
27739
+ const unranked = () => this.rerankLightweight(candidates, queryVector);
27740
+ if (this.config.rerank === "cross-encoder" && !this.config.rerankApiKey) throw new RetrievalError("rerank \"cross-encoder\" requires retrieval.rerankApiKey; set the key, or set retrieval.rerank to \"lightweight\" to choose the local ranker");
27741
+ if (this.config.rerank === "lightweight" || !this.config.rerankApiKey) return await this.rerankLocalModel(query, this.rerankLightweight(candidates, queryVector), options?.deadlineAt, options?.signal);
27742
+ const rerankEndpoint = this.config.rerankEndpoint;
27807
27743
  if (!rerankEndpoint) {
27808
- log$4.warn("rerank skipped: no endpoint for provider", { provider }, {
27744
+ log$4.warn("rerank skipped: no reranker address", {}, {
27809
27745
  event_name: "memory.retriever_rerank.diagnostic",
27810
27746
  file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27811
27747
  function: "rerank",
@@ -27813,15 +27749,12 @@ Object.assign(MemoryRetriever.prototype, {
27813
27749
  });
27814
27750
  return {
27815
27751
  candidates: unranked(),
27816
- fallback: {
27817
- reason: "no_endpoint",
27818
- provider
27819
- }
27752
+ fallback: { reason: "no_endpoint" }
27820
27753
  };
27821
27754
  }
27822
27755
  const rerankTimeoutMs = this.config.rerankTimeoutMs ?? 15e3;
27823
- const stepEnds = [options?.signal, provider === "sno-gpu" ? AbortSignal.timeout(Math.max(0, Math.floor(options?.deadlineAt === void 0 ? rerankTimeoutMs : options.deadlineAt - Date.now()))) : void 0].filter((each) => each !== void 0);
27824
- const stepStop = stepEnds.length > 0 ? AbortSignal.any(stepEnds) : void 0;
27756
+ const stepBudget = AbortSignal.timeout(Math.max(0, Math.floor(options?.deadlineAt === void 0 ? rerankTimeoutMs : options.deadlineAt - Date.now())));
27757
+ const stepStop = options?.signal ? AbortSignal.any([options.signal, stepBudget]) : stepBudget;
27825
27758
  const rerankApiKey = this.config.rerankApiKey;
27826
27759
  const maxCandidates = this.config.rerankMaxCandidates;
27827
27760
  const overCap = maxCandidates !== void 0 && candidates.length > maxCandidates;
@@ -27843,10 +27776,7 @@ Object.assign(MemoryRetriever.prototype, {
27843
27776
  });
27844
27777
  return {
27845
27778
  candidates: unranked(),
27846
- fallback: {
27847
- reason: "query_over_window",
27848
- provider
27849
- }
27779
+ fallback: { reason: "query_over_window" }
27850
27780
  };
27851
27781
  }
27852
27782
  let truncatedCandidates = 0;
@@ -27869,20 +27799,54 @@ Object.assign(MemoryRetriever.prototype, {
27869
27799
  const runBatch = async (start) => {
27870
27800
  let batchTexts = rerankTexts.slice(start, start + batchSize);
27871
27801
  for (let pass = 0;; pass += 1) {
27872
- const { headers, body } = buildRerankRequest(provider, rerankApiKey, this.config.rerankModel ?? "rerank-2", query, batchTexts, batchTexts.length);
27873
- const { response, data } = await fetchRerankWithRetry(() => fetch(rerankEndpoint, {
27874
- method: "POST",
27875
- headers: provider === "sno-gpu" ? {
27876
- ...headers,
27877
- "X-Request-ID": randomUUID()
27878
- } : headers,
27879
- body: JSON.stringify(body),
27880
- signal: stepStop ? AbortSignal.any([AbortSignal.timeout(rerankTimeoutMs), stepStop]) : AbortSignal.timeout(rerankTimeoutMs)
27881
- }), stepStop);
27802
+ const { headers, body } = buildRerankRequest(rerankApiKey, query, batchTexts);
27803
+ const sendAttempt = async () => {
27804
+ const clientRequestId = randomUUID();
27805
+ const attemptStarted = performance.now();
27806
+ let outcome = "failed";
27807
+ let statusCode;
27808
+ try {
27809
+ const attempt = await fetch(rerankEndpoint, {
27810
+ method: "POST",
27811
+ headers: {
27812
+ ...headers,
27813
+ "X-Request-ID": clientRequestId
27814
+ },
27815
+ body: JSON.stringify(body),
27816
+ signal: AbortSignal.any([AbortSignal.timeout(rerankTimeoutMs), stepStop])
27817
+ });
27818
+ statusCode = attempt.status;
27819
+ if (!attempt.ok) {
27820
+ outcome = "http_error";
27821
+ return { response: attempt };
27822
+ }
27823
+ const data = await attempt.json();
27824
+ outcome = "success";
27825
+ return {
27826
+ response: attempt,
27827
+ data
27828
+ };
27829
+ } catch (error) {
27830
+ outcome = isRerankTimeout(error) ? "timeout" : "failed";
27831
+ throw error;
27832
+ } finally {
27833
+ log$4.info("Rerank request completed", {
27834
+ outcome,
27835
+ status_code: statusCode ?? "unavailable",
27836
+ duration_ms: performance.now() - attemptStarted,
27837
+ texts_sent: batchTexts.length,
27838
+ client_request_id: clientRequestId
27839
+ }, {
27840
+ event_name: "rerank.request.completed",
27841
+ file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27842
+ function: "runBatch",
27843
+ site_id: "rerank.request.completed"
27844
+ });
27845
+ }
27846
+ };
27847
+ const { response, data } = await fetchRerankWithRetry(sendAttempt, stepStop);
27882
27848
  if (!response.ok) {
27883
27849
  const retryAfter = response.headers.get("retry-after");
27884
- const fatalError = buildRerankHttpError(response.status);
27885
- if (fatalError && provider !== "sno-gpu") throw fatalError;
27886
27850
  const errorBody = await response.text().catch(() => "<unreadable body>");
27887
27851
  const refusal = pass === 0 ? parseOverWindowRefusal(errorBody) : void 0;
27888
27852
  if (refusal) {
@@ -27924,10 +27888,9 @@ Object.assign(MemoryRetriever.prototype, {
27924
27888
  });
27925
27889
  return "http_error";
27926
27890
  }
27927
- const parsed = parseRerankResponse(provider, data);
27891
+ const parsed = parseRerankResponse(data);
27928
27892
  if (!parsed) {
27929
27893
  log$4.warn("rerank API returned unparseable response", {
27930
- provider,
27931
27894
  endpoint_hash: createHash("sha256").update(rerankEndpoint).digest("hex"),
27932
27895
  batchStart: start
27933
27896
  }, {
@@ -27959,10 +27922,7 @@ Object.assign(MemoryRetriever.prototype, {
27959
27922
  for (const outcome of settled) if (outcome.status === "rejected") throw outcome.reason;
27960
27923
  for (const outcome of settled) if (outcome.status === "fulfilled" && typeof outcome.value === "string") return {
27961
27924
  candidates: unranked(),
27962
- fallback: {
27963
- reason: outcome.value,
27964
- provider
27965
- }
27925
+ fallback: { reason: outcome.value }
27966
27926
  };
27967
27927
  for (const outcome of settled) if (outcome.status === "fulfilled" && typeof outcome.value !== "string") items.push(...outcome.value);
27968
27928
  }
@@ -27977,9 +27937,7 @@ Object.assign(MemoryRetriever.prototype, {
27977
27937
  const candidate = toRerank[item.index];
27978
27938
  if (!candidate) continue;
27979
27939
  const sourceScore = this.getRerankSourceScore(candidate);
27980
- let crossScore = item.score;
27981
- if (provider === "tei" || provider === "sno-gpu") crossScore = 1 / (1 + Math.exp(-item.score));
27982
- const blendedScore = clamp01(crossScore * blendCross + sourceScore * blendVector, 0);
27940
+ const blendedScore = clamp01(1 / (1 + Math.exp(-item.score)) * blendCross + sourceScore * blendVector, 0);
27983
27941
  reranked.push({
27984
27942
  ...candidate,
27985
27943
  score: blendedScore,
@@ -27997,8 +27955,7 @@ Object.assign(MemoryRetriever.prototype, {
27997
27955
  log$4.debug("reranked", {
27998
27956
  totalCandidateCount: candidates.length,
27999
27957
  sentToRerankCount: toRerank.length,
28000
- returnedCount: reranked.length,
28001
- provider
27958
+ returnedCount: reranked.length
28002
27959
  }, {
28003
27960
  event_name: "memory.retriever_rerank.diagnostic",
28004
27961
  file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
@@ -28041,10 +27998,7 @@ Object.assign(MemoryRetriever.prototype, {
28041
27998
  }
28042
27999
  return {
28043
28000
  candidates: unranked(),
28044
- fallback: {
28045
- reason,
28046
- provider
28047
- }
28001
+ fallback: { reason }
28048
28002
  };
28049
28003
  }
28050
28004
  },
@@ -28053,8 +28007,8 @@ Object.assign(MemoryRetriever.prototype, {
28053
28007
  if (candidates.length === 0) return candidates;
28054
28008
  const chunkIds = candidates.map((c) => c.chunkId).filter((id) => id !== void 0);
28055
28009
  const vectorMap = chunkIds.length > 0 ? this.store.getVectorsByIds(chunkIds) : /* @__PURE__ */ new Map();
28056
- const wF = this.config.lightweightFusionWeight ?? .7;
28057
- const wC = this.config.lightweightCosineWeight ?? .3;
28010
+ const wF = this.config.lightweightFusionWeight ?? .1;
28011
+ const wC = this.config.lightweightCosineWeight ?? .9;
28058
28012
  let blendedCount = 0;
28059
28013
  let dimMismatchCount = 0;
28060
28014
  const reranked = candidates.map((candidate) => {
@@ -28114,6 +28068,58 @@ Object.assign(MemoryRetriever.prototype, {
28114
28068
  return a.entry.id.localeCompare(b.entry.id);
28115
28069
  });
28116
28070
  },
28071
+ /**
28072
+ * The local reranker model reorders the first candidates of the local ranking. Their order is unchanged while the
28073
+ * model is not loaded yet (the first call starts loading it), past the caller's deadline, and after a cancel.
28074
+ */
28075
+ async rerankLocalModel(query, ordered, deadlineAt, signal) {
28076
+ if (ordered.length < 2 || signal?.aborted || deadlineAt !== void 0 && Date.now() >= deadlineAt) return { candidates: ordered };
28077
+ const head = ordered.slice(0, 15);
28078
+ const started = performance.now();
28079
+ const budgetMs = deadlineAt === void 0 ? this.config.rerankTimeoutMs ?? 15e3 : Math.max(0, Math.floor(deadlineAt - Date.now()));
28080
+ const stop = signal ? AbortSignal.any([signal, AbortSignal.timeout(budgetMs)]) : AbortSignal.timeout(budgetMs);
28081
+ const scoring = this.embedder.scoreRelevance(query, head.map((r) => r.entry.text), stop).catch((error) => {
28082
+ log$4.warn("local reranker failed; recall keeps the local ranking order", { error }, {
28083
+ event_name: "memory.retriever_rerank.diagnostic",
28084
+ file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
28085
+ function: "rerankLocalModel",
28086
+ site_id: "retrieval.retriever-rerank.rerankLocalModel.failed"
28087
+ });
28088
+ });
28089
+ const logits = await Promise.race([scoring, new Promise((resolve) => stop.addEventListener("abort", () => resolve(void 0), { once: true }))]);
28090
+ if (!logits || signal?.aborted) return { candidates: ordered };
28091
+ const blended = head.map((candidate, index) => ({
28092
+ candidate,
28093
+ value: logits[index] ?? Number.NEGATIVE_INFINITY
28094
+ }));
28095
+ blended.sort((a, b) => b.value - a.value || a.candidate.entry.id.localeCompare(b.candidate.entry.id));
28096
+ const slots = head.map((candidate) => candidate.score).sort((a, b) => b - a);
28097
+ const rescored = blended.map(({ candidate }, index) => {
28098
+ const score = slots[index] ?? candidate.score;
28099
+ return {
28100
+ ...candidate,
28101
+ score,
28102
+ rerankScore: score,
28103
+ sources: {
28104
+ ...candidate.sources,
28105
+ reranked: { score }
28106
+ }
28107
+ };
28108
+ });
28109
+ log$4.debug("local reranker applied", {
28110
+ scored: head.length,
28111
+ duration_ms: performance.now() - started
28112
+ }, {
28113
+ event_name: "memory.retriever_rerank.diagnostic",
28114
+ file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
28115
+ function: "rerankLocalModel",
28116
+ site_id: "retrieval.retriever-rerank.rerankLocalModel.applied"
28117
+ });
28118
+ return {
28119
+ candidates: [...rescored, ...ordered.slice(head.length)],
28120
+ modelOrder: blended.map(({ candidate }) => candidate.entry.id)
28121
+ };
28122
+ },
28117
28123
  getRerankSourceScore(result) {
28118
28124
  return clamp01(Math.max(result.sources.bm25?.score ?? 0, result.sources.vector?.score ?? 0), 0);
28119
28125
  }
@@ -28305,8 +28311,21 @@ function tracedStage(trace, name, skipReason, run, input) {
28305
28311
  trace.endStage(output.map((result) => result.entry.id), output.map((result) => result.score), skipReason === void 0 ? void 0 : { skipped: skipReason });
28306
28312
  return output;
28307
28313
  }
28314
+ /** The candidates the local reranker model scored take their own scores, highest first, in its order. */
28315
+ function orderByLocalModel(results, modelOrder) {
28316
+ const present = new Set(results.map((result) => result.entry.id));
28317
+ const order = modelOrder.filter((id) => present.has(id));
28318
+ if (order.length < 2) return results;
28319
+ const judged = new Set(order);
28320
+ const slots = results.filter((result) => judged.has(result.entry.id)).map((result) => result.score).sort((a, b) => b - a);
28321
+ const scores = new Map(order.map((id, index) => [id, slots[index] ?? 0]));
28322
+ return results.map((result) => ({
28323
+ ...result,
28324
+ score: scores.get(result.entry.id) ?? result.score
28325
+ })).sort((a, b) => b.score - a.score);
28326
+ }
28308
28327
  Object.assign(MemoryRetriever.prototype, {
28309
- applyScoringPipeline(results, trace, limit = results.length) {
28328
+ applyScoringPipeline(results, trace, limit = results.length, modelOrder) {
28310
28329
  const stage = (name, skipReason, run, input) => tracedStage(trace, name, skipReason, run, input);
28311
28330
  const temporalOff = !this.config.temporalWeighting;
28312
28331
  let scored = stage("recency_boost", temporalOff ? "temporalWeighting" : this.config.recencyHalfLifeDays <= 0 ? "recencyHalfLifeDays" : this.config.recencyWeight <= 0 ? "recencyWeight" : void 0, (input) => temporalOff ? input : this.applyRecencyBoost(input), results);
@@ -28314,6 +28333,7 @@ Object.assign(MemoryRetriever.prototype, {
28314
28333
  scored = stage("length_normalization", this.config.lengthNormAnchor <= 0 ? "lengthNormAnchor" : void 0, (input) => this.applyLengthNormalization(input), scored);
28315
28334
  scored = stage("time_decay", temporalOff ? "temporalWeighting" : this.config.timeDecayHalfLifeDays <= 0 ? "timeDecayHalfLifeDays" : void 0, (input) => temporalOff ? input : this.applyTimeDecay(input), scored);
28316
28335
  scored = stage("retention_boost", temporalOff ? "temporalWeighting" : this.config.recallLifecycle?.retentionScorer === true ? void 0 : "recallLifecycle.retentionScorer", (input) => temporalOff ? input : this.applyRetentionBoost(input), scored);
28336
+ scored = stage("local_model_order", modelOrder ? void 0 : "modelOrder", (input) => modelOrder ? orderByLocalModel(input, modelOrder) : input, scored);
28317
28337
  scored = stage("hard_min_score", void 0, (input) => input.filter((result) => result.score >= this.config.hardMinScore), scored);
28318
28338
  const mmrOff = experimentMmrDisabled();
28319
28339
  scored = stage("mmr_diversity", mmrOff ? "experiment.disableMmr" : void 0, (input) => {