OPEN SOURCE. BUILT TO COMPOSE.↗

Decisions.
Generation.
One program.

Let Jev make the decisions. Let an LLM do the writing. Bring them together in a single Python workflow.

PYTHONCLIENT 3.10+ / RUNTIME 3.12+MIT

workflow.pyPYTHON
def annotate(anno):
    kind = anno.choice(
        "Classify this document.",
        {"event": "A specific event",
         "other": "Other content"},
    ).choice

    summary = ""
    if kind == "event":
        summary = anno.generate(
            "Summarize the event.",
            max_length=100,
            max_num_tokens=128,
        ).text

    return {"kind": kind,
            "summary": summary}
↓COMPILED INTO AN EXECUTION PLANANNOSCRIPT IR
{ }Shared state
JEVDecisionchoice · noul · score
LLMGenerationgenerate · extract
Typed result{ "kind": …, "summary": … }✓

AnnoScript/Programmable AI Annotation

ONE WORKFLOW. THE RIGHT MODEL FOR EACH STEP.
01 / WHY ANNOSCRIPT

Different strengths.
A shared workflow.

Real data pipelines need more than a generated answer. They need decisions, source evidence, and a result your code can use.

01

Give every operation the right backend.

Use a decision model for bounded choices and scores. Use an LLM for source extraction and open-ended writing. Configure the backends independently.

choice↗ JEVgenerate↗ LLM
02

Keep the control flow in your code.

Write branches, loops, and constraints in Python. AnnoScript compiles the program and coordinates dependencies, batching, and conditional generation.

if is_event:
summary = anno.generate(…)
03

Inspect the plan. Observe the run.

Inspect the IR before calling a model. During execution, trace physical requests and reported usage. Evaluate quality and cost on your own workload.

Decision ↘Generation ↘observable by design
02 / ANNOSCRIPT PLAYGROUND

From raw text
to usable intelligence.

Try a real automotive annotation workflow. Jev handles classification; Qwen extracts evidence and generates text. Every field runs through AnnoScript.

EDIT · RUN · EXPLORE
PYTHON 3.14 / ANNOSCRIPT / JEV + QWEN
Change the code, not just the input.
playground.pyEDITABLE
Assign your output to result.

Edit any part of the program, then run it.
How this Python playground works

Your Python runs in an isolated browser worker with the standard library and the real AnnoScript compiler/runtime. input_data is the JSON input; assign any JSON-compatible output to result. Use await run(function, input_data) for AnnoScript model workflows. Inside a AnnoScript function, the compiler supports its documented Python subset. A model session allows 120 seconds, 12 requests and 8,192 reserved output tokens. Stop terminates the worker. Provider keys stay on the server.

↳Edit and execute your Python program, or explore the complete automotive annotation example. Model outputs are predictions.

03 / INSTALL ANNOSCRIPT

Your next workflow
starts here.

Install AnnoScript. Explore a plan offline. Connect your models when you’re ready to run.

Python 3.12+MIT licensePyPI package
Read the documentation ↗

The compiler and remote client also support Python 3.10+. Local inference needs both a Decision service and a Generation service.

~/annoscriptQUICKSTART
1

Install from source

pip install 'annoscript[server]'
python -m annoscript.inspect   $(python -c "import annoscript_examples,pathlib; print(pathlib.Path(annoscript_examples.__file__).with_name('request.json'))")
2

Inspect without API keys

# Explore a compiled workflow. No API keys needed.
python -m annoscript.inspect $(python -c "import annoscript_examples,pathlib; print(pathlib.Path(annoscript_examples.__file__).with_name('request.json'))")
3

Connect your models and run

+
# Create a local .credential file with ANNO_* settings.
# Set your Decision + Generation endpoints and keys.
python -m annoscript_examples.run --env-file .credential \
  --mode speculative

Edit .credential with your provider endpoints, model names, and API keys. The saved synthetic example runs with the configured services.

INTELLIGENCE, COMPOSED.

The decisions are typed.
The possibilities are open.

Build with AnnoScript ↗