chapters transcript notes
click any line to jump to that moment in the video
0:00 thinking. Hello and welcome back to Aented Thinking with Matias and Mike. we are on a Friday and this means demo time. we're going to try and build some demos and things today. 0:13 Real tools that we're going to be using and creating within our agents as . Matias, welcome. Hello. hello. 0:23 great to be back here. Very excited. and really looking forward to your demo. this is going to be a bit of an interesting demo. 0:34 I'll just preface this . We have one maybe two news items we'll go through here at the very beginning and we'll get into the demo. 0:44 the demo for today is Microsoft has released recently anonymous data access in fabric apps. this is going to allow you to be able to allow an anonymous user to access a SQL database via a fabric app. 1:00 lots of cautions here. There's, , this is very very important. This is not removing authentication. It's just giving you an alternative method for letting users that are unauthenticated to talk to your databases and and make data inside them. 1:16 We have an example today. We're going to attempt to build an intake form as a fabric app where a user could go to the website. 1:26 They could enter into the website and then via that website enter in form information, your name, email address, whatever that is. and then it would save that data directly down to the database. 1:39 we're going to see if we can articulate a plan or design around an intake form that is a fabric app that sends data into a SQL database inside fabric. 1:51 that's that's the premise today. I think this is a really cool feature. This is one of these unlocks that have to happen if you're building Azure static web apps. 2:03 This stuff works. you have functions that do this and you can talk to databases and systems that are secure behind the behind the scenes, 2:13 but this is what we need here in Fabric Apps as . that's going to be our demo for today. Before we go there, let's talk about a couple news items. 2:25 Matias and I were just talking about on the phone call. We mentioned it on Tuesday. Grockbot is out. Matias, have you done any more homework or research around Grockbot? 2:37 I've been finding really fun success and I'm enjoying it working with Grockbot. H I still haven't. I'm afraid. I I I know you're excited. 2:48 and and you've you got your hands dirty on it already. it's on my it's bookmarked and on my It's on the to-do list. 2:58 On my to-do list. Yeah. To go research it a little bit more. Yeah. [laughter] , the the gist of this is it feels an , 3:10 this week as I've been playing with Grockbot over the weekend and and getting myself started with this, this does come with yet another subscription. 3:20 you need to be on Gro Superheavy to be able to use this subscription and use these bots. But that being said, you're able to build multiple agents in a chat experience. 3:34 It almost feels Telegram with all the different bots that you have and then you can then talk to them directly and give them tasks. You can let them have access to MCP servers. 3:47 They can do work on behalf of you. And I'm actively using it to build net new applications that I need for my business to help me run a support group around some of the software that we've been building. 4:03 it's very interesting to see this collection of agents all working together. 4:08 really the software the I will say this you could do the same thing with potentially Hermes or OpenClaw or even Foundry hosted agents and I I think Matias you were also telling me before Anthropic has their own version of how multi- aents can talk to each other with an at symbol I have not played with the anthropic side but this just feels very easy and simple to get started with and very powerful out of the gate I don't need to turn a bunch of knobs. 4:44 I don't need to learn a bunch of new CLI or commands or at symbols. It just I I tell the main agent, go build something. 4:54 what are your thoughts? What's what's anthropic doing on their side, MS? You seem a little bit more aware of what they have on their side versus what I know about the anthropic side. 5:07 first of all, is it is it self-hosted or is it a managed service? It's a managed service. it's it exists in the XAI cloud, I believe. 5:19 And the nice part about it is that it whatever you do on desktop is automatically mirrored to your phone. if I have multiple bots I need to go talk to on my phone, 5:32 I just pick the bot that I want, talk to it there. And then all the commands, everything it knows how to do is mirrored inside this the desktop application. 5:44 I really do think it it's I'm I'm running a series of agents that all have their own Linux machines attached to them cuz each one gets their own box and you can click into that box and see what the agent's doing. 6:01 if the agent is opening websites, running terminal commands, it's doing inside these VMs as . you can click into them and watch or work with them alongside. 6:13 It's a neat feature. and the last one I haven't touched or tried yet is you can record yourself doing a task on that machine, 6:23 that VM, and the agent will understand what you did and then from that process build out a process that it knows how to do and build something for you there as . 6:36 it's really interesting. . in in that respect, it's very different from open core Hermes because you don't self-host, 6:46 ? and correct you you don't bring your own LLMs or your own subscriptions. You're within a given ecosystem. Correct. 6:56 You're in the the XAI ecosystem. And I don't think there may be ability for you to slightly change some of the models, but I think I'm I'm locked into only the models that it lets me have are the ones I've been using. 7:13 I think they're only Grock models at this point. That's what I'm aware of . . 7:22 since you were asking about anthropic and claude, , that's where I arguably have the most experience I'm a very heavy user of Claude's agent teams feature which is a bit odd because it is still something you have to explicitly enable as an experimental feature even though it's been around for several months . 7:45 given couple months should be absolutely given given the crazy cadence at which claw ships new versions practically every day. 7:55 it's very weird that the agent teams feature still has to be enabled as experimental. I don't understand. it is certainly very stable from my practical experience and I never run any significant rost streams without it. 8:12 maybe this could be another one to do a live demo , one of these days and and just show what it looks . 8:22 [snorts] it's very different from , sub aents which have been around , for much longer. Sub agent means you explicitly define as part of your agent setup a a specialized agents using markdown, 8:36 ? you create a markdown file which effectively contains a system prompt for specialized agents. You give them a name, you tell them which permissions they have and all of that. 8:49 you have to do a lot of work up front. have to be very explicit and you have to really think through, how to break down the potential work streams you're expecting and how to create dedicated agents for that. 9:06 it's not easy. that takes a lot of and you have to get it . Claude agent teams are very different. 9:16 It it's the same thing, but Claude creates them on the fly for you. you you throw a substantial problem at your main agent and ask it to create an agent team to solve it and it would then dynamically figure out how to break down the problem, 9:36 how to define relevant special agents how many of them and it would then divide the task create a dedicated prompt for each of those agents and then obviously oversee what they do. 9:50 It's very very powerful and to be frank it's the only way how you can tackle non-trivial problems day. and yeah the the latest claude UI experience also allows you to toggle between those sub agents when when they run to see what they do. 10:11 I think this is almost absolutely worth a a dedicated demo. as I said it's not you need you need to toggle a few things in order to get that to work. 10:28 You need to know exactly how to prompt it but it's very much worth it. that's my most significant practical experience. 10:39 Codeex has something similar. it's less mature. and the the user experience codeex is codeex cursor or is codex openi open sorry gpt. 10:49 Yeah. [clears throat] they have something similar which is also an experimental feature you need to enable. in fact they have two different generations. 11:01 They've got agents v2 and v1. also very powerful but you have fewer levers and fewer config options and you have a lot less visibility. 11:13 yeah also something worthwhile looking at at some point but let's let's look at fabric apps and anonymous access to the underlying data source. 11:25 Yeah, let's try and jump into this one. I'm going to again, this is I've already built an app without using fabric apps. this is my first attempt to do it with using fabric apps, 11:39 which this may in turn not go very . just be aware this we're doing this a live demo. We're going to be working this out as we think about this one. 11:52 and , we're going to attempt to build this out directly using our fabric and environment. with all things, let me go over to my desktop. 12:03 We'll move over there. here we have on my my desktop I have VS Code that's open. it's a blank session. There's no folders attached to it. 12:13 And with all projects that we to do here, I typically to make a folder and then register that folder with an initial commit. 12:24 that way we have some tracking of our files, our records, we can better adjust what's being built here. 12:34 what I'm going to do here is I'm going to grab my SQL anonymous folder and drag it into VS Code. It will then align this folder here directly. 12:46 And in order to initialize the git, I should be able to it's letting me making sure I trust this folder. Yeah, let's trust it. We'll do that. 12:57 it's going to scan for the git repo on this folder. There is none here. Again, I'm going to work on just this locally. I will initialize a repository and then I will quickly make a little readme file here. 13:13 New file. Read me. I guess I should do it all uppercase. That's how they seem to come. readme.md and then I'll just make a little test here. 13:24 we'll have something there. Save that. And this will then get our initial commit made on our branch. click a little note here. 13:34 Great. Done. at least I have some code tracking already built into our project. That's where we're starting from. 13:44 The next part is we need to go build a fabric app. we're going to start up a fabric app and we're going to go use a template from Microsoft. 13:55 what I'm going to do here is I'm going to go bring over my powerbi.com environment and we are in our data app test workspace which has fabric turned on. 14:07 And here we're going to click on a new item. From here we will go find our fabric app. I'll just type in the word app. 14:17 And here's our app preview on the far hand side. We'll click on app preview and we're going to call this intake form. 14:27 that's what we're going to use the app here. We're going to do that and we'll hit create. this should build the the template or the structure here. 14:38 it's going to have a a series of three items here. It's going to ask you what you want to build. We're probably going to start out with a blank app. 14:50 we'll start here. Basic secure app. I think this is what uses the SQL database. If you build a to-do app, it will build a to-do list for you, 15:02 but that to-do list will be wired up to a SQL database. It's a template that they have. And then the data app is connecting to a semantic model. 15:13 Again, something else we're not looking forward to doing. we'll start with the blank app. And it's going to deploy this template into the service here. 15:23 And it will also give me some commands here. And again, you could use this prompt at the beginning. I just haven't found much success with it. 15:34 it seems to give me different answers. instead, I'm going to use these commands here directly where we're going to set up our project by using mpm create and it has an intake form. 15:47 It says template equals a blank app. I know that there are multiple other apps here available to us. I'm going to remove this thing called template blank. 15:59 I'm just going to do the intake form and then call out the workspace name. that's what we'll use here. we'll copy those. We'll go down here to our VS Code. 16:11 We'll open up our command window by control tildy and this will open up our terminal. And here I can just paste this in. And again, I said earlier, I want to remove the template of blank app. 16:26 I'll get rid of that one here. And I think that's all I need to run here. we're going to let the mpm package run inside our folder. 16:36 What this will then do is it will then ask you to install the packaging. yes, I do want to install all the packaging and it should prompt me for something to get started with here. 16:50 we'll let it think here for just a moment and then we'll be able to we'll open our GitHub copilot agent and then start describing what we want to build here. 17:02 While it's doing this, you'll notice back on the actual website, we have an official URL that is open. we have a lot of questions about this from people who've been watching these shows in the past. 17:18 Where does the website go? Where can I get access to the app? you can the apps are getting published and if you are building the app inside Fabric, 17:30 this URL is publicly available. It can be accessed anywhere. but there is a requirement for being able to log in securely. but what we're doing today is we're going to be not removing the security layer, 17:44 but instead we're going to be adding a an anonymous data layer. we we can enter data into the application and save it without having to have someone signed in. 17:56 All . let that move over here. . it's already asking me down here. It's it's done its installation. 18:06 It's asking me would you to use a template? Let me move the screen over here just slightly people can read the text here a bit better. 18:18 Great. it's it's initialized the template and we can use our command keys or arrow keys here to pick a template here. 18:28 I'm going to start from use a template I believe and then we can pick a blank app barebones app react vit signin routing placeholder bar and no data layer. 18:40 . this is a data layer built with data analytics app based on your data in fabric. A to-do app a basic to-do app. 18:50 I think I just want the data app is what I want here. We'll see. what? I'm going to we're going to try it real easy here. 19:02 We'll go very basic. Let's start with just the Barebones blank app. All . we're going to start with the the Barebones blank app. And to be clear about what feature we're following here. 19:15 The feature that we're following here, this is the documentation officially from Microsoft. And , this is the page. page and I'll put this here in the chat window as just in case you wanted to see this link. 19:30 This is also in the description of the video as . This is anonymous data access for a fabric app. It will expose data operations to users who are not officially signed in. 19:43 whenever you build an app as of I think about a week ago this feature did not exist. you were not able to go to an application and talk to or enter data into a SQL database without being officially signed in through the fabric app. 20:02 This feature is allowing the anonymous role to be added to that. you'll see there's some lot more documentation down here, but the thing I want to point out is later on down inside the the the details here. 20:17 This is the data definition. And this I think is really important to call out. This is combining an anonymous role and authenticated roles into the same application. 20:28 And then notice here they're defining this entity and then there is an role of anonymous and there's another one for authenticated. And once you define the role, you're able to define the data level access that they have. 20:42 for example, an anonymous user could read data from the SQL database that we're building, but they could not create a record, update a record, or delete a record. 20:53 That's only for authenticated users. that you have roles, you can align your application based on those roles, whether you're read or create or update. 21:04 What we want to do is we're going to do read and create via the anonymous role, ? ? we want to be able to let users show up and create a new record in our database. 21:19 The other thing they call out here as , if you want multiple access roles for a single role, either anonymous or authenticated, you add those permissions inside braces, ? 21:30 Create, update, delete. That's just an array of objects that you're passing in there. And then the data table down below is the information that is required or not required for your data table. 21:43 this is a blog post table with different ids, titles, content, and strings. That's how I read that. . I'll move this away. 21:53 That is the documentation that we're building. . that we've moved forward here. this is something you can take this a different way. 22:04 One pattern that I'm finding that I'm liking more recently is yes, we made the intake form. We do have to change directory here. You can change directory here directly in the command line or you can close down VS code and come back into it. 22:22 I'm just going to change it here in the directory line. CD intake form this. that we have we're in that new folder, we can run and I forgot to move this back over again. 22:37 let me pull this back over you can see the code we're writing. There we go. CD intake form is what we ran. And then the next command we're going to run here is we're going to go mpm rundev. 22:52 And then this will oops mpm rundev. And then we'll be able to spin up the Rayfin app and start having it run here locally on our machine. 23:03 while that gets started, we probably need to start talking to our agent and asking the agent to build something inside intake form. 23:13 I'm going to hit control shift I. We're going to go pull open our agent here and we're going to today we're going to use GitHub copilot. 23:24 And because we're doing a bit something a bit more complicated, I'm going to just burn the tokens for everyone here. because we can we're going to use Opus 4.6. 23:36 and we'll go down that route. All . our local host is running. I can click on this and there we go. we can see here in my VS Code browser, we already have a blank app with a signin with Microsoft element here. 23:54 that already exists. we can start talking to our agent to adjust this app in a way that will shape it for what we need to do. 24:05 let's start with , I'm going to talk to the agent here and give it our overall description of what we're trying to build. 24:15 Also, I will note here we need to adjust our permissions on this app. Down here at the very bottom, this is the default permissions that we're using on this application. 24:27 I want to change those over to autopilot cuz I'm going to allow it to just build and build and build. This is a security issue. typically it will ask you to run commands on the regular mode. 24:41 This is going to allow it to run all the npm payment commands or , PowerShell scripts or whatever it needs to on my machine. This is going to help us move a little bit quicker here. 24:55 The last thing I'll check on here, I don't think I need any special MCP servers or tools. but if you want to check those as , I usually typically am I'm getting a habit where I check all the configured tools. 25:11 That's this little icon here before I get a session going. because sometimes you may want an MCP server, you may want to talk to something. 25:22 If there are skills you're trying to get the agent to use, it will not understand what those MCP servers are used because it's not a part of your library. 25:33 clicking on this gear, you can see all the different MCP servers that I have. One word of advice here, VS Code team. VS Code team, it'd be really nice if you could make these automatically collapsed or a single button to collapse everything all at once would be great. 25:53 these are all the different MCP receivers I have installed or put into my program and then I can then use them or not use them as . 26:04 the only one that might be relevant here might be the Playright one just because I want the ad the agent to look at my browser window. 26:15 I might just update this tool and give it the Playright server here as . that way if I share my browser session with the agent, it can run playright against it. 26:28 I'll just use that as . We'll hit on that. Let me just confirm that those settings took play is there. Yep. 26:38 Good. . that's all we're going to use today on this blank app that we have. All . next we got to describe what we want. 26:51 I want to build an intake form that talks to an anonymous SQL database. I'm going to turn on my microphone here and we'll talk to it. 27:01 Give it a second to start. I want to build a intake form, a web page that can be I framed or embedded into an existing website. 27:12 This intake form does not need an authenticated user. we want to use the anonymous access for the SQL database in fabric to enter the data into our intake form. 27:23 For this form, I want to make a single form with known columns. the schema of the form should live inside the SQL database. 27:33 I can define what input columns I want name, title, email address, and that schema is set inside the form. Then when users enter their data, I want all that data to be stored and submitted directly into the form. 27:48 For this to work, I want to make sure that this intake form does not require users to be authenticated into the fabric app documentation below. 27:58 All . this is my initial prompt here. And then what I'll do is I'll go add in the documentation link. one thing I find is very useful here is and I don't have the skill Matis. 28:14 I probably should add this one. There's an MCPL learn Microsoft MCP learn skill that I should probably add here the MCP can go grab the data from the website. 28:25 But for , I will put just the web URL of the anonymous data access link. One thing I have found is these agents are trained on data that's not current. 28:37 sometimes you need to add the current documentation with the feature you want to use the agent can go look up that feature and find it. 28:47 that's one thing I'm going to add here directly. Anything else you would add here, Matias, in my prompt before I hit go? no. 28:58 for the purpose of the demo, that's probably fine. what ? 29:04 I guess what what I would do differently I would I would I would use the agent to convert my raw prompt the one you just dictated into something that is bit more fleshed out before then gets to work but I was I was hesitating because obviously we we we want to show something that's quite succinct and and completes within the time we have. 29:33 let's follow some best practice. Yeah, let's do it. here what I'm going to do. I'm going to What do you think about this? 29:43 I'm going to take this information again, very random prompt. I just spit ideas out here. I'm going to switch my agent over to plan mode and we're going to ask it to plan out what we're doing here first before we have it go. 30:01 What do you think about that? Yeah. you give it something quite raw and then you say, "Go off and do some research. 30:12 figure out how how do you understand my prompt? figure out how what should that translate in terms of technical tasks go and look up documentation and things that and create a spec that you can then implement with a lot less ambiguity. 30:34 Awesome. while you are talking our agent is then chewing and going ahead. it has explored and fetched the link documentation. 30:44 the reason I gave it that link it can go in and confirm that our agent can see here. Let me understand the user request. 30:55 it's trying to do it's checking to say can can we iframe it? Yes. we want to use anonymous check. And then we want to have a schema driven. 31:07 this is one that's a bit more about my intake form. the idea here is don't build a single intake form that is a single static web app. 31:18 What if I wanted three or four forms on three different websites, maybe with some different styling? the idea here is I want to be a schemadriven intake form. 31:30 I could just decide here's the schema for this form and other things that that we want here, ? it collects things name, title, email, and then a submit button. 31:43 ? it did a good job there as . No user authentication required. All . and then it's reviewing some files and after it's done all that, 31:56 it's coming back here with a plan. here's our plan. Phase one data model. Replace the empty schema with an intake submission. it's talking about schema here. 32:07 There he goes. remember we looked at the documentation earlier about that roonymous and create. the it's using the anonymous role that we saw earlier in the documentation and the create feature as a single object, 32:21 not an array of objects. And then it has different field decorators. fine. data service is already enabled. Anonymous role is on the YAML. 32:31 No changes needed. Great. Phase two. . phase two here it's saying remove the off from the front end. 32:41 . this is interesting. When you look on the website. Oh, it's already making Did it make changes on things? I thought I had it. 32:52 Oh, I thought I put it on plan. I must have hit a tab button that let it start doing things. . it's building things on this off page. 33:04 You can see here, localhost.off. that off page was the landing page of where it tries to put the authentication for that user. 33:14 this may or may not work very . We may need to keep that off page on the the app. We'll see what it modifies here as . 33:25 All . as it's modifying a lot of files here, it's adjusting the schema. Earlier, we talked about the schema that we were showing you with the different anonymous. 33:36 if we want to go observe this, I believe if I go to the schema, here we go. this is exactly the schema of the SQL database. 33:47 I've been told this schema of this data table, ? When we're talking to SQL databases here, this is a technology that's been developed by Replet. 33:58 this is a borrowed technology from Replet where you define the schema as a JSON object or a TypeScript file. From there, it knows how to build all the data schemas inside Microsoft Fabric. 34:11 let me get rid of that file. Look at that. wow, I'm quite impressed how quickly that went. define the intakes form. 34:21 Remove the off from the off phase. simplify the bootstrap. Yep. Run the Rayfang client. Yep. Build the intake form. 34:31 Great. Cleaning up any unused files. Updating some made some tests. Great. Build and verify. a build and verify. I think I gave it what did I give it here? 34:45 I gave it the playright. if it's going to be checking some things, it should be checking the verification using playright. It's using ray fan up doing the app roll of anonymous. 34:58 this went a lot faster than I thought. Oh, I must have accidentally hit start application. that was my fault. I accidentally hit a tab key or something and maybe hit enter and it started the implementation. 35:13 then it started going through and building everything. All , I think we're there, honestly. I guess the last test of this, we built an intake form. 35:24 I think the two tests to prove this works would be let's enter some data here and see if this intake form sends data into fabric. 35:34 It should local run machine, I think. Oh, it's having a little bit of it's fixing some things here. And we should be able to to view those SQL tables inside the portal, ? 35:47 Yes, that's true, too. let's while while it's still thinking here, let's go back over to the Azure port, the PowerBI fabric portal. 35:57 And this is our app, the main page of the app, which we I don't think it's been deployed to yet. we'll wait there. And I'm not sure if Rayen up has worked out as . 36:11 let's see if there's anything in here yet. there. intake form app has been developed, we can see that it did come with a SQL database. 36:22 And if we click into the SQL database, there's a couple things I want to call out here inside this SQL database, it comes with DBO. 36:32 And it looks we don't have any current tables. it just created the database. My guess is we need to do npx rayen up to push any of the schema changes back into fabric. 36:46 it just works. one thing I will also call out here inside the SQL databases when you build these, there is a maximum threshold that the SQL database will use while it's creating , 37:00 CU usage. And because I just created this intake form SQL database, I to go do these things. By default, the max Vcore limit, meaning the max amount of CPU usage or or cores that it could use at any point in time is 32 virtual cores. 37:18 If you were running your fabric environments on a smaller fabric environment such as F2 or F4 or F8, this could greatly, if you're hitting the database hard, it could really eat up your database and your your CUS very quickly. 37:34 for testing purposes or demo things, I to go in here and automatically modify this down to two maximum vores. It seems to be enough to just write a couple records in and out for these demos. 37:49 Anyways, a word of caution there inside SQL databases in fabric to try and limit the maximum amount of virtual core usage on your SQL databases. let we'll let this think here for a bit. 38:02 This takes it about a minute or two to really adjust and fix. I will move this out of the way. Let's see where we're at in the app. 38:14 All , app is ready to be embedded. Oh, great. provides , good. here's what I'm going to do next is I'm going to go back into my terminal. 38:27 Let me move this back over we can see our terminal again. control tildy to run the terminal. And it does appear that it's running. 38:37 Let me just add a new terminal here. And in order to we've done some development the code has changed. we can see since we did our intake form all these files have been modified adjusted on our local file repo. 38:55 But we want to take what we have here and publish this up. I'm going to keep all of my changes. We'll see if this works. 39:05 all the changes have been kept. Next thing I think would be wise for me to do is make a commit here because I did a commit initially for the project. 39:17 Here's a second commit. let's just do a feature of add intake form. I'll commit all of my changes here. Stage the changes. 39:27 We'll commit them here they are checked into our branch. And then we will use the npx ray fin up. This will take the code that we have here, package it and bundle it and send it up into fabric.com. 39:43 I'm going to hit enter on that. And we had an error. why? Oh, it would be helpful if I was in the directory. 39:53 I need to go to cd intake form. That's why it didn't work. I can do the npx ray fan up. Great. 40:03 it found the app in fabric. It's building all the data structures, creating the app, building things locally, pushing the package, and pushing those up. 40:13 You'll notice here, one of the things that we've talked about in the past here is when the Rayen app builds items, it builds things in the distribution folder, the dist. 40:25 These, in my my understanding, are the only items are the only artifacts that make it to fabric at this point. index and then these two other files for assets, the CSX and the JSX. 40:38 if I go back over here to the distribution folder in my VS Code, you'll see that those files exist over here and that and this is what it's bundling. 40:50 It's building your app into these files and then these are the files that are getting pushed up to the service. looks we are in the Febic portal. 41:01 Should be good. if we go back over to our powerba.com and fabric portal, I'm going to refresh the page here inside the SQL database and let's see if we get those new tables that we are going to care about. 41:17 Intake form, dbo, and voila. Look at that. We have an intake submissions. we have a form with columns inside it and it's using ID, email, name, and title. 41:29 it built exactly what we want. this is a bit hardcoded because this form exists with only these columns. There is no, , dynamic schema. 41:40 There's no admin page. you could probably go a lot farther with this, but this is a good starting point to at least get the app to build initially what we want. 41:52 If I click into this page, let's see what we have here. I don't think there's going to be anything here. Select top 1,00 rows. Should be. 42:03 It's probably going to be blank. Yeah, good. It's blank. let's go back to the app . we're going to go back over to the application itself and we're going to go run it. 42:17 here it's running inside fabric.com. I'm going to click on this button up here in the hand corner called manage app. And when we go into manage app, we will manage the app. 42:30 We will click on the URL directly and open this because I want to open this intake form directly from somewhere else. There we go. 42:40 And then I'm going to do Mike and then I'm going to say CEO and then Mikemail.com looks for me. I'll click submit. 42:50 Oh, GraphQL errors. Internal server error. we got to figure out why it's not doing that. let's see if we can go talk to our agent here. 43:02 back to the agent and I will get grab this one. I opened let's just talk to it with my microphone. It's faster. 43:12 I opened the website using the full URL satin ferry. And when I tried to submit my data into the form, it said GraphQL errors internal service error. 43:22 And then I'm going to grab the just the error itself and I'm going to put that here as context. And then I'm also going to grab the URL and put this here as . 43:36 This is the URL I was using. let's see if it can figure itself out. it may have made a mistake somewhere in the process. 43:46 And we'll see if it can wire itself up. . the form was deployed correctly to fabric but the anonymous create operation is failing. 43:56 It's likely because the hosting needs redeploying for the new code. . Maybe the anonymous access in the tenant saying must be enabled. 44:06 . let's just go check this one as . I do know this is also important as . when you are using the anonymous access feature. 44:18 This is a hard requirement per the documentation and I'll bring that back up here as . Back in the portal page here, there is this step here. 44:28 And I think I turned this on, but let's just confirm it. Inside the fabric apps, you need to make sure that this is not disabled, but it is enabled. 44:39 we're going to search for the word enable anonymous data in the fabric portal. let me go see if I can go find that real quick and bring in my admin portal directly here. 44:53 let me sign in here on my other screen and we are looking for this phrase of anonymous. here's the feature from the portal. 45:03 Anonymous access should be improve enabled. I have turned it on. it is enabled and for the entire organization. I will just because I'm lazy for . 45:14 I'm going to screenshot that and say I already did it. Back to my agent. Anonymous access has been granted in the admin. I guess what's important to understand here the agent would have made a guess, ? 45:28 it because it you described an error there but it didn't really have any data or any any way to diagnose that. it's just guess that it could have been that. 45:41 clearly it's not. quite useful for you to then feedback know that wasn't a problem. What I'm going to also do here again just in case something didn't get deployed correctly the first time I'm going to do another rayfin up again. 45:57 I'm going to try and redeploy our code as is. Just do a full rayin up. Also, I was mcking around a little bit with the SQL database switching the vcores. 46:09 potentially there was some other issue around the vcores. me switching something there as . let's try it again. We have repushed the app. 46:20 We are back on the intake form. Let me refresh the page. let me do a control I think it's control F5, ? Is that a hard refresh? 46:31 Control R. we'll do everything. All , we'll do Mike CEO and then we'll do mike email. I keep doing Gmail. It must be habit at email.com. 46:42 Still errors. All , we are still getting the error. what we might need to do here as ? we might need to have it add some logging. 46:55 Oh, it's also trying to redeploy array up as . Yeah, I just did that. add more logging in the error message we can narrow down the issue better. 47:07 let's add a little bit more logging here directly inside the application we can figure out why it's doing that. Oh, interesting. It's trying to test the anonymous direct access using the API endpoint. 47:21 Interesting. Running. It's running a curl post directly to the endpoint. . I asked to make a couple changes here. 47:32 It is changing some intake form page files. also display the error to show the multi-lane details. As a random side note here, look how easy this is to add verbose [laughter] error messaging in the system here. 47:46 You just tell the agent to add verbose error messaging and it does it. Microsoft, take note, all your error messages could use a little bit of agent help to provide better error messaging as . 48:00 because sometimes I feel some of the error messages Microsoft gives us is just very minimal. it has updated the intake form. 48:10 I will keep the changes. It says redeployed. Built in a couple seconds. Redeploying. It says the backend services were successfully redeployed. 48:20 . try submitting the form again from Satin Ferry. when it fails, the error pane will show the full error code. GraphQL error details and status. 48:31 great. That's going to ask me to go into the de intake form. great. share the detailed error message I can pinpoint the exact issue. 48:43 Great. here's what I'm going to do is I'm going to go into the browser again. This is our intake form. Let's make this a little bit smaller here we can see it on the screen and control shift I inspect. 49:00 there's our this is my inspector for the website. I can see any networking or graph errors here that is happening. And let me refresh the page. 49:11 All . initially I can see that the page is rendering everything correctly down below here. the initial render is fine. Again, we'll say Mike CEO and then we'll do mike@mail again at email.com. 49:25 Submit graph internal server error. . it's still saying the error on the graph and I don't see any errors in the H. That's interesting. 49:36 I don't see any errors there on the networking tab. It gives me a 200. Check this out. This is cool. I this stuff. it's giving you the mut the mutation form. 49:49 it shows me the mutation here. it's giving me the error message. Internal server error. this might be a bug on the Microsoft side that's not working. 50:02 I might have to go file this as a bug cuz I think what we've done here far should be working at this point. the payload is sending the mutation correctly. 50:14 let me see if I can control a that and we'll give this back to our agent. I am only getting 200s in the browser window. 50:25 Here is the graphql mutation. Did it show it to me? And then I'll just copy the error response and also send this as this is the error response. 50:36 we'll see if that if that helps out as . Maybe it's something with the fact that there's an at symbol in my email address potentially. 50:46 We'll see what the agent can figure out here. It would appear to me though that everything is working correctly as I expect. The form is rendering. 50:56 Everything seems to be working correctly. The data structure seems to be matching the documentation as . . it's it's saying that it's the the GraphQL is receiving the message, but internally it's erroring. 51:10 if I go back over to Fabric, just because I want to show you what's going on in the database side. here we are back in Fabric. 51:21 If I go over to the intake form SQL database, here's the SQL database. And one thing that's a little bit interesting to me here is I don't see where the GraphQL item lives inside this. 51:35 but let me go back to the data app test workspace. Usually you would see some GraphQL item. one thing I'm I feel I'm missing here is when you create a SQL database with a GraphQL database on top of it, 51:52 the database typically has a GraphQL item in the workspace. I think maybe the issue here is the GraphQL item from the SQL database has not been created correctly. 52:04 let me just talk to the agent about that one as . When I go to the the workspace, I don't see an item for the graph QL entity item. 52:16 Microsoft item in the workspace. When you use SQL with GraphQL, do you need to make a item in the workspace? All , let's see if that Let's see if that helps out steering some of the conversation here. 52:31 the other thing I'm going to also check out as here is you can in the portal if you want to go find specific items, 52:41 you can see here we've got a ton of stuff up, databases and whatnot. If you go over to the filter icon on the hand side, 52:52 the filter icon enables you to highlight specific items here and I can look at all the different items in the workspace and filter them down to specific items. 53:03 I can see that I do have an app. I do have SQL databases. But in here I don't think I see any GraphQL. 53:13 That is what I would have expected to see when it made that the grab the , the Rayfen backend bundles its own GraphQL endpoint via the data API bundler. 53:24 it doesn't need me to access that item. the root issue is the SQL table doesn't exist. Oh, wait a minute. 53:34 It doesn't exist in the backing database. The dab configure tells GraphQL about the table, but the table itself was never created in the agentic thinking SQL database. 53:44 Why are you using that thing? not sure. Let me just [snorts] double check something here. confirm you are using the intake form SQL DB. 53:54 Not sure why it did that. How did it associate itself with a different database? That's odd. . it somehow it wired itself to the wrong database, which is interesting. 54:07 maybe it was looking at the workspace and found different things. That's odd. . . . 54:17 It's trying to rebuild it. . Why is it doing an agentic thinking database? I don't even think I have one in that workspace. Let me double check. 54:28 Yeah, there's nothing in there that even has that. Oh, it does have one in there. Yep, there is an agentic thinking database. Sorry, I'm just looking inside fabric to see what's inside that database. 54:42 We might just get rid of it if we don't need it. Yeah, there's nothing in there. . What I find confusing there seems to be conflicting information about authentication on the fabric apps doc site. 54:57 it says on one page fabric requires authentication to be enabled before you deploy. and then on the anonymous data access page which is what work on it says this is where you don't want to authenticate a user. 55:13 yes you don't have authentication enabled for this app. I don't quite know how to resolve those two together but maybe there are still some backend issues to sort out. 55:27 Yeah. 55:28 let me see if what I would do probably would be to enable authentication and and to get rid of all the anonymous bits just to make sure that this works as an app end to end and then to gradually change those features until you get to a point where it starts breaking again. 55:51 Good idea. one more thing I want to try one more last item here. The static hosting here was enabled. True. 56:01 Folder was distribution. The AI agent just added the anonymous access equals true flag here inside the YAML inside the Rayfin app. there may have been something here under the static hosting where this this feature was not set correctly. 56:16 let's see if that resolves things. And I just did another ray fan up. let's try it one more time here. I think you're , Matias. 56:27 Somehow it stripped out the authentication thing incorrectly potentially. and that might have broke things. let's go here to refresh the page. Control F5. 56:37 . Got a new page. CEO Mike at email. ate email.com. Still having the same error. no issues there. I deleted the agentic thinking fabric app. 56:49 that should no longer be referenced only use the intake form SQL DB. Also I republished using the anonymous access true flag in the ray fin.l ammo and still it did not work. 57:02 let's see what that does. I think you're . The anonymous access by the way underneath static hosting is not documented at all. maybe that was hallucinated. 57:13 That could be hallucinated. I would feel that would be under the storage or something that, ? And wouldn't that make more sense to put that under the data enable true dialect and it would be under the data element? 57:29 I don't know. It just seems that's not quite . There's not a single key inside that rayfin.l file that has that contains anonymous in in any any context. 57:41 that whole flavor the only the only place where you specify anonymous access is on the annotation on top of your data model. ? 57:52 I don't see anything inside raven.yml to that effect. Do you mind scrolling up to the O section inside? Yes. Yeah. There we go. 58:03 we've got O enabled. Yeah. . fine. Yeah. that's that's seems correct and . 58:13 let me just ask the to your point Matias I what you said there is let me just stop it here. let me just talk to it here. 58:25 Earlier in the process you removed all the authentication pieces from the main app when we built the basic app. I want you to read those authentication pieces and instead of having the O as a main sign-in screen, 58:40 I want you to move the O to a header bar on top of the page. 58:46 back to your point, TS, I want to make sure that I can authenticate or put that authentication back in and let it let's try and get it to work first and then see if we can get the anonymous access to work without it. 59:04 Yeah, there we go. those files still exist in context. Yep. it's going to back it's going to back and look at the template. 59:14 one of the mistakes I think I made here Matias just want to call us out for the users watching this one is again one of the reasons why we to set up those initial repos which again I made a mistake there slightly is I made the repo when we made the first part of that app. 59:37 We should have made a commit as soon as that app was done and authenticated. We should have started there. That should have been my second commit after making the readme file. 59:49 because then we would have captured a clean state of hey everything's working with the author there. I got a little bit excited and and started prompting away and letting the agent edit things. 1:00:02 I think had we done the plan mode Matias and I had not accidentally clicked the implement the mode immediately. we might have been able to get an extra commit in there. 1:00:15 I think I accidentally clicked something on the keyboard which might have screwed that up a little bit. but it it should be able to fix these off services hopefully by looking at the template and comparing the base template to what we have here. 1:00:34 . And yeah, , after the general learning here always commit often as often as you can every feature just that you'll get burned we just did today. 1:00:48 Exactly. . don't don't make huge changes with with hundreds of files and thousands and thousands of lines. and wait before you commit them. 1:00:59 divide it up into into smaller chunks. commit frequently. that small steps you can easily navigate through if you ever need to. 1:01:10 Yeah, there we it it has moved this to a little header bar here. at least we have the way to authenticate using fabric here as . 1:01:22 Hopefully all this will work. It's going to finish up here and validate and let's Oh no, you haven't deployed yet, ? Not yet. 1:01:33 I'm on on the domain. Ied earlier and this is this is testing the fully unauthenticated access to it, ? 1:01:43 yes, I received that exact same form on my browser and I was never prompted to authenticate with your tenant or with your workspace or any of that. 1:01:54 currently it's fully public open to hackers . [laughter] yes, but we should after your next deployment we should expect that to change. 1:02:06 I'm going to , it's building and verifying. One thing I will I will call here, Matias, you did say that this anonymous access equals true in the YAML file. 1:02:17 It's hallucinated. It's a hallucinated. I'm going to get rid it's just missing from the documentation, which may also be the case, but could be the case. 1:02:28 Assuming the documentation is correct and complete, it it does not exist. And obviously we don't have a schema document sadly for the YAML file which would obviously tell us whether or not. 1:02:41 Yeah, but I'm going to save it without it because the agent made that and we and we think that might have been a hallucination. 1:02:51 I'm going to just update the Raven YL to do that specifically we don't have an issue there hopefully. All . it's still running client. 1:03:02 It's still doing some editing some files. Still bootstrapping some things. clean build. clean build. it's going to start testing things. Awesome. 1:03:12 it thinks it's got a clean build going. because it has a clean build, I will keep my files. whilst we wait, just a curiosity on my end, why did you go for Opus 46? 1:03:27 was was it random choice or do you have a particular reason? of the models that I have to select from, ? I have found that one to be fairly good with code or harder task projects. 1:03:42 I have been using Sonnet 5 a lot. Sonet 5 is very reasonable, does a good job. However, sometimes on more complex tasks where there's lots of code, I felt Sonet 5 falls apart for me just slightly. 1:03:57 but I have felt Sonnet 5 to be very reasonable as . I wish there was Kimmy 3. I don't know why it's not in my list, but I have been using Kimmy 3 on other tools which I do . 1:04:13 I think that one's pretty . It's not it's not hidden under other models. It could be. I have a ton in here. . 1:04:23 . Yeah, there we go. you've got Kim 3 and also you've got Oppus 5 and and the more recent Oppus version. 1:04:33 I'll add just curious because it's it's quite a dated release of Oppus . I'll add the the Kimmy 3 and I could probably unpin that one because if we have Kimmy yeah by the way 27 Kim 27 is substantially cheaper than three. 1:04:50 this is Yeah. if you look at it from a cost point of view, it's a it's a totally different tier. It's even though it appears to just be a minor evolution. 1:05:04 Great. K3 is is is is in a completely different price bracket . Have you observed this? Do you have a auto at 30% discount? 1:05:15 I never use auto. I need I need control. Auto is never the thing. that's true. no worries. obviously they try to lure you with with that with with that discount, 1:05:29 which normally is 10%. seems to be dropped to 30 . But the thing is, , if you if you want success, if you want good results, you need to be very explicit about your model selection. 1:05:44 And , I don't want to leave this to some random choice. All . it's doing something here on the bottom. it looks red. 1:05:55 That's great. No red, which is good. Yes. I'm also checking here. Why did it It seems it's gotten hung on this command. 1:06:06 I don't know why. I'm not sure why that I might kill this terminal. I might just kill this terminal and just have it run it myself. 1:06:16 . let me just kill terminal and then I'll just have it stop because I think it's all passing and good. 1:06:26 what I will do here is I'll just run my MPX rafen up. I just want to see the command line here. we make sure we got all the Yeah. 1:06:38 we're good. We have the intake form. That looks good. And then I will run npxnet. Oh goodness. My terminal is very angry at me . 1:06:49 . NPX Rayen up. There it goes. . Oh, we're starting from scratch. Using project. Interesting. It's It's forgotten your settings. 1:07:00 Data app test. Yeah, it seemed to Yeah, overwrite it. Sure, why not? Delete it. Start over. . Thinking should be . 1:07:10 App says it's live. . we're going to go back again. Retry again. Refreshing. Refreshing the page. Oh, interesting. 1:07:20 . I I I'm I'm logged in. . A fabric user on your It's interesting. I am clicking login and it it did do a fabric user and it's that is working up top there. 1:07:37 let's see if this one is able to send data. Mike. let's just go CEO and then let's just do Mike at Oops. 1:07:48 Nope, I don't want that. Mike at Why is it doing that? That's my other tool on my computer acting up. Close that. Mike CEO.com. 1:07:58 There we go. Submit. still having an internal service error. . I don't know what it's doing. apparently there must be something wrong with that API or call. 1:08:11 there might be a bug going on there. I will circle back on that. But this, I believe, should be working. but for some reason, it is not. 1:08:22 Yeah, it's definitely not able to submit it. even even with the signed in user, it's still freaking out and having issues. there must be something issue that's broken there. 1:08:35 All , this is hopefully what will work. I we're going to have to leave it because we're at the end of time here. I'm happy to keep going a little bit further. 1:08:48 I might even start over again and rebuild it as . if I can solve the problem, I will at least report back or maybe we report back on Tuesday. 1:08:58 if we're able to get it resolved and maybe we'll pull this back up. But cool. In general, this is the documentation that should be existing and we are finding some layers of issues around getting the GraphQL to work with an internal server error. There could be a bug. We'll check it out. We'll circle back with Microsoft on that one as . . You learn some things here. some of this agentic coding stuff goes . Some of it doesn't go . This is live. This is live demo for you here. that's that's us building things and stitching things together directly with the agent. All , with that being said, we we thank you for checking out an hour of time with us. Hopefully, you can skim through a couple pieces here and see what works for you. There's also been a number of techniques and tricks and tips that we use around what model we select, how we use MCP tools, , and getting things set up with Ray as . hopefully you found something to learn there as , and we'll report back later on if we were able to get this intake form to work. Matias, thanks for another great conversation and a good demo today. Have a great weekend. I'll see you on Tuesday. You too. And thanks everyone for listening and watching. Thank you all. We'll see you next time.