opensportslib 0.2.0.dev3__tar.gz → 0.2.0.dev4__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 (161) hide show
  1. {opensportslib-0.2.0.dev3/opensportslib.egg-info → opensportslib-0.2.0.dev4}/PKG-INFO +3 -3
  2. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/README.md +2 -2
  3. opensportslib-0.2.0.dev4/examples/quickstart/basic_vqa.py +37 -0
  4. opensportslib-0.2.0.dev4/opensportslib/configs/vqa/default.yaml +172 -0
  5. opensportslib-0.2.0.dev4/opensportslib/configs/vqa/xvars.yaml +58 -0
  6. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4/opensportslib.egg-info}/PKG-INFO +3 -3
  7. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/SOURCES.txt +6 -0
  8. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/pyproject.toml +1 -1
  9. opensportslib-0.2.0.dev4/tests/test_setup_cli.py +101 -0
  10. opensportslib-0.2.0.dev4/tests/test_vqa_api.py +240 -0
  11. opensportslib-0.2.0.dev4/tests/test_vqa_qwen_xvars.py +251 -0
  12. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/LICENSE +0 -0
  13. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/LICENSE-COMMERCIAL +0 -0
  14. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/MANIFEST.in +0 -0
  15. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/examples/quickstart/basic_classification.py +0 -0
  16. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/examples/quickstart/basic_localization.py +0 -0
  17. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/__init__.py +0 -0
  18. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/apis/__init__.py +0 -0
  19. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/apis/base_task_model.py +0 -0
  20. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/apis/classification.py +0 -0
  21. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/apis/localization.py +0 -0
  22. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/apis/vqa.py +0 -0
  23. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/cli.py +0 -0
  24. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/default.yaml +0 -0
  25. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
  26. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
  27. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/video.yaml +0 -0
  28. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/default.yaml +0 -0
  29. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
  30. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/default.yaml +0 -0
  31. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
  32. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/video_dali.yaml +0 -0
  33. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/video_ocv.yaml +0 -0
  34. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/configs/vqa/qwen.yaml +0 -0
  35. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/__init__.py +0 -0
  36. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/__init__.py +0 -0
  37. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/accessors.py +0 -0
  38. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/conflicts.py +0 -0
  39. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/loader.py +0 -0
  40. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/migrate.py +0 -0
  41. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/migrations/__init__.py +0 -0
  42. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
  43. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/runtime_adapter.py +0 -0
  44. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schema.py +0 -0
  45. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schemas/__init__.py +0 -0
  46. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
  47. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
  48. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/config/validate.py +0 -0
  49. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/__init__.py +0 -0
  50. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/builder.py +0 -0
  51. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/calf.py +0 -0
  52. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/ce.py +0 -0
  53. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/combine.py +0 -0
  54. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/nll.py +0 -0
  55. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/optimizer/__init__.py +0 -0
  56. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/optimizer/builder.py +0 -0
  57. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  58. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/scheduler/__init__.py +0 -0
  59. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/scheduler/builder.py +0 -0
  60. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/__init__.py +0 -0
  61. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/classification_trainer.py +0 -0
  62. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/localization_trainer.py +0 -0
  63. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/vqa_trainer.py +0 -0
  64. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/checkpoint.py +0 -0
  65. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/config.py +0 -0
  66. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/config_normalize.py +0 -0
  67. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/data.py +0 -0
  68. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/ddp.py +0 -0
  69. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/default_args.py +0 -0
  70. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/hf_runtime.py +0 -0
  71. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/lightning.py +0 -0
  72. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/load_annotations.py +0 -0
  73. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/seed.py +0 -0
  74. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/video_processing.py +0 -0
  75. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/wandb.py +0 -0
  76. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/__init__.py +0 -0
  77. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/builder.py +0 -0
  78. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/classification_dataset.py +0 -0
  79. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/localization_dataset.py +0 -0
  80. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/utils/__init__.py +0 -0
  81. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/utils/tracking.py +0 -0
  82. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/datasets/vqa_dataset.py +0 -0
  83. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/classification.yaml +0 -0
  84. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
  85. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
  86. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  87. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization.yaml +0 -0
  88. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
  89. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
  90. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/metrics/classification_metric.py +0 -0
  91. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/metrics/localization_metric.py +0 -0
  92. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/metrics/vqa_metric.py +0 -0
  93. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/__init__.py +0 -0
  94. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/backbones/builder.py +0 -0
  95. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/contextaware.py +0 -0
  96. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/e2e.py +0 -0
  97. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/learnablepooling.py +0 -0
  98. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/qwen_xvars.py +0 -0
  99. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/tracking.py +0 -0
  100. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/vars.py +0 -0
  101. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/video.py +0 -0
  102. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
  103. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/video_mae.py +0 -0
  104. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
  105. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/builder.py +0 -0
  106. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/heads/builder.py +0 -0
  107. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/neck/builder.py +0 -0
  108. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/common.py +0 -0
  109. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/__init__.py +0 -0
  110. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/asformer.py +0 -0
  111. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/calf.py +0 -0
  112. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/gsm.py +0 -0
  113. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/gtad.py +0 -0
  114. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/tsm.py +0 -0
  115. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/litebase.py +0 -0
  116. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/modules.py +0 -0
  117. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/shift.py +0 -0
  118. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/utils.py +0 -0
  119. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
  120. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/vqa_prompting.py +0 -0
  121. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/xvars_clip_index.py +0 -0
  122. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/setup/setup.py +0 -0
  123. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/tools/__init__.py +0 -0
  124. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/tools/_common.py +0 -0
  125. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/tools/hf_transfer.py +0 -0
  126. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  127. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  128. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/dependency_links.txt +0 -0
  129. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/entry_points.txt +0 -0
  130. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/requires.txt +0 -0
  131. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/top_level.txt +0 -0
  132. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/setup.cfg +0 -0
  133. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/conftest.py +0 -0
  134. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_classification_dataset_paths.py +0 -0
  135. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_classification_trainer_dataloader.py +0 -0
  136. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_config_architecture.py +0 -0
  137. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_config_split_override_sync.py +0 -0
  138. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_config_utils_smoke.py +0 -0
  139. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_conversion_tools.py +0 -0
  140. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_extract_xvars_features.py +0 -0
  141. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_hf_transfer_tools.py +0 -0
  142. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_localization_dali_filenames.py +0 -0
  143. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_package_smoke.py +0 -0
  144. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_pretrained_config_merge_policy.py +0 -0
  145. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_public_apis_smoke.py +0 -0
  146. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_subset_train_infer_integration.py +0 -0
  147. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_task_model_api_contract.py +0 -0
  148. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_vqa_metrics_semantic.py +0 -0
  149. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_vqa_training_lora.py +0 -0
  150. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tests/test_vqa_xvars_videochatgpt.py +0 -0
  151. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/convert/build_soccernet_gar.py +0 -0
  152. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
  153. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/convert/build_xvars_indexes.py +0 -0
  154. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/convert/extract_xvars_clip_features.py +0 -0
  155. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  156. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  157. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/download/download_hf_repo.py +0 -0
  158. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/download/download_osl_hf.py +0 -0
  159. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/download/upload_osl_hf.py +0 -0
  160. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/training/classification.py +0 -0
  161. {opensportslib-0.2.0.dev3 → opensportslib-0.2.0.dev4}/tools/training/localization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.2.0.dev3
