cmpnd 0.86.1__tar.gz → 0.87.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.86.1 → cmpnd-0.87.0}/PKG-INFO +8 -2
- {cmpnd-0.86.1 → cmpnd-0.87.0}/README.md +4 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/shell.py +14 -5
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/cli.md +5 -1
- {cmpnd-0.86.1 → cmpnd-0.87.0}/pyproject.toml +12 -5
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_shell.py +15 -1
- {cmpnd-0.86.1 → cmpnd-0.87.0}/uv.lock +8 -4
- {cmpnd-0.86.1 → cmpnd-0.87.0}/.gitignore +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/AGENTS.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/CLAUDE.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_assessments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_authored_import.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_deployments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_exporter_pool.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_gepa_patch.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_http.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_program_patch.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_rlm_patch.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_runtime_tools.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_timespec.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_traces.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/_valsets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/authored.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/callback.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/api_client.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/admin.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/assessments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/auth.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/datasets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/deployments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/evals.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/login.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/optimizations.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/org.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/provider_credentials.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/tool_servers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/top.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/traces.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/commands/valsets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/credentials.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/deprecation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/pagination.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/trace_render.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/tree_help.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/verbs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/cli/views.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/client.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/configuration.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/context.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/credentials.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/dataset_sync.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/datasets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/decorators.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/deployment.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/deployment_metadata.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/deployment_runs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/eval_handler.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/execution.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/exporter.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/exporter_http.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/helpers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/identity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/imaging.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/decode.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/encode.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/hash.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/program.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/reflection.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/types.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/ir/xxh64.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/lm_configuration.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/mcp_servers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/models.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/named_programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/optimization.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/optimizers/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/optimizers/gepa.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/optimizers/gepa_callback.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/optimizers/resume.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/optimizers/tracker.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/packaging.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/program_naming.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/references.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/retry.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/cmpnd/traces.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/2026-04-02-code-review.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/client.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/custom-proposer.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/plans/2026-04-05-train-val-dataset-capture-design.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/plans/2026-04-05-train-val-dataset-capture.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/reading-traces.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/docs/sdk-instrumentation.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/examples/generalizing_proposer.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/examples/local_ollama.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/LINEAGE.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/README.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/bodies.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/client_floor.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/exporter_http.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/program_names.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/protocols.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/py.typed +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/request_log.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/retry.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/span_context.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/trace_facts.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/cmpnd_ingest/user_agent.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/ingest/pyproject.toml +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/audit-sdist.sh +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/capture_review_run.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/check-pip-install.sh +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/check_release_artifacts.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/fixtures/review_run.json.gz +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/gepa_resume_bug.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/install-test-env.sh +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/release-gate.sh +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/release-real-models.sh +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/require_version_bump.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/seed_review_run.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/selfhost_compat.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/scripts/test-in-linux.sh +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/stubs/dspy/__init__.pyi +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/stubs/dspy/primitives/__init__.pyi +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/stubs/dspy/primitives/prediction.pyi +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/stubs/dspy/utils/__init__.pyi +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/stubs/dspy/utils/callback.pyi +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/stubs/dspy/utils/dummies.pyi +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_credential_route.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_deployment_signature_helpers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_exporter_helpers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_fake_clock.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_identity_helpers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_resolve_refs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/_traced_run.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/conftest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/committee_task.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/conftest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/continuation_task.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/data/committee_train.ndjson.gz +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/data/committee_val.ndjson.gz +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/fake_lm.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/helpers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/target_capabilities.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_assessments_cli.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_capture_prompts.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_composite_module.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_dataset_auto_creation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_deploy_execute.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_deploy_pandas.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_deploy_programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_edge_cases.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_example_hash.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_gepa_optimization.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_interpreter_spans.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_lm_accuracy.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_module_tracing.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimization_lineage.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimization_metric_identity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_authored_metric.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_continuation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_custom_proposer.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_failures.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_loop.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_review_committee.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_optimize_server_owned_completion.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_parallel_export.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_project_attribution.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_react_tool_spans.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_save_load.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_trace_structure.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_traces_read.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_user_attribution.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/e2e/test_valsets_cli.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/01_predict_qa.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/02_predict_renamed_field.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/03_chain_of_thought_qa.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/04_predict_richer_types.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/05_composite_two_predicts.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/06_multichaincomparison.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/07_program_of_thought.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/08_opaque_module.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/09_predict_pydantic_field.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/10_react.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/11_refine.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/12_retrieve.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/13_knn.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/14_parallel.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/identity_vectors/README.md +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/ingest_conformance.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/authored_optimize/judge.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/authored_optimize/optimize_hosted.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/conftest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/hosted_mcp_tool_optimize_probe.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/hosted_optimize_probe.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/optimization_run_probe.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/test_cli_deploy_smoketest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/test_logs_renders_traces.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/test_optimization_run.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/test_optimizing_progress.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/integration/test_unhappy_path.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/lm15_prompt_fixture.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/lm15_prompts/four_turn_predict.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/lm15_prompts/rlm_six_turns.json +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/__main__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/drain.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/ingest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/latency_transport.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/rlm_shape.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/rlm_size_report.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/sweep.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/test_rlm_shape.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/load/test_rlm_size_report.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/conftest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/seed_parity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_auth.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_datasets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_deployments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_evals.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_health.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_modules.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_optimizations.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_signatures.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_trace_streaming.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/parity/test_traces.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/_provider.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/_readiness.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/_reliability.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/_result.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/mint_bedrock_token.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_bedrock_converse.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_deploy_programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_multi_client_stress.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_optimize_client_committee.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_optimize_continuation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_optimize_loop.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_optimize_loop_wasm.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_optimize_stress.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_provider_roles.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_readiness.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_real_provider_twins.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_reliability.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_reliability_classify.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_rlm_wasm.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/real_models/test_trace_search.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/span_reference_fixture.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_adapter_reentrancy.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_assessments_api.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_authored.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_authored_binding_credentials.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_authored_bundle_collisions.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_authored_metric_contract.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_authored_named_models.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_authored_optimize.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_callback.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_candidate_lineage.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/conftest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_admin.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_api_client.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_assessments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_auth.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_credentials.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_datasets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_deployment_runs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_deployments.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_evals.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_login.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_main.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_optimizations.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_org.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_pagination.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_parity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_programs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_provider_credentials.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_schema_sample.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_tool_servers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_top.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_traces.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_traces_program_and_module.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_traces_search_wire.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_tree_help.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cli/test_valsets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_client.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_client_floor.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_client_program_names.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_clustering/__init__.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_clustering/conftest.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_clustering/test_edge_cases.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_clustering/test_hash_consistency.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_clustering/test_type_conversion.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_cmp551_grouping_identity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_configuration.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_context.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_context_propagation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_credential_kwargs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_credential_selection.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_credential_values.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_dataset_polling.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_dataset_sync.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_datasets.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_decision_client_spans.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_decorators.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_deploy.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_deploy_mcp_tool_references.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_deploy_program_id.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_deployment_metadata.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_deployment_runs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_deployments_read.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_eval.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_eval_example_attribution.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_eval_program_id.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_eval_start.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_eval_trace_grouping.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_exception_paths.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_execute.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_execute_run_identity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_exporter.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_exporter_program_names.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_exporter_queue.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_exporter_real.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_fake_lm.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_gepa_callback.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_gepa_integration.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_gepa_output_normalization.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_gepa_resume.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_identity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_imaging.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_import_weight.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_ingest_conformance.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_ingest_second_producer.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_integration.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_interpreter_callback.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_ir_encoder_properties.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_ir_golden_vectors.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_ir_roundtrip.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_lm15_native_calls.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_lm15_prompt_fixtures.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_lm15_prompt_references.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_lm_configuration.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_lm_usage_shapes.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_mcp_tools.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_models.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_multi_client_stress_readiness.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_no_signature_hash_on_the_wire.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimization_phase_callback.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimization_program_names.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimization_progress.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimization_start.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize_budget.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize_lift.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize_lms.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize_proposer.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize_reflection_lm.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_optimize_terminal_failure.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_packaging.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_packaging_callable_source.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_packaging_mcp_tools.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_packaging_program_source.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_poll_until.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_program_id_deprecation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_program_identity.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_program_lineage_persist.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_program_names_in_deploy.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_program_naming.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_programs_create.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_project_payload.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_real_provider_twins_readiness.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_reflector_properties.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_reflector_smoke.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_release_gate_script.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_release_real_models_script.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_replaced_names.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_repro_reactv2_bugs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_require_version_bump.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_retry.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_reversible_failures.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_rlm_patch.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_run_attribution_paths.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_runtime_tools.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_schemas.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_seal_lm_credential.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_seed_review_run.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_signature_inputs.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_span_references.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_span_sent_once.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_span_submission.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_span_submission_wire_contract.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_system_one.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_token_attribution.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_trace_context_concurrency.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_trace_fact_wire_contract.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_trace_facts.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_trace_render.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_traces_read.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_tracked_gepa.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_tracker_enrich.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_truncation.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_upload_auth_headers.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_user_agent.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_valsets_api.py +0 -0
- {cmpnd-0.86.1 → cmpnd-0.87.0}/tests/test_xxh64.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: cmpnd
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.87.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>
|
|
@@ -19,7 +19,6 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
19
19
|
Requires-Python: >=3.11
|
|
20
20
|
Requires-Dist: dspy>=3.3.0
|
|
21
21
|
Requires-Dist: httpx>=0.27.0
|
|
22
|
-
Requires-Dist: ipython>=8.20
|
|
23
22
|
Requires-Dist: pydantic>=2.0
|
|
24
23
|
Requires-Dist: typing-extensions>=4.1.0
|
|
25
24
|
Requires-Dist: xxhash>=3.0.0
|
|
@@ -28,6 +27,7 @@ Requires-Dist: basedpyright>=1.39; extra == 'dev'
|
|
|
28
27
|
Requires-Dist: boto3>=1.34; extra == 'dev'
|
|
29
28
|
Requires-Dist: gepa; extra == 'dev'
|
|
30
29
|
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
30
|
+
Requires-Dist: ipython>=8.20; extra == 'dev'
|
|
31
31
|
Requires-Dist: jsonschema>=4.0; extra == 'dev'
|
|
32
32
|
Requires-Dist: litellm; extra == 'dev'
|
|
33
33
|
Requires-Dist: litellm<1.102; (python_version >= '3.15') and extra == 'dev'
|
|
@@ -47,6 +47,8 @@ Requires-Dist: pillow>=10.0; extra == 'images'
|
|
|
47
47
|
Provides-Extra: mcp
|
|
48
48
|
Requires-Dist: dspy>=3.3.1; extra == 'mcp'
|
|
49
49
|
Requires-Dist: mcp>=1.9; extra == 'mcp'
|
|
50
|
+
Provides-Extra: shell
|
|
51
|
+
Requires-Dist: ipython>=8.20; extra == 'shell'
|
|
50
52
|
Description-Content-Type: text/markdown
|
|
51
53
|
|
|
52
54
|
# cmpnd
|
|
@@ -61,6 +63,10 @@ deployments and optimization runs under that name.
|
|
|
61
63
|
uv add cmpnd # or: pip install cmpnd
|
|
62
64
|
```
|
|
63
65
|
|
|
66
|
+
The interactive `cmpnd` shell uses IPython when you install the `shell` extra:
|
|
67
|
+
`uv add 'cmpnd[shell]'` or `pip install 'cmpnd[shell]'`. The plain install
|
|
68
|
+
leaves IPython out, and the shell then runs on the standard Python prompt.
|
|
69
|
+
|
|
64
70
|
## Authentication
|
|
65
71
|
|
|
66
72
|
The `cmpnd` library works with the cmpnd service at
|
|
@@ -10,6 +10,10 @@ deployments and optimization runs under that name.
|
|
|
10
10
|
uv add cmpnd # or: pip install cmpnd
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
The interactive `cmpnd` shell uses IPython when you install the `shell` extra:
|
|
14
|
+
`uv add 'cmpnd[shell]'` or `pip install 'cmpnd[shell]'`. The plain install
|
|
15
|
+
leaves IPython out, and the shell then runs on the standard Python prompt.
|
|
16
|
+
|
|
13
17
|
## Authentication
|
|
14
18
|
|
|
15
19
|
The `cmpnd` library works with the cmpnd service at
|
|
@@ -648,28 +648,37 @@ def _enable_readline(namespace: dict[str, Any]) -> None:
|
|
|
648
648
|
atexit.register(_save_history)
|
|
649
649
|
|
|
650
650
|
|
|
651
|
+
_NO_IPYTHON_HINT = "IPython is not installed. For completion and history, run: pip install 'cmpnd[shell]'\n"
|
|
652
|
+
|
|
653
|
+
|
|
651
654
|
def _launch_repl(namespace: dict[str, Any], banner: str) -> None:
|
|
652
|
-
"""Prefer IPython (Jedi completion, history, multi-line); fall back to stdlib.
|
|
655
|
+
"""Prefer IPython (Jedi completion, history, multi-line); fall back to stdlib.
|
|
656
|
+
|
|
657
|
+
IPython ships in the optional ``cmpnd[shell]`` extra. Without it, the shell
|
|
658
|
+
prints one line that names the extra and runs on ``code.interact``.
|
|
659
|
+
"""
|
|
653
660
|
try:
|
|
654
|
-
|
|
655
|
-
|
|
661
|
+
import IPython
|
|
662
|
+
import traitlets.config
|
|
656
663
|
except ImportError:
|
|
657
664
|
import code
|
|
658
665
|
|
|
666
|
+
sys.stderr.write(_NO_IPYTHON_HINT)
|
|
667
|
+
sys.stderr.flush()
|
|
659
668
|
_enable_readline(namespace)
|
|
660
669
|
sys.stdout.write(banner)
|
|
661
670
|
sys.stdout.flush()
|
|
662
671
|
code.interact(banner="", local=namespace, exitmsg="")
|
|
663
672
|
return
|
|
664
673
|
|
|
665
|
-
cfg = Config()
|
|
674
|
+
cfg = traitlets.config.Config()
|
|
666
675
|
cfg.TerminalInteractiveShell.banner1 = banner
|
|
667
676
|
cfg.TerminalInteractiveShell.banner2 = ""
|
|
668
677
|
cfg.TerminalInteractiveShell.confirm_exit = False
|
|
669
678
|
# IPython 9.x appends a random "Tip: use %timeit ..." after banner2.
|
|
670
679
|
# Suppress — our own banner already tells users what to type.
|
|
671
680
|
cfg.TerminalInteractiveShell.enable_tip = False
|
|
672
|
-
start_ipython(argv=[], user_ns=namespace, config=cfg)
|
|
681
|
+
IPython.start_ipython(argv=[], user_ns=namespace, config=cfg)
|
|
673
682
|
|
|
674
683
|
|
|
675
684
|
def launch(api_key: str | None = None, endpoint: str | None = None) -> None:
|
|
@@ -6,7 +6,11 @@ runs and inspects DSPy programs on the platform. Every command reads
|
|
|
6
6
|
`--api-key` and `--endpoint`. `cmpnd auth me` prints the resolved identity.
|
|
7
7
|
|
|
8
8
|
Bare `cmpnd`, with no subcommand, opens an interactive Python shell with the
|
|
9
|
-
platform verbs loaded (`cmpnd.cli.shell`).
|
|
9
|
+
platform verbs loaded (`cmpnd.cli.shell`). The shell runs on IPython when the
|
|
10
|
+
`cmpnd[shell]` extra is installed (`pip install 'cmpnd[shell]'`), which adds
|
|
11
|
+
Jedi completion, multi-line input and history search. Without the extra, the
|
|
12
|
+
shell prints one line that names it and runs on the standard library's
|
|
13
|
+
`code.interact` with readline completion.
|
|
10
14
|
|
|
11
15
|
## Program names
|
|
12
16
|
|
|
@@ -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.87.0"
|
|
9
9
|
description = "DSPy observability and deployment SDK for cmpnd"
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
requires-python = ">=3.11"
|
|
@@ -45,10 +45,6 @@ dependencies = [
|
|
|
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",
|
|
48
|
-
# Powers the interactive `cmpnd` shell (Jedi completion, multi-line,
|
|
49
|
-
# history search, syntax highlighting). No upper cap. The shell falls back
|
|
50
|
-
# to stdlib `code.interact` + rlcompleter if IPython somehow can't import.
|
|
51
|
-
"ipython>=8.20",
|
|
52
48
|
]
|
|
53
49
|
|
|
54
50
|
[project.optional-dependencies]
|
|
@@ -59,6 +55,14 @@ dependencies = [
|
|
|
59
55
|
images = [
|
|
60
56
|
"pillow>=10.0",
|
|
61
57
|
]
|
|
58
|
+
# The interactive `cmpnd` shell's IPython front end: Jedi completion, multi-line
|
|
59
|
+
# input, history search and syntax highlighting. Optional, because IPython and its
|
|
60
|
+
# dependency tree would otherwise land in every environment that only traces or
|
|
61
|
+
# deploys programs. Without it, the shell runs on stdlib `code.interact` with
|
|
62
|
+
# rlcompleter and prints one line that names this extra. No upper cap.
|
|
63
|
+
shell = [
|
|
64
|
+
"ipython>=8.20",
|
|
65
|
+
]
|
|
62
66
|
# The MCP client library, needed only by `cmpnd.mcp_tools` when it connects to a tool
|
|
63
67
|
# server from a notebook. Optional and lazily imported: it pulls a transport stack that
|
|
64
68
|
# an SDK used purely for tracing, deploying and optimizing never touches, and its
|
|
@@ -110,6 +114,9 @@ dev = [
|
|
|
110
114
|
# Exercises the image-thumbnail path (the `images` extra) so the positive
|
|
111
115
|
# branch is covered in CI, not just the Pillow-absent fallback.
|
|
112
116
|
"pillow>=10.0",
|
|
117
|
+
# Exercises the shell's IPython front end (the `shell` extra) so both REPL
|
|
118
|
+
# branches are covered in CI.
|
|
119
|
+
"ipython>=8.20",
|
|
113
120
|
# The metadata validator the release path runs, brought in-tree so sdk-lint
|
|
114
121
|
# can check a freshly built wheel + sdist BEFORE release day. Floor is the
|
|
115
122
|
# first twine whose `packaging` understands `Metadata-Version: 2.5`, which
|
|
@@ -708,7 +708,21 @@ class TestDeployHelper:
|
|
|
708
708
|
class TestReplFallback:
|
|
709
709
|
def test_falls_back_when_ipython_missing(self):
|
|
710
710
|
with mock.patch.dict("sys.modules", {"IPython": None}):
|
|
711
|
-
with mock.patch("code.interact") as interact:
|
|
711
|
+
with mock.patch("code.interact", autospec=True) as interact:
|
|
712
712
|
shell._launch_repl({"x": 1}, "BANNER\n")
|
|
713
713
|
interact.assert_called_once()
|
|
714
714
|
assert interact.call_args.kwargs["local"] == {"x": 1}
|
|
715
|
+
|
|
716
|
+
def test_fallback_names_the_shell_extra(self, capsys):
|
|
717
|
+
with mock.patch.dict("sys.modules", {"IPython": None}):
|
|
718
|
+
with mock.patch("code.interact", autospec=True):
|
|
719
|
+
shell._launch_repl({}, "BANNER\n")
|
|
720
|
+
err = capsys.readouterr().err
|
|
721
|
+
assert err.count("\n") == 1
|
|
722
|
+
assert "pip install 'cmpnd[shell]'" in err
|
|
723
|
+
|
|
724
|
+
def test_ipython_prints_no_fallback_line(self, capsys):
|
|
725
|
+
with mock.patch("IPython.start_ipython", autospec=True) as start:
|
|
726
|
+
shell._launch_repl({}, "BANNER\n")
|
|
727
|
+
start.assert_called_once()
|
|
728
|
+
assert "cmpnd[shell]" not in capsys.readouterr().err
|
|
@@ -505,7 +505,7 @@ wheels = [
|
|
|
505
505
|
|
|
506
506
|
[[package]]
|
|
507
507
|
name = "cmpnd"
|
|
508
|
-
version = "0.
|
|
508
|
+
version = "0.87.0"
|
|
509
509
|
source = { editable = "." }
|
|
510
510
|
default-groups = ["dspy-3-4-1"]
|
|
511
511
|
dependencies = [
|
|
@@ -514,7 +514,6 @@ dependencies = [
|
|
|
514
514
|
{ name = "dspy", version = "3.4.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-5-cmpnd-dspy-3-4-0' or (extra == 'extra-5-cmpnd-mcp' and extra == 'group-5-cmpnd-dspy-3-3-0') or (extra == 'group-5-cmpnd-dspy-3-3-0' and extra == 'group-5-cmpnd-dspy-3-3-1') or (extra == 'group-5-cmpnd-dspy-3-3-0' and extra == 'group-5-cmpnd-dspy-3-4-1') or (extra == 'group-5-cmpnd-dspy-3-3-1' and extra == 'group-5-cmpnd-dspy-3-4-1')" },
|
|
515
515
|
{ name = "dspy", version = "3.4.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-5-cmpnd-dspy-3-4-1' or (extra == 'group-5-cmpnd-dspy-3-3-0' and extra == 'group-5-cmpnd-dspy-3-3-1') or (extra == 'group-5-cmpnd-dspy-3-3-0' and extra == 'group-5-cmpnd-dspy-3-4-0') or (extra == 'group-5-cmpnd-dspy-3-3-1' and extra == 'group-5-cmpnd-dspy-3-4-0') or (extra == 'extra-5-cmpnd-mcp' and extra != 'group-5-cmpnd-dspy-3-3-1' and extra != 'group-5-cmpnd-dspy-3-4-0') or (extra != 'group-5-cmpnd-dspy-3-3-0' and extra != 'group-5-cmpnd-dspy-3-3-1' and extra != 'group-5-cmpnd-dspy-3-4-0')" },
|
|
516
516
|
{ name = "httpx" },
|
|
517
|
-
{ name = "ipython" },
|
|
518
517
|
{ name = "pydantic" },
|
|
519
518
|
{ name = "typing-extensions" },
|
|
520
519
|
{ name = "xxhash" },
|
|
@@ -527,6 +526,7 @@ dev = [
|
|
|
527
526
|
{ name = "gepa", version = "0.1.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-5-cmpnd-dspy-3-3-0' or (extra == 'group-5-cmpnd-dspy-3-3-1' and extra == 'group-5-cmpnd-dspy-3-4-0') or (extra == 'group-5-cmpnd-dspy-3-3-1' and extra == 'group-5-cmpnd-dspy-3-4-1') or (extra == 'group-5-cmpnd-dspy-3-4-0' and extra == 'group-5-cmpnd-dspy-3-4-1')" },
|
|
528
527
|
{ name = "gepa", version = "0.1.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-5-cmpnd-mcp' or extra != 'group-5-cmpnd-dspy-3-3-0' or extra == 'group-5-cmpnd-dspy-3-3-1' or extra == 'group-5-cmpnd-dspy-3-4-0' or extra == 'group-5-cmpnd-dspy-3-4-1'" },
|
|
529
528
|
{ name = "hypothesis" },
|
|
529
|
+
{ name = "ipython" },
|
|
530
530
|
{ name = "jsonschema" },
|
|
531
531
|
{ name = "litellm" },
|
|
532
532
|
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
|
@@ -552,6 +552,9 @@ mcp = [
|
|
|
552
552
|
{ name = "dspy", version = "3.4.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-5-cmpnd-dspy-3-4-1' or (extra == 'group-5-cmpnd-dspy-3-3-0' and extra == 'group-5-cmpnd-dspy-3-3-1') or (extra == 'group-5-cmpnd-dspy-3-3-0' and extra == 'group-5-cmpnd-dspy-3-4-0') or (extra == 'group-5-cmpnd-dspy-3-3-1' and extra == 'group-5-cmpnd-dspy-3-4-0') or (extra == 'extra-5-cmpnd-mcp' and extra != 'group-5-cmpnd-dspy-3-3-1' and extra != 'group-5-cmpnd-dspy-3-4-0') or (extra != 'group-5-cmpnd-dspy-3-3-0' and extra != 'group-5-cmpnd-dspy-3-3-1' and extra != 'group-5-cmpnd-dspy-3-4-0')" },
|
|
553
553
|
{ name = "mcp" },
|
|
554
554
|
]
|
|
555
|
+
shell = [
|
|
556
|
+
{ name = "ipython" },
|
|
557
|
+
]
|
|
555
558
|
|
|
556
559
|
[package.dev-dependencies]
|
|
557
560
|
dspy-3-3-0 = [
|
|
@@ -577,7 +580,8 @@ requires-dist = [
|
|
|
577
580
|
{ name = "gepa", marker = "extra == 'dev'" },
|
|
578
581
|
{ name = "httpx", specifier = ">=0.27.0" },
|
|
579
582
|
{ name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.100" },
|
|
580
|
-
{ name = "ipython", specifier = ">=8.20" },
|
|
583
|
+
{ name = "ipython", marker = "extra == 'dev'", specifier = ">=8.20" },
|
|
584
|
+
{ name = "ipython", marker = "extra == 'shell'", specifier = ">=8.20" },
|
|
581
585
|
{ name = "jsonschema", marker = "extra == 'dev'", specifier = ">=4.0" },
|
|
582
586
|
{ name = "litellm", marker = "python_full_version >= '3.15' and extra == 'dev'", specifier = "<1.102" },
|
|
583
587
|
{ name = "litellm", marker = "extra == 'dev'" },
|
|
@@ -596,7 +600,7 @@ requires-dist = [
|
|
|
596
600
|
{ name = "typing-extensions", specifier = ">=4.1.0" },
|
|
597
601
|
{ name = "xxhash", specifier = ">=3.0.0" },
|
|
598
602
|
]
|
|
599
|
-
provides-extras = ["images", "mcp", "dev", "fake-provider"]
|
|
603
|
+
provides-extras = ["images", "shell", "mcp", "dev", "fake-provider"]
|
|
600
604
|
|
|
601
605
|
[package.metadata.requires-dev]
|
|
602
606
|
dspy-3-3-0 = [{ name = "dspy", specifier = "==3.3.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
|