Spaces:
Sleeping
Sleeping
| from langgraph.graph import StateGraph, END | |
| from state import AgentState | |
| from agents.routing_agent import RouterAgent | |
| from agents.image_agent import ImageAgent | |
| from agents.memory import Memory | |
| from agents.planner import PlannerAgent | |
| # ------------------------------- | |
| # Dummy LLM | |
| # ------------------------------- | |
| class DummyLLM: | |
| def invoke(self, prompt): | |
| class Response: | |
| content = "generate" | |
| return Response() | |
| llm = DummyLLM() | |
| memory = Memory() | |
| router = RouterAgent(llm) | |
| planner = PlannerAgent() | |
| agent = ImageAgent(router, memory, planner) | |
| # ------------------------------- | |
| # ROUTE | |
| # ------------------------------- | |
| def route_node(state): | |
| task = router.route(state["user_input"]) | |
| state["task"] = task | |
| return state | |
| # ------------------------------- | |
| # PLAN | |
| # ------------------------------- | |
| def plan_node(state): | |
| state["steps"] = planner.plan(state["task"]) | |
| return state | |
| # ------------------------------- | |
| # LOAD UPLOADED IMAGE | |
| # ------------------------------- | |
| def upload_node(state): | |
| uploaded = state.get("uploaded_files", []) | |
| if uploaded: | |
| # Store uploaded image in memory | |
| memory.uploaded_files = uploaded | |
| memory.last_used_image = uploaded[0] | |
| return state | |
| # ------------------------------- | |
| # AUTO ANALYZE | |
| # ------------------------------- | |
| def analyze_node(state): | |
| image = memory.last_used_image | |
| if image: | |
| analysis = agent.auto_analyze(image) | |
| state["analysis"] = analysis | |
| return state | |
| # ------------------------------- | |
| # EXECUTE | |
| # ------------------------------- | |
| def execute_node(state): | |
| result = agent.run(state["user_input"]) | |
| state["result"] = result | |
| return state | |
| # ------------------------------- | |
| # GRAPH | |
| # ------------------------------- | |
| workflow = StateGraph(AgentState) | |
| workflow.add_node("upload", upload_node) | |
| workflow.add_node("route", route_node) | |
| workflow.add_node("plan", plan_node) | |
| workflow.add_node("analyze", analyze_node) | |
| workflow.add_node("execute", execute_node) | |
| workflow.set_entry_point("upload") | |
| workflow.add_edge("upload", "route") | |
| workflow.add_edge("route", "plan") | |
| workflow.add_edge("plan", "analyze") | |
| workflow.add_edge("analyze", "execute") | |
| workflow.add_edge("execute", END) | |
| app = workflow.compile() | |
| # ------------------------------- | |
| # MAIN | |
| # ------------------------------- | |
| def run_graph(user_input, uploaded_files=None): | |
| state = { | |
| "user_input": user_input, | |
| "task": "", | |
| "steps": [], | |
| "uploaded_files": uploaded_files or [], | |
| "analysis": None, | |
| "result": None, | |
| "history": [] | |
| } | |
| return app.invoke(state) |