flashrag-dev 0.3.0.dev20260821__tar.gz → 0.3.0.dev20260919__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 (65) hide show
  1. {flashrag_dev-0.3.0.dev20260821/flashrag_dev.egg-info → flashrag_dev-0.3.0.dev20260919}/PKG-INFO +1 -1
  2. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/generator.py +1 -0
  3. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/refiner/refiner.py +1 -1
  4. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/index_builder.py +1 -1
  5. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/retriever.py +2 -0
  6. flashrag_dev-0.3.0.dev20260919/flashrag/version.py +1 -0
  7. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919/flashrag_dev.egg-info}/PKG-INFO +1 -1
  8. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag_dev.egg-info/SOURCES.txt +2 -1
  9. flashrag_dev-0.3.0.dev20260919/tests/test_retriever_cache.py +86 -0
  10. flashrag_dev-0.3.0.dev20260821/flashrag/version.py +0 -1
  11. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/LICENSE +0 -0
  12. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/README.md +0 -0
  13. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/__init__.py +0 -0
  14. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/config/__init__.py +0 -0
  15. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/config/basic_config.yaml +0 -0
  16. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/config/config.py +0 -0
  17. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/dataset/__init__.py +0 -0
  18. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/dataset/dataset.py +0 -0
  19. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/dataset/utils.py +0 -0
  20. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/evaluator/__init__.py +0 -0
  21. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/evaluator/_bleu.py +0 -0
  22. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/evaluator/evaluator.py +0 -0
  23. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/evaluator/metrics.py +0 -0
  24. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/evaluator/utils.py +0 -0
  25. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/__init__.py +0 -0
  26. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/fid.py +0 -0
  27. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/multimodal_generator.py +0 -0
  28. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/openai_generator.py +0 -0
  29. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/stop_word_criteria.py +0 -0
  30. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/generator/utils.py +0 -0
  31. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/judger/__init__.py +0 -0
  32. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/judger/judger.py +0 -0
  33. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/ReaRAG_utils.py +0 -0
  34. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/__init__.py +0 -0
  35. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/active_pipeline.py +0 -0
  36. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/branching_pipeline.py +0 -0
  37. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/mm_pipeline.py +0 -0
  38. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/pipeline.py +0 -0
  39. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/reasoning_pipeline.py +0 -0
  40. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/pipeline/replug_utils.py +0 -0
  41. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/prompt/__init__.py +0 -0
  42. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/prompt/base_prompt.py +0 -0
  43. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/prompt/coRAG_prompt.py +0 -0
  44. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/prompt/mm_prompt.py +0 -0
  45. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/prompt/selfask_examplars.py +0 -0
  46. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/prompt/trace_examplars.py +0 -0
  47. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/refiner/__init__.py +0 -0
  48. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/refiner/kg_refiner.py +0 -0
  49. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/refiner/llmlingua_compressor.py +0 -0
  50. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/refiner/selective_context_compressor.py +0 -0
  51. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/__init__.py +0 -0
  52. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/__main__.py +0 -0
  53. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/encoder.py +0 -0
  54. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/reranker.py +0 -0
  55. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/retriever/utils.py +0 -0
  56. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/utils/__init__.py +0 -0
  57. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/utils/constants.py +0 -0
  58. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/utils/pred_parse.py +0 -0
  59. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag/utils/utils.py +0 -0
  60. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag_dev.egg-info/dependency_links.txt +0 -0
  61. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag_dev.egg-info/requires.txt +0 -0
  62. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/flashrag_dev.egg-info/top_level.txt +0 -0
  63. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/pyproject.toml +0 -0
  64. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/setup.cfg +0 -0
  65. {flashrag_dev-0.3.0.dev20260821 → flashrag_dev-0.3.0.dev20260919}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flashrag_dev
3
- Version: 0.3.0.dev20260821
3
+ Version: 0.3.0.dev20260919
4
4
  Summary: A library for efficient Retrieval-Augmented Generation research
5
5
  Home-page: https://github.com/RUC-NLPIR/FlashRAG
6
6
  Author: Jiajie Jin, Yutao Zhu, Chenghao Zhang, Xinyu Yang, Zhicheng Dou
@@ -269,6 +269,7 @@ class VLLMGenerator(BaseGenerator):
269
269
  if return_scores:
270
270
  scores = []
271
271
  for output in outputs:
272
+ output_scores = []
272
273
  for single_output in output.outputs:
273
274
  if single_output.logprobs:
