1
00:00:00,761 --> 00:00:03,401
Hello, I'm Karthic, CTO at Perpetual.

2
00:00:03,681 --> 00:00:10,701
In this presentation, I'll talk about building workflows that are both reliable and intelligent for finance, wealth and insurance.

3
00:00:10,941 --> 00:00:18,281
In regulated domains, workflows must be reliable enough to meet regulatory standards while still being intelligent enough to handle the real world.

4
00:00:18,401 --> 00:00:23,721
In fields such as finance and wealth management, this presents both a technical and a compliance issue.

5
00:00:23,981 --> 00:00:26,241
Reliability and intelligence are not opposites.

6
00:00:26,241 --> 00:00:29,101
It is up to you where you draw the boundary between them.

7
00:00:29,281 --> 00:00:32,441
And that is the point of this talk, deciding where that boundary lies.

8
00:00:32,861 --> 00:00:37,741
For us, it's not merely a thought experiment, but a question that surfaces serious consequences.

9
00:00:38,201 --> 00:00:40,221
Perpetual is a wealth management roll-up.

10
00:00:40,361 --> 00:00:43,201
We acquire running traditional wealth management firms.

11
00:00:43,701 --> 00:00:47,481
And we maximize their throughput and revenue with the help of AI.

12
00:00:48,301 --> 00:00:50,481
Wealth management is a regulated industry.

13
00:00:50,661 --> 00:00:53,521
And that is where we build with AI in production.

14
00:00:53,521 --> 00:00:57,321
Everything in this talk is grounded in building for those constraints.

15
00:00:58,461 --> 00:01:01,721
Workflows in finance and wealth management come with four facts,

16
00:01:01,901 --> 00:01:05,001
and each of them pushes the architecture in the same direction.

17
00:01:05,341 --> 00:01:09,581
First, they're complex and they need runtime strategies as the process unfolds.

18
00:01:09,941 --> 00:01:12,041
You can't script every path in advance.

19
00:01:12,561 --> 00:01:18,781
Second, the data is sensitive, so you need a path to move these workflows entirely onto privately hosted models.

20
00:01:18,781 --> 00:01:23,821
Third, in a highly regulated industry, a policy violation isn't a bug report.

21
00:01:24,001 --> 00:01:25,501
It has severe consequences.

22
00:01:25,961 --> 00:01:30,181
So, fourth, execution has to be highly reliable and deterministic.

23
00:01:30,341 --> 00:01:34,321
Inject intelligence only where runtime judgment is genuinely required

24
00:01:34,321 --> 00:01:37,461
and minimize reliance on LLMs everywhere else.

25
00:01:39,361 --> 00:01:42,061
AI is spreading through regulated industries,

26
00:01:42,261 --> 00:01:44,561
but there's still no consensus on an architecture

27
00:01:44,561 --> 00:01:48,521
that gives you high reliability with the least use of LLM intelligence.

28
00:01:48,781 --> 00:01:53,641
Meanwhile, most of what developers hear from the big labs is how to burn more tokens.

29
00:01:53,921 --> 00:01:57,461
But in a regulated industry, token maxing is the wrong goal.

30
00:01:57,641 --> 00:01:59,061
These tasks are close to main.

31
00:01:59,361 --> 00:02:02,981
You can lay them out in advance and build them into a massive state machine.

32
00:02:03,321 --> 00:02:06,681
And that machine needs only a sprinkle of intelligence to navigate it.

33
00:02:06,981 --> 00:02:09,101
Most steps just follow the next edge.

34
00:02:09,501 --> 00:02:12,561
Only at a few judgment points does the model pick a branch.

35
00:02:13,121 --> 00:02:17,501
So the intelligent way to build is to use intelligence minimally and on purpose.

36
00:02:20,241 --> 00:02:23,541
Let's make this concrete with a real wealth management workflow.

37
00:02:24,181 --> 00:02:27,941
A wealth advisor turns to their assistant and says one sentence.

38
00:02:28,281 --> 00:02:33,201
Fill out the IRS W-9 for Mr. Harper to a person that's a simple instruction.

39
00:02:33,781 --> 00:02:37,301
Watch what it actually triggers when a human being executes it.

40
00:02:37,601 --> 00:02:40,941
The task has complexities that go beyond what meets the eye.

41
00:02:41,261 --> 00:02:46,021
First, the assistant finds form W-9 from the firm's records or from the IRS website.

42
00:02:46,021 --> 00:02:49,701
Then they look for Mr Harper in the system of record and find

43
00:02:49,701 --> 00:02:53,341
three Harper households. So they call the advisor. Which Harper

