Drag two conversations together. The model remembers everything.
A local AI chat interface where conversations are living objects — merge them, compile them into weights, and build a model that compounds knowledge over time. Fully local, fully yours, nothing leaves your machine.
What makes it different
| Feature | CHATFORGE | typical local chat UI |
|---|---|---|
| Drag-to-merge conversations | ✅ | ❌ |
| Persistent cross-session memory | ✅ | ❌ |
| Auto fact extraction per exchange | ✅ | ❌ |
| Runs 100% locally on your GPU | ✅ | sometimes |
| LoRA compilation (coming) | 🔜 | ❌ |
Core concept
Most chat interfaces treat conversations as isolated sessions. CHATFORGE treats them as composable knowledge.
- Merge — drag any two conversations onto each other. Their contexts combine chronologically into a single conversation. Ask questions that require facts from both.
- Memory — after every exchange, the model silently extracts facts about you and stores them. Every future chat starts with that context already loaded.
- Compile (Phase 4) — one-click LoRA fine-tuning bakes merged context permanently into model weights. No context window needed at inference time.
Requirements
- Ollama with at least one model pulled
- Python 3.9+
- Node.js 18+
- NVIDIA GPU recommended (runs on CPU too, just slower)
Tested on RTX 3060 Ti with qwen2.5:7b / qwen3.5 — fits in 8GB VRAM.
Quick start
1. Clone
git clone https://github.com/gerritsxd/chatforge
cd chatforge2. Backend
cd backend
pip install -r requirements.txt
python -m uvicorn main:app --reload --port 80003. Frontend
cd frontend
npm install
npm run dev4. Open http://localhost:5173
Make sure Ollama is running with at least one model:
ollama pull qwen2.5:7b
Usage
Chat
Select a model from the dropdown, type a message. Conversations are auto-saved.
Merge
Drag one conversation from the sidebar onto another. They combine into a new MERGE: conversation. The model now has both contexts — ask questions that span both chats.
Memory
Click the MEMORY button in the topbar to see what the model has learned about you. Click × on any fact to make it forget. Memory is automatically injected into every new conversation.
Project structure
chatforge/
├── backend/
│ ├── main.py # FastAPI server, chat streaming, memory extraction
│ ├── db.py # SQLite: conversations, messages, memories
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── App.jsx
│ │ └── components/
│ │ ├── Sidebar.jsx # drag-to-merge lives here
│ │ ├── ConvItem.jsx # draggable/droppable conversation item
│ │ ├── ChatWindow.jsx
│ │ └── MemoryPanel.jsx
│ └── package.json
├── start.bat # Windows: launches both servers
└── PLAN.md # full roadmap
Roadmap
- Phase 1 — Chat UI + Ollama streaming + SQLite persistence
- Phase 2 — Drag-to-merge conversations
- Phase 3 — Persistent memory with auto fact extraction
- Phase 4 — LoRA compilation: one-click bake context into weights
- Phase 5 — Docker container + hackathon demo polish
Stack
- Backend: Python, FastAPI, SQLite, httpx
- Frontend: React, Vite, dnd-kit
- AI: Ollama (any local model)
License
MIT


























