rag-wright 0.16.0__tar.gz → 0.17.0__tar.gz
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.
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +5 -2
- rag_wright-0.17.0/.release-please-manifest.json +3 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/CHANGELOG.md +22 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/CLAUDE.md +7 -1
- {rag_wright-0.16.0 → rag_wright-0.17.0}/PKG-INFO +2 -1
- rag_wright-0.17.0/docs/adr/0141-the-hard-split-cuts-between-lines-and-repeats-a-tables-header.md +38 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/README.md +2 -1
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/api/README.md +5 -5
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/api/pack_sdk.md +5 -1
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/configuration.md +9 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/kg-construction.md +21 -3
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/plan.md +6 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/pyproject.toml +2 -1
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +5 -2
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/config.py +4 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/workspace.py +3 -1
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/rlm_chunking.py +71 -4
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/ingestion.py +4 -2
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/builder.py +51 -5
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/layout.py +5 -2
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/pack_sdk/__init__.py +4 -1
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +13 -8
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/store/arcadedb.py +113 -24
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tasks.md +5 -1
- rag_wright-0.17.0/tests/api/test_pack_sdk_segmenter.py +42 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/parity.json +36 -18
- rag_wright-0.17.0/tests/ingestion/test_split_tables.py +132 -0
- rag_wright-0.17.0/tests/ingestion/test_unreached_rows.py +73 -0
- rag_wright-0.17.0/tests/ingestion/test_write_count.py +39 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_concurrent_writes.py +76 -0
- rag_wright-0.17.0/tests/store/test_pooled_client.py +104 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_store_create_flag.py +1 -0
- rag_wright-0.17.0/tests/subgraphs/test_contract_write_retry.py +97 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/uv.lock +3 -1
- rag_wright-0.16.0/.release-please-manifest.json +0 -3
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/settings.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.env.example +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/.gitignore +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/LICENSE +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/SPEC.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/conftest.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/adr/0140-one-model-family-on-metal.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/api/harness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/architecture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/concepts.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/evals.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/harness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/installation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/playbook.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/quickstart.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/reference-pack.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/releasing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/evals/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/langgraph-ingestion/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.12.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.13.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.14.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/docs/workspaces.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/build_golden.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/embedded_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/function_ceiling.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/function_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/golden.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/harness.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/kg_primary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/multihop.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/nl_to_type.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/relational_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/test_acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/test_harness.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/examples/model_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/examples/quickstart.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/release-please-config.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acord_unify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/build_harness_doc.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/graph_status.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/measure_harness_genericity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/measure_silver.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/agents.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/parse_audit.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/parsing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/span_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/evals.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/evals/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/evals/gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/evals/runner.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/evals/scorers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/accounting.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/agent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/batch.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/clarify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/confirm.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/decisions.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/definition.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/dispatch.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/errors.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/events.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/filesystem.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/grading.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/interpreter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/memory.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/rules.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/runs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/seen.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/skills.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/thinking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/tiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/withhold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/harness/workers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/model_servers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/store/seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/util/devices.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/util/pdfium.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_agent_chat_model.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_agent_chat_model_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_api_embedder_ps39.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_discover.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_documents.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_drop_workspace.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_drop_workspace_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_migrate_span_fields.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_open_workspace_reconfig.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_options.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_pdf_page_count.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_public_gaps_ps38.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_tracing_helpers_ps32.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_lock_version.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_pdfium_door.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/arch/test_shipped_skills.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/async_helpers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_parse_audit.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_span_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/conftest.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_gold_contracts.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_gold_import.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_langfuse_backend.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_runner.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_scorer_parity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_scorers_a.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_scorers_b.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_scorers_c.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/evals/test_scorers_d.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/parity_blank.pdf +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/parity_cover_with_attachment.pdf +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/parity_db_with_a_broken_report.xlsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/parity_db_with_reports.xlsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/parity_grid.xlsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_greenfield_conformance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_harness_accounting.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_harness_engine_wiring.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_harness_genericity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_harness_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_harness_recorder.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/harness/test_harness_thinking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_aevaluate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_graph_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_graph_parity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_sheet_continuations.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_model_servers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_seam_event_loops.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/models/test_usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_contains.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_identifiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_range.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_pack_schema_properties.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/util/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/util/test_devices.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.17.0}/tests/util/test_spacy_model.py +0 -0
{rag_wright-0.16.0 → rag_wright-0.17.0}/.claude/skills/building-an-ingestion-capability/SKILL.md
RENAMED
|
@@ -22,13 +22,13 @@ Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`)
|
|
|
22
22
|
|---|---|---|---|
|
|
23
23
|
| parse (PDF, Office, spreadsheets incl. hidden sheets, HTML, Markdown, images and scans; embedded files) | engine | docling, content-hash cached; images and scanned pages are OCR'd, and only degraded pages escalate to the vision model (the `VISION_OCR` role) | (none) |
|
|
24
24
|
| chunk | engine default, domain may override | structural boundaries; a model refines only an over-cap section (domain-neutral prompt) | `chunk_model=`, `chunk_discoverer=` (e.g. `default_chunk_discoverer(guidance=...)` to say what a coherent unit is in your documents) |
|
|
25
|
-
| segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` |
|
|
25
|
+
| segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` (to adjust the default rather than replace it, wrap `pack_sdk.segment_layout`) |
|
|
26
26
|
| tag spans (soft tags) | domain, optional | none | `span_tagger=` (to compare models behind it, see section 5 of `docs/domain-adaptation/classification-and-decision-models.md`) |
|
|
27
27
|
| index spans (embed + store, page/bbox provenance) | engine | the workspace's ingest embedder | `embedder=` |
|
|
28
28
|
| group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
|
|
29
29
|
| choose each unit's representative span (its `anchor` + leading tag) | **domain decision**, optional | the grouper's choice: the first member, often a heading | `unit_representative=` |
|
|
30
30
|
| extract records from a unit | **domain (required)** | (none) | the `extractor` argument |
|
|
31
|
-
| write records | engine default | `kg_write` | `writer=` |
|
|
31
|
+
| write records | engine default | `kg_write` | `writer=` (returns the number of records now in the graph, or `None`) |
|
|
32
32
|
| per-document follow-up (e.g. an entity graph) | domain, optional | none | `document_hook=` |
|
|
33
33
|
| `Document` node, embedded children (`EmbeddedIn` / `AttachedTo`), progress, dead-lettering | engine | always on | (none) |
|
|
34
34
|
|
|
@@ -181,6 +181,9 @@ category.
|
|
|
181
181
|
`evaluate_ingestion(..., table_labels=[{"pattern": <regex on the header row>, "label": "record"|"block"}])`
|
|
182
182
|
(first match wins): a block table split per row, or a wide record table not split, is a failure, and tables no
|
|
183
183
|
pattern matched are listed in `unlabelled_tables`.
|
|
184
|
+
- **Every row of a record table should reach a unit.** After an ingest, `DocumentReport.unreached_table_rows` lists
|
|
185
|
+
each record table whose rows did not all reach a unit with their `TableRow` (with the `[ingest] warning:` line);
|
|
186
|
+
an empty list on your samples is the check. Rows listed there produced no record.
|
|
184
187
|
- **How an embedded file finds its row.** An identifier is a token of 4+ characters containing a digit that appears
|
|
185
188
|
on at most `IdentifierRule.max_rows` table rows and in at most `max_files` embedded files (defaults 3 and 3; set
|
|
186
189
|
them with `IngestionTuning(identifier=IdentifierRule(...))`). A file whose identifiers match no row, or too many,
|
|
@@ -4,6 +4,28 @@ All notable changes to RAG_Wright are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.17.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.1...0.17.0) (2026-11-05)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **PS-61:** the default segmenter is on pack_sdk, so a pack can wrap it ([bbb179d](https://github.com/fzaidi-dai/RAG_Wright/commit/bbb179d64e5fc905ada2ddc57367cdd2cc2ca5b6))
|
|
13
|
+
* **PS-62:** a record table's rows that reach no unit are reported, never silent ([632fefb](https://github.com/fzaidi-dai/RAG_Wright/commit/632fefb390e11014a0dcb4cdd16956697a92ea58))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **PS-60:** a table over the chunk cap keeps every row's span and TableRow ([acd9ce5](https://github.com/fzaidi-dai/RAG_Wright/commit/acd9ce5917de1daac6ac47ea0a09ca975fcdf556))
|
|
19
|
+
|
|
20
|
+
## [0.16.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.0...0.16.1) (2026-11-01)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* **PS-57:** a retried write no longer loses a document's clauses; the conflict budget is configurable ([5d209d7](https://github.com/fzaidi-dai/RAG_Wright/commit/5d209d7eb1ab4bad93cd7026e81e79d9b6852fe5))
|
|
26
|
+
* **PS-58:** a record writer reports the count that landed ([a7c384c](https://github.com/fzaidi-dai/RAG_Wright/commit/a7c384cfab59832f9714bac9996f91a29340ed71))
|
|
27
|
+
* **PS-59:** the store's client keeps keep-alive connections, one session per thread ([f644ba3](https://github.com/fzaidi-dai/RAG_Wright/commit/f644ba3f3f37f12102037405b9a58567098358b3))
|
|
28
|
+
|
|
7
29
|
## [0.16.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.15.0...0.16.0) (2026-10-28)
|
|
8
30
|
|
|
9
31
|
|
|
@@ -55,7 +55,13 @@ The failure mode to avoid, which has happened before: a command fails with "modu
|
|
|
55
55
|
|
|
56
56
|
## Start of every session
|
|
57
57
|
|
|
58
|
-
> **CURRENT STATE (2026-
|
|
58
|
+
> **CURRENT STATE (2026-11-01): `rag-wright` 0.16.1 is RELEASED** (PR #20; RuleWright's two requests and a finding
|
|
59
|
+
> from them: PS-57 a retried contracts-pack write no longer loses a document's clauses, the ArcadeDB conflict budget is
|
|
60
|
+
> configurable (default 20 attempts / 2 s cap) and a racing UPSERT's duplicate key is retried; PS-58 a `RecordWriter`
|
|
61
|
+
> returns the count that landed; PS-59 the store's client keeps keep-alive connections, one session per thread). Next:
|
|
62
|
+
> PS-48, EV-7, PS-30, PS-33. Before it, **`rag-wright` 0.16.0 is RELEASED** (PR #19; TexWright's requests: PS-54 a `Contains`
|
|
63
|
+
> substring `where` value, PS-55 only the BGE models on Metal under one process lock (ADR-0140); PS-56 the BGE reranker
|
|
64
|
+
> scores again on transformers 5). Before it, **`rag-wright` 0.15.0 is RELEASED** (PR #18; PS-51 the frontend skill draws the shell and
|
|
59
65
|
> ships its scaffold, RuleWright's request; PS-52 one workspace embedder under concurrent first use and PS-53 KG calls refuse
|
|
60
66
|
> a name that is not an identifier, TexWright's requests). Before it, **`rag-wright` 0.14.1 is RELEASED** (PR #17; TexWright's two requests: PS-49 a retried
|
|
61
67
|
> ArcadeDB write conflict no longer prints as an error, PS-50 `ensure_pack_schema` declares a property a pack gains on an
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.0
|
|
4
4
|
Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
|
|
5
5
|
Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
|
|
6
6
|
Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
|
|
@@ -42,6 +42,7 @@ Requires-Dist: pydantic>=2.0
|
|
|
42
42
|
Requires-Dist: pypdfium2>=5.11
|
|
43
43
|
Requires-Dist: pyshacl>=0.40.1
|
|
44
44
|
Requires-Dist: python-dotenv>=1.2
|
|
45
|
+
Requires-Dist: requests>=2.34.2
|
|
45
46
|
Requires-Dist: scikit-learn>=1.9.1
|
|
46
47
|
Requires-Dist: sentence-transformers>=6.1.0
|
|
47
48
|
Requires-Dist: transformers<5.9,>=5.4
|
rag_wright-0.17.0/docs/adr/0141-the-hard-split-cuts-between-lines-and-repeats-a-tables-header.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# ADR-0141: The cap's hard split cuts between lines and repeats a table's header
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-11-05 · **Related:** PS-60, TexWright's request
|
|
4
|
+
`2026-11-05-export-the-default-segmenter-on-pack-sdk.md`, ADR-0069 (tables chunked in reading order), ADR-0124
|
|
5
|
+
(ING-2 the default segmenter, ING-7 `table_rows`), ADR-0136 (spreadsheet tables glued across blank rows)
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A chunk is a run of whole parsed items, and the token cap is enforced last: a section over the cap that the
|
|
10
|
+
discoverer cannot subdivide (a single table is one item) is hard-split. The split cut every `token_cap * 4`
|
|
11
|
+
characters, wherever that fell. In a table it fell mid-row, and three things followed. The table item was found
|
|
12
|
+
whole in no chunk, so `chunk_layouts` placed it nowhere, and the unplaced item also stopped every later item in the
|
|
13
|
+
document from getting its parsed layout. Each piece then fell back to the text layout: the first piece still
|
|
14
|
+
opened with the table's header, but a continuation piece began mid-row, read as one paragraph, and gave ONE span to
|
|
15
|
+
all its rows. With no row spans, no unit carried a `TableRow`, so a record extractor never saw those rows, and the
|
|
16
|
+
ingest reported success. TexWright lost 4 of 140 records this way; a 140-record, 76-column synthetic workbook lost
|
|
17
|
+
205 of 280 rows.
|
|
18
|
+
|
|
19
|
+
## Decision
|
|
20
|
+
|
|
21
|
+
- The hard split cuts at the last blank line in the second half of the window, else the last line break, else the
|
|
22
|
+
last space, and only a run with none of them at a fixed length. The whitespace character it cuts at is dropped.
|
|
23
|
+
Pieces stay strictly under the cap.
|
|
24
|
+
- A cut inside a pipe table repeats the table's header and separator rows at the top of the next piece, so every
|
|
25
|
+
piece is a well-formed table, each row is whole in one chunk, and the segmenter, the unit grouper's record-table
|
|
26
|
+
test and the row-to-span map work unchanged on every piece. A header half the cap or longer is not repeated.
|
|
27
|
+
- `chunk_layouts` skips an item that no remaining chunk holds whole, instead of blocking the items after it.
|
|
28
|
+
- A cached chunk manifest holding a piece exactly the cap long with table lines in it can only come from the old
|
|
29
|
+
cut; it is re-chunked once, with a log line. An old prose split keeps its cached chunks.
|
|
30
|
+
|
|
31
|
+
## Consequences
|
|
32
|
+
|
|
33
|
+
- Live, the workbook above yields 280 of 280 row records (75 before), and every span is one row.
|
|
34
|
+
- A document with a section over the cap gets different chunk boundaries, so different `chunk_id`s and spans when
|
|
35
|
+
re-ingested; the `chunk_id` scheme is unchanged and documents under the cap are untouched. A repeated header
|
|
36
|
+
appears once per continuation chunk in the canonical document text.
|
|
37
|
+
- Whether a pack may build on the default segmenter (PS-61) and whether a record table's lost rows are reported
|
|
38
|
+
(PS-62) are separate tasks.
|
|
@@ -196,4 +196,5 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
|
|
|
196
196
|
0137 A generated answer states the evidence's support every time, and "none" is an abstention ·
|
|
197
197
|
0138 PDF parses run one at a time, and the engine reaches pdfium through one locked door ·
|
|
198
198
|
0139 The agent harness substrate is engine scope ·
|
|
199
|
-
0140 One model family on Metal, under one process lock
|
|
199
|
+
0140 One model family on Metal, under one process lock ·
|
|
200
|
+
0141 The cap's hard split cuts between lines and repeats a table's header
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
The product's view of the engine: the store connection, chosen models (`models`: `ModelRole` value -> model alias), the embedding profile, the `options` catalog (generic `ingest` knobs + each pack's options under `packs`), and `pack`: the path to the domain pack `.ttl` whose KG types `open_workspace` creates (None = only the neutral engine types: Chunk, Entity, Relationship, Mentions, Span, Document, EmbeddedIn, AttachedTo). Defaults just work; override only to trade quality/cost/latency. Implementation details (ArcadeDB, BGE) never cross this boundary.
|
|
10
10
|
|
|
11
|
-
### `StoreConfig(host: 'str', port: 'str', user: 'str', password: 'str', backend: 'str' = 'arcadedb', protocol: 'str' = 'http') -> None`
|
|
11
|
+
### `StoreConfig(host: 'str', port: 'str', user: 'str', password: 'str', backend: 'str' = 'arcadedb', protocol: 'str' = 'http', conflict_attempts: 'Optional[int]' = None, conflict_backoff_cap_s: 'Optional[float]' = None) -> None`
|
|
12
12
|
|
|
13
13
|
How to reach the KG/retrieval store. `backend` selects the implementation (only `arcadedb` today; a new backend -- e.g. Neo4j -- is added here, invisibly to the product).
|
|
14
14
|
|
|
@@ -216,9 +216,9 @@ A stage that raises routes to `dead_letter`, which ends the document with its `D
|
|
|
216
216
|
|
|
217
217
|
The result of `IngestionPipeline.aingest`: one `DocumentReport` per document (embedded children included). `failed` counts the dead-lettered documents and `succeeded` the rest (properties).
|
|
218
218
|
|
|
219
|
-
### `DocumentReport(doc_id: 'str', parent_doc_id: 'Optional[str]' = None, chunks: 'int' = 0, spans: 'int' = 0, units: 'int' = 0, records: 'int' = 0, extraction_failures: 'list[dict]' = <factory>, span_failures: 'list[dict]' = <factory>, skipped_hidden_sheets: 'list[str]' = <factory>, embedded_skipped: 'list[str]' = <factory>, children: 'list[str]' = <factory>, links: 'dict[str, int]' = <factory>, unmapped_links: 'int' = 0, dead_letter: 'Optional[str]' = None) -> None`
|
|
219
|
+
### `DocumentReport(doc_id: 'str', parent_doc_id: 'Optional[str]' = None, chunks: 'int' = 0, spans: 'int' = 0, units: 'int' = 0, records: 'int' = 0, extraction_failures: 'list[dict]' = <factory>, span_failures: 'list[dict]' = <factory>, skipped_hidden_sheets: 'list[str]' = <factory>, embedded_skipped: 'list[str]' = <factory>, children: 'list[str]' = <factory>, links: 'dict[str, int]' = <factory>, unmapped_links: 'int' = 0, unreached_table_rows: 'list[dict]' = <factory>, dead_letter: 'Optional[str]' = None) -> None`
|
|
220
220
|
|
|
221
|
-
What ingesting one document did. Counts: `chunks`, `spans` (indexed), `units` (extracted), `records` (nodes written). `extraction_failures` (`{unit, anchor, reason}`) / `span_failures` (`{span_id, reason}`): the units / spans whose extraction or indexing failed; the rest of the document still lands. `skipped_hidden_sheets`: hidden spreadsheet sheets left out (`IngestSource.include_hidden_sheets=False`). `children`: the ids of embedded files and PDF attachments ingested as child documents (`parent_doc_id` is set on theirs); `embedded_skipped`: embedded files that could not be ingested. `links`: `AttachedTo` record links written, by confidence; `unmapped_links`: links whose record row could not be found. `dead_letter`: why the whole document failed (None when it landed).
|
|
221
|
+
What ingesting one document did. Counts: `chunks`, `spans` (indexed), `units` (extracted), `records` (nodes written). `extraction_failures` (`{unit, anchor, reason}`) / `span_failures` (`{span_id, reason}`): the units / spans whose extraction or indexing failed; the rest of the document still lands. `skipped_hidden_sheets`: hidden spreadsheet sheets left out (`IngestSource.include_hidden_sheets=False`). `children`: the ids of embedded files and PDF attachments ingested as child documents (`parent_doc_id` is set on theirs); `embedded_skipped`: embedded files that could not be ingested. `links`: `AttachedTo` record links written, by confidence; `unmapped_links`: links whose record row could not be found. `unreached_table_rows` (PS-62): one entry per record table -- a table at least one of whose rows reached a unit carrying its `TableRow` -- whose data rows did not ALL reach one, `{table_ref, sheet, reached, total, missing}` (`missing`: the 1-based data-row indices, at most the first 1,000); the document still lands, so read this, or the `[ingest] warning:` line, to know rows were lost. `dead_letter`: why the whole document failed (None when it landed).
|
|
222
222
|
|
|
223
223
|
### `IngestionEvaluation(documents: 'list[DocumentEvaluation]' = <factory>, failures: 'list[str]' = <factory>, unlabelled_tables: 'list[str]' = <factory>, labels: 'Optional[LabelEvaluation]' = None, warnings: 'list[str]' = <factory>) -> None`
|
|
224
224
|
|
|
@@ -304,9 +304,9 @@ PS-R3: which member span represents a unit -- a DOMAIN decision. The engine appl
|
|
|
304
304
|
|
|
305
305
|
One unit -> the domain's typed records (required; the domain-specific step).
|
|
306
306
|
|
|
307
|
-
### `RecordWriter: (source_doc_id: 'str', extractions: 'Sequence[UnitExtraction]') -> 'Awaitable[
|
|
307
|
+
### `RecordWriter: (source_doc_id: 'str', extractions: 'Sequence[UnitExtraction]') -> 'Awaitable[Optional[int]]'`
|
|
308
308
|
|
|
309
|
-
Optional: persist a document's extractions. The engine default writes them with `kg_write`.
|
|
309
|
+
Optional: persist a document's extractions. The engine default writes them with `kg_write`. Return the number of records now in the graph (written, or found already written); `None` lets the engine count the record nodes it handed over (RuleWright, 2026-10-31: only the writer knows what landed).
|
|
310
310
|
|
|
311
311
|
### `BoundaryDiscoverer: (**kwargs)`
|
|
312
312
|
|
|
@@ -182,7 +182,7 @@ Group into units (checked), attach table rows, extract each unit concurrently (p
|
|
|
182
182
|
|
|
183
183
|
#### `IngestionStages.write(self, sd: 'Any', extractions: 'list') -> 'int'`
|
|
184
184
|
|
|
185
|
-
Persist the records (the domain's writer, else `kg_write`). Returns the number
|
|
185
|
+
Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
|
|
186
186
|
|
|
187
187
|
#### `IngestionStages.write_document_node(self, doc_id: 'str', *, parent_id: 'Optional[str]', filename: 'str', media_type: 'str', sha256: 'str', metadata: 'Optional[dict]' = None) -> 'None'`
|
|
188
188
|
|
|
@@ -492,6 +492,10 @@ ASYNC twin of `chunk_texts` (SEG-2/SEG-5): awaits the discoverer's async boundar
|
|
|
492
492
|
|
|
493
493
|
Validate a `documents` scope against `store.known_document_ids()` BEFORE any retrieval spends (mirrors issue 0007's `_validate_sources`). `None` (whole store) is not validated. `[]` (scope-to-nothing) is a valid empty scope, not an error -- the retrieval surfaces short-circuit it. A non-empty list with any id absent from the store raises `UnknownDocumentError`. A store without `known_document_ids` (a minimal fake) is treated as un-validatable and passes through.
|
|
494
494
|
|
|
495
|
+
### `segment_layout(chunk_id: 'str', text: 'str', layout: 'Sequence[LayoutItem]', *, min_alnum: 'Optional[int]' = None, tuning: 'Optional[IngestionTuning]' = None) -> 'list[Span]'`
|
|
496
|
+
|
|
497
|
+
Segment one chunk into spans (the engine's default `Segmenter`). The fragment floor is `min_alnum`, else `tuning.min_fragment_alnum`, else the default.
|
|
498
|
+
|
|
495
499
|
### `capability_impl(name: 'str') -> 'Callable[..., Any]'`
|
|
496
500
|
|
|
497
501
|
Resolve a capability name to its invoke factory via the manifest `impl_ref`. Raises `KeyError` if the name is unknown to the ARD catalog, `NotImplementedError` if it declares no `impl_ref` (not invokable by name).
|
|
@@ -45,6 +45,14 @@ configuration change takes effect without a restart ([`workspaces.md`](workspace
|
|
|
45
45
|
| `password` | `str` | — | password |
|
|
46
46
|
| `backend` | `str` | `"arcadedb"` | store implementation (only `arcadedb` today) |
|
|
47
47
|
| `protocol` | `str` | `"http"` | `http` locally; `https` for a remote/Modal store |
|
|
48
|
+
| `conflict_attempts` | `int \| None` | `None` | attempts per write when ArcadeDB reports a write conflict (`None`: `ARCADEDB_CONFLICT_ATTEMPTS`, else 20) |
|
|
49
|
+
| `conflict_backoff_cap_s` | `float \| None` | `None` | the longest wait between those attempts, in seconds (`None`: `ARCADEDB_CONFLICT_BACKOFF_CAP_S`, else 2) |
|
|
50
|
+
|
|
51
|
+
Concurrent writers that touch the same page get a write conflict; the store retries the write (the failed
|
|
52
|
+
transaction is rolled back whole) with a doubling wait from 10 ms up to the cap. Two writers creating the same new
|
|
53
|
+
node by `kg_write` get a duplicate key instead, which is retried the same way. A write that is still conflicting
|
|
54
|
+
after the last attempt raises, about 25 s after the first one with the defaults. Raise the budget when more than
|
|
55
|
+
eight documents write into one graph at once.
|
|
48
56
|
|
|
49
57
|
`StoreConfig.from_env()` builds one from `ARCADEDB_HOST` (default `localhost`), `ARCADEDB_PORT` (required: no
|
|
50
58
|
default, so an unset variable cannot reach another instance on the machine),
|
|
@@ -284,6 +292,7 @@ Prefer config; use env for secrets and for non-API callers. The common ones the
|
|
|
284
292
|
| variable | purpose |
|
|
285
293
|
|---|---|
|
|
286
294
|
| `ARCADEDB_HOST` / `ARCADEDB_PORT` / `ARCADEDB_USER` / `ARCADEDB_PASSWORD` / `ARCADEDB_DATABASE` / `ARCADEDB_PROTOCOL` | store connection: `StoreConfig.from_env()` reads them (and the scripts do); `open_workspace` itself reads only the `StoreConfig` it is given |
|
|
295
|
+
| `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S` | the write-conflict retry budget when `StoreConfig.conflict_attempts` / `conflict_backoff_cap_s` are unset |
|
|
287
296
|
| `OPENROUTER_API_KEY` / `OPENROUTER_BASE_URL` / `OPENROUTER_PROVIDER` / `OPENROUTER_ALLOW_FALLBACKS` | OpenRouter access + provider routing (`OPENROUTER_SORT` / `OPENROUTER_PROVIDER_ORDER`: the contracts pack's docling-graph extraction only) |
|
|
288
297
|
| `RAG_SERVING` / `VLLM_BASE_URL` / `VLLM_API_KEY` / `STACK_URL` | serving backend (openrouter \| vllm) + self-hosted endpoint |
|
|
289
298
|
| `RAG_MODEL_<ROLE>` (e.g. `RAG_MODEL_GENERAL`, `RAG_MODEL_VISION_OCR`) / `RAG_MODEL_ALL` / `RAG_GRAPH_EXTRACT_MODEL` / `RAG_DECISION_MODEL` | model overrides (one role / all roles / graph extraction / decision-model profile) |
|
|
@@ -34,6 +34,20 @@ The reference pack's contract pipeline is one instantiation of the same stages (
|
|
|
34
34
|
legal segmenter, a function tagger, a provision grouper, a decision-model boundary decider, its clause extractor and
|
|
35
35
|
its typed writer. Read it as an example of hooks, not as the engine's definition of ingestion.
|
|
36
36
|
|
|
37
|
+
A hook you pass replaces the default for the whole pipeline, for every document it ingests. When your documents
|
|
38
|
+
need the default's behaviour in most places and your own rule in a few, build on the default rather than replace it:
|
|
39
|
+
the default segmenter is `rag_wright.pack_sdk.segment_layout` (and the default chunk discoverer
|
|
40
|
+
`StructuralModelFallbackDiscoverer`), so your segmenter can call it and adjust only the spans it gets wrong:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from rag_wright.pack_sdk import segment_layout
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def segmenter(chunk_id, text, layout):
|
|
47
|
+
spans = segment_layout(chunk_id, text, layout) # the engine's evaluated segmentation
|
|
48
|
+
return spans # split or merge here only the spans your domain reads differently; keep them tiling the text
|
|
49
|
+
```
|
|
50
|
+
|
|
37
51
|
## The stages
|
|
38
52
|
|
|
39
53
|
```
|
|
@@ -59,7 +73,9 @@ parse → chunk → segment (+ optional tag) → index (embed each span → the
|
|
|
59
73
|
A unit holding exactly one data row of a parsed table carries that row as `Unit.table_row` (exact cells).
|
|
60
74
|
- **extract**: your `extractor` turns each unit into **typed records** (`UnitExtraction`: `KgNode`s and `KgEdge`s
|
|
61
75
|
in your pack's schema). This is the domain-specific step.
|
|
62
|
-
- **write**: persist the records (your `writer`, else `kg_write`), then a generic `Document` node per document.
|
|
76
|
+
- **write**: persist the records (your `writer`, else `kg_write`), then a generic `Document` node per document. Your
|
|
77
|
+
`writer` returns the number of records now in the graph (the report's `records`), or `None` to let the engine count
|
|
78
|
+
the record nodes it handed over.
|
|
63
79
|
- **entity graph + resolve**: not run by default. Run your entity extraction and resolution in a `document_hook`
|
|
64
80
|
(see [entity resolution](entity-resolution.md)).
|
|
65
81
|
|
|
@@ -167,8 +183,10 @@ the run goes on. Every node and edge type your extractor returns must be declare
|
|
|
167
183
|
|
|
168
184
|
`aingest` returns an `IngestionReport` (`succeeded`, `failed`, `documents`). Each `DocumentReport` has the counts
|
|
169
185
|
(`chunks`, `spans`, `units`, `records`), `extraction_failures`, `span_failures`, `dead_letter` (the reason, if the
|
|
170
|
-
document failed), `skipped_hidden_sheets`, `embedded_skipped`, `children`,
|
|
171
|
-
embedded files
|
|
186
|
+
document failed), `skipped_hidden_sheets`, `embedded_skipped`, `children`, the `links` / `unmapped_links` of its
|
|
187
|
+
embedded files, and `unreached_table_rows`: each record table some of whose data rows reached no unit carrying their
|
|
188
|
+
`TableRow`, so produced no record (`reached`, `total` and the `missing` row indices; also printed as an
|
|
189
|
+
`[ingest] warning:` line). Nothing is skipped silently.
|
|
172
190
|
|
|
173
191
|
## The two graphs (one store)
|
|
174
192
|
|
|
@@ -128,4 +128,10 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
128
128
|
| PS-54 | TexWright's request (`docs/engine-requests/2026-10-19-substring-match-in-the-kg-filter-grammar.md`, their repo): the KG filter grammar had no substring predicate ("composition contains UHMWPE" over free text). `Contains(text, case_sensitive=False)`, a `where` value beside `Range` on every KG call that takes `where`: a literal `indexOf` test (not `LIKE`, whose `%`, `_` and `?` are wildcards, measured live), case folded on both sides in the store, a field with no value never matches, empty text refused | 8 hermetic tests (red before) + a live test (case both ways, literal wildcards, quotes and backslashes, accents, missing values, with `Range`, `kg_count`, a `kg_edges` traversal filtered at all three points); full hermetic (2353) and live store (42) suites green | done 2026-10-29 |
|
|
129
129
|
| PS-55 | TexWright's request (`docs/engine-requests/2026-10-25-two-model-families-in-one-process-abort-on-metal.md`, their repo): Metal is not safe for concurrent use and the engine put three families on it automatically (BGE-M3, the BGE reranker, Docling's layout/table/RapidOCR models), then ran them on different threads (an ingest embeds while it parses; a server embeds a query while an upload parses), so a process aborted in Metal. RuleWright had measured and pinned it in their own seam (T-7.25/T-7.46), never adopted here. `rag_wright.util.devices` (ADR-0140): only the BGE family on Metal, every call there under one process lock (`METAL_LOCK`); Docling and the pack classifiers on CPU where Metal would be picked (`pack_sdk.torch_device`); explicit device variables win; CUDA/CPU hosts unchanged; `docs/workspaces.md` corrected | red, torch 2.14.1 (TexWright's env, this engine tree): embedder + Docling in two threads, 6/6 child runs died in seconds (5 SIGABRT with their assertion, 1 SIGSEGV; OCR and PDF); torch 2.12.1 never failed. Green, same interpreter: 9/9 runs survived 150s each (OCR, PDF, two embedders). Full hermetic (2361) and live embed/parse/store (60) suites green. 8 hermetic tests (4 behaviour tests red before); Docling output identical CPU vs Metal | done 2026-10-29 |
|
|
130
130
|
| PS-56 | Found during PS-55: `BGEReranker` failed on every call (`XLMRobertaTokenizer has no attribute prepare_for_model`): FlagEmbedding's `FlagAutoReranker.compute_score` calls a tokenizer method transformers 5 removed, so the reference pack's `intra_document_qa` rerank (and RuleWright's copy) and any product composing `BGEReranker` over `span_search` hits were broken. The reranker is now a `sentence_transformers.CrossEncoder` (already a dependency) over the same `bge-reranker-v2-m3`, raw logits, 512 tokens per pair; same `BGEReranker` API, device and lock (PS-55) | red: the live reranker test failed on the tokenizer error. Green: it passes, plus a one-pair and a >512-token case; CrossEncoder's logits equal the model card's plain-transformers recipe (max abs diff 0.0, truncated passage included); embedder + reranker on Metal under the shared lock, torch 2.14.1: 3/3 runs survived 150s, 590 reranks and 586 embeds, none failing (before: the rerank thread died on its first call); full hermetic (2361) green | done 2026-10-29 |
|
|
131
|
+
| PS-57 | RuleWright's request (`docs/engine-requests/2026-10-31-a-write-conflict-loses-a-documents-clauses-and-your-pack-carries-the-defect.md`, their repo): at 4 concurrent documents, 2 of 15 reported `ingested` with zero clauses. The contracts pack's `write` node popped the pending extractions (filled by `extract_clauses`) before the store write landed, so the node's retry wrote nothing and reported success; it now reads them and releases them after the write. The conflict budget is reachable: `StoreConfig.conflict_attempts` / `conflict_backoff_cap_s`, else `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S`; default raised 10 attempts / 0.5 s cap to 20 / 2 s. Found by the live probe: two writers creating the same new node get a duplicate key, never retried; `kg_write` and `write_graph` (UPSERT-only) now retry it | pack retry test through the real per-document graph (0/3 clauses landed before, 3/3 after); six store tests; live probe (clause-shaped transactions over shared value nodes, pooled sessions): old budget lost 38/2,400 at 4 and 8 writers, new lost 0/2,400 at the same wall-clock; live store suite 42 passed | done 2026-11-01 |
|
|
132
|
+
| PS-58 | RuleWright's request (`docs/engine-requests/2026-10-31-ingestionstages-write-returns-a-count-derived-from-its-own-input.md`, their repo): `IngestionStages.write` returned the record nodes it was handed, and `RecordWriter` (declared `-> None`) could not say what landed. A writer now returns the number of records in the graph (`Optional[int]`; `None` keeps the engine's count); the default `kg_write` branch keeps the handed-over count, true because that write is one transaction (lands whole or raises). The contracts pack's writer returns the clauses in the graph and its `write` node reports that as `clauses` | three hermetic tests + the PS-57 retry test's count (red before, green after); live `build_ingestion` on two fixtures: default and a writer landing every other record, `records` equals the graph in all four documents | done 2026-11-01 |
|
|
133
|
+
| PS-59 | Found during PS-57: the ArcadeDB client opens a new connection for every request (`requests.post`, no session); at 8 concurrent writers against Docker on macOS about two thirds of writes failed with `RemoteDisconnected`, and with a keep-alive session per thread the same run lost none. Give the store's client a pooled session | live probe at 8 writers: zero connection drops | done 2026-11-01: the store's client (`_PooledClient`) keeps one keep-alive `requests.Session` per thread and `ArcadeDBStore.close()` releases them; live, the same probe lost 374 of 800 transactions to `RemoteDisconnected` unpooled and 0 of 800 at 8 writers and 0 of 1,600 at 16 pooled |
|
|
134
|
+
| PS-60 | TexWright (2026-11-05, `2026-11-05-export-the-default-segmenter-on-pack-sdk.md`): a table over the chunk cap was hard-split at a fixed length, mid-row; the rows after the cut lost their table layout (one span between them, no `TableRow`), and one item `chunk_layouts` could not place blocked every later item's layout. 4 of 140 records lost silently | the cut falls between lines and repeats the table's header in each continuation chunk; an unplaceable item no longer blocks later ones; a manifest cached with the old cut is re-chunked once; live: a 140-record x 76-column workbook yields 140 records | done 2026-11-05 (ADR-0141): live, the workbook (280 rows, two per record) gave 280/280 row records, 75/280 with the old cut |
|
|
135
|
+
| PS-61 | TexWright's question in the same request: the default segmenter `segment_layout` is on neither public tier, so a pack cannot wrap it | export it on `rag_wright.pack_sdk` | done 2026-11-05: `pack_sdk.segment_layout` (the engine's own object); the wrap-the-default pattern in `kg-construction.md` and the ingestion skill; a pack segmenter delegating to it runs through `build_ingestion` |
|
|
136
|
+
| PS-62 | TexWright, same request: the loss was silent (every `check_*` passed) | a record table whose rows do not each reach a unit with its `TableRow` is reported in the `IngestionReport` | done 2026-11-05: `DocumentReport.unreached_table_rows` (`table_ref`, `sheet`, `reached`, `total`, `missing`) and an `[ingest] warning:` line; a block table is not a loss; live, the pre-PS-60 cut on the workbook reports 75 of 280 rows reached (205 missing, matching the records lost), the new cut reports nothing |
|
|
131
137
|
| PS-48 | Port the agent harness's substrate behaviour tests from RuleWright onto the engine's fabric fixture (ADR-0139 handover): of RuleWright's 553 harness-touching tests, 314 test the substrate (port), 213 RuleWright's composition (stay), 25 live (1 substrate: OpenRouter cost accounting). Seven gated sub-tasks: **a** shared `tests/harness/fabric.py` + scripting/slow/hanging/failing fake models + `InMemorySaver` helpers, then events, skills, clarify (~23); **b** models and errors (~42); **c** runs, confirm, continuation (~32); **d** decisions and rules (~51); **e** grading (~32); **f** seen and memory (~41); **g** workers, batch, dispatch, tiers, agent wiring, filesystem, interpreter, withhold + the live accounting test (~93, may split). Ambiguous tests split, not moved whole; a ported test failing on engine code is a substrate defect fixed in that sub-task; deadline globals via monkeypatch; no new dependencies. Follow-up (owner RuleWright): retire its substrate duplicates once ported | each sub-task's ported tests green on the fabric fixture | todo (proposed; awaiting go-ahead) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rag-wright"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.17.0"
|
|
4
4
|
description = "A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.13"
|
|
@@ -51,6 +51,7 @@ dependencies = [
|
|
|
51
51
|
"pypdfium2>=5.11",
|
|
52
52
|
"pyshacl>=0.40.1",
|
|
53
53
|
"python-dotenv>=1.2",
|
|
54
|
+
"requests>=2.34.2",
|
|
54
55
|
"scikit-learn>=1.9.1",
|
|
55
56
|
"sentence-transformers>=6.1.0",
|
|
56
57
|
"transformers>=5.4,<5.9",
|
|
@@ -22,13 +22,13 @@ Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`)
|
|
|
22
22
|
|---|---|---|---|
|
|
23
23
|
| parse (PDF, Office, spreadsheets incl. hidden sheets, HTML, Markdown, images and scans; embedded files) | engine | docling, content-hash cached; images and scanned pages are OCR'd, and only degraded pages escalate to the vision model (the `VISION_OCR` role) | (none) |
|
|
24
24
|
| chunk | engine default, domain may override | structural boundaries; a model refines only an over-cap section (domain-neutral prompt) | `chunk_model=`, `chunk_discoverer=` (e.g. `default_chunk_discoverer(guidance=...)` to say what a coherent unit is in your documents) |
|
|
25
|
-
| segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` |
|
|
25
|
+
| segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` (to adjust the default rather than replace it, wrap `pack_sdk.segment_layout`) |
|
|
26
26
|
| tag spans (soft tags) | domain, optional | none | `span_tagger=` (to compare models behind it, see section 5 of `docs/domain-adaptation/classification-and-decision-models.md`) |
|
|
27
27
|
| index spans (embed + store, page/bbox provenance) | engine | the workspace's ingest embedder | `embedder=` |
|
|
28
28
|
| group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
|
|
29
29
|
| choose each unit's representative span (its `anchor` + leading tag) | **domain decision**, optional | the grouper's choice: the first member, often a heading | `unit_representative=` |
|
|
30
30
|
| extract records from a unit | **domain (required)** | (none) | the `extractor` argument |
|
|
31
|
-
| write records | engine default | `kg_write` | `writer=` |
|
|
31
|
+
| write records | engine default | `kg_write` | `writer=` (returns the number of records now in the graph, or `None`) |
|
|
32
32
|
| per-document follow-up (e.g. an entity graph) | domain, optional | none | `document_hook=` |
|
|
33
33
|
| `Document` node, embedded children (`EmbeddedIn` / `AttachedTo`), progress, dead-lettering | engine | always on | (none) |
|
|
34
34
|
|
|
@@ -181,6 +181,9 @@ category.
|
|
|
181
181
|
`evaluate_ingestion(..., table_labels=[{"pattern": <regex on the header row>, "label": "record"|"block"}])`
|
|
182
182
|
(first match wins): a block table split per row, or a wide record table not split, is a failure, and tables no
|
|
183
183
|
pattern matched are listed in `unlabelled_tables`.
|
|
184
|
+
- **Every row of a record table should reach a unit.** After an ingest, `DocumentReport.unreached_table_rows` lists
|
|
185
|
+
each record table whose rows did not all reach a unit with their `TableRow` (with the `[ingest] warning:` line);
|
|
186
|
+
an empty list on your samples is the check. Rows listed there produced no record.
|
|
184
187
|
- **How an embedded file finds its row.** An identifier is a token of 4+ characters containing a digit that appears
|
|
185
188
|
on at most `IdentifierRule.max_rows` table rows and in at most `max_files` embedded files (defaults 3 and 3; set
|
|
186
189
|
them with `IngestionTuning(identifier=IdentifierRule(...))`). A file whose identifiers match no row, or too many,
|
|
@@ -23,6 +23,10 @@ class StoreConfig:
|
|
|
23
23
|
password: str
|
|
24
24
|
backend: str = "arcadedb"
|
|
25
25
|
protocol: str = "http"
|
|
26
|
+
# RuleWright (2026-10-31): the write-conflict retry budget. None: `ARCADEDB_CONFLICT_ATTEMPTS` /
|
|
27
|
+
# `ARCADEDB_CONFLICT_BACKOFF_CAP_S`, else 20 attempts with each wait capped at 2 s (about 25 s in all).
|
|
28
|
+
conflict_attempts: Optional[int] = None
|
|
29
|
+
conflict_backoff_cap_s: Optional[float] = None
|
|
26
30
|
|
|
27
31
|
@classmethod
|
|
28
32
|
def from_env(cls) -> "StoreConfig":
|
|
@@ -131,7 +131,9 @@ def _build_store(config: EngineConfig, corpus: str, *, reset: bool, create: bool
|
|
|
131
131
|
from rag_wright.store.arcadedb import ArcadeDBStore
|
|
132
132
|
|
|
133
133
|
return ArcadeDBStore.from_config(sc.host, sc.port, sc.user, sc.password, database=corpus,
|
|
134
|
-
protocol=sc.protocol, reset=reset, pack_ttl=config.pack, create=create
|
|
134
|
+
protocol=sc.protocol, reset=reset, pack_ttl=config.pack, create=create,
|
|
135
|
+
conflict_attempts=sc.conflict_attempts,
|
|
136
|
+
conflict_backoff_cap_s=sc.conflict_backoff_cap_s)
|
|
135
137
|
|
|
136
138
|
|
|
137
139
|
def drop_workspace(config: EngineConfig, *, corpus: str) -> bool:
|
|
@@ -25,6 +25,8 @@ from __future__ import annotations
|
|
|
25
25
|
|
|
26
26
|
import asyncio
|
|
27
27
|
import json
|
|
28
|
+
import logging
|
|
29
|
+
import re
|
|
28
30
|
from pathlib import Path
|
|
29
31
|
from typing import Any, Optional, Protocol, runtime_checkable
|
|
30
32
|
|
|
@@ -43,6 +45,8 @@ from rag_wright.models.profiles import ModelRole, model_for
|
|
|
43
45
|
from rag_wright.models.seam import build_structured
|
|
44
46
|
from rag_wright.skills.rlm.agent import build_rlm_agent, rlm_interpreter_session
|
|
45
47
|
|
|
48
|
+
_log = logging.getLogger(__name__)
|
|
49
|
+
|
|
46
50
|
DEFAULT_TOKEN_CAP = 20_000
|
|
47
51
|
DEFAULT_SUMMARY_CONCURRENCY = 8 # in-flight summary calls (backpressure); summaries are network-bound
|
|
48
52
|
_SUMMARIZE_PROMPT = "Summarize this document chunk in one or two sentences, factually:"
|
|
@@ -518,10 +522,70 @@ def _estimate_tokens(text: str) -> int:
|
|
|
518
522
|
return max(1, len(text) // 4)
|
|
519
523
|
|
|
520
524
|
|
|
525
|
+
_TABLE_LINE = re.compile(r"[ \t]*\|")
|
|
526
|
+
_TABLE_SEPARATOR = re.compile(r"[ \t]*\|?[ \t:|-]*-[ \t:|-]*\|?[ \t]*")
|
|
527
|
+
|
|
528
|
+
|
|
521
529
|
def _hard_split(text: str, token_cap: int) -> list[str]:
|
|
522
|
-
"""Split text that alone exceeds the cap into
|
|
523
|
-
|
|
524
|
-
|
|
530
|
+
"""Split text that alone exceeds the cap into pieces under the cap (by chars).
|
|
531
|
+
|
|
532
|
+
PS-60 (TexWright): each cut falls at the last blank line in the window's second half, else the last line break,
|
|
533
|
+
else the last space, and only a run with none of them is cut at a fixed length; the one whitespace character cut
|
|
534
|
+
at is dropped. A cut inside a pipe table repeats the table's header and separator rows at the top of the next
|
|
535
|
+
piece, so every piece is a well-formed table and every row stays whole: the old fixed-length cut fell mid-row,
|
|
536
|
+
and the rows after it lost their table layout, their own spans and their `TableRow`. Pieces stay strictly under
|
|
537
|
+
the cap, so a cached manifest holding a cap-length piece can only come from the old cut (`_stale_split`)."""
|
|
538
|
+
cap = token_cap * 4
|
|
539
|
+
pieces: list[str] = []
|
|
540
|
+
rest = text
|
|
541
|
+
floor = 0 # the carried header's length: a cut must fall after it, or the split would not advance
|
|
542
|
+
while len(rest) >= cap:
|
|
543
|
+
window = rest[: cap - 1]
|
|
544
|
+
blank = window.rfind("\n\n", max(floor, cap // 2))
|
|
545
|
+
line = window.rfind("\n", floor + 1)
|
|
546
|
+
space = max(window.rfind(" ", floor + 1), window.rfind("\t", floor + 1))
|
|
547
|
+
if blank > floor:
|
|
548
|
+
end, start = blank, blank + 2
|
|
549
|
+
elif line > floor:
|
|
550
|
+
end, start = line, line + 1
|
|
551
|
+
elif space > floor:
|
|
552
|
+
end, start = space, space + 1
|
|
553
|
+
else:
|
|
554
|
+
end = start = cap - 1
|
|
555
|
+
piece, rest = rest[:end], rest[start:]
|
|
556
|
+
pieces.append(piece)
|
|
557
|
+
header = _continued_table_header(piece, rest)
|
|
558
|
+
if header and len(header) < cap // 2:
|
|
559
|
+
rest, floor = f"{header}\n{rest}", len(header)
|
|
560
|
+
else:
|
|
561
|
+
floor = 0
|
|
562
|
+
if rest:
|
|
563
|
+
pieces.append(rest)
|
|
564
|
+
return pieces
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
def _stale_split(manifest: ChunkManifest) -> bool:
|
|
568
|
+
"""PS-60: whether a cached manifest holds a table cut by the old fixed-length hard split, which made every piece
|
|
569
|
+
but the last exactly the cap long; `_hard_split` now keeps pieces under it. Only a piece holding table rows
|
|
570
|
+
counts: an old prose split keeps its cached chunks (re-chunking it would change nothing a reader relies on)."""
|
|
571
|
+
cap = manifest.token_cap * 4
|
|
572
|
+
return any(len(c.text) == cap and any(_TABLE_LINE.match(ln) for ln in c.text.split("\n"))
|
|
573
|
+
for c in manifest.chunks[:-1])
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
def _continued_table_header(piece: str, rest: str) -> str:
|
|
577
|
+
"""The header and separator rows of the pipe table a cut fell inside (`piece` ends in it and `rest` continues
|
|
578
|
+
it), or "" when the cut is not inside a table or the table's header cannot be told."""
|
|
579
|
+
if not _TABLE_LINE.match(rest.split("\n", 1)[0]):
|
|
580
|
+
return ""
|
|
581
|
+
lines = piece.split("\n")
|
|
582
|
+
i = len(lines)
|
|
583
|
+
while i > 0 and _TABLE_LINE.match(lines[i - 1]):
|
|
584
|
+
i -= 1
|
|
585
|
+
block = lines[i:]
|
|
586
|
+
if len(block) >= 2 and _TABLE_SEPARATOR.fullmatch(block[1]):
|
|
587
|
+
return f"{block[0]}\n{block[1]}"
|
|
588
|
+
return ""
|
|
525
589
|
|
|
526
590
|
|
|
527
591
|
_SEP = "\n\n"
|
|
@@ -745,7 +809,10 @@ def _chunk_prepare(parsed: ParsedDocument, cache_dir: Path, discoverer: Optional
|
|
|
745
809
|
cache_dir.mkdir(parents=True, exist_ok=True)
|
|
746
810
|
manifest_path = cache_dir / f"{parsed.source_doc_id}.{parsed.content_hash[:16]}.chunks.json"
|
|
747
811
|
if manifest_path.exists(): # content-hash gate
|
|
748
|
-
|
|
812
|
+
cached = ChunkManifest.model_validate_json(manifest_path.read_text(encoding="utf-8"))
|
|
813
|
+
if not _stale_split(cached):
|
|
814
|
+
return cached, manifest_path, None, None
|
|
815
|
+
_log.info("re-chunking %s: its cached chunks cut a table mid-row (PS-60)", parsed.source_doc_id)
|
|
749
816
|
document = _as_content_view(load_document(parsed)) # issue 0014: chunk the reading-order body (incl. tables)
|
|
750
817
|
disc = discoverer if discoverer is not None else SeamBoundaryDiscoverer(token_cap=token_cap)
|
|
751
818
|
return None, manifest_path, document, disc
|
|
@@ -196,9 +196,11 @@ class Extractor(Protocol):
|
|
|
196
196
|
|
|
197
197
|
|
|
198
198
|
class RecordWriter(Protocol):
|
|
199
|
-
"""Optional: persist a document's extractions. The engine default writes them with `kg_write`.
|
|
199
|
+
"""Optional: persist a document's extractions. The engine default writes them with `kg_write`. Return the number of
|
|
200
|
+
records now in the graph (written, or found already written); `None` lets the engine count the record nodes it
|
|
201
|
+
handed over (RuleWright, 2026-10-31: only the writer knows what landed)."""
|
|
200
202
|
|
|
201
|
-
def __call__(self, source_doc_id: str, extractions: Sequence[UnitExtraction]) -> Awaitable[
|
|
203
|
+
def __call__(self, source_doc_id: str, extractions: Sequence[UnitExtraction]) -> Awaitable[Optional[int]]: ...
|
|
202
204
|
|
|
203
205
|
|
|
204
206
|
# --- the engine-enforced checks --------------------------------------------------------------------------------
|
|
@@ -55,7 +55,11 @@ class DocumentReport:
|
|
|
55
55
|
sheets left out (`IngestSource.include_hidden_sheets=False`). `children`: the ids of embedded files and PDF
|
|
56
56
|
attachments ingested as child documents (`parent_doc_id` is set on theirs); `embedded_skipped`: embedded files
|
|
57
57
|
that could not be ingested. `links`: `AttachedTo` record links written, by confidence; `unmapped_links`: links
|
|
58
|
-
whose record row could not be found. `
|
|
58
|
+
whose record row could not be found. `unreached_table_rows` (PS-62): one entry per record table -- a table at
|
|
59
|
+
least one of whose rows reached a unit carrying its `TableRow` -- whose data rows did not ALL reach one,
|
|
60
|
+
`{table_ref, sheet, reached, total, missing}` (`missing`: the 1-based data-row indices, at most the first
|
|
61
|
+
1,000); the document still lands, so read this, or the `[ingest] warning:` line, to know rows were lost.
|
|
62
|
+
`dead_letter`: why the whole document failed (None when it landed)."""
|
|
59
63
|
|
|
60
64
|
doc_id: str
|
|
61
65
|
parent_doc_id: Optional[str] = None
|
|
@@ -70,6 +74,7 @@ class DocumentReport:
|
|
|
70
74
|
children: list[str] = field(default_factory=list)
|
|
71
75
|
links: dict[str, int] = field(default_factory=dict) # AttachedTo edges written, by confidence
|
|
72
76
|
unmapped_links: int = 0 # record links whose row span could not be found
|
|
77
|
+
unreached_table_rows: list[dict] = field(default_factory=list) # PS-62: record tables that lost rows
|
|
73
78
|
dead_letter: Optional[str] = None
|
|
74
79
|
|
|
75
80
|
|
|
@@ -119,6 +124,7 @@ class ExtractStage:
|
|
|
119
124
|
extractions: list = field(default_factory=list)
|
|
120
125
|
failures: list[dict] = field(default_factory=list)
|
|
121
126
|
row_spans: dict = field(default_factory=dict)
|
|
127
|
+
unreached_rows: list[dict] = field(default_factory=list) # PS-62: `_unreached_rows`
|
|
122
128
|
|
|
123
129
|
|
|
124
130
|
class IngestionStages:
|
|
@@ -235,6 +241,7 @@ class IngestionStages:
|
|
|
235
241
|
document = self.document(sd)
|
|
236
242
|
stage.row_spans = _row_spans(document, [t.span for t in tagged])
|
|
237
243
|
_attach_table_rows(document, stage.units, stage.row_spans)
|
|
244
|
+
stage.unreached_rows = _unreached_rows(document, stage.units)
|
|
238
245
|
sem = asyncio.Semaphore(self.tuning.extract_concurrency)
|
|
239
246
|
|
|
240
247
|
async def one(unit: Any) -> Optional[UnitExtraction]:
|
|
@@ -252,9 +259,13 @@ class IngestionStages:
|
|
|
252
259
|
return stage
|
|
253
260
|
|
|
254
261
|
async def write(self, sd: Any, extractions: list) -> int:
|
|
255
|
-
"""Persist the records (the domain's writer, else `kg_write`). Returns the number
|
|
262
|
+
"""Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own
|
|
263
|
+
count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one
|
|
264
|
+
transaction (it raises rather than land part of them)."""
|
|
256
265
|
if self.writer is not None:
|
|
257
|
-
await self.writer(sd.source_doc_id, extractions)
|
|
266
|
+
landed = await self.writer(sd.source_doc_id, extractions)
|
|
267
|
+
if landed is not None:
|
|
268
|
+
return int(landed)
|
|
258
269
|
else:
|
|
259
270
|
nodes = [n for e in extractions for n in e.nodes]
|
|
260
271
|
edges = [ed for e in extractions for ed in e.edges]
|
|
@@ -413,6 +424,12 @@ class IngestionPipeline:
|
|
|
413
424
|
+ (f"DEAD-LETTER: {top.dead_letter}" if top.dead_letter else
|
|
414
425
|
f"spans={top.spans} units={top.units} records={top.records} "
|
|
415
426
|
f"children={len(top.children)} failures={len(top.extraction_failures)}"))
|
|
427
|
+
for d in docs: # PS-62: a record table's lost rows are said, never only counted
|
|
428
|
+
for t in d.unreached_table_rows:
|
|
429
|
+
where = f"sheet {t['sheet']!r}" if t["sheet"] else f"table {t['table_ref']}"
|
|
430
|
+
self._progress(f"[ingest] warning: {d.doc_id}: {where}: {t['reached']} of {t['total']} rows "
|
|
431
|
+
f"reached a unit with their row; the rest produced no record "
|
|
432
|
+
f"(first missing: {t['missing'][:5]})")
|
|
416
433
|
return {"documents": [_dump(list[DocumentReport], docs)]}
|
|
417
434
|
|
|
418
435
|
def finish(state: _RunState) -> dict:
|
|
@@ -518,6 +535,7 @@ class IngestionPipeline:
|
|
|
518
535
|
rep.chunks, rep.units = len(state["chunks"]), len(extracted.units)
|
|
519
536
|
rep.spans, rep.span_failures = indexed["span_count"], indexed["span_failures"]
|
|
520
537
|
rep.extraction_failures = extracted.failures
|
|
538
|
+
rep.unreached_table_rows = extracted.unreached_rows
|
|
521
539
|
reports = [rep]
|
|
522
540
|
for j, emb in enumerate(sd.embedded, 1):
|
|
523
541
|
if depth + 1 > _MAX_CHILD_DEPTH:
|
|
@@ -580,13 +598,15 @@ def _load(kind: Any, value: Any) -> Any:
|
|
|
580
598
|
|
|
581
599
|
def _dump_extract_stage(stage: ExtractStage) -> dict:
|
|
582
600
|
return {"units": _dump(list[Unit], stage.units), "extractions": _dump(list[UnitExtraction], stage.extractions),
|
|
583
|
-
"failures": stage.failures, "row_spans": [[ref, row, span] for (ref, row), span in stage.row_spans.items()]
|
|
601
|
+
"failures": stage.failures, "row_spans": [[ref, row, span] for (ref, row), span in stage.row_spans.items()],
|
|
602
|
+
"unreached_rows": stage.unreached_rows}
|
|
584
603
|
|
|
585
604
|
|
|
586
605
|
def _load_extract_stage(value: dict) -> ExtractStage:
|
|
587
606
|
return ExtractStage(units=_load(list[Unit], value["units"]),
|
|
588
607
|
extractions=_load(list[UnitExtraction], value["extractions"]), failures=value["failures"],
|
|
589
|
-
row_spans={(ref, row): span for ref, row, span in value["row_spans"]}
|
|
608
|
+
row_spans={(ref, row): span for ref, row, span in value["row_spans"]},
|
|
609
|
+
unreached_rows=value.get("unreached_rows", [])) # absent from a pre-PS-62 checkpoint
|
|
590
610
|
|
|
591
611
|
|
|
592
612
|
class _RunState(TypedDict, total=False):
|
|
@@ -710,6 +730,32 @@ def _attach_table_rows(document: Any, units: list, row_spans: dict) -> None:
|
|
|
710
730
|
unit.table_row = rows.get(keys.pop())
|
|
711
731
|
|
|
712
732
|
|
|
733
|
+
_MAX_MISSING_LISTED = 1000
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
def _unreached_rows(document: Any, units: list) -> list[dict]:
|
|
737
|
+
"""PS-62: the record tables whose data rows did not all reach a unit carrying their `TableRow`. A table none of
|
|
738
|
+
whose rows reached one is a block table (one unit for the whole table) or not a table the grouper split by row,
|
|
739
|
+
so it is not a loss; a table some of whose rows did is read row by row, and every row it lacks was lost."""
|
|
740
|
+
from rag_wright.ingestion.tables import rows_of, visible_tables
|
|
741
|
+
|
|
742
|
+
reached: dict[str, set[int]] = {}
|
|
743
|
+
for unit in units:
|
|
744
|
+
if unit.table_row is not None:
|
|
745
|
+
reached.setdefault(unit.table_row.table_ref, set()).add(unit.table_row.row_index)
|
|
746
|
+
out: list[dict] = []
|
|
747
|
+
for table in visible_tables(document):
|
|
748
|
+
got = reached.get(table.self_ref)
|
|
749
|
+
if not got:
|
|
750
|
+
continue
|
|
751
|
+
rows = rows_of(table, document)
|
|
752
|
+
missing = [r.row_index for r in rows if r.row_index not in got]
|
|
753
|
+
if missing:
|
|
754
|
+
out.append({"table_ref": table.self_ref, "sheet": rows[0].sheet, "reached": len(rows) - len(missing),
|
|
755
|
+
"total": len(rows), "missing": missing[:_MAX_MISSING_LISTED]})
|
|
756
|
+
return out
|
|
757
|
+
|
|
758
|
+
|
|
713
759
|
def _check_model_ceilings(tuning: IngestionTuning, documents: int, progress: Callable[[str], Any]) -> None:
|
|
714
760
|
"""PS-21: warn when this ingest's extractor fan-out can exceed a resolved model's server ceiling. The peak is
|
|
715
761
|
`min(document_concurrency, documents) x extract_concurrency`; a model's ceiling is its profile's
|