| """ |
| LangGraph state schema for the multi-agent workflow. |
| """ |
| from typing import Any, Dict, List, Optional, TypedDict |
| from utils.schemas import Paper, PaperChunk, Analysis, SynthesisResult, ValidatedOutput |
|
|
|
|
| class AgentState(TypedDict, total=False): |
| """ |
| State dictionary that flows through the LangGraph workflow. |
| |
| This TypedDict provides type hints for LangGraph's state management |
| while maintaining compatibility with the existing dictionary-based state. |
| """ |
| |
| query: str |
| category: Optional[str] |
| num_papers: int |
|
|
| |
| papers: List[Paper] |
| chunks: List[PaperChunk] |
|
|
| |
| analyses: List[Analysis] |
| filtered_analyses: List[Analysis] |
|
|
| |
| synthesis: Optional[SynthesisResult] |
|
|
| |
| validated_output: Optional[ValidatedOutput] |
|
|
| |
| errors: List[str] |
| token_usage: Dict[str, int] |
| start_time: float |
| model_desc: Dict[str, str] |
|
|
| |
| trace_id: Optional[str] |
| session_id: Optional[str] |
| user_id: Optional[str] |
|
|
|
|
| def create_initial_state( |
| query: str, |
| category: Optional[str], |
| num_papers: int, |
| model_desc: Dict[str, str], |
| start_time: float, |
| session_id: Optional[str] = None, |
| user_id: Optional[str] = None, |
| ) -> AgentState: |
| """ |
| Create initial state for LangGraph workflow. |
| |
| Args: |
| query: User's research question |
| category: arXiv category filter |
| num_papers: Number of papers to analyze |
| model_desc: Model metadata (llm_model, embedding_model) |
| start_time: Unix timestamp |
| session_id: Optional session identifier |
| user_id: Optional user identifier |
| |
| Returns: |
| Initial AgentState dictionary |
| """ |
| return { |
| "query": query, |
| "category": category, |
| "num_papers": num_papers, |
| "papers": [], |
| "chunks": [], |
| "analyses": [], |
| "filtered_analyses": [], |
| "synthesis": None, |
| "validated_output": None, |
| "errors": [], |
| "token_usage": { |
| "input_tokens": 0, |
| "output_tokens": 0, |
| "embedding_tokens": 0, |
| }, |
| "start_time": start_time, |
| "model_desc": model_desc, |
| "trace_id": None, |
| "session_id": session_id, |
| "user_id": user_id, |
| } |
|
|