cmpnd 0.75.0__tar.gz → 0.77.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. {cmpnd-0.75.0 → cmpnd-0.77.0}/PKG-INFO +1 -1
  2. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/evals.py +1 -1
  3. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/programs.py +3 -3
  4. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/top.py +8 -2
  5. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/verbs.py +1 -1
  6. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/identity.py +10 -9
  7. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/cli.md +20 -7
  8. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/sdk-instrumentation.md +2 -2
  9. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/program_names.py +3 -2
  10. {cmpnd-0.75.0 → cmpnd-0.77.0}/pyproject.toml +2 -2
  11. {cmpnd-0.75.0 → cmpnd-0.77.0}/uv.lock +1 -1
  12. {cmpnd-0.75.0 → cmpnd-0.77.0}/.gitignore +0 -0
  13. {cmpnd-0.75.0 → cmpnd-0.77.0}/AGENTS.md +0 -0
  14. {cmpnd-0.75.0 → cmpnd-0.77.0}/CLAUDE.md +0 -0
  15. {cmpnd-0.75.0 → cmpnd-0.77.0}/README.md +0 -0
  16. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/__init__.py +0 -0
  17. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_assessments.py +0 -0
  18. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_authored_import.py +0 -0
  19. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_deployments.py +0 -0
  20. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_exporter_pool.py +0 -0
  21. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_gepa_patch.py +0 -0
  22. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_http.py +0 -0
  23. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_program_patch.py +0 -0
  24. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_rlm_patch.py +0 -0
  25. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_runtime_tools.py +0 -0
  26. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_timespec.py +0 -0
  27. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_traces.py +0 -0
  28. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/_valsets.py +0 -0
  29. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/authored.py +0 -0
  30. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/callback.py +0 -0
  31. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/__init__.py +0 -0
  32. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/api_client.py +0 -0
  33. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/__init__.py +0 -0
  34. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/admin.py +0 -0
  35. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/assessments.py +0 -0
  36. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/auth.py +0 -0
  37. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/datasets.py +0 -0
  38. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/deployments.py +0 -0
  39. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/login.py +0 -0
  40. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/optimizations.py +0 -0
  41. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/org.py +0 -0
  42. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/provider_credentials.py +0 -0
  43. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/tool_servers.py +0 -0
  44. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/traces.py +0 -0
  45. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/commands/valsets.py +0 -0
  46. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/credentials.py +0 -0
  47. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/deprecation.py +0 -0
  48. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/pagination.py +0 -0
  49. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/shell.py +0 -0
  50. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/trace_render.py +0 -0
  51. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/tree_help.py +0 -0
  52. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/cli/views.py +0 -0
  53. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/client.py +0 -0
  54. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/configuration.py +0 -0
  55. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/context.py +0 -0
  56. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/credentials.py +0 -0
  57. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/dataset_sync.py +0 -0
  58. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/datasets.py +0 -0
  59. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/decorators.py +0 -0
  60. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/deployment.py +0 -0
  61. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/deployment_metadata.py +0 -0
  62. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/deployment_runs.py +0 -0
  63. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/eval_handler.py +0 -0
  64. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/execution.py +0 -0
  65. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/exporter.py +0 -0
  66. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/exporter_http.py +0 -0
  67. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/helpers.py +0 -0
  68. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/imaging.py +0 -0
  69. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/__init__.py +0 -0
  70. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/decode.py +0 -0
  71. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/encode.py +0 -0
  72. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/hash.py +0 -0
  73. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/program.py +0 -0
  74. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/reflection.py +0 -0
  75. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/types.py +0 -0
  76. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/ir/xxh64.py +0 -0
  77. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/lm_configuration.py +0 -0
  78. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/mcp_servers.py +0 -0
  79. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/models.py +0 -0
  80. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/named_programs.py +0 -0
  81. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/optimization.py +0 -0
  82. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/optimizers/__init__.py +0 -0
  83. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/optimizers/gepa.py +0 -0
  84. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/optimizers/gepa_callback.py +0 -0
  85. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/optimizers/resume.py +0 -0
  86. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/optimizers/tracker.py +0 -0
  87. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/packaging.py +0 -0
  88. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/program_naming.py +0 -0
  89. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/programs.py +0 -0
  90. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/references.py +0 -0
  91. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/retry.py +0 -0
  92. {cmpnd-0.75.0 → cmpnd-0.77.0}/cmpnd/traces.py +0 -0
  93. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/2026-04-02-code-review.md +0 -0
  94. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/client.md +0 -0
  95. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/custom-proposer.md +0 -0
  96. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/plans/2026-04-05-train-val-dataset-capture-design.md +0 -0
  97. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/plans/2026-04-05-train-val-dataset-capture.md +0 -0
  98. {cmpnd-0.75.0 → cmpnd-0.77.0}/docs/reading-traces.md +0 -0
  99. {cmpnd-0.75.0 → cmpnd-0.77.0}/examples/generalizing_proposer.py +0 -0
  100. {cmpnd-0.75.0 → cmpnd-0.77.0}/examples/local_ollama.py +0 -0
  101. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/LINEAGE.md +0 -0
  102. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/README.md +0 -0
  103. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/__init__.py +0 -0
  104. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/bodies.py +0 -0
  105. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/client_floor.py +0 -0
  106. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/exporter_http.py +0 -0
  107. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/protocols.py +0 -0
  108. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/py.typed +0 -0
  109. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/request_log.py +0 -0
  110. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/retry.py +0 -0
  111. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/trace_facts.py +0 -0
  112. {cmpnd-0.75.0 → cmpnd-0.77.0}/ingest/pyproject.toml +0 -0
  113. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/audit-sdist.sh +0 -0
  114. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/capture_review_run.py +0 -0
  115. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/check-pip-install.sh +0 -0
  116. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/check_release_artifacts.py +0 -0
  117. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/fixtures/review_run.json.gz +0 -0
  118. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/gepa_resume_bug.py +0 -0
  119. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/install-test-env.sh +0 -0
  120. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/release-gate.sh +0 -0
  121. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/release-real-models.sh +0 -0
  122. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/require_version_bump.py +0 -0
  123. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/seed_review_run.py +0 -0
  124. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/selfhost_compat.py +0 -0
  125. {cmpnd-0.75.0 → cmpnd-0.77.0}/scripts/test-in-linux.sh +0 -0
  126. {cmpnd-0.75.0 → cmpnd-0.77.0}/stubs/dspy/__init__.pyi +0 -0
  127. {cmpnd-0.75.0 → cmpnd-0.77.0}/stubs/dspy/primitives/__init__.pyi +0 -0
  128. {cmpnd-0.75.0 → cmpnd-0.77.0}/stubs/dspy/primitives/prediction.pyi +0 -0
  129. {cmpnd-0.75.0 → cmpnd-0.77.0}/stubs/dspy/utils/__init__.pyi +0 -0
  130. {cmpnd-0.75.0 → cmpnd-0.77.0}/stubs/dspy/utils/callback.pyi +0 -0
  131. {cmpnd-0.75.0 → cmpnd-0.77.0}/stubs/dspy/utils/dummies.pyi +0 -0
  132. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/__init__.py +0 -0
  133. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_credential_route.py +0 -0
  134. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_deployment_signature_helpers.py +0 -0
  135. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_exporter_helpers.py +0 -0
  136. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_fake_clock.py +0 -0
  137. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_identity_helpers.py +0 -0
  138. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_resolve_refs.py +0 -0
  139. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/_traced_run.py +0 -0
  140. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/conftest.py +0 -0
  141. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/__init__.py +0 -0
  142. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/committee_task.py +0 -0
  143. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/conftest.py +0 -0
  144. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/continuation_task.py +0 -0
  145. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/data/committee_train.ndjson.gz +0 -0
  146. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/data/committee_val.ndjson.gz +0 -0
  147. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/fake_lm.py +0 -0
  148. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/helpers.py +0 -0
  149. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/target_capabilities.py +0 -0
  150. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_assessments_cli.py +0 -0
  151. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_capture_prompts.py +0 -0
  152. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_composite_module.py +0 -0
  153. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_dataset_auto_creation.py +0 -0
  154. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_deploy_execute.py +0 -0
  155. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_deploy_pandas.py +0 -0
  156. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_deploy_programs.py +0 -0
  157. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_edge_cases.py +0 -0
  158. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_example_hash.py +0 -0
  159. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_gepa_optimization.py +0 -0
  160. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_interpreter_spans.py +0 -0
  161. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_lm_accuracy.py +0 -0
  162. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_module_tracing.py +0 -0
  163. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimization_lineage.py +0 -0
  164. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimization_metric_identity.py +0 -0
  165. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_authored_metric.py +0 -0
  166. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_continuation.py +0 -0
  167. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_custom_proposer.py +0 -0
  168. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_failures.py +0 -0
  169. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_loop.py +0 -0
  170. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_review_committee.py +0 -0
  171. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_server_owned_completion.py +0 -0
  172. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_parallel_export.py +0 -0
  173. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_project_attribution.py +0 -0
  174. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_react_tool_spans.py +0 -0
  175. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_save_load.py +0 -0
  176. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_trace_structure.py +0 -0
  177. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_traces_read.py +0 -0
  178. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_user_attribution.py +0 -0
  179. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/e2e/test_valsets_cli.py +0 -0
  180. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/01_predict_qa.json +0 -0
  181. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/02_predict_renamed_field.json +0 -0
  182. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/03_chain_of_thought_qa.json +0 -0
  183. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/04_predict_richer_types.json +0 -0
  184. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/05_composite_two_predicts.json +0 -0
  185. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/06_multichaincomparison.json +0 -0
  186. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/07_program_of_thought.json +0 -0
  187. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/08_opaque_module.json +0 -0
  188. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/09_predict_pydantic_field.json +0 -0
  189. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/10_react.json +0 -0
  190. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/11_refine.json +0 -0
  191. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/12_retrieve.json +0 -0
  192. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/13_knn.json +0 -0
  193. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/14_parallel.json +0 -0
  194. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/identity_vectors/README.md +0 -0
  195. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/ingest_conformance.py +0 -0
  196. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/__init__.py +0 -0
  197. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/authored_optimize/judge.py +0 -0
  198. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/authored_optimize/optimize_hosted.py +0 -0
  199. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/conftest.py +0 -0
  200. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/hosted_mcp_tool_optimize_probe.py +0 -0
  201. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/hosted_optimize_probe.py +0 -0
  202. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/optimization_run_probe.py +0 -0
  203. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/test_cli_deploy_smoketest.py +0 -0
  204. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/test_logs_renders_traces.py +0 -0
  205. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/test_optimization_run.py +0 -0
  206. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/test_optimizing_progress.py +0 -0
  207. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/integration/test_unhappy_path.py +0 -0
  208. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/__init__.py +0 -0
  209. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/__main__.py +0 -0
  210. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/drain.py +0 -0
  211. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/ingest.py +0 -0
  212. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/latency_transport.py +0 -0
  213. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/rlm_shape.py +0 -0
  214. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/rlm_size_report.py +0 -0
  215. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/sweep.py +0 -0
  216. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/test_rlm_shape.py +0 -0
  217. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/load/test_rlm_size_report.py +0 -0
  218. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/__init__.py +0 -0
  219. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/conftest.py +0 -0
  220. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/seed_parity.py +0 -0
  221. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_auth.py +0 -0
  222. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_datasets.py +0 -0
  223. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_deployments.py +0 -0
  224. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_evals.py +0 -0
  225. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_health.py +0 -0
  226. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_modules.py +0 -0
  227. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_optimizations.py +0 -0
  228. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_programs.py +0 -0
  229. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_signatures.py +0 -0
  230. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_trace_streaming.py +0 -0
  231. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/parity/test_traces.py +0 -0
  232. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/__init__.py +0 -0
  233. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/_provider.py +0 -0
  234. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/_readiness.py +0 -0
  235. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/_reliability.py +0 -0
  236. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/_result.py +0 -0
  237. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/mint_bedrock_token.py +0 -0
  238. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_bedrock_converse.py +0 -0
  239. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_deploy_programs.py +0 -0
  240. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_multi_client_stress.py +0 -0
  241. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_client_committee.py +0 -0
  242. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_continuation.py +0 -0
  243. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_loop.py +0 -0
  244. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_loop_wasm.py +0 -0
  245. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_stress.py +0 -0
  246. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_provider_roles.py +0 -0
  247. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_readiness.py +0 -0
  248. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_real_provider_twins.py +0 -0
  249. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_reliability.py +0 -0
  250. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_reliability_classify.py +0 -0
  251. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_rlm_wasm.py +0 -0
  252. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/real_models/test_trace_search.py +0 -0
  253. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/span_reference_fixture.py +0 -0
  254. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_adapter_reentrancy.py +0 -0
  255. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_assessments_api.py +0 -0
  256. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_authored.py +0 -0
  257. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_authored_binding_credentials.py +0 -0
  258. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_authored_bundle_collisions.py +0 -0
  259. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_authored_metric_contract.py +0 -0
  260. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_authored_named_models.py +0 -0
  261. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_authored_optimize.py +0 -0
  262. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_callback.py +0 -0
  263. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_candidate_lineage.py +0 -0
  264. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/__init__.py +0 -0
  265. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/conftest.py +0 -0
  266. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_admin.py +0 -0
  267. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_api_client.py +0 -0
  268. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_assessments.py +0 -0
  269. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_auth.py +0 -0
  270. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_credentials.py +0 -0
  271. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_datasets.py +0 -0
  272. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_deployment_runs.py +0 -0
  273. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_deployments.py +0 -0
  274. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_evals.py +0 -0
  275. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_login.py +0 -0
  276. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_main.py +0 -0
  277. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_optimizations.py +0 -0
  278. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_org.py +0 -0
  279. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_pagination.py +0 -0
  280. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_parity.py +0 -0
  281. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_programs.py +0 -0
  282. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_provider_credentials.py +0 -0
  283. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_schema_sample.py +0 -0
  284. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_shell.py +0 -0
  285. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_tool_servers.py +0 -0
  286. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_top.py +0 -0
  287. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_traces.py +0 -0
  288. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_traces_program_and_module.py +0 -0
  289. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_traces_search_wire.py +0 -0
  290. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_tree_help.py +0 -0
  291. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cli/test_valsets.py +0 -0
  292. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_client.py +0 -0
  293. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_client_floor.py +0 -0
  294. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_client_program_names.py +0 -0
  295. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_clustering/__init__.py +0 -0
  296. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_clustering/conftest.py +0 -0
  297. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_clustering/test_edge_cases.py +0 -0
  298. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_clustering/test_hash_consistency.py +0 -0
  299. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_clustering/test_type_conversion.py +0 -0
  300. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_cmp551_grouping_identity.py +0 -0
  301. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_configuration.py +0 -0
  302. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_context.py +0 -0
  303. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_context_propagation.py +0 -0
  304. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_credential_kwargs.py +0 -0
  305. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_credential_selection.py +0 -0
  306. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_credential_values.py +0 -0
  307. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_dataset_polling.py +0 -0
  308. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_dataset_sync.py +0 -0
  309. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_datasets.py +0 -0
  310. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_decision_client_spans.py +0 -0
  311. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_decorators.py +0 -0
  312. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_deploy.py +0 -0
  313. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_deploy_mcp_tool_references.py +0 -0
  314. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_deploy_program_id.py +0 -0
  315. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_deployment_metadata.py +0 -0
  316. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_deployment_runs.py +0 -0
  317. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_deployments_read.py +0 -0
  318. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_eval.py +0 -0
  319. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_eval_example_attribution.py +0 -0
  320. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_eval_program_id.py +0 -0
  321. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_eval_start.py +0 -0
  322. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_eval_trace_grouping.py +0 -0
  323. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_exception_paths.py +0 -0
  324. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_execute.py +0 -0
  325. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_execute_run_identity.py +0 -0
  326. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_exporter.py +0 -0
  327. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_exporter_program_names.py +0 -0
  328. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_exporter_queue.py +0 -0
  329. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_exporter_real.py +0 -0
  330. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_fake_lm.py +0 -0
  331. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_gepa_callback.py +0 -0
  332. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_gepa_integration.py +0 -0
  333. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_gepa_output_normalization.py +0 -0
  334. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_gepa_resume.py +0 -0
  335. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_identity.py +0 -0
  336. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_imaging.py +0 -0
  337. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_import_weight.py +0 -0
  338. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_ingest_conformance.py +0 -0
  339. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_ingest_second_producer.py +0 -0
  340. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_integration.py +0 -0
  341. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_interpreter_callback.py +0 -0
  342. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_ir_encoder_properties.py +0 -0
  343. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_ir_golden_vectors.py +0 -0
  344. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_ir_roundtrip.py +0 -0
  345. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_lm15_native_calls.py +0 -0
  346. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_lm_configuration.py +0 -0
  347. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_lm_usage_shapes.py +0 -0
  348. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_mcp_tools.py +0 -0
  349. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_models.py +0 -0
  350. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_multi_client_stress_readiness.py +0 -0
  351. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_no_signature_hash_on_the_wire.py +0 -0
  352. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimization_program_names.py +0 -0
  353. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimization_progress.py +0 -0
  354. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimization_start.py +0 -0
  355. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize.py +0 -0
  356. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize_budget.py +0 -0
  357. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize_lift.py +0 -0
  358. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize_lms.py +0 -0
  359. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize_proposer.py +0 -0
  360. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize_reflection_lm.py +0 -0
  361. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_optimize_terminal_failure.py +0 -0
  362. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_packaging.py +0 -0
  363. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_packaging_callable_source.py +0 -0
  364. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_packaging_mcp_tools.py +0 -0
  365. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_packaging_program_source.py +0 -0
  366. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_poll_until.py +0 -0
  367. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_program_id_deprecation.py +0 -0
  368. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_program_identity.py +0 -0
  369. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_program_lineage_persist.py +0 -0
  370. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_program_names_in_deploy.py +0 -0
  371. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_program_naming.py +0 -0
  372. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_programs_create.py +0 -0
  373. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_project_payload.py +0 -0
  374. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_real_provider_twins_readiness.py +0 -0
  375. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_reflector_properties.py +0 -0
  376. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_reflector_smoke.py +0 -0
  377. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_release_gate_script.py +0 -0
  378. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_release_real_models_script.py +0 -0
  379. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_replaced_names.py +0 -0
  380. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_repro_reactv2_bugs.py +0 -0
  381. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_require_version_bump.py +0 -0
  382. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_retry.py +0 -0
  383. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_reversible_failures.py +0 -0
  384. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_rlm_patch.py +0 -0
  385. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_run_attribution_paths.py +0 -0
  386. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_runtime_tools.py +0 -0
  387. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_schemas.py +0 -0
  388. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_seal_lm_credential.py +0 -0
  389. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_seed_review_run.py +0 -0
  390. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_signature_inputs.py +0 -0
  391. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_span_references.py +0 -0
  392. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_span_sent_once.py +0 -0
  393. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_system_one.py +0 -0
  394. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_trace_context_concurrency.py +0 -0
  395. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_trace_fact_wire_contract.py +0 -0
  396. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_trace_facts.py +0 -0
  397. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_trace_render.py +0 -0
  398. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_traces_read.py +0 -0
  399. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_tracked_gepa.py +0 -0
  400. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_tracker_enrich.py +0 -0
  401. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_truncation.py +0 -0
  402. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_upload_auth_headers.py +0 -0
  403. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_valsets_api.py +0 -0
  404. {cmpnd-0.75.0 → cmpnd-0.77.0}/tests/test_xxh64.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: cmpnd