3
+ Version: 0.2.0.dev4
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
@@ -324,8 +324,8 @@ backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
324
324
  For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
325
325
  when available and falls back to extracting CLIP features from raw video during
326
326
  `infer()`. Pre-extracted features remain the preferred path for parity, speed,
327
- and reproducibility. See [docs/xvars_integration_phases.md](docs/xvars_integration_phases.md)
328
- for the full X-VARS setup workflow.
327
+ and reproducibility. See [docs/tools/vqa.md](docs/tools/vqa.md) for the full
328
+ VQA setup workflow.
329
329
 
330
330
 
331
331
  ---
@@ -289,8 +289,8 @@ backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
289
289
  For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
290
290
  when available and falls back to extracting CLIP features from raw video during
291
291
  `infer()`. Pre-extracted features remain the preferred path for parity, speed,
292
- and reproducibility. See [docs/xvars_integration_phases.md](docs/xvars_integration_phases.md)
293
- for the full X-VARS setup workflow.
292
+ and reproducibility. See [docs/tools/vqa.md](docs/tools/vqa.md) for the full
293
+ VQA setup workflow.
294
294
 
295
295
 
296
296
  ---
@@ -0,0 +1,37 @@
1
+ from opensportslib.apis import VQAModel
2
+
3
+
4
+ def main():
5
+ """
6
+ Minimal VQA example.
7
+ Update config, question, and dataset paths before running.
8
+ """
9
+
10
+ my_model = VQAModel(
11
+ config="examples/configs/vqa_qwen.yaml",
12
+ weights=None, # optional: path or Hugging Face model ID
13
+ )
14
+
15
+ predictions = my_model.infer(
16
+ test_set="/path/to/test_annotations.json",
17
+ )
18
+
19
+ print(predictions)
20
+
21
+ single_prediction = my_model.infer(
22
+ video_path="/path/to/video.mp4",
23
+ question="What card would you give? Why?",
24
+ )
25
+
26
+ print(single_prediction)
27
+
28
+ metrics = my_model.evaluate(
29
+ test_set="/path/to/test_annotations.json",
30
+ predictions=predictions,
31
+ )
32
+
33
+ print(metrics)
34
+
35
+
36
+ if __name__ == "__main__":
37
+ main()
@@ -0,0 +1,172 @@
1
+ TASK: vqa
2
+ VERSION: 2
3
+
4
+ SYSTEM:
5
+ paths:
6
+ save_dir: ./checkpoints_vqa
7
+ work_dir: ${SYSTEM.paths.save_dir}
8
+ device: cuda
9
+ gpu:
10
+ count: 1
11
+ id: 0
12
+ reproducibility:
13
+ use_seed: true
14
+ seed: 42
15
+
16
+ DATA:
17
+ common:
18
+ dataset_name: OSL-XFoul
19
+ data_root: /home/vorajv/dataset/OSL-XFoul
20
+ feature_index: /home/vorajv/dataset/OSL-XFoul/feature_index.json
21
+ prediction_index: /home/vorajv/dataset/OSL-XFoul/prediction_index.json
22
+ runtime:
23
+ loader_backend: opencv
24
+ splits:
25
+ train:
26
+ annotation_path: /home/vorajv/dataset/OSL-XFoul/train.json
27
+ source_path: /home/vorajv/dataset/OSL-XFoul
28
+ dataloader:
29
+ batch_size: 1
30
+ shuffle: true
31
+ num_workers: 0
32
+ pin_memory: false
33
+ mp_context: spawn
34
+ persistent_workers: false
35
+ valid:
36
+ annotation_path: /home/vorajv/dataset/OSL-XFoul/valid.json
37
+ source_path: /home/vorajv/dataset/OSL-XFoul
38
+ dataloader:
39
+ batch_size: 1
40
+ shuffle: false
41
+ num_workers: 0
42
+ pin_memory: false
43
+ mp_context: spawn
44
+ persistent_workers: false
45
+ test:
46
+ annotation_path: /home/vorajv/dataset/OSL-XFoul/test.json
47
+ source_path: /home/vorajv/dataset/OSL-XFoul
48
+ dataloader:
49
+ batch_size: 1
50
+ shuffle: false
51
+ num_workers: 0
52
+ pin_memory: false
53
+ mp_context: spawn
54
+ persistent_workers: false
55
+ inputs:
56
+ video:
57
+ modality: video
58
+ representation: raw
59
+ source:
60
+ format: mp4
61
+ sampling:
62
+ num_frames: 100
63
+ input_fps: 25
64
+ target_fps: 17
65
+ start_frame: 63
66
+ end_frame: 87
67
+ transform: {}
68
+ augmentations: {}
69
+ params: {}
70
+ question:
71
+ modality: text
72
+ representation: raw
73
+ source:
74
+ format: json
75
+ sampling: {}
76
+ transform: {}
77
+ augmentations: {}
78
+ params: {}
79
+
80
+ MODEL:
81
+ runtime:
82
+ dtype: fp16
83
+ device: auto
84
+ compile: false
85
+ freeze: false
86
+ load:
87
+ checkpoint_path: null
88
+ pretrained: false
89
+ strict: true
90
+ map_location: null
91
+ format: auto
92
+ topology:
93
+ - from: video_encoder
94
+ to: mm_projector
95
+ - from: mm_projector
96
+ to: llm_decoder
97
+
98
+ IO:
99
+ inputs:
100
+ video: video_encoder
101
+ question: llm_decoder
102
+ outputs:
103
+ answer_text: llm_decoder
104
+ explanation_text: llm_decoder
105
+
106
+ TRAIN:
107
+ trainer:
108
+ type: vqa
109
+ epochs: 3
110
+ criterion:
111
+ type: CrossEntropyLoss
112
+ optimizer:
113
+ type: AdamW
114
+ lr: 0.0002
115
+ weight_decay: 0.001
116
+ scheduler:
117
+ type: constant
118
+ execution:
119
+ enabled: true
120
+ training_backend: xvars_videochatgpt_lora
121
+ feature_backend: xvars_clip
122
+ view_sampling_policy: random_train_deterministic_eval
123
+ acc_grad_iter: 8
124
+ log_interval: 1
125
+ dry_run: false
126
+ xvars:
127
+ feature_mode: strict_xvars
128
+ projection_path: null
129
+ prompt:
130
+ style: detailed
131
+ include_priors: true
132
+ prediction_prior_adapter: xvars_referee
133
+ prior_fields: [action, offence, contact, bodypart]
134
+ video_token_len: 300
135
+ generation:
136
+ max_new_tokens: 128
137
+ temperature: 0.0
138
+ eval_profile:
139
+ metric_set: [exact_match, contains_match, token_f1, referee_semantic]
140
+ aggregation: mean
141
+ exclusions: []
142
+ sft:
143
+ max_seq_length: 480
144
+ include_video_tokens: true
145
+ disable_tqdm: false
146
+ reference_mode: all
147
+ append_eos_token: true
148
+ gradient_checkpointing: true
149
+ save_strategy: epoch
150
+ lora:
151
+ r: 16
152
+ alpha: 32
153
+ dropout: 0.05
154
+ bias: none
155
+ prepare_kbit: true
156
+ target_modules: [mm_projector, upsample_features, up_proj, down_proj, gate_proj, k_proj, q_proj, v_proj, o_proj]
157
+ exclude_modules: '^base_lm\.model\.mm_projector$'
158
+ quantization:
159
+ enabled: false
160
+ load_in_4bit: true
161
+ bnb_4bit_quant_type: nf4
162
+ compute_dtype: float16
163
+ bnb_4bit_use_double_quant: true
164
+ checkpoint:
165
+ save_adapter: true
166
+ merge_and_save: false
167
+ selection:
168
+ monitor: loss
169
+ mode: min
170
+ checkpoint:
171
+ save_every: 1
172
+ save_best: true
@@ -0,0 +1,58 @@
1
+ SYSTEM:
2
+ paths:
3
+ save_dir: ./checkpoints_vqa_lora
4
+ gpu:
5
+ count: 4
6
+
7
+ MODEL:
8
+ components:
9
+ video_encoder:
10
+ kind: encoder
11
+ source:
12
+ provider: opensportslib
13
+ # XVARS-trained classifier weights to load into that architecture
14
+ load:
15
+ weights_path: /home/vorajv/X-VARS/weights/14_model.pth.tar
16
+ params:
17
+ # CLIP architecture and image processor to instantiate.
18
+ feature_source: indexed_or_raw_clip
19
+ vision_tower: openai/clip-vit-large-patch14
20
+ feature_dim: 1024
21
+ overrides: {}
22
+ mm_projector:
23
+ kind: projector
24
+ source:
25
+ provider: opensportslib
26
+ params:
27
+ input_dim: 1024
28
+ overrides: {}
29
+ llm_decoder:
30
+ kind: decoder
31
+ source:
32
+ provider: opensportslib
33
+ params:
34
+ repo_id: /home/vorajv/X-VARS/weights/base_model_videoChatGPT
35
+ overrides: {}
36
+ metadata:
37
+ backend: xvars_videochatgpt
38
+
39
+ TRAIN:
40
+ execution:
41
+ prompt:
42
+ system_prompt: You are Video-ChatGPT, a large vision-language assistant. You are able to understand the video content that the user provides, and assist the user with a variety of tasks using natural language.Follow the instructions carefully and explain your answers in detail based on the provided video.
43
+
44
+ # Optional XFoul-only generated-answer smoke test.
45
+ # During LoRA training, this runs generation on one known training sample and
46
+ # checks that the answer still contains referee-domain terms and avoids known
47
+ # code-like failure strings. Disable or replace these values for non-XFoul data.
48
+ generated_validation:
49
+ enabled: true
50
+ sample_id: action_0
51
+ every_steps: 25
52
+ max_new_tokens: 128
53
+ require_relevance: true
54
+ required_terms: [foul, card, challenge, spa, dogso, advantage]
55
+ forbidden_terms: [get_children, django, httpclient, "```python", "```php"]
56
+
57
+ hf:
58
+ tokenizer_id: ${MODEL.components.llm_decoder.params.repo_id}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.2.0.dev3
3
+ Version: 0.2.0.dev4
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
@@ -324,8 +324,8 @@ backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
324
324
  For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
