rag-wright 0.12.0__tar.gz → 0.13.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.12.0 → rag_wright-0.13.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +4 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +1 -1
- {rag_wright-0.12.0/src/rag_wright/.agents → rag_wright-0.13.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +5 -2
- rag_wright-0.13.0/.release-please-manifest.json +3 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/CHANGELOG.md +15 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/CLAUDE.md +1 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/PKG-INFO +1 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/ArcadeDB_Local.md +1 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +11 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/api/README.md +35 -3
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/configuration.md +5 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/README.md +1 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/_engine-gaps.md +5 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/authoring-capabilities.md +4 -3
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/installation.md +11 -4
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/plan.md +5 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.12.0.md +2 -2
- {rag_wright-0.12.0 → rag_wright-0.13.0}/pyproject.toml +1 -1
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/migrate_span_fields.py +5 -6
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +4 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +1 -1
- {rag_wright-0.12.0/.claude → rag_wright-0.13.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +5 -2
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/__init__.py +9 -5
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/kg.py +34 -4
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/workspace.py +22 -1
- rag_wright-0.13.0/src/rag_wright/capabilities/parse_audit.py +88 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/parsing.py +11 -6
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/scan_quality.py +21 -7
- rag_wright-0.13.0/src/rag_wright/capabilities/span_search.py +102 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/store/arcadedb.py +12 -18
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/store/seam.py +35 -3
- rag_wright-0.13.0/tests/api/test_migrate_span_fields.py +67 -0
- rag_wright-0.13.0/tests/capabilities/test_parse_audit.py +149 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_scan_quality.py +32 -0
- rag_wright-0.13.0/tests/capabilities/test_span_search.py +129 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_tiered_ocr.py +73 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_span.py +16 -0
- rag_wright-0.13.0/tests/store/test_kg_range.py +64 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/uv.lock +1 -1
- rag_wright-0.12.0/.release-please-manifest.json +0 -3
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/settings.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.env.example +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/.gitignore +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/LICENSE +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/README.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/SPEC.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/conftest.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/README.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/api/harness.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/api/pack_sdk.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/architecture.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/README.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.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.12.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/concepts.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/kg-construction.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/evals.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/harness.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/playbook.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/quickstart.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/reference-pack.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/releasing.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/evals/plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/docs/workspaces.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/acord.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/build_golden.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/embedded_eval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/function_ceiling.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/function_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/golden.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/harness.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/kg_primary.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/multihop.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/nl_to_type.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/relational_eval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/test_acord.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/test_harness.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/examples/model_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/examples/quickstart.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/plan.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/release-please-config.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acord_unify.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/build_harness_doc.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/graph_status.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/measure_harness_genericity.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/measure_silver.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/agents.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/config.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/evals.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/evals/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/evals/gold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/evals/runner.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/evals/scorers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/accounting.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/agent.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/batch.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/clarify.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/confirm.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/decisions.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/definition.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/dispatch.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/errors.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/events.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/filesystem.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/grading.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/interpreter.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/memory.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/models.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/rules.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/runs.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/scope.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/seen.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/skills.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/thinking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/tiers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/tracing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/withhold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/harness/workers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/builder.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/model_servers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/seam.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/pack_sdk/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/util/pdfium.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tasks.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_agent_chat_model.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_agent_chat_model_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_api_embedder_ps39.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_discover.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_documents.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_drop_workspace.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_drop_workspace_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_kg.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_open_workspace_reconfig.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_options.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_pdf_page_count.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_public_gaps_ps38.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_tracing_helpers_ps32.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_usage.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_lock_version.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_pdfium_door.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/arch/test_shipped_skills.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/async_helpers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/conftest.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_gold_contracts.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_gold_import.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_langfuse_backend.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_runner.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_scorer_parity.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_scorers_a.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_scorers_b.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_scorers_c.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/evals/test_scorers_d.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_greenfield_conformance.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_harness_accounting.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_harness_engine_wiring.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_harness_genericity.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_harness_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_harness_recorder.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/harness/test_harness_thinking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_aevaluate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_sheet_continuations.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_model_servers.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_seam_event_loops.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/models/test_usage.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/skills/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_concurrent_writes.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_store_create_flag.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/util/__init__.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.12.0 → rag_wright-0.13.0}/tests/util/test_spacy_model.py +0 -0
{rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/building-an-ingestion-capability/SKILL.md
RENAMED
|
@@ -154,6 +154,10 @@ category.
|
|
|
154
154
|
|
|
155
155
|
## 5. Spreadsheets, tables and embedded files
|
|
156
156
|
|
|
157
|
+
- **Blank PDF pages** are read as empty, never sent to the vision model (engine 0.13.0). On a parse cache built
|
|
158
|
+
by an earlier engine with `VISION_OCR` configured, run `find_blank_pages_with_text(cache_dir, sources)` once:
|
|
159
|
+
delete each finding's `cache_files` and re-ingest that document (its blank pages may hold invented text).
|
|
160
|
+
|
|
157
161
|
- **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
|
|
158
162
|
`DocumentReport.skipped_hidden_sheets`).
|
|
159
163
|
- **Blank rows inside a table**: the parse cuts a sheet's table at every blank row; the engine glues a piece back
|
{rag_wright-0.12.0 → rag_wright-0.13.0}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md
RENAMED
|
@@ -58,7 +58,7 @@ Every product item lands in one or more of these. The route column is where the
|
|
|
58
58
|
| **Domain knowledge**: vocabulary, schema, constraints, synonyms, decision criteria | "controlled vocabularies", "the ontology", "mandatory fields", "valid ranges" | `EngineConfig(pack=...)` (the store creates the declared types on `open_workspace`); your capabilities read value sets and SHACL shapes with `rdflib` / `pyshacl` | `authoring-a-capability` | ontology authoring |
|
|
59
59
|
| **Ingestion**: documents, spreadsheets, images, embedded files into the graph | "parse the forms", "load the lab reports", "idempotent re-runs" | `build_ingestion` (your extractor + optional hooks) → `aingest`; `IngestSource`, `IngestionTuning`, `table_rows` / `TableRow`, `evaluate_ingestion`, `check_extraction`; `KgNode` / `KgEdge` | `building-an-ingestion-capability` | KG construction |
|
|
60
60
|
| **Entity and registry resolution** | "resolve against the yarn register", "queue unresolved mentions" | your `document_hook`; the entity-resolution building blocks on `rag_wright.pack_sdk` | `building-an-ingestion-capability` | entity resolution |
|
|
61
|
-
| **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, hybrid search from `rag_wright.
|
|
61
|
+
| **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, `Range`, hybrid span search with `span_search` from `rag_wright.api`), registered with `CapabilityManifest` + `register_capability` / `load_pack`, invoked with `ainvoke_subgraph` | `authoring-a-capability` | authoring capabilities |
|
|
62
62
|
| **A cited answer, or a refusal** | "every answer cites its source", "say when it is not in the records" | `agenerate_answer` over `EvidenceItem`s (an answer states its support; "none" abstains), `ajudge_spans` | `authoring-a-capability` | concepts (answers) |
|
|
63
63
|
| **A typed decision or classification** | "classify the structure", "which of these is it" | `classifier-opportunity-analysis` first; then rules, a trained classifier, or the decision model (`jev_decision` from `engine_capabilities()`, criteria in the pack) | `classifier-opportunity-analysis` → `setfit` / `laya` | classification and decision models |
|
|
64
64
|
| **A deterministic workflow behind a button** (mode **D**) | "upload, confirm, save", "export CSV" | a product **operation** (one function per user operation) calling your capabilities; the route calls the operation | `building-a-product-backend` | domain-adaptation step 8 |
|
|
@@ -27,8 +27,11 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
|
|
|
27
27
|
`EngineConfig`/`StoreConfig` (`StoreConfig.from_env()` reads `ARCADEDB_*`)/`open_workspace`
|
|
28
28
|
(`temporary_workspace`/`drop_workspace` for disposable and removed databases), the invokers
|
|
29
29
|
(`ainvoke_subgraph`/`invoke_model`/`ainvoke_model`), discovery (`capability_index`/`discover`), the KG accessors
|
|
30
|
-
(`kg_read
|
|
31
|
-
|
|
30
|
+
(`kg_read`, `kg_write`, `kg_edges`, `kg_count`/`kg_delete`/`kg_update`, all filtering by `where` values that
|
|
31
|
+
are equality, a list for membership, `NOT_NULL` or a `Range(gt=, ge=, lt=, le=)` on any number of fields,
|
|
32
|
+
evaluated in the store;
|
|
33
|
+
`entities_by_name`, `span_positions`), hybrid span search (`span_search` / `aspan_search`: cited spans from
|
|
34
|
+
the dense and sparse index, fused in the store), `pack_store(ws, cls)` (build your pack's store extension over the
|
|
32
35
|
workspace's store; the store itself stays private), metering and tracing (`measure_usage`, `record_usage`,
|
|
33
36
|
`traced_run`/`traced_step`, and for code emitting its own generations `tracing_on`/`trace_level`/
|
|
34
37
|
`start_generation`/`finish_generation`/`flush_tracing`), the query embedder (`ws.embedder` where you hold a
|
|
@@ -4,6 +4,21 @@ 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.13.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.12.0...0.13.0) (2026-10-15)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **PS-35:** migrate a pre-0.2.0 database's Span fields through rag_wright.api ([856f956](https://github.com/fzaidi-dai/RAG_Wright/commit/856f956f674c731d170878d44ec3fef980a10ba9))
|
|
13
|
+
* **PS-44:** range filters on any number of KG fields, evaluated in the store (TexWright ER-1) ([cc62c49](https://github.com/fzaidi-dai/RAG_Wright/commit/cc62c49000161567869d46127bb158db16106c28))
|
|
14
|
+
* **PS-45:** a public hybrid span search on rag_wright.api (engine gap G24) ([4aa802f](https://github.com/fzaidi-dai/RAG_Wright/commit/4aa802fdc6cf12a3c732aa7a41e4de6240dd05da))
|
|
15
|
+
* **PS-47:** find cached parses holding text a VLM invented for a blank page ([ff92d81](https://github.com/fzaidi-dai/RAG_Wright/commit/ff92d81956590002418ef50f41dee54e0b0b6ef8))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* **PS-46:** a page with no ink is blank, never escalated to the VLM (TexWright 2026-10-15) ([fc633a8](https://github.com/fzaidi-dai/RAG_Wright/commit/fc633a84aa52a89de5b79d90b50d80f7d622d792))
|
|
21
|
+
|
|
7
22
|
## [0.12.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.11.0...0.12.0) (2026-10-15)
|
|
8
23
|
|
|
9
24
|
|
|
@@ -57,7 +57,7 @@ The failure mode to avoid, which has happened before: a command fails with "modu
|
|
|
57
57
|
|
|
58
58
|
> **CURRENT STATE (2026-10-15): `rag-wright` 0.11.0 is RELEASED** (PR #13: PS-40 the product-building skills ship,
|
|
59
59
|
> PS-41 the skills audit, PS-42 by-slug registration; RuleWright's guide `docs/specs/public-surface/rulewright-migration-0.11.0.md`).
|
|
60
|
-
> **PS-43
|
|
60
|
+
> **PS-43 RELEASED as 0.12.0 (2026-10-15, PR #14)**: `worker_spec(definition=)`, `docs/harness.md` (tables generated by
|
|
61
61
|
> `scripts/build_harness_doc.py`), the harness source cleared of RuleWright's vocabulary with a guard; guide
|
|
62
62
|
> `rulewright-migration-0.12.0.md`. Before it,
|
|
63
63
|
> **(2026-10-14): PS-32 done: the agent harness is the engine's third public tier `rag_wright.harness`**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.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
|
|
@@ -60,7 +60,7 @@ typed edges, and `ComplianceStore` creates `Requirement`, so they appear the fir
|
|
|
60
60
|
|
|
61
61
|
A database created before the `Span` field rename (`contract_id`, `function`, `functions` became `document_id`,
|
|
62
62
|
`primary_tag`, `tags`) is refused by `ensure_schema` with a `RuntimeError`; migrate it once with
|
|
63
|
-
`
|
|
63
|
+
`migrate_span_fields(config, corpus=...)` from `rag_wright.api` ([installation](installation.md)).
|
|
64
64
|
|
|
65
65
|
## Stop / reset
|
|
66
66
|
|
{rag_wright-0.12.0 → rag_wright-0.13.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md
RENAMED
|
@@ -84,3 +84,14 @@ now, a self-hosted vLLM-Gemma-4 later for data sovereignty (only `base_url` chan
|
|
|
84
84
|
as the escalation provider for data sovereignty; (3) routing the vision call **through the async model seam**
|
|
85
85
|
for true thread cancellation (today `to_thread` unblocks the caller at the deadline but the docling thread
|
|
86
86
|
runs on); (4) classical preprocessing stays available as a cheap first pass but is not the heavy-scan fix.
|
|
87
|
+
|
|
88
|
+
## Amendment (2026-10-15, PS-46): a blank page is not degraded
|
|
89
|
+
|
|
90
|
+
A page with no ink read as both "blurry" (a white page has Laplacian variance 0) and "faint" (no pixel below 128),
|
|
91
|
+
so it was escalated, and a VLM asked to transcribe an empty page invents one (TexWright: meeting minutes in another
|
|
92
|
+
language, kept in the parse). The gate now measures `ink_frac` (pixels below 200, faint grey included) and returns
|
|
93
|
+
`ScanQuality.BLANK` for a page with no OCR text and `ink_frac` at most 1e-4: never escalated, never flagged
|
|
94
|
+
needs-rescan, listed in `TieredOCRReport.blank_pages`. Measured margin: blank 0; the heavy faint scan 0.077-0.082
|
|
95
|
+
(its `dark_frac` is 0.0025, which is why `dark_frac` alone cannot separate it); the sparsest real fixture page
|
|
96
|
+
0.019. The post-escalation check stays a flag rather than dropping the VLM text: it is an English word-rate test,
|
|
97
|
+
and a correct transcription of a page with few common words (a number-heavy table) fails it.
|
|
@@ -68,6 +68,10 @@ Members: `STRUCTURED_REASONING` (`'structured_reasoning'`), `STRUCTURED_REASONIN
|
|
|
68
68
|
|
|
69
69
|
One ranked capability match from `discover` — enough for an agent to pick and invoke it by `slug`.
|
|
70
70
|
|
|
71
|
+
### `SpanHit(*, span_id: str, text: str, document_id: str, doc_start: Optional[int] = None, doc_end: Optional[int] = None, pages: list[int] = [], bbox: Optional[tuple[float, float, float, float]] = None, primary_tag: str = '', rank: int, found_by: tuple[str, ...]) -> None`
|
|
72
|
+
|
|
73
|
+
One cited span from `span_search`, best first. `found_by` says which legs found it: `"hybrid"` (the fused dense + sparse search) and/or `"dense"` (the dense floor). `bbox` is `(l, t, r, b)` or None.
|
|
74
|
+
|
|
71
75
|
### `KgNode(type: 'str', key_field: 'str', props: 'dict[str, object]') -> None`
|
|
72
76
|
|
|
73
77
|
A typed KG node to upsert (DD-1b, ADR-0117): `type` is the vertex type, `key_field` the identity field to upsert on, `props` the fields (including `key_field`) as DOMAIN-NATIVE values. The store encodes each prop by its pack-declared storage type -- the caller never serializes to the store's wire format.
|
|
@@ -76,6 +80,18 @@ A typed KG node to upsert (DD-1b, ADR-0117): `type` is the vertex type, `key_fie
|
|
|
76
80
|
|
|
77
81
|
A typed KG edge to create between two nodes identified by (type, key_field, key). `props` are native values (edge properties are type-driven: edges declare no storage schema).
|
|
78
82
|
|
|
83
|
+
### `Range(gt: 'Optional[object]' = None, ge: 'Optional[object]' = None, lt: 'Optional[object]' = None, le: 'Optional[object]' = None) -> None`
|
|
84
|
+
|
|
85
|
+
A `where` value meaning a comparison, evaluated in the store (ER-1): `gt` (>), `ge` (>=), `lt` (<), `le` (<=), at most one lower and one upper bound, at least one bound. Bounds are scalars (numbers compare as numbers, strings lexically). Any number of fields may carry one, beside equality, membership and `NOT_NULL`, on every KG call that takes `where`: `where={"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`.
|
|
86
|
+
|
|
87
|
+
#### `Range.terms(self) -> 'list[tuple[str, object]]'`
|
|
88
|
+
|
|
89
|
+
`[(operator, bound), ...]`, lower bound first.
|
|
90
|
+
|
|
91
|
+
### `BlankPageText(*, source: str, pages: dict[int, str], cache_files: list[str]) -> None`
|
|
92
|
+
|
|
93
|
+
One cached parse with text on blank pages. `source` is the PDF's path (or the name given with its bytes), `pages` maps each blank page to the text the cached parse holds there, and `cache_files` are the cached parse(s) and their OCR sidecar: delete them, then re-ingest the document so it is parsed again.
|
|
94
|
+
|
|
79
95
|
### `EvidenceItem(*, chunk_id: str, text: str, confidence: Optional[str] = None, properties: Optional[list[dict]] = None) -> None`
|
|
80
96
|
|
|
81
97
|
One piece of grounding evidence: a chunk's text, its `chunk_id` (the citation), and — for a graph-derived fact — its confidence tag (surfaced to the generator, FR-S.4).
|
|
@@ -296,7 +312,7 @@ The semantic boundary-discovery seam: decide chunk boundaries as a partition of
|
|
|
296
312
|
|
|
297
313
|
### `open_workspace(config: 'EngineConfig', *, corpus: 'str', reset: 'bool' = False, create: 'bool' = True) -> 'WorkspaceHandle'`
|
|
298
314
|
|
|
299
|
-
Resolve (and cache) the workspace for `corpus` (the backend database name) from `config`. Ensures the schema: the neutral engine types, plus `config.pack`'s declared types when set. Raises `RuntimeError` on a database whose `Span` type still has the pre-ING-8d field names (migrate it with `
|
|
315
|
+
Resolve (and cache) the workspace for `corpus` (the backend database name) from `config`. Ensures the schema: the neutral engine types, plus `config.pack`'s declared types when set. Raises `RuntimeError` on a database whose `Span` type still has the pre-ING-8d field names (migrate it with `migrate_span_fields`). Returns an opaque `WorkspaceHandle`. `reset=True` drops + recreates the database (test/clean-slate) and bypasses the cache. A missing database is created (logged): that is how a new corpus is provisioned. `create=False` raises `LookupError` instead (PS-27) -- use it wherever the corpus must already exist, so a wrong name fails loudly rather than opening an empty graph.
|
|
300
316
|
|
|
301
317
|
One handle per store and corpus is cached for the process. An equal `config` returns it; a different one (new models, options, credentials or pack) returns a new handle that replaces it from then on, so a configuration change takes effect without a restart (PS-16). The new handle reuses the store when the store settings and the pack are unchanged, and the query embedder when the embedding profile is unchanged; a call still holding the old handle finishes on the old config.
|
|
302
318
|
|
|
@@ -304,6 +320,10 @@ One handle per store and corpus is cached for the process. An equal `config` ret
|
|
|
304
320
|
|
|
305
321
|
Drop the database `corpus` (PS-37): everything in it, the retrieval index and the knowledge graph, is deleted and cannot be recovered. Returns True if it existed, False if there was nothing to drop. A cached handle for it is closed and forgotten, so a later `open_workspace` starts fresh. A missing or blank `corpus` raises `ValueError`: the name is always explicit, never a default database.
|
|
306
322
|
|
|
323
|
+
### `migrate_span_fields(config: 'EngineConfig', *, corpus: 'str', batch: 'int' = 5000, progress: 'Optional[Callable[[int, int], None]]' = None) -> 'int'`
|
|
324
|
+
|
|
325
|
+
Migrate the database `corpus` from the pre-0.2.0 `Span` field names (`contract_id`, `function`, `functions`) to the generic ones (`document_id`, `primary_tag`, `tags`), the database `open_workspace` refuses until this has run (PS-35). Values are copied in batches of `batch` and the old properties dropped; `progress(done, total)` is called after each batch. Idempotent: returns the number of records moved, 0 when already migrated. The database must exist (`LookupError` otherwise; it is never created), and a missing or blank `corpus` raises `ValueError`. Afterwards the schema is checked, so a database this returns for opens with `open_workspace`.
|
|
326
|
+
|
|
307
327
|
### `temporary_workspace(config: 'EngineConfig', *, prefix: 'str' = 'tmp') -> 'Iterator[WorkspaceHandle]'`
|
|
308
328
|
|
|
309
329
|
A workspace on a fresh database, `<prefix>_<12 hex>`, dropped when the block exits, whether it succeeds or raises (PS-37). For a probe or a measurement whose database must not outlive it: `with temporary_workspace(config, prefix="probe") as ws: ...`.
|
|
@@ -386,7 +406,7 @@ Rank the live ARD catalog by semantic match to `query`; return the top `k` (opti
|
|
|
386
406
|
|
|
387
407
|
### `kg_read(ws: 'WorkspaceHandle', node_type: 'str', *, where: 'Optional[dict]' = None, fields: 'Optional[list]' = None, distinct: 'Optional[str]' = None, order_by: 'Optional[str]' = None, limit: 'Optional[int]' = None, key_range: 'Optional[tuple]' = None) -> 'list[dict]'`
|
|
388
408
|
|
|
389
|
-
Read typed nodes of `node_type` from the workspace (see `Store.kg_read`).
|
|
409
|
+
Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence) or a `Range` (comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`); all filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand (`lo <= field < hi`). Then projection, distinct, order and limit.
|
|
390
410
|
|
|
391
411
|
### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = ()) -> 'None'`
|
|
392
412
|
|
|
@@ -398,7 +418,7 @@ Generic edge TRAVERSAL over the workspace (see `Store.kg_edges`): node-start out
|
|
|
398
418
|
|
|
399
419
|
### `kg_count(ws: 'WorkspaceHandle', type_name: 'str', *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None) -> 'int'`
|
|
400
420
|
|
|
401
|
-
The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`).
|
|
421
|
+
The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`); `where` as in `kg_read`, `Range` values included.
|
|
402
422
|
|
|
403
423
|
### `kg_delete(ws: 'WorkspaceHandle', type_name: 'str', *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None) -> 'int'`
|
|
404
424
|
|
|
@@ -416,6 +436,14 @@ Resolve an entity NAME to every entity node it matches: `[{entity_id, name, enti
|
|
|
416
436
|
|
|
417
437
|
Every span of `document` with its position provenance, ordered by document position. Each row: `span_id`, `parent_chunk_id`, `span_index`, `text`, `primary_tag` (the span tagger's primary tag, "" if untagged), `document_id`, `doc_start` / `doc_end` (document-absolute offsets), `pages`, and `bbox` DECODED to a `(l, t, r, b)` tuple or None. The engine MECHANISM behind a product's citation/highlight types -- the product wraps these rows into its own presentation type (e.g. `SpanLocation`).
|
|
418
438
|
|
|
439
|
+
### `span_search(ws: 'WorkspaceHandle', query: 'str', *, k: 'int' = 10, documents: 'Optional[list]' = None, tag: 'Optional[str]' = None, dense_floor: 'int' = 3) -> 'list'`
|
|
440
|
+
|
|
441
|
+
Hybrid search over the workspace's span index (every ingested span, embedded dense and sparse): the two legs fused by Reciprocal Rank Fusion in the store, with the top `dense_floor` pure-dense spans guaranteed a place, so a strong semantic match a common-token query would push out of the fused pool is kept (0 turns it off). Returns up to `k` `SpanHit`s, best first, each citation-ready: `span_id`, `text`, `document_id`, `doc_start` / `doc_end`, `pages`, `bbox`, `primary_tag`, `rank`, and `found_by` (`"hybrid"` and/or `"dense"`). `documents` scopes it to those source documents in the store (`None` = all, `[]` = nothing); `tag` keeps one primary tag. No reranking: compose `BGEReranker` over the hits if you want one. Raises `RuntimeError` when the workspace has no embedder.
|
|
442
|
+
|
|
443
|
+
### `aspan_search(ws: 'WorkspaceHandle', query: 'str', *, k: 'int' = 10, documents: 'Optional[list]' = None, tag: 'Optional[str]' = None, dense_floor: 'int' = 3) -> 'list'`
|
|
444
|
+
|
|
445
|
+
`span_search` off the event loop (the query embedding and the store calls block), for an async caller.
|
|
446
|
+
|
|
419
447
|
### `document_of(entity_id: 'str') -> 'str'`
|
|
420
448
|
|
|
421
449
|
The source-document id embedded in a chunk/span/unit id (`<source_doc_id>:<idx>:<hash>` -> the first, delimiter-safe segment). Empty in -> empty out.
|
|
@@ -448,6 +476,10 @@ The number of pages in a PDF (a path or the PDF's bytes), read under the engine'
|
|
|
448
476
|
|
|
449
477
|
The async, deadline-bounded twin of `parse_document_bytes` (ADR-0057): runs the docling parse off the event loop.
|
|
450
478
|
|
|
479
|
+
### `find_blank_pages_with_text(cache_dir: 'Any', sources: 'Iterable[Source]' = (), *, progress: 'Optional[Callable[[int, int], None]]' = None) -> 'list[BlankPageText]'`
|
|
480
|
+
|
|
481
|
+
Audit the parse cache under `cache_dir` (the one given to `parse_document`, or to `aingest`, which keeps its parses in `parsed/`; searched recursively) for text on blank pages. `sources` are the documents' PDFs, as paths or `(name, bytes)`; files embedded in a parsed package are stored in the cache and audited without being passed. A source that is not a PDF, or has no cached parse, is skipped. `progress(done, total)` is called after each PDF. Raises `FileNotFoundError` when `cache_dir` does not exist.
|
|
482
|
+
|
|
451
483
|
### `agenerate_answer(query: 'str', evidence: 'list[EvidenceItem]', *, ws: 'Any', guidance: 'Optional[str]' = None) -> 'GeneratedAnswer'`
|
|
452
484
|
|
|
453
485
|
A grounded, cited answer to `query` over `evidence`, or an abstention. Empty evidence abstains without a model call; a citation not in the evidence is dropped, and an answer left with no valid citation becomes an abstention (no claim without a citation). `answer_kind` says whether the evidence fully supported the answer (`answered`), only partly (`partial`) or not at all (`abstained`). `guidance` adds your domain's wording to the domain-neutral method.
|
|
@@ -109,6 +109,11 @@ and how to manage workspaces.
|
|
|
109
109
|
deployment serves a single model; OCR resolves its endpoint and flags through the same profile as every other
|
|
110
110
|
call. Override one role with `RAG_MODEL_<ROLE>` (e.g. `RAG_MODEL_VISION_OCR`, `RAG_MODEL_GENERAL`), or every
|
|
111
111
|
role at once with `RAG_MODEL_ALL`; the role-specific variable wins.
|
|
112
|
+
- **Blank PDF pages** are never sent to `VISION_OCR` (0.13.0, PS-46): a page with no ink has nothing to read, and a
|
|
113
|
+
vision model asked to transcribe one invents a page. A parse cached by an earlier engine with `VISION_OCR`
|
|
114
|
+
configured may still hold such text: `find_blank_pages_with_text(cache_dir, sources)` lists every page that is
|
|
115
|
+
blank in the source PDF but has text in its cached parse (files embedded in a parsed package are found in the
|
|
116
|
+
cache without being passed). Delete each finding's `cache_files`, then re-ingest the document.
|
|
112
117
|
- **Structured output** is client-side tag-parse (ADR-0045); any provider flags live in the profile.
|
|
113
118
|
- **A self-hosted Qwen server**: see [A self-hosted model server](#a-self-hosted-model-server-qwen-on-modal) below.
|
|
114
119
|
- **Decision models** (e.g. Jev) are reached through a `DecisionModelProfile` (default `jev-1.13`;
|
|
@@ -42,7 +42,7 @@ ADR-0117/0118 engine API + capability runtime). Read [Concepts](../concepts.md)
|
|
|
42
42
|
(segmenter, span tagger, unit grouper, boundary decider, writer, a per-document hook)
|
|
43
43
|
→ [KG construction](kg-construction.md) and the `building-an-ingestion-capability` skill. Your query graphs, domain functions, and skills **compose the engine's
|
|
44
44
|
generic primitives from the public tiers** (graph reads and query, embedding, typed ranking, reranking,
|
|
45
|
-
answers, parsing, chunking
|
|
45
|
+
answers, parsing, chunking, and hybrid span search with `span_search`) and register only your OWN domain graphs/models/skills via `register_capability(manifest)` with an
|
|
46
46
|
`impl_ref`, invocable (and MCP-exposable) with zero engine edits. Package them as a pack module that exposes
|
|
47
47
|
`register()` and load it with `load_pack("<your module>")`.
|
|
48
48
|
→ [Authoring capabilities](authoring-capabilities.md).
|
|
@@ -190,7 +190,7 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
|
|
|
190
190
|
- **Table rows:** `table_rows(source_document)` returns every parsed table's rows as exact cells (`TableRow`), and a
|
|
191
191
|
one-row unit carries its row as `Unit.table_row` (ING-7).
|
|
192
192
|
|
|
193
|
-
### G24: No public hybrid search or fusion primitive
|
|
193
|
+
### G24: No public hybrid search or fusion primitive (closed)
|
|
194
194
|
- **Where:** the engine's own retrieval legs run hybrid (dense + sparse) span search and rank fusion internally, and
|
|
195
195
|
the authoring guide used to say a capability composes them "by direct import"; neither is on `rag_wright.api` or
|
|
196
196
|
`rag_wright.pack_sdk`.
|
|
@@ -199,6 +199,10 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
|
|
|
199
199
|
what it embeds itself, beside a structured leg (`kg_read`, `typed_constraint_match_rank`).
|
|
200
200
|
- **Proposed:** a public hybrid span search over a workspace (query text, filters, k) returning cited spans, with the
|
|
201
201
|
fusion and reranking it already applies; on `rag_wright.pack_sdk` for pack capabilities.
|
|
202
|
+
- **Closed by PS-45:** `span_search(ws, query, *, k, documents, tag, dense_floor)` and `aspan_search` on
|
|
203
|
+
`rag_wright.api` (which pack code may also import): the store-side RRF fusion of the dense and sparse span
|
|
204
|
+
legs plus the dense floor (ADR-0104), returning citation-ready `SpanHit`s. Reranking stays the caller's
|
|
205
|
+
(`BGEReranker`), as it was in the engine's own leg.
|
|
202
206
|
- Surfaced: the TexWright specification (2026-10-14).
|
|
203
207
|
|
|
204
208
|
## Prerequisites a domain provides (not engine gaps)
|
|
@@ -114,9 +114,10 @@ slug. Write good `representative_queries` (2–5, phrased like real tasks) — t
|
|
|
114
114
|
Your capabilities **compose the engine's generic primitives from the public tiers** (`rag_wright.api` and
|
|
115
115
|
`rag_wright.pack_sdk`: the knowledge-graph reads `kg_read` / `kg_edges`, graph query, embedding (`ws.embedder`,
|
|
116
116
|
`cosine`), typed ranking (`typed_constraint_match_rank`), reranking (`BGEReranker`), answers (`agenerate_answer`,
|
|
117
|
-
`ajudge_spans`),
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
`ajudge_spans`), hybrid span search (`span_search` / `aspan_search`: the dense and sparse legs fused in the store,
|
|
118
|
+
with a dense floor, returning cited spans), parsing and chunking); you register only your OWN domain
|
|
119
|
+
graphs/models/skills. Don't wrap or re-register an engine primitive, and check a primitive is on a tier before
|
|
120
|
+
designing around it.
|
|
120
121
|
|
|
121
122
|
## Definition of done
|
|
122
123
|
|
|
@@ -131,13 +131,20 @@ To serve open models yourself instead, set `RAG_SERVING=vllm` with `VLLM_BASE_UR
|
|
|
131
131
|
|
|
132
132
|
`open_workspace` (through `ensure_schema`) refuses a database whose `Span` type still has the old field names
|
|
133
133
|
(`contract_id`, `function`, `functions`; renamed to `document_id`, `primary_tag`, `tags`) and raises a `RuntimeError`
|
|
134
|
-
naming the fix. Migrate each such database once, in place
|
|
135
|
-
|
|
134
|
+
naming the fix. Migrate each such database once, in place, with `migrate_span_fields` from `rag_wright.api`. It is
|
|
135
|
+
idempotent (it returns the number of spans moved, 0 when already migrated), never creates a database, and reports
|
|
136
|
+
progress after each batch:
|
|
136
137
|
|
|
137
|
-
```
|
|
138
|
-
|
|
138
|
+
```python
|
|
139
|
+
from rag_wright.api import EngineConfig, StoreConfig, migrate_span_fields
|
|
140
|
+
|
|
141
|
+
config = EngineConfig(store=StoreConfig.from_env())
|
|
142
|
+
moved = migrate_span_fields(config, corpus="my_corpus",
|
|
143
|
+
progress=lambda done, total: print(f"[migrate] {done}/{total}"))
|
|
139
144
|
```
|
|
140
145
|
|
|
146
|
+
From an engine checkout, `uv run python -u scripts/migrate_span_fields.py <database>` does the same.
|
|
147
|
+
|
|
141
148
|
Every other breaking change since 0.1.0, with the exact change a consumer makes, is in
|
|
142
149
|
[`specs/ingestion-hooks/ing8-breaking-changes.md`](specs/ingestion-hooks/ing8-breaking-changes.md).
|
|
143
150
|
|
|
@@ -107,7 +107,7 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
107
107
|
| PS-32 | (waits on RuleWright) Adopt the agent harness substrate as `rag_wright.harness`, a third public tier (ADR-0139). RuleWright separates the substrate from its product parts in its own repo and hands over a package that imports nothing from the product; the engine takes it in as it stands, with import contracts (the harness reaches engine code only through `rag_wright.api`; no engine module imports the harness), the domain-vocabulary guard, no Postgres extra (the product passes its checkpointer in; ADR-0139 correction), RuleWright's third guard (deployment, vendor, tenancy shape; its handover version, which also matches field declarations) in the engine suite, RuleWright's greenfield conformance test (a second product on the seams; strict expected failures that may only shrink), the run context as the product's own type against a `scope` protocol (ADR-0139 addendum), and the three measurements repeated here, `rag_wright.harness.__all__` declared (RuleWright pins it), `tracing_on()` and a flush on `rag_wright.api` (the harness may import only `api`), and the handover shapes agreed 2026-10-13 (RuleWright's `2026-10-13-what-to-build-for-rag_wright-harness.md`): the query encoder is `api.query_embedder()` built once per process; run resources are an opaque product value passed to the product's worker factories (`RunResources` and `run_resources.py` stay in the product, which declares its tool names); the harness defines its own deadline exceptions and `error_middleware` takes `retry_on` and `message_for` from the product; tracing through `api.traced_run`/`traced_step`; the agent model through `api.agent_chat_model` with the model id passed in, the `building-an-agent-harness` skill moved into the shipped skills, docs, and a RuleWright migration guide. No new protocols for future products | the harness's own tests pass in the engine; import contracts and the vocabulary guard; a plain install imports without the extra; live: a chat run with an interrupt and a resume | done 2026-10-14 ( `rag_wright.harness` 26 modules with `__all__` (42 names); `AgentDefinition`/`AgentPrompts`/`ToolSurface` made the tier's; `agent_chat_model(trace=False)` and `tracing_on`/`trace_level`/`start_generation`/`finish_generation`/`flush_tracing` on `api`; two import contracts; the vocabulary guard clean; conformance 7/7, genericity guard, 39 harness tests; live interrupt-and-resume on `qwen3.8-27b-modal-or` (2 calls, $0.00038); `langchain`/`langchain-core` declared; `GenerationRecorder` fixed: only a retry of the same turn abandons an attempt, a failed call closes as an error) |
|
|
108
108
|
| PS-33 | (later; its own workstream when agreed) Agentic capabilities: an `agent` capability kind (amends ADR-0041) for a harness compiled to a LangGraph graph and registered under a capability name; typed contracts at the boundary (inputs to messages and context, `response_format` back to the contract, the graceful-degrade rule); interrupts across the capability boundary (a suspended result with a resume handle, declared in the manifest); deadlines, budgets and dispatch limits passed down nested agents; a worked example on public data with an eval | to be planned | todo (later) |
|
|
109
109
|
| PS-34 | RuleWright's 25 databases leave the engine's ArcadeDB (they sit in the engine checkout's `data/arcadedb`, served by the engine's container, which RuleWright's `scripts/arcadedb.sh` also manages by name). The product owns its store and its data, the knowledge graph included; the docs were corrected 2026-10-12 (`installation.md`, `ArcadeDB_Local.md`). RuleWright moves them to its own container, port and data directory per `rulewright-arcadedb-separation.md`; the engine then deletes its copies (user's go-ahead), decides `some-db`, and restores its container's own settings | RuleWright: every moved database opens with `create=False`, its live store tests pass; engine: `data/arcadedb` holds engine databases only | done 2026-10-13 (the engine dropped `rulewright_dev`, `rulewright_compliance` and `some-db` with `drop_workspace`; six engine databases remain) |
|
|
110
|
-
| PS-35 | (small) The pre-0.2.0 `Span` field migration is reachable only through `scripts/migrate_span_fields.py`, which is not in the wheel, and `ArcadeDBStore.migrate_span_fields` is internal; `installation.md` tells a product to run the script. Put the migration on `rag_wright.api` (or state that it needs an engine checkout) | a hermetic test of the public call; `installation.md` names it |
|
|
110
|
+
| PS-35 | (small) The pre-0.2.0 `Span` field migration is reachable only through `scripts/migrate_span_fields.py`, which is not in the wheel, and `ArcadeDBStore.migrate_span_fields` is internal; `installation.md` tells a product to run the script. Put the migration on `rag_wright.api` (or state that it needs an engine checkout) | a hermetic test of the public call; `installation.md` names it | done 2026-10-15: `migrate_span_fields(config, *, corpus, batch, progress)` on `rag_wright.api` (opens the store without the schema check, never creates the database, checks the schema after); the refusal messages and docs name it; the script wraps it |
|
|
111
111
|
| PS-36 | An agent's chat model from a model profile on `rag_wright.api` (ADR-0139 correction): the seam's builder is internal today (`models/seam.py:build_model`), so RuleWright's harness built its own and named a model and a vendor in code. Public, profile-driven, with tracing and `usage_scope` metering; precedes RuleWright's `models.py` stage of the separation | hermetic tests (profile resolution, metering, tracing); live: one agent call through a profile | done 2026-10-13 (`agent_chat_model`; profile slot `agent_extra_body`; live: a deep agent on `qwen3.8-27b-modal-or`, 2 calls metered with real cost) |
|
|
112
112
|
| PS-37 | The public surface can drop a database it created (RuleWright request 2026-10-13: a create-only lifecycle leaks, and its only workarounds reach past the engine to the store). `drop_workspace(config, *, corpus) -> bool` (explicit name only, never a default database; closes and forgets the cached handle) and `temporary_workspace(config, *, prefix=)` (a fresh `<prefix>_<12 hex>` corpus dropped on exit, also on error); `ArcadeDBStore.drop_database` underneath | hermetic tests; live: create, write, drop on exit, `create=False` refuses after | done (2026-10-13): `tests/api/test_drop_workspace.py` (9) + `test_drop_workspace_live.py` (live, nothing left behind); `docs/workspaces.md` "Removing a workspace"; API reference regenerated; full suite 2169 passed. Housekeeping: `some-db` (empty, from before PS-27) dropped; the engine's container recreated on its own settings (6 GB heap, no cap) after RuleWright's script had set 3 GiB/2 GB on it; two stopped containers removed |
|
|
113
113
|
| PS-38 | Close the public-surface gaps a new product (TexWright) hits, from the 2026-10-13 product-starter review (`_engine-gaps.md`): (a) ARD publication on `rag_wright.api` (`publish`/`publish_all` with a target root, G14); (b) `CapabilityInterface` and `SkillRuntime` on `rag_wright.pack_sdk`, so a product can fill those manifest fields (G23); (c) a public way to register a `DecisionModelProfile` (and a model profile), so a Laya or on-premises decision model is config, not an engine edit (G12); (d) a public accessor for the workspace's configured embedder, and the reference pack moved onto it and onto `pack_store` (no `resources._store`/`_embedder`) (G22); (e) `StoreConfig.from_env()` no longer defaults `ARCADEDB_PORT` to 2480, so an unset variable cannot reach another instance (it raises naming the variable); the skills and docs that name these gaps updated | hermetic tests per item; the import contracts and doc-reference guard green; RuleWright's suite checked for (e) before it lands (it sets `ARCADEDB_PORT`); a live publish of a product manifest to a temporary root | done 2026-10-13 (publish/publish_all and the profile registrations on `api`; CapabilityInterface, SkillRuntime, workspace_embedder on `pack_sdk`; `WorkspaceHandle.config`; reference pack off private attributes; `ARCADEDB_PORT` required; 6 live reference tests green) |
|
|
@@ -116,3 +116,7 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
116
116
|
| PS-41 | Audit the engine-authored product-developer skills and the domain-adaptation guide for omissions a greenfield product hits (TexWright as the test case), and fix them: the specifying skill (capability catalog + definition-of-done requirement, models, the operations registry and parity, the agent's guardrails, settled data semantics, confirming a primitive is public, a live reconciliation); the consumer skill (three tiers, the harness first, specify first, client data, the surface snapshot over all tiers); capability authoring (product homes and slug prefixes, the eval in the definition of done, the harness for agents); ingestion (images and scans, a model-backed extractor as a closure, interpretations as records, per-sheet roles, multi-row records, re-ingest under G8, registering the pipeline, field-level accuracy); evals (gold from provided data, field-level ingestion accuracy, judged gold, agent behavior classes); the backend skill (the operations registry, parity, read-only agent tools); the guide (step 0 specify, the bridge pack for an existing ontology, G24: no public hybrid search, the false 'compose hybrid search by import' claim removed, a `uv pip` fixed) | the doc-reference, shipped-skills and ingestion-example guards green | done 2026-10-14 |
|
|
117
117
|
| PS-42 | Register only the engine capabilities a product uses, by slug (TexWright T-0.2 finding): the product-starter templates, the consumer skill and the domain-adaptation docs showed a blanket `for m in engine_capabilities(): register_capability(m)`, which puts unused capabilities into `discover()`'s ranking pool; now by slug, failing loudly when a used slug is no longer offered | the doc-reference and shipped-skills guards green | done 2026-10-14 |
|
|
118
118
|
| PS-43 | The harness tier's design reference and its quiet defaults (RuleWright's 2026-10-15 note): `docs/harness.md` taken in from RuleWright's draft, its tables generated from the live tier by `scripts/build_harness_doc.py`; `worker_spec(definition=)` fills the seven policy parameters (and the signposts) a worker otherwise left inert from the product's `AgentDefinition`, explicit arguments winning; the harness source's docstrings and comments cleared of the originating product's vocabulary, task, requirement and ADR ids, with a guard; two `AgentPrompts` fields described; the agent-harness skill's 'Four declared facts' corrected to fifteen | the product-text guard, the `definition=` conformance tests and the harness-design drift test green | done 2026-10-15 |
|
|
119
|
+
| PS-44 | TexWright ER-1: range filters on any number of fields, evaluated in the store. `Range(gt=, ge=, lt=, le=)` on `rag_wright.api` is a `where` value beside equality, membership and `NOT_NULL`, on every KG call that takes `where` (`kg_read`, `kg_count`, `kg_delete`, `kg_update`, `kg_edges`); `kg_read` now shares the filter grammar (so `NOT_NULL` works there too); `key_range` stays as the half-open shorthand | hermetic SQL-contract tests and a live test of two numeric ranges together | done 2026-10-15 |
|
|
120
|
+
| PS-45 | Engine gap G24: a public hybrid span search. `span_search(ws, query, *, k, documents, tag, dense_floor)` and `aspan_search` on `rag_wright.api`, over the span index ingestion fills: the store-side RRF fusion of the dense and sparse legs plus the dense floor (ADR-0104), returning citation-ready `SpanHit`s (text, document, offsets, pages, box, `found_by`); no reranking (the caller composes `BGEReranker`). G24 closed; the guide, the authoring page and the specifying and consumer skills name it | hermetic tests of the composition and the public call; a live test on real ArcadeDB and BGE-M3 (found by meaning, scoped, cited) | done 2026-10-15 |
|
|
121
|
+
| PS-46 | TexWright's 2026-10-15 report: a blank page escalated to the VLM came back as an invented document the parse kept. The scan-quality gate gains `ScanQuality.BLANK` (no OCR text and no ink: `ink_frac`, pixels < 200, at most 1e-4; the heavy faint scan measures ~0.08) and `TieredOCRParser` never escalates or flags a blank page, reporting it in `TieredOCRReport.blank_pages`. The post-check stays a flag, not a filter (a verbatim transcription of a page with few common English words fails it). ADR-0062 amended | hermetic gate and tiered tests (a real 2-page PDF: the VLM gets page 1 only); a live docling parse reports the blank page; the heavy fixture still escalates all 10 pages | done 2026-10-15 |
|
|
122
|
+
| PS-47 | The audit for PS-46: a parse cached before the fix keeps a blank page's invented text (the cache is keyed on content). `find_blank_pages_with_text(cache_dir, sources=(), *, progress)` and `BlankPageText` on `rag_wright.api` list every page blank in the source PDF (no ink, no text layer) with text in its cached parse, and the cache files to delete before re-ingesting. Searches the cache recursively (`aingest` keeps parses in `parsed/`); embedded files are audited from the cache's own copies; top-level sources are passed as paths or `(name, bytes)` | hermetic tests; a live `build_ingestion` of a workbook embedding a blank-tail PDF: clean, then a planted page found with nothing passed, then clean after delete and re-ingest | done 2026-10-15 |
|
{rag_wright-0.12.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.12.0.md
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# RuleWright: moving to rag-wright 0.12
|
|
2
2
|
|
|
3
|
-
What 0.12.0 changes for RuleWright (PS-43, from your note of 2026-10-15;
|
|
4
|
-
|
|
3
|
+
What 0.12.0 changes for RuleWright (PS-43, from your note of 2026-10-15; released 2026-10-15: PyPI and GitHub
|
|
4
|
+
release `0.12.0`). Do the 0.11 guide first. Nothing here is edited from the engine repo, and nothing breaks an existing
|
|
5
5
|
call: every item is new or optional.
|
|
6
6
|
|
|
7
7
|
## 1. Build workers with `worker_spec(..., definition=...)` (PS-43)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rag-wright"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.13.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"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
`contract_id` -> `document_id`, `function` -> `primary_tag`, `functions` -> `tags` (values copied, old fields removed,
|
|
4
4
|
old properties dropped). The legacy `parent_okf_path` locator is left in place. Idempotent: re-running on a migrated
|
|
5
5
|
database moves nothing. After ING-8d, `ArcadeDBStore.ensure_schema` refuses an unmigrated database.
|
|
6
|
+
A thin command over the public call `rag_wright.api.migrate_span_fields` (PS-35), which a product uses.
|
|
6
7
|
|
|
7
8
|
Usage: uv run python -u scripts/migrate_span_fields.py <database> [--batch 5000]
|
|
8
9
|
"""
|
|
@@ -13,7 +14,7 @@ import time
|
|
|
13
14
|
|
|
14
15
|
from dotenv import load_dotenv
|
|
15
16
|
|
|
16
|
-
from rag_wright.
|
|
17
|
+
from rag_wright.api import EngineConfig, StoreConfig, migrate_span_fields
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
def main() -> None:
|
|
@@ -22,16 +23,14 @@ def main() -> None:
|
|
|
22
23
|
ap.add_argument("--batch", type=int, default=5000)
|
|
23
24
|
args = ap.parse_args()
|
|
24
25
|
load_dotenv(".env")
|
|
25
|
-
|
|
26
|
+
config = EngineConfig(store=StoreConfig.from_env())
|
|
26
27
|
t0 = time.time()
|
|
27
28
|
print(f"[migrate] {args.database}: Span field rename (batch {args.batch})", flush=True)
|
|
28
|
-
moved =
|
|
29
|
-
batch=args.batch,
|
|
29
|
+
moved = migrate_span_fields(
|
|
30
|
+
config, corpus=args.database, batch=args.batch,
|
|
30
31
|
progress=lambda done, total: print(f"[migrate] {done}/{total} spans, {time.time() - t0:.0f}s", flush=True))
|
|
31
|
-
store.ensure_schema() # the post-condition: the migrated database is accepted
|
|
32
32
|
print(f"[migrate] done: {moved} spans moved in {time.time() - t0:.0f}s"
|
|
33
33
|
+ (" (already migrated)" if moved == 0 else ""), flush=True)
|
|
34
|
-
store.close()
|
|
35
34
|
|
|
36
35
|
|
|
37
36
|
if __name__ == "__main__":
|
|
@@ -154,6 +154,10 @@ category.
|
|
|
154
154
|
|
|
155
155
|
## 5. Spreadsheets, tables and embedded files
|
|
156
156
|
|
|
157
|
+
- **Blank PDF pages** are read as empty, never sent to the vision model (engine 0.13.0). On a parse cache built
|
|
158
|
+
by an earlier engine with `VISION_OCR` configured, run `find_blank_pages_with_text(cache_dir, sources)` once:
|
|
159
|
+
delete each finding's `cache_files` and re-ingest that document (its blank pages may hold invented text).
|
|
160
|
+
|
|
157
161
|
- **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
|
|
158
162
|
`DocumentReport.skipped_hidden_sheets`).
|
|
159
163
|
- **Blank rows inside a table**: the parse cuts a sheet's table at every blank row; the engine glues a piece back
|
|
@@ -58,7 +58,7 @@ Every product item lands in one or more of these. The route column is where the
|
|
|
58
58
|
| **Domain knowledge**: vocabulary, schema, constraints, synonyms, decision criteria | "controlled vocabularies", "the ontology", "mandatory fields", "valid ranges" | `EngineConfig(pack=...)` (the store creates the declared types on `open_workspace`); your capabilities read value sets and SHACL shapes with `rdflib` / `pyshacl` | `authoring-a-capability` | ontology authoring |
|
|
59
59
|
| **Ingestion**: documents, spreadsheets, images, embedded files into the graph | "parse the forms", "load the lab reports", "idempotent re-runs" | `build_ingestion` (your extractor + optional hooks) → `aingest`; `IngestSource`, `IngestionTuning`, `table_rows` / `TableRow`, `evaluate_ingestion`, `check_extraction`; `KgNode` / `KgEdge` | `building-an-ingestion-capability` | KG construction |
|
|
60
60
|
| **Entity and registry resolution** | "resolve against the yarn register", "queue unresolved mentions" | your `document_hook`; the entity-resolution building blocks on `rag_wright.pack_sdk` | `building-an-ingestion-capability` | entity resolution |
|
|
61
|
-
| **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, hybrid search from `rag_wright.
|
|
61
|
+
| **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, `Range`, hybrid span search with `span_search` from `rag_wright.api`), registered with `CapabilityManifest` + `register_capability` / `load_pack`, invoked with `ainvoke_subgraph` | `authoring-a-capability` | authoring capabilities |
|
|
62
62
|
| **A cited answer, or a refusal** | "every answer cites its source", "say when it is not in the records" | `agenerate_answer` over `EvidenceItem`s (an answer states its support; "none" abstains), `ajudge_spans` | `authoring-a-capability` | concepts (answers) |
|
|
63
63
|
| **A typed decision or classification** | "classify the structure", "which of these is it" | `classifier-opportunity-analysis` first; then rules, a trained classifier, or the decision model (`jev_decision` from `engine_capabilities()`, criteria in the pack) | `classifier-opportunity-analysis` → `setfit` / `laya` | classification and decision models |
|
|
64
64
|
| **A deterministic workflow behind a button** (mode **D**) | "upload, confirm, save", "export CSV" | a product **operation** (one function per user operation) calling your capabilities; the route calls the operation | `building-a-product-backend` | domain-adaptation step 8 |
|
|
@@ -27,8 +27,11 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
|
|
|
27
27
|
`EngineConfig`/`StoreConfig` (`StoreConfig.from_env()` reads `ARCADEDB_*`)/`open_workspace`
|
|
28
28
|
(`temporary_workspace`/`drop_workspace` for disposable and removed databases), the invokers
|
|
29
29
|
(`ainvoke_subgraph`/`invoke_model`/`ainvoke_model`), discovery (`capability_index`/`discover`), the KG accessors
|
|
30
|
-
(`kg_read
|
|
31
|
-
|
|
30
|
+
(`kg_read`, `kg_write`, `kg_edges`, `kg_count`/`kg_delete`/`kg_update`, all filtering by `where` values that
|
|
31
|
+
are equality, a list for membership, `NOT_NULL` or a `Range(gt=, ge=, lt=, le=)` on any number of fields,
|
|
32
|
+
evaluated in the store;
|
|
33
|
+
`entities_by_name`, `span_positions`), hybrid span search (`span_search` / `aspan_search`: cited spans from
|
|
34
|
+
the dense and sparse index, fused in the store), `pack_store(ws, cls)` (build your pack's store extension over the
|
|
32
35
|
workspace's store; the store itself stays private), metering and tracing (`measure_usage`, `record_usage`,
|
|
33
36
|
`traced_run`/`traced_step`, and for code emitting its own generations `tracing_on`/`trace_level`/
|
|
34
37
|
`start_generation`/`finish_generation`/`flush_tracing`), the query embedder (`ws.embedder` where you hold a
|
|
@@ -26,6 +26,7 @@ from rag_wright.api.answers import (AnswerKind, Condition, EvidenceItem, Generat
|
|
|
26
26
|
RelevanceVerdict, agenerate_answer, ajudge_spans)
|
|
27
27
|
from rag_wright.api.documents import (aparse_document, aparse_document_bytes, parse_document,
|
|
28
28
|
parse_document_bytes, source_document, pdf_page_count)
|
|
29
|
+
from rag_wright.capabilities.parse_audit import BlankPageText, find_blank_pages_with_text
|
|
29
30
|
from rag_wright.api.ids import decode_bbox, document_of
|
|
30
31
|
from rag_wright.api.discover import Discovered, discover
|
|
31
32
|
from rag_wright.contracts.ingestion import (
|
|
@@ -70,10 +71,11 @@ from rag_wright.evals import (GoldImportError, GoldMapping, aload_gold_set, arun
|
|
|
70
71
|
score_candidate_choice, score_classification, score_extraction, score_generation,
|
|
71
72
|
score_ingestion, score_judgment, score_relational, score_retrieval)
|
|
72
73
|
from rag_wright.ingestion.tables import table_rows
|
|
73
|
-
from rag_wright.store.seam import NOT_NULL, KgEdge, KgNode
|
|
74
|
+
from rag_wright.store.seam import NOT_NULL, KgEdge, KgNode, Range
|
|
74
75
|
from rag_wright.api.invoke import ainvoke_model, ainvoke_subgraph, capability_index, invoke_model
|
|
75
|
-
from rag_wright.api.kg import (entities_by_name, kg_count, kg_delete, kg_edges, kg_read, kg_update,
|
|
76
|
-
span_positions)
|
|
76
|
+
from rag_wright.api.kg import (aspan_search, entities_by_name, kg_count, kg_delete, kg_edges, kg_read, kg_update,
|
|
77
|
+
kg_write, span_positions, span_search)
|
|
78
|
+
from rag_wright.capabilities.span_search import SpanHit
|
|
77
79
|
from rag_wright.api.tracing import (finish_generation, flush_tracing, start_generation, trace_level, traced_run,
|
|
78
80
|
traced_step, tracing_on)
|
|
79
81
|
from rag_wright.api.usage import ModelUsage, UsageTotals, measure_usage, record_usage
|
|
@@ -82,6 +84,7 @@ from rag_wright.models.profiles import (DecisionModelProfile, ModelProfile, Mode
|
|
|
82
84
|
from rag_wright.api.workspace import (
|
|
83
85
|
WorkspaceHandle,
|
|
84
86
|
drop_workspace,
|
|
87
|
+
migrate_span_fields,
|
|
85
88
|
open_workspace,
|
|
86
89
|
pack_store,
|
|
87
90
|
temporary_workspace,
|
|
@@ -101,7 +104,7 @@ from rag_wright.models.model_servers import (
|
|
|
101
104
|
)
|
|
102
105
|
|
|
103
106
|
__all__ = [
|
|
104
|
-
"EngineConfig", "StoreConfig", "EngineOptions", "IngestOptions", "WorkspaceHandle", "open_workspace", "drop_workspace", "temporary_workspace", "pack_store", "use_workspace_models",
|
|
107
|
+
"EngineConfig", "StoreConfig", "EngineOptions", "IngestOptions", "WorkspaceHandle", "open_workspace", "drop_workspace", "migrate_span_fields", "temporary_workspace", "pack_store", "use_workspace_models",
|
|
105
108
|
# PS-19: deploy the self-hosted model server and use it like any model
|
|
106
109
|
"ModelServerSpec", "ModelServer", "adeploy_model_server", "amodel_server", "await_model_server", "stop_model_server",
|
|
107
110
|
"ModelServerNotDeployed", "ModelServerStatus", "amodel_server_status", "astop_model_server",
|
|
@@ -111,9 +114,10 @@ __all__ = [
|
|
|
111
114
|
"query_embedder", # PS-39: the process-wide query embedder, for a seam that holds no workspace
|
|
112
115
|
"ModelRole", # PS-1 (G17): WorkspaceHandle.model_id(role) and EngineConfig.models need it
|
|
113
116
|
"ainvoke_subgraph", "invoke_model", "ainvoke_model", "capability_index", "discover", "Discovered",
|
|
114
|
-
"kg_read", "kg_write", "kg_edges", "kg_count", "kg_delete", "kg_update", "entities_by_name", "span_positions", "KgNode", "KgEdge", "NOT_NULL",
|
|
117
|
+
"kg_read", "kg_write", "kg_edges", "kg_count", "kg_delete", "kg_update", "entities_by_name", "span_positions", "span_search", "aspan_search", "SpanHit", "KgNode", "KgEdge", "NOT_NULL", "Range",
|
|
115
118
|
"document_of", "decode_bbox",
|
|
116
119
|
"source_document", "parse_document", "aparse_document", "parse_document_bytes", "pdf_page_count", "aparse_document_bytes",
|
|
120
|
+
"find_blank_pages_with_text", "BlankPageText", # PS-47: cached parses holding text a VLM invented for a blank page
|
|
117
121
|
"agenerate_answer", "ajudge_spans", "EvidenceItem", "GeneratedAnswer", "AnswerKind",
|
|
118
122
|
"RelevanceVerdict", "Relevance", "Condition",
|
|
119
123
|
"measure_usage", "record_usage", "UsageTotals", "ModelUsage", "traced_run", "traced_step",
|
|
@@ -19,16 +19,19 @@ _SPAN_POSITION_FIELDS = [
|
|
|
19
19
|
def kg_read(ws: WorkspaceHandle, node_type: str, *, where: Optional[dict] = None, fields: Optional[list] = None,
|
|
20
20
|
distinct: Optional[str] = None, order_by: Optional[str] = None, limit: Optional[int] = None,
|
|
21
21
|
key_range: Optional[tuple] = None) -> list[dict]:
|
|
22
|
-
"""Read typed nodes of `node_type` from the workspace (see `Store.kg_read`).
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
"""Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar
|
|
23
|
+
(equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence) or a `Range`
|
|
24
|
+
(comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`); all
|
|
25
|
+
filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand
|
|
26
|
+
(`lo <= field < hi`). Then projection, distinct, order and limit."""
|
|
25
27
|
return ws._store.kg_read(node_type, where=where, fields=fields, distinct=distinct, order_by=order_by, limit=limit,
|
|
26
28
|
key_range=key_range)
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
def kg_count(ws: WorkspaceHandle, type_name: str, *, where: Optional[dict] = None,
|
|
30
32
|
key_range: Optional[tuple] = None) -> int:
|
|
31
|
-
"""The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`)
|
|
33
|
+
"""The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`); `where`
|
|
34
|
+
as in `kg_read`, `Range` values included."""
|
|
32
35
|
return ws._store.kg_count(type_name, where=where, key_range=key_range)
|
|
33
36
|
|
|
34
37
|
|
|
@@ -85,3 +88,30 @@ def span_positions(ws: WorkspaceHandle, document: str) -> list[dict]:
|
|
|
85
88
|
rows = ws._store.kg_read(SPAN_TYPE, fields=_SPAN_POSITION_FIELDS, where={"document_id": document},
|
|
86
89
|
order_by="doc_start")
|
|
87
90
|
return [{**r, "bbox": decode_bbox(r.get("bbox"))} for r in rows]
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def span_search(ws: WorkspaceHandle, query: str, *, k: int = 10, documents: Optional[list] = None,
|
|
94
|
+
tag: Optional[str] = None, dense_floor: int = 3) -> list:
|
|
95
|
+
"""Hybrid search over the workspace's span index (every ingested span, embedded dense and sparse): the two legs
|
|
96
|
+
fused by Reciprocal Rank Fusion in the store, with the top `dense_floor` pure-dense spans guaranteed a place, so
|
|
97
|
+
a strong semantic match a common-token query would push out of the fused pool is kept (0 turns it off). Returns
|
|
98
|
+
up to `k` `SpanHit`s, best first, each citation-ready: `span_id`, `text`, `document_id`, `doc_start` /
|
|
99
|
+
`doc_end`, `pages`, `bbox`, `primary_tag`, `rank`, and `found_by` (`"hybrid"` and/or `"dense"`). `documents`
|
|
100
|
+
scopes it to those source documents in the store (`None` = all, `[]` = nothing); `tag` keeps one primary tag.
|
|
101
|
+
No reranking: compose `BGEReranker` over the hits if you want one. Raises `RuntimeError` when the workspace
|
|
102
|
+
has no embedder."""
|
|
103
|
+
from rag_wright.capabilities.span_search import span_search as _search
|
|
104
|
+
|
|
105
|
+
if ws.embedder is None:
|
|
106
|
+
raise RuntimeError("span_search needs the workspace's embedder; this workspace was opened without one")
|
|
107
|
+
return _search(query, store=ws._store, embedder=ws.embedder, k=k, documents=documents, tag=tag,
|
|
108
|
+
dense_floor=dense_floor)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
async def aspan_search(ws: WorkspaceHandle, query: str, *, k: int = 10, documents: Optional[list] = None,
|
|
112
|
+
tag: Optional[str] = None, dense_floor: int = 3) -> list:
|
|
113
|
+
"""`span_search` off the event loop (the query embedding and the store calls block), for an async caller."""
|
|
114
|
+
import asyncio
|
|
115
|
+
|
|
116
|
+
return await asyncio.to_thread(span_search, ws, query, k=k, documents=documents, tag=tag,
|
|
117
|
+
dense_floor=dense_floor)
|
|
@@ -83,7 +83,7 @@ def use_workspace_models(ws: Any) -> Iterator[None]:
|
|
|
83
83
|
def open_workspace(config: EngineConfig, *, corpus: str, reset: bool = False, create: bool = True) -> WorkspaceHandle:
|
|
84
84
|
"""Resolve (and cache) the workspace for `corpus` (the backend database name) from `config`. Ensures the schema:
|
|
85
85
|
the neutral engine types, plus `config.pack`'s declared types when set. Raises `RuntimeError` on a database whose
|
|
86
|
-
`Span` type still has the pre-ING-8d field names (migrate it with `
|
|
86
|
+
`Span` type still has the pre-ING-8d field names (migrate it with `migrate_span_fields`). Returns an
|
|
87
87
|
opaque `WorkspaceHandle`. `reset=True` drops + recreates the database (test/clean-slate) and bypasses the cache.
|
|
88
88
|
A missing database is created (logged): that is how a new corpus is provisioned. `create=False` raises
|
|
89
89
|
`LookupError` instead (PS-27) -- use it wherever the corpus must already exist, so a wrong name fails loudly
|
|
@@ -140,6 +140,27 @@ def drop_workspace(config: EngineConfig, *, corpus: str) -> bool:
|
|
|
140
140
|
return existed
|
|
141
141
|
|
|
142
142
|
|
|
143
|
+
def migrate_span_fields(config: EngineConfig, *, corpus: str, batch: int = 5000,
|
|
144
|
+
progress: Optional[Callable[[int, int], None]] = None) -> int:
|
|
145
|
+
"""Migrate the database `corpus` from the pre-0.2.0 `Span` field names (`contract_id`, `function`, `functions`)
|
|
146
|
+
to the generic ones (`document_id`, `primary_tag`, `tags`), the database `open_workspace` refuses until this
|
|
147
|
+
has run (PS-35). Values are copied in batches of `batch` and the old properties dropped; `progress(done, total)`
|
|
148
|
+
is called after each batch. Idempotent: returns the number of records moved, 0 when already migrated. The
|
|
149
|
+
database must exist (`LookupError` otherwise; it is never created), and a missing or blank `corpus` raises
|
|
150
|
+
`ValueError`. Afterwards the schema is checked, so a database this returns for opens with `open_workspace`."""
|
|
151
|
+
if not corpus or not corpus.strip():
|
|
152
|
+
raise ValueError("migrate_span_fields needs the corpus to migrate; it never falls back to a default database")
|
|
153
|
+
store = _build_store(config, corpus, reset=False, create=False)
|
|
154
|
+
try:
|
|
155
|
+
moved = store.migrate_span_fields(batch=batch, progress=progress)
|
|
156
|
+
store.ensure_schema()
|
|
157
|
+
finally:
|
|
158
|
+
store.close()
|
|
159
|
+
if moved:
|
|
160
|
+
logger.info("migrated %d spans in database %r to the generic field names", moved, corpus)
|
|
161
|
+
return moved
|
|
162
|
+
|
|
163
|
+
|
|
143
164
|
@contextmanager
|
|
144
165
|
def temporary_workspace(config: EngineConfig, *, prefix: str = "tmp") -> Iterator[WorkspaceHandle]:
|
|
145
166
|
"""A workspace on a fresh database, `<prefix>_<12 hex>`, dropped when the block exits, whether it succeeds or
|