3
- Version: 0.75.0
3
+ Version: 0.77.0
4
4
  Summary: DSPy observability and deployment SDK for cmpnd
5
5
  Project-URL: Homepage, https://cmpnd.ai
6
6
  Author-email: cmpnd <hello@cmpnd.ai>
@@ -13,7 +13,7 @@ def _add_list_args(p: ArgumentParser) -> None:
13
13
  "--program",
14
14
  dest="program_name",
15
15
  metavar="NAME",
16
- help="Only the runs of the program with this name, current or retired",
16
+ help="Only the runs of the program whose current name is NAME",
17
17
  )
18
18
  p.add_argument(
19
19
  "--module",
@@ -211,9 +211,9 @@ def register(subparsers: _SubParsersAction[ArgumentParser]) -> None:
211
211
  "rename",
212
212
  help="Name or rename a program",
213
213
  description=(
214
- "Make NAME the current name of PROGRAM. The name it had keeps resolving to it, so code that still "
215
- "declares the old name reaches the same program, with its id and history. A name another program "
216
- "answers to is refused."
214
+ "Make NAME the current name of PROGRAM, which keeps its id and history. The name it had is free at "
215
+ "once: it no longer resolves, and any program can take it, so code that still declares the old name "
216
+ "reaches a new program. Another program's current name is refused."
217
217
  ),
218
218
  )
