Files
2026-04-05 00:43:23 +05:30

63 lines
2.5 KiB
Python

from features.base_feature import BaseFeature
class GenericFeature(BaseFeature):
"""Fallback feature for any coordination type not matched by the 8 specific features."""
async def get_context(self, preferences_a: dict, preferences_b: dict, user_a_id: int = None, user_b_id: int = None) -> str:
goal_a = preferences_a.get("goal", "")
goal_b = preferences_b.get("goal", "")
lines = [
"GENERIC COORDINATION RULES:",
"• Find the solution that satisfies both parties' stated goals and hard constraints.",
"• Be creative — there may be a win-win that isn't obvious from the positions stated.",
"• Concede on nice-to-haves first, protect hard constraints at all costs.",
"• If completely stuck, propose 2-3 concrete options for humans to choose from.",
]
if goal_a:
lines.append(f"\nPerson A's goal: {goal_a}")
if goal_b:
lines.append(f"Person B's goal: {goal_b}")
return "\n".join(lines)
def format_resolution(
self, resolution: dict, preferences_a: dict, preferences_b: dict
) -> str:
status = resolution.get("status", "resolved")
final = resolution.get("final_proposal", {})
details = final.get("details", {})
rounds = resolution.get("rounds_taken", "?")
summary = resolution.get("summary", "Agreement reached")
if status == "escalated":
return (
f"⚠️ *Coordination — Human Decision Needed*\n\n"
f"_{summary}_\n\n"
f"Agents explored options but couldn't decide in {rounds} round(s)."
)
for_a = final.get("for_party_a") or details.get("for_a") or ""
for_b = final.get("for_party_b") or details.get("for_b") or ""
lines = ["✅ *Agreement Reached!*\n"]
lines.append(f"_{summary}_")
if for_a:
lines.append(f"\n👤 *For you:* {for_a}")
if for_b:
lines.append(f"👤 *For them:* {for_b}")
# Show key details generically
filtered = {
k: v for k, v in details.items()
if k not in ("for_a", "for_b") and v
}
if filtered:
lines.append("\n📋 *Details:*")
for k, v in list(filtered.items())[:6]:
lines.append(f"{k.replace('_', ' ').title()}: {v}")
lines.append(f"\n⏱ Agreed in {rounds} round(s)")
return "\n".join(lines)