from typing import TypedDict
from langgraph.graph import StateGraph, END
# -----------------------------
# State Definition
# -----------------------------
class AgentState(TypedDict):
query: str
intent: str
response: str
# -----------------------------
# Intent Classifier
# -----------------------------
def intent_classifier(state: AgentState):
query = state["query"].lower()
if "admission" in query:
state["intent"] = "admission"
elif "exam" in query:
state["intent"] = "exam"
elif "fee" in query or "fees" in query:
state["intent"] = "fees"
elif "scholarship" in query:
state["intent"] = "scholarship"
else:
state["intent"] = "unknown"
return state
# -----------------------------
# Admission Agent
# -----------------------------
def admission_agent(state: AgentState):
state["response"] = (
"Admission Agent:\n"
"Admission is open. Submit your application, documents, and entrance exam score."
)
return state
# -----------------------------
# Exam Agent
# -----------------------------
def exam_agent(state: AgentState):
state["response"] = (
"Exam Agent:\n"
"The semester exam starts on 15 December."
)
return state
# -----------------------------
# Fees Agent
# -----------------------------
def fees_agent(state: AgentState):
state["response"] = (
"Fees Agent:\n"
"The semester fee is ₹50,000."
)
return state
# -----------------------------
# Scholarship Agent
# -----------------------------
def scholarship_agent(state: AgentState):
state["response"] = (
"Scholarship Agent:\n"
"Students with more than 85% marks are eligible for scholarships."
)
return state
# -----------------------------
# Response Agent
# -----------------------------
def response_agent(state: AgentState):
print("\nFinal Response:")
print(state["response"])
return state
# -----------------------------
# Routing Function
# -----------------------------
def router(state: AgentState):
return state["intent"]
# -----------------------------
# Build LangGraph
# -----------------------------
workflow = StateGraph(AgentState)
workflow.add_node("Intent Classifier", intent_classifier)
workflow.add_node("Admission Agent", admission_agent)
workflow.add_node("Exam Agent", exam_agent)
workflow.add_node("Fees Agent", fees_agent)
workflow.add_node("Scholarship Agent", scholarship_agent)
workflow.add_node("Response Agent", response_agent)
workflow.set_entry_point("Intent Classifier")
workflow.add_conditional_edges(
"Intent Classifier",
router,
{
"admission": "Admission Agent",
"exam": "Exam Agent",
"fees": "Fees Agent",
"scholarship": "Scholarship Agent",
},
)
workflow.add_edge("Admission Agent", "Response Agent")
workflow.add_edge("Exam Agent", "Response Agent")
workflow.add_edge("Fees Agent", "Response Agent")
workflow.add_edge("Scholarship Agent", "Response Agent")
workflow.add_edge("Response Agent", END)
graph = workflow.compile()
# -----------------------------
# Run Example
# -----------------------------
query = input("Enter your query: ")
graph.invoke(
{
"query": query,
"intent": "",
"response": ""
}
)