visual-rag-toolkit 0.1.4__tar.gz → 0.1.6__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 (69) hide show
  1. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/PKG-INFO +3 -1
  2. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/README.md +2 -0
  3. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/__init__.py +1 -1
  4. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/ui/header.py +8 -0
  5. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/pyproject.toml +2 -2
  6. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/__init__.py +1 -1
  7. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/cli/main.py +1 -1
  8. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/retrieval/multi_vector.py +3 -2
  9. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/retrieval/single_stage.py +1 -1
  10. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/retrieval/three_stage.py +1 -1
  11. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/retrieval/two_stage.py +1 -1
  12. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/visualization/saliency.py +2 -2
  13. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/.github/workflows/ci.yaml +0 -0
  14. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/.github/workflows/publish_pypi.yaml +0 -0
  15. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/.gitignore +0 -0
  16. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/LICENSE +0 -0
  17. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/README.md +0 -0
  18. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/__init__.py +0 -0
  19. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/analyze_results.py +0 -0
  20. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/benchmark_datasets.txt +0 -0
  21. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/prepare_submission.py +0 -0
  22. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/quick_test.py +0 -0
  23. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/run_vidore.py +0 -0
  24. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/vidore_beir_qdrant/run_qdrant_beir.py +0 -0
  25. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/vidore_tatdqa_test/__init__.py +0 -0
  26. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/vidore_tatdqa_test/dataset_loader.py +0 -0
  27. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/vidore_tatdqa_test/metrics.py +0 -0
  28. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/vidore_tatdqa_test/run_qdrant.py +0 -0
  29. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/benchmarks/vidore_tatdqa_test/sweep_eval.py +0 -0
  30. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/app.py +0 -0
  31. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/commands.py +0 -0
  32. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/config.py +0 -0
  33. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/download_models.py +0 -0
  34. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/evaluation.py +0 -0
  35. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/indexing.py +0 -0
  36. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/qdrant_utils.py +0 -0
  37. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/results.py +0 -0
  38. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/test_qdrant_connection.py +0 -0
  39. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/ui/__init__.py +0 -0
  40. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/ui/benchmark.py +0 -0
  41. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/ui/playground.py +0 -0
  42. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/ui/sidebar.py +0 -0
  43. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/demo/ui/upload.py +0 -0
  44. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/examples/COMMANDS.md +0 -0
  45. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/examples/config.yaml +0 -0
  46. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/examples/process_pdfs.py +0 -0
  47. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/examples/search_demo.py +0 -0
  48. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/requirements.txt +0 -0
  49. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/tests/__init__.py +0 -0
  50. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/tests/test_config.py +0 -0
  51. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/tests/test_pdf_processor.py +0 -0
  52. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/tests/test_pooling.py +0 -0
  53. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/tests/test_strategies.py +0 -0
  54. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/cli/__init__.py +0 -0
  55. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/config.py +0 -0
  56. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/demo_runner.py +0 -0
  57. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/embedding/__init__.py +0 -0
  58. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/embedding/pooling.py +0 -0
  59. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/embedding/visual_embedder.py +0 -0
  60. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/indexing/__init__.py +0 -0
  61. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/indexing/cloudinary_uploader.py +0 -0
  62. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/indexing/pdf_processor.py +0 -0
  63. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/indexing/pipeline.py +0 -0
  64. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/indexing/qdrant_indexer.py +0 -0
  65. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/preprocessing/__init__.py +0 -0
  66. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/preprocessing/crop_empty.py +0 -0
  67. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/qdrant_admin.py +0 -0
  68. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/retrieval/__init__.py +0 -0
  69. {visual_rag_toolkit-0.1.4 → visual_rag_toolkit-0.1.6}/visual_rag/visualization/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: visual-rag-toolkit
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Summary: End-to-end visual document retrieval with ColPali, featuring two-stage pooling for scalable search
5
5
  Project-URL: Homepage, https://github.com/Ara-Yeroyan/visual-rag-toolkit
6
6
  Project-URL: Documentation, https://github.com/Ara-Yeroyan/visual-rag-toolkit#readme
@@ -94,6 +94,8 @@ End-to-end visual document retrieval toolkit featuring **fast multi-stage retrie
94
94
 
