Meridian AI
Realtime AI chat assistant with conditional web search.

Overview
A realtime chat assistant that decides, per message, whether it needs a live web search before answering, and streams the answer token-by-token either way.
Why I built it
Most chat assistants either always search (slow, noisy) or never search (stale). Wanted a classifier in the loop deciding per-message, so a factual query gets fresh results and small talk doesn't pay the latency cost.
Architecture
React 19 frontend, Express 5 + Socket.IO backend, LangChain for tool-calling, Mistral AI for both the search-routing classifier and the main chat model, Tavily for web search, Zod for runtime-typed tool schemas. The AI core has zero dependency on Express or Socket.IO: it's a standalone module that could be dropped into a different transport layer without changes.
Challenges
Built conditional web search: a Mistral classifier decides per-message whether a query needs a live Tavily search, with results streamed token-by-token via Server-Sent Events layered over the Socket.IO connection. Added LangChain tool-calling with a Zod-typed send_email tool the model can invoke mid-conversation, with the post-tool follow-up streaming back seamlessly instead of breaking the response into two disjoint messages.
Outcome
Working end-to-end demo with streaming responses, live search routing, and an in-conversation email tool. Decoupled AI core is reusable as a standalone module independent of the chat UI.