visual-rag-toolkit 0.1.3__py3-none-any.whl → 0.1.5__py3-none-any.whl

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.
demo/__init__.py CHANGED
@@ -7,4 +7,4 @@ A Streamlit-based UI for:
7
7
  - Interactive playground for visual search
8
8
  """
9
9
 
10
- __version__ = "0.1.0"
10
+ __version__ = "0.1.5"
demo/ui/sidebar.py CHANGED
@@ -16,6 +16,28 @@ from demo.qdrant_utils import (
16
16
 
17
17
 
18
18
  def render_sidebar():
19
+ # CSS to make sidebar metrics smaller
20
+ st.markdown("""
21
+ <style>
22
+ /* Smaller metrics in sidebar */
23
+ [data-testid="stSidebar"] [data-testid="stMetricValue"] {
24
+ font-size: 1.2rem !important;
25
+ }
26
+ [data-testid="stSidebar"] [data-testid="stMetricLabel"] {
27
+ font-size: 0.75rem !important;
28
+ }
29
+ /* Smaller expander headers in sidebar */
30
+ [data-testid="stSidebar"] [data-testid="stExpander"] summary {
31
+ font-size: 0.9rem !important;
32
+ }
33
+ /* Compact subheaders */
34
+ [data-testid="stSidebar"] h3 {
35
+ font-size: 1rem !important;
36
+ margin-bottom: 0.5rem !important;
37
+ }
38
+ </style>
39
+ """, unsafe_allow_html=True)
40
+
19
41
  with st.sidebar:
20
42
  st.subheader("🔑 Qdrant Credentials")
21
43
 
demo/ui/upload.py CHANGED
@@ -449,7 +449,7 @@ def process_pdfs(uploaded_files, config):
449
449
 
450
450
  if total_uploaded > 0:
451
451
  st.session_state["upload_success"] = f"Uploaded {total_uploaded} pages to {collection_name}"
452
- st.balloons()
452
+ st.rerun() # Immediately refresh to show success toast + balloons
453
453
 
454
454
  except Exception as e:
455
455
  st.error(f"❌ Processing error: {e}")
visual_rag/__init__.py CHANGED
@@ -33,17 +33,17 @@ Each component works independently - use only what you need.
33
33
 
34
34
  import logging
35
35
 
36
- __version__ = "0.1.3"
36
+ __version__ = "0.1.5"
37
37
 
38
38
 
39
39
  def setup_logging(level: str = "INFO", format: str = None) -> None:
40
40
  """
41
41
  Configure logging for visual_rag package.
42
-
42
+
43
43
  Args:
44
44
  level: Log level ("DEBUG", "INFO", "WARNING", "ERROR")
45
45
  format: Custom format string. Default shows time, level, and message.
46
-
46
+
47
47
  Example:
48
48
  >>> import visual_rag
49
49
  >>> visual_rag.setup_logging("INFO")