325
325
  when available and falls back to extracting CLIP features from raw video during
326
326
  `infer()`. Pre-extracted features remain the preferred path for parity, speed,
327
- and reproducibility. See [docs/xvars_integration_phases.md](docs/xvars_integration_phases.md)
328
- for the full X-VARS setup workflow.
327
+ and reproducibility. See [docs/tools/vqa.md](docs/tools/vqa.md) for the full
328
+ VQA setup workflow.
329
329
 
330
330
 
331
331
  ---
@@ -5,6 +5,7 @@ README.md
5
5
  pyproject.toml
6
6
  examples/quickstart/basic_classification.py
7
7
  examples/quickstart/basic_localization.py
8
+ examples/quickstart/basic_vqa.py
8
9
  opensportslib/__init__.py
9
10
  opensportslib/cli.py
10
11
  opensportslib.egg-info/PKG-INFO
@@ -28,7 +29,9 @@ opensportslib/configs/localization/default.yaml
28
29
  opensportslib/configs/localization/netvladpp_resnetpca512.yaml
29
30
  opensportslib/configs/localization/video_dali.yaml
30
31
  opensportslib/configs/localization/video_ocv.yaml
32
+ opensportslib/configs/vqa/default.yaml
31
33
  opensportslib/configs/vqa/qwen.yaml
