Liquid Harness – customize Liquid AI foundation models into task-specific models.
Project description
lqh — Liquid Harness
From zero to a fine-tuned model in under an hour.
Liquid Harness is a terminal agent that turns a plain-English description of your task into a small, fast, task-specific Liquid Foundation Model. You describe the problem; the agent interviews you, writes the specification, generates and curates training data, fine-tunes, evaluates, and iterates until the model beats baseline. No ML experience required.
[!IMPORTANT] ⚠️ Closed beta — visit lqh.ai to request access.
pip install lqh
lqh
🤔 Why would I want this?
Large general-purpose models are expensive, slow, and overkill for most production tasks. A 350M–1.2B model fine-tuned on your task is cheaper, faster, runs on-device, and often more accurate — but getting there normally requires an ML team: data pipelines, judges, training loops, eval harnesses.
Liquid Harness collapses all of that into a conversation:
- 💬 Describe your task — the agent asks clarifying questions and writes a spec.
- ☕ Let it work — it generates synthetic data, scores every sample against a rubric, filters, runs baselines, fine-tunes, and evaluates.
- 📦 Get a checkpoint — a model that measurably beats the baseline on your task, ready to deploy.
💡 What can you build?
A few things people fine-tune with lqh:
| Use case | You tell the agent… |
|---|---|
| 🎧 Support-reply rewriter | "Rewrite draft replies into our brand voice: warm, concise, never over-promising." |
| 🧾 Structured extraction | "Turn free-form purchase emails into strict JSON with vendor, amount, and date." |
| 🚦 Classifier / router | "Label incoming tickets as billing, bug, or feature request — with high recall on billing." |
| 🖼️ Vision Q&A | "Here's a folder of product photos — I need a model that answers questions about defects." |
| 📱 On-device assistant | "A tiny model that summarizes meeting notes offline on a phone." |
Point it at a folder of raw, unlabelled images and it can build a vision fine-tune too — the data pipeline synthesizes the question-answer pairs for you.
🚀 Quickstart
pip install lqh
mkdir my-task && cd my-task
lqh
Inside the TUI:
> /login # authenticate with lqh.ai (one-time)
> I want a model that rewrites support replies into our brand voice.
That's it. The agent takes it from there — it interviews you about requirements, writes SPEC.md, and offers to run the pipeline stage by stage. You can interject, inspect data samples, or change direction at any point.
[!TIP] Run
/hf_login(or setHF_TOKEN) to enable private HuggingFace dataset access and publishing.
🔁 The pipeline
One command runs all nine stages. Each is a real artifact you can inspect, stop at, or hand off.
spec → rubric → data gen → filter → baseline → SFT → DPO → eval → checkpoint
$ lqh --auto ./my-task
[stage: rubric] writing scorer from spec
[stage: data_gen_draft] 5 samples generated, all valid
[stage: filter_validation] 1,427 / 2,000 kept
[stage: sft_initial] score 6.8/10 (baseline 4.1)
[stage: dpo] iter 3/5, score 7.4/10
[final: success] DPO checkpoint beats baseline by +3.3
✨ Features
💬 Fully agentic
You chat, the agent works. It captures requirements through dialogue, manages the specs, and drives every downstream stage end-to-end.
📝 Specify in plain English
No DSL, no boilerplate, no ML jargon. Just describe what you want — the agent turns it into structured specs you can refine over time.
🧪 Synthetic data, scored & filtered
The agent authors a per-task data generation pipeline, generates samples concurrently on LQH Cloud, and scores each one with an LLM judge against your rubric. The dataset that hits training is already curated.
🖼️ Vision fine-tuning
Bring a folder of raw images — no labels needed. The agent synthesizes an image-question-answer dataset and fine-tunes the LFM2.5-VL vision models on it.
🏋️ Train anywhere
Eval and data generation run on LQH Cloud. Training runs locally on your own GPUs, or hands off to a remote machine over SSH — including SLURM clusters — with dataset sync handled for you.
🤖 Hands-off --auto mode
Point lqh at a directory with a spec and walk away. It either delivers a checkpoint that beats baseline or returns an explicit failure with the reason — never a hang, never a prompt.
🤗 HuggingFace integration
Push and pull datasets from the Hub, publish checkpoints, and convert to GGUF for deployment.
🖥️ Interactive TUI
Guide the agent, visualize progress, and inspect dataset samples — all from one terminal session with a slash-command palette and a live status bar.
📦 Project-as-directory
Any directory is a project — fully git-compatible, so you can version, branch, and collaborate on specs, datasets, and runs like any other code. cd to switch projects.
🧬 Models
Fine-tunes the LFM2.5 family — pick a size for your task, from tiny on-device to MoE:
| Size | Best for |
|---|---|
| 230M / 350M | Very simple tasks, extreme on-device constraints |
| 1.2B ⭐ | Recommended starting point for most tasks |
| 2.6B / 8B-A1B (MoE) | More complex tasks |
| 24B-A2B | Only when the task clearly calls for it |
| LFM2.5-VL 450M / 1.6B | Vision (image + text) tasks |
Base, instruct, and thinking variants are available; the agent recommends the right starting size and variant for your task and steps up if fine-tuning struggles.
⌨️ Slash commands
| Command | What it does |
|---|---|
/login |
Log in to lqh.ai |
/hf_login |
Store a HuggingFace token for cloud jobs |
/spec |
Start specification capture |
/datagen |
Start data generation |
/validate |
Start data validation |
/train |
Start training (requires torch) |
/eval |
Start evaluation |
/prompt |
Start prompt optimization |
/resume |
Resume a previous conversation |
/clear |
Start a fresh conversation |
/reconnect |
Retry a failed network/API operation |
/help · /quit |
Show commands · exit |
🤖 Auto mode
For CI, batch jobs, or when you just want a result:
lqh --auto ./my-task # runs the full pipeline against ./my-task/SPEC.md
lqh --spec "use the smallest base model" # sticky run-time directive (works in both modes)
Auto mode requires an existing SPEC.md (write one interactively first, or by hand). It runs rubric → data gen → filter → baseline → SFT → DPO → report without ever prompting, and always terminates with an explicit success or failure.
📁 Your project is just a directory
cd into any directory and run lqh — the agent reads what's there to understand current state. No init command, no project marker file.
my-task/
├── SPEC.md # the heart of the project: what you want the model to do
├── other_specs/ # additional specs for edge cases or sub-requirements
├── data_gen/ # generated pipeline scripts
├── evals/ # eval definitions and results, versioned (v1/, v2/, ...)
├── datasets/ # generated and curated datasets as parquet (v1/, v2/, ...)
├── runs/ # training runs with checkpoints, logs, and configs
└── .lqh/ # conversation logs and permissions (add to .gitignore)
Everything is plain files — specs are markdown, pipelines are Python, datasets are parquet. Edit SPEC.md directly any time; the agent picks up your changes on the next turn.
🔧 Requirements
- Python 3.11+
- A Liquid Harness account (request access)
- Optional:
torch+transformersfor local fine-tuning - Optional:
HF_TOKENfor HuggingFace dataset sync
🗺️ Roadmap
Things we're actively building. Open an issue if you want to weigh in.
- Quantized evals — run local evaluation on the quantized artifact (llama.cpp) so we measure exactly what ships. GGUF export already works; the eval loop on top is in progress.
- Quantization-aware training (QAT) — train against quantization noise so the deployed quantized model matches the full-precision score.
- Sub-agent spawning — parallel sub-agents for independent subtasks (drafting multiple data pipelines, running evals concurrently).
- Hosted training API — train on LQH Cloud without bringing your own GPUs.
🤝 Contributing
Please read CONTRIBUTING.md before opening a pull request. Random PRs will be rejected — open an issue first and agree on the approach with a maintainer; security hot fixes are the one exception. See the contribution policy for details.
Made with care by Liquid AI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lqh-0.4.11.tar.gz.
File metadata
- Download URL: lqh-0.4.11.tar.gz
- Upload date:
- Size: 336.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02e0eb1e6b90d4de4479713264984e50f195f2ebdf8ff65df3a1e298affb64d7
|
|
| MD5 |
3dbbb050c7f67c32ad87eb5747e91f15
|
|
| BLAKE2b-256 |
badeb8d26f24dcbebc8d5daf775f79984f0cc7014e09d8c199527d332699045d
|
File details
Details for the file lqh-0.4.11-py3-none-any.whl.
File metadata
- Download URL: lqh-0.4.11-py3-none-any.whl
- Upload date:
- Size: 381.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ce7ac6d016a75673e42c3135c64558afe964d8ee0cf6272b26f58a24d9ca345
|
|
| MD5 |
cfc4464c5f1aa01cd999b9e08a9592e8
|
|
| BLAKE2b-256 |
0c06779f87bb8af5137a07683a5c25815baa127b1040c71eadce339aa0e3aa37
|