ponder-sdk 0.1.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.
- ponder_sdk-0.1.0/.gitignore +5 -0
- ponder_sdk-0.1.0/LICENSE +21 -0
- ponder_sdk-0.1.0/PKG-INFO +177 -0
- ponder_sdk-0.1.0/README.md +162 -0
- ponder_sdk-0.1.0/examples/continual.py +73 -0
- ponder_sdk-0.1.0/examples/manual.py +50 -0
- ponder_sdk-0.1.0/pyproject.toml +29 -0
- ponder_sdk-0.1.0/src/ponder_sdk/__init__.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/canonical-identities.json +94 -0
- ponder_sdk-0.1.0/src/ponder_sdk/client.py +47 -0
- ponder_sdk-0.1.0/src/ponder_sdk/dataset_preparations.py +72 -0
- ponder_sdk-0.1.0/src/ponder_sdk/datasets.py +80 -0
- ponder_sdk-0.1.0/src/ponder_sdk/errors.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/evaluation_identity.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/evaluation_runs.py +48 -0
- ponder_sdk-0.1.0/src/ponder_sdk/fixtures/policy-optimize.valid.json +96 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/__init__.py +266 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_attempt.py +52 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_check.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_group_manifest.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_group_manifest_content.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_group_snapshot.py +109 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_group_snapshot_content.py +108 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_measurement.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_plan.py +43 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/acceptance_plan_content.py +42 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/apply_task_correction_command.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/archive_authoring_draft_command.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/attach_post_training.py +331 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/authoring_draft.py +165 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/authoring_draft_content.py +162 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/authoring_draft_finalization.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/authoring_draft_input.py +144 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/authoring_target_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/bound_judge_response.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/cancel_learning_iteration_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/cancel_learning_iteration_reservation_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/cancel_reward_check_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/cancel_task_grade_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/combined_reward_authoring_fields.py +46 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/correction_metric_observation.py +47 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/correction_metric_summary.py +52 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/correction_opportunity.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/correction_verification_check.py +27 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/correction_verification_plan.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/correction_verification_plan_content.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_accounting.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_candidate.py +83 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_candidate_page.py +91 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_command.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_coverage.py +25 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_create.py +82 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_grant.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_grant_create.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_list.py +193 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_operation_result.py +192 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_policy.py +76 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_preview.py +40 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_run.py +186 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_source.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_stage.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_status.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_preparation_task_class.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_begin_version.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_list.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_list_query.py +13 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_operation_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_operation_result.py +747 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_publish.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_receipt.py +739 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_validate_request.py +9 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_validation.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_versions.py +30 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/dataset_workspace_write.py +724 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/harness_experiment_policy.py +169 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/harness_policy_source_package.py +98 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/harness_source_package.py +98 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/harness_source_selection.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_model_project_detail.py +111 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_model_project_link.py +29 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_model_project_summary.py +97 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_model_project_sync.py +93 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_model_project_training_setup.py +80 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_training_policy_control.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_training_policy_detail.py +517 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_training_setup_action.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/hosted_training_setup_catalog.py +532 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/import_task_intake_command.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/judge_call_reservation.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_accepted_parent.py +24 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_batch_publication.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_batch_publication_result.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_candidate_decision_observation.py +28 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_chain.py +36 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_command.py +1010 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_command_request.py +1013 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_consumption.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_continuation_mode_override.py +16 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_eligibility_counts.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration_dispatch.py +49 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration_observation.py +24 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration_reservation.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration_status.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration_submission.py +13 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_iteration_trigger.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_json_object.py +9 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_json_pointer.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_operation_result.py +1289 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_policy.py +300 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_policy_content.py +299 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_policy_inspection_result.py +75 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_read_request.py +50 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource.py +875 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_asset.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_batch.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_binding.py +53 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_chain.py +36 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_consumption.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_decision.py +109 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_definition.py +96 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_dispatch.py +49 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_draft.py +165 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_evidence.py +67 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_feedback.py +51 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_grade.py +127 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_iteration.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_package.py +247 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_policy.py +300 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_reservation.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_reward.py +161 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_reward_check.py +126 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_schedule.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_schedule_fire.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_resource_source.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_review_origin.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_revision_ref.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_schedule.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_schedule_fire.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_configuration.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_configuration_request.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_content.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_credential.py +16 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_credential_created.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_credential_page.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_credential_request.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_source_credential_secret.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_task_queue_inspection.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_text_asset.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/learning_text_asset_content.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_initial_learning.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_profile_evaluation_selection.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_profile_source_selection.py +16 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project.py +132 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_api_error.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_base_model.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_base_model_candidate.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_configuration_check.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_editable.py +90 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_immutable_ref.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_recipe_document.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_resource_summary.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_save_request.py +107 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_taskset_sync.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_training_method.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_training_setup.py +80 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_project_versioned_ref.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_details.py +384 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_list_query.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_page.py +61 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_policy.py +226 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_request.py +256 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_result.py +434 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/model_taskset_run_summary.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/nightly_schedule.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/policy_optimization_request.py +57 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/post_training_attachment.py +326 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/post_training_control.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/post_training_plan.py +359 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/post_training_qualification.py +28 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/post_training_state.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/post_training_summary.py +30 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/prepared_task_evidence_span.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/prepared_task_provenance.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/prepared_task_qualification.py +38 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/publish_checked_reward_command.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/publish_learning_resource_command.py +663 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/publish_learning_resources_command.py +650 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/queue_reward_check_command.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/queue_task_grade_command.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reserve_learning_iteration_command.py +33 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/resolve_task_feedback_command.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/retry_learning_iteration_dispatch_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/review_task_evidence_command.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_authoring_fields.py +69 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_calibration_closure.py +437 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_check_run.py +126 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_check_runtime.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_fixture.py +31 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_fixture_authoring_fields.py +38 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_fixture_check_result.py +75 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/reward_model_training_request.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/save_authoring_draft_command.py +149 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/seal_task_batch_command.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/submit_task_example_command.py +61 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/submit_task_feedback_command.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_admission_decision.py +109 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_admission_decision_content.py +108 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_batch.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_batch_content.py +31 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_batch_package_metadata.py +287 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_definition.py +96 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_definition_content.py +95 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_evidence.py +67 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_evidence_content.py +66 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_evidence_inspection_result.py +30 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_example_submission.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_feedback.py +51 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_feedback_submission.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_format_authoring_fields.py +51 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_grade_run.py +127 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_intake_file.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_intake_format.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_intake_preview.py +37 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_intake_record.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_rating.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/task_source_mapping.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_acceptance_group_page.py +31 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_acceptance_group_query.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_acceptance_group_reference.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_acceptance_group_summary.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_api_error.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_candidate_decision.py +39 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_candidate_decision_request.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_capabilities.py +68 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_capability_requirement.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_checkpoint_recovery_request.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_checkpoint_recovery_resource_approval.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_estimate.py +132 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_estimate_component.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_estimate_request.py +388 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_estimate_review.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_estimate_source.py +383 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_evaluation_source.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_evaluation_task_page.py +53 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_evaluation_task_result.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_execution_receipt.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_gpu_catalog.py +29 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_gpu_selection.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_handoff_context.py +212 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_handoff_origin.py +206 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_harness_source_publication.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_input_artifact.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_input_artifact_upload.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job.py +83 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_approval.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_control_request.py +9 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_event.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_log.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_output.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_outputs.py +73 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_page.py +89 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_recovery.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_request.py +73 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_source.py +241 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_state.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_job_submission.py +361 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_physical_placement.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_policy_lora_capabilities.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_control.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_list_query.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_page.py +312 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_plan.py +297 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_plan_content.py +296 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_receipt.py +305 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_preparation_request.py +256 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_qualification_base_model.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_qualification_evidence.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/inputs/training_queue_status.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/learning.py +112 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/__init__.py +266 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_attempt.py +52 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_check.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_group_manifest.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_group_manifest_content.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_group_snapshot.py +109 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_group_snapshot_content.py +108 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_measurement.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_plan.py +43 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/acceptance_plan_content.py +42 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/apply_task_correction_command.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/archive_authoring_draft_command.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/attach_post_training.py +331 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/authoring_draft.py +165 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/authoring_draft_content.py +162 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/authoring_draft_finalization.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/authoring_draft_input.py +144 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/authoring_target_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/bound_judge_response.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/cancel_learning_iteration_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/cancel_learning_iteration_reservation_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/cancel_reward_check_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/cancel_task_grade_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/combined_reward_authoring_fields.py +46 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/correction_metric_observation.py +47 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/correction_metric_summary.py +52 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/correction_opportunity.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/correction_verification_check.py +27 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/correction_verification_plan.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/correction_verification_plan_content.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_accounting.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_candidate.py +83 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_candidate_page.py +91 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_command.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_coverage.py +25 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_create.py +82 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_grant.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_grant_create.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_list.py +193 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_operation_result.py +192 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_policy.py +76 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_preview.py +40 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_run.py +186 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_source.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_stage.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_status.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_preparation_task_class.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_begin_version.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_list.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_list_query.py +13 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_operation_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_operation_result.py +741 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_publish.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_receipt.py +733 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_validate_request.py +9 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_validation.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_versions.py +30 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/dataset_workspace_write.py +718 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/harness_experiment_policy.py +169 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/harness_policy_source_package.py +98 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/harness_source_package.py +98 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/harness_source_selection.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_model_project_detail.py +111 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_model_project_link.py +29 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_model_project_summary.py +97 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_model_project_sync.py +93 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_model_project_training_setup.py +80 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_training_policy_control.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_training_policy_detail.py +517 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_training_setup_action.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/hosted_training_setup_catalog.py +532 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/import_task_intake_command.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/judge_call_reservation.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_accepted_parent.py +24 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_batch_publication.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_batch_publication_result.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_candidate_decision_observation.py +28 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_chain.py +36 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_command.py +1010 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_command_request.py +1013 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_consumption.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_continuation_mode_override.py +16 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_eligibility_counts.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration_dispatch.py +49 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration_observation.py +24 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration_reservation.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration_status.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration_submission.py +13 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_iteration_trigger.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_json_object.py +9 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_json_pointer.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_operation_result.py +1289 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_policy.py +300 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_policy_content.py +299 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_policy_inspection_result.py +75 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_read_request.py +50 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource.py +875 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_asset.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_batch.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_binding.py +53 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_chain.py +36 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_consumption.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_decision.py +109 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_definition.py +96 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_dispatch.py +49 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_draft.py +165 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_evidence.py +67 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_feedback.py +51 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_grade.py +127 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_iteration.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_package.py +247 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_policy.py +300 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_reservation.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_reward.py +161 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_reward_check.py +126 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_schedule.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_schedule_fire.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_resource_source.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_review_origin.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_revision_ref.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_schedule.py +35 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_schedule_fire.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_configuration.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_configuration_request.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_content.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_credential.py +16 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_credential_created.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_credential_page.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_credential_request.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_source_credential_secret.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_task_queue_inspection.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_text_asset.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/learning_text_asset_content.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_initial_learning.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_profile_evaluation_selection.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_profile_source_selection.py +16 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project.py +132 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_api_error.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_base_model.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_base_model_candidate.py +22 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_configuration_check.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_editable.py +90 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_immutable_ref.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_recipe_document.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_resource_summary.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_save_request.py +107 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_taskset_sync.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_training_method.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_training_setup.py +80 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_project_versioned_ref.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_details.py +384 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_list_query.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_page.py +61 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_policy.py +226 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_request.py +256 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_result.py +434 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/model_taskset_run_summary.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/nightly_schedule.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/policy_optimization_request.py +57 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/post_training_attachment.py +326 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/post_training_control.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/post_training_plan.py +359 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/post_training_qualification.py +28 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/post_training_state.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/post_training_summary.py +30 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/prepared_task_evidence_span.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/prepared_task_provenance.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/prepared_task_qualification.py +38 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/publish_checked_reward_command.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/publish_learning_resource_command.py +663 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/publish_learning_resources_command.py +650 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/queue_reward_check_command.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/queue_task_grade_command.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reserve_learning_iteration_command.py +33 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/resolve_task_feedback_command.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/retry_learning_iteration_dispatch_command.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/review_task_evidence_command.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_authoring_fields.py +69 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_calibration_closure.py +437 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_check_run.py +126 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_check_runtime.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_fixture.py +31 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_fixture_authoring_fields.py +38 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_fixture_check_result.py +75 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/reward_model_training_request.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/save_authoring_draft_command.py +149 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/seal_task_batch_command.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/submit_task_example_command.py +61 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/submit_task_feedback_command.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_admission_decision.py +109 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_admission_decision_content.py +108 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_batch.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_batch_content.py +31 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_batch_package_metadata.py +287 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_definition.py +96 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_definition_content.py +95 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_evidence.py +67 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_evidence_content.py +66 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_evidence_inspection_result.py +30 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_example_submission.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_feedback.py +51 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_feedback_submission.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_format_authoring_fields.py +51 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_grade_run.py +127 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_intake_file.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_intake_format.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_intake_preview.py +37 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_intake_record.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_rating.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/task_source_mapping.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_acceptance_group_page.py +31 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_acceptance_group_query.py +10 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_acceptance_group_reference.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_acceptance_group_summary.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_api_error.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_candidate_decision.py +39 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_candidate_decision_request.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_capabilities.py +68 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_capability_requirement.py +11 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_checkpoint_recovery_request.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_checkpoint_recovery_resource_approval.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_estimate.py +132 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_estimate_component.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_estimate_request.py +388 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_estimate_review.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_estimate_source.py +383 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_evaluation_source.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_evaluation_task_page.py +53 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_evaluation_task_result.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_execution_receipt.py +55 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_gpu_catalog.py +29 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_gpu_selection.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_handoff_context.py +212 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_handoff_origin.py +206 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_harness_source_publication.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_input_artifact.py +20 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_input_artifact_upload.py +19 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job.py +83 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_approval.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_control_request.py +9 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_event.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_kind.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_log.py +14 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_output.py +17 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_outputs.py +73 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_page.py +89 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_recovery.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_request.py +73 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_source.py +241 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_state.py +7 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_job_submission.py +361 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_physical_placement.py +18 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_policy_lora_capabilities.py +26 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_control.py +21 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_list_query.py +12 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_page.py +312 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_plan.py +297 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_plan_content.py +296 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_receipt.py +305 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_preparation_request.py +256 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_qualification_base_model.py +15 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_qualification_evidence.py +34 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models/training_queue_status.py +23 -0
- ponder_sdk-0.1.0/src/ponder_sdk/models_client.py +56 -0
- ponder_sdk-0.1.0/src/ponder_sdk/operation-matrix.json +1640 -0
- ponder_sdk-0.1.0/src/ponder_sdk/operations.py +207 -0
- ponder_sdk-0.1.0/src/ponder_sdk/portable_assets.py +42 -0
- ponder_sdk-0.1.0/src/ponder_sdk/post_training.py +32 -0
- ponder_sdk-0.1.0/src/ponder_sdk/py.typed +0 -0
- ponder_sdk-0.1.0/src/ponder_sdk/resources.py +40 -0
- ponder_sdk-0.1.0/src/ponder_sdk/schema_asset.py +62 -0
- ponder_sdk-0.1.0/src/ponder_sdk/schemas.json +35780 -0
- ponder_sdk-0.1.0/src/ponder_sdk/training.py +208 -0
- ponder_sdk-0.1.0/src/ponder_sdk/transport.py +131 -0
- ponder_sdk-0.1.0/src/ponder_sdk/wire-normalization.json +101 -0
- ponder_sdk-0.1.0/src/ponder_sdk/wire.py +126 -0
- ponder_sdk-0.1.0/tests/test_http_workflow.py +142 -0
- ponder_sdk-0.1.0/tools/check_consumer.py +39 -0
- ponder_sdk-0.1.0/tools/export-wire.ts +116 -0
- ponder_sdk-0.1.0/tools/generate_clients.py +48 -0
- ponder_sdk-0.1.0/tools/generate_models.py +79 -0
- ponder_sdk-0.1.0/tools/prepare_release.py +20 -0
- ponder_sdk-0.1.0/uv.lock +712 -0
ponder_sdk-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenPond contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: ponder-sdk
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Typed native Python access to OpenPond training and learning
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Typing :: Typed
|
|
9
|
+
Requires-Python: >=3.10
|
|
10
|
+
Requires-Dist: httpx<1,>=0.28.1
|
|
11
|
+
Requires-Dist: jsonschema[format]<5,>=4.23
|
|
12
|
+
Requires-Dist: rfc8785<1,>=0.1.4
|
|
13
|
+
Requires-Dist: typing-extensions<5,>=4.12
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
# Ponder Python SDK
|
|
17
|
+
|
|
18
|
+
Native synchronous and asynchronous access to existing OpenPond training,
|
|
19
|
+
evaluation, dataset and continual-learning APIs. Python3.10+; no Node subprocess,
|
|
20
|
+
Desktop application, or uv installation is required to use the installed wheel.
|
|
21
|
+
Distribution `ponder-sdk`, import `ponder_sdk`, candidate version0.1.0. Name and
|
|
22
|
+
publisher ownership must be verified before publication; this source is not a
|
|
23
|
+
claim that a registry release exists.
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
pip install ponder-sdk==0.1.0
|
|
27
|
+
# or: uv add ponder-sdk==0.1.0
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Use an existing workspace API credential and explicit API origin. Do not put
|
|
31
|
+
credentials in source or request URLs. The SDK does not perform a second login.
|
|
32
|
+
For the official CLI use the running app's configured OpenPond home as described
|
|
33
|
+
in the repository configuration guide; the SDK accepts the credential explicitly.
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from ponder_sdk import Client, inputs
|
|
37
|
+
|
|
38
|
+
with Client(base_url="https://staging-api.openpond.ai", api_key=api_key,
|
|
39
|
+
team_id=team_id) as client:
|
|
40
|
+
capabilities = client.training.capabilities()
|
|
41
|
+
# review is an existing reviewed batch and a pinned Model configuration.
|
|
42
|
+
request: inputs.TrainingPreparationRequest = {
|
|
43
|
+
"schemaVersion": "openpond.trainingPreparationRequest.v1",
|
|
44
|
+
"teamId": team_id, "operationId": operation_id, "projectId": project_id,
|
|
45
|
+
"configuration": configuration, "batch": reviewed_batch,
|
|
46
|
+
"name": "Reviewed training", "maximumSpendUsd": approved_spend,
|
|
47
|
+
}
|
|
48
|
+
prepared = client.training.prepare_run(request)
|
|
49
|
+
# Keep the receipt. Start is a separate explicit mutation after review.
|
|
50
|
+
# client.training.start_preparation(prepared["plan"]["id"], {
|
|
51
|
+
# "teamId": team_id, "planHash": prepared["plan"]["contentHash"],
|
|
52
|
+
# "expectedRevision": prepared["revision"],
|
|
53
|
+
# })
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Every resource group has matching `AsyncClient` methods and owns the same native
|
|
57
|
+
HTTP pool. Use `async with AsyncClient(...)` and await calls. Close a client when
|
|
58
|
+
finished; cancellation of an async call propagates normally and closes its
|
|
59
|
+
response stream. If cancellation or transport loss occurs during a write, its
|
|
60
|
+
outcome may be unknown: retain the original operation/idempotency key and read the
|
|
61
|
+
existing operation/preparation/job before deciding whether to explicitly replay.
|
|
62
|
+
Writes are never automatically retried. GET reads retry at most3times for bounded
|
|
63
|
+
transport/408/429/selected5xx failures, with250/500ms backoff. Set `read_attempts=1`
|
|
64
|
+
when the caller owns retry policy.
|
|
65
|
+
|
|
66
|
+
`timeout` bounds connect/read/write/pool inactivity and checks elapsed time in the
|
|
67
|
+
streamed body loop. Synchronous calls do not promise an absolute wall-clock
|
|
68
|
+
deadline: header trickling can continue while making progress, and a blocked
|
|
69
|
+
body read can overshoot the elapsed check by one read timeout. Synchronous hard
|
|
70
|
+
workflow cancellation is caller-owned. Async calls additionally enforce one
|
|
71
|
+
`asyncio.wait_for` deadline across connection, headers, body and retries; caller
|
|
72
|
+
cancellation propagates and closes the owned response. This is not a process-kill
|
|
73
|
+
deadline. Async callers can also bound an entire multi-call workflow. Responses are streamed under explicit byte bounds; compression is not
|
|
74
|
+
requested or accepted, and redirects are refused. Structured `PonderError`
|
|
75
|
+
exposes only a safe code/status/outcome_unknown flag, never raw remote messages,
|
|
76
|
+
request bodies, transport URLs or credentials.
|
|
77
|
+
|
|
78
|
+
## API and authoring boundary
|
|
79
|
+
|
|
80
|
+
`client.training`, `models`, `learning`, `post_training`, `evaluation_runs`,
|
|
81
|
+
`datasets` and `dataset_preparations` cover the shared operation matrix bundled in
|
|
82
|
+
`operation-matrix.json`. Public `inputs` and `models` are generated TypedDict and
|
|
83
|
+
union types, including nested fields, from the TypeScript Zod wire schemas.
|
|
84
|
+
Runtime JSON Schema validation preserves the same default/standard string
|
|
85
|
+
normalization metadata. Additional immutable-reference, request/hash, revision,
|
|
86
|
+
workspace and cursor checks protect the client boundary; server domain admission
|
|
87
|
+
and authorization remain authoritative. Compact training-envelope hashes are independently recomputed. Harness/Learning
|
|
88
|
+
resource seals use a different existing pretty-JSON/localeCompare algorithm;
|
|
89
|
+
Python preserves their authenticated declarations and pinned references without
|
|
90
|
+
claiming independent recomputation or ICU portability. This affects Harness
|
|
91
|
+
source/agent/release, Learning resources, dataset workspace, post-training plan
|
|
92
|
+
and evaluation-manifest seals. Raw Harness file SHA256/size/complete asset closure
|
|
93
|
+
and private-policy visibility are independently checked. Existing sealed resources
|
|
94
|
+
can be submitted/read, while their domain admission remains server-owned. Python
|
|
95
|
+
custom Harness/Reward authoring and a universal Harness hashing bridge are not
|
|
96
|
+
part of this package. Portable resource formats are accepted;
|
|
97
|
+
this SDK does not execute Python-authored custom Rewards or environments.
|
|
98
|
+
|
|
99
|
+
Learning methods accept the existing typed command/read envelopes, including
|
|
100
|
+
explicit workspace `scope`, not a second workflow language. Generic `command`
|
|
101
|
+
provides the current evidence/feedback/review/batch/policy/iteration controls.
|
|
102
|
+
`submit_example` and `submit_feedback` wrap the existing typed submissions.
|
|
103
|
+
See `examples/continual.py` for native API orchestration. Learning resource pages
|
|
104
|
+
retain `nextCursor`; callers pass it as `afterId` in the next read. Training job
|
|
105
|
+
pages use `cursor`, preparations use `afterId`, and evaluation pages use their
|
|
106
|
+
numeric consecutive offset cursor. Never restart pagination from the beginning
|
|
107
|
+
after a failed mutation. All page APIs expose the full retained cursor.
|
|
108
|
+
|
|
109
|
+
The existing estimate client contract has no current hosted route and is not a
|
|
110
|
+
prerequisite for preparation/start. Known unavailable routes raise
|
|
111
|
+
`unsupported_hosted_operation` before dispatch; the matrix records local/hosted
|
|
112
|
+
availability. Fresh GPU catalog and explicit approved spend remain subject to
|
|
113
|
+
server admission.
|
|
114
|
+
|
|
115
|
+
Current executable training is discovered through capabilities: GRPO and
|
|
116
|
+
reward-model jobs in the deployed host's supported model/runtime envelope.
|
|
117
|
+
Recipe schema enums do not establish SFT/DPO/PPO or gradient/session support.
|
|
118
|
+
Candidate decisions do not activate serving. Training start, funding, evaluation
|
|
119
|
+
start/retry, acceptance and serving are separate explicit controls. Ordinary
|
|
120
|
+
hosted `prepare_run` compiles an existing reviewed batch on the server; Python
|
|
121
|
+
never shells out to a Node authoring compiler. Advanced `stage_artifact` and
|
|
122
|
+
`create_job` require already-authored portable artifacts, immutable hashes,
|
|
123
|
+
capabilities and exact approval. Dataset source ingestion/large uploads remain
|
|
124
|
+
subject to the existing public format and API limits.
|
|
125
|
+
|
|
126
|
+
## Development and release
|
|
127
|
+
|
|
128
|
+
```sh
|
|
129
|
+
uv sync --project python/openpond-sdk --locked
|
|
130
|
+
pnpm exec tsx python/openpond-sdk/tools/export-wire.ts
|
|
131
|
+
uv run --project python/openpond-sdk python python/openpond-sdk/tools/generate_models.py
|
|
132
|
+
uv run --project python/openpond-sdk python python/openpond-sdk/tools/generate_models.py --inputs
|
|
133
|
+
uv run --project python/openpond-sdk python python/openpond-sdk/tools/generate_clients.py
|
|
134
|
+
uv run --project python/openpond-sdk pytest python/openpond-sdk/tests
|
|
135
|
+
uv build --project python/openpond-sdk --no-sources
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
The schema asset uses versioned, lossless structural interning. One bounded
|
|
139
|
+
strict decoder expands it before validation or type generation; JSON Schema
|
|
140
|
+
local references, parsing policies and annotations retain their original scope.
|
|
141
|
+
The shared and packaged asset bytes match.
|
|
142
|
+
|
|
143
|
+
The command is a development schema exporter only; installed consumers never
|
|
144
|
+
need it. Shared canonical fixtures include omitted/null, Unicode, integer-key
|
|
145
|
+
ordering and JavaScript number boundaries. The canonical JSON implementation
|
|
146
|
+
matches the existing protocol, including JS array-index enumeration; plain JCS
|
|
147
|
+
object sorting alone would give different hashes. Python integers must be exactly
|
|
148
|
+
representable as a JavaScript binary64 value rather than silently rounded.
|
|
149
|
+
|
|
150
|
+
`tools/prepare_release.py` builds source/wheel distributions and records exact
|
|
151
|
+
hashes without publishing. `tools/check_consumer.py` verifies the exact wheel in
|
|
152
|
+
isolated temporary pip and uv environments. The manual
|
|
153
|
+
`.github/workflows/release-python-sdk.yml` workflow first builds, validates and
|
|
154
|
+
uploads immutable candidate artifacts after successful CI on that source commit.
|
|
155
|
+
It never publishes from the build lane. After reviewing that run's manifest,
|
|
156
|
+
source bindings, wheel, source distribution and consumer receipt, publish the
|
|
157
|
+
same artifacts with their exact source/run/version/manifest binding:
|
|
158
|
+
|
|
159
|
+
```sh
|
|
160
|
+
# Run from the reviewed source ref; these are operator commands, not yet run.
|
|
161
|
+
gh workflow run release-python-sdk.yml --ref REVIEWED_REF -f mode=build -f version=0.1.0
|
|
162
|
+
gh run download REVIEWED_BUILD_RUN -n ponder-python-candidate -D reviewed-python-candidate
|
|
163
|
+
sha256sum reviewed-python-candidate/manifest.json
|
|
164
|
+
gh workflow run release-python-sdk.yml --ref REVIEWED_REF -f mode=publish -f version=0.1.0 -f candidate_run_id=REVIEWED_BUILD_RUN -f candidate_sha=REVIEWED_40_CHARACTER_COMMIT -f manifest_sha256=REVIEWED_MANIFEST_SHA256
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The publish lane requires the protected `pypi-production` environment and
|
|
168
|
+
`PONDER_SDK_PYPI_OWNER_VERIFIED=true`, set only after independent project ownership
|
|
169
|
+
and exact repository/workflow/environment trusted-publisher bootstrap. No token
|
|
170
|
+
or first-publication authority is inferred from the package name or build. It
|
|
171
|
+
downloads the reviewed build without rebuilding, checks all artifact digests,
|
|
172
|
+
reconciles any already-published exact version and uses the pinned official PyPI
|
|
173
|
+
OIDC action. A mismatching existing release refuses; an ambiguous upload requires
|
|
174
|
+
read-only reconciliation of those same digests before retrying. A wheel hash is
|
|
175
|
+
not publisher ownership. Actual hosted qualification
|
|
176
|
+
requires retained API receipts and separately authorized compute; local consumer
|
|
177
|
+
checks do not claim GPU execution, wrong-team deployed denial or live serving.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Ponder Python SDK
|
|
2
|
+
|
|
3
|
+
Native synchronous and asynchronous access to existing OpenPond training,
|
|
4
|
+
evaluation, dataset and continual-learning APIs. Python3.10+; no Node subprocess,
|
|
5
|
+
Desktop application, or uv installation is required to use the installed wheel.
|
|
6
|
+
Distribution `ponder-sdk`, import `ponder_sdk`, candidate version0.1.0. Name and
|
|
7
|
+
publisher ownership must be verified before publication; this source is not a
|
|
8
|
+
claim that a registry release exists.
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
pip install ponder-sdk==0.1.0
|
|
12
|
+
# or: uv add ponder-sdk==0.1.0
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use an existing workspace API credential and explicit API origin. Do not put
|
|
16
|
+
credentials in source or request URLs. The SDK does not perform a second login.
|
|
17
|
+
For the official CLI use the running app's configured OpenPond home as described
|
|
18
|
+
in the repository configuration guide; the SDK accepts the credential explicitly.
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
from ponder_sdk import Client, inputs
|
|
22
|
+
|
|
23
|
+
with Client(base_url="https://staging-api.openpond.ai", api_key=api_key,
|
|
24
|
+
team_id=team_id) as client:
|
|
25
|
+
capabilities = client.training.capabilities()
|
|
26
|
+
# review is an existing reviewed batch and a pinned Model configuration.
|
|
27
|
+
request: inputs.TrainingPreparationRequest = {
|
|
28
|
+
"schemaVersion": "openpond.trainingPreparationRequest.v1",
|
|
29
|
+
"teamId": team_id, "operationId": operation_id, "projectId": project_id,
|
|
30
|
+
"configuration": configuration, "batch": reviewed_batch,
|
|
31
|
+
"name": "Reviewed training", "maximumSpendUsd": approved_spend,
|
|
32
|
+
}
|
|
33
|
+
prepared = client.training.prepare_run(request)
|
|
34
|
+
# Keep the receipt. Start is a separate explicit mutation after review.
|
|
35
|
+
# client.training.start_preparation(prepared["plan"]["id"], {
|
|
36
|
+
# "teamId": team_id, "planHash": prepared["plan"]["contentHash"],
|
|
37
|
+
# "expectedRevision": prepared["revision"],
|
|
38
|
+
# })
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Every resource group has matching `AsyncClient` methods and owns the same native
|
|
42
|
+
HTTP pool. Use `async with AsyncClient(...)` and await calls. Close a client when
|
|
43
|
+
finished; cancellation of an async call propagates normally and closes its
|
|
44
|
+
response stream. If cancellation or transport loss occurs during a write, its
|
|
45
|
+
outcome may be unknown: retain the original operation/idempotency key and read the
|
|
46
|
+
existing operation/preparation/job before deciding whether to explicitly replay.
|
|
47
|
+
Writes are never automatically retried. GET reads retry at most3times for bounded
|
|
48
|
+
transport/408/429/selected5xx failures, with250/500ms backoff. Set `read_attempts=1`
|
|
49
|
+
when the caller owns retry policy.
|
|
50
|
+
|
|
51
|
+
`timeout` bounds connect/read/write/pool inactivity and checks elapsed time in the
|
|
52
|
+
streamed body loop. Synchronous calls do not promise an absolute wall-clock
|
|
53
|
+
deadline: header trickling can continue while making progress, and a blocked
|
|
54
|
+
body read can overshoot the elapsed check by one read timeout. Synchronous hard
|
|
55
|
+
workflow cancellation is caller-owned. Async calls additionally enforce one
|
|
56
|
+
`asyncio.wait_for` deadline across connection, headers, body and retries; caller
|
|
57
|
+
cancellation propagates and closes the owned response. This is not a process-kill
|
|
58
|
+
deadline. Async callers can also bound an entire multi-call workflow. Responses are streamed under explicit byte bounds; compression is not
|
|
59
|
+
requested or accepted, and redirects are refused. Structured `PonderError`
|
|
60
|
+
exposes only a safe code/status/outcome_unknown flag, never raw remote messages,
|
|
61
|
+
request bodies, transport URLs or credentials.
|
|
62
|
+
|
|
63
|
+
## API and authoring boundary
|
|
64
|
+
|
|
65
|
+
`client.training`, `models`, `learning`, `post_training`, `evaluation_runs`,
|
|
66
|
+
`datasets` and `dataset_preparations` cover the shared operation matrix bundled in
|
|
67
|
+
`operation-matrix.json`. Public `inputs` and `models` are generated TypedDict and
|
|
68
|
+
union types, including nested fields, from the TypeScript Zod wire schemas.
|
|
69
|
+
Runtime JSON Schema validation preserves the same default/standard string
|
|
70
|
+
normalization metadata. Additional immutable-reference, request/hash, revision,
|
|
71
|
+
workspace and cursor checks protect the client boundary; server domain admission
|
|
72
|
+
and authorization remain authoritative. Compact training-envelope hashes are independently recomputed. Harness/Learning
|
|
73
|
+
resource seals use a different existing pretty-JSON/localeCompare algorithm;
|
|
74
|
+
Python preserves their authenticated declarations and pinned references without
|
|
75
|
+
claiming independent recomputation or ICU portability. This affects Harness
|
|
76
|
+
source/agent/release, Learning resources, dataset workspace, post-training plan
|
|
77
|
+
and evaluation-manifest seals. Raw Harness file SHA256/size/complete asset closure
|
|
78
|
+
and private-policy visibility are independently checked. Existing sealed resources
|
|
79
|
+
can be submitted/read, while their domain admission remains server-owned. Python
|
|
80
|
+
custom Harness/Reward authoring and a universal Harness hashing bridge are not
|
|
81
|
+
part of this package. Portable resource formats are accepted;
|
|
82
|
+
this SDK does not execute Python-authored custom Rewards or environments.
|
|
83
|
+
|
|
84
|
+
Learning methods accept the existing typed command/read envelopes, including
|
|
85
|
+
explicit workspace `scope`, not a second workflow language. Generic `command`
|
|
86
|
+
provides the current evidence/feedback/review/batch/policy/iteration controls.
|
|
87
|
+
`submit_example` and `submit_feedback` wrap the existing typed submissions.
|
|
88
|
+
See `examples/continual.py` for native API orchestration. Learning resource pages
|
|
89
|
+
retain `nextCursor`; callers pass it as `afterId` in the next read. Training job
|
|
90
|
+
pages use `cursor`, preparations use `afterId`, and evaluation pages use their
|
|
91
|
+
numeric consecutive offset cursor. Never restart pagination from the beginning
|
|
92
|
+
after a failed mutation. All page APIs expose the full retained cursor.
|
|
93
|
+
|
|
94
|
+
The existing estimate client contract has no current hosted route and is not a
|
|
95
|
+
prerequisite for preparation/start. Known unavailable routes raise
|
|
96
|
+
`unsupported_hosted_operation` before dispatch; the matrix records local/hosted
|
|
97
|
+
availability. Fresh GPU catalog and explicit approved spend remain subject to
|
|
98
|
+
server admission.
|
|
99
|
+
|
|
100
|
+
Current executable training is discovered through capabilities: GRPO and
|
|
101
|
+
reward-model jobs in the deployed host's supported model/runtime envelope.
|
|
102
|
+
Recipe schema enums do not establish SFT/DPO/PPO or gradient/session support.
|
|
103
|
+
Candidate decisions do not activate serving. Training start, funding, evaluation
|
|
104
|
+
start/retry, acceptance and serving are separate explicit controls. Ordinary
|
|
105
|
+
hosted `prepare_run` compiles an existing reviewed batch on the server; Python
|
|
106
|
+
never shells out to a Node authoring compiler. Advanced `stage_artifact` and
|
|
107
|
+
`create_job` require already-authored portable artifacts, immutable hashes,
|
|
108
|
+
capabilities and exact approval. Dataset source ingestion/large uploads remain
|
|
109
|
+
subject to the existing public format and API limits.
|
|
110
|
+
|
|
111
|
+
## Development and release
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
uv sync --project python/openpond-sdk --locked
|
|
115
|
+
pnpm exec tsx python/openpond-sdk/tools/export-wire.ts
|
|
116
|
+
uv run --project python/openpond-sdk python python/openpond-sdk/tools/generate_models.py
|
|
117
|
+
uv run --project python/openpond-sdk python python/openpond-sdk/tools/generate_models.py --inputs
|
|
118
|
+
uv run --project python/openpond-sdk python python/openpond-sdk/tools/generate_clients.py
|
|
119
|
+
uv run --project python/openpond-sdk pytest python/openpond-sdk/tests
|
|
120
|
+
uv build --project python/openpond-sdk --no-sources
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The schema asset uses versioned, lossless structural interning. One bounded
|
|
124
|
+
strict decoder expands it before validation or type generation; JSON Schema
|
|
125
|
+
local references, parsing policies and annotations retain their original scope.
|
|
126
|
+
The shared and packaged asset bytes match.
|
|
127
|
+
|
|
128
|
+
The command is a development schema exporter only; installed consumers never
|
|
129
|
+
need it. Shared canonical fixtures include omitted/null, Unicode, integer-key
|
|
130
|
+
ordering and JavaScript number boundaries. The canonical JSON implementation
|
|
131
|
+
matches the existing protocol, including JS array-index enumeration; plain JCS
|
|
132
|
+
object sorting alone would give different hashes. Python integers must be exactly
|
|
133
|
+
representable as a JavaScript binary64 value rather than silently rounded.
|
|
134
|
+
|
|
135
|
+
`tools/prepare_release.py` builds source/wheel distributions and records exact
|
|
136
|
+
hashes without publishing. `tools/check_consumer.py` verifies the exact wheel in
|
|
137
|
+
isolated temporary pip and uv environments. The manual
|
|
138
|
+
`.github/workflows/release-python-sdk.yml` workflow first builds, validates and
|
|
139
|
+
uploads immutable candidate artifacts after successful CI on that source commit.
|
|
140
|
+
It never publishes from the build lane. After reviewing that run's manifest,
|
|
141
|
+
source bindings, wheel, source distribution and consumer receipt, publish the
|
|
142
|
+
same artifacts with their exact source/run/version/manifest binding:
|
|
143
|
+
|
|
144
|
+
```sh
|
|
145
|
+
# Run from the reviewed source ref; these are operator commands, not yet run.
|
|
146
|
+
gh workflow run release-python-sdk.yml --ref REVIEWED_REF -f mode=build -f version=0.1.0
|
|
147
|
+
gh run download REVIEWED_BUILD_RUN -n ponder-python-candidate -D reviewed-python-candidate
|
|
148
|
+
sha256sum reviewed-python-candidate/manifest.json
|
|
149
|
+
gh workflow run release-python-sdk.yml --ref REVIEWED_REF -f mode=publish -f version=0.1.0 -f candidate_run_id=REVIEWED_BUILD_RUN -f candidate_sha=REVIEWED_40_CHARACTER_COMMIT -f manifest_sha256=REVIEWED_MANIFEST_SHA256
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The publish lane requires the protected `pypi-production` environment and
|
|
153
|
+
`PONDER_SDK_PYPI_OWNER_VERIFIED=true`, set only after independent project ownership
|
|
154
|
+
and exact repository/workflow/environment trusted-publisher bootstrap. No token
|
|
155
|
+
or first-publication authority is inferred from the package name or build. It
|
|
156
|
+
downloads the reviewed build without rebuilding, checks all artifact digests,
|
|
157
|
+
reconciles any already-published exact version and uses the pinned official PyPI
|
|
158
|
+
OIDC action. A mismatching existing release refuses; an ambiguous upload requires
|
|
159
|
+
read-only reconciliation of those same digests before retrying. A wheel hash is
|
|
160
|
+
not publisher ownership. Actual hosted qualification
|
|
161
|
+
requires retained API receipts and separately authorized compute; local consumer
|
|
162
|
+
checks do not claim GPU execution, wrong-team deployed denial or live serving.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""One explicit existing continual transition or finite retained snapshot.
|
|
2
|
+
|
|
3
|
+
Reservation may trigger paid host dispatch. Never replay an uncertain mutation
|
|
4
|
+
with a new operation ID; use read-only reconcile/status instead.
|
|
5
|
+
"""
|
|
6
|
+
import argparse,asyncio,json,os
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from ponder_sdk import AsyncClient,ProtocolError
|
|
9
|
+
from ponder_sdk.wire import validate
|
|
10
|
+
|
|
11
|
+
async def main():
|
|
12
|
+
parser=argparse.ArgumentParser();parser.add_argument('action',choices=['inspect','command','reserve','reconcile','status','results','cancel','retry']);parser.add_argument('input',type=Path);parser.add_argument('output',type=Path);args=parser.parse_args()
|
|
13
|
+
raw=args.input.read_bytes()
|
|
14
|
+
if len(raw)>16777216:raise ProtocolError('input_too_large')
|
|
15
|
+
value=json.loads(raw)
|
|
16
|
+
async with AsyncClient(base_url=os.environ['OPENPOND_API_URL'],api_key=os.environ['OPENPOND_API_KEY'],team_id=os.environ['OPENPOND_TEAM_ID']) as client:
|
|
17
|
+
scope=client.team_id
|
|
18
|
+
if args.action=='inspect':response=await client.learning.inspect_policy({'action':'inspect_policy','scope':scope,'policy':value})
|
|
19
|
+
elif args.action=='reconcile':
|
|
20
|
+
value=validate('LearningCommandSchema',value,request=True)
|
|
21
|
+
if value.get('action')!='reserve_iteration' or value['trigger']['kind']!='manual':raise ProtocolError('manual_reservation_command_required')
|
|
22
|
+
inspection=await client.learning.inspect_policy({'action':'inspect_policy','scope':scope,'policy':value['policy']})
|
|
23
|
+
if not inspection['chain']:raise ProtocolError('reservation_not_observed')
|
|
24
|
+
cursor=None;seen=set();response=None
|
|
25
|
+
for _ in range(10):
|
|
26
|
+
page=await client.learning.list({'action':'list','scope':scope,'kind':'reservation','parentId':inspection['chain']['id'],'limit':100,**({'afterId':cursor} if cursor else {})})
|
|
27
|
+
reservation=next((r for r in page['items'] if r['policy']==value['policy'] and r['trigger']==value['trigger']),None)
|
|
28
|
+
if reservation:
|
|
29
|
+
iteration=await client.learning.get({'action':'get','scope':scope,'kind':'iteration','id':reservation['iterationId']})
|
|
30
|
+
response={'reservation':reservation,'iteration':iteration};break
|
|
31
|
+
cursor=page['nextCursor']
|
|
32
|
+
if not cursor:break
|
|
33
|
+
if cursor in seen:raise ProtocolError('repeated_cursor')
|
|
34
|
+
seen.add(cursor)
|
|
35
|
+
if response is None:raise ProtocolError('reservation_not_observed_no_replay')
|
|
36
|
+
elif args.action in ('command','reserve'):
|
|
37
|
+
if (args.action=='reserve')!=(value.get('action')=='reserve_iteration'):raise ProtocolError('explicit_reserve_required')
|
|
38
|
+
if args.action=='reserve' and value['trigger']['kind']!='manual':raise ProtocolError('manual_trigger_required')
|
|
39
|
+
operation=await client.learning.command({'scope':scope,'command':value})
|
|
40
|
+
iteration=next((r for r in operation['resources'] if r['schemaVersion']=='openpond.learningIteration.v1'),None)
|
|
41
|
+
response={'operation':operation,**({'iteration':iteration} if iteration else {})}
|
|
42
|
+
else:
|
|
43
|
+
retained=value['iteration']
|
|
44
|
+
iteration=await client.learning.get({'action':'get','scope':scope,'kind':'iteration','id':retained['id']})
|
|
45
|
+
if iteration['policy']!=retained['policy'] or iteration['dispatchId']!=retained['dispatchId']:raise ProtocolError('iteration_binding_changed')
|
|
46
|
+
if args.action in ('cancel','retry'):
|
|
47
|
+
if args.action=='retry':
|
|
48
|
+
dispatch=await client.learning.get({'action':'get','scope':scope,'kind':'dispatch','id':iteration['dispatchId']})
|
|
49
|
+
if dispatch['iterationId']!=iteration['id'] or dispatch['state']!='blocked':raise ProtocolError('dispatch_not_blocked')
|
|
50
|
+
operation=await client.learning.command({'scope':scope,'command':{'action':'cancel_iteration' if args.action=='cancel' else 'retry_iteration_dispatch','operationId':value['operationId'],'iterationId':iteration['id'],'expectedRevision':iteration['revision']}})
|
|
51
|
+
response={'operation':operation,'iteration':next((r for r in operation['resources'] if r['schemaVersion']=='openpond.learningIteration.v1'),iteration)}
|
|
52
|
+
else:
|
|
53
|
+
page=await client.learning.list({'action':'list','scope':scope,'kind':'dispatch','parentId':iteration['id'],'limit':2})
|
|
54
|
+
if page['nextCursor'] or len(page['items'])>1 or any(d['id']!=iteration['dispatchId'] for d in page['items']):raise ProtocolError('ambiguous_dispatch_identity')
|
|
55
|
+
dispatch=page['items'][0] if page['items'] else None
|
|
56
|
+
# Worker commits iteration and dispatch together, but these HTTP
|
|
57
|
+
# reads are separate snapshots. Refresh once and refuse a race.
|
|
58
|
+
iteration=await client.learning.get({'action':'get','scope':scope,'kind':'iteration','id':retained['id']})
|
|
59
|
+
if iteration['policy']!=retained['policy'] or iteration['dispatchId']!=retained['dispatchId']:raise ProtocolError('iteration_binding_changed')
|
|
60
|
+
if dispatch and (dispatch['iterationId']!=iteration['id'] or dispatch['policy']!=iteration['policy'] or dispatch['execution']!=iteration['trainingJob']):raise ProtocolError('snapshot_changed_read_again')
|
|
61
|
+
if dispatch is None and iteration['trainingJob'] is not None:raise ProtocolError('snapshot_changed_read_again')
|
|
62
|
+
job=await client.training.get_job(iteration['trainingJob']['id']) if iteration['trainingJob'] else None
|
|
63
|
+
if job and (job['id']!=iteration['trainingJob']['id'] or job['submissionHash']!=iteration['trainingJob']['contentHash']):raise ProtocolError('training_execution_identity_mismatch')
|
|
64
|
+
if args.action=='results' and (not dispatch or dispatch['state']!='settled' or not dispatch['terminalReceipt']):raise ProtocolError('terminal_cleanup_receipt_not_observed')
|
|
65
|
+
if args.action=='results' and job is None and (iteration['status']!='cancelled' or dispatch['execution'] is not None):raise ProtocolError('terminal_job_not_observed')
|
|
66
|
+
response={'iteration':iteration,'dispatch':dispatch,'job':job}
|
|
67
|
+
if args.action=='results' and job:response['outputs']=await client.training.outputs(job['id'])
|
|
68
|
+
fd=os.open(args.output,os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600)
|
|
69
|
+
with os.fdopen(fd,'w',encoding='utf-8') as file:json.dump(response,file,ensure_ascii=True)
|
|
70
|
+
print('Saved one retained transition/snapshot. Local timeout does not cancel remote work.')
|
|
71
|
+
|
|
72
|
+
# Total client workflow is bounded, including multiple sequential public reads.
|
|
73
|
+
asyncio.run(asyncio.wait_for(main(),timeout=120))
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Native reviewed-batch orchestration; each mutation is selected explicitly.
|
|
2
|
+
|
|
3
|
+
OPENPOND_API_URL / OPENPOND_API_KEY / OPENPOND_TEAM_ID are existing credentials,
|
|
4
|
+
not a second login. Never execute this example as a test without approval.
|
|
5
|
+
"""
|
|
6
|
+
import argparse,asyncio,json,os
|
|
7
|
+
from datetime import datetime,timezone
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from ponder_sdk import AsyncClient,ProtocolError
|
|
10
|
+
|
|
11
|
+
async def main():
|
|
12
|
+
parser=argparse.ArgumentParser()
|
|
13
|
+
parser.add_argument('action',choices=['prepare','start','status','results','cancel'])
|
|
14
|
+
parser.add_argument('input',type=Path);parser.add_argument('output',type=Path)
|
|
15
|
+
args=parser.parse_args()
|
|
16
|
+
raw=args.input.read_bytes()
|
|
17
|
+
if len(raw)>1048576:raise ProtocolError('input_too_large')
|
|
18
|
+
value=json.loads(raw)
|
|
19
|
+
async with AsyncClient(base_url=os.environ['OPENPOND_API_URL'],api_key=os.environ['OPENPOND_API_KEY'],team_id=os.environ['OPENPOND_TEAM_ID']) as client:
|
|
20
|
+
if args.action=='prepare':
|
|
21
|
+
capabilities=await client.training.capabilities()
|
|
22
|
+
if 'grpo' not in capabilities['methods']:raise ProtocolError('grpo_not_available')
|
|
23
|
+
response=await client.training.prepare_run(value)
|
|
24
|
+
else:
|
|
25
|
+
retained=await client.training.get_preparation(value['plan']['id'])
|
|
26
|
+
if retained['plan']['contentHash']!=value['plan']['contentHash']:raise ProtocolError('preparation_identity_mismatch')
|
|
27
|
+
if args.action=='start':
|
|
28
|
+
if retained['state']!='prepared':raise ProtocolError('reconcile_existing_preparation')
|
|
29
|
+
# No estimate endpoint is invented. The retained request already
|
|
30
|
+
# binds explicit maximum spend; fresh offerings/server admission apply.
|
|
31
|
+
catalog=await client.training.gpu_catalog()
|
|
32
|
+
if datetime.fromisoformat(catalog['expiresAt'].replace('Z','+00:00'))<=datetime.now(timezone.utc):raise ProtocolError('gpu_catalog_expired')
|
|
33
|
+
catalog_fd=os.open(args.output.with_suffix(args.output.suffix+'.catalog.json'),os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600)
|
|
34
|
+
with os.fdopen(catalog_fd,'w',encoding='utf-8') as file:json.dump(catalog,file)
|
|
35
|
+
response=await client.training.start_preparation(retained['plan']['id'],{'teamId':client.team_id,'planHash':retained['plan']['contentHash'],'expectedRevision':retained['revision']})
|
|
36
|
+
elif args.action=='cancel':
|
|
37
|
+
if retained['jobId']:
|
|
38
|
+
job=await client.training.get_job(retained['jobId'])
|
|
39
|
+
response=await client.training.cancel_job(job['id'],{'expectedVersion':job['version']})
|
|
40
|
+
else:response=await client.training.cancel_preparation(retained['plan']['id'],{'teamId':client.team_id,'planHash':retained['plan']['contentHash'],'expectedRevision':retained['revision']})
|
|
41
|
+
elif args.action=='status':response={'preparation':retained,'job':await client.training.get_job(retained['jobId']) if retained['jobId'] else None}
|
|
42
|
+
else:
|
|
43
|
+
if not retained['jobId']:raise ProtocolError('preparation_not_submitted')
|
|
44
|
+
response=await client.training.outputs(retained['jobId'])
|
|
45
|
+
# Receipts may contain private evidence. Do not print them to a shared log.
|
|
46
|
+
fd=os.open(args.output,os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600)
|
|
47
|
+
with os.fdopen(fd,'w',encoding='utf-8') as file:json.dump(response,file,ensure_ascii=True)
|
|
48
|
+
print('Saved the retained response. Execution/acceptance remain separate gates.')
|
|
49
|
+
|
|
50
|
+
asyncio.run(asyncio.wait_for(main(),timeout=120))
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "ponder-sdk"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Typed native Python access to OpenPond training and learning"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = "MIT"
|
|
7
|
+
requires-python = ">=3.10"
|
|
8
|
+
dependencies = ["httpx>=0.28.1,<1", "jsonschema[format]>=4.23,<5", "rfc8785>=0.1.4,<1", "typing-extensions>=4.12,<5"]
|
|
9
|
+
classifiers = ["Typing :: Typed", "Programming Language :: Python :: 3"]
|
|
10
|
+
|
|
11
|
+
[dependency-groups]
|
|
12
|
+
dev = ["pytest>=8.3,<10", "tomli>=2,<3; python_version < '3.11'"]
|
|
13
|
+
|
|
14
|
+
[build-system]
|
|
15
|
+
requires = ["hatchling==1.32.4"]
|
|
16
|
+
build-backend = "hatchling.build"
|
|
17
|
+
|
|
18
|
+
[tool.hatch.build.targets.wheel]
|
|
19
|
+
packages = ["src/ponder_sdk"]
|
|
20
|
+
|
|
21
|
+
[tool.hatch.build.targets.sdist]
|
|
22
|
+
include = ["src", "examples", "tools", "tests", "README.md", "LICENSE", "pyproject.toml", "uv.lock"]
|
|
23
|
+
|
|
24
|
+
[tool.pytest.ini_options]
|
|
25
|
+
testpaths = ["tests"]
|
|
26
|
+
addopts = "-q"
|
|
27
|
+
|
|
28
|
+
[tool.uv]
|
|
29
|
+
required-version = ">=0.9.11"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""Ponder Python SDK. Training execution remains capability-gated by the host."""
|
|
2
|
+
from .client import Client,AsyncClient
|
|
3
|
+
from .errors import PonderError,ProtocolError
|
|
4
|
+
from .wire import canonical_json,canonical_sha256
|
|
5
|
+
from . import models,inputs
|
|
6
|
+
__version__='0.1.0'
|
|
7
|
+
__all__=['Client','AsyncClient','PonderError','ProtocolError','canonical_json','canonical_sha256','models','inputs']
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "openpond.canonicalIdentities.v1",
|
|
3
|
+
"vectors": [
|
|
4
|
+
{
|
|
5
|
+
"value": "😀",
|
|
6
|
+
"canonical": "\"😀\"",
|
|
7
|
+
"sha256": "7a0c50b92434b015545fe93ab723db2d4b2cdd14a441405624a9ce8be29f1d5a"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"value": "\ud800",
|
|
11
|
+
"canonical": "\"\\ud800\"",
|
|
12
|
+
"sha256": "8c0c59dd0d275aadcd462a5fe12eb352cbdfeaf961eae4f85a4660521df7d2f5"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"value": {
|
|
16
|
+
"__proto__": {
|
|
17
|
+
"retained": true
|
|
18
|
+
},
|
|
19
|
+
"ordinary": 1
|
|
20
|
+
},
|
|
21
|
+
"canonical": "{\"__proto__\":{\"retained\":true},\"ordinary\":1}",
|
|
22
|
+
"sha256": "8d52a329a7fb2167e4d72deefb9d41ed2c78233596ebff7b240d78eab348c1eb"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"value": {
|
|
26
|
+
"2": 2,
|
|
27
|
+
"10": 1,
|
|
28
|
+
"4294967294": 4,
|
|
29
|
+
"01": 3,
|
|
30
|
+
"4294967295": 5
|
|
31
|
+
},
|
|
32
|
+
"canonical": "{\"2\":2,\"10\":1,\"4294967294\":4,\"01\":3,\"4294967295\":5}",
|
|
33
|
+
"sha256": "7c26965db131091a44f39acaf6c3942dd756609639f983920dc6bdb0142cd42c"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"value": "\ud800",
|
|
37
|
+
"canonical": "\"\\ud800\"",
|
|
38
|
+
"sha256": "8c0c59dd0d275aadcd462a5fe12eb352cbdfeaf961eae4f85a4660521df7d2f5"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"value": null,
|
|
42
|
+
"canonical": "null",
|
|
43
|
+
"sha256": "74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"value": {
|
|
47
|
+
"omitted": "kept",
|
|
48
|
+
"present": null
|
|
49
|
+
},
|
|
50
|
+
"canonical": "{\"omitted\":\"kept\",\"present\":null}",
|
|
51
|
+
"sha256": "d0da19ce46bbcb4461108e6f2c2f0516e3318cd7fd92bdff2c03ed22eee8ac83"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"value": {
|
|
55
|
+
"unicode": "雪😀é",
|
|
56
|
+
"keys": {
|
|
57
|
+
"😀": 1,
|
|
58
|
+
"": 2
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"canonical": "{\"keys\":{\"😀\":1,\"\":2},\"unicode\":\"雪😀é\"}",
|
|
62
|
+
"sha256": "3423a9dd306cadadef53d0a5f3ed563011be1c5535aa070c1cf9241b036acdbe"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"value": [
|
|
66
|
+
0,
|
|
67
|
+
0,
|
|
68
|
+
1,
|
|
69
|
+
0.000001,
|
|
70
|
+
1e-7,
|
|
71
|
+
100000000000000000000,
|
|
72
|
+
1e+21,
|
|
73
|
+
9007199254740991,
|
|
74
|
+
1000000000000000100
|
|
75
|
+
],
|
|
76
|
+
"canonical": "[0,0,1,0.000001,1e-7,100000000000000000000,1e+21,9007199254740991,1000000000000000100]",
|
|
77
|
+
"sha256": "273ae0fdf747be4c44e06422fb5b08eed98820708f932cc3cfc74f749a0978af"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"value": {
|
|
81
|
+
"nested": [
|
|
82
|
+
true,
|
|
83
|
+
false,
|
|
84
|
+
{
|
|
85
|
+
"b": 2,
|
|
86
|
+
"a": 1
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"canonical": "{\"nested\":[true,false,{\"a\":1,\"b\":2}]}",
|
|
91
|
+
"sha256": "421f4604e52b696d8eb084190e28030fe39187d8d5adced1fa8fadef2dd9ded0"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|