optimized prompt
Browse files
app.py
CHANGED
|
@@ -653,18 +653,32 @@ def run_query(requirements: str):
|
|
| 653 |
else:
|
| 654 |
scored, _ = _score_items(filtered, keyword, debug=False)
|
| 655 |
if scored:
|
| 656 |
-
|
| 657 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 658 |
# If MCP returned items but filtering removed all (e.g., many items missing prize), show unfiltered
|
| 659 |
if not filtered and items:
|
| 660 |
filtered = items
|
| 661 |
status = f"{status} (no matches; showing unfiltered)"
|
| 662 |
-
plan_text, _ = _generate_plan_fixed(
|
| 663 |
|
| 664 |
# Build a map from id to (score, reason) for star display
|
| 665 |
id_to_score_reason: dict[str, tuple[float, str]] = {}
|
| 666 |
-
if ok:
|
| 667 |
-
for c, s, r in
|
| 668 |
id_to_score_reason[c.id] = (s, r)
|
| 669 |
|
| 670 |
rows = []
|
|
|
|
| 653 |
else:
|
| 654 |
scored, _ = _score_items(filtered, keyword, debug=False)
|
| 655 |
if scored:
|
| 656 |
+
# Blend LLM relevance with normalized prize to unify ranking
|
| 657 |
+
# prize_norm in [0,1] across the current candidate set
|
| 658 |
+
prizes = [c.prize for c, _, _ in scored]
|
| 659 |
+
pmin = min(prizes) if prizes else 0.0
|
| 660 |
+
pmax = max(prizes) if prizes else 0.0
|
| 661 |
+
denom = (pmax - pmin) if (pmax - pmin) > 0 else 1.0
|
| 662 |
+
def prize_norm(v: float) -> float:
|
| 663 |
+
return max(0.0, min(1.0, (v - pmin) / denom))
|
| 664 |
+
|
| 665 |
+
alpha = 0.75 # relevance weight; 25% weight to prize
|
| 666 |
+
ranked = []
|
| 667 |
+
for c, s, r in scored:
|
| 668 |
+
cs = alpha * float(s) + (1 - alpha) * prize_norm(c.prize)
|
| 669 |
+
ranked.append((c, cs, r))
|
| 670 |
+
ranked.sort(key=lambda t: t[1], reverse=True)
|
| 671 |
+
filtered = [c for c, _, _ in ranked]
|
| 672 |
# If MCP returned items but filtering removed all (e.g., many items missing prize), show unfiltered
|
| 673 |
if not filtered and items:
|
| 674 |
filtered = items
|
| 675 |
status = f"{status} (no matches; showing unfiltered)"
|
| 676 |
+
plan_text, _ = _generate_plan_fixed(ranked, keyword, days_ahead, debug=False) if ok and 'ranked' in locals() and ranked else ("", "")
|
| 677 |
|
| 678 |
# Build a map from id to (score, reason) for star display
|
| 679 |
id_to_score_reason: dict[str, tuple[float, str]] = {}
|
| 680 |
+
if ok and 'ranked' in locals():
|
| 681 |
+
for c, s, r in ranked:
|
| 682 |
id_to_score_reason[c.id] = (s, r)
|
| 683 |
|
| 684 |
rows = []
|