WEBVTT

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

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

s1
00:00:12.800 --> 00:00:16.960
Uh my name is Sandy and this is Elizabeth.

s2
00:00:16.960 --> 00:00:27.199
Um and we have Mike and we have more people helping us today in case any of you have questions with um setting up your workshop environments and running.

s3
00:00:27.199 --> 00:00:28.960
And everyone here is an expert.

s4
00:00:28.960 --> 00:00:30.320
everyone helping us.

s5
00:00:30.320 --> 00:00:33.680
We're very excited to get started today.

s6
00:00:33.680 --> 00:00:46.879
We want to get all of you on board right from ideating an agent, building it, adding a lot of customization and then deploying it.

s7
00:00:46.879 --> 00:00:51.200
So we want to start with the simplest form of an agent.

s8
00:00:51.200 --> 00:00:58.640
Um, and we for this we're using Strand's agents, which is an open- source agentic harness.

s9
00:00:58.640 --> 00:01:02.239
And this was actually built by AWS.

s10
00:01:02.239 --> 00:01:04.239
Uh, but this is fully open source.

s11
00:01:04.239 --> 00:01:08.000
And so let's walk quickly through it.

s12
00:01:08.000 --> 00:01:19.200
I'm going to give you a quick introduction on what we're going to be doing and then we can dive straight into the code and all of you will have code that you can run, take home with you and you can run for two days after this, right?

s13
00:01:19.200 --> 00:01:20.880
So let's get started.

s14
00:01:20.880 --> 00:01:22.960
What is trans agents?

s15
00:01:22.960 --> 00:01:31.520
Strands agents is an open-source agent harness which means you can you bring your own LLM.

s16
00:01:31.520 --> 00:01:39.759
You can use any LLM provider model provider and you can build an agent harness around it and you can control it end to end.

s17
00:01:39.759 --> 00:01:41.439
You can customize it.

s18
00:01:41.439 --> 00:01:43.600
You can add your own tools to it.

s19
00:01:43.600 --> 00:01:45.520
There's this is fully open source.

s20
00:01:45.520 --> 00:01:53.119
So there's community supporting this on GitHub and AWS maintains this and it supports MCP protocol.

s21
00:01:53.119 --> 00:01:54.479
It supports A2A.

s22
00:01:54.479 --> 00:02:00.159
It's fully open and flexible and you can deploy it on any managed service.

s23
00:02:00.159 --> 00:02:01.280
You can do it locally.

s24
00:02:01.280 --> 00:02:03.280
You can host it anywhere.

s25
00:02:03.280 --> 00:02:07.520
Um now like I said you can use it with any model.

s26
00:02:07.520 --> 00:02:14.720
It works natively with uh in production with AWS but you can bring any model you want and you can run it.

s27
00:02:14.720 --> 00:02:18.160
uh it's also got guard rails and observability built in.

s28
00:02:18.160 --> 00:02:29.200
Uh now if when now when I say you can run it on uh a um Amazon bedrock you can with agent core you can also use any of the other services

s29
00:02:29.200 --> 00:02:39.360
but you can also use a different provider you can also use your own homegrown uh hosted model if you want Ellie.

s30
00:02:39.360 --> 00:02:40.239
Yes.

s31
00:02:40.239 --> 00:02:47.840
Uh let's and because in this workshop you are going to put this agent that we are going to build in production.

s32
00:02:47.840 --> 00:02:51.920
We are going to use agent core and agent core is a service.

s33
00:02:51.920 --> 00:02:59.440
Amazon metro aent core is a service dedicated only to put agents in production.

s34
00:02:59.440 --> 00:03:03.599
So inside aent core we have a core runtime.

s35
00:03:03.599 --> 00:03:14.239
that is the runtime the container where you are going to put this agent and doesn't matter if it's trans the framework if the launch chain if the crew AI

s36
00:03:14.239 --> 00:03:25.440
doesn't matter the framework that you're using you can put this aentic application inside the runtime the container and you are going to deploy this engine in one single life on the CLI

s37
00:03:25.440 --> 00:03:36.640
and when you are using runtime this runtime have sessions and the session can run up to 15 minutes up to 8 hours.

s38
00:03:36.640 --> 00:03:51.360
So you can have a session built in inside this container without any uh configuration because it's inside there and you have observability built into so you only have the code

s39
00:03:51.360 --> 00:04:03.040
you uh install this code or put this code inside this container and you are going to have memory and observability and when I say observability is not observability about

s40
00:04:03.040 --> 00:04:06.080
the RAM or what is the behavior for this container.

s41
00:04:06.080 --> 00:04:08.959
container is about agentic observability.

s42
00:04:08.959 --> 00:04:12.959
How how many tokens I spending in this application?

s43
00:04:12.959 --> 00:04:16.239
What is what did what tool is using this agent?

s44
00:04:16.239 --> 00:04:19.440
What happened inside my agent loop?

s45
00:04:19.440 --> 00:04:31.600
You are going to able to see all of that inside the agent core observability inside cloudatch in AWS and we have a core gateway.

s46
00:04:31.600 --> 00:04:38.240
So sometimes we are having a lot of tools a lot of MCP for our aentic application.

s47
00:04:38.240 --> 00:04:50.639
So you can put all these tool of this MCP behind a aent core gateway and a core is going to be is going to deliver like a API or API is not the word like a endpoint

s48
00:04:50.639 --> 00:05:01.040
that you can invoke inside your agent loop and this endpoint is going to be able to do like a semantic search for all your tools for all your MCP.

s49
00:05:01.040 --> 00:05:08.880
So only one endpoint for all your NCP for all your tools and it have semantic search.

s50
00:05:08.880 --> 00:05:22.880
So it help you to uh deliver the best tool for your agent loop and we have agent core memory because when we create a agent we have shortened memory.

s51
00:05:22.880 --> 00:05:25.120
The short-term memory is built in the runtime.

s52
00:05:25.120 --> 00:05:26.400
You already know that.

s53
00:05:26.400 --> 00:05:34.080
But what happened when you want a a long-term memory, you know, a memory that can last more than eight hours.

s54
00:05:34.080 --> 00:05:37.039
So you can create a a core memory.

s55
00:05:37.039 --> 00:05:43.199
So when you uh create a core memory, you are going to have a semantic memory too.

s56
00:05:43.199 --> 00:05:48.240
So agent core build for you in three different types of memory.

s57
00:05:48.240 --> 00:05:57.360
So you are going to have like I don't remember the name of the memory but you have three different prompts capable to build the three different memories.

s58
00:05:57.360 --> 00:06:07.440
So every time that you retrieve your agent loop you can retrieve this memory inside the agent called memory that is completely built in.

s59
00:06:07.440 --> 00:06:11.440
You don't have to build the vector store the database.

s60
00:06:11.440 --> 00:06:13.600
You don't have to build anything.

s61
00:06:13.600 --> 00:06:18.080
You only have to say hey a core I want a core memory.

s62
00:06:18.080 --> 00:06:27.680
So it's deploy for you the memory the three different types of memory custom tree memory and no building memory and you can create your own custom memory.

s63
00:06:27.680 --> 00:06:32.479
You you can you put your custom prompt to build your own memory.

s64
00:06:32.479 --> 00:06:45.759
So every time that you retrieve the information for this agent, you are going to have your custom memory and there is a core identity and a bunch of more agent core but we only have one hour and in this workshop

s65
00:06:45.759 --> 00:06:59.120
you are going to deploy your agent in agent core runtime and I already say that and yeah so agent core runtime have uh give you all the that you can put your code and deploy to production.

s66
00:06:59.120 --> 00:07:04.240
You have the enterprise grade security of course because it's running on AWS.

s67
00:07:04.240 --> 00:07:17.759
So it's completely secure of course if you are doing a good deployment if you don't share your keys everything because it's inside AWS and we don't use your data to train models

s68
00:07:17.759 --> 00:07:24.400
is in your account and it's only using there and scale automatically.

s69
00:07:24.400 --> 00:07:35.039
So you have your container and you don't have to manage the scaling because runtime can scale automatically up if you have a lot of session if you have recession

s70
00:07:35.039 --> 00:07:37.919
is scale down.

s71
00:07:37.919 --> 00:07:38.639
Thank you.

s72
00:07:38.639 --> 00:07:41.280
So today um this is what we're going to be doing.

s73
00:07:41.280 --> 00:07:43.759
We're going to be starting with a basic agent.

s74
00:07:43.759 --> 00:07:45.599
What is an agent loop?

s75
00:07:45.599 --> 00:07:49.840
Um how can we build um an actual system with it?

s76
00:07:49.840 --> 00:07:55.199
um and some ideas, deeper dive ideas about what actually makes a good agent, right?

s77
00:07:55.199 --> 00:08:06.080
So, talk about hooks, talk about skills, steerings, and then Ellie's going to be talking about um session management, and she's going to be covering how to actually deploy to agent core.

s78
00:08:06.080 --> 00:08:10.639
We also have evalentic frameworks as part of the workshop.

s79
00:08:10.639 --> 00:08:12.639
If we have time, we will do it.

s80
00:08:12.639 --> 00:08:15.199
But because we want to take it slow, we want to take it easy.

s81
00:08:15.199 --> 00:08:20.319
We want to make sure everyone understands the basics before we get into the advanced concepts.

s82
00:08:20.319 --> 00:08:22.960
But if we don't have time, you can still use this link.

s83
00:08:22.960 --> 00:08:24.960
This is still valid for two more days.

s84
00:08:24.960 --> 00:08:26.080
So you can still use it.

