weightslab 1.3.3__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {weightslab-1.3.3 → weightslab-1.4.0}/.github/workflows/ci.yml +1 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/.github/workflows/release.yml +129 -19
- {weightslab-1.3.3 → weightslab-1.4.0}/.gitignore +9 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/AGENTS.md +31 -28
- weightslab-1.4.0/CHANGELOG.md +1 -0
- {weightslab-1.3.3/weightslab.egg-info → weightslab-1.4.0}/PKG-INFO +25 -23
- {weightslab-1.3.3 → weightslab-1.4.0}/README.md +19 -14
- {weightslab-1.3.3 → weightslab-1.4.0}/agent_config.yaml +1 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/examples-gallery.js +6 -6
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/wl-ribbon.js +1 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/conf.py +1 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/configuration.rst +31 -42
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/classification.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/clustering.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/detection.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/generation.rst +1 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/segmentation.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/usecases/lidar_detection.rst +1 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/usecases/loss_shape_classification.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/four_way_approach.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/index.rst +1 -2
- weightslab-1.4.0/docs/logger.rst +190 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/quickstart.rst +9 -14
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/ultralytics.rst +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/usage/parameters.rst +10 -30
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/user_commands.rst +107 -114
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/user_functions.rst +25 -2
- weightslab-1.4.0/docs/weights_studio.rst +425 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/pyproject.toml +36 -18
- weightslab-1.4.0/tests/backend/test_cli.py +274 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_data_loader_interface.py +29 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_ledgers.py +43 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_logger_core.py +182 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_write_dataframe.py +35 -20
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_write_history.py +101 -47
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/test_checkpoint_workflow.py +9 -27
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_grpc_user_actions.py +1 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_cli.py +53 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_ablation.py +3 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_constraint_generation.py +23 -0
- 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.3 → weightslab-1.4.0}/weightslab/__init__.py +68 -15
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/_version.py +3 -3
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/art.py +13 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/dataloader_interface.py +20 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/ledgers.py +36 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/logger.py +267 -37
- weightslab-1.4.0/weightslab/cli.py +838 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/checkpoint_manager.py +33 -102
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/global_monitoring.py +9 -8
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/data_utils.py +15 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/dataframe_manager.py +43 -25
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/h5_array_store.py +109 -76
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/h5_dataframe_store.py +20 -10
- 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/Usecases/wl-segmentation-loss-shapes-classification.ipynb +530 -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.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.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/main.py +0 -8
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Ultralytics/wl-detection/config.yaml +1 -1
- weightslab-1.4.0/weightslab/examples/Usecases/ws-signals-mnist/main.py +180 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/README.md +26 -6
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/__init__.py +16 -8
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/dataset.py +22 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/signals.py +26 -6
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/trainer.py +108 -32
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/proto/experiment_service_pb2.py +3 -3
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/proto/experiment_service_pb2_grpc.py +2 -2
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/security/cert_auth_manager.py +23 -20
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/src.py +145 -13
- {weightslab-1.3.3 → 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.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent.py +20 -1
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/data_image_utils.py +57 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/data_service.py +189 -10
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/experiment_service.py +3 -3
- weightslab-1.4.0/weightslab/trainer/services/utils/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/tunnel.py +14 -13
- 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.3/weightslab/docker/docker → weightslab-1.4.0/weightslab/ui}/utils/generate-certs-auth-token.ps1 +19 -19
- {weightslab-1.3.3/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.3 → weightslab-1.4.0}/weightslab/utils/telemetry.py +5 -5
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/tools.py +18 -0
- {weightslab-1.3.3 → weightslab-1.4.0/weightslab.egg-info}/PKG-INFO +25 -23
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/SOURCES.txt +45 -33
- weightslab-1.4.0/weightslab.egg-info/entry_points.txt +2 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/requires.txt +5 -12
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/scm_file_list.json +296 -295
- weightslab-1.4.0/weightslab.egg-info/scm_version.json +8 -0
- weightslab-1.3.3/CHANGELOG.md +0 -1
- weightslab-1.3.3/docs/logger.rst +0 -88
- weightslab-1.3.3/docs/usage/docker.rst +0 -350
- weightslab-1.3.3/docs/weights_studio.rst +0 -612
- weightslab-1.3.3/tests/backend/test_ui_docker_bridge.py +0 -718
- weightslab-1.3.3/tests/general/test_logger_snapshot_rotation.py +0 -102
- weightslab-1.3.3/tests/test_secure_docker.py +0 -238
- weightslab-1.3.3/weightslab/docker/Dockerfile +0 -27
- weightslab-1.3.3/weightslab/docker/docker/.dockerignore +0 -20
- weightslab-1.3.3/weightslab/docker/docker/.env.example +0 -67
- weightslab-1.3.3/weightslab/docker/docker/DEPLOYMENT.md +0 -271
- weightslab-1.3.3/weightslab/docker/docker/docker-compose.yml +0 -127
- weightslab-1.3.3/weightslab/docker/docker/nginx-entrypoint.sh +0 -188
- weightslab-1.3.3/weightslab/docker/docker/nginx.base-path.conf copy.template +0 -40
- weightslab-1.3.3/weightslab/docker/docker/nginx.base-path.conf.template +0 -40
- weightslab-1.3.3/weightslab/docker/docker/nginx.conf +0 -57
- weightslab-1.3.3/weightslab/docker/docker/test-deployment.sh +0 -110
- weightslab-1.3.3/weightslab/docker/docker/utils/build-and-deploy.sh +0 -348
- weightslab-1.3.3/weightslab/docker/envoy/envoy.downstream_plaintext.yaml +0 -100
- weightslab-1.3.3/weightslab/docker/envoy/envoy.downstream_upstream_plaintext.yaml +0 -87
- weightslab-1.3.3/weightslab/docker/envoy/envoy.upstream_plaintext.yaml +0 -97
- weightslab-1.3.3/weightslab/docker/envoy/envoy.yaml +0 -110
- weightslab-1.3.3/weightslab/docker/nginx.conf +0 -118
- weightslab-1.3.3/weightslab/examples/Docker_training/README.md +0 -38
- weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/Dockerfile +0 -57
- weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/README.md +0 -161
- weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/docker-compose.yml +0 -54
- weightslab-1.3.3/weightslab/examples/Docker_training/docker_in_docker/entrypoint.sh +0 -67
- weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/Dockerfile +0 -55
- weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/README.md +0 -159
- weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/docker-compose.yml +0 -44
- weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/entrypoint.sh +0 -101
- weightslab-1.3.3/weightslab/examples/Docker_training/siblings_self_contained/ui-compose.yml +0 -61
- weightslab-1.3.3/weightslab/ui_docker_bridge.py +0 -1260
- weightslab-1.3.3/weightslab/utils/__init__.py +0 -9
- weightslab-1.3.3/weightslab.egg-info/entry_points.txt +0 -2
- weightslab-1.3.3/weightslab.egg-info/scm_version.json +0 -8
- {weightslab-1.3.3 → weightslab-1.4.0}/.coverage +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/.gitattributes +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/.github/workflows/docs-pages.yml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/LICENSE +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/.gitkeep +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/custom.css +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/favicon.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/github-stars.js +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/logo-dark.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/logo-light.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/version-switcher.js +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/weights_studio_architecture.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_static/wl-topnav.js +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_templates/.gitkeep +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/_templates/sidebar/brand.html +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/agent.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/data_exploration.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/index.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/lightning/classification.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/lightning/index.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/pytorch/index.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/ultralytics/detection.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/ultralytics/index.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/examples/usecases/index.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/grpc/audit_logger.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/grpc/grpc_functions.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/grpc/index.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/hyperparameters.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/model_interaction.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/pytorch_lightning.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/requirements.txt +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/segmentation_usecase.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/usage/good_practice.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/usage.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/docs/usecases.rst +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/setup.cfg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_audit_logger.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_cli_additional_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_compare_dataloaders.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_instance_signal_logger.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_model_interface_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_optimizer_interface.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/backend/test_optimizer_interface_additional_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/chaos_monkeys_utests/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/chaos_monkeys_utests/test_grpc_chaos_monkey_robustness.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/test_experiment_hash_and_art.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/components/test_global_monitoring_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_get_point_cloud.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_grpc_histogram_categorical.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/gRPC/test_grpc_tag_operations.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_auditor_mode.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_hyperparams.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_signal_refinements.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_signals.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/general/test_signals_wrapping.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/test_pytorch_lightning_integration.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/integrations/ultralytics/ddp/ddp_test_suite.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_dependency_patterns.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_logger.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_model_with_ops.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_model_with_ops_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/model/test_tracking.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/modules/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/modules/test_modules_with_ops.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/test_src_functions.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_live_prompt_evaluation.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_model_and_safety_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_prompt_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_agent_service_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_server.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/services/test_trainer_services_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/trainer/test_trainer_tools.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_computational_graph_utils_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_logs_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_modules_dependencies_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_plot_graph_render_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_plot_graph_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_shape_prop_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/utils/test_utils_tools_unit.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/watchdog/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/watchdog/test_lock_monitor.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/tests/watchdog/test_watchdog.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/audit_logger.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/cli.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/model_interface.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/backend/optimizer_interface.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/evaluation_controller.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/experiment_hash.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/parallel_primitives.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/components/tracking.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/array_proxy.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/data_samples_with_ops.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/point_cloud_utils.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/data/sample_stats.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/docker/docker/utils/test-deployment.sh +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Lightning/wl-classification/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Lightning/wl-classification/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-classification.ipynb +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-clustering.ipynb +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-detection.ipynb +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-generation.ipynb +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/PyTorch/ws-segmentation.ipynb +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Notebooks/Usecases/ws-segmentation-loss-shapes-classification.ipynb +0 -0
- {weightslab-1.3.3/weightslab/examples/PyTorch/wl-clustering/face → weightslab-1.4.0/weightslab/examples/PyTorch/wl-ads-recommendation/utils}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-classification/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-classification/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/config.yaml +0 -0
- {weightslab-1.3.3/weightslab/examples/utils/baseline_models → weightslab-1.4.0/weightslab/examples/PyTorch/wl-clustering/face}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/data.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/model.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/signals.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/face/utils.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-clustering/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/README.md +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/utils/criterions.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/utils/data.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-detection/utils/model.py +0 -0
- {weightslab-1.3.3/weightslab/examples/utils/baseline_models/pytorch → weightslab-1.4.0/weightslab/examples/PyTorch/wl-fraud-detection/utils}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-generation/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-generation/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0000f77c-6257be58.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/000f8d37-d4c09a0f.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00a0f008-a315437f.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00c12bd0-bb46e479.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00c29c52-f9524f1e.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00ce6f6d-50bbee62.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00d1bafa-1b47b41c.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00d7268f-fd4487be.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/00f0dd0f-5e9c9557.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0a0d7f4c-ac5c3c8f.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0a1f4fce-f9cac880.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/train/0a3bb2d8-c195d91e.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1cac6a7-04e33135.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1ceb32e-3f481b43.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1d10d08-5b108225.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1d22449-15fb948f.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1d7b3ac-5af8623b.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1dce572-c6a8cb5e.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1e1a7b8-0aec80e8.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1e8ad72-c3c79240.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1ee702d-0ae1fc10.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b1f0efd9-37a14dda.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b2a0648b-d8e126bc.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/images/val/b2b70230-bad4ff6e.jpg +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0000f77c-6257be58.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/000f8d37-d4c09a0f.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00a0f008-a315437f.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00c12bd0-bb46e479.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00c29c52-f9524f1e.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00ce6f6d-50bbee62.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00d1bafa-1b47b41c.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00d7268f-fd4487be.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/00f0dd0f-5e9c9557.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0a0d7f4c-ac5c3c8f.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0a1f4fce-f9cac880.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/train/0a3bb2d8-c195d91e.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1cac6a7-04e33135.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1ceb32e-3f481b43.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1d10d08-5b108225.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1d22449-15fb948f.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1d7b3ac-5af8623b.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1dce572-c6a8cb5e.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1e1a7b8-0aec80e8.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1e8ad72-c3c79240.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1ee702d-0ae1fc10.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b1f0efd9-37a14dda.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b2a0648b-d8e126bc.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/BDD_subset/labels/val/b2b70230-bad4ff6e.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/utils/criterions.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/utils/data.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/PyTorch/wl-segmentation/utils/model.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Ultralytics/wl-detection/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/README.md +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/utils/criterions.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/utils/data.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-2d-lidar-detection/utils/model.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/README.md +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/criterions.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/data.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/kitti_download.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-3d-lidar-detection/utils/model.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/config.yaml +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/main.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/criterions.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/data.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/model.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/Usecases/wl-classification-signals_shape_classification/utils/signals.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/utils/__init__.py +0 -0
- {weightslab-1.3.3/weightslab/models → weightslab-1.4.0/weightslab/examples/utils/baseline_models}/__init__.py +0 -0
- {weightslab-1.3.3/weightslab/modules → weightslab-1.4.0/weightslab/examples/utils/baseline_models/pytorch}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/examples/utils/baseline_models/pytorch/models.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/_utils.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/integrations/ultralytics/collate.py +0 -0
- {weightslab-1.3.3/weightslab/proto → weightslab-1.4.0/weightslab/models}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/models/model_with_ops.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/models/monkey_patcher.py +0 -0
- {weightslab-1.3.3/weightslab/trainer → weightslab-1.4.0/weightslab/modules}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/modules/modules_with_ops.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/modules/neuron_ops.py +0 -0
- {weightslab-1.3.3/weightslab/trainer/services → weightslab-1.4.0/weightslab/proto}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/proto/experiment_service.proto +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/security/__init__.py +0 -0
- {weightslab-1.3.3/weightslab/trainer/services/agent → weightslab-1.4.0/weightslab/trainer}/__init__.py +0 -0
- {weightslab-1.3.3/weightslab/trainer/services/utils → weightslab-1.4.0/weightslab/trainer/services}/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/agent.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/query_example.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/agent_overview/schema.png +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent/intent_prompt.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/agent_service.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/instance_merger.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/model_service.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/services/utils/tools.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/trainer_services.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/trainer/trainer_tools.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/computational_graph.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/logs.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/modules_dependencies.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/plot_graph.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/utils/shape_prop.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/__init__.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/grpc_watchdog.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/lock_monitor.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/log_level.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab/watchdog/watchdog.py +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/dependency_links.txt +0 -0
- {weightslab-1.3.3 → weightslab-1.4.0}/weightslab.egg-info/top_level.txt +0 -0
|
@@ -221,7 +221,7 @@ jobs:
|
|
|
221
221
|
run: |
|
|
222
222
|
export WEIGHTSLAB_LOG_LEVEL="DEBUG"
|
|
223
223
|
# A per-test timeout guards against any regression that hangs a test.
|
|
224
|
-
python -m pytest ./tests -v --timeout=
|
|
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,13 +3,22 @@ weightslab.egg-info
|
|
|
3
3
|
build
|
|
4
4
|
agents
|
|
5
5
|
|
|
6
|
+
# UI dirs — built SPA artifacts, regenerated by `npm run build` / build:embed;
|
|
7
|
+
# never committed (the wheel embeds them at build time).
|
|
6
8
|
dist
|
|
9
|
+
static
|
|
10
|
+
weightslab/ui/static/
|
|
11
|
+
|
|
12
|
+
# Ignore files and directories generated by Python
|
|
7
13
|
logs
|
|
8
14
|
root_log_dir
|
|
9
15
|
__pycache__
|
|
10
16
|
venv
|
|
11
17
|
runs
|
|
12
18
|
data
|
|
19
|
+
outputs
|
|
20
|
+
!./tests/data/
|
|
21
|
+
!./weightslab/data/
|
|
13
22
|
MagicMock
|
|
14
23
|
drop
|
|
15
24
|
htmlcov
|
|
@@ -59,11 +59,12 @@ experiment becomes inspectable/editable; Weights Studio is the UI for that.
|
|
|
59
59
|
**Wire path (the thing that breaks most often):**
|
|
60
60
|
|
|
61
61
|
```
|
|
62
|
-
Browser
|
|
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
|
|
@@ -105,13 +102,18 @@ Most data problems are invisible until your model tells you: through loss spikes
|
|
|
105
102
|
## Quickstart
|
|
106
103
|
|
|
107
104
|

|
|
108
|
-

|
|
109
105
|
|
|
110
106
|
**1. Install**
|
|
111
107
|
```bash
|
|
112
108
|
pip install weightslab
|
|
113
109
|
```
|
|
114
|
-
|
|
110
|
+
|
|
111
|
+
**2. Launch the Studio**
|
|
112
|
+
```bash
|
|
113
|
+
weightslab start
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**3.a. Wrap your training script locally**
|
|
115
117
|
```python
|
|
116
118
|
# wrap the objects in your training script
|
|
117
119
|
|
|
@@ -125,14 +127,14 @@ loader = wl.watch_or_edit(dataset, flag='data', loader_name="train")
|
|
|
125
127
|
wl.serve(serving_grpc=True, serving_cli=False)
|
|
126
128
|
...
|
|
127
129
|
```
|
|
128
|
-
**3. Launch Studio**
|
|
129
|
-
```bash
|
|
130
|
-
weightslab ui launch # then open https://localhost:5173 🚀
|
|
131
|
-
```
|
|
132
|
-
<br>
|
|
133
130
|
|
|
134
|
-
|
|
131
|
+
**3.b. Or in the cloud**
|
|
132
|
+
|
|
133
|
+
[](https://colab.research.google.com/github/GrayboxTech/weightslab/blob/main/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb)
|
|
135
134
|
|
|
135
|
+
|
|
136
|
+
<br>
|
|
137
|
+
For a detailed installation guide and advanced configuration → [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
|
|
136
138
|
<br>
|
|
137
139
|
|
|
138
140
|
> [!TIP]
|
|
@@ -143,8 +145,9 @@ For a detailed installation guide and advanced configuration → [Installatio
|
|
|
143
145
|
> weightslab start example --seg # segmentation
|
|
144
146
|
> weightslab start example --det # detection
|
|
145
147
|
> weightslab start example --clus # clustering
|
|
146
|
-
> weightslab start example --gen # generation
|
|
147
148
|
> ```
|
|
149
|
+
>
|
|
150
|
+
> Explore our [sandbox](www.sandbox.graybx.com).
|
|
148
151
|
|
|
149
152
|
<br>
|
|
150
153
|
|
|
@@ -176,10 +179,10 @@ For a detailed installation guide and advanced configuration → [Installatio
|
|
|
176
179
|
3. **Run your script, then launch the UI in a separate terminal:**
|
|
177
180
|
```bash
|
|
178
181
|
python train.py
|
|
179
|
-
weightslab
|
|
182
|
+
weightslab start
|
|
180
183
|
```
|
|
181
184
|
|
|
182
|
-
4. **Open your browser** `
|
|
185
|
+
4. **Open your browser** at the URL printed by `weightslab start` and inspect your training in real time.
|
|
183
186
|
|
|
184
187
|
</details>
|
|
185
188
|
|
|
@@ -375,9 +378,8 @@ Find our documentation [online](https://grayboxtech.github.io/weightslab/latest/
|
|
|
375
378
|
|
|
376
379
|
New here (human or AI coding agent)? Start with [AGENTS.md](AGENTS.md) — it
|
|
377
380
|
captures the cross-repo architecture (weightslab backend ↔ weights_studio
|
|
378
|
-
frontend via the shared proto), the module maps, the
|
|
379
|
-
|
|
380
|
-
any single file. It's the fastest way to orient before a first change.
|
|
381
|
+
frontend via the shared proto), the module maps, the integration pattern, where tests live, and the gotchas that aren't obvious from
|
|
382
|
+
any single file. It's the fastest way to orient before a first change and contribution.
|
|
381
383
|
|
|
382
384
|
</details>
|
|
383
385
|
|
|
@@ -46,13 +46,18 @@ Most data problems are invisible until your model tells you: through loss spikes
|
|
|
46
46
|
## Quickstart
|
|
47
47
|
|
|
48
48
|

|
|
49
|
-

|
|
50
49
|
|
|
51
50
|
**1. Install**
|
|
52
51
|
```bash
|
|
53
52
|
pip install weightslab
|
|
54
53
|
```
|
|
55
|
-
|
|
54
|
+
|
|
55
|
+
**2. Launch the Studio**
|
|
56
|
+
```bash
|
|
57
|
+
weightslab start
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**3.a. Wrap your training script locally**
|
|
56
61
|
```python
|
|
57
62
|
# wrap the objects in your training script
|
|
58
63
|
|
|
@@ -66,14 +71,14 @@ loader = wl.watch_or_edit(dataset, flag='data', loader_name="train")
|
|
|
66
71
|
wl.serve(serving_grpc=True, serving_cli=False)
|
|
67
72
|
...
|
|
68
73
|
```
|
|
69
|
-
**3. Launch Studio**
|
|
70
|
-
```bash
|
|
71
|
-
weightslab ui launch # then open https://localhost:5173 🚀
|
|
72
|
-
```
|
|
73
|
-
<br>
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
**3.b. Or in the cloud**
|
|
76
|
+
|
|
77
|
+
[](https://colab.research.google.com/github/GrayboxTech/weightslab/blob/main/weightslab/examples/Notebooks/Colab/wl-colab-quickstart.ipynb)
|
|
76
78
|
|
|
79
|
+
|
|
80
|
+
<br>
|
|
81
|
+
For a detailed installation guide and advanced configuration → [Installation Documentation](https://grayboxtech.github.io/weightslab/latest/quickstart.html).
|
|
77
82
|
<br>
|
|
78
83
|
|
|
79
84
|
> [!TIP]
|
|
@@ -84,8 +89,9 @@ For a detailed installation guide and advanced configuration → [Installatio
|
|
|
84
89
|
> weightslab start example --seg # segmentation
|
|
85
90
|
> weightslab start example --det # detection
|
|
86
91
|
> weightslab start example --clus # clustering
|
|
87
|
-
> weightslab start example --gen # generation
|
|
88
92
|
> ```
|
|
93
|
+
>
|
|
94
|
+
> Explore our [sandbox](www.sandbox.graybx.com).
|
|
89
95
|
|
|
90
96
|
<br>
|
|
91
97
|
|
|
@@ -117,10 +123,10 @@ For a detailed installation guide and advanced configuration → [Installatio
|
|
|
117
123
|
3. **Run your script, then launch the UI in a separate terminal:**
|
|
118
124
|
```bash
|
|
119
125
|
python train.py
|
|
120
|
-
weightslab
|
|
126
|
+
weightslab start
|
|
121
127
|
```
|
|
122
128
|
|
|
123
|
-
4. **Open your browser** `
|
|
129
|
+
4. **Open your browser** at the URL printed by `weightslab start` and inspect your training in real time.
|
|
124
130
|
|
|
125
131
|
</details>
|
|
126
132
|
|
|
@@ -316,9 +322,8 @@ Find our documentation [online](https://grayboxtech.github.io/weightslab/latest/
|
|
|
316
322
|
|
|
317
323
|
New here (human or AI coding agent)? Start with [AGENTS.md](AGENTS.md) — it
|
|
318
324
|
captures the cross-repo architecture (weightslab backend ↔ weights_studio
|
|
319
|
-
frontend via the shared proto), the module maps, the
|
|
320
|
-
|
|
321
|
-
any single file. It's the fastest way to orient before a first change.
|
|
325
|
+
frontend via the shared proto), the module maps, the integration pattern, where tests live, and the gotchas that aren't obvious from
|
|
326
|
+
any single file. It's the fastest way to orient before a first change and contribution.
|
|
322
327
|
|
|
323
328
|
</details>
|
|
324
329
|
|
|
@@ -23,5 +23,6 @@ agent:
|
|
|
23
23
|
# openrouter_api_key: <your_openrouter_api_key> # Open router API key (can also be set as env variable OPENROUTER_API_KEY)
|
|
24
24
|
# openrouter_base_url: https://openrouter.ai/api/v1 # Open router base URL (can also be set as env variable OPENROUTER_BASE_URL)
|
|
25
25
|
# openrouter_request_timeout: 15.0 # Timeout for OpenRouter API requests in seconds (can also be set as env variable OPENROUTER_REQUEST_TIMEOUT)
|
|
26
|
+
# openrouter_max_tokens: 2048 # Max completion length. OpenRouter reserves max_tokens*price against the key budget BEFORE generating, so an uncapped value can 402 ("more credits, or fewer max_tokens") on a credit/weekly-limited key. Raise only if responses get truncated (env: OPENROUTER_MAX_TOKENS)
|
|
26
27
|
# openrouter_provider_sort: throughput # Bias OpenRouter's upstream routing to avoid slow providers: 'throughput' | 'latency' | 'price'. Empty string = let OpenRouter choose (env: OPENROUTER_PROVIDER_SORT)
|
|
27
28
|
# openrouter_structured_output: false # Ask the model for a schema-validated plan directly (skips free-form JSON + regex repair). More reliable, but only works on models whose OpenRouter route supports structured/JSON-schema output (e.g. Gemini, GPT-4o). env: OPENROUTER_STRUCTURED_OUTPUT=1
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
desc: 'CNN digit classifier on MNIST. Register hyperparameters, monitor per-sample loss, and use the deny-aware sampler to focus on hard examples.',
|
|
21
21
|
tags: ['classification', 'supervised', 'mnist', 'cnn'],
|
|
22
22
|
url: 'examples/pytorch/classification.html',
|
|
23
|
-
colab: COLAB + 'PyTorch/
|
|
23
|
+
colab: COLAB + 'PyTorch/wl-classification.ipynb'
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
badge: 'PyTorch', color: 'pytorch',
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
desc: 'Per-pixel semantic segmentation with a UNet. Track per-sample IoU and visualise mask overlays directly in the studio.',
|
|
29
29
|
tags: ['segmentation', 'semantic', 'bdd100k', 'masks', 'dense prediction'],
|
|
30
30
|
url: 'examples/pytorch/segmentation.html',
|
|
31
|
-
colab: COLAB + 'PyTorch/
|
|
31
|
+
colab: COLAB + 'PyTorch/wl-segmentation.ipynb'
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
badge: 'PyTorch', color: 'pytorch',
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
desc: 'Bounding-box detection on Penn-Fudan pedestrians. Per-instance multi-index dataframe with (sample_id, annotation_id) keys.',
|
|
37
37
|
tags: ['detection', 'object detection', 'bounding boxes', 'penn-fudan'],
|
|
38
38
|
url: 'examples/pytorch/detection.html',
|
|
39
|
-
colab: COLAB + 'PyTorch/
|
|
39
|
+
colab: COLAB + 'PyTorch/wl-detection.ipynb'
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
badge: 'PyTorch', color: 'pytorch',
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
desc: 'Metric learning with triplet loss on face datasets. Store and explore high-dimensional embeddings per sample in the studio.',
|
|
45
45
|
tags: ['clustering', 'unsupervised', 'embeddings', 'face recognition', 'metric learning'],
|
|
46
46
|
url: 'examples/pytorch/clustering.html',
|
|
47
|
-
colab: COLAB + 'PyTorch/
|
|
47
|
+
colab: COLAB + 'PyTorch/wl-clustering.ipynb'
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
badge: 'PyTorch', color: 'pytorch',
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
desc: 'Unsupervised anomaly detection on MVTec with a multi-task UNet. Monitor reconstruction quality and per-sample anomaly scores.',
|
|
53
53
|
tags: ['anomaly detection', 'generation', 'unsupervised', 'mvtec', 'reconstruction'],
|
|
54
54
|
url: 'examples/pytorch/generation.html',
|
|
55
|
-
colab: COLAB + 'PyTorch/
|
|
55
|
+
colab: COLAB + 'PyTorch/wl-generation.ipynb'
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
badge: 'Lightning', color: 'lightning',
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
desc: 'Dynamic subscribed signal that classifies each sample\'s loss trajectory (monotonic, U-shape, spiked, …) and auto-tags it.',
|
|
82
82
|
tags: ['loss analysis', 'signal', 'categorical tag', 'per-sample', 'trajectory'],
|
|
83
83
|
url: 'examples/usecases/loss_shape_classification.html',
|
|
84
|
-
colab: COLAB + 'Usecases/
|
|
84
|
+
colab: COLAB + 'Usecases/wl-segmentation-loss-shapes-classification.ipynb'
|
|
85
85
|
}
|
|
86
86
|
];
|
|
87
87
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
'The studio streams signals in real-time — no need to wait for an epoch to end to see results.',
|
|
11
11
|
'<code>weightslab start example --cls</code> launches a full MNIST classification demo in one command.',
|
|
12
12
|
'Use <code>subscribe_to=</code> on a signal to build reactive per-sample analytics derived from other signals.',
|
|
13
|
-
'Run <code>weightslab
|
|
13
|
+
'Run <code>weightslab start --certs</code> to enable HTTPS + mTLS for secure remote studio access.',
|
|
14
14
|
'Set <code>preload_labels=False</code> for large datasets to speed up startup; labels are loaded lazily.',
|
|
15
15
|
'Use <code>array_return_proxies=True</code> (default) to avoid loading the full dataset array into RAM.',
|
|
16
16
|
'Set <code>WEIGHTSLAB_LOG_LEVEL=DEBUG</code> to see full gRPC logs when debugging connectivity issues.',
|
|
@@ -82,7 +82,7 @@ exclude_patterns = [
|
|
|
82
82
|
# Superseded by examples/pytorch/classification.rst and examples/pytorch/segmentation.rst
|
|
83
83
|
"usecases.rst",
|
|
84
84
|
"segmentation_usecase.rst",
|
|
85
|
-
# Replaced by direct toctree
|
|
85
|
+
# Replaced by direct toctree entry usage/good_practice
|
|
86
86
|
"usage.rst",
|
|
87
87
|
# SDK params moved into configuration.rst
|
|
88
88
|
"usage/parameters.rst",
|