@tenphi/akno-core 0.1.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/LICENSE +83 -0
- package/README.md +26 -0
- package/config/default.jsonc +548 -0
- package/dist/bench/answer-corpus.d.ts +48 -0
- package/dist/bench/answer-corpus.d.ts.map +1 -0
- package/dist/bench/answer-corpus.js +491 -0
- package/dist/bench/answer-corpus.js.map +1 -0
- package/dist/bench/answer.d.ts +156 -0
- package/dist/bench/answer.d.ts.map +1 -0
- package/dist/bench/answer.js +608 -0
- package/dist/bench/answer.js.map +1 -0
- package/dist/bench/auto-recall-answer-corpus.d.ts +21 -0
- package/dist/bench/auto-recall-answer-corpus.d.ts.map +1 -0
- package/dist/bench/auto-recall-answer-corpus.js +245 -0
- package/dist/bench/auto-recall-answer-corpus.js.map +1 -0
- package/dist/bench/auto-recall-answer.d.ts +198 -0
- package/dist/bench/auto-recall-answer.d.ts.map +1 -0
- package/dist/bench/auto-recall-answer.js +720 -0
- package/dist/bench/auto-recall-answer.js.map +1 -0
- package/dist/bench/auto-recall-corpus.d.ts +45 -0
- package/dist/bench/auto-recall-corpus.d.ts.map +1 -0
- package/dist/bench/auto-recall-corpus.js +221 -0
- package/dist/bench/auto-recall-corpus.js.map +1 -0
- package/dist/bench/auto-recall.d.ts +171 -0
- package/dist/bench/auto-recall.d.ts.map +1 -0
- package/dist/bench/auto-recall.js +651 -0
- package/dist/bench/auto-recall.js.map +1 -0
- package/dist/bench/entity-resolution.d.ts +37 -0
- package/dist/bench/entity-resolution.d.ts.map +1 -0
- package/dist/bench/entity-resolution.js +121 -0
- package/dist/bench/entity-resolution.js.map +1 -0
- package/dist/bench/graph.d.ts +57 -0
- package/dist/bench/graph.d.ts.map +1 -0
- package/dist/bench/graph.js +573 -0
- package/dist/bench/graph.js.map +1 -0
- package/dist/bench/llm-ranking-probe.d.ts +27 -0
- package/dist/bench/llm-ranking-probe.d.ts.map +1 -0
- package/dist/bench/llm-ranking-probe.js +105 -0
- package/dist/bench/llm-ranking-probe.js.map +1 -0
- package/dist/bench/merge-discovery-corpus.d.ts +26 -0
- package/dist/bench/merge-discovery-corpus.d.ts.map +1 -0
- package/dist/bench/merge-discovery-corpus.js +114 -0
- package/dist/bench/merge-discovery-corpus.js.map +1 -0
- package/dist/bench/merge-discovery-review.d.ts +81 -0
- package/dist/bench/merge-discovery-review.d.ts.map +1 -0
- package/dist/bench/merge-discovery-review.js +149 -0
- package/dist/bench/merge-discovery-review.js.map +1 -0
- package/dist/bench/merge-discovery.d.ts +122 -0
- package/dist/bench/merge-discovery.d.ts.map +1 -0
- package/dist/bench/merge-discovery.js +390 -0
- package/dist/bench/merge-discovery.js.map +1 -0
- package/dist/bench/mixed-retrieval.d.ts +35 -0
- package/dist/bench/mixed-retrieval.d.ts.map +1 -0
- package/dist/bench/mixed-retrieval.js +355 -0
- package/dist/bench/mixed-retrieval.js.map +1 -0
- package/dist/bench/ranking-corpus.d.ts +29 -0
- package/dist/bench/ranking-corpus.d.ts.map +1 -0
- package/dist/bench/ranking-corpus.js +514 -0
- package/dist/bench/ranking-corpus.js.map +1 -0
- package/dist/bench/ranking-end-to-end.d.ts +112 -0
- package/dist/bench/ranking-end-to-end.d.ts.map +1 -0
- package/dist/bench/ranking-end-to-end.js +479 -0
- package/dist/bench/ranking-end-to-end.js.map +1 -0
- package/dist/bench/ranking-latency.d.ts +71 -0
- package/dist/bench/ranking-latency.d.ts.map +1 -0
- package/dist/bench/ranking-latency.js +130 -0
- package/dist/bench/ranking-latency.js.map +1 -0
- package/dist/bench/ranking-matrix.d.ts +141 -0
- package/dist/bench/ranking-matrix.d.ts.map +1 -0
- package/dist/bench/ranking-matrix.js +526 -0
- package/dist/bench/ranking-matrix.js.map +1 -0
- package/dist/bench/ranking-review.d.ts +93 -0
- package/dist/bench/ranking-review.d.ts.map +1 -0
- package/dist/bench/ranking-review.js +249 -0
- package/dist/bench/ranking-review.js.map +1 -0
- package/dist/bench/ranking.d.ts +122 -0
- package/dist/bench/ranking.d.ts.map +1 -0
- package/dist/bench/ranking.js +547 -0
- package/dist/bench/ranking.js.map +1 -0
- package/dist/bench.d.ts +60 -0
- package/dist/bench.d.ts.map +1 -0
- package/dist/bench.js +167 -0
- package/dist/bench.js.map +1 -0
- package/dist/config/jsonc.d.ts +8 -0
- package/dist/config/jsonc.d.ts.map +1 -0
- package/dist/config/jsonc.js +85 -0
- package/dist/config/jsonc.js.map +1 -0
- package/dist/config/load.d.ts +43 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +608 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/paths.d.ts +10 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +38 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +698 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +394 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/write-rules.d.ts +41 -0
- package/dist/config/write-rules.d.ts.map +1 -0
- package/dist/config/write-rules.js +225 -0
- package/dist/config/write-rules.js.map +1 -0
- package/dist/config/write-setup.d.ts +42 -0
- package/dist/config/write-setup.d.ts.map +1 -0
- package/dist/config/write-setup.js +358 -0
- package/dist/config/write-setup.js.map +1 -0
- package/dist/context.d.ts +64 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +14 -0
- package/dist/context.js.map +1 -0
- package/dist/doctor.d.ts +115 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +388 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index/chunk.d.ts +62 -0
- package/dist/index/chunk.d.ts.map +1 -0
- package/dist/index/chunk.js +307 -0
- package/dist/index/chunk.js.map +1 -0
- package/dist/index/defer.d.ts +32 -0
- package/dist/index/defer.d.ts.map +1 -0
- package/dist/index/defer.js +66 -0
- package/dist/index/defer.js.map +1 -0
- package/dist/index/derive.d.ts +99 -0
- package/dist/index/derive.d.ts.map +1 -0
- package/dist/index/derive.js +378 -0
- package/dist/index/derive.js.map +1 -0
- package/dist/index/entity-resolution.d.ts +68 -0
- package/dist/index/entity-resolution.d.ts.map +1 -0
- package/dist/index/entity-resolution.js +305 -0
- package/dist/index/entity-resolution.js.map +1 -0
- package/dist/index/graph.d.ts +46 -0
- package/dist/index/graph.d.ts.map +1 -0
- package/dist/index/graph.js +618 -0
- package/dist/index/graph.js.map +1 -0
- package/dist/index/indexer.d.ts +301 -0
- package/dist/index/indexer.d.ts.map +1 -0
- package/dist/index/indexer.js +1398 -0
- package/dist/index/indexer.js.map +1 -0
- package/dist/index/revision-barrier.d.ts +30 -0
- package/dist/index/revision-barrier.d.ts.map +1 -0
- package/dist/index/revision-barrier.js +140 -0
- package/dist/index/revision-barrier.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/adoption-eligibility.d.ts +4 -0
- package/dist/ingest/adoption-eligibility.d.ts.map +1 -0
- package/dist/ingest/adoption-eligibility.js +18 -0
- package/dist/ingest/adoption-eligibility.js.map +1 -0
- package/dist/ingest/availability.d.ts +15 -0
- package/dist/ingest/availability.d.ts.map +1 -0
- package/dist/ingest/availability.js +37 -0
- package/dist/ingest/availability.js.map +1 -0
- package/dist/ingest/extract.d.ts +58 -0
- package/dist/ingest/extract.d.ts.map +1 -0
- package/dist/ingest/extract.js +255 -0
- package/dist/ingest/extract.js.map +1 -0
- package/dist/ingest/fetch.d.ts +35 -0
- package/dist/ingest/fetch.d.ts.map +1 -0
- package/dist/ingest/fetch.js +142 -0
- package/dist/ingest/fetch.js.map +1 -0
- package/dist/ingest/inbox.d.ts +53 -0
- package/dist/ingest/inbox.d.ts.map +1 -0
- package/dist/ingest/inbox.js +110 -0
- package/dist/ingest/inbox.js.map +1 -0
- package/dist/ingest/name.d.ts +72 -0
- package/dist/ingest/name.d.ts.map +1 -0
- package/dist/ingest/name.js +208 -0
- package/dist/ingest/name.js.map +1 -0
- package/dist/ingest/parts.d.ts +78 -0
- package/dist/ingest/parts.d.ts.map +1 -0
- package/dist/ingest/parts.js +52 -0
- package/dist/ingest/parts.js.map +1 -0
- package/dist/ingest/rendition.d.ts +75 -0
- package/dist/ingest/rendition.d.ts.map +1 -0
- package/dist/ingest/rendition.js +92 -0
- package/dist/ingest/rendition.js.map +1 -0
- package/dist/ingest/store.d.ts +66 -0
- package/dist/ingest/store.d.ts.map +1 -0
- package/dist/ingest/store.js +92 -0
- package/dist/ingest/store.js.map +1 -0
- package/dist/kb/folders.d.ts +37 -0
- package/dist/kb/folders.d.ts.map +1 -0
- package/dist/kb/folders.js +133 -0
- package/dist/kb/folders.js.map +1 -0
- package/dist/kb/frontmatter.d.ts +91 -0
- package/dist/kb/frontmatter.d.ts.map +1 -0
- package/dist/kb/frontmatter.js +274 -0
- package/dist/kb/frontmatter.js.map +1 -0
- package/dist/kb/line-facts.d.ts +29 -0
- package/dist/kb/line-facts.d.ts.map +1 -0
- package/dist/kb/line-facts.js +23 -0
- package/dist/kb/line-facts.js.map +1 -0
- package/dist/kb/page.d.ts +92 -0
- package/dist/kb/page.d.ts.map +1 -0
- package/dist/kb/page.js +243 -0
- package/dist/kb/page.js.map +1 -0
- package/dist/kb/scan.d.ts +38 -0
- package/dist/kb/scan.d.ts.map +1 -0
- package/dist/kb/scan.js +109 -0
- package/dist/kb/scan.js.map +1 -0
- package/dist/kb/words.d.ts +30 -0
- package/dist/kb/words.d.ts.map +1 -0
- package/dist/kb/words.js +107 -0
- package/dist/kb/words.js.map +1 -0
- package/dist/maintenance/adopt.d.ts +65 -0
- package/dist/maintenance/adopt.d.ts.map +1 -0
- package/dist/maintenance/adopt.js +238 -0
- package/dist/maintenance/adopt.js.map +1 -0
- package/dist/maintenance/budget.d.ts +55 -0
- package/dist/maintenance/budget.d.ts.map +1 -0
- package/dist/maintenance/budget.js +61 -0
- package/dist/maintenance/budget.js.map +1 -0
- package/dist/maintenance/conflicts.d.ts +105 -0
- package/dist/maintenance/conflicts.d.ts.map +1 -0
- package/dist/maintenance/conflicts.js +368 -0
- package/dist/maintenance/conflicts.js.map +1 -0
- package/dist/maintenance/contradictions.d.ts +34 -0
- package/dist/maintenance/contradictions.d.ts.map +1 -0
- package/dist/maintenance/contradictions.js +199 -0
- package/dist/maintenance/contradictions.js.map +1 -0
- package/dist/maintenance/curate.d.ts +156 -0
- package/dist/maintenance/curate.d.ts.map +1 -0
- package/dist/maintenance/curate.js +2070 -0
- package/dist/maintenance/curate.js.map +1 -0
- package/dist/maintenance/dream.d.ts +139 -0
- package/dist/maintenance/dream.d.ts.map +1 -0
- package/dist/maintenance/dream.js +1632 -0
- package/dist/maintenance/dream.js.map +1 -0
- package/dist/maintenance/graph-candidates.d.ts +19 -0
- package/dist/maintenance/graph-candidates.d.ts.map +1 -0
- package/dist/maintenance/graph-candidates.js +120 -0
- package/dist/maintenance/graph-candidates.js.map +1 -0
- package/dist/maintenance/housekeeping.d.ts +81 -0
- package/dist/maintenance/housekeeping.d.ts.map +1 -0
- package/dist/maintenance/housekeeping.js +281 -0
- package/dist/maintenance/housekeeping.js.map +1 -0
- package/dist/maintenance/link-repairs.d.ts +58 -0
- package/dist/maintenance/link-repairs.d.ts.map +1 -0
- package/dist/maintenance/link-repairs.js +281 -0
- package/dist/maintenance/link-repairs.js.map +1 -0
- package/dist/maintenance/log.d.ts +41 -0
- package/dist/maintenance/log.d.ts.map +1 -0
- package/dist/maintenance/log.js +72 -0
- package/dist/maintenance/log.js.map +1 -0
- package/dist/maintenance/managed-item-routing.d.ts +48 -0
- package/dist/maintenance/managed-item-routing.d.ts.map +1 -0
- package/dist/maintenance/managed-item-routing.js +281 -0
- package/dist/maintenance/managed-item-routing.js.map +1 -0
- package/dist/maintenance/managed-item-sources.d.ts +38 -0
- package/dist/maintenance/managed-item-sources.d.ts.map +1 -0
- package/dist/maintenance/managed-item-sources.js +324 -0
- package/dist/maintenance/managed-item-sources.js.map +1 -0
- package/dist/maintenance/managed-items.d.ts +162 -0
- package/dist/maintenance/managed-items.d.ts.map +1 -0
- package/dist/maintenance/managed-items.js +1329 -0
- package/dist/maintenance/managed-items.js.map +1 -0
- package/dist/maintenance/merge-classifier.d.ts +19 -0
- package/dist/maintenance/merge-classifier.d.ts.map +1 -0
- package/dist/maintenance/merge-classifier.js +49 -0
- package/dist/maintenance/merge-classifier.js.map +1 -0
- package/dist/maintenance/model-telemetry.d.ts +45 -0
- package/dist/maintenance/model-telemetry.d.ts.map +1 -0
- package/dist/maintenance/model-telemetry.js +107 -0
- package/dist/maintenance/model-telemetry.js.map +1 -0
- package/dist/maintenance/observe.d.ts +72 -0
- package/dist/maintenance/observe.d.ts.map +1 -0
- package/dist/maintenance/observe.js +265 -0
- package/dist/maintenance/observe.js.map +1 -0
- package/dist/maintenance/path-policy.d.ts +83 -0
- package/dist/maintenance/path-policy.d.ts.map +1 -0
- package/dist/maintenance/path-policy.js +360 -0
- package/dist/maintenance/path-policy.js.map +1 -0
- package/dist/maintenance/plans.d.ts +366 -0
- package/dist/maintenance/plans.d.ts.map +1 -0
- package/dist/maintenance/plans.js +4060 -0
- package/dist/maintenance/plans.js.map +1 -0
- package/dist/maintenance/profile.d.ts +33 -0
- package/dist/maintenance/profile.d.ts.map +1 -0
- package/dist/maintenance/profile.js +99 -0
- package/dist/maintenance/profile.js.map +1 -0
- package/dist/maintenance/recovery.d.ts +38 -0
- package/dist/maintenance/recovery.d.ts.map +1 -0
- package/dist/maintenance/recovery.js +217 -0
- package/dist/maintenance/recovery.js.map +1 -0
- package/dist/maintenance/repair.d.ts +37 -0
- package/dist/maintenance/repair.d.ts.map +1 -0
- package/dist/maintenance/repair.js +183 -0
- package/dist/maintenance/repair.js.map +1 -0
- package/dist/maintenance/rule-drift.d.ts +104 -0
- package/dist/maintenance/rule-drift.d.ts.map +1 -0
- package/dist/maintenance/rule-drift.js +507 -0
- package/dist/maintenance/rule-drift.js.map +1 -0
- package/dist/maintenance/run-verification.d.ts +44 -0
- package/dist/maintenance/run-verification.d.ts.map +1 -0
- package/dist/maintenance/run-verification.js +253 -0
- package/dist/maintenance/run-verification.js.map +1 -0
- package/dist/maintenance/runs.d.ts +142 -0
- package/dist/maintenance/runs.d.ts.map +1 -0
- package/dist/maintenance/runs.js +439 -0
- package/dist/maintenance/runs.js.map +1 -0
- package/dist/maintenance/semantic-merge-discovery.d.ts +54 -0
- package/dist/maintenance/semantic-merge-discovery.d.ts.map +1 -0
- package/dist/maintenance/semantic-merge-discovery.js +308 -0
- package/dist/maintenance/semantic-merge-discovery.js.map +1 -0
- package/dist/maintenance/temporal.d.ts +44 -0
- package/dist/maintenance/temporal.d.ts.map +1 -0
- package/dist/maintenance/temporal.js +295 -0
- package/dist/maintenance/temporal.js.map +1 -0
- package/dist/models/client.d.ts +214 -0
- package/dist/models/client.d.ts.map +1 -0
- package/dist/models/client.js +904 -0
- package/dist/models/client.js.map +1 -0
- package/dist/models/provider-api.d.ts +28 -0
- package/dist/models/provider-api.d.ts.map +1 -0
- package/dist/models/provider-api.js +320 -0
- package/dist/models/provider-api.js.map +1 -0
- package/dist/open.d.ts +163 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +382 -0
- package/dist/open.js.map +1 -0
- package/dist/ops/adopt.d.ts +12 -0
- package/dist/ops/adopt.d.ts.map +1 -0
- package/dist/ops/adopt.js +138 -0
- package/dist/ops/adopt.js.map +1 -0
- package/dist/ops/answer.d.ts +29 -0
- package/dist/ops/answer.d.ts.map +1 -0
- package/dist/ops/answer.js +557 -0
- package/dist/ops/answer.js.map +1 -0
- package/dist/ops/context.d.ts +18 -0
- package/dist/ops/context.d.ts.map +1 -0
- package/dist/ops/context.js +713 -0
- package/dist/ops/context.js.map +1 -0
- package/dist/ops/folder.d.ts +23 -0
- package/dist/ops/folder.d.ts.map +1 -0
- package/dist/ops/folder.js +130 -0
- package/dist/ops/folder.js.map +1 -0
- package/dist/ops/forget.d.ts +14 -0
- package/dist/ops/forget.d.ts.map +1 -0
- package/dist/ops/forget.js +212 -0
- package/dist/ops/forget.js.map +1 -0
- package/dist/ops/graph.d.ts +10 -0
- package/dist/ops/graph.d.ts.map +1 -0
- package/dist/ops/graph.js +480 -0
- package/dist/ops/graph.js.map +1 -0
- package/dist/ops/ingest.d.ts +40 -0
- package/dist/ops/ingest.d.ts.map +1 -0
- package/dist/ops/ingest.js +434 -0
- package/dist/ops/ingest.js.map +1 -0
- package/dist/ops/list.d.ts +9 -0
- package/dist/ops/list.d.ts.map +1 -0
- package/dist/ops/list.js +217 -0
- package/dist/ops/list.js.map +1 -0
- package/dist/ops/move.d.ts +20 -0
- package/dist/ops/move.d.ts.map +1 -0
- package/dist/ops/move.js +173 -0
- package/dist/ops/move.js.map +1 -0
- package/dist/ops/read.d.ts +9 -0
- package/dist/ops/read.d.ts.map +1 -0
- package/dist/ops/read.js +271 -0
- package/dist/ops/read.js.map +1 -0
- package/dist/ops/recall.d.ts +13 -0
- package/dist/ops/recall.d.ts.map +1 -0
- package/dist/ops/recall.js +297 -0
- package/dist/ops/recall.js.map +1 -0
- package/dist/ops/remember.d.ts +34 -0
- package/dist/ops/remember.d.ts.map +1 -0
- package/dist/ops/remember.js +660 -0
- package/dist/ops/remember.js.map +1 -0
- package/dist/ops/timeline.d.ts +11 -0
- package/dist/ops/timeline.d.ts.map +1 -0
- package/dist/ops/timeline.js +111 -0
- package/dist/ops/timeline.js.map +1 -0
- package/dist/ops/undo.d.ts +9 -0
- package/dist/ops/undo.d.ts.map +1 -0
- package/dist/ops/undo.js +38 -0
- package/dist/ops/undo.js.map +1 -0
- package/dist/ops/write.d.ts +55 -0
- package/dist/ops/write.d.ts.map +1 -0
- package/dist/ops/write.js +463 -0
- package/dist/ops/write.js.map +1 -0
- package/dist/recall/assemble.d.ts +81 -0
- package/dist/recall/assemble.d.ts.map +1 -0
- package/dist/recall/assemble.js +603 -0
- package/dist/recall/assemble.js.map +1 -0
- package/dist/recall/expand.d.ts +55 -0
- package/dist/recall/expand.d.ts.map +1 -0
- package/dist/recall/expand.js +282 -0
- package/dist/recall/expand.js.map +1 -0
- package/dist/recall/graph-arm.d.ts +17 -0
- package/dist/recall/graph-arm.d.ts.map +1 -0
- package/dist/recall/graph-arm.js +227 -0
- package/dist/recall/graph-arm.js.map +1 -0
- package/dist/recall/llm-rerank.d.ts +55 -0
- package/dist/recall/llm-rerank.d.ts.map +1 -0
- package/dist/recall/llm-rerank.js +213 -0
- package/dist/recall/llm-rerank.js.map +1 -0
- package/dist/recall/reranker-calibration.d.ts +23 -0
- package/dist/recall/reranker-calibration.d.ts.map +1 -0
- package/dist/recall/reranker-calibration.js +161 -0
- package/dist/recall/reranker-calibration.js.map +1 -0
- package/dist/recall/search.d.ts +107 -0
- package/dist/recall/search.d.ts.map +1 -0
- package/dist/recall/search.js +530 -0
- package/dist/recall/search.js.map +1 -0
- package/dist/reserved.d.ts +39 -0
- package/dist/reserved.d.ts.map +1 -0
- package/dist/reserved.js +63 -0
- package/dist/reserved.js.map +1 -0
- package/dist/rules/compile.d.ts +27 -0
- package/dist/rules/compile.d.ts.map +1 -0
- package/dist/rules/compile.js +105 -0
- package/dist/rules/compile.js.map +1 -0
- package/dist/setup/model-free.d.ts +15 -0
- package/dist/setup/model-free.d.ts.map +1 -0
- package/dist/setup/model-free.js +26 -0
- package/dist/setup/model-free.js.map +1 -0
- package/dist/setup/openai.d.ts +46 -0
- package/dist/setup/openai.d.ts.map +1 -0
- package/dist/setup/openai.js +165 -0
- package/dist/setup/openai.js.map +1 -0
- package/dist/store/db.d.ts +61 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +265 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/ids.d.ts +29 -0
- package/dist/store/ids.d.ts.map +1 -0
- package/dist/store/ids.js +0 -0
- package/dist/store/ids.js.map +1 -0
- package/dist/store/migrations.d.ts +54 -0
- package/dist/store/migrations.d.ts.map +1 -0
- package/dist/store/migrations.js +923 -0
- package/dist/store/migrations.js.map +1 -0
- package/dist/store/vectors.d.ts +34 -0
- package/dist/store/vectors.d.ts.map +1 -0
- package/dist/store/vectors.js +158 -0
- package/dist/store/vectors.js.map +1 -0
- package/dist/timeline/documents.d.ts +23 -0
- package/dist/timeline/documents.d.ts.map +1 -0
- package/dist/timeline/documents.js +262 -0
- package/dist/timeline/documents.js.map +1 -0
- package/dist/watch/watcher.d.ts +43 -0
- package/dist/watch/watcher.d.ts.map +1 -0
- package/dist/watch/watcher.js +143 -0
- package/dist/watch/watcher.js.map +1 -0
- package/dist/write/atomic.d.ts +34 -0
- package/dist/write/atomic.d.ts.map +1 -0
- package/dist/write/atomic.js +58 -0
- package/dist/write/atomic.js.map +1 -0
- package/dist/write/conflict.d.ts +43 -0
- package/dist/write/conflict.d.ts.map +1 -0
- package/dist/write/conflict.js +149 -0
- package/dist/write/conflict.js.map +1 -0
- package/dist/write/edit.d.ts +59 -0
- package/dist/write/edit.d.ts.map +1 -0
- package/dist/write/edit.js +231 -0
- package/dist/write/edit.js.map +1 -0
- package/dist/write/gate.d.ts +59 -0
- package/dist/write/gate.d.ts.map +1 -0
- package/dist/write/gate.js +99 -0
- package/dist/write/gate.js.map +1 -0
- package/dist/write/journal.d.ts +90 -0
- package/dist/write/journal.d.ts.map +1 -0
- package/dist/write/journal.js +187 -0
- package/dist/write/journal.js.map +1 -0
- package/dist/write/ledger.d.ts +28 -0
- package/dist/write/ledger.d.ts.map +1 -0
- package/dist/write/ledger.js +141 -0
- package/dist/write/ledger.js.map +1 -0
- package/dist/write/placement.d.ts +29 -0
- package/dist/write/placement.d.ts.map +1 -0
- package/dist/write/placement.js +140 -0
- package/dist/write/placement.js.map +1 -0
- package/dist/write/remember-fallback.d.ts +18 -0
- package/dist/write/remember-fallback.d.ts.map +1 -0
- package/dist/write/remember-fallback.js +48 -0
- package/dist/write/remember-fallback.js.map +1 -0
- package/dist/write/retain.d.ts +61 -0
- package/dist/write/retain.d.ts.map +1 -0
- package/dist/write/retain.js +272 -0
- package/dist/write/retain.js.map +1 -0
- package/package.json +50 -0
- package/swift/extract.swift +232 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { parseJsonLoose } from "../models/client.js";
|
|
3
|
+
import { sha256 } from "../store/ids.js";
|
|
4
|
+
import { aknoItemId } from "../kb/page.js";
|
|
5
|
+
const SYSTEM = `You extract structure from a personal knowledge base page. Reply with JSON only.
|
|
6
|
+
|
|
7
|
+
{
|
|
8
|
+
"summary": "one or two sentences, under 200 characters, stating what this page is about and its most load-bearing values",
|
|
9
|
+
"keywords": ["up to 8 short lowercase terms someone might search for, including synonyms and aliases not literally in the text"],
|
|
10
|
+
"facts": [
|
|
11
|
+
{ "line": 11, "claim": "restate the line as one self-contained sentence", "subject": "what the claim is about", "attribute": "which property of it", "value": "the value" }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
Rules for facts:
|
|
16
|
+
- Only durable claims: values, dates, names, identifiers, decisions, preferences, stable relationships.
|
|
17
|
+
- Skip headings, questions, to-dos, speculation, and anything that reads as an aside.
|
|
18
|
+
- "line" MUST be a line number from the numbered input. Never invent one.
|
|
19
|
+
- The claim must be understandable with no other context: resolve pronouns, name the subject.
|
|
20
|
+
- subject/attribute/value may be null when the line does not decompose cleanly.
|
|
21
|
+
- Prefer fewer, better facts. An empty list is a correct answer for a page of prose.`;
|
|
22
|
+
/**
|
|
23
|
+
* The same shape the prompt above describes, in the form an endpoint can enforce.
|
|
24
|
+
*
|
|
25
|
+
* It is a mirror of the prompt and has to stay one — the prompt is what a model reads and this
|
|
26
|
+
* is what constrains what it may emit, so a field added to one and not the other is a field
|
|
27
|
+
* the model is told to produce and then forbidden from producing. Everything is deliberately
|
|
28
|
+
* permissive about *content*: `cleanFacts` still drops a fact whose line was never shown, and
|
|
29
|
+
* no grammar can express that.
|
|
30
|
+
*/
|
|
31
|
+
export const DERIVED_SCHEMA = z.object({
|
|
32
|
+
summary: z.string(),
|
|
33
|
+
keywords: z.array(z.string()),
|
|
34
|
+
facts: z.array(z.object({
|
|
35
|
+
// Plain `number`, not `int`: zod emits safe-integer `minimum`/`maximum` bounds for the
|
|
36
|
+
// latter, which are noise in a grammar. `cleanFacts` checks `Number.isInteger` anyway.
|
|
37
|
+
line: z.number(),
|
|
38
|
+
claim: z.string(),
|
|
39
|
+
subject: z.string().nullable(),
|
|
40
|
+
attribute: z.string().nullable(),
|
|
41
|
+
value: z.string().nullable(),
|
|
42
|
+
})),
|
|
43
|
+
});
|
|
44
|
+
const SUMMARY_ONLY = `Summarize a personal knowledge base page. Reply with JSON only.
|
|
45
|
+
|
|
46
|
+
{ "summary": "one or two sentences, under 200 characters, stating what this page is about and its most load-bearing values",
|
|
47
|
+
"keywords": ["up to 8 short lowercase terms someone might search for"] }`;
|
|
48
|
+
export const SUMMARY_ONLY_SCHEMA = z.object({ summary: z.string(), keywords: z.array(z.string()) });
|
|
49
|
+
/**
|
|
50
|
+
* One call per page returning summary, keywords and facts together — the model
|
|
51
|
+
* is reading the page once either way, so three calls would be three times the
|
|
52
|
+
* cost for the same tokens read (the same argument that makes naming a file nearly free).
|
|
53
|
+
*/
|
|
54
|
+
export async function derivePage(page, model, options) {
|
|
55
|
+
const empty = { summary: null, keywords: [], facts: [], error: null };
|
|
56
|
+
if (!options.summaries && !options.facts)
|
|
57
|
+
return empty;
|
|
58
|
+
if (!model.available)
|
|
59
|
+
return { ...empty, error: model.unavailableReason ?? 'derive model unavailable' };
|
|
60
|
+
// Only text above the source fence is mined. Below it is somebody else's
|
|
61
|
+
// words, and a fact extractor asserting things from a contract or an email is
|
|
62
|
+
// the failure page classes exist to prevent.
|
|
63
|
+
const mineable = mineableLines(page);
|
|
64
|
+
if (mineable.length === 0)
|
|
65
|
+
return empty;
|
|
66
|
+
const numbered = mineable.map(({ line, text }) => `${line}: ${text}`).join('\n');
|
|
67
|
+
const result = await model.chat([
|
|
68
|
+
{ role: 'system', content: SYSTEM },
|
|
69
|
+
{ role: 'user', content: `Page: ${page.slug}\nTitle: ${page.title}\n\n${numbered}` },
|
|
70
|
+
], { schema: DERIVED_SCHEMA, maxTokens: 2400 });
|
|
71
|
+
const parsed = result.ok && result.value
|
|
72
|
+
? parseJsonLoose(result.value)
|
|
73
|
+
: null;
|
|
74
|
+
if (!parsed) {
|
|
75
|
+
// A summary is the more valuable half — it is what recall shows on every card — so ask for
|
|
76
|
+
// that alone rather than losing the page entirely.
|
|
77
|
+
//
|
|
78
|
+
// **Reached by a failed call as well as an unparseable one.** It used to be unparseable-only,
|
|
79
|
+
// which meant a timeout lost the summary too — and a timeout is the likelier failure of the
|
|
80
|
+
// two on a local model, because the full request asks for a summary, keywords *and* every fact
|
|
81
|
+
// on the page at 2400 tokens, where this one asks for a summary at 400. Measured on a real
|
|
82
|
+
// 222-page base: six pages timed out and every one of them was left with no summary at all,
|
|
83
|
+
// which is precisely the outcome this fallback exists to prevent.
|
|
84
|
+
//
|
|
85
|
+
// Not attempted when the endpoint is simply not there: a second identical failure per page
|
|
86
|
+
// buys nothing and doubles the cost of a sweep that is already failing.
|
|
87
|
+
if (result.reason === 'unavailable') {
|
|
88
|
+
return { ...empty, error: result.error ?? 'derivation failed' };
|
|
89
|
+
}
|
|
90
|
+
const retry = await model.chat([
|
|
91
|
+
{ role: 'system', content: SUMMARY_ONLY },
|
|
92
|
+
{ role: 'user', content: `Page: ${page.slug}\nTitle: ${page.title}\n\n${numbered}` },
|
|
93
|
+
], { schema: SUMMARY_ONLY_SCHEMA, maxTokens: 400 });
|
|
94
|
+
const retried = retry.ok && retry.value ? parseJsonLoose(retry.value) : null;
|
|
95
|
+
if (!retried) {
|
|
96
|
+
// Report the *original* failure. "unparseable JSON" would be a lie about a timeout, and this
|
|
97
|
+
// string is what `index` prints as a warning for someone to act on.
|
|
98
|
+
return { ...empty, error: result.error ?? 'derivation returned unparseable JSON' };
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
summary: options.summaries ? cleanSummary(retried.summary) : null,
|
|
102
|
+
keywords: options.summaries ? cleanKeywords(retried.keywords) : [],
|
|
103
|
+
facts: [],
|
|
104
|
+
error: null,
|
|
105
|
+
// Says which of the two happened, because the fixes differ: a timeout wants a longer
|
|
106
|
+
// deadline or a faster model, unparseable output wants a shorter page.
|
|
107
|
+
partial: result.reason === 'timeout'
|
|
108
|
+
? 'facts were not derived — the full derivation timed out; the summary was recovered on its own'
|
|
109
|
+
: 'facts were not derived — the page is too long for the model to answer in JSON',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const byLine = new Map(mineable.map((entry) => [entry.line, { text: entry.text, itemId: entry.itemId }]));
|
|
113
|
+
return {
|
|
114
|
+
summary: options.summaries ? cleanSummary(parsed.summary) : null,
|
|
115
|
+
keywords: options.summaries ? cleanKeywords(parsed.keywords) : [],
|
|
116
|
+
facts: options.facts ? cleanFacts(parsed.facts, byLine) : [],
|
|
117
|
+
error: null,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The hash of every non-blank line of the page body, trimmed exactly as the deriver sees a
|
|
122
|
+
* line before hashing it.
|
|
123
|
+
*
|
|
124
|
+
* This is what tells "the sentence that made this claim is gone" apart from "this
|
|
125
|
+
* derivation did not repeat it" — the first is a supersession, the second is not, and the
|
|
126
|
+
* difference between retiring a fact and deleting it hangs on exactly that. Answered
|
|
127
|
+
* from the page rather than from the incoming facts, because a derivation that returns
|
|
128
|
+
* nothing at all says nothing about whether the page still says what it said.
|
|
129
|
+
*/
|
|
130
|
+
export function bodyLineHashes(page) {
|
|
131
|
+
const out = new Set();
|
|
132
|
+
for (const raw of page.lines) {
|
|
133
|
+
const text = raw.trim();
|
|
134
|
+
if (text.length > 0)
|
|
135
|
+
out.add(sha256(text));
|
|
136
|
+
}
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
export function bodyItemIds(page) {
|
|
140
|
+
return new Set(page.lines.map(aknoItemId).filter((id) => id !== null));
|
|
141
|
+
}
|
|
142
|
+
/** Lines eligible for fact mining: above the fence, non-blank, not a heading. */
|
|
143
|
+
function mineableLines(page) {
|
|
144
|
+
const out = [];
|
|
145
|
+
const fence = page.sourceFenceLine;
|
|
146
|
+
let pendingItem = null;
|
|
147
|
+
for (let i = 0; i < page.lines.length; i++) {
|
|
148
|
+
const line = page.bodyLine + i;
|
|
149
|
+
if (fence !== null && line >= fence)
|
|
150
|
+
break;
|
|
151
|
+
const text = page.lines[i].trim();
|
|
152
|
+
if (text.length === 0)
|
|
153
|
+
continue;
|
|
154
|
+
const marker = aknoItemId(text);
|
|
155
|
+
if (marker) {
|
|
156
|
+
pendingItem = marker;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (/^#{1,6}\s+/.test(text) || /^<!--.*-->$/.test(text))
|
|
160
|
+
continue;
|
|
161
|
+
out.push({ line, text, itemId: pendingItem });
|
|
162
|
+
pendingItem = null;
|
|
163
|
+
}
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
function cleanSummary(value) {
|
|
167
|
+
if (typeof value !== 'string')
|
|
168
|
+
return null;
|
|
169
|
+
const trimmed = value.trim().replace(/\s+/g, ' ');
|
|
170
|
+
if (trimmed.length === 0)
|
|
171
|
+
return null;
|
|
172
|
+
return trimmed.length > 400 ? `${trimmed.slice(0, 397)}...` : trimmed;
|
|
173
|
+
}
|
|
174
|
+
function cleanKeywords(value) {
|
|
175
|
+
if (!Array.isArray(value))
|
|
176
|
+
return [];
|
|
177
|
+
const seen = new Set();
|
|
178
|
+
for (const entry of value) {
|
|
179
|
+
if (typeof entry !== 'string')
|
|
180
|
+
continue;
|
|
181
|
+
const keyword = entry.trim().toLowerCase();
|
|
182
|
+
if (keyword.length > 1 && keyword.length <= 60)
|
|
183
|
+
seen.add(keyword);
|
|
184
|
+
if (seen.size >= 12)
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
return [...seen];
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* A hallucinated line number is the one failure mode that would break the no-hidden-storage
|
|
191
|
+
* guarantee — a fact whose source line does not say what the
|
|
192
|
+
* fact says can never be re-derived or invalidated correctly. So every fact is
|
|
193
|
+
* dropped unless its line exists in what the model was actually shown.
|
|
194
|
+
*/
|
|
195
|
+
function cleanFacts(value, byLine) {
|
|
196
|
+
if (!Array.isArray(value))
|
|
197
|
+
return [];
|
|
198
|
+
const out = [];
|
|
199
|
+
const seen = new Set();
|
|
200
|
+
for (const entry of value) {
|
|
201
|
+
if (typeof entry !== 'object' || entry === null)
|
|
202
|
+
continue;
|
|
203
|
+
const record = entry;
|
|
204
|
+
const line = Number(record.line);
|
|
205
|
+
const source = byLine.get(line);
|
|
206
|
+
if (!Number.isInteger(line) || source === undefined)
|
|
207
|
+
continue;
|
|
208
|
+
const claim = typeof record.claim === 'string' ? record.claim.trim().replace(/\s+/g, ' ') : '';
|
|
209
|
+
if (claim.length < 3 || claim.length > 500)
|
|
210
|
+
continue;
|
|
211
|
+
const key = `${line}|${claim.toLowerCase()}`;
|
|
212
|
+
if (seen.has(key))
|
|
213
|
+
continue;
|
|
214
|
+
seen.add(key);
|
|
215
|
+
out.push({
|
|
216
|
+
claim,
|
|
217
|
+
subject: optionalString(record.subject),
|
|
218
|
+
attribute: optionalString(record.attribute),
|
|
219
|
+
value: optionalString(record.value),
|
|
220
|
+
line,
|
|
221
|
+
sourceLineHash: sha256(source.text),
|
|
222
|
+
itemId: source.itemId,
|
|
223
|
+
confidence: scoreConfidence(source.text, claim, record),
|
|
224
|
+
});
|
|
225
|
+
if (out.length >= 60)
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
230
|
+
function optionalString(value) {
|
|
231
|
+
if (typeof value !== 'string')
|
|
232
|
+
return null;
|
|
233
|
+
const trimmed = value.trim();
|
|
234
|
+
return trimmed.length > 0 && trimmed.length <= 200 ? trimmed : null;
|
|
235
|
+
}
|
|
236
|
+
/** Verb-ish tokens that make a fragment read as a statement. Not linguistics —
|
|
237
|
+
* just enough to tell "Rent is 1111 EUR" from "3 March 1911". */
|
|
238
|
+
const VERBS = /\b(is|are|was|were|has|have|had|will|can|prefers|lives|costs|expires|renews|includes|owns|uses|works|covers|holds|requires|means|pays|runs|starts|ends|contains|supports|allows)\b/i;
|
|
239
|
+
/** A date with nothing attached: "3 March 1911", "5 May 1990", "2026-11-04". */
|
|
240
|
+
const BARE_DATE = /^(\d{1,2}\s+)?(january|february|march|april|may|june|july|august|september|october|november|december)?\s*\d{0,4}$|^\d{4}-\d{2}-\d{2}$/i;
|
|
241
|
+
const HEDGES = [
|
|
242
|
+
'probably',
|
|
243
|
+
'maybe',
|
|
244
|
+
'might',
|
|
245
|
+
'could be',
|
|
246
|
+
'i think',
|
|
247
|
+
'not sure',
|
|
248
|
+
'unclear',
|
|
249
|
+
'tbd',
|
|
250
|
+
'todo',
|
|
251
|
+
'approximately',
|
|
252
|
+
'roughly',
|
|
253
|
+
'around',
|
|
254
|
+
'unconfirmed',
|
|
255
|
+
'allegedly',
|
|
256
|
+
'seems',
|
|
257
|
+
'apparently',
|
|
258
|
+
'possibly',
|
|
259
|
+
];
|
|
260
|
+
/**
|
|
261
|
+
* Confidence answers one narrow question: how sure is the deriver that
|
|
262
|
+
* this line states a well-formed, *durable* claim? Not whether the claim is
|
|
263
|
+
* true.
|
|
264
|
+
*
|
|
265
|
+
* How confidence should be produced is genuinely open, and it is worth noting
|
|
266
|
+
* that a model self-reporting certainty is famously badly calibrated. So this is
|
|
267
|
+
* built from cheap structural signals instead — hedge words, a resolvable
|
|
268
|
+
* subject, whether the line is a complete statement, whether it carries a value
|
|
269
|
+
* worth pinning. Deterministic, explainable, and free.
|
|
270
|
+
*/
|
|
271
|
+
export function scoreConfidence(sourceText, claim, record = {}) {
|
|
272
|
+
let score = 0.62;
|
|
273
|
+
const lower = sourceText.toLowerCase();
|
|
274
|
+
const claimWords = claim.trim().split(/\s+/).filter(Boolean);
|
|
275
|
+
// A hedge is the author saying they are not sure. Believe them.
|
|
276
|
+
if (HEDGES.some((hedge) => lower.includes(hedge)))
|
|
277
|
+
score -= 0.28;
|
|
278
|
+
// A question is not a claim.
|
|
279
|
+
if (sourceText.trimEnd().endsWith('?'))
|
|
280
|
+
score -= 0.3;
|
|
281
|
+
// An unchecked task is an intention, not a fact.
|
|
282
|
+
if (/^\s*[-*]\s*\[ \]/.test(sourceText))
|
|
283
|
+
score -= 0.25;
|
|
284
|
+
// A structured `- **Key:** value` line is the strongest signal a knowledge
|
|
285
|
+
// base gives that someone meant to record a value.
|
|
286
|
+
if (/^\s*[-*]\s*\*?\*?[A-Z][^:]{1,40}:?\*?\*?\s*[:|]\s*\S/.test(sourceText))
|
|
287
|
+
score += 0.14;
|
|
288
|
+
// A number, date, currency or identifier — where conflicts are real and
|
|
289
|
+
// detectable, and where a wrong value actually costs something.
|
|
290
|
+
if (/\d/.test(sourceText))
|
|
291
|
+
score += 0.08;
|
|
292
|
+
if (/\d{4}-\d{2}-\d{2}|[€$£]\s?\d|\b\d+(?:[.,]\d+)?\s?(?:%|eur|usd|gbp|kg|km|months?|years?)\b/i.test(sourceText)) {
|
|
293
|
+
score += 0.07;
|
|
294
|
+
}
|
|
295
|
+
// A decomposed claim means the deriver could name what the value belongs to.
|
|
296
|
+
if (typeof record.subject === 'string' && record.subject.trim().length > 0)
|
|
297
|
+
score += 0.06;
|
|
298
|
+
if (typeof record.attribute === 'string' && record.attribute.trim().length > 0)
|
|
299
|
+
score += 0.04;
|
|
300
|
+
// A claim far longer than its source is the deriver adding, not restating.
|
|
301
|
+
if (claim.length > sourceText.length * 2.5 + 40)
|
|
302
|
+
score -= 0.12;
|
|
303
|
+
// A very short source line rarely stands on its own.
|
|
304
|
+
if (sourceText.trim().length < 12)
|
|
305
|
+
score -= 0.15;
|
|
306
|
+
// The question is whether the line states a **well-formed** durable claim, and a claim
|
|
307
|
+
// that is not a sentence cannot be one however well-formed its source is. This
|
|
308
|
+
// matters more than it looks: a markdown table row (`| UTILITIES | 2 | ... |`)
|
|
309
|
+
// and a bold-key line (`- **Warranty:** five years`) both trip every
|
|
310
|
+
// structural signal above, so a deriver that answers with the *label* rather
|
|
311
|
+
// than the claim was scoring 0.86 on a single word.
|
|
312
|
+
// A `Key: value` claim is self-contained at any length — the key *is* the
|
|
313
|
+
// subject — so the word-count penalty must not bury "Capacity: 2.5 L".
|
|
314
|
+
const hasKey = /^[A-Z][^:]{1,40}:\s*\S/.test(claim);
|
|
315
|
+
if (!hasKey) {
|
|
316
|
+
if (claimWords.length < 3)
|
|
317
|
+
score -= 0.34;
|
|
318
|
+
else if (claimWords.length === 3)
|
|
319
|
+
score -= 0.16;
|
|
320
|
+
}
|
|
321
|
+
// A bare label — one capitalized word, or a shouted table header — is the
|
|
322
|
+
// fragment case even when it is long enough to pass the word count.
|
|
323
|
+
if (/^[A-Z][A-Za-z]*$/.test(claim.trim()) || /^[A-Z][A-Z\s]+$/.test(claim.trim()))
|
|
324
|
+
score -= 0.2;
|
|
325
|
+
// No verb-like token and no value means there is nothing being asserted.
|
|
326
|
+
if (claimWords.length < 6 && !/\d/.test(claim) && !VERBS.test(claim))
|
|
327
|
+
score -= 0.12;
|
|
328
|
+
// A claim with no *subject* is not self-contained however well-formed it looks.
|
|
329
|
+
// Two shapes: a bare date or measurement with nothing it belongs to, and a
|
|
330
|
+
// predicate starting with a lowercase verb where the subject was dropped.
|
|
331
|
+
// A `Key: value` line is deliberately exempt — the key *is* the subject.
|
|
332
|
+
if (!hasKey) {
|
|
333
|
+
if (/^[\d\s,.:/–—-]+$/.test(claim) || BARE_DATE.test(claim))
|
|
334
|
+
score -= 0.3;
|
|
335
|
+
else if (/^[a-z]+\s/.test(claim) && VERBS.test(claimWords[0] ?? ''))
|
|
336
|
+
score -= 0.22;
|
|
337
|
+
}
|
|
338
|
+
return Math.round(Math.max(0.05, Math.min(0.98, score)) * 100) / 100;
|
|
339
|
+
}
|
|
340
|
+
const DOCUMENT_SUMMARY = `Summarize a document stored in a personal knowledge base — a bill, a contract, a
|
|
341
|
+
scan, a receipt. Reply with JSON only.
|
|
342
|
+
|
|
343
|
+
{ "summary": "one or two sentences, under 200 characters, saying what this document is and its most
|
|
344
|
+
load-bearing values: who issued it, what it covers, amounts, dates, identifiers" }
|
|
345
|
+
|
|
346
|
+
The text may be OCR output with errors in it, and may be only the first pages of a longer document. Summarize
|
|
347
|
+
what is there. Do not guess at what is missing.`;
|
|
348
|
+
export const DOCUMENT_SUMMARY_SCHEMA = z.object({ summary: z.string() });
|
|
349
|
+
/**
|
|
350
|
+
* A stored document has extracted text, a summary and embeddings of its own.
|
|
351
|
+
*
|
|
352
|
+
* One summary per *document*, not per file: a passport split into `passport.pdf` and
|
|
353
|
+
* `passport-2.pdf` is one thing, and two half-summaries describe neither. The caller joins
|
|
354
|
+
* the parts' text before calling, so what is summarized is the whole document.
|
|
355
|
+
*/
|
|
356
|
+
export async function summarizeDocument(text, model) {
|
|
357
|
+
if (!model.available)
|
|
358
|
+
return { summary: null, error: model.unavailableReason ?? 'derive model unavailable' };
|
|
359
|
+
// Enough to say what a document is without paying for a 40-page contract: the opening
|
|
360
|
+
// pages of a document are where it identifies itself. A second, shorter attempt follows a
|
|
361
|
+
// reply a small model could not keep as JSON — the same trade `derivePage` makes, and the
|
|
362
|
+
// difference between a document with a summary and one without.
|
|
363
|
+
for (const chars of [6000, 2000]) {
|
|
364
|
+
const result = await model.chat([
|
|
365
|
+
{ role: 'system', content: DOCUMENT_SUMMARY },
|
|
366
|
+
{ role: 'user', content: text.slice(0, chars) },
|
|
367
|
+
], { schema: DOCUMENT_SUMMARY_SCHEMA, maxTokens: 300 });
|
|
368
|
+
if (!result.ok || !result.value)
|
|
369
|
+
return { summary: null, error: result.error ?? 'summary failed' };
|
|
370
|
+
const summary = cleanSummary(parseJsonLoose(result.value)?.summary);
|
|
371
|
+
if (summary)
|
|
372
|
+
return { summary, error: null };
|
|
373
|
+
}
|
|
374
|
+
// Reported rather than passed over: a document with no summary is a document that only
|
|
375
|
+
// full-text search can find, and the caller should know which ones those are.
|
|
376
|
+
return { summary: null, error: 'the model did not return a usable summary' };
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/index/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ModelClient, ModelOutcome } from '../models/client.ts';
|
|
2
|
+
import type { ReasoningEffort } from '../config/schema.ts';
|
|
3
|
+
import type { Store } from '../store/db.ts';
|
|
4
|
+
import type { EntityNameSignal } from './graph.ts';
|
|
5
|
+
export declare const CONTEXTUAL_ENTITY_PROMPT_VERSION = "entity-context-v1";
|
|
6
|
+
export interface ContextualEntityCandidate {
|
|
7
|
+
entityId: string;
|
|
8
|
+
label: string;
|
|
9
|
+
type: string;
|
|
10
|
+
slug: string;
|
|
11
|
+
context: string;
|
|
12
|
+
sourceHash: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ContextualEntityCase {
|
|
15
|
+
mention: string;
|
|
16
|
+
normalized: string;
|
|
17
|
+
signal: EntityNameSignal;
|
|
18
|
+
sourcePage: string;
|
|
19
|
+
sourceField: string;
|
|
20
|
+
sourceLine: number | null;
|
|
21
|
+
sourceHash: string;
|
|
22
|
+
sourceLabel: string;
|
|
23
|
+
sourceContext: string;
|
|
24
|
+
candidates: ContextualEntityCandidate[];
|
|
25
|
+
}
|
|
26
|
+
export interface ContextualEntityJudgment {
|
|
27
|
+
outcome: 'resolved' | 'unresolved';
|
|
28
|
+
selectedEntity: string | null;
|
|
29
|
+
grades: Record<string, 0 | 1 | 2 | 3>;
|
|
30
|
+
rationale: string;
|
|
31
|
+
}
|
|
32
|
+
export interface CachedContextualResolution {
|
|
33
|
+
entityId: string;
|
|
34
|
+
fingerprint: string;
|
|
35
|
+
modelId: string;
|
|
36
|
+
promptVersion: string;
|
|
37
|
+
confidence: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ContextualResolutionReport {
|
|
40
|
+
considered: number;
|
|
41
|
+
resolved: number;
|
|
42
|
+
abstained: number;
|
|
43
|
+
cached: number;
|
|
44
|
+
failed: number;
|
|
45
|
+
warnings: string[];
|
|
46
|
+
}
|
|
47
|
+
export interface ContextualMentionInput {
|
|
48
|
+
mention: string;
|
|
49
|
+
normalized: string;
|
|
50
|
+
signal: EntityNameSignal;
|
|
51
|
+
sourcePage: string;
|
|
52
|
+
sourceField: string;
|
|
53
|
+
sourceLine: number | null;
|
|
54
|
+
sourceHash: string;
|
|
55
|
+
candidates: string[];
|
|
56
|
+
}
|
|
57
|
+
/** The same fail-closed judge is used by indexing and the invented benchmark. */
|
|
58
|
+
export declare function judgeContextualEntityCase(model: ModelClient, input: ContextualEntityCase, options?: {
|
|
59
|
+
reasoningEffort?: ReasoningEffort;
|
|
60
|
+
}): Promise<ModelOutcome<ContextualEntityJudgment>>;
|
|
61
|
+
export declare function resolveContextualEntityMentions(store: Store, model: ModelClient, options: {
|
|
62
|
+
maxCandidates: number;
|
|
63
|
+
maxMentions: number;
|
|
64
|
+
reasoningEffort?: ReasoningEffort;
|
|
65
|
+
}): Promise<ContextualResolutionReport>;
|
|
66
|
+
/** Apply only a current cached verdict. This synchronous path keeps graph rebuild atomic. */
|
|
67
|
+
export declare function cachedContextualEntityResolution(store: Store, input: ContextualMentionInput, modelId: string | null): CachedContextualResolution | null;
|
|
68
|
+
//# sourceMappingURL=entity-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-resolution.d.ts","sourceRoot":"","sources":["../../src/index/entity-resolution.ts"],"names":[],"mappings":"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"}
|