cmpnd 0.4.2__tar.gz → 0.4.3__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.4.2 → cmpnd-0.4.3}/PKG-INFO +1 -1
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/callback.py +18 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/models.py +5 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/pyproject.toml +1 -1
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_callback.py +64 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_models.py +10 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/uv.lock +62 -62
- {cmpnd-0.4.2 → cmpnd-0.4.3}/.gitignore +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/CLAUDE.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/README.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/_gepa_patch.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/_program_patch.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/_rlm_patch.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/api_client.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/admin.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/auth.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/datasets.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/deployments.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/evals.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/login.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/optimizations.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/org.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/programs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/top.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/commands/traces.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/credentials.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/shell.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/cli/verbs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/configuration.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/context.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/dataset_sync.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/datasets.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/decorators.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/deployment.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/eval_handler.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/execution.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/exporter.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/helpers.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/identity.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/decode.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/encode.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/hash.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/program.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/reflection.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/ir/types.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/optimization.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/optimizers/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/optimizers/gepa.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/optimizers/gepa_callback.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/optimizers/resume.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/optimizers/tracker.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/cmpnd/packaging.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/docs/2026-04-02-code-review.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/docs/plans/2026-04-05-train-val-dataset-capture-design.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/docs/plans/2026-04-05-train-val-dataset-capture.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/docs/sdk-instrumentation.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/examples/local_ollama.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/scripts/capture_review_run.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/scripts/fixtures/review_run.json.gz +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/scripts/gepa_resume_bug.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/scripts/seed_review_run.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/stubs/dspy/__init__.pyi +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/stubs/dspy/primitives/__init__.pyi +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/stubs/dspy/primitives/prediction.pyi +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/stubs/dspy/utils/__init__.pyi +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/stubs/dspy/utils/callback.pyi +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/_exporter_helpers.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/_identity_helpers.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/committee_task.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/conftest.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/data/committee_train.ndjson.gz +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/data/committee_val.ndjson.gz +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/fake_lm.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/helpers.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_capture_prompts.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_composite_module.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_dataset_auto_creation.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_deploy_execute.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_deploy_programs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_edge_cases.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_example_hash.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_gepa_optimization.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_lm_accuracy.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_module_tracing.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_optimization_lineage.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_optimization_metric_identity.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_optimize_failures.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_optimize_loop.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_optimize_review_committee.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_optimize_server_owned_completion.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_parallel_export.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_project_attribution.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_react_tool_spans.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_save_load.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_trace_structure.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/e2e/test_user_attribution.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/01_predict_qa.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/02_predict_renamed_field.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/03_chain_of_thought_qa.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/04_predict_richer_types.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/05_composite_two_predicts.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/06_multichaincomparison.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/07_program_of_thought.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/08_opaque_module.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/09_predict_pydantic_field.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/10_react.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/11_refine.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/12_retrieve.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/13_knn.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/14_parallel.json +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/identity_vectors/README.md +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/integration/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/integration/conftest.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/integration/test_cli_deploy_smoketest.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/integration/test_logs_renders_traces.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/integration/test_optimizing_progress.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/integration/test_unhappy_path.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/conftest.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/seed_parity.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_auth.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_datasets.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_deployments.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_evals.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_health.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_modules.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_optimizations.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_programs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_signatures.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_trace_streaming.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/parity/test_traces.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/_reliability.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_deploy_programs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_multi_client_stress.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_optimize_client_committee.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_optimize_loop.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_optimize_stress.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_real_provider_twins.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/stress/test_reliability.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/conftest.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_admin.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_api_client.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_auth.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_credentials.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_datasets.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_deployments.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_evals.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_login.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_main.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_optimizations.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_org.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_parity.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_programs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_shell.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_top.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_cli/test_traces.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_clustering/__init__.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_clustering/conftest.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_clustering/test_edge_cases.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_clustering/test_hash_consistency.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_clustering/test_type_conversion.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_configuration.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_context.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_context_propagation.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_dataset_polling.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_dataset_sync.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_datasets.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_decorators.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_deploy.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_eval.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_eval_start.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_exception_paths.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_execute.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_exporter.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_exporter_real.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_fake_lm.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_gepa_callback.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_gepa_integration.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_gepa_resume.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_identity.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_integration.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_ir_encoder_properties.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_ir_golden_vectors.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_ir_roundtrip.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_optimization_start.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_optimize.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_optimize_lift.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_optimize_terminal_failure.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_packaging.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_packaging_callable_source.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_packaging_program_source.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_program_lineage_persist.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_project_payload.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_reflector_properties.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_reflector_smoke.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_repro_reactv2_bugs.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_rlm_patch.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_schemas.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_seed_review_run.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_stats_export.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_tracked_gepa.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_tracker_enrich.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/tests/test_truncation.py +0 -0
- {cmpnd-0.4.2 → cmpnd-0.4.3}/todo.md +0 -0
|
@@ -182,6 +182,10 @@ class _ModuleMixin(_CallbackBase):
|
|
|
182
182
|
trace = self._create_trace(instance, inputs)
|
|
183
183
|
context.set_current_trace(trace)
|
|
184
184
|
|
|
185
|
+
# Carry the root module's type so serve can classify the trace at
|
|
186
|
+
# start (CMP-537) — before any span lands — instead of inferring it
|
|
187
|
+
# from span shape later.
|
|
188
|
+
trace.root_span_type = span_type.value
|
|
185
189
|
# RLM traces use streaming export; everything else batches
|
|
186
190
|
if span_type == models.SpanType.RLM:
|
|
187
191
|
trace.streaming = True
|
|
@@ -230,6 +234,20 @@ class _ModuleMixin(_CallbackBase):
|
|
|
230
234
|
if rh_input is not None and hasattr(rh_input, "entries") and rh_input.entries:
|
|
231
235
|
last_output = rh_input.entries[-1].output
|
|
232
236
|
rlm_parent.repl_history[-1]["output"] = last_output
|
|
237
|
+
# Surface the previous turn's code output on THIS (turn N+1)
|
|
238
|
+
# span so a streaming reader can fill in turn N's notebook
|
|
239
|
+
# output mid-run, rather than waiting for the whole trajectory
|
|
240
|
+
# on the RLM parent span at finalize (CMP-537). The prior
|
|
241
|
+
# turn's span has already ended + been exported, so it rides
|
|
242
|
+
# here instead; the RLM's final turn (no successor) still
|
|
243
|
+
# resolves at finalize. Capped like an output field so a large
|
|
244
|
+
# stdout can't bloat the streamed span.
|
|
245
|
+
if last_output is not None:
|
|
246
|
+
prev = last_output if isinstance(last_output, str) else str(last_output)
|
|
247
|
+
cap = self._max_output_field_size
|
|
248
|
+
if len(prev) > cap:
|
|
249
|
+
prev = prev[:cap] + f"\n\n… (truncated, {len(prev)} chars total)"
|
|
250
|
+
span.attributes["rlm.prev_output"] = prev
|
|
233
251
|
|
|
234
252
|
# Push to context stack
|
|
235
253
|
context.push_span(span)
|
|
@@ -387,6 +387,10 @@ class TraceBuilder:
|
|
|
387
387
|
|
|
388
388
|
# Export routing: True = stream spans individually, False = batch at completion
|
|
389
389
|
streaming: bool = False
|
|
390
|
+
# The root module's span type (e.g. "rlm"), sent in the /start payload so
|
|
391
|
+
# serve can classify a streaming trace the moment it starts — before any
|
|
392
|
+
# span has landed — rather than inferring it from span shape later (CMP-537).
|
|
393
|
+
root_span_type: str | None = None
|
|
390
394
|
_batch_spans: list["SpanBuilder"] = field(default_factory=list)
|
|
391
395
|
|
|
392
396
|
tags: dict[str, str] = field(default_factory=dict)
|
|
@@ -443,6 +447,7 @@ class TraceBuilder:
|
|
|
443
447
|
"program_signature_hash": identity.format_signature_hash(self.program_signature_hash),
|
|
444
448
|
"signature_summary": self.signature_summary,
|
|
445
449
|
"component_signatures": self.component_signatures,
|
|
450
|
+
"root_span_type": self.root_span_type,
|
|
446
451
|
"project": self.project_tags[0] if self.project_tags else None,
|
|
447
452
|
"project_tags": self.project_tags if self.project_tags else [],
|
|
448
453
|
}
|
|
@@ -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.4.
|
|
8
|
+
version = "0.4.3"
|
|
9
9
|
description = "DSPy observability and deployment SDK for cmpnd"
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
requires-python = ">=3.10"
|
|
@@ -1372,6 +1372,70 @@ class TestReplHistory:
|
|
|
1372
1372
|
assert "SUBMIT" in rlm_span.repl_history[1]["code"]
|
|
1373
1373
|
assert "output" not in rlm_span.repl_history[1]
|
|
1374
1374
|
|
|
1375
|
+
def test_rlm_predict_carries_previous_turn_output(self):
|
|
1376
|
+
"""Each RLM turn's PREDICT span carries the PRIOR turn's code output as
|
|
1377
|
+
the rlm.prev_output attribute, so a streaming reader can fill in the
|
|
1378
|
+
earlier notebook cells' output mid-run instead of waiting for the whole
|
|
1379
|
+
trajectory at finalize (CMP-537). The first turn has no predecessor, so
|
|
1380
|
+
it carries none; the final turn's output resolves at finalize."""
|
|
1381
|
+
from dspy.predict.rlm import REPLHistory
|
|
1382
|
+
|
|
1383
|
+
callback = self._make_callback()
|
|
1384
|
+
exported_spans = []
|
|
1385
|
+
|
|
1386
|
+
class MockExporter:
|
|
1387
|
+
def export_span(self, span):
|
|
1388
|
+
exported_spans.append(span)
|
|
1389
|
+
|
|
1390
|
+
def export_trace_start(self, trace):
|
|
1391
|
+
pass
|
|
1392
|
+
|
|
1393
|
+
def export_trace_finalize(self, trace):
|
|
1394
|
+
pass
|
|
1395
|
+
|
|
1396
|
+
def export_trace_stats(self, trace):
|
|
1397
|
+
pass
|
|
1398
|
+
|
|
1399
|
+
empty_history = REPLHistory()
|
|
1400
|
+
history_after_step0 = empty_history.append(
|
|
1401
|
+
reasoning="look at the data",
|
|
1402
|
+
code="print(context)",
|
|
1403
|
+
output="Sunny, 72F",
|
|
1404
|
+
)
|
|
1405
|
+
|
|
1406
|
+
with mock.patch("cmpnd.exporter.get_exporter", return_value=MockExporter()):
|
|
1407
|
+
callback.on_module_start(
|
|
1408
|
+
call_id="rlm_root",
|
|
1409
|
+
instance=self._make_mock_rlm(),
|
|
1410
|
+
inputs={"question": "What is the weather?"},
|
|
1411
|
+
)
|
|
1412
|
+
callback.on_module_start(
|
|
1413
|
+
call_id="predict_0",
|
|
1414
|
+
instance=self._make_mock_predict(),
|
|
1415
|
+
inputs={"repl_history": empty_history},
|
|
1416
|
+
)
|
|
1417
|
+
callback.on_module_end(
|
|
1418
|
+
call_id="predict_0",
|
|
1419
|
+
outputs=self._make_prediction({"reasoning": "look at the data", "code": "print(context)"}),
|
|
1420
|
+
)
|
|
1421
|
+
callback.on_module_start(
|
|
1422
|
+
call_id="predict_1",
|
|
1423
|
+
instance=self._make_mock_predict(),
|
|
1424
|
+
inputs={"repl_history": history_after_step0},
|
|
1425
|
+
)
|
|
1426
|
+
callback.on_module_end(
|
|
1427
|
+
call_id="predict_1",
|
|
1428
|
+
outputs=self._make_prediction({"reasoning": "submit now", "code": "SUBMIT('Sunny, 72F')"}),
|
|
1429
|
+
)
|
|
1430
|
+
|
|
1431
|
+
predict_spans = [s for s in exported_spans if s.span_type == SpanType.PREDICT]
|
|
1432
|
+
assert len(predict_spans) == 2
|
|
1433
|
+
turn0, turn1 = predict_spans[0], predict_spans[1]
|
|
1434
|
+
# Turn 0 has no predecessor → no prev_output.
|
|
1435
|
+
assert "rlm.prev_output" not in turn0.attributes
|
|
1436
|
+
# Turn 1 carries turn 0's code output.
|
|
1437
|
+
assert turn1.attributes.get("rlm.prev_output") == "Sunny, 72F"
|
|
1438
|
+
|
|
1375
1439
|
def test_repl_history_empty_for_non_rlm_modules(self):
|
|
1376
1440
|
"""Non-RLM modules should not have repl_history populated."""
|
|
1377
1441
|
callback = self._make_callback()
|
|
@@ -363,6 +363,16 @@ class TestTraceBuilder:
|
|
|
363
363
|
assert "total_tokens" not in d
|
|
364
364
|
assert "status" not in d
|
|
365
365
|
|
|
366
|
+
def test_to_start_dict_carries_root_span_type(self):
|
|
367
|
+
"""The root module's span type rides the start payload so serve can
|
|
368
|
+
classify a streaming trace at start, before any span lands (CMP-537)."""
|
|
369
|
+
trace = TraceBuilder(trace_id=uuid4())
|
|
370
|
+
trace.start_time = datetime(2026, 7, 22, tzinfo=timezone.utc)
|
|
371
|
+
trace.root_span_type = "rlm"
|
|
372
|
+
assert trace.to_start_dict()["root_span_type"] == "rlm"
|
|
373
|
+
# Unset (an older/non-root builder) sends null, not a crash.
|
|
374
|
+
assert TraceBuilder(trace_id=uuid4()).to_start_dict()["root_span_type"] is None
|
|
375
|
+
|
|
366
376
|
def test_to_finalize_dict(self):
|
|
367
377
|
"""to_finalize_dict includes timing, metrics, and previews only."""
|
|
368
378
|
trace = TraceBuilder(trace_id=uuid4())
|
|
@@ -246,9 +246,9 @@ name = "boto3"
|
|
|
246
246
|
version = "1.43.1"
|
|
247
247
|
source = { registry = "https://pypi.org/simple" }
|
|
248
248
|
dependencies = [
|
|
249
|
-
{ name = "botocore"
|
|
250
|
-
{ name = "jmespath"
|
|
251
|
-
{ name = "s3transfer"
|
|
249
|
+
{ name = "botocore" },
|
|
250
|
+
{ name = "jmespath" },
|
|
251
|
+
{ name = "s3transfer" },
|
|
252
252
|
]
|
|
253
253
|
sdist = { url = "https://files.pythonhosted.org/packages/98/36/028c12ed6ed85009a21b5472eb76c27f9b0341c6986f06f83475b40aaf51/boto3-1.43.1.tar.gz", hash = "sha256:9e4f85a7884797ff0f52c257094730ed228aaa07fa8134775ff8f86909cf4f2a", size = 113175, upload-time = "2026-04-30T20:27:04.569Z" }
|
|
254
254
|
wheels = [
|
|
@@ -260,9 +260,9 @@ name = "botocore"
|
|
|
260
260
|
version = "1.43.1"
|
|
261
261
|
source = { registry = "https://pypi.org/simple" }
|
|
262
262
|
dependencies = [
|
|
263
|
-
{ name = "jmespath"
|
|
264
|
-
{ name = "python-dateutil"
|
|
265
|
-
{ name = "urllib3"
|
|
263
|
+
{ name = "jmespath" },
|
|
264
|
+
{ name = "python-dateutil" },
|
|
265
|
+
{ name = "urllib3" },
|
|
266
266
|
]
|
|
267
267
|
sdist = { url = "https://files.pythonhosted.org/packages/03/b7/416ae6f1461d6fec3b3aaffc4759371319c71a21f7ab4c3106ee574fda8d/botocore-1.43.1.tar.gz", hash = "sha256:270d6357d662550fdb84973ec247e02bece0b6283d90bf37319c7753515336e4", size = 15296915, upload-time = "2026-04-30T20:26:50.962Z" }
|
|
268
268
|
wheels = [
|
|
@@ -292,7 +292,7 @@ name = "cffi"
|
|
|
292
292
|
version = "2.0.0"
|
|
293
293
|
source = { registry = "https://pypi.org/simple" }
|
|
294
294
|
dependencies = [
|
|
295
|
-
{ name = "pycparser", marker = "
|
|
295
|
+
{ name = "pycparser", marker = "implementation_name != 'PyPy'" },
|
|
296
296
|
]
|
|
297
297
|
sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" }
|
|
298
298
|
wheels = [
|
|
@@ -497,7 +497,7 @@ wheels = [
|
|
|
497
497
|
|
|
498
498
|
[[package]]
|
|
499
499
|
name = "cmpnd"
|
|
500
|
-
version = "0.4.
|
|
500
|
+
version = "0.4.3"
|
|
501
501
|
source = { editable = "." }
|
|
502
502
|
dependencies = [
|
|
503
503
|
{ name = "dspy" },
|
|
@@ -553,16 +553,16 @@ name = "cmpnd-deploy"
|
|
|
553
553
|
version = "0.1.0"
|
|
554
554
|
source = { editable = "../deploy" }
|
|
555
555
|
dependencies = [
|
|
556
|
-
{ name = "boto3"
|
|
557
|
-
{ name = "cloudpickle"
|
|
558
|
-
{ name = "cryptography"
|
|
559
|
-
{ name = "dspy"
|
|
560
|
-
{ name = "httpx"
|
|
561
|
-
{ name = "markdown-it-py"
|
|
562
|
-
{ name = "opentelemetry-exporter-otlp-proto-http"
|
|
563
|
-
{ name = "opentelemetry-sdk"
|
|
564
|
-
{ name = "pyyaml"
|
|
565
|
-
{ name = "requests"
|
|
556
|
+
{ name = "boto3" },
|
|
557
|
+
{ name = "cloudpickle" },
|
|
558
|
+
{ name = "cryptography" },
|
|
559
|
+
{ name = "dspy" },
|
|
560
|
+
{ name = "httpx" },
|
|
561
|
+
{ name = "markdown-it-py" },
|
|
562
|
+
{ name = "opentelemetry-exporter-otlp-proto-http" },
|
|
563
|
+
{ name = "opentelemetry-sdk" },
|
|
564
|
+
{ name = "pyyaml" },
|
|
565
|
+
{ name = "requests" },
|
|
566
566
|
]
|
|
567
567
|
|
|
568
568
|
[package.metadata]
|
|
@@ -676,7 +676,7 @@ name = "cryptography"
|
|
|
676
676
|
version = "49.0.0"
|
|
677
677
|
source = { registry = "https://pypi.org/simple" }
|
|
678
678
|
dependencies = [
|
|
679
|
-
{ name = "cffi", marker = "
|
|
679
|
+
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
|
680
680
|
]
|
|
681
681
|
sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" }
|
|
682
682
|
wheels = [
|
|
@@ -789,7 +789,7 @@ name = "exceptiongroup"
|
|
|
789
789
|
version = "1.3.1"
|
|
790
790
|
source = { registry = "https://pypi.org/simple" }
|
|
791
791
|
dependencies = [
|
|
792
|
-
{ name = "typing-extensions"
|
|
792
|
+
{ name = "typing-extensions" },
|
|
793
793
|
]
|
|
794
794
|
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
|
795
795
|
wheels = [
|
|
@@ -1046,7 +1046,7 @@ name = "googleapis-common-protos"
|
|
|
1046
1046
|
version = "1.75.0"
|
|
1047
1047
|
source = { registry = "https://pypi.org/simple" }
|
|
1048
1048
|
dependencies = [
|
|
1049
|
-
{ name = "protobuf"
|
|
1049
|
+
{ name = "protobuf" },
|
|
1050
1050
|
]
|
|
1051
1051
|
sdist = { url = "https://files.pythonhosted.org/packages/b5/c8/f439cffde755cffa462bfbb156278fa6f9d09119719af9814b858fd4f81f/googleapis_common_protos-1.75.0.tar.gz", hash = "sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd", size = 151035, upload-time = "2026-05-07T08:04:49.423Z" }
|
|
1052
1052
|
wheels = [
|
|
@@ -1236,17 +1236,17 @@ resolution-markers = [
|
|
|
1236
1236
|
"python_full_version < '3.11'",
|
|
1237
1237
|
]
|
|
1238
1238
|
dependencies = [
|
|
1239
|
-
{ name = "colorama", marker = "
|
|
1240
|
-
{ name = "decorator"
|
|
1241
|
-
{ name = "exceptiongroup"
|
|
1242
|
-
{ name = "jedi"
|
|
1243
|
-
{ name = "matplotlib-inline"
|
|
1244
|
-
{ name = "pexpect", marker = "
|
|
1245
|
-
{ name = "prompt-toolkit"
|
|
1246
|
-
{ name = "pygments"
|
|
1247
|
-
{ name = "stack-data"
|
|
1248
|
-
{ name = "traitlets"
|
|
1249
|
-
{ name = "typing-extensions"
|
|
1239
|
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
1240
|
+
{ name = "decorator" },
|
|
1241
|
+
{ name = "exceptiongroup" },
|
|
1242
|
+
{ name = "jedi" },
|
|
1243
|
+
{ name = "matplotlib-inline" },
|
|
1244
|
+
{ name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
|
1245
|
+
{ name = "prompt-toolkit" },
|
|
1246
|
+
{ name = "pygments" },
|
|
1247
|
+
{ name = "stack-data" },
|
|
1248
|
+
{ name = "traitlets" },
|
|
1249
|
+
{ name = "typing-extensions" },
|
|
1250
1250
|
]
|
|
1251
1251
|
sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" }
|
|
1252
1252
|
wheels = [
|
|
@@ -1262,18 +1262,18 @@ resolution-markers = [
|
|
|
1262
1262
|
"python_full_version >= '3.11' and python_full_version < '3.15'",
|
|
1263
1263
|
]
|
|
1264
1264
|
dependencies = [
|
|
1265
|
-
{ name = "colorama", marker = "
|
|
1266
|
-
{ name = "decorator"
|
|
1267
|
-
{ name = "ipython-pygments-lexers"
|
|
1268
|
-
{ name = "jedi"
|
|
1269
|
-
{ name = "matplotlib-inline"
|
|
1270
|
-
{ name = "pexpect", marker = "
|
|
1271
|
-
{ name = "prompt-toolkit"
|
|
1272
|
-
{ name = "psutil"
|
|
1273
|
-
{ name = "pygments"
|
|
1274
|
-
{ name = "stack-data"
|
|
1275
|
-
{ name = "traitlets"
|
|
1276
|
-
{ name = "typing-extensions", marker = "python_full_version
|
|
1265
|
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
1266
|
+
{ name = "decorator" },
|
|
1267
|
+
{ name = "ipython-pygments-lexers" },
|
|
1268
|
+
{ name = "jedi" },
|
|
1269
|
+
{ name = "matplotlib-inline" },
|
|
1270
|
+
{ name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
|
1271
|
+
{ name = "prompt-toolkit" },
|
|
1272
|
+
{ name = "psutil" },
|
|
1273
|
+
{ name = "pygments" },
|
|
1274
|
+
{ name = "stack-data" },
|
|
1275
|
+
{ name = "traitlets" },
|
|
1276
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.12'" },
|
|
1277
1277
|
]
|
|
1278
1278
|
sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549, upload-time = "2026-04-24T12:24:55.221Z" }
|
|
1279
1279
|
wheels = [
|
|
@@ -1285,7 +1285,7 @@ name = "ipython-pygments-lexers"
|
|
|
1285
1285
|
version = "1.1.1"
|
|
1286
1286
|
source = { registry = "https://pypi.org/simple" }
|
|
1287
1287
|
dependencies = [
|
|
1288
|
-
{ name = "pygments"
|
|
1288
|
+
{ name = "pygments" },
|
|
1289
1289
|
]
|
|
1290
1290
|
sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" }
|
|
1291
1291
|
wheels = [
|
|
@@ -1931,7 +1931,7 @@ name = "opentelemetry-api"
|
|
|
1931
1931
|
version = "1.43.0"
|
|
1932
1932
|
source = { registry = "https://pypi.org/simple" }
|
|
1933
1933
|
dependencies = [
|
|
1934
|
-
{ name = "typing-extensions"
|
|
1934
|
+
{ name = "typing-extensions" },
|
|
1935
1935
|
]
|
|
1936
1936
|
sdist = { url = "https://files.pythonhosted.org/packages/ae/cc/e4c9584181f86494df0f6bdec1a4f3280c50db44704dc2a407e994fc87bb/opentelemetry_api-1.43.0.tar.gz", hash = "sha256:107d0d03857ea8fc7c5fcbbbd83f800c281f0d560553d61c1d675fccfd1761c1", size = 73476, upload-time = "2026-06-24T15:19:55.323Z" }
|
|
1937
1937
|
wheels = [
|
|
@@ -1943,7 +1943,7 @@ name = "opentelemetry-exporter-otlp-proto-common"
|
|
|
1943
1943
|
version = "1.43.0"
|
|
1944
1944
|
source = { registry = "https://pypi.org/simple" }
|
|
1945
1945
|
dependencies = [
|
|
1946
|
-
{ name = "opentelemetry-proto"
|
|
1946
|
+
{ name = "opentelemetry-proto" },
|
|
1947
1947
|
]
|
|
1948
1948
|
sdist = { url = "https://files.pythonhosted.org/packages/55/c1/e8098490ab15abf116dcaf9fa89ededcb35547c7d08d4b5a62f573dc1e63/opentelemetry_exporter_otlp_proto_common-1.43.0.tar.gz", hash = "sha256:c4e32ba6d6b13bdb2b8f6764c4fd28d00192826561aa04f6d14eedfce7ac076f", size = 20197, upload-time = "2026-06-24T15:20:00.247Z" }
|
|
1949
1949
|
wheels = [
|
|
@@ -1955,13 +1955,13 @@ name = "opentelemetry-exporter-otlp-proto-http"
|
|
|
1955
1955
|
version = "1.43.0"
|
|
1956
1956
|
source = { registry = "https://pypi.org/simple" }
|
|
1957
1957
|
dependencies = [
|
|
1958
|
-
{ name = "googleapis-common-protos"
|
|
1959
|
-
{ name = "opentelemetry-api"
|
|
1960
|
-
{ name = "opentelemetry-exporter-otlp-proto-common"
|
|
1961
|
-
{ name = "opentelemetry-proto"
|
|
1962
|
-
{ name = "opentelemetry-sdk"
|
|
1963
|
-
{ name = "requests"
|
|
1964
|
-
{ name = "typing-extensions"
|
|
1958
|
+
{ name = "googleapis-common-protos" },
|
|
1959
|
+
{ name = "opentelemetry-api" },
|
|
1960
|
+
{ name = "opentelemetry-exporter-otlp-proto-common" },
|
|
1961
|
+
{ name = "opentelemetry-proto" },
|
|
1962
|
+
{ name = "opentelemetry-sdk" },
|
|
1963
|
+
{ name = "requests" },
|
|
1964
|
+
{ name = "typing-extensions" },
|
|
1965
1965
|
]
|
|
1966
1966
|
sdist = { url = "https://files.pythonhosted.org/packages/fc/92/0b9f56412483a8891d4843890294796c9df8ab42417bd9bad8035d840cb3/opentelemetry_exporter_otlp_proto_http-1.43.0.tar.gz", hash = "sha256:fa8a42bb7d00ee5391f4c0b04d8e6a46c03caa437903296ab73a81dc11ba118f", size = 25406, upload-time = "2026-06-24T15:20:01.515Z" }
|
|
1967
1967
|
wheels = [
|
|
@@ -1973,7 +1973,7 @@ name = "opentelemetry-proto"
|
|
|
1973
1973
|
version = "1.43.0"
|
|
1974
1974
|
source = { registry = "https://pypi.org/simple" }
|
|
1975
1975
|
dependencies = [
|
|
1976
|
-
{ name = "protobuf"
|
|
1976
|
+
{ name = "protobuf" },
|
|
1977
1977
|
]
|
|
1978
1978
|
sdist = { url = "https://files.pythonhosted.org/packages/e0/b9/d357faefb40bda1d4799913e6af611171ff22a2dedcb93576bc92242d056/opentelemetry_proto-1.43.0.tar.gz", hash = "sha256:224778df17e1f3fafeaaa21d874236ca5f6ffc2f86e0899298ec7351aac27924", size = 46481, upload-time = "2026-06-24T15:20:07.625Z" }
|
|
1979
1979
|
wheels = [
|
|
@@ -1985,9 +1985,9 @@ name = "opentelemetry-sdk"
|
|
|
1985
1985
|
version = "1.43.0"
|
|
1986
1986
|
source = { registry = "https://pypi.org/simple" }
|
|
1987
1987
|
dependencies = [
|
|
1988
|
-
{ name = "opentelemetry-api"
|
|
1989
|
-
{ name = "opentelemetry-semantic-conventions"
|
|
1990
|
-
{ name = "typing-extensions"
|
|
1988
|
+
{ name = "opentelemetry-api" },
|
|
1989
|
+
{ name = "opentelemetry-semantic-conventions" },
|
|
1990
|
+
{ name = "typing-extensions" },
|
|
1991
1991
|
]
|
|
1992
1992
|
sdist = { url = "https://files.pythonhosted.org/packages/3e/eb/5041074274ac0956b03637cc039d434569112468e875eddfcc9a0674ce06/opentelemetry_sdk-1.43.0.tar.gz", hash = "sha256:d8187c81c162df9913e4003dd6485f7390d9a24fc17026ec7387b8b8218b08e9", size = 254744, upload-time = "2026-06-24T15:20:08.467Z" }
|
|
1993
1993
|
wheels = [
|
|
@@ -1999,8 +1999,8 @@ name = "opentelemetry-semantic-conventions"
|
|
|
1999
1999
|
version = "0.64b0"
|
|
2000
2000
|
source = { registry = "https://pypi.org/simple" }
|
|
2001
2001
|
dependencies = [
|
|
2002
|
-
{ name = "opentelemetry-api"
|
|
2003
|
-
{ name = "typing-extensions"
|
|
2002
|
+
{ name = "opentelemetry-api" },
|
|
2003
|
+
{ name = "typing-extensions" },
|
|
2004
2004
|
]
|
|
2005
2005
|
sdist = { url = "https://files.pythonhosted.org/packages/5a/30/5f26df29509eccd86b99b481ac9ffa39da49ba9577cc69071c552ae30447/opentelemetry_semantic_conventions-0.64b0.tar.gz", hash = "sha256:72f76fb2d1582d9d033dd1fcd84532e961e6ff3d90d24ba6fabc72975a83864c", size = 148340, upload-time = "2026-06-24T15:20:09.267Z" }
|
|
2006
2006
|
wheels = [
|
|
@@ -2526,7 +2526,7 @@ name = "python-dateutil"
|
|
|
2526
2526
|
version = "2.9.0.post0"
|
|
2527
2527
|
source = { registry = "https://pypi.org/simple" }
|
|
2528
2528
|
dependencies = [
|
|
2529
|
-
{ name = "six"
|
|
2529
|
+
{ name = "six" },
|
|
2530
2530
|
]
|
|
2531
2531
|
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
|
|
2532
2532
|
wheels = [
|
|
@@ -2930,7 +2930,7 @@ name = "s3transfer"
|
|
|
2930
2930
|
version = "0.17.0"
|
|
2931
2931
|
source = { registry = "https://pypi.org/simple" }
|
|
2932
2932
|
dependencies = [
|
|
2933
|
-
{ name = "botocore"
|
|
2933
|
+
{ name = "botocore" },
|
|
2934
2934
|
]
|
|
2935
2935
|
sdist = { url = "https://files.pythonhosted.org/packages/9b/ec/7c692cde9125b77e84b307354d4fb705f98b8ccad59a036d5957ca75bfc3/s3transfer-0.17.0.tar.gz", hash = "sha256:9edeb6d1c3c2f89d6050348548834ad8289610d886e5bf7b7207728bd43ce33a", size = 155337, upload-time = "2026-04-29T22:07:36.33Z" }
|
|
2936
2936
|
wheels = [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|