Full-stack AI knowledge assistant with end-to-end RAG: document upload → hierarchical chunking → embeddings → Weaviate semantic search. Multi-agent orchestration via LangGraph LLM-as-router (supervisor agent routes to RAG search / web search via LLM tool-calling in a stateful loop). NestJS decorator-based plugin system with MCP integration. SSE-streamed token-by-token responses with MySQL-backed LangGraph checkpointing. Multi-LLM via OpenRouter (OpenAI / Anthropic / Gemini) with fallback chains.
What it does
A private knowledge assistant: upload documents, ask questions, get grounded answers with citations. The retrieval path is hierarchical chunking → embeddings → Weaviate semantic search; the generation path is a LangGraph supervisor that routes between RAG search and web search via tool-calling.
Routing the supervisor
const route = async (state: AgentState) => {
const tool = await llm.bindTools([ragSearch, webSearch]).invoke(state.messages)
return tool.tool_calls?.length ? "tools" : "answer"
}