wiki-graph-core 0.3.1
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 +201 -0
- package/data/editor/clue_reviewer.jinja +410 -0
- package/data/editor/clue_reviewer_generator.jinja +428 -0
- package/data/editor/revision_feedback.jinja +5 -0
- package/data/editor/text_compressor.jinja +127 -0
- package/data/guaranteed/response_intent_classifier.jinja +8 -0
- package/data/help/commands/archive/next.jinja +29 -0
- package/data/help/commands/gc.jinja +38 -0
- package/data/help/commands/legacy/migrate.jinja +20 -0
- package/data/help/commands/legacy.jinja +19 -0
- package/data/help/commands/maintenance/chapter/add.jinja +41 -0
- package/data/help/commands/maintenance/chapter/list.jinja +33 -0
- package/data/help/commands/maintenance/chapter/move.jinja +36 -0
- package/data/help/commands/maintenance/chapter/remove.jinja +26 -0
- package/data/help/commands/maintenance/chapter/reset.jinja +29 -0
- package/data/help/commands/maintenance/chapter/set-source.jinja +34 -0
- package/data/help/commands/maintenance/chapter/set-summary.jinja +31 -0
- package/data/help/commands/maintenance/chapter/set-title.jinja +29 -0
- package/data/help/commands/maintenance/chapter/tree.jinja +58 -0
- package/data/help/commands/maintenance/chapter.jinja +59 -0
- package/data/help/commands/maintenance/cover.jinja +28 -0
- package/data/help/commands/maintenance/meta.jinja +55 -0
- package/data/help/commands/predicate.jinja +460 -0
- package/data/help/commands/root.jinja +83 -0
- package/data/help/commands/transform.jinja +34 -0
- package/data/help/commands/uri.jinja +274 -0
- package/data/help/topics/config.jinja +88 -0
- package/data/help/topics/format.jinja +72 -0
- package/data/help/topics/readiness.jinja +99 -0
- package/data/help/topics/recipe.jinja +151 -0
- package/data/help/topics/runtime.jinja +62 -0
- package/data/help/topics/uri.jinja +178 -0
- package/data/output/epub/cover.xhtml.jinja +13 -0
- package/data/output/epub/nav.xhtml.jinja +12 -0
- package/data/output/epub/package.opf.xml.jinja +39 -0
- package/data/output/epub/section.xhtml.jinja +12 -0
- package/data/topologization/book_coherence_extraction.jinja +223 -0
- package/data/topologization/chunk_extraction.jinja +233 -0
- package/data/topologization/evidence_choice.jinja +38 -0
- package/data/topologization/translate_chunks.jinja +138 -0
- package/data/topologization/user_focused_extraction.jinja +378 -0
- package/dist/archive/query/archive-view.d.ts +26 -0
- package/dist/archive/query/archive-view.js +4540 -0
- package/dist/archive/query/archive-view.js.map +1 -0
- package/dist/archive/query/continuation-cursor.d.ts +61 -0
- package/dist/archive/query/continuation-cursor.js +363 -0
- package/dist/archive/query/continuation-cursor.js.map +1 -0
- package/dist/archive/query/index.d.ts +29 -0
- package/dist/archive/query/index.js +63 -0
- package/dist/archive/query/index.js.map +1 -0
- package/dist/archive/query/lexical-search.d.ts +22 -0
- package/dist/archive/query/lexical-search.js +137 -0
- package/dist/archive/query/lexical-search.js.map +1 -0
- package/dist/archive/query/search-cache.d.ts +192 -0
- package/dist/archive/query/search-cache.js +1248 -0
- package/dist/archive/query/search-cache.js.map +1 -0
- package/dist/archive/search-index/index.d.ts +26 -0
- package/dist/archive/search-index/index.js +29 -0
- package/dist/archive/search-index/index.js.map +1 -0
- package/dist/archive/search-index/search-index.d.ts +26 -0
- package/dist/archive/search-index/search-index.js +555 -0
- package/dist/archive/search-index/search-index.js.map +1 -0
- package/dist/archive/search-index/search-tokenizer.d.ts +16 -0
- package/dist/archive/search-index/search-tokenizer.js +225 -0
- package/dist/archive/search-index/search-tokenizer.js.map +1 -0
- package/dist/common/cli-command.d.ts +4 -0
- package/dist/common/cli-command.js +7 -0
- package/dist/common/cli-command.js.map +1 -0
- package/dist/common/data-dir.d.ts +3 -0
- package/dist/common/data-dir.js +48 -0
- package/dist/common/data-dir.js.map +1 -0
- package/dist/common/language.d.ts +55 -0
- package/dist/common/language.js +208 -0
- package/dist/common/language.js.map +1 -0
- package/dist/common/llm-scope.d.ts +19 -0
- package/dist/common/llm-scope.js +31 -0
- package/dist/common/llm-scope.js.map +1 -0
- package/dist/common/logging.d.ts +22 -0
- package/dist/common/logging.js +141 -0
- package/dist/common/logging.js.map +1 -0
- package/dist/common/template.d.ts +8 -0
- package/dist/common/template.js +54 -0
- package/dist/common/template.js.map +1 -0
- package/dist/common/tinyld-language.d.ts +6 -0
- package/dist/common/tinyld-language.js +34 -0
- package/dist/common/tinyld-language.js.map +1 -0
- package/dist/common/wiki-graph-dir.d.ts +10 -0
- package/dist/common/wiki-graph-dir.js +41 -0
- package/dist/common/wiki-graph-dir.js.map +1 -0
- package/dist/common/wiki-graph-temp.d.ts +6 -0
- package/dist/common/wiki-graph-temp.js +21 -0
- package/dist/common/wiki-graph-temp.js.map +1 -0
- package/dist/common/wiki-graph-uri.d.ts +28 -0
- package/dist/common/wiki-graph-uri.js +171 -0
- package/dist/common/wiki-graph-uri.js.map +1 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.js +13 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/task-context.d.ts +41 -0
- package/dist/context/task-context.js +111 -0
- package/dist/context/task-context.js.map +1 -0
- package/dist/document/database.d.ts +30 -0
- package/dist/document/database.js +273 -0
- package/dist/document/database.js.map +1 -0
- package/dist/document/document.d.ts +153 -0
- package/dist/document/document.js +615 -0
- package/dist/document/document.js.map +1 -0
- package/dist/document/fragments.d.ts +63 -0
- package/dist/document/fragments.js +371 -0
- package/dist/document/fragments.js.map +1 -0
- package/dist/document/index.d.ts +13 -0
- package/dist/document/index.js +62 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/schema.d.ts +8 -0
- package/dist/document/schema.js +472 -0
- package/dist/document/schema.js.map +1 -0
- package/dist/document/shared-state-database.d.ts +9 -0
- package/dist/document/shared-state-database.js +193 -0
- package/dist/document/shared-state-database.js.map +1 -0
- package/dist/document/stores.d.ts +203 -0
- package/dist/document/stores.js +1678 -0
- package/dist/document/stores.js.map +1 -0
- package/dist/document/text-streams.d.ts +86 -0
- package/dist/document/text-streams.js +515 -0
- package/dist/document/text-streams.js.map +1 -0
- package/dist/document/types.d.ts +148 -0
- package/dist/document/types.js +69 -0
- package/dist/document/types.js.map +1 -0
- package/dist/editor/clue.d.ts +27 -0
- package/dist/editor/clue.js +158 -0
- package/dist/editor/clue.js.map +1 -0
- package/dist/editor/compressor.d.ts +18 -0
- package/dist/editor/compressor.js +68 -0
- package/dist/editor/compressor.js.map +1 -0
- package/dist/editor/editor.d.ts +39 -0
- package/dist/editor/editor.js +253 -0
- package/dist/editor/editor.js.map +1 -0
- package/dist/editor/feedback.d.ts +16 -0
- package/dist/editor/feedback.js +104 -0
- package/dist/editor/feedback.js.map +1 -0
- package/dist/editor/index.d.ts +17 -0
- package/dist/editor/index.js +5 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/language-review.d.ts +14 -0
- package/dist/editor/language-review.js +35 -0
- package/dist/editor/language-review.js.map +1 -0
- package/dist/editor/log.d.ts +37 -0
- package/dist/editor/log.js +202 -0
- package/dist/editor/log.js.map +1 -0
- package/dist/editor/markup.d.ts +20 -0
- package/dist/editor/markup.js +294 -0
- package/dist/editor/markup.js.map +1 -0
- package/dist/editor/prompt-templates.d.ts +6 -0
- package/dist/editor/prompt-templates.js +11 -0
- package/dist/editor/prompt-templates.js.map +1 -0
- package/dist/editor/response.d.ts +5 -0
- package/dist/editor/response.js +31 -0
- package/dist/editor/response.js.map +1 -0
- package/dist/editor/review.d.ts +34 -0
- package/dist/editor/review.js +189 -0
- package/dist/editor/review.js.map +1 -0
- package/dist/editor/types.d.ts +31 -0
- package/dist/editor/types.js +21 -0
- package/dist/editor/types.js.map +1 -0
- package/dist/evidence-selection/anchor-resolver.d.ts +43 -0
- package/dist/evidence-selection/anchor-resolver.js +783 -0
- package/dist/evidence-selection/anchor-resolver.js.map +1 -0
- package/dist/evidence-selection/anchor-types.d.ts +27 -0
- package/dist/evidence-selection/anchor-types.js +1 -0
- package/dist/evidence-selection/anchor-types.js.map +1 -0
- package/dist/evidence-selection/index.d.ts +8 -0
- package/dist/evidence-selection/index.js +32 -0
- package/dist/evidence-selection/index.js.map +1 -0
- package/dist/evidence-selection/prompt.d.ts +18 -0
- package/dist/evidence-selection/prompt.js +54 -0
- package/dist/evidence-selection/prompt.js.map +1 -0
- package/dist/evidence-selection/quote-score.d.ts +29 -0
- package/dist/evidence-selection/quote-score.js +331 -0
- package/dist/evidence-selection/quote-score.js.map +1 -0
- package/dist/evidence-selection/selection-resolver.d.ts +19 -0
- package/dist/evidence-selection/selection-resolver.js +303 -0
- package/dist/evidence-selection/selection-resolver.js.map +1 -0
- package/dist/evidence-selection/text.d.ts +4 -0
- package/dist/evidence-selection/text.js +66 -0
- package/dist/evidence-selection/text.js.map +1 -0
- package/dist/evidence-selection/types.d.ts +36 -0
- package/dist/evidence-selection/types.js +1 -0
- package/dist/evidence-selection/types.js.map +1 -0
- package/dist/facade/app.d.ts +75 -0
- package/dist/facade/app.js +141 -0
- package/dist/facade/app.js.map +1 -0
- package/dist/facade/build-queue.d.ts +181 -0
- package/dist/facade/build-queue.js +1442 -0
- package/dist/facade/build-queue.js.map +1 -0
- package/dist/facade/chapter-build.d.ts +60 -0
- package/dist/facade/chapter-build.js +1020 -0
- package/dist/facade/chapter-build.js.map +1 -0
- package/dist/facade/chapter.d.ts +168 -0
- package/dist/facade/chapter.js +944 -0
- package/dist/facade/chapter.js.map +1 -0
- package/dist/facade/digest.d.ts +55 -0
- package/dist/facade/digest.js +168 -0
- package/dist/facade/digest.js.map +1 -0
- package/dist/facade/graph.d.ts +60 -0
- package/dist/facade/graph.js +203 -0
- package/dist/facade/graph.js.map +1 -0
- package/dist/facade/import.d.ts +49 -0
- package/dist/facade/import.js +262 -0
- package/dist/facade/import.js.map +1 -0
- package/dist/facade/index.d.ts +39 -0
- package/dist/facade/index.js +171 -0
- package/dist/facade/index.js.map +1 -0
- package/dist/facade/knowledge-graph-build.d.ts +75 -0
- package/dist/facade/knowledge-graph-build.js +897 -0
- package/dist/facade/knowledge-graph-build.js.map +1 -0
- package/dist/facade/llm-sampling.d.ts +11 -0
- package/dist/facade/llm-sampling.js +58 -0
- package/dist/facade/llm-sampling.js.map +1 -0
- package/dist/facade/types.d.ts +8 -0
- package/dist/facade/types.js +1 -0
- package/dist/facade/types.js.map +1 -0
- package/dist/facade/wiki-graph-archive.d.ts +41 -0
- package/dist/facade/wiki-graph-archive.js +130 -0
- package/dist/facade/wiki-graph-archive.js.map +1 -0
- package/dist/gc/files.d.ts +15 -0
- package/dist/gc/files.js +141 -0
- package/dist/gc/files.js.map +1 -0
- package/dist/gc/index.d.ts +2 -0
- package/dist/gc/index.js +5 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/gc/lock.d.ts +3 -0
- package/dist/gc/lock.js +137 -0
- package/dist/gc/lock.js.map +1 -0
- package/dist/gc/runner.d.ts +9 -0
- package/dist/gc/runner.js +129 -0
- package/dist/gc/runner.js.map +1 -0
- package/dist/gc/tmp-gc.d.ts +5 -0
- package/dist/gc/tmp-gc.js +57 -0
- package/dist/gc/tmp-gc.js.map +1 -0
- package/dist/gc/types.d.ts +24 -0
- package/dist/gc/types.js +1 -0
- package/dist/gc/types.js.map +1 -0
- package/dist/gc.cjs +10041 -0
- package/dist/gc.cjs.map +1 -0
- package/dist/gc.d.cts +10 -0
- package/dist/gc.d.ts +2 -0
- package/dist/gc.js +5 -0
- package/dist/gc.js.map +1 -0
- package/dist/guaranteed/classifier.d.ts +10 -0
- package/dist/guaranteed/classifier.js +88 -0
- package/dist/guaranteed/classifier.js.map +1 -0
- package/dist/guaranteed/errors.d.ts +38 -0
- package/dist/guaranteed/errors.js +73 -0
- package/dist/guaranteed/errors.js.map +1 -0
- package/dist/guaranteed/index.d.ts +7 -0
- package/dist/guaranteed/index.js +21 -0
- package/dist/guaranteed/index.js.map +1 -0
- package/dist/guaranteed/request.d.ts +8 -0
- package/dist/guaranteed/request.js +206 -0
- package/dist/guaranteed/request.js.map +1 -0
- package/dist/guaranteed/response.d.ts +12 -0
- package/dist/guaranteed/response.js +98 -0
- package/dist/guaranteed/response.js.map +1 -0
- package/dist/guaranteed/types.d.ts +20 -0
- package/dist/guaranteed/types.js +1 -0
- package/dist/guaranteed/types.js.map +1 -0
- package/dist/index-B8NNnQ8P.d.ts +424 -0
- package/dist/index.cjs +34774 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2462 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.js +168 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy-sdpub/upgrade.d.ts +7 -0
- package/dist/legacy-sdpub/upgrade.js +795 -0
- package/dist/legacy-sdpub/upgrade.js.map +1 -0
- package/dist/llm/cache.d.ts +13 -0
- package/dist/llm/cache.js +35 -0
- package/dist/llm/cache.js.map +1 -0
- package/dist/llm/client.d.ts +26 -0
- package/dist/llm/client.js +572 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/context.d.ts +22 -0
- package/dist/llm/context.js +78 -0
- package/dist/llm/context.js.map +1 -0
- package/dist/llm/errors.d.ts +7 -0
- package/dist/llm/errors.js +12 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.js +17 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/request-log.d.ts +9 -0
- package/dist/llm/request-log.js +35 -0
- package/dist/llm/request-log.js.map +1 -0
- package/dist/llm/sampling.d.ts +11 -0
- package/dist/llm/sampling.js +67 -0
- package/dist/llm/sampling.js.map +1 -0
- package/dist/llm/types.d.ts +50 -0
- package/dist/llm/types.js +1 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/output/epub/archive.d.ts +9 -0
- package/dist/output/epub/archive.js +81 -0
- package/dist/output/epub/archive.js.map +1 -0
- package/dist/output/epub/book.d.ts +15 -0
- package/dist/output/epub/book.js +76 -0
- package/dist/output/epub/book.js.map +1 -0
- package/dist/output/epub/content.d.ts +9 -0
- package/dist/output/epub/content.js +35 -0
- package/dist/output/epub/content.js.map +1 -0
- package/dist/output/epub/index.d.ts +20 -0
- package/dist/output/epub/index.js +14 -0
- package/dist/output/epub/index.js.map +1 -0
- package/dist/output/epub/model.d.ts +24 -0
- package/dist/output/epub/model.js +1 -0
- package/dist/output/epub/model.js.map +1 -0
- package/dist/output/epub/navigation.d.ts +10 -0
- package/dist/output/epub/navigation.js +39 -0
- package/dist/output/epub/navigation.js.map +1 -0
- package/dist/output/epub/package.d.ts +17 -0
- package/dist/output/epub/package.js +29 -0
- package/dist/output/epub/package.js.map +1 -0
- package/dist/output/epub/shared.d.ts +4 -0
- package/dist/output/epub/shared.js +12 -0
- package/dist/output/epub/shared.js.map +1 -0
- package/dist/output/epub/templates.d.ts +35 -0
- package/dist/output/epub/templates.js +26 -0
- package/dist/output/epub/templates.js.map +1 -0
- package/dist/output/index.d.ts +14 -0
- package/dist/output/index.js +11 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/plain-text.d.ts +18 -0
- package/dist/output/plain-text.js +56 -0
- package/dist/output/plain-text.js.map +1 -0
- package/dist/progress/index.d.ts +3 -0
- package/dist/progress/index.js +14 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/reporter.d.ts +10 -0
- package/dist/progress/reporter.js +79 -0
- package/dist/progress/reporter.js.map +1 -0
- package/dist/progress/tracker.d.ts +37 -0
- package/dist/progress/tracker.js +119 -0
- package/dist/progress/tracker.js.map +1 -0
- package/dist/progress/types.d.ts +28 -0
- package/dist/progress/types.js +1 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/reader/attention/attention.d.ts +39 -0
- package/dist/reader/attention/attention.js +123 -0
- package/dist/reader/attention/attention.js.map +1 -0
- package/dist/reader/attention/index.d.ts +9 -0
- package/dist/reader/attention/index.js +5 -0
- package/dist/reader/attention/index.js.map +1 -0
- package/dist/reader/attention/wave-reflection.d.ts +21 -0
- package/dist/reader/attention/wave-reflection.js +153 -0
- package/dist/reader/attention/wave-reflection.js.map +1 -0
- package/dist/reader/attention/working-memory.d.ts +28 -0
- package/dist/reader/attention/working-memory.js +62 -0
- package/dist/reader/attention/working-memory.js.map +1 -0
- package/dist/reader/chunk-batch/extract.d.ts +13 -0
- package/dist/reader/chunk-batch/extract.js +14 -0
- package/dist/reader/chunk-batch/extract.js.map +1 -0
- package/dist/reader/chunk-batch/extractor.d.ts +17 -0
- package/dist/reader/chunk-batch/extractor.js +337 -0
- package/dist/reader/chunk-batch/extractor.js.map +1 -0
- package/dist/reader/chunk-batch/fragment-projection.d.ts +34 -0
- package/dist/reader/chunk-batch/fragment-projection.js +94 -0
- package/dist/reader/chunk-batch/fragment-projection.js.map +1 -0
- package/dist/reader/chunk-batch/index.d.ts +12 -0
- package/dist/reader/chunk-batch/index.js +13 -0
- package/dist/reader/chunk-batch/index.js.map +1 -0
- package/dist/reader/chunk-batch/language.d.ts +9 -0
- package/dist/reader/chunk-batch/language.js +23 -0
- package/dist/reader/chunk-batch/language.js.map +1 -0
- package/dist/reader/chunk-batch/parser.d.ts +94 -0
- package/dist/reader/chunk-batch/parser.js +640 -0
- package/dist/reader/chunk-batch/parser.js.map +1 -0
- package/dist/reader/chunk-batch/prompt-templates.d.ts +6 -0
- package/dist/reader/chunk-batch/prompt-templates.js +11 -0
- package/dist/reader/chunk-batch/prompt-templates.js.map +1 -0
- package/dist/reader/chunk-batch/types.d.ts +85 -0
- package/dist/reader/chunk-batch/types.js +1 -0
- package/dist/reader/chunk-batch/types.js.map +1 -0
- package/dist/reader/index.d.ts +13 -0
- package/dist/reader/index.js +7 -0
- package/dist/reader/index.js.map +1 -0
- package/dist/reader/reader.d.ts +37 -0
- package/dist/reader/reader.js +82 -0
- package/dist/reader/reader.js.map +1 -0
- package/dist/reader/segment/index.d.ts +2 -0
- package/dist/reader/segment/index.js +5 -0
- package/dist/reader/segment/index.js.map +1 -0
- package/dist/reader/segment/intl-segmenter.d.ts +5 -0
- package/dist/reader/segment/intl-segmenter.js +102 -0
- package/dist/reader/segment/intl-segmenter.js.map +1 -0
- package/dist/reader/segment/segment.d.ts +5 -0
- package/dist/reader/segment/segment.js +9 -0
- package/dist/reader/segment/segment.js.map +1 -0
- package/dist/reader/segment/types.d.ts +14 -0
- package/dist/reader/segment/types.js +1 -0
- package/dist/reader/segment/types.js.map +1 -0
- package/dist/reader/types.d.ts +29 -0
- package/dist/reader/types.js +1 -0
- package/dist/reader/types.js.map +1 -0
- package/dist/serial.d.ts +89 -0
- package/dist/serial.js +476 -0
- package/dist/serial.js.map +1 -0
- package/dist/source/adapter.d.ts +15 -0
- package/dist/source/adapter.js +1 -0
- package/dist/source/adapter.js.map +1 -0
- package/dist/source/epub/archive.d.ts +27 -0
- package/dist/source/epub/archive.js +189 -0
- package/dist/source/epub/archive.js.map +1 -0
- package/dist/source/epub/content.d.ts +22 -0
- package/dist/source/epub/content.js +183 -0
- package/dist/source/epub/content.js.map +1 -0
- package/dist/source/epub/document.d.ts +55 -0
- package/dist/source/epub/document.js +179 -0
- package/dist/source/epub/document.js.map +1 -0
- package/dist/source/epub/index.d.ts +10 -0
- package/dist/source/epub/index.js +6 -0
- package/dist/source/epub/index.js.map +1 -0
- package/dist/source/epub/navigation.d.ts +16 -0
- package/dist/source/epub/navigation.js +215 -0
- package/dist/source/epub/navigation.js.map +1 -0
- package/dist/source/epub/package.d.ts +33 -0
- package/dist/source/epub/package.js +237 -0
- package/dist/source/epub/package.js.map +1 -0
- package/dist/source/epub/xml.d.ts +16 -0
- package/dist/source/epub/xml.js +111 -0
- package/dist/source/epub/xml.js.map +1 -0
- package/dist/source/index.d.ts +12 -0
- package/dist/source/index.js +32 -0
- package/dist/source/index.js.map +1 -0
- package/dist/source/meta.d.ts +30 -0
- package/dist/source/meta.js +22 -0
- package/dist/source/meta.js.map +1 -0
- package/dist/source/plain-text.d.ts +16 -0
- package/dist/source/plain-text.js +86 -0
- package/dist/source/plain-text.js.map +1 -0
- package/dist/source/toc.d.ts +16 -0
- package/dist/source/toc.js +17 -0
- package/dist/source/toc.js.map +1 -0
- package/dist/source/types.d.ts +16 -0
- package/dist/source/types.js +1 -0
- package/dist/source/types.js.map +1 -0
- package/dist/topology/grouping.d.ts +15 -0
- package/dist/topology/grouping.js +18 -0
- package/dist/topology/grouping.js.map +1 -0
- package/dist/topology/index.d.ts +21 -0
- package/dist/topology/index.js +5 -0
- package/dist/topology/index.js.map +1 -0
- package/dist/topology/resource-segmentation.d.ts +13 -0
- package/dist/topology/resource-segmentation.js +111 -0
- package/dist/topology/resource-segmentation.js.map +1 -0
- package/dist/topology/segment-incision.d.ts +18 -0
- package/dist/topology/segment-incision.js +197 -0
- package/dist/topology/segment-incision.js.map +1 -0
- package/dist/topology/snake-detector.d.ts +13 -0
- package/dist/topology/snake-detector.js +520 -0
- package/dist/topology/snake-detector.js.map +1 -0
- package/dist/topology/snake-graph-builder.d.ts +14 -0
- package/dist/topology/snake-graph-builder.js +76 -0
- package/dist/topology/snake-graph-builder.js.map +1 -0
- package/dist/topology/topology.d.ts +29 -0
- package/dist/topology/topology.js +348 -0
- package/dist/topology/topology.js.map +1 -0
- package/dist/topology/weights.d.ts +10 -0
- package/dist/topology/weights.js +84 -0
- package/dist/topology/weights.js.map +1 -0
- package/dist/types-FVIqiLC9.d.cts +24 -0
- package/dist/utils/async-semaphore.d.ts +7 -0
- package/dist/utils/async-semaphore.js +40 -0
- package/dist/utils/async-semaphore.js.map +1 -0
- package/dist/utils/enum.d.ts +5 -0
- package/dist/utils/enum.js +18 -0
- package/dist/utils/enum.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.js +132 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/node-error.d.ts +4 -0
- package/dist/utils/node-error.js +59 -0
- package/dist/utils/node-error.js.map +1 -0
- package/dist/wikg/archive-uri.d.ts +1 -0
- package/dist/wikg/archive-uri.js +37 -0
- package/dist/wikg/archive-uri.js.map +1 -0
- package/dist/wikg/archive.d.ts +28 -0
- package/dist/wikg/archive.js +496 -0
- package/dist/wikg/archive.js.map +1 -0
- package/dist/wikg/index.d.ts +31 -0
- package/dist/wikg/index.js +60 -0
- package/dist/wikg/index.js.map +1 -0
- package/dist/wikg/wikg-coordinator.d.ts +45 -0
- package/dist/wikg/wikg-coordinator.js +1687 -0
- package/dist/wikg/wikg-coordinator.js.map +1 -0
- package/dist/wikg/wiki-graph-archive-file.d.ts +42 -0
- package/dist/wikg/wiki-graph-archive-file.js +78 -0
- package/dist/wikg/wiki-graph-archive-file.js.map +1 -0
- package/dist/wikilink/index.d.ts +10 -0
- package/dist/wikilink/index.js +7 -0
- package/dist/wikilink/index.js.map +1 -0
- package/dist/wikilink/relation-discovery.d.ts +31 -0
- package/dist/wikilink/relation-discovery.js +477 -0
- package/dist/wikilink/relation-discovery.js.map +1 -0
- package/dist/wikilink/types.d.ts +23 -0
- package/dist/wikilink/types.js +1 -0
- package/dist/wikilink/types.js.map +1 -0
- package/dist/wikilink/window.d.ts +7 -0
- package/dist/wikilink/window.js +53 -0
- package/dist/wikilink/window.js.map +1 -0
- package/dist/wikimatch/enrichment.d.ts +10 -0
- package/dist/wikimatch/enrichment.js +55 -0
- package/dist/wikimatch/enrichment.js.map +1 -0
- package/dist/wikimatch/index.d.ts +16 -0
- package/dist/wikimatch/index.js +66 -0
- package/dist/wikimatch/index.js.map +1 -0
- package/dist/wikimatch/option-narrowing.d.ts +17 -0
- package/dist/wikimatch/option-narrowing.js +208 -0
- package/dist/wikimatch/option-narrowing.js.map +1 -0
- package/dist/wikimatch/options.d.ts +14 -0
- package/dist/wikimatch/options.js +155 -0
- package/dist/wikimatch/options.js.map +1 -0
- package/dist/wikimatch/policy-judge.d.ts +17 -0
- package/dist/wikimatch/policy-judge.js +430 -0
- package/dist/wikimatch/policy-judge.js.map +1 -0
- package/dist/wikimatch/range-suppression.d.ts +9 -0
- package/dist/wikimatch/range-suppression.js +27 -0
- package/dist/wikimatch/range-suppression.js.map +1 -0
- package/dist/wikimatch/surface-screening.d.ts +16 -0
- package/dist/wikimatch/surface-screening.js +168 -0
- package/dist/wikimatch/surface-screening.js.map +1 -0
- package/dist/wikimatch/surface-window.d.ts +6 -0
- package/dist/wikimatch/surface-window.js +44 -0
- package/dist/wikimatch/surface-window.js.map +1 -0
- package/dist/wikimatch/types.d.ts +151 -0
- package/dist/wikimatch/types.js +1 -0
- package/dist/wikimatch/types.js.map +1 -0
- package/dist/wikimatch/wikispine.d.ts +43 -0
- package/dist/wikimatch/wikispine.js +399 -0
- package/dist/wikimatch/wikispine.js.map +1 -0
- package/dist/wikimatch/window.d.ts +6 -0
- package/dist/wikimatch/window.js +83 -0
- package/dist/wikimatch/window.js.map +1 -0
- package/dist/wikimatch/words.d.ts +16 -0
- package/dist/wikimatch/words.js +66 -0
- package/dist/wikimatch/words.js.map +1 -0
- package/dist/wikipage/cache.d.ts +18 -0
- package/dist/wikipage/cache.js +404 -0
- package/dist/wikipage/cache.js.map +1 -0
- package/dist/wikipage/fetch-log.d.ts +17 -0
- package/dist/wikipage/fetch-log.js +143 -0
- package/dist/wikipage/fetch-log.js.map +1 -0
- package/dist/wikipage/index.d.ts +14 -0
- package/dist/wikipage/index.js +17 -0
- package/dist/wikipage/index.js.map +1 -0
- package/dist/wikipage/normalizer.d.ts +14 -0
- package/dist/wikipage/normalizer.js +147 -0
- package/dist/wikipage/normalizer.js.map +1 -0
- package/dist/wikipage/rate-limiter.d.ts +13 -0
- package/dist/wikipage/rate-limiter.js +84 -0
- package/dist/wikipage/rate-limiter.js.map +1 -0
- package/dist/wikipage/resolver.d.ts +26 -0
- package/dist/wikipage/resolver.js +325 -0
- package/dist/wikipage/resolver.js.map +1 -0
- package/dist/wikipage/types.d.ts +96 -0
- package/dist/wikipage/types.js +1 -0
- package/dist/wikipage/types.js.map +1 -0
- package/dist/wikipage/wikimedia-client.d.ts +48 -0
- package/dist/wikipage/wikimedia-client.js +397 -0
- package/dist/wikipage/wikimedia-client.js.map +1 -0
- package/dist/worker-BgQ0Xl8T.d.cts +181 -0
- package/dist/worker.cjs +5259 -0
- package/dist/worker.cjs.map +1 -0
- package/dist/worker.d.cts +2 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.js +5 -0
- package/dist/worker.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/evidence-selection/quote-score.ts"],"sourcesContent":["const EXACT_SCORE = 1;\nconst NORMALIZED_EXACT_SCORE = 0.995;\nconst SUBSTRING_BASE_SCORE = 0.95;\nconst SUBSTRING_COVERAGE_BONUS = 0.04;\nconst FUZZY_MIN_WINDOW_RATIO = 0.72;\nconst FUZZY_MAX_WINDOW_RATIO = 2.25;\nconst UNORDERED_PENALTY_THRESHOLD = 0.75;\nconst LOW_ORDERED_PENALTY_THRESHOLD = 0.45;\n\nconst CASE_FOLDING_OVERRIDES = new Map<string, string>([\n [\"ß\", \"ss\"],\n [\"ẞ\", \"ss\"],\n [\"ς\", \"σ\"],\n]);\n\nexport type EvidenceQuoteMatchStrategy =\n | \"empty\"\n | \"exact\"\n | \"normalized_exact\"\n | \"normalized_substring\"\n | \"fuzzy_window\";\n\nexport interface EvidenceQuoteScore {\n readonly exactRaw: boolean;\n readonly exactNormalized: boolean;\n readonly exactSubstring: boolean;\n readonly matchEnd: number;\n readonly matchStart: number;\n readonly normalizedQuote: string;\n readonly normalizedSentence: string;\n readonly score: number;\n readonly strategy: EvidenceQuoteMatchStrategy;\n}\n\nexport interface PreparedEvidenceQuote {\n readonly normalizedQuote: string;\n readonly quoteRaw: string;\n}\n\nexport function normalizeEvidenceDisplayText(text: string): string {\n return text\n .replace(/\\p{Default_Ignorable_Code_Point}/gu, \"\")\n .normalize(\"NFKC\")\n .replace(/\\s+/gu, \" \")\n .trim();\n}\n\nexport function normalizeEvidenceText(text: string): string {\n const separated = replaceSeparatorsWithSpace(text);\n const stripped = separated.replace(/\\p{Default_Ignorable_Code_Point}/gu, \"\");\n const compatible = stripped.normalize(\"NFKC\");\n const folded = caseFold(compatible);\n const decomposed = folded.normalize(\"NFD\").replace(/\\p{M}/gu, \"\");\n const reseparated = replaceSeparatorsWithSpace(decomposed);\n\n return reseparated.replace(/ +/gu, \" \").trim();\n}\n\nexport function scoreEvidenceQuote(input: {\n readonly quote: string;\n readonly sentence: string;\n}): EvidenceQuoteScore {\n return scorePreparedEvidenceQuote({\n preparedQuote: prepareEvidenceQuote(input.quote),\n sentence: input.sentence,\n });\n}\n\nexport function prepareEvidenceQuote(quote: string): PreparedEvidenceQuote {\n const quoteRaw = stripMarkup(quote).trim();\n\n return {\n normalizedQuote: normalizeEvidenceText(quoteRaw),\n quoteRaw,\n };\n}\n\nexport function scorePreparedEvidenceQuote(input: {\n readonly preparedQuote: PreparedEvidenceQuote;\n readonly sentence: string;\n}): EvidenceQuoteScore {\n const { normalizedQuote, quoteRaw } = input.preparedQuote;\n const sentenceRaw = stripMarkup(input.sentence).trim();\n const normalizedSentence = normalizeEvidenceText(sentenceRaw);\n\n if (normalizedQuote === \"\" || normalizedSentence === \"\") {\n return createEmptyScore(normalizedQuote, normalizedSentence);\n }\n\n if (quoteRaw === sentenceRaw) {\n return {\n exactNormalized: true,\n exactRaw: true,\n exactSubstring: true,\n matchEnd: normalizedSentence.length,\n matchStart: 0,\n normalizedQuote,\n normalizedSentence,\n score: EXACT_SCORE,\n strategy: \"exact\",\n };\n }\n\n if (normalizedQuote === normalizedSentence) {\n return {\n exactNormalized: true,\n exactRaw: false,\n exactSubstring: true,\n matchEnd: normalizedSentence.length,\n matchStart: 0,\n normalizedQuote,\n normalizedSentence,\n score: NORMALIZED_EXACT_SCORE,\n strategy: \"normalized_exact\",\n };\n }\n\n const substringStart = normalizedSentence.indexOf(normalizedQuote);\n\n if (substringStart !== -1) {\n const coverage =\n normalizedQuote.length / Math.max(1, normalizedSentence.length);\n\n return {\n exactNormalized: false,\n exactRaw: false,\n exactSubstring: true,\n matchEnd: substringStart + normalizedQuote.length,\n matchStart: substringStart,\n normalizedQuote,\n normalizedSentence,\n score: Math.min(\n 0.99,\n SUBSTRING_BASE_SCORE + SUBSTRING_COVERAGE_BONUS * coverage,\n ),\n strategy: \"normalized_substring\",\n };\n }\n\n return scoreBestFuzzyWindow(normalizedQuote, normalizedSentence);\n}\n\nfunction scoreBestFuzzyWindow(\n normalizedQuote: string,\n normalizedSentence: string,\n): EvidenceQuoteScore {\n const minWindow = Math.max(\n 1,\n Math.floor(normalizedQuote.length * FUZZY_MIN_WINDOW_RATIO),\n );\n const maxWindow = Math.min(\n normalizedSentence.length,\n Math.max(\n minWindow,\n Math.ceil(normalizedQuote.length * FUZZY_MAX_WINDOW_RATIO),\n ),\n );\n let best: EvidenceQuoteScore = createEmptyScore(\n normalizedQuote,\n normalizedSentence,\n );\n\n for (let windowSize = minWindow; windowSize <= maxWindow; windowSize += 1) {\n for (\n let start = 0;\n start <= normalizedSentence.length - windowSize;\n start += 1\n ) {\n const window = normalizedSentence.slice(start, start + windowSize);\n const score = scoreWindow(normalizedQuote, window);\n\n if (score <= best.score) {\n continue;\n }\n\n best = {\n exactNormalized: false,\n exactRaw: false,\n exactSubstring: false,\n matchEnd: start + windowSize,\n matchStart: start,\n normalizedQuote,\n normalizedSentence,\n score,\n strategy: \"fuzzy_window\",\n };\n }\n }\n\n return best;\n}\n\nfunction scoreWindow(quote: string, window: string): number {\n const editScore = levenshteinSimilarity(quote, window);\n const substringScore = longestCommonSubstringScore(quote, window);\n const subsequenceScore = longestCommonSubsequenceScore(quote, window);\n const orderedCoverageScore = orderedCoverage(quote, window);\n const ngramScore = charNgramScore(quote, window);\n const lengthScore = lengthSimilarity(quote, window);\n const unorderedScore = unorderedCharOverlapScore(quote, window);\n const orderedScore = Math.max(\n editScore,\n substringScore,\n subsequenceScore,\n orderedCoverageScore,\n );\n let score =\n 0.2 * editScore +\n 0.18 * substringScore +\n 0.24 * subsequenceScore +\n 0.2 * orderedCoverageScore +\n 0.08 * ngramScore +\n 0.05 * lengthScore +\n 0.05 * unorderedScore;\n\n if (\n unorderedScore >= UNORDERED_PENALTY_THRESHOLD &&\n orderedScore < LOW_ORDERED_PENALTY_THRESHOLD\n ) {\n score *= 0.65;\n }\n\n return Math.max(0, Math.min(1, score));\n}\n\nfunction normalizeScalar(char: string): string {\n return CASE_FOLDING_OVERRIDES.get(char) ?? char.toLocaleLowerCase(\"und\");\n}\n\nfunction caseFold(text: string): string {\n let folded = \"\";\n\n for (const char of text) {\n folded += normalizeScalar(char);\n }\n\n return folded;\n}\n\nfunction replaceSeparatorsWithSpace(text: string): string {\n let output = \"\";\n\n for (const char of text) {\n output += isPreservedSymbol(char) || !isSeparator(char) ? char : \" \";\n }\n\n return output;\n}\n\nfunction isPreservedSymbol(char: string): boolean {\n return char === \"+\" || char === \"#\" || char === \"&\";\n}\n\nfunction isSeparator(char: string): boolean {\n return (\n /\\s/u.test(char) ||\n /\\p{Separator}/u.test(char) ||\n /[\\p{Dash_Punctuation}\\p{Connector_Punctuation}\\p{Initial_Punctuation}\\p{Final_Punctuation}\\p{Open_Punctuation}\\p{Close_Punctuation}\\p{Other_Punctuation}]/u.test(\n char,\n ) ||\n /[\\\\/.。.。、,,::;;!!??·・•|]/u.test(char)\n );\n}\n\nfunction stripMarkup(text: string): string {\n return text.replace(/<\\/?(?:mention|quote)\\b[^>]*>/giu, \"\");\n}\n\nfunction createEmptyScore(\n normalizedQuote: string,\n normalizedSentence: string,\n): EvidenceQuoteScore {\n return {\n exactNormalized: false,\n exactRaw: false,\n exactSubstring: false,\n matchEnd: -1,\n matchStart: -1,\n normalizedQuote,\n normalizedSentence,\n score: 0,\n strategy: \"empty\",\n };\n}\n\nfunction charNgramScore(left: string, right: string): number {\n const bigramScore = diceCoefficient(\n charNgrams(left, 2),\n charNgrams(right, 2),\n );\n const trigramScore = diceCoefficient(\n charNgrams(left, 3),\n charNgrams(right, 3),\n );\n\n return (bigramScore + trigramScore) / 2;\n}\n\nfunction charNgrams(text: string, size: number): ReadonlySet<string> {\n if (text.length <= size) {\n return text === \"\" ? new Set() : new Set([text]);\n }\n\n const result = new Set<string>();\n\n for (let index = 0; index <= text.length - size; index += 1) {\n result.add(text.slice(index, index + size));\n }\n\n return result;\n}\n\nfunction diceCoefficient(\n left: ReadonlySet<string>,\n right: ReadonlySet<string>,\n): number {\n if (left.size === 0 || right.size === 0) {\n return 0;\n }\n\n let overlap = 0;\n\n for (const value of left) {\n if (right.has(value)) {\n overlap += 1;\n }\n }\n\n return (2 * overlap) / (left.size + right.size);\n}\n\nfunction lengthSimilarity(left: string, right: string): number {\n return (\n 1 -\n Math.abs(left.length - right.length) / Math.max(left.length, right.length)\n );\n}\n\nfunction levenshteinSimilarity(left: string, right: string): number {\n if (left === right) {\n return 1;\n }\n if (left === \"\" || right === \"\") {\n return 0;\n }\n\n let previous = Array.from({ length: right.length + 1 }, (_, index) => index);\n let current = new Array<number>(right.length + 1).fill(0);\n const leftChars = [...left];\n const rightChars = [...right];\n\n for (const [leftIndex, leftChar] of leftChars.entries()) {\n current[0] = leftIndex + 1;\n\n for (const [rightIndex, rightChar] of rightChars.entries()) {\n const insertCost = (current[rightIndex] ?? 0) + 1;\n const deleteCost = (previous[rightIndex + 1] ?? 0) + 1;\n const replaceCost =\n (previous[rightIndex] ?? 0) + (leftChar === rightChar ? 0 : 1);\n\n current[rightIndex + 1] = Math.min(insertCost, deleteCost, replaceCost);\n }\n\n [previous, current] = [current, previous];\n }\n\n const distance =\n previous[rightChars.length] ?? Math.max(left.length, right.length);\n\n return 1 - distance / Math.max(left.length, right.length);\n}\n\nfunction longestCommonSubstringScore(left: string, right: string): number {\n if (left === \"\" || right === \"\") {\n return 0;\n }\n\n const leftChars = [...left];\n const rightChars = [...right];\n let previous = new Array<number>(rightChars.length + 1).fill(0);\n let current = new Array<number>(rightChars.length + 1).fill(0);\n let longest = 0;\n\n for (let leftIndex = 1; leftIndex <= leftChars.length; leftIndex += 1) {\n for (let rightIndex = 1; rightIndex <= rightChars.length; rightIndex += 1) {\n current[rightIndex] =\n leftChars[leftIndex - 1] === rightChars[rightIndex - 1]\n ? (previous[rightIndex - 1] ?? 0) + 1\n : 0;\n longest = Math.max(longest, current[rightIndex] ?? 0);\n }\n\n [previous, current] = [current, previous];\n current.fill(0);\n }\n\n return (2 * longest) / (leftChars.length + rightChars.length);\n}\n\nfunction longestCommonSubsequenceScore(left: string, right: string): number {\n if (left === \"\" || right === \"\") {\n return 0;\n }\n\n const leftChars = [...left];\n const rightChars = [...right];\n let previous = new Array<number>(rightChars.length + 1).fill(0);\n let current = new Array<number>(rightChars.length + 1).fill(0);\n\n for (let leftIndex = 1; leftIndex <= leftChars.length; leftIndex += 1) {\n for (let rightIndex = 1; rightIndex <= rightChars.length; rightIndex += 1) {\n current[rightIndex] =\n leftChars[leftIndex - 1] === rightChars[rightIndex - 1]\n ? (previous[rightIndex - 1] ?? 0) + 1\n : Math.max(previous[rightIndex] ?? 0, current[rightIndex - 1] ?? 0);\n }\n\n [previous, current] = [current, previous];\n current.fill(0);\n }\n\n const longest = previous[rightChars.length] ?? 0;\n\n return (2 * longest) / (leftChars.length + rightChars.length);\n}\n\nfunction orderedCoverage(left: string, right: string): number {\n if (left === \"\" || right === \"\") {\n return 0;\n }\n\n const leftChars = [...left];\n const rightChars = [...right];\n let previous = new Array<number>(rightChars.length + 1).fill(0);\n let current = new Array<number>(rightChars.length + 1).fill(0);\n\n for (let leftIndex = 1; leftIndex <= leftChars.length; leftIndex += 1) {\n for (let rightIndex = 1; rightIndex <= rightChars.length; rightIndex += 1) {\n current[rightIndex] =\n leftChars[leftIndex - 1] === rightChars[rightIndex - 1]\n ? (previous[rightIndex - 1] ?? 0) + 1\n : Math.max(previous[rightIndex] ?? 0, current[rightIndex - 1] ?? 0);\n }\n\n [previous, current] = [current, previous];\n current.fill(0);\n }\n\n return (previous[rightChars.length] ?? 0) / leftChars.length;\n}\n\nfunction unorderedCharOverlapScore(left: string, right: string): number {\n const leftCounts = countChars(left);\n const rightCounts = countChars(right);\n let overlap = 0;\n let total = 0;\n\n for (const [char, leftCount] of leftCounts) {\n const rightCount = rightCounts.get(char) ?? 0;\n\n overlap += Math.min(leftCount, rightCount);\n total += leftCount;\n }\n\n return total === 0 ? 0 : overlap / total;\n}\n\nfunction countChars(text: string): Map<string, number> {\n const counts = new Map<string, number>();\n\n for (const char of text) {\n counts.set(char, (counts.get(char) ?? 0) + 1);\n }\n\n return counts;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EvidenceSelectionSentence, EvidenceSelectionCandidate, EvidenceSelection, EvidenceSelectionResolution, EvidenceSelectionFailure, EvidenceSelectionList } from './types.js';
|
|
2
|
+
|
|
3
|
+
declare function resolveEvidenceSelection(input: {
|
|
4
|
+
readonly evidence: EvidenceSelection;
|
|
5
|
+
readonly sentences: readonly EvidenceSelectionSentence[];
|
|
6
|
+
}): readonly [
|
|
7
|
+
resolution: EvidenceSelectionResolution | undefined,
|
|
8
|
+
failure: EvidenceSelectionFailure | undefined
|
|
9
|
+
];
|
|
10
|
+
declare function resolveEvidenceSelectionList(input: {
|
|
11
|
+
readonly evidence: EvidenceSelectionList;
|
|
12
|
+
readonly sentences: readonly EvidenceSelectionSentence[];
|
|
13
|
+
}): readonly [
|
|
14
|
+
resolution: EvidenceSelectionResolution | undefined,
|
|
15
|
+
failure: EvidenceSelectionFailure | undefined
|
|
16
|
+
];
|
|
17
|
+
declare function rankEvidenceQuote(quote: string, sentences: readonly EvidenceSelectionSentence[]): EvidenceSelectionCandidate[];
|
|
18
|
+
|
|
19
|
+
export { rankEvidenceQuote, resolveEvidenceSelection, resolveEvidenceSelectionList };
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import {
|
|
2
|
+
normalizeEvidenceDisplayText,
|
|
3
|
+
prepareEvidenceQuote,
|
|
4
|
+
scorePreparedEvidenceQuote
|
|
5
|
+
} from "./quote-score.js";
|
|
6
|
+
import { splitTextIntoSentences } from "./text.js";
|
|
7
|
+
const DIRECT_ID_MIN_SCORE = 0.72;
|
|
8
|
+
const DIRECT_ID_SUBSTRING_MIN_SCORE = 0.95;
|
|
9
|
+
const AUTO_TOP_MIN_SCORE = 0.72;
|
|
10
|
+
const AUTO_TOP_MIN_GAP = 0.15;
|
|
11
|
+
const LOW_CONFIDENCE_MAX_SCORE = 0.45;
|
|
12
|
+
const MAX_CANDIDATES = 5;
|
|
13
|
+
function resolveEvidenceSelection(input) {
|
|
14
|
+
const quote = normalizeQuote(input.evidence.quote);
|
|
15
|
+
const sentenceId = normalizeSentenceId(input.evidence.sentence_id);
|
|
16
|
+
let directCandidateById;
|
|
17
|
+
if (quote === "") {
|
|
18
|
+
return [
|
|
19
|
+
void 0,
|
|
20
|
+
{
|
|
21
|
+
candidates: [],
|
|
22
|
+
code: "invalid",
|
|
23
|
+
message: "Evidence quote is missing or empty."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
const preparedQuote = prepareEvidenceQuote(quote);
|
|
28
|
+
if (sentenceId !== void 0) {
|
|
29
|
+
const directIndex = input.sentences.findIndex(
|
|
30
|
+
(sentence) => sentence.id === sentenceId
|
|
31
|
+
);
|
|
32
|
+
const directSentence = input.sentences[directIndex];
|
|
33
|
+
if (directSentence !== void 0) {
|
|
34
|
+
const directCandidate = createCandidate({
|
|
35
|
+
index: directIndex,
|
|
36
|
+
scored: scorePreparedEvidenceQuote({
|
|
37
|
+
preparedQuote,
|
|
38
|
+
sentence: directSentence.text
|
|
39
|
+
}),
|
|
40
|
+
sentence: directSentence,
|
|
41
|
+
sentences: input.sentences
|
|
42
|
+
});
|
|
43
|
+
directCandidateById = directCandidate;
|
|
44
|
+
if (isDirectExactCandidateTrusted(directCandidate)) {
|
|
45
|
+
return [
|
|
46
|
+
{
|
|
47
|
+
candidate: directCandidate,
|
|
48
|
+
confidence: directCandidate.score,
|
|
49
|
+
sentenceIds: [directCandidate.sentence.sentenceId],
|
|
50
|
+
strategy: `sentence_id+${directCandidate.strategy}`
|
|
51
|
+
},
|
|
52
|
+
void 0
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const candidates = rankTopEvidenceQuoteCandidates(
|
|
58
|
+
preparedQuote,
|
|
59
|
+
input.sentences,
|
|
60
|
+
MAX_CANDIDATES
|
|
61
|
+
);
|
|
62
|
+
if (sentenceId !== void 0) {
|
|
63
|
+
const directCandidate = candidates.find((candidate) => candidate.occurrenceId === sentenceId) ?? directCandidateById;
|
|
64
|
+
const topCandidate2 = candidates[0];
|
|
65
|
+
if (directCandidate !== void 0 && topCandidate2 !== void 0 && isDirectCandidateTrusted(directCandidate, topCandidate2)) {
|
|
66
|
+
return [
|
|
67
|
+
{
|
|
68
|
+
candidate: directCandidate,
|
|
69
|
+
confidence: directCandidate.score,
|
|
70
|
+
sentenceIds: [directCandidate.sentence.sentenceId],
|
|
71
|
+
strategy: `sentence_id+${directCandidate.strategy}`
|
|
72
|
+
},
|
|
73
|
+
void 0
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const topCandidate = candidates[0];
|
|
78
|
+
if (topCandidate === void 0) {
|
|
79
|
+
return [
|
|
80
|
+
void 0,
|
|
81
|
+
{
|
|
82
|
+
candidates: [],
|
|
83
|
+
code: "none",
|
|
84
|
+
message: "Evidence quote could not be matched: no candidates available."
|
|
85
|
+
}
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
const secondScore = candidates[1]?.score ?? 0;
|
|
89
|
+
const gap = topCandidate.score - secondScore;
|
|
90
|
+
const boundaryHint = formatSentenceBoundaryHint(quote);
|
|
91
|
+
if (topCandidate.score < LOW_CONFIDENCE_MAX_SCORE) {
|
|
92
|
+
return [
|
|
93
|
+
void 0,
|
|
94
|
+
{
|
|
95
|
+
candidates: candidates.slice(0, MAX_CANDIDATES),
|
|
96
|
+
code: "low_confidence",
|
|
97
|
+
message: `Evidence quote could not be matched confidently. Best candidate score=${topCandidate.score.toFixed(3)}.` + boundaryHint
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
if (topCandidate.score >= AUTO_TOP_MIN_SCORE && gap >= AUTO_TOP_MIN_GAP) {
|
|
102
|
+
return [
|
|
103
|
+
{
|
|
104
|
+
candidate: topCandidate,
|
|
105
|
+
confidence: topCandidate.score,
|
|
106
|
+
sentenceIds: [topCandidate.sentence.sentenceId],
|
|
107
|
+
strategy: `quote_auto_top1:${topCandidate.strategy}`
|
|
108
|
+
},
|
|
109
|
+
void 0
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
return [
|
|
113
|
+
void 0,
|
|
114
|
+
{
|
|
115
|
+
candidates: candidates.slice(0, MAX_CANDIDATES),
|
|
116
|
+
code: "ambiguous",
|
|
117
|
+
message: "Evidence quote is ambiguous. Choose one candidate occurrence ID." + boundaryHint
|
|
118
|
+
}
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
function formatSentenceBoundaryHint(quote) {
|
|
122
|
+
if (splitTextIntoSentences(quote).length <= 1) {
|
|
123
|
+
return "";
|
|
124
|
+
}
|
|
125
|
+
return " Evidence quote appears to contain more than one sentence. Each evidence item must stay within one source sentence. Recheck whether this evidence should be shortened, split into multiple evidence items, or removed.";
|
|
126
|
+
}
|
|
127
|
+
function resolveEvidenceSelectionList(input) {
|
|
128
|
+
const selections = normalizeEvidenceSelectionList(input.evidence);
|
|
129
|
+
if (selections.length === 0) {
|
|
130
|
+
return [
|
|
131
|
+
void 0,
|
|
132
|
+
{
|
|
133
|
+
candidates: [],
|
|
134
|
+
code: "invalid",
|
|
135
|
+
message: "Evidence selection list is empty."
|
|
136
|
+
}
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
const sentenceIds = [];
|
|
140
|
+
const strategies = [];
|
|
141
|
+
let confidence = 1;
|
|
142
|
+
let candidate;
|
|
143
|
+
for (const selection of selections) {
|
|
144
|
+
const [resolution, failure] = resolveEvidenceSelection({
|
|
145
|
+
evidence: selection,
|
|
146
|
+
sentences: input.sentences
|
|
147
|
+
});
|
|
148
|
+
if (failure !== void 0) {
|
|
149
|
+
return [void 0, failure];
|
|
150
|
+
}
|
|
151
|
+
if (resolution === void 0) {
|
|
152
|
+
return [
|
|
153
|
+
void 0,
|
|
154
|
+
{
|
|
155
|
+
candidates: [],
|
|
156
|
+
code: "none",
|
|
157
|
+
message: "Evidence selection could not be resolved."
|
|
158
|
+
}
|
|
159
|
+
];
|
|
160
|
+
}
|
|
161
|
+
candidate ??= resolution.candidate;
|
|
162
|
+
confidence = Math.min(confidence, resolution.confidence);
|
|
163
|
+
sentenceIds.push(...resolution.sentenceIds);
|
|
164
|
+
strategies.push(resolution.strategy);
|
|
165
|
+
}
|
|
166
|
+
if (candidate === void 0) {
|
|
167
|
+
return [
|
|
168
|
+
void 0,
|
|
169
|
+
{
|
|
170
|
+
candidates: [],
|
|
171
|
+
code: "none",
|
|
172
|
+
message: "Evidence selection could not be resolved."
|
|
173
|
+
}
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
return [
|
|
177
|
+
{
|
|
178
|
+
candidate,
|
|
179
|
+
confidence,
|
|
180
|
+
sentenceIds: uniqueSentenceIds(sentenceIds),
|
|
181
|
+
strategy: `list:${strategies.join(",")}`
|
|
182
|
+
},
|
|
183
|
+
void 0
|
|
184
|
+
];
|
|
185
|
+
}
|
|
186
|
+
function normalizeEvidenceSelectionList(evidence) {
|
|
187
|
+
if (isEvidenceSelectionArray(evidence)) {
|
|
188
|
+
return evidence;
|
|
189
|
+
}
|
|
190
|
+
return [evidence];
|
|
191
|
+
}
|
|
192
|
+
function isEvidenceSelectionArray(evidence) {
|
|
193
|
+
return Array.isArray(evidence);
|
|
194
|
+
}
|
|
195
|
+
function rankEvidenceQuote(quote, sentences) {
|
|
196
|
+
const preparedQuote = prepareEvidenceQuote(quote);
|
|
197
|
+
return sentences.map((sentence, index) => {
|
|
198
|
+
const scored = scorePreparedEvidenceQuote({
|
|
199
|
+
preparedQuote,
|
|
200
|
+
sentence: sentence.text
|
|
201
|
+
});
|
|
202
|
+
return createCandidate({
|
|
203
|
+
index,
|
|
204
|
+
scored,
|
|
205
|
+
sentence,
|
|
206
|
+
sentences
|
|
207
|
+
});
|
|
208
|
+
}).sort(compareCandidates);
|
|
209
|
+
}
|
|
210
|
+
function rankTopEvidenceQuoteCandidates(preparedQuote, sentences, limit) {
|
|
211
|
+
const candidates = [];
|
|
212
|
+
for (const [index, sentence] of sentences.entries()) {
|
|
213
|
+
const scored = scorePreparedEvidenceQuote({
|
|
214
|
+
preparedQuote,
|
|
215
|
+
sentence: sentence.text
|
|
216
|
+
});
|
|
217
|
+
const candidate = createCandidate({
|
|
218
|
+
index,
|
|
219
|
+
scored,
|
|
220
|
+
sentence,
|
|
221
|
+
sentences
|
|
222
|
+
});
|
|
223
|
+
insertCandidate(candidates, candidate, limit);
|
|
224
|
+
}
|
|
225
|
+
return candidates;
|
|
226
|
+
}
|
|
227
|
+
function insertCandidate(candidates, candidate, limit) {
|
|
228
|
+
const insertAt = candidates.findIndex(
|
|
229
|
+
(item) => compareCandidates(candidate, item) < 0
|
|
230
|
+
);
|
|
231
|
+
if (insertAt === -1) {
|
|
232
|
+
if (candidates.length < limit) {
|
|
233
|
+
candidates.push(candidate);
|
|
234
|
+
}
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
candidates.splice(insertAt, 0, candidate);
|
|
238
|
+
if (candidates.length > limit) {
|
|
239
|
+
candidates.pop();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function createCandidate(input) {
|
|
243
|
+
return {
|
|
244
|
+
exactNormalized: input.scored.exactNormalized,
|
|
245
|
+
exactRaw: input.scored.exactRaw,
|
|
246
|
+
exactSubstring: input.scored.exactSubstring,
|
|
247
|
+
index: input.index,
|
|
248
|
+
nextText: input.sentences[input.index + 1]?.text ?? "",
|
|
249
|
+
occurrenceId: input.sentence.id,
|
|
250
|
+
prevText: input.sentences[input.index - 1]?.text ?? "",
|
|
251
|
+
score: input.scored.score,
|
|
252
|
+
sentence: input.sentence,
|
|
253
|
+
strategy: input.scored.strategy
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function compareCandidates(left, right) {
|
|
257
|
+
if (left.score !== right.score) {
|
|
258
|
+
return right.score - left.score;
|
|
259
|
+
}
|
|
260
|
+
if (left.exactRaw !== right.exactRaw) {
|
|
261
|
+
return left.exactRaw ? -1 : 1;
|
|
262
|
+
}
|
|
263
|
+
if (left.exactSubstring !== right.exactSubstring) {
|
|
264
|
+
return left.exactSubstring ? -1 : 1;
|
|
265
|
+
}
|
|
266
|
+
if (left.exactNormalized !== right.exactNormalized) {
|
|
267
|
+
return left.exactNormalized ? -1 : 1;
|
|
268
|
+
}
|
|
269
|
+
return left.index - right.index;
|
|
270
|
+
}
|
|
271
|
+
function isDirectCandidateTrusted(candidate, topCandidate) {
|
|
272
|
+
const trustedScore = candidate.score >= DIRECT_ID_MIN_SCORE || candidate.exactSubstring && candidate.score >= DIRECT_ID_SUBSTRING_MIN_SCORE;
|
|
273
|
+
return trustedScore && (candidate.occurrenceId === topCandidate.occurrenceId || topCandidate.score - candidate.score < AUTO_TOP_MIN_GAP);
|
|
274
|
+
}
|
|
275
|
+
function isDirectExactCandidateTrusted(candidate) {
|
|
276
|
+
return candidate.score >= DIRECT_ID_SUBSTRING_MIN_SCORE && candidate.exactSubstring;
|
|
277
|
+
}
|
|
278
|
+
function normalizeQuote(value) {
|
|
279
|
+
return normalizeEvidenceDisplayText(value ?? "");
|
|
280
|
+
}
|
|
281
|
+
function normalizeSentenceId(value) {
|
|
282
|
+
const normalized = value?.trim();
|
|
283
|
+
return normalized === "" ? void 0 : normalized;
|
|
284
|
+
}
|
|
285
|
+
function uniqueSentenceIds(sentenceIds) {
|
|
286
|
+
const seen = /* @__PURE__ */ new Set();
|
|
287
|
+
const unique = [];
|
|
288
|
+
for (const sentenceId of sentenceIds) {
|
|
289
|
+
const key = sentenceId.join(":");
|
|
290
|
+
if (seen.has(key)) {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
seen.add(key);
|
|
294
|
+
unique.push(sentenceId);
|
|
295
|
+
}
|
|
296
|
+
return unique;
|
|
297
|
+
}
|
|
298
|
+
export {
|
|
299
|
+
rankEvidenceQuote,
|
|
300
|
+
resolveEvidenceSelection,
|
|
301
|
+
resolveEvidenceSelectionList
|
|
302
|
+
};
|
|
303
|
+
//# sourceMappingURL=selection-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/evidence-selection/selection-resolver.ts"],"sourcesContent":["import {\n normalizeEvidenceDisplayText,\n prepareEvidenceQuote,\n scorePreparedEvidenceQuote,\n type PreparedEvidenceQuote,\n type EvidenceQuoteScore,\n} from \"./quote-score.js\";\nimport { splitTextIntoSentences } from \"./text.js\";\nimport type {\n EvidenceSelection,\n EvidenceSelectionCandidate,\n EvidenceSelectionFailure,\n EvidenceSelectionList,\n EvidenceSelectionResolution,\n EvidenceSelectionSentence,\n} from \"./types.js\";\n\nconst DIRECT_ID_MIN_SCORE = 0.72;\nconst DIRECT_ID_SUBSTRING_MIN_SCORE = 0.95;\nconst AUTO_TOP_MIN_SCORE = 0.72;\nconst AUTO_TOP_MIN_GAP = 0.15;\nconst LOW_CONFIDENCE_MAX_SCORE = 0.45;\nconst MAX_CANDIDATES = 5;\n\nexport function resolveEvidenceSelection(input: {\n readonly evidence: EvidenceSelection;\n readonly sentences: readonly EvidenceSelectionSentence[];\n}): readonly [\n resolution: EvidenceSelectionResolution | undefined,\n failure: EvidenceSelectionFailure | undefined,\n] {\n const quote = normalizeQuote(input.evidence.quote);\n const sentenceId = normalizeSentenceId(input.evidence.sentence_id);\n let directCandidateById: EvidenceSelectionCandidate | undefined;\n\n if (quote === \"\") {\n return [\n undefined,\n {\n candidates: [],\n code: \"invalid\",\n message: \"Evidence quote is missing or empty.\",\n },\n ];\n }\n\n const preparedQuote = prepareEvidenceQuote(quote);\n\n if (sentenceId !== undefined) {\n const directIndex = input.sentences.findIndex(\n (sentence) => sentence.id === sentenceId,\n );\n const directSentence = input.sentences[directIndex];\n\n if (directSentence !== undefined) {\n const directCandidate = createCandidate({\n index: directIndex,\n scored: scorePreparedEvidenceQuote({\n preparedQuote,\n sentence: directSentence.text,\n }),\n sentence: directSentence,\n sentences: input.sentences,\n });\n directCandidateById = directCandidate;\n\n if (isDirectExactCandidateTrusted(directCandidate)) {\n return [\n {\n candidate: directCandidate,\n confidence: directCandidate.score,\n sentenceIds: [directCandidate.sentence.sentenceId],\n strategy: `sentence_id+${directCandidate.strategy}`,\n },\n undefined,\n ];\n }\n }\n }\n\n const candidates = rankTopEvidenceQuoteCandidates(\n preparedQuote,\n input.sentences,\n MAX_CANDIDATES,\n );\n\n if (sentenceId !== undefined) {\n const directCandidate =\n candidates.find((candidate) => candidate.occurrenceId === sentenceId) ??\n directCandidateById;\n const topCandidate = candidates[0];\n\n if (\n directCandidate !== undefined &&\n topCandidate !== undefined &&\n isDirectCandidateTrusted(directCandidate, topCandidate)\n ) {\n return [\n {\n candidate: directCandidate,\n confidence: directCandidate.score,\n sentenceIds: [directCandidate.sentence.sentenceId],\n strategy: `sentence_id+${directCandidate.strategy}`,\n },\n undefined,\n ];\n }\n }\n\n const topCandidate = candidates[0];\n\n if (topCandidate === undefined) {\n return [\n undefined,\n {\n candidates: [],\n code: \"none\",\n message:\n \"Evidence quote could not be matched: no candidates available.\",\n },\n ];\n }\n\n const secondScore = candidates[1]?.score ?? 0;\n const gap = topCandidate.score - secondScore;\n const boundaryHint = formatSentenceBoundaryHint(quote);\n\n if (topCandidate.score < LOW_CONFIDENCE_MAX_SCORE) {\n return [\n undefined,\n {\n candidates: candidates.slice(0, MAX_CANDIDATES),\n code: \"low_confidence\",\n message:\n \"Evidence quote could not be matched confidently. \" +\n `Best candidate score=${topCandidate.score.toFixed(3)}.` +\n boundaryHint,\n },\n ];\n }\n\n if (topCandidate.score >= AUTO_TOP_MIN_SCORE && gap >= AUTO_TOP_MIN_GAP) {\n return [\n {\n candidate: topCandidate,\n confidence: topCandidate.score,\n sentenceIds: [topCandidate.sentence.sentenceId],\n strategy: `quote_auto_top1:${topCandidate.strategy}`,\n },\n undefined,\n ];\n }\n\n return [\n undefined,\n {\n candidates: candidates.slice(0, MAX_CANDIDATES),\n code: \"ambiguous\",\n message:\n \"Evidence quote is ambiguous. Choose one candidate occurrence ID.\" +\n boundaryHint,\n },\n ];\n}\n\nfunction formatSentenceBoundaryHint(quote: string): string {\n if (splitTextIntoSentences(quote).length <= 1) {\n return \"\";\n }\n\n return (\n \" Evidence quote appears to contain more than one sentence. \" +\n \"Each evidence item must stay within one source sentence. \" +\n \"Recheck whether this evidence should be shortened, split into multiple evidence items, or removed.\"\n );\n}\n\nexport function resolveEvidenceSelectionList(input: {\n readonly evidence: EvidenceSelectionList;\n readonly sentences: readonly EvidenceSelectionSentence[];\n}): readonly [\n resolution: EvidenceSelectionResolution | undefined,\n failure: EvidenceSelectionFailure | undefined,\n] {\n const selections = normalizeEvidenceSelectionList(input.evidence);\n\n if (selections.length === 0) {\n return [\n undefined,\n {\n candidates: [],\n code: \"invalid\",\n message: \"Evidence selection list is empty.\",\n },\n ];\n }\n\n const sentenceIds: EvidenceSelectionResolution[\"sentenceIds\"][number][] = [];\n const strategies: string[] = [];\n let confidence = 1;\n let candidate: EvidenceSelectionCandidate | undefined;\n\n for (const selection of selections) {\n const [resolution, failure] = resolveEvidenceSelection({\n evidence: selection,\n sentences: input.sentences,\n });\n\n if (failure !== undefined) {\n return [undefined, failure];\n }\n\n if (resolution === undefined) {\n return [\n undefined,\n {\n candidates: [],\n code: \"none\",\n message: \"Evidence selection could not be resolved.\",\n },\n ];\n }\n\n candidate ??= resolution.candidate;\n confidence = Math.min(confidence, resolution.confidence);\n sentenceIds.push(...resolution.sentenceIds);\n strategies.push(resolution.strategy);\n }\n\n if (candidate === undefined) {\n return [\n undefined,\n {\n candidates: [],\n code: \"none\",\n message: \"Evidence selection could not be resolved.\",\n },\n ];\n }\n\n return [\n {\n candidate,\n confidence,\n sentenceIds: uniqueSentenceIds(sentenceIds),\n strategy: `list:${strategies.join(\",\")}`,\n },\n undefined,\n ];\n}\n\nfunction normalizeEvidenceSelectionList(\n evidence: EvidenceSelectionList,\n): readonly EvidenceSelection[] {\n if (isEvidenceSelectionArray(evidence)) {\n return evidence;\n }\n\n return [evidence];\n}\n\nfunction isEvidenceSelectionArray(\n evidence: EvidenceSelectionList,\n): evidence is readonly EvidenceSelection[] {\n return Array.isArray(evidence);\n}\n\nexport function rankEvidenceQuote(\n quote: string,\n sentences: readonly EvidenceSelectionSentence[],\n): EvidenceSelectionCandidate[] {\n const preparedQuote = prepareEvidenceQuote(quote);\n\n return sentences\n .map((sentence, index) => {\n const scored = scorePreparedEvidenceQuote({\n preparedQuote,\n sentence: sentence.text,\n });\n\n return createCandidate({\n index,\n scored,\n sentence,\n sentences,\n });\n })\n .sort(compareCandidates);\n}\n\nfunction rankTopEvidenceQuoteCandidates(\n preparedQuote: PreparedEvidenceQuote,\n sentences: readonly EvidenceSelectionSentence[],\n limit: number,\n): EvidenceSelectionCandidate[] {\n const candidates: EvidenceSelectionCandidate[] = [];\n\n for (const [index, sentence] of sentences.entries()) {\n const scored = scorePreparedEvidenceQuote({\n preparedQuote,\n sentence: sentence.text,\n });\n const candidate = createCandidate({\n index,\n scored,\n sentence,\n sentences,\n });\n\n insertCandidate(candidates, candidate, limit);\n }\n\n return candidates;\n}\n\nfunction insertCandidate(\n candidates: EvidenceSelectionCandidate[],\n candidate: EvidenceSelectionCandidate,\n limit: number,\n): void {\n const insertAt = candidates.findIndex(\n (item) => compareCandidates(candidate, item) < 0,\n );\n\n if (insertAt === -1) {\n if (candidates.length < limit) {\n candidates.push(candidate);\n }\n return;\n }\n\n candidates.splice(insertAt, 0, candidate);\n\n if (candidates.length > limit) {\n candidates.pop();\n }\n}\n\nfunction createCandidate(input: {\n readonly index: number;\n readonly scored: EvidenceQuoteScore;\n readonly sentence: EvidenceSelectionSentence;\n readonly sentences: readonly EvidenceSelectionSentence[];\n}): EvidenceSelectionCandidate {\n return {\n exactNormalized: input.scored.exactNormalized,\n exactRaw: input.scored.exactRaw,\n exactSubstring: input.scored.exactSubstring,\n index: input.index,\n nextText: input.sentences[input.index + 1]?.text ?? \"\",\n occurrenceId: input.sentence.id,\n prevText: input.sentences[input.index - 1]?.text ?? \"\",\n score: input.scored.score,\n sentence: input.sentence,\n strategy: input.scored.strategy,\n };\n}\n\nfunction compareCandidates(\n left: EvidenceSelectionCandidate,\n right: EvidenceSelectionCandidate,\n): number {\n if (left.score !== right.score) {\n return right.score - left.score;\n }\n if (left.exactRaw !== right.exactRaw) {\n return left.exactRaw ? -1 : 1;\n }\n if (left.exactSubstring !== right.exactSubstring) {\n return left.exactSubstring ? -1 : 1;\n }\n if (left.exactNormalized !== right.exactNormalized) {\n return left.exactNormalized ? -1 : 1;\n }\n\n return left.index - right.index;\n}\n\nfunction isDirectCandidateTrusted(\n candidate: EvidenceSelectionCandidate,\n topCandidate: EvidenceSelectionCandidate,\n): boolean {\n const trustedScore =\n candidate.score >= DIRECT_ID_MIN_SCORE ||\n (candidate.exactSubstring &&\n candidate.score >= DIRECT_ID_SUBSTRING_MIN_SCORE);\n\n return (\n trustedScore &&\n (candidate.occurrenceId === topCandidate.occurrenceId ||\n topCandidate.score - candidate.score < AUTO_TOP_MIN_GAP)\n );\n}\n\nfunction isDirectExactCandidateTrusted(\n candidate: EvidenceSelectionCandidate,\n): boolean {\n return (\n candidate.score >= DIRECT_ID_SUBSTRING_MIN_SCORE && candidate.exactSubstring\n );\n}\n\nfunction normalizeQuote(value: string | undefined): string {\n return normalizeEvidenceDisplayText(value ?? \"\");\n}\n\nfunction normalizeSentenceId(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n\n return normalized === \"\" ? undefined : normalized;\n}\n\nfunction uniqueSentenceIds(\n sentenceIds: EvidenceSelectionResolution[\"sentenceIds\"],\n): EvidenceSelectionResolution[\"sentenceIds\"] {\n const seen = new Set<string>();\n const unique: EvidenceSelectionResolution[\"sentenceIds\"][number][] = [];\n\n for (const sentenceId of sentenceIds) {\n const key = sentenceId.join(\":\");\n\n if (seen.has(key)) {\n continue;\n }\n\n seen.add(key);\n unique.push(sentenceId);\n }\n\n return unique;\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,8BAA8B;AAUvC,MAAM,sBAAsB;AAC5B,MAAM,gCAAgC;AACtC,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,2BAA2B;AACjC,MAAM,iBAAiB;AAEhB,SAAS,yBAAyB,OAMvC;AACA,QAAM,QAAQ,eAAe,MAAM,SAAS,KAAK;AACjD,QAAM,aAAa,oBAAoB,MAAM,SAAS,WAAW;AACjE,MAAI;AAEJ,MAAI,UAAU,IAAI;AAChB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,YAAY,CAAC;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,qBAAqB,KAAK;AAEhD,MAAI,eAAe,QAAW;AAC5B,UAAM,cAAc,MAAM,UAAU;AAAA,MAClC,CAAC,aAAa,SAAS,OAAO;AAAA,IAChC;AACA,UAAM,iBAAiB,MAAM,UAAU,WAAW;AAElD,QAAI,mBAAmB,QAAW;AAChC,YAAM,kBAAkB,gBAAgB;AAAA,QACtC,OAAO;AAAA,QACP,QAAQ,2BAA2B;AAAA,UACjC;AAAA,UACA,UAAU,eAAe;AAAA,QAC3B,CAAC;AAAA,QACD,UAAU;AAAA,QACV,WAAW,MAAM;AAAA,MACnB,CAAC;AACD,4BAAsB;AAEtB,UAAI,8BAA8B,eAAe,GAAG;AAClD,eAAO;AAAA,UACL;AAAA,YACE,WAAW;AAAA,YACX,YAAY,gBAAgB;AAAA,YAC5B,aAAa,CAAC,gBAAgB,SAAS,UAAU;AAAA,YACjD,UAAU,eAAe,gBAAgB,QAAQ;AAAA,UACnD;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,IACN;AAAA,EACF;AAEA,MAAI,eAAe,QAAW;AAC5B,UAAM,kBACJ,WAAW,KAAK,CAAC,cAAc,UAAU,iBAAiB,UAAU,KACpE;AACF,UAAMA,gBAAe,WAAW,CAAC;AAEjC,QACE,oBAAoB,UACpBA,kBAAiB,UACjB,yBAAyB,iBAAiBA,aAAY,GACtD;AACA,aAAO;AAAA,QACL;AAAA,UACE,WAAW;AAAA,UACX,YAAY,gBAAgB;AAAA,UAC5B,aAAa,CAAC,gBAAgB,SAAS,UAAU;AAAA,UACjD,UAAU,eAAe,gBAAgB,QAAQ;AAAA,QACnD;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,WAAW,CAAC;AAEjC,MAAI,iBAAiB,QAAW;AAC9B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,YAAY,CAAC;AAAA,QACb,MAAM;AAAA,QACN,SACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,WAAW,CAAC,GAAG,SAAS;AAC5C,QAAM,MAAM,aAAa,QAAQ;AACjC,QAAM,eAAe,2BAA2B,KAAK;AAErD,MAAI,aAAa,QAAQ,0BAA0B;AACjD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,YAAY,WAAW,MAAM,GAAG,cAAc;AAAA,QAC9C,MAAM;AAAA,QACN,SACE,yEACwB,aAAa,MAAM,QAAQ,CAAC,CAAC,MACrD;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,MAAI,aAAa,SAAS,sBAAsB,OAAO,kBAAkB;AACvE,WAAO;AAAA,MACL;AAAA,QACE,WAAW;AAAA,QACX,YAAY,aAAa;AAAA,QACzB,aAAa,CAAC,aAAa,SAAS,UAAU;AAAA,QAC9C,UAAU,mBAAmB,aAAa,QAAQ;AAAA,MACpD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,YAAY,WAAW,MAAM,GAAG,cAAc;AAAA,MAC9C,MAAM;AAAA,MACN,SACE,qEACA;AAAA,IACJ;AAAA,EACF;AACF;AAEA,SAAS,2BAA2B,OAAuB;AACzD,MAAI,uBAAuB,KAAK,EAAE,UAAU,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,SACE;AAIJ;AAEO,SAAS,6BAA6B,OAM3C;AACA,QAAM,aAAa,+BAA+B,MAAM,QAAQ;AAEhE,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,YAAY,CAAC;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAoE,CAAC;AAC3E,QAAM,aAAuB,CAAC;AAC9B,MAAI,aAAa;AACjB,MAAI;AAEJ,aAAW,aAAa,YAAY;AAClC,UAAM,CAAC,YAAY,OAAO,IAAI,yBAAyB;AAAA,MACrD,UAAU;AAAA,MACV,WAAW,MAAM;AAAA,IACnB,CAAC;AAED,QAAI,YAAY,QAAW;AACzB,aAAO,CAAC,QAAW,OAAO;AAAA,IAC5B;AAEA,QAAI,eAAe,QAAW;AAC5B,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,YAAY,CAAC;AAAA,UACb,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,kBAAc,WAAW;AACzB,iBAAa,KAAK,IAAI,YAAY,WAAW,UAAU;AACvD,gBAAY,KAAK,GAAG,WAAW,WAAW;AAC1C,eAAW,KAAK,WAAW,QAAQ;AAAA,EACrC;AAEA,MAAI,cAAc,QAAW;AAC3B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,YAAY,CAAC;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,MACA,aAAa,kBAAkB,WAAW;AAAA,MAC1C,UAAU,QAAQ,WAAW,KAAK,GAAG,CAAC;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,+BACP,UAC8B;AAC9B,MAAI,yBAAyB,QAAQ,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,QAAQ;AAClB;AAEA,SAAS,yBACP,UAC0C;AAC1C,SAAO,MAAM,QAAQ,QAAQ;AAC/B;AAEO,SAAS,kBACd,OACA,WAC8B;AAC9B,QAAM,gBAAgB,qBAAqB,KAAK;AAEhD,SAAO,UACJ,IAAI,CAAC,UAAU,UAAU;AACxB,UAAM,SAAS,2BAA2B;AAAA,MACxC;AAAA,MACA,UAAU,SAAS;AAAA,IACrB,CAAC;AAED,WAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC,EACA,KAAK,iBAAiB;AAC3B;AAEA,SAAS,+BACP,eACA,WACA,OAC8B;AAC9B,QAAM,aAA2C,CAAC;AAElD,aAAW,CAAC,OAAO,QAAQ,KAAK,UAAU,QAAQ,GAAG;AACnD,UAAM,SAAS,2BAA2B;AAAA,MACxC;AAAA,MACA,UAAU,SAAS;AAAA,IACrB,CAAC;AACD,UAAM,YAAY,gBAAgB;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,oBAAgB,YAAY,WAAW,KAAK;AAAA,EAC9C;AAEA,SAAO;AACT;AAEA,SAAS,gBACP,YACA,WACA,OACM;AACN,QAAM,WAAW,WAAW;AAAA,IAC1B,CAAC,SAAS,kBAAkB,WAAW,IAAI,IAAI;AAAA,EACjD;AAEA,MAAI,aAAa,IAAI;AACnB,QAAI,WAAW,SAAS,OAAO;AAC7B,iBAAW,KAAK,SAAS;AAAA,IAC3B;AACA;AAAA,EACF;AAEA,aAAW,OAAO,UAAU,GAAG,SAAS;AAExC,MAAI,WAAW,SAAS,OAAO;AAC7B,eAAW,IAAI;AAAA,EACjB;AACF;AAEA,SAAS,gBAAgB,OAKM;AAC7B,SAAO;AAAA,IACL,iBAAiB,MAAM,OAAO;AAAA,IAC9B,UAAU,MAAM,OAAO;AAAA,IACvB,gBAAgB,MAAM,OAAO;AAAA,IAC7B,OAAO,MAAM;AAAA,IACb,UAAU,MAAM,UAAU,MAAM,QAAQ,CAAC,GAAG,QAAQ;AAAA,IACpD,cAAc,MAAM,SAAS;AAAA,IAC7B,UAAU,MAAM,UAAU,MAAM,QAAQ,CAAC,GAAG,QAAQ;AAAA,IACpD,OAAO,MAAM,OAAO;AAAA,IACpB,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM,OAAO;AAAA,EACzB;AACF;AAEA,SAAS,kBACP,MACA,OACQ;AACR,MAAI,KAAK,UAAU,MAAM,OAAO;AAC9B,WAAO,MAAM,QAAQ,KAAK;AAAA,EAC5B;AACA,MAAI,KAAK,aAAa,MAAM,UAAU;AACpC,WAAO,KAAK,WAAW,KAAK;AAAA,EAC9B;AACA,MAAI,KAAK,mBAAmB,MAAM,gBAAgB;AAChD,WAAO,KAAK,iBAAiB,KAAK;AAAA,EACpC;AACA,MAAI,KAAK,oBAAoB,MAAM,iBAAiB;AAClD,WAAO,KAAK,kBAAkB,KAAK;AAAA,EACrC;AAEA,SAAO,KAAK,QAAQ,MAAM;AAC5B;AAEA,SAAS,yBACP,WACA,cACS;AACT,QAAM,eACJ,UAAU,SAAS,uBAClB,UAAU,kBACT,UAAU,SAAS;AAEvB,SACE,iBACC,UAAU,iBAAiB,aAAa,gBACvC,aAAa,QAAQ,UAAU,QAAQ;AAE7C;AAEA,SAAS,8BACP,WACS;AACT,SACE,UAAU,SAAS,iCAAiC,UAAU;AAElE;AAEA,SAAS,eAAe,OAAmC;AACzD,SAAO,6BAA6B,SAAS,EAAE;AACjD;AAEA,SAAS,oBAAoB,OAA+C;AAC1E,QAAM,aAAa,OAAO,KAAK;AAE/B,SAAO,eAAe,KAAK,SAAY;AACzC;AAEA,SAAS,kBACP,aAC4C;AAC5C,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAA+D,CAAC;AAEtE,aAAW,cAAc,aAAa;AACpC,UAAM,MAAM,WAAW,KAAK,GAAG;AAE/B,QAAI,KAAK,IAAI,GAAG,GAAG;AACjB;AAAA,IACF;AAEA,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,UAAU;AAAA,EACxB;AAEA,SAAO;AACT;","names":["topCandidate"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const HYPHEN_FLAGS = /* @__PURE__ */ new Set(["\u2010", "\u2011", "\u2012", "\u2013", "\u2014", "\u2015"]);
|
|
2
|
+
const SENTENCE_SEGMENTER = new Intl.Segmenter(void 0, {
|
|
3
|
+
granularity: "sentence"
|
|
4
|
+
});
|
|
5
|
+
function splitTextIntoSentences(text) {
|
|
6
|
+
const stripped = text.trim();
|
|
7
|
+
if (stripped === "") {
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
return Array.from(SENTENCE_SEGMENTER.segment(stripped)).map((segment) => segment.segment.trim()).filter((segment) => segment !== "");
|
|
11
|
+
}
|
|
12
|
+
function normalizeText(text) {
|
|
13
|
+
const collapsed = text.replace(/\s+/gu, " ").trim();
|
|
14
|
+
const chars = processSpacesAndHyphens(collapsed);
|
|
15
|
+
let normalized = "";
|
|
16
|
+
for (const char of chars) {
|
|
17
|
+
if (isPunctuation(char)) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (!isLatinLetter(char)) {
|
|
21
|
+
normalized += char;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
normalized += char.toLowerCase().normalize("NFD").replace(new RegExp("\\p{M}", "gu"), "");
|
|
25
|
+
}
|
|
26
|
+
return normalized;
|
|
27
|
+
}
|
|
28
|
+
function processSpacesAndHyphens(text) {
|
|
29
|
+
const chars = [];
|
|
30
|
+
let index = 0;
|
|
31
|
+
while (index < text.length) {
|
|
32
|
+
const char = text[index];
|
|
33
|
+
if (char === void 0) {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
if (char !== " ") {
|
|
37
|
+
chars.push(char);
|
|
38
|
+
index += 1;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (chars.length >= 2 && HYPHEN_FLAGS.has(chars[chars.length - 1] ?? "") && isLatinLetter(chars[chars.length - 2] ?? "") && index < text.length - 1 && isLatinLetter(text[index + 1] ?? "")) {
|
|
42
|
+
chars.pop();
|
|
43
|
+
index += 1;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const previousChar = chars[chars.length - 1] ?? "";
|
|
47
|
+
const nextChar = text[index + 1] ?? "";
|
|
48
|
+
const keepSpace = previousChar !== "" && nextChar !== "" && isLatinLetter(previousChar) && isLatinLetter(nextChar);
|
|
49
|
+
if (keepSpace) {
|
|
50
|
+
chars.push(char);
|
|
51
|
+
}
|
|
52
|
+
index += 1;
|
|
53
|
+
}
|
|
54
|
+
return chars;
|
|
55
|
+
}
|
|
56
|
+
function isLatinLetter(char) {
|
|
57
|
+
return char !== "" && new RegExp("\\p{Script=Latin}", "u").test(char) && new RegExp("\\p{L}", "u").test(char);
|
|
58
|
+
}
|
|
59
|
+
function isPunctuation(char) {
|
|
60
|
+
return /[\p{P}\p{S}]/u.test(char);
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
normalizeText,
|
|
64
|
+
splitTextIntoSentences
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/evidence-selection/text.ts"],"sourcesContent":["const HYPHEN_FLAGS = new Set([\"‐\", \"‑\", \"‒\", \"–\", \"—\", \"―\"]);\nconst SENTENCE_SEGMENTER = new Intl.Segmenter(undefined, {\n granularity: \"sentence\",\n});\n\nexport function splitTextIntoSentences(text: string): string[] {\n const stripped = text.trim();\n\n if (stripped === \"\") {\n return [];\n }\n\n return Array.from(SENTENCE_SEGMENTER.segment(stripped))\n .map((segment) => segment.segment.trim())\n .filter((segment) => segment !== \"\");\n}\n\nexport function normalizeText(text: string): string {\n const collapsed = text.replace(/\\s+/gu, \" \").trim();\n const chars = processSpacesAndHyphens(collapsed);\n let normalized = \"\";\n\n for (const char of chars) {\n if (isPunctuation(char)) {\n continue;\n }\n\n if (!isLatinLetter(char)) {\n normalized += char;\n continue;\n }\n\n normalized += char.toLowerCase().normalize(\"NFD\").replace(/\\p{M}/gu, \"\");\n }\n\n return normalized;\n}\n\nfunction processSpacesAndHyphens(text: string): string[] {\n const chars: string[] = [];\n let index = 0;\n\n while (index < text.length) {\n const char = text[index];\n\n if (char === undefined) {\n break;\n }\n\n if (char !== \" \") {\n chars.push(char);\n index += 1;\n continue;\n }\n\n if (\n chars.length >= 2 &&\n HYPHEN_FLAGS.has(chars[chars.length - 1] ?? \"\") &&\n isLatinLetter(chars[chars.length - 2] ?? \"\") &&\n index < text.length - 1 &&\n isLatinLetter(text[index + 1] ?? \"\")\n ) {\n chars.pop();\n index += 1;\n continue;\n }\n\n const previousChar = chars[chars.length - 1] ?? \"\";\n const nextChar = text[index + 1] ?? \"\";\n const keepSpace =\n previousChar !== \"\" &&\n nextChar !== \"\" &&\n isLatinLetter(previousChar) &&\n isLatinLetter(nextChar);\n\n if (keepSpace) {\n chars.push(char);\n }\n\n index += 1;\n }\n\n return chars;\n}\n\nfunction isLatinLetter(char: string): boolean {\n return char !== \"\" && /\\p{Script=Latin}/u.test(char) && /\\p{L}/u.test(char);\n}\n\nfunction isPunctuation(char: string): boolean {\n return /[\\p{P}\\p{S}]/u.test(char);\n}\n"],"mappings":"AAAA,MAAM,eAAe,oBAAI,IAAI,CAAC,UAAK,UAAK,UAAK,UAAK,UAAK,QAAG,CAAC;AAC3D,MAAM,qBAAqB,IAAI,KAAK,UAAU,QAAW;AAAA,EACvD,aAAa;AACf,CAAC;AAEM,SAAS,uBAAuB,MAAwB;AAC7D,QAAM,WAAW,KAAK,KAAK;AAE3B,MAAI,aAAa,IAAI;AACnB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,MAAM,KAAK,mBAAmB,QAAQ,QAAQ,CAAC,EACnD,IAAI,CAAC,YAAY,QAAQ,QAAQ,KAAK,CAAC,EACvC,OAAO,CAAC,YAAY,YAAY,EAAE;AACvC;AAEO,SAAS,cAAc,MAAsB;AAClD,QAAM,YAAY,KAAK,QAAQ,SAAS,GAAG,EAAE,KAAK;AAClD,QAAM,QAAQ,wBAAwB,SAAS;AAC/C,MAAI,aAAa;AAEjB,aAAW,QAAQ,OAAO;AACxB,QAAI,cAAc,IAAI,GAAG;AACvB;AAAA,IACF;AAEA,QAAI,CAAC,cAAc,IAAI,GAAG;AACxB,oBAAc;AACd;AAAA,IACF;AAEA,kBAAc,KAAK,YAAY,EAAE,UAAU,KAAK,EAAE,QAAQ,WAAC,UAAM,IAAE,GAAE,EAAE;AAAA,EACzE;AAEA,SAAO;AACT;AAEA,SAAS,wBAAwB,MAAwB;AACvD,QAAM,QAAkB,CAAC;AACzB,MAAI,QAAQ;AAEZ,SAAO,QAAQ,KAAK,QAAQ;AAC1B,UAAM,OAAO,KAAK,KAAK;AAEvB,QAAI,SAAS,QAAW;AACtB;AAAA,IACF;AAEA,QAAI,SAAS,KAAK;AAChB,YAAM,KAAK,IAAI;AACf,eAAS;AACT;AAAA,IACF;AAEA,QACE,MAAM,UAAU,KAChB,aAAa,IAAI,MAAM,MAAM,SAAS,CAAC,KAAK,EAAE,KAC9C,cAAc,MAAM,MAAM,SAAS,CAAC,KAAK,EAAE,KAC3C,QAAQ,KAAK,SAAS,KACtB,cAAc,KAAK,QAAQ,CAAC,KAAK,EAAE,GACnC;AACA,YAAM,IAAI;AACV,eAAS;AACT;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,MAAM,SAAS,CAAC,KAAK;AAChD,UAAM,WAAW,KAAK,QAAQ,CAAC,KAAK;AACpC,UAAM,YACJ,iBAAiB,MACjB,aAAa,MACb,cAAc,YAAY,KAC1B,cAAc,QAAQ;AAExB,QAAI,WAAW;AACb,YAAM,KAAK,IAAI;AAAA,IACjB;AAEA,aAAS;AAAA,EACX;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,MAAuB;AAC5C,SAAO,SAAS,MAAM,WAAC,qBAAiB,GAAC,EAAC,KAAK,IAAI,KAAK,WAAC,UAAM,GAAC,EAAC,KAAK,IAAI;AAC5E;AAEA,SAAS,cAAc,MAAuB;AAC5C,SAAO,gBAAgB,KAAK,IAAI;AAClC;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
type EvidenceSentenceId = readonly [number, number];
|
|
2
|
+
interface EvidenceSelectionSentence {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly sentenceId: EvidenceSentenceId;
|
|
5
|
+
readonly text: string;
|
|
6
|
+
}
|
|
7
|
+
interface EvidenceSelection {
|
|
8
|
+
readonly quote?: string;
|
|
9
|
+
readonly sentence_id?: string;
|
|
10
|
+
}
|
|
11
|
+
type EvidenceSelectionList = EvidenceSelection | readonly EvidenceSelection[];
|
|
12
|
+
interface EvidenceSelectionCandidate {
|
|
13
|
+
readonly exactNormalized: boolean;
|
|
14
|
+
readonly exactRaw: boolean;
|
|
15
|
+
readonly exactSubstring: boolean;
|
|
16
|
+
readonly index: number;
|
|
17
|
+
readonly nextText: string;
|
|
18
|
+
readonly occurrenceId: string;
|
|
19
|
+
readonly prevText: string;
|
|
20
|
+
readonly score: number;
|
|
21
|
+
readonly sentence: EvidenceSelectionSentence;
|
|
22
|
+
readonly strategy: string;
|
|
23
|
+
}
|
|
24
|
+
interface EvidenceSelectionResolution {
|
|
25
|
+
readonly candidate: EvidenceSelectionCandidate;
|
|
26
|
+
readonly confidence: number;
|
|
27
|
+
readonly sentenceIds: readonly EvidenceSentenceId[];
|
|
28
|
+
readonly strategy: string;
|
|
29
|
+
}
|
|
30
|
+
interface EvidenceSelectionFailure {
|
|
31
|
+
readonly candidates: readonly EvidenceSelectionCandidate[];
|
|
32
|
+
readonly code: "ambiguous" | "invalid" | "low_confidence" | "missing_sentence" | "none";
|
|
33
|
+
readonly message: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type { EvidenceSelection, EvidenceSelectionCandidate, EvidenceSelectionFailure, EvidenceSelectionList, EvidenceSelectionResolution, EvidenceSelectionSentence, EvidenceSentenceId };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { LanguageModel } from 'ai';
|
|
2
|
+
import { Language } from '../common/language.js';
|
|
3
|
+
import { WikiGraphProgressCallback } from '../progress/types.js';
|
|
4
|
+
export { DigestProgressEvent, SerialDiscoveryItem, SerialProgressEvent, SerialsDiscoveredEvent, WikiGraphOperation, WikiGraphProgressEvent, WikiGraphProgressEventType } from '../progress/types.js';
|
|
5
|
+
import { DigestDocumentSessionOptions } from './digest.js';
|
|
6
|
+
import { WikiGraphArchive } from './wiki-graph-archive.js';
|
|
7
|
+
import { ChapterStage } from './chapter.js';
|
|
8
|
+
import '../source/meta.js';
|
|
9
|
+
import 'zod';
|
|
10
|
+
import '../common/llm-scope.js';
|
|
11
|
+
import '../reader/types.js';
|
|
12
|
+
import '../reader/attention/attention.js';
|
|
13
|
+
import '../reader/chunk-batch/types.js';
|
|
14
|
+
import '../llm/client.js';
|
|
15
|
+
import '../llm/context.js';
|
|
16
|
+
import '../llm/cache.js';
|
|
17
|
+
import '../llm/types.js';
|
|
18
|
+
import '../document/types.js';
|
|
19
|
+
import '../reader/segment/types.js';
|
|
20
|
+
import '../document/document.js';
|
|
21
|
+
import '../source/toc.js';
|
|
22
|
+
import '../source/types.js';
|
|
23
|
+
import '../document/database.js';
|
|
24
|
+
import 'sqlite3';
|
|
25
|
+
import '../document/text-streams.js';
|
|
26
|
+
import '../document/stores.js';
|
|
27
|
+
import './types.js';
|
|
28
|
+
import '../serial.js';
|
|
29
|
+
|
|
30
|
+
interface WikiGraphLLMOptions {
|
|
31
|
+
readonly cacheDirPath?: string;
|
|
32
|
+
readonly concurrent?: number;
|
|
33
|
+
readonly logDirPath?: string;
|
|
34
|
+
readonly model: LanguageModel;
|
|
35
|
+
readonly retryIntervalSeconds?: number;
|
|
36
|
+
readonly retryTimes?: number;
|
|
37
|
+
readonly stream?: boolean;
|
|
38
|
+
readonly temperature?: number | readonly number[];
|
|
39
|
+
readonly timeout?: number;
|
|
40
|
+
readonly topP?: number | readonly number[];
|
|
41
|
+
}
|
|
42
|
+
interface WikiGraphOptions {
|
|
43
|
+
readonly debugLogDirPath?: string;
|
|
44
|
+
readonly llm?: LanguageModel | WikiGraphLLMOptions;
|
|
45
|
+
readonly verbose?: boolean;
|
|
46
|
+
}
|
|
47
|
+
type WikiGraphOpenSessionOptions = DigestDocumentSessionOptions;
|
|
48
|
+
interface WikiGraphSourceSessionOptions extends DigestDocumentSessionOptions {
|
|
49
|
+
readonly extractionPrompt?: string;
|
|
50
|
+
readonly onProgress?: WikiGraphProgressCallback;
|
|
51
|
+
readonly path: string;
|
|
52
|
+
readonly targetStage?: ChapterStage;
|
|
53
|
+
readonly userLanguage?: Language;
|
|
54
|
+
}
|
|
55
|
+
interface WikiGraphTextStreamSessionOptions extends DigestDocumentSessionOptions {
|
|
56
|
+
readonly bookLanguage?: string | null;
|
|
57
|
+
readonly extractionPrompt?: string;
|
|
58
|
+
readonly onProgress?: WikiGraphProgressCallback;
|
|
59
|
+
readonly sourceFormat?: "markdown" | "txt";
|
|
60
|
+
readonly stream: AsyncIterable<string> | Iterable<string>;
|
|
61
|
+
readonly targetStage?: ChapterStage;
|
|
62
|
+
readonly title?: string | null;
|
|
63
|
+
readonly userLanguage?: Language;
|
|
64
|
+
}
|
|
65
|
+
declare class WikiGraph {
|
|
66
|
+
#private;
|
|
67
|
+
constructor(options: WikiGraphOptions);
|
|
68
|
+
digestEpubSession<T>(options: WikiGraphSourceSessionOptions, operation: (digest: WikiGraphArchive) => Promise<T> | T): Promise<T>;
|
|
69
|
+
digestMarkdownSession<T>(options: WikiGraphSourceSessionOptions, operation: (digest: WikiGraphArchive) => Promise<T> | T): Promise<T>;
|
|
70
|
+
digestTextStreamSession<T>(options: WikiGraphTextStreamSessionOptions, operation: (digest: WikiGraphArchive) => Promise<T> | T): Promise<T>;
|
|
71
|
+
digestTxtSession<T>(options: WikiGraphSourceSessionOptions, operation: (digest: WikiGraphArchive) => Promise<T> | T): Promise<T>;
|
|
72
|
+
openSession<T>(path: string, operation: (digest: WikiGraphArchive) => Promise<T> | T, options?: WikiGraphOpenSessionOptions): Promise<T>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { WikiGraph, type WikiGraphLLMOptions, type WikiGraphOpenSessionOptions, type WikiGraphOptions, WikiGraphProgressCallback, type WikiGraphSourceSessionOptions, type WikiGraphTextStreamSessionOptions };
|