cmpnd 0.72.0__tar.gz → 0.73.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.72.0 → cmpnd-0.73.0}/PKG-INFO +1 -1
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/admin.py +18 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/verbs.py +2 -1
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/cli.md +17 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/pyproject.toml +1 -1
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_admin.py +18 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/uv.lock +1 -1
- {cmpnd-0.72.0 → cmpnd-0.73.0}/.gitignore +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/AGENTS.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/CLAUDE.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/README.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_assessments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_authored_import.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_deployments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_exporter_pool.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_gepa_patch.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_http.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_program_patch.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_rlm_patch.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_runtime_tools.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_timespec.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_traces.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/_valsets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/authored.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/callback.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/api_client.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/assessments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/auth.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/datasets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/deployments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/evals.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/login.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/optimizations.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/org.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/provider_credentials.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/tool_servers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/top.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/traces.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/commands/valsets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/credentials.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/deprecation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/pagination.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/shell.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/trace_render.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/tree_help.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/cli/views.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/client.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/configuration.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/context.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/credentials.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/dataset_sync.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/datasets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/decorators.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/deployment.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/deployment_metadata.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/deployment_runs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/eval_handler.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/execution.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/exporter.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/exporter_http.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/helpers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/identity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/imaging.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/decode.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/encode.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/hash.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/program.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/reflection.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/types.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/ir/xxh64.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/lm_configuration.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/mcp_servers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/models.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/named_programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/optimization.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/optimizers/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/optimizers/gepa.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/optimizers/gepa_callback.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/optimizers/resume.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/optimizers/tracker.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/packaging.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/references.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/retry.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/cmpnd/traces.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/2026-04-02-code-review.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/client.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/custom-proposer.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/plans/2026-04-05-train-val-dataset-capture-design.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/plans/2026-04-05-train-val-dataset-capture.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/reading-traces.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/docs/sdk-instrumentation.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/examples/generalizing_proposer.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/examples/local_ollama.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/LINEAGE.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/README.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/bodies.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/client_floor.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/exporter_http.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/program_names.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/protocols.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/py.typed +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/request_log.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/retry.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/cmpnd_ingest/trace_facts.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/ingest/pyproject.toml +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/audit-sdist.sh +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/capture_review_run.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/check-pip-install.sh +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/check_release_artifacts.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/fixtures/review_run.json.gz +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/gepa_resume_bug.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/install-test-env.sh +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/release-gate.sh +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/release-real-models.sh +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/require_version_bump.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/seed_review_run.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/selfhost_compat.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/scripts/test-in-linux.sh +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/stubs/dspy/__init__.pyi +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/stubs/dspy/primitives/__init__.pyi +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/stubs/dspy/primitives/prediction.pyi +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/stubs/dspy/utils/__init__.pyi +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/stubs/dspy/utils/callback.pyi +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/stubs/dspy/utils/dummies.pyi +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_credential_route.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_deployment_signature_helpers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_exporter_helpers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_fake_clock.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_identity_helpers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_resolve_refs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/_traced_run.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/conftest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/committee_task.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/conftest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/continuation_task.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/data/committee_train.ndjson.gz +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/data/committee_val.ndjson.gz +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/fake_lm.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/helpers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/target_capabilities.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_assessments_cli.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_capture_prompts.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_composite_module.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_dataset_auto_creation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_deploy_execute.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_deploy_pandas.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_deploy_programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_edge_cases.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_example_hash.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_gepa_optimization.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_interpreter_spans.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_lm_accuracy.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_module_tracing.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimization_lineage.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimization_metric_identity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_authored_metric.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_continuation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_custom_proposer.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_failures.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_loop.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_review_committee.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_optimize_server_owned_completion.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_parallel_export.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_project_attribution.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_react_tool_spans.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_save_load.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_trace_structure.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_traces_read.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_user_attribution.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/e2e/test_valsets_cli.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/01_predict_qa.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/02_predict_renamed_field.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/03_chain_of_thought_qa.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/04_predict_richer_types.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/05_composite_two_predicts.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/06_multichaincomparison.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/07_program_of_thought.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/08_opaque_module.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/09_predict_pydantic_field.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/10_react.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/11_refine.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/12_retrieve.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/13_knn.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/14_parallel.json +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/identity_vectors/README.md +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/ingest_conformance.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/authored_optimize/judge.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/authored_optimize/optimize_hosted.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/conftest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/hosted_mcp_tool_optimize_probe.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/hosted_optimize_probe.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/optimization_run_probe.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/test_cli_deploy_smoketest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/test_logs_renders_traces.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/test_optimization_run.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/test_optimizing_progress.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/integration/test_unhappy_path.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/__main__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/drain.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/ingest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/latency_transport.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/rlm_shape.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/rlm_size_report.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/sweep.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/test_rlm_shape.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/load/test_rlm_size_report.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/conftest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/seed_parity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_auth.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_datasets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_deployments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_evals.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_health.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_modules.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_optimizations.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_signatures.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_trace_streaming.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/parity/test_traces.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/_provider.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/_readiness.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/_reliability.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/_result.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/mint_bedrock_token.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_bedrock_converse.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_deploy_programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_multi_client_stress.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_optimize_client_committee.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_optimize_continuation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_optimize_loop.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_optimize_loop_wasm.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_optimize_stress.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_provider_roles.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_readiness.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_real_provider_twins.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_reliability.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_reliability_classify.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_rlm_wasm.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/real_models/test_trace_search.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/span_reference_fixture.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_adapter_reentrancy.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_assessments_api.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_authored.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_authored_binding_credentials.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_authored_bundle_collisions.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_authored_metric_contract.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_authored_named_models.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_authored_optimize.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_callback.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_candidate_lineage.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/conftest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_api_client.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_assessments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_auth.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_credentials.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_datasets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_deployment_runs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_deployments.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_evals.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_login.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_main.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_optimizations.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_org.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_pagination.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_parity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_programs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_provider_credentials.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_schema_sample.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_shell.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_tool_servers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_top.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_traces.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_traces_program_and_module.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_traces_search_wire.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_tree_help.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cli/test_valsets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_client.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_client_floor.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_client_program_names.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_clustering/__init__.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_clustering/conftest.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_clustering/test_edge_cases.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_clustering/test_hash_consistency.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_clustering/test_type_conversion.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_cmp551_grouping_identity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_configuration.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_context.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_context_propagation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_credential_kwargs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_credential_selection.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_credential_values.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_dataset_polling.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_dataset_sync.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_datasets.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_decision_client_spans.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_decorators.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_deploy.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_deploy_mcp_tool_references.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_deploy_program_id.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_deployment_metadata.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_deployment_runs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_deployments_read.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_eval.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_eval_example_attribution.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_eval_program_id.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_eval_start.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_eval_trace_grouping.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_exception_paths.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_execute.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_execute_run_identity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_exporter.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_exporter_program_names.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_exporter_queue.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_exporter_real.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_fake_lm.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_gepa_callback.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_gepa_integration.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_gepa_output_normalization.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_gepa_resume.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_identity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_imaging.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_import_weight.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_ingest_conformance.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_ingest_second_producer.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_integration.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_interpreter_callback.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_ir_encoder_properties.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_ir_golden_vectors.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_ir_roundtrip.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_lm15_native_calls.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_lm_configuration.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_lm_usage_shapes.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_mcp_tools.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_models.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_multi_client_stress_readiness.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimization_progress.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimization_start.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize_budget.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize_lift.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize_lms.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize_proposer.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize_reflection_lm.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_optimize_terminal_failure.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_packaging.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_packaging_callable_source.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_packaging_mcp_tools.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_packaging_program_source.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_poll_until.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_program_id_deprecation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_program_identity.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_program_lineage_persist.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_program_names_in_deploy.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_programs_create.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_project_payload.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_real_provider_twins_readiness.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_reflector_properties.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_reflector_smoke.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_release_gate_script.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_release_real_models_script.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_replaced_names.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_repro_reactv2_bugs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_require_version_bump.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_retry.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_reversible_failures.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_rlm_patch.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_run_attribution_paths.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_runtime_tools.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_schemas.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_seal_lm_credential.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_seed_review_run.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_signature_inputs.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_span_references.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_span_sent_once.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_system_one.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_trace_context_concurrency.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_trace_fact_wire_contract.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_trace_facts.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_trace_render.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_traces_read.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_tracked_gepa.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_tracker_enrich.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_truncation.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_upload_auth_headers.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_valsets_api.py +0 -0
- {cmpnd-0.72.0 → cmpnd-0.73.0}/tests/test_xxh64.py +0 -0
|
@@ -121,6 +121,12 @@ def _register_org(sub: _SubParsersAction[ArgumentParser]) -> None:
|
|
|
121
121
|
elect_owner.add_argument("user_id", help="User id to make owner")
|
|
122
122
|
elect_owner.set_defaults(func=handle_org_elect_owner)
|
|
123
123
|
|
|
124
|
+
usage = osub.add_parser(
|
|
125
|
+
"usage", help="Show the org's limits in use and its activity over 24 hours, 7 days and 30 days"
|
|
126
|
+
)
|
|
127
|
+
_org_id_arg(usage)
|
|
128
|
+
usage.set_defaults(func=handle_org_usage)
|
|
129
|
+
|
|
124
130
|
plan = osub.add_parser("plan", help="An org's plan and its limits")
|
|
125
131
|
plsub = plan.add_subparsers(dest="org_plan_action")
|
|
126
132
|
plan_show = plsub.add_parser("show", help="Show the org's plan and every limit as it resolves for the org")
|
|
@@ -162,6 +168,10 @@ def _register_user(sub: _SubParsersAction[ArgumentParser]) -> None:
|
|
|
162
168
|
_user_id_arg(show)
|
|
163
169
|
show.set_defaults(func=handle_user_show)
|
|
164
170
|
|
|
171
|
+
activity = usub.add_parser("activity", help="Show a user's milestones, memberships and recorded changes")
|
|
172
|
+
_user_id_arg(activity)
|
|
173
|
+
activity.set_defaults(func=handle_user_activity)
|
|
174
|
+
|
|
165
175
|
deprecation.alias(usub, "get", "show", func=handle_user_show, configure=_user_id_arg)
|
|
166
176
|
|
|
167
177
|
create = usub.add_parser("create", help="Provision a user")
|
|
@@ -349,6 +359,10 @@ def handle_org_elect_owner(client: api_client.ApiClient, args: Any) -> Any:
|
|
|
349
359
|
return {"elected": args.user_id, "github_login": args.github_login}
|
|
350
360
|
|
|
351
361
|
|
|
362
|
+
def handle_org_usage(client: api_client.ApiClient, args: Any) -> Any:
|
|
363
|
+
return client.get(f"/api/v1/admin/organizations/{args.org_id}/usage")
|
|
364
|
+
|
|
365
|
+
|
|
352
366
|
def handle_org_plan_show(client: api_client.ApiClient, args: Any) -> Any:
|
|
353
367
|
return client.get(f"/api/v1/admin/organizations/{args.org_id}/plan")
|
|
354
368
|
|
|
@@ -424,6 +438,10 @@ def handle_user_show(client: api_client.ApiClient, args: Any) -> Any:
|
|
|
424
438
|
return client.get(f"/api/v1/admin/users/{args.id}")
|
|
425
439
|
|
|
426
440
|
|
|
441
|
+
def handle_user_activity(client: api_client.ApiClient, args: Any) -> Any:
|
|
442
|
+
return client.get(f"/api/v1/admin/users/{args.id}/activity")
|
|
443
|
+
|
|
444
|
+
|
|
427
445
|
def handle_user_create(client: api_client.ApiClient, args: Any) -> Any:
|
|
428
446
|
# email/name/org_id/is_admin are always sent; password is only included
|
|
429
447
|
# when supplied so the server keeps its own default (e.g. no local login).
|
|
@@ -192,7 +192,8 @@ RELATION_NOUNS: dict[str, str] = {
|
|
|
192
192
|
"registry": "the registered programs, as distinct from the organization's programs",
|
|
193
193
|
"optimized": "the compiled programs optimization runs produced, as distinct from the organization's programs",
|
|
194
194
|
"stats": "a program's execution statistics",
|
|
195
|
-
"usage": "a program's usage over time",
|
|
195
|
+
"usage": "a program's usage over time, or an organization's limits in use and recent activity",
|
|
196
|
+
"activity": "a user's account milestones, memberships and recorded changes",
|
|
196
197
|
"openapi": "the OpenAPI document a deployment serves",
|
|
197
198
|
"history": "a program's distinct prompt instructions over time",
|
|
198
199
|
"evals": "the eval runs recorded against a program",
|
|
@@ -890,6 +890,23 @@ and a value of `none` lifts the plan's limit for that org.
|
|
|
890
890
|
`cmpnd admin org overrides delete ORG_ID NAME` deletes the override, so the org
|
|
891
891
|
follows its plan again.
|
|
892
892
|
|
|
893
|
+
`cmpnd admin org usage ORG_ID` shows what each limit bounds now, in `in_use`,
|
|
894
|
+
and the org's activity in the last 24 hours, 7 days and 30 days, in `windows`.
|
|
895
|
+
Each window counts traces, model calls and tokens, deployment runs by status,
|
|
896
|
+
and hosted optimizations started and cancelled with their compute. `since` is
|
|
897
|
+
the start of the window's first hour. `traces` or `model_usage` is `null` when
|
|
898
|
+
the server has no published count for the window yet.
|
|
899
|
+
|
|
900
|
+
`cmpnd admin user activity USER_ID` shows a user's milestones, every org they
|
|
901
|
+
belong to, and the newest 50 authority changes recorded about them, such as
|
|
902
|
+
approvals, ownership grants, invites and leaves. A milestone that has not
|
|
903
|
+
happened is `null`. `first_approved_at` is the first approval still on record: an admin-created
|
|
904
|
+
user, an invite redemption and an approved founder write no approval event, so
|
|
905
|
+
their date survives only while a membership keeps it. `oldest_key_at` and
|
|
906
|
+
`last_key_used_at` cover only the keys
|
|
907
|
+
the user still holds, because leaving an org deletes the user's keys there.
|
|
908
|
+
Sign-ins are not recorded, and deployment keys do not count as the user's keys.
|
|
909
|
+
|
|
893
910
|
`cmpnd admin plans list` shows every plan's limits and feature flags.
|
|
894
911
|
`cmpnd admin plans limits update PLAN NAME VALUE` and `limits delete PLAN NAME`
|
|
895
912
|
change a plan's default for every org on it. `cmpnd admin plans flags update
|
|
@@ -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.73.0"
|
|
9
9
|
description = "DSPy observability and deployment SDK for cmpnd"
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
requires-python = ">=3.11"
|
|
@@ -283,6 +283,24 @@ def _parse(*argv: str) -> Namespace:
|
|
|
283
283
|
return parser.parse_args(["admin", *argv])
|
|
284
284
|
|
|
285
285
|
|
|
286
|
+
class TestAdminUserActivity:
|
|
287
|
+
def test_activity_reads_the_users_history(self, mock_client):
|
|
288
|
+
mock_client.get.return_value = {"user_id": "u_1", "memberships": [], "events": []}
|
|
289
|
+
args = _parse("user", "activity", "u_1")
|
|
290
|
+
result = args.func(mock_client, args)
|
|
291
|
+
mock_client.get.assert_called_once_with("/api/v1/admin/users/u_1/activity")
|
|
292
|
+
assert result["user_id"] == "u_1"
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
class TestAdminOrgUsage:
|
|
296
|
+
def test_usage_reads_the_orgs_limits_in_use_and_activity(self, mock_client):
|
|
297
|
+
mock_client.get.return_value = {"org_id": "o_1", "in_use": {"members.approved": 2}, "windows": []}
|
|
298
|
+
args = _parse("org", "usage", "o_1")
|
|
299
|
+
result = args.func(mock_client, args)
|
|
300
|
+
mock_client.get.assert_called_once_with("/api/v1/admin/organizations/o_1/usage")
|
|
301
|
+
assert result["in_use"] == {"members.approved": 2}
|
|
302
|
+
|
|
303
|
+
|
|
286
304
|
class TestAdminOrgPlan:
|
|
287
305
|
def test_plan_shows_the_orgs_plan(self, mock_client):
|
|
288
306
|
mock_client.get.return_value = {"org_id": "o_1", "plan": "free", "limits": []}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|