34
+ opensportslib/configs/vqa/xvars.yaml
32
35
  opensportslib/core/__init__.py
33
36
  opensportslib/core/config/__init__.py
34
37
  opensportslib/core/config/accessors.py
@@ -135,9 +138,12 @@ tests/test_localization_dali_filenames.py
135
138
  tests/test_package_smoke.py
136
139
  tests/test_pretrained_config_merge_policy.py
137
140
  tests/test_public_apis_smoke.py
141
+ tests/test_setup_cli.py
138
142
  tests/test_subset_train_infer_integration.py
139
143
  tests/test_task_model_api_contract.py
144
+ tests/test_vqa_api.py
140
145
  tests/test_vqa_metrics_semantic.py
146
+ tests/test_vqa_qwen_xvars.py
141
147
  tests/test_vqa_training_lora.py
142
148
  tests/test_vqa_xvars_videochatgpt.py
143
149
  tools/convert/build_soccernet_gar.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opensportslib"
7
- version = "0.2.0.dev3"
7
+ version = "0.2.0.dev4"
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"
@@ -0,0 +1,101 @@
1
+ from __future__ import annotations
2
+
3
+ from opensportslib import cli
4
+ from opensportslib.setup import setup as setup_lib
5
+
6
+
7
+ def test_cli_setup_forwards_xvars_flag(monkeypatch):
8
+ captured: dict[str, object] = {}
9
+
10
+ def fake_setup(*, dali: bool, pyg: bool, vqa_xvars: bool, vqa_qwen: bool):
11
+ captured["dali"] = dali
12
+ captured["pyg"] = pyg
13
+ captured["vqa_xvars"] = vqa_xvars
14
+ captured["vqa_qwen"] = vqa_qwen
15
+
16
+ monkeypatch.setattr(cli, "setup", fake_setup)
17
+
18
+ rc = cli.main(["setup", "--vqa_xvars", "--dali"])
19
+
20
+ assert rc == 0
21
+ assert captured == {"dali": True, "pyg": False, "vqa_xvars": True, "vqa_qwen": False}
22
+
23
+
24
+ def test_cli_setup_forwards_qwen_flag(monkeypatch):
25
+ captured: dict[str, object] = {}
26
+
27
+ def fake_setup(*, dali: bool, pyg: bool, vqa_xvars: bool, vqa_qwen: bool):
28
+ captured["dali"] = dali
29
+ captured["pyg"] = pyg
30
+ captured["vqa_xvars"] = vqa_xvars
31
+ captured["vqa_qwen"] = vqa_qwen
32
+
33
+ monkeypatch.setattr(cli, "setup", fake_setup)
34
+
35
+ rc = cli.main(["setup", "--vqa_qwen", "--pyg"])
36
+
37
+ assert rc == 0
38
+ assert captured == {"dali": False, "pyg": True, "vqa_xvars": False, "vqa_qwen": True}
39
+
40
+
41
+ def test_install_xvars_dependencies_uninstalls_then_reinstalls(monkeypatch):
42
+ calls: list[tuple[str, list[str]]] = []
43
+
44
+ def fake_call(cmd: list[str]):
45
+ calls.append(("call", cmd))
46
+ return 0
47
+
48
+ def fake_check_call(cmd: list[str]):
49
+ calls.append(("check_call", cmd))
50
+ return 0
51
+
52
+ monkeypatch.setattr(setup_lib.subprocess, "call", fake_call)
53
+ monkeypatch.setattr(setup_lib.subprocess, "check_call", fake_check_call)
54
+ monkeypatch.setattr(setup_lib.sys, "executable", "/usr/bin/python3")
55
+
56
+ setup_lib.install_xvars_dependencies(setup_lib.XVARS_DEPENDENCY_PINS)
57
+
58
+ assert calls == [
59
+ (
60
+ "call",
61
+ [
62
+ "/usr/bin/python3",
63
+ "-m",
64
+ "pip",
65
+ "uninstall",
66
+ "-y",
67
+ "transformers",
68
+ "peft",
69
+ "tokenizers",
70
+ "accelerate",
71
+ "trl",
72
+ ],
73
+ ),
74
+ (
75
+ "check_call",
76
+ [
77
+ "/usr/bin/python3",
78
+ "-m",
79
+ "pip",
80
+ "install",
81
+ "transformers==4.38.2",
82
+ "peft==0.9.0",
83
+ "tokenizers==0.15.2",
84
+ "accelerate==0.27.2",
85
+ "trl==0.10.1",
86
+ ],
87
+ ),
88
+ ]
89
+
90
+
91
+ def test_setup_skips_vqa_dependency_install_when_flags_are_false(monkeypatch):
92
+ calls: list[str] = []
93
+
94
+ monkeypatch.setattr(setup_lib, "install_extras", lambda dali=False, pyg=False: calls.append(f"extras:{dali}:{pyg}"))
95
+ monkeypatch.setattr(setup_lib, "install_xvars_dependencies", lambda pins: calls.append(f"deps:{sorted(pins)}"))
96
+ monkeypatch.setattr(setup_lib, "verify", lambda: calls.append("verify"))
97
+ monkeypatch.setattr(setup_lib, "install_torch", lambda: calls.append("torch"))
98
+
99
+ setup_lib.setup(dali=True, pyg=False, vqa_xvars=False, vqa_qwen=False)
100
+
101
+ assert calls == ["torch", "extras:True:False", "verify"]