44
00:02:53,341 --> 00:02:56,861
do you mean? Only once that ambiguity is resolved do they move

45
00:02:56,861 --> 00:03:00,901
on to the form. A lookup, an ambiguity and a human in the loop

46
00:03:00,901 --> 00:03:03,001
all in the first minute of a one line task.

47
00:03:09,121 --> 00:03:13,801
Filling a form sounds like data entry. It isn't. Every form is a

48
00:03:13,801 --> 00:03:21,281
small program. A W9 first decides who the taxpayer is, the person or the owner if it's a disregarded

49
00:03:21,281 --> 00:03:27,781
entity. A foreign person stops right here because they need a W8 instead. Then how they're taxed?

50
00:03:28,241 --> 00:03:35,541
Exactly one box on line 3A and an LLC adds its letter. That decides which name goes on line 1

51
00:03:35,541 --> 00:03:43,341
and which on line 2. Then whose number? An SSN or an EIN. Never both. Taken from a verified document.

52
00:03:43,341 --> 00:03:48,841
never from memory. Exemption codes apply only to some entities and never to an S-corporation.

53
00:03:49,361 --> 00:03:54,581
And finally, who signs under penalties of perjury? Each answer changes the next question

54
00:03:54,581 --> 00:04:00,941
and the people involved only ever see three kinds of gates, a question, a document to collect, or

55
00:04:00,941 --> 00:04:10,541
a signature. Now they start filling the form and realize the system of record is missing three of

56
00:04:10,541 --> 00:04:16,181
the values it needs. They check the documents on file and the system of record again still

57
00:04:16,181 --> 00:04:20,981
missing so they start an email thread with the client asking for exactly those three

58
00:04:20,981 --> 00:04:25,361
values. The task now depends on someone outside the firm on their timeline.

59
00:04:30,941 --> 00:04:35,201
now the workflow waits. The request is with the client and all three values are still

60
00:04:35,201 --> 00:04:40,101
missing. If the client doesn't reply within two days, the assistant follows up and brings

61
00:04:40,101 --> 00:04:44,841
it to the advisor at the daily stand up. If the client replies with only two of the three values,

62
00:04:44,961 --> 00:04:49,821
they follow up again for the missing one. When all three arrive, they complete the form and write

63
00:04:49,821 --> 00:04:54,521
the new information back to the system of record, including the trail of how they obtained those

64
00:04:54,521 --> 00:04:59,621
values. In this industry, how you know a value matters as much as the value itself.

65
00:05:08,101 --> 00:05:10,761
Once the form is filled, it goes out for e-signature.

66
00:05:11,541 --> 00:05:15,381
If the client doesn't sign within a day or two, the assistant nudges them again.

67
00:05:16,181 --> 00:05:21,141
Once it's signed, they file it for the client, send the acknowledgement and update the advisor

68
00:05:21,141 --> 00:05:22,581
at the next day's stand-up.

69
00:05:22,801 --> 00:05:27,901
One sentence from the advisor became a process that runs for days, crosses several systems,

70
00:05:27,901 --> 00:05:31,421
weights on two people and loops back on itself more than once.

71
00:05:45,421 --> 00:05:49,661
Look at what's inside that one sentence. Ambiguity to resolve

72
00:05:51,221 --> 00:05:57,481
data together. Approvals, weights measured in days, follow-up loops and an

73
00:05:57,481 --> 00:05:58,641
evidence trail at the end.

74
00:06:04,641 --> 00:06:09,521
Workflow automation tools exist, but they rarely handle this real-world complexity and

75
00:06:09,521 --> 00:06:09,941
ambiguity.

76
00:06:10,321 --> 00:06:15,201
A fixed flowchart breaks at the first witch harbour and the lack of a native system of

77
00:06:15,201 --> 00:06:20,501
record with an integration and an agent that improvises its way through is exactly what

78
00:06:20,501 --> 00:06:22,201
a compliance team can't sign off on.

79
00:06:22,361 --> 00:06:25,341
One breaks on ambiguity, the other can't be signed off.

80
00:06:25,341 --> 00:06:31,401
neither handles what's inside that sentence. So what do we do about it? The fashionable framing

81
00:06:31,401 --> 00:06:38,221
is more agency and better models. Given agent the whole task and wait for the next model to

82
00:06:38,221 --> 00:06:44,581
make it reliable. The reflexive answer, especially inside regulated firms, is the opposite. Less

83
00:06:44,581 --> 00:06:51,201
agency, more rules, lock it down and hard code every path. Both are the wrong axis.

84
00:06:51,201 --> 00:06:57,021
In regulated verticals, reliability comes from where you place the boundary between the two,

