Local document work

A private document assistant on one desk-side machine.

This is the setup I used to run Ling 3.0 Flash on a DGX Spark and drive it with OpenClaw. The demo hands the assistant a folder of synthetic invoices and asks for a German VAT draft.

The stack

Four projects, one workstation.

The model, the hardware, the agent harness, and the hosting come from different projects. Each one did a specific job here.

How it runs

Everything stays on the machine.

01

Invoice folder

The workspace holds synthetic invoices and bank records. Some pages are duplicated. One payment is a reimbursement.

Fixture data

02

Sandboxed tools

OpenClaw works the folder inside a Docker sandbox. The sandbox reads and writes the workspace and has no network access.

OpenClaw

03

Local endpoint

The gateway sends model requests to a loopback SGLang server. The server holds a 131K-token pool and one running request.

Ling 3.0 Flash FP4

04

One machine

The model runs on the GB10 with its 121 GiB of unified memory. No document and no request leaves the box.

DGX Spark

Two launches

One model at a time.

The two servers are alternatives, not a pair. Their measured memory totals do not fit together, so the setup stops one before it starts the other.

Text and images

Ling 3.0 Flash VL FP4

Reads scanned documents directly, so the invoice demo runs here.

Model ID
Ling-3.0-flash-VL
Port
30000
Measured memory
~77 GiB
DSpark
No
Text only

Ling 3.0 Flash FP4 + DSpark

Runs the text model with the publisher's DSpark draft model.

Model ID
Ling-3.0-flash
Port
30001
Measured memory
~92.5 GiB
DSpark
Yes

The demo

Sort invoices and prepare a VAT draft.

The assistant works through a folder of synthetic German business records. It separates income from expenses and leaves unrelated records out. It also finds duplicates and transfers.

It saves a CSV ledger and fills the supported July 2026 VAT fields. A deterministic calculator checks the result, and the assistant lists anything that still needs review.

  • Does read the folder, keep a ledger, fill the supported fields
  • Does not connect to a tax authority, submit a return, or guess unreadable fields
Demo prompt →

Credits

What each project supplied.

None of this is a product launch. It is one recorded combination of four open projects, with the versions written down.

Ling 3.0 Flash

inclusionAI, Ant Group

  • 124B total parameters and 5.1B active per token, on a hybrid linear attention stack.
  • Published FP4 weights, a separate DSpark draft model, and a VL variant for scanned pages.
  • MIT licensed, with an official SGLang image that tracks the model runtime.

NVIDIA DGX Spark

GB10, Arm64 Linux

  • 121 GiB of unified memory and compute capability 12.1 on one small machine.
  • Fits the 124B FP4 model and a 131K-token pool in about 92.5 GiB of resident memory.
  • NVIDIA's container stack supplies the GPU access the SGLang images need.

OpenClaw

Agent harness, revision bc21739

  • Drives the tools, the folder work, and the model calls for the demo.
  • Keeps tools in a no-network sandbox that is mounted on the demo workspace.
  • Needed one narrow patch for configured vision on the tested revision.

Hugging Face

Hub and static Space

  • Hosts the pinned weights and draft model that the download script fetches.
  • Hosts the synthetic invoice fixture the demo works through.
  • Serves this page as a static Space, with every revision recorded in the docs.

Notes from the build

  • The pinned revisions are the contract. Text model 3bae1cf, draft model 8e5d998, VL model 8dca6a0, fixture 1cdf157. A newer revision is a new test, not a silent upgrade.
  • The port is part of the model identity. The endpoint accepts any model name in the request body, so the OpenClaw config lists exactly the one model loaded on that port.
  • The patch stayed narrow. One file, for the configured vision path on the tested harness revision, instead of a fork.
  • Nothing left the machine. The sandbox has no network, the gateway calls loopback only, and the documents are synthetic.

Run it yourself

The repo carries what you need to repeat the setup.