rag-wright 0.4.0__tar.gz → 0.5.1__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.
Files changed (967) hide show
  1. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/laya/SKILL.md +20 -0
  2. {rag_wright-0.4.0/src/rag_wright/.agents → rag_wright-0.5.1/.claude}/skills/qwen-vllm-modal/SKILL.md +20 -0
  3. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/using-the-rag-wright-engine/SKILL.md +7 -0
  4. rag_wright-0.5.1/.release-please-manifest.json +3 -0
  5. {rag_wright-0.4.0 → rag_wright-0.5.1}/CHANGELOG.md +19 -0
  6. {rag_wright-0.4.0 → rag_wright-0.5.1}/CLAUDE.md +2 -2
  7. {rag_wright-0.4.0 → rag_wright-0.5.1}/PKG-INFO +4 -2
  8. rag_wright-0.5.1/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +47 -0
  9. rag_wright-0.5.1/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +32 -0
  10. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/README.md +4 -2
  11. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/api/README.md +28 -0
  12. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/configuration.md +69 -0
  13. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/README.md +3 -1
  14. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/installation.md +2 -0
  15. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/reference-pack.md +6 -0
  16. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/public-surface/plan.md +3 -0
  17. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/public-surface/rulewright-migration-0.4.0.md +2 -0
  18. rag_wright-0.5.1/docs/specs/public-surface/rulewright-migration-0.5.0.md +58 -0
  19. rag_wright-0.5.1/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +44 -0
  20. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/templates/product-starter/CLAUDE.md.template +3 -1
  21. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/templates/product-starter/playbook.md.template +2 -0
  22. rag_wright-0.5.1/docs/upstream/laya-temperature-range-mismatch.md +49 -0
  23. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/workspaces.md +1 -1
  24. rag_wright-0.5.1/examples/model_server.py +91 -0
  25. {rag_wright-0.4.0 → rag_wright-0.5.1}/pyproject.toml +5 -2
  26. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/laya/SKILL.md +20 -0
  27. {rag_wright-0.4.0/.claude → rag_wright-0.5.1/src/rag_wright/.agents}/skills/qwen-vllm-modal/SKILL.md +20 -0
  28. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +7 -0
  29. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/__init__.py +10 -0
  30. rag_wright-0.5.1/src/rag_wright/models/model_servers.py +166 -0
  31. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/profiles.py +8 -0
  32. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/seam.py +4 -3
  33. {rag_wright-0.4.0 → rag_wright-0.5.1}/tasks.md +7 -4
  34. rag_wright-0.5.1/tests/models/test_classifier_heads_load_clean.py +38 -0
  35. rag_wright-0.5.1/tests/models/test_model_servers.py +149 -0
  36. {rag_wright-0.4.0 → rag_wright-0.5.1}/uv.lock +15 -11
  37. rag_wright-0.4.0/.release-please-manifest.json +0 -3
  38. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/settings.json +0 -0
  39. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  40. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -0
  41. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  42. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/creating-evals/SKILL.md +0 -0
  43. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  44. {rag_wright-0.4.0 → rag_wright-0.5.1}/.claude/skills/setfit/SKILL.md +0 -0
  45. {rag_wright-0.4.0 → rag_wright-0.5.1}/.env.example +0 -0
  46. {rag_wright-0.4.0 → rag_wright-0.5.1}/.github/workflows/publish.yml +0 -0
  47. {rag_wright-0.4.0 → rag_wright-0.5.1}/.github/workflows/release-please.yml +0 -0
  48. {rag_wright-0.4.0 → rag_wright-0.5.1}/.gitignore +0 -0
  49. {rag_wright-0.4.0 → rag_wright-0.5.1}/LICENSE +0 -0
  50. {rag_wright-0.4.0 → rag_wright-0.5.1}/README.md +0 -0
  51. {rag_wright-0.4.0 → rag_wright-0.5.1}/SPEC.md +0 -0
  52. {rag_wright-0.4.0 → rag_wright-0.5.1}/conftest.py +0 -0
  53. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  54. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/ArcadeDB_Local.md +0 -0
  55. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/OBSERVABILITY.md +0 -0
  56. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0001-stack-and-library-choices.md +0 -0
  57. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  58. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  59. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0004-entity-disambiguation.md +0 -0
  60. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0005-relational-golden-set.md +0 -0
  61. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0006-model-profile.md +0 -0
  62. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  63. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  64. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  65. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  66. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  67. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  68. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  69. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  70. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  71. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  72. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  73. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  74. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  75. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  76. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  77. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  78. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  79. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  80. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  81. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  82. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  83. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  84. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  85. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  86. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  87. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  88. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  89. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  90. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  91. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  92. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  93. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  94. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  95. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  96. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  97. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  98. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  99. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  100. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  101. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  102. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  103. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  104. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  105. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  106. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  107. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  108. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  109. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  110. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0055-confidence-out-of-band.md +0 -0
  111. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  112. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0057-async-engine-architecture.md +0 -0
  113. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0058-structure-first-chunking.md +0 -0
  114. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  115. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  116. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  117. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  118. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  119. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  120. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  121. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  122. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  123. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  124. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  125. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  126. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  127. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  128. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  129. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  130. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  131. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  132. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  133. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  134. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  135. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  136. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  137. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  138. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  139. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  140. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  141. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0086-streaming-cost-capture.md +0 -0
  142. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  143. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  144. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  145. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  146. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0091-retire-partyto-edge.md +0 -0
  147. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0092-idempotent-write-graph.md +0 -0
  148. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0093-entities-by-name-seam.md +0 -0
  149. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0094-workspace-document-scope.md +0 -0
  150. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0095-span-page-provenance.md +0 -0
  151. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  152. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  153. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  154. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  155. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0100-profile-based-model-routing.md +0 -0
  156. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  157. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  158. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  159. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  160. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  161. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  162. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0107-requirement-page-provenance.md +0 -0
  163. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  164. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  165. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  166. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  167. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  168. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  169. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  170. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  171. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  172. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  173. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  174. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  175. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  176. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  177. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  178. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  179. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  180. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  181. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  182. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0127-retire-the-okf-code.md +0 -0
  183. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  184. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/api/pack_sdk.md +0 -0
  185. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  186. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/architecture.md +0 -0
  187. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/README.md +0 -0
  188. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/design/deontic-applicability-routing.md +0 -0
  189. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  190. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  191. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  192. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  193. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  194. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  195. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  196. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  197. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  198. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  199. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  200. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  201. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  202. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  203. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  204. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  205. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  206. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  207. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  208. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  209. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  210. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  211. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  212. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  213. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  214. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  215. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  216. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  217. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  218. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  219. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  220. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  221. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  222. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  223. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  224. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  225. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  226. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  227. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  228. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  229. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  230. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  231. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  232. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  233. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  234. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  235. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  236. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  237. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  238. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  239. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  240. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  241. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  242. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  243. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  244. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  245. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  246. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  247. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  248. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  249. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/misc/.gitkeep +0 -0
  250. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  251. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/plans/async-migration.md +0 -0
  252. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/plans/demo_plan.md +0 -0
  253. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  254. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  255. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  256. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  257. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  258. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  259. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/concepts.md +0 -0
  260. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/contract_pipeline_explainer.md +0 -0
  261. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/corpus_ingest_recipe.md +0 -0
  262. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/_engine-gaps.md +0 -0
  263. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/authoring-capabilities.md +0 -0
  264. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  265. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/entity-resolution.md +0 -0
  266. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/kg-construction.md +0 -0
  267. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/domain-adaptation/ontology-authoring.md +0 -0
  268. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/classifier_model_ab.md +0 -0
  269. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/compliance_demo.md +0 -0
  270. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/compliance_gate_cc7.md +0 -0
  271. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/compliance_rung2_cc7.md +0 -0
  272. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  273. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/dg_model_ab.md +0 -0
  274. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/function_gate_recall.md +0 -0
  275. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  276. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/nl_to_type_cu-d2.md +0 -0
  277. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/ocr_benchmark.md +0 -0
  278. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/prod1_readiness.md +0 -0
  279. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/prod2_readiness.md +0 -0
  280. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/query_side_model_ab.md +0 -0
  281. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  282. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/silver_provider_routing.md +0 -0
  283. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  284. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/playbook.md +0 -0
  285. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/product/capability_profiles.md +0 -0
  286. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/product/contracts_product_roadmap.md +0 -0
  287. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/product/engine-api-migration-handoff.md +0 -0
  288. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/product/engine_async_api.md +0 -0
  289. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/product/new-domain-build-sequence.md +0 -0
  290. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/product/seam-adaptation-guide.md +0 -0
  291. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  292. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  293. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/proposals/new-domain-developer-journey.md +0 -0
  294. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/proposals/ontology-induction.md +0 -0
  295. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/quickstart.md +0 -0
  296. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/releasing.md +0 -0
  297. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/engine-platform/SPEC.md +0 -0
  298. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/engine-platform/TASKS.md +0 -0
  299. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/engine-prep/plan.md +0 -0
  300. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  301. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  302. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/ingestion-hooks/plan.md +0 -0
  303. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  304. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  305. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/templates/product-starter/README.md +0 -0
  306. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/templates/product-starter/dependabot.yml +0 -0
  307. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  308. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  309. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  310. {rag_wright-0.4.0 → rag_wright-0.5.1}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  311. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/__init__.py +0 -0
  312. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/acord.py +0 -0
  313. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/acord_retrieval.py +0 -0
  314. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/boundary_residue_gold.py +0 -0
  315. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/build_golden.py +0 -0
  316. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  317. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  318. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  319. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  320. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/condensed_pipeline.py +0 -0
  321. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/contract_parity_live.py +0 -0
  322. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/contractnli_judge.py +0 -0
  323. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/cuad_highlight.py +0 -0
  324. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/embedded_eval.py +0 -0
  325. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/full_pipeline_rerank.py +0 -0
  326. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/function_ceiling.py +0 -0
  327. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/function_property_rerank.py +0 -0
  328. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/function_rerank.py +0 -0
  329. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/gate1_chunker_ab.py +0 -0
  330. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/gate2_hybrid_rerank.py +0 -0
  331. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/golden/relational/set.json +0 -0
  332. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/golden.py +0 -0
  333. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/ground_discriminator_rerank.py +0 -0
  334. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/harness.py +0 -0
  335. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/ingestion_live_smoke.py +0 -0
  336. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/kg_primary.py +0 -0
  337. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/kg_property_rerank.py +0 -0
  338. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/listwise_rerank.py +0 -0
  339. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/multihop.py +0 -0
  340. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/nl_to_type.py +0 -0
  341. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/relational_eval.py +0 -0
  342. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/residual_decision_gold.py +0 -0
  343. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/segmenter_eval.py +0 -0
  344. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/semantic_judge_gold.py +0 -0
  345. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/test_acord.py +0 -0
  346. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/test_acord_retrieval.py +0 -0
  347. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/test_harness.py +0 -0
  348. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/test_multihop_set.py +0 -0
  349. {rag_wright-0.4.0 → rag_wright-0.5.1}/eval/unit_grouper_eval.py +0 -0
  350. {rag_wright-0.4.0 → rag_wright-0.5.1}/examples/quickstart.py +0 -0
  351. {rag_wright-0.4.0 → rag_wright-0.5.1}/plan.md +0 -0
  352. {rag_wright-0.4.0 → rag_wright-0.5.1}/release-please-config.json +0 -0
  353. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ab_model_overlap.py +0 -0
  354. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acord_unify.py +0 -0
  355. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acquire_acord.py +0 -0
  356. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acquire_cuad.py +0 -0
  357. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acquire_ecfr.py +0 -0
  358. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acquire_edgar.py +0 -0
  359. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acquire_ftc_255.py +0 -0
  360. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/acquire_prod1_corpus.py +0 -0
  361. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/audit_reclass_flips.py +0 -0
  362. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/author_leg_a_silver_key.py +0 -0
  363. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/backfill_affiliations.py +0 -0
  364. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/backfill_clause_span_id.py +0 -0
  365. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/backfill_edge_source_doc_id.py +0 -0
  366. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/backup_kg_to_gcs.sh +0 -0
  367. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/bootstrap_template_capture.py +0 -0
  368. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/bootstrap_typed_edges.py +0 -0
  369. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/build_api_docs.py +0 -0
  370. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/build_api_docs.sh +0 -0
  371. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/build_cuad_clause_cache.py +0 -0
  372. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/build_function_routing_map.py +0 -0
  373. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_assemble_v2.py +0 -0
  374. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_assemble_v3.py +0 -0
  375. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_generate_hard_negatives.py +0 -0
  376. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_generate_hard_positives.py +0 -0
  377. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_generate_training.py +0 -0
  378. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_hybrid.py +0 -0
  379. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_hybrid2.py +0 -0
  380. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_jev_actor.py +0 -0
  381. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_jev_claimtypes.py +0 -0
  382. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_jev_operative.py +0 -0
  383. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_label_spans.py +0 -0
  384. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_laya_prep.py +0 -0
  385. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_laya_train.py +0 -0
  386. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_prep_operative.py +0 -0
  387. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_relabel_rubric.py +0 -0
  388. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_relabel_rubric2.py +0 -0
  389. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/cic1_train_operative.py +0 -0
  390. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/compare_extraction_models.py +0 -0
  391. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/compliance_actor_gate_smoke.py +0 -0
  392. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/compliance_engine_smoke.py +0 -0
  393. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/compliance_policy_demo.py +0 -0
  394. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/curate_taxonomy_gaps.py +0 -0
  395. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/dg_model_ab.py +0 -0
  396. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_knn_expansion.py +0 -0
  397. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_knn_rerank.py +0 -0
  398. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_leg_pool.py +0 -0
  399. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_legs.py +0 -0
  400. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_pool.py +0 -0
  401. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_relstructure.py +0 -0
  402. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/diagnose_acord_retrieval.py +0 -0
  403. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/eval_all.py +0 -0
  404. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/eval_ce.py +0 -0
  405. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/eval_listwise_b.py +0 -0
  406. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/export_ce_dataset.py +0 -0
  407. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/extract_features.py +0 -0
  408. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/listwise_variants.py +0 -0
  409. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/relational_features.py +0 -0
  410. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/train_ce.py +0 -0
  411. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/distill/train_modal.py +0 -0
  412. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/enrich_edgar_candidates.py +0 -0
  413. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/eval_chunking_ab.py +0 -0
  414. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  415. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/eval_compliance_gold.py +0 -0
  416. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/extract_arcadedb_docs.py +0 -0
  417. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/fetch_reference_models.py +0 -0
  418. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/generate_contract_python.py +0 -0
  419. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/git_post_commit_graphify.sh +0 -0
  420. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/granite_chunker_assess.py +0 -0
  421. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/graph_status.sh +0 -0
  422. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_acord.py +0 -0
  423. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_compliance_async_prod2.py +0 -0
  424. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_compliance_document_prod2.py +0 -0
  425. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_compliance_prod2.py +0 -0
  426. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_cuad.py +0 -0
  427. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_cuad_full.py +0 -0
  428. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_ftc_compliance.py +0 -0
  429. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_prod1.py +0 -0
  430. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_prod1_async.py +0 -0
  431. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ingest_smoke.py +0 -0
  432. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/install_git_hooks.sh +0 -0
  433. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/label_new_functions.py +0 -0
  434. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/legb_function_gate_recall.py +0 -0
  435. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/make_compliance_fixtures.py +0 -0
  436. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/make_compliance_gold.py +0 -0
  437. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/mcp_compliance_agent_demo.py +0 -0
  438. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  439. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/mcp_query_legs_agent_demo.py +0 -0
  440. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/measure_generation_robustness.py +0 -0
  441. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/measure_silver.py +0 -0
  442. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/merge_docs_into_framework.py +0 -0
  443. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  444. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/migrate_silver_evidence_autotag.py +0 -0
  445. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  446. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/migrate_span_fields.py +0 -0
  447. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/mine_scarce_functions.py +0 -0
  448. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_arcadedb.py +0 -0
  449. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_backfill.py +0 -0
  450. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_exception_linking.py +0 -0
  451. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_gemma4_vllm.py +0 -0
  452. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  453. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_granite_server.py +0 -0
  454. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_granite_throughput.py +0 -0
  455. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_granite_vllm_server.py +0 -0
  456. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_query_app.py +0 -0
  457. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_qwen3_27b_bench.py +0 -0
  458. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  459. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_qwen3_vllm_server.py +0 -0
  460. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/modal_stack_a100.py +0 -0
  461. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ocr_benchmark.py +0 -0
  462. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ocr_preprocess.py +0 -0
  463. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/ontology_dimension_check.py +0 -0
  464. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/phase_a_leg_validate.py +0 -0
  465. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/populate_clause_kg.py +0 -0
  466. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/populate_entity_graph.py +0 -0
  467. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/populate_entity_graph_extracted.py +0 -0
  468. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/populate_property_store.py +0 -0
  469. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/prep_relational_verification.py +0 -0
  470. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/publish_manifests.py +0 -0
  471. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/reclassify_kg.py +0 -0
  472. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/refresh_framework_graph.sh +0 -0
  473. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/revert_reclass_flips.py +0 -0
  474. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/run_acord_retrieval.py +0 -0
  475. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/run_clause_exception_linking.py +0 -0
  476. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/semantic_judge_live_validate.py +0 -0
  477. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/semantic_judge_probe.py +0 -0
  478. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/snapshot_leg_a_eval.py +0 -0
  479. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/stack_correctness_validate.py +0 -0
  480. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/table_retrieval_smoke.py +0 -0
  481. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/train_function_classifier.py +0 -0
  482. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/train_legalbert_function.py +0 -0
  483. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/train_legalbert_modal.py +0 -0
  484. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/typed_rerank_validate.py +0 -0
  485. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/verify_wheel_install.sh +0 -0
  486. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/vllm_extraction_ab.py +0 -0
  487. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/vllm_kg_query_validate.py +0 -0
  488. {rag_wright-0.4.0 → rag_wright-0.5.1}/scripts/vllm_raw_diagnostic.py +0 -0
  489. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  490. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +0 -0
  491. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  492. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
  493. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  494. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  495. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/__init__.py +0 -0
  496. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/answers.py +0 -0
  497. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/config.py +0 -0
  498. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/discover.py +0 -0
  499. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/documents.py +0 -0
  500. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/ids.py +0 -0
  501. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/invoke.py +0 -0
  502. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/kg.py +0 -0
  503. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/mcp.py +0 -0
  504. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/tracing.py +0 -0
  505. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/usage.py +0 -0
  506. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/api/workspace.py +0 -0
  507. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/__init__.py +0 -0
  508. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/answer_generator.py +0 -0
  509. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/ard.py +0 -0
  510. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/chunk_read.py +0 -0
  511. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/chunk_write.py +0 -0
  512. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/disambiguation.py +0 -0
  513. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/document_parse.py +0 -0
  514. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/document_scope.py +0 -0
  515. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/embedding.py +0 -0
  516. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  517. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  518. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/fusion.py +0 -0
  519. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/graph_query.py +0 -0
  520. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/graph_storage.py +0 -0
  521. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  522. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/invoke.py +0 -0
  523. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/jev_decision.py +0 -0
  524. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/manifests.py +0 -0
  525. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/parsing.py +0 -0
  526. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/registry.py +0 -0
  527. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  528. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/reranking.py +0 -0
  529. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  530. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  531. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  532. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/scan_quality.py +0 -0
  533. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  534. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  535. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  536. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/__init__.py +0 -0
  537. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/chunk.py +0 -0
  538. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/extraction.py +0 -0
  539. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/graph.py +0 -0
  540. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/identifiers.py +0 -0
  541. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/ingestion.py +0 -0
  542. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/provenance.py +0 -0
  543. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/contracts/span.py +0 -0
  544. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/corpus/__init__.py +0 -0
  545. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/corpus/canonicalize.py +0 -0
  546. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/corpus/document_parser.py +0 -0
  547. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/corpus/embedded.py +0 -0
  548. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/corpus/http.py +0 -0
  549. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/__init__.py +0 -0
  550. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/builder.py +0 -0
  551. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/evaluate.py +0 -0
  552. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/group.py +0 -0
  553. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/layout.py +0 -0
  554. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/segment.py +0 -0
  555. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ingestion/tables.py +0 -0
  556. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/__init__.py +0 -0
  557. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/tag_structured.py +0 -0
  558. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/tracing.py +0 -0
  559. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/usage.py +0 -0
  560. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/models/weights.py +0 -0
  561. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ontology/__init__.py +0 -0
  562. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ontology/pack_schema.py +0 -0
  563. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/ontology/registry.py +0 -0
  564. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/pack_sdk/__init__.py +0 -0
  565. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/__init__.py +0 -0
  566. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/__init__.py +0 -0
  567. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  568. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  569. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  570. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  571. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  572. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  573. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/invokers.py +0 -0
  574. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  575. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  576. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  577. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  578. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  579. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  580. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/pack.py +0 -0
  581. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  582. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  583. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  584. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  585. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  586. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  587. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  588. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  589. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  590. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  591. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  592. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  593. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  594. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  595. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  596. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/__init__.py +0 -0
  597. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  598. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  599. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  600. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  601. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  602. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  603. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  604. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  605. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  606. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  607. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  608. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  609. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  610. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  611. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  612. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  613. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  614. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  615. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  616. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  617. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  618. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  619. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  620. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  621. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  622. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  623. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  624. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  625. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  626. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  627. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  628. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/options.py +0 -0
  629. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/pack.py +0 -0
  630. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  631. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  632. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  633. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  634. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  635. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  636. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  637. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  638. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  639. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  640. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  641. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  642. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  643. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  644. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  645. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  646. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  647. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  648. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  649. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  650. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  651. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  652. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  653. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  654. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  655. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  656. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  657. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  658. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  659. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  660. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  661. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  662. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  663. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  664. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  665. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  666. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  667. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  668. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  669. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  670. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  671. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  672. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  673. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  674. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  675. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  676. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  677. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  678. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/packs/reference_seam.py +0 -0
  679. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/py.typed +0 -0
  680. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/__init__.py +0 -0
  681. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/generation/SKILL.md +0 -0
  682. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/generation/__init__.py +0 -0
  683. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  684. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/rlm/__init__.py +0 -0
  685. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/rlm/agent.py +0 -0
  686. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  687. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  688. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  689. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/spans/__init__.py +0 -0
  690. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/spans/page_map.py +0 -0
  691. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/store/__init__.py +0 -0
  692. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/store/arcadedb.py +0 -0
  693. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/store/chunk_text.py +0 -0
  694. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/store/seam.py +0 -0
  695. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/subgraphs/__init__.py +0 -0
  696. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  697. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/subgraphs/observability.py +0 -0
  698. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/subgraphs/scaffold.py +0 -0
  699. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  700. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/util/__init__.py +0 -0
  701. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/util/concurrent.py +0 -0
  702. {rag_wright-0.4.0 → rag_wright-0.5.1}/src/rag_wright/util/spacy_model.py +0 -0
  703. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/__init__.py +0 -0
  704. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/__init__.py +0 -0
  705. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_answers_exports.py +0 -0
  706. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_bytes_ingest.py +0 -0
  707. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_capability_reexports.py +0 -0
  708. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_decision_swap_doc_example.py +0 -0
  709. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_discover.py +0 -0
  710. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_documents.py +0 -0
  711. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_e2e.py +0 -0
  712. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_invoke.py +0 -0
  713. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_kg.py +0 -0
  714. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_mcp.py +0 -0
  715. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_metering_tracing_exports.py +0 -0
  716. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_model_role_export.py +0 -0
  717. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_open_workspace_reconfig.py +0 -0
  718. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_options.py +0 -0
  719. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_pack_sdk.py +0 -0
  720. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_pack_store.py +0 -0
  721. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_usage.py +0 -0
  722. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_workspace.py +0 -0
  723. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/api/test_workspace_models.py +0 -0
  724. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/domain_vocabulary_baseline.json +0 -0
  725. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/test_api_docs_current.py +0 -0
  726. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/test_doc_references.py +0 -0
  727. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  728. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/test_import_contracts.py +0 -0
  729. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/test_packs_use_store_primitives.py +0 -0
  730. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/arch/test_shipped_skills.py +0 -0
  731. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/async_helpers.py +0 -0
  732. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/__init__.py +0 -0
  733. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  734. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_answer_generator.py +0 -0
  735. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_answer_generator_async.py +0 -0
  736. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_assertion_extraction.py +0 -0
  737. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_authoring_contract.py +0 -0
  738. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_chunk_read.py +0 -0
  739. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_chunk_write.py +0 -0
  740. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  741. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_claim_extraction.py +0 -0
  742. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_clause_exception_linking.py +0 -0
  743. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_compliance_judgment.py +0 -0
  744. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_compliance_store.py +0 -0
  745. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_contract_kg_serve.py +0 -0
  746. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_contract_kg_store.py +0 -0
  747. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  748. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  749. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_dg_adapter.py +0 -0
  750. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_dg_async.py +0 -0
  751. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_dg_extraction.py +0 -0
  752. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_dg_model_seam.py +0 -0
  753. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_dg_private.py +0 -0
  754. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_disambiguation.py +0 -0
  755. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_document_scope.py +0 -0
  756. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_embedding.py +0 -0
  757. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_embedding_profiles.py +0 -0
  758. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_entity_resolution.py +0 -0
  759. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  760. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_fusion.py +0 -0
  761. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_graph_extraction.py +0 -0
  762. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_graph_query.py +0 -0
  763. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_graph_storage.py +0 -0
  764. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_highlight_serve.py +0 -0
  765. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_hybrid_search.py +0 -0
  766. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_jev_decision.py +0 -0
  767. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_manifest_validation.py +0 -0
  768. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_manifests.py +0 -0
  769. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_parsing.py +0 -0
  770. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_parties_extraction.py +0 -0
  771. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  772. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_query_function_classifier.py +0 -0
  773. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_query_understanding.py +0 -0
  774. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_registry.py +0 -0
  775. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_remote_encoders.py +0 -0
  776. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_repair_partition.py +0 -0
  777. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_requirement_extraction.py +0 -0
  778. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_reranking.py +0 -0
  779. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_retrieval_core.py +0 -0
  780. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_rlm_chunking.py +0 -0
  781. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  782. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_rlm_method.py +0 -0
  783. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_rlm_synthesis.py +0 -0
  784. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_runtime_registry.py +0 -0
  785. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_scan_quality.py +0 -0
  786. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  787. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  788. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_structural_model_fallback.py +0 -0
  789. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  790. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_tiered_ocr.py +0 -0
  791. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/capabilities/test_vlm_ocr.py +0 -0
  792. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/compliance_fakes.py +0 -0
  793. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/conftest.py +0 -0
  794. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/__init__.py +0 -0
  795. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  796. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_chunk_record.py +0 -0
  797. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_compliance.py +0 -0
  798. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  799. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_extraction.py +0 -0
  800. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_function.py +0 -0
  801. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_function_routing.py +0 -0
  802. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_identifiers.py +0 -0
  803. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_ingestion_hooks.py +0 -0
  804. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_jurisdiction.py +0 -0
  805. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_ontology.py +0 -0
  806. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_property.py +0 -0
  807. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_provenance.py +0 -0
  808. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/contracts/test_value_match.py +0 -0
  809. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/__init__.py +0 -0
  810. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/_ooxml_fixtures.py +0 -0
  811. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_canonicalize.py +0 -0
  812. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_cuad.py +0 -0
  813. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_cuad_ingestion.py +0 -0
  814. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_document_parser.py +0 -0
  815. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_edgar.py +0 -0
  816. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_embedded.py +0 -0
  817. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_gcs_ingestion.py +0 -0
  818. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_http.py +0 -0
  819. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_parse_wire2.py +0 -0
  820. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/corpus/test_selection.py +0 -0
  821. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/eval/test_contractnli_judge.py +0 -0
  822. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  823. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/eval/test_kg_property_rerank.py +0 -0
  824. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/eval/test_nl_to_type_metrics.py +0 -0
  825. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/eval/test_relational_eval.py +0 -0
  826. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  827. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  828. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  829. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/fixtures/leg_a_silver/README.md +0 -0
  830. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  831. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/fixtures/table-bearing-contract.pdf +0 -0
  832. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/foundation/__init__.py +0 -0
  833. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  834. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/foundation/test_model_seam_structured.py +0 -0
  835. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/__init__.py +0 -0
  836. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_builder.py +0 -0
  837. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  838. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_document_metadata.py +0 -0
  839. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_evaluate.py +0 -0
  840. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_evaluate_labels.py +0 -0
  841. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_layout_segmenter.py +0 -0
  842. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_spreadsheet_content.py +0 -0
  843. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_table_rows.py +0 -0
  844. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_tuning.py +0 -0
  845. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_unit_grouper.py +0 -0
  846. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ingestion/test_unit_representative.py +0 -0
  847. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/journey/incidents_domain.py +0 -0
  848. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/journey/incidents_pack.ttl +0 -0
  849. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/journey/test_incidents_journey.py +0 -0
  850. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/journey/test_pack_schema.py +0 -0
  851. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/mcp/__init__.py +0 -0
  852. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/mcp/test_compliance_server.py +0 -0
  853. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/mcp/test_intra_document_qa_server.py +0 -0
  854. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  855. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/mcp/test_relational_qa_server.py +0 -0
  856. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  857. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/__init__.py +0 -0
  858. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_async_infra.py +0 -0
  859. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_models_dir.py +0 -0
  860. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_no_gemma_default.py +0 -0
  861. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_profile_routing.py +0 -0
  862. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_profile_seam.py +0 -0
  863. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_seam_async.py +0 -0
  864. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_seam_retry.py +0 -0
  865. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_seam_stream.py +0 -0
  866. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_serving_seam.py +0 -0
  867. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_serving_wiring.py +0 -0
  868. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_tag_structured.py +0 -0
  869. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_tag_structured_async.py +0 -0
  870. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_tracing.py +0 -0
  871. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/models/test_usage.py +0 -0
  872. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/__init__.py +0 -0
  873. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_clause_template.py +0 -0
  874. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  875. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_derivation.py +0 -0
  876. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_entity_taxonomy.py +0 -0
  877. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  878. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  879. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  880. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  881. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/reference/test_compliance_reference.py +0 -0
  882. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/reference/test_contract_seam.py +0 -0
  883. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/scripts/test_eval_chunking_ab.py +0 -0
  884. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/scripts/test_eval_classifier_ab.py +0 -0
  885. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/scripts/test_fetch_reference_models.py +0 -0
  886. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/skills/__init__.py +0 -0
  887. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/skills/test_ingestion_skill_example.py +0 -0
  888. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_boundary.py +0 -0
  889. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_classifier_property_extractor.py +0 -0
  890. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  891. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_clause_function_classifier.py +0 -0
  892. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_clause_function_classifier_async.py +0 -0
  893. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_clause_kg_extractor.py +0 -0
  894. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  895. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_dim_classifier.py +0 -0
  896. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_dim_fleet_live.py +0 -0
  897. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_function_classifier.py +0 -0
  898. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_hybrid_classifier.py +0 -0
  899. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_hybrid_property_extractor.py +0 -0
  900. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_legalbert_classifier.py +0 -0
  901. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_model_capabilities.py +0 -0
  902. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_new_function_labels.py +0 -0
  903. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_page_map.py +0 -0
  904. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_property_extractor.py +0 -0
  905. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_property_grounding.py +0 -0
  906. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_reclassify.py +0 -0
  907. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_residual_decision.py +0 -0
  908. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_scarce_function_labels.py +0 -0
  909. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_segment.py +0 -0
  910. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_segmentation_vocab.py +0 -0
  911. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_semantic_judge.py +0 -0
  912. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_setfit_clause_adapter.py +0 -0
  913. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_setfit_probabilities.py +0 -0
  914. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_span_offsets.py +0 -0
  915. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_stage_labels_0005.py +0 -0
  916. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_symbolic_validation.py +0 -0
  917. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/spans/test_tag_clause_extractor.py +0 -0
  918. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/__init__.py +0 -0
  919. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_affiliation_backfill.py +0 -0
  920. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_arcadedb_clause_kg.py +0 -0
  921. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_arcadedb_contract.py +0 -0
  922. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_arcadedb_property.py +0 -0
  923. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  924. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_arcadedb_schema.py +0 -0
  925. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_arcadedb_span.py +0 -0
  926. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_chunk_text.py +0 -0
  927. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_concurrent_writes.py +0 -0
  928. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_contract_kg_store_live.py +0 -0
  929. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_document_metadata_live.py +0 -0
  930. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_document_scope.py +0 -0
  931. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_engine_domain_neutral.py +0 -0
  932. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_entities_by_name.py +0 -0
  933. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_kg_edges.py +0 -0
  934. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_kg_mutations.py +0 -0
  935. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_kg_read.py +0 -0
  936. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_kg_write.py +0 -0
  937. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_neutral_schema.py +0 -0
  938. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/store/test_write_graph_idempotent.py +0 -0
  939. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/__init__.py +0 -0
  940. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_async_ingestion.py +0 -0
  941. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  942. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_clause_results.py +0 -0
  943. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_compliance_check.py +0 -0
  944. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  945. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  946. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  947. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  948. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_graph_extraction.py +0 -0
  949. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_ingest_knobs.py +0 -0
  950. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  951. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_intra_document_qa.py +0 -0
  952. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_observability.py +0 -0
  953. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  954. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  955. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_relational_qa.py +0 -0
  956. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_requirement_extraction.py +0 -0
  957. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_scaffold.py +0 -0
  958. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_semantic_chunking.py +0 -0
  959. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  960. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  961. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/test_backfill_clause_span_id.py +0 -0
  962. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/test_dg_model_ab.py +0 -0
  963. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/test_populate_clause_kg.py +0 -0
  964. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/test_populate_entity_graph.py +0 -0
  965. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/util/__init__.py +0 -0
  966. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/util/test_concurrent.py +0 -0
  967. {rag_wright-0.4.0 → rag_wright-0.5.1}/tests/util/test_spacy_model.py +0 -0