s85
00:08:26.080 --> 00:08:33.279
Go back home, run it, complete all of the modules, and ask us ask any of us questions if you have any and we'll be there to support you.

s86
00:08:33.279 --> 00:08:41.519
So uh first thing is uh go to this workshop link if uh we have so this is enabled for about 250 participants.

s87
00:08:41.519 --> 00:08:50.880
If we have more and some of you run into problems we have a backup workshop link but for now uh log this website and it should take you to a link.

s88
00:08:50.880 --> 00:08:55.440
Uh Ellie can also walk excuse me walk you through the steps if necessary.

s89
00:08:55.440 --> 00:08:58.080
Um so this is going to take you to an account.

s90
00:08:58.080 --> 00:09:00.880
Does uh everyone have the previous link?

s91
00:09:00.880 --> 00:09:03.040
Do you want me to wait a couple of seconds?

s92
00:09:03.040 --> 00:09:03.519
It's on there.

s93
00:09:03.519 --> 00:09:04.399
It's on there.

s94
00:09:04.399 --> 00:09:06.320
I think it's also there on the next few slides.

s95
00:09:06.320 --> 00:09:10.080
I think uh so what what are we going to be doing today?

s96
00:09:10.080 --> 00:09:13.200
We're going to go to this workshop studio account.

s97
00:09:13.200 --> 00:09:17.279
Uh you don't have to so you don't have to create your own AWS account.

s98
00:09:17.279 --> 00:09:23.360
Uh these accounts are already created for you and there is going to be like a Jupyter notebook format.

s99
00:09:23.360 --> 00:09:25.920
Uh most of the code is already in there.

s100
00:09:25.920 --> 00:09:27.360
We can customize it.

s101
00:09:27.360 --> 00:09:28.160
You can run it.

s102
00:09:28.160 --> 00:09:29.360
You can download it.

s103
00:09:29.360 --> 00:09:34.640
You can run it in your own environments but for this uh session it's all there for you.

s104
00:09:34.640 --> 00:09:37.279
So you can directly use and run it from there.

s105
00:09:37.279 --> 00:09:38.959
Uh this is free of charge.

s106
00:09:38.959 --> 00:09:41.600
You will not be using any of your accounts.

s107
00:09:41.600 --> 00:09:43.519
It's not going to ask for any credit card.

s108
00:09:43.519 --> 00:09:46.399
So just go walk with us and do it step by step.

s109
00:09:46.399 --> 00:09:50.080
If you have any questions all of us are here to support you.

s110
00:09:50.080 --> 00:09:56.720
Um so like I said first thing join this workshop link.

s111
00:09:57.839 --> 00:10:05.600
So when you go to this link you are this link is going to uh give you a website.

s112
00:10:05.600 --> 00:10:11.200
The first thing that you need to do is put your email email one time passport OTP.

s113
00:10:11.200 --> 00:10:25.279
So then it's going to send you a email with uh I don't remember how many numbers is that yeah you need to enter your email and then you are going to receive the one time passport

s114
00:10:25.279 --> 00:10:30.959
and you need to put that password inside the the window as similar to that

s115
00:10:30.959 --> 00:10:38.480
and if any of you have questions please raise your hand and one of us will come find you we'll work with you

s116
00:10:38.480 --> 00:10:59.600
and in this workshop when you start to either uh you are going to be able to use anthropic models through the Amazon bedroom API and I think I'm not sure I'm think that you are going to be able to use the new open AI models too and of score all the Amazon models that we have that you

s117
00:10:59.600 --> 00:11:18.959
can invoke through Amazon API and uh you are be able to use a Amazon better agent core for free it's not so expensive okay I I know that and I know that people is having problems sometimes to use the new service because yeah it's normal to have I don't know

s118
00:11:18.959 --> 00:11:33.279
uh it's money but if you try Amazon B aent cord in your account you are going to see that it's not so expensive and then you need to approve the next the next window is

s119
00:11:33.279 --> 00:11:42.160
is everyone with us right now anyone struggling at any step so far you do you need help Sorry.

s120
00:11:42.560 --> 00:11:45.519
Do you are you having trouble signing in?

s121
00:11:45.519 --> 00:11:53.279
Um, so you're you've opened that workshop link and then did you type in your email address and your password?

s122
00:11:57.200 --> 00:12:01.360
Okay, I think Mike can help.

s123
00:12:01.360 --> 00:12:02.399
You are okay.

s124
00:12:02.399 --> 00:12:03.200
I need to see

s125
00:12:03.200 --> 00:12:03.839
everyone else.

s126
00:12:03.839 --> 00:12:04.240
Okay.

s127
00:12:04.240 --> 00:12:05.519
Any other

s128
00:12:05.519 --> 00:12:05.920
problems?

s129
00:12:05.920 --> 00:12:08.000
Is anyone struggling with anything?

s130
00:12:08.000 --> 00:12:11.360
We might be having a little trouble with wifi.

s131
00:12:11.360 --> 00:12:14.720
Who would have thought that a conference would have trouble with wifi?

s132
00:12:14.720 --> 00:12:16.240
A lot of people are getting on.

s133
00:12:16.240 --> 00:12:20.560
Are you going to be stepping through some of the things on stage there?

s134
00:12:20.560 --> 00:12:21.600
Um what

s135
00:12:21.600 --> 00:12:25.600
you going to are you going to run through the workshop stages on on stage?

s136
00:12:25.600 --> 00:12:28.480
So if people can't do it, can they watch

s137
00:12:28.480 --> 00:12:29.760
at the end of the session?

s138
00:12:29.760 --> 00:12:32.880
Uh we are going to share with you all the slides.

s139
00:12:32.880 --> 00:12:34.160
This is a Jupiter.

s140
00:12:34.160 --> 00:12:36.720
This is a repository that you can clone too.

s141
00:12:36.720 --> 00:12:43.440
you know this this uh this code everything that we are going to build here is not only available in the virtual studio.

s142
00:12:43.440 --> 00:12:53.440
So because this virtual studio is going to be open for two days so probably it's better that we start to show what is inside and you can do this

s143
00:12:53.440 --> 00:12:55.920
uh for your you know for your business

s144
00:12:55.920 --> 00:13:02.959
and you can do it and you know I can I then when we finish the session I going to put this workshop for three days.

s145
00:13:02.959 --> 00:13:08.079
So, so you can be you can use all these for free for 3 days.

s146
00:13:08.079 --> 00:13:08.480
Yeah.

s147
00:13:08.480 --> 00:13:13.920
And may the Wi-Fi gods be with us as well today while we run it through with you.

s148
00:13:13.920 --> 00:13:14.480
Oh yeah.

s149
00:13:14.480 --> 00:13:26.079
Um so if it's just network issues because of which some of you are not able to follow along, we will try to go step by step again hopefully with the Wi-Fi is working for us

s150
00:13:26.079 --> 00:13:31.040
and um any other issues apart from network issues with signing up, signing in, anything at all.

s151
00:13:31.040 --> 00:13:31.519
Yeah.

s152
00:13:31.519 --> 00:13:32.000
Right.

s153
00:13:32.000 --> 00:13:35.040
So before to start please take a picture to this.

s154
00:13:35.040 --> 00:13:35.440
Yes.

s155
00:13:35.440 --> 00:13:40.160
Because if you have problem with the first one you know it's not a problem of internet.

s156
00:13:40.160 --> 00:13:46.800
If you are having problem hey there is not enough account is because the first one is running for account.

s157
00:13:46.800 --> 00:13:48.800
So you can use the second one.

s158
00:13:48.800 --> 00:13:51.600
So we have to uh separate environments deployment.

s159
00:13:51.600 --> 00:13:51.839
Yeah.

s160
00:13:51.839 --> 00:13:54.399
So let's get started.

s161
00:14:06.000 --> 00:14:06.880
Okay.

s162
00:14:06.880 --> 00:14:11.680
So, all of you should be seeing this right now, correct?

s163
00:14:11.680 --> 00:14:12.480
No, that's not

s164
00:14:12.480 --> 00:14:13.199
this, right?

s165
00:14:13.199 --> 00:14:15.360
All of you should be seeing this.

s166
00:14:15.360 --> 00:14:26.880
This is going to be on the left is going to be your stepbystep work um your work through on what what we're going to be building, how we're going to be building it.

s167
00:14:26.880 --> 00:14:29.199
the setup each of the modules.

s168
00:14:29.199 --> 00:14:34.320
So this is for you to follow along if you're ever stuck how to actually start running this.

s169
00:14:34.320 --> 00:14:34.560
Right?

s170
00:14:34.560 --> 00:14:37.199
So this gives you a full walkthrough.

s171
00:14:37.199 --> 00:14:44.160
But if you want to get started with the code, click on this over here, the agent speedrun idea to code, right?

s172
00:14:44.160 --> 00:14:45.680
Click on that.

s173
00:14:45.680 --> 00:14:50.720
Scroll all the way down and you will see the code editor URL.

s174
00:14:50.720 --> 00:14:51.920
Everyone with me?

s175
00:14:51.920 --> 00:14:54.000
Click that URL.

s176
00:14:54.000 --> 00:14:56.160
The people who is having internet.

s177
00:14:56.160 --> 00:15:01.440
Yes, everyone who's got internet click like click on this button over here.

s178
00:15:01.440 --> 00:15:09.600
Scroll all the way to the bottom to the code editor URL and then open that and this should pop up module one for you.

s179
00:15:09.600 --> 00:15:14.000
So this is module one and you can close all of this.

