teacher-student-agent / graph /classroom_graph.py
Abdullahsaghir988's picture
files uploaded
73fbc5b verified
# graph/classroom_graph.py
import operator
from typing import TypedDict, List, Annotated
from langgraph.graph import StateGraph, END
from agents.student import StudentAgent
from agents.teacher import TeacherAgent
from rag.retriever import RAGRetriever
# STATE STRUCTURE
class ClassroomState(TypedDict):
topic: str
last_teacher_reply: str
last_student_question: str
conversation: Annotated[List[tuple], operator.add]
# STUDENT NODE
def student_node(state: ClassroomState, student: StudentAgent):
topic = state["topic"]
last_reply = state["last_teacher_reply"]
question = student.ask(topic, last_reply)
return {
"last_student_question": question,
"conversation": [("Student", question)]
}
# TEACHER NODE
def teacher_node(state: ClassroomState, teacher: TeacherAgent, rag: RAGRetriever):
topic = state["topic"]
question = state["last_student_question"]
context = rag.retrieve(question)
reply = teacher.answer(topic, question, context)
return {
"last_teacher_reply": reply,
"conversation": [("Teacher", reply)]
}
# BUILD GRAPH
def build_classroom_graph(student, teacher, rag):
graph = StateGraph(ClassroomState)
graph.add_node("student_turn", lambda s: student_node(s, student))
graph.add_node("teacher_turn", lambda s: teacher_node(s, teacher, rag))
graph.set_entry_point("student_turn")
graph.add_edge("student_turn", "teacher_turn")
graph.add_edge("teacher_turn", END)
return graph.compile()