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.
Files changed (347) hide show
  1. dagnam-0.7.0/.gitignore +236 -0
  2. dagnam-0.7.0/CHANGELOG.md +257 -0
  3. dagnam-0.7.0/CODE_OF_CONDUCT.md +126 -0
  4. dagnam-0.7.0/CONTRIBUTING.md +117 -0
  5. dagnam-0.7.0/LICENSE +201 -0
  6. dagnam-0.7.0/NOTICE +8 -0
  7. dagnam-0.7.0/PKG-INFO +557 -0
  8. dagnam-0.7.0/README.md +490 -0
  9. dagnam-0.7.0/SECURITY.md +33 -0
  10. dagnam-0.7.0/dagnam/__init__.py +220 -0
  11. dagnam-0.7.0/dagnam/_agent/__init__.py +11 -0
  12. dagnam-0.7.0/dagnam/_agent/claude/agents/dagnam-runner.md +16 -0
  13. dagnam-0.7.0/dagnam/_agent/claude/hooks/guard.json +15 -0
  14. dagnam-0.7.0/dagnam/_agent/claude/plugin.json +8 -0
  15. dagnam-0.7.0/dagnam/_agent/codex/agents/openai.yaml +4 -0
  16. dagnam-0.7.0/dagnam/_agent/codex/hooks.json +7 -0
  17. dagnam-0.7.0/dagnam/_agent/guardhook.py +74 -0
  18. dagnam-0.7.0/dagnam/_agent/install.py +274 -0
  19. dagnam-0.7.0/dagnam/_agent/runner.py +137 -0
  20. dagnam-0.7.0/dagnam/_agent/skill/SKILL.md +83 -0
  21. dagnam-0.7.0/dagnam/_agent/skill/reference/account.md +24 -0
  22. dagnam-0.7.0/dagnam/_agent/skill/reference/cache.md +20 -0
  23. dagnam-0.7.0/dagnam/_agent/skill/reference/codegen.md +32 -0
  24. dagnam-0.7.0/dagnam/_agent/skill/reference/datasets.md +26 -0
  25. dagnam-0.7.0/dagnam/_agent/skill/reference/deployments.md +31 -0
  26. dagnam-0.7.0/dagnam/_agent/skill/reference/hub.md +29 -0
  27. dagnam-0.7.0/dagnam/_agent/skill/reference/inference.md +21 -0
  28. dagnam-0.7.0/dagnam/_agent/skill/reference/projects.md +35 -0
  29. dagnam-0.7.0/dagnam/_agent/skill/reference/training.md +38 -0
  30. dagnam-0.7.0/dagnam/_agent/skill/reference/troubleshooting.md +42 -0
  31. dagnam-0.7.0/dagnam/_agent/skill/scripts/plan.py +14 -0
  32. dagnam-0.7.0/dagnam/_agent/skill/scripts/watch_training.py +14 -0
  33. dagnam-0.7.0/dagnam/_contracts/__init__.py +29 -0
  34. dagnam-0.7.0/dagnam/_contracts/_architecture.py +36 -0
  35. dagnam-0.7.0/dagnam/_contracts/_interpret.py +342 -0
  36. dagnam-0.7.0/dagnam/_contracts/_schema.py +39 -0
  37. dagnam-0.7.0/dagnam/_contracts/component-schema.json +2035 -0
  38. dagnam-0.7.0/dagnam/_contracts/normalize.py +142 -0
  39. dagnam-0.7.0/dagnam/_contracts/param-diagnostics.json +1277 -0
  40. dagnam-0.7.0/dagnam/_contracts/validation-corpus.json +37391 -0
  41. dagnam-0.7.0/dagnam/_core/__init__.py +27 -0
  42. dagnam-0.7.0/dagnam/_core/_logging.py +88 -0
  43. dagnam-0.7.0/dagnam/_core/_retry.py +263 -0
  44. dagnam-0.7.0/dagnam/_core/aio/__init__.py +32 -0
  45. dagnam-0.7.0/dagnam/_core/aio/account.py +310 -0
  46. dagnam-0.7.0/dagnam/_core/aio/base.py +256 -0
  47. dagnam-0.7.0/dagnam/_core/aio/checkpoints.py +90 -0
  48. dagnam-0.7.0/dagnam/_core/aio/codegen.py +142 -0
  49. dagnam-0.7.0/dagnam/_core/aio/datasets.py +238 -0
  50. dagnam-0.7.0/dagnam/_core/aio/deployments.py +316 -0
  51. dagnam-0.7.0/dagnam/_core/aio/hub.py +221 -0
  52. dagnam-0.7.0/dagnam/_core/aio/inference.py +127 -0
  53. dagnam-0.7.0/dagnam/_core/aio/projects.py +273 -0
  54. dagnam-0.7.0/dagnam/_core/aio/training.py +411 -0
  55. dagnam-0.7.0/dagnam/_core/auth.py +112 -0
  56. dagnam-0.7.0/dagnam/_core/client/__init__.py +32 -0
  57. dagnam-0.7.0/dagnam/_core/client/account.py +314 -0
  58. dagnam-0.7.0/dagnam/_core/client/base.py +492 -0
  59. dagnam-0.7.0/dagnam/_core/client/checkpoints.py +76 -0
  60. dagnam-0.7.0/dagnam/_core/client/codegen.py +167 -0
  61. dagnam-0.7.0/dagnam/_core/client/common.py +368 -0
  62. dagnam-0.7.0/dagnam/_core/client/datasets.py +425 -0
  63. dagnam-0.7.0/dagnam/_core/client/deployments.py +311 -0
  64. dagnam-0.7.0/dagnam/_core/client/hub.py +234 -0
  65. dagnam-0.7.0/dagnam/_core/client/inference.py +125 -0
  66. dagnam-0.7.0/dagnam/_core/client/projects.py +297 -0
  67. dagnam-0.7.0/dagnam/_core/client/training.py +348 -0
  68. dagnam-0.7.0/dagnam/_core/config.py +138 -0
  69. dagnam-0.7.0/dagnam/_core/exceptions.py +169 -0
  70. dagnam-0.7.0/dagnam/_core/lro.py +243 -0
  71. dagnam-0.7.0/dagnam/_core/metrics_uploader.py +184 -0
  72. dagnam-0.7.0/dagnam/_core/naming.py +85 -0
  73. dagnam-0.7.0/dagnam/_core/resolver.py +23 -0
  74. dagnam-0.7.0/dagnam/_core/sse.py +304 -0
  75. dagnam-0.7.0/dagnam/_types.py +166 -0
  76. dagnam-0.7.0/dagnam/aio.py +11 -0
  77. dagnam-0.7.0/dagnam/cli/__init__.py +8 -0
  78. dagnam-0.7.0/dagnam/cli/_parser.py +209 -0
  79. dagnam-0.7.0/dagnam/cli/account.py +400 -0
  80. dagnam-0.7.0/dagnam/cli/account_data.py +85 -0
  81. dagnam-0.7.0/dagnam/cli/account_keys.py +145 -0
  82. dagnam-0.7.0/dagnam/cli/account_profile.py +206 -0
  83. dagnam-0.7.0/dagnam/cli/account_security.py +167 -0
  84. dagnam-0.7.0/dagnam/cli/account_settings.py +186 -0
  85. dagnam-0.7.0/dagnam/cli/agent.py +85 -0
  86. dagnam-0.7.0/dagnam/cli/cache.py +119 -0
  87. dagnam-0.7.0/dagnam/cli/checkpoint.py +111 -0
  88. dagnam-0.7.0/dagnam/cli/codegen.py +149 -0
  89. dagnam-0.7.0/dagnam/cli/common.py +444 -0
  90. dagnam-0.7.0/dagnam/cli/dataset.py +438 -0
  91. dagnam-0.7.0/dagnam/cli/deployment.py +460 -0
  92. dagnam-0.7.0/dagnam/cli/errors.py +418 -0
  93. dagnam-0.7.0/dagnam/cli/hub.py +353 -0
  94. dagnam-0.7.0/dagnam/cli/inference.py +161 -0
  95. dagnam-0.7.0/dagnam/cli/login.py +175 -0
  96. dagnam-0.7.0/dagnam/cli/main.py +139 -0
  97. dagnam-0.7.0/dagnam/cli/presentation.py +112 -0
  98. dagnam-0.7.0/dagnam/cli/project.py +469 -0
  99. dagnam-0.7.0/dagnam/cli/register.py +99 -0
  100. dagnam-0.7.0/dagnam/cli/training.py +598 -0
  101. dagnam-0.7.0/dagnam/data/__init__.py +1 -0
  102. dagnam-0.7.0/dagnam/data/_polars_utils.py +53 -0
  103. dagnam-0.7.0/dagnam/data/cache.py +370 -0
  104. dagnam-0.7.0/dagnam/data/dataset/__init__.py +7 -0
  105. dagnam-0.7.0/dagnam/data/dataset/_typing.py +86 -0
  106. dagnam-0.7.0/dagnam/data/dataset/base.py +466 -0
  107. dagnam-0.7.0/dagnam/data/dataset/hooks.py +186 -0
  108. dagnam-0.7.0/dagnam/data/dataset/to_flax.py +499 -0
  109. dagnam-0.7.0/dagnam/data/dataset/to_polars.py +64 -0
  110. dagnam-0.7.0/dagnam/data/dataset/to_pytorch.py +371 -0
  111. dagnam-0.7.0/dagnam/data/dataset/to_tensorflow.py +471 -0
  112. dagnam-0.7.0/dagnam/data/load.py +276 -0
  113. dagnam-0.7.0/dagnam/data/loaders/__init__.py +49 -0
  114. dagnam-0.7.0/dagnam/data/loaders/audio/__init__.py +17 -0
  115. dagnam-0.7.0/dagnam/data/loaders/audio/dataset.py +192 -0
  116. dagnam-0.7.0/dagnam/data/loaders/audio/io.py +137 -0
  117. dagnam-0.7.0/dagnam/data/loaders/audio/transforms.py +323 -0
  118. dagnam-0.7.0/dagnam/data/loaders/csv.py +218 -0
  119. dagnam-0.7.0/dagnam/data/loaders/flax.py +157 -0
  120. dagnam-0.7.0/dagnam/data/loaders/image_folder.py +406 -0
  121. dagnam-0.7.0/dagnam/data/loaders/json_array.py +10 -0
  122. dagnam-0.7.0/dagnam/data/loaders/media.py +402 -0
  123. dagnam-0.7.0/dagnam/data/loaders/system/__init__.py +15 -0
  124. dagnam-0.7.0/dagnam/data/loaders/system/bound_dataset.py +89 -0
  125. dagnam-0.7.0/dagnam/data/loaders/system/column_store.py +68 -0
  126. dagnam-0.7.0/dagnam/data/loaders/system/common.py +7 -0
  127. dagnam-0.7.0/dagnam/data/loaders/system/decoders/__init__.py +28 -0
  128. dagnam-0.7.0/dagnam/data/loaders/system/decoders/_helpers.py +109 -0
  129. dagnam-0.7.0/dagnam/data/loaders/system/decoders/array.py +42 -0
  130. dagnam-0.7.0/dagnam/data/loaders/system/decoders/audio_folder.py +89 -0
  131. dagnam-0.7.0/dagnam/data/loaders/system/decoders/base.py +23 -0
  132. dagnam-0.7.0/dagnam/data/loaders/system/decoders/image_folder.py +47 -0
  133. dagnam-0.7.0/dagnam/data/loaders/system/decoders/image_mask_folder.py +72 -0
  134. dagnam-0.7.0/dagnam/data/loaders/system/decoders/tabular.py +30 -0
  135. dagnam-0.7.0/dagnam/data/loaders/system/decoders/text.py +46 -0
  136. dagnam-0.7.0/dagnam/data/loaders/system/dispatch.py +285 -0
  137. dagnam-0.7.0/dagnam/data/loaders/system/transform_executor.py +127 -0
  138. dagnam-0.7.0/dagnam/data/loaders/text_lm.py +40 -0
  139. dagnam-0.7.0/dagnam/data/loaders/tf.py +78 -0
  140. dagnam-0.7.0/dagnam/data/loaders/torch_utils.py +31 -0
  141. dagnam-0.7.0/dagnam/exceptions.py +66 -0
  142. dagnam-0.7.0/dagnam/py.typed +0 -0
  143. dagnam-0.7.0/dagnam/resources/__init__.py +32 -0
  144. dagnam-0.7.0/dagnam/resources/account.py +369 -0
  145. dagnam-0.7.0/dagnam/resources/checkpoints.py +151 -0
  146. dagnam-0.7.0/dagnam/resources/codegen.py +176 -0
  147. dagnam-0.7.0/dagnam/resources/datasets.py +177 -0
  148. dagnam-0.7.0/dagnam/resources/deployments.py +564 -0
  149. dagnam-0.7.0/dagnam/resources/hub.py +578 -0
  150. dagnam-0.7.0/dagnam/resources/inference.py +120 -0
  151. dagnam-0.7.0/dagnam/resources/projects.py +471 -0
  152. dagnam-0.7.0/dagnam/resources/studio.py +36 -0
  153. dagnam-0.7.0/dagnam/resources/training.py +434 -0
  154. dagnam-0.7.0/dagnam/training.py +441 -0
  155. dagnam-0.7.0/dagnam/training_attach.py +220 -0
  156. dagnam-0.7.0/pyproject.toml +435 -0
  157. dagnam-0.7.0/tests/_agent/test_guardhook.py +178 -0
  158. dagnam-0.7.0/tests/_agent/test_install.py +309 -0
  159. dagnam-0.7.0/tests/_agent/test_payload.py +89 -0
  160. dagnam-0.7.0/tests/_agent/test_runner.py +190 -0
  161. dagnam-0.7.0/tests/_contracts/test_architecture.py +56 -0
  162. dagnam-0.7.0/tests/_contracts/test_interpret.py +231 -0
  163. dagnam-0.7.0/tests/_contracts/test_normalize.py +211 -0
  164. dagnam-0.7.0/tests/_contracts/test_param_diagnostics_parity.py +35 -0
  165. dagnam-0.7.0/tests/_contracts/test_parity_with_backend_cases.py +45 -0
  166. dagnam-0.7.0/tests/_contracts/test_schema.py +14 -0
  167. dagnam-0.7.0/tests/_contracts/test_validation_corpus_param_tier.py +47 -0
  168. dagnam-0.7.0/tests/cli/conftest.py +23 -0
  169. dagnam-0.7.0/tests/cli/test_account.py +378 -0
  170. dagnam-0.7.0/tests/cli/test_account_data_cli.py +188 -0
  171. dagnam-0.7.0/tests/cli/test_account_keys_cli.py +201 -0
  172. dagnam-0.7.0/tests/cli/test_account_profile_cli.py +213 -0
  173. dagnam-0.7.0/tests/cli/test_account_security_cli.py +319 -0
  174. dagnam-0.7.0/tests/cli/test_account_settings_cli.py +170 -0
  175. dagnam-0.7.0/tests/cli/test_agent.py +132 -0
  176. dagnam-0.7.0/tests/cli/test_banner_encoding.py +197 -0
  177. dagnam-0.7.0/tests/cli/test_cache_cli.py +71 -0
  178. dagnam-0.7.0/tests/cli/test_checkpoint.py +143 -0
  179. dagnam-0.7.0/tests/cli/test_cli_tail.py +117 -0
  180. dagnam-0.7.0/tests/cli/test_codegen_cli.py +164 -0
  181. dagnam-0.7.0/tests/cli/test_common_helpers.py +463 -0
  182. dagnam-0.7.0/tests/cli/test_dataset.py +347 -0
  183. dagnam-0.7.0/tests/cli/test_dataset_manage_cli.py +209 -0
  184. dagnam-0.7.0/tests/cli/test_deployment.py +450 -0
  185. dagnam-0.7.0/tests/cli/test_errors.py +364 -0
  186. dagnam-0.7.0/tests/cli/test_exit_codes.py +20 -0
  187. dagnam-0.7.0/tests/cli/test_help.py +112 -0
  188. dagnam-0.7.0/tests/cli/test_hub_cli.py +287 -0
  189. dagnam-0.7.0/tests/cli/test_inference_cli.py +300 -0
  190. dagnam-0.7.0/tests/cli/test_lightweight_import.py +46 -0
  191. dagnam-0.7.0/tests/cli/test_login.py +258 -0
  192. dagnam-0.7.0/tests/cli/test_login_posix.py +288 -0
  193. dagnam-0.7.0/tests/cli/test_main.py +162 -0
  194. dagnam-0.7.0/tests/cli/test_parser.py +198 -0
  195. dagnam-0.7.0/tests/cli/test_presentation.py +74 -0
  196. dagnam-0.7.0/tests/cli/test_project.py +480 -0
  197. dagnam-0.7.0/tests/cli/test_project_thumbnail_cli.py +37 -0
  198. dagnam-0.7.0/tests/cli/test_register_cli.py +278 -0
  199. dagnam-0.7.0/tests/cli/test_stream.py +55 -0
  200. dagnam-0.7.0/tests/cli/test_subcommand_help.py +56 -0
  201. dagnam-0.7.0/tests/cli/test_training_cli.py +418 -0
  202. dagnam-0.7.0/tests/cli/test_training_downloads_cli.py +52 -0
  203. dagnam-0.7.0/tests/cli/test_training_lifecycle_cli.py +220 -0
  204. dagnam-0.7.0/tests/cli/test_usage.py +127 -0
  205. dagnam-0.7.0/tests/conftest.py +104 -0
  206. dagnam-0.7.0/tests/core/aio/__init__.py +0 -0
  207. dagnam-0.7.0/tests/core/aio/conftest.py +27 -0
  208. dagnam-0.7.0/tests/core/aio/test_account_data_async.py +169 -0
  209. dagnam-0.7.0/tests/core/aio/test_account_keys_async.py +160 -0
  210. dagnam-0.7.0/tests/core/aio/test_account_profile_async.py +162 -0
  211. dagnam-0.7.0/tests/core/aio/test_account_sessions_async.py +224 -0
  212. dagnam-0.7.0/tests/core/aio/test_account_settings_async.py +130 -0
  213. dagnam-0.7.0/tests/core/aio/test_async_account.py +117 -0
  214. dagnam-0.7.0/tests/core/aio/test_async_base.py +188 -0
  215. dagnam-0.7.0/tests/core/aio/test_async_base_request.py +195 -0
  216. dagnam-0.7.0/tests/core/aio/test_async_checkpoints.py +256 -0
  217. dagnam-0.7.0/tests/core/aio/test_async_codegen.py +168 -0
  218. dagnam-0.7.0/tests/core/aio/test_async_datasets.py +263 -0
  219. dagnam-0.7.0/tests/core/aio/test_async_deployments.py +323 -0
  220. dagnam-0.7.0/tests/core/aio/test_async_hub.py +174 -0
  221. dagnam-0.7.0/tests/core/aio/test_async_inference.py +209 -0
  222. dagnam-0.7.0/tests/core/aio/test_async_projects.py +157 -0
  223. dagnam-0.7.0/tests/core/aio/test_async_training.py +428 -0
  224. dagnam-0.7.0/tests/core/aio/test_dataset_manage_async.py +103 -0
  225. dagnam-0.7.0/tests/core/aio/test_project_thumbnail_async.py +121 -0
  226. dagnam-0.7.0/tests/core/aio/test_register_bootstrap_async.py +121 -0
  227. dagnam-0.7.0/tests/core/aio/test_training_downloads_async.py +126 -0
  228. dagnam-0.7.0/tests/core/aio/test_training_lifecycle_async.py +149 -0
  229. dagnam-0.7.0/tests/core/client/conftest.py +21 -0
  230. dagnam-0.7.0/tests/core/client/test_account_data.py +144 -0
  231. dagnam-0.7.0/tests/core/client/test_account_keys.py +139 -0
  232. dagnam-0.7.0/tests/core/client/test_account_profile.py +172 -0
  233. dagnam-0.7.0/tests/core/client/test_account_sessions.py +187 -0
  234. dagnam-0.7.0/tests/core/client/test_account_settings.py +132 -0
  235. dagnam-0.7.0/tests/core/client/test_base.py +17 -0
  236. dagnam-0.7.0/tests/core/client/test_base_request.py +135 -0
  237. dagnam-0.7.0/tests/core/client/test_common.py +717 -0
  238. dagnam-0.7.0/tests/core/client/test_dataset_manage.py +169 -0
  239. dagnam-0.7.0/tests/core/client/test_local_run_client.py +38 -0
  240. dagnam-0.7.0/tests/core/client/test_other_mixins.py +522 -0
  241. dagnam-0.7.0/tests/core/client/test_project_thumbnail.py +150 -0
  242. dagnam-0.7.0/tests/core/client/test_register_bootstrap.py +147 -0
  243. dagnam-0.7.0/tests/core/client/test_sync_account.py +104 -0
  244. dagnam-0.7.0/tests/core/client/test_sync_base.py +487 -0
  245. dagnam-0.7.0/tests/core/client/test_sync_datasets.py +378 -0
  246. dagnam-0.7.0/tests/core/client/test_sync_deployments.py +348 -0
  247. dagnam-0.7.0/tests/core/client/test_sync_hub.py +249 -0
  248. dagnam-0.7.0/tests/core/client/test_sync_inference.py +113 -0
  249. dagnam-0.7.0/tests/core/client/test_sync_projects.py +182 -0
  250. dagnam-0.7.0/tests/core/client/test_sync_training.py +423 -0
  251. dagnam-0.7.0/tests/core/client/test_training_downloads.py +104 -0
  252. dagnam-0.7.0/tests/core/client/test_training_lifecycle.py +128 -0
  253. dagnam-0.7.0/tests/core/client/test_wire.py +423 -0
  254. dagnam-0.7.0/tests/core/test_auth.py +177 -0
  255. dagnam-0.7.0/tests/core/test_config.py +273 -0
  256. dagnam-0.7.0/tests/core/test_download_resume.py +311 -0
  257. dagnam-0.7.0/tests/core/test_exceptions.py +166 -0
  258. dagnam-0.7.0/tests/core/test_load_internal.py +252 -0
  259. dagnam-0.7.0/tests/core/test_logging.py +118 -0
  260. dagnam-0.7.0/tests/core/test_lro.py +326 -0
  261. dagnam-0.7.0/tests/core/test_metrics_uploader.py +347 -0
  262. dagnam-0.7.0/tests/core/test_naming.py +15 -0
  263. dagnam-0.7.0/tests/core/test_no_direct_requests_seam.py +68 -0
  264. dagnam-0.7.0/tests/core/test_retry.py +335 -0
  265. dagnam-0.7.0/tests/core/test_retry_async.py +257 -0
  266. dagnam-0.7.0/tests/core/test_sse.py +617 -0
  267. dagnam-0.7.0/tests/core/test_sse_reconnect.py +85 -0
  268. dagnam-0.7.0/tests/core/test_structure_imports.py +60 -0
  269. dagnam-0.7.0/tests/data/dataset/_native_helpers.py +133 -0
  270. dagnam-0.7.0/tests/data/dataset/test_augmentation_hooks.py +448 -0
  271. dagnam-0.7.0/tests/data/dataset/test_base.py +310 -0
  272. dagnam-0.7.0/tests/data/dataset/test_binding_contract.py +122 -0
  273. dagnam-0.7.0/tests/data/dataset/test_column_roles.py +162 -0
  274. dagnam-0.7.0/tests/data/dataset/test_dataset_converters_branches.py +210 -0
  275. dagnam-0.7.0/tests/data/dataset/test_iter_and_arrays.py +217 -0
  276. dagnam-0.7.0/tests/data/dataset/test_to_flax.py +506 -0
  277. dagnam-0.7.0/tests/data/dataset/test_to_flax_branches.py +177 -0
  278. dagnam-0.7.0/tests/data/dataset/test_to_pytorch_numpy.py +453 -0
  279. dagnam-0.7.0/tests/data/dataset/test_to_tensorflow.py +604 -0
  280. dagnam-0.7.0/tests/data/dataset/test_versioning.py +162 -0
  281. dagnam-0.7.0/tests/data/loaders/_audio_helpers.py +156 -0
  282. dagnam-0.7.0/tests/data/loaders/_system_fakes.py +56 -0
  283. dagnam-0.7.0/tests/data/loaders/csv/test_roles.py +123 -0
  284. dagnam-0.7.0/tests/data/loaders/system/decoders/test_array.py +57 -0
  285. dagnam-0.7.0/tests/data/loaders/system/decoders/test_helpers.py +95 -0
  286. dagnam-0.7.0/tests/data/loaders/system/decoders/test_image_mask_folder.py +58 -0
  287. dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_audio_folder_decoder.py +127 -0
  288. dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_image_folder_decoder.py +37 -0
  289. dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_tabular_decoder.py +19 -0
  290. dagnam-0.7.0/tests/data/loaders/system/decoders/test_system_text_decoder.py +69 -0
  291. dagnam-0.7.0/tests/data/loaders/system/test_bound_dataset.py +135 -0
  292. dagnam-0.7.0/tests/data/loaders/system/test_column_store.py +38 -0
  293. dagnam-0.7.0/tests/data/loaders/system/test_dispatch.py +51 -0
  294. dagnam-0.7.0/tests/data/loaders/system/test_load_system_dataset.py +160 -0
  295. dagnam-0.7.0/tests/data/loaders/system/test_system_loader_edges.py +522 -0
  296. dagnam-0.7.0/tests/data/loaders/system/test_transform_executor.py +151 -0
  297. dagnam-0.7.0/tests/data/loaders/test_audio_dataset.py +165 -0
  298. dagnam-0.7.0/tests/data/loaders/test_audio_dispatch.py +121 -0
  299. dagnam-0.7.0/tests/data/loaders/test_audio_io.py +291 -0
  300. dagnam-0.7.0/tests/data/loaders/test_audio_transforms.py +495 -0
  301. dagnam-0.7.0/tests/data/loaders/test_csv.py +500 -0
  302. dagnam-0.7.0/tests/data/loaders/test_flax.py +56 -0
  303. dagnam-0.7.0/tests/data/loaders/test_flax_parallel_decode.py +99 -0
  304. dagnam-0.7.0/tests/data/loaders/test_flax_tf_loaders.py +179 -0
  305. dagnam-0.7.0/tests/data/loaders/test_image_folder.py +405 -0
  306. dagnam-0.7.0/tests/data/loaders/test_image_folder_loaders.py +475 -0
  307. dagnam-0.7.0/tests/data/loaders/test_media.py +289 -0
  308. dagnam-0.7.0/tests/data/loaders/test_system_integration.py +292 -0
  309. dagnam-0.7.0/tests/data/loaders/test_text_lm.py +35 -0
  310. dagnam-0.7.0/tests/data/loaders/test_tf_flax_parity.py +173 -0
  311. dagnam-0.7.0/tests/data/loaders/test_torch_utils.py +76 -0
  312. dagnam-0.7.0/tests/data/test_cache.py +530 -0
  313. dagnam-0.7.0/tests/data/test_cache_locks.py +95 -0
  314. dagnam-0.7.0/tests/data/test_cache_verify.py +93 -0
  315. dagnam-0.7.0/tests/data/test_load.py +70 -0
  316. dagnam-0.7.0/tests/data/test_load_dataset.py +460 -0
  317. dagnam-0.7.0/tests/data/test_polars_utils.py +34 -0
  318. dagnam-0.7.0/tests/resources/test_account_data_resource.py +37 -0
  319. dagnam-0.7.0/tests/resources/test_account_keys_resource.py +50 -0
  320. dagnam-0.7.0/tests/resources/test_account_profile_resource.py +44 -0
  321. dagnam-0.7.0/tests/resources/test_account_resource.py +29 -0
  322. dagnam-0.7.0/tests/resources/test_account_sessions_resource.py +35 -0
  323. dagnam-0.7.0/tests/resources/test_account_settings_resource.py +49 -0
  324. dagnam-0.7.0/tests/resources/test_checkpoints.py +212 -0
  325. dagnam-0.7.0/tests/resources/test_codegen.py +170 -0
  326. dagnam-0.7.0/tests/resources/test_dataset_manage_resource.py +49 -0
  327. dagnam-0.7.0/tests/resources/test_datasets.py +144 -0
  328. dagnam-0.7.0/tests/resources/test_deployments.py +366 -0
  329. dagnam-0.7.0/tests/resources/test_gap_fill.py +523 -0
  330. dagnam-0.7.0/tests/resources/test_hub.py +553 -0
  331. dagnam-0.7.0/tests/resources/test_inference.py +158 -0
  332. dagnam-0.7.0/tests/resources/test_project_thumbnail_resource.py +34 -0
  333. dagnam-0.7.0/tests/resources/test_projects.py +311 -0
  334. dagnam-0.7.0/tests/resources/test_register_resource.py +96 -0
  335. dagnam-0.7.0/tests/resources/test_stream_training.py +82 -0
  336. dagnam-0.7.0/tests/resources/test_studio.py +74 -0
  337. dagnam-0.7.0/tests/resources/test_training.py +277 -0
  338. dagnam-0.7.0/tests/resources/test_training_lifecycle_resource.py +141 -0
  339. dagnam-0.7.0/tests/test_auto_stream_e2e.py +51 -0
  340. dagnam-0.7.0/tests/test_lazy_async_import.py +76 -0
  341. dagnam-0.7.0/tests/test_public_api.py +177 -0
  342. dagnam-0.7.0/tests/test_python_support_metadata.py +79 -0
  343. dagnam-0.7.0/tests/test_training_attach.py +697 -0
  344. dagnam-0.7.0/tests/test_training_init.py +625 -0
  345. dagnam-0.7.0/tests/test_training_reporter.py +278 -0
  346. dagnam-0.7.0/tests/test_types.py +68 -0
  347. dagnam-0.7.0/tests/typing_helpers.py +73 -0
@@ -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