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.3.tar.gz (593.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.3-py3-none-any.whl (593.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: model_language-1.0.3.tar.gz
  • Upload date:
  • Size: 593.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.3.tar.gz
Algorithm Hash digest
SHA256 903f6f5c3bcbf5d46c97debda532c452c695de0ca4f088cba69d8732bfaaf495
MD5 8b4dc227ab7c457a56cff4957bacdabf
BLAKE2b-256 95313e3a94f79f99c6b7062b75709bd94d7755f7f53f542b612d65d489a82069

See more details on using hashes here.

File details

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

File metadata

  • Download URL: model_language-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 593.6 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c52a68991385429864418a9d5257f34d83862f604b7253cecaf7edf5adc3af79
MD5 4aa41e0768c77121b5ada4bb10dfd579
BLAKE2b-256 8d5bd68e1d359969090f33e3cf273140020e9129565bf1af8495cd2c607e81e6

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