File size: 2,546 Bytes
dc97fe1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import os
import sys
import json
from typing import Dict, Any
# Ensure project root is in path
sys.path.append(os.getcwd())
from backend.env import CustomerSupportEnv
from backend.models import Action, TicketStatus
def run_baseline():
print("π [BASELINE] Starting Real-world Support Workflow Demo...")
env = CustomerSupportEnv()
obs = env.reset()
total_reward = 0.0
steps = 0
# Process the queue of 3 tickets
while obs.state.get("status") != TicketStatus.SESSION_COMPLETE:
steps += 1
gt = env.ground_truth
if not gt:
break
ticket_text = obs.state.get("ticket_text", "")
print(f"\nπ« Step {steps}: Processing Ticket: \"{ticket_text[:50]}...\"")
# 1. Classify
action = Action(
action_type="classify_ticket",
payload={"classification": gt["expected_classification"]}
)
obs, reward, done, info = env.step(action)
total_reward += reward.value
print(f" ββ Action: Classify -> {gt['expected_classification']} | Reward: {reward.value:+.2f}")
# 2. Assign Priority
action = Action(
action_type="assign_priority",
payload={"priority": gt["expected_priority"]}
)
obs, reward, done, info = env.step(action)
total_reward += reward.value
print(f" ββ Action: Priority -> {gt['expected_priority']} | Reward: {reward.value:+.2f}")
# 3. Generate Response
empathy = "I am so sorry for the inconvenience, I understand your concern."
action = Action(
action_type="generate_response",
payload={"response": empathy}
)
obs, reward, done, info = env.step(action)
total_reward += reward.value
print(f" ββ Action: Respond -> [Empathetic Draft] | Reward: {reward.value:+.2f}")
# 4. Resolve
action = Action(action_type="resolve", payload={})
obs, reward, done, info = env.step(action)
total_reward += reward.value
print(f" ββ Action: Resolve -> Ticket Closed | Reward: {reward.value:+.2f}")
print("\n" + "="*50)
print(f"β¨ BASELINE COMPLETE")
print(f"π Total Reward Earned: {total_reward:.2f}")
print(f"π Final Status: {obs.state.get('status')}")
print("="*50)
if __name__ == "__main__":
try:
run_baseline()
except Exception as e:
print(f"β Baseline failed: {e}")
sys.exit(1)
|