Skip to main content

Python bindings for model-language — a typed, safe template language for AI-agent prompts. Runs the exact same engine as the TypeScript package via a WebAssembly (WASI) module.

Project description

model-language (Python)

Python bindings for model-language — a typed, safe template language for AI-agent prompts.

Powered by the production model-language engine compiled to a WebAssembly module: templates render byte-for-byte identically in Python and JavaScript, a guarantee enforced by a shared conformance/ suite run in CI. Fast (parse once, render many), sandboxed, and it never crashes — template problems degrade to empty output plus a warning.

Live demo — try the language in a Tiptap editor (live validation, autocomplete, real-time render), powered by the same engine.

Filters format values — dates, numbers, text:

{{ user.created_at | date: "MMM D, YYYY" }}            →  Jul 5, 2026
{{ user.created_at | date: "h:mm A", "Europe/Kyiv" }}  →  5:37 PM
{{ user.last_seen  | time_ago }}                       →  3 days ago

Usage

from model_language import render, validate, parse

out = render(
    "Hi {{ user.name | default: 'there' }}!",
    data={"user": {"name": "Vasyl"}},
)
print(out["text"])          # -> "Hi Vasyl!"

diags = validate(
    "{{if user.plan == 'premium'}}x{{/if}}",
    schema=[{"path": "user.plan", "type": "enum", "values": ["free", "pro"]}],
)
print([d["code"] for d in diags["diagnostics"]])   # -> ["ML202"]
  • render(template, data=None, schema=None, options=None){"text", "warnings", "resolvedBranches", "directives", "tokenEstimate"}. Pass options={"now": <epoch_ms>} for datetime filters (the sandbox has no ambient clock; it defaults to 0). Pass options={"snippets": {...}} for {{include}}.
  • validate(template, schema=None, options=None){"diagnostics", "maxTokenEstimate"}. Pass options={"maxTokenEstimate": N} to raise ML213 over a token budget.
  • parse(template){"ast", "diagnostics"}.

Nothing raises for template problems — they degrade to empty output plus a warnings/diagnostics entry.

Build (from source)

The bindings host model_language.wasm, built from the TypeScript engine:

# 1. Build the WASI module (from the repo root, needs Node + pnpm + the javy CLI)
pnpm install && pnpm wasm:build

# 2. Run the conformance parity tests
pip install wasmtime pytest
cd hosts/python && python -m pytest -q

The loader finds the module at ../wasm/dist/model_language.wasm by default; set MODEL_LANGUAGE_WASM to point at a prebuilt one. Requires wasmtime>=25.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

model_language-1.0.4.tar.gz (593.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

model_language-1.0.4-py3-none-any.whl (593.7 kB view details)

Uploaded Python 3

File details

Details for the file model_language-1.0.4.tar.gz.

File metadata

  • Download URL: model_language-1.0.4.tar.gz
  • Upload date:
  • Size: 593.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for model_language-1.0.4.tar.gz
Algorithm Hash digest
SHA256 6b7f03075af7f6fd7a57ad7d6dc3ab6a5b919997c1a3490d9f2a283f8f7e75db
MD5 fc552c842e1b4db87ac842056f1c8183
BLAKE2b-256 779b138c374016d59bce661dd9e21850eb9080291cc5eb69d8002b012902829b

See more details on using hashes here.

File details

Details for the file model_language-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: model_language-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 593.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for model_language-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a70800a7057f373e086af9777fd05000d8771a94a0cca9372a35f7ae5df47bf3
MD5 90fe8bba42f0297dd81e8003a97fcffb
BLAKE2b-256 2ff4ab7d17029d304d2f1f9eea6a5cec2925dcb7c3e0d011c6d72ba91dd3ae32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page