274
275
  token_probs = [np.exp(list(score_dict.values())[0].logprob)
@@ -168,7 +168,7 @@ class ExtractiveRefiner(BaseRefiner):
168
168
 
169
169
  # split into sentences: [[sent1, sent2,...], [...]]
170
170
  sent_lists = [
171
- [i.strip() for i in re.split(r"(?<![A-Za-z]\.)(?<=[.!?])\s+", " ".join(res)) if len(i.strip()) > 5]
171
+ [i.strip() for i in re.split(r"(?<=[.!?])\s+(?![a-z])", " ".join(res)) if len(i.strip()) > 5]
172
172
  for res in retrieval_results
173
173
  ]
174
174
  score_lists = [] # matching scores, size == sent_lists
@@ -150,7 +150,6 @@ class Index_Builder:
150
150
  else:
151
151
  assert False, "Invalid bm25 backend!"
152
152
  elif self.retrieval_method == "splade":
153
- from seismic import SeismicIndex
154
153
  self.build_seismic_index()
155
154
  else:
156
155
  self.build_dense_index()
@@ -176,6 +175,7 @@ class Index_Builder:
176
175
  --batched_indexing 10000 # seismic batch
177
176
  --nknn 32
178
177
  """
178
+ from seismic import SeismicIndex
179
179
 
180
180
  if self.pooling_method != 'max':
181
181
  print(
@@ -68,6 +68,8 @@ def cache_manager(func):
68
68
  [t[0] for t in cache_results],
69
69
  [t[1] for t in cache_results],
70
70
  )
71
+ if "batch" not in func.__name__:
72
+ results, scores = results[0], scores[0]
71
73
 
72
74
  else:
73
75
  results, scores = func(self, query=query, num=num, return_score=True)
@@ -0,0 +1 @@
1
+ __version__ = "0.3.0dev20260919"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flashrag_dev
3
- Version: 0.3.0.dev20260821
3
+ Version: 0.3.0.dev20260919
4
4
  Summary: A library for efficient Retrieval-Augmented Generation research
5
5
  Home-page: https://github.com/RUC-NLPIR/FlashRAG
6
6
  Author: Jiajie Jin, Yutao Zhu, Chenghao Zhang, Xinyu Yang, Zhicheng Dou
@@ -58,4 +58,5 @@ flashrag_dev.egg-info/PKG-INFO
58
58
  flashrag_dev.egg-info/SOURCES.txt
59
59
  flashrag_dev.egg-info/dependency_links.txt
60
60
  flashrag_dev.egg-info/requires.txt
61
- flashrag_dev.egg-info/top_level.txt
61
+ flashrag_dev.egg-info/top_level.txt
62
+ tests/test_retriever_cache.py
@@ -0,0 +1,86 @@
1
+ import copy
2
+ import json
3
+ import tempfile
4
+ import unittest
5
+ from pathlib import Path
6
+ from unittest.mock import patch
7
+
8
+ from flashrag.retriever import BaseTextRetriever
9
+
10
+
11
+ class TestRetrieverCache(unittest.TestCase):
12
+ def setUp(self):
13
+ self.directory = tempfile.TemporaryDirectory()
14
+ self.addCleanup(self.directory.cleanup)
15
+ self.cache_path = Path(self.directory.name) / "retrieval_cache.json"
16
+ self.docs = [
17
+ {"id": "1", "contents": "First document", "score": 0.8},
18
+ {"id": "2", "contents": "Second document", "score": 0.5},
19
+ ]
20
+ self.cache_path.write_text(json.dumps({"cached": self.docs, "empty": []}))
21
+
22
+ def retriever(self, save_cache=False):
23
+ return BaseTextRetriever(
24
+ {
25
+ "retrieval_method": "bm25",
26
+ "retrieval_topk": 2,
27
+ "index_path": None,
28
+ "corpus_path": None,
29
+ "save_retrieval_cache": save_cache,
30
+ "use_retrieval_cache": True,
31
+ "retrieval_cache_path": str(self.cache_path),
32
+ "use_reranker": False,
33
+ "save_dir": self.directory.name,
34
+ }
35
+ )
36
+
37
+ def test_single_search_returns_flat_results_and_scores(self):
38
+ for query in ["cached", "missing"]:
39
+ for num in [1, 2]:
40
+ for return_score in [False, True]:
41
+ with self.subTest(query=query, num=num, return_score=return_score):
42
+ retriever = self.retriever()
43
+ docs = copy.deepcopy(self.docs[:num])
44
+ scores = [doc["score"] for doc in docs]
45
+ with patch.object(retriever, "_batch_search", return_value=([docs], [scores])) as search:
46
+ result = retriever.search(query, num=num, return_score=return_score)
47
+ self.assertEqual(result, (docs, scores) if return_score else docs)
48
+ if query == "cached":
49
+ search.assert_not_called()
50
+ else:
51
+ search.assert_called_once_with(query=[query], num=num, return_score=True)
52
+
53
+ def test_single_search_can_save_cache(self):
54
+ for query in ["cached", "missing"]:
55
+ with self.subTest(query=query):
56
+ retriever = self.retriever(save_cache=True)
57
+ docs = copy.deepcopy(self.docs)
58
+ scores = [doc["score"] for doc in docs]
59
+ with patch.object(retriever, "_batch_search", return_value=([docs], [scores])):
60
+ self.assertEqual(retriever.search(query), docs)
61
+ retriever._save_cache()
62
+ saved = json.loads(self.cache_path.read_text())
63
+ self.assertEqual(saved[query], docs)
64
+
65
+ def test_single_search_with_no_cached_results(self):
66
+ for return_score in [False, True]:
67
+ with self.subTest(return_score=return_score):
68
+ with self.assertWarns(UserWarning):
69
+ result = self.retriever().search("empty", return_score=return_score)
70
+ self.assertEqual(result, ([], []) if return_score else [])
71
+
72
+ def test_batch_search_keeps_query_dimension_and_order(self):
73
+ for return_score in [False, True]:
74
+ with self.subTest(return_score=return_score):
75
+ retriever = self.retriever()
76
+ missing_docs = [{"id": "3", "contents": "Another document"}]
77
+ with patch.object(retriever, "_batch_search", return_value=([missing_docs], [[0.7]])) as search:
78
+ result = retriever.batch_search(["missing", "cached"], return_score=return_score)
79
+ expected_docs = [missing_docs, self.docs]
80
+ expected_scores = [[0.7], [0.8, 0.5]]
81
+ self.assertEqual(result, (expected_docs, expected_scores) if return_score else expected_docs)
82
+ search.assert_called_once_with(query=["missing"], num=2, return_score=True)
83
+
84
+
85
+ if __name__ == "__main__":
86
+ unittest.main()
@@ -1 +0,0 @@
1
- __version__ = "0.3.0dev20260821"