← All talks

AI Engineer NYC 2026 Online track · 15 min

Building Reliable, yet Smart Workflows for Finance, Wealth and Insurance

Karthic RaoPerpetual

A request to complete one form can become a process lasting days. Karthic Rao follows that request through Perpetual’s compiler, approval gates, and typed model calls.

One sentence creates a multi-day process

4:50:25 ↗

An advisor asks an assistant to fill out a W-9 for Mr. Harper. The first lookup finds three Harper households. Before any form can be completed, somebody must ask which one the advisor means.

At Perpetual, where Karthic Rao applies AI to the operations of acquired wealth-management firms, this ambiguity is ordinary work. So are missing records, sensitive information, and clients who take days to reply. The system has to keep the process moving across those interruptions.

In the example, the assistant finds the form, resolves the household ambiguity, and discovers three missing values. Existing records do not supply them, so the assistant asks the client. If no reply arrives, the workflow follows up and alerts the advisor. A partial answer requires another request. Once the information is complete, the assistant records both the values and how they were obtained, prepares the form for signature, waits again, files the signed result, and updates the advisor.

Every answer changes what can happen next. The system must remember what it asked, what the client supplied, and which approval is still missing. The short instruction has become a process crossing several systems and lasting days. 4:52:45

Compile the request before running it

4:57:27 ↗

Rao assigns control flow, evidence, and external side effects to deterministic software. Models handle interpretation and judgment at specific points. A model can interpret an ambiguous reply; the engine decides how that interpretation affects execution.

The first model call translates the request into a typed semantic graph of intents, entities, facts, artifacts, events, and constraints. Each node points back to the request text that supports it. A compiler then processes the graph without calling a model. It returns a valid plan, asks for clarification, or refuses the request. “Which Harper?” becomes a question instead of a guess.

The compiler checks proposed actions against 42 typed action contracts spanning forms, documents, email, signatures, calendars, and human steps. Unknown actions and invalid wiring fail closed. The engine, backend, and interface use the same version of those definitions, identified by a digest. Once valid, the plan is fixed and identified by its hash.

A person approves that plan before execution. The compiler can also add required steps the planner did not explicitly request: render a PDF, attach it, or judge the reply. Those obligations come from action definitions rather than a model remembering every prerequisite.

Perpetual source workflow showing form preparation, PDF rendering, email drafting, sending approval, reply waiting, judging, verification, archiving approval, and follow-up.

The compiled W-9 workflow at 5:01:02 separates model judgments, waiting, and gated actions.

Waiting and uncertain outcomes are execution states

5:01:11 ↗

Most of the human work in the opening story involved waiting, checking, and following up. The engine represents those as steps in the plan. Its default reply wait is 72 hours, and deadlines can be configured. When a deadline passes, a rule selects the next action.

Approving the plan does not authorize every future external action. Sending an email or signature request has its own gate, tied to a hash of the actual payload and checked again immediately before sending. If the draft changes, it is no longer the same approved payload.

A model may judge a reply to be partial, but that judgment remains provisional until a person confirms it. A follow-up then runs as a child plan, preserving the approved parent. Rao describes a limit of five follow-up rounds.

Side effects have a separate lifecycle: prepared, dispatching, succeeded, or an uncertain outcome that requires manual review. If the outside service does not answer cleanly, the engine does not automatically repeat the action and risk sending or filing twice. A chat message can answer a question or approve a pending step; it cannot rewrite the already approved plan.

This design keeps the model's contribution inspectable. It answers a fixed-schema question—compose an email, classify a reply, extract a field—and returns control to the state machine.

Make smaller judgments easier to run privately

5:03:01 ↗

After planning, most model calls are narrow. Rao argues that a fast, smaller model can answer many of them without frontier-level reasoning. His illustration routes 19 of 20 decisions to a fast tier and one to a frontier model. The roughly 95% figure is a design target illustrated by that run, not a measured deployment-wide result.

Typed judgments and human confirmation also create useful evaluation records. Perpetual already logs and evaluates these calls; Rao describes training the smaller tier from them as the next step. The proposed loop would reduce the portion of work requiring a frontier model over time. 5:03:40

Small, schema-checked calls offer a path toward privately hosted inference because the surrounding workflow does not depend on a particular model's free-form behavior. The engine can keep governing execution while the models improve or become cheaper. Logged judgments and human corrections give the team examples to train and evaluate that smaller tier. The workflow stays recognizable; fewer of its decisions need an expensive model.

