cmpnd 0.76.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.
- {cmpnd-0.76.0 → cmpnd-0.77.0}/PKG-INFO +1 -1
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/identity.py +10 -9
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/sdk-instrumentation.md +2 -2
- {cmpnd-0.76.0 → cmpnd-0.77.0}/pyproject.toml +2 -2
- {cmpnd-0.76.0 → cmpnd-0.77.0}/uv.lock +1 -1
- {cmpnd-0.76.0 → cmpnd-0.77.0}/.gitignore +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/AGENTS.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/CLAUDE.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/README.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_assessments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_authored_import.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_deployments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_exporter_pool.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_gepa_patch.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_http.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_program_patch.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_rlm_patch.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_runtime_tools.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_timespec.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_traces.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/_valsets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/authored.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/callback.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/api_client.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/admin.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/assessments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/auth.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/datasets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/deployments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/evals.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/login.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/optimizations.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/org.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/provider_credentials.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/tool_servers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/top.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/traces.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/commands/valsets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/credentials.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/deprecation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/pagination.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/shell.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/trace_render.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/tree_help.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/verbs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/cli/views.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/client.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/configuration.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/context.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/credentials.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/dataset_sync.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/datasets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/decorators.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/deployment.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/deployment_metadata.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/deployment_runs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/eval_handler.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/execution.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/exporter.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/exporter_http.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/helpers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/imaging.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/decode.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/encode.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/hash.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/program.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/reflection.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/types.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/ir/xxh64.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/lm_configuration.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/mcp_servers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/models.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/named_programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/optimization.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/optimizers/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/optimizers/gepa.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/optimizers/gepa_callback.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/optimizers/resume.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/optimizers/tracker.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/packaging.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/program_naming.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/references.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/retry.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/cmpnd/traces.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/2026-04-02-code-review.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/cli.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/client.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/custom-proposer.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/plans/2026-04-05-train-val-dataset-capture-design.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/plans/2026-04-05-train-val-dataset-capture.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/docs/reading-traces.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/examples/generalizing_proposer.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/examples/local_ollama.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/LINEAGE.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/README.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/bodies.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/client_floor.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/exporter_http.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/program_names.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/protocols.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/py.typed +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/request_log.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/retry.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/cmpnd_ingest/trace_facts.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/ingest/pyproject.toml +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/audit-sdist.sh +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/capture_review_run.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/check-pip-install.sh +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/check_release_artifacts.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/fixtures/review_run.json.gz +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/gepa_resume_bug.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/install-test-env.sh +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/release-gate.sh +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/release-real-models.sh +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/require_version_bump.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/seed_review_run.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/selfhost_compat.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/scripts/test-in-linux.sh +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/stubs/dspy/__init__.pyi +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/stubs/dspy/primitives/__init__.pyi +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/stubs/dspy/primitives/prediction.pyi +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/stubs/dspy/utils/__init__.pyi +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/stubs/dspy/utils/callback.pyi +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/stubs/dspy/utils/dummies.pyi +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_credential_route.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_deployment_signature_helpers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_exporter_helpers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_fake_clock.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_identity_helpers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_resolve_refs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/_traced_run.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/conftest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/committee_task.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/conftest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/continuation_task.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/data/committee_train.ndjson.gz +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/data/committee_val.ndjson.gz +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/fake_lm.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/helpers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/target_capabilities.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_assessments_cli.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_capture_prompts.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_composite_module.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_dataset_auto_creation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_deploy_execute.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_deploy_pandas.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_deploy_programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_edge_cases.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_example_hash.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_gepa_optimization.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_interpreter_spans.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_lm_accuracy.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_module_tracing.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimization_lineage.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimization_metric_identity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_authored_metric.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_continuation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_custom_proposer.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_failures.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_loop.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_review_committee.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_optimize_server_owned_completion.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_parallel_export.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_project_attribution.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_react_tool_spans.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_save_load.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_trace_structure.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_traces_read.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_user_attribution.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/e2e/test_valsets_cli.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/01_predict_qa.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/02_predict_renamed_field.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/03_chain_of_thought_qa.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/04_predict_richer_types.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/05_composite_two_predicts.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/06_multichaincomparison.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/07_program_of_thought.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/08_opaque_module.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/09_predict_pydantic_field.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/10_react.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/11_refine.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/12_retrieve.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/13_knn.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/14_parallel.json +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/identity_vectors/README.md +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/ingest_conformance.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/authored_optimize/judge.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/authored_optimize/optimize_hosted.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/conftest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/hosted_mcp_tool_optimize_probe.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/hosted_optimize_probe.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/optimization_run_probe.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/test_cli_deploy_smoketest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/test_logs_renders_traces.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/test_optimization_run.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/test_optimizing_progress.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/integration/test_unhappy_path.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/__main__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/drain.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/ingest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/latency_transport.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/rlm_shape.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/rlm_size_report.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/sweep.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/test_rlm_shape.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/load/test_rlm_size_report.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/conftest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/seed_parity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_auth.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_datasets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_deployments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_evals.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_health.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_modules.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_optimizations.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_signatures.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_trace_streaming.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/parity/test_traces.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/_provider.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/_readiness.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/_reliability.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/_result.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/mint_bedrock_token.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_bedrock_converse.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_deploy_programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_multi_client_stress.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_client_committee.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_continuation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_loop.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_loop_wasm.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_optimize_stress.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_provider_roles.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_readiness.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_real_provider_twins.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_reliability.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_reliability_classify.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_rlm_wasm.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/real_models/test_trace_search.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/span_reference_fixture.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_adapter_reentrancy.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_assessments_api.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_authored.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_authored_binding_credentials.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_authored_bundle_collisions.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_authored_metric_contract.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_authored_named_models.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_authored_optimize.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_callback.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_candidate_lineage.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/conftest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_admin.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_api_client.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_assessments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_auth.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_credentials.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_datasets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_deployment_runs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_deployments.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_evals.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_login.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_main.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_optimizations.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_org.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_pagination.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_parity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_programs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_provider_credentials.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_schema_sample.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_shell.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_tool_servers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_top.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_traces.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_traces_program_and_module.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_traces_search_wire.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_tree_help.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cli/test_valsets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_client.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_client_floor.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_client_program_names.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_clustering/__init__.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_clustering/conftest.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_clustering/test_edge_cases.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_clustering/test_hash_consistency.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_clustering/test_type_conversion.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_cmp551_grouping_identity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_configuration.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_context.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_context_propagation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_credential_kwargs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_credential_selection.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_credential_values.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_dataset_polling.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_dataset_sync.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_datasets.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_decision_client_spans.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_decorators.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_deploy.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_deploy_mcp_tool_references.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_deploy_program_id.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_deployment_metadata.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_deployment_runs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_deployments_read.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_eval.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_eval_example_attribution.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_eval_program_id.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_eval_start.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_eval_trace_grouping.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_exception_paths.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_execute.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_execute_run_identity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_exporter.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_exporter_program_names.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_exporter_queue.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_exporter_real.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_fake_lm.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_gepa_callback.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_gepa_integration.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_gepa_output_normalization.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_gepa_resume.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_identity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_imaging.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_import_weight.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_ingest_conformance.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_ingest_second_producer.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_integration.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_interpreter_callback.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_ir_encoder_properties.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_ir_golden_vectors.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_ir_roundtrip.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_lm15_native_calls.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_lm_configuration.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_lm_usage_shapes.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_mcp_tools.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_models.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_multi_client_stress_readiness.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_no_signature_hash_on_the_wire.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimization_program_names.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimization_progress.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimization_start.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize_budget.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize_lift.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize_lms.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize_proposer.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize_reflection_lm.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_optimize_terminal_failure.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_packaging.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_packaging_callable_source.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_packaging_mcp_tools.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_packaging_program_source.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_poll_until.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_program_id_deprecation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_program_identity.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_program_lineage_persist.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_program_names_in_deploy.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_program_naming.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_programs_create.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_project_payload.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_real_provider_twins_readiness.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_reflector_properties.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_reflector_smoke.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_release_gate_script.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_release_real_models_script.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_replaced_names.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_repro_reactv2_bugs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_require_version_bump.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_retry.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_reversible_failures.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_rlm_patch.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_run_attribution_paths.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_runtime_tools.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_schemas.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_seal_lm_credential.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_seed_review_run.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_signature_inputs.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_span_references.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_span_sent_once.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_system_one.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_trace_context_concurrency.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_trace_fact_wire_contract.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_trace_facts.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_trace_render.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_traces_read.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_tracked_gepa.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_tracker_enrich.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_truncation.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_upload_auth_headers.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_valsets_api.py +0 -0
- {cmpnd-0.76.0 → cmpnd-0.77.0}/tests/test_xxh64.py +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Identity and hash computations.
|
|
2
2
|
|
|
3
|
-
|
|
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
|
|
6
|
-
|
|
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*
|
|
88
|
-
|
|
89
|
-
|
|
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
|
|
160
|
-
this
|
|
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
|
|
@@ -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
|
-
- [
|
|
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.
|
|
@@ -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.
|
|
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
|
|
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",
|
|
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
|
|
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
|
|
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
|