dagnam 0.7.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.
- dagnam-0.7.0/.gitignore +236 -0
- dagnam-0.7.0/CHANGELOG.md +257 -0
- dagnam-0.7.0/CODE_OF_CONDUCT.md +126 -0
- dagnam-0.7.0/CONTRIBUTING.md +117 -0
- dagnam-0.7.0/LICENSE +201 -0
- dagnam-0.7.0/NOTICE +8 -0
- dagnam-0.7.0/PKG-INFO +557 -0
- dagnam-0.7.0/README.md +490 -0
- dagnam-0.7.0/SECURITY.md +33 -0
- dagnam-0.7.0/dagnam/__init__.py +220 -0
- dagnam-0.7.0/dagnam/_agent/__init__.py +11 -0
- dagnam-0.7.0/dagnam/_agent/claude/agents/dagnam-runner.md +16 -0
- dagnam-0.7.0/dagnam/_agent/claude/hooks/guard.json +15 -0
- dagnam-0.7.0/dagnam/_agent/claude/plugin.json +8 -0
- dagnam-0.7.0/dagnam/_agent/codex/agents/openai.yaml +4 -0
- dagnam-0.7.0/dagnam/_agent/codex/hooks.json +7 -0
- dagnam-0.7.0/dagnam/_agent/guardhook.py +74 -0
- dagnam-0.7.0/dagnam/_agent/install.py +274 -0
- dagnam-0.7.0/dagnam/_agent/runner.py +137 -0
- dagnam-0.7.0/dagnam/_agent/skill/SKILL.md +83 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/account.md +24 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/cache.md +20 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/codegen.md +32 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/datasets.md +26 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/deployments.md +31 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/hub.md +29 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/inference.md +21 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/projects.md +35 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/training.md +38 -0
- dagnam-0.7.0/dagnam/_agent/skill/reference/troubleshooting.md +42 -0
- dagnam-0.7.0/dagnam/_agent/skill/scripts/plan.py +14 -0
- dagnam-0.7.0/dagnam/_agent/skill/scripts/watch_training.py +14 -0
- dagnam-0.7.0/dagnam/_contracts/__init__.py +29 -0
- dagnam-0.7.0/dagnam/_contracts/_architecture.py +36 -0
- dagnam-0.7.0/dagnam/_contracts/_interpret.py +342 -0
- dagnam-0.7.0/dagnam/_contracts/_schema.py +39 -0
- dagnam-0.7.0/dagnam/_contracts/component-schema.json +2035 -0
- dagnam-0.7.0/dagnam/_contracts/normalize.py +142 -0
- dagnam-0.7.0/dagnam/_contracts/param-diagnostics.json +1277 -0
- dagnam-0.7.0/dagnam/_contracts/validation-corpus.json +37391 -0
- dagnam-0.7.0/dagnam/_core/__init__.py +27 -0
- dagnam-0.7.0/dagnam/_core/_logging.py +88 -0
- dagnam-0.7.0/dagnam/_core/_retry.py +263 -0
- dagnam-0.7.0/dagnam/_core/aio/__init__.py +32 -0
- dagnam-0.7.0/dagnam/_core/aio/account.py +310 -0
- dagnam-0.7.0/dagnam/_core/aio/base.py +256 -0
- dagnam-0.7.0/dagnam/_core/aio/checkpoints.py +90 -0
- dagnam-0.7.0/dagnam/_core/aio/codegen.py +142 -0
- dagnam-0.7.0/dagnam/_core/aio/datasets.py +238 -0
- dagnam-0.7.0/dagnam/_core/aio/deployments.py +316 -0
- dagnam-0.7.0/dagnam/_core/aio/hub.py +221 -0
- dagnam-0.7.0/dagnam/_core/aio/inference.py +127 -0
- dagnam-0.7.0/dagnam/_core/aio/projects.py +273 -0
- dagnam-0.7.0/dagnam/_core/aio/training.py +411 -0
- dagnam-0.7.0/dagnam/_core/auth.py +112 -0
- dagnam-0.7.0/dagnam/_core/client/__init__.py +32 -0
- dagnam-0.7.0/dagnam/_core/client/account.py +314 -0
- dagnam-0.7.0/dagnam/_core/client/base.py +492 -0
- dagnam-0.7.0/dagnam/_core/client/checkpoints.py +76 -0
- dagnam-0.7.0/dagnam/_core/client/codegen.py +167 -0
- dagnam-0.7.0/dagnam/_core/client/common.py +368 -0
- dagnam-0.7.0/dagnam/_core/client/datasets.py +425 -0
- dagnam-0.7.0/dagnam/_core/client/deployments.py +311 -0
- dagnam-0.7.0/dagnam/_core/client/hub.py +234 -0
- dagnam-0.7.0/dagnam/_core/client/inference.py +125 -0
- dagnam-0.7.0/dagnam/_core/client/projects.py +297 -0
- dagnam-0.7.0/dagnam/_core/client/training.py +348 -0
- dagnam-0.7.0/dagnam/_core/config.py +138 -0
- dagnam-0.7.0/dagnam/_core/exceptions.py +169 -0
- dagnam-0.7.0/dagnam/_core/lro.py +243 -0
- dagnam-0.7.0/dagnam/_core/metrics_uploader.py +184 -0
- dagnam-0.7.0/dagnam/_core/naming.py +85 -0
- dagnam-0.7.0/dagnam/_core/resolver.py +23 -0
- dagnam-0.7.0/dagnam/_core/sse.py +304 -0
- dagnam-0.7.0/dagnam/_types.py +166 -0
- dagnam-0.7.0/dagnam/aio.py +11 -0
- dagnam-0.7.0/dagnam/cli/__init__.py +8 -0
- dagnam-0.7.0/dagnam/cli/_parser.py +209 -0
- dagnam-0.7.0/dagnam/cli/account.py +400 -0
- dagnam-0.7.0/dagnam/cli/account_data.py +85 -0
- dagnam-0.7.0/dagnam/cli/account_keys.py +145 -0
- dagnam-0.7.0/dagnam/cli/account_profile.py +206 -0
- dagnam-0.7.0/dagnam/cli/account_security.py +167 -0
- dagnam-0.7.0/dagnam/cli/account_settings.py +186 -0
- dagnam-0.7.0/dagnam/cli/agent.py +85 -0
- dagnam-0.7.0/dagnam/cli/cache.py +119 -0
- dagnam-0.7.0/dagnam/cli/checkpoint.py +111 -0
- dagnam-0.7.0/dagnam/cli/codegen.py +149 -0
- dagnam-0.7.0/dagnam/cli/common.py +444 -0
- dagnam-0.7.0/dagnam/cli/dataset.py +438 -0
- dagnam-0.7.0/dagnam/cli/deployment.py +460 -0
- dagnam-0.7.0/dagnam/cli/errors.py +418 -0
- dagnam-0.7.0/dagnam/cli/hub.py +353 -0
- dagnam-0.7.0/dagnam/cli/inference.py +161 -0
- dagnam-0.7.0/dagnam/cli/login.py +175 -0
- dagnam-0.7.0/dagnam/cli/main.py +139 -0
- dagnam-0.7.0/dagnam/cli/presentation.py +112 -0
- dagnam-0.7.0/dagnam/cli/project.py +469 -0
- dagnam-0.7.0/dagnam/cli/register.py +99 -0
- dagnam-0.7.0/dagnam/cli/training.py +598 -0
- dagnam-0.7.0/dagnam/data/__init__.py +1 -0
- dagnam-0.7.0/dagnam/data/_polars_utils.py +53 -0
- dagnam-0.7.0/dagnam/data/cache.py +370 -0
- dagnam-0.7.0/dagnam/data/dataset/__init__.py +7 -0
- dagnam-0.7.0/dagnam/data/dataset/_typing.py +86 -0
- dagnam-0.7.0/dagnam/data/dataset/base.py +466 -0
- dagnam-0.7.0/dagnam/data/dataset/hooks.py +186 -0
- dagnam-0.7.0/dagnam/data/dataset/to_flax.py +499 -0
- dagnam-0.7.0/dagnam/data/dataset/to_polars.py +64 -0
- dagnam-0.7.0/dagnam/data/dataset/to_pytorch.py +371 -0
- dagnam-0.7.0/dagnam/data/dataset/to_tensorflow.py +471 -0
- dagnam-0.7.0/dagnam/data/load.py +276 -0
- dagnam-0.7.0/dagnam/data/loaders/__init__.py +49 -0
- dagnam-0.7.0/dagnam/data/loaders/audio/__init__.py +17 -0
- dagnam-0.7.0/dagnam/data/loaders/audio/dataset.py +192 -0
- dagnam-0.7.0/dagnam/data/loaders/audio/io.py +137 -0
- dagnam-0.7.0/dagnam/data/loaders/audio/transforms.py +323 -0
- dagnam-0.7.0/dagnam/data/loaders/csv.py +218 -0
- dagnam-0.7.0/dagnam/data/loaders/flax.py +157 -0
- dagnam-0.7.0/dagnam/data/loaders/image_folder.py +406 -0
- dagnam-0.7.0/dagnam/data/loaders/json_array.py +10 -0
- dagnam-0.7.0/dagnam/data/loaders/media.py +402 -0
- dagnam-0.7.0/dagnam/data/loaders/system/__init__.py +15 -0
- dagnam-0.7.0/dagnam/data/loaders/system/bound_dataset.py +89 -0
- dagnam-0.7.0/dagnam/data/loaders/system/column_store.py +68 -0
- dagnam-0.7.0/dagnam/data/loaders/system/common.py +7 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/__init__.py +28 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/_helpers.py +109 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/array.py +42 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/audio_folder.py +89 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/base.py +23 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/image_folder.py +47 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/image_mask_folder.py +72 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/tabular.py +30 -0
- dagnam-0.7.0/dagnam/data/loaders/system/decoders/text.py +46 -0
- dagnam-0.7.0/dagnam/data/loaders/system/dispatch.py +285 -0
- dagnam-0.7.0/dagnam/data/loaders/system/transform_executor.py +127 -0
- dagnam-0.7.0/dagnam/data/loaders/text_lm.py +40 -0
- dagnam-0.7.0/dagnam/data/loaders/tf.py +78 -0
- dagnam-0.7.0/dagnam/data/loaders/torch_utils.py +31 -0
- dagnam-0.7.0/dagnam/exceptions.py +66 -0
- dagnam-0.7.0/dagnam/py.typed +0 -0
- dagnam-0.7.0/dagnam/resources/__init__.py +32 -0
- dagnam-0.7.0/dagnam/resources/account.py +369 -0
- dagnam-0.7.0/dagnam/resources/checkpoints.py +151 -0
- dagnam-0.7.0/dagnam/resources/codegen.py +176 -0
- dagnam-0.7.0/dagnam/resources/datasets.py +177 -0
- dagnam-0.7.0/dagnam/resources/deployments.py +564 -0
- dagnam-0.7.0/dagnam/resources/hub.py +578 -0
- dagnam-0.7.0/dagnam/resources/inference.py +120 -0
- dagnam-0.7.0/dagnam/resources/projects.py +471 -0
- dagnam-0.7.0/dagnam/resources/studio.py +36 -0
- dagnam-0.7.0/dagnam/resources/training.py +434 -0
- dagnam-0.7.0/dagnam/training.py +441 -0
- dagnam-0.7.0/dagnam/training_attach.py +220 -0
- dagnam-0.7.0/pyproject.toml +435 -0
- dagnam-0.7.0/tests/_agent/test_guardhook.py +178 -0
- dagnam-0.7.0/tests/_agent/test_install.py +309 -0
- dagnam-0.7.0/tests/_agent/test_payload.py +89 -0
- dagnam-0.7.0/tests/_agent/test_runner.py +190 -0
- dagnam-0.7.0/tests/_contracts/test_architecture.py +56 -0
- dagnam-0.7.0/tests/_contracts/test_interpret.py +231 -0
- dagnam-0.7.0/tests/_contracts/test_normalize.py +211 -0
- dagnam-0.7.0/tests/_contracts/test_param_diagnostics_parity.py +35 -0
- dagnam-0.7.0/tests/_contracts/test_parity_with_backend_cases.py +45 -0
- dagnam-0.7.0/tests/_contracts/test_schema.py +14 -0
- dagnam-0.7.0/tests/_contracts/test_validation_corpus_param_tier.py +47 -0
- dagnam-0.7.0/tests/cli/conftest.py +23 -0
- dagnam-0.7.0/tests/cli/test_account.py +378 -0
- dagnam-0.7.0/tests/cli/test_account_data_cli.py +188 -0
- dagnam-0.7.0/tests/cli/test_account_keys_cli.py +201 -0
- dagnam-0.7.0/tests/cli/test_account_profile_cli.py +213 -0
- dagnam-0.7.0/tests/cli/test_account_security_cli.py +319 -0
- dagnam-0.7.0/tests/cli/test_account_settings_cli.py +170 -0
- dagnam-0.7.0/tests/cli/test_agent.py +132 -0
- dagnam-0.7.0/tests/cli/test_banner_encoding.py +197 -0
- dagnam-0.7.0/tests/cli/test_cache_cli.py +71 -0
- dagnam-0.7.0/tests/cli/test_checkpoint.py +143 -0
- dagnam-0.7.0/tests/cli/test_cli_tail.py +117 -0
- dagnam-0.7.0/tests/cli/test_codegen_cli.py +164 -0
- dagnam-0.7.0/tests/cli/test_common_helpers.py +463 -0
- dagnam-0.7.0/tests/cli/test_dataset.py +347 -0
- dagnam-0.7.0/tests/cli/test_dataset_manage_cli.py +209 -0
- dagnam-0.7.0/tests/cli/test_deployment.py +450 -0
- dagnam-0.7.0/tests/cli/test_errors.py +364 -0
- dagnam-0.7.0/tests/cli/test_exit_codes.py +20 -0
- dagnam-0.7.0/tests/cli/test_help.py +112 -0
- dagnam-0.7.0/tests/cli/test_hub_cli.py +287 -0
- dagnam-0.7.0/tests/cli/test_inference_cli.py +300 -0
- dagnam-0.7.0/tests/cli/test_lightweight_import.py +46 -0
- dagnam-0.7.0/tests/cli/test_login.py +258 -0
- dagnam-0.7.0/tests/cli/test_login_posix.py +288 -0
- dagnam-0.7.0/tests/cli/test_main.py +162 -0
- dagnam-0.7.0/tests/cli/test_parser.py +198 -0
- dagnam-0.7.0/tests/cli/test_presentation.py +74 -0
- dagnam-0.7.0/tests/cli/test_project.py +480 -0
- dagnam-0.7.0/tests/cli/test_project_thumbnail_cli.py +37 -0
- dagnam-0.7.0/tests/cli/test_register_cli.py +278 -0
- dagnam-0.7.0/tests/cli/test_stream.py +55 -0
- dagnam-0.7.0/tests/cli/test_subcommand_help.py +56 -0
- dagnam-0.7.0/tests/cli/test_training_cli.py +418 -0
- dagnam-0.7.0/tests/cli/test_training_downloads_cli.py +52 -0
- dagnam-0.7.0/tests/cli/test_training_lifecycle_cli.py +220 -0
- dagnam-0.7.0/tests/cli/test_usage.py +127 -0
- dagnam-0.7.0/tests/conftest.py +104 -0
- dagnam-0.7.0/tests/core/aio/__init__.py +0 -0
- dagnam-0.7.0/tests/core/aio/conftest.py +27 -0
- dagnam-0.7.0/tests/core/aio/test_account_data_async.py +169 -0
- dagnam-0.7.0/tests/core/aio/test_account_keys_async.py +160 -0
- dagnam-0.7.0/tests/core/aio/test_account_profile_async.py +162 -0
- dagnam-0.7.0/tests/core/aio/test_account_sessions_async.py +224 -0
- dagnam-0.7.0/tests/core/aio/test_account_settings_async.py +130 -0
- dagnam-0.7.0/tests/core/aio/test_async_account.py +117 -0
- dagnam-0.7.0/tests/core/aio/test_async_base.py +188 -0
- dagnam-0.7.0/tests/core/aio/test_async_base_request.py +195 -0
- dagnam-0.7.0/tests/core/aio/test_async_checkpoints.py +256 -0
- dagnam-0.7.0/tests/core/aio/test_async_codegen.py +168 -0
- dagnam-0.7.0/tests/core/aio/test_async_datasets.py +263 -0
- dagnam-0.7.0/tests/core/aio/test_async_deployments.py +323 -0
- dagnam-0.7.0/tests/core/aio/test_async_hub.py +174 -0
- dagnam-0.7.0/tests/core/aio/test_async_inference.py +209 -0
- dagnam-0.7.0/tests/core/aio/test_async_projects.py +157 -0
- dagnam-0.7.0/tests/core/aio/test_async_training.py +428 -0
- dagnam-0.7.0/tests/core/aio/test_dataset_manage_async.py +103 -0
- dagnam-0.7.0/tests/core/aio/test_project_thumbnail_async.py +121 -0
- dagnam-0.7.0/tests/core/aio/test_register_bootstrap_async.py +121 -0
- dagnam-0.7.0/tests/core/aio/test_training_downloads_async.py +126 -0
- dagnam-0.7.0/tests/core/aio/test_training_lifecycle_async.py +149 -0
- dagnam-0.7.0/tests/core/client/conftest.py +21 -0
- dagnam-0.7.0/tests/core/client/test_account_data.py +144 -0
- dagnam-0.7.0/tests/core/client/test_account_keys.py +139 -0
- dagnam-0.7.0/tests/core/client/test_account_profile.py +172 -0
- dagnam-0.7.0/tests/core/client/test_account_sessions.py +187 -0
- dagnam-0.7.0/tests/core/client/test_account_settings.py +132 -0
- dagnam-0.7.0/tests/core/client/test_base.py +17 -0
- dagnam-0.7.0/tests/core/client/test_base_request.py +135 -0
- dagnam-0.7.0/tests/core/client/test_common.py +717 -0
- dagnam-0.7.0/tests/core/client/test_dataset_manage.py +169 -0
- dagnam-0.7.0/tests/core/client/test_local_run_client.py +38 -0
- dagnam-0.7.0/tests/core/client/test_other_mixins.py +522 -0
- dagnam-0.7.0/tests/core/client/test_project_thumbnail.py +150 -0
- dagnam-0.7.0/tests/core/client/test_register_bootstrap.py +147 -0
- dagnam-0.7.0/tests/core/client/test_sync_account.py +104 -0
- dagnam-0.7.0/tests/core/client/test_sync_base.py +487 -0
- dagnam-0.7.0/tests/core/client/test_sync_datasets.py +378 -0
- dagnam-0.7.0/tests/core/client/test_sync_deployments.py +348 -0
- dagnam-0.7.0/tests/core/client/test_sync_hub.py +249 -0
- dagnam-0.7.0/tests/core/client/test_sync_inference.py +113 -0
- dagnam-0.7.0/tests/core/client/test_sync_projects.py +182 -0
- dagnam-0.7.0/tests/core/client/test_sync_training.py +423 -0
- dagnam-0.7.0/tests/core/client/test_training_downloads.py +104 -0
- dagnam-0.7.0/tests/core/client/test_training_lifecycle.py +128 -0
- dagnam-0.7.0/tests/core/client/test_wire.py +423 -0
- dagnam-0.7.0/tests/core/test_auth.py +177 -0
- dagnam-0.7.0/tests/core/test_config.py +273 -0
- dagnam-0.7.0/tests/core/test_download_resume.py +311 -0
- dagnam-0.7.0/tests/core/test_exceptions.py +166 -0
- dagnam-0.7.0/tests/core/test_load_internal.py +252 -0
- dagnam-0.7.0/tests/core/test_logging.py +118 -0
- dagnam-0.7.0/tests/core/test_lro.py +326 -0
- dagnam-0.7.0/tests/core/test_metrics_uploader.py +347 -0
- dagnam-0.7.0/tests/core/test_naming.py +15 -0
- dagnam-0.7.0/tests/core/test_no_direct_requests_seam.py +68 -0
- dagnam-0.7.0/tests/core/test_retry.py +335 -0
- dagnam-0.7.0/tests/core/test_retry_async.py +257 -0
- dagnam-0.7.0/tests/core/test_sse.py +617 -0
- dagnam-0.7.0/tests/core/test_sse_reconnect.py +85 -0
- dagnam-0.7.0/tests/core/test_structure_imports.py +60 -0
- dagnam-0.7.0/tests/data/dataset/_native_helpers.py +133 -0
- dagnam-0.7.0/tests/data/dataset/test_augmentation_hooks.py +448 -0
- dagnam-0.7.0/tests/data/dataset/test_base.py +310 -0
- dagnam-0.7.0/tests/data/dataset/test_binding_contract.py +122 -0
- dagnam-0.7.0/tests/data/dataset/test_column_roles.py +162 -0
- dagnam-0.7.0/tests/data/dataset/test_dataset_converters_branches.py +210 -0
- dagnam-0.7.0/tests/data/dataset/test_iter_and_arrays.py +217 -0
- dagnam-0.7.0/tests/data/dataset/test_to_flax.py +506 -0
- dagnam-0.7.0/tests/data/dataset/test_to_flax_branches.py +177 -0
- dagnam-0.7.0/tests/data/dataset/test_to_pytorch_numpy.py +453 -0
- dagnam-0.7.0/tests/data/dataset/test_to_tensorflow.py +604 -0
- dagnam-0.7.0/tests/data/dataset/test_versioning.py +162 -0
- dagnam-0.7.0/tests/data/loaders/_audio_helpers.py +156 -0
- dagnam-0.7.0/tests/data/loaders/_system_fakes.py +56 -0
- dagnam-0.7.0/tests/data/loaders/csv/test_roles.py +123 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_array.py +57 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_helpers.py +95 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_image_mask_folder.py +58 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_audio_folder_decoder.py +127 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_image_folder_decoder.py +37 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_tabular_decoder.py +19 -0
- dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_text_decoder.py +69 -0
- dagnam-0.7.0/tests/data/loaders/system/test_bound_dataset.py +135 -0
- dagnam-0.7.0/tests/data/loaders/system/test_column_store.py +38 -0
- dagnam-0.7.0/tests/data/loaders/system/test_dispatch.py +51 -0
- dagnam-0.7.0/tests/data/loaders/system/test_load_system_dataset.py +160 -0
- dagnam-0.7.0/tests/data/loaders/system/test_system_loader_edges.py +522 -0
- dagnam-0.7.0/tests/data/loaders/system/test_transform_executor.py +151 -0
- dagnam-0.7.0/tests/data/loaders/test_audio_dataset.py +165 -0
- dagnam-0.7.0/tests/data/loaders/test_audio_dispatch.py +121 -0
- dagnam-0.7.0/tests/data/loaders/test_audio_io.py +291 -0
- dagnam-0.7.0/tests/data/loaders/test_audio_transforms.py +495 -0
- dagnam-0.7.0/tests/data/loaders/test_csv.py +500 -0
- dagnam-0.7.0/tests/data/loaders/test_flax.py +56 -0
- dagnam-0.7.0/tests/data/loaders/test_flax_parallel_decode.py +99 -0
- dagnam-0.7.0/tests/data/loaders/test_flax_tf_loaders.py +179 -0
- dagnam-0.7.0/tests/data/loaders/test_image_folder.py +405 -0
- dagnam-0.7.0/tests/data/loaders/test_image_folder_loaders.py +475 -0
- dagnam-0.7.0/tests/data/loaders/test_media.py +289 -0
- dagnam-0.7.0/tests/data/loaders/test_system_integration.py +292 -0
- dagnam-0.7.0/tests/data/loaders/test_text_lm.py +35 -0
- dagnam-0.7.0/tests/data/loaders/test_tf_flax_parity.py +173 -0
- dagnam-0.7.0/tests/data/loaders/test_torch_utils.py +76 -0
- dagnam-0.7.0/tests/data/test_cache.py +530 -0
- dagnam-0.7.0/tests/data/test_cache_locks.py +95 -0
- dagnam-0.7.0/tests/data/test_cache_verify.py +93 -0
- dagnam-0.7.0/tests/data/test_load.py +70 -0
- dagnam-0.7.0/tests/data/test_load_dataset.py +460 -0
- dagnam-0.7.0/tests/data/test_polars_utils.py +34 -0
- dagnam-0.7.0/tests/resources/test_account_data_resource.py +37 -0
- dagnam-0.7.0/tests/resources/test_account_keys_resource.py +50 -0
- dagnam-0.7.0/tests/resources/test_account_profile_resource.py +44 -0
- dagnam-0.7.0/tests/resources/test_account_resource.py +29 -0
- dagnam-0.7.0/tests/resources/test_account_sessions_resource.py +35 -0
- dagnam-0.7.0/tests/resources/test_account_settings_resource.py +49 -0
- dagnam-0.7.0/tests/resources/test_checkpoints.py +212 -0
- dagnam-0.7.0/tests/resources/test_codegen.py +170 -0
- dagnam-0.7.0/tests/resources/test_dataset_manage_resource.py +49 -0
- dagnam-0.7.0/tests/resources/test_datasets.py +144 -0
- dagnam-0.7.0/tests/resources/test_deployments.py +366 -0
- dagnam-0.7.0/tests/resources/test_gap_fill.py +523 -0
- dagnam-0.7.0/tests/resources/test_hub.py +553 -0
- dagnam-0.7.0/tests/resources/test_inference.py +158 -0
- dagnam-0.7.0/tests/resources/test_project_thumbnail_resource.py +34 -0
- dagnam-0.7.0/tests/resources/test_projects.py +311 -0
- dagnam-0.7.0/tests/resources/test_register_resource.py +96 -0
- dagnam-0.7.0/tests/resources/test_stream_training.py +82 -0
- dagnam-0.7.0/tests/resources/test_studio.py +74 -0
- dagnam-0.7.0/tests/resources/test_training.py +277 -0
- dagnam-0.7.0/tests/resources/test_training_lifecycle_resource.py +141 -0
- dagnam-0.7.0/tests/test_auto_stream_e2e.py +51 -0
- dagnam-0.7.0/tests/test_lazy_async_import.py +76 -0
- dagnam-0.7.0/tests/test_public_api.py +177 -0
- dagnam-0.7.0/tests/test_python_support_metadata.py +79 -0
- dagnam-0.7.0/tests/test_training_attach.py +697 -0
- dagnam-0.7.0/tests/test_training_init.py +625 -0
- dagnam-0.7.0/tests/test_training_reporter.py +278 -0
- dagnam-0.7.0/tests/test_types.py +68 -0
- dagnam-0.7.0/tests/typing_helpers.py +73 -0
dagnam-0.7.0/.gitignore
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
coverage/
|
|
42
|
+
.tox/
|
|
43
|
+
.nox/
|
|
44
|
+
.coverage
|
|
45
|
+
.coverage.*
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
coverage.json
|
|
50
|
+
coverage*.json
|
|
51
|
+
coverage-run*.log
|
|
52
|
+
*.cover
|
|
53
|
+
*.py.cover
|
|
54
|
+
.hypothesis/
|
|
55
|
+
.pytest_cache/
|
|
56
|
+
cover/
|
|
57
|
+
|
|
58
|
+
# Translations
|
|
59
|
+
*.mo
|
|
60
|
+
*.pot
|
|
61
|
+
|
|
62
|
+
# Django stuff:
|
|
63
|
+
*.log
|
|
64
|
+
local_settings.py
|
|
65
|
+
db.sqlite3
|
|
66
|
+
db.sqlite3-journal
|
|
67
|
+
|
|
68
|
+
# Flask stuff:
|
|
69
|
+
instance/
|
|
70
|
+
.webassets-cache
|
|
71
|
+
|
|
72
|
+
# Scrapy stuff:
|
|
73
|
+
.scrapy
|
|
74
|
+
|
|
75
|
+
# Sphinx documentation
|
|
76
|
+
docs/_build/
|
|
77
|
+
|
|
78
|
+
# PyBuilder
|
|
79
|
+
.pybuilder/
|
|
80
|
+
target/
|
|
81
|
+
|
|
82
|
+
# Jupyter Notebook
|
|
83
|
+
.ipynb_checkpoints
|
|
84
|
+
|
|
85
|
+
# IPython
|
|
86
|
+
profile_default/
|
|
87
|
+
ipython_config.py
|
|
88
|
+
|
|
89
|
+
# pyenv
|
|
90
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
91
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
92
|
+
# .python-version
|
|
93
|
+
|
|
94
|
+
# pipenv
|
|
95
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
96
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
97
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
98
|
+
# install all needed dependencies.
|
|
99
|
+
#Pipfile.lock
|
|
100
|
+
|
|
101
|
+
# UV
|
|
102
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
103
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
104
|
+
# commonly ignored for libraries.
|
|
105
|
+
#uv.lock
|
|
106
|
+
|
|
107
|
+
# poetry
|
|
108
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
109
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
110
|
+
# commonly ignored for libraries.
|
|
111
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
112
|
+
#poetry.lock
|
|
113
|
+
#poetry.toml
|
|
114
|
+
|
|
115
|
+
# pdm
|
|
116
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
117
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
118
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
119
|
+
#pdm.lock
|
|
120
|
+
#pdm.toml
|
|
121
|
+
.pdm-python
|
|
122
|
+
.pdm-build/
|
|
123
|
+
|
|
124
|
+
# pixi
|
|
125
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
126
|
+
#pixi.lock
|
|
127
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
128
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
129
|
+
.pixi
|
|
130
|
+
|
|
131
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
132
|
+
__pypackages__/
|
|
133
|
+
|
|
134
|
+
# Celery stuff
|
|
135
|
+
celerybeat-schedule
|
|
136
|
+
celerybeat.pid
|
|
137
|
+
|
|
138
|
+
# SageMath parsed files
|
|
139
|
+
*.sage.py
|
|
140
|
+
|
|
141
|
+
# Environments
|
|
142
|
+
.env
|
|
143
|
+
.envrc
|
|
144
|
+
.venv
|
|
145
|
+
env/
|
|
146
|
+
venv/
|
|
147
|
+
ENV/
|
|
148
|
+
env.bak/
|
|
149
|
+
venv.bak/
|
|
150
|
+
|
|
151
|
+
# Spyder project settings
|
|
152
|
+
.spyderproject
|
|
153
|
+
.spyproject
|
|
154
|
+
|
|
155
|
+
# Rope project settings
|
|
156
|
+
.ropeproject
|
|
157
|
+
|
|
158
|
+
# mkdocs documentation
|
|
159
|
+
/site
|
|
160
|
+
|
|
161
|
+
# mypy
|
|
162
|
+
.mypy_cache/
|
|
163
|
+
.dmypy.json
|
|
164
|
+
dmypy.json
|
|
165
|
+
|
|
166
|
+
# Pyre type checker
|
|
167
|
+
.pyre/
|
|
168
|
+
|
|
169
|
+
# pytype static type analyzer
|
|
170
|
+
.pytype/
|
|
171
|
+
|
|
172
|
+
# Cython debug symbols
|
|
173
|
+
cython_debug/
|
|
174
|
+
|
|
175
|
+
# PyCharm
|
|
176
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
177
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
178
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
179
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
180
|
+
#.idea/
|
|
181
|
+
|
|
182
|
+
# Abstra
|
|
183
|
+
# Abstra is an AI-powered process automation framework.
|
|
184
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
185
|
+
# Learn more at https://abstra.io/docs
|
|
186
|
+
.abstra/
|
|
187
|
+
|
|
188
|
+
# Visual Studio Code
|
|
189
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
190
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
191
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
192
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
193
|
+
# .vscode/
|
|
194
|
+
|
|
195
|
+
# Ruff stuff:
|
|
196
|
+
.ruff_cache/
|
|
197
|
+
|
|
198
|
+
# Import Linter
|
|
199
|
+
.import_linter_cache/
|
|
200
|
+
|
|
201
|
+
# PyPI configuration file
|
|
202
|
+
.pypirc
|
|
203
|
+
|
|
204
|
+
# Cursor
|
|
205
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
206
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
207
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
208
|
+
.cursorignore
|
|
209
|
+
.cursorindexingignore
|
|
210
|
+
|
|
211
|
+
# Marimo
|
|
212
|
+
marimo/_static/
|
|
213
|
+
marimo/_lsp/
|
|
214
|
+
__marimo__/
|
|
215
|
+
|
|
216
|
+
# Skills
|
|
217
|
+
.understand-anything/
|
|
218
|
+
graphify-out/
|
|
219
|
+
.graphify_uncached.txt
|
|
220
|
+
|
|
221
|
+
# AI Agents
|
|
222
|
+
.kiro/
|
|
223
|
+
.claude/
|
|
224
|
+
.codex-logs/
|
|
225
|
+
.agents/
|
|
226
|
+
|
|
227
|
+
# IDE
|
|
228
|
+
.vscode/
|
|
229
|
+
|
|
230
|
+
# Local tooling logs and editor/CI temp files (never commit)
|
|
231
|
+
*.log.txt
|
|
232
|
+
.lint-log*
|
|
233
|
+
.test*-log*
|
|
234
|
+
*.yml.tmp.*
|
|
235
|
+
*.yaml.tmp.*
|
|
236
|
+
.tmp-*
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `dagnam` Python SDK are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project follows [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.7.0] - 2026-07-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Automatic retries for transient failures.** Retry-safe API requests
|
|
15
|
+
(idempotent methods, plus any request carrying an idempotency key) now retry
|
|
16
|
+
on connection errors and `429`/`5xx` responses using equal-jitter exponential
|
|
17
|
+
backoff, bounded by a per-client **retry budget** (token bucket) so a flapping
|
|
18
|
+
backend cannot trigger an unbounded retry storm. A server `Retry-After` header
|
|
19
|
+
is honored but capped, so a hostile value cannot wedge the client in a long
|
|
20
|
+
sleep.
|
|
21
|
+
- **Idempotency keys** for retry-safe writes: a retriable `POST` mints one
|
|
22
|
+
`uuid4` `Idempotency-Key` and reuses it across retries, so a retried create is
|
|
23
|
+
not applied twice server-side.
|
|
24
|
+
- **Cross-process cache locking.** Dataset/checkpoint cache writes and LRU
|
|
25
|
+
eviction are serialized with a file lock (new `filelock>=3.13` base
|
|
26
|
+
dependency), so multiple processes sharing a cache root no longer race or
|
|
27
|
+
corrupt entries.
|
|
28
|
+
- Async parity: `dagnam.aio.AsyncDagnamClient` now applies the same
|
|
29
|
+
retry/backoff and transport-error handling as the sync client, fully
|
|
30
|
+
non-blocking on the event loop.
|
|
31
|
+
- `dagnam.ResponseError` — a public `APIError` subclass for malformed,
|
|
32
|
+
undecodable, or wrong-shape server response bodies.
|
|
33
|
+
- Library logging contract: a package-level `NullHandler`, namespaced child
|
|
34
|
+
loggers (`dagnam.http`/`dagnam.cache`/`dagnam.lro`/`dagnam.sse`) with a
|
|
35
|
+
credential-redacting filter, and `dagnam.enable_debug_logging()` convenience.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- `response_json_value`/`response_json_object`/`response_json_array` and
|
|
40
|
+
`BaseDagnamClient._expect_object` now raise `ResponseError` (an `APIError`
|
|
41
|
+
subclass) instead of a raw `TypeError`/`ValueError`/`json.JSONDecodeError`
|
|
42
|
+
when a server response body is malformed, undecodable, or the wrong JSON
|
|
43
|
+
shape. This affects every sync client method that decodes a response body
|
|
44
|
+
(datasets, training, account, hub, projects, deployments, codegen). Code
|
|
45
|
+
that narrowly caught `except TypeError`/`except ValueError` around these
|
|
46
|
+
calls should catch `except dagnam.ResponseError` (or the broader
|
|
47
|
+
`dagnam.APIError`/`dagnam.DagnamError`) instead. Client mixins that
|
|
48
|
+
optionally fall back to a plain-text response body preserve that behavior.
|
|
49
|
+
|
|
50
|
+
### Security
|
|
51
|
+
|
|
52
|
+
- **Path traversal / arbitrary-file-write (critical).** A server-supplied
|
|
53
|
+
dataset filename (dataset metadata / `Content-Disposition`) is now reduced to
|
|
54
|
+
a safe bare basename before it is joined under the download directory.
|
|
55
|
+
Previously a malicious or compromised server could return an absolute path or
|
|
56
|
+
a `..` sequence and make a dataset download write outside the cache — a
|
|
57
|
+
remote-code-execution vector (for example, overwriting a shell rc file).
|
|
58
|
+
- **Presigned-URL credential redaction.** The log/error redaction filter now
|
|
59
|
+
scrubs presigned-URL credential parameters (`X-Amz-Signature`,
|
|
60
|
+
`X-Amz-Credential`, `Signature`, `sig`, `AWSAccessKeyId`, …) in addition to
|
|
61
|
+
`token`/`api_key`/`signature`, and transport-error text is scrubbed before it
|
|
62
|
+
reaches a log record or exception — so a presigned dataset/checkpoint URL can
|
|
63
|
+
no longer leak its signature into logs.
|
|
64
|
+
- **Cache trust boundary.** The SDK warns once when the cache root is
|
|
65
|
+
group/world-writable (a same-size cache-poisoning risk on a shared host) and
|
|
66
|
+
documents `verify=True` to force a full checksum re-verification on load for
|
|
67
|
+
shared caches.
|
|
68
|
+
- The `LongRunningOperation` poll interval is floored at 0.1 s, so a hostile
|
|
69
|
+
server flooding `429`/`503` cannot drive a `sleep(0)` busy-loop.
|
|
70
|
+
|
|
71
|
+
## [0.6.0] - 2026-07-02
|
|
72
|
+
|
|
73
|
+
### Added
|
|
74
|
+
|
|
75
|
+
- Full public **exception hierarchy** re-exported from the top-level package and
|
|
76
|
+
a new `dagnam.exceptions` module, so callers can write `except dagnam.APIError`
|
|
77
|
+
(or `except dagnam.DagnamError`) without reaching into the private
|
|
78
|
+
`dagnam._core.exceptions` path.
|
|
79
|
+
- `numpy` and `Pillow` are now declared **base dependencies** (they are imported
|
|
80
|
+
eagerly by the dataset layer / image loaders), so a plain `pip install dagnam`
|
|
81
|
+
can load datasets instead of failing with a bare `ModuleNotFoundError`.
|
|
82
|
+
- `torchvision` is now part of the `pytorch` and `all` extras — the PyTorch
|
|
83
|
+
image-folder loaders require it, and the README already promised it.
|
|
84
|
+
- Cross-platform **Agent Skill** for AI coding agents (Claude Code and Codex),
|
|
85
|
+
shipped as package data and activated with `dagnam agent install`
|
|
86
|
+
(auto-detect & prompt; `--claude` / `--codex` / `--all` / `--yes` / `--symlink`
|
|
87
|
+
for explicit and CI installs; `dagnam agent uninstall` to remove). It installs a
|
|
88
|
+
single write-once skill (`SKILL.md` + on-demand domain `reference/*.md` + helper
|
|
89
|
+
`scripts/`) into each harness's auto-discovered skills directory, plus per-harness
|
|
90
|
+
adapters: a Claude plugin with the `dagnam-runner` subagent and a `PreToolUse`
|
|
91
|
+
guard hook, and a Codex `openai.yaml` + idempotent guard-hook merge into
|
|
92
|
+
`~/.codex/hooks.json`. Skill/adapter versions are stamped to the installed SDK.
|
|
93
|
+
- **Dry-run / preview-by-default guardrail** for costly, irreversible, or public
|
|
94
|
+
actions (training-job and deployment creation, deletes, hub publish): a behavioral
|
|
95
|
+
gate in the skill plus a fail-open cross-platform `PreToolUse` deny hook
|
|
96
|
+
(`python -m dagnam._agent.guardhook`).
|
|
97
|
+
- Claude plugin marketplace listing (`.claude-plugin/marketplace.json`) as an
|
|
98
|
+
alternate `/plugin install` door.
|
|
99
|
+
- `dagnam codegen download` now accepts a **directory** as the destination and
|
|
100
|
+
auto-extracts the generated files into it (the SDK `download(dest=<dir>)` returns
|
|
101
|
+
the directory `Path`); previously passing a directory raised a `PermissionError`.
|
|
102
|
+
- Uniform CLI output convention: `codegen validate`/`preview`/`generate` and
|
|
103
|
+
`projects architecture` now accept `--json` (JSON to stdout) and `--output PATH`
|
|
104
|
+
(JSON to file), with human-readable summaries by default — matching the other
|
|
105
|
+
command groups.
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
|
|
109
|
+
- **BREAKING (SDK/SSE):** `open_training_stream`, `open_deployment_stream`, and
|
|
110
|
+
async `stream_training_events` now mint short-lived, resource-scoped
|
|
111
|
+
stream-access tokens per (re)connect and send streams `?token=...`; the SDK no
|
|
112
|
+
longer sends long-lived `?api_key=` on SSE URLs. Direct consumers of the SSE
|
|
113
|
+
endpoints must switch to `POST .../stream-access-token` before opening a
|
|
114
|
+
stream, and the backend + SDK must deploy together.
|
|
115
|
+
- **BREAKING (CLI):** `dagnam codegen download --output PATH` is renamed to
|
|
116
|
+
`--dest PATH` (no alias). `--output` now uniformly means "write the JSON result
|
|
117
|
+
to a file"; `--dest` is the downloaded-artifact destination (a file path streams
|
|
118
|
+
the ZIP; a directory auto-extracts). Migrate `codegen download ... --output X`
|
|
119
|
+
to `... --dest X`.
|
|
120
|
+
|
|
121
|
+
- Internal: the quality gates are now clean at zero — `ruff` reports no errors
|
|
122
|
+
and `pyright` (strict, minus the unavoidable untyped-ML-library completeness
|
|
123
|
+
diagnostics) reports no errors. Remaining suppressions are centralized and
|
|
124
|
+
documented in `pyproject.toml`. Async checkpoint/codegen downloads now write
|
|
125
|
+
to disk via `asyncio.to_thread` so they no longer block the event loop, and
|
|
126
|
+
`dagnam.data.loaders` submodules are imported lazily via `__getattr__`
|
|
127
|
+
(PEP 562). No public API or runtime behavior changed.
|
|
128
|
+
- Widened `requires-python` to `>=3.12` (no upper cap) and declared Python 3.13
|
|
129
|
+
support; corrected dependency floors so extras are actually installable
|
|
130
|
+
(`tensorflow>=2.16`, the first Python-3.12-capable TF; `torch>=2.4` for the
|
|
131
|
+
`pytorch` extra).
|
|
132
|
+
- Label encoding is unified across `to_arrays()` and every framework loader via
|
|
133
|
+
one canonical string-identity mapping, so an integer label column no longer
|
|
134
|
+
crashes `to_pytorch_loader()` / `to_tensorflow_dataset()` / `to_flax_dataset()`
|
|
135
|
+
with a bare `KeyError`.
|
|
136
|
+
|
|
137
|
+
### Fixed
|
|
138
|
+
|
|
139
|
+
- The PyTorch native-numpy validation split no longer leaks the **entire** train
|
|
140
|
+
set into "val" when the validation ratio rounds down to zero.
|
|
141
|
+
- Cache size/info scans skip a file removed mid-scan (concurrent eviction)
|
|
142
|
+
instead of aborting with `FileNotFoundError`.
|
|
143
|
+
- A corrupt (non-integer) `max_cache_size` config value no longer crashes a
|
|
144
|
+
freshly completed download; it falls back to the default eviction budget.
|
|
145
|
+
- `to_arrays()` builds an object array for ragged (variable-length) features
|
|
146
|
+
instead of raising `ValueError` under numpy ≥ 1.24.
|
|
147
|
+
|
|
148
|
+
### Security
|
|
149
|
+
|
|
150
|
+
- System-dataset `.npz` decoding now uses `allow_pickle=False` and refuses
|
|
151
|
+
pickled object arrays — closing an arbitrary-code-execution vector where a
|
|
152
|
+
crafted dataset could run code inside `numpy.load`.
|
|
153
|
+
- Generated-code ZIP extraction is hardened against **zip-slip**: archive
|
|
154
|
+
members with path-traversal, absolute, or symlink paths are rejected instead
|
|
155
|
+
of being written outside the destination directory.
|
|
156
|
+
- Checkpoint downloads that arrive without a server checksum (e.g. an S3
|
|
157
|
+
presigned redirect) are now flagged with a loud warning instead of being
|
|
158
|
+
silently accepted unverified.
|
|
159
|
+
|
|
160
|
+
## [0.5.0] - 2026-06-03
|
|
161
|
+
|
|
162
|
+
### Added
|
|
163
|
+
|
|
164
|
+
- Release-process documentation for maintainers.
|
|
165
|
+
- CLI version and account inspection commands: `dagnam --version`, `-v`,
|
|
166
|
+
`version`, `whoami`, `logout`, and read-only `config list` / `config get`.
|
|
167
|
+
- Expanded CLI help text with command descriptions, examples, and argument
|
|
168
|
+
descriptions.
|
|
169
|
+
- Training-job lifecycle SDK + CLI: `dagnam training create/list/get/cancel/
|
|
170
|
+
delete/logs/metrics/metrics-summary`, including after-the-fact retrieval of
|
|
171
|
+
historical logs and metrics.
|
|
172
|
+
- `dagnam usage` command and `dagnam.account.*` helpers for plan, entitlement,
|
|
173
|
+
storage-quota, and per-API-key usage inspection.
|
|
174
|
+
- Width-aware table rendering, pagination footers, and consistent
|
|
175
|
+
`--json` / `--output` flags across table-printing commands.
|
|
176
|
+
- `--no-progress` flag for `dagnam codegen download` (progress is also hidden
|
|
177
|
+
automatically when stderr is not a TTY), matching `dagnam dataset download`.
|
|
178
|
+
|
|
179
|
+
### Changed
|
|
180
|
+
|
|
181
|
+
- Set the supported Python runtime to Python 3.12 so `dagnam[all]` includes
|
|
182
|
+
every optional integration.
|
|
183
|
+
- CLI/SDK error messages now unwrap FastAPI `{"detail": ...}` bodies (including
|
|
184
|
+
422 validation arrays) into concise human-readable text instead of raw JSON.
|
|
185
|
+
- **Breaking (SDK):** `dagnam.download_checkpoint(job_id)` with no
|
|
186
|
+
`checkpoint_id` now selects the **latest** checkpoint by epoch/step (was
|
|
187
|
+
best-then-latest). Pass `prefer_best=True` to restore the previous behavior.
|
|
188
|
+
The `dagnam checkpoint download <job> best` CLI keyword maps to
|
|
189
|
+
`prefer_best=True`.
|
|
190
|
+
|
|
191
|
+
### Changed
|
|
192
|
+
|
|
193
|
+
- Internal: the `load_dataset` implementation module moved from
|
|
194
|
+
`dagnam._core.load` to `dagnam.data.load` so it sits in the `data` layer it
|
|
195
|
+
composes (cache, dataset adapters, system loaders), enforcing the
|
|
196
|
+
`cli -> resources -> data -> _core` import contract. The public entry point
|
|
197
|
+
`dagnam.load_dataset` is unchanged; only the internal module path moved.
|
|
198
|
+
|
|
199
|
+
### Removed
|
|
200
|
+
|
|
201
|
+
- Internal compatibility-shim modules that only forwarded old import paths:
|
|
202
|
+
the `dagnam.services` package, `dagnam._core._common` / `_resolver` / `_sse`,
|
|
203
|
+
the `dagnam.data.loaders.*_loader` forwarders (`audio_loader`, `csv_loader`,
|
|
204
|
+
`flax_loader`, `image_folder_loader`, `json_loader`, `system_loader`,
|
|
205
|
+
`tf_loader`) and `data.loaders.media_utils`, and the redundant
|
|
206
|
+
`dagnam/resources/datasets_upload.py` module. These were internal forwarders
|
|
207
|
+
with no external consumers; the canonical modules (`dagnam.resources.*`,
|
|
208
|
+
`dagnam._core.{client.common,resolver,sse}`, `dagnam.data.loaders.{audio,csv,
|
|
209
|
+
flax,image_folder,json_array,system,tf,media}`) are unchanged, and the
|
|
210
|
+
documented public API (`dagnam.*` exports, the `dagnam.resources.datasets_upload`
|
|
211
|
+
alias) keeps resolving.
|
|
212
|
+
|
|
213
|
+
## [0.1.0] - 2026-05-10
|
|
214
|
+
|
|
215
|
+
First public PyPI release of the official Dagnam.AI Python SDK.
|
|
216
|
+
|
|
217
|
+
### Added
|
|
218
|
+
|
|
219
|
+
- Dataset loading with API-key authentication, metadata lookup, local caching,
|
|
220
|
+
SHA-256 verification, LRU eviction, resumable downloads, presigned download
|
|
221
|
+
URLs, and dataset version selection.
|
|
222
|
+
- `DagnamDataset` adapters for polars, PyTorch, TensorFlow, and Flax/JAX.
|
|
223
|
+
- Tabular CSV, TSV, JSON, and JSONL loaders with deterministic train/validation
|
|
224
|
+
and test splits.
|
|
225
|
+
- Image-folder and audio-folder dataset loaders with archive extraction,
|
|
226
|
+
deterministic fallback splits, and framework transform hooks.
|
|
227
|
+
- System dataset resolution by friendly name.
|
|
228
|
+
- Dataset upload helpers for local files and server-side URL ingestion.
|
|
229
|
+
- Inference helpers for single and batch prediction plus deployment health.
|
|
230
|
+
- Checkpoint download with checksum verification and a dedicated checkpoint
|
|
231
|
+
cache.
|
|
232
|
+
- Synchronous SSE training stream iterator with reconnect support.
|
|
233
|
+
- Deployment, Model Hub, project, and code generation resource modules.
|
|
234
|
+
- `LongRunningOperation` for polling asynchronous platform operations.
|
|
235
|
+
- `dagnam.aio.AsyncDagnamClient` for low-level async API access.
|
|
236
|
+
- CLI commands for login, datasets, cache, inference, checkpoints, streams,
|
|
237
|
+
deployments, hub, projects, and code generation.
|
|
238
|
+
- Typed package marker via `dagnam/py.typed`.
|
|
239
|
+
|
|
240
|
+
### Security
|
|
241
|
+
|
|
242
|
+
- `dagnam login` writes `~/.dagnam/config.json` with owner-only permissions on
|
|
243
|
+
POSIX systems and creates `~/.dagnam` with owner-only directory permissions.
|
|
244
|
+
- Archive extraction rejects unsafe paths, symlinks, special files, and oversized
|
|
245
|
+
archives before unpacking media datasets.
|
|
246
|
+
- Downloaded dataset and checkpoint filenames from `Content-Disposition` are
|
|
247
|
+
sanitized before writing to disk.
|
|
248
|
+
|
|
249
|
+
### Changed
|
|
250
|
+
|
|
251
|
+
- Licensed the SDK under Apache License 2.0 with a root `NOTICE` file included
|
|
252
|
+
in source and wheel distributions.
|
|
253
|
+
|
|
254
|
+
### Compatibility
|
|
255
|
+
|
|
256
|
+
- Python `>=3.12,<3.13`.
|
|
257
|
+
- Dagnam backend `>=0.5.0, <0.7.0`.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
8
|
+
identity and expression, level of experience, education, socio-economic status,
|
|
9
|
+
nationality, personal appearance, race, caste, color, religion, or sexual
|
|
10
|
+
identity and orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behavior that contributes to a positive environment for our
|
|
18
|
+
community include:
|
|
19
|
+
|
|
20
|
+
- Demonstrating empathy and kindness toward other people
|
|
21
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
22
|
+
- Giving and gracefully accepting constructive feedback
|
|
23
|
+
- Accepting responsibility and apologizing to those affected by our mistakes,
|
|
24
|
+
and learning from the experience
|
|
25
|
+
- Focusing on what is best not just for us as individuals, but for the overall
|
|
26
|
+
community
|
|
27
|
+
|
|
28
|
+
Examples of unacceptable behavior include:
|
|
29
|
+
|
|
30
|
+
- The use of sexualized language or imagery, and sexual attention or advances of
|
|
31
|
+
any kind
|
|
32
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
33
|
+
- Public or private harassment
|
|
34
|
+
- Publishing others' private information, such as a physical or email address,
|
|
35
|
+
without their explicit permission
|
|
36
|
+
- Other conduct which could reasonably be considered inappropriate in a
|
|
37
|
+
professional setting
|
|
38
|
+
|
|
39
|
+
## Enforcement Responsibilities
|
|
40
|
+
|
|
41
|
+
Community leaders are responsible for clarifying and enforcing our standards of
|
|
42
|
+
acceptable behavior and will take appropriate and fair corrective action in
|
|
43
|
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
44
|
+
or harmful.
|
|
45
|
+
|
|
46
|
+
Community leaders have the right and responsibility to remove, edit, or reject
|
|
47
|
+
comments, commits, code, wiki edits, issues, and other contributions that are
|
|
48
|
+
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
|
49
|
+
decisions when appropriate.
|
|
50
|
+
|
|
51
|
+
## Scope
|
|
52
|
+
|
|
53
|
+
This Code of Conduct applies within all community spaces, and also applies when
|
|
54
|
+
an individual is officially representing the community in public spaces.
|
|
55
|
+
|
|
56
|
+
## Enforcement
|
|
57
|
+
|
|
58
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
59
|
+
reported to the community leaders responsible for enforcement at
|
|
60
|
+
`dagnam@dagnam.ai`. All complaints will be reviewed and investigated promptly
|
|
61
|
+
and fairly.
|
|
62
|
+
|
|
63
|
+
All community leaders are obligated to respect the privacy and security of the
|
|
64
|
+
reporter of any incident.
|
|
65
|
+
|
|
66
|
+
## Enforcement Guidelines
|
|
67
|
+
|
|
68
|
+
Community leaders will follow these Community Impact Guidelines in determining
|
|
69
|
+
the consequences for any action they deem in violation of this Code of Conduct:
|
|
70
|
+
|
|
71
|
+
### 1. Correction
|
|
72
|
+
|
|
73
|
+
**Community Impact:** Use of inappropriate language or other behavior deemed
|
|
74
|
+
unprofessional or unwelcome in the community.
|
|
75
|
+
|
|
76
|
+
**Consequence:** A private, written warning from community leaders, providing
|
|
77
|
+
clarity around the nature of the violation and an explanation of why the
|
|
78
|
+
behavior was inappropriate. A public apology may be requested.
|
|
79
|
+
|
|
80
|
+
### 2. Warning
|
|
81
|
+
|
|
82
|
+
**Community Impact:** A violation through a single incident or series of
|
|
83
|
+
actions.
|
|
84
|
+
|
|
85
|
+
**Consequence:** A warning with consequences for continued behavior. No
|
|
86
|
+
interaction with the people involved, including unsolicited interaction with
|
|
87
|
+
those enforcing the Code of Conduct, for a specified period of time. Violating
|
|
88
|
+
these terms may lead to a temporary or permanent ban.
|
|
89
|
+
|
|
90
|
+
### 3. Temporary Ban
|
|
91
|
+
|
|
92
|
+
**Community Impact:** A serious violation of community standards, including
|
|
93
|
+
sustained inappropriate behavior.
|
|
94
|
+
|
|
95
|
+
**Consequence:** A temporary ban from any sort of interaction or public
|
|
96
|
+
communication with the community for a specified period of time. Violating these
|
|
97
|
+
terms may lead to a permanent ban.
|
|
98
|
+
|
|
99
|
+
### 4. Permanent Ban
|
|
100
|
+
|
|
101
|
+
**Community Impact:** Demonstrating a pattern of violation of community
|
|
102
|
+
standards, including sustained inappropriate behavior, harassment of an
|
|
103
|
+
individual, or aggression toward or disparagement of classes of individuals.
|
|
104
|
+
|
|
105
|
+
**Consequence:** A permanent ban from any sort of public interaction within the
|
|
106
|
+
community.
|
|
107
|
+
|
|
108
|
+
## Attribution
|
|
109
|
+
|
|
110
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
111
|
+
version 2.1, available at
|
|
112
|
+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
|
113
|
+
|
|
114
|
+
Community Impact Guidelines were inspired by
|
|
115
|
+
[Mozilla's code of conduct enforcement ladder][mozilla].
|
|
116
|
+
|
|
117
|
+
[homepage]: https://www.contributor-covenant.org
|
|
118
|
+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
|
119
|
+
[mozilla]: https://github.com/mozilla/diversity
|
|
120
|
+
|
|
121
|
+
For answers to common questions about this code of conduct, see the FAQ at
|
|
122
|
+
[https://www.contributor-covenant.org/faq][faq]. Translations are available at
|
|
123
|
+
[https://www.contributor-covenant.org/translations][translations].
|
|
124
|
+
|
|
125
|
+
[faq]: https://www.contributor-covenant.org/faq
|
|
126
|
+
[translations]: https://www.contributor-covenant.org/translations
|