weightslab 1.3.3__tar.gz → 1.4.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 (407) hide show
  1. {weightslab-1.3.3 → weightslab-1.4.0}/.github/workflows/ci.yml +1 -1
  2. {weightslab-1.3.3 → weightslab-1.4.0}/.github/workflows/release.yml +129 -19
  3. {weightslab-1.3.3 → weightslab-1.4.0}/.gitignore +9 -0
  4. {weightslab-1.3.3 → weightslab-1.4.0}/AGENTS.md +31 -28
  5. weightslab-1.4.0/CHANGELOG.md +1 -0
  6. {weightslab-1.3.3/weightslab.egg-info → weightslab-1.4.0}/PKG-INFO +25 -23
  7. {weightslab-1.3.3 → weightslab-1.4.0}/README.md +19 -14
  8. {weightslab-1.3.3 → weightslab-1.4.0}/agent_config.yaml +1 -0
  9. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/examples-gallery.js +6 -6
  10. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/wl-ribbon.js +1 -1
  11. {weightslab-1.3.3 → weightslab-1.4.0}/docs/conf.py +1 -1
  12. {weightslab-1.3.3 → weightslab-1.4.0}/docs/configuration.rst +31 -42
  13. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/classification.rst +2 -2
  14. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/clustering.rst +2 -2
  15. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/detection.rst +2 -2
  16. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/generation.rst +1 -1
  17. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/segmentation.rst +2 -2
  18. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/usecases/lidar_detection.rst +1 -1
  19. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/usecases/loss_shape_classification.rst +2 -2
  20. {weightslab-1.3.3 → weightslab-1.4.0}/docs/four_way_approach.rst +2 -2
  21. {weightslab-1.3.3 → weightslab-1.4.0}/docs/index.rst +1 -2
  22. weightslab-1.4.0/docs/logger.rst +190 -0
  23. {weightslab-1.3.3 → weightslab-1.4.0}/docs/quickstart.rst +9 -14
  24. {weightslab-1.3.3 → weightslab-1.4.0}/docs/ultralytics.rst +2 -2
  25. {weightslab-1.3.3 → weightslab-1.4.0}/docs/usage/parameters.rst +10 -30
  26. {weightslab-1.3.3 → weightslab-1.4.0}/docs/user_commands.rst +107 -114
  27. {weightslab-1.3.3 → weightslab-1.4.0}/docs/user_functions.rst +25 -2
  28. weightslab-1.4.0/docs/weights_studio.rst +425 -0
  29. {weightslab-1.3.3 → weightslab-1.4.0}/pyproject.toml +36 -18
  30. weightslab-1.4.0/tests/backend/test_cli.py +274 -0
  31. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_data_loader_interface.py +29 -0
  32. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_ledgers.py +43 -0
  33. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_logger_core.py +182 -1
  34. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_write_dataframe.py +35 -20
  35. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_write_history.py +101 -47
  36. {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/test_checkpoint_workflow.py +9 -27
  37. {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_grpc_user_actions.py +1 -1
  38. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_cli.py +53 -0
  39. {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_ablation.py +3 -1
  40. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_constraint_generation.py +23 -0
  41. weightslab-1.4.0/tests/test_secure_communication.py +132 -0
  42. weightslab-1.4.0/tests/trainer/services/test_data_service_tabular_task_type.py +98 -0
  43. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/__init__.py +68 -15
  44. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/_version.py +3 -3
  45. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/art.py +13 -0
  46. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/dataloader_interface.py +20 -0
  47. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/ledgers.py +36 -1
  48. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/logger.py +267 -37
  49. weightslab-1.4.0/weightslab/cli.py +838 -0
  50. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/checkpoint_manager.py +33 -102
  51. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/global_monitoring.py +9 -8
  52. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/data_utils.py +15 -0
  53. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/dataframe_manager.py +43 -25
  54. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/h5_array_store.py +109 -76
  55. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/h5_dataframe_store.py +20 -10
  56. weightslab-1.4.0/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb +77 -0
  57. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-ads-recommendation.ipynb +481 -0
  58. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-classification.ipynb +1667 -0
  59. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-clustering.ipynb +5272 -0
  60. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-detection.ipynb +4691 -0
  61. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-fraud-detection.ipynb +153 -0
  62. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-segmentation.ipynb +1072 -0
  63. weightslab-1.4.0/weightslab/examples/Notebooks/Usecases/wl-segmentation-loss-shapes-classification.ipynb +530 -0
  64. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/README.md +102 -0
  65. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/config.yaml +52 -0
  66. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/main.py +284 -0
  67. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/test_ads_recommendation.py +185 -0
  68. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils/data.py +269 -0
  69. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils/model.py +74 -0
  70. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/verify_integration.py +219 -0
  71. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/README.md +92 -0
  72. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/config.yaml +48 -0
  73. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/main.py +284 -0
  74. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/test_fraud_detection.py +118 -0
  75. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils/data.py +189 -0
  76. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils/model.py +33 -0
  77. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/verify_integration.py +221 -0
  78. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/main.py +0 -8
  79. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Ultralytics/wl-detection/config.yaml +1 -1
  80. weightslab-1.4.0/weightslab/examples/Usecases/ws-signals-mnist/main.py +180 -0
  81. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/README.md +26 -6
  82. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/__init__.py +16 -8
  83. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/dataset.py +22 -0
  84. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/signals.py +26 -6
  85. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/trainer.py +108 -32
  86. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/proto/experiment_service_pb2.py +3 -3
  87. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/proto/experiment_service_pb2_grpc.py +2 -2
  88. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/security/cert_auth_manager.py +23 -20
  89. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/src.py +145 -13
  90. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/experiment_context.py +1 -1
  91. weightslab-1.4.0/weightslab/trainer/services/agent/__init__.py +0 -0
  92. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent.py +20 -1
  93. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/data_image_utils.py +57 -0
  94. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/data_service.py +189 -10
  95. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/experiment_service.py +3 -3
  96. weightslab-1.4.0/weightslab/trainer/services/utils/__init__.py +0 -0
  97. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/tunnel.py +14 -13
  98. weightslab-1.4.0/weightslab/ui/__init__.py +10 -0
  99. weightslab-1.4.0/weightslab/ui/server.py +561 -0
  100. weightslab-1.4.0/weightslab/ui/static/assets/experiment_service-DYuO7H9y.js +1 -0
  101. weightslab-1.4.0/weightslab/ui/static/assets/favicon-BtmqMp0p.png +0 -0
  102. weightslab-1.4.0/weightslab/ui/static/assets/index-DYvSNWtZ.css +1 -0
  103. weightslab-1.4.0/weightslab/ui/static/assets/index-dOou7igN.js +4475 -0
  104. weightslab-1.4.0/weightslab/ui/static/images/darkmode/logo.png +0 -0
  105. weightslab-1.4.0/weightslab/ui/static/images/darkmode/logo.svg +59 -0
  106. weightslab-1.4.0/weightslab/ui/static/images/favicon.png +0 -0
  107. weightslab-1.4.0/weightslab/ui/static/images/lightmode/logo.png +0 -0
  108. weightslab-1.4.0/weightslab/ui/static/images/lightmode/logo.svg +59 -0
  109. weightslab-1.4.0/weightslab/ui/static/images/logo.png +0 -0
  110. weightslab-1.4.0/weightslab/ui/static/index.html +794 -0
  111. {weightslab-1.3.3/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.ps1 +19 -19
  112. {weightslab-1.3.3/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.sh +19 -19
  113. weightslab-1.4.0/weightslab/ui/utils/sync-frontend.sh +49 -0
  114. weightslab-1.4.0/weightslab/utils/__init__.py +36 -0
  115. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/telemetry.py +5 -5
  116. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/tools.py +18 -0
  117. {weightslab-1.3.3 → weightslab-1.4.0/weightslab.egg-info}/PKG-INFO +25 -23
  118. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/SOURCES.txt +45 -33
  119. weightslab-1.4.0/weightslab.egg-info/entry_points.txt +2 -0
  120. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/requires.txt +5 -12
  121. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/scm_file_list.json +296 -295
  122. weightslab-1.4.0/weightslab.egg-info/scm_version.json +8 -0
  123. weightslab-1.3.3/CHANGELOG.md +0 -1
  124. weightslab-1.3.3/docs/logger.rst +0 -88
  125. weightslab-1.3.3/docs/usage/docker.rst +0 -350
  126. weightslab-1.3.3/docs/weights_studio.rst +0 -612
  127. weightslab-1.3.3/tests/backend/test_ui_docker_bridge.py +0 -718
  128. weightslab-1.3.3/tests/general/test_logger_snapshot_rotation.py +0 -102
  129. weightslab-1.3.3/tests/test_secure_docker.py +0 -238
  130. weightslab-1.3.3/weightslab/docker/Dockerfile +0 -27
  131. weightslab-1.3.3/weightslab/docker/docker/.dockerignore +0 -20
  132. weightslab-1.3.3/weightslab/docker/docker/.env.example +0 -67
  133. weightslab-1.3.3/weightslab/docker/docker/DEPLOYMENT.md +0 -271
  134. weightslab-1.3.3/weightslab/docker/docker/docker-compose.yml +0 -127
  135. weightslab-1.3.3/weightslab/docker/docker/nginx-entrypoint.sh +0 -188
  136. weightslab-1.3.3/weightslab/docker/docker/nginx.base-path.conf copy.template +0 -40
  137. weightslab-1.3.3/weightslab/docker/docker/nginx.base-path.conf.template +0 -40
  138. weightslab-1.3.3/weightslab/docker/docker/nginx.conf +0 -57
  139. weightslab-1.3.3/weightslab/docker/docker/test-deployment.sh +0 -110
  140. weightslab-1.3.3/weightslab/docker/docker/utils/build-and-deploy.sh +0 -348
  141. weightslab-1.3.3/weightslab/docker/envoy/envoy.downstream_plaintext.yaml +0 -100
  142. weightslab-1.3.3/weightslab/docker/envoy/envoy.downstream_upstream_plaintext.yaml +0 -87
  143. weightslab-1.3.3/weightslab/docker/envoy/envoy.upstream_plaintext.yaml +0 -97
  144. weightslab-1.3.3/weightslab/docker/envoy/envoy.yaml +0 -110
  145. weightslab-1.3.3/weightslab/docker/nginx.conf +0 -118
  146. weightslab-1.3.3/weightslab/examples/Docker_training/README.md +0 -38
  147. weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/Dockerfile +0 -57
  148. weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/README.md +0 -161
  149. weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/docker-compose.yml +0 -54
  150. weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/entrypoint.sh +0 -67
  151. weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/Dockerfile +0 -55
  152. weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/README.md +0 -159
  153. weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/docker-compose.yml +0 -44
  154. weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/entrypoint.sh +0 -101
  155. weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/ui-compose.yml +0 -61
  156. weightslab-1.3.3/weightslab/ui_docker_bridge.py +0 -1260
  157. weightslab-1.3.3/weightslab/utils/__init__.py +0 -9
  158. weightslab-1.3.3/weightslab.egg-info/entry_points.txt +0 -2
  159. weightslab-1.3.3/weightslab.egg-info/scm_version.json +0 -8
  160. {weightslab-1.3.3 → weightslab-1.4.0}/.coverage +0 -0
  161. {weightslab-1.3.3 → weightslab-1.4.0}/.gitattributes +0 -0
  162. {weightslab-1.3.3 → weightslab-1.4.0}/.github/workflows/docs-pages.yml +0 -0
  163. {weightslab-1.3.3 → weightslab-1.4.0}/LICENSE +0 -0
  164. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/.gitkeep +0 -0
  165. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/custom.css +0 -0
  166. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/favicon.png +0 -0
  167. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/github-stars.js +0 -0
  168. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/logo-dark.png +0 -0
  169. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/logo-light.png +0 -0
  170. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/version-switcher.js +0 -0
  171. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/weights_studio_architecture.png +0 -0
  172. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/wl-topnav.js +0 -0
  173. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_templates/.gitkeep +0 -0
  174. {weightslab-1.3.3 → weightslab-1.4.0}/docs/_templates/sidebar/brand.html +0 -0
  175. {weightslab-1.3.3 → weightslab-1.4.0}/docs/agent.rst +0 -0
  176. {weightslab-1.3.3 → weightslab-1.4.0}/docs/data_exploration.rst +0 -0
  177. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/index.rst +0 -0
  178. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/lightning/classification.rst +0 -0
  179. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/lightning/index.rst +0 -0
  180. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/index.rst +0 -0
  181. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/ultralytics/detection.rst +0 -0
  182. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/ultralytics/index.rst +0 -0
  183. {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/usecases/index.rst +0 -0
  184. {weightslab-1.3.3 → weightslab-1.4.0}/docs/grpc/audit_logger.rst +0 -0
  185. {weightslab-1.3.3 → weightslab-1.4.0}/docs/grpc/grpc_functions.rst +0 -0
  186. {weightslab-1.3.3 → weightslab-1.4.0}/docs/grpc/index.rst +0 -0
  187. {weightslab-1.3.3 → weightslab-1.4.0}/docs/hyperparameters.rst +0 -0
  188. {weightslab-1.3.3 → weightslab-1.4.0}/docs/model_interaction.rst +0 -0
  189. {weightslab-1.3.3 → weightslab-1.4.0}/docs/pytorch_lightning.rst +0 -0
  190. {weightslab-1.3.3 → weightslab-1.4.0}/docs/requirements.txt +0 -0
  191. {weightslab-1.3.3 → weightslab-1.4.0}/docs/segmentation_usecase.rst +0 -0
  192. {weightslab-1.3.3 → weightslab-1.4.0}/docs/usage/good_practice.rst +0 -0
  193. {weightslab-1.3.3 → weightslab-1.4.0}/docs/usage.rst +0 -0
  194. {weightslab-1.3.3 → weightslab-1.4.0}/docs/usecases.rst +0 -0
  195. {weightslab-1.3.3 → weightslab-1.4.0}/setup.cfg +0 -0
  196. {weightslab-1.3.3 → weightslab-1.4.0}/tests/__init__.py +0 -0
  197. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/__init__.py +0 -0
  198. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_audit_logger.py +0 -0
  199. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_cli_additional_unit.py +0 -0
  200. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_compare_dataloaders.py +0 -0
  201. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_instance_signal_logger.py +0 -0
  202. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_model_interface_unit.py +0 -0
  203. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_optimizer_interface.py +0 -0
  204. {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_optimizer_interface_additional_unit.py +0 -0
  205. {weightslab-1.3.3 → weightslab-1.4.0}/tests/chaos_monkeys_utests/__init__.py +0 -0
  206. {weightslab-1.3.3 → weightslab-1.4.0}/tests/chaos_monkeys_utests/test_grpc_chaos_monkey_robustness.py +0 -0
  207. {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/__init__.py +0 -0
  208. {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/test_experiment_hash_and_art.py +0 -0
  209. {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/test_global_monitoring_unit.py +0 -0
  210. {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/__init__.py +0 -0
  211. {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_get_point_cloud.py +0 -0
  212. {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_grpc_histogram_categorical.py +0 -0
  213. {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_grpc_tag_operations.py +0 -0
  214. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/__init__.py +0 -0
  215. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_auditor_mode.py +0 -0
  216. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_hyperparams.py +0 -0
  217. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_signal_refinements.py +0 -0
  218. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_signals.py +0 -0
  219. {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_signals_wrapping.py +0 -0
  220. {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/__init__.py +0 -0
  221. {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/test_pytorch_lightning_integration.py +0 -0
  222. {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_test_suite.py +0 -0
  223. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/__init__.py +0 -0
  224. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_dependency_patterns.py +0 -0
  225. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_logger.py +0 -0
  226. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_model_with_ops.py +0 -0
  227. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_model_with_ops_unit.py +0 -0
  228. {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_tracking.py +0 -0
  229. {weightslab-1.3.3 → weightslab-1.4.0}/tests/modules/__init__.py +0 -0
  230. {weightslab-1.3.3 → weightslab-1.4.0}/tests/modules/test_modules_with_ops.py +0 -0
  231. {weightslab-1.3.3 → weightslab-1.4.0}/tests/test_src_functions.py +0 -0
  232. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/__init__.py +0 -0
  233. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/__init__.py +0 -0
  234. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_live_prompt_evaluation.py +0 -0
  235. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_model_and_safety_unit.py +0 -0
  236. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_prompt_unit.py +0 -0
  237. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_service_unit.py +0 -0
  238. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_server.py +0 -0
  239. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_unit.py +0 -0
  240. {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/test_trainer_tools.py +0 -0
  241. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/__init__.py +0 -0
  242. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_computational_graph_utils_unit.py +0 -0
  243. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_logs_unit.py +0 -0
  244. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_modules_dependencies_unit.py +0 -0
  245. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_plot_graph_render_unit.py +0 -0
  246. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_plot_graph_unit.py +0 -0
  247. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_shape_prop_unit.py +0 -0
  248. {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_utils_tools_unit.py +0 -0
  249. {weightslab-1.3.3 → weightslab-1.4.0}/tests/watchdog/__init__.py +0 -0
  250. {weightslab-1.3.3 → weightslab-1.4.0}/tests/watchdog/test_lock_monitor.py +0 -0
  251. {weightslab-1.3.3 → weightslab-1.4.0}/tests/watchdog/test_watchdog.py +0 -0
  252. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/__init__.py +0 -0
  253. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/audit_logger.py +0 -0
  254. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/cli.py +0 -0
  255. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/model_interface.py +0 -0
  256. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/optimizer_interface.py +0 -0
  257. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/__init__.py +0 -0
  258. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/evaluation_controller.py +0 -0
  259. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/experiment_hash.py +0 -0
  260. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/parallel_primitives.py +0 -0
  261. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/tracking.py +0 -0
  262. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/__init__.py +0 -0
  263. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/array_proxy.py +0 -0
  264. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/data_samples_with_ops.py +0 -0
  265. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/point_cloud_utils.py +0 -0
  266. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/sample_stats.py +0 -0
  267. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/docker/docker/utils/test-deployment.sh +0 -0
  268. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Lightning/wl-classification/config.yaml +0 -0
  269. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Lightning/wl-classification/main.py +0 -0
  270. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-classification.ipynb +0 -0
  271. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-clustering.ipynb +0 -0
  272. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-detection.ipynb +0 -0
  273. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-generation.ipynb +0 -0
  274. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-segmentation.ipynb +0 -0
  275. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/Usecases/ws-segmentation-loss-shapes-classification.ipynb +0 -0
  276. {weightslab-1.3.3/weightslab/examples/PyTorch/wl-clustering/face → weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils}/__init__.py +0 -0
  277. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-classification/config.yaml +0 -0
  278. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-classification/main.py +0 -0
  279. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/config.yaml +0 -0
  280. {weightslab-1.3.3/weightslab/examples/utils/baseline_models → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering/face}/__init__.py +0 -0
  281. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/data.py +0 -0
  282. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/model.py +0 -0
  283. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/signals.py +0 -0
  284. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/utils.py +0 -0
  285. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/main.py +0 -0
  286. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/README.md +0 -0
  287. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/config.yaml +0 -0
  288. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/main.py +0 -0
  289. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/utils/criterions.py +0 -0
  290. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/utils/data.py +0 -0
  291. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/utils/model.py +0 -0
  292. {weightslab-1.3.3/weightslab/examples/utils/baseline_models/pytorch → weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils}/__init__.py +0 -0
  293. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-generation/config.yaml +0 -0
  294. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-generation/main.py +0 -0
  295. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0000f77c-6257be58.jpg +0 -0
  296. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/000f8d37-d4c09a0f.jpg +0 -0
  297. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00a0f008-a315437f.jpg +0 -0
  298. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00c12bd0-bb46e479.jpg +0 -0
  299. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00c29c52-f9524f1e.jpg +0 -0
  300. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00ce6f6d-50bbee62.jpg +0 -0
  301. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00d1bafa-1b47b41c.jpg +0 -0
  302. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00d7268f-fd4487be.jpg +0 -0
  303. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00f0dd0f-5e9c9557.jpg +0 -0
  304. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0a0d7f4c-ac5c3c8f.jpg +0 -0
  305. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0a1f4fce-f9cac880.jpg +0 -0
  306. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0a3bb2d8-c195d91e.jpg +0 -0
  307. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1cac6a7-04e33135.jpg +0 -0
  308. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1ceb32e-3f481b43.jpg +0 -0
  309. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1d10d08-5b108225.jpg +0 -0
  310. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1d22449-15fb948f.jpg +0 -0
  311. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1d7b3ac-5af8623b.jpg +0 -0
  312. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1dce572-c6a8cb5e.jpg +0 -0
  313. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1e1a7b8-0aec80e8.jpg +0 -0
  314. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1e8ad72-c3c79240.jpg +0 -0
  315. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1ee702d-0ae1fc10.jpg +0 -0
  316. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1f0efd9-37a14dda.jpg +0 -0
  317. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b2a0648b-d8e126bc.jpg +0 -0
  318. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b2b70230-bad4ff6e.jpg +0 -0
  319. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0000f77c-6257be58.png +0 -0
  320. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/000f8d37-d4c09a0f.png +0 -0
  321. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00a0f008-a315437f.png +0 -0
  322. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00c12bd0-bb46e479.png +0 -0
  323. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00c29c52-f9524f1e.png +0 -0
  324. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00ce6f6d-50bbee62.png +0 -0
  325. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00d1bafa-1b47b41c.png +0 -0
  326. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00d7268f-fd4487be.png +0 -0
  327. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00f0dd0f-5e9c9557.png +0 -0
  328. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0a0d7f4c-ac5c3c8f.png +0 -0
  329. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0a1f4fce-f9cac880.png +0 -0
  330. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0a3bb2d8-c195d91e.png +0 -0
  331. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1cac6a7-04e33135.png +0 -0
  332. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1ceb32e-3f481b43.png +0 -0
  333. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1d10d08-5b108225.png +0 -0
  334. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1d22449-15fb948f.png +0 -0
  335. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1d7b3ac-5af8623b.png +0 -0
  336. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1dce572-c6a8cb5e.png +0 -0
  337. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1e1a7b8-0aec80e8.png +0 -0
  338. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1e8ad72-c3c79240.png +0 -0
  339. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1ee702d-0ae1fc10.png +0 -0
  340. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1f0efd9-37a14dda.png +0 -0
  341. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b2a0648b-d8e126bc.png +0 -0
  342. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b2b70230-bad4ff6e.png +0 -0
  343. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/config.yaml +0 -0
  344. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/utils/criterions.py +0 -0
  345. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/utils/data.py +0 -0
  346. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/utils/model.py +0 -0
  347. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Ultralytics/wl-detection/main.py +0 -0
  348. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/README.md +0 -0
  349. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/config.yaml +0 -0
  350. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/main.py +0 -0
  351. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/utils/criterions.py +0 -0
  352. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/utils/data.py +0 -0
  353. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/utils/model.py +0 -0
  354. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/README.md +0 -0
  355. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/config.yaml +0 -0
  356. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/main.py +0 -0
  357. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/criterions.py +0 -0
  358. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/data.py +0 -0
  359. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/kitti_download.py +0 -0
  360. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/model.py +0 -0
  361. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/config.yaml +0 -0
  362. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/main.py +0 -0
  363. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/criterions.py +0 -0
  364. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/data.py +0 -0
  365. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/model.py +0 -0
  366. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/signals.py +0 -0
  367. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/__init__.py +0 -0
  368. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/utils/__init__.py +0 -0
  369. {weightslab-1.3.3/weightslab/models → weightslab-1.4.0/weightslab/examples/utils/baseline_models}/__init__.py +0 -0
  370. {weightslab-1.3.3/weightslab/modules → weightslab-1.4.0/weightslab/examples/utils/baseline_models/pytorch}/__init__.py +0 -0
  371. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/utils/baseline_models/pytorch/models.py +0 -0
  372. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/__init__.py +0 -0
  373. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/_utils.py +0 -0
  374. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/collate.py +0 -0
  375. {weightslab-1.3.3/weightslab/proto → weightslab-1.4.0/weightslab/models}/__init__.py +0 -0
  376. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/models/model_with_ops.py +0 -0
  377. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/models/monkey_patcher.py +0 -0
  378. {weightslab-1.3.3/weightslab/trainer → weightslab-1.4.0/weightslab/modules}/__init__.py +0 -0
  379. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/modules/modules_with_ops.py +0 -0
  380. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/modules/neuron_ops.py +0 -0
  381. {weightslab-1.3.3/weightslab/trainer/services → weightslab-1.4.0/weightslab/proto}/__init__.py +0 -0
  382. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/proto/experiment_service.proto +0 -0
  383. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/security/__init__.py +0 -0
  384. {weightslab-1.3.3/weightslab/trainer/services/agent → weightslab-1.4.0/weightslab/trainer}/__init__.py +0 -0
  385. {weightslab-1.3.3/weightslab/trainer/services/utils → weightslab-1.4.0/weightslab/trainer/services}/__init__.py +0 -0
  386. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/agent.png +0 -0
  387. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/query_example.png +0 -0
  388. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/schema.png +0 -0
  389. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/intent_prompt.py +0 -0
  390. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent_service.py +0 -0
  391. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/instance_merger.py +0 -0
  392. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/model_service.py +0 -0
  393. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/utils/tools.py +0 -0
  394. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/trainer_services.py +0 -0
  395. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/trainer_tools.py +0 -0
  396. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/computational_graph.py +0 -0
  397. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/logs.py +0 -0
  398. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/modules_dependencies.py +0 -0
  399. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/plot_graph.py +0 -0
  400. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/shape_prop.py +0 -0
  401. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/__init__.py +0 -0
  402. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/grpc_watchdog.py +0 -0
  403. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/lock_monitor.py +0 -0
  404. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/log_level.py +0 -0
  405. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/watchdog.py +0 -0
  406. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/dependency_links.txt +0 -0
  407. {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/top_level.txt +0 -0
@@ -221,7 +221,7 @@ jobs:
221
221
  run: |
222
222
  export WEIGHTSLAB_LOG_LEVEL="DEBUG"
223
223
  # A per-test timeout guards against any regression that hangs a test.
224
- python -m pytest ./tests -v --timeout=300
224
+ python -m pytest ./tests -v --timeout=600
225
225
 
226
226
  build-and-publish-dev:
227
227
  # Only publish to TestPyPI when pushing to main (not on PRs or dev branch pushes).
@@ -7,9 +7,25 @@ on:
7
7
 
8
8
  jobs:
9
9
  # ── Routing ───────────────────────────────────────────────────────────────
10
- # Detect whether the tagged commit lives on main (→ PyPI production release)
11
- # or anywhere else ( TestPyPI pre-release). All downstream jobs branch on
12
- # this output so only the correct path runs.
10
+ # Two independent signals decide what runs, checked in this priority order:
11
+ # 1. is_dev_release: the tag NAME contains "dev" (e.g. v1.3.1-dev0)
12
+ # ALWAYS true in that case, regardless of which branch/commit is
13
+ # tagged. Always publishes to TestPyPI + a GitHub pre-release.
14
+ # 2. is_main: only considered when the name does NOT contain "dev", and
15
+ # requires the tag's commit to actually be an ancestor of main. This is
16
+ # a safety gate: a non-dev-named tag cut from a branch other than main
17
+ # must never auto-publish a real PyPI release under a "real" version
18
+ # number just because someone forgot the branch they were on.
19
+ # A non-dev-named tag whose commit is NOT on main matches neither and
20
+ # triggers nothing at all (should_run=false) — accidental/misplaced tags
21
+ # never release.
22
+ #
23
+ # This used to check "is the commit an ancestor of main" FIRST, which
24
+ # silently routed a dev-named tag to the main/PyPI pipeline whenever dev and
25
+ # main happened to be in sync (e.g. right after a merge) — the ancestor
26
+ # check won out over the "dev" in the tag name. Checking the name first
27
+ # fixes that, while still keeping the ancestor check as the guard for the
28
+ # non-dev path.
13
29
  detect-target:
14
30
  name: Detect release target
15
31
  runs-on: ubuntu-latest
@@ -23,33 +39,39 @@ jobs:
23
39
  with:
24
40
  fetch-depth: 0
25
41
 
26
- - name: Check whether the tag commit is on main
42
+ - name: Check the release target
27
43
  id: check
28
44
  run: |
29
- git fetch origin main
30
- TAG_COMMIT="$(git rev-list -n 1 "${GITHUB_REF}")"
31
- IS_ON_MAIN=$(git merge-base --is-ancestor "${TAG_COMMIT}" origin/main \
32
- && echo "true" || echo "false")
33
- echo "is_main=${IS_ON_MAIN}" >> $GITHUB_OUTPUT
34
-
35
- # Dev pre-release: a tag NOT on main whose name contains 'dev'
36
- # (e.g. v1.3.1-dev0). Runs the full pipeline up to the TestPyPI install
37
- # tests + a GitHub pre-release, then STOPS before the production PyPI
38
- # publish. A tag off main WITHOUT 'dev' triggers nothing (should_run=false),
39
- # so accidental/non-dev tags on dev never release.
40
45
  IS_DEV_RELEASE=false
41
- if [ "${IS_ON_MAIN}" != "true" ] && [[ "${GITHUB_REF_NAME}" == *dev* ]]; then
46
+ if [[ "${GITHUB_REF_NAME}" == *dev* ]]; then
42
47
  IS_DEV_RELEASE=true
43
48
  fi
44
49
  echo "is_dev_release=${IS_DEV_RELEASE}" >> $GITHUB_OUTPUT
45
50
 
46
- if [ "${IS_ON_MAIN}" = "true" ] || [ "${IS_DEV_RELEASE}" = "true" ]; then
51
+ # Only a non-dev-named tag needs the ancestor check at all -- a
52
+ # dev-named tag is never a main release, no matter where it sits.
53
+ IS_MAIN=false
54
+ if [ "${IS_DEV_RELEASE}" != "true" ]; then
55
+ git fetch origin main
56
+ TAG_COMMIT="$(git rev-list -n 1 "${GITHUB_REF}")"
57
+ if git merge-base --is-ancestor "${TAG_COMMIT}" origin/main; then
58
+ IS_MAIN=true
59
+ fi
60
+ fi
61
+ echo "is_main=${IS_MAIN}" >> $GITHUB_OUTPUT
62
+
63
+ if [ "${IS_DEV_RELEASE}" = "true" ] || [ "${IS_MAIN}" = "true" ]; then
47
64
  SHOULD_RUN=true
48
65
  else
49
66
  SHOULD_RUN=false
50
67
  fi
51
68
  echo "should_run=${SHOULD_RUN}" >> $GITHUB_OUTPUT
52
- echo "Tag: ${GITHUB_REF_NAME} commit: ${TAG_COMMIT} on_main: ${IS_ON_MAIN} dev_release: ${IS_DEV_RELEASE} should_run: ${SHOULD_RUN}"
69
+
70
+ echo "Tag: ${GITHUB_REF_NAME} is_main: ${IS_MAIN} dev_release: ${IS_DEV_RELEASE} should_run: ${SHOULD_RUN}"
71
+ if [ "${SHOULD_RUN}" != "true" ]; then
72
+ echo "::warning::Tag '${GITHUB_REF_NAME}' has no 'dev' in its name and its commit is not on main — skipping release entirely."
73
+ fi
74
+
53
75
 
54
76
  # ── Shared: run tests before any publish (main or dev pre-release) ────────
55
77
  test:
@@ -79,6 +101,7 @@ jobs:
79
101
  python -m pip install pytorch_lightning
80
102
  python -m unittest discover -s ./tests -p "test_*.py" -t . -v
81
103
 
104
+
82
105
  # ═══════════════════════════════════════════════════════════════════════════
83
106
  # DEV RELEASE — tag on dev branch, not yet merged to main
84
107
  # Publishes to TestPyPI and creates a GitHub pre-release.
@@ -86,7 +109,8 @@ jobs:
86
109
 
87
110
  build-and-publish-dev-release:
88
111
  name: Build & Publish Dev Release (TestPyPI)
89
- needs: [detect-target,test]
112
+ # needs: [detect-target,test]
113
+ needs: [detect-target]
90
114
  runs-on: ubuntu-latest
91
115
  if: ${{ needs.detect-target.outputs.should_run == 'true' }}
92
116
  permissions:
@@ -102,6 +126,55 @@ jobs:
102
126
  with:
103
127
  python-version: '3.11'
104
128
 
129
+ - uses: actions/setup-node@v4
130
+ with:
131
+ node-version: '20'
132
+
133
+ - name: Build and vendor Weights Studio UI
134
+ env:
135
+ # weights_studio is a separate PRIVATE repo — the automatic
136
+ # secrets.GITHUB_TOKEN is scoped to THIS repo only and has no access
137
+ # to it, so the clone below must authenticate with a real
138
+ # cross-repo PAT instead.
139
+ WEIGHTS_STUDIO_TOKEN: ${{ secrets.WEIGHTS_STUDIO_API_TOKEN }}
140
+ IS_DEV_RELEASE: ${{ needs.detect-target.outputs.is_dev_release }}
141
+ run: |
142
+ set -euo pipefail
143
+
144
+ if [ -z "${WEIGHTS_STUDIO_TOKEN:-}" ]; then
145
+ echo "WEIGHTS_STUDIO_API_TOKEN secret is not set; cannot access the private weights_studio repo." >&2
146
+ exit 1
147
+ fi
148
+ CLONE_URL="https://x-access-token:${WEIGHTS_STUDIO_TOKEN}@github.com/GrayboxTech/weights_studio.git"
149
+
150
+ # Mirror the weightslab tag routing: a dev-named tag vendors the
151
+ # weights_studio "dev" branch; every other tag vendors main. No
152
+ # ls-remote probe -- it added a flaky network round-trip and a
153
+ # branch that's known to exist. This used to guess the ref from
154
+ # which weightslab branches happened to contain the tagged commit
155
+ # -- fragile, and NOT tied to is_dev_release, so it could silently
156
+ # vendor the wrong UI.
157
+ UI_REF="main"
158
+ if [ "${IS_DEV_RELEASE}" = "true" ]; then
159
+ UI_REF="dev"
160
+ fi
161
+ echo "Using weights_studio ref: ${UI_REF}"
162
+
163
+ rm -rf /tmp/weights_studio
164
+ git clone --depth 1 --branch "${UI_REF}" "${CLONE_URL}" /tmp/weights_studio
165
+
166
+ pushd /tmp/weights_studio >/dev/null
167
+ npm ci
168
+ npm test
169
+ npm run build
170
+ popd >/dev/null
171
+
172
+ rm -rf weightslab/ui/static
173
+ mkdir -p weightslab/ui/static
174
+ cp -R /tmp/weights_studio/dist/. weightslab/ui/static/
175
+
176
+ test -f weightslab/ui/static/index.html
177
+
105
178
  - name: Install build tools
106
179
  run: python -m pip install --upgrade pip build twine
107
180
 
@@ -456,6 +529,43 @@ jobs:
456
529
  with:
457
530
  python-version: '3.11'
458
531
 
532
+ - uses: actions/setup-node@v4
533
+ with:
534
+ node-version: '20'
535
+
536
+ - name: Build and vendor Weights Studio UI
537
+ env:
538
+ # weights_studio is a separate PRIVATE repo — the automatic
539
+ # secrets.GITHUB_TOKEN is scoped to THIS repo only and has no access
540
+ # to it, so the clone below must authenticate with a real
541
+ # cross-repo PAT instead.
542
+ WEIGHTS_STUDIO_TOKEN: ${{ secrets.WEIGHTS_STUDIO_API_TOKEN }}
543
+ run: |
544
+ set -euo pipefail
545
+
546
+ if [ -z "${WEIGHTS_STUDIO_TOKEN:-}" ]; then
547
+ echo "WEIGHTS_STUDIO_API_TOKEN secret is not set; cannot access the private weights_studio repo." >&2
548
+ exit 1
549
+ fi
550
+ CLONE_URL="https://x-access-token:${WEIGHTS_STUDIO_TOKEN}@github.com/GrayboxTech/weights_studio.git"
551
+ UI_REF="main"
552
+ echo "Using weights_studio ref: ${UI_REF}"
553
+
554
+ rm -rf /tmp/weights_studio
555
+ git clone --depth 1 --branch "${UI_REF}" "${CLONE_URL}" /tmp/weights_studio
556
+
557
+ pushd /tmp/weights_studio >/dev/null
558
+ npm ci
559
+ npm test
560
+ npm run build
561
+ popd >/dev/null
562
+
563
+ rm -rf weightslab/ui/static
564
+ mkdir -p weightslab/ui/static
565
+ cp -R /tmp/weights_studio/dist/. weightslab/ui/static/
566
+
567
+ test -f weightslab/ui/static/index.html
568
+
459
569
  - name: Install build tools
460
570
  run: python -m pip install --upgrade pip build twine
461
571
 
@@ -3,13 +3,22 @@ weightslab.egg-info
3
3
  build
4
4
  agents
5
5
 
6
+ # UI dirs — built SPA artifacts, regenerated by `npm run build` / build:embed;
7
+ # never committed (the wheel embeds them at build time).
6
8
  dist
9
+ static
10
+ weightslab/ui/static/
11
+
12
+ # Ignore files and directories generated by Python
7
13
  logs
8
14
  root_log_dir
9
15
  __pycache__
10
16
  venv
11
17
  runs
12
18
  data
19
+ outputs
20
+ !./tests/data/
21
+ !./weightslab/data/
13
22
  MagicMock
14
23
  drop
15
24
  htmlcov
@@ -59,11 +59,12 @@ experiment becomes inspectable/editable; Weights Studio is the UI for that.
59
59
  **Wire path (the thing that breaks most often):**
60
60
 
61
61
  ```
62
- Browser (Vite app)Envoy :8080 (grpc-web grpc) → Python gRPC servicer → training loop
62
+ Browser → weightslab start :8080 (grpc-web grpc proxy) → Python gRPC servicer → training loop
63
63
  ```
64
64
 
65
- - The browser cannot speak raw gRPC, so **Envoy** transcodes grpc-web gRPC.
66
- If Envoy is down or misconfigured, the UI loads but no data appears.
65
+ - `weightslab start` is a pure-Python HTTP server that serves the bundled SPA
66
+ and translates grpc-web (browser) to raw gRPC (backend). No Docker, no Envoy.
67
+ If `weightslab start` is not running, the browser has no UI to load.
67
68
  - The gRPC servicer and the training loop run in the **same process, different
68
69
  threads**, coordinated by locks in
69
70
  `weightslab/weightslab/components/global_monitoring.py`.
@@ -88,13 +89,19 @@ wl.serve(serving_grpc=True, serving_cli=True) # background threads, same proce
88
89
  wl.keep_serving() # keep the process alive for the UI
89
90
  ```
90
91
 
91
- Then start the studio stack (Envoy + frontend) and open it in a browser.
92
+ Then start the UI in another terminal and open it in a browser:
93
+
94
+ ```bash
95
+ weightslab start # serves at http://localhost:8080 by default
96
+ ```
97
+
92
98
  Working starting points live in
93
99
  `weightslab/weightslab/examples/{PyTorch,Lightning,Usecases}/<usecase>/`
94
100
  (each is a `main.py` + `config.yaml`) — find the closest example and mirror it.
95
101
 
96
- Studio deployment details (Docker compose, Envoy, ports, certs) are in
97
- `weights_studio/docker/` and documented in `weightslab/docs/weights_studio.rst`.
102
+ UI deployment details (port, TLS, certs) are documented in
103
+ `weightslab/docs/weights_studio.rst`. TLS is opt-in: run `weightslab se` once,
104
+ then `weightslab start --certs`.
98
105
 
99
106
  ---
100
107
 
@@ -138,10 +145,10 @@ ones when debugging:
138
145
  | Variable | Default | Why you touch it |
139
146
  |---|---|---|
140
147
  | `WEIGHTSLAB_LOG_LEVEL` | `INFO` | Set `DEBUG` to see what's happening. (`WATCHDOG` level sits between WARNING/ERROR.) |
141
- | `GRPC_BACKEND_HOST` / `GRPC_BACKEND_PORT` | `0.0.0.0` / `50051` | Backend must listen where Envoy expects it. |
142
- | `GRPC_TLS_ENABLED` | `1` | TLS on the gRPC socket. Set `0` **only** for isolated local debugging. |
143
- | `GRPC_TLS_REQUIRE_CLIENT_AUTH` | `1` | mTLS. Must match what Envoy presents. |
144
- | `GRPC_TLS_CERT_DIR` | `~/certs` | Where default cert files are looked up. |
148
+ | `GRPC_BACKEND_HOST` / `GRPC_BACKEND_PORT` | `0.0.0.0` / `50051` | Backend gRPC bind address. |
149
+ | `GRPC_TLS_ENABLED` | `0` | TLS on the gRPC socket. Set `1` with `weightslab start --certs`. |
150
+ | `GRPC_TLS_REQUIRE_CLIENT_AUTH` | `0` | mTLS. Must match what `weightslab start --certs` presents. |
151
+ | `WEIGHTSLAB_CERTS_DIR` | `~/.weightslab-certs` | Where cert files are looked up (single source of truth). |
145
152
  | `GRPC_AUTH_TOKEN` | *(unset)* | Optional metadata-token auth on top of mTLS. |
146
153
  | `GRPC_MAX_MESSAGE_BYTES` | `268435456` (256 MB) | Raise it if large tensors/image batches fail. |
147
154
  | `WEIGHTSLAB_DISABLE_WATCHDOGS` | `0` | Set `1` when debugging with breakpoints (see §5). |
@@ -151,7 +158,7 @@ ones when debugging:
151
158
 
152
159
  | Variable | Default | Why you touch it |
153
160
  |---|---|---|
154
- | `WS_SERVER_HOST` / `WS_SERVER_PORT` / `WS_SERVER_PROTOCOL` | `localhost` / `8080` / `https` | How the browser reaches the backend (via Envoy). The #1 connection-issue knob. |
161
+ | `WS_SERVER_HOST` / `WS_SERVER_PORT` / `WS_SERVER_PROTOCOL` | `localhost` / `8080` / `http` | How the browser reaches the `weightslab start` server. The #1 connection-issue knob. |
155
162
  | `WS_HISTOGRAM_MAX_BINS` | `512` | Cap on metadata histogram bars. |
156
163
  | `BB_THUMB_RENDER` | `10` | Max bounding boxes drawn per **thumbnail**, per overlay (GT and PRED capped independently). |
157
164
  | `BB_MODAL_RENDER` | `100` | Max bounding boxes drawn per **modal** image, per overlay. A `?` button in the modal shows the active limit. |
@@ -161,11 +168,10 @@ ones when debugging:
161
168
  | `ENABLE_AGENT` | `1` | `0`/`false` removes the agent chat bar + history panel and stops the agent health poll. |
162
169
 
163
170
  > **VITE_ vs WS_/BB_/ENABLE_:** `VITE_*` variables are baked at **build time**
164
- > (changing them needs a rebuild). `WS_*` / `BB_*` / `ENABLE_*` are injected at
165
- > **container start** into `config.js` and read as `window.*` globals (the
166
- > toggles as `window.WS_ENABLE_*`) — changing them needs only a container restart
167
- > + browser reload (see the caching note in §5). Each `ENABLE_*` defaults to on;
168
- > set it to `0`/`false`/`no`/`off` to disable. Full reference:
171
+ > (changing them needs a frontend rebuild). `WS_*` / `BB_*` / `ENABLE_*` are
172
+ > injected into `config.js` at `weightslab start` time and read as `window.*`
173
+ > globals — changing them needs only a restart + browser reload. Each `ENABLE_*`
174
+ > defaults to on; set it to `0`/`false`/`no`/`off` to disable. Full reference:
169
175
  > `weightslab/docs/configuration.rst` (“Feature toggles”).
170
176
 
171
177
  ---
@@ -177,19 +183,15 @@ distilled from issues hit in development).
177
183
 
178
184
  **UI loads but the sample grid is empty / "failed to fetch" / gRPC errors.**
179
185
  The wire path (§1) is broken somewhere. Check in order: (1) backend actually
180
- serving on `0.0.0.0:50051`; (2) Envoy running and reachable on `:8080`;
181
- (3) frontend `WS_SERVER_HOST/PORT/PROTOCOL` point at Envoy, not the raw backend;
182
- (4) **TLS mismatch** `WS_SERVER_PROTOCOL=https` vs `http`, Envoy server certs,
183
- and Envoy→backend mTLS certs all consistent. For local debugging you can drop
184
- TLS end-to-end (`GRPC_TLS_ENABLED=0` + `VITE_SERVER_PROTOCOL=http`).
186
+ serving on `0.0.0.0:50051`; (2) `weightslab start` is running and the browser
187
+ can reach it on `:8080`; (3) **TLS mismatch** if using `--certs` run
188
+ `weightslab se` first and export `WEIGHTSLAB_CERTS_DIR`. For local debugging
189
+ drop TLS entirely (omit `--certs`; `GRPC_TLS_ENABLED=0`).
185
190
 
186
191
  **Changed an env var, restarted, but the UI still uses the old value.**
187
192
  - `VITE_*` is build-time → you must **rebuild** the frontend, not just restart.
188
- - `WS_*` / `BB_*` are read once per page load → you must **reload the tab**.
189
- - Historically `config.js` was served `Cache-Control: immutable` so even a
190
- restart needed a **hard refresh**; current builds serve `/config.js` with
191
- `no-store`, so a container restart + normal reload is enough. On an older
192
- deployment, hard-refresh (Ctrl+Shift+R) or clear cache.
193
+ - `WS_*` / `BB_*` / `ENABLE_*` are injected at `weightslab start` time → you
194
+ must **restart `weightslab start`** then reload the tab.
193
195
 
194
196
  **Sample grid flashes empty cells when auto-refresh fires.**
195
197
  An auto-refresh (timer or manual) that lands while a `GetDataSamples` grid fetch
@@ -247,7 +249,8 @@ OpenRouter** initialized from the UI via `/init` (then `/model` to switch,
247
249
  - `grid_data/` — grid + modal rendering (`GridCell.ts`, `DataImageService.ts`,
248
250
  `gridDataManager.ts`, `BboxRenderer.ts`, `SegmentationRenderer.ts`,
249
251
  `PointCloudViewer.ts`).
250
- - `docker/` — compose, `nginx-entrypoint.sh` (injects `config.js`), Envoy assets.
252
+ - `ui/` — `server.py` (pure-Python HTTP + gRPC-Web proxy), `static/` (bundled SPA),
253
+ `utils/` (cert-generation scripts, sync-frontend helper).
251
254
 
252
255
  **Docs:** `weightslab/docs/` (Sphinx) — `configuration.rst` (all env vars),
253
256
  `weights_studio.rst` (studio deploy + agent), `quickstart.rst`, `grpc/`.
@@ -257,7 +260,7 @@ OpenRouter** initialized from the UI via `/init` (then `/model` to switch,
257
260
  ## 7. For contributors (working in a checkout)
258
261
 
259
262
  - **The two repos must sit side by side** (`…/weightslab`, `…/weights_studio`);
260
- codegen and Envoy configs reach across by relative path.
263
+ proto codegen scripts reach across by relative path.
261
264
  - **Editing the proto is cross-repo** — do all of: edit
262
265
  `experiment_service.proto`; regenerate Python stubs from the repo root; run
263
266
  `npm run generate-proto:data` in weights_studio. Editing one side only leaves
@@ -0,0 +1 @@
1
+ # Changelog - 2026-07-23 v1.4.0 (0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: weightslab
3
- Version: 1.3.3
3
+ Version: 1.4.0
4
4
  Summary: Paving the way between black-box and white-box modeling.
5
5
  Author-email: Alexandru-Andrei Rotaru <alexandru@graybx.com>, Guillaue Pelluet <guillaue@graybx.com>
6
6
  License: BSD 2-clause
@@ -13,9 +13,8 @@ Classifier: Programming Language :: Python :: 3.10
13
13
  Requires-Python: >=3.10
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
- Requires-Dist: numpy<2.0,>=1.25.2; python_version < "3.13"
17
- Requires-Dist: numpy<3,>=2.1; python_version >= "3.13"
18
- Requires-Dist: pandas<3,>=2.2.3
16
+ Requires-Dist: numpy<3,>=1.24
17
+ Requires-Dist: pandas<3,>=2.2.2
19
18
  Requires-Dist: duckdb<2,>=1.1
20
19
  Requires-Dist: PyYAML<7,>=6.0.3
21
20
  Requires-Dist: dill<0.5,>=0.3.8
@@ -23,13 +22,11 @@ Requires-Dist: zstandard<1,>=0.22
23
22
  Requires-Dist: h5py<4,>=3.10
24
23
  Requires-Dist: xxhash<4.1,>=3.4
25
24
  Requires-Dist: tables<4,>=3.9
26
- Requires-Dist: torch<2.9,>=2.1; python_version < "3.13"
27
- Requires-Dist: torch==2.9; python_version >= "3.13"
28
- Requires-Dist: torchvision<0.24,>=0.16; python_version < "3.13"
29
- Requires-Dist: torchvision<1,>=0.24; python_version >= "3.13"
25
+ Requires-Dist: torch<=2.9,>=2.1
26
+ Requires-Dist: torchvision<1,>=0.16
30
27
  Requires-Dist: torchmetrics>=1.9
31
28
  Requires-Dist: grpcio<2,>=1.80
32
- Requires-Dist: protobuf<7,>=4.25
29
+ Requires-Dist: protobuf<8,>=5.28.1
33
30
  Requires-Dist: pydantic<3,>=2.7
34
31
  Requires-Dist: Pillow<12,>=10
35
32
  Requires-Dist: graphviz<1,>=0.20
@@ -105,13 +102,18 @@ Most data problems are invisible until your model tells you: through loss spikes
105
102
  ## Quickstart
106
103
 
107
104
  ![Python](https://img.shields.io/badge/Python-v3.10--v3.14-5865F2?style=flat&logo=python&logoColor=white)
108
- ![Docker](https://img.shields.io/badge/Docker-v4-0db7ed?style=flat&logo=docker&logoColor=white)
109
105
 
110
106
  **1. Install**
111
107
  ```bash
112
108
  pip install weightslab
113
109
  ```
114
- **2. Wrap your training script**
110
+
111
+ **2. Launch the Studio**
112
+ ```bash
113
+ weightslab start
114
+ ```
115
+
116
+ **3.a. Wrap your training script locally**
115
117
  ```python
116
118
  # wrap the objects in your training script
117
119
 
@@ -125,14 +127,14 @@ loader = wl.watch_or_edit(dataset, flag='data', loader_name="train")
125
127
  wl.serve(serving_grpc=True, serving_cli=False)
126
128
  ...
127
129
  ```
128
- **3. Launch Studio**
129
- ```bash
130
- weightslab ui launch # then open https://localhost:5173 🚀
131
- ```
132
- <br>
133
130
 
134
- For a detailed installation guide and advanced configuration &rarr; [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
131
+ **3.b. Or in the cloud**
132
+
133
+ [![Start coding with GCollab](https://img.shields.io/badge/Start_coding_with_GCollab-F9AB00?style=for-the-badge&logo=googlecolab&logoColor=white)](https://colab.research.google.com/github/GrayboxTech/weightslab/blob/main/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb)
135
134
 
135
+
136
+ <br>
137
+ For a detailed installation guide and advanced configuration &rarr; [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
136
138
  <br>
137
139
 
138
140
  > [!TIP]
@@ -143,8 +145,9 @@ For a detailed installation guide and advanced configuration &rarr; [Installatio
143
145
  > weightslab start example --seg # segmentation
144
146
  > weightslab start example --det # detection
145
147
  > weightslab start example --clus # clustering
146
- > weightslab start example --gen # generation
147
148
  > ```
149
+ >
150
+ > Explore our [sandbox](www.sandbox.graybx.com).
148
151
 
149
152
  <br>
150
153
 
@@ -176,10 +179,10 @@ For a detailed installation guide and advanced configuration &rarr; [Installatio
176
179
  3. **Run your script, then launch the UI in a separate terminal:**
177
180
  ```bash
178
181
  python train.py
179
- weightslab ui launch
182
+ weightslab start
180
183
  ```
181
184
 
182
- 4. **Open your browser** `https://localhost:5173` and inspect your training in real time.
185
+ 4. **Open your browser** at the URL printed by `weightslab start` and inspect your training in real time.
183
186
 
184
187
  </details>
185
188
 
@@ -375,9 +378,8 @@ Find our documentation [online](https://grayboxtech.github.io/weightslab/latest/
375
378
 
376
379
  New here (human or AI coding agent)? Start with [AGENTS.md](AGENTS.md) — it
377
380
  captures the cross-repo architecture (weightslab backend ↔ weights_studio
378
- frontend via the shared proto), the module maps, the `wl.watch_or_edit`
379
- integration pattern, where tests live, and the gotchas that aren't obvious from
380
- any single file. It's the fastest way to orient before a first change.
381
+ frontend via the shared proto), the module maps, the integration pattern, where tests live, and the gotchas that aren't obvious from
382
+ any single file. It's the fastest way to orient before a first change and contribution.
381
383
 
382
384
  </details>
383
385
 
@@ -46,13 +46,18 @@ Most data problems are invisible until your model tells you: through loss spikes
46
46
  ## Quickstart
47
47
 
48
48
  ![Python](https://img.shields.io/badge/Python-v3.10--v3.14-5865F2?style=flat&logo=python&logoColor=white)
49
- ![Docker](https://img.shields.io/badge/Docker-v4-0db7ed?style=flat&logo=docker&logoColor=white)
50
49
 
51
50
  **1. Install**
52
51
  ```bash
53
52
  pip install weightslab
54
53
  ```
55
- **2. Wrap your training script**
54
+
55
+ **2. Launch the Studio**
56
+ ```bash
57
+ weightslab start
58
+ ```
59
+
60
+ **3.a. Wrap your training script locally**
56
61
  ```python
57
62
  # wrap the objects in your training script
58
63
 
@@ -66,14 +71,14 @@ loader = wl.watch_or_edit(dataset, flag='data', loader_name="train")
66
71
  wl.serve(serving_grpc=True, serving_cli=False)
67
72
  ...
68
73
  ```
69
- **3. Launch Studio**
70
- ```bash
71
- weightslab ui launch # then open https://localhost:5173 🚀
72
- ```
73
- <br>
74
74
 
75
- For a detailed installation guide and advanced configuration &rarr; [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
75
+ **3.b. Or in the cloud**
76
+
77
+ [![Start coding with GCollab](https://img.shields.io/badge/Start_coding_with_GCollab-F9AB00?style=for-the-badge&logo=googlecolab&logoColor=white)](https://colab.research.google.com/github/GrayboxTech/weightslab/blob/main/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb)
76
78
 
79
+
80
+ <br>
81
+ For a detailed installation guide and advanced configuration &rarr; [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
77
82
  <br>
78
83
 
79
84
  > [!TIP]
@@ -84,8 +89,9 @@ For a detailed installation guide and advanced configuration &rarr; [Installatio
84
89
  > weightslab start example --seg # segmentation
85
90
  > weightslab start example --det # detection
86
91
  > weightslab start example --clus # clustering
87
- > weightslab start example --gen # generation
88
92
  > ```
93
+ >
94
+ > Explore our [sandbox](www.sandbox.graybx.com).
89
95
 
90
96
  <br>
91
97
 
@@ -117,10 +123,10 @@ For a detailed installation guide and advanced configuration &rarr; [Installatio
117
123
  3. **Run your script, then launch the UI in a separate terminal:**
118
124
  ```bash
119
125
  python train.py
120
- weightslab ui launch
126
+ weightslab start
121
127
  ```
122
128
 
123
- 4. **Open your browser** `https://localhost:5173` and inspect your training in real time.
129
+ 4. **Open your browser** at the URL printed by `weightslab start` and inspect your training in real time.
124
130
 
125
131
  </details>
126
132
 
@@ -316,9 +322,8 @@ Find our documentation [online](https://grayboxtech.github.io/weightslab/latest/
316
322
 
317
323
  New here (human or AI coding agent)? Start with [AGENTS.md](AGENTS.md) — it
318
324
  captures the cross-repo architecture (weightslab backend ↔ weights_studio
319
- frontend via the shared proto), the module maps, the `wl.watch_or_edit`
320
- integration pattern, where tests live, and the gotchas that aren't obvious from
321
- any single file. It's the fastest way to orient before a first change.
325
+ frontend via the shared proto), the module maps, the integration pattern, where tests live, and the gotchas that aren't obvious from
326
+ any single file. It's the fastest way to orient before a first change and contribution.
322
327
 
323
328
  </details>
324
329
 
@@ -23,5 +23,6 @@ agent:
23
23
  # openrouter_api_key: <your_openrouter_api_key> # Open router API key (can also be set as env variable OPENROUTER_API_KEY)
24
24
  # openrouter_base_url: https://openrouter.ai/api/v1 # Open router base URL (can also be set as env variable OPENROUTER_BASE_URL)
25
25
  # openrouter_request_timeout: 15.0 # Timeout for OpenRouter API requests in seconds (can also be set as env variable OPENROUTER_REQUEST_TIMEOUT)
26
+ # openrouter_max_tokens: 2048 # Max completion length. OpenRouter reserves max_tokens*price against the key budget BEFORE generating, so an uncapped value can 402 ("more credits, or fewer max_tokens") on a credit/weekly-limited key. Raise only if responses get truncated (env: OPENROUTER_MAX_TOKENS)
26
27
  # openrouter_provider_sort: throughput # Bias OpenRouter's upstream routing to avoid slow providers: 'throughput' | 'latency' | 'price'. Empty string = let OpenRouter choose (env: OPENROUTER_PROVIDER_SORT)
27
28
  # openrouter_structured_output: false # Ask the model for a schema-validated plan directly (skips free-form JSON + regex repair). More reliable, but only works on models whose OpenRouter route supports structured/JSON-schema output (e.g. Gemini, GPT-4o). env: OPENROUTER_STRUCTURED_OUTPUT=1
@@ -20,7 +20,7 @@
20
20
  desc: 'CNN digit classifier on MNIST. Register hyperparameters, monitor per-sample loss, and use the deny-aware sampler to focus on hard examples.',
21
21
  tags: ['classification', 'supervised', 'mnist', 'cnn'],
22
22
  url: 'examples/pytorch/classification.html',
23
- colab: COLAB + 'PyTorch/ws-classification.ipynb'
23
+ colab: COLAB + 'PyTorch/wl-classification.ipynb'
24
24
  },
25
25
  {
26
26
  badge: 'PyTorch', color: 'pytorch',
@@ -28,7 +28,7 @@
28
28
  desc: 'Per-pixel semantic segmentation with a UNet. Track per-sample IoU and visualise mask overlays directly in the studio.',
29
29
  tags: ['segmentation', 'semantic', 'bdd100k', 'masks', 'dense prediction'],
30
30
  url: 'examples/pytorch/segmentation.html',
31
- colab: COLAB + 'PyTorch/ws-segmentation.ipynb'
31
+ colab: COLAB + 'PyTorch/wl-segmentation.ipynb'
32
32
  },
33
33
  {
34
34
  badge: 'PyTorch', color: 'pytorch',
@@ -36,7 +36,7 @@
36
36
  desc: 'Bounding-box detection on Penn-Fudan pedestrians. Per-instance multi-index dataframe with (sample_id, annotation_id) keys.',
37
37
  tags: ['detection', 'object detection', 'bounding boxes', 'penn-fudan'],
38
38
  url: 'examples/pytorch/detection.html',
39
- colab: COLAB + 'PyTorch/ws-detection.ipynb'
39
+ colab: COLAB + 'PyTorch/wl-detection.ipynb'
40
40
  },
41
41
  {
42
42
  badge: 'PyTorch', color: 'pytorch',
@@ -44,7 +44,7 @@
44
44
  desc: 'Metric learning with triplet loss on face datasets. Store and explore high-dimensional embeddings per sample in the studio.',
45
45
  tags: ['clustering', 'unsupervised', 'embeddings', 'face recognition', 'metric learning'],
46
46
  url: 'examples/pytorch/clustering.html',
47
- colab: COLAB + 'PyTorch/ws-clustering.ipynb'
47
+ colab: COLAB + 'PyTorch/wl-clustering.ipynb'
48
48
  },
49
49
  {
50
50
  badge: 'PyTorch', color: 'pytorch',
@@ -52,7 +52,7 @@
52
52
  desc: 'Unsupervised anomaly detection on MVTec with a multi-task UNet. Monitor reconstruction quality and per-sample anomaly scores.',
53
53
  tags: ['anomaly detection', 'generation', 'unsupervised', 'mvtec', 'reconstruction'],
54
54
  url: 'examples/pytorch/generation.html',
55
- colab: COLAB + 'PyTorch/ws-generation.ipynb'
55
+ colab: COLAB + 'PyTorch/wl-generation.ipynb'
56
56
  },
57
57
  {
58
58
  badge: 'Lightning', color: 'lightning',
@@ -81,7 +81,7 @@
81
81
  desc: 'Dynamic subscribed signal that classifies each sample\'s loss trajectory (monotonic, U-shape, spiked, …) and auto-tags it.',
82
82
  tags: ['loss analysis', 'signal', 'categorical tag', 'per-sample', 'trajectory'],
83
83
  url: 'examples/usecases/loss_shape_classification.html',
84
- colab: COLAB + 'Usecases/ws-segmentation-loss-shapes.ipynb'
84
+ colab: COLAB + 'Usecases/wl-segmentation-loss-shapes-classification.ipynb'
85
85
  }
86
86
  ];
87
87
 
@@ -10,7 +10,7 @@
10
10
  'The studio streams signals in real-time — no need to wait for an epoch to end to see results.',
11
11
  '<code>weightslab start example --cls</code> launches a full MNIST classification demo in one command.',
12
12
  'Use <code>subscribe_to=</code> on a signal to build reactive per-sample analytics derived from other signals.',
13
- 'Run <code>weightslab ui launch --certs</code> to enable HTTPS + mTLS for secure remote studio access.',
13
+ 'Run <code>weightslab start --certs</code> to enable HTTPS + mTLS for secure remote studio access.',
14
14
  'Set <code>preload_labels=False</code> for large datasets to speed up startup; labels are loaded lazily.',
15
15
  'Use <code>array_return_proxies=True</code> (default) to avoid loading the full dataset array into RAM.',
16
16
  'Set <code>WEIGHTSLAB_LOG_LEVEL=DEBUG</code> to see full gRPC logs when debugging connectivity issues.',
@@ -82,7 +82,7 @@ exclude_patterns = [
82
82
  # Superseded by examples/pytorch/classification.rst and examples/pytorch/segmentation.rst
83
83
  "usecases.rst",
84
84
  "segmentation_usecase.rst",
85
- # Replaced by direct toctree entries usage/good_practice and usage/docker
85
+ # Replaced by direct toctree entry usage/good_practice
86
86
  "usage.rst",
87
87
  # SDK params moved into configuration.rst
88
88
  "usage/parameters.rst",