Spaces:
Sleeping
Sleeping
| # app/modules/processing/context_refiner.py | |
| from config import REFINE_THRESHOLD as Threshold | |
| from logs.logger import get_logger | |
| from models.reranker_model import rerank_results | |
| from modules.processing.fallback_handler import (handle_query_fallback, | |
| handle_snippet_fallback) | |
| logger = get_logger(__name__) | |
| def refine_results(search_results, input_message): | |
| refined_all = [] | |
| for entry in search_results: | |
| q = entry["query"] | |
| if not entry["results"]: # query 단위 fallback | |
| fallback_entry = handle_query_fallback(q, input_message) | |
| entry["results"] = fallback_entry["results"] | |
| # rerank + refine | |
| reranked = rerank_results(entry["results"], q) | |
| refined_entry = {"query": q, "results": []} | |
| for r in reranked: | |
| score = r.get("score", 0) | |
| snippet = r.get("snippet", "") if score >= Threshold else "" | |
| refined_entry["results"].append({ | |
| "title": r.get("title", ""), | |
| "url": r.get("url", ""), | |
| "snippet": snippet, | |
| "score": score | |
| }) | |
| # fallback: if all snippets empty → refine top1 | |
| if all(not r["snippet"] for r in refined_entry["results"]): | |
| top1 = reranked[0] if reranked else None | |
| if top1: | |
| snippet = handle_snippet_fallback(top1, input_message) | |
| refined_entry["results"][0]["snippet"] = snippet | |
| refined_all.append(refined_entry) | |
| return refined_all | |