This commit is contained in:
2026-04-05 00:43:23 +05:30
commit 8be37d3e92
425 changed files with 101853 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# Mock mode permanently disabled — all calls go to real Gemini
MOCK_MODE = False

View File

@@ -0,0 +1,171 @@
"""
3 complete negotiation scenarios with pre-built rounds.
Each round has: proposal, satisfaction scores, concessions, reasoning.
The negotiation engine iterates through these instead of calling Gemini.
"""
MOCK_SCENARIOS = {
# ─────────────────────────────────────────────────────
# SCENARIO 1: Expense Splitting (Goa Trip)
# ─────────────────────────────────────────────────────
"expenses": {
"feature_type": "expenses",
"rounds": [
{
"round_number": 1, "proposer": "A", "action": "propose",
"proposal": {
"summary": "Hotel 50-50, Fuel 60-40 (I drove), Dinner 50-50. B owes A ₹8,200",
"details": {
"hotel": {"amount": 12000, "split": "50-50"},
"fuel": {"amount": 3000, "split": "60-40"},
"dinner": {"amount": 2000, "split": "50-50"},
"settlement": {"from": "B", "to": "A", "amount": 8200,
"payee_upi": "rahul@paytm", "payee_name": "Rahul"}
},
"for_party_a": "Fuel 60-40 reflects driving effort",
"for_party_b": "Hotel and dinner are fair 50-50"
},
"satisfaction_score": 90,
"reasoning": "Opening with ideal: 60-40 fuel since I drove the entire way.",
"concessions_made": [],
"concessions_requested": ["Accept 60-40 fuel split"]
},
{
"round_number": 2, "proposer": "B", "action": "counter",
"proposal": {
"summary": "Hotel 50-50, Fuel 50-50 (I navigated + planned route), Dinner 50-50",
"details": {
"hotel": {"amount": 12000, "split": "50-50"},
"fuel": {"amount": 3000, "split": "50-50"},
"dinner": {"amount": 2000, "split": "50-50"},
"settlement": {"from": "B", "to": "A", "amount": 7500,
"payee_upi": "rahul@paytm", "payee_name": "Rahul"}
},
"for_party_a": "Equal base split on everything",
"for_party_b": "Navigation + route planning justifies equal fuel"
},
"satisfaction_score": 55,
"reasoning": "Countering with 50-50 fuel. Navigation effort was significant.",
"concessions_made": ["Accepted hotel and dinner at 50-50"],
"concessions_requested": ["Equal fuel split"]
},
{
"round_number": 3, "proposer": "A", "action": "accept",
"proposal": {
"summary": "AGREED: Hotel 50-50, Fuel 55-45 (compromise), Dinner 50-50. B owes ₹8,050",
"details": {
"hotel": {"amount": 12000, "split": "50-50"},
"fuel": {"amount": 3000, "split": "55-45"},
"dinner": {"amount": 2000, "split": "50-50"},
"settlement": {"from": "B", "to": "A", "amount": 8050,
"payee_upi": "rahul@paytm", "payee_name": "Rahul"}
},
"for_party_a": "55-45 acknowledges driving. Fair middle ground.",
"for_party_b": "Only ₹150 more than 50-50. Navigation valued."
},
"satisfaction_score": 76,
"reasoning": "55-45 is fair. Both efforts acknowledged. Accepting.",
"concessions_made": ["Fuel 60-40 → 55-45"],
"concessions_requested": []
}
]
},
# ─────────────────────────────────────────────────────
# SCENARIO 2: Restaurant Decision
# ─────────────────────────────────────────────────────
"collaborative": {
"feature_type": "collaborative",
"rounds": [
{
"round_number": 1, "proposer": "A", "action": "propose",
"proposal": {
"summary": "Thai food at Jaan, Bandra — ₹1,200 for two, great veg options",
"details": {
"restaurant": "Jaan Thai Restaurant",
"cuisine": "Thai", "location": "Hill Road, Bandra West",
"price_for_two": 1200, "rating": 4.3, "veg_friendly": True
},
"for_party_a": "Spicy Thai options, Bandra location, casual vibe",
"for_party_b": "Vegetarian-friendly menu, within ₹1,200 budget"
},
"satisfaction_score": 85,
"reasoning": "Thai is the overlap. Jaan has spice + veg options.",
"concessions_made": ["Chose Thai over spicy Indian"],
"concessions_requested": []
},
{
"round_number": 2, "proposer": "B", "action": "accept",
"proposal": {
"summary": "AGREED: Jaan Thai Restaurant, Hill Road Bandra, tonight 8 PM",
"details": {
"restaurant": "Jaan Thai Restaurant",
"cuisine": "Thai", "location": "Hill Road, Bandra West",
"price_for_two": 1200, "time": "8:00 PM"
},
"for_party_a": "Thai in Bandra — perfect match",
"for_party_b": "Budget-friendly, vegetarian menu, 4.3 rating"
},
"satisfaction_score": 88,
"reasoning": "Perfect overlap. Both sides happy. Accepting.",
"concessions_made": [], "concessions_requested": []
}
]
},
# ─────────────────────────────────────────────────────
# SCENARIO 3: Marketplace (PS5 Buy/Sell)
# ─────────────────────────────────────────────────────
"marketplace": {
"feature_type": "marketplace",
"rounds": [
{
"round_number": 1, "proposer": "A", "action": "propose",
"proposal": {
"summary": "PS5 + 2 controllers + 3 games for ₹35,000. Pickup Andheri.",
"details": {"item": "PS5 bundle", "price": 35000, "method": "pickup"},
"for_party_a": "Full asking price", "for_party_b": "Premium bundle"
},
"satisfaction_score": 95, "reasoning": "Starting at asking price.",
"concessions_made": [], "concessions_requested": ["Full price"]
},
{
"round_number": 2, "proposer": "B", "action": "counter",
"proposal": {
"summary": "PS5 bundle for ₹27,000. I'll pick up.",
"details": {"item": "PS5 bundle", "price": 27000, "method": "pickup"},
"for_party_a": "Quick sale", "for_party_b": "Under budget"
},
"satisfaction_score": 60, "reasoning": "Anchoring low.",
"concessions_made": ["Pickup offered"], "concessions_requested": ["Lower price"]
},
{
"round_number": 3, "proposer": "A", "action": "counter",
"proposal": {
"summary": "PS5 bundle + original box for ₹31,000.",
"details": {"item": "PS5 bundle + box", "price": 31000, "method": "pickup"},
"for_party_a": "Above minimum", "for_party_b": "Box adds resale value"
},
"satisfaction_score": 72, "reasoning": "Dropped ₹4K, sweetened deal with box.",
"concessions_made": ["₹35K→₹31K", "Added original box"], "concessions_requested": []
},
{
"round_number": 4, "proposer": "B", "action": "accept",
"proposal": {
"summary": "AGREED: PS5 + 2 controllers + 3 games + box for ₹29,500. Pickup Andheri.",
"details": {
"item": "PS5 + 2 controllers + 3 games + original box",
"price": 29500, "method": "pickup from Andheri",
"settlement": {"payee_upi": "seller@upi", "payee_name": "Seller", "amount": 29500}
},
"for_party_a": "Above ₹30K minimum", "for_party_b": "Full bundle under ₹30K"
},
"satisfaction_score": 78, "reasoning": "Fair split. Bundle worth it.",
"concessions_made": ["₹27K→₹29.5K"], "concessions_requested": []
}
]
}
}
def get_mock_scenario(feature_type: str) -> dict:
return MOCK_SCENARIOS.get(feature_type, MOCK_SCENARIOS["expenses"])