A web app for working with local language models on your own documents: search them, fine-tune on them, test the result.
A hobby project: I like tinkering with local models and did my best to make this solid (tests, CI, measured results), but it is a one-person beta. Use it if it helps you.
Project data is stored locally. If you enable a connected provider, the data needed for that feature may be sent to it.
You don't have to use everything. Pick what you need — most users start with one and grow.
"I have a pile of PDFs and want to ask questions about them in plain English — without uploading anything to the cloud."
Every file is parsed once in Files & Knowledge (PDF, DOCX, TXT, MD, HTML, code, CSV, JSON, images via OCR or a Vision reader). The Smart Brain answers from that parse with sources: semantic + keyword search, rank fusion, reranking, an answer gate — often called RAG. Live build progress via SSE, an index status that says when files changed, optional fact cards from reviewed pairs. One-click ⚡ Quick index; export it as a standalone MCP + HTTP server.
"I want to teach a small open model how my company talks."
Point at a JSONL or your mined dataset, pick a base model, run LoRA / QLoRA. Live loss curves, VRAM profiles, adapter merge, then export (merged / abliterated; GGUF when host tools are installed). Per past-run Actions (⭐ Set production, ▶ Open in inference, ⬇ Export).
"I trained two variants. Which one is actually better?"
Offline smoke suites styled after MMLU / GSM8K / HellaSwag (not the full HuggingFace dataset downloads), plus project-local suites. Two tabs: Recent scores and Compare two runs (per-suite Δ = B − A, colored).
"I want to run an open model locally with my own chat history and image support."
Pick a safetensors or GGUF model, load with auto-unload-on-idle to free VRAM. Image input for multimodal. Per-session temperature / top-p / system prompt. Conversation persists.
Measured on a fictional company (80 files, 1,130 facts with a known answer key) with Qwen3.5-9B on one RTX 3090: 102 quiz questions reworded from the training pairs, plus 20 the documents do not answer, scored by an AI judge checked against hand-labelled cases.
| Setup | Quiz correct (of 102) | Declines the 20 unanswerable |
|---|---|---|
| Base model alone | 3 | 6 |
| Fine-tuned on ~2,450 reviewed pairs | 19–28 (+ ~23 half right) | 0 |
| Fine-tuned, each pair + 3 reworded questions (simple matcher) | 48 (15 without rewording) | 0 |
| Base model + Smart Brain | 76–97 | 20 |
| Fine-tuned + Smart Brain | 82–94 | 0–2 |
Fine-tuning learns some facts and the answer style, but it stops the model from saying "I don't know", and fact training cost instruction following too (IFEval 83 % -> 68-70 %; the optional replay mix keeps it, at the price of recall). For knowing your documents, use the Smart Brain. Every run is written up in RESULTS.md.
A quick overview of the current self-hosted workflow. See the README and tutorial for installation requirements and step-by-step use.
1 Files & Knowledge → 2 train or 2 Smart Brain → 3 test → 4 use it: every file parsed once, both routes read that parsesetup.sh, optional bundled embedder + reranker for fully offline semantic search)A clear, responsive workspace with project checklists, keyboard navigation, and dark or light themes. Default local address :7860.
BENCHMARKS — optional public exams with offline smoke suites, real HF splits, recent scores, and two-run comparison.
From raw documents to a benchmarked, chat-ready model — one project, one flow — or let ⚡ Quick work chain it from one page:
upload ──► file library sha256 dedup · MIME auto-folders · versioning · 7-day trash · rename · per-file purge · parsed MD └─► parse once text · code · data · office · email · images(OCR / Vision reader) ── passages └─► Smart Brain index: semantic + keyword search, rank fusion, reranking · live SSE └─► Q&A mining batch prep job OR agentic tool-calling chat └─► review approve / reject / edit pairs ──► JSONL datasets └─► train LoRA / QLoRA / full · live loss · VRAM profiles · per-run Actions └─► merge + export adapter → merged → optional GGUF when tools installed └─► benchmark offline smoke suites · compare tab (Δ = B − A, colored) └─► chat single-model engine · vision · Smart Brain sources · log tail
You can, and for a one-off that is fine. The app is for when you repeat the loop: the steps share one project, and your data stays in ~/.finetune-studio/ where you can find it.
| What you'd do manually | What Finetune Studio does |
|---|---|
| Five terminal windows + a Notion page of "things to remember" | One browser tab, one project concept |
| Hand-craft chunking + embedding loops | Click Build — SSE progress the whole way |
| Write your own eval harness | Pick a suite, click Run, get a comparison table |
| Lose an afternoon to CUDA install issues | One ./install.sh — GPU-aware wheels, self-repair |
| Guess why a model will not load | See estimated VRAM needed, free VRAM, and the named GPU processes using it |
| Compare two trained runs by hand | Compare tab — pick run A + B, get the Δ table |
| SSH in to grep server logs | Settings → WebUI log tail, Refresh + Auto-refresh |
Linux only (NVIDIA GPU or CPU) until the stable 1.0.0. install.sh selects a compatible accelerator stack.
$ git clone https://github.com/GenorTG/finetune-studio.git $ cd finetune-studio $ ./install.sh # detects hardware; starts on localhost by default $ source .venv/bin/activate $ fts webui # open http://localhost:7860 — a short onboarding tour shows the first steps