95
95
  **[Try the Live Demo](https://huggingface.co/spaces/Yeroyan/visual-rag-toolkit)** - Upload PDFs, index to Qdrant, and query with visual retrieval.
96
96
 
97
+ **[Watch the Tutorial](https://drive.google.com/file/d/1SmpVJicsvyZ-awlwYtSkLw6BCSO7IJTw/view)** - Video walkthrough of the toolkit in action.
98
+
97
99
  This repo contains:
98
100
  - a **Python package** (`visual_rag`)
99
101
  - a **Streamlit demo app** (`demo/`)
@@ -9,6 +9,8 @@ End-to-end visual document retrieval toolkit featuring **fast multi-stage retrie
9
9
 
10
10
  **[Try the Live Demo](https://huggingface.co/spaces/Yeroyan/visual-rag-toolkit)** - Upload PDFs, index to Qdrant, and query with visual retrieval.
11
11
 
12
+ **[Watch the Tutorial](https://drive.google.com/file/d/1SmpVJicsvyZ-awlwYtSkLw6BCSO7IJTw/view)** - Video walkthrough of the toolkit in action.
13
+
12
14
  This repo contains:
13
15
  - a **Python package** (`visual_rag`)
14
16
  - a **Streamlit demo app** (`demo/`)
@@ -7,4 +7,4 @@ A Streamlit-based UI for:
7
7
  - Interactive playground for visual search
8
8
  """
9
9
 
10
- __version__ = "0.1.4"
10
+ __version__ = "0.1.6"
@@ -26,5 +26,13 @@ def render_header():
26
26
  ">
27
27
  SIGIR 2026 Demo - Multi-Vector Visual Document Retrieval
28
28
  </p>
29
+ <p style="
30
+ font-size: 2rem;
31
+ margin-top: 8px;
32
+ ">
33
+ <a href="https://drive.google.com/file/d/1SmpVJicsvyZ-awlwYtSkLw6BCSO7IJTw/view" target="_blank" style="color: #0066cc; text-decoration: none;">
34
+ 🎬 Watch Tutorial
35
+ </a>
36
+ </p>
29
37
  </div>
30
38
  """, unsafe_allow_html=True)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "visual-rag-toolkit"
7
- version = "0.1.4"
7
+ version = "0.1.6"
8
8
  description = "End-to-end visual document retrieval with ColPali, featuring two-stage pooling for scalable search"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
@@ -153,7 +153,7 @@ warn_unused_configs = true
153
153
  ignore_missing_imports = true
154
154
 
155
155
  [tool.bumpversion]
156
- current_version = "0.1.4"
156
+ current_version = "0.1.6"
157
157
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
158
158
  serialize = ["{major}.{minor}.{patch}"]
159
159
  commit = true
@@ -33,7 +33,7 @@ Each component works independently - use only what you need.
33
33
 
34
34
  import logging
35
35
 
36
- __version__ = "0.1.4"
36
+ __version__ = "0.1.6"
37
37
 
38
38
 
39
39
  def setup_logging(level: str = "INFO", format: str = None) -> None:
@@ -288,7 +288,7 @@ def cmd_search(args):
288
288
  )
289
289
 
290
290
  # Search
291
- query_np = query_embedding.detach().cpu().numpy()
291
+ query_np = query_embedding.detach().cpu().float().numpy() # .float() for BFloat16
292
292
  if args.strategy == "single_full":
293
293
  results = single_stage.search(
294
294
  query_embedding=query_np,
@@ -157,9 +157,10 @@ class MultiVectorRetriever:
157
157
  ) -> List[Dict[str, Any]]:
158
158
  q = self.embedder.embed_query(query)
159
159
  if isinstance(q, torch.Tensor):
160
- query_embedding = q.detach().cpu().numpy()
160
+ # .float() converts BFloat16 to Float32 (numpy doesn't support BFloat16)
161
+ query_embedding = q.detach().cpu().float().numpy()
161
162
  else:
162
- query_embedding = np.asarray(q)
163
+ query_embedding = np.asarray(q, dtype=np.float32)
163
164
 
164
165
  return self.search_embedded(
165
166
  query_embedding=query_embedding,
@@ -129,5 +129,5 @@ class SingleStageRetriever:
129
129
  if isinstance(embedding, torch.Tensor):
130
130
  if embedding.dtype == torch.bfloat16:
131
131
  return embedding.cpu().float().numpy()
132
- return embedding.cpu().numpy()
132
+ return embedding.cpu().float().numpy() # .float() for BFloat16 compatibility
133
133
  return np.array(embedding, dtype=np.float32)
@@ -51,7 +51,7 @@ class ThreeStageRetriever:
51
51
  if isinstance(embedding, torch.Tensor):
52
52
  if embedding.dtype == torch.bfloat16:
53
53
  return embedding.cpu().float().numpy()
54
- return embedding.cpu().numpy()
54
+ return embedding.cpu().float().numpy() # .float() for BFloat16 compatibility
55
55
  return np.array(embedding, dtype=np.float32)
56
56
 
57
57
  def _infer_vector_is_multivector(self, vector_name: str) -> bool:
@@ -418,7 +418,7 @@ class TwoStageRetriever:
418
418
  if isinstance(embedding, torch.Tensor):
419
419
  if embedding.dtype == torch.bfloat16:
420
420
  return embedding.cpu().float().numpy()
421
- return embedding.cpu().numpy()
421
+ return embedding.cpu().float().numpy() # .float() for BFloat16 compatibility
422
422
  return np.array(embedding, dtype=np.float32)
423
423
 
424
424
  def build_filter(
@@ -55,14 +55,14 @@ def generate_saliency_map(
55
55
  if hasattr(query_embedding, "numpy"):
56
56
  query_np = query_embedding.numpy()
57
57
  elif hasattr(query_embedding, "cpu"):
58
- query_np = query_embedding.cpu().numpy()
58
+ query_np = query_embedding.cpu().float().numpy() # .float() for BFloat16
59
59
  else:
60
60
  query_np = np.array(query_embedding, dtype=np.float32)
61
61
 
62
62
  if hasattr(doc_embedding, "numpy"):
63
63
  doc_np = doc_embedding.numpy()
64
64
  elif hasattr(doc_embedding, "cpu"):
65
- doc_np = doc_embedding.cpu().numpy()
65
+ doc_np = doc_embedding.cpu().float().numpy() # .float() for BFloat16
66
66
  else:
67
67
  doc_np = np.array(doc_embedding, dtype=np.float32)
68
68