Liquid Harness – customize Liquid AI foundation models into task-specific models.
Project description
lqh — Liquid Harness
⚠️ Closed beta — visit lqh.ai to request access.
From zero to a fine-tuned LFM in under an hour.
Liquid Harness is a terminal user-interface (TUI) agent for customizing Liquid Foundation Models. It guide the user to define clear specifications of what problem needs to be solved, writes the data pipeline, scores and filters samples, runs baselines, fine-tunes, and iterates. No ML experience required.
pip install lqh
lqh
✨ Features
💬 Fully agentic
You chat, the agent works. It interviews you about your task, writes and manages the specifications, then drives every downstream stage end-to-end.
📝 Specify in plain English
No DSL, no boilerplate, no ML jargon. Just describe what you want the model to do — the agent captures requirements through dialogue and turns them 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.
🏋️ Fine-tune locally or in the cloud
Eval and data generation run on LQH Cloud. Training can run locally on your own GPUs, or hand off to a beefier machine — just sync the dataset and continue.
🤗 HuggingFace integration
Push and pull datasets from the Hub. Set HF_TOKEN to enable private dataset access and dataset publishing.
🤖 Hands-off --auto mode
Point lqh at a directory 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.
🖥️ Interactive TUI
Provide input, guide the agent, visualize progress, and inspect dataset samples — all from a single 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.
🚀 The pipeline
One command runs all nine stages. Each is a real component 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
🔧 Requirements
- Python 3.11+
- A Liquid Harness account (request access)
- Optional:
torch+transformersfor local fine-tuning - Optional:
HF_TOKENfor HuggingFace dataset sync
🔐 Authentication
lqh
> /login
The CLI stores your token in ~/.lqh/config.json and authenticates all requests to LQH Cloud.
🧬 Base model
Default: LFM2-1.2B-Instruct — small, capable, runs anywhere.
📁 Project layout
A project is just a directory. cd into it, run lqh, and the agent reads the directory contents to understand current state. There is no init command and no project marker file — the files themselves are the project.
my-task/
├── SPEC.md # main spec: what you want the model to do
├── other_specs/ # additional specs for edge cases or sub-requirements
├── data_gen/ # generated pipeline scripts (one .py per pipeline)
├── 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 per-project permissions (gitignored)
SPEC.mdis the heart of the project. The agent creates it during the spec-capture interview and refers back to it at every downstream stage. Edit it directly any time — the agent will pick up the changes on the next turn.- Everything is plain files. Specs are markdown, pipelines are Python, datasets are parquet, runs are directories of artifacts. Inspect, diff, and version-control them like any other code.
.lqh/holds session state (conversation logs, tool permissions). Add it to.gitignore. Depending on size, you may also want to gitignoredatasets/andruns/.
🗺️ Roadmap / work in progress
Things we're actively building or planning. Open an issue if you want to weigh in.
- Quantized evals — run the local evaluation using a quantized model (llama.cpp) so we measure the exact artifact that will be deployed (e.g. Q4_0). Includes checkpoint → GGUF conversion as part of the pipeline.
- Quantization-aware training (QAT) — once quantized evals are in place, train against the quantization noise so the deployed quantized model matches the full-precision score.
- Sub-agent spawning — today there's a single main agent loop. We're adding the ability for the agent to fork or spawn sub-agent processes in parallel for independent subtasks (e.g. drafting multiple data pipelines, running evals concurrently).
- Training via API or SLURM — local and direct-SSH training work today. The training backend is already abstracted so SSH+SLURM cluster submission and a hosted training API can drop in, but neither is implemented or end-to-end tested yet.
- Multi-modal support — scaffolding for image and audio inputs is in place, but the concrete pipelines, data generators, and end-to-end tests have not been written yet.
🤝 Contributing
Please read CONTRIBUTING.md before opening a pull request. Random PRs will be rejected — discuss first via an issue, and the discussion will usually conclude with a prompt (not a patch) that a coding agent will execute. Security hot fixes are the one exception. See the contribution policy for details.
Made with care by Liquid AI.
Project details
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.2.2.tar.gz.
File metadata
- Download URL: lqh-0.2.2.tar.gz
- Upload date:
- Size: 12.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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 |
30f96e63db56f5f66dbcf496b5bde5977ecbbd7d3c7209ddde236f2a0550db1f
|
|
| MD5 |
b9ebc3922a7a5c943f96d1c1a8252ea3
|
|
| BLAKE2b-256 |
ad7350e942d59353f587a7856c91f9b7e986172643ea864c046badcd04ee1301
|
File details
Details for the file lqh-0.2.2-py3-none-any.whl.
File metadata
- Download URL: lqh-0.2.2-py3-none-any.whl
- Upload date:
- Size: 232.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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 |
190c14264a250f55a8c590f0350157ad06e9d970e7d0ed2a4c37bf98f2fdc329
|
|
| MD5 |
0a4f4ef2a463028c8bd11b0ea0002a63
|
|
| BLAKE2b-256 |
0c028189a4fca146807193ebd369306dbe011e5a98e15535ba17daaa3cc7cade
|