s180
00:15:14.000 --> 00:15:18.320
The first thing you will have to do is select your kernel, right?

s181
00:15:18.320 --> 00:15:20.800
And which kernel do I select?

s182
00:15:20.800 --> 00:15:33.600
go to the same workshop studio here under setup when you get started and you go to your next steps it's going to actually show you here right so select kernel python environments

s183
00:15:33.600 --> 00:15:52.720
USR bin python 3.13 copy that and in your select kernel paste that over here and it should close it and pick it up for you okay so you You need to do this for every

s184
00:15:52.720 --> 00:15:54.480
module that you're running.

s185
00:15:54.480 --> 00:15:55.519
Now, what are we building today?

s186
00:15:55.519 --> 00:15:56.880
Is everyone with me?

s187
00:15:56.880 --> 00:15:59.519
Is anyone not with me?

s188
00:15:59.519 --> 00:16:01.199
Oh, a bunch of you because of Wi-Fi.

s189
00:16:01.199 --> 00:16:02.639
Is there any other

s190
00:16:02.639 --> 00:16:04.160
just Wi-Fi?

s191
00:16:04.160 --> 00:16:05.199
What do we do?

s192
00:16:05.199 --> 00:16:08.160
Do we Okay, we're just

s193
00:16:09.759 --> 00:16:10.079
Yes.

s194
00:16:10.079 --> 00:16:10.320
Yeah.

s195
00:16:10.320 --> 00:16:11.120
Thank you.

s196
00:16:11.120 --> 00:16:15.199
So, if that's the case, then we're going to start walking through step by step.

s197
00:16:15.199 --> 00:16:18.240
It's fairly simple and you can definitely go back and try it.

s198
00:16:18.240 --> 00:16:18.560
Okay.

s199
00:16:18.560 --> 00:16:22.320
So I'm just going to go with it and feel free to ask us any questions.

s200
00:16:22.320 --> 00:16:23.680
So what are we building today?

s201
00:16:23.680 --> 00:16:38.079
Today we're building a customer service agent and we're building that using Strand's agent which is an agent harness framework and how that works is it's basically using an agent with the loop.

s202
00:16:38.079 --> 00:16:48.399
So the user sends in their input and their context and then you have an LLM which you can provide right because uh this is works natively with Amazon.

s203
00:16:48.399 --> 00:16:58.160
We have a bedrock hosted model but you can have so if you go to strands agents over here this is the strand agents and you can and you look at model providers

s204
00:16:58.160 --> 00:17:07.600
you can use any of your favorite model providers you can use your llama and if you want to host it locally and this shows you how to do it all you have to do is

s205
00:17:07.600 --> 00:17:19.839
call the model here define the model and then under agent you just have to specify model and your model name you can do this with open AAI this supports all of your different LLMs your favorite LLM times use what you will

s206
00:17:19.839 --> 00:17:30.320
um hugging face all of your favorite things right so use your favorite uh model bring your own uh API key and then connect it to the model and then we we are ready to get started

s207
00:17:30.320 --> 00:17:49.840
so we are building um a simple customer service agent and what how what makes the agent powerful is the agentic reasoning loop which means when you give it when the user asks a question and says hey I have this trouble, I have this problem.

s208
00:17:49.840 --> 00:17:52.559
The agent receives that input.

s209
00:17:52.559 --> 00:17:54.320
The agent gets invoked.

s210
00:17:54.320 --> 00:18:01.280
The agent calls the LLM and the LLM then reads the question and calls a tool.

s211
00:18:01.280 --> 00:18:15.120
So we want to define a set of tools because tools are the way by which we give an agent agency to execute a function because LLMs are mostly just going to be predicting the next token.

s212
00:18:15.120 --> 00:18:20.640
We don't want to really rely on the LLM's base knowledge of what the answer is.

s213
00:18:20.640 --> 00:18:24.720
You want to ground it to a source of truth, to a source of information.

s214
00:18:24.720 --> 00:18:28.880
And this information can be stored in your database.

s215
00:18:28.880 --> 00:18:30.559
This can be stored as a file.

s216
00:18:30.559 --> 00:18:32.640
This can be stored in any different format.

s217
00:18:32.640 --> 00:18:35.919
And that can be written inside of a tool.

s218
00:18:35.919 --> 00:18:38.400
And that tool can be given access.

s219
00:18:38.400 --> 00:18:41.360
The agent can be given access to that tool.

s220
00:18:41.360 --> 00:18:44.400
And the agent decides when to use that tool.

s221
00:18:44.400 --> 00:18:47.200
And the agent can have access to a bunch of different tools.

s222
00:18:47.200 --> 00:19:00.400
And the agent will figure out, it will rely on the LLM, the LLM's capability, the LLM's reasoning capability to figure out what to which tool to use and call the tool, run the tools response

s223
00:19:00.400 --> 00:19:05.600
and potentially again, you know, the agent loop can get completed and then it would send a response.

s224
00:19:05.600 --> 00:19:16.880
Now, another amazing thing about using an agent harness is because you can support a bunch of different models, you can swap out whichever model you want without really having to change the system prompt.

s225
00:19:16.880 --> 00:19:24.160
You can if you want to, but you don't really have to change the system prompt or change the structure or the architecture of how everything works.

s226
00:19:24.160 --> 00:19:24.960
This is it.

s227
00:19:24.960 --> 00:19:28.000
And then you can try out with any model you want and then it still works.

s228
00:19:28.000 --> 00:19:28.960
It's still good to go.

s229
00:19:28.960 --> 00:19:35.120
So you can even compare your models different models performances against the same uh boilerplate code.

s230
00:19:35.120 --> 00:19:37.600
So it's super powerful and then you get a response.

s231
00:19:37.600 --> 00:19:37.840
Right.

s232
00:19:37.840 --> 00:19:40.320
So how can we get started with this?

s233
00:19:40.320 --> 00:19:49.679
Uh first thing is so uh in your module one we've got um we install the requirements.ext file.

s234
00:19:49.679 --> 00:19:51.919
Then we define tools.

s235
00:19:51.919 --> 00:19:53.840
Is this big enough for everyone to see?

s236
00:19:53.840 --> 00:19:55.280
Do I need to zoom it in further?

s237
00:19:55.280 --> 00:19:55.760
Okay, good.

s238
00:19:55.760 --> 00:19:57.120
I'm seeing thumbs up.

s239
00:19:57.120 --> 00:19:58.320
So what are we doing here?

s240
00:19:58.320 --> 00:20:00.640
because we're doing customer service bots.

s241
00:20:00.640 --> 00:20:02.240
First thing is we need to have data.

s242
00:20:02.240 --> 00:20:07.440
So we've create mock data of two customers and their account orders.

s243
00:20:07.440 --> 00:20:12.080
So they've ordered something off of a website and then they want questions.

s244
00:20:12.080 --> 00:20:14.720
They want to get refunds on whatever they've ordered.

s245
00:20:14.720 --> 00:20:22.080
So how are they going about this and how can we build an agentic system that can offer solutions to these customers?

s246
00:20:22.080 --> 00:20:23.520
So they have these orders.

s247
00:20:23.520 --> 00:20:24.880
Uh it's just like a dictionary.

s248
00:20:24.880 --> 00:20:29.679
Okay, so these are the customers and these are the order statuses and we define tools.

s249
00:20:29.679 --> 00:20:40.720
Tools can be written it can be uh it can be a functional code but it can also be uh like an NLP type of a tool that you can have generated.

s250
00:20:40.720 --> 00:20:46.320
The way to define a tool is by using the at tool decorator function and you write a code.

s251
00:20:46.320 --> 00:20:50.480
So here we've got a simple tool that's doing a lookup on customers.

s252
00:20:50.480 --> 00:20:52.960
That's just doing a get customer ID.

s253
00:20:52.960 --> 00:20:56.559
Then we've got another tool that's just doing get order history.

s254
00:20:56.559 --> 00:20:59.600
The third tool we've got is process refund.

s255
00:20:59.600 --> 00:20:59.840
Right?

s256
00:20:59.840 --> 00:21:07.280
So in each of these cases, the tools can look very very different, but they're all the same format, all the same pattern.

s257
00:21:07.280 --> 00:21:09.520
They all just have the add tool decorator.

s258
00:21:09.520 --> 00:21:13.200
So let let's run this.

s259
00:21:13.760 --> 00:21:19.120
And after that, what we do, and this is our initial code for creating tools.

s260
00:21:19.120 --> 00:21:22.799
Now what we do to create an agent, we just need two basic things.

s261
00:21:22.799 --> 00:21:25.280
One is your system prompt.

s262
00:21:25.280 --> 00:21:29.039
The second is your LLM, your model.

s263
00:21:29.039 --> 00:21:35.280
In this case, because we're using native uh bedrock models, hosted models, we don't really need to specify the model.

s264
00:21:35.280 --> 00:21:37.120
We're just using the default model.

s265
00:21:37.120 --> 00:21:44.880
But like I showed you in the on the strands website, you can establish whichever model you want and you can add your model here.

s266
00:21:44.880 --> 00:21:49.360
The third thing you want to add apart from this is your tools.

s267
00:21:49.360 --> 00:21:52.400
So you will call the agent method.

s268
00:21:52.400 --> 00:22:00.640
Write the tool three tools that we've just defined and then create the system prompt which says you are a customer service agent.

s269
00:22:00.640 --> 00:22:02.799
Um and these are your guidelines.

s270
00:22:02.799 --> 00:22:07.039
Always verify customer using look up customer before taking action.

s271
00:22:07.039 --> 00:22:09.200
Use tool data to answer questions.

