finetuning
chat + embeddingstypescript + python

open-source infrastructure for reproducible model training

Fine-tune models.
Keep the entire story.

Build datasets, distill teacher behavior, train, evaluate, and export—with provenance, resume identity, and artifact hashes intact from beginning to end.

source records → training workflow → verified artifact
every stage leaves a receipt
CHATTool trajectoriesresponse + behavior
EMBEDDINGSTask recordsvectors + relevance
01Freezecanonical data
02Distillteacher signal
03Trainbound recipe
04Evaluatecompatible report
ARTIFACTVerified export17 / 17 hashes match

THE PROBLEM

A training script is easy. The hard part is remembering what actually happened.

Which records went in? Which prompt shaped them? Did related examples leak across the split? Which model generated a candidate, which model judged it, and did resume quietly buy the same provider response twice?

finetuning turns those questions into contracts. Every stage hands the next one a stable identity and an inspectable receipt instead of another unlabeled directory.

THE WORKFLOW

One path from behavior to proof.

TypeScript owns data and orchestration. Python owns model execution. Versioned contracts keep the boundary honest.

01
Construct

Canonical data

Chat records, embedding pairs, trajectories, provenance, rights, and split groups.

02
Distill

Teacher candidates

Generate responses, vectors, scores, or rankings—with separate judges and explicit budgets.

03
Train

Bound recipes

Pin datasets, templates, model revisions, objectives, and every field that makes resume honest.

04
Evaluate

Comparable evidence

Keep held-out answers held out. Compare only reports that share compatible identities.

05
Export

Verifiable artifacts

Ship model files with relative paths, byte sizes, SHA-256 hashes, and the receipt that produced them.

FULL TOOL TRAJECTORIES

The row does not stop at the tool call.

Choosing check_availability is only half the behavior. The student also needs to read the result, preserve the user’s constraints, and close the loop naturally.

Explore the trajectory format
USER

Do you have anything after 4 on Thursday?

ASSISTANT · TOOL CALL

check_availability({ day: "thursday", after: "16:00" })

TOOL RESULT

{ slots: ["16:30", "17:15"] }

ASSISTANT · FINAL

Yes — 4:30 PM and 5:15 PM are both open. Which works better?

WHAT IT PRESERVES

The machinery around the model.

The product is not another wrapper around a trainer. It is the control plane between every step.

CHAT

Full tool trajectories

Train the call, the result, and the final answer—not merely the decision to use a tool.

EMBED

Task-native records

Retrieval, similarity, classification, and clustering keep their own semantics instead of sharing a vague universal schema.

CONTROL

Fail-closed execution

Network, spend, downloads, remote code, uploads, GPU paths, and mutation require explicit authorization.

RECOVERY

Identity-aware resume

A checkpoint resumes only when the immutable dataset and recipe identity still match.

PROOF

Evidence before claims

Production recipes remain unavailable until license, hardware, reload, and evaluation gates have passed.

AGENTS

A CLI that explains itself

Predictable noun-and-verb commands, JSON on stdout, diagnostics on stderr, and dry-runs before writes.

01 / CHAT

Teach behavior.

Generate conversations, complete tool trajectories, response candidates, judge decisions, and canonical SFT data.

  • Scenario-driven self-play
  • OpenAI and Anthropic teachers
  • Separate generation and judging budgets
  • Held-out answer locks
Open the chat workflow ↗
02 / EMBEDDINGS

Teach geometry.

Build retrieval and task datasets, mine negatives, distill vectors, scores, or rankings, and compare compatible evaluations.

  • Retrieval, STS, classification, clustering
  • Group-aware split isolation
  • Late-bound prompts and pooling
  • Recall, MRR, and task metrics
Open the embedding workflow ↗
!

HONEST BY DEFAULT

A credential is not permission.

Provider calls require an exact model, an environment-variable reference, network opt-in, and a positive budget.

Downloads, uploads, GPU recipes, remote code, overwrites, and live infrastructure mutation stay explicit—or unavailable.

sha256: evidence-over-vibes

Build the model.
Keep the history.

Start entirely offline with deterministic fixtures. No credentials, network, model download, GPU, upload, or remote code required.