sable-sphynx 0.7.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. sable_sphynx-0.7.0.dev0/.gitattributes +41 -0
  2. sable_sphynx-0.7.0.dev0/.github/workflows/publish-pypi.yml +211 -0
  3. sable_sphynx-0.7.0.dev0/.github/workflows/rag-papers.yml +42 -0
  4. sable_sphynx-0.7.0.dev0/.github/workflows/sdk-0-5-release.yml +159 -0
  5. sable_sphynx-0.7.0.dev0/.github/workflows/sdk-candidate.yml +219 -0
  6. sable_sphynx-0.7.0.dev0/.github/workflows/sdk-pilot-smoke.yml +124 -0
  7. sable_sphynx-0.7.0.dev0/.github/workflows/sdk-release-smoke.yml +97 -0
  8. sable_sphynx-0.7.0.dev0/.github/workflows/sdk-research-parity.yml +133 -0
  9. sable_sphynx-0.7.0.dev0/.github/workflows/sdk-stable-release.yml +153 -0
  10. sable_sphynx-0.7.0.dev0/.github/workflows/speech-benchmarks.yml +41 -0
  11. sable_sphynx-0.7.0.dev0/.github/workflows/unreleased-inputs.yml +38 -0
  12. sable_sphynx-0.7.0.dev0/.github/workflows/unreleased-speech.yml +34 -0
  13. sable_sphynx-0.7.0.dev0/.github/workflows/unreleased-tts-execution.yml +28 -0
  14. sable_sphynx-0.7.0.dev0/MANIFEST.in +432 -0
  15. sable_sphynx-0.7.0.dev0/PKG-INFO +152 -0
  16. sable_sphynx-0.7.0.dev0/README.md +140 -0
  17. sable_sphynx-0.7.0.dev0/contracts/evals/definition.v1.schema.json +465 -0
  18. sable_sphynx-0.7.0.dev0/contracts/evals/definitions.v1.json +529 -0
  19. sable_sphynx-0.7.0.dev0/contracts/evals/invocation.v1.schema.json +227 -0
  20. sable_sphynx-0.7.0.dev0/docs/README.md +71 -0
  21. sable_sphynx-0.7.0.dev0/docs/advanced-workflows.md +304 -0
  22. sable_sphynx-0.7.0.dev0/docs/analytical-access.md +98 -0
  23. sable_sphynx-0.7.0.dev0/docs/assessment-selection.md +63 -0
  24. sable_sphynx-0.7.0.dev0/docs/audit-access.md +79 -0
  25. sable_sphynx-0.7.0.dev0/docs/audit-contracts.md +32 -0
  26. sable_sphynx-0.7.0.dev0/docs/authoring-evaluations.md +83 -0
  27. sable_sphynx-0.7.0.dev0/docs/beginner-quickstart.md +158 -0
  28. sable_sphynx-0.7.0.dev0/docs/candidate/content.v1.json +773 -0
  29. sable_sphynx-0.7.0.dev0/docs/comparison-views.md +40 -0
  30. sable_sphynx-0.7.0.dev0/docs/configurable-evaluations.md +336 -0
  31. sable_sphynx-0.7.0.dev0/docs/decision-policies.md +115 -0
  32. sable_sphynx-0.7.0.dev0/docs/documentation-release-workflow.md +365 -0
  33. sable_sphynx-0.7.0.dev0/docs/engineering-capabilities.md +412 -0
  34. sable_sphynx-0.7.0.dev0/docs/evaluation-intake-matrix.md +116 -0
  35. sable_sphynx-0.7.0.dev0/docs/evaluator-bindings.md +113 -0
  36. sable_sphynx-0.7.0.dev0/docs/explorations.md +21 -0
  37. sable_sphynx-0.7.0.dev0/docs/external-pilot.md +171 -0
  38. sable_sphynx-0.7.0.dev0/docs/general-evaluation-contracts.md +102 -0
  39. sable_sphynx-0.7.0.dev0/docs/hosted-control-plane.md +419 -0
  40. sable_sphynx-0.7.0.dev0/docs/metric-views.md +149 -0
  41. sable_sphynx-0.7.0.dev0/docs/next-reflex-benchmarks.md +111 -0
  42. sable_sphynx-0.7.0.dev0/docs/pipeline-full-rag.md +264 -0
  43. sable_sphynx-0.7.0.dev0/docs/pr-evaluations.md +179 -0
  44. sable_sphynx-0.7.0.dev0/docs/public/catalog.v1.json +3403 -0
  45. sable_sphynx-0.7.0.dev0/docs/public/content.v1.json +7341 -0
  46. sable_sphynx-0.7.0.dev0/docs/public/reference.v1.json +6993 -0
  47. sable_sphynx-0.7.0.dev0/docs/public/release.v1.json +18 -0
  48. sable_sphynx-0.7.0.dev0/docs/public/source-contract.v1.json +1 -0
  49. sable_sphynx-0.7.0.dev0/docs/public-reranking-v1.md +163 -0
  50. sable_sphynx-0.7.0.dev0/docs/pydantic-inspired-sdk-improvements.md +453 -0
  51. sable_sphynx-0.7.0.dev0/docs/pypi-release.md +53 -0
  52. sable_sphynx-0.7.0.dev0/docs/question-robustness-pilot.md +161 -0
  53. sable_sphynx-0.7.0.dev0/docs/question-robustness-sdk.md +194 -0
  54. sable_sphynx-0.7.0.dev0/docs/question-robustness.md +196 -0
  55. sable_sphynx-0.7.0.dev0/docs/rag-diagnostics.md +137 -0
  56. sable_sphynx-0.7.0.dev0/docs/rag-invocation-v1.md +324 -0
  57. sable_sphynx-0.7.0.dev0/docs/rag-paper-methods.md +233 -0
  58. sable_sphynx-0.7.0.dev0/docs/rag-paper-verification-20261018.md +45 -0
  59. sable_sphynx-0.7.0.dev0/docs/reflex-candidate-ownership.md +156 -0
  60. sable_sphynx-0.7.0.dev0/docs/reflex-model-pilot.md +187 -0
  61. sable_sphynx-0.7.0.dev0/docs/release-0.4.0.md +34 -0
  62. sable_sphynx-0.7.0.dev0/docs/release-0.5.0.md +14 -0
  63. sable_sphynx-0.7.0.dev0/docs/rerank-families.md +182 -0
  64. sable_sphynx-0.7.0.dev0/docs/research-parity.md +177 -0
  65. sable_sphynx-0.7.0.dev0/docs/score-reliability.md +136 -0
  66. sable_sphynx-0.7.0.dev0/docs/sdk-concepts-and-naming.md +312 -0
  67. sable_sphynx-0.7.0.dev0/docs/sdk-developer-experience.md +238 -0
  68. sable_sphynx-0.7.0.dev0/docs/shared-workflow.md +222 -0
  69. sable_sphynx-0.7.0.dev0/docs/speech-complete-coverage.md +243 -0
  70. sable_sphynx-0.7.0.dev0/docs/speech-kido-benchmarks.md +193 -0
  71. sable_sphynx-0.7.0.dev0/docs/speech-saved-evidence.md +169 -0
  72. sable_sphynx-0.7.0.dev0/docs/speech-tts-execution.md +169 -0
  73. sable_sphynx-0.7.0.dev0/docs/terminal-experiments.md +119 -0
  74. sable_sphynx-0.7.0.dev0/docs/verification/kido-speech-benchmarks-20261019.json +75 -0
  75. sable_sphynx-0.7.0.dev0/docs/verification/kido-speech-complete-20261019.json +53 -0
  76. sable_sphynx-0.7.0.dev0/docs/vscode-tutorial.md +139 -0
  77. sable_sphynx-0.7.0.dev0/examples/beginner_quickstart.py +25 -0
  78. sable_sphynx-0.7.0.dev0/examples/dense_candidate.py +29 -0
  79. sable_sphynx-0.7.0.dev0/examples/describe_evaluations.py +42 -0
  80. sable_sphynx-0.7.0.dev0/examples/lexical_candidate.py +40 -0
  81. sable_sphynx-0.7.0.dev0/examples/public_starter/candidate.py +48 -0
  82. sable_sphynx-0.7.0.dev0/examples/public_starter/experiment.py +172 -0
  83. sable_sphynx-0.7.0.dev0/examples/rag_papers.py +35 -0
  84. sable_sphynx-0.7.0.dev0/examples/run_custom_evaluation.py +29 -0
  85. sable_sphynx-0.7.0.dev0/examples/run_lifecycle.py +114 -0
  86. sable_sphynx-0.7.0.dev0/examples/run_public_rerank.py +28 -0
  87. sable_sphynx-0.7.0.dev0/examples/run_question_robustness.py +54 -0
  88. sable_sphynx-0.7.0.dev0/examples/run_suite_workflow.py +57 -0
  89. sable_sphynx-0.7.0.dev0/examples/starter/candidate.py +48 -0
  90. sable_sphynx-0.7.0.dev0/examples/starter/experiment.py +158 -0
  91. sable_sphynx-0.7.0.dev0/pyproject.toml +23 -0
  92. sable_sphynx-0.7.0.dev0/setup.cfg +4 -0
  93. sable_sphynx-0.7.0.dev0/src/sable_sphynx.egg-info/PKG-INFO +152 -0
  94. sable_sphynx-0.7.0.dev0/src/sable_sphynx.egg-info/SOURCES.txt +416 -0
  95. sable_sphynx-0.7.0.dev0/src/sable_sphynx.egg-info/dependency_links.txt +1 -0
  96. sable_sphynx-0.7.0.dev0/src/sable_sphynx.egg-info/requires.txt +6 -0
  97. sable_sphynx-0.7.0.dev0/src/sable_sphynx.egg-info/top_level.txt +1 -0
  98. sable_sphynx-0.7.0.dev0/src/sphynx/__init__.py +469 -0
  99. sable_sphynx-0.7.0.dev0/src/sphynx/__init__.pyi +376 -0
  100. sable_sphynx-0.7.0.dev0/src/sphynx/_analytical_client.py +77 -0
  101. sable_sphynx-0.7.0.dev0/src/sphynx/_analytical_values.py +252 -0
  102. sable_sphynx-0.7.0.dev0/src/sphynx/_audit_client.py +173 -0
  103. sable_sphynx-0.7.0.dev0/src/sphynx/_comparison_adapters.py +113 -0
  104. sable_sphynx-0.7.0.dev0/src/sphynx/_componentized_full_rag.py +34 -0
  105. sable_sphynx-0.7.0.dev0/src/sphynx/_composed_pipeline.py +109 -0
  106. sable_sphynx-0.7.0.dev0/src/sphynx/_full_rag_grading.py +218 -0
  107. sable_sphynx-0.7.0.dev0/src/sphynx/_full_rag_trace.py +221 -0
  108. sable_sphynx-0.7.0.dev0/src/sphynx/_local_eval.py +268 -0
  109. sable_sphynx-0.7.0.dev0/src/sphynx/_pipeline_core.py +243 -0
  110. sable_sphynx-0.7.0.dev0/src/sphynx/_pr_client.py +237 -0
  111. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_calibration.py +285 -0
  112. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_catalog.py +39 -0
  113. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_common.py +26 -0
  114. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_contracts.py +186 -0
  115. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_engine.py +243 -0
  116. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_importers.py +242 -0
  117. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_ranking.py +81 -0
  118. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_diagnostics_semantic.py +325 -0
  119. sable_sphynx-0.7.0.dev0/src/sphynx/_rag_ranking.py +149 -0
  120. sable_sphynx-0.7.0.dev0/src/sphynx/_speech_benchmark_scoring.py +140 -0
  121. sable_sphynx-0.7.0.dev0/src/sphynx/_speech_benchmark_sources.py +275 -0
  122. sable_sphynx-0.7.0.dev0/src/sphynx/_speech_complete_scoring.py +218 -0
  123. sable_sphynx-0.7.0.dev0/src/sphynx/_speech_complete_source.py +118 -0
  124. sable_sphynx-0.7.0.dev0/src/sphynx/_speech_kido.py +294 -0
  125. sable_sphynx-0.7.0.dev0/src/sphynx/_speech_scoring.py +77 -0
  126. sable_sphynx-0.7.0.dev0/src/sphynx/_track_capture.py +213 -0
  127. sable_sphynx-0.7.0.dev0/src/sphynx/analytical_views.py +515 -0
  128. sable_sphynx-0.7.0.dev0/src/sphynx/assessment_contracts.py +378 -0
  129. sable_sphynx-0.7.0.dev0/src/sphynx/assessment_selection.py +57 -0
  130. sable_sphynx-0.7.0.dev0/src/sphynx/audit_access.py +245 -0
  131. sable_sphynx-0.7.0.dev0/src/sphynx/audit_contracts.py +204 -0
  132. sable_sphynx-0.7.0.dev0/src/sphynx/audit_requests.py +180 -0
  133. sable_sphynx-0.7.0.dev0/src/sphynx/authoring.py +188 -0
  134. sable_sphynx-0.7.0.dev0/src/sphynx/benchmarks.py +568 -0
  135. sable_sphynx-0.7.0.dev0/src/sphynx/candidates.py +62 -0
  136. sable_sphynx-0.7.0.dev0/src/sphynx/catalog.py +272 -0
  137. sable_sphynx-0.7.0.dev0/src/sphynx/chunking.py +372 -0
  138. sable_sphynx-0.7.0.dev0/src/sphynx/clickhouse_reader.py +169 -0
  139. sable_sphynx-0.7.0.dev0/src/sphynx/client.py +486 -0
  140. sable_sphynx-0.7.0.dev0/src/sphynx/comparison_core.py +149 -0
  141. sable_sphynx-0.7.0.dev0/src/sphynx/comparison_views.py +223 -0
  142. sable_sphynx-0.7.0.dev0/src/sphynx/components.py +1661 -0
  143. sable_sphynx-0.7.0.dev0/src/sphynx/contracts.py +514 -0
  144. sable_sphynx-0.7.0.dev0/src/sphynx/customer_rerank.py +299 -0
  145. sable_sphynx-0.7.0.dev0/src/sphynx/customer_retrieval.py +146 -0
  146. sable_sphynx-0.7.0.dev0/src/sphynx/data/benchmark-releases.v1.json +164 -0
  147. sable_sphynx-0.7.0.dev0/src/sphynx/data/public-benchmark-release.v1.json +354 -0
  148. sable_sphynx-0.7.0.dev0/src/sphynx/data/rag-diagnostics-synthetic.v1.json +6982 -0
  149. sable_sphynx-0.7.0.dev0/src/sphynx/data/rag-paper-references.v1.json +176 -0
  150. sable_sphynx-0.7.0.dev0/src/sphynx/data/rag-paper-schemas.v1.json +1069 -0
  151. sable_sphynx-0.7.0.dev0/src/sphynx/data/rag-rerank-v1.json +507 -0
  152. sable_sphynx-0.7.0.dev0/src/sphynx/dataset_catalog_data.py +1214 -0
  153. sable_sphynx-0.7.0.dev0/src/sphynx/dataset_readiness.py +138 -0
  154. sable_sphynx-0.7.0.dev0/src/sphynx/dataset_v3.py +999 -0
  155. sable_sphynx-0.7.0.dev0/src/sphynx/demo.py +130 -0
  156. sable_sphynx-0.7.0.dev0/src/sphynx/demo_candidates/__init__.py +1 -0
  157. sable_sphynx-0.7.0.dev0/src/sphynx/demo_candidates/dense.py +11 -0
  158. sable_sphynx-0.7.0.dev0/src/sphynx/demo_candidates/lexical.py +21 -0
  159. sable_sphynx-0.7.0.dev0/src/sphynx/diagnostics.py +207 -0
  160. sable_sphynx-0.7.0.dev0/src/sphynx/documentation.py +737 -0
  161. sable_sphynx-0.7.0.dev0/src/sphynx/documentation_candidate.py +939 -0
  162. sable_sphynx-0.7.0.dev0/src/sphynx/evals.py +538 -0
  163. sable_sphynx-0.7.0.dev0/src/sphynx/evaluation_protocols.py +124 -0
  164. sable_sphynx-0.7.0.dev0/src/sphynx/evaluator_bindings.py +370 -0
  165. sable_sphynx-0.7.0.dev0/src/sphynx/evidence.py +352 -0
  166. sable_sphynx-0.7.0.dev0/src/sphynx/execution_capabilities.py +109 -0
  167. sable_sphynx-0.7.0.dev0/src/sphynx/fast_search.py +285 -0
  168. sable_sphynx-0.7.0.dev0/src/sphynx/full_rag.py +341 -0
  169. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/__init__.py +18 -0
  170. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/benchmark_intake.py +218 -0
  171. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/contracts.py +361 -0
  172. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/model_admission.py +130 -0
  173. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/model_artifacts.py +298 -0
  174. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/model_contracts.py +63 -0
  175. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/model_gcs.py +181 -0
  176. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/model_history.py +84 -0
  177. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/model_session.py +233 -0
  178. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/public_suite.py +74 -0
  179. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/registry.py +97 -0
  180. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/revisions.py +126 -0
  181. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/sandbox.py +105 -0
  182. sable_sphynx-0.7.0.dev0/src/sphynx/hosted/submission.py +287 -0
  183. sable_sphynx-0.7.0.dev0/src/sphynx/hosted_workflow.py +451 -0
  184. sable_sphynx-0.7.0.dev0/src/sphynx/http_transport.py +86 -0
  185. sable_sphynx-0.7.0.dev0/src/sphynx/integrated_rag.py +352 -0
  186. sable_sphynx-0.7.0.dev0/src/sphynx/integrated_workflow.py +552 -0
  187. sable_sphynx-0.7.0.dev0/src/sphynx/integration_contracts.py +474 -0
  188. sable_sphynx-0.7.0.dev0/src/sphynx/invocation.py +791 -0
  189. sable_sphynx-0.7.0.dev0/src/sphynx/invocation_candidates.py +392 -0
  190. sable_sphynx-0.7.0.dev0/src/sphynx/invocation_catalog_data.py +40 -0
  191. sable_sphynx-0.7.0.dev0/src/sphynx/learned_catalog_data.py +30 -0
  192. sable_sphynx-0.7.0.dev0/src/sphynx/learned_rerank.py +267 -0
  193. sable_sphynx-0.7.0.dev0/src/sphynx/legacy_full_rag.py +67 -0
  194. sable_sphynx-0.7.0.dev0/src/sphynx/lifecycle.py +885 -0
  195. sable_sphynx-0.7.0.dev0/src/sphynx/lifecycle_workflow.py +490 -0
  196. sable_sphynx-0.7.0.dev0/src/sphynx/metric_views.py +474 -0
  197. sable_sphynx-0.7.0.dev0/src/sphynx/metrics.py +282 -0
  198. sable_sphynx-0.7.0.dev0/src/sphynx/model_adapters.py +438 -0
  199. sable_sphynx-0.7.0.dev0/src/sphynx/model_catalog_data.py +30 -0
  200. sable_sphynx-0.7.0.dev0/src/sphynx/official_benchmarks.py +385 -0
  201. sable_sphynx-0.7.0.dev0/src/sphynx/packs.py +258 -0
  202. sable_sphynx-0.7.0.dev0/src/sphynx/pipeline.py +313 -0
  203. sable_sphynx-0.7.0.dev0/src/sphynx/pipeline_workflow.py +551 -0
  204. sable_sphynx-0.7.0.dev0/src/sphynx/pr_evaluations.py +560 -0
  205. sable_sphynx-0.7.0.dev0/src/sphynx/progress.py +89 -0
  206. sable_sphynx-0.7.0.dev0/src/sphynx/public_bundle.py +173 -0
  207. sable_sphynx-0.7.0.dev0/src/sphynx/public_eval.py +62 -0
  208. sable_sphynx-0.7.0.dev0/src/sphynx/public_rerank.py +355 -0
  209. sable_sphynx-0.7.0.dev0/src/sphynx/py.typed +0 -0
  210. sable_sphynx-0.7.0.dev0/src/sphynx/pytest_plugin.py +62 -0
  211. sable_sphynx-0.7.0.dev0/src/sphynx/question_robustness.py +437 -0
  212. sable_sphynx-0.7.0.dev0/src/sphynx/rag.py +329 -0
  213. sable_sphynx-0.7.0.dev0/src/sphynx/rag_diagnostics.py +309 -0
  214. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/__init__.py +29 -0
  215. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/__main__.py +45 -0
  216. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/candidates.py +19 -0
  217. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/contracts.py +282 -0
  218. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/datasets.py +291 -0
  219. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/experiments.py +116 -0
  220. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/judges.py +308 -0
  221. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/registry.py +33 -0
  222. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/runner.py +176 -0
  223. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/sable.py +135 -0
  224. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/schemas.py +12 -0
  225. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/scoring.py +249 -0
  226. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/semantic.py +288 -0
  227. sable_sphynx-0.7.0.dev0/src/sphynx/rag_papers/trec.py +80 -0
  228. sable_sphynx-0.7.0.dev0/src/sphynx/recorded_scores.py +352 -0
  229. sable_sphynx-0.7.0.dev0/src/sphynx/records.py +124 -0
  230. sable_sphynx-0.7.0.dev0/src/sphynx/reflex_traces.py +193 -0
  231. sable_sphynx-0.7.0.dev0/src/sphynx/report_rendering.py +71 -0
  232. sable_sphynx-0.7.0.dev0/src/sphynx/rerank_family_contracts.py +150 -0
  233. sable_sphynx-0.7.0.dev0/src/sphynx/rerank_workflow.py +424 -0
  234. sable_sphynx-0.7.0.dev0/src/sphynx/research_candidate.py +190 -0
  235. sable_sphynx-0.7.0.dev0/src/sphynx/results.py +852 -0
  236. sable_sphynx-0.7.0.dev0/src/sphynx/retrieval.py +750 -0
  237. sable_sphynx-0.7.0.dev0/src/sphynx/retrieval_candidates.py +295 -0
  238. sable_sphynx-0.7.0.dev0/src/sphynx/retrieval_catalog_data.py +19 -0
  239. sable_sphynx-0.7.0.dev0/src/sphynx/retrieval_recordings.py +125 -0
  240. sable_sphynx-0.7.0.dev0/src/sphynx/reviewer_audit.py +266 -0
  241. sable_sphynx-0.7.0.dev0/src/sphynx/routing_policies.py +375 -0
  242. sable_sphynx-0.7.0.dev0/src/sphynx/runner.py +544 -0
  243. sable_sphynx-0.7.0.dev0/src/sphynx/sable_rerank.py +489 -0
  244. sable_sphynx-0.7.0.dev0/src/sphynx/score_reliability.py +393 -0
  245. sable_sphynx-0.7.0.dev0/src/sphynx/speech_benchmarks.py +204 -0
  246. sable_sphynx-0.7.0.dev0/src/sphynx/speech_campaigns.py +378 -0
  247. sable_sphynx-0.7.0.dev0/src/sphynx/speech_complete.py +236 -0
  248. sable_sphynx-0.7.0.dev0/src/sphynx/speech_contracts.py +225 -0
  249. sable_sphynx-0.7.0.dev0/src/sphynx/speech_evidence.py +429 -0
  250. sable_sphynx-0.7.0.dev0/src/sphynx/speech_listening.py +115 -0
  251. sable_sphynx-0.7.0.dev0/src/sphynx/speech_multilingual.py +71 -0
  252. sable_sphynx-0.7.0.dev0/src/sphynx/speech_tts.py +479 -0
  253. sable_sphynx-0.7.0.dev0/src/sphynx/sql/001_sync_v1.sql +30 -0
  254. sable_sphynx-0.7.0.dev0/src/sphynx/stage_contracts.py +199 -0
  255. sable_sphynx-0.7.0.dev0/src/sphynx/statistical_catalog_data.py +53 -0
  256. sable_sphynx-0.7.0.dev0/src/sphynx/statistical_rerank.py +232 -0
  257. sable_sphynx-0.7.0.dev0/src/sphynx/sync.py +797 -0
  258. sable_sphynx-0.7.0.dev0/src/sphynx/workbench.py +378 -0
  259. sable_sphynx-0.7.0.dev0/src/sphynx/workbench_catalog_data.py +13 -0
  260. sable_sphynx-0.7.0.dev0/src/sphynx/workbench_tracks.py +78 -0
  261. sable_sphynx-0.7.0.dev0/src/sphynx/workflow_async.py +197 -0
  262. sable_sphynx-0.7.0.dev0/src/sphynx/workflow_contracts.py +594 -0
  263. sable_sphynx-0.7.0.dev0/src/sphynx/workflow_decisions.py +211 -0
  264. sable_sphynx-0.7.0.dev0/src/sphynx/workflow_defaults.py +16 -0
  265. sable_sphynx-0.7.0.dev0/src/sphynx/workflow_extensions.py +212 -0
  266. sable_sphynx-0.7.0.dev0/src/sphynx/workflow_registry.py +513 -0
  267. sable_sphynx-0.7.0.dev0/src/sphynx/workflows.py +792 -0
  268. sable_sphynx-0.7.0.dev0/tests/__init__.py +1 -0
  269. sable_sphynx-0.7.0.dev0/tests/data/documentation-0.5.0-source.zip +0 -0
  270. sable_sphynx-0.7.0.dev0/tests/data/eval-contract-vectors.v1.json +266 -0
  271. sable_sphynx-0.7.0.dev0/tests/data/learned-reference.v1.json +295 -0
  272. sable_sphynx-0.7.0.dev0/tests/data/minilm-reference.v1.json +458 -0
  273. sable_sphynx-0.7.0.dev0/tests/data/rag-diagnostics/dataset.json +6982 -0
  274. sable_sphynx-0.7.0.dev0/tests/data/rag-diagnostics/judge-audit.json +35 -0
  275. sable_sphynx-0.7.0.dev0/tests/data/rag-pipeline-dataset.fixture.v1.json +142 -0
  276. sable_sphynx-0.7.0.dev0/tests/data/rag-source-parity.v1.json +2025 -0
  277. sable_sphynx-0.7.0.dev0/tests/data/score-reliability-source.v1.json +910 -0
  278. sable_sphynx-0.7.0.dev0/tests/data/statistical-reference.v1.json +331 -0
  279. sable_sphynx-0.7.0.dev0/tests/documentation_fixtures.py +77 -0
  280. sable_sphynx-0.7.0.dev0/tests/fixtures/analytical/SOURCE.json +14 -0
  281. sable_sphynx-0.7.0.dev0/tests/fixtures/analytical/board-page-fixture.json +214 -0
  282. sable_sphynx-0.7.0.dev0/tests/fixtures/analytical/projection-page-fixture.json +150 -0
  283. sable_sphynx-0.7.0.dev0/tests/fixtures/pr-evaluation-v1.json +350 -0
  284. sable_sphynx-0.7.0.dev0/tests/fixtures/pr-service-v1.json +843 -0
  285. sable_sphynx-0.7.0.dev0/tests/test_analytical_client.py +112 -0
  286. sable_sphynx-0.7.0.dev0/tests/test_analytical_views.py +154 -0
  287. sable_sphynx-0.7.0.dev0/tests/test_assessment_contracts.py +169 -0
  288. sable_sphynx-0.7.0.dev0/tests/test_assessment_selection.py +88 -0
  289. sable_sphynx-0.7.0.dev0/tests/test_audit_access.py +259 -0
  290. sable_sphynx-0.7.0.dev0/tests/test_audit_contracts.py +94 -0
  291. sable_sphynx-0.7.0.dev0/tests/test_authoring.py +150 -0
  292. sable_sphynx-0.7.0.dev0/tests/test_candidates.py +425 -0
  293. sable_sphynx-0.7.0.dev0/tests/test_chunking.py +216 -0
  294. sable_sphynx-0.7.0.dev0/tests/test_clickhouse_reader.py +143 -0
  295. sable_sphynx-0.7.0.dev0/tests/test_client_deadlines.py +62 -0
  296. sable_sphynx-0.7.0.dev0/tests/test_comparison_core.py +196 -0
  297. sable_sphynx-0.7.0.dev0/tests/test_comparison_views.py +238 -0
  298. sable_sphynx-0.7.0.dev0/tests/test_components.py +278 -0
  299. sable_sphynx-0.7.0.dev0/tests/test_contracts.py +183 -0
  300. sable_sphynx-0.7.0.dev0/tests/test_control_client.py +190 -0
  301. sable_sphynx-0.7.0.dev0/tests/test_customer_rerank.py +135 -0
  302. sable_sphynx-0.7.0.dev0/tests/test_customer_retrieval.py +92 -0
  303. sable_sphynx-0.7.0.dev0/tests/test_dataset_catalog.py +38 -0
  304. sable_sphynx-0.7.0.dev0/tests/test_dataset_releases.py +167 -0
  305. sable_sphynx-0.7.0.dev0/tests/test_dataset_v3.py +186 -0
  306. sable_sphynx-0.7.0.dev0/tests/test_demo.py +123 -0
  307. sable_sphynx-0.7.0.dev0/tests/test_documentation.py +273 -0
  308. sable_sphynx-0.7.0.dev0/tests/test_documentation_candidate.py +460 -0
  309. sable_sphynx-0.7.0.dev0/tests/test_documentation_edits.py +128 -0
  310. sable_sphynx-0.7.0.dev0/tests/test_documentation_rag_diagnostics.py +40 -0
  311. sable_sphynx-0.7.0.dev0/tests/test_documentation_user_guide.py +168 -0
  312. sable_sphynx-0.7.0.dev0/tests/test_evals.py +278 -0
  313. sable_sphynx-0.7.0.dev0/tests/test_evaluator_binding_integration.py +251 -0
  314. sable_sphynx-0.7.0.dev0/tests/test_evaluator_bindings.py +196 -0
  315. sable_sphynx-0.7.0.dev0/tests/test_evaluator_context_integration.py +151 -0
  316. sable_sphynx-0.7.0.dev0/tests/test_external_rag_packs.py +300 -0
  317. sable_sphynx-0.7.0.dev0/tests/test_fast_search.py +173 -0
  318. sable_sphynx-0.7.0.dev0/tests/test_full_rag.py +157 -0
  319. sable_sphynx-0.7.0.dev0/tests/test_gcs_identity.py +115 -0
  320. sable_sphynx-0.7.0.dev0/tests/test_general_evaluation_contracts.py +211 -0
  321. sable_sphynx-0.7.0.dev0/tests/test_hosted_workflow.py +350 -0
  322. sable_sphynx-0.7.0.dev0/tests/test_http_transport.py +148 -0
  323. sable_sphynx-0.7.0.dev0/tests/test_integrated_rag.py +185 -0
  324. sable_sphynx-0.7.0.dev0/tests/test_integrated_workflow.py +465 -0
  325. sable_sphynx-0.7.0.dev0/tests/test_integration_contracts.py +263 -0
  326. sable_sphynx-0.7.0.dev0/tests/test_invocation.py +308 -0
  327. sable_sphynx-0.7.0.dev0/tests/test_invocation_candidates.py +385 -0
  328. sable_sphynx-0.7.0.dev0/tests/test_learned_rerank.py +109 -0
  329. sable_sphynx-0.7.0.dev0/tests/test_legacy_full_rag.py +41 -0
  330. sable_sphynx-0.7.0.dev0/tests/test_lifecycle.py +358 -0
  331. sable_sphynx-0.7.0.dev0/tests/test_lifecycle_workflow.py +236 -0
  332. sable_sphynx-0.7.0.dev0/tests/test_metric_views.py +279 -0
  333. sable_sphynx-0.7.0.dev0/tests/test_model_adapters.py +538 -0
  334. sable_sphynx-0.7.0.dev0/tests/test_official_benchmarks.py +142 -0
  335. sable_sphynx-0.7.0.dev0/tests/test_packaged_extensions.py +209 -0
  336. sable_sphynx-0.7.0.dev0/tests/test_pipeline.py +148 -0
  337. sable_sphynx-0.7.0.dev0/tests/test_pipeline_workflow.py +200 -0
  338. sable_sphynx-0.7.0.dev0/tests/test_pr_client.py +240 -0
  339. sable_sphynx-0.7.0.dev0/tests/test_pr_evaluations.py +181 -0
  340. sable_sphynx-0.7.0.dev0/tests/test_public_bundle.py +132 -0
  341. sable_sphynx-0.7.0.dev0/tests/test_public_release_parity.py +83 -0
  342. sable_sphynx-0.7.0.dev0/tests/test_pytest_integration.py +134 -0
  343. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_calibration.py +209 -0
  344. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_cross_review.py +122 -0
  345. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_engine.py +129 -0
  346. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_fixtures.py +97 -0
  347. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_importers.py +219 -0
  348. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_sdk.py +167 -0
  349. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_semantic.py +300 -0
  350. sable_sphynx-0.7.0.dev0/tests/test_rag_diagnostics_semantic_integration.py +232 -0
  351. sable_sphynx-0.7.0.dev0/tests/test_rag_pack.py +289 -0
  352. sable_sphynx-0.7.0.dev0/tests/test_rag_paper_connections.py +131 -0
  353. sable_sphynx-0.7.0.dev0/tests/test_rag_papers.py +334 -0
  354. sable_sphynx-0.7.0.dev0/tests/test_rag_source_parity.py +30 -0
  355. sable_sphynx-0.7.0.dev0/tests/test_recorded_scores.py +40 -0
  356. sable_sphynx-0.7.0.dev0/tests/test_reflex_candidate_ownership.py +95 -0
  357. sable_sphynx-0.7.0.dev0/tests/test_reflex_minilm_pilot.py +262 -0
  358. sable_sphynx-0.7.0.dev0/tests/test_reflex_traces.py +120 -0
  359. sable_sphynx-0.7.0.dev0/tests/test_rerank_family_catalog.py +31 -0
  360. sable_sphynx-0.7.0.dev0/tests/test_research_candidate.py +58 -0
  361. sable_sphynx-0.7.0.dev0/tests/test_research_candidate_review.py +83 -0
  362. sable_sphynx-0.7.0.dev0/tests/test_results.py +276 -0
  363. sable_sphynx-0.7.0.dev0/tests/test_retrieval.py +303 -0
  364. sable_sphynx-0.7.0.dev0/tests/test_retrieval_adversarial.py +114 -0
  365. sable_sphynx-0.7.0.dev0/tests/test_retrieval_candidates.py +136 -0
  366. sable_sphynx-0.7.0.dev0/tests/test_retrieval_metric_views.py +61 -0
  367. sable_sphynx-0.7.0.dev0/tests/test_reviewer_audit.py +193 -0
  368. sable_sphynx-0.7.0.dev0/tests/test_runner.py +342 -0
  369. sable_sphynx-0.7.0.dev0/tests/test_sable_rerank.py +126 -0
  370. sable_sphynx-0.7.0.dev0/tests/test_score_reliability.py +162 -0
  371. sable_sphynx-0.7.0.dev0/tests/test_sdk_experience.py +275 -0
  372. sable_sphynx-0.7.0.dev0/tests/test_speech_benchmarks.py +256 -0
  373. sable_sphynx-0.7.0.dev0/tests/test_speech_campaigns.py +145 -0
  374. sable_sphynx-0.7.0.dev0/tests/test_speech_complete.py +147 -0
  375. sable_sphynx-0.7.0.dev0/tests/test_speech_evidence.py +340 -0
  376. sable_sphynx-0.7.0.dev0/tests/test_speech_listening.py +49 -0
  377. sable_sphynx-0.7.0.dev0/tests/test_speech_multilingual.py +48 -0
  378. sable_sphynx-0.7.0.dev0/tests/test_speech_tts.py +271 -0
  379. sable_sphynx-0.7.0.dev0/tests/test_speech_verification.py +27 -0
  380. sable_sphynx-0.7.0.dev0/tests/test_stage_contracts.py +114 -0
  381. sable_sphynx-0.7.0.dev0/tests/test_statistical_rerank.py +106 -0
  382. sable_sphynx-0.7.0.dev0/tests/test_sync.py +417 -0
  383. sable_sphynx-0.7.0.dev0/tests/test_workbench_tracks.py +84 -0
  384. sable_sphynx-0.7.0.dev0/tests/test_workflow_async.py +198 -0
  385. sable_sphynx-0.7.0.dev0/tests/test_workflow_compatibility.py +186 -0
  386. sable_sphynx-0.7.0.dev0/tests/test_workflow_contracts.py +569 -0
  387. sable_sphynx-0.7.0.dev0/tests/test_workflow_decisions.py +179 -0
  388. sable_sphynx-0.7.0.dev0/tests/test_workflow_extensions.py +408 -0
  389. sable_sphynx-0.7.0.dev0/tests/test_workflows.py +227 -0
  390. sable_sphynx-0.7.0.dev0/tests/typing/sdk_workflows.py +137 -0
  391. sable_sphynx-0.7.0.dev0/tools/apply_documentation_edits.py +103 -0
  392. sable_sphynx-0.7.0.dev0/tools/check_public_types.py +59 -0
  393. sable_sphynx-0.7.0.dev0/tools/check_sdk_consistency.py +247 -0
  394. sable_sphynx-0.7.0.dev0/tools/export_documentation.py +7 -0
  395. sable_sphynx-0.7.0.dev0/tools/hosted/run_reflex_minilm_pilot.py +235 -0
  396. sable_sphynx-0.7.0.dev0/tools/integration/build_paper_schemas.py +54 -0
  397. sable_sphynx-0.7.0.dev0/tools/integration/build_rag_diagnostics_fixtures.py +268 -0
  398. sable_sphynx-0.7.0.dev0/tools/integration/check_readonly_clickhouse.py +109 -0
  399. sable_sphynx-0.7.0.dev0/tools/integration/import_rag_diagnostics_beir.py +40 -0
  400. sable_sphynx-0.7.0.dev0/tools/integration/installed_research_smoke.py +53 -0
  401. sable_sphynx-0.7.0.dev0/tools/integration/run_installed_050_tests.py +24 -0
  402. sable_sphynx-0.7.0.dev0/tools/integration/run_installed_rag_tests.py +39 -0
  403. sable_sphynx-0.7.0.dev0/tools/integration/run_installed_research_tests.py +247 -0
  404. sable_sphynx-0.7.0.dev0/tools/integration/validate_paper_methods.py +45 -0
  405. sable_sphynx-0.7.0.dev0/tools/integration/validate_sampling_uncertainty.py +97 -0
  406. sable_sphynx-0.7.0.dev0/tools/integration/verify_kido_benchmarks.py +66 -0
  407. sable_sphynx-0.7.0.dev0/tools/integration/verify_kido_complete.py +100 -0
  408. sable_sphynx-0.7.0.dev0/tools/integration/verify_reflex_candidate_ownership.py +297 -0
  409. sable_sphynx-0.7.0.dev0/tools/integration/verify_rerank_family_parity.py +162 -0
  410. sable_sphynx-0.7.0.dev0/tools/integration/verify_saved_speech.py +90 -0
  411. sable_sphynx-0.7.0.dev0/tools/release/build_release.py +246 -0
  412. sable_sphynx-0.7.0.dev0/tools/release/check_release.py +320 -0
  413. sable_sphynx-0.7.0.dev0/tools/release/installed_smoke.py +256 -0
  414. sable_sphynx-0.7.0.dev0/tools/release/prepare_publication.py +47 -0
  415. sable_sphynx-0.7.0.dev0/tools/release/run_regressions.py +298 -0
  416. sable_sphynx-0.7.0.dev0/tools/release/source_allowlist.json +1666 -0
  417. sable_sphynx-0.7.0.dev0/tools/release/summarize_release.py +77 -0
  418. sable_sphynx-0.7.0.dev0/tools/release/test_release_checks.py +224 -0
