WEBVTT

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

NOTE One cue per sentence. Cue ids are the line anchors on /transcripts/7v2myBde05o.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.480 --> 00:00:13.040
everyone.

s3
00:00:13.040 --> 00:00:16.640
Uh I'm Sam and thank you for coming to this talk today.

s4
00:00:16.640 --> 00:00:21.760
So I'm the CTO at Gravity uh and one of the sponsors events and I've gone a little bit different.

s5
00:00:21.760 --> 00:00:31.199
So, I'm not going to go through kind of reams and reams of slides around why governance is important and how you'd look to secure your agents and all of those architecture diagrams.

s6
00:00:31.199 --> 00:00:35.040
Instead, I built essentially two agents and we're going to go through it today.

s7
00:00:35.040 --> 00:00:35.600
Okay.

s8
00:00:35.600 --> 00:00:39.760
So, I'm sure you've all uh got an AI policy.

s9
00:00:39.760 --> 00:00:43.280
You've got kind of a framework of how you want your agents to operate.

s10
00:00:43.280 --> 00:00:45.680
You've got people exploring AI.

s11
00:00:45.680 --> 00:00:52.480
So a recent survey we did showed 88% of organizations had an agent in production actually taking action.

s12
00:00:52.480 --> 00:00:55.680
Only 14% of those had any governance around it.

s13
00:00:55.680 --> 00:01:03.280
And I'm sure you've all seen in the press or LinkedIn or any articles around when things go wrong, they go really really wrong.

s14
00:01:03.280 --> 00:01:08.479
You lose databases, you expose PII, there's heavy fines from the ICO coming your way.

s15
00:01:08.479 --> 00:01:15.280
if you start to leak sensitive information, especially if you're in a HIPPA or a GDPR kind of type landscape.

s16
00:01:15.280 --> 00:01:24.320
So the question isn't like how do we kind of secure the agent within its own kind of context or prompt is how do we remove that to be within its identity

s17
00:01:24.320 --> 00:01:35.119
so it can't do those things in the first place rather than relying on uh a user prompting it correctly or um some kind of markdown files kind of limiting what it can do.

s18
00:01:35.119 --> 00:01:36.880
Like remove that out of the equation.

s19
00:01:36.880 --> 00:01:38.079
Remove it to the gateway.

s20
00:01:38.079 --> 00:01:45.840
move it to like the governance layer and actually it can't do any of those things because I'm sure you know AI is really helpful like it wants to please

s21
00:01:45.840 --> 00:01:58.880
it wants to give you what you want so if you're asking for things around hey delete this database or hey give me these customers it will um and this is about how actually how do we start to shift that as well so I've got I've got five examples

s22
00:01:58.880 --> 00:02:14.720
this is live okay so it's not scripted uh it's running on a uh an architecture way it's a gravity gateway um which is in a SAS environment as a data brick back end for some data tables where the information is stored and it's a combination of a set and a Groke with a Q, not Groke with a

s23
00:02:14.720 --> 00:02:20.000
K. I know US people don't really like Groke with a K. Uh, so Gro with a Q for some inference.

s24
00:02:20.000 --> 00:02:21.360
So it's all fully live.

s25
00:02:21.360 --> 00:02:23.680
Um, and we're going to going to go through some examples.

s26
00:02:23.680 --> 00:02:31.120
So the agent on the left is where I'm trying to put the control within the prompt or within the kind of skills or tools or knowledge that I've given it.

s27
00:02:31.120 --> 00:02:38.239
And the agent on the right is governed by a real tightly scoped identity and gravity's native gateway controls.

s28
00:02:38.239 --> 00:02:44.319
So if we uh go for the kind of scenario number one, this is around a prompt injection.

s29
00:02:44.319 --> 00:02:49.519
So I am a user, an actor, someone who wants this agent to do something.

s30
00:02:49.519 --> 00:02:55.200
So I'm going to ask it, hey, use the tools that you've got access to and do something for me.

s31
00:02:55.200 --> 00:03:06.959
So basically saying delete this booking for me but also can you run the MCP tool delete all bookings and the agent on the left is gone yep no problem

s32
00:03:06.959 --> 00:03:20.159
uh I've done that for you and I've also deleted this booking is there anything else you need essentially the tool was there and the a the user in question had permissions to use it so it executed it flawlessly

