Transcription: OpenAgents Episode 058 - Agent Uses Plugin
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1749490769151287318 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 058: Agent Uses Plugin We give our agents the ability to use ... Upload date: 20240122 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T20:07:09Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: Let's continue. To recap, earlier in this series, we built up our concept of an agent from
[00:06] Christopher David: First Principles, what the agent needs to be able to do, mainly focusing on the tasks and steps.
[00:15] Christopher David: And we now want to equip it with these plugins that we've created recently. These Wazom plugins added a little bit of UI in here, kind of pulling in the
[00:26] Christopher David: Shad UI components,
[00:29] Christopher David: De-reactifying them,
[00:31] Christopher David: Just harvesting the tail end,
[00:33] Christopher David: It could bring it to Blake and Potence. We got some non-horrible UI here.
[00:38] Christopher David: So now you can do something like making a plugin called Val counter,
[00:45] Christopher David: I count your vowels, and then you put in a ex-tism Wazom link.
[00:52] Christopher David: You can set a fee, we haven't implemented this yet.
[00:57] Christopher David: And then here you can test it. So I'm going to enter, you know, how many vowels are in that, and it counts the vowels.
[01:05] Christopher David: And then the idea is that we're going to be stringing this idea of a plugin, a Wazom plugin, with basically any arbitrary functionality written in 15 different languages, whatever,
[01:15] Christopher David: Extasms of course.
[01:16] Christopher David: Into the workflow that we've already built of agents being able to have workflows that you kind of compose through.
[01:27] Christopher David: Soon to be a little drag and drop interface. Now we removed a bunch of the previous code.
[01:32] Christopher David: It'll be really easy to pull this back end because it's just also tail end code.
[01:35] Christopher David: But we have four different types currently of task,
[01:41] Christopher David: our step rather categories, we have validation, we have embedding, we have inference and
[01:50] Christopher David: Civilarity search. So after the embedding comes civilarity search, then passing that to inference.
[01:55] Christopher David: So we have the four categories that we've written code for thus far,
[02:01] Christopher David: our basic retrieval log bend to generation.
[02:05] Christopher David: Now we're going to add a new type for plugin.
[02:08] Christopher David: And that plugin should have, I mean, really, that you kind of supersede all of the previous code that we've written because then people can create their own validation or own embedding,
[02:16] Christopher David: throw in some larity search, own inference, their own third party APIs, their own whatever things that they can think of.
[02:23] Christopher David: And we're going to provide a little interface where people can string those together into workflows.
[02:28] Christopher David: And we've got most of the code for that kind of already built in bits of pieces earlier in the series.
[02:32] Christopher David: We've just got to string that together. By the end of this week,
[02:35] Christopher David: it should be kind of working fully and to end.
[02:38] Christopher David: And then we can monetize it and then we will be beating open AI on monetization of an actual agent marketplace with actual commerce,
[02:48] Christopher David: not this, maybe with some time and cue ones stuff.
[02:53] Christopher David: Okay, so we have plugins and my objective for this video is to at least maybe not fully via the UI, but at least kind of in the the backend, like via the command line,
[03:05] Christopher David: being able to run an agent to workflow, probably extending the demo rag ones that we've used previously,
[03:11] Christopher David: and just have it use a plugin as one of the steps.
[03:17] Christopher David: So first let's take a little spin through what's actually what the code of this plugin stuff is.
[03:26] Christopher David: Like what happens when we actually call this endpoint.
[03:31] Christopher David: Let's see.
[03:37] Christopher David: We have on the plugin show screen and HTMLX form.
[03:50] Christopher David: That calls routes plugins call.
[03:57] Christopher David: Plug in controller call.
[04:02] Christopher David: Right now we're hard coding the function count vowels because we know that it's there, but we have in the metadata that we can parse from the plugin.
[04:15] Christopher David: This code right here.
[04:18] Christopher David: To get the like functions out of a plugin.
[04:23] Christopher David: We call this X system function that the X system team via die-lip so created and that gives us like the function names.
[04:32] Christopher David: via the parse module function of that plugin.
[04:37] Christopher David: And that gives us information about the exports.
[04:39] Christopher David: So all these these wasm modules they have input and they have output.
[04:45] Christopher David: I think that we this will give us the information also about the shape of the data that is expected in and out.
[04:53] Christopher David: Need to dig a little further into the like gobble the code.
[04:56] Christopher David: Protobuff stuff that they return.
[04:59] Christopher David: But we know that this one returns like accepts a string in return to string of that.
[05:06] Christopher David: Kind of ugly little object of.
[05:11] Christopher David: Yeah, the count the total and then they give vowels as an example of a config like when you call the function you can pass in.
[05:21] Christopher David: And then you can see that the code is a bit different.
[05:24] Christopher David: So if you want to specify that we're also going to count wise or some other language.
[05:29] Christopher David: You can easily modify that when you call it.
[05:32] Christopher David: So that kind of customization we want to make that available through our interface with like a little playground playground per plugin.
[05:38] Christopher David: So you can see okay this plugin does this.
[05:41] Christopher David: That's cool I want to pull that in.
[05:43] Christopher David: You know click to inspect source code click to verify that the source code matches the hash of the plugin which we have all that already is part of.
[05:50] Christopher David: Existing plugin.
[05:52] Christopher David: So just a little interface to compose.
[05:56] Christopher David: Plugins into agent workflows the ability to test it and then monetize and then promote that in a marketplace.
[06:03] Christopher David: Okay.
[06:05] Christopher David: So that's the basics of a plugin.
[06:09] Christopher David: And then what we have right now for the agents.
[06:14] Christopher David: So in our models we have agent.
[06:18] Christopher David: So just a little bit our agent unit tests.
[06:28] Christopher David: That chatting stuff so an agent has its own balance.
[06:33] Christopher David: Agent has many brains that's for like the knowledge base.
[06:40] Christopher David: So the basics are if belongs to a user it has a name.
[06:45] Christopher David: And then in the description.
[06:48] Christopher David: It has instructions that it can consult it has a welcome message like the first thing you see when you chat with it if you're chatting with it.
[06:55] Christopher David: It can have conversations.
[06:57] Christopher David: And then it can have many tasks.
[06:59] Christopher David: It can have many steps.
[07:01] Christopher David: Files and thoughts we have in the implemented that's for like the idea of reflection from the general agents paper will be.
[07:09] Christopher David: Doing something with that soon.
[07:12] Christopher David: And then.
[07:18] Christopher David: For can run.
[07:21] Christopher David: Are we using can run.
[07:24] Christopher David: Okay. So here's an example of the concierge cedar.
[07:27] Christopher David: So this is like the little kind of demo chatbot.
[07:29] Christopher David: You can go back and look at the Hello Concierge video to see a demo of that.
[07:35] Christopher David: But so here we when we give an example of like seeding the database with like a.
[07:41] Christopher David: A basic agent that works.
[07:45] Christopher David: So you can kind of get an idea of the flow.
[07:47] Christopher David: So it's we're creating an agent.
[07:49] Christopher David: Name the concierge a chatbot that responds to user messages after consulting the knowledge base.
[07:56] Christopher David: Instructions respond to user chat message after consulting the knowledge base.
[08:00] Christopher David: Hello, I'm the concierge.
[08:01] Christopher David: How can I help you?
[08:03] Christopher David: So the task is just respond to the user.
[08:06] Christopher David: And then that task is multiple steps.
[08:09] Christopher David: It's first we're going to validate and show that the input is a valid chat message.
[08:14] Christopher David: And then you can see that the success action is to go to the next node.
[08:18] Christopher David: So order one order two.
[08:20] Christopher David: Next we're going to convert the user input into a vector embedding.
[08:26] Christopher David: Then we're going to run a similarity search based on the knowledge base.
[08:33] Christopher David: And then using that we're going to call the LLM.
[08:37] Christopher David: And this success action is to return JSON to the user.
[08:45] Christopher David: The output from each step is passed as the input to the next step.
[08:51] Christopher David: And then we're going to put up the first step here being an entry type of user input.
[08:55] Christopher David: And after that the entry type being node.
[09:02] Christopher David: And then for the knowledge base of what it consults here,
[09:05] Christopher David: I just took some strings and just ran the embeddings on it and then paced the embeddings in it.
[09:11] Christopher David: A few videos ago we made it so that you can upload files to agents like PDFs.
[09:17] Christopher David: And it will run through and vectorize each page of that and add each page as a data point.
[09:24] Christopher David: It's a little vector database brain.
[09:30] Christopher David: So we're just putting tons of strings in here of these different ways.
[09:37] Christopher David: It should respond or you know what, you can tell what response.
[09:48] Christopher David: So I think for the plugin that we're going to demo, we're going to demo the count vowels plugin.
[09:54] Christopher David: And so we'll maybe probably just like extend this concierge with the like ability to count vowels or put that into the flow in some ways.
[10:07] Christopher David: We maybe not in this video, but could probably set the plugin functionality as sort of like the main way of implementing function calling like this maybe how we implement function calling and like this sort of like marketplace of functions.
[10:33] Christopher David: So you can say to an agent like here's the 30 different things that you have access to because here's the 30 plugins on the store.
[10:52] Christopher David: And there are associated costs.
[10:55] Christopher David: You have a balance of 500 Satoshi's, you know, tiny bit coin balance. So like fraction of a penny, I think maybe a few cents.
[11:08] Christopher David: What actions do you want to take?
[11:12] Christopher David: And then give it this entire huge database of functions it can call as plugins.
[11:23] Christopher David: That's going to be pretty cool.
[11:33] Christopher David: So I think what we want is.
[11:41] Christopher David: A step to be able to have type plugin.
[11:47] Christopher David: So a step test.
[12:00] Christopher David: When a step runs, it's a step executed.
[12:10] Christopher David: So what has optional input and output, optional perMs.
[12:21] Christopher David: Let's take a look at where we have the code.
[12:23] Christopher David: So I want to figure out where to put a like a unit or feature test for asserting that how how we're handled the plugin.
[12:34] Christopher David: This is like not elegant code.
[12:42] Christopher David: So step executed when we call run on a step executed to like run the thing.
[12:52] Christopher David: It gets one of those four categories validation and betting similarity search for inference.
[12:58] Christopher David: And then it calls that category as the function passing in the input as well as the conversation if there's a conversation.
[13:07] Christopher David: And those functions are defined on step actions trait validation.
[13:13] Christopher David: We're kind of skipping over that.
[13:16] Christopher David: And betting.
[13:19] Christopher David: If we're in a testing environment create a fake environment otherwise create a gateway to our open computer network via the queen me, which assigns jobs to our worker be.
[13:31] Christopher David: People that are running our worker software on the like 200 different consumer GPUs.
[13:38] Christopher David: Basically, betting's via the like fast and bed one of the fast bed 708 and betting models we use.
[13:46] Christopher David: Things you can do with that too.
[13:48] Christopher David: Similarity search.
[13:54] Christopher David: We got to fix this for now.
[13:56] Christopher David: We're using all the data points together.
[13:58] Christopher David: Walk it down to the specific brain.
[14:02] Christopher David: And then inference.
[14:17] Christopher David: Like chatting the response.
[14:19] Christopher David: I need to refactor some of that.
[14:21] Christopher David: And then returning the output.
[14:32] Christopher David: Well.
[14:39] Christopher David: So I think what we're going to end up having is a.
[14:44] Christopher David: Step action called plugin but let's let's drive this out via TV.
[14:53] Christopher David: We should maybe have a step actions.
[14:57] Christopher David: Test.
[15:02] Christopher David: Let me trust it.
[15:11] Christopher David: Step actions test.
[15:32] Christopher David: No, that's not what it wants.
[15:57] Christopher David: I don't want to assert on step actions.
[16:07] Christopher David: And then remind me does a step have a category or step executed.
[16:15] Christopher David: Step has a category.
[16:18] Christopher David: And the step executed.
[16:23] Christopher David: So here's what I'm going to do.
[16:29] Christopher David: Step test.
[16:39] Christopher David: It can process a plugin.
[16:49] Christopher David: Now I think I have a plugin cedar.
[16:59] Christopher David: Yes, that runs.
[17:04] Christopher David: That seeds the vowel counter.
[17:09] Christopher David: So I do want to do that.
[17:17] Christopher David: I want to do that.
[17:27] Christopher David: I import surf.
[17:42] Christopher David: I'm going to do that.
[18:05] Christopher David: To first of all.
[18:10] Christopher David: Let's do that.
[18:40] Christopher David: Okay.
[19:10] Christopher David: So then what I want to do is I want to create a step.
[19:22] Christopher David: Where the category is plugin.
[19:40] Christopher David: And the input I need is what's.
[19:59] Christopher David: Well, I'm going to be calling Ron on the step-excuting.
[20:15] Christopher David: Let me try this.
[20:24] Christopher David: Let's see if Kupal can be out here.
[20:46] Christopher David: After reviewing that's a new factor B.
[21:06] Christopher David: Create a new step-executed for this step.
[21:19] Christopher David: Ron, what the hell is it?
[21:24] Christopher David: I think that's left over from something previous.
[21:30] Christopher David: That revided out.
[21:32] Christopher David: Could a new step-executed, here we go.
[21:55] Christopher David: Alright, just give me this step-executed factor A.
[22:15] Christopher David: And then the input maybe should be plug in ID.
[22:45] Christopher David: And then I'm going to expect the output to be.
[23:45] Christopher David: I'm going to expect the output to be this.
[24:02] Christopher David: Did I do it in a ring?
[24:15] Christopher David: I think it's what I'd choose to return.
[24:17] Christopher David: In this case, I'm just going to return the exact thing you there.
[24:32] Christopher David: Perfect.
[24:36] Christopher David: So this is the failing test that I want to pass.
[24:43] Christopher David: So we're starting the plug-in.
[24:48] Christopher David: We're seeing what the plug-in of vowel counter.
[24:50] Christopher David: Making sure that we've got the right laws of following that.
[24:54] Christopher David: We are creating a step with the category of plug-in, something that will later on be slotted
[24:58] Christopher David: into these Asian workflows alongside everything else.
[25:03] Christopher David: We're creating a new step-executed example, an instance of running the step with specific
[25:08] Christopher David: input giving it the step-ides or reference all that information as well as what we're
[25:14] Christopher David: passing to the step-executed, which is the plug-in ID and the input that we want counted
[25:24] Christopher David: like passed to the plug-in itself.
[25:27] Christopher David: So we're running the step-ides here and we're expecting the output to be what we get
[25:30] Christopher David: back from the WASM plug-in.
[25:36] Christopher David: Okay, so this, I'm going to delete this.
[25:44] Christopher David: We'll call this plug-in test fails properly.
[25:54] Christopher David: It's something I want to branch.
[25:59] Christopher David: I'm not on a branch.
[26:01] Christopher David: So we want to run that.
[26:08] Christopher David: We get call the undefined method step-executed plug-in because it's trying to do this in here.
[26:22] Christopher David: So let's do public function plug-in and see what the response is.
[26:38] Christopher David: Okay, I think step-executed is expecting output to be an array, maybe.
[26:50] Christopher David: All right, it's expecting JSON so we can see it into the database.
[26:54] Christopher David: We might want to change that.
[27:03] Christopher David: So...
[27:12] Christopher David: If I can JSON decode that as is...
[27:16] Christopher David: We're just going to do a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit
[27:46] Christopher David: a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit
[28:16] Christopher David: a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit
[28:46] Christopher David: passing an input right, let's get the plug and ID first let's take a look at what this says okay so expect an array with plug and ID and input
[29:16] Christopher David: throw error otherwise
[29:46] Christopher David: this is horrendously ugly but I'll clean it up later
[30:16] Christopher David: okay so ensuring that that is good
[30:43] Christopher David: and then I think we can reuse actually let's get the plug in
[30:51] Christopher David: no
[30:59] Christopher David: find or fail
[31:20] Christopher David: and we have a test for
[31:38] Christopher David: plug in
[31:45] Christopher David: and we have a feature test for calling a plug and we don't have a unit test
[31:56] Christopher David: so now I got to go into the controller and look at this I got to take an extra five seconds
[32:05] Christopher David: now we are going to need the function name to be passed in
[32:11] Christopher David: which we will for now hard going that's okay
[33:05] Christopher David: let's just dial it up that just to
[33:12] Christopher David: ruffle in our
[33:15] Christopher David: okay that's the plug-in that we're loading
[33:18] Christopher David: oh shit
[33:20] Christopher David: it's pretty quick
[33:22] Christopher David: I mean it's pretty quick and also we're loading the wasm from a remote URL
[33:27] Christopher David: you know there's going to be all sorts of ways to speed this up
[33:32] Christopher David: okay so let's step through
[33:37] Christopher David: what are we testing
[33:39] Christopher David: we're setting up by
[33:43] Christopher David: creating a plug-in in our system the same that we've been creating
[33:46] Christopher David: our interface for our testing you know here's the vowel
[33:50] Christopher David: counter-walsom file
[33:54] Christopher David: grab that
[33:57] Christopher David: model that we've created
[33:59] Christopher David: create a step with the category of plug-in so the
[34:02] Christopher David: agentic workflow will know
[34:05] Christopher David: and it needs to execute the plug-in function
[34:08] Christopher David: create a step executed passing in the input of the idea of a plug-in
[34:13] Christopher David: the input we're going to need to extend this with the name of the function we can do that
[34:17] Christopher David: and then run the step and expect that the output of the step will be
[34:22] Christopher David: this and that's what that's what gets passed to
[34:31] Christopher David: that is what gets passed to the next
[34:35] Christopher David: step in the flow and we want to maybe assert that this is now in like an array
[34:44] Christopher David: of curiosity what happens if we do
[34:49] Christopher David: JSON to code
[34:53] Christopher David: I want to pretty array
[35:15] Christopher David: there we go yeah I've been coding it too much
[35:18] Christopher David: I got a bunch that a little bit
[35:27] Christopher David: cool okay so let's fix that first
[35:31] Christopher David: in the run
[35:33] Christopher David: no because we can't assume that it's coming back with JSON
[35:36] Christopher David: we come back whatever so we should push
[35:38] Christopher David: and we can't actually just dump the raw output to the user and expect them to
[35:45] Christopher David: figure it out themselves
[35:49] Christopher David: but our
[35:51] Christopher David: databases expecting JSON so we do need to have
[35:56] Christopher David: for at least the database the raw
[35:59] Christopher David: string to be in a JSON object but that will pass the raw string to the user
[36:04] Christopher David: and then we can get the
[36:08] Christopher David: code
[36:13] Christopher David: so let's add
[36:17] Christopher David: that you have to pass in a function
[36:22] Christopher David: of what to call on the plugin so we can get beyond just the hard code
[36:27] Christopher David: call
[36:33] Christopher David: oops
[36:38] Christopher David: actually don't need to mess with the controller
[36:41] Christopher David: it's just what gets passed to the plugin model
[36:46] Christopher David: okay we'll call function
[36:49] Christopher David: count vowels
[36:54] Christopher David: and then in our step actions we'll validate that we have
[36:58] Christopher David: let's give chat jpeety something to do
[37:01] Christopher David: chat jpeety is feeling bored
[37:05] Christopher David: edit this to
[37:08] Christopher David: now expect
[37:10] Christopher David: an array of three
[37:12] Christopher David: elements
[37:15] Christopher David: we need to add the
[37:18] Christopher David: function
[37:25] Christopher David: build
[37:47] Christopher David: okay
[37:48] Christopher David: and then for the function we're going to do this as input
[37:54] Christopher David: function
[37:55] Christopher David: now this should fail because we are going to pass that in
[38:00] Christopher David: or
[38:07] Christopher David: did we
[38:11] Christopher David: but if I don't pass it in it will fail
[38:15] Christopher David: okay so now we're calling any arbitrary
[38:21] Christopher David: function on any arbitrary
[38:23] Christopher David: so this now works for like literally any plugin
[38:26] Christopher David: that anyone would make
[38:28] Christopher David: it's a little like sighting
[38:31] Christopher David: scary exciting
[38:33] Christopher David: what if you're going to do what are people going to do
[38:36] Christopher David: I don't know
[38:39] Christopher David: okay
[38:41] Christopher David: test
[38:42] Christopher David: passes it works
[38:46] Christopher David: okay
[38:49] Christopher David: let's test it out
[38:51] Christopher David: in a
[38:52] Christopher David: full flow
[38:54] Christopher David: do we already have a test for
[38:57] Christopher David: the concierge
[38:59] Christopher David: or
[39:00] Christopher David: how are we testing the concierge
[39:02] Christopher David: that's our kind of example of a full
[39:04] Christopher David: agent
[39:06] Christopher David: doing stuff
[39:08] Christopher David: can run
[39:16] Christopher David: okay
[39:22] Christopher David: so we're skipping these integration tests
[39:24] Christopher David: because they call our
[39:27] Christopher David: queen bee network and that takes a couple seconds
[39:30] Christopher David: sometimes
[39:31] Christopher David: let's try
[39:36] Christopher David: pf
[39:39] Christopher David: agent test
[39:44] Christopher David: let's see what's failing here
[39:46] Christopher David: yeah that's one problem
[39:52] Christopher David: okay conversation
[39:54] Christopher David: messages
[39:56] Christopher David: it looks like
[39:59] Christopher David: something
[39:59] Christopher David: is expecting a conversation and we're not passing it into something.
[40:03] Christopher David: What about if conversation is null return?
[40:32] Christopher David: If conversation, otherwise, forget about it.
[40:48] Christopher David: I don't know what effect that will have on other things.
[40:51] Christopher David: We're not doing conversations right now.
[40:53] Christopher David: Okay.
[40:54] Christopher David: So it can run, succeed it, but what happened with that?
[41:00] Christopher David: There should be one task executed and what four step executed.
[41:30] Christopher David: Okay.
[41:31] Christopher David: So what I'm going to do is make a new unit test.
[41:37] Christopher David: This actually doesn't really go out to our network because I, heart-coded a work around.
[41:45] Christopher David: Or does it do the embedding?
[41:48] Christopher David: I guess not.
[41:50] Christopher David: Okay.
[41:51] Christopher David: So here's what I'm going to do.
[41:53] Christopher David: I'm going to create a new unit test for agent can use plugin.
[42:03] Christopher David: And I'm going to create a new cedar.
[42:20] Christopher David: I'm going to call it concierge with plugin cedar.
[42:34] Christopher David: We're going to duplicate this concierge with plugin cedar.
[43:02] Christopher David: We're going to take the response.
[43:06] Christopher David: The agent would give and we're going to instead count the vowels in that response.
[43:18] Christopher David: And this will also be testing make sure that inference is properly checking for the next thing.
[43:31] Christopher David: So step five is going to be category plugin.
[43:42] Christopher David: I also need to seed the plugin.
[43:49] Christopher David: Can I just do it via the cedar?
[43:55] Christopher David: I don't know if the ID sometimes the like running in a test will mess up the ID.
[43:59] Christopher David: So I don't know that I can expect that it would be one.
[44:01] Christopher David: So what I'm going to do is I'm going to do this here.
[44:10] Christopher David: Plug in is plugin creates.
[44:19] Christopher David: And then down here.
[44:29] Christopher David: So one issue with this is if the call.
[44:57] Christopher David: If the step is expecting input to take a certain format.
[45:01] Christopher David: Then the previous step would have to know that it wants to call a plugin and pass to it the function.
[45:09] Christopher David: So you can imagine that there's like a separate inference step category.
[45:16] Christopher David: And then the inference function.
[45:20] Christopher David: I want to call this function.
[45:22] Christopher David: Here's the data to all pass in.
[45:24] Christopher David: That might be a fun thing to do in a future video.
[45:28] Christopher David: But now we just want to emulate that data passing and just pass in with this needs and make sure that it generally works within the flow.
[45:39] Christopher David: So as to this.
[45:41] Christopher David: Order five.
[45:44] Christopher David: Order five.
[45:46] Christopher David: Order five.
[45:48] Christopher David: Order five.
[45:50] Christopher David: Order five.
[45:52] Christopher David: Order five.
[45:54] Christopher David: Order five.
[45:56] Christopher David: Order five.
[45:58] Christopher David: Order five.
[46:00] Christopher David: Order five.
[46:02] Christopher David: Order five.
[46:04] Christopher David: Order five.
[46:06] Christopher David: Order five.
[46:08] Christopher David: Order five.
[46:10] Christopher David: Order five.
[46:12] Christopher David: Order five.
[46:14] Christopher David: Order five.
[46:16] Christopher David: Order five.
[46:18] Christopher David: Order five.
[46:20] Christopher David: Order five.
[46:22] Christopher David: Order five.
[46:24] Christopher David: Order five.
[46:26] Christopher David: Order five.
[46:28] Christopher David: Order five.
[46:30] Christopher David: Order five.
[46:32] Christopher David: Order five.
[46:34] Christopher David: Order five.
[46:36] Christopher David: Order five.
[46:38] Christopher David: Order five.
[46:40] Christopher David: Order five.
[46:44] Christopher David: Order five.
[46:46] Christopher David: Order five.
[46:48] Christopher David: Order five.
[46:50] Christopher David: Order five.
[46:52] Christopher David: Order five.
[46:54] Christopher David: Order five.
[46:56] Christopher David: Order five.
[46:58] Christopher David: Order five.
[47:00] Christopher David: Order five.
[47:02] Christopher David: Order five.
[47:04] Christopher David: Order five.
[47:06] Christopher David: Order five.
[47:08] Christopher David: Order five.
[47:10] Christopher David: Order five.
[47:12] Christopher David: Order five.
[47:14] Christopher David: Order five.
[47:16] Christopher David: Order five.
[47:18] Christopher David: Order five.
[47:20] Christopher David: Order five.
[47:22] Christopher David: Order five.
[47:24] Christopher David: Order five.
[47:26] Christopher David: Order five.
[47:28] Christopher David: Order five.
[47:30] Christopher David: Order five.
[47:32] Christopher David: Order five.
[47:34] Christopher David: Order five.
[47:36] Christopher David: Order five.
[47:38] Christopher David: Order five.
[47:40] Christopher David: Order five.
[47:42] Christopher David: Order five.
[47:44] Christopher David: Order five.
[47:46] Christopher David: Order five.
[47:48] Christopher David: Order five.
[47:50] Christopher David: Order five.
[47:52] Christopher David: Order five.
[47:54] Christopher David: Order five.
[47:56] Christopher David: Order five.
[47:58] Christopher David: Order five.
[48:00] Christopher David: Order five.
[48:02] Christopher David: Order five.
[48:04] Christopher David: Order five.
[48:10] Christopher David: Order five.
[48:12] Christopher David: Order five.
[48:14] Christopher David: Order five.
[48:16] Christopher David: Order five.
[48:18] Christopher David: Order five.
[48:20] Christopher David: Order five.
[48:22] Christopher David: Order five.
[48:24] Christopher David: Order five.
[48:26] Christopher David: Order five.
[48:28] Christopher David: Order five.
[48:30] Christopher David: Order five.
[48:32] Christopher David: Order five.
[49:02] Christopher David: Order five.
[49:04] Christopher David: Order five.
[49:06] Christopher David: Order five.
[49:08] Christopher David: Order five.
[49:10] Christopher David: Order five.
[49:12] Christopher David: Order five.
[49:14] Christopher David: Order five.
[49:16] Christopher David: Order five.
[49:18] Christopher David: Order five.
[49:20] Christopher David: Order five.
[49:22] Christopher David: Order five.
[49:24] Christopher David: Order five.
[49:26] Christopher David: Order five.
[49:28] Christopher David: Order five.
[49:30] Christopher David: Order five.
[49:34] Christopher David: Order five.
[49:36] Christopher David: Order five.
[49:38] Christopher David: Order five.
[49:40] Christopher David: Order five.
[49:42] Christopher David: Order five.
[49:44] Christopher David: Order five.
[49:46] Christopher David: Order five.
[49:48] Christopher David: Order five.
[49:50] Christopher David: Order five.
[49:52] Christopher David: Order five.
[49:54] Christopher David: Order five.
[49:56] Christopher David: Order five.
[49:58] Christopher David: Order five.
[50:00] Christopher David: Order five.
[50:02] Christopher David: Order five.
[50:04] Christopher David: Order five.
[50:06] Christopher David: Order five.
[50:08] Christopher David: Order five.
[50:10] Christopher David: Order five.
[50:12] Christopher David: Order five.
[50:14] Christopher David: Order five.
[50:16] Christopher David: Order five.
[50:18] Christopher David: Order five.
[50:20] Christopher David: Order five.
[50:22] Christopher David: Order five.
[50:24] Christopher David: Order five.
[50:26] Christopher David: Order five.
[50:30] Christopher David: Order five.
[50:32] Christopher David: Order five.
[50:34] Christopher David: Order five.
[50:36] Christopher David: Order five.
[50:38] Christopher David: Order five.
[50:40] Christopher David: Order five.
[50:42] Christopher David: Order five.
[50:44] Christopher David: Order five.
[50:46] Christopher David: Order five.
[50:48] Christopher David: Order five.
[50:50] Christopher David: Order five.
[50:52] Christopher David: Order five.
[50:54] Christopher David: Order five.
[51:02] Christopher David: Order five.
[51:04] Christopher David: Order five.
[51:06] Christopher David: Order five.
[51:08] Christopher David: Order five.
[51:10] Christopher David: Order five.
[51:12] Christopher David: Order five.
[51:14] Christopher David: Order five.
[51:16] Christopher David: Order five.
[51:18] Christopher David: Order five.
[51:20] Christopher David: Order five.
[51:22] Christopher David: Order five.
[51:24] Christopher David: Order five.
[51:26] Christopher David: Order five.
[51:28] Christopher David: Order five.
[51:30] Christopher David: Order five.
[51:32] Christopher David: Order five.
[51:34] Christopher David: Order five.
[51:36] Christopher David: Order five.
[51:38] Christopher David: Order five.
[51:40] Christopher David: Order five.
[51:42] Christopher David: Order five.
[51:44] Christopher David: Order five.
[51:46] Christopher David: Order five.
[51:48] Christopher David: Order five.
[51:50] Christopher David: Order five.
[51:58] Christopher David: Order five.
[52:00] Christopher David: Order five.
[52:02] Christopher David: Order five.
[52:04] Christopher David: Order five.
[52:06] Christopher David: Order five.
[52:08] Christopher David: Order five.
[52:10] Christopher David: Order five.
[52:12] Christopher David: Order five.
[52:14] Christopher David: Order five.
[52:16] Christopher David: Order five.
[52:18] Christopher David: Order five.
[52:22] Christopher David: Let's take a look at the whole run flow.
[52:34] Christopher David: We get the first task and loaded steps.
[52:37] Christopher David: We create from it a task executed.
[52:40] Christopher David: That is depending.
[52:42] Christopher David: We loop through all the tasks, steps,
[52:44] Christopher David: and the output of each of the next.
[52:46] Christopher David: So for each step.
[52:48] Christopher David: If the order is not one, then the input is the previous steps output.
[52:54] Christopher David: We create a new step executed.
[52:58] Christopher David: The input being Jason and coded of input.
[53:06] Christopher David: But.
[53:10] Christopher David: The step category is plugin.
[53:14] Christopher David: Then we should augment that input.
[53:18] Christopher David: With information.
[53:20] Christopher David: That is inputed where.
[53:22] Christopher David: It should be defined as a level of the step.
[53:26] Christopher David: Not all steps are going to have that.
[53:28] Christopher David: Data.
[53:30] Christopher David: So it's like the step should have maybe some.
[53:36] Christopher David: What optional.
[53:38] Christopher David: Metadata.
[53:40] Christopher David: Oh, grams.
[53:44] Christopher David: We already have params.
[53:46] Christopher David: Good.
[53:48] Christopher David: So we need to get that from the params.
[53:54] Christopher David: So in our factory.
[54:06] Christopher David: Or our.
[54:10] Christopher David: Our.
[54:12] Christopher David: Our.
[54:14] Christopher David: Our.
[54:16] Christopher David: Our.
[54:18] Christopher David: Our.
[54:20] Christopher David: Our.
[54:22] Christopher David: Our.
[54:24] Christopher David: Our.
[54:26] Christopher David: Our.
[54:28] Christopher David: Our.
[54:30] Christopher David: Our.
[54:32] Christopher David: Our.
[54:35] Christopher David: That can be one or more of the functions on that plugin.
[54:38] Christopher David: The plugin to that multiple functions.
[54:42] Christopher David: Uh, but we'll pass it in to the step.
[54:45] Christopher David: So.
[54:48] Christopher David: We know that when we create the.
[54:52] Christopher David: There were just testing this step executed, but for the full flow.
[55:02] Christopher David: Executed here.
[55:12] Christopher David: We need to say if the category.
[55:18] Christopher David: If step category is.
[55:22] Christopher David: Uh.
[55:23] Christopher David: Plug in.
[55:24] Christopher David: Augment the input with params.
[55:29] Christopher David: Otherwise input is just Jason and code input.
[55:38] Christopher David: And we have the params on the step object already so so params.
[55:54] Christopher David: And we have the same.
[55:56] Christopher David: And we have the same.
[55:58] Christopher David: And we have the same.
[56:00] Christopher David: And we have the same.
[56:02] Christopher David: And we have the same.
[56:04] Christopher David: And we have the same.
[56:06] Christopher David: And we have the same.
[56:08] Christopher David: And we have the same.
[56:10] Christopher David: And we have the same.
[56:12] Christopher David: And we have the same.
[56:14] Christopher David: And we have the same.
[56:16] Christopher David: And we have the same.
[56:18] Christopher David: And we have the same.
[56:20] Christopher David: And we have the same.
[56:22] Christopher David: And I need to.
[56:24] Christopher David: Jason to code these params.
[56:28] Christopher David: Yeah.
[56:30] Christopher David: Then I need to set input equals.
[56:48] Christopher David: Am I overwriting input?
[56:50] Christopher David: Yeah.
[57:00] Christopher David: Oh, input is.
[57:04] Christopher David: All right, this is I'm I need to like decinfuseify this, but it should work.
[57:12] Christopher David: Jason and code.
[57:14] Christopher David: And put.
[57:16] Christopher David: And plug in ID.
[57:26] Christopher David: Is the params.
[57:30] Christopher David: Plug in ID.
[57:31] Christopher David: I think that's right.
[57:32] Christopher David: Function.
[57:34] Christopher David: Priams.
[57:35] Christopher David: Function.
[57:37] Christopher David: Now show me what input looks like.
[57:40] Christopher David: Okay.
[58:08] Christopher David: So it's correct.
[58:10] Christopher David: Except for this.
[58:12] Christopher David: I don't think it should be showing output also.
[58:16] Christopher David: If it's just the output of the function.
[58:20] Christopher David: I need to refactor where it did.
[58:24] Christopher David: I mean, I got to just go to clean up some of the JSON encoding and handling of stuff.
[58:28] Christopher David: But for now, I just wanted to say this is a test response.
[58:32] Christopher David: Let's give chatGbt something else to do.
[58:36] Christopher David: So change this.
[58:45] Christopher David: Which right now, if plug in returns this, I don't want it to say output in that array.
[58:52] Christopher David: Just this is a test response.
[58:55] Christopher David: Fix it.
[58:57] Christopher David: Ha ha ha ha.
[59:00] Christopher David: Ha ha.
[59:04] Christopher David: Do do do do do do.
[59:19] Christopher David: Sign the output directly.
[59:21] Christopher David: Ha ha.
[59:26] Christopher David: Well, no, because.
[59:30] Christopher David: I don't want that.
[59:34] Christopher David: All right, just.
[59:37] Christopher David: Input equals prep step executed output.
[59:43] Christopher David: Okay.
[59:44] Christopher David: Okay.
[59:45] Christopher David: Oops.
[59:46] Christopher David: There we go.
[59:55] Christopher David: Okay.
[59:56] Christopher David: So.
[59:59] Christopher David: rate is drinking version where
[01:00:20] Christopher David: I got to do something good this
[01:00:25] Christopher David: Oh shit, no wait, now we gotta go try to remove
[01:00:30] Christopher David: that
[01:00:35] Christopher David: Hell yes, that is now working with no
[01:00:38] Christopher David: hard-coated stuff
[01:00:44] Christopher David: Let's do
[01:00:46] Christopher David: Let's review
[01:00:52] Christopher David: Let's review
[01:01:00] Christopher David: We now have a passing test for
[01:01:03] Christopher David: Agent can use plugin
[01:01:07] Christopher David: We are seeding our database with our hard-coated
[01:01:11] Christopher David: Agent
[01:01:16] Christopher David: We are creating the same
[01:01:24] Christopher David: Consiers that we have done previously
[01:01:28] Christopher David: A basic retrieval augmented chatbot
[01:01:31] Christopher David: They can consult the knowledge base
[01:01:34] Christopher David: We are adding a step for the plugin usage
[01:01:37] Christopher David: We are doing the stuff that it would usually do
[01:01:40] Christopher David: Convert the user input to a vector embedding
[01:01:42] Christopher David: We are on a similarity search
[01:01:44] Christopher David: Against its knowledge base to find down here
[01:01:47] Christopher David: To get the closest to that
[01:01:49] Christopher David: Format that as a LLM call
[01:01:52] Christopher David: And then we are passing that
[01:01:54] Christopher David: To the plugin
[01:01:59] Christopher David: That we just created calling the count-volals function
[01:02:02] Christopher David: And passing what we got from the LLM
[01:02:05] Christopher David: To the
[01:02:06] Christopher David: plugin
[01:02:09] Christopher David: And if we go down here and we say
[01:02:12] Christopher David: Diane dump this
[01:02:17] Christopher David: How many vowels do we get?
[01:02:20] Christopher David: Seven
[01:02:21] Christopher David: Are there actually seven vowels in here?
[01:02:23] Christopher David: Let's go to our other
[01:02:27] Christopher David: Four
[01:02:29] Christopher David: Oh no
[01:02:30] Christopher David: Oh that's because
[01:02:31] Christopher David: Oh that's so gross
[01:02:37] Christopher David: Oh that's not going to work either
[01:02:43] Christopher David: It is
[01:02:45] Christopher David: We de-munched the
[01:02:48] Christopher David: It's counting these three values
[01:02:50] Christopher David: These one
[01:02:52] Christopher David: Two
[01:02:54] Christopher David: How many vowels are in?
[01:02:56] Christopher David: Let's manage again
[01:02:57] Christopher David: Two
[01:02:58] Christopher David: Three
[01:02:59] Christopher David: Four
[01:03:01] Christopher David: All right, let's just
[01:03:07] Christopher David: We got some JSON encoding thing
[01:03:09] Christopher David: We got an unfalk, let's do that real quick
[01:03:11] Christopher David: Let's see what we're passing to the plugin
[01:03:18] Christopher David: Let's just do that real quick
[01:03:21] Christopher David: Let's just do that real quick
[01:03:23] Christopher David: Let's just do that real quick
[01:03:25] Christopher David: Let's just do that real quick
[01:03:28] Christopher David: Let's just do that real quick
[01:03:29] Christopher David: Let's just do that real quick
[01:03:30] Christopher David: Let's just do that real quick
[01:03:32] Christopher David: Let's just do that real quick
[01:03:34] Christopher David: Let's just do that real quick
[01:03:35] Christopher David: Let's just do that real quick
[01:03:36] Christopher David: Let's just do that real quick
[01:03:37] Christopher David: Let's just do that real quick
[01:03:38] Christopher David: Let's just do that real quick
[01:03:39] Christopher David: Let's just do that real quick
[01:03:40] Christopher David: Let's just do that real quick
[01:03:41] Christopher David: Let's just do that real quick
[01:03:42] Christopher David: Let's just do that real quick
[01:03:43] Christopher David: Let's just do that real quick
[01:03:44] Christopher David: Let's just do that real quick
[01:03:45] Christopher David: Let's do that real quick
[01:03:46] Christopher David: Let's just do that real quick
[01:03:48] Christopher David: Let's just do that real quick
[01:03:49] Christopher David: Let's just do that real quick
[01:03:50] Christopher David: Let's just do that real quick
[01:03:51] Christopher David: Let's just do that real quick
[01:03:52] Christopher David: Let's just do that real quick
[01:03:53] Christopher David: Let's just do that real quick
[01:03:55] Christopher David: Let's just do that real quick
[01:03:56] Christopher David: Let's just do that real quick
[01:03:57] Christopher David: Let's just do that real quick
[01:03:58] Christopher David: Let's just do that real quick
[01:04:00] Christopher David: Let's just do that real quick
[01:04:01] Christopher David: Let's just do that real quick
[01:04:02] Christopher David: Let's just do that real quick
[01:04:03] Christopher David: Let's just do that real quick
[01:04:05] Christopher David: Let's just do that real quick
[01:04:06] Christopher David: Let's just do that real quick
[01:04:07] Christopher David: Let's just do that real quick
[01:04:08] Christopher David: Let's just do that real quick
[01:04:09] Christopher David: Let's just do that real quick
[01:04:10] Christopher David: Let's just do that real quick
[01:04:11] Christopher David: Let's just do that real quick
[01:04:12] Christopher David: Let's just do that real quick
[01:04:13] Christopher David: Let's just do that real quick
[01:04:14] Christopher David: Let's just do that real quick
[01:04:15] Christopher David: Let's just do that real quick
[01:04:16] Christopher David: Let's just do that real quick
[01:04:17] Christopher David: Let's just do that real quick
[01:04:18] Christopher David: Let's just do that real quick
[01:04:19] Christopher David: Let's just do that real quick
[01:04:21] Christopher David: Let's just do that real quick
[01:04:22] Christopher David: Let's just do that real quick
[01:04:23] Christopher David: Let's just do that real quick
[01:04:24] Christopher David: Let's just do that real quick
[01:04:25] Christopher David: Let's just do that real quick
[01:04:27] Christopher David: Let's just do that real quick
[01:04:28] Christopher David: Let's just do that real quick
[01:04:29] Christopher David: Let's just do that real quick
[01:04:30] Christopher David: Let's just do that real quick
[01:04:31] Christopher David: Let's just do that real quick
[01:04:32] Christopher David: Let's just do that real quick
[01:04:33] Christopher David: Let's just do that real quick
[01:04:34] Christopher David: Let's just do that real quick
[01:04:35] Christopher David: Let's just do that real quick
[01:04:36] Christopher David: Let's just do that real quick
[01:04:37] Christopher David: Let's just do that real quick
[01:04:38] Christopher David: Let's just do that real quick
[01:04:39] Christopher David: Let's just do that real quick
[01:04:40] Christopher David: Let's just do that real quick
[01:04:41] Christopher David: Let's just do that real quick
[01:04:42] Christopher David: Let's just do that real quick
[01:04:43] Christopher David: Let's just do that real quick
[01:04:44] Christopher David: Let's just do that real quick
[01:04:45] Christopher David: Let's just do that real quick
[01:04:46] Christopher David: Let's just do that real quick
[01:04:47] Christopher David: Let's just do that real quick
[01:04:48] Christopher David: Let's just do that real quick
[01:04:49] Christopher David: Let's just do that real quick
[01:04:50] Christopher David: Let's just do that real quick
[01:04:51] Christopher David: Let's just do that real quick
[01:04:52] Christopher David: Let's just do that real quick
[01:04:53] Christopher David: Let's just do that real quick
[01:04:54] Christopher David: Let's just do that real quick
[01:04:55] Christopher David: Let's just do that real quick
[01:04:56] Christopher David: Let's just do that real quick
[01:04:57] Christopher David: Let's just do that real quick
[01:04:58] Christopher David: Let's just do that real quick
[01:04:59] Christopher David: Let's just do that real quick
[01:05:01] Christopher David: Let's just do that real quick
[01:05:03] Christopher David: Let's just do that real quick
[01:05:05] Christopher David: Let's just do that real quick
[01:05:06] Christopher David: Let's just do that real quick
[01:05:08] Christopher David: Let's just do that real quick
[01:05:09] Christopher David: Let's just do that real quick
[01:05:10] Christopher David: Let's just do that real quick
[01:05:12] Christopher David: Let's just do that real quick
[01:05:13] Christopher David: Let's just do that real quick
[01:05:14] Christopher David: Let's just do that real quick
[01:05:15] Christopher David: Let's just do that real quick
[01:05:16] Christopher David: Let's just do that real quick
[01:05:17] Christopher David: Let's just do that real quick
[01:05:18] Christopher David: Let's just do that real quick
[01:05:19] Christopher David: Let's just do that real quick
[01:05:20] Christopher David: Let's just do that real quick
[01:05:21] Christopher David: Let's just do that real quick
[01:05:22] Christopher David: Let's just do that real quick
[01:05:23] Christopher David: Let's just do that real quick
[01:05:24] Christopher David: Let's just do that real quick
[01:05:25] Christopher David: Let's just do that real quick
[01:05:26] Christopher David: Let's just do that real quick
[01:05:29] Christopher David: I'd pay my own money
[01:05:30] Christopher David: I'd pay my own money
[01:05:31] Christopher David: I'd pay my own money
[01:05:32] Christopher David: I'd pay my own money
[01:05:34] Christopher David: I'd pay my own money
[01:05:35] Christopher David: I'd pay my own money
[01:05:36] Christopher David: I'd pay my own money
[01:05:37] Christopher David: I'd pay my own money
[01:05:38] Christopher David: I'd pay my own money
[01:05:39] Christopher David: I'd pay my own money
[01:05:40] Christopher David: I'd pay my own money
[01:05:41] Christopher David: I'd pay my own money
[01:05:42] Christopher David: I'd pay my own money
[01:05:43] Christopher David: I'd pay my own money
[01:05:44] Christopher David: I'd pay my own money
[01:05:45] Christopher David: I'd pay my own money
[01:05:46] Christopher David: I'd pay my own money
[01:05:47] Christopher David: I'd pay my own money
[01:05:48] Christopher David: I'd pay my own money
[01:05:49] Christopher David: I'd pay my own money
[01:05:50] Christopher David: I'd pay my own money
[01:05:51] Christopher David: I'd pay my own money
[01:05:52] Christopher David: I'd pay my own money
[01:05:53] Christopher David: I'd pay my own money
[01:05:54] Christopher David: I'd pay my own money
[01:05:55] Christopher David: I'd pay my own money
[01:05:56] Christopher David: I'd pay my own money
[01:05:57] Christopher David: I'd pay my own money
[01:05:58] Christopher David: I'd pay my own money
[01:05:59] Christopher David: I'd pay my own money
[01:06:00] Christopher David: I'd pay my own money
[01:06:01] Christopher David: I'd pay my own money
[01:06:02] Christopher David: I'd pay my own money
[01:06:03] Christopher David: I'd pay my own money
[01:06:04] Christopher David: I'd pay my own money
[01:06:05] Christopher David: I'd pay my own money
[01:06:06] Christopher David: I'd pay my own money
[01:06:07] Christopher David: I'd pay my own money
[01:06:08] Christopher David: I'd pay my own money
[01:06:09] Christopher David: I'd pay my own money
[01:06:10] Christopher David: I'd pay my own money
[01:06:11] Christopher David: I'd pay my own money
[01:06:12] Christopher David: I'd pay my own money
[01:06:13] Christopher David: I'd pay my own money
[01:06:14] Christopher David: I'd pay my own money
[01:06:15] Christopher David: I'd pay my own money
[01:06:16] Christopher David: I'd pay my own money
[01:06:17] Christopher David: I'd pay my own money
[01:06:18] Christopher David: I'd pay my own money
[01:06:19] Christopher David: I'd pay my own money
[01:06:20] Christopher David: I'd pay my own money