219
219
  rename.add_argument("program", metavar="PROGRAM", help="Program name or p_ id")
@@ -1440,7 +1440,10 @@ def register(subparsers: _SubParsersAction[ArgumentParser]) -> None:
1440
1440
  help="Deploy authored Python source (file or stdin)",
1441
1441
  description=(
1442
1442
  "Stage authored Python without executing it in this process, check its "
1443
- "entrypoint in a fresh child, and upload the exact staged bundle."
1443
+ "entrypoint in a fresh child, and upload the exact staged bundle.\n\n"
1444
+ "The platform deploys only a program a user named. PROGRAM_NAME is such a name. "
1445
+ "A program with no name, or with a name a client generated, is refused until "
1446
+ "`cmpnd programs rename <p_id> <name>` names it."
1444
1447
  ),
1445
1448
  epilog=(
1446
1449
  "Examples:\n"
@@ -1501,7 +1504,10 @@ def register(subparsers: _SubParsersAction[ArgumentParser]) -> None:
1501
1504
  "dspy.Prediction(score=, feedback=): gepa writes each new instruction by "
1502
1505
  "reading that feedback, so a score-only metric is refused before the run "
1503
1506
  "starts. `--reflection-model` is required for the same reason — it names "
1504
- "the model that does the writing."
1507
+ "the model that does the writing.\n\n"
1508
+ "The platform optimizes only a program a user named. A --deployment-id whose "
1509
+ "program has no name, or a name a client generated, such as an optimization's "
1510
+ "result, is refused until `cmpnd programs rename <p_id> <name>` names it."
1505
1511
  ),