s272
00:22:09.200 --> 00:22:11.760
Don't ask the customer for info you already have.

s273
00:22:11.760 --> 00:22:21.360
So in the system prompt you tell the agent like you tell the LLM how to use the tools that it's got access to and what to do with it.

s274
00:22:21.360 --> 00:22:26.480
So that's how your LLM and your agent understands what needs to be done with it.

s275
00:22:26.480 --> 00:22:38.480
So here now when we run this agent we just say hi I'm customer so and so can you check my recent orders and so now it's saying sure let me pull up

s276
00:22:38.480 --> 00:22:40.559
um your account and the order history.

s277
00:22:40.559 --> 00:22:42.080
So it's invoking tool one.

s278
00:22:42.080 --> 00:22:44.080
It's doing the look up on customer.

s279
00:22:44.080 --> 00:22:50.720
Then it's calling tool two which is get order history and it's saying ah okay this is a summary of your recent orders.

s280
00:22:50.720 --> 00:22:53.840
And then it's saying hey is there anything else I can help you with?

s281
00:22:53.840 --> 00:22:59.440
Now this is awesome but how can we figure out what's actually happening under the hood?

s282
00:22:59.440 --> 00:23:06.320
Because a lot of times one of the problems we have is my agent is doing things and I have no insight into what it's doing.

s283
00:23:06.320 --> 00:23:07.520
Where is my control?

s284
00:23:07.520 --> 00:23:08.400
How do I get that?

s285
00:23:08.400 --> 00:23:08.720
Right?

s286
00:23:08.720 --> 00:23:11.600
So let's inspect that agent loop.

s287
00:23:11.600 --> 00:23:14.000
So what we So this is how it works, right?

s288
00:23:14.000 --> 00:23:25.360
And as we saw in the previous diagram, the user sends in a message, goes to the LLM, the LLM does the tool call, we get a tool result, and finally we get a response.

s289
00:23:25.360 --> 00:23:29.520
Now we can look at the agent messages agent message.

s290
00:23:29.520 --> 00:23:33.280
And so this is just code to see what the messages look like.

s291
00:23:33.280 --> 00:23:35.600
And so this shows us the handoff.

s292
00:23:35.600 --> 00:23:39.280
So this says the total number of messages for this is what the user is saying.

s293
00:23:39.280 --> 00:23:41.039
This is what the assistant does.

s294
00:23:41.039 --> 00:23:44.320
Then this is the tool call one tool call two.

s295
00:23:44.320 --> 00:23:46.480
Then there's nothing else that the user has done.

s296
00:23:46.480 --> 00:23:49.520
And so the assistant says okay here is the response.

s297
00:23:49.520 --> 00:23:51.039
So this these are the metrics.

s298
00:23:51.039 --> 00:23:52.799
These are number of tokens that it used.

s299
00:23:52.799 --> 00:23:54.080
We can use more metrics.

s300
00:23:54.080 --> 00:23:55.600
You can add more metrics.

s301
00:23:55.600 --> 00:23:56.799
Do what you will.

s302
00:23:56.799 --> 00:24:00.080
Additionally uh we just want to do something simple here, right?

s303
00:24:00.080 --> 00:24:01.679
Because it's simple walk through.

s304
00:24:01.679 --> 00:24:05.200
But what we can do is we can also have multi-turn conversations.

s305
00:24:05.200 --> 00:24:07.280
This is just a single conversation.

s306
00:24:07.280 --> 00:24:12.400
You can also run your multi-turn conversations where you have an extended chat with your agent.

s307
00:24:12.400 --> 00:24:14.799
So for that you can also try these right.

s308
00:24:14.799 --> 00:24:16.720
These are other samples that we've given.

s309
00:24:16.720 --> 00:24:19.679
You're free to write your own if your internet is working.

s310
00:24:19.679 --> 00:24:20.559
I hope it is.

s311
00:24:20.559 --> 00:24:21.840
Is it?

s312
00:24:21.840 --> 00:24:33.760
Um but also what you can do is we've created chat.py under the same module and we've got chat.py Pi file for every single one of these modules.

s313
00:24:33.760 --> 00:24:42.799
So when I click chat.py, this is the exact same underneath underlying code except we've enabled it for multi-turn conversation.

s314
00:24:42.799 --> 00:24:56.000
So you do the same thing enable um you just have to so when you go here what you can do is you can open your terminal and you just have to copy

s315
00:24:56.000 --> 00:25:07.440
these two lines because we're already in this specific folder and then you pip install your requirements over here and then you open a thing and then you can chat with it directly if you want to.

s316
00:25:07.440 --> 00:25:10.159
So then you can say, "Hey, blah, blah, blah."

s317
00:25:10.159 --> 00:25:12.080
So you can just type, right?

s318
00:25:12.080 --> 00:25:14.799
Um, and you can have multi-turn conversations with it.

s319
00:25:14.799 --> 00:25:17.200
It's just going to reply and see there we go.

s320
00:25:17.200 --> 00:25:26.400
So you can continue to have multi-turn conversations with it, the exact same co under underlying code, uh, exact same tools, and it's just able to talk to you.

s321
00:25:26.400 --> 00:25:29.360
60 lines of code, less than 60 lines of code.

s322
00:25:29.360 --> 00:25:31.919
Uh, so that's basic agent.

s323
00:25:31.919 --> 00:25:34.320
Are we good?

s324
00:25:35.279 --> 00:25:36.080
Okay, cool.

s325
00:25:36.080 --> 00:25:37.279
Awesome.

s326
00:25:37.279 --> 00:25:40.880
Second part, how do we make this agent better?

s327
00:25:40.880 --> 00:25:41.919
What else can we do?

s328
00:25:41.919 --> 00:25:43.760
This is this is basic stuff, right?

s329
00:25:43.760 --> 00:25:49.360
Anyone's who who's been looking at blogs or just checking online would probably know how to do this.

s330
00:25:49.360 --> 00:25:51.039
How can we make it better?

s331
00:25:51.039 --> 00:25:54.320
Let me introduce you to what we call hooks.

s332
00:25:54.320 --> 00:25:59.600
Now, hooks are amazing because let me first open that.

s333
00:25:59.600 --> 00:26:01.840
Let me first open that code there.

s334
00:26:01.840 --> 00:26:03.279
Okay, I'm going to close this.

s335
00:26:03.279 --> 00:26:16.000
Now hooks are a way by which you can enforce certain programmatic uh commands and functions to take place.

s336
00:26:16.000 --> 00:26:28.320
So before so what you can do is in this entire process where your from the time your agent is just getting invoked it's doing its own tool calls and it's getting responses and sending it out.

s337
00:26:28.320 --> 00:26:30.960
what you we want to be able to control it, right?

s338
00:26:30.960 --> 00:26:41.440
Right from the time that the agent is being invoked to the like before the tool is being called or maybe once the tool is being called and then it gets a response.

s339
00:26:41.440 --> 00:26:43.840
We want to be able to have a lot of control over it.

s340
00:26:43.840 --> 00:26:54.080
We want to potentially be able to validate who the who's using it like who which uh who are the customers that are probably talking to this or what type of questions are they answering?

s341
00:26:54.080 --> 00:26:57.520
Is it even supposed to be be entertaining these types of questions?

s342
00:26:57.520 --> 00:27:03.120
Do we want to have rate limits on the type of tools that are being called and the number of times these tools are being called?

s343
00:27:03.120 --> 00:27:04.080
How can we do that?

s344
00:27:04.080 --> 00:27:21.120
So when you have a hook, you can you can introduce your code at this junction where you can have an assert function or a different type of function that allows it to do to ensure that certain checks go through before it proceeds to your

s345
00:27:21.120 --> 00:27:22.159
final output.

s346
00:27:22.159 --> 00:27:31.919
So you can do it before invocation, you can do it after the LLM call, before the tool call and then you can decide whether you want to approve of it or cancel it.

s347
00:27:31.919 --> 00:27:36.640
And then you can even do it after tool execution, before it sends the response.

s348
00:27:36.640 --> 00:27:40.880
So you can do it at all of these spaces, but you can also do it at more locations.

s349
00:27:40.880 --> 00:27:42.799
And um this is just an example.

s350
00:27:42.799 --> 00:27:47.600
If we go to strands agents, this will show you all the different ways you can enforce hooks.

s351
00:27:47.600 --> 00:27:50.559
Um so this is this where I am at?

s352
00:27:50.559 --> 00:27:52.720
No, I keep I'm going to close all of these.

s353
00:27:52.720 --> 00:27:54.240
Um, okay.

s354
00:27:54.240 --> 00:27:57.679
So, uh, in hooks, what are we doing here?

s355
00:27:57.679 --> 00:27:59.760
We've got the same data that we're calling.

s356
00:27:59.760 --> 00:28:02.640
Let me run this first.

s357
00:28:03.279 --> 00:28:04.880
Okay.

s358
00:28:04.880 --> 00:28:07.039
Go to the notebook.

s359
00:28:07.039 --> 00:28:08.480
This is not the notebook.

s360
00:28:08.480 --> 00:28:08.799
No.

s361
00:28:08.799 --> 00:28:10.559
Oh, this is a customer service tools.

s362
00:28:10.559 --> 00:28:11.360
Okay.

s363
00:28:11.360 --> 00:28:12.320
Um, yeah.

s364
00:28:12.320 --> 00:28:15.360
Yeah, I'm on the wrong one.

s365
00:28:17.919 --> 00:28:18.559
Okay.

s366
00:28:18.559 --> 00:28:21.039
I'm on the notebook again.

