trunk
Branches trunk
1 Branches 0 Tags
Go to file T
Code
.determinism Add determinism golden index
.github Raise all coverage gates to 100%
docs Add LSP cookbook entries for Zed, Helix, Neovim
docs-internal docs: add contributor testing guide
scripts Pre-commit hook: refuse new sprint/audit IDs in src/dlm/
src Fix version lookup to use renamed package name
tests Test scaffold: add requires_acceptance to fake resolved spec
vendor Bump dlm-lsp to 2aef89a (version-pair logging)
.editorconfig chore: add editorconfig
.gitignore chore(gitignore): untrack .claude/ + AGENTS.md (editor artifacts)
.gitmodules Add dlm-lsp and dlm-vsc as submodules
.pre-commit-config.yaml Pre-commit hook: refuse new sprint/audit IDs in src/dlm/
.python-version chore: scaffold pyproject, pin python 3.11, lock deps
CHANGELOG.md README + CHANGELOG: dlm export --emit-sway-json (S26 X1-P6)
CONTRIBUTING.md Update CONTRIBUTING with PyPI publish info
LICENSE chore: add MIT license
README.md Merge remote-tracking branch 'origin/trunk' into sprint/43-dlm-synth
mkdocs.yml Document synth workflows
pyproject.toml Merge remote-tracking branch 'origin/trunk' into sprint/43-dlm-synth
sway @ 98ad941 sway: convert in-tree subproject to git submodule pointing at tenseleyFlow/sway
uv.lock chore(deps): record soxr in uv.lock

DocumentLanguageModel

A .dlm file becomes a local, reproducible, trainable LLM. Edit the document, retrain, share.

DocumentLanguageModel (DLM) is a local-first training, inference, and export toolchain built around authored documents instead of hosted dashboards.

A .dlm can be:

  • a hand-written training document with prose, instruction, and preference data
  • a directive-driven entrypoint into a codebase or notes tree
  • a multi-adapter project with learned routing
  • a multimodal or audio-language document

DLM trains LoRA / QLoRA / DoRA adapters on real pretrained bases, keeps a replay history so retrains do not silently forget, and exports to Ollama, llama-server, vllm, and mlx-serve.

Install

pip install document-language-model

That gives you the dlm command. Verify:

dlm --version
dlm doctor

Extras

# CUDA QLoRA support (NVIDIA SM >= 8.0):
pip install 'document-language-model[cuda]'

# Apple Silicon MLX inference:
pip install 'document-language-model[mlx]'

# OpenAI teacher for synthetic data generation:
pip install 'document-language-model[openai]'

# Anthropic teacher:
pip install 'document-language-model[anthropic]'

# Observability (TensorBoard + W&B):
pip install 'document-language-model[observability]'

From source

git clone https://github.com/tenseleyFlow/DocumentLanguageModel.git
cd DocumentLanguageModel
uv sync --all-extras --dev
uv run dlm --help

# Build GGUF export tooling:
scripts/bump-llama-cpp.sh build

# Optional: llama-server HTTP target:
scripts/bump-llama-cpp.sh build --with-server

30-Second Start

dlm init tutor.dlm --base smollm2-135m
# Edit tutor.dlm — add your Q&A pairs
dlm train tutor.dlm
dlm prompt tutor.dlm "What is a Python decorator?"
dlm export tutor.dlm --target ollama --name my-tutor

What a .dlm Looks Like

A minimal document:

---
dlm_id: 01KPM5CXB51GRX86Q25AKERN6E
dlm_version: 15
base_model: smollm2-135m
---

# My tutor

Some background prose. This trains via continued pretraining.

::instruction::
### Q
What is a decorator?

### A
A function that takes a function and returns a wrapped function.

A more representative one with directives, named adapters, and export config:

---
dlm_id: 01KTESTEXAMPLE000000000000
dlm_version: 15
base_model: qwen3-1.7b
system_prompt: |
  You are a concise engineering assistant.
training:
  adapter: lora
  sequence_len: 4096
  sources:
    - path: ./src
      include: ["**/*.py", "**/*.md"]
      exclude: ["tests/**"]
  adapters:
    knowledge:
      adapter: lora
      lora_r: 8
    tone:
      adapter: lora
      lora_r: 4
  gate:
    enabled: true
export:
  default_quant: Q4_K_M
---

# Project notes

Shared prose trains all declared adapters by default.

::instruction#knowledge::
### Q
What does the cache layer do?

### A
It avoids re-tokenizing unchanged directive-sourced files.

::preference#tone::
### Prompt
Explain a failure mode.

### Chosen
Explain it directly, then give the fix.

### Rejected
Over-explain the background before naming the problem.

Common Workflows

Train a hand-authored document