1506
1512
  epilog=(
1507
1513
  "Examples:\n"
@@ -167,7 +167,7 @@ DOMAIN_VERBS: dict[str, str] = {
167
167
  "trash": "moves a program to the Trash, where it stays restorable, and delete would read as the permanent purge",
168
168
  "restore": "returns a program from the Trash with its history, which create would not",
169
169
  "purge": "deletes a program in the Trash for good, the irreversible step after trash",
170
- "rename": "gives a program a new current name and keeps the old one resolving to it, which update would hide",
170
+ "rename": "gives a program a new current name and frees the old one for any program, which update would hide",
171
171
  }
172
172
 
173
173
  #: Leaves naming a related collection or sub-record rather than an action.
@@ -1,9 +1,10 @@
1
1
  """Identity and hash computations.
2
2
 
3
- The 64-bit program-identity hash is produced by the structural IR in
3
+ A program's identity is its server-issued program id (``is_program_id``).
4
+ The 64-bit program signature hash is produced by the structural IR in
4
5
  :mod:`cmpnd.ir`. ``compute_program_hash`` reflects a live ``dspy.Module``
5
- through that pipeline; trace, eval, and optimization paths share the
6
- one encoder.
6
+ through that pipeline, and ``program_naming`` uses the hash only to
7
+ generate a name for a program its user never named.
7
8
 
8
9
  Sibling hashes (``compute_signature_hash`` for model-sweep grouping,
9
10
  ``compute_valset_hash``, ``compute_dataset_hash``, ``compute_metric_hash``,
@@ -84,10 +85,9 @@ def _unsigned_to_signed_int64(value: int) -> int: # pyright: ignore[reportUnuse
84
85
  Written as arithmetic rather than as ``ctypes.c_int64(value).value``, which
85
86
  is the identical operation spelled with a C type: mask to 64 bits, then
86
87
  subtract 2^64 from anything at or above the sign bit. ``ctypes`` is not
87
- merely heavy for a two-line cast, it is *absent* where this has to run — the
88
- wasm guest (`worker-wasm/guest/`) imports this module to reproduce the SDK's
89
- ``program_signature_hash``, and its CPython has no ``_ctypes`` because there
90
- is no libffi for wasi, so the module was never compiled. Equivalence with
88
+ merely heavy for a two-line cast, it is *absent* from the worker's wasm
89
+ kernel (`worker-wasm/guest/`), which imports this module, and whose CPython
90
+ has no ``_ctypes`` because there is no libffi for wasi. Equivalence with
91
91
  the ctypes form is asserted over every boundary in ``tests/test_identity.py``.
92
92
 
93
93
  Imported by ``cmpnd.ir.hash`` and exercised by ``tests/test_identity.py``;
@@ -156,8 +156,9 @@ def validate_program_id(value: object, *, source: str = "program_id") -> str:
156
156
  def compute_program_hash(module: Any) -> int | None:
157
157
  """Reflect a live ``dspy.Module`` to IR and hash it.
158
158
 
159
- Returns ``None`` when ``module`` is ``None`` (callers commonly fold
160
- this with ``or 0`` for trace-side DEFAULT-0 columns).
159
+ Returns ``None`` when ``module`` is ``None``. The worker's kernel does not
160
+ bundle :mod:`cmpnd.ir`, so this raises ``ModuleNotFoundError`` there; the
161
+ kernel generates no program names, so it never calls this.
161
162
  """
162
163
  if module is None:
163
164
  return None
@@ -28,6 +28,18 @@ already has its program, and a program name with it is refused when the file
28
28
  binds no program. In the shell, `deploy()` and `optimize()` take the
29
29
  program name as `program=`.
30
30
 
31
+ The platform deploys and optimizes only a program a user named. A program name
32
+ given here, to `cmpnd.Program(name, ...)` or to `cmpnd programs rename` is one.
33
+ A program with no name, or with a name a client generated, such as an
34
+ optimization's result, is refused with `409` and error code `program_unnamed`,
35
+ and the error names the command that fixes it:
36
+ `cmpnd programs rename <p_id> <name>`. It also tells you to declare that name in
37
+ your code with `@cmpnd.program("<name>")` or `cmpnd.Program("<name>", ...)`. The
38
+ rename frees the generated name, so code that declares no name sends its later
39
+ traces to a new program under the generated name. Deployments of such a program that
40
+ already exist keep serving. A rename never clears the name of a program with
41
+ a deployment that can serve.
42
+
31
43
  `cmpnd programs create PROGRAM_NAME` makes the program ahead of time and prints
32
44
  its id on stdout. It refuses a program name that already has a program. The
33
45
  command reports what it created on stderr, and `--json` prints serve's whole
@@ -108,11 +120,12 @@ PROGRAM name up as the other `cmpnd programs` commands do, and sends
108
120
  `POST /api/v1/programs/{id}/rename`. The command needs `traces:write` or
109
121
  `optimizations:write`.
110
122
 
111
- The old name keeps resolving to the program, so code that still declares it
112
- reaches the same program. A program with no name takes its first name this
113
- way, and code that declares the new name with `cmpnd.Program(name, ...)`
114
- traces to it. Serve refuses a name another live
115
- program answers to, as its current or a retired name. A program in the Trash
123
+ The old name is free at once. It no longer resolves to the program, and any
124
+ program of the organization can take it, so code that still declares the old
125
+ name with `cmpnd.Program(name, ...)` reaches a new program, not this one.
126
+ Update that code to the new name. A program with no name takes its first name
127
+ this way, and code that declares the new name traces to it. Serve refuses
128
+ another live program's current name. A program in the Trash
116
129
  is refused until `cmpnd programs restore` returns it. A server from before the
117
130
  rename route says so, and the error points at the program's page in the web
118
131
  app, which renames it too.
@@ -460,8 +473,8 @@ optimization result, not a program. Each group's `--help` names the column its
460
473
  IDs come from.
461
474
 
462
475
  `cmpnd evals list [--program NAME] [--module CLASS] [--metric] [--status]`
463
- lists eval runs, newest first. `--program` takes the program's name, current
464
- or retired, and a name no program answers to is an error that names it.
476
+ lists eval runs, newest first. `--program` takes the program's current
477
+ name, and a name no program holds is an error that names it.
465
478
  `--module` takes the evaluated module's class, such as `ReAct`, and matches it
466
479
  exactly. The CLI sends them as `program_name` and `module_class`. Each eval
467
480
  run in `evals list`, `evals show` and `programs evals` names what it evaluated
@@ -146,7 +146,7 @@ optimization run name their program by `program_id`.
146
146
  [`CLUSTERING.md`](../../docs/CLUSTERING.md) explains how the hash is computed.
147
147
 
148
148
  - **On a span** — `_capture_module_attributes` in `callback.py` walks `instance.signature.input_fields` / `output_fields` and records names, types, descriptions and schemas. It reflects nothing, because a span never names a program.
149
- - **On a trace** — `_create_trace` in `callback.py` records the root signature, or for a composite module the `dspy.Predict` children's signatures as `component_signatures`. A root module call that names no program reflects the module once, for the name the SDK generates (`program_naming.generated_program_name`). The hash goes into that name and nowhere else.
149
+ - **On a trace** — `_create_trace` in `callback.py` records the root signature, or for a composite module the `dspy.Predict` children's signatures as `component_signatures`. A root module call that names no program reflects the module once, for the name the SDK generates (`program_naming.generated_program_name`). The hash goes into that name and nowhere else. The worker's kernel replaces that function with one that generates no name, so a kernel never reflects a module.
150
150
 
151
151
  `python-sdk/cmpnd/identity.py` is the home of every hash the SDK computes.
152
152
 
@@ -1035,7 +1035,7 @@ A new hand-rolled serializer on any of those paths reopens the hole. `tests/test
1035
1035
 
1036
1036
  ## See also
1037
1037
 
1038
- - [`./clustering.md`](../../docs/CLUSTERING.md) — the canonical explainer for `signature_hash`. Start here if you're wondering why two identical-looking modules have different hashes. A hash never decides a trace's program.
1038
+ - [`CLUSTERING.md`](../../docs/CLUSTERING.md) explains how traces and runs group under a program, and how the program signature hash is computed. A hash never decides a trace's program.
1039
1039
  - [`./optimization-tracking.md`](../../docs/optimization-tracking.md) — how `auto_instrument`'s GEPA patch and `cmpnd/optimizers/tracker.py` turn a `GEPA.compile` call into an `OptimizationRun` with linked evals.
1040
1040
  - The `cmpnd-testing` skill + [`../AGENTS.md`](../AGENTS.md) § "Running Tests & Checks" — patterns for writing callback tests against real databases, including `clear_context()` usage.
1041
1041
  - [`serve/DB.md`](../../serve/DB.md) — the Postgres schema these payloads land in.
@@ -11,8 +11,9 @@ This module keeps the answers. The transport makes the requests, because they ri
11
11
  client and its retry budget.
12
12
 
13
13
  An answer is kept for the life of the process. A name that serve later points at
14
- another program reaches a process only when the process starts again, and a renamed
15
- program's old name keeps resolving to it.
14
+ another program reaches a process only when the process starts again. A rename frees
15
+ the old name, so a process that resolved it before the rename keeps sending to the
16
+ renamed program, and a process started after it gets a new program under that name.
16
17
 
17
18
  A name settles in one of two ways. Serve gives an id, or serve refuses the name, as a
18
19
  server without program names does with ``405``. A refused name sends its traces without
@@ -5,7 +5,7 @@ name = "cmpnd"
5
5
  # it's new) — no git tags. Bump with `uv version --bump {minor,patch}` or by
6
6
  # hand. Runtime `cmpnd.__version__` reads installed metadata, so it tracks
7
7
  # this automatically. See docs/plans/2026-07-02-sdk-pypi-tag-free-publish.md.
8
- version = "0.75.0"
8
+ version = "0.77.0"
9
9
  description = "DSPy observability and deployment SDK for cmpnd"
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.11"
@@ -41,7 +41,7 @@ dependencies = [
41
41
  # Still required, and still the fast path — but `cmpnd/ir/xxh64.py` no
42
42
  # longer *needs* it: it falls back to a pure-Python xxh64 that the tests
43
43
  # check against this module, so a platform with no wheel and no compiler can
44
- # still compute a program's identity. Don't drop the dependency on that
44
+ # still compute a program's signature hash. Don't drop the dependency on that
45
45
  # basis; the C module is an order of magnitude faster and every ordinary
46
46
  # install should have it.
47
47
  "xxhash>=3.0.0",
@@ -505,7 +505,7 @@ wheels = [
505
505
 
506
506
  [[package]]
507
507
  name = "cmpnd"
508
- version = "0.75.0"
508
+ version = "0.77.0"
509
509
  source = { editable = "." }
510
510
  default-groups = ["dspy-3-4-1"]
511
511
  dependencies = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes