# pip install langgraph
from typing import TypedDict
from langgraph.graph import StateGraph,START,END
# -------------------------
# State Definition
# -------------------------
class AgentState(TypedDict):
query: str
intent: str
response: str
# -------------------------
# Intent Classifier
# -------------------------
def intent_classifier(state):
query = state["query"].lower()
if "admission" in query:
state["intent"] = "admission"
elif "exam" in query:
state["intent"] = "exam"
elif "fee" in query:
state["intent"] = "fees"
elif "scholarship" in query:
state["intent"] = "scholarship"
else:
state["intent"] = "unknown"
return state
# -------------------------
# Specialized Agents
# -------------------------
def admission_agent(state):
state["response"] = "Admission starts from 1st July."
return state
def exam_agent(state):
state["response"] = "Exams begin from 10th December."
return state
def fees_agent(state):
state["response"] = "Semester fee is Rs. 50,000."
return state
def scholarship_agent(state):
state["response"] = "Scholarship available for students scoring above 85%."
return state
# -------------------------
# Response Agent
# -------------------------
def response_agent(state):
print("\n========== RESPONSE ==========")
print(state["response"])
return state
# -------------------------
# Build LangGraph
# -------------------------
graph = StateGraph(AgentState)
graph.add_node("IntentClassifier", intent_classifier)
graph.add_node("AdmissionAgent", admission_agent)
graph.add_node("ExamAgent", exam_agent)
graph.add_node("FeesAgent", fees_agent)
graph.add_node("ScholarshipAgent", scholarship_agent)
graph.add_node("ResponseAgent", response_agent)
graph.set_entry_point("IntentClassifier")
# Routing Logic
def router(state):
return state["intent"]
graph.add_conditional_edges(
"IntentClassifier",
router,
{
"admission": "AdmissionAgent",
"exam": "ExamAgent",
"fees": "FeesAgent",
"scholarship": "ScholarshipAgent",
},
)
graph.add_edge("AdmissionAgent", "ResponseAgent")
graph.add_edge("ExamAgent", "ResponseAgent")
graph.add_edge("FeesAgent", "ResponseAgent")
graph.add_edge("ScholarshipAgent", "ResponseAgent")
graph.add_edge("ResponseAgent", END)
app = graph.compile()
# -------------------------
# Run Example
# -------------------------
query = input("Enter your query: ")
app.invoke({
"query": query,
"intent": "",
"response": ""
})