WEBVTT

NOTE Sentence-level transcript of https://www.youtube.com/watch?v=dZgA6btnb_s

NOTE One cue per sentence. Cue ids are the line anchors on /transcripts/dZgA6btnb_s.html. A cue ends where the next begins, or 2 s after its last word.

s1
00:00:01.309 --> 00:00:03.309
[music]

s2
00:00:12.600 --> 00:00:13.400
Hey, thanks for coming.

s3
00:00:13.400 --> 00:00:14.680
My name is Vinod Ganesh.

s4
00:00:14.680 --> 00:00:16.520
I'm the CEO of Kepler.

s5
00:00:16.520 --> 00:00:18.960
We have a few of my teammates here as well.

s6
00:00:18.960 --> 00:00:21.080
I'm excited to be here to chat with you.

s7
00:00:21.080 --> 00:00:27.640
So, the initial inception of this session comes from the World's Fair for AIE.

s8
00:00:27.640 --> 00:00:33.040
Where we discussed at a high level Kepler as a whole and how we do what we do.

s9
00:00:33.040 --> 00:00:44.880
Um and our big claim to fame right now and there's a new bunch of other stuff is Anthropic did a full deep dive into our architecture, our technology, and the biggest question that I got after the World's Fair presentation

s10
00:00:44.880 --> 00:00:47.400
was well, how do you actually do this?

s11
00:00:47.400 --> 00:00:56.480
Um so, our partners and friends at Turbo puffer have given me this session to talk about how we use Turbo puffer as a component of this overarching ecosystem.

s12
00:00:56.480 --> 00:01:01.560
Um also shameless plug, Jack and I are doing a talk on the main stage in about 25 minutes.

s13
00:01:01.560 --> 00:01:11.040
So, we're going to power through this and if you want to hear about fundamental investing in the age of AI, uh feel free to come to that 25 minutes from now.

s14
00:01:11.040 --> 00:01:14.120
Um so, to talk a little bit about uh so, quick background of myself.

s15
00:01:14.120 --> 00:01:14.880
Um again, I'm Vinod.

s16
00:01:14.880 --> 00:01:16.560
I'm the CEO of Kepler.

s17
00:01:16.560 --> 00:01:18.160
Uh began my career at Palantir.

s18
00:01:18.160 --> 00:01:20.160
I led the compute layer there.

s19
00:01:20.160 --> 00:01:25.760
Um then built my own data as a service company and then was head of business engineering at Citadel.

s20
00:01:25.760 --> 00:01:40.360
Um so, a lot of what we learned here in building uh Kepler comes directly from the experiences of understanding how to build and harness or a substrate or whatever the cool new word is in pretty aggressive environments

s21
00:01:40.360 --> 00:01:44.720
where accuracy and fidelity matter pretty aggressively.

s22
00:01:44.720 --> 00:01:47.560
So, let's talk a little bit about what Kepler does.

s23
00:01:47.560 --> 00:01:49.880
Um I know we're um we've been in a lot of places.

s24
00:01:49.880 --> 00:01:54.120
We're excited to be part of Gemini Force um blog post today as well.

s25
00:01:54.120 --> 00:01:55.880
Uh they've a new model out.

s26
00:01:55.880 --> 00:02:08.479
Um so, the core tenant is um, an analyst, if you're actually working in finance, you never show a client or your PM a number that they can't explicitly validate or trace.

s27
00:02:08.479 --> 00:02:18.080
So, when you see something like revenue grew 12.4% to 418.2 billion, these are actual numbers that need to be correct.

s28
00:02:18.080 --> 00:02:22.280
The challenge is we're all operating off of probability machines.

s29
00:02:22.280 --> 00:02:24.600
LLMs are at their core probability machines.

s30
00:02:24.600 --> 00:02:32.640
The same thing that makes them so creative and cool is the same thing that makes them very difficult to use in mission-critical situations.

s31
00:02:32.640 --> 00:02:36.640
So, a natural thing you see is people that attach sources after the fact.

s32
00:02:36.640 --> 00:02:42.360
Now, this is cool, but here's the problem that happens when you just attach a source after the fact.