Further reading

Original standalone recording ↗AI Engineer’s separate publication of Karthic Rao’s complete presentation.

Full transcript

Timestamps follow the original livestream. Select a time to watch that moment. Transcripts are machine-generated with reviewed name and terminology corrections; occasional recognition errors may remain.

4:50:25

Hello, I'm Karthic, CTO at Perpetual.

4:50:28

In this presentation, I'll talk about building workflows that are both reliable and intelligent for finance, wealth and insurance.

4:50:35

In regulated domains, workflows must be reliable enough to meet regulatory standards while still being intelligent enough to handle the real world.

4:50:43

In fields such as finance and wealth management, this presents both a technical and a compliance issue.

4:50:48

Reliability and intelligence are not opposites.

4:50:51

It is up to you where you draw the boundary between them.

4:50:54

And that is the point of this talk, deciding where that boundary lies.

4:50:57

For us, it's not merely a thought experiment, but a question that surfaces serious consequences.

4:51:03

Perpetual is a wealth management roll-up.

4:51:05

We acquire running traditional wealth management firms.

4:51:08

And we maximize their throughput and revenue with the help of AI.

4:51:13

Wealth management is a regulated industry.

4:51:15

And that is where we build with AI in production.

4:51:18

Everything in this talk is grounded in building for those constraints.

4:51:23

Workflows in finance and wealth management come with four facts,

4:51:26

and each of them pushes the architecture in the same direction.

4:51:30

First, they're complex and they need runtime strategies as the process unfolds.

4:51:34

You can't script every path in advance.

4:51:37

Second, the data is sensitive, so you need a path to move these workflows entirely onto privately hosted models.

4:51:43

Third, in a highly regulated industry, a policy violation isn't a bug report.

4:51:48

It has severe consequences.

4:51:50

So, fourth, execution has to be highly reliable and deterministic.

4:51:55

Inject intelligence only where runtime judgment is genuinely required

4:51:59

and minimize reliance on LLMs everywhere else.

4:52:04

AI is spreading through regulated industries,

4:52:07

but there's still no consensus on an architecture

4:52:09

that gives you high reliability with the least use of LLM intelligence.

4:52:13

Meanwhile, most of what developers hear from the big labs is how to burn more tokens.

4:52:18

But in a regulated industry, token maxing is the wrong goal.

4:52:22

These tasks are close to main.

4:52:24

You can lay them out in advance and build them into a massive state machine.

4:52:28

And that machine needs only a sprinkle of intelligence to navigate it.

4:52:31

Most steps just follow the next edge.

4:52:34

Only at a few judgment points does the model pick a branch.

4:52:38

So the intelligent way to build is to use intelligence minimally and on purpose.

4:52:45

Let's make this concrete with a real wealth management workflow.

4:52:49

A wealth advisor turns to their assistant and says one sentence.

4:52:53

Fill out the IRS W-9 for Mr. Harper to a person that's a simple instruction.

4:52:58

Watch what it actually triggers when a human being executes it.

4:53:02

The task has complexities that go beyond what meets the eye.

4:53:06

First, the assistant finds form W-9 from the firm's records or from the IRS website.

4:53:11

Then they look for Mr Harper in the system of record and find

4:53:14

three Harper households. So they call the advisor. Which Harper

4:53:18

do you mean? Only once that ambiguity is resolved do they move

4:53:21

on to the form. A lookup, an ambiguity and a human in the loop

4:53:25

all in the first minute of a one line task.

4:53:34

Filling a form sounds like data entry. It isn't. Every form is a

4:53:38

small program. A W9 first decides who the taxpayer is, the person or the owner if it's a disregarded

4:53:46

entity. A foreign person stops right here because they need a W8 instead. Then how they're taxed?

4:53:53

Exactly one box on line 3A and an LLC adds its letter. That decides which name goes on line 1

4:54:00

and which on line 2. Then whose number? An SSN or an EIN. Never both. Taken from a verified document.

4:54:08

never from memory. Exemption codes apply only to some entities and never to an S-corporation.

4:54:14

And finally, who signs under penalties of perjury? Each answer changes the next question

4:54:19

and the people involved only ever see three kinds of gates, a question, a document to collect, or

4:54:25

a signature. Now they start filling the form and realize the system of record is missing three of