s367
00:28:21.039 --> 00:28:26.080
We have to install requirements and choose our environment.

s368
00:28:26.960 --> 00:28:28.799
So how does this work?

s369
00:28:28.799 --> 00:28:38.480
Now we want to import strands.hooks and we want to import hook provider hook registry and where we want to call these hooks.

s370
00:28:38.480 --> 00:28:43.440
So in our case we want to do it before invocation and also before tool call.

s371
00:28:43.440 --> 00:28:44.640
And I'll tell you what we're doing.

s372
00:28:44.640 --> 00:28:57.760
We're trying to create a rate limiter hook which ensures that for one user request the number of tools that are being invoked is not more than three in case you have

s373
00:28:57.760 --> 00:29:13.679
um an LLM that's just going crazy and that's continuously invoking your tools that's going to cost you a lot of tokens and you know it's not working right so you want to create a hard stop rate limiter and say hey even if it's not working it's fine stop it at three right so now that's what we're doing

s374
00:29:13.679 --> 00:29:16.559
how can we create that rate limiter over here.

s375
00:29:16.559 --> 00:29:25.279
So first what we do is we define the rate limiter hook and we want to say okay these are the maximum number of calls we're creating a default number

s376
00:29:25.279 --> 00:29:27.840
and then we have to add it to the registry.

s377
00:29:27.840 --> 00:29:39.760
So over here we add it and say okay be before invocation event and then we want another call back which is before tool call event and a call back means that's when it would get called

s378
00:29:39.760 --> 00:29:42.320
that's because you're defining it over here.

s379
00:29:42.320 --> 00:29:56.399
So then we have this counter which that which at before every response like every new time the user is asking sending in a request this gets reset to zero because you don't want it to continue running that

s380
00:29:56.399 --> 00:30:08.960
u rate limiter and we define a second one called check second function called check that checks the number that's basically like a counter it counts the number of times your tools are being invoked

s381
00:30:08.960 --> 00:30:15.120
so that's what this does and then This looks at the max calls and then it just calculates that.

s382
00:30:15.120 --> 00:30:22.080
So we define our rate limiter over here and this is the main function that we've been looking at.

s383
00:30:22.080 --> 00:30:29.200
One extra line that we added is the hooks and we say rate limiter hook max calls equals three.

s384
00:30:29.200 --> 00:30:36.640
And if we run it, it's calling these two and it's saying okay tool call one tool call two.

s385
00:30:36.640 --> 00:30:38.240
Here's a summary of your events.

s386
00:30:38.240 --> 00:30:39.760
This is what's happened.

s387
00:30:39.760 --> 00:30:41.200
But let's actually test it.

s388
00:30:41.200 --> 00:30:44.799
Let's try and break it and see if the rate limit is actually working.

s389
00:30:44.799 --> 00:30:45.120
Right?

s390
00:30:45.120 --> 00:30:47.600
So here I'm doing max calls equals true.

s391
00:30:47.600 --> 00:30:50.559
You want to lower the limit to the trigger.

s392
00:30:50.559 --> 00:30:55.360
So over here it's calling it so many times, right?

s393
00:30:55.360 --> 00:30:57.279
And so it's actually blocked it.

s394
00:30:57.279 --> 00:31:01.840
So here it's saying block lookup because it's exceeded the number of times.

s395
00:31:01.840 --> 00:31:08.320
So when your agent starts to go haywire and we all worry about oh my god is my agent going to take over everything, right?

s396
00:31:08.320 --> 00:31:12.080
It won't because we have something called hooks.

s397
00:31:12.080 --> 00:31:13.120
Is everyone with me?

s398
00:31:13.120 --> 00:31:14.000
Are we good?

s399
00:31:14.000 --> 00:31:16.080
Is anyone able to run it with me?

s400
00:31:16.080 --> 00:31:19.279
Am I going too fast or are we just watching us?

s401
00:31:19.279 --> 00:31:20.000
That works.

s402
00:31:20.000 --> 00:31:20.480
Oh, okay.

s403
00:31:20.480 --> 00:31:20.640
Good.

s404
00:31:20.640 --> 00:31:22.000
We have at least a few people.

s405
00:31:22.000 --> 00:31:24.399
I I would like to add something to the hooks.

s406
00:31:24.399 --> 00:31:32.080
Sometimes, you know, hook is better because when you're using a LLM with some tools, the LLM are probabilistic.

s407
00:31:32.080 --> 00:31:32.399
Yeah.

s408
00:31:32.399 --> 00:31:43.039
You know they when you put a prom inside your agentic application the prom is like a suggestion you know it's only about the probability to give you an answer.

s409
00:31:43.039 --> 00:31:47.039
So when you use a hook you can be more deterministic.

s410
00:31:47.039 --> 00:31:57.279
So you can put code inside your aent loop so you can put code a python code before or after the invocation.

s411
00:31:57.279 --> 00:32:07.760
So you can stop uh I don't know in this example you stop a a lot of more than three tools invocation but for example if you want to restrict

s412
00:32:07.760 --> 00:32:22.399
a I don't know some credit cards number something like that you can put a hook a code capable to understand some things so yeah hey you can receive this information so I going to block this with this deterministic

s413
00:32:22.399 --> 00:32:29.120
uh function so you don't receive that so the model the model never is going to receive that information.

s414
00:32:29.120 --> 00:32:32.480
So you block the call so you don't waste token.

s415
00:32:32.480 --> 00:32:34.640
So you don't have to invoke the model again.

s416
00:32:34.640 --> 00:32:38.399
You don't you don't waste tokens because you are stopping that.

s417
00:32:38.399 --> 00:32:39.679
You send a hook.

s418
00:32:39.679 --> 00:32:50.000
And if you don't want to send some type of answer to your customer service, you can stop that answer with after call hook as well.

s419
00:32:50.000 --> 00:32:50.720
Exactly.

s420
00:32:50.720 --> 00:32:52.960
Thank you.

s421
00:32:54.240 --> 00:32:54.640
Okay.

s422
00:32:54.640 --> 00:32:56.080
So you can try it out yourself.

s423
00:32:56.080 --> 00:33:02.720
And again, if you want to do multi-turn conversations, go to chat.py in the second module with hooks enabled.

s424
00:33:02.720 --> 00:33:04.240
You can still continue to chat with it.

s425
00:33:04.240 --> 00:33:08.320
And you can play around, add different hooks at different places, see what works.

s426
00:33:08.320 --> 00:33:12.320
You can try and block certain customers or block certain types of questions.

s427
00:33:12.320 --> 00:33:15.840
Thing guard rails, right?

s428
00:33:15.840 --> 00:33:22.480
So hooks are amazing and we want to have hooks as we're writing good building good agentic systems.

s429
00:33:22.480 --> 00:33:27.279
Now, let's add one more layer of coolness to this project, right?

s430
00:33:27.279 --> 00:33:28.880
Let's add skills.

s431
00:33:28.880 --> 00:33:39.519
Let's add skills and let's find a way to steer your agent and your LLM and get them to respond in a fashion that we want it to respond in.

s432
00:33:39.519 --> 00:33:41.440
And so, steering is I love steering.

s433
00:33:41.440 --> 00:33:42.640
Steering is awesome.

s434
00:33:42.640 --> 00:33:45.919
Um, so let's get to steering.

s435
00:33:46.000 --> 00:33:47.120
Do I have any questions?

s436
00:33:47.120 --> 00:33:50.480
Everyone good with the idea of hooks?

s437
00:33:50.559 --> 00:33:52.559
Yes.

s438
00:34:07.360 --> 00:34:12.399
So the so if we sorry

s439
00:34:12.399 --> 00:34:17.679
oh okay okay okay um so the question that was Oh you have a mic now do you want to

s440
00:34:17.679 --> 00:34:18.240
yes

s441
00:34:18.240 --> 00:34:26.079
okay ask oh this is wrong uh I saw that in the example with the hook, it kept running the agent, but it just blocked the tool call.

s442
00:34:26.079 --> 00:34:30.960
How do we stop the agent so that it it doesn't go into infinite loop and keep looping?

s443
00:34:30.960 --> 00:34:31.520
And

s444
00:34:31.520 --> 00:34:38.480
so, as we're defining our hooks, we can define the hook in such a way to even end the agent's turn if we wanted to.

s445
00:34:38.480 --> 00:34:48.800
For demo purposes, we wanted to show you how it's working so that we can see it doing the rate limiting and we can see that it's not running multiple times, right, the calls.

s446
00:34:48.800 --> 00:35:00.560
So what it's doing is it's trying to invoke the tool in this case because we said before tool invocation it just kept attempting to do it and kept stopping and but the LLM still continued to run the loop until the end.

s447
00:35:00.560 --> 00:35:07.839
But if we want we can create it in such a way that we say okay if I see this just stop the turn and end it at that point.

s448
00:35:07.839 --> 00:35:13.040
So the we can definitely customize just because we wanted to show you the end to end working.

s449
00:35:13.040 --> 00:35:14.640
We made it this way.

s450
00:35:14.640 --> 00:35:17.760
Um thank you for that question.

s451
00:35:17.760 --> 00:35:18.400
Um, okay.

s452
00:35:18.400 --> 00:35:20.560
So, skills and steering.

s453
00:35:20.560 --> 00:35:33.440
Now, now this is a chatbot that's supposed to be answering customer service questions, but they could be asking a bunch of different questions that the agent may just not have access or the knowledge to answer.

s454
00:35:33.440 --> 00:35:35.280
So, how do we give it that knowledge?

