opensportslib 0.2.0.dev2__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 (162) hide show
  1. {opensportslib-0.2.0.dev2/opensportslib.egg-info → opensportslib-0.2.0.dev4}/PKG-INFO +34 -8
  2. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/README.md +33 -7
  3. opensportslib-0.2.0.dev4/examples/quickstart/basic_vqa.py +37 -0
  4. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/cli.py +4 -4
  5. opensportslib-0.2.0.dev2/opensportslib/configs/vqa/qwen.yaml → opensportslib-0.2.0.dev4/opensportslib/configs/vqa/default.yaml +3 -59
  6. opensportslib-0.2.0.dev4/opensportslib/configs/vqa/qwen.yaml +49 -0
  7. opensportslib-0.2.0.dev4/opensportslib/configs/vqa/xvars.yaml +58 -0
  8. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/loader.py +1 -1
  9. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/setup/setup.py +6 -6
  10. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4/opensportslib.egg-info}/PKG-INFO +34 -8
  11. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/SOURCES.txt +6 -1
  12. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/pyproject.toml +1 -1
  13. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_config_architecture.py +40 -11
  14. opensportslib-0.2.0.dev4/tests/test_setup_cli.py +101 -0
  15. opensportslib-0.2.0.dev4/tests/test_vqa_api.py +240 -0
  16. opensportslib-0.2.0.dev4/tests/test_vqa_qwen_xvars.py +251 -0
  17. opensportslib-0.2.0.dev2/opensportslib/configs/vqa/xvars_lora.yaml +0 -243
  18. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/LICENSE +0 -0
  19. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/LICENSE-COMMERCIAL +0 -0
  20. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/MANIFEST.in +0 -0
  21. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/examples/quickstart/basic_classification.py +0 -0
  22. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/examples/quickstart/basic_localization.py +0 -0
  23. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/__init__.py +0 -0
  24. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/apis/__init__.py +0 -0
  25. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/apis/base_task_model.py +0 -0
  26. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/apis/classification.py +0 -0
  27. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/apis/localization.py +0 -0
  28. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/apis/vqa.py +0 -0
  29. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/default.yaml +0 -0
  30. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
  31. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
  32. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/classification/video.yaml +0 -0
  33. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/default.yaml +0 -0
  34. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
  35. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/default.yaml +0 -0
  36. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
  37. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/video_dali.yaml +0 -0
  38. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/configs/localization/video_ocv.yaml +0 -0
  39. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/__init__.py +0 -0
  40. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/__init__.py +0 -0
  41. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/accessors.py +0 -0
  42. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/conflicts.py +0 -0
  43. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/migrate.py +0 -0
  44. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/migrations/__init__.py +0 -0
  45. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
  46. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/runtime_adapter.py +0 -0
  47. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schema.py +0 -0
  48. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schemas/__init__.py +0 -0
  49. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
  50. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
  51. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/config/validate.py +0 -0
  52. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/__init__.py +0 -0
  53. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/builder.py +0 -0
  54. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/calf.py +0 -0
  55. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/ce.py +0 -0
  56. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/combine.py +0 -0
  57. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/loss/nll.py +0 -0
  58. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/optimizer/__init__.py +0 -0
  59. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/optimizer/builder.py +0 -0
  60. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  61. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/scheduler/__init__.py +0 -0
  62. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/scheduler/builder.py +0 -0
  63. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/__init__.py +0 -0
  64. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/classification_trainer.py +0 -0
  65. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/localization_trainer.py +0 -0
  66. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/trainer/vqa_trainer.py +0 -0
  67. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/checkpoint.py +0 -0
  68. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/config.py +0 -0
  69. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/config_normalize.py +0 -0
  70. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/data.py +0 -0
  71. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/ddp.py +0 -0
  72. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/default_args.py +0 -0
  73. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/hf_runtime.py +0 -0
  74. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/lightning.py +0 -0
  75. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/load_annotations.py +0 -0
  76. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/seed.py +0 -0
  77. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/video_processing.py +0 -0
  78. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/core/utils/wandb.py +0 -0
  79. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/__init__.py +0 -0
  80. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/builder.py +0 -0
  81. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/classification_dataset.py +0 -0
  82. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/localization_dataset.py +0 -0
  83. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/utils/__init__.py +0 -0
  84. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/utils/tracking.py +0 -0
  85. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/datasets/vqa_dataset.py +0 -0
  86. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/classification.yaml +0 -0
  87. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
  88. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
  89. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  90. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/localization.yaml +0 -0
  91. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
  92. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
  93. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/metrics/classification_metric.py +0 -0
  94. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/metrics/localization_metric.py +0 -0
  95. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/metrics/vqa_metric.py +0 -0
  96. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/__init__.py +0 -0
  97. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/backbones/builder.py +0 -0
  98. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/contextaware.py +0 -0
  99. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/e2e.py +0 -0
  100. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/learnablepooling.py +0 -0
  101. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/qwen_xvars.py +0 -0
  102. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/tracking.py +0 -0
  103. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/vars.py +0 -0
  104. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/video.py +0 -0
  105. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
  106. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/video_mae.py +0 -0
  107. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
  108. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/builder.py +0 -0
  109. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/heads/builder.py +0 -0
  110. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/neck/builder.py +0 -0
  111. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/common.py +0 -0
  112. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/__init__.py +0 -0
  113. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/asformer.py +0 -0
  114. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/calf.py +0 -0
  115. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/gsm.py +0 -0
  116. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/gtad.py +0 -0
  117. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/impl/tsm.py +0 -0
  118. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/litebase.py +0 -0
  119. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/modules.py +0 -0
  120. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/shift.py +0 -0
  121. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/utils.py +0 -0
  122. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
  123. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/vqa_prompting.py +0 -0
  124. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/models/utils/xvars_clip_index.py +0 -0
  125. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/tools/__init__.py +0 -0
  126. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/tools/_common.py +0 -0
  127. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/tools/hf_transfer.py +0 -0
  128. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  129. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  130. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/dependency_links.txt +0 -0
  131. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/entry_points.txt +0 -0
  132. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/requires.txt +0 -0
  133. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/opensportslib.egg-info/top_level.txt +0 -0
  134. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/setup.cfg +0 -0
  135. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/conftest.py +0 -0
  136. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_classification_dataset_paths.py +0 -0
  137. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_classification_trainer_dataloader.py +0 -0
  138. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_config_split_override_sync.py +0 -0
  139. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_config_utils_smoke.py +0 -0
  140. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_conversion_tools.py +0 -0
  141. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_extract_xvars_features.py +0 -0
  142. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_hf_transfer_tools.py +0 -0
  143. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_localization_dali_filenames.py +0 -0
  144. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_package_smoke.py +0 -0
  145. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_pretrained_config_merge_policy.py +0 -0
  146. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_public_apis_smoke.py +0 -0
  147. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_subset_train_infer_integration.py +0 -0
  148. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_task_model_api_contract.py +0 -0
  149. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_vqa_metrics_semantic.py +0 -0
  150. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_vqa_training_lora.py +0 -0
  151. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tests/test_vqa_xvars_videochatgpt.py +0 -0
  152. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/convert/build_soccernet_gar.py +0 -0
  153. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
  154. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/convert/build_xvars_indexes.py +0 -0
  155. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/convert/extract_xvars_clip_features.py +0 -0
  156. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  157. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  158. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/download/download_hf_repo.py +0 -0
  159. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/download/download_osl_hf.py +0 -0
  160. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/download/upload_osl_hf.py +0 -0
  161. {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev4}/tools/training/classification.py +0 -0
  162. {opensportslib-0.2.0.dev2 → 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.dev2
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
@@ -93,13 +93,26 @@ opensportslib setup --pyg
93
93
 
94
94
  # Optional: install for DALI support
95
95
  opensportslib setup --dali
96
- ```
96
+
97
+ # Optional: install the X-VARS-compatible VQA dependency profile
98
+ opensportslib setup --vqa_xvars
99
+
100
+ # Optional: install the Qwen-compatible VQA dependency profile
101
+ opensportslib setup --vqa_qwen
102
+ ```
97
103
  ---
98
104
 
99
105
  **Note:**
100
106
  Run `opensportslib setup` to automatically configure dependencies.
101
107
  If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
102
108
 
109
+ For VQA, use exactly one backend-specific dependency profile:
110
+
111
+ - `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
112
+ - `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
113
+
114
+ The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
115
+
103
116
  ---
104
117
 
105
118
  ## Data and pretrained models
@@ -287,7 +300,7 @@ metrics_from_file = my_model.evaluate(
287
300
  from opensportslib.apis import VQAModel
288
301
 
289
302
  my_model = VQAModel(
290
- config="/path/to/vqa.yaml",
303
+ config="opensportslib/configs/vqa/qwen.yaml",
291
304
  weights=None, # optional: path or Hugging Face model ID
292
305
  )
293
306
 
@@ -300,13 +313,20 @@ single_prediction = my_model.infer(
300
313
  video_path="/path/to/video.mp4",
301
314
  question="What card would you give? Why?",
302
315
  )
303
-
304
- metrics = my_model.evaluate(
305
- test_set="/path/to/test_annotations.json",
306
- predictions=predictions,
307
- )
308
316
  ```
309
317
 
318
+ Use `opensportslib/configs/vqa/xvars.yaml` with `opensportslib setup --vqa_xvars`
319
+ for the X-VARS-compatible backend, or `opensportslib/configs/vqa/qwen.yaml` with
320
+ `opensportslib setup --vqa_qwen` for the Qwen-compatible backend. The Qwen
321
+ backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
322
+ `Qwen/Qwen3.5-9B-Base`.
323
+
324
+ For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
325
+ when available and falls back to extracting CLIP features from raw video during
326
+ `infer()`. Pre-extracted features remain the preferred path for parity, speed,
327
+ and reproducibility. See [docs/tools/vqa.md](docs/tools/vqa.md) for the full
328
+ VQA setup workflow.
329
+
310
330
 
311
331
  ---
312
332
 
@@ -414,6 +434,12 @@ opensportslib setup --pyg
414
434
 
415
435
  # Optional: install for DALI support
416
436
  opensportslib setup --dali
437
+
438
+ # Optional: install the X-VARS-compatible VQA dependency profile
439
+ opensportslib setup --vqa_xvars
440
+
441
+ # Optional: install the Qwen-compatible VQA dependency profile
442
+ opensportslib setup --vqa_qwen
417
443
  ```
418
444
 
419
445
  ### Git workflow
@@ -58,13 +58,26 @@ opensportslib setup --pyg
58
58
 
59
59
  # Optional: install for DALI support
60
60
  opensportslib setup --dali
61
- ```
61
+
62
+ # Optional: install the X-VARS-compatible VQA dependency profile
63
+ opensportslib setup --vqa_xvars
64
+
65
+ # Optional: install the Qwen-compatible VQA dependency profile
66
+ opensportslib setup --vqa_qwen
67
+ ```
62
68
  ---
63
69
 
64
70
  **Note:**
65
71
  Run `opensportslib setup` to automatically configure dependencies.
66
72
  If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
67
73
 
74
+ For VQA, use exactly one backend-specific dependency profile:
75
+
76
+ - `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
77
+ - `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
78
+
79
+ The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
80
+
68
81
  ---
69
82
 
70
83
  ## Data and pretrained models
@@ -252,7 +265,7 @@ metrics_from_file = my_model.evaluate(
252
265
  from opensportslib.apis import VQAModel
253
266
 
254
267
  my_model = VQAModel(
255
- config="/path/to/vqa.yaml",
268
+ config="opensportslib/configs/vqa/qwen.yaml",
256
269
  weights=None, # optional: path or Hugging Face model ID
257
270
  )
258
271
 
@@ -265,13 +278,20 @@ single_prediction = my_model.infer(
265
278
  video_path="/path/to/video.mp4",
266
279
  question="What card would you give? Why?",
267
280
  )
268
-
269
- metrics = my_model.evaluate(
270
- test_set="/path/to/test_annotations.json",
271
- predictions=predictions,
272
- )
273
281
  ```
274
282
 
283
+ Use `opensportslib/configs/vqa/xvars.yaml` with `opensportslib setup --vqa_xvars`
284
+ for the X-VARS-compatible backend, or `opensportslib/configs/vqa/qwen.yaml` with
285
+ `opensportslib setup --vqa_qwen` for the Qwen-compatible backend. The Qwen
286
+ backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
287
+ `Qwen/Qwen3.5-9B-Base`.
288
+
289
+ For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
290
+ when available and falls back to extracting CLIP features from raw video during
291
+ `infer()`. Pre-extracted features remain the preferred path for parity, speed,
292
+ and reproducibility. See [docs/tools/vqa.md](docs/tools/vqa.md) for the full
293
+ VQA setup workflow.
294
+
275
295
 
276
296
  ---
277
297
 
@@ -379,6 +399,12 @@ opensportslib setup --pyg
379
399
 
380
400
  # Optional: install for DALI support
381
401
  opensportslib setup --dali
402
+
403
+ # Optional: install the X-VARS-compatible VQA dependency profile
404
+ opensportslib setup --vqa_xvars
405
+
406
+ # Optional: install the Qwen-compatible VQA dependency profile
407
+ opensportslib setup --vqa_qwen
382
408
  ```
383
409
 
384
410
  ### Git workflow
@@ -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()
@@ -11,8 +11,8 @@ def main(argv: Optional[list[str]] = None) -> int:
11
11
  parser.add_argument("command", choices=["setup"])
12
12
  parser.add_argument("--pyg", action="store_true")
13
13
  parser.add_argument("--dali", action="store_true")
14
- parser.add_argument("--xvars", action="store_true")
15
- parser.add_argument("--qwen", action="store_true")
14
+ parser.add_argument("--vqa_xvars", action="store_true")
15
+ parser.add_argument("--vqa_qwen", action="store_true")
16
16
 
17
17
  args = parser.parse_args(argv)
18
18
 
@@ -20,8 +20,8 @@ def main(argv: Optional[list[str]] = None) -> int:
20
20
  setup(
21
21
  pyg=args.pyg,
22
22
  dali=args.dali,
23
- xvars=args.xvars,
24
- qwen=args.qwen
23
+ vqa_xvars=args.vqa_xvars,
24
+ vqa_qwen=args.vqa_qwen
25
25
  )
26
26
  return 0
27
27
 
@@ -1,11 +1,10 @@
1
- TASK: VQA
1
+ TASK: vqa
2
2
  VERSION: 2
3
3
 
4
4
  SYSTEM:
5
5
  paths:
6
- log_dir: ./logs
7
- save_dir: ./checkpoints_vqa_qwen
8
- work_dir: ./checkpoints_vqa_qwen
6
+ save_dir: ./checkpoints_vqa
7
+ work_dir: ${SYSTEM.paths.save_dir}
9
8
  device: cuda
10
9
  gpu:
11
10
  count: 1
@@ -90,43 +89,11 @@ MODEL:
90
89
  strict: true
91
90
  map_location: null
92
91
  format: auto
93
- components:
94
- video_encoder:
95
- kind: encoder
96
- source:
97
- provider: opensportslib
98
- name: xvars_clip_features
99
- load:
100
- weights_path: /home/vorajv/X-VARS/weights/14_model.pth.tar
101
- params:
102
- feature_source: indexed_or_raw_clip
103
- vision_tower: openai/clip-vit-large-patch14
104
- feature_dim: 1024
105
- overrides: {}
106
- mm_projector:
107
- kind: projector
108
- source:
109
- provider: opensportslib
110
- params:
111
- input_dim: 1024
112
- overrides: {}
113
- llm_decoder:
114
- kind: decoder
115
- source:
116
- provider: huggingface
117
- # Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
118
- name: Qwen/Qwen3.5-9B-Base
119
- params:
120
- # Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
121
- repo_id: Qwen/Qwen3.5-9B-Base
122
- overrides: {}
123
92
  topology:
124
93
  - from: video_encoder
125
94
  to: mm_projector
126
95
  - from: mm_projector
127
96
  to: llm_decoder
128
- metadata:
129
- backend: qwen_xvars_infer
130
97
 
131
98
  IO:
132
99
  inputs:
@@ -139,20 +106,15 @@ IO:
139
106
  TRAIN:
140
107
  trainer:
141
108
  type: vqa
142
-
143
109
  epochs: 3
144
-
145
110
  criterion:
146
111
  type: CrossEntropyLoss
147
-
148
112
  optimizer:
149
113
  type: AdamW
150
114
  lr: 0.0002
151
115
  weight_decay: 0.001
152
-
153
116
  scheduler:
154
117
  type: constant
155
-
156
118
  execution:
157
119
  enabled: true
158
120
  training_backend: xvars_videochatgpt_lora
@@ -161,28 +123,22 @@ TRAIN:
161
123
  acc_grad_iter: 8
162
124
  log_interval: 1
163
125
  dry_run: false
164
-
165
126
  xvars:
166
127
  feature_mode: strict_xvars
167
128
  projection_path: null
168
-
169
129
  prompt:
170
130
  style: detailed
171
- system_prompt: You are a football video assistant. Answer the VQA question using the provided video context and referee priors.
172
131
  include_priors: true
173
132
  prediction_prior_adapter: xvars_referee
174
133
  prior_fields: [action, offence, contact, bodypart]
175
134
  video_token_len: 300
176
-
177
135
  generation:
178
136
  max_new_tokens: 128
179
137
  temperature: 0.0
180
-
181
138
  eval_profile:
182
139
  metric_set: [exact_match, contains_match, token_f1, referee_semantic]
183
140
  aggregation: mean
184
141
  exclusions: []
185
-
186
142
  sft:
187
143
  max_seq_length: 480
188
144
  include_video_tokens: true
@@ -191,14 +147,6 @@ TRAIN:
191
147
  append_eos_token: true
192
148
  gradient_checkpointing: true
193
149
  save_strategy: epoch
194
-
195
- hf:
196
- tokenizer_id: ${MODEL.components.llm_decoder.params.repo_id}
197
- prefer_cuda: true
198
- local_files_only: false
199
- device_map: auto
200
- offload_folder: ./hf_offload_qwen
201
-
202
150
  lora:
203
151
  r: 16
204
152
  alpha: 32
@@ -207,22 +155,18 @@ TRAIN:
207
155
  prepare_kbit: true
208
156
  target_modules: [mm_projector, upsample_features, up_proj, down_proj, gate_proj, k_proj, q_proj, v_proj, o_proj]
209
157
  exclude_modules: '^base_lm\.model\.mm_projector$'
210
-
211
158
  quantization:
212
159
  enabled: false
213
160
  load_in_4bit: true
214
161
  bnb_4bit_quant_type: nf4
215
162
  compute_dtype: float16
216
163
  bnb_4bit_use_double_quant: true
217
-
218
164
  checkpoint:
219
165
  save_adapter: true
220
166
  merge_and_save: false
221
-
222
167
  selection:
223
168
  monitor: loss
224
169
  mode: min
225
-
226
170
  checkpoint:
227
171
  save_every: 1
228
172
  save_best: true
@@ -0,0 +1,49 @@
1
+ SYSTEM:
2
+ paths:
3
+ save_dir: ./checkpoints_vqa_qwen
4
+
5
+ MODEL:
6
+ components:
7
+ video_encoder:
8
+ kind: encoder
9
+ source:
10
+ provider: opensportslib
11
+ name: xvars_clip_features
12
+ load:
13
+ weights_path: /home/vorajv/X-VARS/weights/14_model.pth.tar
14
+ params:
15
+ feature_source: indexed_or_raw_clip
16
+ vision_tower: openai/clip-vit-large-patch14
17
+ feature_dim: 1024
18
+ overrides: {}
19
+ mm_projector:
20
+ kind: projector
21
+ source:
22
+ provider: opensportslib
23
+ params:
24
+ input_dim: 1024
25
+ overrides: {}
26
+ llm_decoder:
27
+ kind: decoder
28
+ source:
29
+ provider: huggingface
30
+ # Supported models: Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
31
+ name: Qwen/Qwen3.5-9B-Base
32
+ params:
33
+ # Supported models: Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
34
+ repo_id: Qwen/Qwen3.5-9B-Base
35
+ overrides: {}
36
+ metadata:
37
+ backend: qwen_xvars_infer
38
+
39
+ TRAIN:
40
+ execution:
41
+ prompt:
42
+ system_prompt: You are a football video assistant. Answer the VQA question using the provided video context and referee priors.
43
+
44
+ hf:
45
+ tokenizer_id: ${MODEL.components.llm_decoder.params.repo_id}
46
+ prefer_cuda: true
47
+ local_files_only: false
48
+ device_map: auto
49
+ offload_folder: ./hf_offload_qwen
@@ -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}
@@ -18,7 +18,7 @@ from .migrate import migrate_config
18
18
  from .runtime_adapter import maybe_namespace, namespace_to_plain_dict
19
19
 
20
20
  _YAML_SUFFIXES = {".yaml", ".yml"}
21
- _TASK_DIRS = {"classification", "localization"}
21
+ _TASK_DIRS = {"classification", "localization", "vqa"}
22
22
  _INTERPOLATION_RE = re.compile(r"\$\{([^}]+)\}")
23
23
 
24
24
 
@@ -183,12 +183,12 @@ def verify():
183
183
  else:
184
184
  print("Running on CPU")
185
185
 
186
- def setup(dali=False, pyg=False, xvars=False, qwen=False):
186
+ def setup(dali=False, pyg=False, vqa_xvars=False, vqa_qwen=False):
187
187
  install_torch()
188
188
  install_extras(dali=dali, pyg=pyg)
189
- if xvars:
189
+ if vqa_xvars:
190
190
  install_xvars_dependencies(XVARS_DEPENDENCY_PINS)
191
- if qwen:
191
+ if vqa_qwen:
192
192
  install_xvars_dependencies(QWEN_DEPENDENCY_PINS)
193
193
  verify()
194
194
 
@@ -202,9 +202,9 @@ if __name__ == "__main__":
202
202
  parser = argparse.ArgumentParser()
203
203
  parser.add_argument("--dali", action="store_true")
204
204
  parser.add_argument("--pyg", action="store_true")
205
- parser.add_argument("--xvars", action="store_true")
206
- parser.add_argument("--qwen", action="store_true")
205
+ parser.add_argument("--vqa_xvars", action="store_true")
206
+ parser.add_argument("--vqa_qwen", action="store_true")
207
207
 
208
208
  args = parser.parse_args()
209
209
 
210
- setup(dali=args.dali, pyg=args.pyg, xvars=args.xvars, qwen=args.qwen)
210
+ setup(dali=args.dali, pyg=args.pyg, vqa_xvars=args.vqa_xvars, vqa_qwen=args.vqa_qwen)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.2.0.dev2
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
@@ -93,13 +93,26 @@ opensportslib setup --pyg
93
93
 
94
94
  # Optional: install for DALI support
95
95
  opensportslib setup --dali
96
- ```
96
+
97
+ # Optional: install the X-VARS-compatible VQA dependency profile
98
+ opensportslib setup --vqa_xvars
99
+
100
+ # Optional: install the Qwen-compatible VQA dependency profile
101
+ opensportslib setup --vqa_qwen
102
+ ```
97
103
  ---
98
104
 
99
105
  **Note:**
100
106
  Run `opensportslib setup` to automatically configure dependencies.
101
107
  If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
102
108
 
109
+ For VQA, use exactly one backend-specific dependency profile:
110
+
111
+ - `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
112
+ - `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
113
+
114
+ The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
115
+
103
116
  ---
104
117
 
105
118
  ## Data and pretrained models
@@ -287,7 +300,7 @@ metrics_from_file = my_model.evaluate(
287
300
  from opensportslib.apis import VQAModel
288
301
 
289
302
  my_model = VQAModel(
290
- config="/path/to/vqa.yaml",
303
+ config="opensportslib/configs/vqa/qwen.yaml",
291
304
  weights=None, # optional: path or Hugging Face model ID
292
305
  )
293
306
 
@@ -300,13 +313,20 @@ single_prediction = my_model.infer(
300
313
  video_path="/path/to/video.mp4",
301
314
  question="What card would you give? Why?",
302
315
  )
303
-
304
- metrics = my_model.evaluate(
305
- test_set="/path/to/test_annotations.json",
306
- predictions=predictions,
307
- )
308
316
  ```
309
317
 
318
+ Use `opensportslib/configs/vqa/xvars.yaml` with `opensportslib setup --vqa_xvars`
319
+ for the X-VARS-compatible backend, or `opensportslib/configs/vqa/qwen.yaml` with
320
+ `opensportslib setup --vqa_qwen` for the Qwen-compatible backend. The Qwen
321
+ backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
322
+ `Qwen/Qwen3.5-9B-Base`.
323
+
324
+ For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
325
+ when available and falls back to extracting CLIP features from raw video during
326
+ `infer()`. Pre-extracted features remain the preferred path for parity, speed,
327
+ and reproducibility. See [docs/tools/vqa.md](docs/tools/vqa.md) for the full
328
+ VQA setup workflow.
329
+
310
330
 
311
331
  ---
312
332
 
@@ -414,6 +434,12 @@ opensportslib setup --pyg
414
434
 
415
435
  # Optional: install for DALI support
416
436
  opensportslib setup --dali
437
+
438
+ # Optional: install the X-VARS-compatible VQA dependency profile
439
+ opensportslib setup --vqa_xvars
440
+
441
+ # Optional: install the Qwen-compatible VQA dependency profile
442
+ opensportslib setup --vqa_qwen
417
443
  ```
418
444
 
419
445
  ### Git workflow
@@ -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,8 +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
32
- opensportslib/configs/vqa/xvars_lora.yaml
34
+ opensportslib/configs/vqa/xvars.yaml
33
35
  opensportslib/core/__init__.py
34
36
  opensportslib/core/config/__init__.py
35
37
  opensportslib/core/config/accessors.py
@@ -136,9 +138,12 @@ tests/test_localization_dali_filenames.py
136
138
  tests/test_package_smoke.py
137
139
  tests/test_pretrained_config_merge_policy.py
138
140
  tests/test_public_apis_smoke.py
141
+ tests/test_setup_cli.py
139
142
  tests/test_subset_train_infer_integration.py
140
143
  tests/test_task_model_api_contract.py
144
+ tests/test_vqa_api.py
141
145
  tests/test_vqa_metrics_semantic.py
146
+ tests/test_vqa_qwen_xvars.py
142
147
  tests/test_vqa_training_lora.py
143
148
  tests/test_vqa_xvars_videochatgpt.py
144
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.dev2"
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"