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.

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.0.tar.gz (588.4 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.0-py3-none-any.whl (588.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: model_language-1.0.0.tar.gz
  • Upload date:
  • Size: 588.4 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.0.tar.gz
Algorithm Hash digest
SHA256 7dd81190b98f7ed6e68ceeab94fe22041da4618ac7adb86ef12744b4b6ded2b0
MD5 f083ab057cd5ca939d7c3ee3532a73b3
BLAKE2b-256 99f8f70a46a4321512c1a1c741b5b241e26b6b31d71fe5f0b03c3b4e5df80c46

See more details on using hashes here.

File details

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

File metadata

  • Download URL: model_language-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 588.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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5388473d1a781b29e5efb781e30e0b1ccde5ff2f18c0c2cc6ba2825f6f2e37db
MD5 bd2aed5ad86ed0719dcfe06d5fee3a31
BLAKE2b-256 3cd768fa0d279ac4c43dac6713b7c114f14d2def45e4de1976841ae28829bbe4

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