opensportslib 0.3.1.dev10__tar.gz → 0.3.1.dev11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. {opensportslib-0.3.1.dev10/opensportslib.egg-info → opensportslib-0.3.1.dev11}/PKG-INFO +5 -1
  2. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/README.md +4 -0
  3. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/base_task_model.py +50 -4
  4. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/classification.py +16 -0
  5. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/localization.py +16 -0
  6. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/vqa.py +16 -12
  7. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11/opensportslib.egg-info}/PKG-INFO +5 -1
  8. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/pyproject.toml +1 -1
  9. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/LICENSE +0 -0
  10. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/LICENSE-COMMERCIAL +0 -0
  11. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/MANIFEST.in +0 -0
  12. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/examples/quickstart/basic_classification.py +0 -0
  13. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/examples/quickstart/basic_localization.py +0 -0
  14. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/examples/quickstart/basic_vqa.py +0 -0
  15. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/__init__.py +0 -0
  16. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/adaptation/__init__.py +0 -0
  17. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/adaptation/spotta.py +0 -0
  18. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/__init__.py +0 -0
  19. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/config.py +0 -0
  20. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/apis/configuration.py +0 -0
  21. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/cli.py +0 -0
  22. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/classification/default.yaml +0 -0
  23. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
  24. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
  25. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/classification/video.yaml +0 -0
  26. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/default.yaml +0 -0
  27. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
  28. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/default.yaml +0 -0
  29. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/e2e_spotta.yaml +0 -0
  30. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/h5_header_distance.yaml +0 -0
  31. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/h5_header_skeleton.yaml +0 -0
  32. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
  33. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/tracking_action_spotting.yaml +0 -0
  34. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/video_dali.yaml +0 -0
  35. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/localization/video_ocv.yaml +0 -0
  36. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/vqa/default.yaml +0 -0
  37. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/vqa/qwen.yaml +0 -0
  38. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/vqa/qwen3_vl_native.yaml +0 -0
  39. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/vqa/qwen_lora.yaml +0 -0
  40. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/vqa/qwen_sngar_frames.yaml +0 -0
  41. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/configs/vqa/xvars.yaml +0 -0
  42. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/__init__.py +0 -0
  43. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/__init__.py +0 -0
  44. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/accessors.py +0 -0
  45. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/conflicts.py +0 -0
  46. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/editable.py +0 -0
  47. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/loader.py +0 -0
  48. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/migrate.py +0 -0
  49. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/migrations/__init__.py +0 -0
  50. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
  51. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/rule_variants.py +0 -0
  52. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/runtime_adapter.py +0 -0
  53. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/schema.py +0 -0
  54. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/schemas/__init__.py +0 -0
  55. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
  56. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
  57. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/config/validate.py +0 -0
  58. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/loss/__init__.py +0 -0
  59. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/loss/builder.py +0 -0
  60. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/loss/calf.py +0 -0
  61. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/loss/ce.py +0 -0
  62. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/loss/combine.py +0 -0
  63. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/loss/nll.py +0 -0
  64. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/optimizer/__init__.py +0 -0
  65. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/optimizer/builder.py +0 -0
  66. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  67. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/scheduler/__init__.py +0 -0
  68. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/scheduler/builder.py +0 -0
  69. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/trainer/__init__.py +0 -0
  70. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/trainer/classification_trainer.py +0 -0
  71. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/trainer/localization_trainer.py +0 -0
  72. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/trainer/vqa_trainer.py +0 -0
  73. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/checkpoint.py +0 -0
  74. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/config.py +0 -0
  75. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/config_normalize.py +0 -0
  76. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/data.py +0 -0
  77. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/ddp.py +0 -0
  78. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/default_args.py +0 -0
  79. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/direct_video.py +0 -0
  80. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/hf_runtime.py +0 -0
  81. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/lightning.py +0 -0
  82. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/load_annotations.py +0 -0
  83. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/seed.py +0 -0
  84. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/video_processing.py +0 -0
  85. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/core/utils/wandb.py +0 -0
  86. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/__init__.py +0 -0
  87. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/builder.py +0 -0
  88. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/classification_dataset.py +0 -0
  89. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/localization_dataset.py +0 -0
  90. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/utils/__init__.py +0 -0
  91. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/utils/h5_tracking.py +0 -0
  92. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/utils/tracking.py +0 -0
  93. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/datasets/vqa_dataset.py +0 -0
  94. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/classification.yaml +0 -0
  95. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
  96. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
  97. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  98. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/localization.yaml +0 -0
  99. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
  100. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
  101. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/metrics/classification_metric.py +0 -0
  102. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/metrics/localization_metric.py +0 -0
  103. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/metrics/vqa_metric.py +0 -0
  104. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/__init__.py +0 -0
  105. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/backbones/builder.py +0 -0
  106. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/contextaware.py +0 -0
  107. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/e2e.py +0 -0
  108. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/learnablepooling.py +0 -0
  109. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/qwen_vl_native.py +0 -0
  110. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/qwen_xvars.py +0 -0
  111. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/rule_based.py +0 -0
  112. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/tracking.py +0 -0
  113. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/vars.py +0 -0
  114. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/video.py +0 -0
  115. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
  116. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/video_mae.py +0 -0
  117. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
  118. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/builder.py +0 -0
  119. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/heads/builder.py +0 -0
  120. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/neck/builder.py +0 -0
  121. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/common.py +0 -0
  122. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/impl/__init__.py +0 -0
  123. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/impl/asformer.py +0 -0
  124. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/impl/calf.py +0 -0
  125. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/impl/gsm.py +0 -0
  126. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/impl/gtad.py +0 -0
  127. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/impl/tsm.py +0 -0
  128. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/litebase.py +0 -0
  129. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/modules.py +0 -0
  130. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/shift.py +0 -0
  131. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/utils.py +0 -0
  132. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
  133. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/vqa_prompting.py +0 -0
  134. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/models/utils/xvars_clip_index.py +0 -0
  135. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/remote_registry.py +0 -0
  136. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/setup/setup.py +0 -0
  137. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/tools/__init__.py +0 -0
  138. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/tools/_common.py +0 -0
  139. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/tools/hf_transfer.py +0 -0
  140. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  141. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  142. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib.egg-info/SOURCES.txt +0 -0
  143. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib.egg-info/dependency_links.txt +0 -0
  144. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib.egg-info/entry_points.txt +0 -0
  145. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib.egg-info/requires.txt +0 -0
  146. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/opensportslib.egg-info/top_level.txt +0 -0
  147. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/scripts/release_versions.py +0 -0
  148. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/scripts/run_h5_header_rule_inference.py +0 -0
  149. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/setup.cfg +0 -0
  150. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/conftest.py +0 -0
  151. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/release/__init__.py +0 -0
  152. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/release/_release_common.py +0 -0
  153. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/release/test_classification_release.py +0 -0
  154. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/release/test_localization_release.py +0 -0
  155. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/release/test_vqa_release.py +0 -0
  156. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_classification_dataset_paths.py +0 -0
  157. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_classification_trainer_dataloader.py +0 -0
  158. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_config_architecture.py +0 -0
  159. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_config_split_override_sync.py +0 -0
  160. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_config_utils_smoke.py +0 -0
  161. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_conversion_tools.py +0 -0
  162. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_editable_config.py +0 -0
  163. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_extract_xvars_features.py +0 -0
  164. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_h5_header_rule_spotter.py +0 -0
  165. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_h5_header_skeleton_spotter.py +0 -0
  166. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_h5_tracking_dataset.py +0 -0
  167. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_hf_transfer_tools.py +0 -0
  168. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_localization_dali_filenames.py +0 -0
  169. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_localization_hf_backend_override.py +0 -0
  170. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_localization_intervals.py +0 -0
  171. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_optional_hf_config.py +0 -0
  172. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_package_smoke.py +0 -0
  173. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_pretrained_config_merge_policy.py +0 -0
  174. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_public_apis_smoke.py +0 -0
  175. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_release_versions.py +0 -0
  176. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_remote_model_registry.py +0 -0
  177. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_server_model_registry.py +0 -0
  178. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_setup_cli.py +0 -0
  179. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_spotta_e2e.py +0 -0
  180. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_subset_train_infer_integration.py +0 -0
  181. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_task_model_api_contract.py +0 -0
  182. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_vqa_api.py +0 -0
  183. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_vqa_metrics_semantic.py +0 -0
  184. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_vqa_qwen_xvars.py +0 -0
  185. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_vqa_training_lora.py +0 -0
  186. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tests/test_vqa_xvars_videochatgpt.py +0 -0
  187. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/build_sn_vqa_2026_vqa.py +0 -0
  188. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/build_sngar_spotting.py +0 -0
  189. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/build_soccernet_gar.py +0 -0
  190. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
  191. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/build_soccernet_gar_vqa.py +0 -0
  192. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/build_xvars_indexes.py +0 -0
  193. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/extract_xvars_clip_features.py +0 -0
  194. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  195. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  196. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/sngar_dataset_card.py +0 -0
  197. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/sngar_events.py +0 -0
  198. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/convert/verify_sngar_spotting.py +0 -0
  199. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/download/download_hf_repo.py +0 -0
  200. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/download/download_osl_hf.py +0 -0
  201. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/download/push_sngar_spotting.py +0 -0
  202. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/download/upload_osl_hf.py +0 -0
  203. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/training/classification.py +0 -0
  204. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/training/localization.py +0 -0
  205. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/training/vqa.py +0 -0
  206. {opensportslib-0.3.1.dev10 → opensportslib-0.3.1.dev11}/tools/upload/upload_model_hf.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.3.1.dev10