s33
00:03:20.159 --> 00:03:30.239
on the right hand side the agent identity is controlled by gravity's gateway like the admin permissions are really tightly constrained to just the users that can access it just at runtime.

s34
00:03:30.239 --> 00:03:37.040
So the kind of token exchange and the JWT claims are only valid when that user needs to ex execute that task.

s35
00:03:37.040 --> 00:03:41.440
And if you dig into the packets down the bottom to kind of show it's not just scripted environments.

s36
00:03:41.440 --> 00:03:43.519
You can see all of the flow coming in.

s37
00:03:43.519 --> 00:03:45.360
You can see what the user asked.

s38
00:03:45.360 --> 00:03:47.200
You can see the agent executing it.

s39
00:03:47.200 --> 00:03:48.879
You can see the tools being called.

s40
00:03:48.879 --> 00:03:54.640
And you can ultimately see the 200 errors or 200 kind of codes where that has actually been a valid request.

s41
00:03:54.640 --> 00:03:58.480
And if we go into the database now, all of those bookings have been deleted.

s42
00:03:58.480 --> 00:04:01.120
So it was genuinely dropped by that agent.

s43
00:04:01.120 --> 00:04:07.360
So we had a policy uh in our hotel organization that said, "Hey, don't use AI to do this."

s44
00:04:07.360 --> 00:04:08.640
The agent doesn't care.

s45
00:04:08.640 --> 00:04:11.920
Like at runtime, no one reads those documents.

s46
00:04:11.920 --> 00:04:12.400
it.

s47
00:04:12.400 --> 00:04:19.280
You need to rely on the infrastructure and the governance layer to be able to control what you can and can't do in terms of your gent landscape.

s48
00:04:19.280 --> 00:04:22.400
So the one on the right you can see which is just these ones down the bottom.

s49
00:04:22.400 --> 00:04:26.639
So the same prompt was asked to it the same tool discovery occurred.

s50
00:04:26.639 --> 00:04:39.280
So it discovered yeah I've got a tool to do this but then when it came to execute it the permissions would not were blocked at the gateway with a 403 kind of forbidden kind of code because it didn't have the right permissions to be able to execute it.

s51
00:04:39.280 --> 00:04:40.800
And it still did the bit it could do.

s52
00:04:40.800 --> 00:04:54.080
So if you see the prompt return that said yeah I still cancel this booking for you I've done the bit I can but I can't do this for you because I haven't got permissions and that's moving it up out of a policy document to actual hard controls at the gateway level.

s53
00:04:54.080 --> 00:04:59.840
If we go for a similar kind of a second example this one is around kind of data exfiltration.

s54
00:04:59.840 --> 00:05:04.479
So I'm going to ask um hey give me the full list of guests.

s55
00:05:04.479 --> 00:05:07.520
So give it to me because I need to do some compliance stuff with it.

s56
00:05:07.520 --> 00:05:08.639
I want their emails.

s57
00:05:08.639 --> 00:05:12.000
I want my car details and I want to do some reconciliation.

s58
00:05:12.000 --> 00:05:13.280
So, same kind of flow.

s59
00:05:13.280 --> 00:05:16.880
So, prompt comes in from the UI, goes to the LLM.

s60
00:05:16.880 --> 00:05:22.720
LLM does some MCP discovery, finds out it's got a tool for it, gets it, returns it back in.

s61
00:05:22.720 --> 00:05:26.479
Here's all the information kind of exposed just to say this is all kind of mocked.

s62
00:05:26.479 --> 00:05:27.120
It's not real.

s63
00:05:27.120 --> 00:05:33.440
I haven't just kind of given you everyone's bookings, but you can see it coming back in because again, the LLM wants to be helpful.

s64
00:05:33.440 --> 00:05:35.360
It wants to solve that problem.

s65
00:05:35.360 --> 00:05:38.960
on the right hand side the gateway successfully blocks it.

s66
00:05:38.960 --> 00:05:40.160
There's been no PII leak.

s67
00:05:40.160 --> 00:05:42.080
There's no exposure of information.

s68
00:05:42.080 --> 00:05:44.960
We've said you haven't got the right permission to be able to do this.

s69
00:05:44.960 --> 00:05:49.440
If you want to authenticate, I can absolutely help you, but this is what I would need to be able to do it.