85
00:06:57,461 --> 00:07:02,261
between the parts that must be deterministic and the parts that genuinely need judgment.

86
00:07:02,641 --> 00:07:03,361
Here's the principle.

87
00:07:04,301 --> 00:07:07,941
Determinism governs control flow, evidence, and side effects.

88
00:07:08,201 --> 00:07:13,421
What runs next, what we know, and how we know it, and anything that changes the world,

89
00:07:13,581 --> 00:07:17,121
like a record written, an email sent, or a form filed.

90
00:07:22,761 --> 00:07:50,261
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.

91
00:07:50,261 --> 00:07:52,761
Here's how that works in the workflow engine we've built.

92
00:08:01,701 --> 00:08:06,021
The request goes to a planner. That is a model call and its

93
00:08:06,021 --> 00:08:10,701
only job is translation. It emits a typed semantic graph of

94
00:08:10,701 --> 00:08:14,181
intents, entities, facts, artifacts, events, and

95
00:08:14,181 --> 00:08:17,721
constraints, each grounded in the words of the request with any

96
00:08:17,721 --> 00:08:21,801
any ambiguities it found. Every node points back to the words

97
00:08:21,801 --> 00:08:25,501
it came from. That graph goes to a compiler that never calls a

98
00:08:25,501 --> 00:08:28,921
model. In 11 deterministic stages, it turns the graph into

99
00:08:28,921 --> 00:08:33,041
an execution tag or it fails closed. There are only three

100
00:08:33,041 --> 00:08:36,301
verdicts. Valid needs clarification or refused.

101
00:08:39,501 --> 00:08:43,861
Which Harper comes back as a question, not a guess. The plan is

102
00:08:43,861 --> 00:08:46,741
is compiled, immutable and pinned by its hash.

103
00:08:56,981 --> 00:09:01,561
The model translates. The plan is compiled. The compiler checks

104
00:09:01,561 --> 00:09:05,221
the plan against the grammar. The vocabulary of what the firm

105
00:09:05,221 --> 00:09:09,821
is allowed to do. 42 typed action contracts across forms,

106
00:09:09,821 --> 00:09:13,841
documents, email, e-signature, calendar and human steps.

107
00:09:14,501 --> 00:09:19,241
Each action the planner asks for has to match a contract. Here

108
00:09:19,241 --> 00:09:23,041
form fill finds its forms contract and locks in. If the

109
00:09:23,041 --> 00:09:26,641
planner asks for an action that isn't in the grammar or wires

110
00:09:26,641 --> 00:09:28,781
one up wrong, the compiler refuses.

111
00:09:29,401 --> 00:09:33,441
There are about 40 ways to fail closed from a cycle in the graph

112
00:09:33,441 --> 00:09:34,901
to an unsupported action

113
00:09:35,141 --> 00:09:57,001
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.

114
00:09:57,001 --> 00:10:00,861
Before anything runs, a person approves the plan itself.

115
00:10:01,101 --> 00:10:06,301
Find the form, prepare it for the client to fill, render the PDF and draft the email.

116
00:10:06,941 --> 00:10:09,241
Drafting is a model call, so it is violet.

117
00:10:13,661 --> 00:10:19,281
Sending is an action gate. Nothing leaves the firm until a person approves that exact email.

118
00:10:19,641 --> 00:10:23,121
Then the plan waits for a reply and a judge steps in to read it.

119
00:10:24,681 --> 00:10:31,701
The returned form is verified. If it matches, it's archived behind another gate. If it doesn't,

120
00:10:31,901 --> 00:10:40,141
the plan follows up. Now look at the dashed steps. Rendering the PDF, attaching it, judging the reply.

121
00:10:40,441 --> 00:10:46,421
The planner never asked for them. The grammar added them because the contracts require them.

122
00:10:46,881 --> 00:10:50,961
In the story, waiting, approvals, and follow-ups were most of the work.

123
00:10:50,961 --> 00:10:58,681
Here there are nodes in the plan, not prompts. A reply wait defaults to 72 hours and an explicit

124
00:10:58,681 --> 00:11:04,881
deadline can be anything from a minute to 30 days. When it passes, a rule decides what happens,

125
00:11:05,161 --> 00:11:11,661
not a model. One approval covers the plan and every external action like sending an email or

126
00:11:11,661 --> 00:11:17,941
a signature request has its own gate. The approval is tied to a hash of the exact payload and it's

127
00:11:17,941 --> 00:11:22,881
checked again right before sending. When a client replies with only part of what we asked,

128
00:11:23,161 --> 00:11:29,801
the reply judge marks it partial. That judgment is provisional. The step stays blocked until a

