mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 12:41:48 +00:00
63 lines
2.5 KiB
Python
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)
|