s33
00:02:42.360 --> 00:02:47.920
First, LLMs don't actually read your documents, despite what many people think.

s34
00:02:47.920 --> 00:02:56.360
What they do is they chunk a bunch of things together, they do a semantic search, and they retrieve information that may be semi-relevant, if you're lucky.

s35
00:02:56.360 --> 00:03:00.519
So, the first big challenge a lot of people have is we have the wrong source.

s36
00:03:00.519 --> 00:03:08.720
Like, we've pulled information from Seeking Alpha or Venu's random YOLO blog that says Palantir will be worth $100,000 a share.

s37
00:03:08.720 --> 00:03:12.000
Or, we have the right source and the wrong number.

s38
00:03:12.000 --> 00:03:18.840
For example, when you read a 10K or a 10Q, you can imagine a world where I see the number 17.

s39
00:03:18.840 --> 00:03:20.840
Well, what does that correspond to?

s40
00:03:20.840 --> 00:03:26.959
Is it 17 million, 17 billion, is it 17 million yen, 17 million dollars?

s41
00:03:26.959 --> 00:03:34.560
Is it 17 million was the revenue of this company in the year 2023 in the 10K that's in 2025?

s42
00:03:34.560 --> 00:03:36.800
Or, is 17 the page number?

s43
00:03:36.800 --> 00:03:46.320
Like, all of these things are considerations that occur when we're actually working on any kind of environment that requires verifiability or numerical accuracy.

s44
00:03:46.320 --> 00:03:48.680
Finally, there's a piece of mental math.

s45
00:03:48.680 --> 00:04:00.160
Growth rates, margins, multiples, models are not actually doing Now, in some cases, they write code that does do math, but models themselves are not actually doing math in a way that ensures

s46
00:04:00.160 --> 00:04:02.480
fidelity and accuracy.

s47
00:04:02.480 --> 00:04:10.280
So, what we end up having to develop is an architecture where the model sites the numbers, but never writes them.

s48
00:04:10.280 --> 00:04:17.600
At its core and the magic that powers Kepler is retrieval finds the right source, thank you TurboPuffer, which we'll talk about.

s49
00:04:17.600 --> 00:04:25.960
Code does the math, and code meaning the model is not writing the math, but predetermined a deterministic code that we humans have written.

s50
00:04:25.960 --> 00:04:28.440
And we have a post-processing filter.

s51
00:04:28.440 --> 00:04:30.080
So, let's break this down.

s52
00:04:30.080 --> 00:04:35.680
So, what we did is we processed the entire corpus of SEC data.

s53
00:04:35.680 --> 00:04:38.720
Now, that's 30 plus million documents.

s54
00:04:38.720 --> 00:04:44.880
Um our friends at TurboPuffer will be hopefully working with us fairly soon on how we actually surface this to all of you.

s55
00:04:44.880 --> 00:04:50.760
Um but we ran a pre-processing step, and we registered what we're calling citations.

s56
00:04:50.760 --> 00:04:57.280
And so, citations are effectively the deterministic numerical numbers that we have pulled out of filings.

s57
00:04:57.280 --> 00:05:08.400
Things like revenue numbers, things like an income statement, a balance sheet, things like MD&amp;A that actually says, "Hey, my revenue grew 37% in human-written text."

s58
00:05:08.400 --> 00:05:11.160
There's about 20,000 of those.

s59
00:05:11.160 --> 00:05:26.600
There's three individual filing facts that we've revealed as citable anchors, which effectively means our ability to tell you where a number came from comes down to the ability to be able to click on a number and actually reference back a core document where that came from.

s60
00:05:26.600 --> 00:05:32.520
When we're running in production, we actually refuse citations that we can't verify.

s61
00:05:32.520 --> 00:05:39.680
Meaning, if I have a number that's not cited, the model is structurally incapable of producing this output.

s62
00:05:39.720 --> 00:05:44.840
Finally, uh the number of citations that the filter has correctly extracted, we got about 21,000.

s63
00:05:44.840 --> 00:05:48.080
I'll I'll through this in a little bit more detail.

s64
00:05:48.360 --> 00:05:57.120
How Kepler works and the piece and anthropic, if you want more information Google Kepler anthropic, you can read about is the language models themselves are planning.

