Spaces:
Sleeping
Sleeping
| from typing import Dict, Any, Optional | |
| from langchain_core.messages import HumanMessage, AIMessage, ToolMessage | |
| from ..agents.graph import APP | |
| def run_chat(message: str, | |
| user_location: Optional[Dict[str, float]] = None, | |
| session_id: Optional[str] = None, | |
| photo_url: Optional[str] = None) -> Dict[str, Any]: | |
| from uuid import uuid4 | |
| sid = session_id or str(uuid4()) | |
| init = {"messages": [HumanMessage(content=message)], "user_location": user_location, "photo_url": photo_url} | |
| cfg = {"configurable": {"thread_id": sid}} | |
| final = APP.invoke(init, config=cfg) | |
| reply, tool_used, tool_result = "", None, None | |
| for m in final["messages"]: | |
| if isinstance(m, AIMessage): | |
| reply = m.content or reply | |
| elif isinstance(m, ToolMessage) and getattr(m, "name", None) in {"add_report", "find_reports_near"}: | |
| import json | |
| try: | |
| tool_used = m.name | |
| tool_result = json.loads(m.content) if isinstance(m.content, str) else m.content | |
| except Exception: | |
| tool_result = {"raw": m.content} | |
| return {"reply": reply, "tool_used": tool_used, "tool_result": tool_result, "session_id": sid} | |