rag-wright 0.6.0__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.
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/qwen-vllm-modal/SKILL.md +22 -8
- rag_wright-0.7.0/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +164 -0
- rag_wright-0.7.0/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +58 -0
- rag_wright-0.7.0/.release-please-manifest.json +3 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/CHANGELOG.md +8 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/CLAUDE.md +1 -1
- {rag_wright-0.6.0 → rag_wright-0.7.0}/PKG-INFO +1 -1
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0109-vllm-cold-start-reduction.md +39 -0
- rag_wright-0.7.0/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +45 -0
- rag_wright-0.7.0/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +40 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/README.md +5 -3
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/api/README.md +3 -3
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/api/pack_sdk.md +4 -2
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/configuration.md +21 -7
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/public-surface/plan.md +2 -1
- rag_wright-0.7.0/docs/specs/public-surface/rulewright-migration-0.7.0.md +46 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/contractnli_judge.py +17 -11
- {rag_wright-0.6.0 → rag_wright-0.7.0}/examples/model_server.py +1 -1
- {rag_wright-0.6.0 → rag_wright-0.7.0}/pyproject.toml +1 -1
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +22 -8
- rag_wright-0.7.0/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +164 -0
- rag_wright-0.7.0/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +58 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/model_servers.py +13 -7
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/profiles.py +11 -3
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/seam.py +63 -13
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tasks.md +7 -3
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/eval/test_contractnli_judge.py +11 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_model_servers.py +74 -3
- rag_wright-0.7.0/tests/models/test_seam_deadline_and_cap.py +131 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/uv.lock +1 -1
- rag_wright-0.6.0/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -98
- rag_wright-0.6.0/.release-please-manifest.json +0 -3
- rag_wright-0.6.0/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -98
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/settings.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.env.example +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/.gitignore +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/LICENSE +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/README.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/SPEC.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/conftest.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/architecture.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/README.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.6.0 → 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
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/concepts.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/README.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/kg-construction.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/installation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/playbook.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/quickstart.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/reference-pack.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/releasing.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/docs/workspaces.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/acord.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/build_golden.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/embedded_eval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/function_ceiling.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/function_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/golden.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/harness.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/kg_primary.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/multihop.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/nl_to_type.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/relational_eval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/test_acord.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/test_harness.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/examples/quickstart.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/plan.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/release-please-config.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acord_unify.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/graph_status.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/measure_silver.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/config.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/kg.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/api/workspace.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/parsing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/builder.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/pack_sdk/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/store/arcadedb.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/store/seam.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_discover.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_documents.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_kg.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_open_workspace_reconfig.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_options.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_usage.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/arch/test_shipped_skills.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/async_helpers.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/conftest.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/models/test_usage.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/skills/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_concurrent_writes.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/util/__init__.py +0 -0
- {rag_wright-0.6.0 → rag_wright-0.7.0}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.6.0 → 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, ~
|
|
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
|
|
33
|
-
|
|
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
|
|
@@ -62,7 +62,7 @@ The script refuses to deploy without `VLLM_API_KEY`: Modal's web endpoint is pub
|
|
|
62
62
|
`uv run --no-sync modal app stop rw-qwen3-modal --yes` (A100 is expensive).
|
|
63
63
|
|
|
64
64
|
**The engine does NOT reach Modal by default.** Every role's default is `_PRODUCT_LLM = "qwen3.8-27b-modal-or"`,
|
|
65
|
-
the same model routed through OpenRouter (
|
|
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
|
|
66
66
|
`RAG_MODEL_ALL=qwen3.8-27b-modal` (all roles), a per-role `RAG_MODEL_<ROLE>`, or `EngineConfig.models`. For bulk
|
|
67
67
|
closed-vocab labeling, the reasoning-off profile `qwen3.8-27b-modal-nothink` exists (opt-in; see the reasoning
|
|
68
68
|
caveat below). `VISION_OCR` now defaults to the product LLM too, but image inputs through the Modal vLLM server are
|
|
@@ -98,17 +98,31 @@ the OFFICIAL prebuilt vLLM image** rather than pip-building vLLM:
|
|
|
98
98
|
reasoning calls take ~50–60 s; the seam's default 60 s timeout kills the ones just over the line → **retry pileup →
|
|
99
99
|
requests pile past `max_inputs` → instant `APIConnectionError` (0.0 s) cascade**. FIX: the seam reads
|
|
100
100
|
`RAG_STRUCTURED_TIMEOUT_S` (default 60) — raise it (e.g. `150`) for reasoning-ON bulk work. Server logs confirm the
|
|
101
|
-
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).
|
|
102
104
|
3. **Pick client concurrency empirically, below the ceiling.** 16 was stable; 20 (== `max-num-seqs`) sat at the exact
|
|
103
105
|
ceiling and risked queueing. `Running: N, Waiting: 0` + zero cancellations = healthy.
|
|
104
106
|
4. **Reasoning ON vs OFF for bulk classification:** reasoning-OFF is ~30× faster but **changes the labels**
|
|
105
107
|
(over-keeps / different distribution) — do NOT swap it in for work that must match the reasoning-teacher's gold
|
|
106
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.
|
|
107
113
|
|
|
108
114
|
## Cold start & cost
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
|
|
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.
|
|
112
126
|
- **A100 is billed while up — `modal app stop <app> --yes` the moment you're done.** Verify with `modal app list`
|
|
113
127
|
(state `stopped`, 0 tasks) + endpoint 404.
|
|
114
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)
|
|
@@ -4,6 +4,14 @@ 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
|
+
|
|
7
15
|
## [0.6.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.5.1...0.6.0) (2026-10-10)
|
|
8
16
|
|
|
9
17
|
|
|
@@ -55,7 +55,7 @@ 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-
|
|
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
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,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.
|
|
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,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
|
-
|
|
4
|
-
and 0121–
|
|
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
|
|
|
@@ -187,4 +187,6 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
|
|
|
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
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
|
|
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
|
|
@@ -46,7 +46,7 @@ No deployed model server has this name (never deployed, or stopped).
|
|
|
46
46
|
|
|
47
47
|
### `ModelServerStatus(name: 'str', deployed: 'bool', running: 'bool', healthy: 'bool', weights_cached: 'bool') -> None`
|
|
48
48
|
|
|
49
|
-
What `amodel_server_status` found. `deployed`: the Modal app exists. `running`: a container is up (the GPU is billing); False when scaled to zero after idling. `healthy`: a running container answers `/health` (False while it starts). `weights_cached`: the spec's model weights are in the weights Volume, so a deploy or cold start skips the ~
|
|
49
|
+
What `amodel_server_status` found. `deployed`: the Modal app exists. `running`: a container is up (the GPU is billing); False when scaled to zero after idling. `healthy`: a running container answers `/health` (False while it starts). `weights_cached`: the spec's model weights are in the weights Volume, so a deploy or cold start skips the ~31 GB download (an empty `modal app list` says nothing about this).
|
|
50
50
|
|
|
51
51
|
### `ModelRole(*values)`
|
|
52
52
|
|
|
@@ -260,7 +260,7 @@ Resolve every model role through `ws`'s `EngineConfig.models` inside the block (
|
|
|
260
260
|
|
|
261
261
|
### `adeploy_model_server(spec: 'ModelServerSpec', *, wait: 'bool' = True, timeout_s: 'float' = 1500, poll_s: 'float' = 15, progress: 'Callable[[str], object]' = print) -> 'ModelServer'`
|
|
262
262
|
|
|
263
|
-
Deploy (or redeploy) the server described by `spec` on Modal, register its model profile, and (with `wait`) wait for it to be ready. Returns the `ModelServer`; use `server.model_id` as the model. Raises `RuntimeError` when the API-key variable is unset (nothing is deployed). The server runs (and bills) until `stop_model_server`, or until Modal scales it down after 10 idle minutes.
|
|
263
|
+
Deploy (or redeploy) the server described by `spec` on Modal, register its model profile, and (with `wait`) wait for it to be ready. Returns the `ModelServer`; use `server.model_id` as the model. Raises `RuntimeError` when the API-key variable is unset (nothing is deployed). The server runs (and bills) until `stop_model_server`, or until Modal scales it down after 10 idle minutes. Stopping discards the server's snapshots, so the next deploy pays snapshot-building boots again (ADR-0132).
|
|
264
264
|
|
|
265
265
|
### `amodel_server(spec: 'ModelServerSpec') -> 'ModelServer'`
|
|
266
266
|
|
|
@@ -268,7 +268,7 @@ Reconnect to a server deployed earlier (by this process or another) without rede
|
|
|
268
268
|
|
|
269
269
|
### `await_model_server(server: 'ModelServer', *, timeout_s: 'float' = 1500, poll_s: 'float' = 15, progress: 'Callable[[str], object]' = print) -> 'ModelServer'`
|
|
270
270
|
|
|
271
|
-
Wait until the server answers `/health`
|
|
271
|
+
Wait until the server answers `/health`; progress as `i/N`. A cold start restored from the server's snapshot is ready ~13 s after its container starts; a boot that builds a snapshot (the first few, and now and then another) takes 4-9 minutes (ADR-0132). Raises `TimeoutError` after `timeout_s`.
|
|
272
272
|
|
|
273
273
|
### `stop_model_server(name: 'str') -> 'None'`
|
|
274
274
|
|
|
@@ -70,7 +70,7 @@ Self-loop is rejected here only at the ref level (the same mention as both sourc
|
|
|
70
70
|
|
|
71
71
|
### `ModelCallTimeout`
|
|
72
72
|
|
|
73
|
-
A logical model call exceeded the total wall-clock deadline (`
|
|
73
|
+
A logical model call exceeded the total wall-clock deadline (`model_deadline_s()`) and was truly cancelled (socket torn down). TERMINAL: a stalling peer is not a transient worth re-hitting, so this is deliberately NOT in `_STRUCTURED_RETRY_ON` and must be kept out of any pregel `retry_on` -- the caller degrades or dead-letters on it. It is the async fix a per-socket-op timeout cannot be (engine issue 0003 / ADR-0057).
|
|
74
74
|
|
|
75
75
|
### `TransientExtraction`
|
|
76
76
|
|
|
@@ -310,7 +310,7 @@ A structured-output runnable for `model_id`, driven by its profile.
|
|
|
310
310
|
|
|
311
311
|
The profile supplies the method and the optional structured-only `extra_body`; the `extra_body` is bound to this forced structured call only. This is the sole path to `with_structured_output`. The runnable is wrapped in a SINGLE bounded retry layer (`_with_bounded_retry`); the SDK's own retry loop is disabled here (max_retries=0) so the two do not stack into a ~36 min worst case (engine issue 0003 / ADR-0056).
|
|
312
312
|
|
|
313
|
-
`temperature` defaults to 0 (deterministic-intent); a caller doing best-of-N self-consistency raises it to sample GENUINELY diverse structured completions (the base client's temperature, not a provider flag). `max_tokens` caps the completion length -- a safety net against a model that runs away to the context limit under a schema constraint (observed on self-hosted Gemma-4 with a mis-set chat template).
|
|
313
|
+
`temperature` defaults to 0 (deterministic-intent); a caller doing best-of-N self-consistency raises it to sample GENUINELY diverse structured completions (the base client's temperature, not a provider flag). `max_tokens` caps the completion length -- a safety net against a model that runs away to the context limit under a schema constraint (observed on self-hosted Gemma-4 with a mis-set chat template). Left None, the profile's `structured_max_tokens` applies (PS-22: a thinking model's reasoning-loop guard), and a prompt too long to leave room for that cap is sent again without it.
|
|
314
314
|
|
|
315
315
|
### `build_tag_structured(model_id: 'str', schema: 'type[BaseModel]', *, include_raw: 'bool' = False, temperature: 'float' = 0.0, max_tokens: 'int | None' = 2048, retries: 'int' = 1, label: 'str | None' = None, fields: 'set[str] | None' = None) -> '_TagStructuredRunnable'`
|
|
316
316
|
|
|
@@ -332,6 +332,8 @@ ADR-0100: resolve a model STRING to its access (backend + base_url + key + the i
|
|
|
332
332
|
|
|
333
333
|
PS-8b: the total wall-clock deadline (seconds) for one logical model call, across its bounded retries -- the value every seam call runs under (read at call time, so a test or configuration override is honoured).
|
|
334
334
|
|
|
335
|
+
PS-22: `RAG_MODEL_DEADLINE_S` when set; otherwise long enough for every try at the per-try timeout plus the largest backoffs between them, and never under 180 s.
|
|
336
|
+
|
|
335
337
|
### `call_description(model_id: 'str', label: 'str | None') -> 'str'`
|
|
336
338
|
|
|
337
339
|
The model-call description used in the deadline/retry warnings + the timeout message. ADR-0058 side-fix (issue 0004): include the STAGE/call-site (`label`) when the caller supplies it, so a timeout names WHICH stage was cancelled (e.g. `granite-4.2-8b for semantic_chunking.discover`), not just the model.
|
|
@@ -175,7 +175,7 @@ so the GPU is billing), `healthy` and `weights_cached`. It asks `/health` only o
|
|
|
175
175
|
request to a scaled-down server starts a cold start. `weights_cached` is what decides a deploy's cost: the weights
|
|
176
176
|
live in the Modal Volume `rw-hf-cache` (the vLLM compile cache in `rw-vllm-serve-compile-cache`), and stay there when
|
|
177
177
|
the app is stopped, so an empty `modal app list` does not mean a cold cache. With the weights cached, a deploy is a
|
|
178
|
-
short image build and a cold start; without them, it also downloads about
|
|
178
|
+
short image build and a cold start; without them, it also downloads about 31 GB. `astop_model_server` is
|
|
179
179
|
`stop_model_server` for async code.
|
|
180
180
|
|
|
181
181
|
**Concurrency: the engine's fan-out multiplies with yours.** `max_num_seqs` is the most requests the server batches
|
|
@@ -194,13 +194,26 @@ model the workspace resolves. It cannot see your other parallel runs: keep their
|
|
|
194
194
|
|
|
195
195
|
**What to know before you rely on it.**
|
|
196
196
|
|
|
197
|
-
- **Cold start.**
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
197
|
+
- **Cold start.** After 10 idle minutes Modal scales the container to zero (no GPU billing) but keeps the app
|
|
198
|
+
deployed; the next request waits through a cold start, so call `await_model_server` before sending traffic. The
|
|
199
|
+
server is restored from a Modal GPU memory snapshot (ADR-0132): a restore is ready about 13 s after its container
|
|
200
|
+
starts (67 s end to end in the live run, including getting a container). Modal decides per container whether to
|
|
201
|
+
restore or to boot in full and build a new snapshot (4 to 9 minutes): it builds several after a deploy (four in a
|
|
202
|
+
row in the live run, one of them after a GPU preemption), and now and then another later. Redeploying a server
|
|
203
|
+
keeps its snapshots; stopping it discards them. So a scaled-down server usually answers in seconds but can make
|
|
204
|
+
a request wait minutes; where that is not acceptable, keep the server busy or warm rather than relying on the
|
|
205
|
+
snapshot.
|
|
206
|
+
- **Cost.** An A100 bills while a container runs. `stop_model_server("acme-qwen")` removes the app entirely, and its
|
|
207
|
+
snapshots with it; deploy again to bring it back (and pay the snapshot-building boots again).
|
|
202
208
|
- **Timeouts.** Reasoning-on structured calls under full load can take about a minute; raise
|
|
203
|
-
`RAG_STRUCTURED_TIMEOUT_S` (default 60) for bulk work, or calls time out and retry.
|
|
209
|
+
`RAG_STRUCTURED_TIMEOUT_S` (default 60) for bulk work, or calls time out and retry. The total time for one call,
|
|
210
|
+
across its retries, follows that setting (three tries plus backoff, never under 180 s); set
|
|
211
|
+
`RAG_MODEL_DEADLINE_S` to choose it yourself. A call that runs past it raises `ModelCallTimeout`: count it as a
|
|
212
|
+
failed call, not as an answer.
|
|
213
|
+
- **Reasoning loops.** A thinking model now and then reasons in circles. Its profile caps a structured call's
|
|
214
|
+
output (`ModelProfile.structured_max_tokens`, 8,192 on the thinking Qwen profiles), so a loop ends as a failed
|
|
215
|
+
parse that the seam retries; a prompt too long to leave room for the cap is sent again without it. A caller's
|
|
216
|
+
own `max_tokens` takes precedence. Keep temperature 0: Qwen's recommended sampling did not remove loops (ADR-0133).
|
|
204
217
|
- **Process-wide.** A registered server model id is known to the whole process, like every model profile; after a
|
|
205
218
|
restart, call `amodel_server` again.
|
|
206
219
|
|
|
@@ -226,6 +239,7 @@ Prefer config; use env for secrets and for non-API callers. The common ones the
|
|
|
226
239
|
| `CLASSIFY_CONCURRENCY` / `CLAUSE_CONCURRENCY` / `RAG_INGEST_AFFILIATIONS` / `RAG_FUNCTION_CLASSIFIER` | contracts-pack ingest knobs (mirror `ContractIngestOptions`) |
|
|
227
240
|
| `RAG_INGEST_LIST_MODEL` / `RAG_INGEST_CLAUSE_SAMPLES` / `RAG_INGEST_CLAUSE_EXTRACTOR` | read only by the contracts pack's legacy tag-parse clause extractor, which the default pipeline does not use (it is classifier-first); its second list model runs only when `RAG_INGEST_LIST_MODEL` names one (no default model) |
|
|
228
241
|
| `RAG_STRUCTURED_TIMEOUT_S` / `RAG_JEV_TIMEOUT_S` / `RAG_JUDGE_TIMEOUT_S` / `RAG_RELEVANCE_TIMEOUT_S` | call timeouts (raise for reasoning-ON bulk work) |
|
|
242
|
+
| `RAG_MODEL_DEADLINE_S` | total wall-clock limit for one model call across its retries (default: follows `RAG_STRUCTURED_TIMEOUT_S`, never under 180 s) |
|
|
229
243
|
| `RAG_SPACY_MODEL` | the spaCy model name for the optional NER extra |
|
|
230
244
|
| `RAG_MODELS_DIR` | the models root every trained classifier loads its weights from (default: the engine checkout's `data/models` when it exists, else `./data/models`); fill it with `scripts/fetch_reference_models.py` for the reference pack |
|
|
231
245
|
| `EMBED_DEVICE` / `RAG_SETFIT_DEVICE` / `RAG_SETFIT_CLAUSE_DIR` / `RAG_SETFIT_THRESHOLD` / `RAG_SETFIT_TOPK` | embedder / classifier device + fleet knobs (`RAG_SETFIT_CLAUSE_DIR` overrides `<models root>/setfit_clause`) |
|