Models

The Melmac models.

Small models for the steps that repeat. Each one does a single job, and the runtime decides which one runs it.

Melmac-S

Live

Reads technical text from PDFs.

Turns spec sheets and manuals into structured records. The one in the demo.

Melmac-SV

Live

Reads text, tables, charts and drawings.

The same job, with the visual page included.

Melmac-Phone

Coming soon

Noisy calls, human speech.

Handles real call audio and replies in a natural voice.

Melmac-Narrator

Coming soon

Narration at speed.

Long-form narration, fast and cheap.

Melmac-Email

Live

Outbound email, reviewed by you.

Drafts from the record and waits for your read.

Melmac-Crawl

Coming soon

Crawl jobs, planned and run.

Plans the crawl, fetches the pages and keeps the queue.

Melmac-S · dry run

One page in, one schema out.

Point S at a spec sheet. It reads the text, decides the fields and returns a schema. A dry run prints the schema without calling the model, so the shape is reviewable before anything is extracted.

melmac-s · dry run
$ ./melmac data/synth-spec/docs/d00000/page-1.pdf --dry-run
page-1.pdf  page 1 · 35 words, image 28bebee00d136f15.png
schema: product_data_sheet / model_number, airflow, weight, afue, phase, certification, dimensions, input

{
  "doc_type": "product_data_sheet",
  "fields": [
    { "name": "model_number", "type": "string", "unit": null,
      "description": "The unique identifier for the product model." },
    { "name": "airflow", "type": "number", "unit": "CFM",
      "description": "The volume of air moved by the furnace." },
    { "name": "weight", "type": "number", "unit": "lb",
      "description": "The total weight of the unit." },
    { "name": "afue", "type": "number", "unit": "%",
      "description": "The Annual Fuel Utilization Efficiency percentage." },
    { "name": "phase", "type": "number", "unit": null,
      "description": "The electrical phase of the unit." },
    { "name": "certification", "type": "string", "unit": null,
      "description": "The official certification standard met by the product." },
    { "name": "dimensions", "type": "string", "unit": "in",
      "description": "The physical dimensions of the unit." },
    { "name": "input", "type": "number", "unit": "Btu/h",
      "description": "The heat input capacity of the furnace." }
  ]
}

A dry run on a synthetic spec sheet. The next step fills each field from the page.

The rest of the family

More models.

Phone, Narrator and Crawl are coming soon.

melmac-sv · vision
$ ./melmac chat "What is the model number and weight?" --model melmac-sv --image page-1.pdf
loaded models/Melmac-SV
Model Number: KH-270A
Weight: 435
email-270m · brief
$ ./melmac chat "Confirm the HVAC unit is on backorder until Friday." --model email-270m
The HVAC unit is on backorder until Friday.
phone · transcript
$ ./melmac transcribe call_00.wav --model phone
agent     Hello, thank you for calling. My name is Michael.
customer  I noticed a double charge on my last bill.
agent     I see you were charged twice this month.
narrator · voice
$ ./melmac speak "Line three is down. Maintenance is on it." --voice narrator
▶ line-three.wav   2.4s   24 kHz
crawl · tool use
$ ./melmac crawl https://example.com/catalog --depth 2
→ fetch    /catalog            200
→ links    38 found
→ queue    /catalog/valves     12 pages
→ done     12 pages · 0 errors
Routing

The runtime picks the model.

A step that reads a PDF goes to S. A page with a chart goes to SV. If a step fails, the Controller reroutes it to a model that can finish it.

Also routed

Gemini, Qwen, GLM, Kimi, Meta, Mistral, IBM.

Open weights and frontier models sit behind the same interface. Where a model runs is a deployment choice, not a rewrite.

Start here

Have a task? Get a quote.

One price, agreed before anything runs. You pay when it is done.