@@ -86,6 +86,26 @@ One JSONL line per case (`research/scripts/finetune_single_device.py` reads this
86
86
  - Runs on **one 16 GB GPU (T4)** — ~1–2 h for large data, minutes for our small dims. RLCD = soft-CE + GRPO-style
87
87
  policy gradient on proper scoring rules. Calibration (one temperature per type) is fitted inside the run on a
88
88
  held-out slice; **argmax/accuracy unchanged, only confidence moves** — always fit before gating on confidence.
89
+ - **Check the fitted temperatures against the SERVING runtime's range (a known Laya mismatch).** The research
90
+ fine-tuning script fits each type's temperature and clips it to [0.1, 10]
91
+ (`research/scripts/finetune_single_device.py:154`); the Laya runtime (0.3.22) serves only [0.5, 5]
92
+ (`laya.common.TEMP_MIN` / `TEMP_MAX`) and clamps the rest, with a load-time `RuntimeWarning` ("... values outside
93
+ [0.5, 5] ... treat confidence ... as uncalibrated"). A clamped `choice` temperature leaves the ranking alone (one
94
+ scale per question: argmax, top-k and `none`-abstains are stable) but makes the probabilities sharper than
95
+ fitted, so they are overconfident. So, after every training run:
96
+ 1. read `temperature` in each checkpoint's `rl_agent_config.json` and compare it with the runtime range;
97
+ 2. if you only rank (top-k, abstain on `none`), an out-of-range value changes no label: record it and move on;
98
+ 3. if anything gates on `probabilities` or `answer_confidence`, refit within the runtime range with the runtime
99
+ calibrator on a held-out labelled slice (`laya.calibrate.records_from_labeled(agent, pairs)` ->
100
+ `fit_temperature_map(records)`, whose fits are clamped to the runtime range), save it with
101
+ `Agent.save_calibration(path)` and serve with `Agent.load_calibration(path)`.
102
+
103
+ The engine's reference fleet has nine such checkpoints and only ranks (ADR-0129). A report to Laya upstream is
104
+ drafted in the engine repository (`docs/upstream/laya-temperature-range-mismatch.md`, not yet filed); check the
105
+ Laya release notes before relying on either range. Repository paths in this skill (`docs/`) are in the engine repository:
106
+ read them there or on GitHub.
107
+ - **Train with the scikit-learn your serving environment runs** (or raise the serving floor with it): a SetFit
108
+ head pickled by a newer scikit-learn warns on load and can change predictions without an error.
89
109
  - **OOM knobs:** ModernBERT-large (~400M) is tight on a 16 GB T4/L4. The single-device script has NO batch or
90
110
  sequence flags: it fixes `micro_batch = 8`, `max_tokens_per_batch = 4096`, `max_len = 1024` and `head_max_len = 256`
91
111
  in code, and turns on gradient checkpointing on CUDA. Our short-clause dims ran with it unchanged. If a run still
@@ -26,6 +26,26 @@ This skill is the operational checklist that ties them together.
26
26
  - Served-model-name is `Qwen/Qwen3.8-27B` (what the engine profile `qwen3.8-27b-modal` asks for), even though the
27
27
  weights are the `-FP8` repo.
28
28
 
29
+ **From the engine (PS-19): deploy, then use the server like any model.** `ModelServerSpec`'s defaults ARE the
30
+ locked config below (FP8 weights + FP8 KV, one A100-80GB, TP 1, 16K, 0.95, served `Qwen/Qwen3.8-27B`, hermes +
31
+ qwen3 parsers, image builder 2025.06); state only the concurrency target, which ADR-0110 leaves to you.
32
+ `adeploy_model_server` runs the deploy below with those settings, waits for `/health` (with progress; a cold start is
33
+ ~8 min), and registers a model profile with the server's own endpoint, so no `VLLM_BASE_URL` is needed:
34
+
35
+ ```python
36
+ from rag_wright.api import EngineConfig, ModelServerSpec, adeploy_model_server, stop_model_server
37
+
38
+ server = await adeploy_model_server(ModelServerSpec(name="acme-qwen", max_num_seqs=32)) # key from VLLM_API_KEY
39
+ config = EngineConfig(store=..., models={"general": server.model_id}) # or any model= argument
40
+ ...
41
+ stop_model_server("acme-qwen") # stop billing
42
+ ```
43
+
44
+ `amodel_server(spec)` reconnects to a server deployed earlier (a restart, another process) without redeploying.
45
+ The API key comes from the variable `ModelServerSpec.api_key_env` names (default `VLLM_API_KEY`); there is no default
46
+ key, so set a real one. Needs `rag-wright[modal]` and a Modal login. One app per server name: different names give
47
+ different servers (and URLs), for example one per tenant.
48
+
29
49
  **The exact working deploy (this succeeded):**
30
50
  ```
31
51
  MODAL_IMAGE_BUILDER_VERSION=2025.06 \
@@ -137,6 +137,13 @@ Work the domain-adaptation guide, grounding each engine call (step 2) and writin
137
137
  6. **Build the product seam** — your thin layer over the engine API + registered caps (tenancy, orchestration,
138
138
  the product tool surface). Wrap `open_workspace`/the invokers/`kg_read`/`measure_usage`.
139
139
 
140
+ **Using a self-hosted model (Qwen on Modal).** Deploy it from the engine and use its model id like any model:
141
+ `server = await adeploy_model_server(ModelServerSpec(name="<app>", max_num_seqs=<concurrency target>))` (the locked
142
+ setup of the `qwen-vllm-modal` skill; needs `rag-wright[modal]`, a Modal login and `VLLM_API_KEY` in `.env`), then
143
+ `EngineConfig(models={"general": server.model_id, ...})`. Other processes reconnect with `amodel_server(spec)`;
144
+ call `await_model_server(server)` before traffic (cold start is minutes); `stop_model_server(name)` stops billing.
145
+ Full walk-through: `docs/configuration.md`, "A self-hosted model server".
146
+
140
147
  **Using the decision model (Jev).** Register `jev_decision` (from `engine_capabilities()`) and set
141
148
  `OPENROUTER_API_KEY` (`RAG_DECISION_MODEL` overrides the default profile `jev-1.13`). Without both, the reference
142
149
  pack's decision paths silently fall back (to deterministic rules or the LLM); your own
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.5.1"
3
+ }
@@ -4,6 +4,25 @@ 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.5.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.5.0...0.5.1) (2026-10-10)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * **PS-19:** a runnable model-server example for products; async Modal URL lookup ([35cd80f](https://github.com/fzaidi-dai/RAG_Wright/commit/35cd80f003453dfbb648df020a03ffe85ef64826))
13
+
14
+ ## [0.5.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.4.0...0.5.0) (2026-10-10)
15
+
16
+
17
+ ### Features
18
+
19
+ * **PS-19:** deploy the self-hosted model server from the engine and use it like any model ([5cd4d22](https://github.com/fzaidi-dai/RAG_Wright/commit/5cd4d22b6e684052b2d75162df32078fdf1cf2e6))
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * **PS-18:** scikit-learn floor 1.9.1 for the shipped heads; Laya temperatures recorded (ADR-0129) ([2350de4](https://github.com/fzaidi-dai/RAG_Wright/commit/2350de44a877bd74ad4e920c39a1557d43a0f2c8))
25
+
7
26
  ## [0.4.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.3.1...0.4.0) (2026-10-09)
8
27
 
9
28
 
@@ -55,10 +55,10 @@ The failure mode to avoid, which has happened before: a command fails with "modu
55
55
 
56
56
  ## Start of every session
57
57
 
58
- > **CURRENT STATE (2026-10-09): the public-surface workstream is COMPLETE and released as `rag-wright` 0.3.1** (ledger
58
+ > **CURRENT STATE (2026-10-09): the public-surface workstream is COMPLETE and released as `rag-wright` 0.5.0** (ledger
59
59
  > `docs/specs/public-surface/plan.md`, ADR-0128: two public tiers, `rag_wright.api` for a product's seam and
60
60
  > `rag_wright.pack_sdk` for a pack's code, enforced by import contracts and a domain-vocabulary guard). Next:
61
- > RuleWright moves (to 0.3.1+) from `docs/specs/public-surface/rulewright-migration-0.3.0.md`; PS-R4 (the unit-labelling eval) is done, unreleased. Before it,
61
+ > RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md` then `rulewright-migration-0.4.0.md` and `-0.5.0.md`; PS-R4 (the unit-labelling eval) is done, unreleased. Before it,
62
62
  > the **ingestion-hooks** workstream (ADR-0124) is
63
63
  > COMPLETE and released as **`rag-wright` 0.2.0** (PyPI + GitHub tag/release `0.2.0`; release process
64
64
  > `docs/releasing.md`): the generic `build_ingestion` with hooks and domain-neutral defaults, the neutral default
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.4.0
3
+ Version: 0.5.1
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
@@ -39,9 +39,11 @@ Requires-Dist: pydantic>=2.0
39
39
  Requires-Dist: pypdfium2>=5.11
40
40
  Requires-Dist: pyshacl>=0.40.1
41
41
  Requires-Dist: python-dotenv>=1.2
42
- Requires-Dist: scikit-learn>=1.9.0
42
+ Requires-Dist: scikit-learn>=1.9.1
43
43
  Requires-Dist: sentence-transformers>=6.1.0
44
44
  Requires-Dist: transformers<5.9,>=5.4
45
+ Provides-Extra: modal
46
+ Requires-Dist: modal>=1.5.3; extra == 'modal'
45
47
  Provides-Extra: ner
46
48
  Requires-Dist: spacy>=3.8.14; extra == 'ner'
47
49
  Provides-Extra: ocr-bench
@@ -0,0 +1,47 @@
1
+ # ADR-0129: The shipped Laya temperatures stay as fitted; scikit-learn floor at 1.9.1
2
+
3
+ **Status:** accepted · **Date:** 2026-10-10 · **Related:** ADR-0116 (Laya property classifiers), ADR-0119 (decision
4
+ models), PS-5 (reference weights on GCS)
5
+
6
+ ## Context
7
+
8
+ RuleWright reported (its engine request of 2026-10-10) two findings in the shared reference weights:
9
+
10
+ 1. Laya 0.3.22 warns on loading 9 of the 15 Laya checkpoints: their `choice` temperature (`temperature[0]`, from
11
+ 5.64 to 10.0) is outside the runtime's accepted [0.5, 5], so it is clamped to 5 and the probabilities are
12
+ "uncalibrated".
13
+ 2. Eight shipped SetFit heads (the three clause-function heads, five property-dimension heads) were pickled with
14
+ scikit-learn 1.9.1 while the engine declared and ran 1.9.0, so each warns on load (`InconsistentVersionWarning`).
15
+
16
+ ## Findings
17
+
18
+ - **Cause of the temperatures.** Laya's own fine-tuning script (`research/scripts/finetune_single_device.py:154`)
19
+ fits one temperature per question type by log-likelihood on a held-out slice and clips it to [0.1, 10]; the
20
+ runtime accepts [0.5, 5]. The values are fitted, not left uninitialised; the three at 10.0 hit the training clip.
21
+ The mismatch is between Laya's training script and its runtime.
22
+ - **Effect on labels.** The reference pack's classifier lane (`_classifier_assertions`) emits the top-k options by
23
+ rank and abstains when `none` is among them; it never reads the probability value. One temperature scales every
24
+ option of a question alike, so it cannot reorder them. Measured on 300 CUAD paragraphs, every affected
25
+ checkpoint and dimension, served (5) vs shipped temperature, 5,400 paired predictions: 0 abstain decisions
26
+ changed; 45 emitted label sets (0.8%) differed, every one between options equal to 4 decimals (Laya rounds its
27
+ probabilities, and the sort breaks the tie); 1 primary label changed, on a `damage_type` answer with all options
28
+ between 0.17 and 0.22. Scoring twice at one temperature is identical.
29
+ - **Effect on probabilities.** For these 9 checkpoints the served probabilities are up to 0.22 sharper than the
30
+ fitted calibration, so they are overconfident. Nothing in the engine reads them.
31
+
32
+ ## Decision
33
+
34
+ 1. The nine checkpoints are not re-exported; the cause and the measured effect are recorded here, in the reference
35
+ pack's documentation and in the `laya` skill. A re-export at temperature 5.0 would serve identically and only
36
+ silence the warning; widening the accepted range is Laya's decision, not the engine's. A report to Laya is
37
+ drafted (`docs/upstream/laya-temperature-range-mismatch.md`, not filed).
38
+ 2. A product that gates on these classifiers' probabilities must not treat them as calibrated (or must refit within
39
+ the runtime's range).
40
+ 3. The engine requires `scikit-learn>=1.9.1`, the version the shipped heads were pickled with, and
41
+ `tests/models/test_classifier_heads_load_clean.py` fails when any shipped head warns on load.
42
+
43
+ ## Consequences
44
+
45
+ - Labels from the reference fleet are as they were; the warning on loading those 9 checkpoints remains.
46
+ - A future training run checks `rl_agent_config.json` against the serving runtime's temperature range, and the
47
+ training image's scikit-learn version is the engine's floor (or the floor moves with it).
@@ -0,0 +1,32 @@
1
+ # ADR-0130: A product deploys the self-hosted model server from the engine and uses it like any model
2
+
3
+ **Status:** accepted · **Date:** 2026-10-10 · **Related:** ADR-0110 (the locked Qwen config), ADR-0109 (cold start),
4
+ ADR-0100 (model strings carry their backend), PS-14 (per-workspace models)
5
+
6
+ ## Context
7
+
8
+ The self-hosted Qwen server was stood up by hand: the `qwen-vllm-modal` skill's `modal deploy` command, then
9
+ `VLLM_BASE_URL` / `VLLM_API_KEY` in the environment. A product could not deploy it through the engine, and every
10
+ vLLM profile read one process-wide endpoint, so two servers (one per tenant) needed custom profiles and variables.
11
+
12
+ ## Decision
13
+
14
+ 1. `ModelServerSpec` describes one server; its defaults are the skill's locked Config B (ADR-0110), and the
15
+ concurrency target (`max_num_seqs`) has no default because ADR-0110 leaves it to the deployment.
16
+ 2. `adeploy_model_server(spec)` runs the deploy script shipped with the skill (Modal's own CLI, the documented
17
+ command), waits for `/health` with progress, and registers a model profile for the server: the
18
+ `qwen3.8-27b-modal` profile's Qwen settings, the server's own endpoint, and the API-key variable the spec names.
19
+ `amodel_server(spec)` reconnects without redeploying; `stop_model_server(name)` stops it.
20
+ 3. A model profile can carry an explicit `base_url`, which wins over its `base_url_env`; `register_model_profile`
21
+ adds one at run time. So a deployed server is just another model id (`qwen3.8-27b-modal@<name>`) for
22
+ `EngineConfig.models` or any `model=` argument.
23
+ 4. The API key has no default: deploying refuses when the named variable is unset. `modal` is an optional extra
24
+ (`rag-wright[modal]`).
25
+
26
+ ## Consequences
27
+
28
+ - Live (2026-10-10): deploy through the API, ready after 226 s, one answer through a workspace metered on the
29
+ server's model id, stopped (the app no longer resolves); 239 s of A100 in all.
30
+ - Cold start remains a separate task (PS-20, ADR-0109); the readiness wait reports it, it does not shorten it.
31
+ - Registered server profiles are process-wide, like every profile; a restarted process reconnects with
32
+ `amodel_server`.
@@ -1,7 +1,7 @@
1
1
  # Architecture Decision Records — index
2
2
 
3
3
  128 ADR files (0001–0119, plus 0120 — the former duplicate `0015`, renumbered 2026-10-05 to repair the collision —
4
- and 0121–0128). ADRs are an
4
+ and 0121–0130). ADRs are an
5
5
  immutable, cross-referenced decision log: nothing here is moved or renumbered — legacy records carry a `Status:`
