senatus123 commited on
Commit
72b1c14
·
verified ·
1 Parent(s): a4d342b

Upload doc_searcher_v2.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. doc_searcher_v2.py +22 -6
doc_searcher_v2.py CHANGED
@@ -14,17 +14,30 @@ class DocSearcherV2:
14
  self.sparse_model = SparseTextEmbedding(SPARSE_MODEL)
15
  self.qdrant_client = QdrantClient(QDRANT_URL,api_key=QDRANT_API_KEY,timeout=30)
16
 
17
- async def search_semantic(self, text: str):
 
 
18
 
 
 
 
 
 
19
  queries = [text]
20
  dense_query = self.model.encode(text).tolist()
21
  sparse_query = next(self.sparse_model.query_embed(text))
22
 
 
23
  prefetch = [
24
  models.Prefetch(
25
  query=dense_query,
26
  using="Qwen/Qwen3-Embedding-0.6B",
27
- limit=100
 
 
 
 
 
28
  ),
29
  ]
30
 
@@ -35,7 +48,7 @@ class DocSearcherV2:
35
  fusion=models.Fusion.RRF,
36
  ),
37
  with_payload=True,
38
- limit = 100,
39
  ).points
40
 
41
  # Sačuvaj kompletan hit objekat i tekst za reranking
@@ -52,9 +65,12 @@ class DocSearcherV2:
52
  if not texts_for_reranking:
53
  return []
54
 
55
- # Reranking - vraća top_10 sa (score, query, document) tuple-ovima
56
- # queries * len(...) znači da svaki dokument dobija isti query
57
- reranked_results = self.reranker.compute_logits(queries * len(texts_for_reranking), texts_for_reranking)
 
 
 
58
 
59
  # Kombinuj rezultate: mapiraj rerank skorove sa originalnim hit-ovima
60
  # reranked_results je lista tuple-ova: [(score, query, document_text), ...]
 
14
  self.sparse_model = SparseTextEmbedding(SPARSE_MODEL)
15
  self.qdrant_client = QdrantClient(QDRANT_URL,api_key=QDRANT_API_KEY,timeout=30)
16
 
17
+ async def search_semantic(self, text: str, qdrant_limit: int = 20, top_k: int = 3):
18
+ """
19
+ Semantička pretraga sa reranking-om
20
 
21
+ Args:
22
+ text: Query tekst
23
+ qdrant_limit: Broj chunk-ova iz Qdrant-a (default: 20)
24
+ top_k: Broj najboljih rezultata nakon rerankinga (default: 3)
25
+ """
26
  queries = [text]
27
  dense_query = self.model.encode(text).tolist()
28
  sparse_query = next(self.sparse_model.query_embed(text))
29
 
30
+ # Hybrid search: dense + sparse za bolje rezultate
31
  prefetch = [
32
  models.Prefetch(
33
  query=dense_query,
34
  using="Qwen/Qwen3-Embedding-0.6B",
35
+ limit=qdrant_limit
36
+ ),
37
+ models.Prefetch(
38
+ query=models.SparseVector(**sparse_query.as_object()),
39
+ using=SPARSE_MODEL,
40
+ limit=qdrant_limit
41
  ),
42
  ]
43
 
 
48
  fusion=models.Fusion.RRF,
49
  ),
50
  with_payload=True,
51
+ limit=qdrant_limit,
52
  ).points
53
 
54
  # Sačuvaj kompletan hit objekat i tekst za reranking
 
65
  if not texts_for_reranking:
66
  return []
67
 
68
+ # Reranking - ISPRAVLJENO: jedan query za sve dokumente
69
+ reranked_results = self.reranker.compute_logits(
70
+ queries * len(texts_for_reranking), # Svaki dokument dobija isti query
71
+ texts_for_reranking,
72
+ top_k=top_k # Vrati samo top_k rezultata
73
+ )
74
 
75
  # Kombinuj rezultate: mapiraj rerank skorove sa originalnim hit-ovima
76
  # reranked_results je lista tuple-ova: [(score, query, document_text), ...]