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.2.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.2-py3-none-any.whl (588.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: model_language-1.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 132d99ffaa9e27f7759a493cc3d11f5ea0e7ebc7ee4f1e8ffa1718389d5966cf
MD5 494b767a61476f5cb125533b37f3c553
BLAKE2b-256 97294f8d07748089bb2d548c8c43704e71cfd72e8b96b6f83b07e75571dc8dfb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: model_language-1.0.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8e3115b9ed5ca552ad036452fb456d31d228f19c884937e53372fdb179c609b3
MD5 f51f8c3f57409c1756675617b2fab532
BLAKE2b-256 aa25861c21f27457a642d553f6874cc96374a7c1aa254e8438abe52a3f1d30ca

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