Tool-calling ReAct agent: FastAPI and LangGraph backend with a Next.js chat UI that streams the agent thoughts, tool calls, tool results and answer tokens over WebSocket. Six tools and SQLite-backed conversation memory.
Chat assistants that call tools are opaque: users cannot see why a tool was chosen, and conversation state is lost between sessions. I wanted an agent whose reasoning and tool use are visible in real time, whose memory persists, and that handles user API keys and sessions safely.
Built a LangGraph ReAct agent (StateGraph with agent and tool nodes) behind a FastAPI service. Six tools: calculator (safe AST-based math, no eval), weather and forecast via Open-Meteo, date/time utilities, OpenAI web search, OpenAI code interpreter, and RAG search over uploaded documents in Chroma. The agent streams typed events (thought, tool_call, tool_result, token, done) over WebSocket to a Next.js UI with a Thinking panel, model selector and session list. Conversation state is persisted with a SQLite checkpointer. Security: the user API key is forwarded per request and never stored server-side, sessions are isolated per user using a SHA-256 hash of the key, and inputs are validated with Pydantic. Personal open-source project, not a client engagement.
Working agent with a documented REST and WebSocket API and a test suite of 32 tests covering the calculator (10), date/time (7), API (7), agent routing and compilation (5) and chat authentication (2). Tool use and reasoning are visible to the user as they happen, and conversations persist across restarts. Repository: github.com/muzammil5539/Agentic-AI-and-RAG-Projects (projects/beginner/conversational-ai-agent). No external users or production client use is claimed.
32 automated tests (README). Reasoning, tool calls and tool results are streamed live as typed events. API keys are never stored server-side; sessions are isolated per user.