6
6
  banner pointing to what replaced them. This index groups them so a newcomer isn't drowned.
7
7
 
@@ -184,4 +184,6 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
184
184
  0125 Qwen3.8-27b on OpenRouter is unpinned (no provider routing; supersedes 0111) ·
185
185
  0126 Which span represents a unit is a domain hook; the reference pack votes over operative spans ·
186
186
  0127 Retire the OKF code ·
187
- 0128 Two public tiers: `rag_wright.api` for products, `rag_wright.pack_sdk` for packs
187
+ 0128 Two public tiers: `rag_wright.api` for products, `rag_wright.pack_sdk` for packs ·
188
+ 0129 The shipped Laya temperatures stay as fitted; scikit-learn floor at 1.9.1 ·
189
+ 0130 A product deploys the self-hosted model server from the engine and uses it like any model
@@ -28,6 +28,18 @@ An opaque handle to a resolved engine workspace. Public surface: `model_id(role)
28
28
 
29
29
  Resolve a model role to its id: the `EngineConfig.models` override wins, else the profile default.
30
30
 
31
+ ### `ModelServerSpec(max_num_seqs: 'int', name: 'str' = 'rw-qwen3-modal', model: 'str' = 'Qwen/Qwen3.8-27B-FP8', kv_cache_dtype: 'str' = 'fp8', served_name: 'str' = 'Qwen/Qwen3.8-27B', gpu: 'str' = 'A100-80GB:1', tensor_parallel: 'int' = 1, max_len: 'int' = 16384, gpu_util: 'float' = 0.95, tool_parser: 'str' = 'hermes', reasoning_parser: 'str' = 'qwen3', image_builder_version: 'str' = '2025.06', api_key_env: 'str' = 'VLLM_API_KEY') -> None`
32
+
33
+ One self-hosted Qwen server on Modal. The defaults are the locked setup of the `qwen-vllm-modal` skill (ADR-0110, Config B): FP8 weights + FP8 KV cache, one A100-80GB, tensor parallel 1, 16K context, 0.95 GPU memory, served as `Qwen/Qwen3.8-27B` with the hermes tool parser and the qwen3 reasoning parser, image builder 2025.06. `max_num_seqs` has no default: ADR-0110 sets it to the real concurrency target (keep client concurrency below it). `name` is the Modal app name, and so the server's URL. `api_key_env` names the environment variable that holds the server's API key.
34
+
35
+ #### `ModelServerSpec.deploy_env(self) -> 'dict[str, str]'`
36
+
37
+ The deploy command's settings, as the skill's documented command passes them.
38
+
39
+ ### `ModelServer(name: 'str', root: 'str', base_url: 'str', model_id: 'str', served_model_id: 'str', api_key_env: 'str') -> None`
40
+
41
+ A deployed server: `model_id` is the model id to use (in `EngineConfig.models` or a `model=` argument); `base_url` is its OpenAI-compatible endpoint; `root` is its URL (for `/health`).
42
+
31
43
  ### `ModelRole(*values)`
32
44
 
33
45
  Which model does which job. The mapping to ids lives in config, not in capability code.
@@ -238,6 +250,22 @@ Build a pack's store extension (or any object that wraps the workspace store) ov
238
250
 
239
251
  Resolve every model role through `ws`'s `EngineConfig.models` inside the block (PS-14), ahead of the `RAG_MODEL_*` environment. The engine's own entry points that take a workspace (`aingest`, the invokers) do this for you; use it around engine calls that take no workspace, such as `parse_document_bytes` (OCR) or a `default_chunk_discoverer` run, when the workspace overrides those roles. Per call, never shared: concurrent blocks for different workspaces each see their own models.
240
252
 
253
+ ### `adeploy_model_server(spec: 'ModelServerSpec', *, wait: 'bool' = True, timeout_s: 'float' = 1500, poll_s: 'float' = 15, progress: 'Callable[[str], object]' = print) -> 'ModelServer'`
254
+
255
+ Deploy (or redeploy) the server described by `spec` on Modal, register its model profile, and (with `wait`) wait for it to be ready. Returns the `ModelServer`; use `server.model_id` as the model. Raises `RuntimeError` when the API-key variable is unset (nothing is deployed). The server runs (and bills) until `stop_model_server`, or until Modal scales it down after 10 idle minutes.
256
+
257
+ ### `amodel_server(spec: 'ModelServerSpec') -> 'ModelServer'`
258
+
259
+ Reconnect to a server deployed earlier (by this process or another) without redeploying: look up its URL and register its model profile. `spec` must match the deployed server (its name and served model).
260
+
261
+ ### `await_model_server(server: 'ModelServer', *, timeout_s: 'float' = 1500, poll_s: 'float' = 15, progress: 'Callable[[str], object]' = print) -> 'ModelServer'`
262
+
263
+ Wait until the server answers `/health` (a cold start is about 8 minutes, ADR-0109); progress as `i/N`. Raises `TimeoutError` after `timeout_s`.
264
+
265
+ ### `stop_model_server(name: 'str') -> 'None'`
266
+
267
+ Stop the Modal app `name` (stops billing); its URL stops answering.
268
+
241
269
  ### `ainvoke_subgraph(name: 'str', inputs: 'dict', *, resources: 'WorkspaceHandle') -> 'Any'`
242
270
 
243
271
  Invoke a subgraph-kind capability by name over the workspace, inside a trace span. The implementation is resolved lazily from the manifest `impl_ref` (no central adapter dict). Retry/dead-letter comes from the LangGraph scaffold the subgraph is built on; usage is captured by the caller's `measure_usage()` (EP-API-5).
@@ -106,6 +106,7 @@ and how to manage workspaces.
106
106
  call. Override one role with `RAG_MODEL_<ROLE>` (e.g. `RAG_MODEL_VISION_OCR`, `RAG_MODEL_GENERAL`), or every
107
107
  role at once with `RAG_MODEL_ALL`; the role-specific variable wins.
108
108
  - **Structured output** is client-side tag-parse (ADR-0045); any provider flags live in the profile.
109
+ - **A self-hosted Qwen server**: see [A self-hosted model server](#a-self-hosted-model-server-qwen-on-modal) below.
109
110
  - **Decision models** (e.g. Jev) are reached through a `DecisionModelProfile` (default `jev-1.13`;
110
111
  `RAG_DECISION_MODEL` only overrides which profile). The reference contract pipeline uses the decision model
111
112
  whenever its key (`OPENROUTER_API_KEY`) is set **and** the `jev_decision` capability is registered
@@ -114,6 +115,74 @@ and how to manage workspaces.
114
115
  (deterministic boundaries; the LLM judge and residual call). `RAG_SEMANTIC_JUDGE=llm` / `RAG_RESIDUAL_EXTRACTOR=llm`
115
116
  switch the judge / the residual values back to the LLM.
116
117
 
118
+ ## A self-hosted model server (Qwen on Modal)
119
+
120
+ By default every role uses Qwen3.8-27B through OpenRouter. A product can instead run its own Qwen server on Modal,
121
+ deployed from the engine, and use it like any other model. The server's setup is the locked one from the
122
+ `qwen-vllm-modal` skill (ADR-0110: FP8 weights and KV cache on one A100-80GB, 16K context); you choose only its name
123
+ and its concurrency target.
124
+
125
+ **One-time setup.**
126
+
127
+ ```sh
128
+ uv add 'rag-wright[modal]' # Modal is an optional extra
129
+ uv run modal token new # log in to Modal once per machine
130
+ ```
131
+
132
+ and put the server's API key in your `.env` (any secret string; the server is deployed with it and every call
133
+ sends it): `VLLM_API_KEY=<a long random string>`. There is no default key.
134
+
135
+ **Deploy, then use it like any model.**
136
+
137
+ ```python
138
+ from rag_wright.api import (EngineConfig, ModelServerSpec, StoreConfig, adeploy_model_server, open_workspace,
139
+ stop_model_server)
140
+
141
+ spec = ModelServerSpec(name="acme-qwen", max_num_seqs=32) # name = the Modal app (and URL); 32 = concurrency target
142
+ server = await adeploy_model_server(spec) # deploys, waits for /health, prints progress
143
+
144
+ ws = open_workspace(EngineConfig(store=StoreConfig.from_env(), models={"general": server.model_id,
145
+ "structured_reasoning": server.model_id}),
146
+ corpus="acme")
147
+ # every engine call for this workspace that uses those roles now runs on the server
148
+ ```
149
+
150
+ `server.model_id` (here `qwen3.8-27b-modal@acme-qwen`) is an ordinary model id: put it in `EngineConfig.models`
151
+ for the roles it should serve, or pass it as a `model=` argument. Its profile carries the server's own endpoint and
152
+ the Qwen thinking settings, so no `VLLM_BASE_URL` is needed, and two servers (one per tenant, say) are just two
153
+ model ids in two workspaces' configs.
154
+
155
+ **In a service.** Deploy from one place (a startup job or an operator script). Every other process reconnects
156
+ without redeploying, which only looks up the server and registers its model id:
157
+
158
+ ```python
159
+ from rag_wright.api import amodel_server, await_model_server
160
+
161
+ server = await amodel_server(ModelServerSpec(name="acme-qwen", max_num_seqs=32)) # same spec as the deploy
162
+ await await_model_server(server) # returns at once if it is up; waits through a cold start if it scaled down
163
+ ```
164
+
165
+ **What to know before you rely on it.**
166
+
167
+ - **Cold start.** A new or scaled-down server takes minutes to become ready (226 s in the last live run; up to about
168
+ 8 minutes, ADR-0109). After 10 idle minutes Modal scales the container to zero (no GPU billing) but keeps the app
169
+ deployed; the next request waits through a cold start, so call `await_model_server` before sending traffic.
170
+ - **Cost.** An A100 bills while a container runs. `stop_model_server("acme-qwen")` removes the app entirely; deploy
171
+ again to bring it back.
172
+ - **Concurrency.** `max_num_seqs` is how many requests the server batches at once (ADR-0110 sets it to your real
173
+ concurrency target); keep your own client concurrency below it.
174
+ - **Timeouts.** Reasoning-on structured calls under full load can take about a minute; raise
175
+ `RAG_STRUCTURED_TIMEOUT_S` (default 60) for bulk work, or calls time out and retry.
176
+ - **Process-wide.** A registered server model id is known to the whole process, like every model profile; after a
177
+ restart, call `amodel_server` again.
178
+
179
+ **A runnable example.** `examples/model_server.py` does all of this through `rag_wright.api`: `deploy` brings a
180
+ server up, asks one question on it through a workspace, checks the call was metered on the server's model id, then
181
+ stops it and confirms it is gone; `reconnect` is the service-process path (look up, wait, ask, leave it running).
182
+
183
+ The `qwen-vllm-modal` skill has the operational detail (the image fixes, serving gotchas, the manual `modal deploy`
184
+ command) and ADR-0130 the design.
185
+
117
186
  ## Environment variables (reference)
118
187
 
119
188
  Prefer config; use env for secrets and for non-API callers. The common ones the engine reads:
@@ -18,7 +18,9 @@ ADR-0117/0118 engine API + capability runtime). Read [Concepts](../concepts.md)
18
18
  catalog: the generic ingest `tuning`, plus your pack's own options under `EngineOptions.packs`) and
19
19
  `open_workspace(config, corpus=…) -> WorkspaceHandle`. `corpus` is the backend DB name; tenancy is
20
20
  product-side: one corpus and one config per tenant, with the settings that stay per process listed in
21
- [Workspaces](../workspaces.md). → [Configuration](../configuration.md).
21
+ [Workspaces](../workspaces.md). To run on your own Qwen server instead of OpenRouter, deploy it from the engine
22
+ and use its model id in `EngineConfig.models` ([A self-hosted model server](../configuration.md#a-self-hosted-model-server-qwen-on-modal)).
23
+ → [Configuration](../configuration.md).
22
24
 
23
25
  3. **Author the domain `.ttl` pack.** The domain KNOWLEDGE — closed value sets, the KG schema, SHACL constraints,
24
26
  mappings — lives in the ontology, declaratively, never in Python (ADR-0066). It co-evolves with step 4 (it
@@ -47,6 +47,8 @@ to reach the network (mock the call, or mark the test). The live markers, declar
47
47
  uv add 'rag-wright[ner]' # in a product; working on the engine itself: uv sync --extra ner
48
48
  uv run python -m spacy download en_core_web_sm # configurable via RAG_SPACY_MODEL
49
49
  ```