s65
00:05:57.120 --> 00:06:03.440
Deterministic software handles every number or even more generally every single fact.

s66
00:06:03.440 --> 00:06:04.880
So, let's break this down.

s67
00:06:04.880 --> 00:06:06.440
A user asks the question.

s68
00:06:06.440 --> 00:06:15.920
The LLM then creates a plan with full knowledge of tooling, deterministic retrieval steps, uh citation filter, bounding boxes, and this whole thing.

s69
00:06:15.920 --> 00:06:18.000
Now, let's actually make this specific.

s70
00:06:18.000 --> 00:06:23.040
Let's say I'm saying, "What is the adjusted EBITDA of, you know, Google?"

s71
00:06:23.040 --> 00:06:26.160
Think about what's involved in getting answering that question.

s72
00:06:26.160 --> 00:06:31.600
I have to first retrieve a bunch of facts across 10-Ks, arguably over potentially different years.

s73
00:06:31.600 --> 00:06:42.200
I have to figure out, uh you know, in an investor presentation and an earnings call, what new information was disclosed or if a restatement came out and now I have to actually update a number.

s74
00:06:42.200 --> 00:06:45.240
All of that is what the model thinks through.

s75
00:06:45.240 --> 00:06:54.240
From there, we have tools that actually retrieve, compute, build tables, and register this entire infrastructure into a citation registry.

s76
00:06:54.240 --> 00:07:03.040
That citation registry is what allows us to not only give magnitude or metadata associated with numbers or facts, but type those facts.

s77
00:07:03.040 --> 00:07:05.440
So, a simple example here.

s78
00:07:05.440 --> 00:07:10.240
Let's say I do look at Palantir's 2025 10-K.

s79
00:07:10.240 --> 00:07:16.880
In there, it says Palantir's 2023 revenue was, you know, let's say a billion dollars.

s80
00:07:16.880 --> 00:07:20.400
All of those numbers that I just said need to be contextualized.

s81
00:07:20.400 --> 00:07:28.600
That billion dollars, even though it appears in the 10-K from 2025, has to be annotated and treated as 2023's data point.

s82
00:07:28.600 --> 00:07:29.840
I said billion.

s83
00:07:29.840 --> 00:07:34.080
Well, if you looked at a 10-K or a 10-Q, it usually says one.

s84
00:07:34.080 --> 00:07:37.640
The billions is up in the table somewhere far away floating around.

s85
00:07:37.640 --> 00:07:47.880
So, we have to somehow take these complex objects and actually give them the annotations to be able to pursue meaningful and traceable output that's actually correct.

s86
00:07:47.880 --> 00:07:50.720
Now, after the fact, models like saying stuff.

s87
00:07:50.720 --> 00:07:52.280
That is what they do.

s88
00:07:52.280 --> 00:07:59.120
So, what happens when a model actually invents a number that we cannot deterministically prove came from a trusted source?

s89
00:07:59.120 --> 00:08:03.920
We have to have a post process a post processing step to actually strip this information out.

s90
00:08:03.920 --> 00:08:14.240
And so, we do this and we give you the full traceability in the most I'm going to claim this and I think it's true in the most granular form of any tool on the market.

s91
00:08:14.240 --> 00:08:23.080
Which means you can click on everything in the Kepler platform and I'll show you screenshots that actually allow us to prove this architecture works globally.

s92
00:08:23.080 --> 00:08:31.840
So, um let's talk a little bit about how this works in the realm of Turbo Buffer who's uh been nice enough to give us a stage to have this conversation.

s93
00:08:31.840 --> 00:08:33.479
First and foremost, let's look at a 10K.

s94
00:08:33.479 --> 00:08:35.560
Let's say we see total net sales.

s95
00:08:35.560 --> 00:08:40.000
That fact that $416,000 $416,000 It's a good point, right?

s96
00:08:40.000 --> 00:08:41.280
We don't know what that means.

s97
00:08:41.280 --> 00:08:46.800
That $416,000 number um needs to have facts associated with it.

s98
00:08:46.800 --> 00:08:50.920
Things like a value, a unit, a scale, a period.

