Shopify_AI / app /workflows /langgraph_workflow.py
Prerna43's picture
shopify_ai
80ef840
Raw
History Blame Contribute Delete
2.69 kB
from app.agents.intent_agent import IntentAgent
from app.agents.order_agent import OrderAgent
from app.agents.policy_agent import PolicyAgent
from app.agents.reasoning_agent import ReasoningAgent
from app.agents.supervisor_agent import SupervisorAgent
from app.agents.validation_agent import ValidationAgent
from app.services.escalation_service import EscalationService
from app.services.ticket_service import TicketService
class CustomerSupportWorkflow:
def __init__(self):
self.supervisor = SupervisorAgent()
self.intent_agent = IntentAgent()
self.order_agent = OrderAgent()
self.policy_agent = PolicyAgent()
self.reasoning_agent = ReasoningAgent()
self.validation_agent = ValidationAgent()
self.escalation_service = EscalationService()
self.ticket_service = TicketService()
def run(self, customer_id: str, message: str, order_id: str | None = None) -> dict:
supervisor = self.supervisor.plan(message, order_id)
intent = self.intent_agent.classify(message)
order = self.order_agent.fetch(message, order_id) if supervisor["run_order_agent"] else None
policies = self.policy_agent.retrieve(message, intent["intent"]) if supervisor["run_policy_agent"] else []
reasoning = self.reasoning_agent.respond(message, intent, order, policies)
validation = self.validation_agent.validate(reasoning["response"], policies)
escalated, escalation_reason = self.escalation_service.should_escalate(
reasoning["confidence"], validation, order
)
ticket_id = self.ticket_service.save(
{
"customer_id": customer_id,
"message": message,
"order_id": order_id,
"response": reasoning["response"],
"escalated": escalated,
"trace": {
"supervisor": supervisor,
"intent": intent,
"order": order,
"policies": policies,
"reasoning": reasoning,
"validation": validation,
},
}
)
return {
"ticket_id": ticket_id,
"response": reasoning["response"],
"confidence": reasoning["confidence"],
"escalated": escalated,
"escalation_reason": escalation_reason,
"trace": {
"supervisor": supervisor,
"intent": intent,
"order": order,
"policies": policies,
"reasoning": reasoning,
"validation": validation,
},
}