s70
00:05:49.440 --> 00:05:54.400
And that can come through kind of any um uh IDP platform or gravity gateway itself.

s71
00:05:54.400 --> 00:06:01.120
And if you want to, we can start to explore the open telemetry down the bottom and really start to dig into like what's happening under the hood.

s72
00:06:01.120 --> 00:06:04.319
So you can see the various steps that it's going through.

s73
00:06:04.319 --> 00:06:13.039
Especially with like the A2A protocol and like user to agent, agent to agent, agent to agent to agent to agent, things get quite messy and quite difficult to really follow.

s74
00:06:13.039 --> 00:06:21.840
So relying on the permissions within the agent itself to be able to control what it do, especially when you're scaling to hundreds or thousands or hundreds of thousands of agents

s75
00:06:21.840 --> 00:06:25.759
can get quite tricky to be able to manage, mitigate, and also kind of migrate when you're ready.

s76
00:06:25.759 --> 00:06:32.479
So moving it to the gateway gives you a a much more sustainable, scalable, but ultimately secure way of of doing that.

s77
00:06:32.479 --> 00:06:34.639
And you can kind of see it within the responses here.

s78
00:06:34.639 --> 00:06:37.919
You can see this was a genuine error returned by the gateway.

s79
00:06:37.919 --> 00:06:39.919
Again, not mocked, not scripted.

s80
00:06:39.919 --> 00:06:43.039
This is what you're able to kind of govern and secure.

s81
00:06:43.039 --> 00:06:44.639
But it's not just about identity.

s82
00:06:44.639 --> 00:06:48.560
So if you've got agents there, you might want to also control some of your costs.

s83
00:06:48.560 --> 00:06:56.240
So token spend and everything else become increasingly important um alongside kind of other things which you can again do through the gateway.

s84
00:06:56.240 --> 00:06:59.360
So this one we're going to uh basically have a buggy agent.

s85
00:06:59.360 --> 00:07:06.080
It's going to send the same request kind of eight times um which if you see it kind of being governed in the agent itself.

s86
00:07:06.080 --> 00:07:08.000
Every request goes through.

s87
00:07:08.000 --> 00:07:10.319
Every request gets a response.

s88
00:07:10.319 --> 00:07:12.560
We spent x amount of tokens.

s89
00:07:12.560 --> 00:07:15.039
We spend x amount of effort servicing that.

s90
00:07:15.039 --> 00:07:18.319
nothing in that agent says you've done too much.

s91
00:07:18.319 --> 00:07:19.199
We should rate limit.

s92
00:07:19.199 --> 00:07:20.479
We should token limit.

s93
00:07:20.479 --> 00:07:23.440
And if you see here, uh, everyone kind of went through.

s94
00:07:23.440 --> 00:07:25.599
They all got a 200 kind of response.

s95
00:07:25.599 --> 00:07:30.645
They were all all kind of um, uh, genuine kind of allm prompts.

s96
00:07:30.645 --> 00:07:30.720
[snorts]

s97
00:07:30.720 --> 00:07:32.319
In this example, they're quite simple.

s98
00:07:32.319 --> 00:07:39.280
So, we end up spending about a th000 tokens, which is like 1 cent, which in the grand scheme of things is not a massive amount of money.

s99
00:07:39.280 --> 00:07:46.880
But if you multiply that by all of the agents you got in production, all of your agents you've got running for various customers and all of the kind of um

s100
00:07:46.880 --> 00:07:52.319
uh repeatable kind of workflows they've been asked to do, you can get to some quite significant costs quite easily.

s101
00:07:52.319 --> 00:07:57.039
On the right hand side, uh governed by the gateway, we see the same prompts coming in.

s102
00:07:57.039 --> 00:08:05.520
The first three are answered because they're valid, but then we get into the rate limiting applied by the gateway where it's saying you can only do three every minute.

s103
00:08:05.520 --> 00:08:07.599
So any more than three is blocked.

s104
00:08:07.599 --> 00:08:08.960
They're not blocked at the LLM.

s105
00:08:08.960 --> 00:08:11.440
They're not blocked kind of downstream with already spent tokens.

s106
00:08:11.440 --> 00:08:13.199
They're blocked at the gateway.

s107
00:08:13.199 --> 00:08:22.639
And again, that allows us to save costs, but also start to kind of control which users, which permissions, um, ultimately how much you want to spend in certain audiences.