s99
00:08:50.920 --> 00:08:52.480
Now, here's the problem.

s100
00:08:52.480 --> 00:08:57.560
For those of you who work in this space, everyone can say XBRL solves all this issue.

s101
00:08:57.560 --> 00:09:01.520
We don't need to worry about pulling information out of documents.

s102
00:09:01.520 --> 00:09:06.320
That's true if XBRL weren't incorrect like some 10% of the time.

s103
00:09:06.320 --> 00:09:12.360
But even more so, how many people are just looking at public information when they're making investment decisions?

s104
00:09:12.360 --> 00:09:13.000
Fairly few.

s105
00:09:13.000 --> 00:09:21.520
They have their own One Drive, their own BIP sync, their own various investment memos that they've put together and a slew of internal information.

s106
00:09:21.520 --> 00:09:32.476
So, for our architecture to work, we have to work not just across 10Ks and 10Qs, but also on top of your internal data, your SharePoint, your Box, your Ignite, your One Drive, your Outlook.

s107
00:09:32.476 --> 00:09:32.480
[snorts]

s108
00:09:32.480 --> 00:09:37.720
So, we structure the data where the data structured and then we implement search where it isn't.

s109
00:09:37.720 --> 00:09:48.120
And what that allows us to do is create a namespace in Turbopuffer that actually combines both the BM25 and hybrid search with the full guarantees of the Kepler platform.

s110
00:09:48.640 --> 00:09:49.720
Here's how we do it.

s111
00:09:49.720 --> 00:09:52.040
And this is probably the slide I know people are taking photos.

s112
00:09:52.040 --> 00:09:53.480
This is the magical slide.

s113
00:09:53.480 --> 00:09:58.320
I'm not worried about revealing this because this is a very hard problem and it moves quickly.

s114
00:09:58.320 --> 00:10:05.240
So we use zero entropy so zero embeddings we use 1280 dimensions here.

s115
00:10:05.240 --> 00:10:11.960
ANN is approximate nearest neighbors plus BM25 is how we actually grab information across I look at everyone's taking photos.

s116
00:10:11.960 --> 00:10:13.087
This is amazing.

s117
00:10:13.087 --> 00:10:13.720
[laughter]

s118
00:10:13.720 --> 00:10:17.600
This is how we actually grab this information across our namespace.

s119
00:10:17.600 --> 00:10:27.080
We do do reciprocal re-rankings to actually make sure that we pull the right usually 60K or 60 documents back and then we do another form of re-ranking.

s120
00:10:27.080 --> 00:10:33.120
And this is a trusted form of re-ranking where we pull back the sources that we actually trust more than others.

s121
00:10:33.120 --> 00:10:39.160
For example, different sources will have different pieces of information that claim to be the same thing.

s122
00:10:39.160 --> 00:10:50.760
An earnings transcript an earnings call transcript where a presenter says my revenue was this that disagrees with exists in the 10K is actually a it's not a bug it's a feature.

s123
00:10:50.760 --> 00:10:54.800
There's two different pieces of information I have to actually deconflict across these.

s124
00:10:54.800 --> 00:10:56.720
So you need to be aware of that as well.

s125
00:10:56.720 --> 00:11:02.600
We use a cross encoder to actually do the re-ranking and then we return that result to the model.

s126
00:11:02.760 --> 00:11:06.800
This step in this process is predicated on two things.

s127
00:11:06.800 --> 00:11:14.160
It's predicated on one our ability to rerun embeddings as new information comes in incredibly cheaply.

s128
00:11:14.160 --> 00:11:16.360
So generating embeddings is not a cheap process.

s129
00:11:16.360 --> 00:11:26.200
If you can do it and you can do it efficiently great but if you're hosting your own embeddings model it becomes unless you're hosting your own embeddings model it becomes really expensive and very difficult.

s130
00:11:26.200 --> 00:11:30.160
So strategy here is we search wide then we re-rank.

s131
00:11:30.160 --> 00:11:33.200
Now there's tenant isolation that also becomes really important.

s132
00:11:33.200 --> 00:11:39.000
Now, when we actually hit any kind of a document, we have a bunch of different pieces that are important.

