File size: 1,564 Bytes
69c12a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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