s455
00:35:35.280 --> 00:35:37.359
How do we tell it how to answer it?

s456
00:35:37.359 --> 00:35:48.320
We create what's called a skills folder, a skills file which contains potentially all of your information on your your your ground truth, right?

s457
00:35:48.320 --> 00:35:54.000
Your uh single source of truth maybe on what it what actually what steps it needs to take.

s458
00:35:54.000 --> 00:35:57.440
And we can add this as a markdown file.

s459
00:35:57.440 --> 00:36:07.680
And this is a way by which so here what it do what it would do is when we add agent skills it would first go look up the skills folder

s460
00:36:07.680 --> 00:36:15.040
and read all of the skills see which one actually makes sense and then it would use those skills.

s461
00:36:15.040 --> 00:36:26.720
Um let me get to steering in just a bit but skills is a way by which we can give our let me go to the third one third module.

s462
00:36:26.720 --> 00:36:32.160
So um I'm I'm just gonna run this first.

s463
00:36:35.040 --> 00:36:36.400
Perfect.

s464
00:36:36.400 --> 00:36:41.839
So first thing is when we create skills now we've got three types of skills that we've created.

s465
00:36:41.839 --> 00:36:44.079
One is how do you process refund?

s466
00:36:44.079 --> 00:36:45.760
How do you track orders?

s467
00:36:45.760 --> 00:36:49.359
And what if people ask some types of account related questions?

s468
00:36:49.359 --> 00:36:53.599
My password is not working or something a bunch of frequently asked questions.

s469
00:36:53.599 --> 00:36:55.040
How can we get it to work?

s470
00:36:55.040 --> 00:36:55.440
Right?

s471
00:36:55.440 --> 00:36:58.320
So this one is on how to handle account issues.

s472
00:36:58.320 --> 00:37:05.599
So here we are creating these different skills plugins and then we can directly call it.

s473
00:37:05.599 --> 00:37:11.040
Um so when I open the skills folder here we can look at sample skills.

s474
00:37:11.040 --> 00:37:29.760
So this is just a markdown file on skills for account troubleshooting which is giving it context additional context because in your system prompt you don't want to overflow it with all of the amount of information you have because those are also considered input tokens and those can get wasted

s475
00:37:29.760 --> 00:37:31.599
unnecessarily needlessly.

s476
00:37:31.599 --> 00:37:45.920
So when a certain type of question is being asked, we can give it context that is relevant to that specific type of question then it has access to all the information that it needs so that it can do justice and answer the question correctly.

s477
00:37:45.920 --> 00:37:51.119
So in this case this specific skill talks about how can we do account troubleshooting?

s478
00:37:51.119 --> 00:37:53.440
What does it require to reset a password?

s479
00:37:53.440 --> 00:37:55.760
What do you do when the account is locked?

s480
00:37:55.760 --> 00:37:57.920
And the same thing for like order tracking, right?

s481
00:37:57.920 --> 00:37:58.640
What do we do?

s482
00:37:58.640 --> 00:38:00.880
What are the steps that we need to follow?

s483
00:38:00.880 --> 00:38:08.480
So these are instructions that we give to the agent beforehand and we write this based on what we want the agent to do.

s484
00:38:08.480 --> 00:38:22.480
And so we create these different skills um files markdown files and when we run it apart from the system prompt what we give it access to is the plug-in.

s485
00:38:22.480 --> 00:38:34.079
So we've now we're now adding yet another uh parameter here which is called plug-in and this has access to all of the skills plugins and the skills plugin points to

s486
00:38:34.079 --> 00:38:36.160
the skills folder here.

s487
00:38:36.160 --> 00:38:43.359
So now it's going to invoke whichever skills it needs for that specific type of question that's being asked.

s488
00:38:43.359 --> 00:38:53.680
And when this runs and we someone says, "I'd like a refund for my wireless headphones," it's actually calling the skills as a tool.

s489
00:38:53.680 --> 00:38:55.839
And then it's saying, "Okay, I've got your account pulled up.

s490
00:38:55.839 --> 00:38:58.480
Here's what I found and here's how it's doing it."

s491
00:38:58.480 --> 00:39:01.599
So, it's becoming more and more deterministic.

s492
00:39:01.599 --> 00:39:07.920
It's got a natural order that it flows and you can invoke the context only at the time that it's required.

s493
00:39:07.920 --> 00:39:14.800
And it's not you're not lo overflowing your system prompt with a lot of tokens every single time.

s494
00:39:14.800 --> 00:39:20.800
Now this is skills but how many this is something that I've generally faced right with steering.

s495
00:39:20.800 --> 00:39:31.599
How many times have we struggled as we're talking to our agents to give us an answer to a question that we ask in a specific format and it always messes up.

s496
00:39:31.599 --> 00:39:34.560
It seems to get all of the difficult questions right.

s497
00:39:34.560 --> 00:39:50.000
If I tell it this is so if I ask it okay what is my what is the refund I'm supposed to get it would give us a refund and say okay this is what it is but they also generally tend to talk too much and generate a lot of tokens and they you know just free flowing.

s498
00:39:50.000 --> 00:39:54.240
So how do we give it how do we get it to respond in the format that we want?

s499
00:39:54.240 --> 00:40:06.560
How do how can we ensure that it's giving us like a structured output if that's what we need or like hey stop using m dashes every single time do we want to keep telling it we want to be able to catch that

s500
00:40:06.560 --> 00:40:11.599
deterministic the deterministically and ensure that it's doing it in a deterministic way.

s501
00:40:11.599 --> 00:40:25.040
So for that we do something called steering which helps the agent which helps the agent steer itself in the direction that we want it to by giving it a buddy agent.

s502
00:40:25.040 --> 00:40:36.480
So it works, think of it as like pair partnering, like pair programming or pair partnering where as it's generating an output, the buddy agent looks at what's being generated

s503
00:40:36.480 --> 00:40:41.440
and then that buddy agent can then tell it, hey, no, this is not what you're supposed to do.

s504
00:40:41.440 --> 00:40:43.599
This is the format that you wanted to do in.

s505
00:40:43.599 --> 00:40:52.560
So your buddy agent is sort of checking and correcting and course correcting and then the response you want is what is the response that you're actually happy with.

s506
00:40:52.560 --> 00:40:59.599
When you're deploying your code into production there is no room for egger in like format structure.

s507
00:40:59.599 --> 00:41:03.040
You want it a certain way and steering can help you do that.

s508
00:41:03.040 --> 00:41:12.079
Now I'm going to do I'm going to do this quickly because I want Ellie to talk about deployment which is how you can actually make sure your agent is helpful and useful.

s509
00:41:12.079 --> 00:41:18.560
So um quick um quick idea of steering handlers.

s510
00:41:18.560 --> 00:41:22.400
Now stirring handlers works the same way as hooks.

s511
00:41:22.400 --> 00:41:25.760
You can um call it you can invoke it at different points.

s512
00:41:25.760 --> 00:41:32.560
You can invoke it uh before LLM while LM is being invocated before tool call after tool call.

s513
00:41:32.560 --> 00:41:50.079
very similar to hooks except at that hook point now you're also adding another agent over there that can do a quick check and that can buddy like sort of buddy work with this and then give it the output once so think of it as another guard rail if you will right so then you can do a tool

s514
00:41:50.079 --> 00:42:03.280
call and then you can do this and this is a guide that can say oh you know what first look up this before you give me a refund or then you can say revise the tone of this message if it's sending out a message and then after that it gets sent.

s515
00:42:03.280 --> 00:42:08.640
So now you have more control over what your agent is generating.

s516
00:42:08.640 --> 00:42:12.960
And if we go back to steering.

s517
00:42:13.760 --> 00:42:14.160
Okay.

s518
00:42:14.160 --> 00:42:15.680
So again what do we want?

s519
00:42:15.680 --> 00:42:21.599
We want to uh import the steerings uh uh we want to import steerings over here.

s520
00:42:21.599 --> 00:42:23.920
And from here again the steering handler.

s521
00:42:23.920 --> 00:42:26.640
And these are all the different places that we're doing it at.

s522
00:42:26.640 --> 00:42:28.640
And you can do it in different ways.

s523
00:42:28.640 --> 00:42:32.319
uh check the the strands agent documentation.

s524
00:42:32.319 --> 00:42:39.680
It's the details are going to be in there but also in the workshop mentioned over here you will see all of the details.

s525
00:42:39.680 --> 00:42:42.319
Now we create a deterministic handler.

s526
00:42:42.319 --> 00:42:46.400
We tell it we give it rules and we tell it what it's supposed to do.

s527
00:42:46.400 --> 00:42:50.160
And this can also be a hardcoded function.

s528
00:42:50.160 --> 00:42:55.440
This can also be another agent that has an hardcoded function in it that works.

s529
00:42:55.440 --> 00:43:02.560
We can get it to do you can do like um type enforcement if you want the output to be only of a specific type.

s530
00:43:02.560 --> 00:43:05.200
You can do different types of enforcements over here.

s531
00:43:05.200 --> 00:43:05.520
Right?

s532
00:43:05.520 --> 00:43:11.280
So then you create a a steering agent and then this is all for steering.

s533
00:43:11.280 --> 00:43:11.760
Right?

s534
00:43:11.760 --> 00:43:16.079
So now you create a steering agent and you create the guard rail.

s535
00:43:16.079 --> 00:43:23.040
So here the refund workflow handler has been defined and finally you create the guardrail.

