tracebloc 4.0.0__tar.gz → 4.0.2__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.
- {tracebloc-4.0.0 → tracebloc-4.0.2}/PKG-INFO +3 -2
- {tracebloc-4.0.0 → tracebloc-4.0.2}/pyproject.toml +8 -3
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/client.py +120 -18
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/contracts/training_requirements.source.json +3 -3
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/contracts/training_requirements.txt +9 -10
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/arguments.py +10 -3
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/model_dataset.py +2 -4
- tracebloc-4.0.2/tracebloc/utils/staging.py +17 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/checker.py +4 -6
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc.egg-info/PKG-INFO +3 -2
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc.egg-info/SOURCES.txt +1 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc.egg-info/requires.txt +2 -1
- {tracebloc-4.0.0 → tracebloc-4.0.2}/MANIFEST.in +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/README.md +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/license.txt +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/setup.cfg +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/_linking.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/_upload_conversion.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/api/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/api/experiment_status.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/api/responses.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/auth/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/auth/env_login.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/compat/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/compat/deprecation.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/compat/frameworks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/config.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/contracts/stage_urls.v1.json +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/contracts/stage_urls.v1.source.json +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/contracts/survival_payload.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/acceptance.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/hf/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/hf/_build.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/hf/_model_type.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/tabular.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/vision/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/families/vision/_matching.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/gate.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/heads.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/interfaces.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/licence/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/licence/spdx.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/outputs.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/assemble.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/checkpoint.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/gate_rules.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/generate.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/head.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/import_check.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/layer0.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/live.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/model_class.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/remote.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/repo.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/shake.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/owncode/source_tree.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/package.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/padding.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/report.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/tokenizers.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/convert/training_versions.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/base.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/detection.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/keypoint_detection.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/semantic_segmentation.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/tabular.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/text.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/time_series.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/datasets/time_to_event.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/downloads/lifelines_weights.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/downloads/seed_weights.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/env_login.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/exceptions.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/fetch.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/inference.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/library_fetch.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/lifelines_weights.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/link_model_dataset.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/answer.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/augmentation_methods.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/check_model.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/conversion.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/data_methods.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/library.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/regeneration.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/response.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/stored.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/training_methods.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/linking/user_methods.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/_partials.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/embeddings.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/nlp_finetune.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/nlp_generative.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/survival.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/tabular_timeseries.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/notebook/templates/vision_from_scratch.tpl +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/classes.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/declaration.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/fitted_model.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/frame_recording.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/link_check.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/pairs.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/schema.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/seed_prefixes.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/sklearn_check.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/survival.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/torch_checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/raw_mode/width_note.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/augmentation.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/callbacks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/converted.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/features.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/image_channels.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/image_size.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/link_total.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/lora.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/lora_validation.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/loss.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/loss_policy.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/loss_source.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/memory_estimate.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/memory_sizing.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/plan.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/preprocessing.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/shape.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/subdataset.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/submitter.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/training/summary.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/lifelines_time_to_event.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/loss_config.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/model_params.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/model_upload.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/nlp_probes.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/scikit_survival_time_to_event.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/sequence_length.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/skl_tabular_base.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/skl_tabular_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/skl_tabular_regression.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/statistical_base.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/survival_base.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_causal_language_modeler.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_embeddings.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_handler.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_image_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_key_point_detector.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_masked_language_modeler.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_multi_label_text_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_nlp_base.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_object_detector.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_semantic_segmentation.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_sentence_pair_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_seq2seq_modeler.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_tabular_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_tabular_regression.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_text_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_text_regressor.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_time_series_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_time_series_forecaster.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_time_to_event.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/torch_token_classifier.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/user_methods.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/weight_loaders.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/weights_averaging.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/weights_check.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/upload/weights_parts.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/user.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/class_order.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/constants.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/custom_loss_probe.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/data_probes.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/declared_classes.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/declared_cls.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/detection_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/device.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/entry_point.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/errors.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/feature_dict.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/model_loading.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/model_params.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/registry.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/resources.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/safetensors_io.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/tabular_classification_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/tabular_custom_loss_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/tabular_regression_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/text_classification_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/time_series_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/time_to_event_utils.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/utils/warnings_once.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/__init__.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/estimator_checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/header_rules.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/lifelines_checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/pytorch_checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/rewriter.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/scikit_survival_checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc/validation/sklearn_checks.py +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc.egg-info/dependency_links.txt +0 -0
- {tracebloc-4.0.0 → tracebloc-4.0.2}/tracebloc.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tracebloc
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
Summary: Build AI with anyone. On data that can't move. SDK for the tracebloc collaborative AI workspace.
|
|
5
5
|
Author-email: tracebloc <lukas@tracebloc.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -55,7 +55,7 @@ Requires-Dist: numpy==2.1.3; python_version < "3.14" and extra == "training"
|
|
|
55
55
|
Requires-Dist: pandas==2.3.0; python_version < "3.14" and extra == "training"
|
|
56
56
|
Requires-Dist: psutil==7.0.0; extra == "training"
|
|
57
57
|
Requires-Dist: pillow==13.0.0; extra == "training"
|
|
58
|
-
Requires-Dist: safetensors>=0.
|
|
58
|
+
Requires-Dist: safetensors>=0.8.0; extra == "training"
|
|
59
59
|
Requires-Dist: torch==2.14.1; extra == "training"
|
|
60
60
|
Requires-Dist: torchvision==0.29.1; extra == "training"
|
|
61
61
|
Requires-Dist: torchmetrics==1.9.0; extra == "training"
|
|
@@ -78,6 +78,7 @@ Requires-Dist: pytest==9.2.0; extra == "dev"
|
|
|
78
78
|
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
|
|
79
79
|
Requires-Dist: coverage==7.17.0; extra == "dev"
|
|
80
80
|
Requires-Dist: jsonschema>=4.18; extra == "dev"
|
|
81
|
+
Requires-Dist: pyyaml>=6.0; extra == "dev"
|
|
81
82
|
Requires-Dist: setuptools>=77.0.0; extra == "dev"
|
|
82
83
|
Requires-Dist: mypy>=1.5; extra == "dev"
|
|
83
84
|
Requires-Dist: ruff==0.16.0; extra == "dev"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tracebloc"
|
|
7
|
-
version = "4.0.
|
|
7
|
+
version = "4.0.2"
|
|
8
8
|
description = "Build AI with anyone. On data that can't move. SDK for the tracebloc collaborative AI workspace."
|
|
9
9
|
license = "MIT"
|
|
10
10
|
license-files = ["license.txt"]
|
|
@@ -123,7 +123,7 @@ training = [
|
|
|
123
123
|
"pandas==2.3.0; python_version < '3.14'",
|
|
124
124
|
"psutil==7.0.0",
|
|
125
125
|
"pillow==13.0.0",
|
|
126
|
-
"safetensors>=0.
|
|
126
|
+
"safetensors>=0.8.0",
|
|
127
127
|
"torch==2.14.1",
|
|
128
128
|
"torchvision==0.29.1",
|
|
129
129
|
"torchmetrics==1.9.0",
|
|
@@ -152,6 +152,11 @@ dev = [
|
|
|
152
152
|
# tests/test_check_result_contract.py validates tracebloc.checks' payload
|
|
153
153
|
# against the backend schema.
|
|
154
154
|
"jsonschema>=4.18",
|
|
155
|
+
# Test files read the workflow and mutation-row YAML with `import
|
|
156
|
+
# yaml` at module level, so they fail collection without it. Only [all]
|
|
157
|
+
# pulled it in (through transformers), which left `pip install -e .[dev]`
|
|
158
|
+
# short of a suite that collects.
|
|
159
|
+
"pyyaml>=6.0",
|
|
155
160
|
# tests/test_wheel_packages.py asks setuptools which packages the wheel
|
|
156
161
|
# ships. A 3.12+ environment has no setuptools unless something asks
|
|
157
162
|
# for it (build isolation keeps the build's copy out), so ask here, at
|
|
@@ -159,7 +164,7 @@ dev = [
|
|
|
159
164
|
"setuptools>=77.0.0",
|
|
160
165
|
"mypy>=1.5",
|
|
161
166
|
"ruff==0.16.0",
|
|
162
|
-
# tests/test_convert_tokenizers.py converts a SentencePiece .model and
|
|
167
|
+
# tests/convert/test_convert_tokenizers.py converts a SentencePiece .model and
|
|
163
168
|
# checks its ids against sentencepiece itself; transformers reads the
|
|
164
169
|
# .model through protobuf. Those tests fail, not skip, when CI lacks them.
|
|
165
170
|
"sentencepiece>=0.2.0",
|
|
@@ -23,6 +23,13 @@ are **not** automatically retried, because a server-side 500 on an
|
|
|
23
23
|
upload might still have persisted the model and a retry would create
|
|
24
24
|
a duplicate. POST failures bubble up as :class:`APIError`; callers can
|
|
25
25
|
implement idempotent retry at their layer if they want.
|
|
26
|
+
|
|
27
|
+
**Overload (HTTP 429):** the backend sheds load with ``429`` plus
|
|
28
|
+
``Retry-After``. A rejected request was not processed, so reads
|
|
29
|
+
(``GET``/``HEAD``/``OPTIONS``) and login wait the stated time and retry
|
|
30
|
+
(:func:`_send_honouring_429`: each wait capped at :data:`MAX_RETRY_WAIT_SECONDS`,
|
|
31
|
+
all waits at :data:`MAX_TOTAL_WAIT_SECONDS`). Past the budget, and at once for
|
|
32
|
+
every other call, the failure says the service is busy (:data:`BUSY_MESSAGE`).
|
|
26
33
|
"""
|
|
27
34
|
|
|
28
35
|
from __future__ import annotations
|
|
@@ -31,7 +38,11 @@ from typing import Any, Dict, Mapping, Optional
|
|
|
31
38
|
|
|
32
39
|
import json as _json
|
|
33
40
|
import platform
|
|
41
|
+
import time
|
|
42
|
+
from datetime import datetime, timezone
|
|
43
|
+
from email.utils import parsedate_to_datetime
|
|
34
44
|
from importlib import metadata as _metadata
|
|
45
|
+
from typing import Callable
|
|
35
46
|
|
|
36
47
|
import requests
|
|
37
48
|
from requests.adapters import HTTPAdapter
|
|
@@ -76,13 +87,83 @@ SDK_VERSION = _sdk_version()
|
|
|
76
87
|
USER_AGENT = f"tracebloc-sdk/{SDK_VERSION} (python/{platform.python_version()})"
|
|
77
88
|
|
|
78
89
|
|
|
90
|
+
#: Longest single ``Retry-After`` wait, and the most an SDK call waits in total.
|
|
91
|
+
MAX_RETRY_WAIT_SECONDS = 60.0
|
|
92
|
+
MAX_TOTAL_WAIT_SECONDS = 180.0
|
|
93
|
+
|
|
94
|
+
#: Wait when a 429 names no usable ``Retry-After``; also the shortest wait taken,
|
|
95
|
+
#: so a ``Retry-After: 0`` still spends the budget and the loop ends.
|
|
96
|
+
_DEFAULT_RETRY_WAIT_SECONDS = 1.0
|
|
97
|
+
|
|
98
|
+
#: Methods that are re-sent on a 429 (reads); login is re-sent explicitly.
|
|
99
|
+
_RETRY_ON_429_METHODS = frozenset({"GET", "HEAD", "OPTIONS"})
|
|
100
|
+
|
|
101
|
+
#: What a 429 reads as once the SDK has stopped waiting, or does not wait.
|
|
102
|
+
BUSY_MESSAGE = (
|
|
103
|
+
"The tracebloc service is busy right now (HTTP 429). "
|
|
104
|
+
"Please retry in a few minutes."
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Indirection so tests can run the waits without sleeping.
|
|
108
|
+
_sleep = time.sleep
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _retry_after_seconds(response: requests.Response) -> float:
|
|
112
|
+
"""Seconds a 429 asks us to wait: ``Retry-After`` as delay-seconds or an
|
|
113
|
+
HTTP date; a default when absent or unreadable. Never negative."""
|
|
114
|
+
raw = response.headers.get("Retry-After")
|
|
115
|
+
if isinstance(raw, str) and raw.strip():
|
|
116
|
+
raw = raw.strip()
|
|
117
|
+
try:
|
|
118
|
+
return max(0.0, float(raw))
|
|
119
|
+
except ValueError:
|
|
120
|
+
pass
|
|
121
|
+
try:
|
|
122
|
+
when = parsedate_to_datetime(raw)
|
|
123
|
+
if when.tzinfo is None:
|
|
124
|
+
when = when.replace(tzinfo=timezone.utc)
|
|
125
|
+
return max(0.0, (when - datetime.now(timezone.utc)).total_seconds())
|
|
126
|
+
except (TypeError, ValueError):
|
|
127
|
+
pass
|
|
128
|
+
return _DEFAULT_RETRY_WAIT_SECONDS
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _send_honouring_429(
|
|
132
|
+
send: Callable[[], requests.Response], *, retry: bool
|
|
133
|
+
) -> requests.Response:
|
|
134
|
+
"""Run ``send``; on a 429 with ``retry`` wait ``Retry-After`` and run it
|
|
135
|
+
again until the budget (:data:`MAX_TOTAL_WAIT_SECONDS`) is spent.
|
|
136
|
+
|
|
137
|
+
Returns the last response, which may still be a 429 for the caller's
|
|
138
|
+
error handling. The wait that would overrun the budget is not taken.
|
|
139
|
+
"""
|
|
140
|
+
waited = 0.0
|
|
141
|
+
while True:
|
|
142
|
+
response = send()
|
|
143
|
+
if response.status_code != 429 or not retry:
|
|
144
|
+
return response
|
|
145
|
+
wait = min(
|
|
146
|
+
max(_retry_after_seconds(response), _DEFAULT_RETRY_WAIT_SECONDS),
|
|
147
|
+
MAX_RETRY_WAIT_SECONDS,
|
|
148
|
+
)
|
|
149
|
+
if waited + wait > MAX_TOTAL_WAIT_SECONDS:
|
|
150
|
+
return response
|
|
151
|
+
response.close()
|
|
152
|
+
_sleep(wait)
|
|
153
|
+
waited += wait
|
|
154
|
+
|
|
155
|
+
|
|
79
156
|
def _error_message(response: requests.Response) -> str:
|
|
80
157
|
"""The user-facing message for a non-2xx response.
|
|
81
158
|
|
|
82
159
|
A 426 is the backend refusing this SDK as older than the oldest it
|
|
83
160
|
supports (``{"error": "upgrade_required", "min_version": ...}``); say
|
|
84
161
|
that, with the fix, rather than the bare ``upgrade_required`` code.
|
|
162
|
+
A 429 is the backend shedding load: :data:`BUSY_MESSAGE`, never the
|
|
163
|
+
server's own wording.
|
|
85
164
|
"""
|
|
165
|
+
if response.status_code == 429:
|
|
166
|
+
return BUSY_MESSAGE
|
|
86
167
|
if response.status_code == 426:
|
|
87
168
|
try:
|
|
88
169
|
body = response.json()
|
|
@@ -101,7 +182,21 @@ def _error_message(response: requests.Response) -> str:
|
|
|
101
182
|
return _extract_error_message(response)
|
|
102
183
|
|
|
103
184
|
|
|
104
|
-
|
|
185
|
+
class _Retry(Retry):
|
|
186
|
+
"""urllib3 ``Retry`` that leaves a 429 alone.
|
|
187
|
+
|
|
188
|
+
A 429's ``Retry-After`` is honoured, capped, by ``_send_honouring_429``;
|
|
189
|
+
urllib3's own sleep on it is uncapped and would stack on that budget. The
|
|
190
|
+
header still governs a 503's wait.
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
def is_retry(self, method, status_code, has_retry_after=False):
|
|
194
|
+
if status_code == 429:
|
|
195
|
+
return False
|
|
196
|
+
return super().is_retry(method, status_code, has_retry_after)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
_DEFAULT_RETRY = _Retry(
|
|
105
200
|
total=3,
|
|
106
201
|
backoff_factor=0.5,
|
|
107
202
|
status_forcelist=(500, 502, 503, 504),
|
|
@@ -252,17 +347,21 @@ class TraceblocClient:
|
|
|
252
347
|
# Only passed when asked for, so every existing call is issued exactly
|
|
253
348
|
# as before.
|
|
254
349
|
extra = {"stream": True} if stream else {}
|
|
350
|
+
verb = method.upper()
|
|
255
351
|
try:
|
|
256
|
-
response =
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
352
|
+
response = _send_honouring_429(
|
|
353
|
+
lambda: self._session.request(
|
|
354
|
+
method=verb,
|
|
355
|
+
url=url,
|
|
356
|
+
data=data,
|
|
357
|
+
json=json,
|
|
358
|
+
files=files,
|
|
359
|
+
params=params,
|
|
360
|
+
headers=self._headers(headers),
|
|
361
|
+
timeout=request_timeout,
|
|
362
|
+
**extra,
|
|
363
|
+
),
|
|
364
|
+
retry=verb in _RETRY_ON_429_METHODS,
|
|
266
365
|
)
|
|
267
366
|
except requests.RequestException as error:
|
|
268
367
|
raise APIError(
|
|
@@ -312,13 +411,16 @@ class TraceblocClient:
|
|
|
312
411
|
"""
|
|
313
412
|
url = self._url("api-token-auth/")
|
|
314
413
|
try:
|
|
315
|
-
response =
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
414
|
+
response = _send_honouring_429(
|
|
415
|
+
lambda: self._session.post(
|
|
416
|
+
url,
|
|
417
|
+
data={"username": username, "password": password},
|
|
418
|
+
# Not self._headers(): login must never carry a previous
|
|
419
|
+
# session's Authorization, only who is calling.
|
|
420
|
+
headers={"User-Agent": USER_AGENT},
|
|
421
|
+
timeout=self._config.timeout_seconds,
|
|
422
|
+
),
|
|
423
|
+
retry=True,
|
|
322
424
|
)
|
|
323
425
|
except requests.RequestException as error:
|
|
324
426
|
raise APIError(
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"//": "Pin for tracebloc/contracts/training_requirements.txt, the training images' exact library versions. The txt is tracebloc-engine's use_cases/requirements.txt copied byte-for-byte at `sha`; `blobSha` is its git blob sha there, which tests/test_convert_training_versions.py recomputes. tracebloc.convert.training_versions reads it to refuse a conversion made under other library versions. Re-pin with scripts/sync-training-requirements.sh (put the new commit in `sha` and run it; org-config's contract-pin-bump.yml does the same), then run that test.",
|
|
3
3
|
"repo": "tracebloc/tracebloc-engine",
|
|
4
4
|
"ref": "develop",
|
|
5
|
-
"sha": "
|
|
5
|
+
"sha": "4c5c97741ad127eac2af32043c69a6e28b10e7f7",
|
|
6
6
|
"path": "use_cases/requirements.txt",
|
|
7
|
-
"blobSha": "
|
|
8
|
-
"fetched": "2026-10
|
|
7
|
+
"blobSha": "3da50058c9374cf5fa503103d54d44d31e3c7e31",
|
|
8
|
+
"fetched": "2026-11-10"
|
|
9
9
|
}
|
|
@@ -15,23 +15,22 @@ pandas==2.3.0
|
|
|
15
15
|
mysql-connector-python==9.3.0
|
|
16
16
|
numpy==2.1.3
|
|
17
17
|
pillow==13.0.0
|
|
18
|
+
# core/data/tiff_image.py reads a TIFF with every channel and its bit depth, which
|
|
19
|
+
# Pillow and OpenCV do not; imagecodecs decodes its LZW / Deflate compression.
|
|
20
|
+
tifffile==2026.3.3
|
|
21
|
+
imagecodecs==2026.3.6
|
|
18
22
|
torch==2.14.1
|
|
19
23
|
torchvision==0.29.1
|
|
20
24
|
torchmetrics==1.9.0
|
|
21
25
|
albumentations==2.0.5
|
|
22
|
-
tracebloc-telemetry==0.
|
|
23
|
-
# Kept: a training pod on a customer cluster has no other route off it until
|
|
24
|
-
# the edge collector ships (backend#1905/#1906, RFC-1872 D10).
|
|
25
|
-
opencensus==0.11.4
|
|
26
|
-
opencensus-context==0.1.3
|
|
27
|
-
opencensus-ext-azure==1.1.15
|
|
26
|
+
tracebloc-telemetry==0.2.0 # RFC-BACKEND-1872 D2 — the shared contract emitter
|
|
28
27
|
timm==1.0.26
|
|
29
28
|
transformers==5.16.1
|
|
30
29
|
einops==0.8.2
|
|
31
30
|
# SEC-03 (RFC 0004): weight I/O reads/writes SafeTensors via core/contracts/safetensors_io.py.
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
safetensors>=0.
|
|
31
|
+
# A floor, not a pin: before 0.8.0 save_file copies the whole payload to bytes, a copy the SDK's
|
|
32
|
+
# memory estimate does not count. core/tests/scripts/test_safetensors_floor.py holds every family to it.
|
|
33
|
+
safetensors>=0.8.0
|
|
35
34
|
scikit-learn==1.8.0
|
|
36
35
|
# CPU build. `xgboost` declares `nvidia-nccl-cu12` on Linux (342 MB compressed,
|
|
37
36
|
# 476 MB on disk) that no CPU image can use. Same version, same `import xgboost`;
|
|
@@ -49,7 +48,7 @@ pyarrow==23.0.1
|
|
|
49
48
|
# plotly,sensitivity,shap]`, ~300 MB on disk of dashboard/notebook extras. The
|
|
50
49
|
# zoo's two EBM templates import `interpret.glassbox` only, which interpret-core
|
|
51
50
|
# alone provides (hard requirements: numpy, pandas, scikit-learn, joblib).
|
|
52
|
-
# `core/tests/
|
|
51
|
+
# `core/tests/scripts/test_interpret_arm64_pin.py` holds the version floor
|
|
53
52
|
# (backend#3456).
|
|
54
53
|
interpret-core==0.6.10
|
|
55
54
|
pytorch-forecasting==1.4.0
|
|
@@ -42,6 +42,13 @@ CONFIG_BYTES = 1_000_000
|
|
|
42
42
|
|
|
43
43
|
_LITERAL = (int, float, str, bool, type(None))
|
|
44
44
|
|
|
45
|
+
#: What ``ast.literal_eval`` raises on a node that is not a literal: a
|
|
46
|
+
#: ``ValueError`` for a name or a call, a ``TypeError`` for a dict or set
|
|
47
|
+
#: literal with an unhashable key (``{[1]: 2}``), which parses but cannot be
|
|
48
|
+
#: built, and the rest for a literal too deep or too big to build. The same
|
|
49
|
+
#: set ``source_tree`` and ``shake`` catch around their own ``literal_eval``.
|
|
50
|
+
_NOT_LITERAL = (ValueError, TypeError, SyntaxError, MemoryError, RecursionError)
|
|
51
|
+
|
|
45
52
|
|
|
46
53
|
@dataclass(frozen=True)
|
|
47
54
|
class Parameter:
|
|
@@ -188,7 +195,7 @@ def _put(
|
|
|
188
195
|
) -> None:
|
|
189
196
|
try:
|
|
190
197
|
value = ast.literal_eval(node)
|
|
191
|
-
except
|
|
198
|
+
except _NOT_LITERAL:
|
|
192
199
|
return
|
|
193
200
|
convert = _CONVERTERS.get(kind.id) if isinstance(kind, ast.Name) else None
|
|
194
201
|
if convert is not None and isinstance(value, str):
|
|
@@ -205,7 +212,7 @@ def default_value(parameter: Parameter) -> tuple[bool, Any]:
|
|
|
205
212
|
return False, None
|
|
206
213
|
try:
|
|
207
214
|
return True, ast.literal_eval(parameter.default)
|
|
208
|
-
except
|
|
215
|
+
except _NOT_LITERAL:
|
|
209
216
|
return False, None
|
|
210
217
|
|
|
211
218
|
|
|
@@ -224,7 +231,7 @@ def image_size(tree: SourceTree, sources: Sources) -> SourcedValue | None:
|
|
|
224
231
|
if parts and parts[-1] in RESIZE_CALLS and node.args:
|
|
225
232
|
try:
|
|
226
233
|
side = _side(ast.literal_eval(node.args[0]))
|
|
227
|
-
except
|
|
234
|
+
except _NOT_LITERAL:
|
|
228
235
|
continue
|
|
229
236
|
if side is not None:
|
|
230
237
|
detail = f"{module.relative}:{node.lineno}"
|
|
@@ -10,6 +10,7 @@ from tracebloc.training.subdataset import class_set_error, dataset_error, reques
|
|
|
10
10
|
from tracebloc.training.image_channels import image_channel_check
|
|
11
11
|
from tracebloc.utils.data_probes import get_images_count, validate_kwargs
|
|
12
12
|
from tracebloc.utils.errors import format_exception
|
|
13
|
+
from tracebloc.utils.staging import model_staging_dir
|
|
13
14
|
from tracebloc.utils.model_params import get_model_params_count
|
|
14
15
|
from tracebloc.utils.constants import (
|
|
15
16
|
IMAGE_DATA_TYPES,
|
|
@@ -262,10 +263,7 @@ class LinkModelDataset(DataPlanMethods, TrainingPlanMethods, AugmentationMethods
|
|
|
262
263
|
self._utilisation_category = kwargs["utilisation_category"]
|
|
263
264
|
self.model_path = kwargs["model_path"]
|
|
264
265
|
self._model_name = kwargs["model_name"]
|
|
265
|
-
self.tmp_path =
|
|
266
|
-
os.path.dirname(self.model_path),
|
|
267
|
-
f"tmpmodel_{self._model_name[:64]}",
|
|
268
|
-
)
|
|
266
|
+
self.tmp_path = model_staging_dir(self.model_path, self._model_name)
|
|
269
267
|
if not os.path.isdir(self.tmp_path):
|
|
270
268
|
os.mkdir(self.tmp_path)
|
|
271
269
|
self._environment = kwargs["environment"]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Where a model's staging directory (``tmpmodel_<name>``) lives."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
#: Longest model name carried into the directory name.
|
|
6
|
+
MAX_STAGING_NAME_LENGTH = 64
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def model_staging_dir(model_path: str, model_name: str) -> str:
|
|
10
|
+
"""Path of the ``tmpmodel_<name>`` directory beside ``model_path``.
|
|
11
|
+
|
|
12
|
+
Validation and linking share it, so both must derive it here.
|
|
13
|
+
"""
|
|
14
|
+
return os.path.join(
|
|
15
|
+
os.path.dirname(model_path),
|
|
16
|
+
f"tmpmodel_{model_name[:MAX_STAGING_NAME_LENGTH]}",
|
|
17
|
+
)
|
|
@@ -5,6 +5,7 @@ from inspect import getmembers, isclass
|
|
|
5
5
|
from tracebloc.compat.frameworks import missing_extra_hint
|
|
6
6
|
from tracebloc.utils.errors import format_exception
|
|
7
7
|
from tracebloc.utils.model_loading import load_model
|
|
8
|
+
from tracebloc.utils.staging import MAX_STAGING_NAME_LENGTH, model_staging_dir
|
|
8
9
|
from tracebloc.validation.header_rules import missing_framework_message
|
|
9
10
|
from tracebloc.validation.rewriter import ModelFileRewriter
|
|
10
11
|
|
|
@@ -27,7 +28,7 @@ class ModelChecker:
|
|
|
27
28
|
working against a single copy of the state owned by the rewriter.
|
|
28
29
|
"""
|
|
29
30
|
|
|
30
|
-
MAX_MODEL_NAME_LENGTH =
|
|
31
|
+
MAX_MODEL_NAME_LENGTH = MAX_STAGING_NAME_LENGTH
|
|
31
32
|
model = None
|
|
32
33
|
notallowed = ["__MACOSX", "__pycache__"]
|
|
33
34
|
|
|
@@ -96,11 +97,8 @@ class ModelChecker:
|
|
|
96
97
|
|
|
97
98
|
def load_model_file(self):
|
|
98
99
|
# ``os.path``, not ``rsplit("/")``: a Windows path has no "/" (#898).
|
|
99
|
-
|
|
100
|
-
self.tmp_file_path =
|
|
101
|
-
model_dir,
|
|
102
|
-
f"tmpmodel_{self.model_name[: self.MAX_MODEL_NAME_LENGTH]}",
|
|
103
|
-
)
|
|
100
|
+
file = os.path.split(self.model_path)[1]
|
|
101
|
+
self.tmp_file_path = model_staging_dir(self.model_path, self.model_name)
|
|
104
102
|
if not os.path.isdir(self.tmp_file_path):
|
|
105
103
|
os.mkdir(self.tmp_file_path)
|
|
106
104
|
# check if file contains the MyModel function
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tracebloc
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
Summary: Build AI with anyone. On data that can't move. SDK for the tracebloc collaborative AI workspace.
|
|
5
5
|
Author-email: tracebloc <lukas@tracebloc.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -55,7 +55,7 @@ Requires-Dist: numpy==2.1.3; python_version < "3.14" and extra == "training"
|
|
|
55
55
|
Requires-Dist: pandas==2.3.0; python_version < "3.14" and extra == "training"
|
|
56
56
|
Requires-Dist: psutil==7.0.0; extra == "training"
|
|
57
57
|
Requires-Dist: pillow==13.0.0; extra == "training"
|
|
58
|
-
Requires-Dist: safetensors>=0.
|
|
58
|
+
Requires-Dist: safetensors>=0.8.0; extra == "training"
|
|
59
59
|
Requires-Dist: torch==2.14.1; extra == "training"
|
|
60
60
|
Requires-Dist: torchvision==0.29.1; extra == "training"
|
|
61
61
|
Requires-Dist: torchmetrics==1.9.0; extra == "training"
|
|
@@ -78,6 +78,7 @@ Requires-Dist: pytest==9.2.0; extra == "dev"
|
|
|
78
78
|
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
|
|
79
79
|
Requires-Dist: coverage==7.17.0; extra == "dev"
|
|
80
80
|
Requires-Dist: jsonschema>=4.18; extra == "dev"
|
|
81
|
+
Requires-Dist: pyyaml>=6.0; extra == "dev"
|
|
81
82
|
Requires-Dist: setuptools>=77.0.0; extra == "dev"
|
|
82
83
|
Requires-Dist: mypy>=1.5; extra == "dev"
|
|
83
84
|
Requires-Dist: ruff==0.16.0; extra == "dev"
|
|
@@ -190,6 +190,7 @@ tracebloc/utils/model_params.py
|
|
|
190
190
|
tracebloc/utils/registry.py
|
|
191
191
|
tracebloc/utils/resources.py
|
|
192
192
|
tracebloc/utils/safetensors_io.py
|
|
193
|
+
tracebloc/utils/staging.py
|
|
193
194
|
tracebloc/utils/tabular_classification_utils.py
|
|
194
195
|
tracebloc/utils/tabular_custom_loss_utils.py
|
|
195
196
|
tracebloc/utils/tabular_regression_utils.py
|
|
@@ -17,6 +17,7 @@ pytest==9.2.0
|
|
|
17
17
|
pytest-cov==7.1.0
|
|
18
18
|
coverage==7.17.0
|
|
19
19
|
jsonschema>=4.18
|
|
20
|
+
pyyaml>=6.0
|
|
20
21
|
setuptools>=77.0.0
|
|
21
22
|
mypy>=1.5
|
|
22
23
|
ruff==0.16.0
|
|
@@ -64,7 +65,7 @@ xgboost-cpu>=3.2.0
|
|
|
64
65
|
[training]
|
|
65
66
|
psutil==7.0.0
|
|
66
67
|
pillow==13.0.0
|
|
67
|
-
safetensors>=0.
|
|
68
|
+
safetensors>=0.8.0
|
|
68
69
|
torch==2.14.1
|
|
69
70
|
torchvision==0.29.1
|
|
70
71
|
torchmetrics==1.9.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|