How it works
Compile once
A large generative LLM scaffolds your execution paths a single time, from a sample of your data, a goal, and a registry of actions. A self-correction loop validates every response — syntax checks, output contracts, import blocklist — before anything is emitted.
Ship one file
The output is a single standalone Python file. Your production environment never imports strot — no framework, no lock-in, just code you can read and version.
Route deterministically
At runtime, a small fast NLU model routes each record to the right action in ~60ms on CPU. Below a 0.40 confidence threshold it raises a FallbackException instead of executing blindly.
In practice
import strot
tickets = [
{"ticket_id": 101, "channel": "email", "body": "I was double charged"},
{"ticket_id": 102, "channel": "chat", "body": "App crashes on export"},
]
result = strot.run(
tickets,
query="Triage incoming support tickets into the correct workflow.",
action_registry={
"billing_dispute": "Refunds, invoice corrections, double charges",
"technical_defect": "Crashes, bugs, broken behavior",
},
llm="anthropic/claude-opus-4-8", # used once, on first compile
)
for o in result.outcomes:
print(o["action"], round(o["confidence"], 2))
# billing_dispute 0.97
# technical_defect 0.94Benchmarks & research
Honest, reproducible benchmarks — published as we run STROT on new data over time. Wins and losses included.
Results on real data
Routing +18pp, text classification +14pp on the same model; cyber and finance narratives, and where a small model hits its ceiling.
Paper ↗The STROT framework
Structured task reasoning and output — the ideas behind compile-once, decide-forever.
Reproducible ↗Run them yourself
Every number ships with a script in the repo — clean Docker, real datasets, losses published.
