A focused local LLM studio with a social-skills practice layer.
Download and run text models, chat with profiles, memory, and skills, call tools, and log real-world reps on The Floor — streak, radar, comfort gap, heatmap.
Not a training framework. Not a diffusion suite.
- Browse / catalog GGUF text models from Hugging Face (progress, size, status)
- Load a local llama.cpp engine and stream chat with live tokens/sec
- Switch Coach / Spark / General profiles (or write your own)
- Toggle memory and skills (Debrief, Thread revival ship as examples)
- Tool calling: web search, Python, datetime, calculator
- Parse practice
<task>blocks into a pending tray; log predicted vs actual anxiety - Dashboard KPIs, skill radar, comfort-gap chart, 16-week heatmap, reflection log
- OpenAI-compatible
POST /v1/chat/completionsandGET /v1/modelswith a local API key
npm install
npm run devThe app stores chats, profiles, memory, skills, tasks, and settings in the browser. Generation defaults and the local API key live under Settings.
npm run runtime:setup— installsllama-serverfor this OS.- Open Models — SmolLM2 135M is the recommended local engine. Load it (weights download on first use).
- Chat. The sidebar shows live tok/s. Coach may assign practice tasks onto The Floor.
- Grok cloud engines remain available as a fallback.
The studio is the same app Unsloth-style: llama.cpp in the back, a window in front.
npm i -D electron
npm run dev # in one terminal
npm run desktop # native window on the studioDemo data on The Floor is synthetic and never mixed with real events.
Floor Studio runs on a Kaggle GPU the same way Unsloth notebooks do: enable GPU + Internet, Run All, open the public link.
Notebook in this repo: notebooks/Floor_Studio_Kaggle.ipynb
- Import the notebook from GitHub (or File → Import Notebook and paste the GitHub URL).
- Session options → Accelerator = GPU T4, Internet on.
- Run All. The last cell prints a public Gradio URL and embeds the studio.
- Pick
SIZE = "balanced"(Llama 3.2 1B) or"quality"(3B) in that cell.
Weights cache under /kaggle/working/floor-data for the session. CUDA llama-cpp wheels are installed automatically; CPU is the fallback if no GPU is attached.
# same launcher locally
pip install -e ".[kaggle]"
python -m studio.kaggle --bootstrap --size balancedFloor Studio shells llama-server (CPU by default) and streams OpenAI-compatible chat from it.
npm run runtime:setup
npm run devWeights live in ./data/models (or FLOOR_MODELS). Binary in ./bin.
Default local model: unsloth/SmolLM2-135M-Instruct-GGUF Q4_K_M (~105 MB). Larger GGUFs from Hugging Face download onto disk and load the same way.
The Python companion (python -m studio.backend.main) is still available if you prefer FastAPI.
Local key is generated in Settings.
curl http://127.0.0.1:8080/v1/models \
-H "Authorization: Bearer floor_sk_…"
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Authorization: Bearer floor_sk_…" \
-H "Content-Type: application/json" \
-d '{"model":"grok-4.5","messages":[{"role":"user","content":"Hello"}]}'When a chat is built, context is assembled in this order:
- Active profile system prompt
- Global memory (if enabled)
- Profile memory notes
- Project instructions
- Matching / enabled skills
- Task-format instructions
floor/ domain (prompt, tasks, storage)
studio/backend/ FastAPI local runtime
src/ web studio (TanStack Start)
data/ gitignored runtime data
MIT