|
|
||
|---|---|---|
| .. | ||
| backend | ||
| frontend | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| haiku.rag.yaml.example | ||
| package-lock.json | ||
| README.md | ||
Interactive Research Assistant
Research assistant powered by haiku.rag, Pydantic Graph, and AG-UI. Ask complex questions and watch the research process unfold in real-time.
Features
- Multi-iteration research graph: Automated question decomposition, search, insight extraction, and gap analysis
- Intelligent evaluation: Confidence-based decision making with automatic iteration until sufficient information is gathered
- Live state synchronization: Real-time delta updates of research progress via AG-UI protocol
- Insight & gap tracking: Structured insights with provenance and automatic gap identification
- Rich reporting: Generates comprehensive research reports with findings, conclusions, and sources
Quick Start
Prerequisites
- Docker and Docker Compose
- A haiku.rag database with indexed documents
- Ollama (or configure another LLM provider)
Setup
-
Prepare your knowledge base
Option A: Create a new database
mkdir -p data haiku-rag add "Your documents here" --db data/haiku_rag.lancedb # Or add from files haiku-rag add-src document.pdf --db data/haiku_rag.lancedbOption B: Use an existing database
Set the
DB_PATHenvironment variable to point to your existing haiku.rag database:# In .env file DB_PATH=/path/to/your/existing/haiku_rag.lancedbOr export it before running docker compose:
export DB_PATH=/path/to/your/existing/haiku_rag.lancedb docker compose up --buildThe database will be mounted as read-write, so the research assistant can access all documents in your existing knowledge base.
-
Configure haiku.rag
cp haiku.rag.yaml.example haiku.rag.yaml # Edit haiku.rag.yaml to customize provider/modelSee haiku.rag configuration for details.
-
Set API keys (if using non-Ollama providers)
cp .env.example .env # Edit .env to set your API keys OPENAI_API_KEY=your-key-here ANTHROPIC_API_KEY=your-key-here DB_PATH=/path/to/your/existing/haiku_rag.lancedb # If using an existing db. -
Start the application
docker compose up --build -
Access the interface
- Frontend: http://localhost:3000
- Backend health: http://localhost:8000/health
How It Works
- Ask a question: Type your research question in the chat
- Plan phase: The research graph automatically:
- Decomposes your question into targeted sub-questions
- Gathers initial context about the topic
- Research iterations: The graph autonomously:
- Searches the knowledge base for each sub-question in parallel
- Extracts structured insights with source provenance
- Identifies information gaps and assesses confidence
- Generates new follow-up questions for gaps
- Iterates until confidence threshold is met or max iterations reached
- Synthesis: Generates a comprehensive research report with:
- Executive summary
- Main findings with supporting evidence
- Conclusions and recommendations
- Source citations
Architecture
Agent + Graph Pattern
This example demonstrates the agent+graph architecture pattern:
-
Conversational Agent (
agent.py):- Pydantic AI agent handles user conversations
- Decides when to invoke the research tool based on user intent
- Responds directly to greetings/casual chat without tools
- Formats research results for the user
-
Research Graph (haiku.rag):
- Multi-step research workflow invoked by the agent's tool
- Autonomous execution with plan → search → analyze → decide → synthesize flow
- Emits AG-UI events for real-time progress tracking
-
Shared Event Stream:
AGUIEmitteris shared between agent and graph- Events from both flow through a single stream to the frontend
- Custom streaming endpoint (
main.py) uses anyio memory streams for proper async handling
Components
-
Backend (Python):
- Uses published
ghcr.io/ggozad/haiku.rag:latestDocker image as base agent.py: Pydantic AI agent withrun_researchtoolmain.py: Custom AG-UI streaming endpoint with anyio memory object streams- Real-time event forwarding from emitter to SSE stream
- Filters out
ACTIVITY_SNAPSHOTevents (not yet supported by CopilotKit)
- Uses published
-
Frontend (Next.js/React):
- CopilotKit for AG-UI protocol integration
- Split-pane UI: chat on left, live research state on right
- Real-time state synchronization via Server-Sent Events (SSE)
StateDisplaycomponent with collapsible sections for questions, insights, and gaps
Configuration
Configuration is done through haiku.rag.yaml (see haiku.rag.yaml.example):
research.provider: LLM provider (default:ollama)research.model: Model name (default:gpt-oss:latest)research.max_iterations: Maximum research iterations (default:3)research.confidence_threshold: Confidence threshold for completion (default:0.8)research.max_concurrency: Parallel sub-question processing (default:1)providers.ollama.base_url: Ollama endpoint (default:http://host.docker.internal:11434)
Environment variables (see .env.example):
DB_PATH: Path to haiku.rag database (default:haiku_rag.lancedb)OPENAI_API_KEY,ANTHROPIC_API_KEY: API keys for cloud providers
For full configuration options, see haiku.rag configuration docs.