s108
00:08:23.360 --> 00:08:25.440
And we can do the same thing for caching as well.

s109
00:08:25.440 --> 00:08:35.919
So, Gravity as a a product supports semantic caching, which is where if you get similar sounding prompts, you can serve it from a a built-in Reddis kind of store rather than sending each one to each time.

s110
00:08:35.919 --> 00:08:40.080
So for example, think of a um an IT help desk model.

s111
00:08:40.080 --> 00:08:41.360
How do I set my password?

s112
00:08:41.360 --> 00:08:42.640
How do I set my password?

s113
00:08:42.640 --> 00:08:44.000
How do I set my password?

s114
00:08:44.000 --> 00:08:51.200
Rather than every one of those being asked each time to an L&amp;M and you start spending costs and tokens and effort, serve it from the the database.

s115
00:08:51.200 --> 00:09:01.040
Benefits there are zero cost, zero latency because it's coming from there rather than having a downstream L&amp;M call, but also kind of a much kind of nicer user experience as well.

s116
00:09:01.040 --> 00:09:07.839
So in this example uh I've asked five times list all my hotel bookings because uh I didn't trust the first one.

s117
00:09:07.839 --> 00:09:09.440
Everyone here gets served out.

s118
00:09:09.440 --> 00:09:13.519
You can see I spent another thousand tokens, another scent and everything.

s119
00:09:13.519 --> 00:09:17.839
Uh everyone coming from a an a downstream L&amp;M call.

s120
00:09:17.839 --> 00:09:19.519
Let me drop that down a little bit.

s121
00:09:19.519 --> 00:09:24.320
On the right hand side I've got the same data returned but this time from the cache.

s122
00:09:24.320 --> 00:09:29.040
So I've only spent around 200 tokens on the in and the out kind of response there.

s123
00:09:29.040 --> 00:09:35.760
So really powerful especially when you're scaling, especially when you got multiple users and multiple agents working on the same problem.

s124
00:09:35.760 --> 00:09:41.360
You can start to serve it from the the built-in cache and there's no extra kind of like complexity or infrastructure.

s125
00:09:41.360 --> 00:09:43.200
It all comes bundled with our gateway.

s126
00:09:43.200 --> 00:09:46.800
So you're able to can kind of control that as you go as as well.

s127
00:09:46.800 --> 00:09:48.160
And this can be controlled as well.

s128
00:09:48.160 --> 00:09:51.360
So you don't have to define you can define how kind of similar you want it to be.

s129
00:09:51.360 --> 00:09:55.279
So it's a zero to one scale, one being very similar, zero being not very similar at all.

s130
00:09:55.279 --> 00:09:56.640
And that's within your control.

s131
00:09:56.640 --> 00:10:02.800
So you can flex it per agent, per audience, per user, depending on what you want to start to achieve.

s132
00:10:02.800 --> 00:10:06.959
And again, we get full logging down the bottom so you can see what's coming in.

s133
00:10:06.959 --> 00:10:09.120
So you can see it's hit the cache response.

s134
00:10:09.120 --> 00:10:10.800
It's all kind of um surfaceable.

s135
00:10:10.800 --> 00:10:12.240
It's all transparent.

s136
00:10:12.240 --> 00:10:17.440
Gravity as a platform isn't trying to like kind of lock you in, kind of make things blackboxy.

s137
00:10:17.440 --> 00:10:22.640
It's trying to surface up so you've got full visibility of what's going on across your agent landscape.

s138
00:10:22.640 --> 00:10:25.519
Um the telemetry here, I'm just showing in a UI.

s139
00:10:25.519 --> 00:10:28.079
you can export it to any downstream tool you want to.

s140
00:10:28.079 --> 00:10:37.920
So a uh a data dog or a Splunk or Prometheus if you're in Kubernetes, it's all kind of like there for you to be able to use to start to get the insight you need.

s141
00:10:38.000 --> 00:10:55.440
And our fifth example is say like uh we've got certain customers who said, "Hey, our users are just kind of dropping huge con prompts in because they want to summarize a whole uh conversational history or they want to start looking at how they um like summarize meetings etc. which is is fine,

s142
00:10:55.440 --> 00:11:01.360
but if you want to start limiting tokens, etc., you start to rapidly get unstuck.