s536
00:43:23.040 --> 00:43:34.560
So here you're saying okay don't overpromise guarantee specific timelines don't blame the customer acknowledge the customer's frustration and so this is the tone guardrail handler that we're creating.

s537
00:43:34.560 --> 00:43:38.400
So this is the second type of steering agent that we've created.

s538
00:43:38.400 --> 00:43:51.599
Now what we do is in our final code apart from agent skills we just call these two different handlers that we've established and these handlers can be established at different points.

s539
00:43:51.599 --> 00:43:57.359
So we can say steer after model if we wanted to do and we can tell it what to do in this case.

s540
00:43:57.359 --> 00:44:09.839
But over here we can also tell it we can also do steering data.get we can create a ledger for it and we can choose to enable them at whichever part of the flow

s541
00:44:09.839 --> 00:44:12.240
the agentic flow we wanted to do.

s542
00:44:12.240 --> 00:44:18.480
And so at the end all we need to do is give it access to these two sterving handlers.

s543
00:44:18.480 --> 00:44:34.000
it's going to be enabled and then when you run it, it's not just calling the lookup customer and get order history, but it's also we see that it's evaluating

s544
00:44:34.000 --> 00:44:36.160
the agent response.

s545
00:44:36.160 --> 00:44:45.119
So before you send out the final response to your end user, you can ensure and you can be you can do it with full confidence.

s546
00:44:45.119 --> 00:44:57.680
you can say with full confidence that your model that your agent is most likely going to be responding in the way that you want to because we're establishing all of those control features.

s547
00:44:57.680 --> 00:45:01.760
Um you can try it yourself and then I'm going to quickly give it over to Ellie because she's going to be talking

s548
00:45:01.760 --> 00:45:09.440
because only have 12 minutes to put this agent in production but I want to I would like to add something to the steering part.

s549
00:45:09.440 --> 00:45:21.040
you know uh there is a a open source library that is calling agent control that you can add to a stringent is there in the documentation with agent control

s550
00:45:21.040 --> 00:45:36.560
you can create rules to the steering for example if I have a demo where I this is a travel engine so you can use hooks to block numbers for example it's one one to booking a room for more than five people

s551
00:45:36.560 --> 00:45:41.440
you can use a hook a hook to block the room for more than five people.

s552
00:45:41.440 --> 00:45:48.160
But if you want to steer the agent to block for more for five people, you can create rules.

s553
00:45:48.160 --> 00:45:59.760
So every time that the agent is going is receiving more than five bookings, he's going to say if I receive six, I can steer the booking for two rooms.

s554
00:45:59.760 --> 00:46:04.560
So you can create rules for that using the agent control library.

s555
00:46:04.560 --> 00:46:08.400
And the rules you can host this rule in a database.

s556
00:46:08.400 --> 00:46:13.280
So you can create a database for all your rules for steering the agents.

s557
00:46:13.280 --> 00:46:20.240
So every time that you invoke this agentic application, you can go to the database and see the rules.

s558
00:46:20.240 --> 00:46:22.400
So what is the good thing for this?

s559
00:46:22.400 --> 00:46:25.520
So you only have to change the rules in the database.

s560
00:46:25.520 --> 00:46:28.400
You don't have to change the code for the agent.

s561
00:46:28.400 --> 00:46:33.520
So the agent only have to knows they have to know the endpoint for your database.

s562
00:46:33.520 --> 00:46:39.680
So every time that you have a new rule, you can edit the database and that's it.

s563
00:46:39.680 --> 00:46:43.119
And let's put this agent in production.

s564
00:46:43.119 --> 00:46:53.200
So here we have the session manager, but I don't going to show you that session manager is when you want to save the memory using a framework.

s565
00:46:53.200 --> 00:47:07.440
So but you can do that using n get called memory without the framework and everything is in the in the code and here in the five for deployment we are not going to use a jupy notebook

s566
00:47:07.440 --> 00:47:12.160
because you can do that for jupy notebook but we are going to use the CLI the terminal.

s567
00:47:12.160 --> 00:47:17.760
So here in this folder uh lose the folder we are having the same engine.

s568
00:47:17.760 --> 00:47:25.119
So we have the customer service tools and we having the uh the skills we have everything here.

s569
00:47:25.119 --> 00:47:30.960
So to put this engine in production you have to go to the workship studio here.

s570
00:47:30.960 --> 00:47:33.040
This is the thing what we are going to do.

s571
00:47:33.040 --> 00:47:36.720
We are going to use the AWS CLI through the terminal.

s572
00:47:36.720 --> 00:47:41.599
We are going to use some one command or two commands in the CLI.

s573
00:47:41.599 --> 00:47:53.359
We are going to take this agent then we are going to send this agent this agent code to a runtime on AWS and agent core is going to deploy this code inside a container

s574
00:47:53.359 --> 00:48:02.400
but we are not going to handle that because agent core is going to do that for us and and we are going to have memory too without doing anything.

s575
00:48:02.400 --> 00:48:05.599
So let's see let's follow the steps.

s576
00:48:05.599 --> 00:48:19.119
So this is the ah something important when you build a gentic application and you want to put that code inside a core runtime the only different that you have to do for your engine is put this

s577
00:48:19.119 --> 00:48:21.760
deconator the a entry point.

s578
00:48:21.760 --> 00:48:39.520
So the MPP entry point is is the only different between your engine running in your notebook or your computer uh between production because the MTP entry point is the thing that the runtime when runtime see can see the MTP entry point ah

s579
00:48:39.520 --> 00:48:43.280
everything behind the MTP entry point is the agent.

s580
00:48:43.280 --> 00:48:53.200
So every time that you invoke this runtime, this container is going to run that code behind the empty entry point.

s581
00:48:53.839 --> 00:48:54.880
Okay.

s582
00:48:54.880 --> 00:48:58.800
So let's style this.

s583
00:48:58.800 --> 00:49:01.040
So I go to the here.

s584
00:49:01.040 --> 00:49:05.920
Sorry, let me open this.

s585
00:49:11.839 --> 00:49:20.240
This is the library that I need to execute all my CLI codes and mean I hope I have good internet is running.

s586
00:49:20.240 --> 00:49:20.960
Yeah.

s587
00:49:20.960 --> 00:49:27.520
So in this environment you are going to able to deploy the agent and everything.

s588
00:49:27.520 --> 00:49:35.359
But if you are running this locally you are going to be able to test the agent before to putting it in in AWS.

s589
00:49:35.359 --> 00:49:41.359
And something that you have to do to have the the built-in observability, you need to do something in the console.

s590
00:49:41.359 --> 00:49:43.599
So let let me show you this.

s591
00:49:43.599 --> 00:49:49.520
So to go to the console, you open this part AWS console.

s592
00:49:49.520 --> 00:49:57.359
So it's going to open the console that is running in this session in this uh in this uh account that you have.

s593
00:49:57.359 --> 00:50:15.440
So you need to go to a core run not here aen core better aen core so you can see all the service that a core have harness because you can build a hardness with a few lines of code too runtime gateway memory

s594
00:50:15.440 --> 00:50:28.079
and observability is just right here but you need to select something I don't remember what is the name but I'm going to show you let me see here here enable

s595
00:50:28.079 --> 00:50:42.640
no that's not here configure so you need to go to configure and here you need to enable transaction search so this thing allows you to have the built-in observability

s596
00:50:42.640 --> 00:50:57.839
inside the runtime if you don't have that you are not going to see the agentic observability inside your agent because cloudatch is not going to receive the information and another thing that you have to do let Save this

s597
00:50:57.839 --> 00:51:07.520
is install put inside the requirement the observability library that I have the observability requirements.

s598
00:51:07.520 --> 00:51:11.359
So for that sorry oh it's done.

s599
00:51:11.359 --> 00:51:20.720
So we have this transm requirements because I'm going to use AM core and you need this one the AWS oper telemetry district.

s600
00:51:20.720 --> 00:51:32.160
So if you are using another framework for example line chain or ci there is a unique library for that uh for that framework but you need to do some modification

s601
00:51:32.160 --> 00:51:44.400
inside your agentic application for a strand you don't need to do anything because a strand is built in for AWS so everything is built but the observability works for other frameworks but you need to do some modification

s602
00:51:44.400 --> 00:51:53.359
everything is in documentation so you can see it so we have the library let's go to So here I'm already there.

s603
00:51:53.359 --> 00:51:56.400
So A and C. Great.

s604
00:52:01.760 --> 00:52:05.440
Oh, so I going to create.

s605
00:52:05.440 --> 00:52:06.079
No, it's okay.

s606
00:52:06.079 --> 00:52:08.720
I I didn't save it.

s607
00:52:08.720 --> 00:52:14.319
So my name I going to put Ellie because I am Ellie.

s608
00:52:14.319 --> 00:52:16.559
And for here I don't going to create a harness.

s609
00:52:16.559 --> 00:52:18.800
I going to create a agent.

s610
00:52:18.800 --> 00:52:20.800
But I have my code.

s611
00:52:20.800 --> 00:52:25.119
You know, if you if you choose agent, it's going to be a simple agent for you.

s612
00:52:25.119 --> 00:52:27.920
But I have the code, so I can skip it.

s613
00:52:27.920 --> 00:52:35.280
And it's going to create environment everything that I need to put this aent that I already have inside this container.

s614
00:52:35.280 --> 00:52:37.040
So it's going to create a folder for me.

s615
00:52:37.040 --> 00:52:40.640
Here is my folder, the aen core, everything.

s616
00:52:40.640 --> 00:52:44.160
So you all these steps are here in the workshop.

s617
00:52:44.160 --> 00:52:44.800
Oh my god.