50
+ - **`rag-wright[modal]`**: Modal, for deploying the self-hosted Qwen server from the engine
51
+ (`adeploy_model_server`; see [Configuration](configuration.md)). Log in once with `uv run modal token new`.
50
52
  - **`rag-wright[ocr-bench]`** — the OCR-benchmark extras (`mlx-vlm`, `ocrmac`, `onnxruntime`, `scikit-image`).
51
53
 
52
54
  ### Skills for coding agents
@@ -112,6 +112,12 @@ to `build_ingestion(unit_representative=...)`.
112
112
 
113
113
  ## Its trained weights: fetched, not shipped
114
114
 
115
+ Two things to know about these weights (ADR-0129). Nine of the 15 Laya checkpoints carry a `choice` temperature
116
+ above the Laya runtime's accepted range, so Laya clamps it and warns on load. The fleet's labels are unaffected,
117
+ because it emits options by rank and never reads the probability, but those nine checkpoints' probabilities are
118
+ sharper than calibrated: do not gate on them. The SetFit heads were pickled with scikit-learn 1.9.1, the engine's
119
+ floor.
120
+
115
121
  The pack's two `model` capabilities load trained weights that are not in the wheel or the repository (about 16 GB):
116
122
  the clause-type SetFit ensemble and the 29-dimension SetFit/Laya property fleet. They load from the models root
