Artifact types¶
Every link on the canvas carries one of eight artifact types; this page lists what each type means, which blocks produce and accept it, its colour on the canvas and how to convert between types.
Overview¶
A block's inputs and outputs are typed ports. You can only link an output to an input that accepts its type; the editor refuses other links and tells you which types the input expects. The types come from the block registry (tuneline/registry.py, registry version 1.0.0).
| Type | Label in the app | Canvas colour (light / dark) | Meaning |
|---|---|---|---|
Dataset |
Dataset | ochre #AD6800 / #E3A24B |
Rows loaded from a file, a URL, a golden set or the Hugging Face Hub, before formatting. |
ChatDataset |
Chat dataset | rose #BB3B72 / #F07FB0 |
Rows in chat form (messages) or prompt/completion form, ready for SFT or evaluation. |
PreferenceDataset |
Preference dataset | orange #C4501C / #F0895C |
Prompt with chosen/rejected answers (DPO, ORPO, SimPO) or prompt/completion/label (KTO). |
VisionDataset |
Vision dataset | green #2F7D4F / #6FCA95 |
Chat rows with one or more images each, for vision-language models. |
Model |
Model | teal #0B7A90 / #4CC5DB |
A base model, optionally with a LoRA adapter, or a merged fine-tuned model. |
EvalReport |
Eval report | violet #7650CB / #B499F3 |
Metrics and per-example results from an evaluation. |
GGUF |
GGUF files | brown #8A5A2B / #CF9A6B |
Quantized GGUF files for llama.cpp, Ollama and LM Studio. |
Endpoint |
Endpoint | slate #4A5A56 / #9DB2AD |
A running OpenAI-compatible inference endpoint. |
The colours are the --t-* tokens in web/src/index.css: handles, link lines and type badges use them, so a rose handle always means chat data. The four dataset types (Dataset, ChatDataset, PreferenceDataset, VisionDataset) are grouped as dataset types in the registry.
Rules for links¶
- One link per input. Each input port accepts at most one link. Dropping a new link on a used input replaces the old one. An output can feed any number of inputs.
- Required and optional inputs. A required input must be linked before the pipeline can run; optional inputs (for example the
evalinput of Fine-tune (SFT)) can stay empty. The Block reference marks each input. - Pass-through types (
same_as). Some blocks work on any dataset type and give back the same type they received. Their outputs declaresame_as: "<input>": the output takes the type of whatever is linked to that input. The editor resolves this from the upstream link when you connect the next block, and the validator does the same (resolve_output_typesintuneline/spec.py). If the input is not linked yet, the output's type is unknown until it is.
| Block | Output | Takes the type of input |
|---|---|---|
Clean and dedupe (data.clean) |
data |
data |
Train / validation / test split (data.split) |
train, validation, test |
data |
Merge datasets (data.merge) |
data |
a (link datasets of the same type to a and b) |
So Load dataset → Format as chat → Split gives three ChatDataset outputs, and Load dataset → Split gives three plain Dataset outputs, which a trainer will not accept until they are formatted.
Conversions¶
When a link is refused, the editor suggests the block that converts between the two types:
| From | To | Use |
|---|---|---|
Dataset |
ChatDataset |
Format as chat (data.to_chat) |
Dataset |
PreferenceDataset |
Format as preference pairs (data.to_preference) |
Dataset |
VisionDataset |
Format as vision chat (data.to_vision) |
Model |
GGUF |
Export GGUF (export.gguf) |
Model |
Endpoint |
Deploy endpoint (deploy.endpoint) |
GGUF |
Endpoint |
Ollama package (deploy.ollama) |
Endpoint |
EvalReport |
Endpoint smoke test (deploy.smoke_test) |
Two more blocks turn something into a Model without changing the type: Merge adapter (a base model plus adapter becomes one merged model) and Quality gate (passes the model on only when its rules hold). Generate synthetic data produces a ChatDataset from nothing or from an optional Dataset / ChatDataset seed.
Dataset¶
Rows loaded from a file, a URL, a golden set or the Hugging Face Hub, before formatting. Columns are whatever the source had; trainers do not accept this type directly.
| Produced by | Accepted by |
|---|---|
Load dataset data |
Clean and dedupe data |
Clean and dedupe data (pass-through) |
Format as chat data |
Train / validation / test split train, validation, test (pass-through) |
Format as preference pairs data |
Merge datasets data (pass-through) |
Format as vision chat data |
Train / validation / test split data |
|
Merge datasets a, b |
|
Generate synthetic data seed (optional) |
ChatDataset¶
Rows in chat form (a messages list of {role, content}) or prompt/completion form, ready for supervised fine-tuning or evaluation.
| Produced by | Accepted by |
|---|---|
Format as chat data |
Fine-tune (SFT) train, eval (optional) |
Generate synthetic data data |
Reinforcement tuning (GRPO) train |
| Clean and dedupe, Split, Merge datasets (pass-through) | Evaluate on test set test |
Prompt-injection test test |
|
| Clean and dedupe, Split, Merge datasets | |
Generate synthetic data seed (optional) |
PreferenceDataset¶
A prompt with a chosen and a rejected answer (for DPO, ORPO and SimPO), or a prompt, a completion and a good/bad label (for KTO).
| Produced by | Accepted by |
|---|---|
Format as preference pairs data |
Preference tuning (DPO / ORPO / KTO) train, eval (optional) |
| Clean and dedupe, Split, Merge datasets (pass-through) | Clean and dedupe, Split, Merge datasets |
VisionDataset¶
Chat rows with one or more images each, for vision-language models. Images can be Hub image columns, URLs, or files inside an uploaded ZIP.
| Produced by | Accepted by |
|---|---|
Format as vision chat data |
Vision fine-tune (SFT) train, eval (optional) |
| Clean and dedupe, Split, Merge datasets (pass-through) | Evaluate on test set test |
| Clean and dedupe, Split, Merge datasets |
Model¶
A base model from the Hub, the same base model with a LoRA adapter, or a merged fine-tuned model. The artifact records the base model and its commit, the adapter or merged repository if any, the modality (text or vision) and the training method.
| Produced by | Accepted by |
|---|---|
Base model model |
Fine-tune (SFT) model |
Registered model model |
Preference tuning model |
Fine-tune (SFT) model |
Vision fine-tune (SFT) model |
Preference tuning model |
Reinforcement tuning (GRPO) model |
Vision fine-tune (SFT) model |
Evaluate on test set model |
Reinforcement tuning (GRPO) model |
Benchmarks (lm-eval) model |
Quality gate model (approved model) |
Prompt-injection test model |
Merge adapter model |
Quality gate model |
Publish and register model |
Merge adapter model |
Export GGUF model |
|
Publish and register model |
|
Deploy endpoint model |
Trainers take a Model and give back a Model, so you can chain them, for example SFT followed by DPO. Deploy endpoint needs the model on the Hugging Face Hub: keep Push to Hugging Face on in the trainer, or merge or publish it first.
EvalReport¶
Metrics and per-example results from an evaluation: a metrics object (for example label_accuracy, and with Also score the base model also base.<metric> and delta.<metric>), the number of examples n, and up to 50 sample rows with input, expected and actual output. Reports are stored inline with the run, not as files.
| Produced by | Accepted by |
|---|---|
Evaluate on test set report |
Quality gate report, extra_report (optional) |
Benchmarks (lm-eval) report |
Publish and register report (optional: metrics go into the model card and registry) |
Prompt-injection test report |
|
Endpoint smoke test report |
Gate rules refer to the metric names in these reports; see Evaluation and quality gates.
GGUF¶
Quantized GGUF files (for example q4_k_m and q8_0) made with llama.cpp, for Ollama, LM Studio and llama.cpp. The artifact lists one file per quantization and, when pushed, the Hugging Face repository that holds them.
| Produced by | Accepted by |
|---|---|
Export GGUF gguf |
Ollama package gguf |
GGUF files cannot be trained, evaluated or served by Deploy endpoint; deploy the adapter or merged model instead.
Endpoint¶
A running OpenAI-compatible inference endpoint: its URL (ending in /v1), the model name to send, and the provider (RunPod Serverless, Hugging Face Inference Endpoints, Modal, or Ollama on your own computer).
| Produced by | Accepted by |
|---|---|
Deploy endpoint endpoint |
Endpoint smoke test endpoint |
Ollama package endpoint |
Endpoints created by a run also appear on the Deployments page; see Deployments.
Where artifacts are stored¶
| Type | Stored as | Location |
|---|---|---|
| Dataset types | Parquet file | The machine that ran the step, and, when a Hugging Face token is saved, your private dataset repository <your-hf-username>/tuneline-cache at artifacts/<node key>/<port>.parquet |
Model |
Hub repository | Your Hugging Face account (adapter, merged model or published model), private by default; the base model stays where it is on the Hub |
EvalReport |
JSON | Inline in the run (artifacts.meta and the step's outputs) |
GGUF |
.gguf files |
The machine that ran the step, and your Hugging Face account when Push the GGUF files is on |
Endpoint |
URL | At the provider; listed on the Deployments page |
Artifact URIs use hf://model/<repo>@<revision>, hf://dataset/<repo>@<revision>/<path>, file://<path> (only valid on the machine that wrote it), inline: (data kept in the artifact record) and https://… (endpoints). See Architecture for how cached artifacts are found again.