3
+ Version: 0.3.1.dev11
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -45,6 +45,10 @@ See the [complete inference server guide](docs/server/inference-server.md) for
45
45
  installation, registry administration, curl requests, single-video inference,
46
46
  full-test-set and per-sample remote inference, job polling, and sessions.
47
47
 
48
+ For Docker administration, set `OSL_MODEL_ADMIN_TOKEN` in the private
49
+ `server/.env` file, recreate the containers after changes, and use the exact
50
+ same value as the Python client's `admin_token`. Never commit the real token.
51
+
48
52
  ## Configuration From Hugging Face
49
53
 
50
54
  Prepare and inspect configuration before model weights are allocated:
@@ -9,6 +9,10 @@ See the [complete inference server guide](docs/server/inference-server.md) for
9
9
  installation, registry administration, curl requests, single-video inference,
10
10
  full-test-set and per-sample remote inference, job polling, and sessions.
11
11
 
12
+ For Docker administration, set `OSL_MODEL_ADMIN_TOKEN` in the private
13
+ `server/.env` file, recreate the containers after changes, and use the exact
14
+ same value as the Python client's `admin_token`. Never commit the real token.
15
+
12
16
  ## Configuration From Hugging Face
13
17
 
14
18
  Prepare and inspect configuration before model weights are allocated:
@@ -76,6 +76,7 @@ class BaseTaskModel(ConfigurationMixin, ABC):
76
76
  self.remote_poll_interval = float(remote_poll_interval)
77
77
  self.remote_result_timeout = float(remote_result_timeout)
78
78
  self.remote_model_id = remote_model_id
79
+ self.remote_session_id: str | None = None
79
80
  if self.remote_timeout <= 0 or self.remote_poll_interval <= 0 or self.remote_result_timeout <= 0:
80
81
  raise ValueError("Remote timeout values must be positive.")
81
82
 
@@ -86,7 +87,14 @@ class BaseTaskModel(ConfigurationMixin, ABC):
86
87
  if self.is_remote:
87
88
  self._config_editor.remote_overrides()
88
89
 
89
- if config is None and self._config_editor is None:
90
+ remote_only = config is None and self._config_editor is None and self.is_remote and weights is None
91
+ if remote_only:
92
+ # Remote workers own model configuration and weights. Keep a
93
+ # minimal namespace so shared decorators and remote-only methods
94
+ # can operate without downloading or constructing a local model.
95
+ self.config_path = None
96
+ self.config = dict_to_namespace({})
97
+ elif config is None and self._config_editor is None:
90
98
  from huggingface_hub.utils import HFValidationError, validate_repo_id
91
99
 
92
100
  if (not isinstance(weights, str) or os.path.exists(expand(weights))
@@ -107,7 +115,7 @@ class BaseTaskModel(ConfigurationMixin, ABC):
107
115
  if self._config_editor is not None:
108
116
  self.config_path = self._config_editor.source
109
117
  self.config = dict_to_namespace(self._config_editor.get_config())
110
- else:
118
+ elif self._config_editor is None and not remote_only:
111
119
  self.config_path = resolve_config_path(config)
112
120
  self._config_editor = Config.from_file(self.config_path)
113
121
  self.config = dict_to_namespace(self._config_editor.get_config())
@@ -203,7 +211,7 @@ class BaseTaskModel(ConfigurationMixin, ABC):
203
211
  archive_path,
204
212
  archive_path.stat().st_size,
205
213
  )
