cmpnd 0.41.0__tar.gz → 0.42.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.41.0 → cmpnd-0.42.0}/PKG-INFO +4 -6
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/top.py +1 -2
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/shell.py +1 -1
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/trace_render.py +2 -2
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/packaging.py +2 -2
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/sdk-instrumentation.md +1 -1
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/pyproject.toml +1 -1
- {cmpnd-0.41.0 → cmpnd-0.42.0}/pyproject.toml +10 -18
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/require_version_bump.py +2 -11
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/test_unhappy_path.py +1 -2
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/_readiness.py +1 -1
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_traces_search_wire.py +2 -4
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_require_version_bump.py +0 -7
- {cmpnd-0.41.0 → cmpnd-0.42.0}/uv.lock +464 -925
- {cmpnd-0.41.0 → cmpnd-0.42.0}/.gitignore +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/AGENTS.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/CLAUDE.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/README.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_assessments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_authored_import.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_deployments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_exporter_pool.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_gepa_patch.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_http.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_program_patch.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_rlm_patch.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_runtime_tools.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_timespec.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_traces.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/_valsets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/authored.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/callback.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/api_client.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/admin.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/assessments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/auth.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/datasets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/deployments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/evals.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/login.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/optimizations.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/org.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/programs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/provider_credentials.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/signatures.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/tool_servers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/traces.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/commands/valsets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/credentials.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/deprecation.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/pagination.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/tree_help.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/cli/verbs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/client.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/configuration.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/context.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/dataset_sync.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/datasets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/decorators.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/deployment.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/deployment_metadata.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/deployment_runs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/eval_handler.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/execution.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/exporter.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/exporter_http.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/helpers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/identity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/imaging.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/decode.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/encode.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/hash.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/program.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/reflection.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/types.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/ir/xxh64.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/lm_configuration.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/mcp_servers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/models.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/optimization.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/optimizers/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/optimizers/gepa.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/optimizers/gepa_callback.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/optimizers/resume.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/optimizers/tracker.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/programs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/references.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/retry.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/cmpnd/traces.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/2026-04-02-code-review.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/cli.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/client.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/custom-proposer.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/plans/2026-04-05-train-val-dataset-capture-design.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/plans/2026-04-05-train-val-dataset-capture.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/docs/reading-traces.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/examples/generalizing_proposer.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/examples/local_ollama.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/LINEAGE.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/README.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/bodies.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/exporter_http.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/protocols.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/py.typed +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/request_log.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/retry.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/ingest/cmpnd_ingest/trace_facts.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/audit-sdist.sh +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/capture_review_run.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/check-pip-install.sh +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/check_release_artifacts.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/fixtures/review_run.json.gz +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/gepa_resume_bug.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/release-stress.sh +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/seed_review_run.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/scripts/test-in-linux.sh +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/stubs/dspy/__init__.pyi +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/stubs/dspy/primitives/__init__.pyi +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/stubs/dspy/primitives/prediction.pyi +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/stubs/dspy/utils/__init__.pyi +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/stubs/dspy/utils/callback.pyi +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/stubs/dspy/utils/dummies.pyi +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/_deployment_signature_helpers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/_exporter_helpers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/_fake_clock.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/_identity_helpers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/_resolve_refs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/_traced_run.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/conftest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/committee_task.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/conftest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/data/committee_train.ndjson.gz +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/data/committee_val.ndjson.gz +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/fake_lm.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/helpers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/target_capabilities.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_assessments_cli.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_capture_prompts.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_composite_module.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_dataset_auto_creation.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_deploy_execute.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_deploy_pandas.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_deploy_programs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_edge_cases.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_example_hash.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_gepa_optimization.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_interpreter_spans.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_lm_accuracy.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_module_tracing.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_optimization_lineage.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_optimization_metric_identity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_optimize_failures.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_optimize_loop.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_optimize_review_committee.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_optimize_server_owned_completion.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_parallel_export.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_project_attribution.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_react_tool_spans.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_save_load.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_trace_structure.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_traces_read.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_user_attribution.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/e2e/test_valsets_cli.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/01_predict_qa.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/02_predict_renamed_field.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/03_chain_of_thought_qa.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/04_predict_richer_types.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/05_composite_two_predicts.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/06_multichaincomparison.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/07_program_of_thought.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/08_opaque_module.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/09_predict_pydantic_field.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/10_react.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/11_refine.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/12_retrieve.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/13_knn.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/14_parallel.json +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/identity_vectors/README.md +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/ingest_conformance.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/authored_optimize/judge.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/authored_optimize/optimize_hosted.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/conftest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/hosted_mcp_tool_optimize_probe.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/hosted_optimize_probe.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/optimization_run_probe.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/test_cli_deploy_smoketest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/test_logs_renders_traces.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/test_optimization_run.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/integration/test_optimizing_progress.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/__main__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/drain.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/ingest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/latency_transport.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/rlm_shape.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/rlm_size_report.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/sweep.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/test_rlm_shape.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/load/test_rlm_size_report.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/conftest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/seed_parity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_auth.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_datasets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_deployments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_evals.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_health.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_modules.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_optimizations.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_programs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_signatures.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_trace_streaming.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/parity/test_traces.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/span_reference_fixture.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/_provider.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/_reliability.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/_result.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/mint_bedrock_token.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_deploy_programs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_multi_client_stress.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_optimize_client_committee.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_optimize_loop.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_optimize_loop_wasm.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_optimize_stress.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_provider_roles.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_readiness.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_real_provider_twins.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_reliability.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_reliability_classify.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_rlm_wasm.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/stress/test_trace_search.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_adapter_reentrancy.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_assessments_api.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_authored.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_authored_bundle_collisions.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_authored_metric_contract.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_authored_named_models.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_authored_optimize.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_callback.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_candidate_lineage.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/conftest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_admin.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_api_client.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_assessments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_auth.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_credentials.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_datasets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_deployment_runs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_deployments.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_evals.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_login.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_main.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_optimizations.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_org.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_pagination.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_parity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_programs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_provider_credentials.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_schema_sample.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_shell.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_signatures.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_tool_servers.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_top.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_traces.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_tree_help.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cli/test_valsets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_client.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_clustering/__init__.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_clustering/conftest.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_clustering/test_edge_cases.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_clustering/test_hash_consistency.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_clustering/test_type_conversion.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_cmp551_grouping_identity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_configuration.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_context.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_context_propagation.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_dataset_polling.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_dataset_sync.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_datasets.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_decorators.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_deploy.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_deploy_mcp_tool_references.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_deploy_program_id.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_deployment_metadata.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_deployment_runs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_deployments_read.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_eval.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_eval_example_attribution.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_eval_start.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_eval_trace_grouping.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_exception_paths.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_execute.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_execute_run_identity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_exporter.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_exporter_queue.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_exporter_real.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_fake_lm.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_gepa_callback.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_gepa_integration.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_gepa_output_normalization.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_gepa_resume.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_identity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_imaging.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_import_weight.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_ingest_conformance.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_ingest_second_producer.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_integration.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_interpreter_callback.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_ir_encoder_properties.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_ir_golden_vectors.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_ir_roundtrip.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_lm15_native_calls.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_lm_configuration.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_lm_usage_shapes.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_mcp_tools.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_models.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_multi_client_stress_readiness.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimization_progress.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimization_start.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize_budget.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize_lift.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize_lms.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize_proposer.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize_reflection_lm.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_optimize_terminal_failure.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_packaging.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_packaging_callable_source.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_packaging_mcp_tools.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_packaging_program_source.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_poll_until.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_program_identity.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_program_lineage_persist.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_programs_create.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_project_payload.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_real_provider_twins_readiness.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_reflector_properties.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_reflector_smoke.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_release_stress_script.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_repro_reactv2_bugs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_retry.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_reversible_failures.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_rlm_patch.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_run_attribution_paths.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_runtime_tools.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_schemas.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_seed_review_run.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_signature_inputs.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_span_references.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_span_sent_once.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_trace_context_concurrency.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_trace_fact_wire_contract.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_trace_facts.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_trace_render.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_traces_read.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_tracked_gepa.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_tracker_enrich.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_truncation.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.0}/tests/test_valsets_api.py +0 -0
- {cmpnd-0.41.0 → cmpnd-0.42.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.42.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>
|
|
@@ -10,14 +10,13 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.14
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.15
|
|
19
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
-
Requires-Python: >=3.
|
|
19
|
+
Requires-Python: >=3.11
|
|
21
20
|
Requires-Dist: dspy>=3.1.3
|
|
22
21
|
Requires-Dist: httpx>=0.27.0
|
|
23
22
|
Requires-Dist: ipython>=8.20
|
|
@@ -32,8 +31,7 @@ Requires-Dist: gepa; extra == 'dev'
|
|
|
32
31
|
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
33
32
|
Requires-Dist: jsonschema>=4.0; extra == 'dev'
|
|
34
33
|
Requires-Dist: litellm; extra == 'dev'
|
|
35
|
-
Requires-Dist: numpy>=
|
|
36
|
-
Requires-Dist: numpy>=2.3; (python_version >= '3.11') and extra == 'dev'
|
|
34
|
+
Requires-Dist: numpy>=2.3; extra == 'dev'
|
|
37
35
|
Requires-Dist: pandas>=2.2; extra == 'dev'
|
|
38
36
|
Requires-Dist: pillow>=10.0; extra == 'dev'
|
|
39
37
|
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
@@ -43,7 +41,7 @@ Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
|
43
41
|
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
44
42
|
Requires-Dist: twine>=7.0; extra == 'dev'
|
|
45
43
|
Provides-Extra: fake-provider
|
|
46
|
-
Requires-Dist: cmpnd-fake-provider;
|
|
44
|
+
Requires-Dist: cmpnd-fake-provider; extra == 'fake-provider'
|
|
47
45
|
Provides-Extra: images
|
|
48
46
|
Requires-Dist: pillow>=10.0; extra == 'images'
|
|
49
47
|
Provides-Extra: mcp
|
|
@@ -83,8 +83,7 @@ def _parse_iso(ts: str | None) -> datetime | None:
|
|
|
83
83
|
if not ts:
|
|
84
84
|
return None
|
|
85
85
|
try:
|
|
86
|
-
|
|
87
|
-
return datetime.fromisoformat(ts.replace("Z", "+00:00"))
|
|
86
|
+
return datetime.fromisoformat(ts)
|
|
88
87
|
except (ValueError, TypeError):
|
|
89
88
|
return None
|
|
90
89
|
|
|
@@ -644,7 +644,7 @@ def _enable_readline(namespace: dict[str, Any]) -> None:
|
|
|
644
644
|
def _launch_repl(namespace: dict[str, Any], banner: str) -> None:
|
|
645
645
|
"""Prefer IPython (Jedi completion, history, multi-line); fall back to stdlib."""
|
|
646
646
|
try:
|
|
647
|
-
from IPython import start_ipython
|
|
647
|
+
from IPython import start_ipython
|
|
648
648
|
from traitlets.config import Config
|
|
649
649
|
except ImportError:
|
|
650
650
|
import code
|
|
@@ -194,8 +194,8 @@ _TS_RE = re.compile(r"^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(\.\d+)?(Z|[+-]\d{2}
|
|
|
194
194
|
|
|
195
195
|
def _parse_ts(value: Any) -> datetime.datetime | None:
|
|
196
196
|
"""Parse an RFC3339 timestamp tolerantly. Server emits nanosecond (9-digit)
|
|
197
|
-
fractions
|
|
198
|
-
|
|
197
|
+
fractions, so truncate the fraction to microseconds, the precision datetime
|
|
198
|
+
holds, and normalize a trailing Z. Returns None on anything unparsable
|
|
199
199
|
— the caller degrades (offset 0) rather than crashing."""
|
|
200
200
|
if not isinstance(value, str):
|
|
201
201
|
return None
|
|
@@ -460,8 +460,8 @@ def _collect_inlined_base_imports(
|
|
|
460
460
|
if typing_extensions.is_typeddict(ann_type):
|
|
461
461
|
# A TypedDict subclass reports `dict` as its base — the name its source
|
|
462
462
|
# actually spells survives only in the text. Use typing_extensions for
|
|
463
|
-
# the bare spelling because Pydantic requires it on Python 3.
|
|
464
|
-
#
|
|
463
|
+
# the bare spelling because Pydantic requires it on Python 3.11.
|
|
464
|
+
# Import both modules to cover either qualified spelling.
|
|
465
465
|
imports.add(ImportEntry("typing_extensions", "TypedDict"))
|
|
466
466
|
imports.add(ImportEntry("typing_extensions"))
|
|
467
467
|
imports.add(ImportEntry("typing"))
|
|
@@ -444,7 +444,7 @@ base written inside a function belongs to no module's globals, so a bare name
|
|
|
444
444
|
falls back to the runtime base at that position. A `TypedDict` subclass is the
|
|
445
445
|
one base read off the class rather than the text, because it reports `dict`:
|
|
446
446
|
`typing_extensions` supplies the name, which is what pydantic requires on Python
|
|
447
|
-
3.
|
|
447
|
+
3.11.
|
|
448
448
|
|
|
449
449
|
Two shapes refuse the package rather than deploying a program that raises
|
|
450
450
|
`NameError` on its first call, which is well after deploy reported it ready:
|
|
@@ -11,7 +11,7 @@ description = "The cmpnd ingest transport: the HTTP client that pushes traces, o
|
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
# `cmpnd`'s floor: these modules ship inside its wheel, so they must import on
|
|
13
13
|
# every Python it supports.
|
|
14
|
-
requires-python = ">=3.
|
|
14
|
+
requires-python = ">=3.11"
|
|
15
15
|
license = {text = "MIT"}
|
|
16
16
|
authors = [
|
|
17
17
|
{name = "cmpnd", email = "hello@cmpnd.ai"}
|
|
@@ -5,10 +5,10 @@ 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.42.0"
|
|
9
9
|
description = "DSPy observability and deployment SDK for cmpnd"
|
|
10
10
|
readme = "README.md"
|
|
11
|
-
requires-python = ">=3.
|
|
11
|
+
requires-python = ">=3.11"
|
|
12
12
|
license = {text = "MIT"}
|
|
13
13
|
authors = [
|
|
14
14
|
{name = "cmpnd", email = "hello@cmpnd.ai"}
|
|
@@ -19,7 +19,6 @@ classifiers = [
|
|
|
19
19
|
"Intended Audience :: Developers",
|
|
20
20
|
"License :: OSI Approved :: MIT License",
|
|
21
21
|
"Programming Language :: Python :: 3",
|
|
22
|
-
"Programming Language :: Python :: 3.10",
|
|
23
22
|
"Programming Language :: Python :: 3.11",
|
|
24
23
|
"Programming Language :: Python :: 3.12",
|
|
25
24
|
"Programming Language :: Python :: 3.13",
|
|
@@ -47,7 +46,7 @@ dependencies = [
|
|
|
47
46
|
"pydantic>=2.0",
|
|
48
47
|
# Detects TypedDicts from both typing and typing_extensions, and supplies
|
|
49
48
|
# the spelling Pydantic requires when generated programs run on Python
|
|
50
|
-
# 3.
|
|
49
|
+
# 3.11.
|
|
51
50
|
"typing-extensions>=4.1.0",
|
|
52
51
|
# Still required, and still the fast path — but `cmpnd/ir/xxh64.py` no
|
|
53
52
|
# longer *needs* it: it falls back to a pure-Python xxh64 that the tests
|
|
@@ -57,9 +56,8 @@ dependencies = [
|
|
|
57
56
|
# install should have it.
|
|
58
57
|
"xxhash>=3.0.0",
|
|
59
58
|
# Powers the interactive `cmpnd` shell (Jedi completion, multi-line,
|
|
60
|
-
# history search, syntax highlighting). No upper cap
|
|
61
|
-
#
|
|
62
|
-
# `code.interact` + rlcompleter if IPython somehow can't import.
|
|
59
|
+
# history search, syntax highlighting). No upper cap. The shell falls back
|
|
60
|
+
# to stdlib `code.interact` + rlcompleter if IPython somehow can't import.
|
|
63
61
|
"ipython>=8.20",
|
|
64
62
|
]
|
|
65
63
|
|
|
@@ -108,10 +106,8 @@ dev = [
|
|
|
108
106
|
# test_reflector_smoke.py builds numpy fixtures. dspy <=3.2.x required numpy
|
|
109
107
|
# unconditionally so it rode in transitively; dspy 3.3.0 moved numpy behind a
|
|
110
108
|
# `numpy` extra, so declare it directly as the test dependency it always was.
|
|
111
|
-
# numpy 2.3
|
|
112
|
-
|
|
113
|
-
"numpy>=1.26; python_version < '3.11'",
|
|
114
|
-
"numpy>=2.3; python_version >= '3.11'",
|
|
109
|
+
# numpy 2.3 is the first release with cp314 wheels.
|
|
110
|
+
"numpy>=2.3",
|
|
115
111
|
# tests/e2e/test_deploy_pandas.py deploys a program and a metric that import pandas,
|
|
116
112
|
# because the worker's kernel ships it. The SDK reads a function's imports from the
|
|
117
113
|
# live module before packaging it, so pandas has to be importable on the client.
|
|
@@ -131,12 +127,8 @@ dev = [
|
|
|
131
127
|
# integration stack points programs at. Carried as an SDK extra so a single
|
|
132
128
|
# `uv run --project python-sdk --extra fake-provider` brings up the SDK and the
|
|
133
129
|
# provider together — no separate venv to forget about.
|
|
134
|
-
#
|
|
135
|
-
# It targets python >=3.11, so the marker is gated: without it, resolution for
|
|
136
|
-
# the (3.10-supporting) SDK fails. The extra is dev-only and we always run it on
|
|
137
|
-
# 3.11+ (bin/setup uses 3.11).
|
|
138
130
|
fake-provider = [
|
|
139
|
-
"cmpnd-fake-provider
|
|
131
|
+
"cmpnd-fake-provider",
|
|
140
132
|
]
|
|
141
133
|
|
|
142
134
|
[tool.uv.sources]
|
|
@@ -231,7 +223,7 @@ markers = [
|
|
|
231
223
|
|
|
232
224
|
[tool.ruff]
|
|
233
225
|
line-length = 120
|
|
234
|
-
target-version = "
|
|
226
|
+
target-version = "py311"
|
|
235
227
|
|
|
236
228
|
[tool.ruff.lint]
|
|
237
229
|
select = ["E", "F", "I", "W"]
|
|
@@ -263,7 +255,7 @@ select = ["E", "F", "I", "W"]
|
|
|
263
255
|
# no relaxations, so it gets no executionEnvironment of its own.
|
|
264
256
|
include = ["cmpnd", "ingest/cmpnd_ingest", "examples", "tests/stress", "tests/e2e", "tests/load"]
|
|
265
257
|
stubPath = "stubs"
|
|
266
|
-
pythonVersion = "3.
|
|
258
|
+
pythonVersion = "3.11"
|
|
267
259
|
reportAny = false
|
|
268
260
|
reportExplicitAny = false
|
|
269
261
|
reportUnknownMemberType = false
|
|
@@ -30,6 +30,7 @@ import hashlib
|
|
|
30
30
|
import io
|
|
31
31
|
import json
|
|
32
32
|
import sys
|
|
33
|
+
import tomllib
|
|
33
34
|
import urllib.error
|
|
34
35
|
import urllib.request
|
|
35
36
|
import zipfile
|
|
@@ -77,17 +78,7 @@ def wheel_sources(blob: bytes) -> dict[str, str]:
|
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
def declared_version(pyproject: Path) -> str:
|
|
80
|
-
"""The version `[project]` names.
|
|
81
|
-
|
|
82
|
-
tomllib is imported here, not at module scope, because the SDK supports
|
|
83
|
-
Python >= 3.10 and tomllib arrived in 3.11: a developer on the floor version
|
|
84
|
-
would otherwise get a bare ImportError on a script that has nothing to do
|
|
85
|
-
with their interpreter. CI's sdk-lint runs 3.12.
|
|
86
|
-
"""
|
|
87
|
-
if sys.version_info < (3, 11):
|
|
88
|
-
raise SystemExit("this check needs Python >= 3.11 for tomllib; try `uv run --python 3.12` (CI uses 3.12)")
|
|
89
|
-
import tomllib
|
|
90
|
-
|
|
81
|
+
"""The version `[project]` names."""
|
|
91
82
|
with pyproject.open("rb") as handle:
|
|
92
83
|
return tomllib.load(handle)["project"]["version"]
|
|
93
84
|
|
|
@@ -93,8 +93,7 @@ def _malformed_zip() -> bytes:
|
|
|
93
93
|
def _parse_iso(ts: str | None) -> datetime | None:
|
|
94
94
|
if not ts:
|
|
95
95
|
return None
|
|
96
|
-
|
|
97
|
-
return datetime.fromisoformat(ts.replace("Z", "+00:00"))
|
|
96
|
+
return datetime.fromisoformat(ts)
|
|
98
97
|
|
|
99
98
|
|
|
100
99
|
# ---------------------------------------------------------------------------
|
|
@@ -116,7 +116,7 @@ def read_tolerating_timeout(
|
|
|
116
116
|
"not published yet", so they must fail rather than be retried to the deadline.
|
|
117
117
|
Every other exception still surfaces too, so a real HTTP error (which the
|
|
118
118
|
callers raise as ``AssertionError``) still fails fast. ``socket.timeout`` is an
|
|
119
|
-
alias of ``TimeoutError
|
|
119
|
+
alias of ``TimeoutError``, so the checks cover it. Pair with
|
|
120
120
|
``wait_for_publication``'s ``read_timeout`` cap, which bounds how long each
|
|
121
121
|
such request can block before it is retried.
|
|
122
122
|
"""
|
|
@@ -266,11 +266,9 @@ class TestRelativeWindowFlags:
|
|
|
266
266
|
after = dt.datetime.now(dt.timezone.utc)
|
|
267
267
|
emitted = mock_client.post.call_args[1]["json"]["start_time_from"]
|
|
268
268
|
# The wire form is Z-suffixed UTC, which is what the route's parser
|
|
269
|
-
# accepts.
|
|
270
|
-
# the package supports 3.10 — so swap it for the offset it abbreviates,
|
|
271
|
-
# as cmpnd/cli/commands/top.py does for the same reason.
|
|
269
|
+
# accepts.
|
|
272
270
|
assert emitted.endswith("Z"), f"expected a Z-suffixed UTC timestamp, got {emitted!r}"
|
|
273
|
-
sent = dt.datetime.fromisoformat(emitted
|
|
271
|
+
sent = dt.datetime.fromisoformat(emitted)
|
|
274
272
|
assert before - delta - dt.timedelta(seconds=2) <= sent <= after - delta + dt.timedelta(seconds=2)
|
|
275
273
|
|
|
276
274
|
def test_absolute_from_passes_through(self, mock_client):
|
|
@@ -8,7 +8,6 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
import importlib.util
|
|
10
10
|
import io
|
|
11
|
-
import sys
|
|
12
11
|
import zipfile
|
|
13
12
|
from pathlib import Path
|
|
14
13
|
|
|
@@ -64,12 +63,6 @@ class TestWheelSources:
|
|
|
64
63
|
assert set(rvb.wheel_sources(blob)) == {"cmpnd/a.py", "cmpnd_ingest/b.py"}
|
|
65
64
|
|
|
66
65
|
|
|
67
|
-
# Only this class reads pyproject.toml, and only tomllib can — which arrived in
|
|
68
|
-
# 3.11 while this package still supports 3.10, so the sdk-test matrix runs these
|
|
69
|
-
# on an interpreter the tool itself refuses. Scoped to the class rather than the
|
|
70
|
-
# module so 3.10 still covers extraction, comparison and reporting, which are
|
|
71
|
-
# where the logic lives. The tool runs on 3.12 in sdk-lint.
|
|
72
|
-
@pytest.mark.skipif(sys.version_info < (3, 11), reason="the check needs tomllib (3.11+); sdk-lint runs 3.12")
|
|
73
66
|
class TestCheck:
|
|
74
67
|
def test_passes_when_the_version_is_new_to_pypi(self, tmp_path: Path):
|
|
75
68
|
make_tree(tmp_path, "9.9.9", {"cmpnd/a.py": "x = 1"})
|