Laravel AI SDK : Taylor Otwell | Laracon India 2026

In this extensive live demo, Laravel creator Taylor Otwell introduces the Laravel AI SDK, a first‑party, open‑source Composer package that brings AI capabilities into Laravel applications. He explains the motivation for a native SDK, walks through setup (composer require, config file, provider selection), and demonstrates core features: simple agent calls, provider/model overrides, fail‑over providers, structured JSON output using Laravel's JSON schema component, queued agents, streaming responses via server‑sent events, image generation (including quality, orientation, and remixing with attachments), audio generation and transcription (including diarization), embeddings generation and caching, vector search with Eloquent integration, re‑ranking of results, and built‑in tools such as similarity search, file search, and web search. He then shows class‑based agents created with `php artisan make:agent`, covering attributes (provider, model selection), middleware (logging, prompt manipulation), and conversation memory via a conversations table. Real‑world examples include a Lead Extractor agent that parses contact‑form leads, stores them with embeddings, and uses tools to query leads. He also demonstrates testing support for faking agents, images, and audio. The talk ends with a rapid‑fire Q&A session, reflecting his enthusiasm for AI, Laravel’s community, and future directions. The SDK is slated for public beta release the following week.
Chapters
Hey everybody.
Yeah, thanks for the awesome welcome. I gotta get some of these spark fountain things for Laracon US. Pretty cool. Yeah, so I'm Taylor Otwell. I created Laravel about 15 years ago now. Thanks for coming out to Laracon India. It's good to be back. It's been a few years since I've been here, but it's always good energy and lots of fun. So I'm happy to be here. Today, I'm going to be walking you through the Laravel AI SDK, which is a package that I've been working on for the past couple months. This is a good crowd. I like this crowd. Yeah. So I've been working on this package for probably like the last eight. 10 weeks or so, and I'm gonna put it out next week, open source on GitHub, so everyone will be able to dig into it then. But in the meantime, I'll just kind of walk you through pretty much every feature of it here today. Most of my talks these days aren't super like rehearsed or prepared. I just have a lot of code to go through with you. We'll just kind of look at it together and learn about it. So yeah, we can kind of— if we get my screen up, there we go.
Awesome.
So yeah, I've got a Laravel application here. It's pretty much just a normal Laravel app that I put some routes in. Each route shows kind of a different feature of the AI SDK, and we'll kind of just go through it from top to bottom. First, you know, the Laravel AI SDK, like I said, is going to be an open source package. It's going to be out there on Composer and GitHub. So like, if you have a Laravel app, you'll just pull it in with composer require laravel/ai. And then you have the package. I've already done that, of course, so we don't need to do that right now. And then you have an AI config file where you, you know, just like you have a database config file or a file system config file, this is where you set up some preferences about how the AI SDK works. So you can set your default providers for things like text or images or audio transcription, embeddings, re-ranking, things like that. And you can have kind of different providers for different things. So like in this case, I have Gemini set up. to be my default provider for images. So that would be like Google's Nano Banana model, whereas I have OpenAI set up to be my default for just like text. Yeah, so you can configure a few other things in this file. We don't need to dig too far into this. And then you've got like your providers and your API keys that come out of your environment variables. So pretty standard stuff. Before we dig in super deep, like, Maybe it's useful to talk about why are we even building an AI SDK at Laravel. So of course, AI, super popular over the last few years. There's been community packages that let you work with AI, or you could even just hit AI providers directly with the HTTP requests. But I thought it was actually pretty important for Laravel to have a first-party offering that sort of gives our opinion on how you should add AI features to Laravel apps. It's just sort of like too important of a piece of the development story these days to not have a first-party package. So that's kind of what kicked me off writing this. And it's been a lot of fun building it. So hopefully you like it. And I think it's a pretty cool little package. So the nice thing about using an AI SDK is that you can try out different models and you can work with AI really easily without needing to like go out to Google's docs and read, okay, what is the endpoint that I call to generate an image again? Or If you want to try a new provider, maybe you want to try OpenAI to generate your images, you don't have to change all of your code and point it to OpenAI. You can just make very little changes in your code and try different models, different providers. Super easy. All right. So it's enough yapping about AI SDK first principles. Let's just get into some code. So the most simple way to interact with the AI SDK is through this agent function that you see on line 30. So I'm actually just importing this. So you can see right here I say use function Laravel AI agent, and then I can call the agent function. I can give it some instructions, and then I can just prompt the agent and get a response. And we'll just dump out whatever we get from the AI. All right. So you're a helpful assistant. Tell me about Laravel in one sentence. I actually have this little like screen that just links to these routes so I don't have to type them in. But I'll hit this first one here, /agent. And we should get something about Laravel. So you can see it says Laravel is a popular open source PHP web framework, yada, yada, yada. We get some other stuff about the response or about the AI invocation. So we get the usage. So we can see how many tokens did this take, both the prompt and to complete. We get any tool calls as a collection if there were any. There weren't any on this call. So that's fine. Cool. We get steps. We get some messages. We get some metadata, which tells us like what model was actually used to serve this request. And then we get an invocation ID, which this is assigned by Laravel. So every AI invocation gets a UUID. We have lots of plans for how to use this later. It lets us basically track AI requests as they even across like tool calls and things like that. All right. So that is the most basic way to use the AI SDK. Let's look at a couple other examples. I'm going to comment this out and uncomment this. So we can also pass a few other arguments to the prompt function. So here I'm basically making the same request, but I'm passing the provider and the model. So I didn't do that before. And since I didn't before, it was actually just going to use the default provider, which I think we had set as OpenAI for text. And it was going to use the default model, which is just GPT-5.2. But we can actually just override that at runtime. So maybe there's one particular case where we want to use a different model. We can just pass that here. In this case, we'll use Anthropic's Haiku model. And we'll see what we get here. We'll just fire off that route. And we should get a similar response. And we do. So Laravel is a popular open source PHP framework, as we all know. So great. Super easy to try different providers and models. Another cool feature of the AISDK is actually on this next example. So here you can actually see I'm passing an array of providers. And what the AISDK will do is if Anthropic is overloaded or if you've been rate limited on Anthropic, it will actually just fall back to Groq. So this is really useful if you want to, like, you know, have a couple different providers that you're automatically failing over to. And then we fire events actually if we fail over that said, hey, this agent failed over to a backup provider. You can log that. You can notify your Slack or whatever you want to do. So I don't suspect that we're probably— we're probably not rate limited on Anthropic. So this should work fine and shouldn't need to fail over. But we can just go ahead and run this route. And it should run successfully. And there we go. We got the response as we expect. All right. So that is the most basic way to generate text in the AI SDK. Let's go down a little bit further. So LLMs are not restricted to generating freeform text. So when we asked that question before, we basically just got a string of text that answered our question. But we can actually tell the SDK or the LLM to respond with structured output. So this is where we can actually define sort of a JSON schema of what we want the output to look like. So if we look at this example, you can see I'm calling the agent function. I'm giving it some instructions, and then I'm passing a schema. And this is using a new Illuminate component, a new Laravel component called JSON schema, which you might have seen if you've used the Laravel MCP package. We actually reuse this component here in the AI SDK and everywhere else we need to generate JSON schema specs. So I'm telling this agent, you're a movie critic. I want you— basically, this agent's gonna rate movies, right? It's gonna review movies for us. And we want to get some JSON back. So we want to get the movie. The rating, which we're saying we want to be between 1 and 10. We're going to give— we're going to ask the LLM to give its reasoning. So why did it rate the movie this way? And then we're going to ask it to give us a Boolean if it thinks LLMs could do better than this movie. So in your opinion, could current LLM tech write a better script for this movie? So kind of interesting what the LLM thinks here. And then I'll ask it to rate the movie Jurassic Park. Okay. Pretty classic American movie, at least. And yeah, let's see what we get. So So if we go to our AI SDK dashboard, we'll go to structured output. And you can see we got back JSON, right? We didn't get back freeform text. So this is really nice. This lets us, like, predictably parse the output from the AI and do things with it, like store it in a database or whatever we need to do. It gave Jurassic Park a 10. Wow, that's actually pretty good. Landmark, Blockbuster. LLMs could do better. It doesn't think so. False. What's another movie? What's like a really famous Indian movie? Like, I don't know actually. Someone spell it out for me. T? Ruchit, spell this out for me. Hold on, hold on, everyone be quiet. B-A-X-U. Like this? This?
B?
Like that? Nothing here? What do you think it's going to get? Is it going to get a 10?
8.
8. Pretty good. Oh, it says LLMs could do better though. Wow, that's pretty crazy actually. That's kind of weird because they gave it an 8. I wouldn't— that's a pretty good rating actually. Okay, I'll have to check this movie out. Yeah, so this was kind of funny. So while I was doing this, I actually gave it different instructions. So I said, let me copy this. So I said, you're a brutally harsh movie critic. You hold nothing back. Even good movies are total trash to you. So I'll try— hopefully this doesn't offend anyone. I'll try it again. All right, so now I got a 3. Bloated, self-serious, slow-motion posing, plot armor the thickness of a fortress. Okay, anyway, let me see what it gives Jurassic Park for that.
A 6.
Still says LLMs could do better though. So, all right. Anyway, so that's structured output. It lets you get back JSON from the LLM so that you can do things with it. All right. Queued agents. This is pretty cool. So one of the benefits of Laravel in general is that it's batteries included. Which lets us do really great things with the AI SDK. And what do I mean by batteries included? So like Laravel has opinions on storing stuff in a database, for one, or sending an email, or queuing a job, or scheduling a task, or validating data, right? These are all things that are built into Laravel. A lot of modern frameworks are actually not that way, surprisingly. You kind of have to piece things together by picking different libraries off the shelf and kind of putting it together. So every app actually ends up looking a little bit different. With Laravel, since we have so much stuff built in, one, it provides a lot of uniformity across apps, even across different teams. So like, they're gonna have controllers, they're gonna send emails a certain way, they're gonna probably use Eloquent to talk to the database. But it also lets us do really cool stuff with the AI SDK that other ecosystems really can't do because they don't have opinions on these things. So I can just call the agent function, and then instead of calling prompt, I could just say queue. And that's going to actually queue this into the background, call the LLM, and then get the response. And then I can say then and pass it a function, and then I can do something with that response. I've actually just written this little notify function. This is not built into Laravel to just send me a Mac notification when the job is done. So we should see a notification up in the top right of my screen when this job is done. I need to actually start a queue worker first. Let me make sure my database is clear. Start a queue worker. All right. So if we hit this queue route, queued agents, you can see it finished, like, immediately on the website. And there we go. We got a little notification over here. So Laravel is a popular open source PHP framework. So this lets you keep your app really fast, right. If you don't need the response immediately, you can just queue the agent and then do something with the response later. Is queued agents super easy to use? We can also stream responses. So a lot of us have— this is probably how we've experienced AI before, right? We go to ChatGPT or we go to Claude and we ask it a question and the response sort of like streams back as it's available. This is also super easy to do with the AI SDK. So if you look here on line 90, I'm calling the agent function and then I'm calling stream instead of prompt. And I'm asking it to write a poem about PHP, which should be interesting. And then I have a little dashboard we can actually kind of view this in. So if I go back here and go to stream UI, and then I'm just going to call start stream, which is going to call that route that we saw right here on line 90. All right? So I'll hit start stream. And there we go. We're starting to get some stuff streaming in. It's writing about PHP.
Cool.
Kind of coming in slowly though, huh? Anyway, so probably poems.php are probably not award-winning poetry. So that is how easy it is to stream. Just call the stream function, and then what is that actually— what's actually happening when we do that? If I go back here, I've got this thing where we can actually view the raw stream. So it's using server-sent events to send back JSON payloads as they're available, and you can see there's different event types. Here's sort of the text delta of like the new text that's available with every event. And then we can kind of concatenate together to build the stream. So that's how streaming works under the hood using SSE. There's a— Vercel has actually put out a pretty popular AI SDK where they have React components for the frontend that makes it a little bit quicker to build like chat-like interfaces with AI. If you're using React and Inertia and you want to use those components, We do actually have a mode of streaming that is compatible with their sort of protocol that they expect in these components. So if you call stream and then invoke using Vercel data protocol, you can actually use the AI SDK React components in your Laravel and Inertia React app. So it's just a little bit of a different structure on the data, but it's pretty much the same concept where you're just getting JSON payloads of the text as it's available. So anyway, just wanted to call that out if you're using React. All right, let's keep rocking and rolling through here. So this is like the most basic form of agents. We're gonna come back to agents in kind of the second half of the talk and look at some more advanced types of agents that we can build. But before we do that, I wanted to show you some of the other features of the AI SDK, because it's easy to kind of get bogged down in agents forever, but it can do lots of other things. So let's move down to image generation for a bit. So to make an image or to generate an image with the Laravel AI SDK, I just have this really clean syntax, just imageOf. And I say imageOf whatever I want to make an image of. So I'm saying a photo of a delicious Indian meal. There's all these cool helper methods I can use like landscape, or I could say portrait, or I could call a quality method where I say I want like medium-high or low-quality image. And then I just say generate. And then we're just going to return the image directly from this route as a PNG. All right, so let's go ahead and hit this route. It may spin for a little bit. And this is using— since we didn't pass what provider we wanted to use, this is just going to use the default provider in my config file for images. And that can be different than text. So in our case, we're using Gemini for images because Nano Banana is a really good model for images right now. And yeah, we'll see what we get. All right, that actually does look pretty good. All right. So there you go. There's our delicious Indian meal. I can also queue image generation. So just like we could queue agents, if you look here on this route on line 116, I'm saying image of the same thing, a photo of a delicious Indian meal, and then I'm calling queue. And so that's— image generation took a while, right? It took us like 8 or 9 seconds probably to generate that image. And we don't really want to wait that long all the time. So we can actually just queue this. And have a then callback. We're going to get the image. And this is another example of, like, the batteries-included power of Laravel. We can just say Image::storeAs, you know, india.png. And that's going to use all the file system stuff that we have in Laravel. So this could go to S3. It could go to local storage or whatever. Any file system driver that Laravel supports. And, again, this is another example of why Laravel is so powerful and why we can build great libraries is because We can have opinions on how to store files because we have a file system thing in Laravel. So this lets us give you this really cool functionality. So I'm going to queue the image generation. And then I'm going to say I'm going to store the image as india.png. And then we'll just notify us that the image is ready. And we should see it pop up in our storage directory over here generally once it's ready. All right. So let's go ahead and hit the queued version of that. queued image. So we can see we got a response really quickly because it's queued. If we look at our queue, you can see that generate image is running. So we'll let that run for a few seconds. Should be done any moment. Come on, Google. There we go. All right. Your image is ready. And if we go back to our project, we can see we've got india.png over here. And we got a little bit different image, but basically the same type of thing. Awesome. So super easy to queue image generation in the AI SDK using any built-in queue driver. And again, kind of like when we were prompting, like if I wanted to, I could pass provider here and like override that at runtime. So that would be no big deal. Or I could pass a variety of other options as well. All right. Queued image generation. Now I can also attach things to image prompts or even text prompts. So in this case, I'm going to say image of this image, but in the style of a Vincent van Gogh painting. And then I'm going to call the attachments method. And I'm going to give it that image we just generated. So I'm going to say image from storage, india.png. But it wouldn't have to be from storage. I could also do this down here. I could say attachments request file. So maybe the user uploaded a file, and we want to remix the image. So different ways to attach things. You can be from local storage, from cloud storage, from an upload. And then you can do different things with the images. So we're going to remix that image we just generated as a painting, and we'll just return it from this route and see what we get. All right, so I'm going to go back here, images, image remix. Let that spin for a second. Now, now. 1, 2, 3, now. 1, 2, 3, now. There we go. Okay, so you can see it's kind of got this Vincent van Gogh painting effect. So super easy to like remix images or change images or manipulate images with the AI SDK. All right, so that's kind of an overview of the basic image functionality. Super easy to use. We can do the same thing basically with audio. So the AI SDK can generate audio using a variety of different providers. So we support OpenAI, ElevenLabs. I'm trying to think if there's any other audio providers, but those are kind of the 2 main ones, I think. So in this case, I'm going to use ElevenLabs. They have really great voice models. Again, the syntax is very similar to generating images. I tried to build a really consistent, clean SDK. A lot of this was handwritten, actually, probably like 80% handwritten, 20% Claude code assisted to try to give you that classic Laravel feel in the whole SDK. So I'm going to say audio of, hi India, welcome to the Laravel AI SDK demo. There's some other methods I can do here. So I can pass a voice. ElevenLabs has different IDs for different voices, and you would just pass the voice ID here. There's also some helper methods like male or female, really quick ways to manipulate what the voice sounds like. I'll just use the default voice for ElevenLabs. So we'll generate the audio, then I'll call storeAs. Again, it's very integrated with the file system, so I can call storeAs and store it to S3, local disk, whatever. And then I'll just return the audio. So we should hear it over the speakers once it's generated. All right, let's go back. Audio.
Hi, India.
Welcome to the Laravel AI SDK demo. All right, there we go. Pretty fast. And sounds pretty good. What else can we do with audio? Okay, just like images, we can queue audio. If you were generating a big, long piece of audio, it might take a little bit longer. Like that first example probably wasn't even long enough to queue. But if you're generating a lot of audio from a big chunk of text, you might want to queue it. So again, I can just say, Audio of, pass the text, then call queue, and then I can have a then callback that does whatever I want. So in this case, I'll store it, and then I'll notify us that it's done. All right, so let's go to queued audio. You can see we got a response really quickly. Looks like it's generating the audio, and then it's done. Your audio is ready. And we have a welcome.mp3 here in our storage. So worked fine. Awesome. All right, so super easy to make audio, to queue audio. We can also transcribe audio. So I can just call transcriptionFromStorage, or I could do something like here on line 172, transcription of some file that was uploaded through the request. It could be on local storage, it could be on cloud storage, whatever. All right, in this case, I'm just gonna transcribe the audio that we just generated. So I'm gonna say transcriptionFromStorage welcome.mp3. I'm going to say diarize and I'll show you what that means in a second. And then I'll say generate and then we'll just dump out the response. All right. So let's look at transcriptions. All right. We've got it. It says, hi India, welcome to the Laravel AI SDK demo. So that worked fine. That diarize thing I showed you a second ago, basically what that does is break the audio into segments. By speaker, and if it doesn't know who the speaker is, it will just assign them a letter, but you can upload audio of known voices. So if you were like transcribing sales calls from your company, you could upload voices of your salespeople and it would actually have their actual name here in the speaker field, and then it's going to tell you like what was in that segment of text or segment of audio from start seconds to end seconds, and you can see like each chunk of the audio if you wanted to like build a transcript by speaker. You could do that using this diarize functionality. And this is supported by both ElevenLabs and OpenAI. All right. So that's kind of all there is to transcription. Again, it's just super easy to use. You just say transcription::fromStorage, give it a file, and it will transcribe the audio for you. So between this and audio generation, it's super easy to build sort of voice-enabled Laravel applications using AI. All right. Let's keep moving to another topic, embeddings, which are a pretty cool little piece of AI magic, in my opinion. So we've made it super easy to generate embeddings in the AI SDK. And an embedding is basically if you took an idea and assigned like a mathematical value to the idea. And that's useful because then you can query for what ideas are similar to that idea using cosine similarity. It's definitely some like kind of interesting AI voodoo magic, but it's pretty useful and cool. And we'll look at some real-life examples of how to use it. So to generate embeddings, I've actually put a super convenient method just right on the string class of Laravel. We can just say string of and then give it some text. And I can say to embeddings. And we're gonna get an array of embeddings. So different providers give you a different amount of like floats, numeric values that represent that idea that you just gave it. I'm going to dump out a sample of those. So let's hit this embeddings route. And you can see we got— we actually got 1,536 numbers back that represent this idea. I'm just dumping out like the first 10 of those. But basically, we would just store those in our database, and that would be our vector embedding for this idea. And then we can query things about it later, which we'll see. So you're saying that the embeddings are the actual idea itself? All right. So that's the most basic way to generate embeddings. We can also generate embeddings and then cache them. So in this example, I'm actually passing cache true. And in this case, if we've already generated embeddings for this piece of this string, we can just pull it out of the cache. So that could be out of the database cache, out of the Redis cache, whatever. And then we have the embeddings really quickly. So if we're generating embeddings from like user searches, a lot of users might search for the same thing, right? And we don't need to generate embeddings for that search every time. We can actually just cache that. So if I hit this route, you can see that we get the embeddings back really quickly because in this case, we're not even hitting the AI provider at all. We're just hitting the cache, which is of course saving us money and it's also saving us time because we don't need to generate embeddings for common things all the time. All right. So that's cached embeddings. So how could we actually use embeddings practically? So I've actually seeded my database. If we go into my database seeder, I'm seeding it with some popular movies, at least popular American movies, with a description of the movie. And then we're gonna loop through them down here. And we're gonna generate an embedding for each movie, an embedding of the title and the description. And then I'm gonna store it using this movie Eloquent model here on line 66. We're basically gonna like throw a bunch of movies in this database and then embeddings about the movie so that we can like query on it. All right, so I'm gonna run my seeder, which I think I already did, but I'll run it again to be safe. So if I look at my database, we go to movies and here's all those movies. And you can see like here over here is the embeddings for each movie that we generated. All right, so they're all there in the database safe and sound. So now I've actually got this little movie search. So we can search those embeddings that we just put in the database. So I'm going to search movies with big boats. And you can see Titanic comes in first. And what's interesting about that is the word boat is not in the description that is in the database, right? So when we query on vector similarity, we're actually querying on what is semantically similar to this search. And it thinks Titanic is the most similar. And this is really powerful, right? Because when users are searching, They're not always searching for the text that is like exactly in the description. They're searching for things that like what they mean. You know, so if they search for movies with crime or something, they might get something different. So they get Pulp Fiction, which is a crime-based movie. Even though crime is not in the description of the movie in our database. So semantic search lets you build really powerful search experiences and Laravel's making this super easy. So we've actually added a new method to the query builder called where vector similar to, where I can say I want to search on the embedding column using this query that the user typed in. And then I can say I want the results to have a minimum similarity. So this is sort of a value between 0 and 1 that says how strict you want it to be on the similarity of these search results. And then I'm going to limit my results to 5 and then just get it from the database and return the results. So we've made it super easy to do vector queries in the latest release of Laravel and with the AI SDK. And if we look at my migration, we've actually added a new index method to vector columns that make it super easy to generate vector indexes on like vector embedding columns. All right. Does that make sense? That's kind of an overview of like embeddings and vector search and AI SDK new stuff. Okay. So there's a related concept called re-ranking. The AI SDK makes it really easy to do this. When you search on vector similarity and you get your results, some people actually pass those results off to what's called a re-ranking model. That actually re-ranks the results even more precisely on the semantic meaning. It might use not only vector similarity, but it might actually use LLM reasoning to re-rank the results to put the most relevant results at the top. So to do this with the AI SDK, you just call re-ranking of, and then you pass it a list of like documents. And then you say re-rank, and then you can like query that. So I've got like a shorter list of movies here, and I'm going to query it for superhero. So we would expect to see like The Dark Knight maybe on the top or something like that. But let's go ahead and do this. Let's go to re-rank. Alright, so we did get The Dark Knight as the first result. So that worked totally fine. And you can see we actually got a score back of how closely it matched our query. What's cool is we've actually built re-ranking into Laravel collections. So if you have a Laravel collection of any data, you can now just call re-rank on the collection and semantically search across any, like, attributes in that collection. So in this case, I'm searching title and description for history movies. And then I'm going to say limit 3. And so what's actually happening here is it's using the default re-ranking provider that we've configured in our config/ai, which we have is Cohere. They're like a popular re-ranking provider. And so that's what that's going to use. And then we can just like re-rank any collection we have. So let's go ahead and hit this. Re-ranking collections. What was my query? History movies. So it gave Shawshank Redemption, really popular history movie. So great, super easy to re-rank collections using semantic search. You can use this to build really powerful search experiences for your users using AI with very little code. Now what is cool is since we have re-ranking on collections, we can actually do some pretty neat stuff with Eloquent queries. So let's actually come back up to our movie example. I'm gonna paste this in here. And in this case, let's actually select like the top 20 from the database. So the top 20 similar results using vector search. And then we're gonna get those as movies. And then since this is a collection, we can actually just call movies.re_rank and search on the description for the query. And we'll limit that to 5. So we're pulling 20 out of the database. And then we're passing those 20 to the re-ranking model to get the top 5 most similar results. And we can do this super easily with the AI SDK. So let's go back to our movie search. And maybe like movies with weird creatures. I don't know. Jaws. I guess that's a weird creature, like a super big shark. So we're actually pulling stuff from the database. We're passing it on to the re-ranking model. Actually put Terminator number 2. That's kind of funny. And then Alien, which that makes sense. So super easy to build semantic search experiences with the AI SDK and different re-ranking providers. All right, what else do we have here? Okay, so that's kind of a tour of the features in general of the AI SDK. What do you think so far? So that's basic agents, images, audio, transcription. embeddings, re-ranking, vector search, all of that. So I said earlier I wanted to come back to agents. So let's do that now. So I've got this routes/agents file. And this agent looks a little different. So before we were calling the agent function. But you can actually make agent classes. So in the AI SDK, there's a new php artisan make:agent command that generates an agent class. And I've generated this kind of generic assistant agent that we can play with for a second.
Cool.
Where I can just, like, prompt it with basic things. So if we look at what that class looks like, you can see that it implements some interfaces. So there's an agent interface, conversational interface, has middleware, has tools, it's promptable. But what agent classes let you do is, like, encapsulate the behavior of an AI agent into this, like, nice reusable class that you can use in different parts of your application. So in this case, I can return some instructions that I want the agent to have, sort of its system-level instructions. I can pass the messages of the conversation so far. So if this is like a chat interface, this is where I would pass all of the, like, historical messages of the chat thus far. I can pass any tools available to the agent. We'll get into that in a second. And any middleware, which we'll also look at that in a little bit later as well. So this is like the most basic form of class-based agent. So if I ask, what is the capital of France? We should get a response, of course. Let's go back to—
Paris.
Agent class. We got Paris. All right. That makes sense. Let's look at what else we can do with classes. Of course, we can override what provider we're using at runtime. So when we prompt the agent, we can pass like Anthropic. Super easy to do. There's also different attributes that we can put on agents. So instead of passing a different provider at runtime or like specifying the provider at runtime, I can actually use an attribute here where I just say like provider OpenAI. That works fine. There's a lot of other cool attributes you can use. Like, I can actually just say use_model. Let me import that. So if I put this attribute on the agent, it's actually gonna use the lowest cost model that's like still the current generation model for the provider. So if we're using Anthropic, that would be like Haiku on Claude, or if we're using OpenAI, that would be like GPT-5 Nano. So if you throw this attribute on an agent, it will use— The cheapest model. Is that spam text? I don't even have my text open. That's weird. Okay. So this lets you, if you throw this on an agent, it lets you like, maybe you have an agent that doesn't do very like tasks that require a ton of intelligence, right? So you're happy to use the cheapest model. Or maybe you have a really Like intensive agent, you can actually just say use smartest model. So this would like use Opus if you're on Anthropic, or it would use like GPT-5.2 Pro if you're on OpenAI. If you're on Gemini, you know, it would use the equivalent to the smartest model. So super easy to use these different models or to specify any custom model you want. So I'll say use cheapest model. And if we hit this attributes route, I don't even know if I have a route for that. Let me just type it in. Come on, buddy. All right. I can go to attributes. And this should use haiku, I think. So it just said Paris. So super easy to control, like, the level of smartness or intelligence on your agent. Agents can also have middleware. So just like routes can have middleware, you can also put middleware on agents. And that lets the middleware intercept the incoming prompt and also inspect the outgoing response. So if we look at this assistant agent, I actually have this little middleware already down here on it. It's called log prompts, and you might have actually noticed it working a second ago where in the handle method I'm just saying notify that we're receiving a prompt. I can do all sorts of things here with the prompt. Like I can actually revise the prompt in the middleware, or I can prepend to the prompt or append to the prompt. I'm not going to do that now. Then I call next, and then I call then, and we call then. Which is something you don't do in route middleware. But we use then because this could be a synchronous response that's coming back from the agent, or it could be a streamed response. And we need to use then in case it's a streamed response to do something after the whole response has been streamed back from the LLM. So typically when you write agent middleware, you always use this then syntax. So we're gonna receive the prompt, we're gonna run the prompt on the LLM, and then we can do something after. The prompt runs. So that's agent middleware. All right. Just like we saw with the agent function, we can actually queue class-based agents as well. So I can new up an assistant agent. I can just say queue what's the capital of France and then notify myself that that's done. I'll probably have to turn off do not disturb, I guess, here. Yeah. So let's go ahead and try that. Queued class. Queued agent class. Agent queued. Prompting agent. There's our middleware. Agent responded. Paris is the capital of France. So great. We can do queued class-based agents. What's cool about agents is, like I said, it lets you encapsulate instructions that you want to give the agent into a class. And so then you can pass, like, constructor arguments into the agent and customize the instructions based on the data you're giving it. So maybe you have an agent that's responding to a certain user and you wanna generate different instructions for that user than you do other users. So in this case, I have this personalized agent as an example, and I have 2 users in my database. I have me and I have my son, James. So let's go ahead and take a look at this agent. And you can see in the instructions, I'm actually customizing the instructions we give to the LLM based on the age of the user that we're giving to the agent. So You can see if you're, let's see, if you're less than 15, you're a helpful assistant for teens. You basically only speak in acronyms and slang. If you're less than 25, you're a helpful assistant for young adults. Be casual and cool. And if you're older than that, you're pretty much like a grandpa at this point, and you're a helpful assistant for older adults. Be professional and concise. So we can customize the instructions based on what we pass to the agent. So let's go ahead and try this. I'm gonna pass myself to the agent. I'm pretty old, I'm 39, so it's probably gonna give me this nice, Professional response, right? For old people. Let's go to personalized agent. Okay. Laravel's a modern open source framework written in PHP. Great. This makes a lot of sense. Let's go ahead and change it to James, my son, and see what we get. Yo, Laravel's straight up fire for web devs. Basically the GOAT of PHP frameworks. Okay. Nice. All right. So these are kind of funny examples. Let's take a look at, like, a very real-world example of building an agent, how we might use it, like, in our business. So I have built an agent called Lead Extractor. And if we go into this class, you can see that I'm using provider attribute to use Groq. Groq is a very, like, fast provider for open-source models. So OpenAI actually has an OpenWeight model that they, like, release publicly. And we can use that via Groq and it's very fast. So I'm gonna give it some instructions here. I'm gonna say that this is an agent that finds potential leads from a Laravel Cloud contact form. And then I'm gonna give some instructions about what kind of leads I'm interested in. So I'm prioritizing high-growth startups as well as established mid-market companies, but I'm not really taking government leads right now. And basically I'm going to also ask for structured output. So we saw that before, right, with the agent function. So I want to be able to parse these leads and store them in my database. So I'm going to define the schema that I want to get back from the LLM. So I want the name, the email, the reason why the LLM thinks this is a good lead for Laravel Cloud. And then I'm going to say that what needs does it think this customer has based on a fixed list of like actual features that we have in Laravel Cloud. So Laravel Cloud actually offers enterprise support, MySQL, Postgres, private cloud, SOC 2. So it's gonna look at those leads, say, oh, this customer needs MySQL. It's gonna put that in the needs array, and then we can store that in the database, and we like actually have this nice, you know, stored list of leads for Laravel Cloud. Alright, so now if we go back to my route, you can see that I'm passing it some leads I wanted to analyze from leads.csv. If we look at this, it's like kind of representative of what a contact form might be like. So you can see on line 2, hi there, we're a Series B startup, 2.3 million users, blah blah blah. That kind of sounds like a good cloud lead. There's one down here, test, test, test, hello, why isn't this sending? You know, that actually doesn't sound like that great of a lead. I think there's also some like government leads in here too, which we hope it filters out. Alright, so let's go ahead and fire up the lead extractor. We'll pass it this lead. We'll just kind of see what we get back. Lead extractor. Okay, you can see it parsed our leads. We have this nice like JSON structure of leads. It did actually see that Series B startup is a good lead. It thinks they need enterprise support. You can see it put MySQL on the needs right here, and that makes sense. You can see they do 2 billion in MySQL transactions, whatever that means. Fintech firm, enterprise support, private cloud. Yeah, so this is kind of cool. We actually have this nice little lead analyzer that we can store in a database, and our salespeople can look at this, and maybe they want to target customers that are using MySQL this week, and they kind of have that ready for them.
Yeah, thanks.
We could also, like, combine agents. You know, like, if maybe I have a lead summarizer class that takes the output from the lead extractor, and it summarizes the leads into an email that it sends to our head of sales every week with, like, the top leads that came in for the contact form this week. All right, I'm not gonna go through that, but you can just kind of, like, get the idea of, like, how you would start to build AI-powered systems using these nice reusable classes, and it all feels very neat and organized. Quick aside, testing. Do people still test anymore? Like the AI era, is that still a thing we're doing? I still write some tests. So if I go into example tests, you can see that I can actually just fake agents. Again, this is very similar to how you might fake the queue, right? Or like fake notification sending. So I can say lead extractor fake, and then I can just prompt the agent, and then I get a response back. If it's a structured agent, this is actually really cool. I don't have to provide fake data that matches the schema up front. It will actually read my schema from the agent and send back JSON that exactly matches the schema. So that's actually really cool. If I fake a structured output agent, we get data in the same shape that we could expect. And then I'll just say, like, lead extractor assert prompted, and I can assert that the prompt contained, like, some text. So super easy to test that. I can also fake image generation. where I can assert that certain images were generated. I can assert audio generation, or I can fake audio generation. So all of the aspects of the AI SDK, you can fake and test in all of the, like, kind of normal way you would expect to be able to test Laravel things. So it's super testable, super easy. Testing got a clap. Coding is not dead, guys. Coding is not dead. Yeah, so more on kind of this, like, lead extractor agent. In this case, I'm going to queue the lead extractor, and then I'm gonna say then, and then we get a structured agent response back, and then we will spin through all the leads, and we'll put it in a database. This is kind of what I was talking about earlier. It's like kind of a real-world use case. All right, so let's actually do this. We'll use these leads a little bit later in the demo. Yeah, let's see if this runs. Structured class, ingesting leads, should be on the queue right now. Lead extractor's running. All right, new leads have been ingested, so they should be in our database. I'll go to the leads table. Okay, there's our leads. You can see we've got the needs there. I also generated an embedding for each lead. So that's using the embedding stuff that we saw earlier. So we're starting to like combine some of these AI SDK features to build actual real-world things. All right. So we got the leads in our database. Quick aside into tools. So the LLM can't do everything, right? Sometimes you have to give it what's called tools to let it do things that it doesn't know anything about. So in this case, we want to build a cloud agent, a Laravel cloud agent, where maybe we as Laravel are going to ask the agent questions about cloud usage or things like that. So Jason Beggs is a developer at Laravel. I want to know how much he's spending on cloud. How would the LLM know that, right? Like, OpenAI doesn't have access to that data yet, at least. So how would it know that? Let me clear out some of these tabs. Cloud agent. And if I come down to the tools method, I'm giving it a tool called cloud spend. And this is a tool that I created using the make tool artisan command. And if we go into that tool, tools are pretty simple. They just have, like, a description. And I think down here, they have a schema of, like, the input that they expect. So I just expect a customer name as a string. And then I can handle the tool basically like almost like a controller, you might think of it as, where I receive this tool request and I can get the input off the request and I can return some stuff. So if someone asks about Jason's cloud spend, we're just gonna return like a hardcoded Jason is spending $2,400 a month on cloud. But you could imagine like we could like query a database, right? Just like pull out how much he was spending and then return it here. So this is how we augment agents with like custom behavior that they can tap into. All right, so that's the cloud spend tool. And let's go ahead and try this. So how much is Jason Beggs spending on cloud? And then we'll return it. I think it was like $2,400 a month. What route was that? Agent tools. It should invoke our tool. Jason Beggs is spending $2,400 a month on cloud. So great, it invoked our tool.
Cool.
Let's use those leads that we put in the database earlier. So not only can you build custom tools, but the AI SDK actually comes with some prebuilt tools that are just sort of like useful in general. So in this case, let's comment this out. I'm gonna say which of my leads needs SOC 2. So how's it gonna know this? It's gonna have to go out and look at that leads table and pull in that data, right? So this is so common, the need to like go out and search a database table based on some query. Now we've actually just given you a tool to do this. So the similarity search tool is just built into the AI SDK. This is not a custom tool. So I can say similarity search using model, lead model on the embedding column, minimum similarity that I wanna like set as my threshold, and like the maximum number of results I wanna pull out. And then I can tell the agent what this tool does. So this tool can be used to search for relevant cloud leads using a semantic search query. And again, I don't have to write the similarity search tool. This is just built into the AI SDK. So you can just throw this on any agent, point it at any Eloquent model you have that has vector embeddings on it, and the tool will just start using that. All right, so now we have the CloudSpin tool and similarity search. So we should be able to ask which of my leads needs SOC 2. Let's just run this again. It should query our database. Hopefully AI can be crazy sometimes. All right, so it actually did. It looks like it hit the database and actually pulled back some leads that need SOC 2. That's really cool. We didn't have to write any code to do that. So let's keep tying more things together, right? We can actually stream this cloud agent. So maybe we want to build, like, a chat for our salespeople to use where they can actually chat about Laravel Cloud usage with, like, a dashboard. Let's go to agent chat. Agent chat. So here's kind of a little cloud agent chat where I can say, let's say, how much is Jason Beck spending on cloud? It should call the tool. Okay, he's spending $2,400 a month on cloud. Which of my cloud leads needs SOC 2? It should do semantic search. Okay, great. We've got this like cool little chat interface that can pull custom data out of our database using AI. We really had to write very little code to make this happen, which is pretty sweet. That's tying together streaming and tools and agent classes and all sorts of cool stuff from the AI SDK. We're almost done. Are you all getting bored yet or good? That is an example of storing data in a database that we actually own. Really quickly, I want to show you how you can actually upload documents to AI providers like OpenAI and Gemini. and let them vectorize all of the documents for you. And then you can query that using a tool called file search. So in this case, I'm just gonna say file document from storage, leads.csv. And then when I call put, that's actually gonna upload that file to OpenAI or Gemini. They're going to vectorize it for me. They're gonna like store it in their database somewhere, and then I can query it later. I can upload files in a variety of ways. So I can say like from path if it's just like a local path. From a URL, I can actually pull a remote file, like a remote PDF off of a URL, put it in vector storage on OpenAI or Gemini, or I can just do like from a file upload, right, that our users are uploading. Okay, we want to store this in OpenAI and vectorize it. Super easy. I can do it in various different ways. Just call put on the file. I've actually already done this, so I'm not going to do it again. Once you have some files uploaded, you can create what's called a vector store. So the AI SDK has a stores class. where I can create a vector store called knowledge base. Once I do this, I'm actually gonna get back an ID from the provider, which is this ID. This is the one I've already generated before the talk. And then I can, like, actually add documents into that vector store. So I can say store add, and I can say document. Now, when I say document from ID, that's gonna be, like, a file I've already previously uploaded, right? So it's already been uploaded to the AI provider. I can also just add a file directly, like a file directly from storage. So store add, document from storage. I've actually taken the docs for this AI SDK. I've turned it into a PDF and I'm putting it up on OpenAI's vector store so that we can query it. You can see I can give it different metadata like type. These are leads, this is docs. I can put whatever metadata I want on it for reasons we'll see here in a second. Once I've already done that, which I have before this talk, We can actually come into a different agent I've created called a knowledge base agent. So if I go into knowledge base agent, in this case, I'm passing it a file search tool. This is not a custom tool. This is another, another tool that comes with the AI SDK. You give it a vector store that's on OpenAI or Gemini, and then you can even put like WHERE clauses on it. So like maybe you only want to search for type leads in this knowledge base. Once you've added that file search tool, you can then query it. And you can like interact with your documents. So they could be PDFs, they could be CSVs, whatever it is, the provider's gonna take care of vectorizing that and then you can query it. So which of my cloud leads needs SOC 2? In this case we're using the knowledge base agent. That was my grandma. So let's go ahead and hit the knowledge base. Do I have that here? What route is that? Agent/knowledge. Let's see here. Should get our SOC 2 leads hopefully. Again, this is not searching our database. This is searching OpenAI's vectorized version of the leads we uploaded. What I just showed you is a similar way to do what we did before where we're storing them in our own database, but maybe you don't want to maintain your own database of vector embeddings for PDF files. If you want to just upload them to OpenAI or upload them to Google, let them take care of storing it all, you can do that. And that's how you do it is with the file search tool. All right. One last built-in tool I want to show you is the web searching agent. So I've got my assistant agent that we were using earlier. And you can see if we go to tools, we actually don't have any assigned to it. If I ask it, has Laravel Boost 2.0 been released and what are its main features? So what do we expect to happen? Laravel Boost 2.0 was released last week. So probably the model doesn't have any information about Laravel Boost 2. So let's go ahead and actually see what we get back here. Web searching agent. Prompting agent. There's our middleware firing. I'm gonna go to do not disturb because we actually don't even need that anymore. What's the name of the model? All right. Hopefully we get a response here pretty quick. Okay. You can see it like, I'm not sure there's an official Laravel product called Laravel Boost 2. So it doesn't know anything about Laravel Boost because that just happened last week. But what we can actually do is come to our assistant agent and throw the web search tool on it. I guess I need to say new here. Import that. And again, this is a built-in tool. You don't have to write this yourself. If you throw this on, The agent will have access to web search. So now if we run the same thing again, hopefully we get more, like, up-to-date, relevant information because we've actually enabled this agent to search the web. So since Laravel Boost 2 came out last week, we should hopefully actually get some information about it. Come on, little robot friend. Oh, there we go. Yes, Laravel Boost was released January 26th, 2026. And you can see that it actually has pretty accurate information, right? A major update that introduced new skill system, extended the workflows, blah, blah, blah, blah, blah. Boost is awesome. You should definitely check out Boost. We did just drop Boost 2.0. It makes your AI coding agent like Claude, CoderCursor much more knowledgeable about Laravel. So that is the web search tool, which is built into the SDK. All right. This is the very last example, I promise. I'm sorry. I know this has been a long talk. I wanted to go back to our stream example where we were sort of chatting with the agent about cloud usage. And I want to kind of— or actually, let's leave this comment out for a second. Let's look at how it exists right now. So if I go to cloud agent chat and I do, how much is Jason Beggs' salary? How much is Jason Beggs' salary? Spending on cloud. Okay. You see, we get the result like we'd expect. But watch what happens if I ask this. Who is the last customer I asked you about? It can't tell, right? It doesn't know the chat history. It doesn't even know the last thing we asked it, because we're not storing the messages anywhere, and we're not passing them to the agent in that messages method that we saw earlier. All right, so if I come into cloud agent, messages is empty. So what are our options here, right? This isn't really a great experience. We wanna be able to have like an ongoing conversation with the agent. So we could, you have the freedom to basically just manually manage this. So you can pull the messages out however you want. So if you wanna store them in MongoDB or DynamoDB or in Redis or whatever, you can do that. You can pull them out here and you can just like pass them back as an array chronologically.
Okay.
But the AI SDK actually makes this super, super easy for you. So say you don't want to do that, right? The AI SDK actually comes with a couple of tables. And if you throw remembers_conversations, if you just throw them on the agent, you can actually just delete that entire method. And then you're like, you're good to go. It will remember the conversations. It will store them in a conversations table. All of that stuff. So let's actually go back to this route now. So in this case, I'm going to pull the user out of the database. I'm going to new up the cloud agent, and I'm going to say continue last conversation as Taylor. And this is going to pull the last conversation out for this user, but I could also pass it a conversation ID. It assigns UUIDs to every conversation, which we'll see in a second. But I'll say continue last conversation as Taylor, and then we're just going to do the same thing. We're going to stream out the response to the query. All right. So let's actually reload this and try again. How much is Jason Beggs spending on cloud? Jason Beggs gets a lot of shoutouts in this talk. Jason Beggs is spending $2,400 a month. Okay. That's great. Who is the last customer I asked you about? Oh, did it not work? What did I not do? I got a conversation. Cloud spending. I don't have access. What did I forget? What did I do? I legit like don't know what I did here. Remembers conversations. Continue. Sorry, I can't hear what they're saying. What? Yeah, the route URL. Oh, is it not the same? Oh, it's not the same. Oh. Route GET chat stream. Guys, I am lost. I am totally lost. What? Okay. So I just— do I just need to hit this directly? Okay. Chat stream. This is— no, this is just the stream part. So this is like not even the— Interface. That's good. Let me go back to Agent Stream. What was it? Not Agent Stream. Cloud Agent Chat. Who is the last customer? I've actually never had this go wrong. I'm sorry, guys. I don't know what is happening. Yeah, I don't know. It is storing the conversations, but it's like not pulling out the last conversation that I had. Like there's that. Continue Cloud Spinning by Jason Beggs. It even summarized the title using AI. I don't know, guys. I'll probably figure this out like 5 minutes after I get off stage, but I'm just like not seeing it from up here. Yeah, the user is just in the table. Anyway, in theory, this is how it would work. It would continue the last conversation, but I've actually never had this go wrong, so that's kind of frustrating. But you can see that it did actually, like, store the stuff for us. We didn't have to store the messages in the database. We don't have to pull them back out. It has conversations and conversation messages. Yeah, and I'm stumped. But that is generally the AISTK, and you've seen me be stumped live on stage. That was a long talk. That was longer than I expected. Yeah, so next steps on Laravel AISTK. If you go to laravel.com and you go to— Framework, and you go to AI SDK. We're actually going to be releasing this publicly as a beta next week. So you can kind of get on the notification list if you want to find out about this. So go do that. Very batteries-included AI toolkit. Super cool. Check out our other AI tools, Boost and MCP. And that is an overview of the AI SDK. So thanks for listening.
Thank you.
I'm so tempted to keep working on that route.
All right. How do you feel being back to India, being on stage once again?
It's good. I love India. It's fun. It's good energy.
So should we go with some rapid-fire questions for you?
Yeah, sure. Go for it. Okay.
Can you please come here? I feel a little nervous because some of the questions I created were like, I don't know how you'll answer it, but let's see. Let's see at runtime. So, Bhavdeep, care to do it over there on the screen? Between like which LLM you used, like one of the questions was asked that which LLM you used just to create this AI SDK.
Mainly Claude Code with the Opus model, but most of it was handwritten actually. I only used Claude Code to write some of the boring parts like tests. If I needed to like do any like boilerplate work that was very tedious, I would just use the AI to do that. But all of the like feel of it was handwritten.
Okay, and does Cloud Code know that whenever you are using, then the Cloud Code know that it's Taylor who is using it?
Well, I asked it that. I asked it like after I wrote the AI SDK, I was like, look at this library and tell me like who you think wrote this library. And it was like, this is either Taylor Otwell or someone that works at Laravel.
That's funny. So I have one-word legacy for you. So there will be a statement and you have to just give an answer in one word.
Okay.
All right. And that is more like a rapid fire, so you don't have to take a lot of time. Just whatever things comes in your mind, just shoot. Okay. All right. Done. Bhavdeep, your time starts now. First, Laravel in one word.
Artisan.
Artisan. Second, community in one word.
People.
People.
Sorry, that was a very basic answer.
Third, open source in one word.
Pull requests.
Pull requests. The last year of Laravel in one word.
Growth.
Growth. This year in Laravel in one word.
Ooh, that's a good one. Yeah, sure. That's such a that's such an easy answer though. It's easy. I'll just say AI, I guess. But that's not happy with that answer.
Yeah, of course.
Okay.
So and so the answer is?
We'll say AI, I guess. AI and cloud.
Okay. Then next year in Lalavere in one word.
Oh wow! I don't know. The world is moving so fast. I don't know. Speed.
Speed.
Okay.
7th, building for artisans in one word.
Uh, craftsmanship.
Oh, craftsmanship, perfect. Deploying on Friday in one word.
Uh, brave. Brave.
Indian food spice level on a scale of 1 to 10.
Like what I like?
Yep, for you.
Uh, for me, like a 7.
7?
Yeah.
Laracon India in one word.
Uh, fun.
Fun. Little Rock in one word?
What's that?
Little Rock, the place where—
Uh, boring. That's a small town.
Yeah. Abigail in one word?
What is it?
Abigail.
Abigail, uh, pretty.
Pretty.
Nice.
So we'll move to the next round. I prepared 2 rounds for you. One was like a rapid fire. Now this is fill in the blank. So there is a statement, and at the end you need to fill in the blanks.
Okay.
So let's start with first. In 2026, a great developer will be someone who—
Thinks.
Thinks. Nice.
Can't turn your brain off in 2026.
Yep. Second question, the boldest decision I have ever taken as the CEO of Laravel.
Ooh. While Laravel was still small or while Laravel was big?
Yeah.
While it's still small, we had no meetings. While it's big, I canceled all my one-on-ones. That's new for 2026. I'm not doing one-on-ones. Yeah, that's true.
Third, one thing about AI that excites me is and scares me is.
Excites me is— it's gonna be more than one word, okay? It's easier than ever to build your ideas.
Okay.
That's the exciting part. I think Laravel's always— sorry, I'm gonna talk for a second. Laravel's always been about like creating what people want to build, right? And I think in AI, the AI age, It enables people to build things faster. That's great for a lot of reasons. It also lets people build things that maybe couldn't have built things before, right? So maybe you're like a frontend developer and you can actually write some Laravel backend code now because you have AI, or maybe vice versa. You're a backend developer, now you can do React because you have AI.
Yeah.
What scares me is, I guess, the code is actually not necessarily the hard part. It was always like the ideas and like the, solutionizing around problems elegantly. So I think it's more important than ever to really try to solve customer problems or do things elegantly or do things well and not just have AI slop.
So does it ever feel to you— so I mean, most of the people know that since the beginning you just love one thing, that is programming. And after this AI, I think in one of the podcasts you mentioned that You love being the space where you were before during that mod days.
Yeah.
So can you share? Because I want to set up the context that something excites which also, you know, does not create panic.
Well, I think like the exciting part about AI for me is like it's just much easier to try ideas, right? And not get like overwhelmed or not procrastinate on them. So like maybe even ideas you wouldn't have tried before, right? So like I was writing this nerdy game in TypeScript and Bun.
Yeah.
And that's just something I would have never done before, right? Like, just because it's time-consuming. I don't even really know TypeScript that well. But I can actually— I'm actually enabled to play with that. And just like, that's just a fun project, right? Not every programming project has to be serious. So for me, AI is very exciting because, like, let's say I'm heading out to lunch, right? I can just fire off an agent real quick to do something. I check it when I get back. Like, I'm just getting stuff done that You know, when I'm not even at my desk. So it's just a really crazy time. And to me, like, anytime we make software development easier is— that's what Laravel's always been about, right? Like, from the very beginning, it's just making software development easier. And this is like just another step in that direction, I'd say.
So it adds more passion in you, that adds more energy in you.
I feel re-energized, like, in an AI era, right? Like, to me, I was worried at first because I was like, I really like coding, right? Coding's my favorite hobby still to this day. So when people ask me, what do you do for fun? Really, it's just coding. So for me at first, I guess I was a little scared that what does this mean for me? It's like my favorite hobby is sitting down to code on stuff. But actually, I'm having more fun than before because I'm realizing that the fun part is not typing dollar sign, dash, arrow. That's not really the fun part. It's more like the ideas and trying to solve a problem that is fun. And you can actually just do that. Easier now.
That's why we say that it's a mindset shift.
Yeah.
Yeah, perfect. Thanks for the answers. We can clap. 4th, in the future, the one thing that I hope to spend my time on doing is—
Oh, wow. I don't even know.
Something like you must have, like, you know, you still want to do it in your free time.
I mean, I've got a lot of, I've got a lot of cool Laravel ideas actually that I still want to build this year. So like the AI SDK is really just the first thing. I've got other things I want to build that are not even AI-related for Laravel, like other packages, other ideas. So I hope I get to spend more time doing that. That's why I've sort of like honestly tried to carve out more time at Laravel to code, is because like that's what I'm sort of best at and most passionate about. So I want to keep doing that.
Like small, small things surrounded by the ecosystem itself.
Perfect.
5th question, the energy at Laracon feels like?
Like a Monster energy drink. Do you have those?
Yeah, you might see a lot of Monster energy tonight as well. 6th question, one country apart from USA I would love to have the weekend home in the future is?
Oh wow, during the warm season or while it's like warmer, maybe like Switzerland. I think it's super pretty. Switzerland is nice. Yeah, I like Switzerland scenery.
And then maybe in summer?
In summer? Wow, so like I want to cool off, it's too hot. I don't even know, honestly.
Maybe Bahamas?
Yeah, something like that.
Hawaii?
Hawaii is nice, yeah. But that's in the USA.
Yep. 7th question, in the future, my dream car will be?
Maybe I can give up driving and just have like a robo-taxi or something.
That might be possible.
Then I can code while driving.
If given a chance, will you buy your house on Mars?
On Mars?
Yeah, like they say that—
I don't know. I don't— but would you love to? There's nothing on Mars. It's just dirt. Nothing on Mars.
Yep. 8th question. If I were starting Laravel from scratch in 2026, in this era, I would—
Wow, this is a good one. I think that like, I don't know. I'm actually pretty happy with how Laravel turned out. And there was a lot of, like, I think there was a lot of decisions that I didn't like along the way that, like, over 15 years of building a framework, you sort of, like, correct them over time.
Yeah.
So, like, most of the things I didn't like in the framework, I've, like, sort of already tried to fix. I don't know. I would definitely use ActiveRecord again for the ORM. That was a great decision.
That's the reason, because the moment when I created that question, I was thinking, what would Taylor think? Because, you know, it's perfect the way it is.
No, it's not perfect, but I'm happy with it. And I think we've just fixed a lot of things along the way. I fixed some things, and like the community has fixed a lot of things. Of course, we have like, I think like 3,000 contributors to Laravel at this point. Wow. So a lot of the pain points have been ironed out, you know, by us at Laravel and by you all.
Have you noticed like a few more contributors from India or like?
Oh yeah, there's contributors from like— I haven't looked at the countries, but it's got to be like almost every country in the world at this point.
Thanks. 9th question. If someone is attending Laracon for the first time, they should—
Try to make a few friends that you can connect with after Laracon. Like even like people you can just chat with ideas about or chat with code ideas about. Like I have kind of a small group of people, right, that like I'm friends with from the early days of Laravel. that, like, hey, I've got this Laravel idea. What do you think about it? Is it dumb? Is it good? You know, so it's good to make those friends or make those connections. And then you have, like, people you can learn from, get inspired by, share side projects with. Yeah.
I mean, like, one of the best parts of Laracon that most of the connections and most of the networking happens in after-party where people are free, speakers are free, relaxed. And then those inventions are created. That is the reason why we did a proper setup for you so that you can have Not only talks, not only dance, but a proper delicious food as well. And I think it's the last question. Question number 10, number of new Garba steps Taylor Otwell will be learning. How many steps are there? How many steps? Yeah, it's a good question.
How many are there?
Like, I know several, but let's ask in audience, how many Garba steps are there? How many bones are there in human body?
I don't know, I can probably learn a couple.
Yeah, so the thing is like One is like this.
Yeah, I remember that one.
And the second is like this, then in circles. So maybe 4 or 5?
OK, I'll shoot for that.
Anyone open for suggestions, like during the Garba party, who would like to teach Taylor a few Garba steps? 1, 2, 3, 4, 5, 6, so many.
Lots of volunteers.
All right, so I think that's it. There are also so many questions being asked on Twitter, but I don't want to go through them, all of them at one point of time. But thanks for coming. Thanks for being part of Laracon India. Are you looking for after party?
Yeah, I'll be there.
Thank you. Let's give a standing applause to Taylor Otwell.
More from Taylor

Everything New with Laravel and Cloud | Taylor Otwell Keynote at Laracon US 2026

In conversation with Taylor Otwell: The India Comeback - Hosted by Vishal Rajpurohit

Introducing Laravel VPS & Major Updates to Forge | Laracon Keynote 2025 (Taylor Otwell & Team)

Introducing Nightwatch for Laravel | Taylor Otwell & Jess Archer Keynote at LaraconAU 2024

Laravel Cloud, Inertia 2.0, VS Code Extension, & OSS Updates | Taylor Otwell Keynote | Laracon US

Taylor Otwell "Laravel Herd, Laravel 11, Laravel Folio, Laravel Volt" - Laracon US 2023 Nashville