s133
00:11:39.000 --> 00:11:44.560
For example, it would be very unfortunate if Citadel Desk 1 saw Citadel Desk 2's research, right?

s134
00:11:44.560 --> 00:11:48.080
So, we have to have security built into the document level as well.

s135
00:11:48.080 --> 00:11:57.600
So, re- The first thing we do is if you start at that middle query that goes to the document, um every hit is reauthorized in Postgres, meaning we check the citation,

s136
00:11:57.600 --> 00:12:02.000
the value, the document across every one of these computations.

s137
00:12:02.000 --> 00:12:04.080
Every builder adds a new filter.

s138
00:12:04.080 --> 00:12:15.840
So, we're building up these complex filters over time that actually allow us to make sure that as we're querying information and querying data, we're not leaking data inadvertently across a bunch of different sources.

s139
00:12:15.840 --> 00:12:20.960
Only Auth itself can create a scoped token to actually create this information.

s140
00:12:20.960 --> 00:12:23.920
And of course, the user and aura come from a signed device.

s141
00:12:23.920 --> 00:12:30.800
So, this is the way that we ensure security, and this is the way that we ensure your alpha stays within your firm's ecosystem.

s142
00:12:30.800 --> 00:12:36.720
Alpha's an interesting question which we can talk about in a world where everyone has access to LLMs as well.

s143
00:12:36.880 --> 00:12:37.680
Cool.

s144
00:12:37.680 --> 00:12:42.000
Now, how do we make sure a number can appear in the Kepler platform?

s145
00:12:42.000 --> 00:12:46.400
First and foremost, we assign unique identifiers to each fact in our platform.

s146
00:12:46.400 --> 00:12:53.120
Meaning, we need to have identifiers that both can do entity recognition and entity resolution.

s147
00:12:53.120 --> 00:13:01.120
Each one of these source IDs corresponds to a bunch of metadata in a fact stored in a in a deterministic engine.

s148
00:13:01.120 --> 00:13:06.520
In order for us to show you the output in a way that's customizable, we need to have a display value.

s149
00:13:06.520 --> 00:13:16.640
So, if you want your whole Kepler platform in thousands of dollars or in yen or in any of these, we need to be able to post process and show you the actual output.

s150
00:13:16.640 --> 00:13:20.960
And we have to show you how we got it and where we got it from.

s151
00:13:20.960 --> 00:13:28.480
So, the invariant in Kepler, you can click on every number, every fact in the platform and see the actual source that we got it from.

s152
00:13:28.480 --> 00:13:33.920
And that's how we actually give you numbers that are truly citable, deterministic, and reproducible.

s153
00:13:33.920 --> 00:13:37.160
This is also the item potent guarantee that we're able to give to people.

s154
00:13:37.160 --> 00:13:44.920
By having this guarantee, we can run the same query over and over again wherever and get the same results.

s155
00:13:45.880 --> 00:13:50.520
So, here is what we uh have to deal with.

s156
00:13:50.520 --> 00:13:57.440
When we ran this whole corpus of data, um a third of all of our citations are the math that the model didn't do.

s157
00:13:57.440 --> 00:14:10.000
What that means is pulling every one of these citations out, whether it's web results, spreadsheets, whether it's coming from a filing exhibit, the model itself can make up a bunch of things from its own corpus or its own

s158
00:14:10.000 --> 00:14:16.360
um training set that are really, really difficult to work around, especially when you go to historical data.

s159
00:14:16.360 --> 00:14:22.240
For example, looking up a revenue number from 2005 likely lives within the model's training corpus.

s160
00:14:22.240 --> 00:14:29.760
But it if we retrieve it from that corpus, we can't guarantee that it was pulled correctly from the right year and right scope, and that we can actually trace it back.

s161
00:14:29.760 --> 00:14:39.839
So, just off of a whole, a third of this are math that the model that a third of all citations are the math the models did not do.

s162
00:14:39.920 --> 00:14:42.200
Now, how do we actually do this live?

s163
00:14:42.200 --> 00:14:53.160
As tokens move forward as we're flowing kind of like we're doing inference, um we give these filters and these references to an LLM that has to actually resolve these.