@@ -0,0 +1,41 @@
1
+ # Retain exact reviewed release bytes on every runner.
2
+ dist/rag-parity-0.4.0.dev5-verified/** -text
3
+
4
+ dist/sable-sphynx-0.4.0/** -text
5
+
6
+ # New paper protocols use exact LF bytes for portable implementation receipts.
7
+ src/sphynx/rag_papers/*.py text eol=lf
8
+ src/sphynx/data/rag-paper-*.json text eol=lf
9
+ tests/test_rag_paper*.py text eol=lf
10
+ tools/integration/*paper*.py text eol=lf
11
+ examples/rag_papers.py text eol=lf
12
+ docs/rag-paper-methods.md text eol=lf
13
+ docs/explorations.md text eol=lf
14
+ .github/workflows/rag-papers.yml text eol=lf
15
+
16
+ # Immutable 0.5.0 release bytes.
17
+ dist/sable-sphynx-0.5.0/** -text
18
+
19
+ # Family catalogs pin exact LF implementation bytes across every checkout.
20
+ src/sphynx/statistical_rerank.py text eol=lf
21
+ src/sphynx/learned_rerank.py text eol=lf
22
+ src/sphynx/rerank_family_contracts.py text eol=lf
23
+
24
+ # Native analytical response receipts pin exact LF fixture bytes.
25
+ tests/fixtures/analytical/*.json text eol=lf
26
+
27
+ # Recovered private server files are bound byte for byte by bridge/SOURCE.json.
28
+ services/private-control-plane/bridge/src/** -text
29
+
30
+ # Linux startup and frozen probe source retain portable LF bytes.
31
+ services/private-control-plane/staging/*.sh text eol=lf
32
+ services/private-control-plane/staging/candidate/*.py text eol=lf
33
+
34
+ # First Sable preview publication; frozen reviewed distribution bytes.
35
+ dist/sable-sphynx-0.7.0.dev0/** -text
36
+
37
+ # Permanent Linux boot scripts preserve their reviewed bytes.
38
+ services/private-control-plane/permanent/*.sh text eol=lf
39
+
40
+ # Original server resource closure is bound by its own image/hash manifest.
41
+ services/private-control-plane/bridge/runtime-data/** -text
@@ -0,0 +1,211 @@
1
+ name: Sable Sphynx validate and publish
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ destination:
7
+ description: Validate only, or publish the approved public package
8
+ type: choice
9
+ options: [validate, pypi]
10
+ default: validate
11
+ required: true
12
+ approved_manifest_sha256:
13
+ description: Exact SHA256 of PUBLICATION.json from the reviewed packet (required for pypi)
14
+ type: string
15
+ required: false
16
+ confirmation:
17
+ description: For publication enter publish sable-sphynx 0.7.0.dev0
18
+ type: string
19
+ required: false
20
+ pull_request:
21
+ paths:
22
+ - dist/sable-sphynx-0.7.0.dev0/**
23
+ - tools/release/**
24
+ - .github/workflows/publish-pypi.yml
25
+ push:
26
+ branches: [main]
27
+ paths:
28
+ - dist/sable-sphynx-0.7.0.dev0/**
29
+ - tools/release/**
30
+ - .github/workflows/publish-pypi.yml
31
+
32
+ permissions:
33
+ contents: read
34
+
35
+ jobs:
36
+ installed:
37
+ name: ${{ matrix.slot }} approved bytes
38
+ runs-on: ${{ matrix.os }}
39
+ timeout-minutes: 20
40
+ strategy:
41
+ fail-fast: false
42
+ matrix:
43
+ include:
44
+ - {slot: windows-311, os: windows-latest, python: '3.11'}
45
+ - {slot: windows-312, os: windows-latest, python: '3.12'}
46
+ - {slot: windows-314, os: windows-latest, python: '3.14'}
47
+ - {slot: macos-311, os: macos-latest, python: '3.11'}
48
+ - {slot: macos-312, os: macos-latest, python: '3.12'}
49
+ - {slot: linux-311, os: ubuntu-latest, python: '3.11'}
50
+ - {slot: linux-312, os: ubuntu-latest, python: '3.12'}
51
+ steps:
52
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
53
+ with:
54
+ persist-credentials: false
55
+ sparse-checkout: |
56
+ tools/release
57
+ dist/sable-sphynx-0.7.0.dev0
58
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
59
+ with:
60
+ python-version: ${{ matrix.python }}
61
+ # Every slot installs the same prebuilt wheel/sdist/source bytes from this
62
+ # approved commit. No slot builds replacement distribution artifacts.
63
+ # The release-only -text rule preserves these files before approved
64
+ # staging, so checkout transports SHA256SUMS and identity bytes exactly.
65
+ - name: Check all normal installs and record runtime/checksums
66
+ run: >
67
+ python -I tools/release/check_release.py
68
+ --version 0.7.0.dev0 --distribution sable-sphynx
69
+ --release-dir dist/sable-sphynx-0.7.0.dev0
70
+ --evidence-dir "${{ runner.temp }}/sdk smoke evidence/${{ matrix.slot }}"
71
+ --runtime-origin "GitHub actions/setup-python v7; ${{ runner.os }}; requested CPython ${{ matrix.python }}; approved commit ${{ github.sha }}"
72
+ - name: Validate pilot contracts from the exact installed wheel
73
+ shell: bash
74
+ run: |
75
+ python -I -m venv "$RUNNER_TEMP/pilot-regression-venv"
76
+ if [[ "$RUNNER_OS" == "Windows" ]]; then
77
+ PILOT_PYTHON="$RUNNER_TEMP/pilot-regression-venv/Scripts/python.exe"
78
+ else
79
+ PILOT_PYTHON="$RUNNER_TEMP/pilot-regression-venv/bin/python"
80
+ fi
81
+ "$PILOT_PYTHON" -I -m pip --isolated install --no-index --no-deps dist/sable-sphynx-0.7.0.dev0/sable_sphynx-0.7.0.dev0-py3-none-any.whl
82
+ python -I - "$RUNNER_TEMP/pilot source" <<'PY'
83
+ import importlib.util, sys
84
+ from pathlib import Path
85
+ spec = importlib.util.spec_from_file_location("checks", "tools/release/check_release.py")
86
+ checks = importlib.util.module_from_spec(spec)
87
+ spec.loader.exec_module(checks)
88
+ checks.set_release_version("0.7.0.dev0", "sable-sphynx")
89
+ release = Path("dist/sable-sphynx-0.7.0.dev0").resolve()
90
+ checks.verify_checksums(release)
91
+ _, files = checks.load_identity(release / checks.MANIFEST)
92
+ checks.extract_source(release / checks.SOURCE, Path(sys.argv[1]), files)
93
+ PY
94
+ "$PILOT_PYTHON" -I "$RUNNER_TEMP/pilot source/tools/release/run_regressions.py" --version 0.7.0.dev0 --distribution sable-sphynx --source-root "$RUNNER_TEMP/pilot source" --release-dir dist/sable-sphynx-0.7.0.dev0 --evidence-dir "$RUNNER_TEMP/pilot regressions/${{ matrix.slot }}" --runtime-origin "GitHub actions/setup-python; ${{ matrix.slot }}; ${{ github.sha }}"
95
+ # Multiple upload paths retain their common ancestor. Consolidate the
96
+ # two evidence trees so aggregate lookup has one predictable slot root.
97
+ - name: Collect synthetic evidence into one slot folder
98
+ if: always()
99
+ shell: bash
100
+ run: |
101
+ python -I - "${{ runner.temp }}" "${{ matrix.slot }}" <<'PY'
102
+ import shutil, sys
103
+ from pathlib import Path
104
+ root, slot = Path(sys.argv[1]), sys.argv[2]
105
+ target = root / "sdk evidence upload" / slot
106
+ target.mkdir(parents=True, exist_ok=False)
107
+ for source in (root / "sdk smoke evidence" / slot,
108
+ root / "pilot regressions" / slot):
109
+ for suffix in ("*.json", "*.log"):
110
+ for path in sorted(source.glob(suffix)):
111
+ output = target / path.name
112
+ if output.exists():
113
+ raise RuntimeError("Duplicate evidence filename: " + path.name)
114
+ shutil.copyfile(path, output)
115
+ PY
116
+ - name: Retain synthetic logs and aggregate identities
117
+ if: always()
118
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
119
+ with:
120
+ name: sdk-release-smoke-${{ matrix.slot }}
121
+ path: ${{ runner.temp }}/sdk evidence upload/${{ matrix.slot }}/
122
+ if-no-files-found: error
123
+ retention-days: 7
124
+ include-hidden-files: false
125
+
126
+ aggregate:
127
+ name: Seven-slot approved-byte evidence
128
+ needs: installed
129
+ if: always()
130
+ runs-on: ubuntu-latest
131
+ timeout-minutes: 5
132
+ steps:
133
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
134
+ with:
135
+ persist-credentials: false
136
+ sparse-checkout: tools/release
137
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
138
+ with:
139
+ python-version: '3.12'
140
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
141
+ with:
142
+ pattern: sdk-release-smoke-*
143
+ path: ${{ runner.temp }}/sdk smoke aggregate inputs
144
+ merge-multiple: false
145
+ - name: Require seven passing slots and identical approved bytes
146
+ run: >
147
+ python -I tools/release/summarize_release.py
148
+ --require-pilot-regressions --version 0.7.0.dev0 --distribution sable-sphynx
149
+ --input-dir "${{ runner.temp }}/sdk smoke aggregate inputs"
150
+ --output "${{ runner.temp }}/sdk smoke matrix.json"
151
+ - name: Retain synthetic matrix summary
152
+ if: always()
153
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
154
+ with:
155
+ name: sdk-release-smoke-matrix
156
+ path: ${{ runner.temp }}/sdk smoke matrix.json
157
+ if-no-files-found: error
158
+ retention-days: 7
159
+ include-hidden-files: false
160
+ publish:
161
+ name: Publish reviewed distributions to PyPI
162
+ needs: [installed, aggregate]
163
+ if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' && inputs.destination == 'pypi'
164
+ runs-on: ubuntu-latest
165
+ timeout-minutes: 5
166
+ environment: pypi
167
+ permissions:
168
+ contents: read
169
+ id-token: write
170
+ steps:
171
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
172
+ with:
173
+ persist-credentials: false
174
+ sparse-checkout: dist/sable-sphynx-0.7.0.dev0
175
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
176
+ with:
177
+ python-version: '3.12'
178
+ - name: Copy only the two reviewed public distributions
179
+ env:
180
+ PUBLISH_DIR: ${{ runner.temp }}/publish-dist
181
+ APPROVED_MANIFEST_SHA256: ${{ inputs.approved_manifest_sha256 }}
182
+ CONFIRMATION: ${{ inputs.confirmation }}
183
+ run: |
184
+ python -I - <<'PY'
185
+ import hashlib, json, os, shutil
186
+ from pathlib import Path
187
+ release = Path("dist/sable-sphynx-0.7.0.dev0")
188
+ raw = (release / "PUBLICATION.json").read_bytes()
189
+ if (hashlib.sha256(raw).hexdigest() != os.environ["APPROVED_MANIFEST_SHA256"]
190
+ or os.environ["CONFIRMATION"] != "publish sable-sphynx 0.7.0.dev0"):
191
+ raise ValueError("Explicit approval must bind the exact reviewed publication manifest")
192
+ manifest = json.loads(raw)
193
+ expected = {"sable_sphynx-0.7.0.dev0-py3-none-any.whl", "sable_sphynx-0.7.0.dev0.tar.gz"}
194
+ if (manifest.get("distribution") != "sable-sphynx" or manifest.get("version") != "0.7.0.dev0"
195
+ or len(manifest["files"]) != 2 or {r["filename"] for r in manifest["files"]} != expected):
196
+ raise ValueError("Publication inventory mismatch")
197
+ hashes = dict(line.split(" ", 1)[::-1] for line in (release / "SHA256SUMS").read_text().splitlines())
198
+ for row in manifest["files"]:
199
+ source = release / row["filename"]
200
+ actual = hashlib.sha256(source.read_bytes()).hexdigest()
201
+ if source.is_symlink() or actual != row["sha256"] or actual != hashes[row["filename"]]:
202
+ raise ValueError("Publication bytes differ from validated release")
203
+ destination = Path(os.environ["PUBLISH_DIR"])
204
+ destination.mkdir(exist_ok=False)
205
+ for row in manifest["files"]:
206
+ shutil.copyfile(release / row["filename"], destination / row["filename"])
207
+ PY
208
+ - name: Publish with PyPI Trusted Publishing
209
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # official release/v1
210
+ with:
211
+ packages-dir: ${{ runner.temp }}/publish-dist
@@ -0,0 +1,42 @@
1
+ name: Paper-named RAG source protocols
2
+ on:
3
+ pull_request:
4
+ paths:
5
+ - src/sphynx/rag_papers/**
6
+ - src/sphynx/data/rag-paper-*.json
7
+ - tests/test_rag_paper*.py
8
+ - tools/integration/build_paper_schemas.py
9
+ - tools/integration/validate_paper_methods.py
10
+ - .github/workflows/rag-papers.yml
11
+ permissions:
12
+ contents: read
13
+ jobs:
14
+ offline:
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ matrix:
18
+ python: ['3.11', '3.12']
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
21
+ with:
22
+ persist-credentials: false
23
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
24
+ with:
25
+ python-version: ${{ matrix.python }}
26
+ - name: Install schema test dependency (SDK runtime remains stdlib)
27
+ run: python -m pip install jsonschema==4.23.0
28
+ - name: Paper rules, native formats, Sable joins and portable contracts
29
+ env:
30
+ PYTHONPATH: src
31
+ PYTHONDONTWRITEBYTECODE: '1'
32
+ run: >-
33
+ python -m unittest tests.test_rag_papers tests.test_rag_paper_connections
34
+ tests.test_reflex_traces tests.test_official_benchmarks
35
+ tests.test_rag_diagnostics_calibration tests.test_rag_diagnostics_engine
36
+ tests.test_rag_diagnostics_importers tests.test_rag_diagnostics_sdk
37
+ tests.test_rag_diagnostics_semantic tests.test_rag_diagnostics_semantic_integration
38
+ tests.test_dataset_v3 tests.test_full_rag -q
39
+ - name: Ensure portable schemas match their committed definition
40
+ run: |
41
+ python tools/integration/build_paper_schemas.py
42
+ git diff --exit-code -- src/sphynx/data/rag-paper-schemas.v1.json
@@ -0,0 +1,159 @@
1
+ name: SDK 0.5.0 release verification
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [codex/sphynx-0-5-0-release]
7
+ paths:
8
+ - dist/sable-sphynx-0.5.0/**
9
+ - tools/integration/run_installed_research_tests.py
10
+ - tools/integration/installed_research_smoke.py
11
+ - tools/integration/run_installed_050_tests.py
12
+ - .github/workflows/sdk-0-5-release.yml
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ installed:
19
+ name: ${{ matrix.slot }} reviewed wheel
20
+ runs-on: ${{ matrix.os }}
21
+ timeout-minutes: 20
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ include:
26
+ - {slot: windows-311, os: windows-latest, python: '3.11'}
27
+ - {slot: windows-312, os: windows-latest, python: '3.12'}
28
+ - {slot: windows-314, os: windows-latest, python: '3.14'}
29
+ - {slot: macos-311, os: macos-latest, python: '3.11'}
30
+ - {slot: macos-312, os: macos-latest, python: '3.12'}
31
+ - {slot: linux-311, os: ubuntu-latest, python: '3.11'}
32
+ - {slot: linux-312, os: ubuntu-latest, python: '3.12'}
33
+ steps:
34
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
35
+ with:
36
+ persist-credentials: false
37
+ sparse-checkout: dist/sable-sphynx-0.5.0
38
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
39
+ with:
40
+ python-version: ${{ matrix.python }}
41
+ # The same reviewed wheel/source artifacts are installed in every slot.
42
+ # No replacement wheel or model is built. jsonschema is a dev-only test dependency.
43
+ - name: Verify reviewed bytes and extract only the verification tools
44
+ shell: bash
45
+ run: |
46
+ unset PYTHONPATH
47
+ python -I - "$RUNNER_TEMP/research tools" <<'PY'
48
+ import hashlib,json,sys,zipfile
49
+ from pathlib import Path
50
+ release=Path("dist/sable-sphynx-0.5.0")
51
+ expected_names={"sable_sphynx-0.5.0-py3-none-any.whl","sable_sphynx-0.5.0.tar.gz","sable-sphynx-0.5.0-source.zip","SOURCE_IDENTITY.json"}
52
+ expected={}
53
+ for line in (release/"SHA256SUMS").read_text(encoding="ascii").splitlines():
54
+ sha,name=line.split()
55
+ assert name in expected_names and name not in expected
56
+ assert hashlib.sha256((release/name).read_bytes()).hexdigest()==sha
57
+ expected[name]=sha
58
+ assert set(expected)==expected_names
59
+ identity=json.loads((release/"SOURCE_IDENTITY.json").read_text(encoding="utf-8"))
60
+ assert identity["sdk_version"]=="0.5.0" and identity["distribution"]=="sable-sphynx"
61
+ files={row["path"]:row["sha256"] for row in identity["files"]}
62
+ output=Path(sys.argv[1]);output.mkdir()
63
+ with zipfile.ZipFile(release/"sable-sphynx-0.5.0-source.zip") as archive:
64
+ for name in ("run_installed_research_tests.py","run_installed_050_tests.py","installed_research_smoke.py"):
65
+ relative="tools/integration/"+name
66
+ raw=archive.read("sable-sphynx-0.5.0-source/"+relative)
67
+ assert hashlib.sha256(raw).hexdigest()==files[relative]
68
+ (output/name).write_bytes(raw)
69
+ PY
70
+ - name: Install offline into a fresh consumer interpreter and test the wheel
71
+ shell: bash
72
+ run: |
73
+ unset PYTHONPATH
74
+ python -I -m venv "$RUNNER_TEMP/research consumer"
75
+ if [[ "$RUNNER_OS" == "Windows" ]]; then
76
+ CONSUMER_PYTHON="$RUNNER_TEMP/research consumer/Scripts/python.exe"
77
+ else
78
+ CONSUMER_PYTHON="$RUNNER_TEMP/research consumer/bin/python"
79
+ fi
80
+ RELEASE_DIR="$GITHUB_WORKSPACE/dist/sable-sphynx-0.5.0"
81
+ # macOS /var is a system symlink. Keep strict evidence link rejection
82
+ # and give synthetic fixtures the canonical temporary-directory path.
83
+ if [[ "$RUNNER_OS" == "macOS" ]]; then
84
+ export TMPDIR="$(python -I -c 'import pathlib,tempfile; print(pathlib.Path(tempfile.gettempdir()).resolve())')"
85
+ fi
86
+ "$CONSUMER_PYTHON" -I -m pip --isolated install --no-index --no-deps "$RELEASE_DIR/sable_sphynx-0.5.0-py3-none-any.whl"
87
+ "$CONSUMER_PYTHON" -I -m pip --isolated install jsonschema==4.23.0
88
+ mkdir "$RUNNER_TEMP/research consumer cwd"
89
+ cd "$RUNNER_TEMP/research consumer cwd"
90
+ "$CONSUMER_PYTHON" -I "$RUNNER_TEMP/research tools/installed_research_smoke.py" --output-dir "$RUNNER_TEMP/research evidence/${{ matrix.slot }}/smoke"
91
+ "$CONSUMER_PYTHON" -I "$RUNNER_TEMP/research tools/run_installed_050_tests.py" --release-dir "$RELEASE_DIR" --slot "${{ matrix.slot }}" --evidence-dir "$RUNNER_TEMP/research evidence/${{ matrix.slot }}/tests"
92
+ - name: Retain synthetic aggregate reports and test-name logs
93
+ if: always()
94
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
95
+ with:
96
+ name: sdk-0-5-release-${{ matrix.slot }}
97
+ path: |
98
+ ${{ runner.temp }}/research evidence/${{ matrix.slot }}/smoke/VERIFICATION.json
99
+ ${{ runner.temp }}/research evidence/${{ matrix.slot }}/tests/RESEARCH_TESTS.json
100
+ ${{ runner.temp }}/research evidence/${{ matrix.slot }}/tests/unittest.log
101
+ if-no-files-found: error
102
+ retention-days: 7
103
+ include-hidden-files: false
104
+
105
+ aggregate:
106
+ name: Seven platforms using identical reviewed bytes
107
+ needs: installed
108
+ if: always()
109
+ runs-on: ubuntu-latest
110
+ timeout-minutes: 5
111
+ steps:
112
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
113
+ with:
114
+ persist-credentials: false
115
+ sparse-checkout: |
116
+ dist/sable-sphynx-0.5.0
117
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
118
+ with:
119
+ python-version: '3.12'
120
+ - name: Extract the exact reviewed aggregate tools
121
+ run: |
122
+ python -I - "${{ runner.temp }}/stable aggregate tools" <<'PY'
123
+ import hashlib,json,sys,zipfile
124
+ from pathlib import Path
125
+ release=Path("dist/sable-sphynx-0.5.0")
126
+ for line in (release/"SHA256SUMS").read_text(encoding="ascii").splitlines():
127
+ sha,name=line.split()
128
+ assert name in {"SOURCE_IDENTITY.json","sable_sphynx-0.5.0-py3-none-any.whl","sable_sphynx-0.5.0.tar.gz","sable-sphynx-0.5.0-source.zip"}
129
+ assert hashlib.sha256((release/name).read_bytes()).hexdigest()==sha
130
+ identity=json.loads((release/"SOURCE_IDENTITY.json").read_text(encoding="utf-8"))
131
+ files={row["path"]:row["sha256"] for row in identity["files"]}
132
+ output=Path(sys.argv[1]);output.mkdir()
133
+ with zipfile.ZipFile(release/"sable-sphynx-0.5.0-source.zip") as archive:
134
+ for name in ("run_installed_research_tests.py","run_installed_050_tests.py"):
135
+ relative="tools/integration/"+name
136
+ raw=archive.read("sable-sphynx-0.5.0-source/"+relative)
137
+ assert hashlib.sha256(raw).hexdigest()==files[relative]
138
+ (output/name).write_bytes(raw)
139
+ PY
140
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
141
+ with:
142
+ pattern: sdk-0-5-release-*
143
+ path: ${{ runner.temp }}/research aggregate inputs
144
+ merge-multiple: false
145
+ - name: Require seven passing slots with matching release and test hashes
146
+ run: >
147
+ python -I "${{ runner.temp }}/stable aggregate tools/run_installed_050_tests.py"
148
+ --release-dir dist/sable-sphynx-0.5.0
149
+ --aggregate "${{ runner.temp }}/research aggregate inputs"
150
+ --output "${{ runner.temp }}/research matrix.json"
151
+ - name: Retain synthetic matrix summary
152
+ if: always()
153
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
154
+ with:
155
+ name: sdk-0-5-release-matrix
156
+ path: ${{ runner.temp }}/research matrix.json
157
+ if-no-files-found: error
158
+ retention-days: 7
159
+ include-hidden-files: false