Description Transcript
0:00 Hey. Hey. Hey. 0:04 [Music] 0:55 ah. 1:01 [Music] 1:36 Heat. Heat. N. 1:40 [Music] 1:58 Down. 2:07 [Music] 2:12 Ah. 2:14 [Music] 2:30 Hey everybody, good morning, good 2:32 afternoon, or good evening depending on 2:34 where we're dialing in from. Uh let us 2:35 know in the chat by the way where you're 2:37 joining us from today for day three of 2:39 uh AI build week. Uh I'm Kenan and I've 2:42 been your host this week. I will also be 2:44 your presenter today and for the next 2:45 couple days. Uh, and I'm excited for 2:47 folks to kind of dive in and uh, look at 2:50 the topic we have today, which is how we 2:52 built a tool called Retool GPT. So, 2:54 before we get started, again, kind of 2:56 let us know in the chat uh, where where 2:58 you're calling in from today would be 2:59 great. And, uh, like Taylor mentioned, 3:02 uh, what one thing is this week you've 3:04 learned so far. If you've been with us 3:05 for days one and two, uh, if not, 3:08 she just finished signing in. you join 3:10 us for, you know, day uh day three. 3:12 We're glad you're here for day three. Uh 3:15 and uh hope you're here for day four and 3:17 five uh tomorrow and Friday. So again, 3:21 thanks everybody for being here and we 3:24 will get going. 3:31 All right. So uh like I mentioned today 3:34 we are going to be talking about uh how 3:36 we built a tool called retool GPT. Uh if 3:38 this is what you're here for, you're in 3:40 the right place. If not, I hope you 3:41 stick around anyway. Um because 3:43 basically we're going to talk about uh 3:44 this tool that we decided we needed 3:46 where we wanted a sort of chat GPT type 3:48 experience, but that knew everything 3:50 about all of our internal company data. 3:52 Um and uh that was a a thing that had a 3:54 few challenges associated with it. So 3:56 we're going to walk through those real 3:58 quick. So just an overview of kind of 4:00 what we're going to be looking at today. 4:01 We're going to do a very quick review of 4:03 what we learned in the first couple 4:04 days. those topics kind of build on each 4:05 other and are pretty important for what 4:07 we're talking about today. So for the 4:08 folks that weren't here, we're just 4:09 going to briefly talk about uh the 4:11 couple things that we learned there. Um 4:14 and then uh we're going to go into the 4:16 problem that led us to build this in the 4:17 first place. We're going to take a look 4:18 at some of the front-end pieces, some of 4:20 the backend pieces, and then we're going 4:22 to look at kind of what the future of 4:23 this tool looks like. So this uh will be 4:25 a little bit of a higher level sort of 4:27 architectural talk. uh some of our 4:29 feedback from the first two days is uh 4:31 where Anelique has been you know in the 4:32 weeds building things in retool uh is 4:34 that we want to kind of focus a little 4:35 bit more on the architecture. So in this 4:37 case we'll pull back a little bit uh and 4:40 look at you know how we built this tool 4:42 uh what we use to do it uh but we won't 4:45 be kind of in the weeds building as 4:46 much. So hopefully that's helpful to 4:47 kind of give you a sense of how to build 4:49 these sorts of AI powered uh 4:50 applications in retool. 4:54 So days one and two, if you weren't here 4:56 uh on Monday with us, Anjelique talked 4:58 all about different models and and which 5:00 ones have their advantages for certain 5:02 use cases, how to compare them, etc. Uh 5:04 but basically the gist of that is that 5:06 you know all of the large language 5:07 models and and AI tools that we have 5:09 access to have different pros and cons, 5:11 different strengths and weaknesses. So 5:14 uh for your particular use case um it's 5:16 always important to kind of experiment 5:17 with those different models and figure 5:19 out um you know which which one works 5:21 best for you and which one you feel like 5:22 gives you the best results because even 5:24 for a particular use case you know 5:26 certain people might prefer different 5:27 models and uh that'll come into play a 5:29 little bit later as we'll see. So 5:31 yesterday on day two we dove into all 5:33 things vectors talking about how 5:35 unstructured data gets transformed into 5:37 a you know a mathematical representation 5:39 of itself and that's lets large language 5:41 models and AI tools uh access and use 5:44 that data more easily and we'll see that 5:47 come into play today as well. Um you 5:49 know all of this internal company data 5:50 we had spread across all these different 5:52 systems was super unstructured um and we 5:54 needed a way to basically work with that 5:56 in a in a large language model context. 5:58 So, uh, if you didn't, uh, catch either 6:02 of those two sessions, we have community 6:04 threads for each of those, which you'll 6:05 be able to find in the retool community. 6:07 You can go back, watch the recordings. 6:10 We'll post, we post the Q&A there from 6:11 Zoom. And if you have any questions that 6:13 you weren't able to ask live in the 6:15 session, um, you can do that on this 6:17 community threads as well. Since you're 6:19 here though, just a reminder that you 6:21 can post questions in the chat or using 6:23 the Zoom Q&A tool. and uh our retail 6:26 folks who are in the chat, Taylor and 6:27 Sarah and Tess, Daniel, uh we'll get to 6:30 those and and we'll we'll bring all 6:32 those back around at the end. 6:35 Great. So, that was day one and two, but 6:37 y'all are here on day three. So, let's 6:39 dive into that. And basically, Retool 6:41 GPT as a system came out of a problem uh 6:44 that we had internally. We had data 6:47 absolutely everywhere. We have public 6:49 documentation for retool which is 6:50 helpful for support folks and and people 6:52 who are trying to understand uh new 6:54 features and things that we've shipped. 6:56 We have a change log that's there. Uh we 6:58 have a bunch of internal company data 6:59 especially for our sales teams and 7:01 things in Confluence. Our engineering 7:03 team largely works in linear. Uh you 7:05 know myself on the marketing team and 7:07 other folks uh do a lot of work in 7:08 Google Drive and Google Docs. And we 7:10 also just have a lot of just uh random, 7:13 you know, PDFs and things that um you 7:15 know are sitting around and and need to 7:17 be, you know, useful. Either they're 7:20 less useful trapped on individual 7:21 people's computers or they're on Google 7:23 Drive where there's a public link, but 7:25 um you know, there there like needs to 7:27 be some sort of system that brings all 7:29 of these things together because a 7:30 common question we were getting was, 7:31 "Okay, cool. Uh I know that's in a 7:34 document somewhere, but what system is 7:35 it on? I don't know where to look. I'm 7:37 going through all these systems just to 7:39 find you know whether it's in Google 7:40 Drive or Confluence or um anything like 7:43 that. So that was kind of the problem 7:45 and uh we needed to find a way to 7:47 basically solve for that and so 7:50 everybody also had their own slightly 7:52 different tool preference. Uh at the 7:54 time I was using Anthropics Claude for 7:56 most things. lots of people enjoyed Chat 7:59 GPT. Um, you know, we had folks who were 8:02 using Perplexity or people who were 8:04 really invested in using Gemini and so 8:06 there was all of this kind of copy 8:07 pasting. We were worried about, you 8:09 know, our data going everywhere. Um, 8:11 different AI providers obviously have 8:13 different standards on whether they 8:15 train future models on your data and 8:17 things like that. And so we wanted to 8:18 kind of rein all of that in uh and 8:20 control all that and also eliminate a 8:22 ton of the copy pasting uh that I know 8:24 at least I was doing and I'm I'm sure 8:25 other folks on our team were doing as 8:27 well. And so that's basically where uh 8:30 retool GPT was born. And I'm going to 8:33 leave this up on the slide for a minute 8:34 just so you can kind of take a look and 8:35 and take in all the different pieces 8:36 here. We'll be going through some of 8:37 these uh in the talk. But if you're used 8:40 to a tool like JGBT or claude or even 8:42 Gemini, um this interface will look 8:44 pretty familiar to you. But this is all 8:47 completely customuilt in retool. And you 8:50 can see that in this example, I'm asking 8:52 it, you know, what days do we have off 8:53 for holidays for um you know, June and 8:57 July this year? And so we had, you know, 8:59 the Junth holiday uh and we had July 4th 9:02 as well. And so uh you can see also it 9:05 says if you need more details or 9:06 context, you can check the full calendar 9:08 here. and that you know would take me 9:10 into Confluence where it actually pulled 9:11 the data from. So instead of just you 9:13 know kind of generally knowing what 9:15 holidays companies have off this was 9:17 able to reference our actual published 9:19 holiday schedule um and uh and provide 9:22 me this answer here. So instead of 9:23 having to remember whether that was you 9:24 know on my Google calendar or in Google 9:27 Drive as a doc or in Confluence um I was 9:29 just able to go here and ask Recal GPD 9:31 that same question. So um let's kind of 9:34 dive in and take a look at how this 9:36 works. So, uh, I mentioned before we'll 9:39 split this kind of into front end and 9:40 and back end and we'll start on the 9:41 front end of things. So, uh, I want to 9:44 just demo this obviously is a pretty, 9:46 uh, rich interface here. Um, but there's 9:49 a lot behind the scenes as we'll see. 9:51 And I just wanted to flag that if you're 9:53 just getting started with this kind of 9:54 LM chat interaction. Um, Retool actually 9:57 does have a pre-built chat component. 9:59 So, we're over here in the Retool uh, 10:01 IDE. If we drag our LLM chat to the 10:05 canvas, we can see that we get this kind 10:08 of pre-populated AI action uh where we 10:11 can choose, you know, which model we 10:12 want to use for this chat. Um I'm going 10:14 to choose GPT40 just because that's one 10:16 that I kind of personally like and I'll 10:18 save and close this. But now sort of 10:21 without any additional configuration 10:22 because I already have my OpenAI key 10:24 added to my retail account. Um I'm able 10:27 to basically have this sort of chat 10:29 experience here. So I can ask why is the 10:32 sky blue and you see it'll think a 10:34 little bit but then GPT40 will start 10:37 kind of returning its response to me. 10:38 And so a lot of things that you need to 10:41 do to create a kind of cohesive and 10:43 comprehensive chat experience we already 10:45 take care of for you. You have the 10:46 ability to you know download the logs of 10:48 your chat to clear out the history. You 10:50 can copy an individual message and if 10:53 you see in the query here we're also 10:55 maintaining the message history for you. 10:57 So you can see it knows that I already 10:58 sent this why is the sky blue message. 11:01 So part of kind of building this chat on 11:02 your own is maintaining that state of 11:04 the chat the message history so that um 11:07 you know if I ask um is it really blue? 11:11 You know if I just sent that individual 11:13 message to a large language model it 11:14 wouldn't know what I was talking about. 11:16 Uh but because you know it has the 11:18 context of the message history that I've 11:19 already sent it knows that I'm talking 11:21 about the sky. We can kind of pick up 11:23 the conversation there. So uh if you're 11:25 looking for just kind of an out of the 11:26 box sort of chat experience u this chat 11:29 component is really helpful. You can of 11:31 course uh using retools sort of double 11:33 curly brace syntax here uh inject any 11:36 sort of data that is you know present in 11:38 your app anywhere else. Um so you can 11:40 make your prompts uh super detailed and 11:42 full of context uh even inside the scope 11:45 of a larger app. So, um, just wanted to 11:48 note that as a way that, you know, if 11:49 you're kind of getting started with a 11:51 with a barebones starter version of 11:52 this, um, that that may be the way to 11:55 go. 11:57 Cool. 11:58 But obviously, you know, here looking 12:00 back at that screenshot that we just 12:01 saw, there is an even more richer 12:03 experience going on. Uh, we have sort of 12:05 the ability to start multiple threads 12:08 um, and all of that. And so, um, there 12:10 were a few different pieces that we 12:12 needed here. 12:13 So, number one, uh we'll go over this in 12:15 just a little bit when I flip back over 12:16 to the screen. Uh but all of these are 12:18 individual retool components. So, 12:20 everything from buttons to text areas 12:22 and things. Uh they're all uh dragged 12:24 onto the canvas and configured as 12:26 individual retool components. So, unlike 12:28 the chat component where it was just one 12:29 component that contained all of those 12:31 things, uh this allows us to customize, 12:33 you know, how the buttons look, how the 12:35 text box responds to input, um and and 12:38 all sorts of other things like that. So, 12:40 um, it's just kind of an example of we 12:42 we covered the full spectrum of you just 12:44 want everything done for you in a 12:45 pre-made chat component or, uh, you can 12:48 really break that out and and go really 12:49 in the weeds with building your own 12:51 sorts of interfaces. Um, and we've seen 12:53 people build some very complicated 12:54 interfaces in retool. Um, and that's one 12:56 of the reasons why we we keep the system 12:58 so flexible. So, secondly, uh, we used 13:02 uh, retool database which is built into 13:04 retool to manage things like threads and 13:06 messages. So, uh, the chat component 13:08 stores, you know, all the messages in a 13:10 given thread to keep that context. Uh, 13:12 but when we want people to be able to 13:13 leave the tool and come back, that's 13:15 when we need some more persistent 13:16 storage. And so, instead of reaching for 13:18 another database tool or anything like 13:19 that, uh, we use the database that's 13:21 built into retool to basically save when 13:23 a person creates a new thread, when they 13:25 add messages to that thread, all of that 13:27 is saved in retool database. that for 13:29 each user um they can come back and they 13:32 can see all their past chats which is 13:33 what you would expect with a tool like 13:35 JT GPT for example and like I mentioned 13:38 everybody had a slightly different 13:39 preference on what tools they wanted to 13:41 use and what models they wanted to use 13:43 and so uh we wanted to give folks the 13:45 ability to do that sort of model 13:46 customization as well. So you'll notice 13:49 if we uh tab over here to the actual 13:51 interface itself there's this drop down 13:53 up here where I can choose you know a 13:55 couple GPT models uh you know an open AI 13:58 model anthropic model or a deepseek 14:00 model that's being served through gra 14:02 right so um no matter which model you 14:04 feel like gives you the best output for 14:05 your tasks uh you can choose that here 14:07 and you can even sort of uh you know 14:10 move between them uh and decide you know 14:12 which one gives you the best output. So, 14:16 I'll just leave this up here for a 14:17 minute and let folks kind of scan over. 14:19 Um, but you can see all of these 14:21 components here are what I was talking 14:22 about where uh everything's kind of 14:24 custom configured and custom placed and 14:27 the behavior like you know this sidebar 14:29 being able to be toggled on and off. Uh 14:31 those are things that we can control 14:32 with uh JavaScript queries and things 14:35 that run on the behind the scenes of the 14:37 app so that we have exactly the behavior 14:39 that we want to, right? And so uh we 14:41 have the ability to do everything from 14:43 again talking the model starting a new 14:45 thread here which again creates a new 14:47 row in that built-in regional database. 14:49 Uh we can ask for help if we find out if 14:51 we think that something is broken over 14:53 here from the folks that built this 14:54 tool. Um and you know kind of the core 14:56 functionalities down here of okay uh we 14:59 can send a message we can you know do 15:01 things like search the web upload 15:02 documents 15:04 um or you know this section over here 15:07 include vectors is what we'll get to in 15:10 just a second here. 15:13 So at its current state like this is 15:15 basically the architecture. We have kind 15:17 of our core chat experience. We've 15:18 connected it up to retual DB so that it 15:20 can save things uh and we've connected 15:22 it to all the various and models that we 15:24 have access to. Right? So it can 15:26 communicate with those models. It can 15:28 write and read from uh you know our 15:30 retail database and this is pretty good 15:32 but at the moment you know it's not any 15:35 better than a tool like Chad GBT or 15:37 anthropic just because um you know it is 15:40 just using the underlying models. it's 15:42 not using any of our sort of internal 15:44 retool data yet. Uh, and so that's kind 15:47 of the next thing that we need to get 15:48 to. 15:50 So that's where the back end comes in. 15:53 And again, as a reminder, like we have 15:55 data in all these different places. Um, 15:57 we kind of need to like centralize this 15:59 somewhere. And you'll notice down here, 16:02 uh, you know, that we have these three 16:04 buttons that say include vectors. If we 16:06 hover over these, we can see, you know, 16:07 linear issues, retail public docs, and 16:10 confluence are things that we can sort 16:12 of toggle on and off to include in our 16:15 search. Um, so we'll take a look at uh 16:18 how these work in just a second. Um, but 16:22 that was basically the challenge we had. 16:24 So, um, I just want to kind of as we 16:26 move from front end to back end, just 16:27 remind folks that uh we do you do have 16:29 the ability to drop questions in chat. 16:31 uh we we tend to see folks have 16:33 questions about these sorts of things 16:34 and I'm more than happy to answer those. 16:35 That's why I'm here for y'all. Um so uh 16:38 definitely drop those either in chat or 16:39 in the Q&A. Um if you have kind of 16:42 things you want to dig deeper on as as 16:43 we go through the talk here. 16:46 So cool. So we know we need to collect 16:47 all of this data um in one place. Uh we 16:50 need to expose it to large language 16:52 models in a way that makes sense. We 16:53 obviously because we have so much 16:55 information, we can't just dump all of 16:56 it into the prompt uh and have the LLM 16:59 sort it out. that would hit the the 17:01 context window of any model, even the 17:04 the Gemini models that have a huge 17:05 context window. And so we needed to 17:07 figure out something to solve this. 17:11 Basically, how we did that is we 17:13 combined retool workflows with retool 17:15 vectors. So, for those who don't know, 17:17 retool workflows is basically a tool 17:19 that lets you, like you can see here, 17:20 kind of lay out these different blocks 17:22 um on a canvas, have one change the 17:24 other, and create these sort of logic 17:26 flows uh and and automations that do 17:30 things either triggered by a workflow, 17:32 which could be like a slack message or 17:34 somebody opening a pull request on 17:35 GitHub or something, um or triggered on 17:38 a schedule, which is how we use them in 17:39 this case. So you know every 6 hours, 17:41 every 12 hours we have our workflow run 17:43 and look at okay from any of our data 17:45 sources are there new uh pieces of data 17:48 that we need or anything else we need to 17:49 pull in. The second piece that came into 17:52 play uh was retual vectors. And so again 17:54 this is was a large amount of our focus 17:56 yesterday on day two. So if you missed 17:58 that definitely go back uh into the 17:59 community and find the replay and the 18:02 Q&A for that. Uh but essentially retool 18:04 vectors allows us to take all of this 18:05 unstructured data and turn it into a 18:09 vector database that then we can pass to 18:11 our large language model the relevant 18:13 context from all of the documents that 18:15 it has ingested um and it's able to use 18:18 that in its response. So, for example, 18:20 that's how in our company calendar 18:22 example, uh, the LLM was able to know 18:25 that, uh, our company calendar was on 18:26 Confluence and was able to link me 18:28 there, uh, when I was looking for our 18:30 days off for June and July. 18:33 So, uh, let's take a look at 18:35 specifically how this works uh, by 18:37 diving into a workflow that, uh, pulls 18:40 in updates from Google Drive, right? So, 18:43 uh, this is what a retool workflow looks 18:45 like for those of you who haven't seen 18:46 it. And basically what what this 18:49 workflow does is we have a vector store 18:51 that we wanted to update with a specific 18:53 set of uh Google Docs. Right? So in this 18:56 case what I'm doing here is I'm hard- 18:58 coding these Google Docs ids. Uh but you 19:01 could very easily have this code step 19:03 set up to look at a specific Google 19:05 Drive folder. So that would be a little 19:07 bit more uh dynamic, right? So what we 19:10 do is we have these hard-coded ids. You 19:12 could also alternatively do a lookup uh 19:13 from a folder and we basically loop 19:16 through uh in this loop step here and we 19:20 get all of the contents of each of the 19:22 documents. Right? So you can see that 19:24 we're running these uh sequentially. So 19:25 it's looping through each document one 19:27 at a time. Uh it's getting the data and 19:29 we say you know include content from all 19:31 the tabs. We don't know if this document 19:32 has different tabs in it. Google Docs 19:34 does now support tabs. Um and so uh you 19:37 know that that's something we just want 19:38 to make sure we get all of the content 19:40 right. 19:42 So then here because of how content is 19:44 stored in Google Docs, we have to do a 19:45 little bit of work to kind of compile it 19:47 into one you know main chunk of text 19:50 that the large language model can 19:51 interpret. So this is where kind of the 19:53 power of of retool comes into play. Um 19:55 we have you know the ability to not only 19:58 use sort of the pre-built actions that 20:00 we have set up uh but also at any time 20:02 you can just basically write your own 20:04 code as well. So here you can see I've 20:06 basically created this JavaScript 20:07 function that loops through the sort of 20:09 complex data structure of what a Google 20:11 doc looks like internally uh and returns 20:14 it as essentially just a string of text. 20:16 Right? So for each of the docs we loop 20:19 through and compile that text. And then 20:22 this final step here is basically where 20:24 we're actually updating the vector. So 20:25 you see once again we're sequentially 20:28 looping through and we're saying okay 20:30 for every one of these vectors um you 20:32 know based on the name of the Google doc 20:34 we know the vectors already stored under 20:35 that name uh update it with the value 20:38 which is you know the combined text data 20:40 that we were getting here and uh we're 20:43 doing uh what's called an upsert action 20:45 here which is pretty helpful uh which 20:47 means we don't have to decide whether uh 20:51 you know we're creating a new vector 20:53 because it doesn't exist or whether we 20:54 need to update an existing one, an 20:56 upsert basically is a is kind of a 20:58 combination of those two things, insert 20:59 and update. And so if a vector with this 21:02 title already exists, it will overwrite 21:05 the contents of that vector with our new 21:06 content, which is how updates happen. Uh 21:08 but if for example, someone drops a new 21:09 Google doc that we want to also 21:11 vectorize. Uh we don't need to handle 21:13 that case separately. It will just 21:14 insert it as a new vector and then 21:16 update it in the future as we go. So uh 21:19 this is a relatively simple workflow. 21:21 Let me kind of zoom out here and see 21:23 just just a couple steps. Uh but this 21:25 means that all of our sort of Google 21:26 Docs data that we want in a vector uh 21:29 can now be in that vector. So what we 21:31 would do then is go over here to 21:33 triggers and say okay on a schedule we 21:36 want to you know run this we say you 21:38 know every uh hour at 0 minutes past the 21:42 hour right so at the top of the hour 21:43 basically this workflow will run it will 21:45 check all of our Google Docs for changes 21:47 uh and it will uh you know pull this 21:49 into our vector. So there's a bunch of 21:51 options uh for you know different 21:53 intervals you can do here. If you're 21:55 comfortable with cron syntax you can 21:56 also write that here as well. So again 21:58 uh for folks who are a little bit more 21:59 technical and comfortable in those 22:00 details we do expose that as an option 22:02 here. So set this up and configure it 22:04 however you like. Um but we have now the 22:07 ability to have Google Google Docs in a 22:10 vector. And so this sort of ingestion 22:12 workflow was actually what we set up for 22:15 all of our different data sources as 22:16 well. So this is how you know every few 22:19 hours we crawl all of our different 22:20 confluence spaces and pull all of our 22:22 confluence docs into a vector. Um same 22:24 thing for our linear tickets and for our 22:27 public documentation as well. So 22:29 anything that's on docs.real.com 22:31 uh you know we're able to get that data 22:33 in as well. So folks in support and 22:35 folks who are working in the community 22:36 can also use this to say okay hey uh you 22:39 know what does retail support for you 22:41 know agents look like or how does is 22:43 there a way to schedule a workflow? um 22:45 and it would be able to look at our our 22:46 public documentation and uh and find 22:48 that. 22:53 So at a high level uh what we have here 22:55 is basically the user has the ability to 22:59 ask a question. Uh we go through and do 23:02 each of these resource queries. So how 23:05 this breaks down is basically uh retal 23:07 GBT on the front end calls a sort of 23:10 backend workflow that looks at uh what 23:12 model is being used um and looks at all 23:15 the different tools that the user has 23:16 selected. So we have these different 23:18 branches of okay if the user has asked 23:20 to include confluence make sure we go 23:22 query the confluence vector for some 23:24 data here. if the user has asked to um 23:27 you know use Google Docs or use linear 23:30 uh make sure we query the linear 23:32 resource here and so what that actually 23:34 looks like and I'll show that here in 23:36 this workflow um is that for example 23:41 we have our start trigger we can 23:43 basically do something called a branch 23:45 and basically what this would say is you 23:48 know if we had some sort of variable set 23:50 uh like search confluence 23:54 We could say okay if search confluence 23:56 is true then we want to take some action 23:59 we could also add you know the else and 24:01 say okay otherwise you know we don't 24:03 want to take action right so what this 24:05 might look like is we could choose a 24:07 resource query and again we could make 24:10 this query you know a database or 24:11 anything else but we might want to query 24:13 retal vectors and so in addition to 24:15 doing an upsert on the document u you 24:18 can also do things like list all the 24:20 vectors you can do a semantic search 24:23 which is what we're doing in this case. 24:24 Um we're basically taking the input 24:27 prompt and doing a semantic search to 24:29 pull the most relevant documents from a 24:31 particular vector. Um again you can 24:34 create vectors, you can do upserts, 24:35 inserts, all this different stuff. But 24:37 basically what we're doing uh in our 24:38 example here is if the user decides to 24:40 search confluence, we're running you 24:42 know a semantic search on the vector. 24:44 we'd be able to pass uh you know the 24:46 start whatever data was passed in um the 24:49 user's query 24:52 and it would basically then from the 24:54 vector that we've selected uh would be 24:56 able to pull us the most relevant 24:58 documents so we could then sort of 25:00 stitch those documents together on the 25:01 back end um and use those to provide the 25:05 response um that the the user was 25:07 looking for. again like we like we saw 25:09 earlier uh this this response with you 25:12 know a linked to our confluence right so 25:16 we have this workflow where we're 25:18 basically branching looking at all these 25:20 different tools conditionally on whether 25:23 the user has you know checked off uh 25:26 these various check boxes down here at 25:28 the bottom um and that started to get a 25:30 little complicated 25:34 but what we realized is it actually did 25:37 a pretty good job at, you know, doing 25:38 all this branching, um, coming back and, 25:42 uh, you know, giving the user an answer. 25:44 But as we started thinking about how to 25:46 add, uh, more tools, um, and how to add 25:50 more different data sources, uh, you 25:52 know, we started to think that maybe 25:53 this, uh, workflow wasn't the best. The 25:56 other thing that we had to deal with at 25:57 the time when we built this was the fact 26:00 that the user can select um different 26:03 models means that uh you know we had to 26:06 include branches for all of those models 26:08 in the workflow as well. But one thing I 26:11 did want to highlight uh is that this is 26:13 actually quite easy now. Uh we don't 26:16 have to include all these branches 26:17 anymore. What we can do is if we have an 26:20 AI action here, let's just drag this up 26:22 here for example an AI action. You'll 26:25 notice that in addition to the drop down 26:28 here that where you can pick all of the 26:30 different models you have associated 26:31 with your retail account. So let's just 26:33 say we'll pick lot of four. There's also 26:37 this FX button, right? So what this lets 26:40 you do is provide the specific model 26:42 that you want to use dynamically. So if 26:45 for example the user picked a model from 26:48 the dropdown and we had that over here 26:51 in our start trigger 26:54 let's say okay we want to be able to let 26:56 the user dynamically pass this model in. 26:58 Then instead of having to pick and have 27:00 a hard-coded drop down here what we can 27:02 do is we can actually once again use 27:04 retools double curly brace syntax to say 27:06 okay cool whatever model the user passes 27:09 into this workflow um is the one we'll 27:11 use. So that was able to simplify the 27:12 logic quite a bit but we still had so 27:15 many branches for okay has the user want 27:17 decided they wanted to use confluence 27:19 has the user said they want to use uh 27:21 linear like all these different stuff 27:22 these were all different branches that 27:24 all kind of then had to coalesce at the 27:26 end right 27:29 so we started thinking about kind of 27:31 what's next what the future direction 27:32 for this was um and this kind of 27:35 coincided nicely with uh the rise of a 27:38 agents and so what we thought was okay 27:40 well Cool. We actually would love for 27:42 the model to basically be able to choose 27:45 what tools make sense on its own. Uh, 27:48 and sometimes there are questions that 27:50 based on the information they get back, 27:53 uh, require kind of a follow-up sort of 27:55 search or a kind of rerunning of that 27:56 same flow that we looked at. Um, and so 27:59 we thought, okay, wouldn't it be cool to 28:00 kind of have the ability to basically 28:02 call the workflow again, um, and you 28:05 know, use the information we learned 28:07 from the first time through to get even 28:09 better information the second time, 28:11 right? And so, uh, you can actually do 28:13 this inside of workflows and we have, 28:15 uh, you can recursively have a workflow 28:18 call itself. So in in our kind of early 28:20 versions of this, we were, you know, 28:22 saving a row to the database and said 28:23 this message has been sent, this 28:25 research has been done and then calling 28:27 the workflow again, letting it look at 28:29 what was already saved in the database 28:31 uh and get all of that kind of past 28:33 context. But it becomes a little bit 28:35 clunky um to do that. And so there were 28:38 all these kind of rough edges that we 28:40 had to uh deal with. And basically that 28:43 kind of inspired us and led us to build 28:46 uh retal agents which we released just 28:48 over a month ago. Um and this allows you 28:51 know folks to configure large language 28:54 models equip them with various different 28:55 tools uh and let the large language 28:58 models decide you know how to call those 28:59 tools what order to call them in how to 29:01 use them to get the best possible 29:02 answer. So this is an agent for example 29:05 that uh I'm sent it that I just booked a 29:08 call with Tim at apple.com and can you 29:10 help me do some preparation? And so it 29:12 basically goes through, it uses the 29:13 tools like searching the web, creating a 29:15 Google doc, writing to a Google doc, all 29:17 these tools that it has access to to 29:19 kind of perform a similar type of, you 29:21 know, beginning to end workflow, but the 29:23 path there is a little bit uh more 29:25 winding. The AI is able to choose the 29:26 path that it takes to get the best 29:28 answer. Um, which unlocks a whole new 29:31 set of possibilities and things that we 29:32 can automate. So we'll be taking a much 29:34 deeper look at this on uh Friday. 29:37 Tomorrow we're going to go even deeper 29:38 on workflows. So to give you uh a little 29:41 bit of the more kind of in-depth context 29:43 about how these things are built and 29:44 configured um and how they sort of 29:46 ladder up to agents but um just wanted 29:49 to like the future of retal GBT is 29:51 basically it will be built as an agent 29:53 and so it will have even more 29:54 flexibility to call all these different 29:56 tools. It will make it even easier for 29:58 us to add new data sources and things. 30:00 uh and you know this very complex sort 30:03 of branching workflow that we have set 30:04 up uh will will be able to be retired uh 30:07 because we have a a much more elegant 30:09 architecture for this sort of thing now. 30:11 So um tune in on Friday for uh a look at 30:15 agents uh and if you want to go deeper 30:17 on workflows and things um come come 30:19 join us again tomorrow. So um that's all 30:22 we had for kind of presentation today. I 30:24 hope this was helpful and insightful and 30:26 um I did want to get to some of the 30:28 questions that folks have been leaving 30:29 in the chat. So, just a reminder that if 30:31 this is kind of spurring anything for 30:33 you or questions or things you want to 30:34 kind of dive into, uh, please either 30:36 drop those in the chat or in the Zoom 30:38 Q&A. Um, and Sarah, Daniel, Tess, or 30:42 Taylor will, uh, grab them for me and 30:43 we'll we'll get to them here one at a 30:45 time. So, uh, let's go through some of 30:47 these. So, uh, David asks, do we need 30:50 API keys for anthropic, OpenAI, and 30:52 DeepSeek or are the models included? So, 30:54 the short answer here is, uh, some of 30:56 both. Retool 30:58 does provide a retool managed um open AI 31:03 key. And what this allows you to do is 31:06 go when you create a brand new account, 31:08 you can um basically go in and start 31:12 using AI right away inside your apps and 31:14 your workflows. The caveat there is that 31:16 there is somewhat of a usage cap on 31:19 that. So when you're ready to ship 31:20 something to production, um you know, 31:23 you'll want to swap this out for your 31:24 own keys. So you'll see that uh we have 31:27 a few different retool manage 31:28 integrations here specifically towards 31:30 uh using agents. Um but you can come 31:33 down here at any point and set up your 31:35 own API keys. So for example, if you 31:37 started hitting these rate limits for 31:39 the OpenAI managed key, you could come 31:41 down here, hit setup, and then paste 31:43 your API key uh in here. And then it 31:45 would be using your OpenAI credentials, 31:48 your OpenAI um access, and uh you would 31:51 be built, you know, by OpenAI for that 31:53 sort of thing. So, um, you can do either 31:56 of those. Uh, but we we again kind of 31:58 the pattern of retool and we see this 31:59 over and over through the platform is 32:00 that we want to make it really easy for 32:02 folks to get started. Uh, but we don't 32:03 want to kind of hold you back if you 32:04 want to, you know, go all the way to 32:06 production and, uh, and and, you know, 32:08 expand those use cases. So, we we do 32:10 offer both there. 32:13 Joseph asks, "What's the case for 32:14 building a tool like this versus using a 32:16 tool like Guru or Notion AI?" Yeah, 32:18 that's a good question. I think um you 32:20 know obviously there are a lot of tools 32:22 that do similar things uh in a kind of 32:24 tangential way each have their own sort 32:26 of opinions about um how they do certain 32:28 things. For me, I think one of the 32:30 things about Retool is the overall 32:32 platform has so many different pieces in 32:34 it um that you know I it's very easy for 32:37 me to balance between things and spin up 32:40 something as complex as like a retool 32:42 GPT uh when there's so many moving 32:44 pieces right so if you use a tool that's 32:46 much more targeted towards app building 32:49 um you know maybe you'll get the front 32:50 end and that sort of component 32:51 experience etc but you won't have you 32:54 know the database that you need to store 32:56 uh our threads and our messages and so 32:58 um In Rutual's case, I can just reach 33:00 over for Rutual DB. They already work 33:02 together very well. Um, and that is 33:04 great. You know, if you use kind of a 33:06 database provider with a front end on 33:07 top of it, uh, they might not have, you 33:09 know, the workflows piece that's 33:10 required to pull in all that vector data 33:12 on an ongoing basis. Um, you know, and 33:14 do all that stuff. If you use a tool 33:16 like NN or something like that that has 33:18 the workflows piece, you know, maybe you 33:19 don't always have the UI. And so if 33:21 folks on your team need that UI to 33:23 interact with what you've built, um, 33:24 that's something that you need kind of 33:25 need to reach for a separate tool for. 33:27 Whereas with Retool, we have, you know, 33:28 the UI, database, the ability to store 33:31 vector data, um, the ability to store 33:33 other data. We also have Retool storage 33:34 as well if you just want to store flat 33:36 files, um, as well as workflows. And all 33:39 of those kind of components come 33:40 together, um, and let you build things 33:42 like AI agents as well. So, we basically 33:44 are able to meet you sort of wherever 33:46 you are. Um, and if you just want to use 33:48 one piece of the product, that's totally 33:49 cool. Uh, but like I said, when you're 33:51 ready to do something a bit more uh, 33:53 expansive, you can integrate all those 33:54 pieces together and they work together 33:56 really nicely. 33:59 Great. Uh, can you show us examples of 34:00 these vectors? They're still fairly 34:02 large, right? Yeah. This is where it 34:03 gets a little bit tricky. Um, because, 34:05 you know, again, this is this is 34:07 internal sort of company data and so, 34:09 uh, we have to be a little bit careful 34:10 with what we show on on a live stream 34:12 obviously. Um, but yeah, they are they 34:14 are still fairly large. One of the 34:15 things that uh is nice about sort of the 34:17 vector format though is that using that 34:20 semantic search sort of AI action um 34:23 we're able to basically slice through 34:25 these vectors uh and pull out just the 34:27 relevant portions. Another thing that we 34:29 have going for us is that these vectors 34:30 are basically sort of mathematical 34:32 representations of the underlying data. 34:35 And so instead of doing like you know a 34:37 slow query in SQL is like a full text 34:39 search for example that's not what we're 34:41 doing here. We're basically just doing 34:42 this sort of semantic search which is 34:44 able to be a lot quicker uh because you 34:47 know code and computer systems are great 34:48 at dealing with numbers and 34:50 representations that are numerical and 34:52 so um you know that that is uh that is 34:55 working in our favor. So even though we 34:57 do have you know I think 4,000 something 35:00 uh documents in confluence we have you 35:02 know thousands of linear tickets and 35:04 things like that uh we still are able to 35:06 get results quite quickly from these 35:07 sorts of things uh just because of kind 35:09 of the architecture that we've set up 35:10 and the fact that uh vectors are you 35:13 know a good sort of data format for for 35:15 this type of thing. Um so yeah hope hope 35:18 that's helpful. Um and again you know I 35:20 would encourage you to kind of dive in 35:21 and see uh set up your own vectors and 35:23 things like that. Um, but yeah, sorry we 35:25 couldn't show some more of of how that 35:27 kind of works under the scenes. If you 35:29 do want to see that, uh, again, I would 35:31 encourage you to go back and watch uh, 35:32 Angelique's talk from yesterday where 35:33 she did a deep deep dive into vectors 35:36 and how they work in RTOL. 35:39 Cool. Um, Keen asks, are there any other 35:42 vector databases that RTO has 35:44 connections with currently or plans to 35:45 or we need to connect them with a REST 35:46 API resource? Yeah, so uh, I think the 35:49 biggest kind of uh, vector database 35:51 provider that folks are familiar with is 35:52 Pine Cone. Um, and we don't have a 35:54 native Pine Cone integration today. So, 35:56 the easiest way to do that would be to 35:57 kind of do that rest connection that 35:58 you're talking about. Um, but we are 36:00 adding new integrations all the time and 36:02 so especially now with uh, you know, the 36:04 rise of some of these other very popular 36:06 AI tools, um, we we do want to make that 36:08 pretty seamless. And so, that's 36:10 something we are always exploring. Uh so 36:11 if you have you know a a need or a want 36:14 for a particular integration um I would 36:16 encourage you to post a thread in the 36:18 community and so uh you know other folks 36:20 can chime in and also you know folks 36:22 from our engineering team and our 36:24 community support folks are always 36:25 watching those threads uh and that does 36:27 have an impact on on what we build. So u 36:29 if you have a use case for wanting a 36:32 sort of more native integration to pine 36:33 cone um that would be where I would 36:35 where I would look there or any other AI 36:37 tool that you that you use. Um, I know 36:39 myself personally, I'm always kind of 36:40 browsing those and seeing what people 36:42 are are asking for and so, um, yeah, I 36:44 would encourage you to post post there 36:46 in the community. 36:48 Cool. Um, let's take some more of these. 36:52 Michael asks, "We want to incrementally 36:54 ingest new content during the day into 36:55 retual vectors like schedule for every 36:57 10 minutes. Uh, is there an elegant way 36:59 to prevent concurrent workflow 37:00 executions if the previous execution 37:02 took longer than 10 minutes?" Um, yeah, 37:04 this is a good question and something 37:05 that we've actually dealt with uh quite 37:08 a bit. Uh, we don't have sort of a 37:10 native way in retool workflows to 37:12 prevent like don't run if the workflow 37:14 is already running. Um, but what you 37:16 could do to kind of get around this 37:18 situation is basically create uh a table 37:21 in retan 37:27 value or a like a so like workflow is 37:30 running just like true false. Um or you 37:32 could have you know a time and date 37:33 stamp which is something we will look at 37:35 tomorrow for if you want to query data 37:37 um on a recurring basis but you don't 37:39 want to query data you've already 37:40 queried. We basically use this technique 37:42 of saving a date stamp to uh the the 37:45 retail database table and then we're 37:47 able to get that the next time the 37:48 workflow runs. So how this would work 37:49 basically is if you had a workflow 37:51 running your first step would be to 37:53 update that value in the database like 37:54 workflow is running to true. Um and then 37:58 any subsequent workflow executions would 38:00 basically check uh if that value in the 38:03 database was true it would know that a 38:04 workflow was already running and it 38:05 would just exit early. Uh otherwise you 38:08 know if the workflow had finished it 38:09 would set it back to false and then the 38:11 next time the workflow was called you 38:12 know the next 10-minute span um it would 38:14 see okay that is false there's no other 38:16 workflow running um and then you know 38:18 that's fine we can we can start our next 38:20 execution. So, um that would be one way 38:22 to do it and something you could 38:23 experiment with. And again, another uh 38:25 benefit of having uh you know a built-in 38:28 database tool where you can just like 38:29 quickly store some data uh for that type 38:31 of thing. Cool. Uh Mike asks, welcome 38:35 back by the way. Uh how about office 38:38 documents like Word and Excel instead of 38:40 uh Google Docs? Ours are in the cloud 38:42 and Ignite. Uh I don't know if I'm 38:44 pronouncing that correctly. It seems 38:45 like Ignite to me, but we'll see. Um 38:48 yeah, good question. Uh I will say that 38:50 there's nothing preventing you from 38:52 building a workflow that converts uh 38:54 word and excel docs into vector data. 38:57 The only issue there would basically 38:58 just be um you know what is the 39:01 underlying document format of those and 39:02 is there sort of an API or some other 39:04 way to get at them essentially right? So 39:06 if there's an API uh retool can connect 39:09 to it. If a system has an API retool can 39:11 connect to it whether it's REST or SOAP 39:12 or anything like that. Um, so if there's 39:14 a way to pull those documents out and 39:15 they're in a a format that, you know, 39:18 you can parse with uh either Python or 39:21 JavaScript, you could build a workflow 39:23 to parse them. Um, and so that would be 39:25 totally possible. It would just depend 39:26 on uh what limitations there were on 39:29 getting those documents out of that 39:30 system, right? 39:32 Cool. Um, another question from Keen. 39:35 Does retool vectors use the same 5 GB 39:38 limit of database? Is there a payment 39:39 structure for exceeding the that limit 39:41 like workflows or is it simply a cap and 39:43 we need to move to another vector 39:45 database at that point? Um, from what 39:47 we've been able to track down and I'm 39:49 I'm leaning on some folks who from the 39:51 community team and who are in the chat 39:52 here, uh, it seems like the limits are 39:54 similar to retal DB and that there's a 39:55 there's a cap on that. Um, but this is 39:57 one I will actually investigate um, and 39:59 see what I can what I can find here on a 40:01 little bit of a deeper dive. I'll I'll 40:02 reach out to some of the team that that 40:03 manages this and see what we can do. Um, 40:05 and I'll make sure to post an update to 40:07 this in the, uh, community thread for 40:09 today, day three. But it's a good 40:11 question. I think, uh, as with most of 40:14 the systems that we have set up inside 40:15 of Retool, the limits are are pretty 40:17 generous and even folks who are using 40:18 them for, uh, production use cases, uh, 40:21 very rarely run into those limits. So, 40:23 um, it would definitely be worth, you 40:24 know, like investigating your use case 40:26 if you're going to think you have that 40:28 much, uh, data. But I'll make sure to 40:30 follow up on this one in the community 40:31 thread. Thanks for the question. 40:35 Chris asks, "If we wanted to build 40:36 something like this and have it act as 40:37 an intelligent co-pilot inside an 40:39 internal platform, would we be able to 40:40 do so?" Yeah, absolutely. So, it really 40:43 depends on sort of the the UI that you 40:45 want to expose, right? So, in our 40:47 example, uh we have, you know, crafted 40:50 it as uh you know, obviously it has its 40:52 own GBT UI like the chat GBT style UI. 40:55 Um but all the hard work is sort of 40:57 happening on the back end in a workflow. 40:59 And what this means is that workflows 41:01 can be triggered via web hooks which 41:03 means you can trigger them via any sort 41:04 of post request. So in whatever platform 41:08 you are building uh what internal 41:09 platform you want it to be a co-pilot 41:11 for um you would just have to kind of 41:13 build the the UI pieces that you wanted 41:15 in that platform but you could then 41:17 basically uh hit the backend workflow 41:20 with that had been trained on all the 41:21 relevant vector data um with uh post 41:25 request and get that data back. Um, but 41:27 you would just be responsible for sort 41:29 of the the UI piece there. Um, which 41:32 would be yeah, you know, the only thing 41:33 that uh you would have to sort of manage 41:36 if you if you weren't building that 41:37 instead of retool. 41:40 Cool. Um, Godfrey asks, "What if 41:43 different applications want to use 41:44 different API keys? How do we manage 41:45 that at a platform level?" Yeah, this is 41:47 a really great question. Um, and I will 41:49 say that our our resources team is is 41:52 thinking quite a bit about this and and 41:53 is starting to work on uh how to make 41:55 this possible. So, what that's going to 41:57 look like is just like you can have, you 41:59 know, multiple database resources that 42:01 connect to different databases, um, 42:03 instead of having just one, you know, AI 42:06 resource where you have to put your API 42:07 keys, you'll be able to have, okay, 42:09 here's an open AI resource with this API 42:11 key. Here's an anthropic resource with 42:12 this API key. And so, um, you'll be able 42:15 to say, okay, cool. Here is the open AI 42:17 resource for the marketing team with 42:19 this specific a API key. you'll be able 42:21 to use uh RET's governance features to 42:23 basically lock that down to only folks 42:25 in the marketing team can use this 42:26 resource. And so um that will allow you 42:29 to do that sort of granular uh like 42:31 dividing of the resources that you're 42:32 talking about there. So uh that will be 42:35 hopefully in the next uh few months or 42:37 the next second half of the year here um 42:39 you'll have the ability to do those 42:40 sorts of things uh in retool because 42:41 that's been a pretty common request from 42:43 folks. 42:46 Cool. Um, Soul asks, "Do we need to 42:49 connect with tools like make.com to go 42:51 to additional functionality to connect 42:53 with other apps or does retail have that 42:55 built in to make multi-step functional 42:57 agents? If so, do you have an API to 42:59 pull it into make.com and send back 43:00 data?" Yeah, good question. Uh, a 43:02 multi-art question, so I'll take these 43:04 one at a time. Um, do we need to connect 43:07 with tools like make.com to connect with 43:09 other apps or does Retail have the 43:10 built-in functionality to make 43:11 multi-step functional agents? Um yeah, 43:14 so this gets a little bit to what we'll 43:16 be talking about on Friday. Uh we will 43:18 actually show you how to build those 43:19 multi-step agents inside of Retool. Uh 43:21 those agents can then be called either 43:24 via a chat. They can be called via an 43:26 app by your end users. Um or they can be 43:29 triggered via a workflow as well, which 43:30 means they can respond to things like 43:31 Slack messages or uh you know pings from 43:34 GitHub or events happening in Stripe, 43:36 etc. Um so more more to come on that on 43:39 Friday. The the short answer is uh you 43:42 know again we try to make retool as 43:44 comprehensive of a platform as possible. 43:46 And so all of these things you can do 43:48 within the retool platform if you want 43:49 to. Um at the same time you know all 43:52 like I mentioned before all the 43:53 workflows that we looked at can be 43:54 triggered via API request which means 43:57 you could uh trigger them via make. They 43:59 can also make their own API requests 44:01 which means if you did a bunch of work 44:02 in a workflow and needed to push that 44:04 back into make for some reason uh you 44:06 could do that as well. So instead of, 44:08 you know, sending data back to the UI 44:09 like we're doing in our example, you 44:11 could send data back to make. You could 44:13 also send data back to Slack or anywhere 44:15 else that you were um, you know, calling 44:17 this tool. So it's pretty it's pretty 44:19 flexible. Um, and it it does integrate 44:21 well with these other systems, but uh, 44:22 one of the things that I like is that 44:24 when I'm trying to build something in 44:25 Retool, I'm not reaching for all of 44:27 these uh these different tools, right? I 44:29 can just use the tools that are that are 44:30 built into the platform. 44:33 Cool. 44:34 Um, Thomas asks, "Follow-up question. 44:37 How did including the vectors affect 44:38 token usage? Are you seeing significant 44:40 increases in costs when you include 44:41 them?" Um, yeah, I mean, so the at the 44:44 core of how vectors work, um, you're 44:47 adding more data to your prompt, right? 44:50 So, um, there will be some increase in 44:53 token usage because you're giving the 44:55 model more context, right? So, if you 44:57 use a vector store in your prompt, 45:00 you're basically saying, okay, here's 45:01 the prompt. Here's the question I'm 45:02 asking you. And by the way, here's some 45:04 other relevant data. So we see people do 45:07 this all the time with tools like chatbt 45:08 where they paste in like an entire 45:10 document for example and say cool 45:11 summarize this document, right? And that 45:13 obviously the entire document increases 45:15 the token count. But um with vectors 45:19 it's a little bit more efficient because 45:20 it's actually kind of slicing through 45:22 all the potential documents it could 45:23 include and choosing to include only the 45:25 relevant segments to the particular 45:27 user's question. Right? And so um we do 45:30 see an increase in token consumption 45:31 just because you are including more data 45:34 than just your prompt. Um but it's also 45:37 more efficient than for example dumping 45:38 an entire document or an entire set of 45:40 documents uh into the prompt from a from 45:42 a token consumption perspective. 45:47 Awesome. Uh Ashley, I feel I need to 45:49 preface this question with I'm a novice 45:51 and trying to learn from a very limited 45:52 basic knowledge. Well, fantastic to have 45:54 you here. Thank you for coming to join 45:55 and uh thank you for learning. No need 45:57 to preface at all. Uh we we take all 45:59 sorts of questions here. Um do you have 46:01 a list of integrated or offered actions 46:03 within each of the components or should 46:05 this be learned through trial and error? 46:07 Yeah. Um this is a good question. I'm 46:09 not sure if you're speaking about the AI 46:12 component specifically, the AI action 46:14 specifically, but I will just dive into 46:16 that a little bit. Um so let's see. 46:19 Let's just spin up a new app real quick 46:22 here. 46:25 And so when you uh create this sort of 46:29 AI query that we were talking about 46:30 earlier, there are a few different 46:32 things that you can do here. Um so 46:34 generate text is you know the the one 46:36 that most folks use most often I would 46:38 say. Uh maybe followed closely by 46:40 generate chat response. That was one we 46:41 saw earlier with our chat component. Um 46:43 but you can also do things like 46:45 summarize text or you can classify text 46:47 which means okay this is useful for 46:49 things like sentiment analysis or things 46:51 like that. Uh you can extract an entity 46:53 from text. So, I've used this for uh I 46:55 have an app that I can upload a super 46:58 dense sort of real estate listing uh PDF 47:00 to and I wanted to extract like the 47:03 price, the square footage and maybe the 47:06 zip code for example. So, I would then 47:08 down here just say okay I want to 47:09 extract you know a price sort of entity 47:12 etc. And it would go through these 47:14 documents and pull out just this 47:15 particular type of data for me. Um so 47:18 you can kind of experiment with lots of 47:19 these actions. Convert document to text 47:21 is another good one. If you have like a 47:23 PDF upload for example like we were just 47:24 talking about uh you need to get it into 47:26 an actual text format to pass it to the 47:29 LLM. And so uh this AI action will be 47:32 your your source for that. So there are 47:34 a bunch of different actions that happen 47:35 uh in here. Uh but if you're talking 47:37 about the components themselves, sorry 47:39 about that. Trying to click around all 47:41 the all the Zoom UI as well. The 47:43 components themselves you'll notice have 47:45 uh a bunch of configuration settings. 47:47 Most of them do. 47:49 I have it hidden just because uh I want 47:52 more kind of real estate on my screen 47:53 here. But you can see actually over here 47:54 it popped out and here are sort of all 47:57 the different ways that you can uh 47:58 configure these different components. So 48:00 you can do everything from okay what 48:02 actions do we want the user to be able 48:03 to take? So do we want them to be able 48:04 to copy messages or not? Uh what do we 48:07 want the actual name of the AI to be? So 48:09 if we say for example like AI bot right 48:11 now when we ask a question 48:16 we will see you know instead of the 48:18 response come back from redual AI it 48:19 comes back from AI bot. So each of these 48:21 components that you drag onto the canvas 48:23 or you configure in a different way uh 48:25 has this inspector panel over here too 48:27 where you can go and say okay well cool 48:29 like what query do I want it to actually 48:31 use it autopop populated one for us but 48:34 um you know how do we how do we like 48:36 dive into this and see really what's 48:38 going on this inspector is really 48:39 powerful tool here and some of these 48:40 even have uh you know different kind of 48:43 nested states where you can see okay 48:44 cool what do I want to do to configure 48:45 my header right so maybe I don't want 48:47 them to be able to uh you know download 48:50 uh this this chat right so I can just 48:52 click this here and you'll notice you 48:53 know now our download button is gone 48:55 etc. So um yeah absolutely uh dive in 48:58 check it out if you have a particular 48:59 component uh the docs are quite good so 49:01 again docsc.red.com retal.com. We'll 49:03 we'll give you detailed information on 49:05 every single component that we have. Uh 49:06 and hopefully that's helpful. 49:09 Great. Uh yeah, we have a question from 49:12 Chris here. Uh speaking of Slack, is 49:14 there anything we need to worry about in 49:15 regards to the changes they made in 49:17 regards to their API usage for LLMs? 49:19 Yeah, it's a good question. Um so for 49:21 folks who don't know uh Slack recently 49:24 came out basically in uh enforced some 49:27 stricter API limits on uh how you can 49:30 get uh your data basically out of Slack 49:33 or how you can use your Slack data with 49:35 other tools. And so I think uh there's 49:37 still a fair bit of like clarification 49:39 that will happen with those policies. Um 49:42 but uh yeah a lot of it is around you 49:44 know ingesting uh historical data and 49:46 like training a large language model on 49:48 all of your company's Slack data for 49:49 example. So, um, definitely a case where 49:52 you would want to sort of review the, 49:54 uh, terms of that API and the privacy 49:56 policies. We're definitely not, you 49:57 know, encouraging you to build anything 49:58 that violates the the terms that Slack 50:00 have set for their own API. Um, but I 50:03 think for the most part, like things 50:04 like triggering this tool from Slack or 50:07 uh, you know, interacting with with 50:08 agents and things that you build via 50:10 Slack, um, is well within the the terms 50:13 that I've seen. Um, and so, uh, that's 50:16 not something I would I would worry 50:17 about. It's really just uh it's a step 50:19 that a lot of kind of sources of data 50:21 are taking, you know, Reddit and others 50:23 included on the on the public internet 50:24 of uh you know, we we see this source of 50:27 data as something that's very valuable 50:29 and we don't want folks to be able to 50:31 train, you know, large language models 50:32 on it. And so you can have your own 50:34 opinions on whether uh you have rights 50:36 to your own company data or Slack does. 50:37 And I think that may be something that 50:38 will be uh litigated in in public 50:41 opinion uh over the next few months. But 50:43 um yeah, definitely check the the terms 50:44 of service there because I expect that 50:46 to be something that will will change. 50:50 Cool. Michael asks, "When using Gemini 50:52 as a model in a retail AI action, is 50:53 there a way to set the flag that 50:55 activates the Gemini feature grounding 50:56 with search or maps?" Yeah, good 50:58 question and actually a pretty common 50:59 feature request and one of the reasons 51:01 that the resources team, like I 51:03 mentioned, is working on splitting out 51:04 these individual um AI providers into 51:07 their own resources. We've had a lot of 51:09 requests for for example when OpenAI 51:11 came out with deep research or wanting 51:13 to use their structured output uh flag 51:15 so that you got you know a structured 51:17 JSON or XML or whatever output every 51:19 single time. Um and currently because 51:21 all the resources are grouped together 51:22 under one sort of AI umbrella um that's 51:25 not possible. So the way to do that 51:26 would basically be to do a custom uh 51:28 REST API integration. So you would just 51:30 basically call the Gemini uh model via a 51:33 REST API instead of the native retool AI 51:35 integration and you would be able to 51:37 then pass it whatever sort of flags you 51:38 you wanted. So um that REST API 51:40 integration is always there as uh as 51:42 sort of backup if you want to do 51:44 something that's not supported natively. 51:45 Um and in this case yeah that's what I 51:47 would recommend. 51:51 Cool. Alex Baker asks I'm building a rag 51:53 chatbot in another platform but would 51:55 like to use retail as a front end when 51:57 chunking text to sort a vector database. 51:58 Do you have a recommendation on the 51:59 chunking method? Do you recommend a 52:01 certain chunk size and overlap size? And 52:03 how does retool handle the chunking? 52:04 Yeah. Okay. Good question. Also a 52:05 multiart question. So I'll take these 52:06 one at a time. Uh when chunking text to 52:09 store in a vector database, do you have 52:10 a recommendation on the chunking method? 52:12 Yeah, this is a a topic of uh lots of 52:15 research and it's interesting that the 52:18 question and the answer kind of comes 52:20 down to like well it kind of depends on 52:22 your data. Um, and so I think that, um, 52:26 you know, there are a lot of different, 52:28 especially if you're using something 52:29 like lang chain, different like text 52:31 splitters and and text, uh, chunking 52:33 algorithms and chunking choices and 52:34 things like that. Um, the common theme 52:36 that I've seen is it really comes down 52:37 to how granular you want to be able to 52:39 query your data. So, for example, uh if 52:42 you are importing a a book into a vector 52:46 store and you want to be able to pull um 52:49 quotes that are individual sentences, uh 52:51 well, in that case, it may make sense to 52:53 chunk the book into individual sentences 52:55 so that uh when you're doing a semantic 52:57 search, you're actually it's searching 52:58 for the most relevant sentences as 53:00 opposed to paragraphs or pages or other 53:02 things like that. So, um unfortunately, 53:05 the answer is kind of you have to 53:07 experiment with your particular data 53:08 set. It's kind of hard to say. 53:10 Um yeah, same thing for goes for chunk 53:12 size and overlap size. Um it this is the 53:15 the difficulty with building sort of 53:16 production rag systems is that um you do 53:19 need to do a fair bit of experimentation 53:21 and have you know a set of probably 10 53:23 to 20 questions that you feel like okay 53:24 this it should be able to give really 53:26 good answers for and this is kind of our 53:27 our golden uh test test case set and uh 53:31 you know then that would allow you to 53:33 experiment with different chunk sizes 53:34 and overlap and uh you know kind of run 53:36 it through that that evaluation uh 53:38 multiple times and see kind of what 53:39 works best for you. Um how does retool 53:42 handle the chunking? That's a good 53:43 question. Uh we have kind of a a set of 53:46 rules that we across our experimentation 53:48 have uh found works for most of the use 53:51 cases that we um support. But I will say 53:55 that you can uh you know do this 53:59 yourself if you're using something like 54:00 uh pine cone or another tool. If you are 54:02 using retool vectors 54:05 when you go to create a vector uh you 54:08 can in choose you can choose sort of the 54:09 embedding model which again will have uh 54:12 different sort of side effects on how 54:13 your data is ingested etc. So uh we 54:16 don't expose that really uh in this we 54:18 don't that's not a knob you can turn in 54:20 in the vector settings but uh we do give 54:22 you the choice of a couple different 54:23 embedding models and if you do want that 54:25 sort of granular control that's where 54:26 you know like you mentioned you would 54:27 use uh another sort of external system 54:29 or or something like pine cone to have 54:31 that uh control but uh the the kind of 54:34 best I can say here is really just uh 54:35 kind of experiment with um having the 54:38 you know sort of if our chatbot answered 54:41 all these questions perfectly this would 54:42 be a win for us. Um, and then kind of 54:45 experiment with things like chunk size, 54:46 overlap, etc. to uh to kind of find what 54:50 works best for you. Yeah, 54:55 cool. And we got another one here in the 54:57 chat. Cloudflare blocking AI crawlers is 54:59 such a step back in the AI space. Do you 55:00 guys have a workaround to deal with this 55:01 when building agents that go and do 55:03 research? Um, yeah, good question. So, 55:05 for folks that uh have not heard about 55:07 this, Cloudflare this week, I believe, 55:09 basically came out uh and said um hey, 55:13 we're going to basically turn on AI bot 55:16 uh blocking for all of the websites and 55:19 things that we manage. Um and so again 55:23 this is this is in response to a large 55:25 part of how all these large language 55:27 models were trained is the fact that it 55:29 was able to crawl basically the entire 55:31 public internet uh and get a bunch of 55:33 data that was that going to train the 55:35 model. And so depending on whether you 55:37 are uh you know someone who's building 55:39 with AI or a site that has a lot of data 55:41 like we talked about with Reddit or 55:42 tools like Slack and things like that uh 55:44 you have different opinions probably on 55:46 whether this is good or bad. And so, um, 55:49 I will say that it's something that we 55:50 are actively looking into and seeing how 55:52 we can best kind of strike that balance 55:54 between, um, you know, supporting the 55:56 the open web and the data that we all 55:58 use every day. Uh, and also allowing 56:00 folks to build really powerful tools. 56:02 And so, uh, we'll get a little bit more 56:03 into detail on kind of our our web 56:05 search tool and how that works within 56:07 agents on Friday. So, it seems like, uh, 56:09 you have some pretty specific agents 56:11 questions. So, I I really do encourage 56:12 you to come back on Friday. 56:14 an area that I'm super passionate about 56:15 and have worked pretty closely with the 56:17 product team on for a while now. So, um, 56:19 more to come on agents on Friday, but 56:20 yeah, this is definitely something we're 56:21 keeping an eye on uh just because it is 56:23 changing kind of how AI tools work and 56:26 how the web as a whole works, right? And 56:27 so, um, something to something to keep 56:29 an eye on for sure. 56:31 Cool. Can we create a workflow that 56:33 reads our internal confluence knowledge 56:35 documents and create a retool vector out 56:36 of it? Would that work? Absolutely. And 56:38 that's actually exactly what we did for 56:40 uh this tool, right? So, one of the ways 56:42 the the way that Confluence data gets 56:44 ingested into our retool vector is uh a 56:47 workflow that runs, I believe, every 12 56:48 or every 24 hours and basically loops 56:51 through all of our different Confluence 56:53 spaces, all of our different Confluence 56:55 documents and one by one, just like we 56:57 showed with the Google Docs example, uh 56:59 basically turns those into vector data, 57:02 compares them against what's already 57:03 stored, and decides, do we need to 57:05 create a new uh vector document for 57:07 this? Do we need to update an existing 57:08 one or uh how does that work? So that 57:10 workflow is just constantly running in 57:12 the background which means that as 57:13 people add to and change uh confluence 57:16 documentation our reach GPT tool always 57:19 uh stays up to date. So um that's where 57:22 workflows really comes into play uh 57:24 where those things can just run in the 57:25 background uh and even when the 57:27 underlying data changes you can have 57:29 your your vector store is always up to 57:30 date for any of your AI tools. 57:35 Cool. Lots of questions. Any last 57:38 questions we have? We still have just a 57:39 couple minutes left. If you have 57:40 anything else we want to go over, drop 57:41 them in the chat. Um, but again, uh, 57:44 thanks everybody for coming today. It 57:45 was really good to to see all this 57:46 engagement. I love kind of hanging out 57:48 with y'all and chatting. Um, even though 57:50 it's a little bit one way on video at 57:52 least. And, uh, yeah, excited to see you 57:54 folks back. Tomorrow we will be diving 57:56 deep into workflows, how those work. Uh, 57:59 and we'll be taking a look at how we 58:00 built a workflow that basically monitors 58:02 uh, social media for mentions of retool. 58:04 uses a little bit of AI to decide 58:06 whether uh someone's talking about 58:07 retool uh the company or uh retooling 58:11 like their sports team lineup for 58:12 example or their fantasy football league 58:13 or something like that. So a lot of 58:15 false positives out there. We were able 58:16 to use AI to help us with that 58:17 particular automation. Uh and then as we 58:20 mentioned uh Friday we'll be diving into 58:22 agents all the different tools that uh 58:24 go into building one of those uh and how 58:27 building building those agents works uh 58:29 inside the retool platform. So thanks 58:31 everybody for coming today. uh excited 58:32 to see you for days four and five and 58:35 also over in the community uh to recap 58:37 and answer any questions that folks 58:38 didn't get to ask live. So, thanks for 58:40 coming and we'll see you next time.