s164
00:14:53.160 --> 00:14:56.200
Think of this as the LLM dereferences the pointer.

s165
00:14:56.200 --> 00:15:02.880
We then have a registry where the sources themselves are looked up, and we pull information out of that registry to give you the traceability.

s166
00:15:02.880 --> 00:15:09.120
Now, the really powerful thing here is when we don't have a match, we strip that number.

s167
00:15:09.120 --> 00:15:11.040
That's a very aggressive thing to do.

s168
00:15:11.040 --> 00:15:17.760
It means your LLM will not be that wonderful thought partner that you thought it would be, where it would make up, speculate, and project.

s169
00:15:17.760 --> 00:15:24.560
This means at this moment, and I'll say this, Kepler's not a super useful tool if you rely on model hallucinations.

s170
00:15:24.560 --> 00:15:32.040
Meaning if you're trying to be creative or you're trying to I don't know, write marketing content, Kepler's not the right product to use.

s171
00:15:32.040 --> 00:15:41.280
That means there are certain industries in finance where opportunistically selling, like banking, probably don't rely on numerical accuracy because your job is to sell an offering.

s172
00:15:41.280 --> 00:15:46.560
It's not to create a DCF that's backed by accurate traceable information.

s173
00:15:46.560 --> 00:15:57.440
So, by checking against our sources, we've effectively created a ground truth retrieval engine across any corpus of data, including public equities as well as your own internal data.

s174
00:15:57.440 --> 00:16:00.160
Now, this is annoying.

s175
00:16:00.160 --> 00:16:04.640
This means the platform cannot be as magically powerful as many people want it to be.

s176
00:16:04.640 --> 00:16:09.560
So, how do we actually ensure whether we should strip a citation or whether we should try to repair it?

s177
00:16:09.560 --> 00:16:17.200
And so, the core insight here is we have a post-processing step that actually tries to do a citation repair.

s178
00:16:17.200 --> 00:16:28.800
Which effectively means if we find information that we can't reliably trace, should we try to repair that and do an on-the-fly agentic determination that says this information came from this source?

s179
00:16:28.800 --> 00:16:31.400
The answer is in certain spaces we actually do do that.

s180
00:16:31.400 --> 00:16:39.560
And that's probably the second piece of this presentation that we can keep a little bit, um, kind of like wishy-washy, which is how Kepler maintains its IP.

s181
00:16:39.880 --> 00:16:40.520
Cool.

s182
00:16:40.520 --> 00:16:45.880
Um, now, when we actually run these queries, there are some numbers that I think are worthwhile to share.

s183
00:16:45.880 --> 00:16:57.320
Because most people in this industry right now are wrapping a lot of financial research with an LLM and they're saying, "Great, everything is right as long as things are, you know, ragged properly, I should be good to go."

s184
00:16:57.320 --> 00:17:06.880
So, our filter across native, just like running it on Claude or ChatGPT, um, refused 10,981 citations from our evals.

s185
00:17:06.880 --> 00:17:13.400
Meaning 10,000 about, I guess, 3,810 of these were just straight-up wrong numbers.

s186
00:17:13.400 --> 00:17:16.720
This is the scariest thing ever if you live in financial analytics.

s187
00:17:16.720 --> 00:17:26.160
This means hooking up Claude to uh, uh or open AI or any of these models to just a native rag tool or a vector database actually isn't enough.

s188
00:17:26.160 --> 00:17:31.760
Now, there's really cool things that you can do if you're looking at just semantic search and that's it.

s189
00:17:31.760 --> 00:17:38.160
But if you're looking at anything that requires numerical accuracy and auditability, you actually can't trust regular rag platforms.

s190
00:17:38.160 --> 00:17:41.800
This is a scary thing for a lot of startups that are effectively chat GPT wrappers.

s191
00:17:41.800 --> 00:17:43.440
I'm not saying that in a negative way.

s192
00:17:43.440 --> 00:17:46.040
It's the reality of where we are right now.

s193
00:17:46.040 --> 00:17:57.680
So, a new kind of architecture has to emerge and that architecture has to combine both the auditability and traceability with the deterministic elements of of course like numerical accuracy.