dlm init tutor.dlm --base smollm2-135m
dlm train tutor.dlm
dlm prompt tutor.dlm "Explain decorators"

Train across a codebase

dlm train ./my-repo --base qwen3-1.7b

Auto-scaffolds a .dlm under ./my-repo/.dlm/ and trains on the repo's source files.

Multi-adapter composition

dlm prompt mydoc.dlm "Explain the runbook" --adapter knowledge
dlm export mydoc.dlm --adapter-mix knowledge:1.0,tone:0.5

Export to local runtimes

dlm export mydoc.dlm --target ollama --name mydoc
dlm export mydoc.dlm --target llama-server
dlm export mydoc.dlm --target vllm
dlm export mydoc.dlm --target mlx-serve

# Also emit a ready-to-run sway.yaml next to the GGUF for downstream
# evaluation via `sway run` (requires the [sway] extra).
dlm export mydoc.dlm --target ollama --emit-sway-json
sway run <export-dir>/sway.yaml

Mine preference pairs and retrain

dlm preference mine mydoc.dlm --samples 4 --max-pairs 8
dlm preference apply mydoc.dlm
dlm train mydoc.dlm --phase preference

Generate synthetic training data

dlm synth instructions mydoc.dlm --teacher self --apply
dlm synth instructions mydoc.dlm --teacher openai:gpt-4o-mini --apply

Multimodal and audio documents

dlm init diagrams.dlm --multimodal --base qwen2-vl-2b-instruct
dlm train diagrams.dlm
dlm prompt diagrams.dlm --image figures/arch.png "What is this?"

dlm init calls.dlm --audio
dlm train calls.dlm
dlm prompt calls.dlm --audio clips/call.wav "Summarize the clip"

Pull eval failures back into training

dlm harvest mydoc.dlm --sway-json sway-report.json --apply

Pack and share

dlm pack mydoc.dlm --include-exports
dlm verify mydoc.dlm.pack
dlm push mydoc.dlm --to hf:org/name

Inspect state

dlm doctor
dlm show mydoc.dlm --json
dlm metrics mydoc.dlm

Supported Platforms

Tier Training Inference / Export
NVIDIA CUDA (SM >= 8.0) bf16 + QLoRA 4-bit + FlashAttention Ollama, GGUF, llama-server, vLLM
NVIDIA CUDA (SM < 8.0) fp16 LoRA Ollama, GGUF, llama-server, vLLM
Apple Silicon (MPS) fp16 LoRA Ollama, GGUF, MLX inference, mlx-serve
CPU inference only (training refused above small bases) GGUF, Ollama, llama-server
AMD ROCm experimental ROCm llama.cpp

Base Model Registry

DLM ships with ~27 pinned base models across text, vision-language, and audio-language families:

  • Text: Qwen 2.5 (0.5B–3B), Qwen 3 (1.7B–8B), Llama 3.2/3.3, SmolLM 2/3, Phi-3.5/4, Gemma 2, OLMo 2, Mixtral 8x7B
  • Vision-language: Qwen2-VL, InternVL2/3, PaliGemma, Mistral-Small-3.1
  • Audio-language: Qwen2-Audio

Any HuggingFace model via --base hf:org/name with compatibility probes.

Command Surface

Area Commands
Author init, templates, show, migrate, cache
Train train, doctor, metrics, harvest
Align preference mine/apply/revert/list
Synth synth instructions/preferences/revert/list
Infer prompt, repl
Ship export, pack, unpack, verify, push, pull, serve

See the CLI reference for the full flag surface.

Editor support

VSCode

Install DLM — Document Language Model from the VSCode Marketplace. The extension provides syntax highlighting, completions, diagnostics, and a side panel for .dlm authoring. Source: dlm-vsc.

It uses the dlm-lsp language server, which you also need to install:

pip install dlm-lsp

Other editors

The language server is editor-agnostic — Zed, Helix, and Neovim get diagnostics, hover, and completions through their LSP clients. See:

Documentation

Principles

  1. The document is the interface. Frontmatter, typed sections, directives, and store contracts — not a dashboard.
  2. Training is real. LoRA / QLoRA / DoRA on pretrained bases.
  3. Retraining should not silently forget. Replay-backed accumulation.
  4. Local-first is load-bearing. Your data stays on your machine.
  5. Determinism is a contract. Locks, pinned versions, golden checks.

Tech Stack

Python 3.11+ · PyTorch · HuggingFace transformers / peft / trl / accelerate · vendored llama.cpp for GGUF · Ollama · Typer · Pydantic · uv

Contributing

See CONTRIBUTING.md.

License

MIT. Base-model licenses are separate and enforced at dlm init, dlm train, dlm export, and dlm pack.