s143
00:11:01.360 --> 00:11:09.360
So, this is just a a big response where the user has dropped in 10 minutes of kind of like chat transcript and is said, "Here's your task.

s144
00:11:09.360 --> 00:11:10.560
Do this for me."

s145
00:11:10.560 --> 00:11:13.279
And this really gets into how do we manage context?

s146
00:11:13.279 --> 00:11:19.040
How do we start to shape like how do we deploy these agents with just enough context to be able to do what they want?

s147
00:11:19.040 --> 00:11:22.000
So, in this example, I put 2,000 tokens in.

s148
00:11:22.000 --> 00:11:32.560
uh my output was 312 which is quite significant for what essentially is quite a simple task is book this room for this audience uh do these few things.

s149
00:11:32.560 --> 00:11:38.480
So in terms of the gateway uh we ran the same prompt uh and actually we blocked it there.

s150
00:11:38.480 --> 00:11:40.800
So there was no downstream LLM call.

s151
00:11:40.800 --> 00:11:45.920
There was no downstream kind of like token cost of being able to churn through all that context.

s152
00:11:45.920 --> 00:11:52.560
Basically said this is too big blocked at the gateway level with a built-in policy that says think about cutting this up.

s153
00:11:52.560 --> 00:11:57.760
Thinking about how you share that can you break it into smaller steps so we can start to control some of that space.

s154
00:11:57.760 --> 00:12:00.160
And this is this is executed at runtime.

s155
00:12:00.160 --> 00:12:04.160
So, it's not something you want to do on the response phase where you've already churned the tokens.

s156
00:12:04.160 --> 00:12:08.240
You've blocked it going anywhere downstream uh pretty much before the prompt is gone there.

s157
00:12:08.240 --> 00:12:13.920
So, you can start to limit some of your costs as well, which is really powerful, especially if you've got multiple users.

s158
00:12:13.920 --> 00:12:20.160
You've got people treating your agents like um uh their own personal Google search to find information.

s159
00:12:20.160 --> 00:12:34.800
uh we saw uh a customer where an agent was simply asking what's the weather like today where I am and they were using a really powerful kind of model to do that and they were spending a huge cost to get something that Google or uh any kind of met station would be able to give you.

s160
00:12:34.800 --> 00:12:40.560
So uh as well as kind of like the length of the prompts you can also really focus it in on the type of content you allow.

s161
00:12:40.560 --> 00:12:47.279
So you can say this content must be relevant to this use case, this content must be relevant to what my agent needs to do.

s162
00:12:47.279 --> 00:12:56.240
So in this example, if we start to ask things around what's the level like today, the gateway will say this doesn't look like a hotel booking software or a hotel booking ask

s163
00:12:56.240 --> 00:12:59.760
no thank you and spending no downstream costs.

s164
00:12:59.760 --> 00:13:13.760
So being able to kind of decouple your front-end agents and your backend services, be they APIs, MCP servers, LLMs, you're rooting to databases, data lakeouses, whatever you want to do.

s165
00:13:13.760 --> 00:13:24.240
It's fundamentally important to bring you the control that you need, to bring you the cost optimization that you need, but also the security and the governance and the auditability.

s166
00:13:24.240 --> 00:13:32.560
So I think uh currently there are 144 agents that my colleague Tim at the bat tells me for every one human kind of identity.

s167
00:13:32.560 --> 00:13:35.440
So the problem is only getting exponentially worse.

s168
00:13:35.440 --> 00:13:49.040
If you start to hardcode this into your agents may work for the first one, the first five, the first 10, but when it becomes exponentially bigger and these agents are creating other agents with creating other agents into into a a huge sprawl,

s169
00:13:49.040 --> 00:14:02.320
being able to manage it with a scripted automated kind of governance layer at the infrastructure is fundamentally a fundamental requirement of how we start to organize these identities and kind of everything else.

s170
00:14:03.519 --> 00:14:12.480
In addition, I think the landscape is going to get increasingly regulated and how do we control some of the bits that going in to retrain models.

s171
00:14:12.480 --> 00:14:15.839
How do we get audited uh on the information we're coming in?

s172
00:14:15.839 --> 00:14:26.399
So having our logging, having our information here, having it basically surfaceable and exportable for anything we want to do, I think is something that a gateway, it hasn't got to be gravity.

