Spaces:
Running
Running
| """Agent 3 — Recommendation Agent""" | |
| def compute_score(p: dict, max_dist: float) -> float: | |
| proximity = 1 - (p["distance_km"] / max_dist) if max_dist > 0 else 1.0 | |
| rating = (p.get("rating", 3) - 1) / 4 | |
| availability = 1.0 if p.get("available") else 0.0 | |
| return round(0.40 * proximity + 0.40 * rating + 0.20 * availability, 4) | |
| def run(discovery: dict) -> dict: | |
| providers = discovery.get("providers", []) | |
| if not providers: | |
| return {"best_provider": None, "all_ranked": [], "reasoning": "No providers found."} | |
| max_dist = max(p["distance_km"] for p in providers) or 1 | |
| scored = [{**p, "score": compute_score(p, max_dist)} for p in providers] | |
| scored.sort(key=lambda x: x["score"], reverse=True) | |
| best = scored[0] | |
| reasoning = ( | |
| f"**{best['name']}** selected — " | |
| f"{best['distance_km']} km away, " | |
| f"⭐ {best['rating']} rating, " | |
| f"{'available' if best['available'] else 'unavailable'}. " | |
| f"Composite score: **{best['score']}**" | |
| ) | |
| return {"best_provider": best, "all_ranked": scored, "reasoning": reasoning} | |