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