s173
00:14:26.399 --> 00:14:35.360
Uh having a gateway sat across our agented landscape is a requirement that we should consider alongside everything else of doing a aentic work.

s174
00:14:35.360 --> 00:14:43.920
Uh and in here we can also uh put in a UI to ask kind of any questions we want to which we can start to uh interact with it as well.

s175
00:14:43.920 --> 00:14:46.880
So I've shown you five examples here.

s176
00:14:46.880 --> 00:14:51.279
Uh the platform capabilities are kind of much bigger than just the five here.

s177
00:14:51.279 --> 00:14:54.639
We've got built-in capabilities to do like LLM routting.

s178
00:14:54.639 --> 00:15:02.639
So we can route to any downstream model depending on like um latency or cost or uh complexity if you want to.

s179
00:15:02.639 --> 00:15:06.720
And it allows you to decouple yourselves from any kind of like hyperscaler.

s180
00:15:06.720 --> 00:15:14.560
So rather than being within a certain environment and having a onetoone relationship, you can route to any downstream model you want.

s181
00:15:14.560 --> 00:15:26.480
So in this one, I'm rooting to to Gro into anthropics, but within three clicks, I could route it to Gemini or Open AAI and the gateway will handle the transformation between the different OpenAI specs for you.

s182
00:15:26.480 --> 00:15:32.000
So rather than trying to recode and everything else there, it's all handled within the gateway.

s183
00:15:32.000 --> 00:15:35.839
Uh we've also got tools to kind of create MCP kind of studios.

s184
00:15:35.839 --> 00:15:42.000
So rather than just using thirdparty MCP servers where you are exposing all of those tools each time.

s185
00:15:42.000 --> 00:15:46.959
So our CRM we use exposes 64 tools for that MCP server.

s186
00:15:46.959 --> 00:15:49.920
Dropping that into the model would expose huge context every time.

s187
00:15:49.920 --> 00:15:52.399
I spend money, I spend tokens, spend cost.

s188
00:15:52.399 --> 00:16:01.279
Being able to create that down to a really fine amount of tools that the MCP server is exposing limits my blast radius, but it also limits my cost as well.

s189
00:16:01.279 --> 00:16:03.839
enable to start to control some of that.

s190
00:16:03.839 --> 00:16:06.720
Uh we've also got tools around edge management as well.

s191
00:16:06.720 --> 00:16:16.399
So an increasing problem that we're seeing within organizations that we work with is that um the traffic through the gateway is fine but there's a number of audiences a number of users

s192
00:16:16.399 --> 00:16:17.839
using on their local laptops.

s193
00:16:17.839 --> 00:16:18.880
They're using AI.

s194
00:16:18.880 --> 00:16:25.839
They're um dropping in documents that they don't want to read or summarize or emails or things like that that no one's got visibility to.

s195
00:16:25.839 --> 00:16:37.759
So just last week we released a edge management capability within the gateway which enabled you to see your shadow AI traffic enables you to secure it enables you to force it to go through the gateway it gives you logging observability

s196
00:16:37.759 --> 00:16:48.560
discoverability around any of those downstream uses that aren't going through a gateway and you can do a number of things there um especially for like infosc compliance and things around heavily regulated industries.

s197
00:16:48.560 --> 00:16:50.480
if you want to kind of learn more about that.

s198
00:16:50.480 --> 00:16:56.480
Uh quite helpfully our booth is just there uh kind of the third one down that landscape.

s199
00:16:56.480 --> 00:17:09.679
Um but hopefully uh with this example, it's been something a bit different from uh the normal slide to go through and showing you how putting your governance and your policy within an AI agent itself and relying on a markdown file

s200
00:17:09.679 --> 00:17:13.360
or a tools or a context or identity there isn't correct.

s201
00:17:13.360 --> 00:17:22.079
And the only real correct way that we're going to scale but also keep the governance and securability as we move forward is shifting it up to the infrastructure layer.

s202
00:17:22.079 --> 00:17:30.799
And if you want to learn more, uh there's a number of our colleagues down there, but I just want to thank you for your time and hope you're enjoying your AI engineer event.

s203
00:17:30.799 --> 00:17:32.960
Thank you.

s204
00:17:47.007 --> 00:17:49.007
[music]