s618
00:52:44.800 --> 00:52:45.599
Five minutes.

s619
00:52:45.599 --> 00:52:47.520
But I going to do it in five minutes.

s620
00:52:47.520 --> 00:52:49.359
I'm going to put this aent in production.

s621
00:52:49.359 --> 00:52:51.520
That's all right.

s622
00:52:51.520 --> 00:52:52.079
Yeah.

s623
00:52:52.079 --> 00:52:59.839
So, a core add to add my aent and what is here.

s624
00:52:59.839 --> 00:53:02.079
So, well, it's taking a moment.

s625
00:53:02.079 --> 00:53:13.359
When I put a is going to add create the the container that I need, but I already have this agent here in my computer because I wanted to show you something.

s626
00:53:13.359 --> 00:53:16.480
the same engine that Sandy just showed you.

s627
00:53:16.480 --> 00:53:20.480
This customer engine I have I have the repo here in my computer.

s628
00:53:20.480 --> 00:53:22.800
So, let me put this bigger.

s629
00:53:22.800 --> 00:53:25.760
This is the same again the in the five.

s630
00:53:25.760 --> 00:53:36.160
Yeah, you can use a core dev agent core dev to test the a locally.

s631
00:53:36.160 --> 00:53:47.119
So you can do this you can't do this in the virtual studio because virtual studio is a virtual machine that only allows you to run code in this VS code

s632
00:53:47.119 --> 00:53:52.880
but if you are running this locally in your computer you can have this environment to test the engine.

s633
00:53:52.880 --> 00:53:57.680
So this is the same agent and you know I have some sessions here too.

s634
00:53:57.680 --> 00:53:59.440
You can see the amounts of tokens.

s635
00:53:59.440 --> 00:54:12.960
If you want to explore what's happening inside your engine and you can do that locally but because I'm using Amazon Metro as a model provider I'm using my AWS

s636
00:54:12.960 --> 00:54:23.680
credential and to use Amazon a core you need AWS credential if you are running this locally but in the Amazon brow and workshop you don't need that.

s637
00:54:23.680 --> 00:54:25.119
So yeah, it's working.

s638
00:54:25.119 --> 00:54:28.960
Yeah, it's the same exactly the same area and I didn't do anything.

s639
00:54:28.960 --> 00:54:31.119
So let's come back to the

s640
00:54:31.119 --> 00:54:34.400
Yeah, I have my everything.

s641
00:54:34.400 --> 00:54:34.720
Yeah.

s642
00:54:34.720 --> 00:54:36.559
So I I I did this.

s643
00:54:36.559 --> 00:54:39.599
I don't remember if I did this.

s644
00:54:40.000 --> 00:54:40.319
Nope.

s645
00:54:40.319 --> 00:54:42.720
So CD

s646
00:54:42.720 --> 00:54:44.640
early.

s647
00:54:44.640 --> 00:54:50.400
So I going to add my uh code inside this aented application.

s648
00:54:50.400 --> 00:54:53.200
Let me see inside this container.

s649
00:54:53.200 --> 00:55:09.040
So agent core what I want I want a agent I going to uh click bring my own code that's it that's it and I you can use direct code deploy or you can use container

s650
00:55:09.040 --> 00:55:21.200
I going to use that and you can bring your own API key to deploy this a using entropy open IO whatever you want but I'm going to use Amazon better I don't going to do anything here

s651
00:55:21.200 --> 00:55:22.240
Enter.

s652
00:55:22.240 --> 00:55:23.040
Enter.

s653
00:55:23.040 --> 00:55:23.920
That's it.

s654
00:55:23.920 --> 00:55:27.200
Now I going to move my code.

s655
00:55:27.200 --> 00:55:33.520
And to move my code, I have here copy and paste.

s656
00:55:33.520 --> 00:55:37.599
And okay, now what else?

s657
00:55:37.839 --> 00:55:40.240
Ah, I need to create this.

s658
00:55:40.240 --> 00:55:41.280
So let's see.

s659
00:55:41.280 --> 00:55:42.960
Copy and paste.

s660
00:55:42.960 --> 00:55:45.280
One minute.

s661
00:55:45.440 --> 00:55:46.640
Wait.

s662
00:55:46.640 --> 00:55:48.640
And I don't going to do that.

s663
00:55:48.640 --> 00:55:58.319
So core deploy and one minute to deploy one minute to put this agency in production inside AWS.

s664
00:55:58.319 --> 00:56:03.040
So it's running is going to validate it's going to check my credentials.

s665
00:56:03.040 --> 00:56:17.359
So if you are familiar with AWS when you build everything inside AWS you need to create the am you need to create policy permissions you need to allows the service to connect with other service you need to do a lot of thing inside

s666
00:56:17.359 --> 00:56:31.760
core is handle everything for me so you I don't need to create the policy I don't need to create permissions I don't need to create every anything so it's doing everything for me and you can you can see that ah and because I created that locally

s667
00:56:31.760 --> 00:56:37.440
it's creating a cloud formation is a infrastructure as a code using CDK.

s668
00:56:37.440 --> 00:56:39.599
So you can explore the CDK code.

s669
00:56:39.599 --> 00:56:43.920
If you are not familiar with CDK, CDK is cloud developer kit.

s670
00:56:43.920 --> 00:56:51.200
So you can create infrastructure as a code with a l a program lens one that you know for example Python, TypeScript, whatever.

s671
00:56:51.200 --> 00:56:52.960
So it's doing that for me.

s672
00:56:52.960 --> 00:56:54.880
It's creating it's creating everything.

s673
00:56:54.880 --> 00:56:57.359
It's creating the deployment and everything.

s674
00:56:57.359 --> 00:57:00.640
And you can do that you can see that in the console.

s675
00:57:00.640 --> 00:57:04.319
So let's go to Amazon bedro runtime.

s676
00:57:05.040 --> 00:57:05.520
Yeah.

s677
00:57:05.520 --> 00:57:05.839
What?

s678
00:57:05.839 --> 00:57:07.119
I can't see anything up.

s679
00:57:07.119 --> 00:57:11.200
So it's it's creating the let me show the cloud formation.

s680
00:57:17.280 --> 00:57:18.720
Here I going to see my stack.

s681
00:57:18.720 --> 00:57:20.400
Ah no because it's a virtual studio account.

s682
00:57:20.400 --> 00:57:20.880
I'm sorry.

s683
00:57:20.880 --> 00:57:22.799
You can see that here.

s684
00:57:22.799 --> 00:57:28.640
But when it start to put this inside the runtime I will see that here.

s685
00:57:28.640 --> 00:57:29.760
There we go.

s686
00:57:29.760 --> 00:57:33.760
So it's here and you can test the is is ready.

s687
00:57:33.760 --> 00:57:35.760
Okay, I can test the end right away.

s688
00:57:35.760 --> 00:57:46.880
So I can invote this engine here and you know this is super uh terminal everything inside the repo.

s689
00:57:46.880 --> 00:57:50.960
You can find how to invoke this a using bo tree.

s690
00:57:50.960 --> 00:57:57.280
So you the only thing that you need is the air and for this agent is working.

s691
00:57:57.280 --> 00:57:58.559
Okay, I think it's working.

s692
00:57:58.559 --> 00:57:59.680
I hope so.

s693
00:57:59.680 --> 00:58:00.160
It is.

s694
00:58:00.160 --> 00:58:01.599
It's invoking the agent.

s695
00:58:01.599 --> 00:58:01.920
Yeah.

s696
00:58:01.920 --> 00:58:07.920
So here you can find how to invoke this agent using the uh SDK.

s697
00:58:07.920 --> 00:58:09.920
Is there is give me the answer.

s698
00:58:09.920 --> 00:58:10.559
You can

s699
00:58:10.559 --> 00:58:11.440
it it actually worked.

s700
00:58:11.440 --> 00:58:13.040
I think is there anything else I can?

s701
00:58:13.040 --> 00:58:13.440
Yeah.

s702
00:58:13.440 --> 00:58:16.880
So you can invoke this agent using the SD explore.

s703
00:58:16.880 --> 00:58:23.599
how to involve this engine using the SDK and to see the observability.

s704
00:58:23.680 --> 00:58:27.280
You can go to the runtime.

s705
00:58:28.160 --> 00:58:43.839
In here you have the observability dashboard and you can see the session the trace how many runtime that you running how many session do you have each session is a runtime a different container

s706
00:58:43.839 --> 00:58:56.319
it take a moment you take about one or two minutes to see everything there I'm okay what yeah yeah I'm done that's it please take a picture for this

s707
00:58:56.319 --> 00:59:02.640
and share it for the other Friends, here you can find all the information.

s708
00:59:02.640 --> 00:59:04.640
Everything is here.

s709
00:59:04.640 --> 00:59:14.960
The the deck, the work studio, some credits if you are lucky because our few about 20 credits for Eds

s710
00:59:14.960 --> 00:59:16.319
and the Feda please.

s711
00:59:16.319 --> 00:59:18.960
Firestar, we are amazing the internet.

s712
00:59:18.960 --> 00:59:20.620
Nobody's not at all

s713
00:59:20.620 --> 00:59:21.680
[laughter]

s714
00:59:21.680 --> 00:59:31.040
and all social media and if you have an answer we are on linking, Twitter, Instagram.

s715
00:59:31.040 --> 00:59:37.680
Please in the QR code is everything that you need to learn more about strands and a core.

s716
00:59:37.680 --> 00:59:39.839
Thank you.

s717
00:59:52.716 --> 00:59:54.716
[music]