@@ -51,13 +51,13 @@ def setup_logging(level: str = "INFO", format: str = None) -> None:
51
51
  """
52
52
  if format is None:
53
53
  format = "[%(asctime)s] %(levelname)s - %(message)s"
54
-
54
+
55
55
  logging.basicConfig(
56
56
  level=getattr(logging, level.upper(), logging.INFO),
57
57
  format=format,
58
58
  datefmt="%H:%M:%S",
59
59
  )
60
-
60
+
61
61
  # Also set the visual_rag logger specifically
62
62
  logger = logging.getLogger("visual_rag")
63
63
  logger.setLevel(getattr(logging, level.upper(), logging.INFO))
@@ -111,13 +111,16 @@ try:
111
111
  except ImportError:
112
112
  QdrantAdmin = None
113
113
 
114
- try:
115
- from visual_rag.demo_runner import demo
116
- except ImportError:
117
- demo = None
114
+ # demo is lazily imported to avoid RuntimeWarning when running as __main__
115
+ # Access via visual_rag.demo() which triggers __getattr__
118
116
 
119
117
  # Config utilities (always available)
120
- from visual_rag.config import get, get_section, load_config
118
+ try:
119
+ from visual_rag.config import get, get_section, load_config
120
+ except ImportError:
121
+ get = None
122
+ get_section = None
123
+ load_config = None
121
124
 
122
125
  __all__ = [
123
126
  # Version
@@ -138,3 +141,15 @@ __all__ = [
138
141
  # Logging
139
142
  "setup_logging",
140
143
  ]
144
+
145
+
146
+ def __getattr__(name: str):
147
+ """Lazy import for demo to avoid RuntimeWarning when running as __main__."""
148
+ if name == "demo":
149
+ try:
150
+ from visual_rag.demo_runner import demo
151
+
152
+ return demo
153
+ except ImportError:
154
+ return None
155
+ raise AttributeError(f"module 'visual_rag' has no attribute {name!r}")
visual_rag/cli/main.py CHANGED
@@ -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,
visual_rag/demo_runner.py CHANGED
@@ -52,13 +52,11 @@ def demo(
52
52
  cmd = [sys.executable, "-m", "streamlit", "run", str(app_path)]
53
53
  cmd += ["--server.address", str(host)]
54
54
  cmd += ["--server.port", str(int(port))]
55
- cmd += ["--server.headless", "true" if headless else "false"]
55
+ # headless=true prevents browser from auto-opening; open_browser overrides
56
+ should_be_headless = headless and not open_browser
57
+ cmd += ["--server.headless", "true" if should_be_headless else "false"]
56
58
  cmd += ["--browser.gatherUsageStats", "false"]
57
59
  cmd += ["--server.runOnSave", "false"]
58
- cmd += ["--browser.serverAddress", str(host)]
59
- if not open_browser:
60
- cmd += ["--browser.serverPort", str(int(port))]
61
- cmd += ["--browser.open", "false"]
62
60
 
63
61
  if extra_args:
64
62
  cmd += list(extra_args)
@@ -335,7 +335,9 @@ class QdrantIndexer:
335
335
  return val.tolist()
336
336
  return val
337
337
 
338
- def _build_qdrant_points(batch_points: List[Dict[str, Any]]) -> List[qdrant_models.PointStruct]:
338
+ def _build_qdrant_points(
339
+ batch_points: List[Dict[str, Any]],
340
+ ) -> List[qdrant_models.PointStruct]:
339
341
  qdrant_points: List[qdrant_models.PointStruct] = []
340
342
  for p in batch_points:
341
343
  global_pooled = p.get("global_pooled_embedding")
@@ -382,7 +384,7 @@ class QdrantIndexer:
382
384
  )
383
385
 
384
386
  logger.info(f" ✅ Uploaded {len(points)} points to Qdrant")
385
-
387
+
386
388
  if delay_between_batches > 0:
387
389
  if _is_cancelled():
388
390
  return 0
@@ -56,14 +56,10 @@ class MultiVectorRetriever:
56
56
  )
57
57
 
58
58
  qdrant_url = (
59
- qdrant_url
60
- or os.getenv("QDRANT_URL")
61
- or os.getenv("SIGIR_QDRANT_URL") # legacy
59
+ qdrant_url or os.getenv("QDRANT_URL") or os.getenv("SIGIR_QDRANT_URL") # legacy
62
60
  )
63
61
  if not qdrant_url:
64
- raise ValueError(
65
- "QDRANT_URL is required (pass qdrant_url or set env var)."
66
- )
62
+ raise ValueError("QDRANT_URL is required (pass qdrant_url or set env var).")
67
63
 
68
64
  qdrant_api_key = (
69
65
  qdrant_api_key
@@ -97,7 +93,10 @@ class MultiVectorRetriever:
97
93
  _ = client.get_collections()
98
94
  except Exception as e:
99
95
  msg = str(e)
100
- if "StatusCode.PERMISSION_DENIED" in msg or "http2 header with status: 403" in msg:
96
+ if (
97
+ "StatusCode.PERMISSION_DENIED" in msg
98
+ or "http2 header with status: 403" in msg
99
+ ):
101
100
  client = _make_client(False)
102
101
  else:
103
102
  raise
@@ -158,9 +157,10 @@ class MultiVectorRetriever:
158
157
  ) -> List[Dict[str, Any]]:
159
158
  q = self.embedder.embed_query(query)
160
159
  if isinstance(q, torch.Tensor):
161
- 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()
162
162
  else:
163
- query_embedding = np.asarray(q)
163
+ query_embedding = np.asarray(q, dtype=np.float32)
164
164
 
165
165
  return self.search_embedded(
166
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:
@@ -22,7 +22,6 @@ from typing import Any, Dict, List, Optional, Union
22
22
 
23
23
  import numpy as np
24
24
  import torch
25
-
26
25
  from qdrant_client.http import models as qdrant_models
27
26
  from qdrant_client.models import FieldCondition, Filter, MatchAny, MatchValue
28
27
 
@@ -419,7 +418,7 @@ class TwoStageRetriever:
419
418
  if isinstance(embedding, torch.Tensor):
420
419
  if embedding.dtype == torch.bfloat16:
421
420
  return embedding.cpu().float().numpy()
422
- return embedding.cpu().numpy()
421
+ return embedding.cpu().float().numpy() # .float() for BFloat16 compatibility
423
422
  return np.array(embedding, dtype=np.float32)
424
423
 
425
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: visual-rag-toolkit
3
- Version: 0.1.3
3
+ Version: 0.1.5
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
@@ -88,9 +88,12 @@ Description-Content-Type: text/markdown
88
88
  [![PyPI](https://img.shields.io/pypi/v/visual-rag-toolkit)](https://pypi.org/project/visual-rag-toolkit/)
89
89
  [![Python](https://img.shields.io/pypi/pyversions/visual-rag-toolkit)](https://pypi.org/project/visual-rag-toolkit/)
90
90
  [![License](https://img.shields.io/pypi/l/visual-rag-toolkit)](LICENSE)
91
+ [![Demo](https://img.shields.io/badge/Demo-Hugging%20Face-yellow)](https://huggingface.co/spaces/Yeroyan/visual-rag-toolkit)
91
92
 
92
93
  End-to-end visual document retrieval toolkit featuring **fast multi-stage retrieval** (prefetch with pooled vectors + exact MaxSim reranking).
93
94
 
95
+ **[Try the Live Demo](https://huggingface.co/spaces/Yeroyan/visual-rag-toolkit)** - Upload PDFs, index to Qdrant, and query with visual retrieval.
96
+
94
97
  This repo contains:
95
98
  - a **Python package** (`visual_rag`)
96
99
  - a **Streamlit demo app** (`demo/`)
@@ -368,7 +371,7 @@ If you use this toolkit in your research, please cite:
368
371
 
369
372
  ```bibtex
370
373
  @software{visual_rag_toolkit,
371
- title = {Visual RAG Toolkit: Scalable Visual Document Retrieval with Two-Stage Pooling},
374
+ title = {Visual RAG Toolkit: Scalable Visual Document Retrieval with 1D Convolutional Pooling},
372
375
  author = {Ara Yeroyan},
373
376
  year = {2026},
374
377
  url = {https://github.com/Ara-Yeroyan/visual-rag-toolkit}
@@ -11,13 +11,12 @@ benchmarks/vidore_tatdqa_test/dataset_loader.py,sha256=gCCneGAKWQm0WlJHLvGjoMrAb
11
11
  benchmarks/vidore_tatdqa_test/metrics.py,sha256=cLdYbRt5VcxInO1cN79ve6ZLP3kaSxRkdzRX3IbPPMs,1112
12
12
  benchmarks/vidore_tatdqa_test/run_qdrant.py,sha256=_PikeqIYpWPim-KEQOwvT-aqwYoAWASjqJVisi8PfQg,28681
13
13
  benchmarks/vidore_tatdqa_test/sweep_eval.py,sha256=d_kbyNTJ1LoFfIVnsZyiRO1nKyMqmRB5jEweZL6kYd4,12688
14
- demo/__init__.py,sha256=jVzjsVKZl5ZZuFxawA8Pxj3yuIKL7llkao3rBpde-aQ,204
14
+ demo/__init__.py,sha256=zxRkBWe4opMZXfJxNULuktXdZLuYsZFHeaijgxPe07w,204
15
15
  demo/app.py,sha256=nZbCz1mpRK-GZTgOHyz4m4AfgKFgsH-09JwXeL3d3ng,1405
16
16
  demo/commands.py,sha256=qxRE2x610yZvcjwEfSKiR9CyFonX-vRxFqQNJCUKfyA,13690
17
17
  demo/config.py,sha256=BNkV4NSEEMIV9e6Z-cxds2v247uVmTPCgL-M5ItPzMg,757
18
18
  demo/download_models.py,sha256=J10qQt2TpEshVOxvCX_ZSbV7YozIBqDATZnt8fUKFHs,2868
19
19
  demo/evaluation.py,sha256=4ixJGg50KAVNiZ_mr5FMVv-QKCrZRooJ80LbrjKXM1s,27467
20
- demo/example_metadata_mapping_sigir.json,sha256=UCgqZtr6Wnq_vS7zxPxpvuokk9gxOVgKydC7f1lauw8,824
21
20
  demo/indexing.py,sha256=qUVEB3QrIolS53Ggxurccbh-QyeLLbzcY5TLyVBVKME,10620
22
21
  demo/qdrant_utils.py,sha256=Xh-thLIrACrYkFCrqazYNH0p3vS8_yMCaTbvt4HAy98,7778
23
22
  demo/results.py,sha256=dprvxnyHwxJvkAQuh4deaCsiEG1wm0n9svPyxI37vJg,1050
@@ -26,14 +25,14 @@ demo/ui/__init__.py,sha256=EyBCvnXYfPbdyxJzyp9TjQBeJJUgmOY1yRHkUeC6JFQ,412
26
25
  demo/ui/benchmark.py,sha256=HiGCN4HrqeOC7L6t2kuzIiyWdcVE_cP2JTxoewrmPSo,14218
27
26
  demo/ui/header.py,sha256=J2hXr_nNyg1H9rmrd-EGx3WUl7lYo-Ca30ptgzBCfBs,806
28
27
  demo/ui/playground.py,sha256=yRlWWzJgsc596vALn5f0PHhmhtJCMmfv61nYakW75GQ,13672
29
- demo/ui/sidebar.py,sha256=DLVhEj-8xAJCXUwOhndNv8ZFT4K3u8iE6FVOoH-jRuA,7699
30
- demo/ui/upload.py,sha256=6iv4xDsacMtUF1FrquRBE_xNb92HevgxCMS0LBK4Ay0,20455
31
- visual_rag/__init__.py,sha256=4NksVCaN_p32ezMF1N-oxpPFKeOm8xRo70VC4OSa2a0,3911
28
+ demo/ui/sidebar.py,sha256=k7CZ5V7SxwbPOL9nQTWUct5y9mPY-YnLIeBgha7aIEE,8379
29
+ demo/ui/upload.py,sha256=NVmd1-xRj_dfgq14x_eqcN6MjDAZ3hbPBD0YRUz8OOY,20508
30
+ visual_rag/__init__.py,sha256=mOcAcA2rkPVA9GQ63CKFb1g3KatGqILsjfWFj4kkpus,4384
32
31
  visual_rag/config.py,sha256=qqSQk2lM5MiRji-6xQNGS2gSiXA4NgyJnCbgGx7uGJQ,7395
33
- visual_rag/demo_runner.py,sha256=wi0Wz3gZ39l4aovMd6zURq_CKUSgma4kGjF6hpQHwGY,2793
32
+ visual_rag/demo_runner.py,sha256=ahIKYhHQSLOF_kWbj0u_29SLX4qTdyxb3Smt_cMMfzI,2763
34
33
  visual_rag/qdrant_admin.py,sha256=NNczko2S5-K3qATNUxgYn51hNWgWb6boheL7vlCQGpM,7055
35
34
  visual_rag/cli/__init__.py,sha256=WgBRXm0VACfLltvVlLcSs3FTM1uQ7Uuw3CVD4-zWZwc,46
36
- visual_rag/cli/main.py,sha256=QmpnQ0lbC6Q9lwxaSCDh6paEEzI78IPY1jwc3_9y7VI,21083
35
+ visual_rag/cli/main.py,sha256=lw2xS96FtdzFnftModGcqRyJYlxFWA0U3aE3C247mBk,21116
37
36
  visual_rag/embedding/__init__.py,sha256=7QIENmxwRnwnUzsYKRY3VQTyF3HJkRiL1D7Au9XHF0w,682
38
37
  visual_rag/embedding/pooling.py,sha256=x8uY4VHbxEnsJRM2JeOkzPHDiwOkbi5NK4XW21U1hAc,11401
39
38
  visual_rag/embedding/visual_embedder.py,sha256=he9JpVHmo_szOiXCwtJdrCseGmf2y5Gi0UEFjwazzVY,23198
@@ -41,18 +40,18 @@ visual_rag/indexing/__init__.py,sha256=rloBEBt3x8BQut1Tj1n8fuaQ3iXMS3pm64o8n-NlS
41
40
  visual_rag/indexing/cloudinary_uploader.py,sha256=e-G5du4D7z6mWWl2lahMidG-Wdc-baImFFILTojebpA,8826
42
41
  visual_rag/indexing/pdf_processor.py,sha256=V3RAKpwgIFicqUaXzaaljePxh_oP4UV5W0aiJyfv0BY,10247
43
42
  visual_rag/indexing/pipeline.py,sha256=1ScpVRlLCq2FWi3IPvlQcIfDCQQ2F64IlRd9ZZHiTaA,25037
44
- visual_rag/indexing/qdrant_indexer.py,sha256=Q0e8JCr9B1OxgOMW7BWeg7MlWiLPaBUmjoFof4gZFYo,19519
43
+ visual_rag/indexing/qdrant_indexer.py,sha256=E9uDwOL3A1nFJhFhJcI8V3JR8FL7nDahEYiv886oG1s,19526
45
44
  visual_rag/preprocessing/__init__.py,sha256=rCzfBO0jaVKp6MpPRRused_4gasHfobAbG-139Y806E,121
46
45
  visual_rag/preprocessing/crop_empty.py,sha256=iHXITFkRlF40VPJ4k9d432RUAi_89BhAEvK4wOEn96Q,5211
47
46
  visual_rag/retrieval/__init__.py,sha256=J9pnbeB83Fqs9n4g3GcIp1VR9dnuyAlcsIDVsf0lSb8,601
48
- visual_rag/retrieval/multi_vector.py,sha256=ZZ_O4x7MZbhF--kRp8T4UJG5GuenfjJ91FKicklhK3Q,7006
49
- visual_rag/retrieval/single_stage.py,sha256=Ba06V-KRSFSZm0xzbjFR3EBEWaQkDo7U_pWNx25W8H0,4425
50
- visual_rag/retrieval/three_stage.py,sha256=YC0CVEohxTT5zhilcQHI7nYAk08E5jC3zkQ3-rNdLMw,5951
51
- visual_rag/retrieval/two_stage.py,sha256=JJ6rXv_3_3WLIjAcxOY7NuhSyuPzIMyHf3ooiGFTp9k,16776
47
+ visual_rag/retrieval/multi_vector.py,sha256=oQowl-Yv4cYDj2jroX1nv_uZl8sb0d5VKMmwxL-GlBA,7119
48
+ visual_rag/retrieval/single_stage.py,sha256=-hljRha6kWZAr1IQJVSii4pqiIqk0cHhW68bUyYK41o,4472
49
+ visual_rag/retrieval/three_stage.py,sha256=UDjH92V6ILV_w4bOeN0vCF3SdXYHMml9oN2gl3kfwWk,5998
50
+ visual_rag/retrieval/two_stage.py,sha256=OTTH-MYtwK45RHYMF1esEeciXMTU8h7AQzH68BZVrYE,16822
52
51
  visual_rag/visualization/__init__.py,sha256=SITKNvBEseDp7F3K6UzLPA-6OQFqYfY5azS5nlDdihQ,447
53
- visual_rag/visualization/saliency.py,sha256=F3Plc18Sf3tzWcyncuaruTmENm1IfW5j9NFGEQR93cY,11248
54
- visual_rag_toolkit-0.1.3.dist-info/METADATA,sha256=IQaXJV0GkBuRZG5JTkFA-Zv6pboaAeoWoQIeWzu7-Z4,13180
55
- visual_rag_toolkit-0.1.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
56
- visual_rag_toolkit-0.1.3.dist-info/entry_points.txt,sha256=6Tob1GPg_ILGELjYTPsAnNMZ1W0NS939nfI7xyW2DIY,102
57
- visual_rag_toolkit-0.1.3.dist-info/licenses/LICENSE,sha256=hEg_weKnHXJakQRR3sw2ygcZ101zCI00zMhBOPb3yfA,1069
58
- visual_rag_toolkit-0.1.3.dist-info/RECORD,,
52
+ visual_rag/visualization/saliency.py,sha256=RuVcF1cPrmzdwfigqhP-e1aqzMr817F64aYucbwT79g,11314
53
+ visual_rag_toolkit-0.1.5.dist-info/METADATA,sha256=66Z99JyOGp5QVb2eJR7U2zjF8Qd6nvRJanhezrbZ-3o,13460
54
+ visual_rag_toolkit-0.1.5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
55
+ visual_rag_toolkit-0.1.5.dist-info/entry_points.txt,sha256=6Tob1GPg_ILGELjYTPsAnNMZ1W0NS939nfI7xyW2DIY,102
56
+ visual_rag_toolkit-0.1.5.dist-info/licenses/LICENSE,sha256=hEg_weKnHXJakQRR3sw2ygcZ101zCI00zMhBOPb3yfA,1069
57
+ visual_rag_toolkit-0.1.5.dist-info/RECORD,,
@@ -1,37 +0,0 @@
1
- {
2
- "filenames": {
3
- "sigir2025-llms": {
4
- "year": 2025,
5
- "source": "Conference Paper",
6
- "district": null,
7
- "doc_type": "paper",
8
- "project": "sigir-demo",
9
- "tags": ["llms", "retrieval"]
10
- },
11
- "sigir2025-ginger": {
12
- "year": 2025,
13
- "source": "Conference Paper",
14
- "district": null,
15
- "doc_type": "paper",
16
- "project": "sigir-demo",
17
- "tags": ["ginger", "case-study"]
18
- },
19
- "2505.15859v1": {
20
- "year": 2025,
21
- "source": "arXiv",
22
- "district": null,
23
- "doc_type": "preprint",
24
- "project": "sigir-demo",
25
- "tags": ["arxiv", "ranking"]
26
- },
27
- "2507.04942v2": {
28
- "year": 2025,
29
- "source": "arXiv",
30
- "district": null,
31
- "doc_type": "preprint",
32
- "project": "sigir-demo",
33
- "tags": ["arxiv", "rag"]
34
- }
35
- }
36
- }
37
-