Transcription: OpenAgents Episode 083 - Multimodal Chat
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1761082689095090180 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 083: Multimodal Chat We upgrade our agent with the ability to... Upload date: 20240223 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T18:35:23Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: Welcome back. Our mission, these past few videos, has been to build an agent that can
[00:06] Christopher David: replace my day-to-day usage of chatGVT. Most of what I do is paste code and documentation
[00:13] Christopher David: in along with a request. So here's what we have. I can do things like summarized this.
[00:23] Christopher David: Extract URLs, scrape URLs, all of inference.
[00:29] Christopher David: And I should be able to do things like...
[00:36] Christopher David: Right, an example, Lair of L controller that could implement this.
[00:51] Christopher David: Got a few minor things still to do, like make this auto scroll down.
[01:00] Christopher David: The syntax highlighting doesn't kick in until after it finishes streaming.
[01:07] Christopher David: So there's some minor quality of life things.
[01:12] Christopher David: But...
[01:12] Christopher David: This lets me productive for a bunch of the things that I use
[01:23] Christopher David: chatGVT for instead in this interface.
[01:30] Christopher David: So we accomplished this couple areas for improvement, but this works as a
[01:38] Christopher David: of pull request 142. But before we declare victory here and bid a due to chatGVT,
[01:49] Christopher David: there is one more thing that I rely on chatGVT for, which is multimodal or image input.
[02:00] Christopher David: I like dropping it in a screenshot of a Figma document or the CSS that I have,
[02:11] Christopher David: the styling here and say, change it so it does something else.
[02:16] Christopher David: So we're going to try in this video to add image input.
[02:22] Christopher David: We got this nice little paperclip thingy for file input.
[02:29] Christopher David: And let's try it. I want to be able to drop in an image.
[02:38] Christopher David: Files, we had to done a previous version of that in the past.
[02:44] Christopher David: And we'll get back to PDFs, kind of revisiting how we want to do that. But adding images now
[02:55] Christopher David: would be absolutely huge. So we will do kind of what we did for this, which is start with the
[03:03] Christopher David: open AI. If you are, as long as we're building it in a way that we can easily swap in other
[03:11] Christopher David: from now, open AI, compatible APIs, which are plug-in and either supports or can be very easily
[03:18] Christopher David: extended to support. And we'll kind of branch out from there once we get the basic UI UX around
[03:29] Christopher David: industry-leading standard API implemented. We can add support for all sorts of other things.
[03:34] Christopher David: And the cool thing is that I'm not going to need to do all that myself because we have this plug-in
[03:38] Christopher David: system. We'll have community developers having the opportunity and financial incentive to build a lot
[03:45] Christopher David: of that themselves. So for multimodal, this is really just image input to the same chat completions
[03:57] Christopher David: endpoint that we are using currently. And you may note from the issue here, the GPT4 call
[04:08] Christopher David: was working fine as an XSM plug-in, but it seems like XSM plug-in's don't currently support
[04:15] Christopher David: streaming. So because we watch streaming, we implemented the third plug-in there with our own
[04:21] Christopher David: implementation, which we can see in the inferenceer.
[04:33] Christopher David: Yeah, just basically taking the history of the conversation, I think that the last 15 messages
[04:42] Christopher David: formatting that would pass in them to the GPT4 API.
[04:53] Christopher David: We want to extend this now with image input. And let's try using our own interface for driving this out.
[05:03] Christopher David: First let's clean this up. This has been a really nice passing into the system prompt the name of
[05:12] Christopher David: the agent and the description. So if I do something like say introduce yourself.
[05:22] Christopher David: Yeah, it's the same as our Connie agent defined previously. I just changed the name to junior
[05:35] Christopher David: developer. I'm junior developer, a highly advanced AI agent with expertise in providing information,
[05:40] Christopher David: guidance and understanding things in context. Yeah, junior developers not right, not like the most
[05:47] Christopher David: accurate name for this contextual inferenceer, but the idea is for it to become a drop-in,
[05:53] Christopher David: replace before a junior developer.
[05:58] Christopher David: I'll move these comments because it's kind of self-explanatory.
[06:07] Christopher David: I don't know if we need to do this.
[06:10] Christopher David: All the way in curious if we're duplicating anything here.
[06:25] Christopher David: Yeah, we are duplicating something.
[06:40] Christopher David: Great.
[06:45] Christopher David: Oh, let's make sure that still works with this.
[07:15] Christopher David: Okay.
[07:45] Christopher David: Okay.
[08:08] Christopher David: How do this on a branch called multi-modal?
[08:23] Christopher David: So for now, to more easily pass context to this agent assistant,
[08:43] Christopher David: I'm going to copy the URL of the current branch code.
[08:54] Christopher David: And this will at some point, like as soon as we have plugins for it,
[09:01] Christopher David: allow you to just specify a GitHub repo or a branch and they can smartly pull all of this for you.
[09:08] Christopher David: But for now.
[09:14] Christopher David: Now, I want your help to image input to this way the second, and I'll give you the
[09:44] Christopher David: hopefully I can image input docs.
[09:59] Christopher David: No, no, no, no, no, no.
[10:14] Christopher David: You're information is outdated.
[10:30] Christopher David: This is from the book and I gots.
[10:44] Christopher David: Pretty soon I'll be able to drop a link like this, but right now there's a bunch of HTML stuff we haven't cleaned.
[10:59] Christopher David: It's right.
[11:10] Christopher David: What?
[11:14] Christopher David: No, I was giving you an example of how you call the open AI input with an API with image input.
[11:44] Christopher David: You want to send an image URL along with a text for analysis to the open AI API.
[11:54] Christopher David: Here is how you can modify the influencer.php for multi-modal support.
[12:14] Christopher David: So I think one downside of our current implementation of this is we are not adding the
[12:31] Christopher David: file contents of these links to the chat history. It's only being passed to the current message.
[12:45] Christopher David: Let's easy enough to refactor. I might just need to do an additional prompt here.
[13:01] Christopher David: Now rewrite my influencer class accordingly.
[13:16] Christopher David: Here is the modified version of inference or class according to your demand.
[14:16] Christopher David: Thanks, except please refactor that controller to split into multiple methods.
[14:39] Christopher David: So LL inference method there will be more like a router checking to see if input has an image URL.
[14:53] Christopher David: If so using a different user, the appropriate controller method.
[15:03] Christopher David: Also extract logic, reused in both of those handled things to their own controller methods to
[15:21] Christopher David: reused.
[15:33] Christopher David: So we'll get this working with a demo image and then we'll hook up the image upload form.
[16:33] Christopher David: There will be a string or an array.
[16:40] Christopher David: I don't know if that's how I want it but we can try this.
[16:45] Christopher David: Can you get a copy button?
[16:55] Christopher David: Copy paste.
[17:02] Christopher David: Let's first see if we might have broken this conversation.
[17:15] Christopher David: We can come back to this I think. Let's start a new conversation.
[17:23] Christopher David: Make sure this works. Make sure it still works with this.
[17:32] Christopher David: I said one sentence.
[17:47] Christopher David: Okay. I'm going to commit this as
[17:53] Christopher David: inference or image input.
[18:24] Christopher David: I want to do a demo test of the multi-modal piece.
[18:41] Christopher David: I need an image URL. I think I'm going to use this one.
[18:53] Christopher David: Now we want to test this function.
[19:15] Christopher David: Test this multi-modal function.
[19:26] Christopher David: Now let's rewrite elementference at the top there.
[19:35] Christopher David: To take the user's string and create a new input object with that string as the text key and
[19:54] Christopher David: image URL of.
[19:59] Christopher David: of
[20:04] Christopher David: of
[20:07] Christopher David: a
[20:11] Christopher David: of
[20:14] Christopher David: a
[20:19] Christopher David: of
[20:24] Christopher David: of
[20:34] Christopher David: of
[20:44] Christopher David: a
[20:46] Christopher David: of
[20:49] Christopher David: a
[20:54] Christopher David: of
[20:59] Christopher David: of
[21:09] Christopher David: of
[21:13] Christopher David: of
[21:17] Christopher David: of
[21:19] Christopher David: of
[21:24] Christopher David: of
[21:31] Christopher David: the
[21:36] Christopher David: of
[21:39] Christopher David: of
[21:42] Christopher David: of
[21:44] Christopher David: of
[21:49] Christopher David: of
[21:56] Christopher David: of
[21:59] Christopher David: of
[22:03] Christopher David: of
[22:07] Christopher David: of
[22:09] Christopher David: of
[22:14] Christopher David: of
[22:21] Christopher David: of
[22:26] Christopher David: of
[22:30] Christopher David: of
[22:32] Christopher David: of
[22:34] Christopher David: of
[22:37] Christopher David: of
[22:42] Christopher David: of
[22:46] Christopher David: of
[22:51] Christopher David: of
[22:55] Christopher David: of
[22:59] Christopher David: of
[23:01] Christopher David: of
[23:06] Christopher David: of
[23:11] Christopher David: of
[23:15] Christopher David: of
[23:18] Christopher David: of
[23:21] Christopher David: of
[23:24] Christopher David: of
[23:26] Christopher David: of
[23:29] Christopher David: of
[23:31] Christopher David: of
[23:35] Christopher David: of
[23:39] Christopher David: of
[23:44] Christopher David: of
[23:49] Christopher David: of
[23:54] Christopher David: of
[23:59] Christopher David: of
[24:04] Christopher David: of
[24:08] Christopher David: of
[24:12] Christopher David: of
[24:15] Christopher David: of
[24:21] Christopher David: of
[24:28] Christopher David: of
[24:33] Christopher David: of
[24:37] Christopher David: of
[24:42] Christopher David: of
[24:47] Christopher David: of
[24:52] Christopher David: of
[24:57] Christopher David: of
[25:02] Christopher David: of
[25:06] Christopher David: of
[25:08] Christopher David: of
[25:11] Christopher David: of
[25:16] Christopher David: of
[25:19] Christopher David: of
[25:21] Christopher David: of
[25:24] Christopher David: of
[25:26] Christopher David: of
[25:28] Christopher David: of
[25:30] Christopher David: of
[25:35] Christopher David: of
[25:40] Christopher David: of
[25:45] Christopher David: of
[25:50] Christopher David: of
[25:53] Christopher David: of
[25:57] Christopher David: of
[25:58] Christopher David: of
[26:01] Christopher David: of
[26:03] Christopher David: of
[26:05] Christopher David: of
[26:08] Christopher David: of
[26:13] Christopher David: of
[26:16] Christopher David: of
[26:18] Christopher David: of
[26:21] Christopher David: of
[26:23] Christopher David: of
[26:25] Christopher David: of
[26:27] Christopher David: of
[26:31] Christopher David: of
[26:33] Christopher David: of
[26:36] Christopher David: of
[26:41] Christopher David: of
[26:44] Christopher David: of
[26:46] Christopher David: of
[26:49] Christopher David: of
[26:51] Christopher David: of
[26:53] Christopher David: of
[26:55] Christopher David: of
[27:00] Christopher David: of
[27:05] Christopher David: of
[27:10] Christopher David: of
[27:15] Christopher David: of
[27:20] Christopher David: of
[27:21] Christopher David: of
[27:24] Christopher David: of
[27:29] Christopher David: of
[27:34] Christopher David: of
[27:39] Christopher David: of
[27:44] Christopher David: of
[27:49] Christopher David: of
[27:53] Christopher David: of
[27:58] Christopher David: of
[28:03] Christopher David: of
[28:08] Christopher David: of
[28:11] Christopher David: of
[28:13] Christopher David: of
[28:16] Christopher David: of
[28:18] Christopher David: of
[28:20] Christopher David: of
[28:22] Christopher David: of
[28:26] Christopher David: of
[28:31] Christopher David: of
[28:35] Christopher David: of
[28:39] Christopher David: of
[28:41] Christopher David: of
[28:44] Christopher David: of
[28:46] Christopher David: of
[28:48] Christopher David: of
[28:50] Christopher David: of
[28:55] Christopher David: of
[28:57] Christopher David: of
[29:00] Christopher David: of
[29:02] Christopher David: of
[29:05] Christopher David: of
[29:08] Christopher David: of
[29:10] Christopher David: of
[29:13] Christopher David: of
[29:15] Christopher David: of
[29:17] Christopher David: of
[29:19] Christopher David: of
[29:24] Christopher David: of
[29:26] Christopher David: of
[29:29] Christopher David: of
[29:31] Christopher David: of
[29:34] Christopher David: of
[29:37] Christopher David: of
[29:39] Christopher David: of
[29:42] Christopher David: of
[29:44] Christopher David: of
[29:46] Christopher David: of
[29:48] Christopher David: of
[29:53] Christopher David: of
[29:58] Christopher David: of
[30:03] Christopher David: of
[30:08] Christopher David: of
[30:13] Christopher David: of
[30:17] Christopher David: of
[30:22] Christopher David: of
[30:27] Christopher David: of
[30:30] Christopher David: of
[30:35] Christopher David: of
[30:37] Christopher David: of
[30:42] Christopher David: of
[30:44] Christopher David: of
[30:46] Christopher David: of
[30:51] Christopher David: of
[30:56] Christopher David: of
[31:01] Christopher David: of
[31:06] Christopher David: of
[31:11] Christopher David: of
[31:15] Christopher David: of
[31:20] Christopher David: of
[31:25] Christopher David: of
[31:30] Christopher David: of
[31:35] Christopher David: of
[31:40] Christopher David: of
[31:44] Christopher David: of
[31:49] Christopher David: of
[31:54] Christopher David: of
[31:58] Christopher David: of
[32:02] Christopher David: of
[32:04] Christopher David: of
[32:07] Christopher David: of
[32:10] Christopher David: of
[32:13] Christopher David: of
[32:17] Christopher David: of
[32:22] Christopher David: of
[32:27] Christopher David: of
[32:32] Christopher David: of
[32:37] Christopher David: of
[32:38] Christopher David: of
[32:41] Christopher David: of
[32:59] Christopher David: of
[33:01] Christopher David: of
[33:04] Christopher David: of
[33:06] Christopher David: of
[33:08] Christopher David: of
[33:10] Christopher David: of
[33:15] Christopher David: of
[33:20] Christopher David: of
[33:25] Christopher David: of
[33:30] Christopher David: of
[33:34] Christopher David: of
[33:35] Christopher David: of
[33:37] Christopher David: of
[33:40] Christopher David: of
[33:44] Christopher David: of
[33:49] Christopher David: of
[33:53] Christopher David: of
[33:55] Christopher David: of
[33:57] Christopher David: of
[33:59] Christopher David: of
[34:01] Christopher David: of
[34:03] Christopher David: of
[34:05] Christopher David: of
[34:07] Christopher David: of
[34:12] Christopher David: of
[34:17] Christopher David: of
[34:22] Christopher David: of
[34:25] Christopher David: of
[34:27] Christopher David: of
[34:32] Christopher David: of
[34:34] Christopher David: of
[34:37] Christopher David: of
[34:41] Christopher David: of
[34:46] Christopher David: of
[34:51] Christopher David: of
[34:54] Christopher David: of
[34:56] Christopher David: of
[34:59] Christopher David: of
[35:02] Christopher David: of
[35:03] Christopher David: of
[35:06] Christopher David: of
[35:10] Christopher David: of
[35:12] Christopher David: of
[35:15] Christopher David: of
[35:17] Christopher David: of
[35:20] Christopher David: of
[35:21] Christopher David: of
[35:23] Christopher David: of
[35:25] Christopher David: of
[35:26] Christopher David: of
[35:28] Christopher David: of
[35:30] Christopher David: of
[35:32] Christopher David: of
[35:35] Christopher David: of
[35:39] Christopher David: of
[35:44] Christopher David: of
[35:49] Christopher David: of
[35:54] Christopher David: of
[35:59] Christopher David: of
[36:03] Christopher David: of
[36:08] Christopher David: of
[36:13] Christopher David: of
[36:18] Christopher David: of
[36:23] Christopher David: of
[36:28] Christopher David: of
[36:30] Christopher David: of
[36:32] Christopher David: of
[36:37] Christopher David: of
[36:42] Christopher David: of
[36:52] Christopher David: of
[36:57] Christopher David: of
[37:01] Christopher David: of
[37:06] Christopher David: of
[37:11] Christopher David: of
[37:16] Christopher David: of
[37:19] Christopher David: of
[37:21] Christopher David: of
[37:24] Christopher David: of
[37:26] Christopher David: of
[37:29] Christopher David: of
[37:34] Christopher David: of
[37:39] Christopher David: of
[37:43] Christopher David: of
[37:44] Christopher David: of
[37:47] Christopher David: of
[37:48] Christopher David: of
[37:52] Christopher David: of
[37:54] Christopher David: of
[37:56] Christopher David: of
[37:59] Christopher David: of
[38:03] Christopher David: of
[38:05] Christopher David: of
[38:08] Christopher David: of
[38:10] Christopher David: of
[38:13] Christopher David: of
[38:14] Christopher David: of
[38:16] Christopher David: of
[38:18] Christopher David: of
[38:21] Christopher David: of
[38:23] Christopher David: of
[38:25] Christopher David: of
[38:27] Christopher David: of
[38:32] Christopher David: of
[38:37] Christopher David: of
[38:42] Christopher David: of
[38:47] Christopher David: of
[38:52] Christopher David: of
[38:54] Christopher David: of
[38:55] Christopher David: of
[38:56] Christopher David: of
[39:01] Christopher David: of
[39:03] Christopher David: of
[39:06] Christopher David: of
[39:08] Christopher David: of
[39:11] Christopher David: of
[39:12] Christopher David: of
[39:14] Christopher David: of
[39:16] Christopher David: of
[39:18] Christopher David: of
[39:19] Christopher David: of
[39:21] Christopher David: of
[39:23] Christopher David: of
[39:25] Christopher David: of
[39:30] Christopher David: of
[39:35] Christopher David: of
[39:40] Christopher David: of
[39:45] Christopher David: of
[39:50] Christopher David: of
[39:52] Christopher David: of
[39:54] Christopher David: of
[39:59] Christopher David: of
[40:03] Christopher David: of
[40:08] Christopher David: of
[40:12] Christopher David: of
[40:16] Christopher David: of
[40:19] Christopher David: of
[39:59] Christopher David: We won't have streaming here.
[40:24] Christopher David: We have our response.
[40:43] Christopher David: This image depicts a beautiful natural landscape.
[40:48] Christopher David: In the foreground, there is a wooden boardwalk that provides blah blah blah.
[40:56] Christopher David: Okay, that's nice.
[41:14] Christopher David: Well, now can we stream that?
[41:20] Christopher David: Please.
[41:27] Christopher David: Oh yeah.
[41:44] Christopher David: Okay, we have streaming.
[41:45] Christopher David: That's nice.
[41:55] Christopher David: Streaming works with hard coded image.
[42:03] Christopher David: Cool.
[42:11] Christopher David: So can we pass it a base 64 or what?
[42:42] Christopher David: Not seen by her.
[42:55] Christopher David: You can pass multiple images.
[43:05] Christopher David: Either a URL of the image or the base 64 encoded image data.
[43:34] Christopher David: Well, because we can do the basics before encoded data, I think that makes our implementation easier
[43:45] Christopher David: because we don't need to manage file uploads.
[43:47] Christopher David: We're not going to think right now about saving files.
[43:51] Christopher David: Just take what the user uploads.
[43:55] Christopher David: Get the base 64.
[43:57] Christopher David: Throw that to the API call here.
[44:03] Christopher David: Let's try something.
[44:12] Christopher David: We'll try asking.
[44:30] Christopher David: Do you develop here?
[44:36] Christopher David: Even though it's going to append an image, do you?
[44:39] Christopher David: Now help me figure out how many I support for image uploads to our interface.
[44:59] Christopher David: So instead of that hard coded image, we pass it in.
[45:05] Christopher David: Don't say much until I also add code for the chat input field, etc.
[45:35] Christopher David: I may need to learn about best practices for image uploads.
[46:30] Christopher David: I'm analyzing both the code and also the image I submitted.
[47:00] Christopher David: Open AI wrapper.
[47:10] Christopher David: What files are you to paste in here?
[47:15] Christopher David: Chat.
[47:23] Christopher David: Let's do this first.
[47:36] Christopher David: Let's make two of our tokens.
[48:06] Christopher David: Let's do this.
[48:19] Christopher David: Let's do this.
[48:49] Christopher David: Let's do this.
[48:59] Christopher David: Let's do this.
[49:22] Christopher David: Live wire with file uploads.
[49:34] Christopher David: That's cool.
[49:43] Christopher David: Let's start with that.
[50:13] Christopher David: Let's do this.
[50:34] Christopher David: Let's do this.
[51:04] Christopher David: Let's do this.
[51:34] Christopher David: Let's do this.
[51:54] Christopher David: Let's do this.
[52:24] Christopher David: Let's do this.
[52:39] Christopher David: Let's do this.
[52:59] Christopher David: Let's do this.
[53:29] Christopher David: Let's do this.
[53:44] Christopher David: Let's do this.
[54:14] Christopher David: Let's do this.
[54:32] Christopher David: Let's do this.
[55:00] Christopher David: Let's do this.
[55:25] Christopher David: Let's download that one image.
[55:51] Christopher David: Let's do this.
[56:19] Christopher David: Let's do this.
[56:44] Christopher David: Let's do this.
[57:14] Christopher David: Let's do this.
[57:42] Christopher David: Let's do this.
[58:09] Christopher David: Let's do this.
[58:39] Christopher David: Let's do this.
[59:09] Christopher David: Let's do this.
[59:34] Christopher David: Let's do this.
[59:59] Christopher David: here where I later pass input to
[01:00:06] Christopher David: inferencer element for instance
[01:00:11] Christopher David: that's where I need to have the base 64 image
[01:00:19] Christopher David: base 64 of the image passed as image URL
[01:00:28] Christopher David: to the original function I gave
[01:00:32] Christopher David: and remove where I hard-coded
[01:00:36] Christopher David: an image
[01:00:40] Christopher David: note there could be multiple images
[01:00:44] Christopher David: and there can be multiple images
[01:00:48] Christopher David: in that same message
[01:00:51] Christopher David: object
[01:00:57] Christopher David: let's see
[01:01:28] Christopher David: let's see
[01:01:48] Christopher David: let's try
[01:01:57] Christopher David: let's see
[01:02:18] Christopher David: let's see
[01:02:22] Christopher David: what this looks like
[01:02:32] Christopher David: okay
[01:02:40] Christopher David: no
[01:02:42] Christopher David: I must have another dd
[01:02:52] Christopher David: text
[01:02:59] Christopher David: as df
[01:03:04] Christopher David: images
[01:03:07] Christopher David: let's see
[01:03:12] Christopher David: I don't know if that's correct
[01:03:19] Christopher David: first let's remove the dd
[01:03:27] Christopher David: first let's remove the dd
[01:03:34] Christopher David: first let's remove the dd
[01:03:42] Christopher David: first let's see what it looks like at this point
[01:03:52] Christopher David: input
[01:04:02] Christopher David: input is this
[01:04:05] Christopher David: thing
[01:04:52] Christopher David: you ready
[01:04:59] Christopher David: make it work
[01:05:22] Christopher David: let's assume it's simplified scenario
[01:05:38] Christopher David: don't
[01:05:40] Christopher David: but we'll try
[01:05:53] Christopher David: make it this first
[01:06:08] Christopher David: give me the whole thing
[01:06:11] Christopher David: this try
[01:06:22] Christopher David: there's no way this will work
[01:06:44] Christopher David: let's see
[01:06:51] Christopher David: let's see
[01:06:58] Christopher David: let's see
[01:07:16] Christopher David: let's see
[01:07:23] Christopher David: I'm guessing this just needs some sort of base 64 prefix
[01:07:49] Christopher David: let's see
[01:07:56] Christopher David: let's see
[01:08:04] Christopher David: let's see
[01:08:12] Christopher David: let's see
[01:08:19] Christopher David: let's see
[01:08:26] Christopher David: let's see
[01:08:33] Christopher David: let's see
[01:08:40] Christopher David: first let's see
[01:08:55] Christopher David: let's see
[01:09:02] Christopher David: if
[01:09:08] Christopher David: let's see
[01:09:15] Christopher David: if
[01:09:23] Christopher David: let's see
[01:09:30] Christopher David: let's see
[01:09:37] Christopher David: let's see
[01:09:43] Christopher David: let's see
[01:09:51] Christopher David: what are we doing wrong
[01:09:59] Christopher David: let's see
[01:10:06] Christopher David: first let's see
[01:10:13] Christopher David: what is that
[01:10:20] Christopher David: do
[01:10:33] Christopher David: no
[01:10:38] Christopher David: let's see
[01:10:45] Christopher David: let's see
[01:10:55] Christopher David: let's see
[01:11:02] Christopher David: let's see
[01:11:32] Christopher David: let's see
[01:11:54] Christopher David: let's see
[01:12:01] Christopher David: let's see
[01:12:08] Christopher David: let's see
[01:12:15] Christopher David: let's see
[01:12:21] Christopher David: let's see
[01:12:26] Christopher David: let's see
[01:12:34] Christopher David: let's see
[01:12:41] Christopher David: let's see
[01:12:47] Christopher David: let's see
[01:12:54] Christopher David: let's see
[01:13:00] Christopher David: let's see
[01:13:09] Christopher David: let's see
[01:13:19] Christopher David: let's see
[01:13:24] Christopher David: let's see
[01:13:30] Christopher David: let's see
[01:13:37] Christopher David: let's see
[01:13:43] Christopher David: let's see
[01:13:51] Christopher David: let's see
[01:13:58] Christopher David: let's see
[01:14:04] Christopher David: let's see
[01:14:13] Christopher David: let's see
[01:14:23] Christopher David: let's see
[01:14:28] Christopher David: let's see
[01:14:34] Christopher David: let's see
[01:14:55] Christopher David: let's see
[01:15:03] Christopher David: let's see
[01:15:08] Christopher David: let's see
[01:15:16] Christopher David: let's see
[01:15:23] Christopher David: let's see
[01:15:29] Christopher David: let's see
[01:15:37] Christopher David: let's see
[01:16:04] Christopher David: let's see
[01:16:11] Christopher David: let's see
[01:16:18] Christopher David: let's see
[01:16:23] Christopher David: let's see
[01:16:33] Christopher David: let's see
[01:16:38] Christopher David: let's see
[01:16:44] Christopher David: let's see
[01:16:54] Christopher David: let's see
[01:17:03] Christopher David: let's see
[01:17:10] Christopher David: let's see
[01:17:19] Christopher David: let's see
[01:17:24] Christopher David: let's see
[01:17:28] Christopher David: let's see
[01:17:32] Christopher David: let's see
[01:17:39] Christopher David: let's see
[01:17:45] Christopher David: let's see
[01:17:55] Christopher David: let's see
[01:18:00] Christopher David: let's see
[01:18:06] Christopher David: let's see
[01:18:16] Christopher David: let's see
[01:18:25] Christopher David: let's see
[01:18:30] Christopher David: let's see
[01:18:40] Christopher David: let's see
[01:18:45] Christopher David: let's see
[01:18:51] Christopher David: let's see
[01:19:01] Christopher David: let's see
[01:19:06] Christopher David: let's see
[01:19:12] Christopher David: let's see
[01:19:35] Christopher David: let's see
[01:19:44] Christopher David: let's see
[01:19:49] Christopher David: let's see
[01:19:57] Christopher David: let's see
[01:19:59] Christopher David: let's see
[01:20:59] Christopher David: Okay.
[01:21:20] Christopher David: Okay.
[01:21:27] Christopher David: Image URL.
[01:21:42] Christopher David: Maybe.
[01:21:49] Christopher David: Okay.
[01:21:50] Christopher David: Looks like that might have made some progress.
[01:21:57] Christopher David: Oops.
[01:21:58] Christopher David: Okay.
[01:22:07] Christopher David: Okay.
[01:22:11] Christopher David: A photograph is being passed in.
[01:22:25] Christopher David: Now I want the bytes.
[01:22:33] Christopher David: Let's see if this works.
[01:22:50] Christopher David: Okay.
[01:22:52] Christopher David: Moment of truth, maybe.
[01:22:54] Christopher David: Upload.
[01:22:55] Christopher David: Image.
[01:22:56] Christopher David: What is this?
[01:23:01] Christopher David: You're reckoning.
[01:23:04] Christopher David: Invalid image.
[01:23:05] Christopher David: Okay.
[01:23:07] Christopher David: Probably we just need a basic C4.
[01:23:17] Christopher David: Watch.
[01:23:18] Christopher David: Okay.
[01:23:35] Christopher David: What was that example we had previously?
[01:23:45] Christopher David: Okay.
[01:23:52] Christopher David: Passing an image URL works.
[01:23:56] Christopher David: But not the base 64 bytes.
[01:24:00] Christopher David: I think we need to prefix it.
[01:24:04] Christopher David: Open AI wants this.
[01:24:07] Christopher David: How do we pass the bytes?
[01:24:12] Christopher David: Okay.
[01:24:27] Christopher David: Yeah.
[01:24:28] Christopher David: I have to extract the mine type and pass that in and we can get that from the image upload.
[01:24:37] Christopher David: Okay.
[01:24:47] Christopher David: Okay.
[01:25:04] Christopher David: Okay.
[01:25:14] Christopher David: Please.
[01:25:24] Christopher David: What is this?
[01:25:36] Christopher David: Okay.
[01:25:38] Christopher David: You uploaded an unsupported image.
[01:25:40] Christopher David: Please make sure.
[01:25:42] Christopher David: All right.
[01:25:49] Christopher David: What do I upload?
[01:26:01] Christopher David: This is a PNG.
[01:26:04] Christopher David: 315KB.
[01:26:30] Christopher David: Is it because I did this?
[01:26:37] Christopher David: Was it already encoded?
[01:26:47] Christopher David: What is this?
[01:26:56] Christopher David: What is this?
[01:27:06] Christopher David: You provided an image of a screen that seems to show a conversation between a user and an AI agent named
[01:27:11] Christopher David: Do your developer within a chat interface.
[01:27:16] Christopher David: It's reading the code.
[01:27:22] Christopher David: Game over.