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.
- weightslab-1.4.0/.coverage +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/.github/workflows/ci.yml +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/.github/workflows/release.yml +129 -19
- {weightslab-1.3.2 → weightslab-1.4.0}/.gitignore +13 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/AGENTS.md +31 -28
- weightslab-1.4.0/CHANGELOG.md +1 -0
- {weightslab-1.3.2/weightslab.egg-info → weightslab-1.4.0}/PKG-INFO +39 -35
- {weightslab-1.3.2 → weightslab-1.4.0}/README.md +33 -26
- {weightslab-1.3.2 → weightslab-1.4.0}/agent_config.yaml +1 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/custom.css +29 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/examples-gallery.js +34 -15
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/wl-ribbon.js +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/conf.py +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/configuration.rst +31 -42
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/lightning/classification.rst +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/classification.rst +11 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/clustering.rst +11 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/detection.rst +11 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/generation.rst +11 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/segmentation.rst +11 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/ultralytics/detection.rst +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/usecases/lidar_detection.rst +3 -3
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/usecases/loss_shape_classification.rst +11 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/four_way_approach.rst +2 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/index.rst +1 -2
- weightslab-1.4.0/docs/logger.rst +190 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/pytorch_lightning.rst +2 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/quickstart.rst +9 -14
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/segmentation_usecase.rst +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/ultralytics.rst +4 -4
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/usage/parameters.rst +10 -30
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/usecases.rst +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/user_commands.rst +184 -111
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/user_functions.rst +32 -3
- weightslab-1.4.0/docs/weights_studio.rst +425 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/pyproject.toml +36 -18
- weightslab-1.4.0/tests/backend/test_cli.py +274 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_data_loader_interface.py +29 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_ledgers.py +43 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_logger_core.py +182 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_write_dataframe.py +35 -20
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_write_history.py +101 -47
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/test_checkpoint_workflow.py +9 -27
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_grpc_user_actions.py +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_cli.py +53 -0
- weightslab-1.4.0/tests/general/test_signal_refinements.py +163 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_signals.py +70 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_ablation.py +5 -3
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_test_suite.py +2 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_constraint_generation.py +47 -6
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_model_with_ops.py +3 -3
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_model_with_ops_unit.py +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_tracking.py +1 -1
- weightslab-1.4.0/tests/test_secure_communication.py +132 -0
- weightslab-1.4.0/tests/trainer/services/test_data_service_tabular_task_type.py +98 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/__init__.py +77 -15
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/_version.py +3 -3
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/art.py +13 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/dataloader_interface.py +20 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/ledgers.py +49 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/logger.py +360 -41
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/model_interface.py +30 -6
- weightslab-1.4.0/weightslab/cli.py +838 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/checkpoint_manager.py +70 -105
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/global_monitoring.py +9 -8
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/data_samples_with_ops.py +1 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/data_utils.py +15 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/dataframe_manager.py +51 -33
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/h5_array_store.py +110 -69
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/h5_dataframe_store.py +20 -10
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/docker/docker/utils/test-deployment.sh +2 -2
- weightslab-1.4.0/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb +77 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-ads-recommendation.ipynb +481 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-classification.ipynb +1667 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-clustering.ipynb +5272 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-detection.ipynb +4691 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-fraud-detection.ipynb +153 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/wl-segmentation.ipynb +1072 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-classification.ipynb +503 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-clustering.ipynb +241 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-detection.ipynb +241 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-generation.ipynb +241 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/PyTorch/ws-segmentation.ipynb +241 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/Usecases/wl-segmentation-loss-shapes-classification.ipynb +530 -0
- weightslab-1.4.0/weightslab/examples/Notebooks/Usecases/ws-segmentation-loss-shapes-classification.ipynb +522 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/README.md +102 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/config.yaml +52 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/main.py +284 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/test_ads_recommendation.py +185 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils/data.py +269 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils/model.py +74 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/verify_integration.py +219 -0
- {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
- {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
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/README.md +92 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/config.yaml +48 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/main.py +284 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/test_fraud_detection.py +118 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils/data.py +189 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils/model.py +33 -0
- weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/verify_integration.py +221 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/main.py +0 -8
- {weightslab-1.3.2/weightslab/examples/Ultralytics/ws-detection → weightslab-1.4.0/weightslab/examples/Ultralytics/wl-detection}/config.yaml +1 -1
- {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
- {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
- {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
- weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/config.yaml +48 -0
- weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/main.py +252 -0
- weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/criterions.py +36 -0
- weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/data.py +23 -0
- weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/model.py +19 -0
- weightslab-1.4.0/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/signals.py +48 -0
- weightslab-1.4.0/weightslab/examples/Usecases/ws-signals-mnist/main.py +180 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/README.md +26 -6
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/__init__.py +16 -8
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/dataset.py +22 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/signals.py +26 -6
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/trainer.py +108 -32
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/proto/experiment_service.proto +9 -0
- weightslab-1.4.0/weightslab/proto/experiment_service_pb2.py +198 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/proto/experiment_service_pb2_grpc.py +2 -2
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/security/cert_auth_manager.py +23 -20
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/src.py +830 -50
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/experiment_context.py +1 -1
- weightslab-1.4.0/weightslab/trainer/services/agent/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent.py +20 -1
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/intent_prompt.py +0 -3
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/data_image_utils.py +57 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/data_service.py +189 -10
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/experiment_service.py +22 -3
- weightslab-1.4.0/weightslab/trainer/services/utils/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/trainer_services.py +27 -1
- weightslab-1.4.0/weightslab/tunnel.py +350 -0
- weightslab-1.4.0/weightslab/ui/__init__.py +10 -0
- weightslab-1.4.0/weightslab/ui/server.py +561 -0
- weightslab-1.4.0/weightslab/ui/static/assets/experiment_service-DYuO7H9y.js +1 -0
- weightslab-1.4.0/weightslab/ui/static/assets/favicon-BtmqMp0p.png +0 -0
- weightslab-1.4.0/weightslab/ui/static/assets/index-DYvSNWtZ.css +1 -0
- weightslab-1.4.0/weightslab/ui/static/assets/index-dOou7igN.js +4475 -0
- weightslab-1.4.0/weightslab/ui/static/images/darkmode/logo.png +0 -0
- weightslab-1.4.0/weightslab/ui/static/images/darkmode/logo.svg +59 -0
- weightslab-1.4.0/weightslab/ui/static/images/favicon.png +0 -0
- weightslab-1.4.0/weightslab/ui/static/images/lightmode/logo.png +0 -0
- weightslab-1.4.0/weightslab/ui/static/images/lightmode/logo.svg +59 -0
- weightslab-1.4.0/weightslab/ui/static/images/logo.png +0 -0
- weightslab-1.4.0/weightslab/ui/static/index.html +794 -0
- {weightslab-1.3.2/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.ps1 +19 -19
- {weightslab-1.3.2/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.sh +19 -19
- weightslab-1.4.0/weightslab/ui/utils/sync-frontend.sh +49 -0
- weightslab-1.4.0/weightslab/utils/__init__.py +36 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/telemetry.py +5 -5
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/tools.py +18 -0
- {weightslab-1.3.2 → weightslab-1.4.0/weightslab.egg-info}/PKG-INFO +39 -35
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/SOURCES.txt +147 -126
- weightslab-1.4.0/weightslab.egg-info/entry_points.txt +2 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/requires.txt +5 -12
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/scm_file_list.json +305 -295
- weightslab-1.4.0/weightslab.egg-info/scm_version.json +8 -0
- weightslab-1.3.2/CHANGELOG.md +0 -1
- weightslab-1.3.2/docs/logger.rst +0 -88
- weightslab-1.3.2/docs/usage/docker.rst +0 -350
- weightslab-1.3.2/docs/weights_studio.rst +0 -612
- weightslab-1.3.2/tests/backend/test_ui_docker_bridge.py +0 -718
- weightslab-1.3.2/tests/general/test_logger_snapshot_rotation.py +0 -102
- weightslab-1.3.2/tests/test_secure_docker.py +0 -238
- weightslab-1.3.2/weightslab/docker/Dockerfile +0 -27
- weightslab-1.3.2/weightslab/docker/docker/.dockerignore +0 -20
- weightslab-1.3.2/weightslab/docker/docker/.env.example +0 -67
- weightslab-1.3.2/weightslab/docker/docker/DEPLOYMENT.md +0 -271
- weightslab-1.3.2/weightslab/docker/docker/docker-compose.yml +0 -127
- weightslab-1.3.2/weightslab/docker/docker/nginx-entrypoint.sh +0 -188
- weightslab-1.3.2/weightslab/docker/docker/nginx.base-path.conf copy.template +0 -40
- weightslab-1.3.2/weightslab/docker/docker/nginx.base-path.conf.template +0 -40
- weightslab-1.3.2/weightslab/docker/docker/nginx.conf +0 -57
- weightslab-1.3.2/weightslab/docker/docker/test-deployment.sh +0 -110
- weightslab-1.3.2/weightslab/docker/docker/utils/build-and-deploy.sh +0 -348
- weightslab-1.3.2/weightslab/docker/envoy/envoy.downstream_plaintext.yaml +0 -100
- weightslab-1.3.2/weightslab/docker/envoy/envoy.downstream_upstream_plaintext.yaml +0 -87
- weightslab-1.3.2/weightslab/docker/envoy/envoy.upstream_plaintext.yaml +0 -97
- weightslab-1.3.2/weightslab/docker/envoy/envoy.yaml +0 -110
- weightslab-1.3.2/weightslab/docker/nginx.conf +0 -118
- weightslab-1.3.2/weightslab/examples/Docker_training/README.md +0 -38
- weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/Dockerfile +0 -57
- weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/README.md +0 -161
- weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/docker-compose.yml +0 -54
- weightslab-1.3.2/weightslab/examples/Docker_training/docker_in_docker/entrypoint.sh +0 -67
- weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/Dockerfile +0 -55
- weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/README.md +0 -159
- weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/docker-compose.yml +0 -44
- weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/entrypoint.sh +0 -101
- weightslab-1.3.2/weightslab/examples/Docker_training/siblings_self_contained/ui-compose.yml +0 -61
- weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection/README.md +0 -102
- weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection/main.py +0 -340
- weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/config.yaml +0 -50
- weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/criterions.py +0 -361
- weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/data.py +0 -226
- weightslab-1.3.2/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/model.py +0 -134
- weightslab-1.3.2/weightslab/proto/experiment_service_pb2.py +0 -196
- weightslab-1.3.2/weightslab/ui_docker_bridge.py +0 -1225
- weightslab-1.3.2/weightslab/utils/__init__.py +0 -9
- weightslab-1.3.2/weightslab.egg-info/entry_points.txt +0 -2
- weightslab-1.3.2/weightslab.egg-info/scm_version.json +0 -8
- {weightslab-1.3.2 → weightslab-1.4.0}/.gitattributes +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/.github/workflows/docs-pages.yml +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/LICENSE +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/.gitkeep +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/favicon.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/github-stars.js +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/logo-dark.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/logo-light.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/version-switcher.js +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/weights_studio_architecture.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_static/wl-topnav.js +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_templates/.gitkeep +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/_templates/sidebar/brand.html +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/agent.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/data_exploration.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/index.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/lightning/index.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/pytorch/index.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/ultralytics/index.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/examples/usecases/index.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/grpc/audit_logger.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/grpc/grpc_functions.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/grpc/index.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/hyperparameters.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/model_interaction.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/requirements.txt +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/usage/good_practice.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/docs/usage.rst +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/setup.cfg +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_audit_logger.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_cli_additional_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_compare_dataloaders.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_instance_signal_logger.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_model_interface_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_optimizer_interface.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/backend/test_optimizer_interface_additional_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/chaos_monkeys_utests/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/chaos_monkeys_utests/test_grpc_chaos_monkey_robustness.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/test_experiment_hash_and_art.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/components/test_global_monitoring_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_get_point_cloud.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_grpc_histogram_categorical.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/gRPC/test_grpc_tag_operations.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_auditor_mode.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_hyperparams.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/general/test_signals_wrapping.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/integrations/test_pytorch_lightning_integration.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_dependency_patterns.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/model/test_logger.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/modules/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/modules/test_modules_with_ops.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/test_src_functions.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_live_prompt_evaluation.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_model_and_safety_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_prompt_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_agent_service_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_server.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/trainer/test_trainer_tools.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_computational_graph_utils_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_logs_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_modules_dependencies_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_plot_graph_render_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_plot_graph_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_shape_prop_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/utils/test_utils_tools_unit.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/watchdog/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/watchdog/test_lock_monitor.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/tests/watchdog/test_watchdog.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/audit_logger.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/cli.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/backend/optimizer_interface.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/evaluation_controller.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/experiment_hash.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/parallel_primitives.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/components/tracking.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/array_proxy.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/point_cloud_utils.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/data/sample_stats.py +0 -0
- {weightslab-1.3.2/weightslab/examples/Lightning/ws-classification → weightslab-1.4.0/weightslab/examples/Lightning/wl-classification}/config.yaml +0 -0
- {weightslab-1.3.2/weightslab/examples/Lightning/ws-classification → weightslab-1.4.0/weightslab/examples/Lightning/wl-classification}/main.py +0 -0
- {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
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-classification → weightslab-1.4.0/weightslab/examples/PyTorch/wl-classification}/config.yaml +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-classification → weightslab-1.4.0/weightslab/examples/PyTorch/wl-classification}/main.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/config.yaml +0 -0
- {weightslab-1.3.2/weightslab/examples/utils/baseline_models → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering/face}/__init__.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/data.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/model.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/signals.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/face/utils.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-clustering → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering}/main.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/config.yaml +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/utils/criterions.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/utils/data.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-detection → weightslab-1.4.0/weightslab/examples/PyTorch/wl-detection}/utils/model.py +0 -0
- {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
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-generation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-generation}/config.yaml +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-generation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-generation}/main.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/config.yaml +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/utils/criterions.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/utils/data.py +0 -0
- {weightslab-1.3.2/weightslab/examples/PyTorch/ws-segmentation → weightslab-1.4.0/weightslab/examples/PyTorch/wl-segmentation}/utils/model.py +0 -0
- {weightslab-1.3.2/weightslab/examples/Ultralytics/ws-detection → weightslab-1.4.0/weightslab/examples/Ultralytics/wl-detection}/main.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/examples/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/examples/utils/__init__.py +0 -0
- {weightslab-1.3.2/weightslab/models → weightslab-1.4.0/weightslab/examples/utils/baseline_models}/__init__.py +0 -0
- {weightslab-1.3.2/weightslab/modules → weightslab-1.4.0/weightslab/examples/utils/baseline_models/pytorch}/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/examples/utils/baseline_models/pytorch/models.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/_utils.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/integrations/ultralytics/collate.py +0 -0
- {weightslab-1.3.2/weightslab/proto → weightslab-1.4.0/weightslab/models}/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/models/model_with_ops.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/models/monkey_patcher.py +0 -0
- {weightslab-1.3.2/weightslab/trainer → weightslab-1.4.0/weightslab/modules}/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/modules/modules_with_ops.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/modules/neuron_ops.py +0 -0
- {weightslab-1.3.2/weightslab/trainer/services → weightslab-1.4.0/weightslab/proto}/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/security/__init__.py +0 -0
- {weightslab-1.3.2/weightslab/trainer/services/agent → weightslab-1.4.0/weightslab/trainer}/__init__.py +0 -0
- {weightslab-1.3.2/weightslab/trainer/services/utils → weightslab-1.4.0/weightslab/trainer/services}/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/agent.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/query_example.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/schema.png +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/agent_service.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/instance_merger.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/model_service.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/services/utils/tools.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/trainer/trainer_tools.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/computational_graph.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/logs.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/modules_dependencies.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/plot_graph.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/utils/shape_prop.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/__init__.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/grpc_watchdog.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/lock_monitor.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/log_level.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab/watchdog/watchdog.py +0 -0
- {weightslab-1.3.2 → weightslab-1.4.0}/weightslab.egg-info/dependency_links.txt +0 -0
- {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=
|
|
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
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
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
|
|
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 [
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
62
|
+
Browser → weightslab start :8080 (grpc-web → grpc proxy) → Python gRPC servicer → training loop
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
-
|
|
66
|
-
|
|
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
|
|
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
|
-
|
|
97
|
-
`weights_studio
|
|
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
|
|
142
|
-
| `GRPC_TLS_ENABLED` | `
|
|
143
|
-
| `GRPC_TLS_REQUIRE_CLIENT_AUTH` | `
|
|
144
|
-
| `
|
|
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` / `
|
|
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
|
|
165
|
-
>
|
|
166
|
-
>
|
|
167
|
-
>
|
|
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)
|
|
181
|
-
(3)
|
|
182
|
-
|
|
183
|
-
|
|
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
|
|
189
|
-
|
|
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
|
-
- `
|
|
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
|
|
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
|
+
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<
|
|
17
|
-
Requires-Dist:
|
|
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
|
|
27
|
-
Requires-Dist:
|
|
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<
|
|
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
|
-

|
|
104
|
+

|
|
107
105
|
|
|
108
106
|
**1. Install**
|
|
109
107
|
```bash
|
|
110
108
|
pip install weightslab
|
|
111
109
|
```
|
|
112
|
-
|
|
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
|
-
|
|
131
|
+
**3.b. Or in the cloud**
|
|
133
132
|
|
|
133
|
+
[](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 → [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 → [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 → [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
|
|
182
|
+
weightslab start
|
|
178
183
|
```
|
|
179
184
|
|
|
180
|
-
4. **Open your browser** `
|
|
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
|
|
377
|
-
|
|
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>
|