Upload backend/hue_portal/core/hybrid_search.py with huggingface_hub
Browse files
backend/hue_portal/core/hybrid_search.py
CHANGED
|
@@ -109,23 +109,48 @@ def get_bm25_scores(
|
|
| 109 |
return []
|
| 110 |
|
| 111 |
try:
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
ranked_qs = (
|
| 120 |
queryset
|
| 121 |
-
.annotate(rank=SearchRank(F("tsv_body"),
|
| 122 |
.filter(rank__gt=DEFAULT_MIN_BM25_SCORE)
|
| 123 |
.order_by("-rank")
|
| 124 |
)
|
| 125 |
-
results = list(ranked_qs[:top_k * 2])
|
| 126 |
return [(obj, float(getattr(obj, "rank", 0.0))) for obj in results]
|
|
|
|
|
|
|
| 127 |
except Exception as e:
|
| 128 |
-
print(f"Error in BM25 search: {e}")
|
| 129 |
|
| 130 |
return []
|
| 131 |
|
|
|
|
| 109 |
return []
|
| 110 |
|
| 111 |
try:
|
| 112 |
+
import sys
|
| 113 |
+
# Increase recursion limit for query expansion
|
| 114 |
+
old_limit = sys.getrecursionlimit()
|
| 115 |
+
try:
|
| 116 |
+
sys.setrecursionlimit(3000) # Increase limit for query expansion
|
| 117 |
+
expanded_queries = expand_query_with_synonyms(query)
|
| 118 |
+
# Limit expanded queries to prevent too many variants
|
| 119 |
+
expanded_queries = expanded_queries[:5] # Max 5 variants
|
| 120 |
+
|
| 121 |
+
combined_query = None
|
| 122 |
+
for q_variant in expanded_queries:
|
| 123 |
+
variant_query = SearchQuery(q_variant, config="simple")
|
| 124 |
+
combined_query = variant_query if combined_query is None else combined_query | variant_query
|
| 125 |
|
| 126 |
+
if combined_query is not None:
|
| 127 |
+
ranked_qs = (
|
| 128 |
+
queryset
|
| 129 |
+
.annotate(rank=SearchRank(F("tsv_body"), combined_query))
|
| 130 |
+
.filter(rank__gt=DEFAULT_MIN_BM25_SCORE)
|
| 131 |
+
.order_by("-rank")
|
| 132 |
+
)
|
| 133 |
+
results = list(ranked_qs[:top_k * 2]) # Get more for hybrid ranking
|
| 134 |
+
return [(obj, float(getattr(obj, "rank", 0.0))) for obj in results]
|
| 135 |
+
finally:
|
| 136 |
+
sys.setrecursionlimit(old_limit) # Restore original limit
|
| 137 |
+
except RecursionError as e:
|
| 138 |
+
print(f"Error in BM25 search (recursion): {e}", flush=True)
|
| 139 |
+
# Fallback: use original query without expansion
|
| 140 |
+
try:
|
| 141 |
+
variant_query = SearchQuery(query, config="simple")
|
| 142 |
ranked_qs = (
|
| 143 |
queryset
|
| 144 |
+
.annotate(rank=SearchRank(F("tsv_body"), variant_query))
|
| 145 |
.filter(rank__gt=DEFAULT_MIN_BM25_SCORE)
|
| 146 |
.order_by("-rank")
|
| 147 |
)
|
| 148 |
+
results = list(ranked_qs[:top_k * 2])
|
| 149 |
return [(obj, float(getattr(obj, "rank", 0.0))) for obj in results]
|
| 150 |
+
except Exception as fallback_e:
|
| 151 |
+
print(f"Error in BM25 search fallback: {fallback_e}", flush=True)
|
| 152 |
except Exception as e:
|
| 153 |
+
print(f"Error in BM25 search: {e}", flush=True)
|
| 154 |
|
| 155 |
return []
|
| 156 |
|