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.

Valid JSON can still say{ "answer": 2 }Valid format, wrong count.
Struct’s recorded answer3Correct. The fruit can relax.

Now make every word count.

Recorded output

STRAWBERRY10 words. Every initial in order.

The 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 output

All 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.

Same prompt. Three exact counts.
ModelResultTime
Blatent StructPass0.35 s
GPT-6 AstraPass11.03 s
GPT-6 SolPass8.18 s
GPT-6 LunaFail16.46 s
Claude Fable 5.1Pass9.95 s
Claude Opus 5.5Pass6.79 s
Claude Sonnet 5Pass36.84 s
Claude Haiku 4.5Fail1.10 s
Gemini 3.1 Pro PreviewPass51.49 s
Gemini 3.8 FlashPass50.23 s
Gemini 3.5 Flash-LiteFail0.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

Employee report

“I approved a login after someone from IT messaged me about the VPN. Now a supplier says I emailed new bank details. I never sent that email.”

Security context

  • Unfamiliar device signed in.
  • New inbox rule hides invoice and bank-transfer emails.

Agent permissions

Agent can: revoke sessions.

Cannot: block payments.

02Understand the threat

Critical
Suspected 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 takeover

  • Required

    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.

What comes with the model call?
CapabilityStructOpenAIClaudeGemini
JSON Schema coverageExtended supportComposition, dependencies, exclusionsLimited subsetLimited subsetLimited subset
Conditionals and switchesif / then / elseSupportedNot built inNot built inNot built in
For-each over application stateSupportedOne result per supplied itemNot built inNot built inNot built in
Exact quotes from the inputEnforced during decodingVerbatim source textNot built inSeparate citationsOutside strict JSONNot built in
State and permission rulesEnforcedSupplied facts and permissionsNot built inNot built inNot built in
Cross-field and calculation checksEnforced by policyNot built inNot built inNot built in
Search for a policy-compliant answerBuilt-in policy retriesWithin your configured budgetNot built inNot built inNot 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?

Source

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

62%

Lower estimated cost

03 A shorter long wait

36%

Lower mean dataset p95

04 More accurate

+5.85pp

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.

View
↑ More accurateBlatent StructOther modelsPareto frontier
← FasterMean p50 latency · log scale

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.