4:54:35

the values it needs. They check the documents on file and the system of record again still

4:54:41

missing so they start an email thread with the client asking for exactly those three

4:54:45

values. The task now depends on someone outside the firm on their timeline.

4:54:55

now the workflow waits. The request is with the client and all three values are still

4:55:00

missing. If the client doesn't reply within two days, the assistant follows up and brings

4:55:05

it to the advisor at the daily stand up. If the client replies with only two of the three values,

4:55:09

they follow up again for the missing one. When all three arrive, they complete the form and write

4:55:14

the new information back to the system of record, including the trail of how they obtained those

4:55:19

values. In this industry, how you know a value matters as much as the value itself.

4:55:33

Once the form is filled, it goes out for e-signature.

4:55:36

If the client doesn't sign within a day or two, the assistant nudges them again.

4:55:41

Once it's signed, they file it for the client, send the acknowledgement and update the advisor

4:55:46

at the next day's stand-up.

4:55:47

One sentence from the advisor became a process that runs for days, crosses several systems,

4:55:52

weights on two people and loops back on itself more than once.

4:56:10

Look at what's inside that one sentence. Ambiguity to resolve

4:56:16

data together. Approvals, weights measured in days, follow-up loops and an

4:56:22

evidence trail at the end.

4:56:29

Workflow automation tools exist, but they rarely handle this real-world complexity and

4:56:34

ambiguity.

4:56:35

A fixed flowchart breaks at the first witch harbour and the lack of a native system of

4:56:40

record with an integration and an agent that improvises its way through is exactly what

4:56:45

a compliance team can't sign off on.

4:56:47

One breaks on ambiguity, the other can't be signed off.

4:56:50

neither handles what's inside that sentence. So what do we do about it? The fashionable framing

4:56:56

is more agency and better models. Given agent the whole task and wait for the next model to

4:57:03

make it reliable. The reflexive answer, especially inside regulated firms, is the opposite. Less

4:57:09

agency, more rules, lock it down and hard code every path. Both are the wrong axis.

4:57:16

In regulated verticals, reliability comes from where you place the boundary between the two,

4:57:22

between the parts that must be deterministic and the parts that genuinely need judgment.

4:57:27

Here's the principle.

4:57:29

Determinism governs control flow, evidence, and side effects.

4:57:33

What runs next, what we know, and how we know it, and anything that changes the world,

4:57:38

like a record written, an email sent, or a form filed.

4:57:47

Intelligence provides interpretation and judgment. Reading an ambiguous instruction, deciding which Harper, understanding a client's reply. The model answers a typed question and the deterministic system decides what to do with the answer and the interplay is recursive. A judgment can open a new smaller plan that's compiled, gated and deterministic again. You'll see that in a moment with follow ups. The boundary between the two is the design.

4:58:15

Here's how that works in the workflow engine we've built.

4:58:26

The request goes to a planner. That is a model call and its

4:58:31

only job is translation. It emits a typed semantic graph of

4:58:35

intents, entities, facts, artifacts, events, and

4:58:39

constraints, each grounded in the words of the request with any

4:58:42

any ambiguities it found. Every node points back to the words

4:58:46

it came from. That graph goes to a compiler that never calls a

4:58:50

model. In 11 deterministic stages, it turns the graph into

4:58:53

an execution tag or it fails closed. There are only three

4:58:58

verdicts. Valid needs clarification or refused.

4:59:04

Which Harper comes back as a question, not a guess. The plan is

4:59:08

is compiled, immutable and pinned by its hash.

4:59:21

The model translates. The plan is compiled. The compiler checks

4:59:26

the plan against the grammar. The vocabulary of what the firm

4:59:30

is allowed to do. 42 typed action contracts across forms,

4:59:34

documents, email, e-signature, calendar and human steps.

4:59:39

Each action the planner asks for has to match a contract. Here

4:59:44

form fill finds its forms contract and locks in. If the

4:59:48

planner asks for an action that isn't in the grammar or wires

4:59:51

one up wrong, the compiler refuses.

4:59:54

There are about 40 ways to fail closed from a cycle in the graph

4:59:58

to an unsupported action

5:00:00

And the same contract digest is pinned in the engine, the backend and the UI. So all three agree on what an action means. That is what a closed domain buys you. The model can only ask for things the firm already knows how to do safely. Here is a compiled plan for a W9 chase. Send the client the form, wait for it to come back, check it and file it.

