What if AI
kept its word?
Introducing Struct. The intelligence of a language model, with rules your software can rely on.
Meet Struct.
AI can follow instructions. Software needs guarantees.
General-purpose LLMs are remarkably good at understanding language. But there's a difference between understanding the rules and being bound by them.
Tell a model not to approve an expense above the spending limit, and it will usually comply. Usually. Not exactly the word you want in an approval system.
So developers build entire systems around the model—validating outputs, retrying failures, enforcing rules and making yet more model calls. What started as one clever API call becomes a whole engineering project just to make its decisions reliable.
We built Blatent Struct to change that.
The idea is programmable AI: give the model freedom to interpret messy language, make decisions and generate responses, while making the requirements it must satisfy enforceable. With JSON Schema and policies, Struct can search for a valid, permitted result rather than simply hoping the instructions were followed. If it can't find one, it returns an explicit failure.
That means less infrastructure to build and maintain, whether you're evaluating expense claims, triaging security incidents or controlling what an AI agent is allowed to do.
The model gets to be clever. Your rules get the final say.
Confidence is not a count.
How many “r”s are in “strawberry”? Three. Not exactly rocket science. Yet plenty of fast decision models get it wrong, often with remarkable confidence. And they'll happily return that wrong answer in perfectly valid JSON. Unfortunately, perfectly formatted nonsense is still nonsense.
Struct gets the count right. But counting letters is a modest ambition. Ask it to write a poem whose successive word initials spell “strawberry”, and the same idea becomes more interesting: the words are its choice; the initials are your rule.
A small fruit. A surprisingly useful test.
{ "answer": 2 }Valid format, wrong count.3Correct. The fruit can relax.Now make every word count.
Recorded outputThe schema asks for a keyword and a poem. The policy checks that the word count and initials match the keyword.
Valid JSON was the beginning.
JSON solves a real problem: software needs an answer it can parse. A schema goes further, defining fields, types and possible branches. But { "poem": "anything at all" } can be valid JSON and a valid object with a string field. It still tells you very little about the poem.
A policy lets you express what must be true of the result. The initials must match another field. The amounts must add up. The dates must be in order. The proposed action must be allowed for the user making the request.
Struct combines language understanding with JSON Schema and policies written in Rego, the language of Open Policy Agent. Those policies are evaluated against the generated result and the context you supply before a successful answer is returned.
The model can choose the answer.
It cannot choose whether your rules apply.
When a candidate fails, Struct can search for a compliant alternative within your configured budget. If it cannot find one, you get an explicit failure. Your application receives a result it is allowed to use, or a failure it can handle.
Soft light. Hard requirements.
Let’s give the poet an acceptance test: use the whole word “light” exactly three times, “soft” once, and the letter “i” six times. All three constraints, in the same poem.
Blatent Struct
actual outputAll three rules satisfied.
Soft light fills the air, light glints on dew, light wakes the day.
Literary taste is still yours. The counts are checkable. Select a rule to see it in the poem.
| Model | Result | Time |
|---|---|---|
| Blatent Struct | Pass | 0.35 s |
| GPT-6 Astra | Pass | 11.03 s |
| GPT-6 Sol | Pass | 8.18 s |
| GPT-6 Luna | Fail | 16.46 s |
| Claude Fable 5.1 | Pass | 9.95 s |
| Claude Opus 5.5 | Pass | 6.79 s |
| Claude Sonnet 5 | Pass | 36.84 s |
| Claude Haiku 4.5 | Fail | 1.10 s |
| Gemini 3.1 Pro Preview | Pass | 51.49 s |
| Gemini 3.8 Flash | Pass | 50.23 s |
| Gemini 3.5 Flash-Lite | Fail | 0.90 s |
Competitors use default reasoning settings.
About 19× faster and 620× cheaper than the next fastest passing model in this example.
Less poetry. More production.
You probably aren’t shipping a poetry API. But you might be triaging security alerts, choosing an agent’s next tool or checking an invoice. The same principle applies: let the model make the judgement. Make the rules enforceable.
Security triage
Assess the alert. Propose a response the caller is permitted to take.
Agent tool selection
Choose an allowed tool, with the arguments that tool requires.
Document checks
Extract invoice fields and flag discrepancies. Enforce that totals match line items and references match the records your application supplies.
Security triage
A suspicious login. A payment at risk.
Struct connects the clues, identifies the threat and returns actions that follow your policies.
01Read
Security context
- Unfamiliar device signed in.
- New inbox rule hides invoice and bank-transfer emails.
02Understand the threat
CriticalSuspected account takeover and payment fraud
The login, hidden emails and denied bank-detail change suggest someone is using the mailbox to divert payments.
That triggers a Finance escalation as well as account containment.
03Enforce policy
Permitted
Revoke active sessions
acct_042· Suspected account takeoverRequired
Alert Finance / Fraud
Critical · Suspected payment diversion
Security review
Investigate inbox rule
Possible concealment of financial emails
Payment hold excluded: no approval.
Less surrounding machinery.
Branch on a decision. Check a calculation. Keep an answer within the facts and permissions your application supplies. Struct brings those rules into the model call.
| Capability | Struct | OpenAI | Claude | Gemini |
|---|---|---|---|---|
| JSON Schema coverage | Extended supportComposition, dependencies, exclusions | Limited subset | Limited subset | Limited subset |
Conditionals and switchesif / then / else | Supported | Not built in | Not built in | Not built in |
| For-each over application state | SupportedOne result per supplied item | Not built in | Not built in | Not built in |
| Exact quotes from the input | Enforced during decodingVerbatim source text | Not built in | Separate citationsOutside strict JSON | Not built in |
| State and permission rules | EnforcedSupplied facts and permissions | Not built in | Not built in | Not built in |
| Cross-field and calculation checks | Enforced by policy | Not built in | Not built in | Not built in |
| Search for a policy-compliant answer | Built-in policy retriesWithin your configured budget | Not built in | Not built in | Not built in |
Swipe or scroll to compare all providers.
Straight from the source.
Ask a question about your source text. Struct selects an answer from it and returns those words unchanged.
Which Block I CSM was not launched in August?
Two Block I CSMs were launched from LC-34 on suborbital flights in 1966 with the Saturn IB. The first, AS-201 launched on February 26…
01 From the source
Struct’s answer
“AS-201”Exact source text
02 Lower cost
Lower estimated cost
03 A shorter long wait
Lower mean dataset p95
04 More accurate
Percentage points more accurate
And it still has to be fast.
Struct makes individual decisions fast. When those decisions become part of a complex workflow, it stays efficient by narrowing the possibilities at each step. More branches don't have to mean more waiting.
Let’s put some numbers to that.
Intelligence you can build on.
We want AI to keep doing extraordinary things. We also want its intelligence to be practical enough to call from ordinary software, thousands or millions of times, with the requirements spelled out in advance.
That's why we built Struct.