Skip to main content

AIL — Python interpreter for the AI-Intent Language. fn (pure) + intent (LLM) declarations, provenance, purity contracts, confidence-aware match, calibration

Project description

AIL — An AI-Authored Programming Language

A programming language where AI is the programmer and humans are the stakeholders.

Install

pip install ail-interpreter
# or: pip install 'ail-interpreter[anthropic]'   # for the Anthropic adapter

The PyPI distribution is ail-interpreter — this wheel is the Python interpreter of AIL, not the language itself. The canonical spec lives in spec/ and a second interpreter lives in go-impl/. (ail and ailang are both unavailable on PyPI for naming-policy reasons.) The Python import name is ail:

from ail import run, ask

and the CLI is ail.


The idea

AIL has two kinds of functions:

pure fn word_count(text: Text) -> Number {
    return length(split(text, " "))
}

intent classify(text: Text) -> Text {
    goal: positive_negative_or_neutral
}

entry main(review: Text) {
    words = word_count(review)       // pure fn — no LLM, confidence 1.0
    label = classify(review)         // intent — LLM call, confidence ≤ 1.0
    return join([label, " (", to_text(words), " words)"], "")
}

pure fn is for what the AI can compute — sorting, parsing, arithmetic. Deterministic, no LLM call, no side effects, statically checked.

intent is for what the AI needs to reason about — sentiment, summarization, translation. The runtime dispatches to a language model and returns a (value, confidence) pair.

The language distinguishes the two at declaration time, so you always know which calls are free and deterministic and which need a model.


Two ways humans use it

ail ask — the natural interface

export AIL_OLLAMA_MODEL=llama3.1:latest   # or ANTHROPIC_API_KEY=...
ail ask "Count the vowels in 'Hello World'"
# 3

ail ask "factorial of 7" --show-source
# 5040
# (stderr) --- AIL ---
# (stderr) pure fn factorial(n: Number) -> Number {
# (stderr)     if n <= 1 { return 1 }
# (stderr)     return n * factorial(n - 1)
# (stderr) }
# (stderr) entry main(x: Text) { return factorial(7) }

Human types English. An LLM writes AIL. The runtime executes it. The human sees the answer. The AIL is transparent infrastructure — inspectable on demand, invisible by default.

ail run — for programs written explicitly

ail run examples/fizzbuzz.ail --input "20" --mock

When you want to read or write AIL yourself.


What's in v1.8

Feature What it does
pure fn Statically verified — no intents, no effects, no impurity leaks
intent LLM-backed, returns (value, confidence)
Provenance Every value carries its origin tree; queryable via origin_of, lineage_of, has_intent_origin, has_effect_origin
Calibration Confidence recalibrates from observed outcomes. calibration_of("intent") introspectable from code
attempt Confidence-priority fallback cascade — cheap pure try first, LLM only as fallback
match Pattern matching with confidence guards — "positive" with confidence > 0.9 => ...
Parallelism Independent intent calls run concurrently with no async/await
Effects perform http.get(url), perform file.read(path), etc.
Evolve Intents can self-modify (retune, rewrite constraints) with rollback and history
ail ask Natural-language → AIL authoring loop with parse-error retry

Adapters for Anthropic, Ollama (local), and Mock (tests) ship built-in. A second interpreter in Go (see the project repo) runs the same .ail files with no Python installed at all.


Python API

from ail import run, ask, AskResult

# Direct program run:
result, trace = run("path/to/program.ail", input="hello")
result.value        # the entry's return value
result.confidence   # calibrated confidence
result.origin       # full provenance tree

# Natural-language interface:
r = ask("compute the factorial of 7")
r.value             # 5040
r.ail_source        # the AIL the author produced
r.retries           # 0 if first try parsed

See the language reference card for the complete surface.


Why this exists

Humans don't write AIL. Humans say what they want in natural language; an LLM writes AIL; the runtime executes it; the result comes back.

The value of the language is in what it guarantees about the code the AI writes:

  • Every pure computation is statically separated from every LLM call.
  • Every value carries the full chain of operations that produced it.
  • Confidence is a first-class runtime property, recalibrated by observation.
  • A pure fn that passes parsing is proven to contain no LLM call, no side effect, and no path to one. The model cannot slip an intent past the compiler.
  • Independent LLM calls parallelize without the author writing async.

For the full design rationale, see the spec.


License

Apache 2.0.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

ail_interpreter-1.69.0.tar.gz (438.2 kB view details)

Uploaded Source

Built Distribution

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

ail_interpreter-1.69.0-py3-none-any.whl (326.1 kB view details)

Uploaded Python 3

File details

Details for the file ail_interpreter-1.69.0.tar.gz.

File metadata

  • Download URL: ail_interpreter-1.69.0.tar.gz
  • Upload date:
  • Size: 438.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for ail_interpreter-1.69.0.tar.gz
Algorithm Hash digest
SHA256 dff3e089d9292b653d15a58fbd8479c6ab5132556a1ae90479f3f740c23df8b9
MD5 2a4e4ec3c3650521f75d788a3af9acc2
BLAKE2b-256 416e16d380162b4bf910fed6f1eb36fbecca9f4330a9fbf1d164370b521cf17f

See more details on using hashes here.

File details

Details for the file ail_interpreter-1.69.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ail_interpreter-1.69.0-py3-none-any.whl
Algorithm Hash digest
SHA256 10bb5aeac927e91d2f48a6f38358183bbed9cd969db350a9d46bc799c3c1e6a0
MD5 4048b3bcf7bdfadac9e5cac99c49c221
BLAKE2b-256 a5e207d07eb920cb88cf3d366b1e51aacf1104bae5706c7d18d794e5bf25dc20

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