5:00:21

Before anything runs, a person approves the plan itself.

5:00:26

Find the form, prepare it for the client to fill, render the PDF and draft the email.

5:00:31

Drafting is a model call, so it is violet.

5:00:38

Sending is an action gate. Nothing leaves the firm until a person approves that exact email.

5:00:44

Then the plan waits for a reply and a judge steps in to read it.

5:00:49

The returned form is verified. If it matches, it's archived behind another gate. If it doesn't,

5:00:56

the plan follows up. Now look at the dashed steps. Rendering the PDF, attaching it, judging the reply.

5:01:05

The planner never asked for them. The grammar added them because the contracts require them.

5:01:11

In the story, waiting, approvals, and follow-ups were most of the work.

5:01:15

Here there are nodes in the plan, not prompts. A reply wait defaults to 72 hours and an explicit

5:01:23

deadline can be anything from a minute to 30 days. When it passes, a rule decides what happens,

5:01:30

not a model. One approval covers the plan and every external action like sending an email or

5:01:36

a signature request has its own gate. The approval is tied to a hash of the exact payload and it's

5:01:42

checked again right before sending. When a client replies with only part of what we asked,

5:01:48

the reply judge marks it partial. That judgment is provisional. The step stays blocked until a

5:01:54

person confirms it. A person confirms it and the step unblocks. Then the follow-up runs as a new

5:02:00

child plan. The approved parent is never changed and there are at most five rounds.

5:02:11

Once a plan is approved, a state machine runs it. It picks every step and records every result.

5:02:18

When a step needs judgment, it makes one fixed schema model call. Compose an email, judge or

5:02:24

reply, spot missing values, extract fields, verify a document. The answer comes back typed,

5:02:31

and the state machine decides what to do with it. Side effects get a life cycle of their own.

5:02:36

Prepare, dispatching, succeeded, or when the world doesn't answer cleanly, outcome unknown,

5:02:42

and manual review. There are no automatic retries. A chat message can approve a step

5:02:48

or answer a question. It can't change an already approved plan. The model steers. It never drives.

5:03:01

Now look at what is left for the model to do. Outside the planner, the judgments are

5:03:05

small and typed. Is this reply complete? Does this document match? Which field is which?

5:03:11

They don't need frontier intelligence. A fast small model, the flash tier, can handle

5:03:17

them. In this illustrative run of 20 decisions, 19 go to the flash tier and one goes to the

5:03:23

frontier. That is why we designed for about 95% of model decisions in a workflow never

5:03:30

never needing a frontier model and the flash tier can run on

5:03:33

hardware you control. Only the genuinely hard cases go to a

5:03:37

frontier model.

5:03:40

the 5% is not a permanent tax because every judgment is

5:03:45

typed and logged and the provisional ones are confirmed

5:03:48

or rejected by a person. Each frontier decision produces

5:03:51

eval grade distribution real training data by construction.

5:03:55

That data can post train the flash tier. Logging and evals

5:04:01

exist today. The training loop is next. So the frontier share

5:04:05

shrinks release over release until even the hard cases run

5:04:09

locally.

5:04:16

Remember the requirement we started with because data is

5:04:20

sensitive. You need a path to move workflows entirely to

5:04:24

privately hosted LLMs. So can this design really get there? Take

5:04:28

one type call from the Harper Burbinine plan. Every model call

5:04:33

is small, typed and checked against a schema. So pointing it

5:04:37

at a privately hosted model is a configuration change, not a

5:04:41

rewrite. One line changes and the same answer comes back. Every

5:04:45

other call has that same small type shape. So the same change

5:04:49

applies to almost all of them.

5:04:51

That is how about 95% local inference becomes viable as an architectural consequence, not a policy promise.

5:04:59

That is the path that sensitive data demands and compliance risk goes down as an engineering roadmap, release by release.

5:05:07

So if you remember one thing, don't ask whether your system should have more agency or less.

5:05:14

Ask where the boundary is.

5:05:15

Let determinism govern control flow, evidence and side effects.

5:05:20

Let intelligence handle interpretation and judgment.

5:05:24

At typed points, you can inspect and use every judgment you log to need less of it next time.

5:05:30

Ask where the boundary is. Thank you.

5:05:32

I'm Karthic, CTO at Perpetual.