s194
00:17:58.200 --> 00:17:59.880
Um models don't do math.

s195
00:17:59.880 --> 00:18:03.880
This is pretty simple and I think it's actually pretty critical um insight here.

s196
00:18:03.880 --> 00:18:15.120
Uh anytime that we see some kind of situation where the model is uh forced to do math or if it can't reason through something, we effectively make that impossible.

s197
00:18:15.120 --> 00:18:20.320
By having that post post processing step, the model can't actually write something it can't cite.

s198
00:18:20.320 --> 00:18:23.600
Meaning the model is structurally incapable and I'll be careful.

s199
00:18:23.600 --> 00:18:28.360
The platform is structurally incapable of producing hallucinated numbers.

s200
00:18:28.360 --> 00:18:32.280
The model can still hallucinate and it definitively does.

s201
00:18:32.680 --> 00:18:33.000
Cool.

s202
00:18:33.000 --> 00:18:40.920
Let's talk a little bit about what Kepler looks like and this is a tiny sliver of what our platform does when we show the deterministic traceability and all that.

s203
00:18:40.920 --> 00:18:44.440
Um happy to chat through uh this as if it's if it's useful.

s204
00:18:44.440 --> 00:18:57.360
But a simple question like Apple's 2025 revenue and how fast it grew, every number being clickable means by clicking on these, you see not only the 10-K or the 10-Q or the 8-K or the investor presentation that it came from,

s205
00:18:57.360 --> 00:19:00.600
but you see the actual calculations that are done behind the scenes.

s206
00:19:00.600 --> 00:19:09.800
Things like I did these two numbers and I have a 6.4% um increase all becomes present and traceable on the platform.

s207
00:19:09.800 --> 00:19:13.480
So, this architecture I think will become the standard.

s208
00:19:13.480 --> 00:19:26.360
Um, the opportunity in front of people that are building financial research tools or operating in the realm of AI is right now limited by the lack of architecture that actually supports the workflows you want to do.

s209
00:19:26.360 --> 00:19:42.720
You can set up fully managed agents right now that try to ask for ideas based on, you know, generated information, but you still can't produce a DCF, which is why we still have analysts down the street from here or working right now on stripping information out of S-1s and taking information from a PDF

s210
00:19:42.720 --> 00:19:44.480
and putting it into Excel.

s211
00:19:44.480 --> 00:19:46.520
Our goal is to end that.

s212
00:19:46.520 --> 00:19:54.640
And so, um, I do want to end on a kind of one very important thing, which is our guarantees do end somewhere.

s213
00:19:54.640 --> 00:19:57.000
We make models site numbers, not write them.

s214
00:19:57.000 --> 00:19:59.240
We verify every citation.

s215
00:19:59.240 --> 00:20:03.800
Uh, we push arithmetic to the compute layer, not to the model layer.

s216
00:20:03.800 --> 00:20:06.440
We isolate tenants and we measure recall.

s217
00:20:06.440 --> 00:20:13.640
This means we can actually guarantee that the ground truth research that you do in your platform is unique and powerful.

s218
00:20:13.640 --> 00:20:19.440
It does not mean that we can create a full-scale hedge fund that's replacing everyone, at least right now.

s219
00:20:19.440 --> 00:20:28.520
And so, I see the move, and we'll talk about this in, I guess, 30 seconds as we go, uh, to the next place, but, um, the move that I'm seeing is folks will be more quantamental.

s220
00:20:28.520 --> 00:20:29.320
This is the future.

s221
00:20:29.320 --> 00:20:30.640
This is the opportunity.

s222
00:20:30.640 --> 00:20:42.320
The more that we can use unique retrieval mechanisms in conjunction with, of course, deterministic retrieval, um, we'll end up in a really powerful place where AI can finally do the stuff that we don't want to do

s223
00:20:42.320 --> 00:20:45.440
instead of sitting there and doing the ideating that we do want to do.

s224
00:20:45.440 --> 00:20:48.600
With that, um, there's an appendix here, but thank you so much.

s225
00:20:48.600 --> 00:20:51.064
Uh, I appreciate the time.

s226
00:20:51.064 --> 00:20:53.064
[applause]