129
00:11:29,801 --> 00:11:35,601
person confirms it. A person confirms it and the step unblocks. Then the follow-up runs as a new

130
00:11:35,601 --> 00:11:40,901
child plan. The approved parent is never changed and there are at most five rounds.

131
00:11:46,641 --> 00:11:53,141
Once a plan is approved, a state machine runs it. It picks every step and records every result.

132
00:11:53,361 --> 00:11:59,601
When a step needs judgment, it makes one fixed schema model call. Compose an email, judge or

133
00:11:59,601 --> 00:12:06,081
reply, spot missing values, extract fields, verify a document. The answer comes back typed,

134
00:12:06,081 --> 00:12:11,201
and the state machine decides what to do with it. Side effects get a life cycle of their own.

135
00:12:11,781 --> 00:12:17,541
Prepare, dispatching, succeeded, or when the world doesn't answer cleanly, outcome unknown,

136
00:12:17,781 --> 00:12:23,401
and manual review. There are no automatic retries. A chat message can approve a step

137
00:12:23,401 --> 00:12:29,901
or answer a question. It can't change an already approved plan. The model steers. It never drives.

138
00:12:36,081 --> 00:12:40,321
Now look at what is left for the model to do. Outside the planner, the judgments are

139
00:12:40,321 --> 00:12:46,801
small and typed. Is this reply complete? Does this document match? Which field is which?

140
00:12:47,001 --> 00:12:52,221
They don't need frontier intelligence. A fast small model, the flash tier, can handle

141
00:12:52,221 --> 00:12:58,881
them. In this illustrative run of 20 decisions, 19 go to the flash tier and one goes to the

142
00:12:58,881 --> 00:13:05,141
frontier. That is why we designed for about 95% of model decisions in a workflow never

143
00:13:05,141 --> 00:13:08,321
never needing a frontier model and the flash tier can run on

144
00:13:08,321 --> 00:13:12,661
hardware you control. Only the genuinely hard cases go to a

145
00:13:12,661 --> 00:13:13,281
frontier model.

146
00:13:15,421 --> 00:13:20,041
the 5% is not a permanent tax because every judgment is

147
00:13:20,041 --> 00:13:23,281
typed and logged and the provisional ones are confirmed

148
00:13:23,281 --> 00:13:26,961
or rejected by a person. Each frontier decision produces

149
00:13:26,961 --> 00:13:30,981
eval grade distribution real training data by construction.

150
00:13:30,981 --> 00:13:36,521
That data can post train the flash tier. Logging and evals

151
00:13:36,521 --> 00:13:40,281
exist today. The training loop is next. So the frontier share

152
00:13:40,281 --> 00:13:44,461
shrinks release over release until even the hard cases run

153
00:13:44,461 --> 00:13:44,881
locally.

154
00:13:51,841 --> 00:13:55,641
Remember the requirement we started with because data is

155
00:13:55,641 --> 00:13:59,361
sensitive. You need a path to move workflows entirely to

156
00:13:59,361 --> 00:14:04,001
privately hosted LLMs. So can this design really get there? Take

157
00:14:04,001 --> 00:14:08,081
one type call from the Harper Burbinine plan. Every model call

158
00:14:08,081 --> 00:14:12,461
is small, typed and checked against a schema. So pointing it

159
00:14:12,461 --> 00:14:16,061
at a privately hosted model is a configuration change, not a

160
00:14:16,061 --> 00:14:20,621
rewrite. One line changes and the same answer comes back. Every

161
00:14:20,621 --> 00:14:24,641
other call has that same small type shape. So the same change

162
00:14:24,641 --> 00:14:26,181
applies to almost all of them.

163
00:14:26,181 --> 00:14:34,221
That is how about 95% local inference becomes viable as an architectural consequence, not a policy promise.

164
00:14:34,601 --> 00:14:42,481
That is the path that sensitive data demands and compliance risk goes down as an engineering roadmap, release by release.

165
00:14:42,941 --> 00:14:48,861
So if you remember one thing, don't ask whether your system should have more agency or less.

166
00:14:49,201 --> 00:14:50,521
Ask where the boundary is.

167
00:14:50,881 --> 00:14:55,541
Let determinism govern control flow, evidence and side effects.

168
00:14:55,541 --> 00:14:58,841
Let intelligence handle interpretation and judgment.

169
00:14:59,281 --> 00:15:05,621
At typed points, you can inspect and use every judgment you log to need less of it next time.

170
00:15:05,881 --> 00:15:07,801
Ask where the boundary is. Thank you.

171
00:15:08,001 --> 00:15:10,521
I'm Karthic, CTO at Perpetual.