117
123
  (`RAG_MODELS_DIR`; default the engine checkout's `data/models` when it exists, else `./data/models`). Fetch them
@@ -91,3 +91,6 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
91
91
  | PS-15 | Docs, after PS-13 and PS-14: one place that says what is per workspace, per config object and per process (corpus and store, `EngineConfig` and its models, the capability catalog, environment variables, classifier weights, caches) and how a product manages workspaces (one corpus per workspace, its own `EngineConfig`, its own `cache_dir`, document metadata); linked from `architecture.md`, `configuration.md`, the domain-adaptation guide, the `using-the-rag-wright-engine` skill and the product-starter templates; a RuleWright section in its 0.3 guide (or the next release's) on managing its workspaces this way; in the user guides, PS-13's two behaviours: a re-ingest only adds or updates the metadata keys it is given (to remove a value, `kg_update` it to `None`), and `IngestSource.metadata` is a new public field shipped in the next minor release (products pin accordingly) | doc-reference test; full suite | done: `docs/workspaces.md` (what applies per workspace / per call / per process, managing workspaces, the two metadata behaviours, config changes need a restart); RuleWright guide `rulewright-migration-0.4.0.md` (customer workspaces, per-customer models vs `answer_model_id`, cache per customer, metadata); linked from README, architecture, configuration, the domain-adaptation guide, the engine-usage skill, both product-starter templates, the 0.3 guide and CLAUDE.md |
92
92
  | PS-16 | A configuration change takes effect without a restart: `open_workspace` returns the cached handle only when the config is equal; a different config gets a new handle (the store and the embedder reused when their settings are unchanged), and calls already holding the old handle finish on the old config; docs (workspaces, configuration, the engine-usage skill, the RuleWright 0.4 guide) updated | hermetic tests; live check (re-open with new models, same store) | done: an equal config returns the cached handle; a different one a new handle that replaces it (store reused for unchanged store settings + pack, query embedder for an unchanged profile; in-flight calls keep the old config); workspaces/configuration/skill/RuleWright 0.4 guide updated; live on ArcadeDB: same connection, new models, data visible |
93
93
  | PS-17 | No Gemma by default anywhere (your decision: Gemma only through config or a product): `DEFAULT_GENERAL` (Gemma) removed from `models.profiles` and `rag_wright.pack_sdk`; the reference pack's legacy tag-parse extractor runs its second list model only when `RAG_INGEST_LIST_MODEL` or `list_model=` names one; text that calls Gemma the model in use corrected (benchmark notes kept); the Gemma profiles stay registered so config can select Gemma correctly | guard test (no role default, constant or default-on path is Gemma); full suite | done: `DEFAULT_GENERAL` removed (profiles + `pack_sdk`, 84 symbols); the legacy extractor's list model via `list_model_for` (only when named); ~20 statements now say the GENERAL role (benchmark notes and serving gotchas kept, labelled); overview's stale Gemma listwise rerank removed; Gemma profiles stay registered; guard test; `CLAUDE.md` / `SPEC.md` wording left as is (your call) |
94
+ | PS-18 | RuleWright's request of 2026-10-10: raise the floor to `scikit-learn>=1.9.1` (8 shipped heads were pickled with 1.9.1) with a guard test that loads every shipped head with `InconsistentVersionWarning` as an error; the Laya temperatures (9 of 15 above Laya 0.3.22's [0.5, 5]) left as they are with the cause and the measured effect written down (ADR): fitted by Laya's training script within [0.1, 10], clamped at serving; labels unaffected (the fleet uses the ranking, not the probability; 5,400 paired predictions: 0 abstain changes, 45 rounding-tie differences); a reply to RuleWright | guard test; full suite | done: `scikit-learn>=1.9.1` (lock 1.9.0 -> 1.9.1); guard loads the 8 heads in the shipped model folders with the version warning as an error; ADR-0129; reference-pack note; the `laya` skill's post-training temperature checklist + scikit-learn lesson; reply to RuleWright; upstream Laya report drafted at `docs/upstream/laya-temperature-range-mismatch.md` (not filed) |
95
+ | PS-19 | A product deploys the self-hosted Qwen server from the engine and uses it like any model: `ModelServerSpec` (defaults = the `qwen-vllm-modal` skill / ADR-0110 locked Config B: Qwen3.8-27B-FP8 + fp8 KV, 1x A100-80GB, TP 1, 16K, 0.95, served name `Qwen/Qwen3.8-27B`, hermes + qwen3 parsers, image builder 2025.06), `adeploy_model_server` (deploys the shipped script, waits for `/health` with X/N progress), reconnect by name, status, stop; each server registered as a model profile with its own endpoint (no `VLLM_BASE_URL` needed), so its `model_id` goes in `EngineConfig.models` or any `model=`; the API key from a named environment variable, never a default; `rag-wright[modal]` extra; Modal grounded in the framework graph | hermetic tests (Modal and HTTP mocked); live: deploy, one call through a workspace, stop, confirm stopped | done: `ModelServerSpec` (Config B defaults, `max_num_seqs` required), `adeploy_model_server` / `amodel_server` / `await_model_server` / `stop_model_server`; profiles carry an explicit `base_url`, `register_model_profile`; `rag-wright[modal]`; ADR-0130; configuration.md walk-through linked from the engine-usage skill, domain-adaptation guide, workspaces, templates; RuleWright 0.5 guide; live: ready in 226 s, one call metered on the server's model id, stopped (239 s of A100). Follow-up: `examples/model_server.py` (`deploy` and `reconnect` modes, public API only) for RuleWright and other products, and the URL lookup moved to Modal's async interface (no `AsyncUsageWarning`); live: all three steps passed (ready after a 254 s cold start, reconnect ready in 1 s, each call metered on the server's model id, stopped, no longer resolves) |
96
+ | PS-20 | Cold start of the self-hosted Qwen server (~8 min, CPU-bound engine init + CUDA-graph capture; ADR-0109): GPU snapshot / sleep mode, measured against the current baseline. Later, by your decision | live cold-start measurement | todo (later) |
@@ -72,3 +72,5 @@ store per database from the environment, and `export_engine_env` republishes the
72
72
  Run RuleWright's suite against the engine checkout (editable path) and its live engine-seam test. If you move to
73
73
  customer workspaces: open two customers with different `general` models, run a question for each concurrently
74
74
  inside `measure_usage()`, and check each call was metered on its own customer's model.
75
+
76
+ Next: `docs/specs/public-surface/rulewright-migration-0.5.0.md` (its own Qwen server; the scikit-learn floor).
@@ -0,0 +1,58 @@
1
+ # RuleWright: moving to rag-wright 0.5 (its own Qwen server)
2
+
3
+ What the release after 0.4.0 adds for RuleWright, written from a read-only scan of the RuleWright repo
4
+ (2026-10-10). Do the 0.3 and 0.4 guides first. Nothing here is edited from the engine repo.
5
+
6
+ **Short version.** Nothing breaks. RuleWright can now deploy its own Qwen server from the engine and point any of
7
+ its model settings at it by changing a string. The scikit-learn floor it asked for is in.
8
+
9
+ ## 1. Nothing breaks
10
+
11
+ - **scikit-learn.** The engine now requires `scikit-learn>=1.9.1` (RuleWright's request, ADR-0129); RuleWright
12
+ already declares the same floor.
13
+ - **Model profiles** can carry an explicit endpoint. Existing profiles have none, so every model RuleWright uses
14
+ today resolves exactly as before.
15
+
16
+ ## 2. Running on its own Qwen server (optional)
17
+
18
+ Today RuleWright's model settings are model-id strings: `rulewright_answer_model`, `rulewright_query_model` and
19
+ `rulewright_ingest_model`, all `qwen3.8-27b-modal-or` (Qwen through OpenRouter). Its `config.py` already notes that
20
+ pointing at its own server "is a string change here, not a code change". The engine now makes that string come from
21
+ a server it deploys:
22
+
23
+ 1. **One-time setup.** `uv add 'rag-wright[modal]'`, `uv run modal token new`, and a real `VLLM_API_KEY` in its
24
+ settings (there is no default key; the server is deployed with it).
25
+ 2. **Deploy once,** from an operator script or a startup job, with the locked setup of the `qwen-vllm-modal` skill:
26
+ `server = await adeploy_model_server(ModelServerSpec(name="rulewright-qwen", max_num_seqs=<target>))`.
27
+ `max_num_seqs` is RuleWright's real concurrency target (ADR-0110); keep its client concurrency below it.
28
+ 3. **Every service process reconnects at startup** without redeploying, then waits for readiness:
29
+ `server = await amodel_server(spec)`, then `await await_model_server(server)`.
30
+ 4. **Use `server.model_id`** (`qwen3.8-27b-modal@rulewright-qwen`) as the value of those three settings, or in a
31
+ customer workspace's `EngineConfig.models` (0.4 guide, section 2). It is an ordinary model id: the seam, answer
32
+ generation and the ported pack's docling-graph extraction (`default_extraction_model`, which resolves through
33
+ the profile) all reach the server's own endpoint. `VLLM_BASE_URL` and `RAG_SERVING` are not needed for it.
34
+ 5. **A server per customer,** if wanted: one `ModelServerSpec` name per customer gives one server and one model id
35
+ each, used in that customer's `EngineConfig.models`.
36
+
37
+ Two cautions. The ported pack's `vllm_model()` helper (`packs/contracts/capabilities/dg_extraction.py`) reads
38
+ `VLLM_BASE_URL` directly and so cannot see a deployed server's endpoint; nothing calls it, so do not start using it.
39
+ And a server scales to zero after 10 idle minutes: the next request waits through a cold start (minutes), so call
40
+ `await_model_server` before sending traffic; `stop_model_server(name)` removes it entirely.
41
+
42
+ The engine's full walk-through is `docs/configuration.md`, "A self-hosted model server"; the design is ADR-0130.
43
+
44
+ ## 3. Verify
45
+
46
+ Run RuleWright's suite against the engine checkout. If it moves a setting to a server: deploy (or reconnect), run
47
+ one question inside `measure_usage()`, and check the call was metered on the server's model id; then stop the
48
+ server if it was a test deployment.
49
+
50
+ The engine's `examples/model_server.py` is that check, written against the public API only, and the place to start
51
+ (read it from the engine checkout; it is not in the wheel):
52
+
53
+ - `uv run python examples/model_server.py deploy` brings a server up (`adeploy_model_server`), opens a workspace
54
+ whose `general` role is `server.model_id`, asks one question inside `measure_usage()`, checks the call was metered
55
+ on the server's model id, then stops the server (`stop_model_server`, always, even on failure) and confirms it no
56
+ longer resolves.
57
+ - `uv run python examples/model_server.py reconnect` is what each RuleWright service process does at startup:
58
+ `amodel_server` then `await_model_server`, one question, and the server left running.
@@ -0,0 +1,44 @@
1
+ # Reply to RuleWright: Laya temperatures and the scikit-learn floor (2026-10-10)
2
+
3
+ Answers RuleWright's `docs/engine-requests/2026-10-10-laya-temperatures-and-sklearn-floor.md`. The decision record is
4
+ ADR-0129. Nothing here is edited in the RuleWright repo.
5
+
6
+ ## 1. The Laya temperatures: not a bug, and labels are unaffected; T-7.23 can proceed
7
+
8
+ **The values are fitted.** Laya's own fine-tuning script fits one temperature per question type by log-likelihood on
9
+ a held-out slice and clips it to [0.1, 10] (`research/scripts/finetune_single_device.py:154`); the Laya runtime
10
+ (0.3.22) accepts [0.5, 5] and clamps the rest. The three at (or within 0.002 of) 10.0 hit the training clip: the fit
11
+ wanted an even softer scale. So it is a range mismatch between Laya's training script and its runtime, not an
12
+ uninitialised value.
13
+
14
+ **The engine's classifier lane does not gate on the probability.** `_classifier_assertions`
15
+ (`rag_wright/packs/contracts/spans/property_extractor.py`) emits the top-k options by rank, abstains when `none` is
16
+ among them, and never reads the probability value. One temperature scales every option of a question alike, so it
17
+ cannot reorder them. Measured on 300 CUAD paragraphs, every affected checkpoint and dimension, served temperature
18
+ (5) against the shipped one, 5,400 paired predictions:
19
+
20
+ | | result |
21
+ |---|---|
22
+ | abstain decisions changed | 0 |
23
+ | emitted label sets changed | 45 (0.8%), every one between options equal to 4 decimals (Laya rounds probabilities; the sort breaks the tie) |
24
+ | primary label changed | 1, on a `damage_type` answer with all five options between 0.17 and 0.22 |
25
+ | the same temperature scored twice | identical |
26
+
27
+ So the clamp does not produce missing labels in the engine's pack, and measuring recall now gives the same answer
28
+ it would after any temperature change. **One thing to check on your side:** if your ported pack added a confidence
29
+ threshold to this lane, the clamp matters there, because those nine checkpoints' probabilities are up to 0.22
30
+ sharper than calibrated.
31
+
32
+ **What the engine did:** recorded the cause and the measurement (ADR-0129, the reference-pack docs, the `laya`
33
+ skill). It did not re-export the nine: a re-export at 5.0 would serve identically and only silence the warning.
34
+ Widening Laya's accepted range is Laya's decision; a report to Laya upstream is drafted in the engine repo
35
+ (`docs/upstream/laya-temperature-range-mismatch.md`, not yet filed). The `laya` skill now says what to check after
36
+ every training run.
37
+
38
+ ## 2. The scikit-learn floor: done, and wider than the three heads
39
+
40
+ The engine now requires `scikit-learn>=1.9.1`. Eight shipped heads were pickled with 1.9.1, not three: the three
41
+ clause-function heads and five property-dimension heads (`cap_basis`, `carve_out`, `covered_parties`, `mutuality`,
42
+ `nonsolicit_target`). `tests/models/test_classifier_heads_load_clean.py` now loads every head inside the shipped
43
+ model directories with the version warning as an error, so a future skew fails the engine's suite. This ships in the
44
+ next engine release; RuleWright's own `>=1.9.1` already matches.
@@ -130,7 +130,9 @@ are re-made after every engine upgrade.
130
130
  ## Engine documentation (not shipped in the wheel — read in the engine repo / on GitHub)
131
131
 
132
132
  - **Concepts** + **Architecture** — the mental model and the engine/product boundary.
133
- - **Installation** + **Configuration** + **Quickstart** — `uv add`, ArcadeDB, the model provider, `EngineConfig`.
133
+ - **Installation** + **Configuration** + **Quickstart** — `uv add`, ArcadeDB, the model provider, `EngineConfig`;
134
+ Configuration's "A self-hosted model server" deploys your own Qwen server (`adeploy_model_server`) and uses its
135
+ model id like any model.
134
136
  - **Workspaces** (`docs/workspaces.md`) — one corpus and one `EngineConfig` per tenant; what applies per
135
137
  workspace, per call and per process; document metadata; how a config change takes effect.
136
138
  - **Domain adaptation** (`docs/domain-adaptation/`) — the build sequence + companions (ontology, KG, ER,
@@ -114,6 +114,8 @@ code-review-and-quality, using-agent-skills · plus **Graphify** (builds/queries
114
114
  your own libs against `project`.
115
115
  - The reference pack (contract/compliance) is the engine's EXAMPLE, not your domain — author your
116
116
  own .ttl pack + capabilities.
117
+ - Self-hosted model: deploy it with adeploy_model_server (the locked qwen-vllm-modal setup) and put
118
+ server.model_id in EngineConfig.models; never hand-edit VLLM_BASE_URL for it.
117
119
  - Workspaces: one corpus + one EngineConfig + one cache_dir per tenant; register capabilities once
118
120
  per process; the engine's docs/workspaces.md says what is per workspace, per call, per process.
119
121
  - Per task: ground, define the contract, failing test (TDD), implement to green, verify, short ADR
@@ -0,0 +1,49 @@
1
+ # DRAFT, not filed: Laya issue on the temperature range mismatch
2
+
3
+ A draft issue for the Laya repository (https://github.com/NandhaKishorM/laya). Not filed; filing it is a separate,
4
+ explicit step. It names no customer, product or dataset beyond what is public. Background: ADR-0129.
5
+
6
+ ---
7
+
8
+ **Title:** `finetune_single_device.py` fits temperatures in [0.1, 10] but the runtime only serves [0.5, 5]
9
+
10
+ **Summary.** The research fine-tuning script fits each question type's temperature by NLL and clips it to
11
+ [0.1, 10]. The runtime accepts [0.5, 5] (`laya/common.py`, `TEMP_MIN = 0.5`, `TEMP_MAX = 5.0`) and clamps anything
12
+ outside, with a load-time `RuntimeWarning` ("this checkpoint ships invalid temperatures or values outside [0.5, 5]
13
+ ... Treat confidence from the affected entries as uncalibrated"). So a checkpoint produced by the documented
14
+ training path can load with a temperature the runtime will not serve.
15
+
16
+ **Where.**
17
+
18
+ - Training: `research/scripts/finetune_single_device.py`, line 154 (at the 0.3.22 commit, `6d942c9`):
19
+ `return float(torch.clamp(log_t.exp(), 0.1, 10.0).item())`
20
+ - Runtime: `laya/common.py`, `TEMP_MIN = 0.5`, `TEMP_MAX = 5.0`, applied by `clamp_temperature` when an `Agent` loads
21
+ `rl_agent_config.json`. The runtime's own calibrator (`laya.calibrate.fit_one_temperature`) already clamps to the
22
+ runtime range, so only the research script disagrees.
23
+
24
+ **What we saw.** 15 checkpoints fine-tuned from the English ModernBERT-large base with this script (laya 0.3.22,
25
+ single device). 9 of 15 have a `choice` temperature (`temperature[0]`) above 5: 10.0, 9.998, 10.0, 7.280, 7.129,
26
+ 6.402, 6.202, 6.109, 5.637. The three at or near 10.0 sit on the script's clip, so their unconstrained fit was
27
+ higher still. The other six are within range.
28
+
29
+ **Effect.** For `choice` questions the clamp leaves the option ranking unchanged (one scale per question), so
30
+ argmax and top-k are stable: across 5,400 paired predictions (served 5.0 against the shipped value) no abstain
31
+ decision changed and every top-k difference was a tie between options equal at 4 decimals. The probabilities do
32
+ change, by up to 0.22 here, and in the direction of overconfidence (a sharper distribution than the fit chose).
33
+ Anyone gating on `probabilities` or `answer_confidence` for these checkpoints is gating on uncalibrated values,
34
+ and the only signal is a load-time warning.
35
+
36
+ **Suggested fixes (any one).**
37
+
38
+ 1. Clip the research script's fit to the runtime range (`TEMP_MIN`, `TEMP_MAX` from `laya.common`), or reuse
39
+ `laya.calibrate.fit_one_temperature`, so a trained checkpoint is always servable as fitted.
40
+ 2. If temperatures above 5 are legitimate for small fine-tunes (the fit says the model is overconfident), widen the
41
+ runtime range to match the training clip, so the shipped value is served and the warning is not raised for a
42
+ valid fit.
43
+ 3. At minimum, have the training script warn (or record `"temperature_bound_limited": true` in
44
+ `rl_agent_config.json`) when the fit lands outside the runtime range, so the mismatch is caught at training time
45
+ rather than at load.
46
+
47
+ **Workaround we use.** We rank by the answer and do not gate on its probability, and we document that these
48
+ checkpoints' probabilities are uncalibrated. A refit with the runtime calibrator (`records_from_labeled` +
49
+ `fit_temperature_map`, saved with `Agent.save_calibration`) would give in-range values.
@@ -21,7 +21,7 @@ crosses corpora: every read and write goes through the handle's store.
21
21
  | scope | what | how you set it |
22
22
  |---|---|---|
23
23
  | **per workspace** | the corpus and everything stored in it, including document metadata | `open_workspace(config, corpus=...)`; `IngestSource(metadata=...)` |
24
- | per workspace | the model for each role (`ModelRole`) | `EngineConfig.models`: ahead of `RAG_MODEL_<ROLE>` / `RAG_MODEL_ALL` for every engine call that takes the workspace (`aingest`, the invokers and the MCP tools on them, `agenerate_answer`, `ajudge_spans`) |
24
+ | per workspace | the model for each role (`ModelRole`), including a self-hosted server's `model_id` ([A self-hosted model server](configuration.md#a-self-hosted-model-server-qwen-on-modal)) | `EngineConfig.models`: ahead of `RAG_MODEL_<ROLE>` / `RAG_MODEL_ALL` for every engine call that takes the workspace (`aingest`, the invokers and the MCP tools on them, `agenerate_answer`, `ajudge_spans`) |
25
25
  | per workspace | the embedding profile, the ingestion tuning, each pack's options | `EngineConfig.embeddings`, `EngineConfig.options` |
26
26
  | **per call** | the caches (parse, chunk, decisions) | the `cache_dir` you pass to `aingest` / `evaluate_ingestion` |
27
27
  | per call | usage metering and trace grouping | `measure_usage()`, `traced_run(...)` around the call |