vadirajkrishna's picture
initial commit - InterviewCopilotLocal
4e8fb20 unverified
Raw
History Blame Contribute Delete
2.51 kB
from langgraph.graph import END, StateGraph
from agents.topic_pattern import TopicPatternAgent
from db.queries import add_exchange, add_transcript
from nodes.audio import audio_node
from nodes.framework import framework_node
from nodes.transcript import transcript_node
from state import CoachState
topic_pattern_agent = TopicPatternAgent()
async def topic_pattern_node(state: CoachState) -> CoachState:
if state.get("framework") and state.get("steps"):
return state
question = state.get("question", "")
result = await topic_pattern_agent.analyze(question)
if not result:
return state
state["framework"] = result["type"]
state["pattern"] = result.get("pattern", result["type"])
state["steps"] = result["steps"]
state["confidence"] = max(float(state.get("confidence", 0.0)), float(result["confidence"]))
state["topic_model_used"] = result.get("model", "")
state["needs_review"] = state.get("needs_review", False) and result["confidence"] < 0.6
return state
async def persistence_node(state: CoachState) -> CoachState:
session_id = state.get("session_id")
if not session_id:
return state
await add_transcript(
session_id=session_id,
raw_text=state.get("raw_text", ""),
labelled=state.get("labelled_json", {}),
)
if state.get("question"):
exchange_id = await add_exchange(
session_id=session_id,
question=state["question"],
answer=state.get("answer", ""),
framework_used=state.get("framework", "General"),
)
state["exchange_id"] = exchange_id
return state
def should_classify(state: CoachState) -> str:
return "topic_pattern" if state.get("question") else "persist"
def build_graph():
builder = StateGraph(CoachState)
builder.add_node("audio", audio_node)
builder.add_node("transcript", transcript_node)
builder.add_node("topic_pattern", topic_pattern_node)
builder.add_node("framework", framework_node)
builder.add_node("persist", persistence_node)
builder.set_entry_point("audio")
builder.add_edge("audio", "transcript")
builder.add_conditional_edges(
"transcript",
should_classify,
{"topic_pattern": "topic_pattern", "persist": "persist"},
)
builder.add_edge("topic_pattern", "framework")
builder.add_edge("framework", "persist")
builder.add_edge("persist", END)
return builder.compile()
coach_graph = build_graph()