rag-wright 0.5.1__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (979) hide show
  1. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/qwen-vllm-modal/SKILL.md +27 -11
  2. rag_wright-0.7.0/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +164 -0
  3. rag_wright-0.7.0/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +58 -0
  4. {rag_wright-0.5.1/src/rag_wright/.agents → rag_wright-0.7.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +5 -1
  5. rag_wright-0.7.0/.release-please-manifest.json +3 -0
  6. {rag_wright-0.5.1 → rag_wright-0.7.0}/CHANGELOG.md +19 -0
  7. {rag_wright-0.5.1 → rag_wright-0.7.0}/CLAUDE.md +2 -2
  8. {rag_wright-0.5.1 → rag_wright-0.7.0}/PKG-INFO +1 -1
  9. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0109-vllm-cold-start-reduction.md +39 -0
  10. rag_wright-0.7.0/docs/adr/0131-model-server-hardening-after-rulewright-review.md +34 -0
  11. rag_wright-0.7.0/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +45 -0
  12. rag_wright-0.7.0/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +40 -0
  13. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/README.md +6 -3
  14. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/api/README.md +19 -3
  15. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/api/pack_sdk.md +4 -2
  16. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/configuration.md +56 -13
  17. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/public-surface/plan.md +3 -1
  18. rag_wright-0.7.0/docs/specs/public-surface/rulewright-migration-0.6.0.md +43 -0
  19. rag_wright-0.7.0/docs/specs/public-surface/rulewright-migration-0.7.0.md +46 -0
  20. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/contractnli_judge.py +17 -11
  21. {rag_wright-0.5.1 → rag_wright-0.7.0}/examples/model_server.py +19 -9
  22. {rag_wright-0.5.1 → rag_wright-0.7.0}/pyproject.toml +1 -1
  23. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/compliance_engine_smoke.py +1 -1
  24. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/eval_compliance_gold.py +1 -1
  25. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/granite_chunker_assess.py +1 -1
  26. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/measure_generation_robustness.py +1 -1
  27. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_gemma4_vllm.py +4 -2
  28. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_gemma4_vllm_snapshot.py +3 -1
  29. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_granite_vllm_server.py +4 -2
  30. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_qwen3_27b_bench.py +3 -1
  31. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_qwen3_27b_snapshot.py +3 -1
  32. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_stack_a100.py +4 -2
  33. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/phase_a_leg_validate.py +1 -1
  34. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/semantic_judge_live_validate.py +1 -1
  35. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/semantic_judge_probe.py +1 -1
  36. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/stack_correctness_validate.py +1 -1
  37. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/vllm_extraction_ab.py +1 -1
  38. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/vllm_kg_query_validate.py +1 -1
  39. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/vllm_raw_diagnostic.py +1 -1
  40. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +27 -11
  41. rag_wright-0.7.0/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +164 -0
  42. rag_wright-0.7.0/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +58 -0
  43. {rag_wright-0.5.1/.claude → rag_wright-0.7.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +5 -1
  44. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/__init__.py +5 -0
  45. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/builder.py +23 -0
  46. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/model_servers.py +84 -8
  47. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/profiles.py +14 -3
  48. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/seam.py +75 -18
  49. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +1 -1
  50. {rag_wright-0.5.1 → rag_wright-0.7.0}/tasks.md +7 -3
  51. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/eval/test_contractnli_judge.py +11 -0
  52. rag_wright-0.7.0/tests/ingestion/test_concurrency_ceiling.py +59 -0
  53. rag_wright-0.7.0/tests/models/test_model_servers.py +343 -0
  54. rag_wright-0.7.0/tests/models/test_seam_deadline_and_cap.py +131 -0
  55. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_serving_seam.py +23 -2
  56. {rag_wright-0.5.1 → rag_wright-0.7.0}/uv.lock +1 -1
  57. rag_wright-0.5.1/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -96
  58. rag_wright-0.5.1/.release-please-manifest.json +0 -3
  59. rag_wright-0.5.1/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -96
  60. rag_wright-0.5.1/tests/models/test_model_servers.py +0 -149
  61. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/settings.json +0 -0
  62. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  63. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -0
  64. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  65. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/creating-evals/SKILL.md +0 -0
  66. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/laya/SKILL.md +0 -0
  67. {rag_wright-0.5.1 → rag_wright-0.7.0}/.claude/skills/setfit/SKILL.md +0 -0
  68. {rag_wright-0.5.1 → rag_wright-0.7.0}/.env.example +0 -0
  69. {rag_wright-0.5.1 → rag_wright-0.7.0}/.github/workflows/publish.yml +0 -0
  70. {rag_wright-0.5.1 → rag_wright-0.7.0}/.github/workflows/release-please.yml +0 -0
  71. {rag_wright-0.5.1 → rag_wright-0.7.0}/.gitignore +0 -0
  72. {rag_wright-0.5.1 → rag_wright-0.7.0}/LICENSE +0 -0
  73. {rag_wright-0.5.1 → rag_wright-0.7.0}/README.md +0 -0
  74. {rag_wright-0.5.1 → rag_wright-0.7.0}/SPEC.md +0 -0
  75. {rag_wright-0.5.1 → rag_wright-0.7.0}/conftest.py +0 -0
  76. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  77. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/ArcadeDB_Local.md +0 -0
  78. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/OBSERVABILITY.md +0 -0
  79. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  80. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  81. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  82. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  83. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0005-relational-golden-set.md +0 -0
  84. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0006-model-profile.md +0 -0
  85. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  86. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  87. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  88. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  89. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  90. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  91. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  92. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  93. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  94. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  95. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  96. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  97. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  98. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  99. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  100. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  101. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  102. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  103. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  104. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  105. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  106. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  107. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  108. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  109. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  110. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  111. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  112. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  113. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  114. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  115. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  116. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  117. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  118. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  119. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  120. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  121. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  122. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  123. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  124. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  125. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  126. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  127. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  128. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  129. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  130. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  131. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  132. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  133. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  134. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  135. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  136. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  137. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  138. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  139. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  140. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  141. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  142. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  143. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  144. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  145. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  146. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  147. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  148. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  149. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  150. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  151. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  152. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  153. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  154. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  155. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  156. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  157. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  158. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  159. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  160. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  161. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  162. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  163. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  164. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  165. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  166. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  167. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  168. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  169. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  170. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  171. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  172. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  173. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0095-span-page-provenance.md +0 -0
  174. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  175. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  176. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  177. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  178. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  179. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  180. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  181. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  182. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  183. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  184. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  185. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  186. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  187. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  188. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  189. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  190. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  191. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  192. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  193. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  194. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  195. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  196. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  197. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  198. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  199. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  200. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  201. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  202. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  203. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  204. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  205. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  206. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  207. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  208. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  209. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/architecture.md +0 -0
  210. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/README.md +0 -0
  211. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  212. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  213. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  214. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  215. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  216. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  217. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  218. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  219. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  220. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  221. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  222. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  223. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  224. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  225. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  226. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  227. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  228. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  229. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  230. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  231. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  232. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  233. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  234. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  235. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  236. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  237. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  238. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  239. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  240. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  241. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  242. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  243. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  244. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  245. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  246. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  247. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  248. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  249. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  250. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  251. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  252. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  253. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  254. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  255. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  256. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  257. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  258. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  259. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  260. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  261. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  262. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  263. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  264. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  265. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  266. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  267. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  268. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  269. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  270. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  271. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  272. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/misc/.gitkeep +0 -0
  273. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  274. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/plans/async-migration.md +0 -0
  275. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/plans/demo_plan.md +0 -0
  276. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  277. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  278. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  279. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  280. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  281. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  282. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/concepts.md +0 -0
  283. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/contract_pipeline_explainer.md +0 -0
  284. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/corpus_ingest_recipe.md +0 -0
  285. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/README.md +0 -0
  286. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
  287. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
  288. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  289. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  290. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/kg-construction.md +0 -0
  291. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  292. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/classifier_model_ab.md +0 -0
  293. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/compliance_demo.md +0 -0
  294. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/compliance_gate_cc7.md +0 -0
  295. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  296. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  297. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/dg_model_ab.md +0 -0
  298. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/function_gate_recall.md +0 -0
  299. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  300. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  301. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/ocr_benchmark.md +0 -0
  302. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/prod1_readiness.md +0 -0
  303. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/prod2_readiness.md +0 -0
  304. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/query_side_model_ab.md +0 -0
  305. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  306. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/silver_provider_routing.md +0 -0
  307. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  308. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/installation.md +0 -0
  309. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/playbook.md +0 -0
  310. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/product/capability_profiles.md +0 -0
  311. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/product/contracts_product_roadmap.md +0 -0
  312. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/product/engine-api-migration-handoff.md +0 -0
  313. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/product/engine_async_api.md +0 -0
  314. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/product/new-domain-build-sequence.md +0 -0
  315. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/product/seam-adaptation-guide.md +0 -0
  316. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  317. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  318. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  319. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/proposals/ontology-induction.md +0 -0
  320. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/quickstart.md +0 -0
  321. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/reference-pack.md +0 -0
  322. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/releasing.md +0 -0
  323. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/engine-platform/SPEC.md +0 -0
  324. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/engine-platform/TASKS.md +0 -0
  325. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/engine-prep/plan.md +0 -0
  326. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  327. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  328. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  329. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  330. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  331. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  332. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  333. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  334. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/templates/product-starter/CLAUDE.md.template +0 -0
  335. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/templates/product-starter/README.md +0 -0
  336. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/templates/product-starter/dependabot.yml +0 -0
  337. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/templates/product-starter/playbook.md.template +0 -0
  338. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  339. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  340. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  341. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  342. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  343. {rag_wright-0.5.1 → rag_wright-0.7.0}/docs/workspaces.md +0 -0
  344. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/__init__.py +0 -0
  345. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/acord.py +0 -0
  346. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/acord_retrieval.py +0 -0
  347. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/boundary_residue_gold.py +0 -0
  348. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/build_golden.py +0 -0
  349. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  350. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  351. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  352. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  353. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/condensed_pipeline.py +0 -0
  354. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/contract_parity_live.py +0 -0
  355. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/cuad_highlight.py +0 -0
  356. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/embedded_eval.py +0 -0
  357. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/full_pipeline_rerank.py +0 -0
  358. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/function_ceiling.py +0 -0
  359. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/function_property_rerank.py +0 -0
  360. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/function_rerank.py +0 -0
  361. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/gate1_chunker_ab.py +0 -0
  362. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/gate2_hybrid_rerank.py +0 -0
  363. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/golden/relational/set.json +0 -0
  364. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/golden.py +0 -0
  365. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/ground_discriminator_rerank.py +0 -0
  366. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/harness.py +0 -0
  367. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/ingestion_live_smoke.py +0 -0
  368. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/kg_primary.py +0 -0
  369. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/kg_property_rerank.py +0 -0
  370. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/listwise_rerank.py +0 -0
  371. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/multihop.py +0 -0
  372. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/nl_to_type.py +0 -0
  373. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/relational_eval.py +0 -0
  374. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/residual_decision_gold.py +0 -0
  375. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/segmenter_eval.py +0 -0
  376. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/semantic_judge_gold.py +0 -0
  377. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/test_acord.py +0 -0
  378. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/test_acord_retrieval.py +0 -0
  379. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/test_harness.py +0 -0
  380. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/test_multihop_set.py +0 -0
  381. {rag_wright-0.5.1 → rag_wright-0.7.0}/eval/unit_grouper_eval.py +0 -0
  382. {rag_wright-0.5.1 → rag_wright-0.7.0}/examples/quickstart.py +0 -0
  383. {rag_wright-0.5.1 → rag_wright-0.7.0}/plan.md +0 -0
  384. {rag_wright-0.5.1 → rag_wright-0.7.0}/release-please-config.json +0 -0
  385. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ab_model_overlap.py +0 -0
  386. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acord_unify.py +0 -0
  387. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acquire_acord.py +0 -0
  388. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acquire_cuad.py +0 -0
  389. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acquire_ecfr.py +0 -0
  390. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acquire_edgar.py +0 -0
  391. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acquire_ftc_255.py +0 -0
  392. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/acquire_prod1_corpus.py +0 -0
  393. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/audit_reclass_flips.py +0 -0
  394. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/author_leg_a_silver_key.py +0 -0
  395. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/backfill_affiliations.py +0 -0
  396. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/backfill_clause_span_id.py +0 -0
  397. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  398. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/backup_kg_to_gcs.sh +0 -0
  399. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/bootstrap_template_capture.py +0 -0
  400. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/bootstrap_typed_edges.py +0 -0
  401. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/build_api_docs.py +0 -0
  402. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/build_api_docs.sh +0 -0
  403. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/build_cuad_clause_cache.py +0 -0
  404. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/build_function_routing_map.py +0 -0
  405. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_assemble_v2.py +0 -0
  406. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_assemble_v3.py +0 -0
  407. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  408. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_generate_hard_positives.py +0 -0
  409. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_generate_training.py +0 -0
  410. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_hybrid.py +0 -0
  411. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_hybrid2.py +0 -0
  412. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_jev_actor.py +0 -0
  413. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_jev_claimtypes.py +0 -0
  414. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_jev_operative.py +0 -0
  415. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_label_spans.py +0 -0
  416. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_laya_prep.py +0 -0
  417. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_laya_train.py +0 -0
  418. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_prep_operative.py +0 -0
  419. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_relabel_rubric.py +0 -0
  420. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_relabel_rubric2.py +0 -0
  421. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/cic1_train_operative.py +0 -0
  422. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/compare_extraction_models.py +0 -0
  423. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  424. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/compliance_policy_demo.py +0 -0
  425. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/curate_taxonomy_gaps.py +0 -0
  426. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/dg_model_ab.py +0 -0
  427. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  428. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  429. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  430. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_legs.py +0 -0
  431. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_pool.py +0 -0
  432. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_relstructure.py +0 -0
  433. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/diagnose_acord_retrieval.py +0 -0
  434. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/eval_all.py +0 -0
  435. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/eval_ce.py +0 -0
  436. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/eval_listwise_b.py +0 -0
  437. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/export_ce_dataset.py +0 -0
  438. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/extract_features.py +0 -0
  439. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/listwise_variants.py +0 -0
  440. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/relational_features.py +0 -0
  441. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/train_ce.py +0 -0
  442. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/distill/train_modal.py +0 -0
  443. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/enrich_edgar_candidates.py +0 -0
  444. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/eval_chunking_ab.py +0 -0
  445. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  446. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/extract_arcadedb_docs.py +0 -0
  447. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/fetch_reference_models.py +0 -0
  448. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/generate_contract_python.py +0 -0
  449. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/git_post_commit_graphify.sh +0 -0
  450. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/graph_status.sh +0 -0
  451. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_acord.py +0 -0
  452. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  453. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  454. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_compliance_prod2.py +0 -0
  455. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_cuad.py +0 -0
  456. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_cuad_full.py +0 -0
  457. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_ftc_compliance.py +0 -0
  458. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_prod1.py +0 -0
  459. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_prod1_async.py +0 -0
  460. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ingest_smoke.py +0 -0
  461. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/install_git_hooks.sh +0 -0
  462. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/label_new_functions.py +0 -0
  463. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/legb_function_gate_recall.py +0 -0
  464. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/make_compliance_fixtures.py +0 -0
  465. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/make_compliance_gold.py +0 -0
  466. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  467. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  468. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  469. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/measure_silver.py +0 -0
  470. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/merge_docs_into_framework.py +0 -0
  471. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  472. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  473. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  474. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/migrate_span_fields.py +0 -0
  475. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/mine_scarce_functions.py +0 -0
  476. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_arcadedb.py +0 -0
  477. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_backfill.py +0 -0
  478. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_exception_linking.py +0 -0
  479. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_granite_server.py +0 -0
  480. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_granite_throughput.py +0 -0
  481. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_query_app.py +0 -0
  482. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  483. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ocr_benchmark.py +0 -0
  484. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ocr_preprocess.py +0 -0
  485. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/ontology_dimension_check.py +0 -0
  486. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/populate_clause_kg.py +0 -0
  487. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/populate_entity_graph.py +0 -0
  488. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/populate_entity_graph_extracted.py +0 -0
  489. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/populate_property_store.py +0 -0
  490. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/prep_relational_verification.py +0 -0
  491. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/publish_manifests.py +0 -0
  492. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/reclassify_kg.py +0 -0
  493. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/refresh_framework_graph.sh +0 -0
  494. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/revert_reclass_flips.py +0 -0
  495. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/run_acord_retrieval.py +0 -0
  496. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/run_clause_exception_linking.py +0 -0
  497. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/snapshot_leg_a_eval.py +0 -0
  498. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/table_retrieval_smoke.py +0 -0
  499. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/train_function_classifier.py +0 -0
  500. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/train_legalbert_function.py +0 -0
  501. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/train_legalbert_modal.py +0 -0
  502. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/typed_rerank_validate.py +0 -0
  503. {rag_wright-0.5.1 → rag_wright-0.7.0}/scripts/verify_wheel_install.sh +0 -0
  504. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  505. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +0 -0
  506. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  507. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
  508. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  509. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  510. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/__init__.py +0 -0
  511. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/answers.py +0 -0
  512. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/config.py +0 -0
  513. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/discover.py +0 -0
  514. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/documents.py +0 -0
  515. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/ids.py +0 -0
  516. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/invoke.py +0 -0
  517. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/kg.py +0 -0
  518. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/mcp.py +0 -0
  519. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/tracing.py +0 -0
  520. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/usage.py +0 -0
  521. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/api/workspace.py +0 -0
  522. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/__init__.py +0 -0
  523. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
  524. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/ard.py +0 -0
  525. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  526. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  527. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  528. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/document_parse.py +0 -0
  529. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  530. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/embedding.py +0 -0
  531. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  532. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  533. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/fusion.py +0 -0
  534. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  535. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  536. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  537. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/invoke.py +0 -0
  538. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  539. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/manifests.py +0 -0
  540. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/parsing.py +0 -0
  541. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/registry.py +0 -0
  542. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  543. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/reranking.py +0 -0
  544. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  545. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  546. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  547. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  548. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  549. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  550. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  551. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/__init__.py +0 -0
  552. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/chunk.py +0 -0
  553. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/extraction.py +0 -0
  554. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/graph.py +0 -0
  555. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/identifiers.py +0 -0
  556. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/ingestion.py +0 -0
  557. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/provenance.py +0 -0
  558. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/contracts/span.py +0 -0
  559. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/corpus/__init__.py +0 -0
  560. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  561. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/corpus/document_parser.py +0 -0
  562. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/corpus/embedded.py +0 -0
  563. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/corpus/http.py +0 -0
  564. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/__init__.py +0 -0
  565. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/evaluate.py +0 -0
  566. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/group.py +0 -0
  567. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/layout.py +0 -0
  568. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/segment.py +0 -0
  569. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ingestion/tables.py +0 -0
  570. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/__init__.py +0 -0
  571. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/tag_structured.py +0 -0
  572. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/tracing.py +0 -0
  573. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/usage.py +0 -0
  574. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/models/weights.py +0 -0
  575. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ontology/__init__.py +0 -0
  576. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  577. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/ontology/registry.py +0 -0
  578. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/pack_sdk/__init__.py +0 -0
  579. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/__init__.py +0 -0
  580. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  581. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  582. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  583. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  584. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  585. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  586. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  587. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  588. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  589. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  590. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  591. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  592. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  593. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  594. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  595. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  596. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  597. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  598. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  599. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  600. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  601. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  602. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  603. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  604. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  605. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  606. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  607. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  608. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  609. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  610. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  611. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  612. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  613. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  614. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  615. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  616. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  617. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  618. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  619. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  620. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  621. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  622. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  623. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  624. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  625. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  626. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  627. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  628. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  629. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  630. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  631. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  632. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  633. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  634. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  635. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  636. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  637. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  638. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  639. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  640. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  641. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/options.py +0 -0
  642. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  643. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  644. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  645. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  646. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  647. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  648. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  649. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  650. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  651. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  652. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  653. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  654. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  655. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  656. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  657. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  658. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  659. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  660. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  661. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  662. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  663. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  664. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  665. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  666. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  667. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  668. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  669. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  670. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  671. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  672. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  673. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  674. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  675. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  676. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  677. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  678. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  679. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  680. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  681. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  682. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  683. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  684. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  685. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  686. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  687. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  688. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  689. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  690. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  691. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/packs/reference_seam.py +0 -0
  692. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/py.typed +0 -0
  693. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/__init__.py +0 -0
  694. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
  695. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  696. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  697. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  698. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/rlm/agent.py +0 -0
  699. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  700. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  701. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  702. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/spans/__init__.py +0 -0
  703. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/spans/page_map.py +0 -0
  704. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/store/__init__.py +0 -0
  705. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/store/arcadedb.py +0 -0
  706. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/store/chunk_text.py +0 -0
  707. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/store/seam.py +0 -0
  708. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  709. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  710. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/subgraphs/observability.py +0 -0
  711. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  712. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  713. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/util/__init__.py +0 -0
  714. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/util/concurrent.py +0 -0
  715. {rag_wright-0.5.1 → rag_wright-0.7.0}/src/rag_wright/util/spacy_model.py +0 -0
  716. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/__init__.py +0 -0
  717. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/__init__.py +0 -0
  718. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_answers_exports.py +0 -0
  719. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_bytes_ingest.py +0 -0
  720. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_capability_reexports.py +0 -0
  721. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  722. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_discover.py +0 -0
  723. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_documents.py +0 -0
  724. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_e2e.py +0 -0
  725. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_invoke.py +0 -0
  726. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_kg.py +0 -0
  727. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_mcp.py +0 -0
  728. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_metering_tracing_exports.py +0 -0
  729. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_model_role_export.py +0 -0
  730. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_open_workspace_reconfig.py +0 -0
  731. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_options.py +0 -0
  732. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_pack_sdk.py +0 -0
  733. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_pack_store.py +0 -0
  734. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_usage.py +0 -0
  735. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_workspace.py +0 -0
  736. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/api/test_workspace_models.py +0 -0
  737. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  738. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/test_api_docs_current.py +0 -0
  739. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/test_doc_references.py +0 -0
  740. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  741. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/test_import_contracts.py +0 -0
  742. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  743. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/arch/test_shipped_skills.py +0 -0
  744. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/async_helpers.py +0 -0
  745. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/__init__.py +0 -0
  746. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  747. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_answer_generator.py +0 -0
  748. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  749. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  750. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_authoring_contract.py +0 -0
  751. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_chunk_read.py +0 -0
  752. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_chunk_write.py +0 -0
  753. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  754. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_claim_extraction.py +0 -0
  755. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  756. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  757. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_compliance_store.py +0 -0
  758. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  759. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  760. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  761. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  762. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_dg_adapter.py +0 -0
  763. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_dg_async.py +0 -0
  764. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_dg_extraction.py +0 -0
  765. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  766. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_dg_private.py +0 -0
  767. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_disambiguation.py +0 -0
  768. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_document_scope.py +0 -0
  769. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_embedding.py +0 -0
  770. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  771. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_entity_resolution.py +0 -0
  772. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  773. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_fusion.py +0 -0
  774. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_graph_extraction.py +0 -0
  775. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_graph_query.py +0 -0
  776. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_graph_storage.py +0 -0
  777. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_highlight_serve.py +0 -0
  778. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_hybrid_search.py +0 -0
  779. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_jev_decision.py +0 -0
  780. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_manifest_validation.py +0 -0
  781. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_manifests.py +0 -0
  782. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_parsing.py +0 -0
  783. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_parties_extraction.py +0 -0
  784. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  785. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  786. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_query_understanding.py +0 -0
  787. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_registry.py +0 -0
  788. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_remote_encoders.py +0 -0
  789. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_repair_partition.py +0 -0
  790. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  791. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_reranking.py +0 -0
  792. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_retrieval_core.py +0 -0
  793. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  794. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  795. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_rlm_method.py +0 -0
  796. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  797. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_runtime_registry.py +0 -0
  798. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_scan_quality.py +0 -0
  799. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  800. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  801. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  802. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  803. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  804. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  805. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/compliance_fakes.py +0 -0
  806. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/conftest.py +0 -0
  807. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/__init__.py +0 -0
  808. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  809. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_chunk_record.py +0 -0
  810. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_compliance.py +0 -0
  811. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  812. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_extraction.py +0 -0
  813. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_function.py +0 -0
  814. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_function_routing.py +0 -0
  815. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_identifiers.py +0 -0
  816. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  817. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_jurisdiction.py +0 -0
  818. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_ontology.py +0 -0
  819. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_property.py +0 -0
  820. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_provenance.py +0 -0
  821. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/contracts/test_value_match.py +0 -0
  822. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/__init__.py +0 -0
  823. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  824. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_canonicalize.py +0 -0
  825. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_cuad.py +0 -0
  826. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  827. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_document_parser.py +0 -0
  828. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_edgar.py +0 -0
  829. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_embedded.py +0 -0
  830. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  831. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_http.py +0 -0
  832. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_parse_wire2.py +0 -0
  833. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/corpus/test_selection.py +0 -0
  834. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  835. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/eval/test_kg_property_rerank.py +0 -0
  836. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  837. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/eval/test_relational_eval.py +0 -0
  838. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  839. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  840. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  841. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  842. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  843. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  844. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/foundation/__init__.py +0 -0
  845. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  846. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/foundation/test_model_seam_structured.py +0 -0
  847. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/__init__.py +0 -0
  848. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_builder.py +0 -0
  849. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  850. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_document_metadata.py +0 -0
  851. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_evaluate.py +0 -0
  852. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_evaluate_labels.py +0 -0
  853. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  854. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  855. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_table_rows.py +0 -0
  856. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_tuning.py +0 -0
  857. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_unit_grouper.py +0 -0
  858. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ingestion/test_unit_representative.py +0 -0
  859. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/journey/incidents_domain.py +0 -0
  860. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/journey/incidents_pack.ttl +0 -0
  861. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/journey/test_incidents_journey.py +0 -0
  862. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/journey/test_pack_schema.py +0 -0
  863. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/mcp/__init__.py +0 -0
  864. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/mcp/test_compliance_server.py +0 -0
  865. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  866. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  867. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/mcp/test_relational_qa_server.py +0 -0
  868. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  869. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/__init__.py +0 -0
  870. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_async_infra.py +0 -0
  871. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
  872. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_models_dir.py +0 -0
  873. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_no_gemma_default.py +0 -0
  874. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_profile_routing.py +0 -0
  875. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_profile_seam.py +0 -0
  876. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_seam_async.py +0 -0
  877. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_seam_retry.py +0 -0
  878. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_seam_stream.py +0 -0
  879. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_serving_wiring.py +0 -0
  880. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_tag_structured.py +0 -0
  881. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_tag_structured_async.py +0 -0
  882. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_tracing.py +0 -0
  883. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/models/test_usage.py +0 -0
  884. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/__init__.py +0 -0
  885. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_clause_template.py +0 -0
  886. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  887. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_derivation.py +0 -0
  888. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  889. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  890. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  891. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  892. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  893. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/reference/test_compliance_reference.py +0 -0
  894. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/reference/test_contract_seam.py +0 -0
  895. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  896. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  897. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  898. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/skills/__init__.py +0 -0
  899. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  900. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_boundary.py +0 -0
  901. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  902. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  903. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_clause_function_classifier.py +0 -0
  904. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  905. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  906. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  907. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_dim_classifier.py +0 -0
  908. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_dim_fleet_live.py +0 -0
  909. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_function_classifier.py +0 -0
  910. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_hybrid_classifier.py +0 -0
  911. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  912. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_legalbert_classifier.py +0 -0
  913. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_model_capabilities.py +0 -0
  914. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_new_function_labels.py +0 -0
  915. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_page_map.py +0 -0
  916. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_property_extractor.py +0 -0
  917. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_property_grounding.py +0 -0
  918. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_reclassify.py +0 -0
  919. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_residual_decision.py +0 -0
  920. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_scarce_function_labels.py +0 -0
  921. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_segment.py +0 -0
  922. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_segmentation_vocab.py +0 -0
  923. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_semantic_judge.py +0 -0
  924. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  925. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_setfit_probabilities.py +0 -0
  926. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_span_offsets.py +0 -0
  927. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_stage_labels_0005.py +0 -0
  928. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_symbolic_validation.py +0 -0
  929. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  930. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/__init__.py +0 -0
  931. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_affiliation_backfill.py +0 -0
  932. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  933. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_arcadedb_contract.py +0 -0
  934. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_arcadedb_property.py +0 -0
  935. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  936. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_arcadedb_schema.py +0 -0
  937. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_arcadedb_span.py +0 -0
  938. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_chunk_text.py +0 -0
  939. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_concurrent_writes.py +0 -0
  940. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_contract_kg_store_live.py +0 -0
  941. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_document_metadata_live.py +0 -0
  942. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_document_scope.py +0 -0
  943. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_engine_domain_neutral.py +0 -0
  944. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_entities_by_name.py +0 -0
  945. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_kg_edges.py +0 -0
  946. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_kg_mutations.py +0 -0
  947. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_kg_read.py +0 -0
  948. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_kg_write.py +0 -0
  949. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_neutral_schema.py +0 -0
  950. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/store/test_write_graph_idempotent.py +0 -0
  951. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/__init__.py +0 -0
  952. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  953. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  954. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_clause_results.py +0 -0
  955. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_compliance_check.py +0 -0
  956. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  957. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  958. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  959. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  960. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  961. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  962. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  963. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  964. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_observability.py +0 -0
  965. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  966. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  967. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_relational_qa.py +0 -0
  968. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  969. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_scaffold.py +0 -0
  970. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  971. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  972. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  973. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/test_backfill_clause_span_id.py +0 -0
  974. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/test_dg_model_ab.py +0 -0
  975. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/test_populate_clause_kg.py +0 -0
  976. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/test_populate_entity_graph.py +0 -0
  977. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/util/__init__.py +0 -0
  978. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/util/test_concurrent.py +0 -0
  979. {rag_wright-0.5.1 → rag_wright-0.7.0}/tests/util/test_spacy_model.py +0 -0
@@ -18,7 +18,7 @@ This skill is the operational checklist that ties them together.
18
18
 
19
19
  ## The LOCKED production config (ADR-0110) — do not re-litigate
20
20
  **Config B: `Qwen/Qwen3.8-27B-FP8` weights + `--kv-cache-dtype fp8`, on 1× A100-80GB, TP=1, `--max-model-len 16384`, `--gpu-memory-utilization 0.95`.**
21
- - Config B (FP8 weights) is the **locked deploy** — 52.71× concurrency @16K (ADR-0110 rounds it to 53×), ~23% higher throughput, ~27 GB weights;
21
+ - Config B (FP8 weights) is the **locked deploy** — 52.71× concurrency @16K (ADR-0110 rounds it to 53×), ~23% higher throughput, ~31 GB weights (30.9 GB on disk, 28.9 GiB in VRAM);
22
22
  accuracy measured **identical to bf16** on the real compliance workload (no FP8 penalty).
23
23
  - **Config A** (`Qwen/Qwen3.8-27B`, **bf16 weights** + FP8 KV) is the **documented FALLBACK only** — 25.47× concurrency,
24
24
  "zero weight-loss" — use it *only* if a later clean check ever shows an FP8-weight regression. Don't default to A.
@@ -29,8 +29,8 @@ This skill is the operational checklist that ties them together.
29
29
  **From the engine (PS-19): deploy, then use the server like any model.** `ModelServerSpec`'s defaults ARE the
30
30
  locked config below (FP8 weights + FP8 KV, one A100-80GB, TP 1, 16K, 0.95, served `Qwen/Qwen3.8-27B`, hermes +
31
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:
32
+ `adeploy_model_server` runs the deploy below with those settings, waits for `/health` (with progress; a restore from
33
+ the snapshot is seconds, a snapshot-building boot 4-9 min, see Cold start below), and registers a model profile with the server's own endpoint, so no `VLLM_BASE_URL` is needed:
34
34
 
35
35
  ```python
36
36
  from rag_wright.api import EngineConfig, ModelServerSpec, adeploy_model_server, stop_model_server
@@ -48,19 +48,21 @@ different servers (and URLs), for example one per tenant.
48
48
 
49
49
  **The exact working deploy (this succeeded):**
50
50
  ```
51
- MODAL_IMAGE_BUILDER_VERSION=2025.06 \
51
+ VLLM_API_KEY=<a long random string> MODAL_IMAGE_BUILDER_VERSION=2025.06 \
52
52
  APP_NAME=rw-qwen3-modal MODEL=Qwen/Qwen3.8-27B-FP8 KV_CACHE_DTYPE=fp8 \
53
53
  SERVED_NAME=Qwen/Qwen3.8-27B TOOL_PARSER=hermes REASONING_PARSER=qwen3 \
54
54
  GPU=A100-80GB:1 TP=1 MAX_LEN=16384 GPU_UTIL=0.95 MAX_NUM_SEQS=<target> \
55
55
  uv run --no-sync modal deploy scripts/modal_qwen3_vllm_server.py
56
56
  ```
57
57
  (From a product repo, deploy the copy in this skill's directory: `.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py` once the skills are linked.)
58
- Then wire the engine: `.env` `VLLM_BASE_URL=https://<workspace>--rw-qwen3-modal-serve.modal.run/v1`,
59
- `VLLM_API_KEY=rw-vllm-dev-key`; the profile `qwen3.8-27b-modal` routes there. **Stop billing when done:**
58
+ The script refuses to deploy without `VLLM_API_KEY`: Modal's web endpoint is public and unauthenticated, so vLLM's
59
+ `--api-key` is the only gate on a billing A100, and there is no default key. Then wire the engine: `.env`
60
+ `VLLM_BASE_URL=https://<workspace>--rw-qwen3-modal-serve.modal.run/v1` and the same `VLLM_API_KEY`; the profile
61
+ `qwen3.8-27b-modal` routes there (the seam also refuses an unset key). **Stop billing when done:**
60
62
  `uv run --no-sync modal app stop rw-qwen3-modal --yes` (A100 is expensive).
61
63
 
62
64
  **The engine does NOT reach Modal by default.** Every role's default is `_PRODUCT_LLM = "qwen3.8-27b-modal-or"`,
63
- the same model routed through OpenRouter (the Modal cold start is unsolved). To send calls to the Modal server, set
65
+ the same model routed through OpenRouter (a Modal cold start can still take minutes when Modal builds a snapshot). To send calls to the Modal server, set
64
66
  `RAG_MODEL_ALL=qwen3.8-27b-modal` (all roles), a per-role `RAG_MODEL_<ROLE>`, or `EngineConfig.models`. For bulk
65
67
  closed-vocab labeling, the reasoning-off profile `qwen3.8-27b-modal-nothink` exists (opt-in; see the reasoning
66
68
  caveat below). `VISION_OCR` now defaults to the product LLM too, but image inputs through the Modal vLLM server are
@@ -96,17 +98,31 @@ the OFFICIAL prebuilt vLLM image** rather than pip-building vLLM:
96
98
  reasoning calls take ~50–60 s; the seam's default 60 s timeout kills the ones just over the line → **retry pileup →
97
99
  requests pile past `max_inputs` → instant `APIConnectionError` (0.0 s) cascade**. FIX: the seam reads
98
100
  `RAG_STRUCTURED_TIMEOUT_S` (default 60) — raise it (e.g. `150`) for reasoning-ON bulk work. Server logs confirm the
99
- calls actually complete 200 OK (~50 s); it was the client giving up.
101
+ calls actually complete 200 OK (~50 s); it was the client giving up. The total per call (all tries) follows it;
102
+ `RAG_MODEL_DEADLINE_S` overrides that (ADR-0133). Reasoning loops end at the profile's 8,192-token structured cap,
103
+ not at the deadline; keep temperature 0 (Qwen's recommended sampling did not remove them).
100
104
  3. **Pick client concurrency empirically, below the ceiling.** 16 was stable; 20 (== `max-num-seqs`) sat at the exact
101
105
  ceiling and risked queueing. `Running: N, Waiting: 0` + zero cancellations = healthy.
102
106
  4. **Reasoning ON vs OFF for bulk classification:** reasoning-OFF is ~30× faster but **changes the labels**
103
107
  (over-keeps / different distribution) — do NOT swap it in for work that must match the reasoning-teacher's gold
104
108
  (e.g. distillation silver). Keep reasoning ON when fidelity to the gold teacher matters; accept the cost.
109
+ 5. **Never expose vLLM's port directly (PS-20).** Sleep mode needs `VLLM_SERVER_DEV_MODE=1`, which adds
110
+ unauthenticated `/sleep`, `/wake_up` and `/collective_rpc` routes (`--api-key` guards only `/v1`, `/v2`,
111
+ `/inference`, `/cohere`). The script binds vLLM to 127.0.0.1:8001 and serves `rw_gate.py` on the public port,
112
+ forwarding only `/v1/*` and `/health`; keep `rw_gate.py` next to the script.
105
113
 
106
114
  ## Cold start & cost
107
- - Cold start ~440–480 s (CPU-bound engine init + a 51-graph CUDA-graph capture + first-time weight download), NOT
108
- weight I/O — no load trick alone fixes it. GPU-snapshot / sleep-mode is a DEFERRED todo (the one attempt failed
109
- because it was CPU-only; GPU retry not done). Run long deploys detached; poll `/health` for readiness.
115
+ - **The server is a class restored from a Modal GPU memory snapshot (PS-20, ADR-0132).** A boot without a snapshot
116
+ starts vLLM with `--enable-sleep-mode`, warms it, sleeps it at level 1 (weights to host RAM, KV discarded) and
117
+ Modal snapshots the container; a restore only wakes vLLM (~3.5 s) and is ready ~13 s after its container starts.
118
+ Modal builds the first few snapshots after a deploy (4-9 min boots; 3-4 in our runs) and now and then another
119
+ (a new host, a preemption): budget for an occasional slow cold start. Redeploying keeps the snapshots; **`modal app
120
+ stop` discards them**. Snapshots need TP=1 (the script boots without one at TP>1).
121
+ - Without a snapshot a cold start is ~2-4 min on Config B (114-245 s measured): about 30 s of imports in EACH of
122
+ vLLM's two processes (transformers' `importlib.metadata.packages_distributions()` stats every installed file),
123
+ a weight read of 12-154 s from the Volume (9P), then compile-cache load + CUDA-graph capture. Measured and NOT
124
+ worth adopting (ADR-0109 addendum): `--load-format runai_streamer`, precompiled `.pyc`, `HF_HUB_OFFLINE=1` (it
125
+ changes vLLM's compile-cache key every container, so each start recompiles). Poll `/health` for readiness.
110
126
  - **A100 is billed while up — `modal app stop <app> --yes` the moment you're done.** Verify with `modal app list`
111
127
  (state `stopped`, 0 tasks) + endpoint 404.
112
128
  - **Do NOT warm the GPU before the consumer is ready, and do NOT trust auto-scaledown to protect billing** (burned
@@ -0,0 +1,164 @@
1
+ """Qwen3.8-27B as an OpenAI-compatible vLLM web server on Modal A100-80GB. Two uses, one script:
2
+
3
+ (1) QUANTIZATION ACCURACY EVAL (ADR-0110): serve one config under a stable served-name ("qwen3-eval").
4
+ MODEL=Qwen/Qwen3.8-27B KV_CACHE_DTYPE=auto uv run --no-sync modal deploy scripts/modal_qwen3_vllm_server.py
5
+ MODEL=Qwen/Qwen3.8-27B-FP8 KV_CACHE_DTYPE=fp8 uv run --no-sync modal deploy scripts/modal_qwen3_vllm_server.py
6
+
7
+ (2) 0048 part-2 JOINT RUN -- the UNIFIED endpoint both the product's agent-llm (tool-calling) and the engine
8
+ drive: Config B (FP8), ALL capabilities on (tool calls + reasoning + guided decoding), served under the
9
+ name the engine profile `qwen3.8-27b-modal` expects ("Qwen/Qwen3.8-27B"), sized for the measured ~16 peak
10
+ concurrency of unbounded reasoning outputs (2 GPUs to keep decode from saturating).
11
+ APP_NAME=rw-qwen3-modal MODEL=Qwen/Qwen3.8-27B-FP8 KV_CACHE_DTYPE=fp8 \
12
+ SERVED_NAME=Qwen/Qwen3.8-27B TOOL_PARSER=hermes REASONING_PARSER=qwen3 \
13
+ GPU=A100-80GB:2 TP=2 MAX_NUM_SEQS=32 \
14
+ uv run --no-sync modal deploy scripts/modal_qwen3_vllm_server.py
15
+ uv run --no-sync modal app stop <APP_NAME> # tear down (stop billing)
16
+
17
+ URL: https://<workspace>--<APP_NAME>-serve.modal.run (+ /v1 for the OpenAI base). Weights + the serve-path
18
+ torch.compile cache reuse the persistent Volumes (fast warm cold-start where a matching cache exists).
19
+
20
+ Cold start (PS-20, ADR-0132): at TP=1 the server is restored from a Modal GPU memory snapshot. A boot without one
21
+ starts vLLM, warms it, puts it to sleep (weights parked in host RAM) and Modal snapshots the container; a restore
22
+ only wakes vLLM (~13 s from container start). Modal builds the first 2-3 snapshots per GPU type, and now and then
23
+ another, on ordinary boots; stopping the app discards them. vLLM listens on 127.0.0.1 only: sleep mode needs its
24
+ unauthenticated dev routes, so the public port is `rw_gate.py`, which forwards only /v1/* and /health.
25
+ """
26
+
27
+ import os
28
+ import subprocess
29
+ import time
30
+ import urllib.request
31
+ from pathlib import Path
32
+
33
+ import modal
34
+
35
+ MODEL = os.environ.get("MODEL", "Qwen/Qwen3.8-27B") # ...-FP8 for the quantized-weights config
36
+ KV_DTYPE = os.environ.get("KV_CACHE_DTYPE", "auto") # "auto" (bf16 KV, the reference) | "fp8"
37
+ GPU = os.environ.get("GPU", "A100-80GB:1")
38
+ TP = int(os.environ.get("TP", "1"))
39
+ MAX_LEN = int(os.environ.get("MAX_LEN", "16384")) # the real workload's context (9K+ prompts)
40
+ GPU_UTIL = os.environ.get("GPU_UTIL", "0.95")
41
+ MAX_NUM_SEQS = os.environ.get("MAX_NUM_SEQS", "256") # concurrency ceiling; size to the eval's ~16 peak
42
+ SERVED = os.environ.get("SERVED_NAME", "qwen3-eval") # served-model-name clients ask for (profile match)
43
+ TOOL_PARSER = os.environ.get("TOOL_PARSER", "") # "" off | "hermes" -> tool calling (the product agent)
44
+ REASONING_PARSER = os.environ.get("REASONING_PARSER", "") # "" off | "qwen3" -> reasoning coexists with a tool call
45
+ APP_NAME = os.environ.get("APP_NAME", "rw-qwen3-vllm-eval") # distinct app (=distinct URL) per purpose
46
+ API_KEY = os.environ.get("VLLM_API_KEY") # vLLM's --api-key: the only gate on the server's public URL
47
+ if not API_KEY: # no default key (PS-21): a default would be public, and would gate a billing GPU
48
+ raise SystemExit("set VLLM_API_KEY to the server's API key (a long random string) before deploying")
49
+ SNAPSHOT = TP == 1 # Modal: GPU memory snapshots do not work across several GPUs; TP>1 boots without one
50
+ VLLM_PORT, PUBLIC_PORT = 8001, 8000 # vLLM on loopback; the gate on the public port
51
+ GATE = "/root/rw_gate.py"
52
+
53
+ HF_CACHE = "/root/.cache/huggingface"
54
+ VLLM_CACHE = "/root/.cache/vllm"
55
+ hf_vol = modal.Volume.from_name("rw-hf-cache", create_if_missing=True)
56
+ vllm_cache_vol = modal.Volume.from_name("rw-vllm-serve-compile-cache", create_if_missing=True)
57
+
58
+ app = modal.App(APP_NAME)
59
+ vllm_image = (
60
+ # Base off the OFFICIAL prebuilt vLLM image: vllm + torch + xformers + flashinfer already installed as matched
61
+ # wheels, so a fresh build on a clean account compiles NOTHING (the xformers source-build / resolver failures
62
+ # only happen when pip/uv try to assemble that stack themselves). Latest/unpinned by design — `:latest` tracks
63
+ # newest vLLM, which is all we need since we only consume it. add_python omitted (the image ships Python).
64
+ # The vLLM image ships `python3` but no `python`; Modal's OWN pip bootstrap runs right after FROM (before any
65
+ # later layer) as `python -m pip …` -> exit 127. setup_dockerfile_commands runs BEFORE that bootstrap, so the
66
+ # symlink is in place when Modal bootstraps.
67
+ modal.Image.from_registry(
68
+ "vllm/vllm-openai:latest",
69
+ setup_dockerfile_commands=["RUN ln -sf $(command -v python3) /usr/local/bin/python"],
70
+ )
71
+ .entrypoint([]) # the image's ENTRYPOINT (the api_server) would hijack Modal's runtime; clear it
72
+ .pip_install("hf_transfer") # enable fast HF weight downloads (HF_HUB_ENABLE_HF_TRANSFER below)
73
+ # Bake the runtime knobs into the image env: a deployed function reads the CONTAINER's env, not the deploying
74
+ # shell's, so an override must live here to reach the container (same lesson as the bench script). Xet disabled
75
+ # so a fresh weight download's open log handle can't block a Volume commit.
76
+ .env({"HF_HUB_ENABLE_HF_TRANSFER": "1", "HF_HUB_DISABLE_XET": "1", "HF_HOME": HF_CACHE,
77
+ "MODEL": MODEL, "KV_CACHE_DTYPE": KV_DTYPE, "TP": str(TP), "MAX_LEN": str(MAX_LEN),
78
+ "GPU_UTIL": GPU_UTIL, "MAX_NUM_SEQS": str(MAX_NUM_SEQS), "SERVED_NAME": SERVED,
79
+ "TOOL_PARSER": TOOL_PARSER, "REASONING_PARSER": REASONING_PARSER, "VLLM_API_KEY": API_KEY,
80
+ # Sleep mode's /sleep and /wake_up exist only in dev mode; they stay on loopback (see the gate).
81
+ "VLLM_SERVER_DEV_MODE": "1", "RW_VLLM_PORT": str(VLLM_PORT), "RW_PUBLIC_PORT": str(PUBLIC_PORT),
82
+ "TORCHINDUCTOR_COMPILE_THREADS": "1"}) # Modal: torch.compile can otherwise break snapshot creation
83
+ .add_local_file(Path(__file__).resolve().parent / "rw_gate.py", GATE) # resolve(): scripts/ holds a symlink
84
+ )
85
+
86
+
87
+ def _vllm(path: str, method: str = "GET", body: bytes | None = None, timeout: float = 600) -> int:
88
+ request = urllib.request.Request(f"http://127.0.0.1:{VLLM_PORT}{path}", data=body, method=method, headers={
89
+ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"})
90
+ with urllib.request.urlopen(request, timeout=timeout) as response:
91
+ return response.status
92
+
93
+
94
+ def _wait_healthy(proc: subprocess.Popen) -> None:
95
+ while True:
96
+ if proc.poll() is not None:
97
+ raise RuntimeError(f"vLLM exited with {proc.returncode}")
98
+ try:
99
+ if _vllm("/health", timeout=5) == 200:
100
+ return
101
+ except OSError:
102
+ pass
103
+ time.sleep(1)
104
+
105
+
106
+ @app.cls(image=vllm_image, gpu=GPU, volumes={HF_CACHE: hf_vol, VLLM_CACHE: vllm_cache_vol},
107
+ timeout=3600, max_containers=1, scaledown_window=600,
108
+ memory=65536, # host RAM for the sleeping weights (~29 GiB for Config B), which the snapshot captures
109
+ enable_memory_snapshot=SNAPSHOT, experimental_options={"enable_gpu_snapshot": SNAPSHOT})
110
+ # Without this Modal feeds the container ONE HTTP request at a time (Running:1 + "cancellation signal" floods,
111
+ # /health blocked) — vLLM's continuous batching never gets fed. Let many requests hit the one container; vLLM
112
+ # batches them internally up to --max-num-seqs.
113
+ @modal.concurrent(max_inputs=int(MAX_NUM_SEQS))
114
+ class QwenServer:
115
+ """vLLM's OpenAI-compatible server for the configured Qwen config. Reuses the persisted weights + serve-path
116
+ torch.compile cache; compiled (production-faithful), optional FP8 KV, optional tool-calling + reasoning parsers so
117
+ ONE endpoint serves free-text, guided/JSON, tool calls, and reasoning together."""
118
+
119
+ @modal.enter(snap=True)
120
+ def start(self) -> None:
121
+ """Start vLLM, warm it, and put it to sleep: the snapshot is taken after this (when SNAPSHOT is on)."""
122
+ hf_vol.reload()
123
+ vllm_cache_vol.reload()
124
+ args = [
125
+ "vllm", "serve", MODEL, "--host", "127.0.0.1", "--port", str(VLLM_PORT), "--served-model-name", SERVED,
126
+ "--tensor-parallel-size", str(TP), "--dtype", "bfloat16", "--max-model-len", str(MAX_LEN),
127
+ "--gpu-memory-utilization", GPU_UTIL, "--max-num-seqs", str(MAX_NUM_SEQS),
128
+ "--api-key", API_KEY, "--trust-remote-code", "--enable-sleep-mode",
129
+ ]
130
+ if KV_DTYPE != "auto":
131
+ args += ["--kv-cache-dtype", KV_DTYPE]
132
+ if TOOL_PARSER: # the product's deep-agent orchestrator is a tool-caller (RuleWright Q1/Q3)
133
+ args += ["--enable-auto-tool-choice", "--tool-call-parser", TOOL_PARSER]
134
+ if REASONING_PARSER: # so reasoning coexists with a forced tool/schema instead of colliding
135
+ args += ["--reasoning-parser", REASONING_PARSER]
136
+ print(f"[qwen] serving {MODEL} as '{SERVED}' | TP={TP} max_len={MAX_LEN} util={GPU_UTIL} kv={KV_DTYPE} "
137
+ f"max_seqs={MAX_NUM_SEQS} tool={TOOL_PARSER or '-'} reasoning={REASONING_PARSER or '-'} "
138
+ f"snapshot={SNAPSHOT}", flush=True)
139
+ self.vllm = subprocess.Popen(args)
140
+ _wait_healthy(self.vllm)
141
+ warm = (b'{"model": "%s", "messages": [{"role": "user", "content": "Say OK."}], "max_tokens": 8, '
142
+ b'"chat_template_kwargs": {"enable_thinking": false}}' % SERVED.encode())
143
+ for _ in range(2):
144
+ _vllm("/v1/chat/completions", "POST", warm)
145
+ _vllm("/sleep?level=1", "POST", b"") # level 1: weights to host RAM (in the snapshot), KV cache discarded
146
+ print("[qwen] warmed and asleep; snapshot next", flush=True)
147
+
148
+ @modal.enter(snap=False)
149
+ def wake(self) -> None:
150
+ """After a restore (or straight after `start` without one): wake vLLM, then open the public port."""
151
+ _vllm("/wake_up", "POST", b"")
152
+ _wait_healthy(self.vllm)
153
+ self.gate = subprocess.Popen(["python", GATE])
154
+ print("[qwen] awake; gate open", flush=True)
155
+
156
+ @modal.web_server(port=PUBLIC_PORT, startup_timeout=1200, label=f"{APP_NAME}-serve")
157
+ def serve(self) -> None:
158
+ """The public URL: the gate, which forwards /v1/* and /health to vLLM."""
159
+
160
+ @modal.exit()
161
+ def stop(self) -> None:
162
+ for proc in (getattr(self, "gate", None), getattr(self, "vllm", None)):
163
+ if proc:
164
+ proc.terminate()
@@ -0,0 +1,58 @@
1
+ """The model server's public front (PS-20): forwards only the OpenAI API (`/v1/...`) and `/health` to vLLM.
2
+
3
+ vLLM's `--api-key` guards only `/v1`, `/v2`, `/inference` and `/cohere`. Sleep mode, which the GPU snapshot needs,
4
+ requires `VLLM_SERVER_DEV_MODE=1`, and that adds unauthenticated `/sleep`, `/wake_up` and `/collective_rpc` routes. So
5
+ vLLM listens on 127.0.0.1 only and this gate is what the public URL reaches. It runs inside the server container
6
+ (`modal_qwen3_vllm_server.py` copies it into the image); responses stream through as they arrive.
7
+ """
8
+ import os
9
+
10
+ UPSTREAM = f"http://127.0.0.1:{os.environ.get('RW_VLLM_PORT', '8001')}"
11
+ _HOP_BY_HOP = {"connection", "keep-alive", "transfer-encoding", "upgrade", "proxy-connection", "te", "trailer",
12
+ "host", "content-length"}
13
+
14
+
15
+ def allowed(path: str) -> bool:
16
+ """The routes the public URL may reach: the OpenAI API and the health check."""
17
+ return path == "/health" or path.startswith("/v1/")
18
+
19
+
20
+ async def _forward(request):
21
+ from aiohttp import web
22
+
23
+ if not allowed(request.path):
24
+ return web.json_response({"error": "Not Found"}, status=404)
25
+ headers = {k: v for k, v in request.headers.items() if k.lower() not in _HOP_BY_HOP}
26
+ async with request.app["session"].request(request.method, UPSTREAM + request.path_qs, headers=headers,
27
+ data=await request.read()) as upstream:
28
+ response = web.StreamResponse(status=upstream.status, headers={
29
+ k: v for k, v in upstream.headers.items() if k.lower() not in _HOP_BY_HOP})
30
+ await response.prepare(request)
31
+ async for chunk in upstream.content.iter_any(): # streamed completions pass through as they arrive
32
+ await response.write(chunk)
33
+ await response.write_eof()
34
+ return response
35
+
36
+
37
+ async def _app():
38
+ from aiohttp import ClientSession, ClientTimeout, TCPConnector, web
39
+
40
+ app = web.Application(client_max_size=64 * 1024 * 1024)
41
+
42
+ async def open_session(app):
43
+ app["session"] = ClientSession(connector=TCPConnector(limit=0), timeout=ClientTimeout(total=None))
44
+
45
+ async def close_session(app):
46
+ await app["session"].close()
47
+
48
+ app.on_startup.append(open_session)
49
+ app.on_cleanup.append(close_session)
50
+ app.router.add_route("*", "/{tail:.*}", _forward)
51
+ return app
52
+
53
+
54
+ if __name__ == "__main__":
55
+ from aiohttp import web
56
+
57
+ web.run_app(_app(), host=os.environ.get("RW_GATE_HOST", "0.0.0.0"),
58
+ port=int(os.environ.get("RW_PUBLIC_PORT", "8000")), print=None)
@@ -141,7 +141,11 @@ Work the domain-adaptation guide, grounding each engine call (step 2) and writin
141
141
  `server = await adeploy_model_server(ModelServerSpec(name="<app>", max_num_seqs=<concurrency target>))` (the locked
142
142
  setup of the `qwen-vllm-modal` skill; needs `rag-wright[modal]`, a Modal login and `VLLM_API_KEY` in `.env`), then
143
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.
144
+ call `await_model_server(server, timeout_s=<startup budget>)` before traffic (cold start is minutes; the default
145
+ waits 25 min); `stop_model_server(name)` stops billing. `amodel_server_status(spec)` looks without waking it (deployed,
146
+ running, healthy, weights cached). There is no default `VLLM_API_KEY`. Count concurrency end to end: `aingest` runs
147
+ `min(document_concurrency, documents) x extract_concurrency` calls per run, parallel runs add up, and the sum must
148
+ stay below `max_num_seqs` (`aingest` warns when its own peak exceeds it).
145
149
  Full walk-through: `docs/configuration.md`, "A self-hosted model server".
146
150
 
147
151
  **Using the decision model (Jev).** Register `jev_decision` (from `engine_capabilities()`) and set
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.7.0"
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.7.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.6.0...0.7.0) (2026-10-11)
8
+
9
+
10
+ ### Features
11
+
12
+ * **PS-20:** the model server cold-starts from a Modal GPU memory snapshot behind a public-route gate (ADR-0132) ([1305237](https://github.com/fzaidi-dai/RAG_Wright/commit/13052378c57f31d126d281cda49c614ca9e7207b))
13
+ * **PS-22:** the model-call deadline follows the configured timeout; a profile caps thinking models' structured output (ADR-0133) ([d327813](https://github.com/fzaidi-dai/RAG_Wright/commit/d3278130aaae10e7af3c326e503612337e7336cb))
14
+
15
+ ## [0.6.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.5.1...0.6.0) (2026-10-10)
16
+
17
+
18
+ ### ⚠ BREAKING CHANGES
19
+
20
+ * **PS-21:** a self-hosted server call or deploy with VLLM_API_KEY (or the profile's api_key_env) unset now raises instead of using the default key "rw-vllm-dev-key".
21
+
22
+ ### Bug Fixes
23
+
24
+ * **PS-21:** no default model-server key; concurrency ceiling, status and clearer errors (ADR-0131) ([a73a4fd](https://github.com/fzaidi-dai/RAG_Wright/commit/a73a4fd9595a9f8d70d95d393147ba10a1f1718b))
25
+
7
26
  ## [0.5.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.5.0...0.5.1) (2026-10-10)
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.5.0** (ledger
58
+ > **CURRENT STATE (2026-10-11): the public-surface workstream is COMPLETE and released as `rag-wright` 0.6.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 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,
61
+ > RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md` then `rulewright-migration-0.4.0.md`, `-0.5.0.md` and `-0.6.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.5.1
3
+ Version: 0.7.0
4
4
  Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
5
5
  Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
6
6
  Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
@@ -45,6 +45,44 @@ Plausible target after the snapshot is built: **~10–20s cold restart**, well u
45
45
  - **Fallback if the alpha proves unstable:** the §4 supporting trims alone do NOT reach sub-60s (per the reframe), so the fallback for a hard sub-60s SLA reverts to keep-one-warm (the ruled-out cost) until the snapshot path matures.
46
46
  - No engine code changes here; this is deployment/serving infrastructure for the product substrate (ADR-0039). This ADR sets direction and diagnosis; a follow-up will record the prototype's measured result.
47
47
 
48
+ ## Addendum (2026-10-11): `runai_streamer` measured on Modal, not adopted
49
+
50
+ The §4 trim `--load-format runai_streamer` was measured on the locked Config B (ADR-0110: `Qwen/Qwen3.8-27B-FP8`,
51
+ fp8 KV, 1×A100-80GB, TP=1, 16K) with the weights cached on the `rw-hf-cache` Volume and the AOT compile cache hit in
52
+ every run. It is already in the `vllm/vllm-openai` image (vLLM's Dockerfile installs `runai-model-streamer`), and it
53
+ streams from the Hugging Face cache when given a repo id. Seven cold starts, timed from container start:
54
+
55
+ | Loader | Weight read (s) | "Model loading" (s) | Container start → ready (s) |
56
+ |---|---|---|---|
57
+ | default | 40.6 / 26.5 / 11.6 | 46.8 / 36.8 / 17.0 | 146 / 245 / 114 |
58
+ | `runai_streamer`, concurrency 16 | 30 / 31 / 56 | 36.9 / 61.9 / 64.8 | 154 / 167 / 185 |
59
+ | `runai_streamer`, concurrency 32 | 45 | 57.0 | 218 |
60
+
61
+ **Decision: keep the default loader.** Means: weight read 26 s (default) against 39 s (streamer at 16); start to
62
+ ready 168 s against 169 s. On a Modal Volume the read rate swings 0.76 to 2.7 GB/s with the default loader alone,
63
+ depending on whether the files are already cached, which is larger than any loader effect; the streamer's
64
+ published gains (2.4× on local NVMe, up to 6× from object storage) do not transfer. The streamer's "Model loading"
65
+ also carries ~30 s beyond its read. The weight read is 10-30% of a cold start; the remainder is process start
66
+ (~70-120 s before the load begins) and engine init (~30-50 s), which confirms the reframe above: the cold-start
67
+ work is the snapshot path, not the loader.
68
+
69
+ Two corrections to figures above. Config B's weights are **30.9 GB on disk (28.9 GiB in VRAM)**, not ~27 GB. The
70
+ current cold start with weights and compile cache warm is **~2-4 minutes** (114-245 s here), not the ~481 s
71
+ measured for the bf16 model in September.
72
+
73
+ ## Addendum (2026-10-11): where the non-snapshot cold start goes, and the outcome
74
+
75
+ Timed from the server function's start in three default-loader cold starts (146 / 245 / 114 s): the API server
76
+ process reaching its arguments 30 / 80 / 31 s; the engine process initialised 31 / 70 / 29 s later; model loading
77
+ 47 / 37 / 17 s; compile-cache load and CUDA-graph capture 31 / 45 / 31 s. The first two are imports: on a CPU
78
+ container the API server's import takes 37 s cold and 28-29 s warm, the same with every module precompiled to
79
+ bytecode (so not compilation). The largest single cost is transformers' `import_utils`, whose import calls
80
+ `importlib.metadata.packages_distributions()` (it stats every file of every installed package) and reads its own
81
+ model modules (21,413 `stat` calls in one `import transformers`). `HF_HUB_OFFLINE=1` removes the Hub lookups but
82
+ resolves the model to a local snapshot path, which changed vLLM's compile-cache key in each container (a 73-104 s
83
+ recompile per start), so it is not adopted. **Outcome: the snapshot path (decision 2-3 above) is adopted; see
84
+ ADR-0132.**
85
+
48
86
  ### Sources
49
87
  - Modal GPU snapshots (alpha, what's captured): https://modal.com/blog/gpu-mem-snapshots ; caveats (multi-GPU incompat, storage-bound caveat, torch.compile): https://modal.com/docs/guide/memory-snapshots ; vLLM example: https://modal.com/docs/examples/lfm_snapshot , https://modal.com/docs/examples/gpu_snapshot
50
88
  - Cold-start is CPU-bound; Tensorizer fastest: https://arxiv.org/abs/2606.07362 ; 35B breakdown: https://route179.dev/2026/06/30/optimizing-vllm-cold-start-with-model-streaming-and-compile-caching/
@@ -52,3 +90,4 @@ Plausible target after the snapshot is built: **~10–20s cold restart**, well u
52
90
  - vLLM loaders: runai_streamer https://docs.vllm.ai/en/stable/models/extensions/runai_model_streamer/ ; Tensorizer https://docs.vllm.ai/en/v0.10.1/models/extensions/tensorizer.html
53
91
  - vLLM CUDA graphs / capture cost: https://docs.vllm.ai/en/stable/design/cuda_graphs/
54
92
  - Modal Volume 1–2 GB/s, keep-warm knobs: https://modal.com/docs/guide/high-performance-llm-inference , https://modal.com/docs/guide/cold-start , https://modal.com/docs/guide/scale
93
+ - vLLM loaders (cont.): runai_streamer source https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/model_loader/runai_streamer_loader.py ; route179 35B breakdown (2.4× on NVMe) above
@@ -0,0 +1,34 @@
1
+ # ADR-0131: No default server key anywhere; a model's concurrency ceiling travels with its id
2
+
3
+ **Status:** accepted · **Date:** 2026-10-11 · **Related:** ADR-0130 (deploy the model server from the engine),
4
+ ADR-0110 (`max_num_seqs` is the concurrency target), PS-21 (RuleWright's model-server review)
5
+
6
+ ## Context
7
+
8
+ RuleWright's first use of the model-server API found five gaps. The deploy script (and six dev scripts) fell back to
9
+ a key committed in the repo when `VLLM_API_KEY` was unset, and Modal's web endpoint is public and unauthenticated, so
10
+ the raw `modal deploy` path the skill documents put a billing A100 behind a published key; the seam sent the same
11
+ default. A product could not tell whether its load fits the server, because the engine's own ingestion fan-out
12
+ multiplies with the product's and nothing compared it to `max_num_seqs`. Cache state, a not-deployed error and the
13
+ startup timeout were also unclear.
14
+
15
+ ## Decision
16
+
17
+ 1. No default key. Every Modal vLLM server script raises on an unset `VLLM_API_KEY` (and bakes it into the image
18
+ env, which the container reads); the seam's `vllm` backend raises instead of sending a default. A test fails if
19
+ the old default string reappears under `src/`, `scripts/` or `docs/*.md`. Breaking, approved.
20
+ 2. `ModelProfile.max_concurrency` (optional; approved schema change): the most requests the model's server batches
21
+ at once. A deployed server registers its `max_num_seqs` there. `aingest` warns (a `RuntimeWarning` and a progress
22
+ line) when `min(document_concurrency, documents) x extract_concurrency` exceeds the ceiling of any model the
23
+ workspace resolves. It cannot see a product's other parallel runs; the docs give the arithmetic.
24
+ 3. `amodel_server_status(spec)`: deployed, running, healthy, weights cached. It asks `/health` only of a running
25
+ container (a request to a scaled-down server starts a cold start) and reads the weights Volume (`rw-hf-cache`,
26
+ pinned to the script by a test).
27
+ 4. `ModelServerNotDeployed` (a `RuntimeError`) replaces Modal's raw `NotFoundError`; `astop_model_server` is the async
28
+ stop.
29
+
30
+ ## Consequences
31
+
32
+ - A hand deploy or a client without `VLLM_API_KEY` now fails with a message naming the variable.
33
+ - The ingestion warning covers the generic pipeline's extractor fan-out; other callers (a pack's own concurrency,
34
+ queries) are covered by the documented arithmetic, not a check.
@@ -0,0 +1,45 @@
1
+ # ADR-0132: The model server cold-starts from a Modal GPU memory snapshot, behind a public-route gate
2
+
3
+ **Status:** accepted · **Date:** 2026-10-11 · **Related:** ADR-0109 (cold-start reduction: direction and the
4
+ measurements behind it), ADR-0110 (Config B), ADR-0130/0131 (the model-server API), PS-20
5
+
6
+ ## Context
7
+
8
+ A cold start of the self-hosted Qwen server (Config B on one A100) took 114-245 s, sometimes more, every time a
9
+ scaled-down server got a request. Measured on 2026-10-11 (ADR-0109 addenda): about 30 s of imports in each of vLLM's
10
+ two processes, a 12-154 s weight read from the Volume, then compile-cache load and CUDA-graph capture. The levers
11
+ that do not remove startup were measured and rejected: the Run:ai streamer, precompiled bytecode, and
12
+ `HF_HUB_OFFLINE=1` (it changes vLLM's compile-cache key in every container, so each start recompiles).
13
+
14
+ ## Decision
15
+
16
+ 1. **The server is a Modal class restored from a GPU memory snapshot** (`enable_memory_snapshot` +
17
+ `experimental_options={"enable_gpu_snapshot": True}`, alpha). `@modal.enter(snap=True)` starts vLLM with
18
+ `--enable-sleep-mode`, warms it with two requests and sleeps it at level 1 (weights to host RAM, ~29 GiB, KV
19
+ discarded; the class requests 64 GiB of memory); Modal snapshots the container. `@modal.enter(snap=False)` wakes
20
+ vLLM. `TORCHINDUCTOR_COMPILE_THREADS=1` as Modal requires. Snapshots only at TP=1 (Modal: incompatible with
21
+ several GPUs); TP>1 boots without one.
22
+ 2. **vLLM listens on 127.0.0.1 only; the public port is `rw_gate.py`**, which forwards `/v1/*` and `/health` and
23
+ returns 404 for everything else. Sleep mode needs `VLLM_SERVER_DEV_MODE=1`, which adds unauthenticated `/sleep`,
24
+ `/wake_up` and `/collective_rpc` routes, and vLLM's `--api-key` guards only `/v1`, `/v2`, `/inference` and
25
+ `/cohere` (v0.30.0 `serve/middleware/authenticate.py`). Modal's published vLLM snapshot examples expose those
26
+ routes publicly; we do not.
27
+ 3. **The URL does not change**: `@modal.web_server(..., label=f"{APP_NAME}-serve")` keeps
28
+ `https://<workspace>--<app>-serve.modal.run`. The engine looks the server up as
29
+ `modal.Cls.from_name(name, "QwenServer")().serve` (the URL and the container count; Modal's public
30
+ `Function.from_name` refuses a class's `<Class>.*` name). The public API is unchanged.
31
+
32
+ ## Consequences
33
+
34
+ - **A restore is ready ~13 s after its container starts** (wake ~3.5 s); 21-67 s end to end in our runs, including
35
+ getting a container. One restore took ~112 s (Modal loading the snapshot slowly).
36
+ - **Modal decides per container whether to restore or build**, and a build is a full boot plus the snapshot: 4-9
37
+ minutes. It built 3-4 snapshots after each deploy in our runs (one after a GPU preemption) and another later in
38
+ one run. So a scaled-to-zero server usually answers in seconds and occasionally makes a request wait minutes; a
39
+ product that cannot accept that keeps the server warm during working hours.
40
+ - **Redeploying keeps the snapshots; stopping the app discards them**, so the next deploy pays the builds again.
41
+ - **Alpha-feature risk** stays (Modal labels GPU snapshots alpha). If a restore fails, Modal boots the container in
42
+ full, which is the pre-snapshot behaviour.
43
+ - Live gate (engine API only): deploy, a question metered on the server's model id, status while up, public
44
+ `/sleep` and `/collective_rpc` 404, three cold starts, a redeploy then a restored cold start (67 s), stop, status
45
+ not deployed. Prototype runs: restores in 4 of 11 cold starts across two deployments, all after the first builds.
@@ -0,0 +1,40 @@
1
+ # ADR-0133: The model-call deadline follows the configured timeout, and a thinking model's structured output is capped by its profile
2
+
3
+ **Status:** accepted · **Date:** 2026-10-11 · **Related:** ADR-0056/0057 (one bounded retry layer; the async
4
+ wall-clock deadline), ADR-0110 (the timeout trap on reasoning-on calls), PS-22
5
+
6
+ ## Context
7
+
8
+ The 2026-10-11 sampling A/B (ContractNLI, 150 pairs, thinking on, Qwen on our A100) found two things:
9
+
10
+ 1. The async seam cancelled every logical call at a fixed 180 s (`_MODEL_DEADLINE_S`), whatever
11
+ `RAG_STRUCTURED_TIMEOUT_S` said. The docs and the qwen skill tell people to raise that per-try timeout for
12
+ reasoning-on work, and past 180 s in total it did nothing. A loop and a slow healthy call both ended as
13
+ `ModelCallTimeout`, and the ContractNLI eval scored that as "neutral".
14
+ 2. Reasoning loops are real and random: one pair ran to 8,192 tokens in 1 of 3 tries at Qwen's recommended
15
+ sampling, and correct verdicts took up to ~7k tokens. Qwen's recommended sampling did not remove loops (greedy
16
+ stays the default).
17
+
18
+ ## Decision
19
+
20
+ 1. **`model_deadline_s()`** is `RAG_MODEL_DEADLINE_S` when set; otherwise the per-try timeout times the tries plus
21
+ the largest backoffs, never under 180 s. Every async seam call runs under it, and `ModelCallTimeout` names both
22
+ settings.
23
+ 2. **`ModelProfile.structured_max_tokens`** is the default `max_tokens` for a forced structured call (a caller's own
24
+ value wins). The four thinking-on Qwen profiles set 8,192, so a loop ends at `finish_reason=length`, a parse
25
+ failure the bounded retry handles, rather than at the deadline. A server deployed from the engine inherits it.
26
+ 3. **The cap never fails a call that worked without it.** vLLM rejects a request whose prompt plus `max_tokens`
27
+ exceeds the context with a 400 naming `input_tokens` (`vllm/renderers/params.py`), so that error is answered by
28
+ sending the call once more without the cap. A caller's own `max_tokens` keeps today's behaviour (no retry).
29
+ 4. `eval/contractnli_judge.py` reports failed calls as errors, never as a verdict.
30
+
31
+ Rejected: vLLM's `thinking_token_budget` (needs `--reasoning-config` on the server and is not supported by vLLM's V2
32
+ model runner yet, and it is vLLM-only), and higher sampling temperature as a loop fix (measured, above).
33
+
34
+ ## Consequences
35
+
36
+ - Raising `RAG_STRUCTURED_TIMEOUT_S` now raises the total budget too; the default is ~182 s (was 180 s).
37
+ - A looping thinking call costs at most 8,192 output tokens per try instead of running until cancelled.
38
+ - Free-text calls are not capped by the profile (thinking is off on that path in every Qwen profile).
39
+ - RuleWright: callers that turn a failed call into a result should treat `ModelCallTimeout` as an error, not a
40
+ verdict (`rulewright-migration-0.7.0.md`).
@@ -1,7 +1,7 @@
1
1
  # Architecture Decision Records — index
2
2
 
3
- 128 ADR files (0001–0119, plus 0120 — the former duplicate `0015`, renumbered 2026-10-05 to repair the collision —
4
- and 0121–0130). ADRs are an
3
+ 131 ADR files (0001–0119, plus 0120 — the former duplicate `0015`, renumbered 2026-10-05 to repair the collision —
4
+ and 0121–0133). 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
 
@@ -186,4 +186,7 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
186
186
  0127 Retire the OKF code ·
187
187
  0128 Two public tiers: `rag_wright.api` for products, `rag_wright.pack_sdk` for packs ·
188
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
189
+ 0130 A product deploys the self-hosted model server from the engine and uses it like any model ·
190
+ 0131 No default server key anywhere; a model's concurrency ceiling travels with its id ·
191
+ 0132 The model server cold-starts from a Modal GPU memory snapshot, behind a public-route gate ·
192
+ 0133 The model-call deadline follows the configured timeout; a thinking model's structured output is capped by its profile