206
- return self._post_multipart(
214
+ response = self._post_multipart(
207
215
  "/predict",
208
216
  fields={
209
217
  "task_type": task_type,
@@ -215,6 +223,7 @@ class BaseTaskModel(ConfigurationMixin, ABC):
215
223
  "media_archive": archive_path,
216
224
  },
217
225
  )
226
+ return response
218
227
 
219
228
  def submit_per_sample_inference(
220
229
  self,
@@ -304,7 +313,44 @@ class BaseTaskModel(ConfigurationMixin, ABC):
304
313
  fields["question"] = question
305
314
  if session_id is not None:
306
315
  fields["session_id"] = session_id
307
- return self._post_multipart("/predict", fields=fields, files={"upload_file": source})
316
+ response = self._post_multipart("/predict", fields=fields, files={"upload_file": source})
317
+ self._remember_remote_session(response)
318
+ return response
319
+
320
+ def submit_session_inference(
321
+ self,
322
+ *,
323
+ task_type: str,
324
+ session_id: str,
325
+ model_id: str | None = None,
326
+ task_options: dict[str, Any] | None = None,
327
+ question: str | None = None,
328
+ ) -> dict[str, Any]:
329
+ if not self.remote:
330
+ raise RuntimeError("Remote inference is not configured. Pass `remote=` to the model constructor.")
331
+ fields = {
332
+ "task_type": task_type,
333
+ "model_id": model_id or self.remote_model_id or "",
334
+ "session_id": session_id,
335
+ "task_options": json.dumps(task_options or {}),
336
+ }
337
+ if question is not None:
338
+ fields["question"] = question
339
+ response = self._post_multipart("/predict", fields=fields, files={})
340
+ self._remember_remote_session(response)
341
+ return response
342
+
343
+ def _remember_remote_session(self, response: dict[str, Any]) -> None:
344
+ session_id = response.get("session_id")
345
+ if session_id:
346
+ self.remote_session_id = str(session_id)
347
+
348
+ @property
349
+ def last_remote_session_id(self) -> str | None:
350
+ return self.remote_session_id
351
+
352
+ def clear_remote_session(self) -> None:
353
+ self.remote_session_id = None
308
354
 
309
355
  def get_remote_job(self, job_id: str) -> dict[str, Any]:
310
356
  return self._request_json(f"/jobs/{job_id}")
@@ -261,6 +261,7 @@ class ClassificationModel(BaseTaskModel):
261
261
  use_ddp=False,
262
262
  use_wandb=True,
263
263
  video_path: str | None = None,
264
+ session_id: str | None = None,
264
265
  **kwargs,
265
266
  ):
266
267
  """Run model inference and return predictions in OSL JSON format."""
@@ -273,12 +274,27 @@ class ClassificationModel(BaseTaskModel):
273
274
  remote_task_options = kwargs.pop("remote_task_options", None)
274
275
  if kwargs:
275
276
  raise TypeError(f"Unsupported remote inference options: {', '.join(kwargs)}")
277
+ active_session_id = (
278
+ session_id
279
+ if session_id is not None
280
+ else (self.remote_session_id if video_path is None else None)
281
+ )
276
282
  if video_path is not None:
277
283
  if remote_mode != "full_test_set":
278
284
  raise ValueError("`remote_mode=per_sample` requires `test_set`, not direct video input.")
279
285
  job = self.submit_video_inference(
280
286
  task_type="classification",
281
287
  video_path=video_path,
288
+ session_id=active_session_id,
289
+ model_id=remote_model_id,
290
+ task_options=remote_task_options,
291
+ )
292
+ self.last_remote_failures = []
293
+ return self.wait_for_remote_result(job["job_id"])["result"]["predictions"]
294
+ if test_set is None and active_session_id is not None:
295
+ job = self.submit_session_inference(
296
+ task_type="classification",
297
+ session_id=active_session_id,
282
298
  model_id=remote_model_id,
283
299
  task_options=remote_task_options,
284
300
  )
@@ -427,6 +427,7 @@ class LocalizationModel(BaseTaskModel):
427
427
  weights=None,
428
428
  use_wandb=True,
429
429
  video_path: str | None = None,
430
+ session_id: str | None = None,
430
431
  **kwargs,
431
432
  ):
