weightslab 1.3.2__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 (414) hide show
  1. weightslab-1.4.0/.coverage +0 -0
  2. {weightslab-1.3.2 → weightslab-1.4.0}/.github/workflows/ci.yml +1 -1
  3. {weightslab-1.3.2 → weightslab-1.4.0}/.github/workflows/release.yml +129 -19
  4. {weightslab-1.3.2 → weightslab-1.4.0}/.gitignore +13 -0
  5. {weightslab-1.3.2 → weightslab-1.4.0}/AGENTS.md +31 -28
  6. weightslab-1.4.0/CHANGELOG.md +1 -0
  7. {weightslab-1.3.2/weightslab.egg-info → weightslab-1.4.0}/PKG-INFO +39 -35
  8. {weightslab-1.3.2 → weightslab-1.4.0}/README.md +33 -26
  9. {weightslab-1.3.2 → weightslab-1.4.0}/agent_config.yaml +1 -0
  10. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/custom.css +29 -0
  11. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/examples-gallery.js +34 -15
  12. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/wl-ribbon.js +1 -1
  13. {weightslab-1.3.2 → weightslab-1.4.0}/docs/conf.py +1 -1
  14. {weightslab-1.3.2 → weightslab-1.4.0}/docs/configuration.rst +31 -42
  15. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/lightning/classification.rst +1 -1
  16. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/classification.rst +11 -2
  17. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/clustering.rst +11 -2
  18. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/detection.rst +11 -2
  19. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/generation.rst +11 -2
  20. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/segmentation.rst +11 -2
  21. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/ultralytics/detection.rst +1 -1
  22. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/usecases/lidar_detection.rst +3 -3
  23. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/usecases/loss_shape_classification.rst +11 -2
  24. {weightslab-1.3.2 → weightslab-1.4.0}/docs/four_way_approach.rst +2 -2
  25. {weightslab-1.3.2 → weightslab-1.4.0}/docs/index.rst +1 -2
  26. weightslab-1.4.0/docs/logger.rst +190 -0
  27. {weightslab-1.3.2 → weightslab-1.4.0}/docs/pytorch_lightning.rst +2 -2
  28. {weightslab-1.3.2 → weightslab-1.4.0}/docs/quickstart.rst +9 -14
  29. {weightslab-1.3.2 → weightslab-1.4.0}/docs/segmentation_usecase.rst +1 -1
  30. {weightslab-1.3.2 → weightslab-1.4.0}/docs/ultralytics.rst +4 -4
  31. {weightslab-1.3.2 → weightslab-1.4.0}/docs/usage/parameters.rst +10 -30
  32. {weightslab-1.3.2 → weightslab-1.4.0}/docs/usecases.rst +1 -1
  33. {weightslab-1.3.2 → weightslab-1.4.0}/docs/user_commands.rst +184 -111
  34. {weightslab-1.3.2 → weightslab-1.4.0}/docs/user_functions.rst +32 -3
  35. weightslab-1.4.0/docs/weights_studio.rst +425 -0
  36. {weightslab-1.3.2 → weightslab-1.4.0}/pyproject.toml +36 -18
  37. weightslab-1.4.0/tests/backend/test_cli.py +274 -0
  38. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_data_loader_interface.py +29 -0
  39. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_ledgers.py +43 -0
  40. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_logger_core.py +182 -1
  41. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_write_dataframe.py +35 -20
  42. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_write_history.py +101 -47
  43. {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/test_checkpoint_workflow.py +9 -27
  44. {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_grpc_user_actions.py +1 -1
  45. {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_cli.py +53 -0
  46. weightslab-1.4.0/tests/general/test_signal_refinements.py +163 -0
  47. {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_signals.py +70 -1
  48. {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_ablation.py +5 -3
  49. {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_test_suite.py +2 -2
  50. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_constraint_generation.py +47 -6
  51. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_model_with_ops.py +3 -3
  52. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_model_with_ops_unit.py +1 -1
  53. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_tracking.py +1 -1
  54. weightslab-1.4.0/tests/test_secure_communication.py +132 -0
  55. weightslab-1.4.0/tests/trainer/services/test_data_service_tabular_task_type.py +98 -0
  56. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/__init__.py +77 -15
  57. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/_version.py +3 -3
  58. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/art.py +13 -0
  59. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/dataloader_interface.py +20 -0
  60. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/ledgers.py +49 -2
  61. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/logger.py +360 -41
  62. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/model_interface.py +30 -6
  63. weightslab-1.4.0/weightslab/cli.py +838 -0
  64. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/checkpoint_manager.py +70 -105
  65. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/global_monitoring.py +9 -8
  66. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/data_samples_with_ops.py +1 -1
  67. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/data_utils.py +15 -0
  68. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/dataframe_manager.py +51 -33
  69. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/h5_array_store.py +110 -69
  70. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/h5_dataframe_store.py +20 -10
  71. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/docker/docker/utils/test-deployment.sh +2 -2
  72. weightslab-1.4.0/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb +77 -0
  73. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-ads-recommendation.ipynb +481 -0
  74. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-classification.ipynb +1667 -0
  75. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-clustering.ipynb +5272 -0
  76. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-detection.ipynb +4691 -0
  77. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-fraud-detection.ipynb +153 -0
  78. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-segmentation.ipynb +1072 -0
  79. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-classification.ipynb +503 -0
  80. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-clustering.ipynb +241 -0
  81. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-detection.ipynb +241 -0
  82. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-generation.ipynb +241 -0
  83. weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-segmentation.ipynb +241 -0
  84. weightslab-1.4.0/weightslab/examples/Notebooks/Usecases/wl-segmentation-loss-shapes-classification.ipynb +530 -0
  85. weightslab-1.4.0/weightslab/examples/Notebooks/Usecases/ws-segmentation-loss-shapes-classification.ipynb +522 -0
  86. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/README.md +102 -0
  87. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/config.yaml +52 -0
  88. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/main.py +284 -0
  89. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/test_ads_recommendation.py +185 -0
  90. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils/data.py +269 -0
  91. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils/model.py +74 -0
  92. weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/verify_integration.py +219 -0
  93. {weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/README.md +1 -1
  94. {weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/main.py +2 -1
  95. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/README.md +92 -0
  96. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/config.yaml +48 -0
  97. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/main.py +284 -0
  98. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/test_fraud_detection.py +118 -0
  99. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils/data.py +189 -0
  100. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils/model.py +33 -0
  101. weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/verify_integration.py +221 -0
  102. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/main.py +0 -8
  103. {weightslab-1.3.2/weightslab/examples/Ultralytics/ws-detection → weightslab-1.4.0/weightslab/examples/Ultralytics/wl-detection}/config.yaml +1 -1
  104. {weightslab-1.3.2/weightslab/examples/Usecases/ws-2d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-2d-lidar-detection}/README.md +3 -3
  105. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/README.md +4 -4
  106. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/utils/model.py +1 -1
  107. weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/config.yaml +48 -0
  108. weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/main.py +252 -0
  109. weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/criterions.py +36 -0
  110. weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/data.py +23 -0
  111. weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/model.py +19 -0
  112. weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/signals.py +48 -0
  113. weightslab-1.4.0/weightslab/examples/Usecases/ws-signals-mnist/main.py +180 -0
  114. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/README.md +26 -6
  115. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/__init__.py +16 -8
  116. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/dataset.py +22 -0
  117. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/signals.py +26 -6
  118. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/trainer.py +108 -32
  119. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/proto/experiment_service.proto +9 -0
  120. weightslab-1.4.0/weightslab/proto/experiment_service_pb2.py +198 -0
  121. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/proto/experiment_service_pb2_grpc.py +2 -2
  122. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/security/cert_auth_manager.py +23 -20
  123. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/src.py +830 -50
  124. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/experiment_context.py +1 -1
  125. weightslab-1.4.0/weightslab/trainer/services/agent/__init__.py +0 -0
  126. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent.py +20 -1
  127. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/intent_prompt.py +0 -3
  128. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/data_image_utils.py +57 -0
  129. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/data_service.py +189 -10
  130. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/experiment_service.py +22 -3
  131. weightslab-1.4.0/weightslab/trainer/services/utils/__init__.py +0 -0
  132. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/trainer_services.py +27 -1
  133. weightslab-1.4.0/weightslab/tunnel.py +350 -0
  134. weightslab-1.4.0/weightslab/ui/__init__.py +10 -0
  135. weightslab-1.4.0/weightslab/ui/server.py +561 -0
  136. weightslab-1.4.0/weightslab/ui/static/assets/experiment_service-DYuO7H9y.js +1 -0
  137. weightslab-1.4.0/weightslab/ui/static/assets/favicon-BtmqMp0p.png +0 -0
  138. weightslab-1.4.0/weightslab/ui/static/assets/index-DYvSNWtZ.css +1 -0
  139. weightslab-1.4.0/weightslab/ui/static/assets/index-dOou7igN.js +4475 -0
  140. weightslab-1.4.0/weightslab/ui/static/images/darkmode/logo.png +0 -0
  141. weightslab-1.4.0/weightslab/ui/static/images/darkmode/logo.svg +59 -0
  142. weightslab-1.4.0/weightslab/ui/static/images/favicon.png +0 -0
  143. weightslab-1.4.0/weightslab/ui/static/images/lightmode/logo.png +0 -0
  144. weightslab-1.4.0/weightslab/ui/static/images/lightmode/logo.svg +59 -0
  145. weightslab-1.4.0/weightslab/ui/static/images/logo.png +0 -0
  146. weightslab-1.4.0/weightslab/ui/static/index.html +794 -0
  147. {weightslab-1.3.2/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.ps1 +19 -19
  148. {weightslab-1.3.2/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.sh +19 -19
  149. weightslab-1.4.0/weightslab/ui/utils/sync-frontend.sh +49 -0
  150. weightslab-1.4.0/weightslab/utils/__init__.py +36 -0
  151. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/telemetry.py +5 -5
  152. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/tools.py +18 -0
  153. {weightslab-1.3.2 → weightslab-1.4.0/weightslab.egg-info}/PKG-INFO +39 -35
  154. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/SOURCES.txt +147 -126
  155. weightslab-1.4.0/weightslab.egg-info/entry_points.txt +2 -0
  156. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/requires.txt +5 -12
  157. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/scm_file_list.json +305 -295
  158. weightslab-1.4.0/weightslab.egg-info/scm_version.json +8 -0
  159. weightslab-1.3.2/CHANGELOG.md +0 -1
  160. weightslab-1.3.2/docs/logger.rst +0 -88
  161. weightslab-1.3.2/docs/usage/docker.rst +0 -350
  162. weightslab-1.3.2/docs/weights_studio.rst +0 -612
  163. weightslab-1.3.2/tests/backend/test_ui_docker_bridge.py +0 -718
  164. weightslab-1.3.2/tests/general/test_logger_snapshot_rotation.py +0 -102
  165. weightslab-1.3.2/tests/test_secure_docker.py +0 -238
  166. weightslab-1.3.2/weightslab/docker/Dockerfile +0 -27
  167. weightslab-1.3.2/weightslab/docker/docker/.dockerignore +0 -20
  168. weightslab-1.3.2/weightslab/docker/docker/.env.example +0 -67
  169. weightslab-1.3.2/weightslab/docker/docker/DEPLOYMENT.md +0 -271
  170. weightslab-1.3.2/weightslab/docker/docker/docker-compose.yml +0 -127
  171. weightslab-1.3.2/weightslab/docker/docker/nginx-entrypoint.sh +0 -188
  172. weightslab-1.3.2/weightslab/docker/docker/nginx.base-path.conf copy.template +0 -40
  173. weightslab-1.3.2/weightslab/docker/docker/nginx.base-path.conf.template +0 -40
  174. weightslab-1.3.2/weightslab/docker/docker/nginx.conf +0 -57
  175. weightslab-1.3.2/weightslab/docker/docker/test-deployment.sh +0 -110
  176. weightslab-1.3.2/weightslab/docker/docker/utils/build-and-deploy.sh +0 -348
  177. weightslab-1.3.2/weightslab/docker/envoy/envoy.downstream_plaintext.yaml +0 -100
  178. weightslab-1.3.2/weightslab/docker/envoy/envoy.downstream_upstream_plaintext.yaml +0 -87
  179. weightslab-1.3.2/weightslab/docker/envoy/envoy.upstream_plaintext.yaml +0 -97
  180. weightslab-1.3.2/weightslab/docker/envoy/envoy.yaml +0 -110
  181. weightslab-1.3.2/weightslab/docker/nginx.conf +0 -118
  182. weightslab-1.3.2/weightslab/examples/Docker_training/README.md +0 -38
  183. weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/Dockerfile +0 -57
  184. weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/README.md +0 -161
  185. weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/docker-compose.yml +0 -54
  186. weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/entrypoint.sh +0 -67
  187. weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/Dockerfile +0 -55
  188. weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/README.md +0 -159
  189. weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/docker-compose.yml +0 -44
  190. weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/entrypoint.sh +0 -101
  191. weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/ui-compose.yml +0 -61
  192. weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection/README.md +0 -102
  193. weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection/main.py +0 -340
  194. weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/config.yaml +0 -50
  195. weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/criterions.py +0 -361
  196. weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/data.py +0 -226
  197. weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/model.py +0 -134
  198. weightslab-1.3.2/weightslab/proto/experiment_service_pb2.py +0 -196
  199. weightslab-1.3.2/weightslab/ui_docker_bridge.py +0 -1225
  200. weightslab-1.3.2/weightslab/utils/__init__.py +0 -9
  201. weightslab-1.3.2/weightslab.egg-info/entry_points.txt +0 -2
  202. weightslab-1.3.2/weightslab.egg-info/scm_version.json +0 -8
  203. {weightslab-1.3.2 → weightslab-1.4.0}/.gitattributes +0 -0
  204. {weightslab-1.3.2 → weightslab-1.4.0}/.github/workflows/docs-pages.yml +0 -0
  205. {weightslab-1.3.2 → weightslab-1.4.0}/LICENSE +0 -0
  206. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/.gitkeep +0 -0
  207. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/favicon.png +0 -0
  208. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/github-stars.js +0 -0
  209. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/logo-dark.png +0 -0
  210. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/logo-light.png +0 -0
  211. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/version-switcher.js +0 -0
  212. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/weights_studio_architecture.png +0 -0
  213. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/wl-topnav.js +0 -0
  214. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_templates/.gitkeep +0 -0
  215. {weightslab-1.3.2 → weightslab-1.4.0}/docs/_templates/sidebar/brand.html +0 -0
  216. {weightslab-1.3.2 → weightslab-1.4.0}/docs/agent.rst +0 -0
  217. {weightslab-1.3.2 → weightslab-1.4.0}/docs/data_exploration.rst +0 -0
  218. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/index.rst +0 -0
  219. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/lightning/index.rst +0 -0
  220. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/index.rst +0 -0
  221. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/ultralytics/index.rst +0 -0
  222. {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/usecases/index.rst +0 -0
  223. {weightslab-1.3.2 → weightslab-1.4.0}/docs/grpc/audit_logger.rst +0 -0
  224. {weightslab-1.3.2 → weightslab-1.4.0}/docs/grpc/grpc_functions.rst +0 -0
  225. {weightslab-1.3.2 → weightslab-1.4.0}/docs/grpc/index.rst +0 -0
  226. {weightslab-1.3.2 → weightslab-1.4.0}/docs/hyperparameters.rst +0 -0
  227. {weightslab-1.3.2 → weightslab-1.4.0}/docs/model_interaction.rst +0 -0
  228. {weightslab-1.3.2 → weightslab-1.4.0}/docs/requirements.txt +0 -0
  229. {weightslab-1.3.2 → weightslab-1.4.0}/docs/usage/good_practice.rst +0 -0
  230. {weightslab-1.3.2 → weightslab-1.4.0}/docs/usage.rst +0 -0
  231. {weightslab-1.3.2 → weightslab-1.4.0}/setup.cfg +0 -0
  232. {weightslab-1.3.2 → weightslab-1.4.0}/tests/__init__.py +0 -0
  233. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/__init__.py +0 -0
  234. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_audit_logger.py +0 -0
  235. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_cli_additional_unit.py +0 -0
  236. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_compare_dataloaders.py +0 -0
  237. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_instance_signal_logger.py +0 -0
  238. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_model_interface_unit.py +0 -0
  239. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_optimizer_interface.py +0 -0
  240. {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_optimizer_interface_additional_unit.py +0 -0
  241. {weightslab-1.3.2 → weightslab-1.4.0}/tests/chaos_monkeys_utests/__init__.py +0 -0
  242. {weightslab-1.3.2 → weightslab-1.4.0}/tests/chaos_monkeys_utests/test_grpc_chaos_monkey_robustness.py +0 -0
  243. {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/__init__.py +0 -0
  244. {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/test_experiment_hash_and_art.py +0 -0
  245. {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/test_global_monitoring_unit.py +0 -0
  246. {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/__init__.py +0 -0
  247. {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_get_point_cloud.py +0 -0
  248. {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_grpc_histogram_categorical.py +0 -0
  249. {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_grpc_tag_operations.py +0 -0
  250. {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/__init__.py +0 -0
  251. {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_auditor_mode.py +0 -0
  252. {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_hyperparams.py +0 -0
  253. {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_signals_wrapping.py +0 -0
  254. {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/__init__.py +0 -0
  255. {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/test_pytorch_lightning_integration.py +0 -0
  256. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/__init__.py +0 -0
  257. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_dependency_patterns.py +0 -0
  258. {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_logger.py +0 -0
  259. {weightslab-1.3.2 → weightslab-1.4.0}/tests/modules/__init__.py +0 -0
  260. {weightslab-1.3.2 → weightslab-1.4.0}/tests/modules/test_modules_with_ops.py +0 -0
  261. {weightslab-1.3.2 → weightslab-1.4.0}/tests/test_src_functions.py +0 -0
  262. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/__init__.py +0 -0
  263. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/__init__.py +0 -0
  264. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_live_prompt_evaluation.py +0 -0
  265. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_model_and_safety_unit.py +0 -0
  266. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_prompt_unit.py +0 -0
  267. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_service_unit.py +0 -0
  268. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_server.py +0 -0
  269. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_unit.py +0 -0
  270. {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/test_trainer_tools.py +0 -0
  271. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/__init__.py +0 -0
  272. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_computational_graph_utils_unit.py +0 -0
  273. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_logs_unit.py +0 -0
  274. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_modules_dependencies_unit.py +0 -0
  275. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_plot_graph_render_unit.py +0 -0
  276. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_plot_graph_unit.py +0 -0
  277. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_shape_prop_unit.py +0 -0
  278. {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_utils_tools_unit.py +0 -0
  279. {weightslab-1.3.2 → weightslab-1.4.0}/tests/watchdog/__init__.py +0 -0
  280. {weightslab-1.3.2 → weightslab-1.4.0}/tests/watchdog/test_lock_monitor.py +0 -0
  281. {weightslab-1.3.2 → weightslab-1.4.0}/tests/watchdog/test_watchdog.py +0 -0
  282. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/__init__.py +0 -0
  283. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/audit_logger.py +0 -0
  284. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/cli.py +0 -0
  285. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/optimizer_interface.py +0 -0
  286. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/__init__.py +0 -0
  287. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/evaluation_controller.py +0 -0
  288. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/experiment_hash.py +0 -0
  289. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/parallel_primitives.py +0 -0
  290. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/tracking.py +0 -0
  291. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/__init__.py +0 -0
  292. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/array_proxy.py +0 -0
  293. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/point_cloud_utils.py +0 -0
  294. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/sample_stats.py +0 -0
  295. {weightslab-1.3.2/weightslab/examples/Lightning/ws-classification → weightslab-1.4.0/weightslab/examples/Lightning/wl-classification}/config.yaml +0 -0
  296. {weightslab-1.3.2/weightslab/examples/Lightning/ws-classification → weightslab-1.4.0/weightslab/examples/Lightning/wl-classification}/main.py +0 -0
  297. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering/face → weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils}/__init__.py +0 -0
  298. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-classification → weightslab-1.4.0/weightslab/examples/PyTorch/wl-classification}/config.yaml +0 -0
  299. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-classification → weightslab-1.4.0/weightslab/examples/PyTorch/wl-classification}/main.py +0 -0
  300. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/config.yaml +0 -0
  301. {weightslab-1.3.2/weightslab/examples/utils/baseline_models → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering/face}/__init__.py +0 -0
  302. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/data.py +0 -0
  303. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/model.py +0 -0
  304. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/signals.py +0 -0
  305. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/utils.py +0 -0
  306. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/main.py +0 -0
  307. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/config.yaml +0 -0
  308. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/utils/criterions.py +0 -0
  309. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/utils/data.py +0 -0
  310. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/utils/model.py +0 -0
  311. {weightslab-1.3.2/weightslab/examples/utils/baseline_models/pytorch → weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils}/__init__.py +0 -0
  312. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-generation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-generation}/config.yaml +0 -0
  313. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-generation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-generation}/main.py +0 -0
  314. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/0000f77c-6257be58.jpg +0 -0
  315. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/000f8d37-d4c09a0f.jpg +0 -0
  316. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00a0f008-a315437f.jpg +0 -0
  317. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00c12bd0-bb46e479.jpg +0 -0
  318. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00c29c52-f9524f1e.jpg +0 -0
  319. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00ce6f6d-50bbee62.jpg +0 -0
  320. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00d1bafa-1b47b41c.jpg +0 -0
  321. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00d7268f-fd4487be.jpg +0 -0
  322. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/00f0dd0f-5e9c9557.jpg +0 -0
  323. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/0a0d7f4c-ac5c3c8f.jpg +0 -0
  324. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/0a1f4fce-f9cac880.jpg +0 -0
  325. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/train/0a3bb2d8-c195d91e.jpg +0 -0
  326. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1cac6a7-04e33135.jpg +0 -0
  327. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1ceb32e-3f481b43.jpg +0 -0
  328. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1d10d08-5b108225.jpg +0 -0
  329. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1d22449-15fb948f.jpg +0 -0
  330. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1d7b3ac-5af8623b.jpg +0 -0
  331. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1dce572-c6a8cb5e.jpg +0 -0
  332. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1e1a7b8-0aec80e8.jpg +0 -0
  333. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1e8ad72-c3c79240.jpg +0 -0
  334. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1ee702d-0ae1fc10.jpg +0 -0
  335. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b1f0efd9-37a14dda.jpg +0 -0
  336. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b2a0648b-d8e126bc.jpg +0 -0
  337. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/images/val/b2b70230-bad4ff6e.jpg +0 -0
  338. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/0000f77c-6257be58.png +0 -0
  339. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/000f8d37-d4c09a0f.png +0 -0
  340. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00a0f008-a315437f.png +0 -0
  341. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00c12bd0-bb46e479.png +0 -0
  342. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00c29c52-f9524f1e.png +0 -0
  343. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00ce6f6d-50bbee62.png +0 -0
  344. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00d1bafa-1b47b41c.png +0 -0
  345. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00d7268f-fd4487be.png +0 -0
  346. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/00f0dd0f-5e9c9557.png +0 -0
  347. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/0a0d7f4c-ac5c3c8f.png +0 -0
  348. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/0a1f4fce-f9cac880.png +0 -0
  349. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/train/0a3bb2d8-c195d91e.png +0 -0
  350. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1cac6a7-04e33135.png +0 -0
  351. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1ceb32e-3f481b43.png +0 -0
  352. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1d10d08-5b108225.png +0 -0
  353. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1d22449-15fb948f.png +0 -0
  354. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1d7b3ac-5af8623b.png +0 -0
  355. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1dce572-c6a8cb5e.png +0 -0
  356. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1e1a7b8-0aec80e8.png +0 -0
  357. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1e8ad72-c3c79240.png +0 -0
  358. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1ee702d-0ae1fc10.png +0 -0
  359. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b1f0efd9-37a14dda.png +0 -0
  360. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b2a0648b-d8e126bc.png +0 -0
  361. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/BDD_subset/labels/val/b2b70230-bad4ff6e.png +0 -0
  362. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/config.yaml +0 -0
  363. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/utils/criterions.py +0 -0
  364. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/utils/data.py +0 -0
  365. {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/utils/model.py +0 -0
  366. {weightslab-1.3.2/weightslab/examples/Ultralytics/ws-detection → weightslab-1.4.0/weightslab/examples/Ultralytics/wl-detection}/main.py +0 -0
  367. {weightslab-1.3.2/weightslab/examples/Usecases/ws-2d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-2d-lidar-detection}/config.yaml +0 -0
  368. {weightslab-1.3.2/weightslab/examples/Usecases/ws-2d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-2d-lidar-detection}/main.py +0 -0
  369. {weightslab-1.3.2/weightslab/examples/Usecases/ws-2d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-2d-lidar-detection}/utils/criterions.py +0 -0
  370. {weightslab-1.3.2/weightslab/examples/Usecases/ws-2d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-2d-lidar-detection}/utils/data.py +0 -0
  371. {weightslab-1.3.2/weightslab/examples/Usecases/ws-2d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-2d-lidar-detection}/utils/model.py +0 -0
  372. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/config.yaml +0 -0
  373. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/main.py +0 -0
  374. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/utils/criterions.py +0 -0
  375. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/utils/data.py +0 -0
  376. {weightslab-1.3.2/weightslab/examples/Usecases/ws-3d-lidar-detection → weightslab-1.4.0/weightslab/examples/Usecases/wl-3d-lidar-detection}/utils/kitti_download.py +0 -0
  377. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/examples/__init__.py +0 -0
  378. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/examples/utils/__init__.py +0 -0
  379. {weightslab-1.3.2/weightslab/models → weightslab-1.4.0/weightslab/examples/utils/baseline_models}/__init__.py +0 -0
  380. {weightslab-1.3.2/weightslab/modules → weightslab-1.4.0/weightslab/examples/utils/baseline_models/pytorch}/__init__.py +0 -0
  381. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/examples/utils/baseline_models/pytorch/models.py +0 -0
  382. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/__init__.py +0 -0
  383. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/_utils.py +0 -0
  384. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/collate.py +0 -0
  385. {weightslab-1.3.2/weightslab/proto → weightslab-1.4.0/weightslab/models}/__init__.py +0 -0
  386. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/models/model_with_ops.py +0 -0
  387. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/models/monkey_patcher.py +0 -0
  388. {weightslab-1.3.2/weightslab/trainer → weightslab-1.4.0/weightslab/modules}/__init__.py +0 -0
  389. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/modules/modules_with_ops.py +0 -0
  390. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/modules/neuron_ops.py +0 -0
  391. {weightslab-1.3.2/weightslab/trainer/services → weightslab-1.4.0/weightslab/proto}/__init__.py +0 -0
  392. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/security/__init__.py +0 -0
  393. {weightslab-1.3.2/weightslab/trainer/services/agent → weightslab-1.4.0/weightslab/trainer}/__init__.py +0 -0
  394. {weightslab-1.3.2/weightslab/trainer/services/utils → weightslab-1.4.0/weightslab/trainer/services}/__init__.py +0 -0
  395. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/agent.png +0 -0
  396. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/query_example.png +0 -0
  397. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/schema.png +0 -0
  398. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent_service.py +0 -0
  399. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/instance_merger.py +0 -0
  400. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/model_service.py +0 -0
  401. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/utils/tools.py +0 -0
  402. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/trainer_tools.py +0 -0
  403. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/computational_graph.py +0 -0
  404. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/logs.py +0 -0
  405. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/modules_dependencies.py +0 -0
  406. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/plot_graph.py +0 -0
  407. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/shape_prop.py +0 -0
  408. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/__init__.py +0 -0
  409. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/grpc_watchdog.py +0 -0
  410. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/lock_monitor.py +0 -0
  411. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/log_level.py +0 -0
  412. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/watchdog.py +0 -0
  413. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/dependency_links.txt +0 -0
  414. {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/top_level.txt +0 -0
Binary file
@@ -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,19 +3,32 @@ 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
23
+ drop
24
+ htmlcov
25
+ htmlcov-report
14
26
 
15
27
  # Ignore hidden directories
16
28
  .history
17
29
  .lh
18
30
  .claude
31
+ .coverage
19
32
  .chat
20
33
  .ai
21
34
  .pytest_cache
@@ -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.2
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
@@ -76,12 +73,14 @@ Dynamic: license-file
76
73
  <a href="https://github.com/GrayboxTech/weightslab/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License" /></a>
77
74
  <a href="https://github.com/GrayboxTech/weightslab/stargazers"><img src="https://img.shields.io/github/stars/GrayboxTech/weightslab?style=flat&color=5865F2" alt="Stars" /></a>
78
75
  <a href="https://pypi.org/project/weightslab/"><img src="https://img.shields.io/pypi/v/weightslab?style=flat&color=5865F2&logo=pypi&logoColor=white" alt="Version" /></a>
76
+ <a href="https://pepy.tech/project/weightslab"><img src="https://img.shields.io/pepy/dt/weightslab?style=flat&color=5865F2&logo=pypi&logoColor=white" alt="PyPI - Downloads" /></a>
77
+ <a href="https://github.com/GrayboxTech/weightslab/actions"><img src="https://img.shields.io/badge/CI-passing-brightgreen?style=flat&logo=githubactions&logoColor=white" alt="CI" /></a>
79
78
  </div>
80
79
  <br>
81
80
 
82
81
  ## What it does
83
82
 
84
- WeightsLab is an open-source PyTorch tool for dataset debugging, data quality monitoring, mislabel detection, and mid-training data curation for computer vision datasets: images, video & LiDAR point clouds.
83
+ WeightsLab is an open-source PyTorch tool for dataset debugging, data quality monitoring, mislabel detection, and mid-training data curation for computer vision datasets: images, video & LiDAR point clouds.
85
84
  Longer-term, we're building toward bringing dataset management, training, fine-tuning, and validation together in a single, unified workflow.
86
85
 
87
86
  <br>
@@ -92,24 +91,29 @@ Longer-term, we're building toward bringing dataset management, training, fine-t
92
91
  <br>
93
92
  Most data problems are invisible until your model tells you: through loss spikes, poor generalization, or silent underperformance. WeightsLab connects those training signals back to the exact samples causing them.
94
93
 
95
- **Wrap your training script with the SDK** to capture per-sample signals live.
94
+ **Wrap your training script with the SDK** to capture per-sample signals live.
96
95
  **Open Studio** to inspect, filter, and curate your dataset mid-training, without restarting.
97
96
 
98
- - **Detect** - Surface mislabels, outliers & class imbalance using live loss signals
99
- - **Curate** - Discard bad samples, create data subsets, rebalance distributions
100
- - **Continue** - Resume training on your cleaned dataset, no restart required
97
+ - **Detect** - Surface mislabels, outliers & class imbalance using live loss signals
98
+ - **Curate** - Discard bad samples, create data subsets, rebalance distributions
99
+ - **Continue** - Resume training on your cleaned dataset, no restart required
101
100
  <br>
102
101
 
103
- ## Quickstart
102
+ ## Quickstart
104
103
 
105
- ![Python](https://img.shields.io/badge/Python-3.10--3.14-5865F2?style=flat&logo=python&logoColor=white)
106
- ![Docker Desktop](https://img.shields.io/badge/Docker_Desktop-v4-0db7ed?style=flat&logo=docker&logoColor=white)
104
+ ![Python](https://img.shields.io/badge/Python-v3.10--v3.14-5865F2?style=flat&logo=python&logoColor=white)
107
105
 
108
106
  **1. Install**
109
107
  ```bash
110
108
  pip install weightslab
111
109
  ```
112
- **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**
113
117
  ```python
114
118
  # wrap the objects in your training script
115
119
 
@@ -123,14 +127,14 @@ loader = wl.watch_or_edit(dataset, flag='data', loader_name="train")
123
127
  wl.serve(serving_grpc=True, serving_cli=False)
124
128
  ...
125
129
  ```
126
- **3. Launch Studio**
127
- ```bash
128
- weightslab ui launch # then open https://localhost:5173 🚀
129
- ```
130
- <br>
131
130
 
132
- 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**
133
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)
134
+
135
+
136
+ <br>
137
+ For a detailed installation guide and advanced configuration &rarr; [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
134
138
  <br>
135
139
 
136
140
  > [!TIP]
@@ -141,8 +145,9 @@ For a detailed installation guide and advanced configuration &rarr; [Installatio
141
145
  > weightslab start example --seg # segmentation
142
146
  > weightslab start example --det # detection
143
147
  > weightslab start example --clus # clustering
144
- > weightslab start example --gen # generation
145
148
  > ```
149
+ >
150
+ > Explore our [sandbox](www.sandbox.graybx.com).
146
151
 
147
152
  <br>
148
153
 
@@ -162,22 +167,22 @@ For a detailed installation guide and advanced configuration &rarr; [Installatio
162
167
  parameters = wl.watch_or_edit(parameters, flag='hp', ...) # ← WeightsLab monitors your parameters and lets you update them from the UI
163
168
  model = wl.watch_or_edit(model, flag='model', ...) # ← WeightsLab monitors your model state
164
169
  optimizer = wl.watch_or_edit(optim.Adam(...), flag='opt', ...) # ← Tracks optimizer state and lets you update the learning rate from the UI
165
-
170
+
166
171
  train_criterion = wl.watch_or_edit(nn.CrossEntropyLoss(reduction="none"), flag='signal', name="train_loss/sample", per_sample=True, log=True) # ← Wrap and plot your signals on the UI
167
172
  test_criterion = wl.watch_or_edit(nn.CrossEntropyLoss(reduction="none"), flag='signal', name="test_loss/sample", per_sample=True, log=False) # ← Per-sample only, plot disabled
168
-
173
+
169
174
  train_loader = wl.watch_or_edit(train_dataset, flag='data', loader_name="train_loader", ...) # ← Track your training dataset
170
175
  val_loader = wl.watch_or_edit(val_dataset, flag='data', loader_name="val_loader", ...) # ← Track your validation dataset
171
-
176
+
172
177
  ```
173
178
 
174
179
  3. **Run your script, then launch the UI in a separate terminal:**
175
180
  ```bash
176
181
  python train.py
177
- weightslab ui launch
182
+ weightslab start
178
183
  ```
179
184
 
180
- 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.
181
186
 
182
187
  </details>
183
188
 
@@ -271,7 +276,7 @@ if __name__ == "__main__":
271
276
 
272
277
  ## WeightsLab vs Weights & Biases
273
278
 
274
- Weights & Biases (wandb) tracks experiments. WeightsLab connects training signals back to
279
+ Weights & Biases (wandb) tracks experiments. WeightsLab connects training signals back to
275
280
  the exact samples causing them — so you can fix your data, not just log it.
276
281
 
277
282
  <br>
@@ -373,9 +378,8 @@ Find our documentation [online](https://grayboxtech.github.io/weightslab/latest/
373
378
 
374
379
  New here (human or AI coding agent)? Start with [AGENTS.md](AGENTS.md) — it
375
380
  captures the cross-repo architecture (weightslab backend ↔ weights_studio
376
- frontend via the shared proto), the module maps, the `wl.watch_or_edit`
377
- integration pattern, where tests live, and the gotchas that aren't obvious from
378
- 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.
379
383
 
380
384
  </details>
381
385
 
@@ -384,7 +388,7 @@ any single file. It's the fastest way to orient before a first change.
384
388
 
385
389
  <br>
386
390
 
387
- We're building a community of ML engineers around data-centric training tooling.
391
+ We're building a community of ML engineers around data-centric training tooling.
388
392
  Interested in contributing or just want to say hi? → hello [at] graybx [dot] com
389
393
 
390
394
  </details>