432
433
  """Run model inference and return predictions in OSL JSON format."""
@@ -439,12 +440,27 @@ class LocalizationModel(BaseTaskModel):
439
440
  remote_task_options = kwargs.pop("remote_task_options", None)
440
441
  if kwargs:
441
442
  raise TypeError(f"Unsupported remote inference options: {', '.join(kwargs)}")
443
+ active_session_id = (
444
+ session_id
445
+ if session_id is not None
446
+ else (self.remote_session_id if video_path is None else None)
447
+ )
442
448
  if video_path is not None:
443
449
  if remote_mode != "full_test_set":
444
450
  raise ValueError("`remote_mode=per_sample` requires `test_set`, not direct video input.")
445
451
  job = self.submit_video_inference(
446
452
  task_type="localization",
447
453
  video_path=video_path,
454
+ session_id=active_session_id,
455
+ model_id=remote_model_id,
456
+ task_options=remote_task_options,
457
+ )
458
+ self.last_remote_failures = []
459
+ return self.wait_for_remote_result(job["job_id"])["result"]["predictions"]
460
+ if test_set is None and active_session_id is not None:
461
+ job = self.submit_session_inference(
462
+ task_type="localization",
463
+ session_id=active_session_id,
448
464
  model_id=remote_model_id,
449
465
  task_options=remote_task_options,
450
466
  )
@@ -274,17 +274,21 @@ class VQAModel(BaseTaskModel):
274
274
  return self.wait_for_remote_result(job["job_id"])["result"]["predictions"]
275
275
  if remote_mode != "full_test_set":
276
276
  raise ValueError("`remote_mode=per_sample` requires `test_set`, not direct VQA input.")
277
- if session_id is not None and video_path is None and question:
278
- job = self._post_multipart(
279
- "/predict",
280
- fields={
281
- "task_type": "vqa",
282
- "model_id": remote_model_id or self.remote_model_id or "",
283
- "session_id": session_id,
284
- "question": str(question),
285
- "task_options": json.dumps(remote_task_options or {}),
286
- },
287
- files={},
277
+ # A stored session is for question-only follow-ups. A new video
278
+ # must start a fresh server session; explicitly supplied session
279
+ # IDs remain caller-controlled and are forwarded as requested.
280
+ active_session_id = (
281
+ session_id
282
+ if session_id is not None
283
+ else (self.remote_session_id if video_path is None else None)
284
+ )
285
+ if active_session_id is not None and video_path is None and question:
286
+ job = self.submit_session_inference(
287
+ task_type="vqa",
288
+ session_id=active_session_id,
289
+ model_id=remote_model_id,
290
+ task_options=remote_task_options,
291
+ question=str(question),
288
292
  )
289
293
  return self.wait_for_remote_result(job["job_id"])["result"]["predictions"]
290
294
  if not video_path or not str(question or "").strip():
@@ -293,7 +297,7 @@ class VQAModel(BaseTaskModel):
293
297
  task_type="vqa",
294
298
  video_path=video_path,
295
299
  question=str(question),
296
- session_id=session_id,
300
+ session_id=active_session_id,
297
301
  model_id=remote_model_id,
298
302
  task_options=remote_task_options,
299
303
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.3.1.dev10
3
+ Version: 0.3.1.dev11
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -45,6 +45,10 @@ See the [complete inference server guide](docs/server/inference-server.md) for
45
45
  installation, registry administration, curl requests, single-video inference,
46
46
  full-test-set and per-sample remote inference, job polling, and sessions.
47
47
 
48
+ For Docker administration, set `OSL_MODEL_ADMIN_TOKEN` in the private
49
+ `server/.env` file, recreate the containers after changes, and use the exact
50
+ same value as the Python client's `admin_token`. Never commit the real token.
51
+
48
52
  ## Configuration From Hugging Face
49
53
 
50
54
  Prepare and inspect configuration before model weights are allocated:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opensportslib"
7
- version = "0.3.1.dev10"
7
+ version = "0.3.1.dev11"
8
8
  description = "OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"