[{"data":1,"prerenderedAt":12292},["ShallowReactive",2],{"navigation":3,"-blog-how-to-build-an-ai-chat":958},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,816,857],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,791,796,801,806,811],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":585,"description":586},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":593,"path":594,"stem":595,"framework":16,"category":172,"description":596},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":598,"path":599,"stem":600,"framework":16,"category":397,"description":601},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":603,"path":604,"stem":605,"framework":16,"category":226,"description":606},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":608,"path":609,"stem":610,"framework":16,"category":190,"description":611},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":613,"path":614,"stem":615,"framework":16,"category":190,"description":616},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":618,"path":619,"stem":620,"framework":16,"category":190,"description":621},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":623,"path":624,"stem":625,"framework":16,"category":190,"description":626},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":628,"path":629,"stem":630,"framework":16,"category":190,"description":631},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":633,"path":634,"stem":635,"framework":16,"category":190,"description":636},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":638,"path":639,"stem":640,"framework":16,"category":190,"description":641},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":643,"path":644,"stem":645,"framework":16,"category":190,"description":646},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":648,"path":649,"stem":650,"framework":16,"category":190,"description":651},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":653,"path":654,"stem":655,"framework":16,"category":190,"description":656},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":190,"description":661},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":190,"description":666},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":668,"path":669,"stem":670,"framework":16,"category":190,"description":671},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":673,"path":674,"stem":675,"framework":16,"category":190,"description":676},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":678,"path":679,"stem":680,"framework":16,"category":190,"description":681},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":683,"path":684,"stem":685,"framework":16,"category":226,"description":686},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":688,"path":689,"stem":690,"framework":16,"category":309,"description":691},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":693,"path":694,"stem":695,"framework":16,"category":397,"description":696},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":698,"path":699,"stem":700,"framework":16,"category":190,"description":701},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":703,"path":704,"stem":705,"framework":16,"category":190,"description":706},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":708,"path":709,"stem":710,"framework":16,"category":190,"description":711},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":713,"path":714,"stem":715,"framework":16,"category":178,"description":716},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":718,"path":719,"stem":720,"framework":16,"category":309,"description":721},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":723,"path":724,"stem":725,"framework":16,"category":172,"description":726},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":728,"path":729,"stem":730,"framework":16,"category":309,"description":731},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":733,"path":734,"stem":735,"framework":16,"category":309,"description":736},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":738,"path":739,"stem":740,"framework":16,"category":178,"description":741},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":743,"path":744,"stem":745,"framework":16,"category":184,"description":746,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":748,"path":749,"stem":750,"framework":16,"category":178,"description":751},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":753,"path":754,"stem":755,"framework":16,"category":397,"description":756},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":758,"path":759,"stem":760,"framework":16,"category":309,"description":761},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":763,"path":764,"stem":765,"framework":16,"category":226,"description":766},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":768,"path":769,"stem":770,"framework":16,"category":309,"description":771},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":773,"path":774,"stem":775,"framework":16,"category":172,"description":776},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":778,"path":779,"stem":780,"framework":16,"category":226,"description":781},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":783,"path":784,"stem":785,"framework":16,"category":309,"description":786},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":788,"stem":789,"framework":16,"category":184,"description":790},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":792,"path":793,"stem":794,"framework":16,"category":172,"description":795},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":797,"path":798,"stem":799,"framework":16,"category":397,"description":800},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":802,"path":803,"stem":804,"framework":16,"category":397,"description":805},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":807,"path":808,"stem":809,"framework":16,"category":172,"description":810},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":812,"path":813,"stem":814,"framework":16,"category":172,"description":815},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":817,"framework":16,"category":16,"description":16,"icon":818,"path":819,"stem":820,"children":821,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[822,827,832,837,842,847,852],{"title":823,"path":824,"stem":825,"framework":16,"category":16,"description":826},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":828,"path":829,"stem":830,"framework":16,"category":16,"description":831},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":833,"path":834,"stem":835,"framework":16,"category":16,"description":836},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":838,"path":839,"stem":840,"framework":16,"category":16,"description":841},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":843,"path":844,"stem":845,"framework":16,"category":16,"description":846},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":848,"path":849,"stem":850,"framework":16,"category":16,"description":851,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":853,"path":854,"stem":855,"framework":16,"category":16,"description":856},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":858,"path":859,"stem":860,"children":861,"framework":28,"category":16,"description":16,"icon":957},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[862,864,869,874,879,884,889,893,898,902,907,912,917,922,927,931,936,940,944,948,953],{"title":15,"path":859,"stem":860,"framework":28,"category":16,"description":863},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":865,"path":866,"stem":867,"framework":28,"category":16,"description":868},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":870,"path":871,"stem":872,"framework":28,"category":16,"description":873},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":875,"path":876,"stem":877,"framework":28,"category":16,"description":878},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":880,"path":881,"stem":882,"framework":28,"category":16,"description":883},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":885,"stem":886,"framework":28,"category":887,"description":888},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":890,"stem":891,"framework":28,"category":887,"description":892},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":894,"path":895,"stem":896,"framework":28,"category":887,"description":897},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":899,"stem":900,"framework":28,"category":887,"description":901},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":903,"path":904,"stem":905,"framework":28,"category":887,"description":906},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":908,"path":909,"stem":910,"framework":28,"category":887,"description":911},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":913,"path":914,"stem":915,"framework":28,"category":887,"description":916},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":918,"path":919,"stem":920,"framework":28,"category":887,"description":921},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":923,"path":924,"stem":925,"framework":28,"category":887,"description":926},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":928,"stem":929,"framework":28,"category":887,"description":930},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":932,"path":933,"stem":934,"framework":28,"category":887,"description":935},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":937,"stem":938,"framework":28,"category":887,"description":939},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":941,"stem":942,"framework":28,"category":887,"description":943},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":945,"stem":946,"framework":28,"category":887,"description":947},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":949,"path":950,"stem":951,"framework":28,"category":887,"description":952},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":954,"stem":955,"framework":28,"category":887,"description":956},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":959,"title":960,"authors":961,"body":972,"date":12282,"description":12283,"extension":12284,"image":12285,"meta":12286,"navigation":36,"path":12288,"seo":12289,"stem":12290,"__hash__":12291},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[962,967],{"name":963,"avatar":964,"to":966},"Hugo Richard",{"src":965},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":968,"avatar":969,"to":971},"Benjamin Canac",{"src":970},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":973,"value":974,"toc":12249},"minimark",[975,979,984,987,1022,1048,1052,1055,1069,1073,1076,1113,1118,1121,1265,1269,1276,1492,1495,1534,1538,1545,1640,1647,1664,1674,1678,1692,2423,2426,2444,2454,2458,2466,2470,2481,2849,2853,2880,4587,4590,4595,4602,4607,4618,4623,4632,4650,4655,4670,4683,4687,4690,5065,5069,5084,5088,5096,5669,5676,5701,5705,5723,7170,7173,7178,7189,7227,7242,7247,7254,7268,7273,7312,7317,7322,7329,7340,7344,7347,7351,7354,7507,7511,7536,8007,8011,8550,8554,9890,9899,9903,9910,9914,9924,10173,10177,10185,10432,10436,10439,11854,11858,11861,11866,11875,11880,11889,12092,12096,12099,12114,12117,12132,12147,12156,12160,12163,12193,12196,12201,12242,12245],[976,977,978],"p",{},"Building AI-powered applications has never been more accessible. This guide walks through creating a full-featured AI chatbot using Nuxt, Nuxt UI, and the Vercel AI SDK. Each step is explained in detail so you understand how every piece works together.",[980,981,983],"h2",{"id":982},"what-were-building","What we're building",[976,985,986],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[988,989,990,998,1004,1010,1016],"ul",{},[991,992,993,997],"li",{},[994,995,996],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[991,999,1000,1003],{},[994,1001,1002],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[991,1005,1006,1009],{},[994,1007,1008],{},"Markdown rendering"," for rich AI responses with code highlighting",[991,1011,1012,1015],{},[994,1013,1014],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[991,1017,1018,1021],{},[994,1019,1020],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1023,1024,1026],"callout",{"icon":1025},"i-simple-icons-github",[976,1027,1028,1029,1039,1040,1047],{},"Check out the ",[1030,1031,1035],"a",{"href":1032,"rel":1033},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1034],"nofollow",[1036,1037,1038],"code",{},"Nuxt"," and ",[1030,1041,1044],{"href":1042,"rel":1043},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1034],[1036,1045,1046],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[980,1049,1051],{"id":1050},"prerequisites","Prerequisites",[976,1053,1054],{},"Before we start, make sure you have:",[988,1056,1057,1060],{},[991,1058,1059],{},"Node.js 20+ installed",[991,1061,1062,1063,1068],{},"A ",[1030,1064,1067],{"href":1065,"rel":1066},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1034],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[980,1070,1072],{"id":1071},"project-setup","Project setup",[976,1074,1075],{},"Start by creating a new Nuxt project:",[1077,1078,1083],"pre",{"className":1079,"code":1080,"language":1081,"meta":1082,"style":1082},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx nuxi@latest init nuxt-ai-chat\ncd nuxt-ai-chat\n","bash","",[1036,1084,1085,1104],{"__ignoreMap":1082},[1086,1087,1090,1094,1098,1101],"span",{"class":1088,"line":1089},"line",1,[1086,1091,1093],{"class":1092},"sBMFI","npx",[1086,1095,1097],{"class":1096},"sfazB"," nuxi@latest",[1086,1099,1100],{"class":1096}," init",[1086,1102,1103],{"class":1096}," nuxt-ai-chat\n",[1086,1105,1107,1111],{"class":1088,"line":1106},2,[1086,1108,1110],{"class":1109},"s2Zo4","cd",[1086,1112,1103],{"class":1096},[1114,1115,1117],"h3",{"id":1116},"installing-dependencies","Installing dependencies",[976,1119,1120],{},"Install Nuxt UI and the AI-specific dependencies:",[1122,1123,1125,1168,1200,1233],"code-group",{"sync":1124},"pm",[1077,1126,1129],{"className":1079,"code":1127,"filename":1128,"language":1081,"meta":1082,"style":1082},"pnpm add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1036,1130,1131],{"__ignoreMap":1082},[1086,1132,1133,1135,1138,1141,1144,1147,1150,1153,1156,1159,1162,1165],{"class":1088,"line":1089},[1086,1134,1128],{"class":1092},[1086,1136,1137],{"class":1096}," add",[1086,1139,1140],{"class":1096}," @nuxt\u002Fui",[1086,1142,1143],{"class":1096}," tailwindcss",[1086,1145,1146],{"class":1096}," @nuxtjs\u002Fmdc",[1086,1148,1149],{"class":1096}," @nuxthub\u002Fcore",[1086,1151,1152],{"class":1096}," drizzle-orm",[1086,1154,1155],{"class":1096}," drizzle-kit",[1086,1157,1158],{"class":1096}," @libsql\u002Fclient",[1086,1160,1161],{"class":1096}," ai",[1086,1163,1164],{"class":1096}," @ai-sdk\u002Fvue",[1086,1166,1167],{"class":1096}," zod\n",[1077,1169,1172],{"className":1079,"code":1170,"filename":1171,"language":1081,"meta":1082,"style":1082},"yarn add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1036,1173,1174],{"__ignoreMap":1082},[1086,1175,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198],{"class":1088,"line":1089},[1086,1177,1171],{"class":1092},[1086,1179,1137],{"class":1096},[1086,1181,1140],{"class":1096},[1086,1183,1143],{"class":1096},[1086,1185,1146],{"class":1096},[1086,1187,1149],{"class":1096},[1086,1189,1152],{"class":1096},[1086,1191,1155],{"class":1096},[1086,1193,1158],{"class":1096},[1086,1195,1161],{"class":1096},[1086,1197,1164],{"class":1096},[1086,1199,1167],{"class":1096},[1077,1201,1204],{"className":1079,"code":1202,"filename":1203,"language":1081,"meta":1082,"style":1082},"npm install @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1036,1205,1206],{"__ignoreMap":1082},[1086,1207,1208,1210,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231],{"class":1088,"line":1089},[1086,1209,1203],{"class":1092},[1086,1211,1212],{"class":1096}," install",[1086,1214,1140],{"class":1096},[1086,1216,1143],{"class":1096},[1086,1218,1146],{"class":1096},[1086,1220,1149],{"class":1096},[1086,1222,1152],{"class":1096},[1086,1224,1155],{"class":1096},[1086,1226,1158],{"class":1096},[1086,1228,1161],{"class":1096},[1086,1230,1164],{"class":1096},[1086,1232,1167],{"class":1096},[1077,1234,1237],{"className":1079,"code":1235,"filename":1236,"language":1081,"meta":1082,"style":1082},"bun add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1036,1238,1239],{"__ignoreMap":1082},[1086,1240,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263],{"class":1088,"line":1089},[1086,1242,1236],{"class":1092},[1086,1244,1137],{"class":1096},[1086,1246,1140],{"class":1096},[1086,1248,1143],{"class":1096},[1086,1250,1146],{"class":1096},[1086,1252,1149],{"class":1096},[1086,1254,1152],{"class":1096},[1086,1256,1155],{"class":1096},[1086,1258,1158],{"class":1096},[1086,1260,1161],{"class":1096},[1086,1262,1164],{"class":1096},[1086,1264,1167],{"class":1096},[1114,1266,1268],{"id":1267},"configuration","Configuration",[976,1270,1271,1272,1275],{},"Update your ",[1036,1273,1274],{},"nuxt.config.ts"," to register the modules:",[1277,1278,1279],"code-tree-intersection",{},[1077,1280,1284],{"className":1281,"code":1282,"filename":1274,"language":1283,"meta":1082,"style":1082},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: [\n    '@nuxt\u002Fui',\n    '@nuxtjs\u002Fmdc',\n    '@nuxthub\u002Fcore'\n  ],\n\n  hub: {\n    db: 'sqlite'\n  },\n\n  css: ['~\u002Fassets\u002Fcss\u002Fmain.css'],\n\n  mdc: {\n    headings: {\n      anchorLinks: false \u002F\u002F Disable anchor links in AI responses\n    }\n  },\n})\n","ts",[1036,1285,1286,1306,1318,1333,1345,1356,1364,1370,1381,1397,1403,1408,1431,1436,1446,1456,1472,1478,1483],{"__ignoreMap":1082},[1086,1287,1288,1292,1295,1298,1302],{"class":1088,"line":1089},[1086,1289,1291],{"class":1290},"s7zQu","export",[1086,1293,1294],{"class":1290}," default",[1086,1296,1297],{"class":1109}," defineNuxtConfig",[1086,1299,1301],{"class":1300},"sTEyZ","(",[1086,1303,1305],{"class":1304},"sMK4o","{\n",[1086,1307,1308,1312,1315],{"class":1088,"line":1106},[1086,1309,1311],{"class":1310},"swJcz","  modules",[1086,1313,1314],{"class":1304},":",[1086,1316,1317],{"class":1300}," [\n",[1086,1319,1321,1324,1327,1330],{"class":1088,"line":1320},3,[1086,1322,1323],{"class":1304},"    '",[1086,1325,1326],{"class":1096},"@nuxt\u002Fui",[1086,1328,1329],{"class":1304},"'",[1086,1331,1332],{"class":1304},",\n",[1086,1334,1336,1338,1341,1343],{"class":1088,"line":1335},4,[1086,1337,1323],{"class":1304},[1086,1339,1340],{"class":1096},"@nuxtjs\u002Fmdc",[1086,1342,1329],{"class":1304},[1086,1344,1332],{"class":1304},[1086,1346,1348,1350,1353],{"class":1088,"line":1347},5,[1086,1349,1323],{"class":1304},[1086,1351,1352],{"class":1096},"@nuxthub\u002Fcore",[1086,1354,1355],{"class":1304},"'\n",[1086,1357,1359,1362],{"class":1088,"line":1358},6,[1086,1360,1361],{"class":1300},"  ]",[1086,1363,1332],{"class":1304},[1086,1365,1367],{"class":1088,"line":1366},7,[1086,1368,1369],{"emptyLinePlaceholder":21},"\n",[1086,1371,1373,1376,1378],{"class":1088,"line":1372},8,[1086,1374,1375],{"class":1310},"  hub",[1086,1377,1314],{"class":1304},[1086,1379,1380],{"class":1304}," {\n",[1086,1382,1384,1387,1389,1392,1395],{"class":1088,"line":1383},9,[1086,1385,1386],{"class":1310},"    db",[1086,1388,1314],{"class":1304},[1086,1390,1391],{"class":1304}," '",[1086,1393,1394],{"class":1096},"sqlite",[1086,1396,1355],{"class":1304},[1086,1398,1400],{"class":1088,"line":1399},10,[1086,1401,1402],{"class":1304},"  },\n",[1086,1404,1406],{"class":1088,"line":1405},11,[1086,1407,1369],{"emptyLinePlaceholder":21},[1086,1409,1411,1414,1416,1419,1421,1424,1426,1429],{"class":1088,"line":1410},12,[1086,1412,1413],{"class":1310},"  css",[1086,1415,1314],{"class":1304},[1086,1417,1418],{"class":1300}," [",[1086,1420,1329],{"class":1304},[1086,1422,1423],{"class":1096},"~\u002Fassets\u002Fcss\u002Fmain.css",[1086,1425,1329],{"class":1304},[1086,1427,1428],{"class":1300},"]",[1086,1430,1332],{"class":1304},[1086,1432,1434],{"class":1088,"line":1433},13,[1086,1435,1369],{"emptyLinePlaceholder":21},[1086,1437,1439,1442,1444],{"class":1088,"line":1438},14,[1086,1440,1441],{"class":1310},"  mdc",[1086,1443,1314],{"class":1304},[1086,1445,1380],{"class":1304},[1086,1447,1449,1452,1454],{"class":1088,"line":1448},15,[1086,1450,1451],{"class":1310},"    headings",[1086,1453,1314],{"class":1304},[1086,1455,1380],{"class":1304},[1086,1457,1459,1462,1464,1468],{"class":1088,"line":1458},16,[1086,1460,1461],{"class":1310},"      anchorLinks",[1086,1463,1314],{"class":1304},[1086,1465,1467],{"class":1466},"sfNiH"," false",[1086,1469,1471],{"class":1470},"sHwdD"," \u002F\u002F Disable anchor links in AI responses\n",[1086,1473,1475],{"class":1088,"line":1474},17,[1086,1476,1477],{"class":1304},"    }\n",[1086,1479,1481],{"class":1088,"line":1480},18,[1086,1482,1402],{"class":1304},[1086,1484,1486,1489],{"class":1088,"line":1485},19,[1086,1487,1488],{"class":1304},"}",[1086,1490,1491],{"class":1300},")\n",[976,1493,1494],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1277,1496,1497],{},[1077,1498,1503],{"className":1499,"code":1500,"filename":1501,"language":1502,"meta":1082,"style":1082},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@import \"tailwindcss\";\n@import \"@nuxt\u002Fui\";\n","app\u002Fassets\u002Fcss\u002Fmain.css","css",[1036,1504,1505,1522],{"__ignoreMap":1082},[1086,1506,1507,1510,1513,1516,1519],{"class":1088,"line":1089},[1086,1508,1509],{"class":1290},"@import",[1086,1511,1512],{"class":1304}," \"",[1086,1514,1515],{"class":1096},"tailwindcss",[1086,1517,1518],{"class":1304},"\"",[1086,1520,1521],{"class":1304},";\n",[1086,1523,1524,1526,1528,1530,1532],{"class":1088,"line":1106},[1086,1525,1509],{"class":1290},[1086,1527,1512],{"class":1304},[1086,1529,1326],{"class":1096},[1086,1531,1518],{"class":1304},[1086,1533,1521],{"class":1304},[1114,1535,1537],{"id":1536},"setting-up-the-app","Setting up the app",[976,1539,1540,1541,1544],{},"Nuxt UI requires wrapping your app with ",[1036,1542,1543],{},"UApp"," for modals, toasts, and overlays to work properly:",[1277,1546,1547],{},[1077,1548,1553],{"className":1549,"code":1550,"filename":1551,"highlights":1552,"language":34,"meta":1082,"style":1082},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n  \u003CUApp>\n    \u003CUDashboardGroup unit=\"rem\">\n      \u003CNuxtPage \u002F>\n    \u003C\u002FUDashboardGroup>\n  \u003C\u002FUApp>\n\u003C\u002Ftemplate>\n","app\u002Fapp.vue",[1106,1358],[1036,1554,1555,1566,1577,1601,1612,1621,1631],{"__ignoreMap":1082},[1086,1556,1557,1560,1563],{"class":1088,"line":1089},[1086,1558,1559],{"class":1304},"\u003C",[1086,1561,1562],{"class":1310},"template",[1086,1564,1565],{"class":1304},">\n",[1086,1567,1570,1573,1575],{"class":1568,"line":1106},[1088,1569],"highlight",[1086,1571,1572],{"class":1304},"  \u003C",[1086,1574,1543],{"class":1310},[1086,1576,1565],{"class":1304},[1086,1578,1579,1582,1585,1589,1592,1594,1597,1599],{"class":1088,"line":1320},[1086,1580,1581],{"class":1304},"    \u003C",[1086,1583,1584],{"class":1310},"UDashboardGroup",[1086,1586,1588],{"class":1587},"spNyl"," unit",[1086,1590,1591],{"class":1304},"=",[1086,1593,1518],{"class":1304},[1086,1595,1596],{"class":1096},"rem",[1086,1598,1518],{"class":1304},[1086,1600,1565],{"class":1304},[1086,1602,1603,1606,1609],{"class":1088,"line":1335},[1086,1604,1605],{"class":1304},"      \u003C",[1086,1607,1608],{"class":1310},"NuxtPage",[1086,1610,1611],{"class":1304}," \u002F>\n",[1086,1613,1614,1617,1619],{"class":1088,"line":1347},[1086,1615,1616],{"class":1304},"    \u003C\u002F",[1086,1618,1584],{"class":1310},[1086,1620,1565],{"class":1304},[1086,1622,1624,1627,1629],{"class":1623,"line":1358},[1088,1569],[1086,1625,1626],{"class":1304},"  \u003C\u002F",[1086,1628,1543],{"class":1310},[1086,1630,1565],{"class":1304},[1086,1632,1633,1636,1638],{"class":1088,"line":1366},[1086,1634,1635],{"class":1304},"\u003C\u002F",[1086,1637,1562],{"class":1310},[1086,1639,1565],{"class":1304},[976,1641,1642,1643,1646],{},"Create a ",[1036,1644,1645],{},".env"," file with your AI Gateway API key:",[1277,1648,1649],{},[1077,1650,1652],{"className":1079,"code":1651,"filename":1645,"language":1081,"meta":1082,"style":1082},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1036,1653,1654],{"__ignoreMap":1082},[1086,1655,1656,1659,1661],{"class":1088,"line":1089},[1086,1657,1658],{"class":1300},"AI_GATEWAY_API_KEY",[1086,1660,1591],{"class":1304},[1086,1662,1663],{"class":1096},"your-api-key-here\n",[1665,1666,1667],"note",{},[976,1668,1669,1670,1673],{},"With ",[1030,1671,1067],{"href":1065,"rel":1672},[1034],", you don't need individual API keys for OpenAI, Anthropic, or Google. The AI Gateway provides a unified API to access hundreds of models through a single endpoint.",[1114,1675,1677],{"id":1676},"setting-up-the-database","Setting up the database",[976,1679,1680,1685,1686,1691],{},[1030,1681,1684],{"href":1682,"rel":1683},"https:\u002F\u002Fhub.nuxt.com",[1034],"NuxtHub"," provides a zero-config database powered by ",[1030,1687,1690],{"href":1688,"rel":1689},"https:\u002F\u002Form.drizzle.team",[1034],"Drizzle ORM",". Here is the schema for the chat application:",[1277,1693,1694],{},[1695,1696,1697],"code-collapse",{},[1077,1698,1701],{"className":1281,"code":1699,"filename":1700,"language":1283,"meta":1082,"style":1082},"import { sqliteTable, text, integer, index } from 'drizzle-orm\u002Fsqlite-core'\nimport { relations } from 'drizzle-orm'\n\nexport const chats = sqliteTable('chats', {\n  id: text().primaryKey().$defaultFn(() => crypto.randomUUID()),\n  title: text(),\n  createdAt: integer({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date())\n})\n\nexport const chatsRelations = relations(chats, ({ many }) => ({\n  messages: many(messages)\n}))\n\nexport const messages = sqliteTable('messages', {\n  id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),\n  chatId: text('chat_id').notNull().references(() => chats.id, { onDelete: 'cascade' }),\n  role: text('role', { enum: ['user', 'assistant', 'system'] }).notNull(),\n  parts: text('parts', { mode: 'json' }),\n  createdAt: integer({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n}, table => [\n  index('messages_chat_id_idx').on(table.chatId)\n])\n\nexport const messagesRelations = relations(messages, ({ one }) => ({\n  chat: one(chats, {\n    fields: [messages.chatId],\n    references: [chats.id]\n  })\n}))\n","server\u002Fdb\u002Fschema.ts",[1036,1702,1703,1743,1763,1767,1794,1839,1852,1909,1915,1919,1954,1966,1973,1977,2003,2048,2114,2183,2222,2272,2285,2315,2321,2326,2358,2374,2392,2408,2416],{"__ignoreMap":1082},[1086,1704,1705,1708,1711,1714,1717,1720,1722,1725,1727,1730,1733,1736,1738,1741],{"class":1088,"line":1089},[1086,1706,1707],{"class":1290},"import",[1086,1709,1710],{"class":1304}," {",[1086,1712,1713],{"class":1300}," sqliteTable",[1086,1715,1716],{"class":1304},",",[1086,1718,1719],{"class":1300}," text",[1086,1721,1716],{"class":1304},[1086,1723,1724],{"class":1300}," integer",[1086,1726,1716],{"class":1304},[1086,1728,1729],{"class":1300}," index",[1086,1731,1732],{"class":1304}," }",[1086,1734,1735],{"class":1290}," from",[1086,1737,1391],{"class":1304},[1086,1739,1740],{"class":1096},"drizzle-orm\u002Fsqlite-core",[1086,1742,1355],{"class":1304},[1086,1744,1745,1747,1749,1752,1754,1756,1758,1761],{"class":1088,"line":1106},[1086,1746,1707],{"class":1290},[1086,1748,1710],{"class":1304},[1086,1750,1751],{"class":1300}," relations",[1086,1753,1732],{"class":1304},[1086,1755,1735],{"class":1290},[1086,1757,1391],{"class":1304},[1086,1759,1760],{"class":1096},"drizzle-orm",[1086,1762,1355],{"class":1304},[1086,1764,1765],{"class":1088,"line":1320},[1086,1766,1369],{"emptyLinePlaceholder":21},[1086,1768,1769,1771,1774,1777,1779,1781,1783,1785,1788,1790,1792],{"class":1088,"line":1335},[1086,1770,1291],{"class":1290},[1086,1772,1773],{"class":1587}," const",[1086,1775,1776],{"class":1300}," chats ",[1086,1778,1591],{"class":1304},[1086,1780,1713],{"class":1109},[1086,1782,1301],{"class":1300},[1086,1784,1329],{"class":1304},[1086,1786,1787],{"class":1096},"chats",[1086,1789,1329],{"class":1304},[1086,1791,1716],{"class":1304},[1086,1793,1380],{"class":1304},[1086,1795,1796,1799,1801,1803,1806,1809,1812,1814,1816,1819,1821,1823,1826,1829,1831,1834,1837],{"class":1088,"line":1347},[1086,1797,1798],{"class":1310},"  id",[1086,1800,1314],{"class":1304},[1086,1802,1719],{"class":1109},[1086,1804,1805],{"class":1300},"()",[1086,1807,1808],{"class":1304},".",[1086,1810,1811],{"class":1109},"primaryKey",[1086,1813,1805],{"class":1300},[1086,1815,1808],{"class":1304},[1086,1817,1818],{"class":1109},"$defaultFn",[1086,1820,1301],{"class":1300},[1086,1822,1805],{"class":1304},[1086,1824,1825],{"class":1587}," =>",[1086,1827,1828],{"class":1300}," crypto",[1086,1830,1808],{"class":1304},[1086,1832,1833],{"class":1109},"randomUUID",[1086,1835,1836],{"class":1300},"())",[1086,1838,1332],{"class":1304},[1086,1840,1841,1844,1846,1848,1850],{"class":1088,"line":1358},[1086,1842,1843],{"class":1310},"  title",[1086,1845,1314],{"class":1304},[1086,1847,1719],{"class":1109},[1086,1849,1805],{"class":1300},[1086,1851,1332],{"class":1304},[1086,1853,1854,1857,1859,1861,1863,1866,1869,1871,1873,1876,1878,1880,1883,1885,1888,1890,1892,1894,1896,1898,1900,1903,1906],{"class":1088,"line":1366},[1086,1855,1856],{"class":1310},"  createdAt",[1086,1858,1314],{"class":1304},[1086,1860,1724],{"class":1109},[1086,1862,1301],{"class":1300},[1086,1864,1865],{"class":1304},"{",[1086,1867,1868],{"class":1310}," mode",[1086,1870,1314],{"class":1304},[1086,1872,1391],{"class":1304},[1086,1874,1875],{"class":1096},"timestamp",[1086,1877,1329],{"class":1304},[1086,1879,1732],{"class":1304},[1086,1881,1882],{"class":1300},")",[1086,1884,1808],{"class":1304},[1086,1886,1887],{"class":1109},"notNull",[1086,1889,1805],{"class":1300},[1086,1891,1808],{"class":1304},[1086,1893,1818],{"class":1109},[1086,1895,1301],{"class":1300},[1086,1897,1805],{"class":1304},[1086,1899,1825],{"class":1587},[1086,1901,1902],{"class":1304}," new",[1086,1904,1905],{"class":1109}," Date",[1086,1907,1908],{"class":1300},"())\n",[1086,1910,1911,1913],{"class":1088,"line":1372},[1086,1912,1488],{"class":1304},[1086,1914,1491],{"class":1300},[1086,1916,1917],{"class":1088,"line":1383},[1086,1918,1369],{"emptyLinePlaceholder":21},[1086,1920,1921,1923,1925,1928,1930,1932,1935,1937,1940,1944,1947,1949,1952],{"class":1088,"line":1399},[1086,1922,1291],{"class":1290},[1086,1924,1773],{"class":1587},[1086,1926,1927],{"class":1300}," chatsRelations ",[1086,1929,1591],{"class":1304},[1086,1931,1751],{"class":1109},[1086,1933,1934],{"class":1300},"(chats",[1086,1936,1716],{"class":1304},[1086,1938,1939],{"class":1304}," ({",[1086,1941,1943],{"class":1942},"sHdIc"," many",[1086,1945,1946],{"class":1304}," })",[1086,1948,1825],{"class":1587},[1086,1950,1951],{"class":1300}," (",[1086,1953,1305],{"class":1304},[1086,1955,1956,1959,1961,1963],{"class":1088,"line":1405},[1086,1957,1958],{"class":1310},"  messages",[1086,1960,1314],{"class":1304},[1086,1962,1943],{"class":1109},[1086,1964,1965],{"class":1300},"(messages)\n",[1086,1967,1968,1970],{"class":1088,"line":1410},[1086,1969,1488],{"class":1304},[1086,1971,1972],{"class":1300},"))\n",[1086,1974,1975],{"class":1088,"line":1433},[1086,1976,1369],{"emptyLinePlaceholder":21},[1086,1978,1979,1981,1983,1986,1988,1990,1992,1994,1997,1999,2001],{"class":1088,"line":1438},[1086,1980,1291],{"class":1290},[1086,1982,1773],{"class":1587},[1086,1984,1985],{"class":1300}," messages ",[1086,1987,1591],{"class":1304},[1086,1989,1713],{"class":1109},[1086,1991,1301],{"class":1300},[1086,1993,1329],{"class":1304},[1086,1995,1996],{"class":1096},"messages",[1086,1998,1329],{"class":1304},[1086,2000,1716],{"class":1304},[1086,2002,1380],{"class":1304},[1086,2004,2005,2007,2009,2011,2013,2015,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046],{"class":1088,"line":1448},[1086,2006,1798],{"class":1310},[1086,2008,1314],{"class":1304},[1086,2010,1719],{"class":1109},[1086,2012,1301],{"class":1300},[1086,2014,1329],{"class":1304},[1086,2016,2017],{"class":1096},"id",[1086,2019,1329],{"class":1304},[1086,2021,1882],{"class":1300},[1086,2023,1808],{"class":1304},[1086,2025,1811],{"class":1109},[1086,2027,1805],{"class":1300},[1086,2029,1808],{"class":1304},[1086,2031,1818],{"class":1109},[1086,2033,1301],{"class":1300},[1086,2035,1805],{"class":1304},[1086,2037,1825],{"class":1587},[1086,2039,1828],{"class":1300},[1086,2041,1808],{"class":1304},[1086,2043,1833],{"class":1109},[1086,2045,1836],{"class":1300},[1086,2047,1332],{"class":1304},[1086,2049,2050,2053,2055,2057,2059,2061,2064,2066,2068,2070,2072,2074,2076,2079,2081,2083,2085,2088,2090,2092,2094,2096,2099,2101,2103,2106,2108,2110,2112],{"class":1088,"line":1458},[1086,2051,2052],{"class":1310},"  chatId",[1086,2054,1314],{"class":1304},[1086,2056,1719],{"class":1109},[1086,2058,1301],{"class":1300},[1086,2060,1329],{"class":1304},[1086,2062,2063],{"class":1096},"chat_id",[1086,2065,1329],{"class":1304},[1086,2067,1882],{"class":1300},[1086,2069,1808],{"class":1304},[1086,2071,1887],{"class":1109},[1086,2073,1805],{"class":1300},[1086,2075,1808],{"class":1304},[1086,2077,2078],{"class":1109},"references",[1086,2080,1301],{"class":1300},[1086,2082,1805],{"class":1304},[1086,2084,1825],{"class":1587},[1086,2086,2087],{"class":1300}," chats",[1086,2089,1808],{"class":1304},[1086,2091,2017],{"class":1300},[1086,2093,1716],{"class":1304},[1086,2095,1710],{"class":1304},[1086,2097,2098],{"class":1310}," onDelete",[1086,2100,1314],{"class":1304},[1086,2102,1391],{"class":1304},[1086,2104,2105],{"class":1096},"cascade",[1086,2107,1329],{"class":1304},[1086,2109,1732],{"class":1304},[1086,2111,1882],{"class":1300},[1086,2113,1332],{"class":1304},[1086,2115,2116,2119,2121,2123,2125,2127,2130,2132,2134,2136,2139,2141,2143,2145,2148,2150,2152,2154,2157,2159,2161,2163,2166,2168,2171,2173,2175,2177,2179,2181],{"class":1088,"line":1474},[1086,2117,2118],{"class":1310},"  role",[1086,2120,1314],{"class":1304},[1086,2122,1719],{"class":1109},[1086,2124,1301],{"class":1300},[1086,2126,1329],{"class":1304},[1086,2128,2129],{"class":1096},"role",[1086,2131,1329],{"class":1304},[1086,2133,1716],{"class":1304},[1086,2135,1710],{"class":1304},[1086,2137,2138],{"class":1310}," enum",[1086,2140,1314],{"class":1304},[1086,2142,1418],{"class":1300},[1086,2144,1329],{"class":1304},[1086,2146,2147],{"class":1096},"user",[1086,2149,1329],{"class":1304},[1086,2151,1716],{"class":1304},[1086,2153,1391],{"class":1304},[1086,2155,2156],{"class":1096},"assistant",[1086,2158,1329],{"class":1304},[1086,2160,1716],{"class":1304},[1086,2162,1391],{"class":1304},[1086,2164,2165],{"class":1096},"system",[1086,2167,1329],{"class":1304},[1086,2169,2170],{"class":1300},"] ",[1086,2172,1488],{"class":1304},[1086,2174,1882],{"class":1300},[1086,2176,1808],{"class":1304},[1086,2178,1887],{"class":1109},[1086,2180,1805],{"class":1300},[1086,2182,1332],{"class":1304},[1086,2184,2185,2188,2190,2192,2194,2196,2199,2201,2203,2205,2207,2209,2211,2214,2216,2218,2220],{"class":1088,"line":1480},[1086,2186,2187],{"class":1310},"  parts",[1086,2189,1314],{"class":1304},[1086,2191,1719],{"class":1109},[1086,2193,1301],{"class":1300},[1086,2195,1329],{"class":1304},[1086,2197,2198],{"class":1096},"parts",[1086,2200,1329],{"class":1304},[1086,2202,1716],{"class":1304},[1086,2204,1710],{"class":1304},[1086,2206,1868],{"class":1310},[1086,2208,1314],{"class":1304},[1086,2210,1391],{"class":1304},[1086,2212,2213],{"class":1096},"json",[1086,2215,1329],{"class":1304},[1086,2217,1732],{"class":1304},[1086,2219,1882],{"class":1300},[1086,2221,1332],{"class":1304},[1086,2223,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270],{"class":1088,"line":1485},[1086,2225,1856],{"class":1310},[1086,2227,1314],{"class":1304},[1086,2229,1724],{"class":1109},[1086,2231,1301],{"class":1300},[1086,2233,1865],{"class":1304},[1086,2235,1868],{"class":1310},[1086,2237,1314],{"class":1304},[1086,2239,1391],{"class":1304},[1086,2241,1875],{"class":1096},[1086,2243,1329],{"class":1304},[1086,2245,1732],{"class":1304},[1086,2247,1882],{"class":1300},[1086,2249,1808],{"class":1304},[1086,2251,1887],{"class":1109},[1086,2253,1805],{"class":1300},[1086,2255,1808],{"class":1304},[1086,2257,1818],{"class":1109},[1086,2259,1301],{"class":1300},[1086,2261,1805],{"class":1304},[1086,2263,1825],{"class":1587},[1086,2265,1902],{"class":1304},[1086,2267,1905],{"class":1109},[1086,2269,1836],{"class":1300},[1086,2271,1332],{"class":1304},[1086,2273,2275,2278,2281,2283],{"class":1088,"line":2274},20,[1086,2276,2277],{"class":1304},"},",[1086,2279,2280],{"class":1942}," table",[1086,2282,1825],{"class":1587},[1086,2284,1317],{"class":1300},[1086,2286,2288,2291,2293,2295,2298,2300,2302,2304,2307,2310,2312],{"class":1088,"line":2287},21,[1086,2289,2290],{"class":1109},"  index",[1086,2292,1301],{"class":1300},[1086,2294,1329],{"class":1304},[1086,2296,2297],{"class":1096},"messages_chat_id_idx",[1086,2299,1329],{"class":1304},[1086,2301,1882],{"class":1300},[1086,2303,1808],{"class":1304},[1086,2305,2306],{"class":1109},"on",[1086,2308,2309],{"class":1300},"(table",[1086,2311,1808],{"class":1304},[1086,2313,2314],{"class":1300},"chatId)\n",[1086,2316,2318],{"class":1088,"line":2317},22,[1086,2319,2320],{"class":1300},"])\n",[1086,2322,2324],{"class":1088,"line":2323},23,[1086,2325,1369],{"emptyLinePlaceholder":21},[1086,2327,2329,2331,2333,2336,2338,2340,2343,2345,2347,2350,2352,2354,2356],{"class":1088,"line":2328},24,[1086,2330,1291],{"class":1290},[1086,2332,1773],{"class":1587},[1086,2334,2335],{"class":1300}," messagesRelations ",[1086,2337,1591],{"class":1304},[1086,2339,1751],{"class":1109},[1086,2341,2342],{"class":1300},"(messages",[1086,2344,1716],{"class":1304},[1086,2346,1939],{"class":1304},[1086,2348,2349],{"class":1942}," one",[1086,2351,1946],{"class":1304},[1086,2353,1825],{"class":1587},[1086,2355,1951],{"class":1300},[1086,2357,1305],{"class":1304},[1086,2359,2361,2364,2366,2368,2370,2372],{"class":1088,"line":2360},25,[1086,2362,2363],{"class":1310},"  chat",[1086,2365,1314],{"class":1304},[1086,2367,2349],{"class":1109},[1086,2369,1934],{"class":1300},[1086,2371,1716],{"class":1304},[1086,2373,1380],{"class":1304},[1086,2375,2377,2380,2382,2385,2387,2390],{"class":1088,"line":2376},26,[1086,2378,2379],{"class":1310},"    fields",[1086,2381,1314],{"class":1304},[1086,2383,2384],{"class":1300}," [messages",[1086,2386,1808],{"class":1304},[1086,2388,2389],{"class":1300},"chatId]",[1086,2391,1332],{"class":1304},[1086,2393,2395,2398,2400,2403,2405],{"class":1088,"line":2394},27,[1086,2396,2397],{"class":1310},"    references",[1086,2399,1314],{"class":1304},[1086,2401,2402],{"class":1300}," [chats",[1086,2404,1808],{"class":1304},[1086,2406,2407],{"class":1300},"id]\n",[1086,2409,2411,2414],{"class":1088,"line":2410},28,[1086,2412,2413],{"class":1304},"  }",[1086,2415,1491],{"class":1300},[1086,2417,2419,2421],{"class":1088,"line":2418},29,[1086,2420,1488],{"class":1304},[1086,2422,1972],{"class":1300},[976,2424,2425],{},"Generate the database migrations from your schema:",[1077,2427,2429],{"className":1079,"code":2428,"language":1081,"meta":1082,"style":1082},"npx nuxt db generate\n",[1036,2430,2431],{"__ignoreMap":1082},[1086,2432,2433,2435,2438,2441],{"class":1088,"line":1089},[1086,2434,1093],{"class":1092},[1086,2436,2437],{"class":1096}," nuxt",[1086,2439,2440],{"class":1096}," db",[1086,2442,2443],{"class":1096}," generate\n",[2445,2446,2447],"tip",{},[976,2448,2449,2450,2453],{},"Migrations are automatically applied when you start the development server with ",[1036,2451,2452],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[980,2455,2457],{"id":2456},"building-the-backend","Building the backend",[976,2459,2460,2461,1808],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1030,2462,2465],{"href":2463,"rel":2464},"https:\u002F\u002Fnitro.build",[1034],"Nitro",[1114,2467,2469],{"id":2468},"creating-a-chat","Creating a chat",[976,2471,2472,2473,2480],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1030,2474,2477],{"href":2475,"rel":2476},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1034],[1036,2478,2479],{},"UIMessage"," type from the AI SDK:",[1277,2482,2483],{},[1077,2484,2487],{"className":1281,"code":2485,"filename":2486,"language":1283,"meta":1082,"style":1082},"import { defineEventHandler, readValidatedBody } from 'h3'\nimport type { UIMessage } from 'ai'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\n\nexport default defineEventHandler(async (event) => {\n  const { message } = await readValidatedBody(event, z.object({\n    message: z.custom\u003CUIMessage>()\n  }).parse)\n\n  \u002F\u002F Create a new chat\n  const [chat] = await db.insert(schema.chats).values({}).returning()\n\n  \u002F\u002F Save the first user message\n  await db.insert(schema.messages).values({\n    chatId: chat.id,\n    role: 'user',\n    parts: message.parts\n  })\n\n  return chat\n})\n","server\u002Fapi\u002Fchats.post.ts",[1036,2488,2489,2513,2536,2560,2580,2584,2608,2645,2669,2682,2686,2691,2742,2746,2751,2780,2796,2811,2825,2831,2835,2843],{"__ignoreMap":1082},[1086,2490,2491,2493,2495,2498,2500,2503,2505,2507,2509,2511],{"class":1088,"line":1089},[1086,2492,1707],{"class":1290},[1086,2494,1710],{"class":1304},[1086,2496,2497],{"class":1300}," defineEventHandler",[1086,2499,1716],{"class":1304},[1086,2501,2502],{"class":1300}," readValidatedBody",[1086,2504,1732],{"class":1304},[1086,2506,1735],{"class":1290},[1086,2508,1391],{"class":1304},[1086,2510,1114],{"class":1096},[1086,2512,1355],{"class":1304},[1086,2514,2515,2517,2520,2522,2525,2527,2529,2531,2534],{"class":1088,"line":1106},[1086,2516,1707],{"class":1290},[1086,2518,2519],{"class":1290}," type",[1086,2521,1710],{"class":1304},[1086,2523,2524],{"class":1300}," UIMessage",[1086,2526,1732],{"class":1304},[1086,2528,1735],{"class":1290},[1086,2530,1391],{"class":1304},[1086,2532,2533],{"class":1096},"ai",[1086,2535,1355],{"class":1304},[1086,2537,2538,2540,2542,2544,2546,2549,2551,2553,2555,2558],{"class":1088,"line":1320},[1086,2539,1707],{"class":1290},[1086,2541,1710],{"class":1304},[1086,2543,2440],{"class":1300},[1086,2545,1716],{"class":1304},[1086,2547,2548],{"class":1300}," schema",[1086,2550,1732],{"class":1304},[1086,2552,1735],{"class":1290},[1086,2554,1391],{"class":1304},[1086,2556,2557],{"class":1096},"hub:db",[1086,2559,1355],{"class":1304},[1086,2561,2562,2564,2566,2569,2571,2573,2575,2578],{"class":1088,"line":1335},[1086,2563,1707],{"class":1290},[1086,2565,1710],{"class":1304},[1086,2567,2568],{"class":1300}," z",[1086,2570,1732],{"class":1304},[1086,2572,1735],{"class":1290},[1086,2574,1391],{"class":1304},[1086,2576,2577],{"class":1096},"zod",[1086,2579,1355],{"class":1304},[1086,2581,2582],{"class":1088,"line":1347},[1086,2583,1369],{"emptyLinePlaceholder":21},[1086,2585,2586,2588,2590,2592,2594,2597,2599,2602,2604,2606],{"class":1088,"line":1358},[1086,2587,1291],{"class":1290},[1086,2589,1294],{"class":1290},[1086,2591,2497],{"class":1109},[1086,2593,1301],{"class":1300},[1086,2595,2596],{"class":1587},"async",[1086,2598,1951],{"class":1304},[1086,2600,2601],{"class":1942},"event",[1086,2603,1882],{"class":1304},[1086,2605,1825],{"class":1587},[1086,2607,1380],{"class":1304},[1086,2609,2610,2613,2615,2618,2620,2623,2626,2628,2630,2632,2634,2636,2638,2641,2643],{"class":1088,"line":1366},[1086,2611,2612],{"class":1587},"  const",[1086,2614,1710],{"class":1304},[1086,2616,2617],{"class":1300}," message",[1086,2619,1732],{"class":1304},[1086,2621,2622],{"class":1304}," =",[1086,2624,2625],{"class":1290}," await",[1086,2627,2502],{"class":1109},[1086,2629,1301],{"class":1310},[1086,2631,2601],{"class":1300},[1086,2633,1716],{"class":1304},[1086,2635,2568],{"class":1300},[1086,2637,1808],{"class":1304},[1086,2639,2640],{"class":1109},"object",[1086,2642,1301],{"class":1310},[1086,2644,1305],{"class":1304},[1086,2646,2647,2650,2652,2654,2656,2659,2661,2663,2666],{"class":1088,"line":1372},[1086,2648,2649],{"class":1310},"    message",[1086,2651,1314],{"class":1304},[1086,2653,2568],{"class":1300},[1086,2655,1808],{"class":1304},[1086,2657,2658],{"class":1109},"custom",[1086,2660,1559],{"class":1304},[1086,2662,2479],{"class":1092},[1086,2664,2665],{"class":1304},">",[1086,2667,2668],{"class":1310},"()\n",[1086,2670,2671,2673,2675,2677,2680],{"class":1088,"line":1383},[1086,2672,2413],{"class":1304},[1086,2674,1882],{"class":1310},[1086,2676,1808],{"class":1304},[1086,2678,2679],{"class":1300},"parse",[1086,2681,1491],{"class":1310},[1086,2683,2684],{"class":1088,"line":1399},[1086,2685,1369],{"emptyLinePlaceholder":21},[1086,2687,2688],{"class":1088,"line":1405},[1086,2689,2690],{"class":1470},"  \u002F\u002F Create a new chat\n",[1086,2692,2693,2695,2697,2699,2701,2703,2705,2707,2709,2712,2714,2717,2719,2721,2723,2725,2728,2730,2733,2735,2737,2740],{"class":1088,"line":1410},[1086,2694,2612],{"class":1587},[1086,2696,1418],{"class":1304},[1086,2698,262],{"class":1300},[1086,2700,1428],{"class":1304},[1086,2702,2622],{"class":1304},[1086,2704,2625],{"class":1290},[1086,2706,2440],{"class":1300},[1086,2708,1808],{"class":1304},[1086,2710,2711],{"class":1109},"insert",[1086,2713,1301],{"class":1310},[1086,2715,2716],{"class":1300},"schema",[1086,2718,1808],{"class":1304},[1086,2720,1787],{"class":1300},[1086,2722,1882],{"class":1310},[1086,2724,1808],{"class":1304},[1086,2726,2727],{"class":1109},"values",[1086,2729,1301],{"class":1310},[1086,2731,2732],{"class":1304},"{}",[1086,2734,1882],{"class":1310},[1086,2736,1808],{"class":1304},[1086,2738,2739],{"class":1109},"returning",[1086,2741,2668],{"class":1310},[1086,2743,2744],{"class":1088,"line":1433},[1086,2745,1369],{"emptyLinePlaceholder":21},[1086,2747,2748],{"class":1088,"line":1438},[1086,2749,2750],{"class":1470},"  \u002F\u002F Save the first user message\n",[1086,2752,2753,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778],{"class":1088,"line":1448},[1086,2754,2755],{"class":1290},"  await",[1086,2757,2440],{"class":1300},[1086,2759,1808],{"class":1304},[1086,2761,2711],{"class":1109},[1086,2763,1301],{"class":1310},[1086,2765,2716],{"class":1300},[1086,2767,1808],{"class":1304},[1086,2769,1996],{"class":1300},[1086,2771,1882],{"class":1310},[1086,2773,1808],{"class":1304},[1086,2775,2727],{"class":1109},[1086,2777,1301],{"class":1310},[1086,2779,1305],{"class":1304},[1086,2781,2782,2785,2787,2790,2792,2794],{"class":1088,"line":1458},[1086,2783,2784],{"class":1310},"    chatId",[1086,2786,1314],{"class":1304},[1086,2788,2789],{"class":1300}," chat",[1086,2791,1808],{"class":1304},[1086,2793,2017],{"class":1300},[1086,2795,1332],{"class":1304},[1086,2797,2798,2801,2803,2805,2807,2809],{"class":1088,"line":1474},[1086,2799,2800],{"class":1310},"    role",[1086,2802,1314],{"class":1304},[1086,2804,1391],{"class":1304},[1086,2806,2147],{"class":1096},[1086,2808,1329],{"class":1304},[1086,2810,1332],{"class":1304},[1086,2812,2813,2816,2818,2820,2822],{"class":1088,"line":1480},[1086,2814,2815],{"class":1310},"    parts",[1086,2817,1314],{"class":1304},[1086,2819,2617],{"class":1300},[1086,2821,1808],{"class":1304},[1086,2823,2824],{"class":1300},"parts\n",[1086,2826,2827,2829],{"class":1088,"line":1485},[1086,2828,2413],{"class":1304},[1086,2830,1491],{"class":1310},[1086,2832,2833],{"class":1088,"line":2274},[1086,2834,1369],{"emptyLinePlaceholder":21},[1086,2836,2837,2840],{"class":1088,"line":2287},[1086,2838,2839],{"class":1290},"  return",[1086,2841,2842],{"class":1300}," chat\n",[1086,2844,2845,2847],{"class":1088,"line":2317},[1086,2846,1488],{"class":1304},[1086,2848,1491],{"class":1300},[1114,2850,2852],{"id":2851},"streaming-ai-responses","Streaming AI responses",[976,2854,2855,2856,2863,2864,2871,2872,2879],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1030,2857,2860],{"href":2858,"rel":2859},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1034],[1036,2861,2862],{},"streamText",", ",[1030,2865,2868],{"href":2866,"rel":2867},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1034],[1036,2869,2870],{},"createUIMessageStream",", and ",[1030,2873,2876],{"href":2874,"rel":2875},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1034],[1036,2877,2878],{},"createUIMessageStreamResponse"," from the AI SDK:",[1277,2881,2882],{},[1695,2883,2884],{},[1077,2885,2888],{"className":1281,"code":2886,"filename":2887,"language":1283,"meta":1082,"style":1082},"import { createError, defineEventHandler, getValidatedRouterParams, readValidatedBody } from 'h3'\nimport { eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\nimport {\n  convertToModelMessages,\n  createUIMessageStream,\n  createUIMessageStreamResponse,\n  generateText,\n  streamText\n} from 'ai'\nimport type { UIMessage } from 'ai'\n\nconst MODELS = [\n  { value: 'openai\u002Fgpt-5-nano', label: 'GPT-5 Nano' },\n  { value: 'anthropic\u002Fclaude-haiku-4.5', label: 'Claude Haiku 4.5' },\n  { value: 'google\u002Fgemini-3-flash', label: 'Gemini 3 Flash' }\n]\n\nexport default defineEventHandler(async (event) => {\n  const { id } = await getValidatedRouterParams(event, z.object({\n    id: z.string()\n  }).parse)\n\n  const { model, messages } = await readValidatedBody(event, z.object({\n    model: z.string().refine(value => MODELS.some(m => m.value === value), {\n      message: 'Invalid model'\n    }),\n    messages: z.array(z.custom\u003CUIMessage>())\n  }).parse)\n\n  \u002F\u002F Fetch the chat from the database\n  const chat = await db.query.chats.findFirst({\n    where: (chat, { eq }) => eq(chat.id, id as string)\n  })\n\n  if (!chat) {\n    throw createError({ statusCode: 404, statusMessage: 'Chat not found' })\n  }\n\n  \u002F\u002F Generate a title for the chat if it doesn't have one\n  if (!chat.title) {\n    const { text: title } = await generateText({\n      model: 'anthropic\u002Fclaude-haiku-4.5',\n      system: `Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.`,\n      prompt: JSON.stringify(messages[0])\n    })\n\n    await db.update(schema.chats).set({ title }).where(eq(schema.chats.id, id))\n  }\n\n  \u002F\u002F Save the user message if it's a follow-up\n  const lastMessage = messages[messages.length - 1]\n  if (lastMessage?.role === 'user' && messages.length > 1) {\n    await db.insert(schema.messages).values({\n      chatId: id,\n      role: 'user',\n      parts: lastMessage.parts\n    })\n  }\n\n  \u002F\u002F Create the streaming response\n  const stream = createUIMessageStream({\n    execute: async ({ writer }) => {\n      const result = streamText({\n        model,\n        system: `You are a helpful AI assistant. Be concise and friendly.`,\n        messages: await convertToModelMessages(messages),\n        providerOptions: {\n          anthropic: {\n            thinking: {\n              type: 'enabled',\n              budgetTokens: 2048\n            }\n          },\n          google: {\n            thinkingConfig: {\n              includeThoughts: true,\n              thinkingLevel: 'low'\n            }\n          },\n          openai: {\n            reasoningEffort: 'low',\n            reasoningSummary: 'detailed'\n          }\n        }\n      })\n\n      \u002F\u002F Notify the client that a title was generated\n      if (!chat.title) {\n        writer.write({\n          type: 'data-chat-title',\n          data: { message: 'Title generated' },\n          transient: true\n        })\n      }\n\n      writer.merge(result.toUIMessageStream())\n    },\n    onFinish: async ({ messages }) => {\n      \u002F\u002F Save the assistant's response to the database\n      await db.insert(schema.messages).values(messages.map(message => ({\n        chatId: chat.id,\n        role: message.role as 'user' | 'assistant',\n        parts: message.parts\n      })))\n    }\n  })\n\n  return createUIMessageStreamResponse({ stream })\n})\n","server\u002Fapi\u002Fchats\u002F[id].post.ts",[1036,2889,2890,2922,2941,2963,2981,2987,2994,3001,3008,3015,3020,3032,3052,3056,3068,3102,3132,3163,3168,3172,3194,3227,3243,3255,3259,3297,3357,3371,3380,3411,3424,3429,3435,3466,3510,3517,3522,3540,3579,3585,3590,3596,3616,3644,3660,3679,3707,3714,3719,3785,3790,3795,3801,3830,3871,3900,3912,3928,3942,3949,3954,3959,3965,3982,4004,4022,4030,4047,4068,4078,4088,4098,4115,4126,4132,4138,4148,4158,4171,4186,4191,4196,4206,4222,4237,4243,4249,4257,4262,4268,4288,4303,4320,4343,4354,4362,4368,4373,4396,4402,4422,4428,4474,4490,4523,4537,4545,4550,4557,4562,4580],{"__ignoreMap":1082},[1086,2891,2892,2894,2896,2899,2901,2903,2905,2908,2910,2912,2914,2916,2918,2920],{"class":1088,"line":1089},[1086,2893,1707],{"class":1290},[1086,2895,1710],{"class":1304},[1086,2897,2898],{"class":1300}," createError",[1086,2900,1716],{"class":1304},[1086,2902,2497],{"class":1300},[1086,2904,1716],{"class":1304},[1086,2906,2907],{"class":1300}," getValidatedRouterParams",[1086,2909,1716],{"class":1304},[1086,2911,2502],{"class":1300},[1086,2913,1732],{"class":1304},[1086,2915,1735],{"class":1290},[1086,2917,1391],{"class":1304},[1086,2919,1114],{"class":1096},[1086,2921,1355],{"class":1304},[1086,2923,2924,2926,2928,2931,2933,2935,2937,2939],{"class":1088,"line":1106},[1086,2925,1707],{"class":1290},[1086,2927,1710],{"class":1304},[1086,2929,2930],{"class":1300}," eq",[1086,2932,1732],{"class":1304},[1086,2934,1735],{"class":1290},[1086,2936,1391],{"class":1304},[1086,2938,1760],{"class":1096},[1086,2940,1355],{"class":1304},[1086,2942,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961],{"class":1088,"line":1320},[1086,2944,1707],{"class":1290},[1086,2946,1710],{"class":1304},[1086,2948,2440],{"class":1300},[1086,2950,1716],{"class":1304},[1086,2952,2548],{"class":1300},[1086,2954,1732],{"class":1304},[1086,2956,1735],{"class":1290},[1086,2958,1391],{"class":1304},[1086,2960,2557],{"class":1096},[1086,2962,1355],{"class":1304},[1086,2964,2965,2967,2969,2971,2973,2975,2977,2979],{"class":1088,"line":1335},[1086,2966,1707],{"class":1290},[1086,2968,1710],{"class":1304},[1086,2970,2568],{"class":1300},[1086,2972,1732],{"class":1304},[1086,2974,1735],{"class":1290},[1086,2976,1391],{"class":1304},[1086,2978,2577],{"class":1096},[1086,2980,1355],{"class":1304},[1086,2982,2983,2985],{"class":1088,"line":1347},[1086,2984,1707],{"class":1290},[1086,2986,1380],{"class":1304},[1086,2988,2989,2992],{"class":1088,"line":1358},[1086,2990,2991],{"class":1300},"  convertToModelMessages",[1086,2993,1332],{"class":1304},[1086,2995,2996,2999],{"class":1088,"line":1366},[1086,2997,2998],{"class":1300},"  createUIMessageStream",[1086,3000,1332],{"class":1304},[1086,3002,3003,3006],{"class":1088,"line":1372},[1086,3004,3005],{"class":1300},"  createUIMessageStreamResponse",[1086,3007,1332],{"class":1304},[1086,3009,3010,3013],{"class":1088,"line":1383},[1086,3011,3012],{"class":1300},"  generateText",[1086,3014,1332],{"class":1304},[1086,3016,3017],{"class":1088,"line":1399},[1086,3018,3019],{"class":1300},"  streamText\n",[1086,3021,3022,3024,3026,3028,3030],{"class":1088,"line":1405},[1086,3023,1488],{"class":1304},[1086,3025,1735],{"class":1290},[1086,3027,1391],{"class":1304},[1086,3029,2533],{"class":1096},[1086,3031,1355],{"class":1304},[1086,3033,3034,3036,3038,3040,3042,3044,3046,3048,3050],{"class":1088,"line":1410},[1086,3035,1707],{"class":1290},[1086,3037,2519],{"class":1290},[1086,3039,1710],{"class":1304},[1086,3041,2524],{"class":1300},[1086,3043,1732],{"class":1304},[1086,3045,1735],{"class":1290},[1086,3047,1391],{"class":1304},[1086,3049,2533],{"class":1096},[1086,3051,1355],{"class":1304},[1086,3053,3054],{"class":1088,"line":1433},[1086,3055,1369],{"emptyLinePlaceholder":21},[1086,3057,3058,3061,3064,3066],{"class":1088,"line":1438},[1086,3059,3060],{"class":1587},"const",[1086,3062,3063],{"class":1300}," MODELS ",[1086,3065,1591],{"class":1304},[1086,3067,1317],{"class":1300},[1086,3069,3070,3073,3076,3078,3080,3083,3085,3087,3090,3092,3094,3097,3099],{"class":1088,"line":1448},[1086,3071,3072],{"class":1304},"  {",[1086,3074,3075],{"class":1310}," value",[1086,3077,1314],{"class":1304},[1086,3079,1391],{"class":1304},[1086,3081,3082],{"class":1096},"openai\u002Fgpt-5-nano",[1086,3084,1329],{"class":1304},[1086,3086,1716],{"class":1304},[1086,3088,3089],{"class":1310}," label",[1086,3091,1314],{"class":1304},[1086,3093,1391],{"class":1304},[1086,3095,3096],{"class":1096},"GPT-5 Nano",[1086,3098,1329],{"class":1304},[1086,3100,3101],{"class":1304}," },\n",[1086,3103,3104,3106,3108,3110,3112,3115,3117,3119,3121,3123,3125,3128,3130],{"class":1088,"line":1458},[1086,3105,3072],{"class":1304},[1086,3107,3075],{"class":1310},[1086,3109,1314],{"class":1304},[1086,3111,1391],{"class":1304},[1086,3113,3114],{"class":1096},"anthropic\u002Fclaude-haiku-4.5",[1086,3116,1329],{"class":1304},[1086,3118,1716],{"class":1304},[1086,3120,3089],{"class":1310},[1086,3122,1314],{"class":1304},[1086,3124,1391],{"class":1304},[1086,3126,3127],{"class":1096},"Claude Haiku 4.5",[1086,3129,1329],{"class":1304},[1086,3131,3101],{"class":1304},[1086,3133,3134,3136,3138,3140,3142,3145,3147,3149,3151,3153,3155,3158,3160],{"class":1088,"line":1474},[1086,3135,3072],{"class":1304},[1086,3137,3075],{"class":1310},[1086,3139,1314],{"class":1304},[1086,3141,1391],{"class":1304},[1086,3143,3144],{"class":1096},"google\u002Fgemini-3-flash",[1086,3146,1329],{"class":1304},[1086,3148,1716],{"class":1304},[1086,3150,3089],{"class":1310},[1086,3152,1314],{"class":1304},[1086,3154,1391],{"class":1304},[1086,3156,3157],{"class":1096},"Gemini 3 Flash",[1086,3159,1329],{"class":1304},[1086,3161,3162],{"class":1304}," }\n",[1086,3164,3165],{"class":1088,"line":1480},[1086,3166,3167],{"class":1300},"]\n",[1086,3169,3170],{"class":1088,"line":1485},[1086,3171,1369],{"emptyLinePlaceholder":21},[1086,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192],{"class":1088,"line":2274},[1086,3175,1291],{"class":1290},[1086,3177,1294],{"class":1290},[1086,3179,2497],{"class":1109},[1086,3181,1301],{"class":1300},[1086,3183,2596],{"class":1587},[1086,3185,1951],{"class":1304},[1086,3187,2601],{"class":1942},[1086,3189,1882],{"class":1304},[1086,3191,1825],{"class":1587},[1086,3193,1380],{"class":1304},[1086,3195,3196,3198,3200,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225],{"class":1088,"line":2287},[1086,3197,2612],{"class":1587},[1086,3199,1710],{"class":1304},[1086,3201,3202],{"class":1300}," id",[1086,3204,1732],{"class":1304},[1086,3206,2622],{"class":1304},[1086,3208,2625],{"class":1290},[1086,3210,2907],{"class":1109},[1086,3212,1301],{"class":1310},[1086,3214,2601],{"class":1300},[1086,3216,1716],{"class":1304},[1086,3218,2568],{"class":1300},[1086,3220,1808],{"class":1304},[1086,3222,2640],{"class":1109},[1086,3224,1301],{"class":1310},[1086,3226,1305],{"class":1304},[1086,3228,3229,3232,3234,3236,3238,3241],{"class":1088,"line":2317},[1086,3230,3231],{"class":1310},"    id",[1086,3233,1314],{"class":1304},[1086,3235,2568],{"class":1300},[1086,3237,1808],{"class":1304},[1086,3239,3240],{"class":1109},"string",[1086,3242,2668],{"class":1310},[1086,3244,3245,3247,3249,3251,3253],{"class":1088,"line":2323},[1086,3246,2413],{"class":1304},[1086,3248,1882],{"class":1310},[1086,3250,1808],{"class":1304},[1086,3252,2679],{"class":1300},[1086,3254,1491],{"class":1310},[1086,3256,3257],{"class":1088,"line":2328},[1086,3258,1369],{"emptyLinePlaceholder":21},[1086,3260,3261,3263,3265,3268,3270,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295],{"class":1088,"line":2360},[1086,3262,2612],{"class":1587},[1086,3264,1710],{"class":1304},[1086,3266,3267],{"class":1300}," model",[1086,3269,1716],{"class":1304},[1086,3271,3272],{"class":1300}," messages",[1086,3274,1732],{"class":1304},[1086,3276,2622],{"class":1304},[1086,3278,2625],{"class":1290},[1086,3280,2502],{"class":1109},[1086,3282,1301],{"class":1310},[1086,3284,2601],{"class":1300},[1086,3286,1716],{"class":1304},[1086,3288,2568],{"class":1300},[1086,3290,1808],{"class":1304},[1086,3292,2640],{"class":1109},[1086,3294,1301],{"class":1310},[1086,3296,1305],{"class":1304},[1086,3298,3299,3302,3304,3306,3308,3310,3312,3314,3317,3319,3322,3324,3327,3329,3332,3334,3337,3339,3342,3344,3346,3349,3351,3353,3355],{"class":1088,"line":2376},[1086,3300,3301],{"class":1310},"    model",[1086,3303,1314],{"class":1304},[1086,3305,2568],{"class":1300},[1086,3307,1808],{"class":1304},[1086,3309,3240],{"class":1109},[1086,3311,1805],{"class":1310},[1086,3313,1808],{"class":1304},[1086,3315,3316],{"class":1109},"refine",[1086,3318,1301],{"class":1310},[1086,3320,3321],{"class":1942},"value",[1086,3323,1825],{"class":1587},[1086,3325,3326],{"class":1300}," MODELS",[1086,3328,1808],{"class":1304},[1086,3330,3331],{"class":1109},"some",[1086,3333,1301],{"class":1310},[1086,3335,3336],{"class":1942},"m",[1086,3338,1825],{"class":1587},[1086,3340,3341],{"class":1300}," m",[1086,3343,1808],{"class":1304},[1086,3345,3321],{"class":1300},[1086,3347,3348],{"class":1304}," ===",[1086,3350,3075],{"class":1300},[1086,3352,1882],{"class":1310},[1086,3354,1716],{"class":1304},[1086,3356,1380],{"class":1304},[1086,3358,3359,3362,3364,3366,3369],{"class":1088,"line":2394},[1086,3360,3361],{"class":1310},"      message",[1086,3363,1314],{"class":1304},[1086,3365,1391],{"class":1304},[1086,3367,3368],{"class":1096},"Invalid model",[1086,3370,1355],{"class":1304},[1086,3372,3373,3376,3378],{"class":1088,"line":2410},[1086,3374,3375],{"class":1304},"    }",[1086,3377,1882],{"class":1310},[1086,3379,1332],{"class":1304},[1086,3381,3382,3385,3387,3389,3391,3394,3396,3399,3401,3403,3405,3407,3409],{"class":1088,"line":2418},[1086,3383,3384],{"class":1310},"    messages",[1086,3386,1314],{"class":1304},[1086,3388,2568],{"class":1300},[1086,3390,1808],{"class":1304},[1086,3392,3393],{"class":1109},"array",[1086,3395,1301],{"class":1310},[1086,3397,3398],{"class":1300},"z",[1086,3400,1808],{"class":1304},[1086,3402,2658],{"class":1109},[1086,3404,1559],{"class":1304},[1086,3406,2479],{"class":1092},[1086,3408,2665],{"class":1304},[1086,3410,1908],{"class":1310},[1086,3412,3414,3416,3418,3420,3422],{"class":1088,"line":3413},30,[1086,3415,2413],{"class":1304},[1086,3417,1882],{"class":1310},[1086,3419,1808],{"class":1304},[1086,3421,2679],{"class":1300},[1086,3423,1491],{"class":1310},[1086,3425,3427],{"class":1088,"line":3426},31,[1086,3428,1369],{"emptyLinePlaceholder":21},[1086,3430,3432],{"class":1088,"line":3431},32,[1086,3433,3434],{"class":1470},"  \u002F\u002F Fetch the chat from the database\n",[1086,3436,3438,3440,3442,3444,3446,3448,3450,3453,3455,3457,3459,3462,3464],{"class":1088,"line":3437},33,[1086,3439,2612],{"class":1587},[1086,3441,2789],{"class":1300},[1086,3443,2622],{"class":1304},[1086,3445,2625],{"class":1290},[1086,3447,2440],{"class":1300},[1086,3449,1808],{"class":1304},[1086,3451,3452],{"class":1300},"query",[1086,3454,1808],{"class":1304},[1086,3456,1787],{"class":1300},[1086,3458,1808],{"class":1304},[1086,3460,3461],{"class":1109},"findFirst",[1086,3463,1301],{"class":1310},[1086,3465,1305],{"class":1304},[1086,3467,3469,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3505,3508],{"class":1088,"line":3468},34,[1086,3470,3471],{"class":1109},"    where",[1086,3473,1314],{"class":1304},[1086,3475,1951],{"class":1304},[1086,3477,262],{"class":1942},[1086,3479,1716],{"class":1304},[1086,3481,1710],{"class":1304},[1086,3483,2930],{"class":1942},[1086,3485,1946],{"class":1304},[1086,3487,1825],{"class":1587},[1086,3489,2930],{"class":1109},[1086,3491,1301],{"class":1310},[1086,3493,262],{"class":1300},[1086,3495,1808],{"class":1304},[1086,3497,2017],{"class":1300},[1086,3499,1716],{"class":1304},[1086,3501,3202],{"class":1300},[1086,3503,3504],{"class":1290}," as",[1086,3506,3507],{"class":1092}," string",[1086,3509,1491],{"class":1310},[1086,3511,3513,3515],{"class":1088,"line":3512},35,[1086,3514,2413],{"class":1304},[1086,3516,1491],{"class":1310},[1086,3518,3520],{"class":1088,"line":3519},36,[1086,3521,1369],{"emptyLinePlaceholder":21},[1086,3523,3525,3528,3530,3533,3535,3538],{"class":1088,"line":3524},37,[1086,3526,3527],{"class":1290},"  if",[1086,3529,1951],{"class":1310},[1086,3531,3532],{"class":1304},"!",[1086,3534,262],{"class":1300},[1086,3536,3537],{"class":1310},") ",[1086,3539,1305],{"class":1304},[1086,3541,3543,3546,3548,3550,3552,3555,3557,3561,3563,3566,3568,3570,3573,3575,3577],{"class":1088,"line":3542},38,[1086,3544,3545],{"class":1290},"    throw",[1086,3547,2898],{"class":1109},[1086,3549,1301],{"class":1310},[1086,3551,1865],{"class":1304},[1086,3553,3554],{"class":1310}," statusCode",[1086,3556,1314],{"class":1304},[1086,3558,3560],{"class":3559},"sbssI"," 404",[1086,3562,1716],{"class":1304},[1086,3564,3565],{"class":1310}," statusMessage",[1086,3567,1314],{"class":1304},[1086,3569,1391],{"class":1304},[1086,3571,3572],{"class":1096},"Chat not found",[1086,3574,1329],{"class":1304},[1086,3576,1732],{"class":1304},[1086,3578,1491],{"class":1310},[1086,3580,3582],{"class":1088,"line":3581},39,[1086,3583,3584],{"class":1304},"  }\n",[1086,3586,3588],{"class":1088,"line":3587},40,[1086,3589,1369],{"emptyLinePlaceholder":21},[1086,3591,3593],{"class":1088,"line":3592},41,[1086,3594,3595],{"class":1470},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1086,3597,3599,3601,3603,3605,3607,3609,3612,3614],{"class":1088,"line":3598},42,[1086,3600,3527],{"class":1290},[1086,3602,1951],{"class":1310},[1086,3604,3532],{"class":1304},[1086,3606,262],{"class":1300},[1086,3608,1808],{"class":1304},[1086,3610,3611],{"class":1300},"title",[1086,3613,3537],{"class":1310},[1086,3615,1305],{"class":1304},[1086,3617,3619,3622,3624,3626,3628,3631,3633,3635,3637,3640,3642],{"class":1088,"line":3618},43,[1086,3620,3621],{"class":1587},"    const",[1086,3623,1710],{"class":1304},[1086,3625,1719],{"class":1310},[1086,3627,1314],{"class":1304},[1086,3629,3630],{"class":1300}," title",[1086,3632,1732],{"class":1304},[1086,3634,2622],{"class":1304},[1086,3636,2625],{"class":1290},[1086,3638,3639],{"class":1109}," generateText",[1086,3641,1301],{"class":1310},[1086,3643,1305],{"class":1304},[1086,3645,3647,3650,3652,3654,3656,3658],{"class":1088,"line":3646},44,[1086,3648,3649],{"class":1310},"      model",[1086,3651,1314],{"class":1304},[1086,3653,1391],{"class":1304},[1086,3655,3114],{"class":1096},[1086,3657,1329],{"class":1304},[1086,3659,1332],{"class":1304},[1086,3661,3663,3666,3668,3671,3674,3677],{"class":1088,"line":3662},45,[1086,3664,3665],{"class":1310},"      system",[1086,3667,1314],{"class":1304},[1086,3669,3670],{"class":1304}," `",[1086,3672,3673],{"class":1096},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1086,3675,3676],{"class":1304},"`",[1086,3678,1332],{"class":1304},[1086,3680,3682,3685,3687,3690,3692,3695,3697,3699,3702,3705],{"class":1088,"line":3681},46,[1086,3683,3684],{"class":1310},"      prompt",[1086,3686,1314],{"class":1304},[1086,3688,3689],{"class":1300}," JSON",[1086,3691,1808],{"class":1304},[1086,3693,3694],{"class":1109},"stringify",[1086,3696,1301],{"class":1310},[1086,3698,1996],{"class":1300},[1086,3700,3701],{"class":1310},"[",[1086,3703,3704],{"class":3559},"0",[1086,3706,2320],{"class":1310},[1086,3708,3710,3712],{"class":1088,"line":3709},47,[1086,3711,3375],{"class":1304},[1086,3713,1491],{"class":1310},[1086,3715,3717],{"class":1088,"line":3716},48,[1086,3718,1369],{"emptyLinePlaceholder":21},[1086,3720,3722,3725,3727,3729,3732,3734,3736,3738,3740,3742,3744,3747,3749,3751,3753,3755,3757,3759,3762,3764,3767,3769,3771,3773,3775,3777,3779,3781,3783],{"class":1088,"line":3721},49,[1086,3723,3724],{"class":1290},"    await",[1086,3726,2440],{"class":1300},[1086,3728,1808],{"class":1304},[1086,3730,3731],{"class":1109},"update",[1086,3733,1301],{"class":1310},[1086,3735,2716],{"class":1300},[1086,3737,1808],{"class":1304},[1086,3739,1787],{"class":1300},[1086,3741,1882],{"class":1310},[1086,3743,1808],{"class":1304},[1086,3745,3746],{"class":1109},"set",[1086,3748,1301],{"class":1310},[1086,3750,1865],{"class":1304},[1086,3752,3630],{"class":1300},[1086,3754,1732],{"class":1304},[1086,3756,1882],{"class":1310},[1086,3758,1808],{"class":1304},[1086,3760,3761],{"class":1109},"where",[1086,3763,1301],{"class":1310},[1086,3765,3766],{"class":1109},"eq",[1086,3768,1301],{"class":1310},[1086,3770,2716],{"class":1300},[1086,3772,1808],{"class":1304},[1086,3774,1787],{"class":1300},[1086,3776,1808],{"class":1304},[1086,3778,2017],{"class":1300},[1086,3780,1716],{"class":1304},[1086,3782,3202],{"class":1300},[1086,3784,1972],{"class":1310},[1086,3786,3788],{"class":1088,"line":3787},50,[1086,3789,3584],{"class":1304},[1086,3791,3793],{"class":1088,"line":3792},51,[1086,3794,1369],{"emptyLinePlaceholder":21},[1086,3796,3798],{"class":1088,"line":3797},52,[1086,3799,3800],{"class":1470},"  \u002F\u002F Save the user message if it's a follow-up\n",[1086,3802,3804,3806,3809,3811,3813,3815,3817,3819,3822,3825,3828],{"class":1088,"line":3803},53,[1086,3805,2612],{"class":1587},[1086,3807,3808],{"class":1300}," lastMessage",[1086,3810,2622],{"class":1304},[1086,3812,3272],{"class":1300},[1086,3814,3701],{"class":1310},[1086,3816,1996],{"class":1300},[1086,3818,1808],{"class":1304},[1086,3820,3821],{"class":1300},"length",[1086,3823,3824],{"class":1304}," -",[1086,3826,3827],{"class":3559}," 1",[1086,3829,3167],{"class":1310},[1086,3831,3833,3835,3837,3840,3843,3845,3847,3849,3851,3853,3856,3858,3860,3862,3865,3867,3869],{"class":1088,"line":3832},54,[1086,3834,3527],{"class":1290},[1086,3836,1951],{"class":1310},[1086,3838,3839],{"class":1300},"lastMessage",[1086,3841,3842],{"class":1304},"?.",[1086,3844,2129],{"class":1300},[1086,3846,3348],{"class":1304},[1086,3848,1391],{"class":1304},[1086,3850,2147],{"class":1096},[1086,3852,1329],{"class":1304},[1086,3854,3855],{"class":1304}," &&",[1086,3857,3272],{"class":1300},[1086,3859,1808],{"class":1304},[1086,3861,3821],{"class":1300},[1086,3863,3864],{"class":1304}," >",[1086,3866,3827],{"class":3559},[1086,3868,3537],{"class":1310},[1086,3870,1305],{"class":1304},[1086,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898],{"class":1088,"line":3873},55,[1086,3875,3724],{"class":1290},[1086,3877,2440],{"class":1300},[1086,3879,1808],{"class":1304},[1086,3881,2711],{"class":1109},[1086,3883,1301],{"class":1310},[1086,3885,2716],{"class":1300},[1086,3887,1808],{"class":1304},[1086,3889,1996],{"class":1300},[1086,3891,1882],{"class":1310},[1086,3893,1808],{"class":1304},[1086,3895,2727],{"class":1109},[1086,3897,1301],{"class":1310},[1086,3899,1305],{"class":1304},[1086,3901,3903,3906,3908,3910],{"class":1088,"line":3902},56,[1086,3904,3905],{"class":1310},"      chatId",[1086,3907,1314],{"class":1304},[1086,3909,3202],{"class":1300},[1086,3911,1332],{"class":1304},[1086,3913,3915,3918,3920,3922,3924,3926],{"class":1088,"line":3914},57,[1086,3916,3917],{"class":1310},"      role",[1086,3919,1314],{"class":1304},[1086,3921,1391],{"class":1304},[1086,3923,2147],{"class":1096},[1086,3925,1329],{"class":1304},[1086,3927,1332],{"class":1304},[1086,3929,3931,3934,3936,3938,3940],{"class":1088,"line":3930},58,[1086,3932,3933],{"class":1310},"      parts",[1086,3935,1314],{"class":1304},[1086,3937,3808],{"class":1300},[1086,3939,1808],{"class":1304},[1086,3941,2824],{"class":1300},[1086,3943,3945,3947],{"class":1088,"line":3944},59,[1086,3946,3375],{"class":1304},[1086,3948,1491],{"class":1310},[1086,3950,3952],{"class":1088,"line":3951},60,[1086,3953,3584],{"class":1304},[1086,3955,3957],{"class":1088,"line":3956},61,[1086,3958,1369],{"emptyLinePlaceholder":21},[1086,3960,3962],{"class":1088,"line":3961},62,[1086,3963,3964],{"class":1470},"  \u002F\u002F Create the streaming response\n",[1086,3966,3968,3970,3973,3975,3978,3980],{"class":1088,"line":3967},63,[1086,3969,2612],{"class":1587},[1086,3971,3972],{"class":1300}," stream",[1086,3974,2622],{"class":1304},[1086,3976,3977],{"class":1109}," createUIMessageStream",[1086,3979,1301],{"class":1310},[1086,3981,1305],{"class":1304},[1086,3983,3985,3988,3990,3993,3995,3998,4000,4002],{"class":1088,"line":3984},64,[1086,3986,3987],{"class":1109},"    execute",[1086,3989,1314],{"class":1304},[1086,3991,3992],{"class":1587}," async",[1086,3994,1939],{"class":1304},[1086,3996,3997],{"class":1942}," writer",[1086,3999,1946],{"class":1304},[1086,4001,1825],{"class":1587},[1086,4003,1380],{"class":1304},[1086,4005,4007,4010,4013,4015,4018,4020],{"class":1088,"line":4006},65,[1086,4008,4009],{"class":1587},"      const",[1086,4011,4012],{"class":1300}," result",[1086,4014,2622],{"class":1304},[1086,4016,4017],{"class":1109}," streamText",[1086,4019,1301],{"class":1310},[1086,4021,1305],{"class":1304},[1086,4023,4025,4028],{"class":1088,"line":4024},66,[1086,4026,4027],{"class":1300},"        model",[1086,4029,1332],{"class":1304},[1086,4031,4033,4036,4038,4040,4043,4045],{"class":1088,"line":4032},67,[1086,4034,4035],{"class":1310},"        system",[1086,4037,1314],{"class":1304},[1086,4039,3670],{"class":1304},[1086,4041,4042],{"class":1096},"You are a helpful AI assistant. Be concise and friendly.",[1086,4044,3676],{"class":1304},[1086,4046,1332],{"class":1304},[1086,4048,4050,4053,4055,4057,4060,4062,4064,4066],{"class":1088,"line":4049},68,[1086,4051,4052],{"class":1310},"        messages",[1086,4054,1314],{"class":1304},[1086,4056,2625],{"class":1290},[1086,4058,4059],{"class":1109}," convertToModelMessages",[1086,4061,1301],{"class":1310},[1086,4063,1996],{"class":1300},[1086,4065,1882],{"class":1310},[1086,4067,1332],{"class":1304},[1086,4069,4071,4074,4076],{"class":1088,"line":4070},69,[1086,4072,4073],{"class":1310},"        providerOptions",[1086,4075,1314],{"class":1304},[1086,4077,1380],{"class":1304},[1086,4079,4081,4084,4086],{"class":1088,"line":4080},70,[1086,4082,4083],{"class":1310},"          anthropic",[1086,4085,1314],{"class":1304},[1086,4087,1380],{"class":1304},[1086,4089,4091,4094,4096],{"class":1088,"line":4090},71,[1086,4092,4093],{"class":1310},"            thinking",[1086,4095,1314],{"class":1304},[1086,4097,1380],{"class":1304},[1086,4099,4101,4104,4106,4108,4111,4113],{"class":1088,"line":4100},72,[1086,4102,4103],{"class":1310},"              type",[1086,4105,1314],{"class":1304},[1086,4107,1391],{"class":1304},[1086,4109,4110],{"class":1096},"enabled",[1086,4112,1329],{"class":1304},[1086,4114,1332],{"class":1304},[1086,4116,4118,4121,4123],{"class":1088,"line":4117},73,[1086,4119,4120],{"class":1310},"              budgetTokens",[1086,4122,1314],{"class":1304},[1086,4124,4125],{"class":3559}," 2048\n",[1086,4127,4129],{"class":1088,"line":4128},74,[1086,4130,4131],{"class":1304},"            }\n",[1086,4133,4135],{"class":1088,"line":4134},75,[1086,4136,4137],{"class":1304},"          },\n",[1086,4139,4141,4144,4146],{"class":1088,"line":4140},76,[1086,4142,4143],{"class":1310},"          google",[1086,4145,1314],{"class":1304},[1086,4147,1380],{"class":1304},[1086,4149,4151,4154,4156],{"class":1088,"line":4150},77,[1086,4152,4153],{"class":1310},"            thinkingConfig",[1086,4155,1314],{"class":1304},[1086,4157,1380],{"class":1304},[1086,4159,4161,4164,4166,4169],{"class":1088,"line":4160},78,[1086,4162,4163],{"class":1310},"              includeThoughts",[1086,4165,1314],{"class":1304},[1086,4167,4168],{"class":1466}," true",[1086,4170,1332],{"class":1304},[1086,4172,4174,4177,4179,4181,4184],{"class":1088,"line":4173},79,[1086,4175,4176],{"class":1310},"              thinkingLevel",[1086,4178,1314],{"class":1304},[1086,4180,1391],{"class":1304},[1086,4182,4183],{"class":1096},"low",[1086,4185,1355],{"class":1304},[1086,4187,4189],{"class":1088,"line":4188},80,[1086,4190,4131],{"class":1304},[1086,4192,4194],{"class":1088,"line":4193},81,[1086,4195,4137],{"class":1304},[1086,4197,4199,4202,4204],{"class":1088,"line":4198},82,[1086,4200,4201],{"class":1310},"          openai",[1086,4203,1314],{"class":1304},[1086,4205,1380],{"class":1304},[1086,4207,4209,4212,4214,4216,4218,4220],{"class":1088,"line":4208},83,[1086,4210,4211],{"class":1310},"            reasoningEffort",[1086,4213,1314],{"class":1304},[1086,4215,1391],{"class":1304},[1086,4217,4183],{"class":1096},[1086,4219,1329],{"class":1304},[1086,4221,1332],{"class":1304},[1086,4223,4225,4228,4230,4232,4235],{"class":1088,"line":4224},84,[1086,4226,4227],{"class":1310},"            reasoningSummary",[1086,4229,1314],{"class":1304},[1086,4231,1391],{"class":1304},[1086,4233,4234],{"class":1096},"detailed",[1086,4236,1355],{"class":1304},[1086,4238,4240],{"class":1088,"line":4239},85,[1086,4241,4242],{"class":1304},"          }\n",[1086,4244,4246],{"class":1088,"line":4245},86,[1086,4247,4248],{"class":1304},"        }\n",[1086,4250,4252,4255],{"class":1088,"line":4251},87,[1086,4253,4254],{"class":1304},"      }",[1086,4256,1491],{"class":1310},[1086,4258,4260],{"class":1088,"line":4259},88,[1086,4261,1369],{"emptyLinePlaceholder":21},[1086,4263,4265],{"class":1088,"line":4264},89,[1086,4266,4267],{"class":1470},"      \u002F\u002F Notify the client that a title was generated\n",[1086,4269,4271,4274,4276,4278,4280,4282,4284,4286],{"class":1088,"line":4270},90,[1086,4272,4273],{"class":1290},"      if",[1086,4275,1951],{"class":1310},[1086,4277,3532],{"class":1304},[1086,4279,262],{"class":1300},[1086,4281,1808],{"class":1304},[1086,4283,3611],{"class":1300},[1086,4285,3537],{"class":1310},[1086,4287,1305],{"class":1304},[1086,4289,4291,4294,4296,4299,4301],{"class":1088,"line":4290},91,[1086,4292,4293],{"class":1300},"        writer",[1086,4295,1808],{"class":1304},[1086,4297,4298],{"class":1109},"write",[1086,4300,1301],{"class":1310},[1086,4302,1305],{"class":1304},[1086,4304,4306,4309,4311,4313,4316,4318],{"class":1088,"line":4305},92,[1086,4307,4308],{"class":1310},"          type",[1086,4310,1314],{"class":1304},[1086,4312,1391],{"class":1304},[1086,4314,4315],{"class":1096},"data-chat-title",[1086,4317,1329],{"class":1304},[1086,4319,1332],{"class":1304},[1086,4321,4323,4326,4328,4330,4332,4334,4336,4339,4341],{"class":1088,"line":4322},93,[1086,4324,4325],{"class":1310},"          data",[1086,4327,1314],{"class":1304},[1086,4329,1710],{"class":1304},[1086,4331,2617],{"class":1310},[1086,4333,1314],{"class":1304},[1086,4335,1391],{"class":1304},[1086,4337,4338],{"class":1096},"Title generated",[1086,4340,1329],{"class":1304},[1086,4342,3101],{"class":1304},[1086,4344,4346,4349,4351],{"class":1088,"line":4345},94,[1086,4347,4348],{"class":1310},"          transient",[1086,4350,1314],{"class":1304},[1086,4352,4353],{"class":1466}," true\n",[1086,4355,4357,4360],{"class":1088,"line":4356},95,[1086,4358,4359],{"class":1304},"        }",[1086,4361,1491],{"class":1310},[1086,4363,4365],{"class":1088,"line":4364},96,[1086,4366,4367],{"class":1304},"      }\n",[1086,4369,4371],{"class":1088,"line":4370},97,[1086,4372,1369],{"emptyLinePlaceholder":21},[1086,4374,4376,4379,4381,4384,4386,4389,4391,4394],{"class":1088,"line":4375},98,[1086,4377,4378],{"class":1300},"      writer",[1086,4380,1808],{"class":1304},[1086,4382,4383],{"class":1109},"merge",[1086,4385,1301],{"class":1310},[1086,4387,4388],{"class":1300},"result",[1086,4390,1808],{"class":1304},[1086,4392,4393],{"class":1109},"toUIMessageStream",[1086,4395,1908],{"class":1310},[1086,4397,4399],{"class":1088,"line":4398},99,[1086,4400,4401],{"class":1304},"    },\n",[1086,4403,4405,4408,4410,4412,4414,4416,4418,4420],{"class":1088,"line":4404},100,[1086,4406,4407],{"class":1109},"    onFinish",[1086,4409,1314],{"class":1304},[1086,4411,3992],{"class":1587},[1086,4413,1939],{"class":1304},[1086,4415,3272],{"class":1942},[1086,4417,1946],{"class":1304},[1086,4419,1825],{"class":1587},[1086,4421,1380],{"class":1304},[1086,4423,4425],{"class":1088,"line":4424},101,[1086,4426,4427],{"class":1470},"      \u002F\u002F Save the assistant's response to the database\n",[1086,4429,4431,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4463,4465,4468,4470,4472],{"class":1088,"line":4430},102,[1086,4432,4433],{"class":1290},"      await",[1086,4435,2440],{"class":1300},[1086,4437,1808],{"class":1304},[1086,4439,2711],{"class":1109},[1086,4441,1301],{"class":1310},[1086,4443,2716],{"class":1300},[1086,4445,1808],{"class":1304},[1086,4447,1996],{"class":1300},[1086,4449,1882],{"class":1310},[1086,4451,1808],{"class":1304},[1086,4453,2727],{"class":1109},[1086,4455,1301],{"class":1310},[1086,4457,1996],{"class":1300},[1086,4459,1808],{"class":1304},[1086,4461,4462],{"class":1109},"map",[1086,4464,1301],{"class":1310},[1086,4466,4467],{"class":1942},"message",[1086,4469,1825],{"class":1587},[1086,4471,1951],{"class":1310},[1086,4473,1305],{"class":1304},[1086,4475,4477,4480,4482,4484,4486,4488],{"class":1088,"line":4476},103,[1086,4478,4479],{"class":1310},"        chatId",[1086,4481,1314],{"class":1304},[1086,4483,2789],{"class":1300},[1086,4485,1808],{"class":1304},[1086,4487,2017],{"class":1300},[1086,4489,1332],{"class":1304},[1086,4491,4493,4496,4498,4500,4502,4504,4506,4508,4510,4512,4515,4517,4519,4521],{"class":1088,"line":4492},104,[1086,4494,4495],{"class":1310},"        role",[1086,4497,1314],{"class":1304},[1086,4499,2617],{"class":1300},[1086,4501,1808],{"class":1304},[1086,4503,2129],{"class":1300},[1086,4505,3504],{"class":1290},[1086,4507,1391],{"class":1304},[1086,4509,2147],{"class":1096},[1086,4511,1329],{"class":1304},[1086,4513,4514],{"class":1304}," |",[1086,4516,1391],{"class":1304},[1086,4518,2156],{"class":1096},[1086,4520,1329],{"class":1304},[1086,4522,1332],{"class":1304},[1086,4524,4526,4529,4531,4533,4535],{"class":1088,"line":4525},105,[1086,4527,4528],{"class":1310},"        parts",[1086,4530,1314],{"class":1304},[1086,4532,2617],{"class":1300},[1086,4534,1808],{"class":1304},[1086,4536,2824],{"class":1300},[1086,4538,4540,4542],{"class":1088,"line":4539},106,[1086,4541,4254],{"class":1304},[1086,4543,4544],{"class":1310},")))\n",[1086,4546,4548],{"class":1088,"line":4547},107,[1086,4549,1477],{"class":1304},[1086,4551,4553,4555],{"class":1088,"line":4552},108,[1086,4554,2413],{"class":1304},[1086,4556,1491],{"class":1310},[1086,4558,4560],{"class":1088,"line":4559},109,[1086,4561,1369],{"emptyLinePlaceholder":21},[1086,4563,4565,4567,4570,4572,4574,4576,4578],{"class":1088,"line":4564},110,[1086,4566,2839],{"class":1290},[1086,4568,4569],{"class":1109}," createUIMessageStreamResponse",[1086,4571,1301],{"class":1310},[1086,4573,1865],{"class":1304},[1086,4575,3972],{"class":1300},[1086,4577,1732],{"class":1304},[1086,4579,1491],{"class":1310},[1086,4581,4583,4585],{"class":1088,"line":4582},111,[1086,4584,1488],{"class":1304},[1086,4586,1491],{"class":1300},[976,4588,4589],{},"Here's what each part does:",[976,4591,4592],{},[994,4593,4594],{},"AI Gateway",[976,4596,4597,4598,4601],{},"Thanks to ",[1030,4599,1067],{"href":1065,"rel":4600},[1034],", we can use any AI model supported by the gateway just by specifying the model name.",[976,4603,4604],{},[994,4605,4606],{},"Automatic Title Generation",[976,4608,4609,4610,4617],{},"When a chat doesn't have a title yet, we use ",[1030,4611,4614],{"href":4612,"rel":4613},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1034],[1036,4615,4616],{},"generateText"," to create one based on the first message. This provides a better UX by showing meaningful titles in the chat history instead of \"Untitled\".",[976,4619,4620],{},[994,4621,4622],{},"Streaming with streamText",[976,4624,4625,4626,4631],{},"The ",[1030,4627,4629],{"href":2858,"rel":4628},[1034],[1036,4630,2862],{}," function generates a streaming response from the AI model. Key options include:",[988,4633,4634,4640,4645],{},[991,4635,4636,4639],{},[1036,4637,4638],{},"model",": The AI model to use",[991,4641,4642,4644],{},[1036,4643,2165],{},": Instructions that guide the AI's behavior",[991,4646,4647,4649],{},[1036,4648,1996],{},": The conversation history",[976,4651,4652],{},[994,4653,4654],{},"UIMessageStream",[976,4656,4625,4657,1039,4663,4669],{},[1030,4658,4661],{"href":4659,"rel":4660},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1034],[1036,4662,2870],{},[1030,4664,4667],{"href":4665,"rel":4666},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1034],[1036,4668,2878],{}," functions create a stream that the AI SDK client can consume. The response streams chunks as they're generated, creating the real-time typing effect.",[976,4671,4625,4672,4675,4676,4678,4679,4682],{},[1036,4673,4674],{},"writer.write()"," method allows sending custom data events to the client (like ",[1036,4677,4315],{},"), while ",[1036,4680,4681],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1114,4684,4686],{"id":4685},"fetching-a-chat","Fetching a chat",[976,4688,4689],{},"Add an endpoint to fetch existing chat data from your database:",[1277,4691,4692],{},[1077,4693,4696],{"className":1281,"code":4694,"filename":4695,"language":1283,"meta":1082,"style":1082},"import { createError, defineEventHandler, getValidatedRouterParams } from 'h3'\nimport { asc, eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\n\nexport default defineEventHandler(async (event) => {\n  const { id } = await getValidatedRouterParams(event, z.object({\n    id: z.string()\n  }).parse)\n\n  const chat = await db.query.chats.findFirst({\n    where: (eq(schema.chats.id, id)),\n    with: {\n      messages: {\n        orderBy: () => asc(schema.messages.createdAt)\n      }\n    }\n  })\n\n  if (!chat) {\n    throw createError({ statusCode: 404, statusMessage: 'Chat not found' })\n  }\n\n  return chat\n})\n","server\u002Fapi\u002Fchats\u002F[id].get.ts",[1036,4697,4698,4724,4747,4769,4787,4791,4813,4845,4859,4871,4875,4903,4934,4943,4952,4981,4985,4989,4995,4999,5013,5045,5049,5053,5059],{"__ignoreMap":1082},[1086,4699,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722],{"class":1088,"line":1089},[1086,4701,1707],{"class":1290},[1086,4703,1710],{"class":1304},[1086,4705,2898],{"class":1300},[1086,4707,1716],{"class":1304},[1086,4709,2497],{"class":1300},[1086,4711,1716],{"class":1304},[1086,4713,2907],{"class":1300},[1086,4715,1732],{"class":1304},[1086,4717,1735],{"class":1290},[1086,4719,1391],{"class":1304},[1086,4721,1114],{"class":1096},[1086,4723,1355],{"class":1304},[1086,4725,4726,4728,4730,4733,4735,4737,4739,4741,4743,4745],{"class":1088,"line":1106},[1086,4727,1707],{"class":1290},[1086,4729,1710],{"class":1304},[1086,4731,4732],{"class":1300}," asc",[1086,4734,1716],{"class":1304},[1086,4736,2930],{"class":1300},[1086,4738,1732],{"class":1304},[1086,4740,1735],{"class":1290},[1086,4742,1391],{"class":1304},[1086,4744,1760],{"class":1096},[1086,4746,1355],{"class":1304},[1086,4748,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767],{"class":1088,"line":1320},[1086,4750,1707],{"class":1290},[1086,4752,1710],{"class":1304},[1086,4754,2440],{"class":1300},[1086,4756,1716],{"class":1304},[1086,4758,2548],{"class":1300},[1086,4760,1732],{"class":1304},[1086,4762,1735],{"class":1290},[1086,4764,1391],{"class":1304},[1086,4766,2557],{"class":1096},[1086,4768,1355],{"class":1304},[1086,4770,4771,4773,4775,4777,4779,4781,4783,4785],{"class":1088,"line":1335},[1086,4772,1707],{"class":1290},[1086,4774,1710],{"class":1304},[1086,4776,2568],{"class":1300},[1086,4778,1732],{"class":1304},[1086,4780,1735],{"class":1290},[1086,4782,1391],{"class":1304},[1086,4784,2577],{"class":1096},[1086,4786,1355],{"class":1304},[1086,4788,4789],{"class":1088,"line":1347},[1086,4790,1369],{"emptyLinePlaceholder":21},[1086,4792,4793,4795,4797,4799,4801,4803,4805,4807,4809,4811],{"class":1088,"line":1358},[1086,4794,1291],{"class":1290},[1086,4796,1294],{"class":1290},[1086,4798,2497],{"class":1109},[1086,4800,1301],{"class":1300},[1086,4802,2596],{"class":1587},[1086,4804,1951],{"class":1304},[1086,4806,2601],{"class":1942},[1086,4808,1882],{"class":1304},[1086,4810,1825],{"class":1587},[1086,4812,1380],{"class":1304},[1086,4814,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843],{"class":1088,"line":1366},[1086,4816,2612],{"class":1587},[1086,4818,1710],{"class":1304},[1086,4820,3202],{"class":1300},[1086,4822,1732],{"class":1304},[1086,4824,2622],{"class":1304},[1086,4826,2625],{"class":1290},[1086,4828,2907],{"class":1109},[1086,4830,1301],{"class":1310},[1086,4832,2601],{"class":1300},[1086,4834,1716],{"class":1304},[1086,4836,2568],{"class":1300},[1086,4838,1808],{"class":1304},[1086,4840,2640],{"class":1109},[1086,4842,1301],{"class":1310},[1086,4844,1305],{"class":1304},[1086,4846,4847,4849,4851,4853,4855,4857],{"class":1088,"line":1372},[1086,4848,3231],{"class":1310},[1086,4850,1314],{"class":1304},[1086,4852,2568],{"class":1300},[1086,4854,1808],{"class":1304},[1086,4856,3240],{"class":1109},[1086,4858,2668],{"class":1310},[1086,4860,4861,4863,4865,4867,4869],{"class":1088,"line":1383},[1086,4862,2413],{"class":1304},[1086,4864,1882],{"class":1310},[1086,4866,1808],{"class":1304},[1086,4868,2679],{"class":1300},[1086,4870,1491],{"class":1310},[1086,4872,4873],{"class":1088,"line":1399},[1086,4874,1369],{"emptyLinePlaceholder":21},[1086,4876,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901],{"class":1088,"line":1405},[1086,4878,2612],{"class":1587},[1086,4880,2789],{"class":1300},[1086,4882,2622],{"class":1304},[1086,4884,2625],{"class":1290},[1086,4886,2440],{"class":1300},[1086,4888,1808],{"class":1304},[1086,4890,3452],{"class":1300},[1086,4892,1808],{"class":1304},[1086,4894,1787],{"class":1300},[1086,4896,1808],{"class":1304},[1086,4898,3461],{"class":1109},[1086,4900,1301],{"class":1310},[1086,4902,1305],{"class":1304},[1086,4904,4905,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4932],{"class":1088,"line":1410},[1086,4906,3471],{"class":1310},[1086,4908,1314],{"class":1304},[1086,4910,1951],{"class":1310},[1086,4912,3766],{"class":1109},[1086,4914,1301],{"class":1310},[1086,4916,2716],{"class":1300},[1086,4918,1808],{"class":1304},[1086,4920,1787],{"class":1300},[1086,4922,1808],{"class":1304},[1086,4924,2017],{"class":1300},[1086,4926,1716],{"class":1304},[1086,4928,3202],{"class":1300},[1086,4930,4931],{"class":1310},"))",[1086,4933,1332],{"class":1304},[1086,4935,4936,4939,4941],{"class":1088,"line":1433},[1086,4937,4938],{"class":1310},"    with",[1086,4940,1314],{"class":1304},[1086,4942,1380],{"class":1304},[1086,4944,4945,4948,4950],{"class":1088,"line":1438},[1086,4946,4947],{"class":1310},"      messages",[1086,4949,1314],{"class":1304},[1086,4951,1380],{"class":1304},[1086,4953,4954,4957,4959,4962,4964,4966,4968,4970,4972,4974,4976,4979],{"class":1088,"line":1448},[1086,4955,4956],{"class":1109},"        orderBy",[1086,4958,1314],{"class":1304},[1086,4960,4961],{"class":1304}," ()",[1086,4963,1825],{"class":1587},[1086,4965,4732],{"class":1109},[1086,4967,1301],{"class":1310},[1086,4969,2716],{"class":1300},[1086,4971,1808],{"class":1304},[1086,4973,1996],{"class":1300},[1086,4975,1808],{"class":1304},[1086,4977,4978],{"class":1300},"createdAt",[1086,4980,1491],{"class":1310},[1086,4982,4983],{"class":1088,"line":1458},[1086,4984,4367],{"class":1304},[1086,4986,4987],{"class":1088,"line":1474},[1086,4988,1477],{"class":1304},[1086,4990,4991,4993],{"class":1088,"line":1480},[1086,4992,2413],{"class":1304},[1086,4994,1491],{"class":1310},[1086,4996,4997],{"class":1088,"line":1485},[1086,4998,1369],{"emptyLinePlaceholder":21},[1086,5000,5001,5003,5005,5007,5009,5011],{"class":1088,"line":2274},[1086,5002,3527],{"class":1290},[1086,5004,1951],{"class":1310},[1086,5006,3532],{"class":1304},[1086,5008,262],{"class":1300},[1086,5010,3537],{"class":1310},[1086,5012,1305],{"class":1304},[1086,5014,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043],{"class":1088,"line":2287},[1086,5016,3545],{"class":1290},[1086,5018,2898],{"class":1109},[1086,5020,1301],{"class":1310},[1086,5022,1865],{"class":1304},[1086,5024,3554],{"class":1310},[1086,5026,1314],{"class":1304},[1086,5028,3560],{"class":3559},[1086,5030,1716],{"class":1304},[1086,5032,3565],{"class":1310},[1086,5034,1314],{"class":1304},[1086,5036,1391],{"class":1304},[1086,5038,3572],{"class":1096},[1086,5040,1329],{"class":1304},[1086,5042,1732],{"class":1304},[1086,5044,1491],{"class":1310},[1086,5046,5047],{"class":1088,"line":2317},[1086,5048,3584],{"class":1304},[1086,5050,5051],{"class":1088,"line":2323},[1086,5052,1369],{"emptyLinePlaceholder":21},[1086,5054,5055,5057],{"class":1088,"line":2328},[1086,5056,2839],{"class":1290},[1086,5058,2842],{"class":1300},[1086,5060,5061,5063],{"class":1088,"line":2360},[1086,5062,1488],{"class":1304},[1086,5064,1491],{"class":1300},[980,5066,5068],{"id":5067},"wire-up-the-ui","Wire up the UI",[976,5070,5071,5072,5077,5078,5083],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1030,5073,5074],{"href":281},[1036,5075,5076],{},"UChatPrompt"," for the input area and ",[1030,5079,5080],{"href":271},[1036,5081,5082],{},"UChatMessages"," for displaying the conversation.",[1114,5085,5087],{"id":5086},"creating-the-home-page","Creating the home page",[976,5089,5090,5091,5095],{},"The home page is where users start a new conversation. The ",[1030,5092,5093],{"href":281},[1036,5094,5076],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1277,5097,5098],{},[1077,5099,5103],{"className":1549,"code":5100,"filename":5101,"highlights":5102,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst input = ref('')\nconst loading = ref(false)\n\nasync function createChat() {\n  if (!input.value.trim()) return\n\n  loading.value = true\n\n  \u002F\u002F Create a new chat on the server\n  const chat = await $fetch('\u002Fapi\u002Fchats', {\n    method: 'POST',\n    body: {\n      message: {\n        role: 'user',\n        parts: [{ type: 'text', text: input.value }]\n      }\n    }\n  })\n\n  \u002F\u002F Navigate to the chat page\n  navigateTo(`\u002Fchat\u002F${chat.id}`)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col justify-center gap-6 py-8\">\n        \u003Ch1 class=\"text-3xl sm:text-4xl text-highlighted font-bold\">\n          How can I help you today?\n        \u003C\u002Fh1>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :status=\"loading ? 'streaming' : 'ready'\"\n          variant=\"subtle\"\n          placeholder=\"Ask me anything...\"\n          @submit=\"createChat\"\n        >\n          \u003CUChatPromptSubmit color=\"neutral\" \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Findex.vue",[3468,3512,3519,3524,3542,3581,3587,3592,3598],[1036,5104,5105,5128,5147,5165,5169,5183,5209,5213,5226,5230,5235,5261,5277,5286,5294,5308,5346,5350,5354,5360,5364,5369,5395,5400,5408,5412,5420,5441,5455,5476,5497,5502,5511,5515,5523,5538,5553,5568,5583,5598,5604,5627,5636,5645,5653,5661],{"__ignoreMap":1082},[1086,5106,5107,5109,5112,5115,5118,5120,5122,5124,5126],{"class":1088,"line":1089},[1086,5108,1559],{"class":1304},[1086,5110,5111],{"class":1310},"script",[1086,5113,5114],{"class":1587}," setup",[1086,5116,5117],{"class":1587}," lang",[1086,5119,1591],{"class":1304},[1086,5121,1518],{"class":1304},[1086,5123,1283],{"class":1096},[1086,5125,1518],{"class":1304},[1086,5127,1565],{"class":1304},[1086,5129,5130,5132,5135,5137,5140,5142,5145],{"class":1088,"line":1106},[1086,5131,3060],{"class":1587},[1086,5133,5134],{"class":1300}," input ",[1086,5136,1591],{"class":1304},[1086,5138,5139],{"class":1109}," ref",[1086,5141,1301],{"class":1300},[1086,5143,5144],{"class":1304},"''",[1086,5146,1491],{"class":1300},[1086,5148,5149,5151,5154,5156,5158,5160,5163],{"class":1088,"line":1320},[1086,5150,3060],{"class":1587},[1086,5152,5153],{"class":1300}," loading ",[1086,5155,1591],{"class":1304},[1086,5157,5139],{"class":1109},[1086,5159,1301],{"class":1300},[1086,5161,5162],{"class":1466},"false",[1086,5164,1491],{"class":1300},[1086,5166,5167],{"class":1088,"line":1335},[1086,5168,1369],{"emptyLinePlaceholder":21},[1086,5170,5171,5173,5176,5179,5181],{"class":1088,"line":1347},[1086,5172,2596],{"class":1587},[1086,5174,5175],{"class":1587}," function",[1086,5177,5178],{"class":1109}," createChat",[1086,5180,1805],{"class":1304},[1086,5182,1380],{"class":1304},[1086,5184,5185,5187,5189,5191,5194,5196,5198,5200,5203,5206],{"class":1088,"line":1358},[1086,5186,3527],{"class":1290},[1086,5188,1951],{"class":1310},[1086,5190,3532],{"class":1304},[1086,5192,5193],{"class":1300},"input",[1086,5195,1808],{"class":1304},[1086,5197,3321],{"class":1300},[1086,5199,1808],{"class":1304},[1086,5201,5202],{"class":1109},"trim",[1086,5204,5205],{"class":1310},"()) ",[1086,5207,5208],{"class":1290},"return\n",[1086,5210,5211],{"class":1088,"line":1366},[1086,5212,1369],{"emptyLinePlaceholder":21},[1086,5214,5215,5218,5220,5222,5224],{"class":1088,"line":1372},[1086,5216,5217],{"class":1300},"  loading",[1086,5219,1808],{"class":1304},[1086,5221,3321],{"class":1300},[1086,5223,2622],{"class":1304},[1086,5225,4353],{"class":1466},[1086,5227,5228],{"class":1088,"line":1383},[1086,5229,1369],{"emptyLinePlaceholder":21},[1086,5231,5232],{"class":1088,"line":1399},[1086,5233,5234],{"class":1470},"  \u002F\u002F Create a new chat on the server\n",[1086,5236,5237,5239,5241,5243,5245,5248,5250,5252,5255,5257,5259],{"class":1088,"line":1405},[1086,5238,2612],{"class":1587},[1086,5240,2789],{"class":1300},[1086,5242,2622],{"class":1304},[1086,5244,2625],{"class":1290},[1086,5246,5247],{"class":1109}," $fetch",[1086,5249,1301],{"class":1310},[1086,5251,1329],{"class":1304},[1086,5253,5254],{"class":1096},"\u002Fapi\u002Fchats",[1086,5256,1329],{"class":1304},[1086,5258,1716],{"class":1304},[1086,5260,1380],{"class":1304},[1086,5262,5263,5266,5268,5270,5273,5275],{"class":1088,"line":1410},[1086,5264,5265],{"class":1310},"    method",[1086,5267,1314],{"class":1304},[1086,5269,1391],{"class":1304},[1086,5271,5272],{"class":1096},"POST",[1086,5274,1329],{"class":1304},[1086,5276,1332],{"class":1304},[1086,5278,5279,5282,5284],{"class":1088,"line":1433},[1086,5280,5281],{"class":1310},"    body",[1086,5283,1314],{"class":1304},[1086,5285,1380],{"class":1304},[1086,5287,5288,5290,5292],{"class":1088,"line":1438},[1086,5289,3361],{"class":1310},[1086,5291,1314],{"class":1304},[1086,5293,1380],{"class":1304},[1086,5295,5296,5298,5300,5302,5304,5306],{"class":1088,"line":1448},[1086,5297,4495],{"class":1310},[1086,5299,1314],{"class":1304},[1086,5301,1391],{"class":1304},[1086,5303,2147],{"class":1096},[1086,5305,1329],{"class":1304},[1086,5307,1332],{"class":1304},[1086,5309,5310,5312,5314,5316,5318,5320,5322,5324,5327,5329,5331,5333,5335,5338,5340,5342,5344],{"class":1088,"line":1458},[1086,5311,4528],{"class":1310},[1086,5313,1314],{"class":1304},[1086,5315,1418],{"class":1310},[1086,5317,1865],{"class":1304},[1086,5319,2519],{"class":1310},[1086,5321,1314],{"class":1304},[1086,5323,1391],{"class":1304},[1086,5325,5326],{"class":1096},"text",[1086,5328,1329],{"class":1304},[1086,5330,1716],{"class":1304},[1086,5332,1719],{"class":1310},[1086,5334,1314],{"class":1304},[1086,5336,5337],{"class":1300}," input",[1086,5339,1808],{"class":1304},[1086,5341,3321],{"class":1300},[1086,5343,1732],{"class":1304},[1086,5345,3167],{"class":1310},[1086,5347,5348],{"class":1088,"line":1474},[1086,5349,4367],{"class":1304},[1086,5351,5352],{"class":1088,"line":1480},[1086,5353,1477],{"class":1304},[1086,5355,5356,5358],{"class":1088,"line":1485},[1086,5357,2413],{"class":1304},[1086,5359,1491],{"class":1310},[1086,5361,5362],{"class":1088,"line":2274},[1086,5363,1369],{"emptyLinePlaceholder":21},[1086,5365,5366],{"class":1088,"line":2287},[1086,5367,5368],{"class":1470},"  \u002F\u002F Navigate to the chat page\n",[1086,5370,5371,5374,5376,5378,5381,5384,5386,5388,5390,5393],{"class":1088,"line":2317},[1086,5372,5373],{"class":1109},"  navigateTo",[1086,5375,1301],{"class":1310},[1086,5377,3676],{"class":1304},[1086,5379,5380],{"class":1096},"\u002Fchat\u002F",[1086,5382,5383],{"class":1304},"${",[1086,5385,262],{"class":1300},[1086,5387,1808],{"class":1304},[1086,5389,2017],{"class":1300},[1086,5391,5392],{"class":1304},"}`",[1086,5394,1491],{"class":1310},[1086,5396,5397],{"class":1088,"line":2323},[1086,5398,5399],{"class":1304},"}\n",[1086,5401,5402,5404,5406],{"class":1088,"line":2328},[1086,5403,1635],{"class":1304},[1086,5405,5111],{"class":1310},[1086,5407,1565],{"class":1304},[1086,5409,5410],{"class":1088,"line":2360},[1086,5411,1369],{"emptyLinePlaceholder":21},[1086,5413,5414,5416,5418],{"class":1088,"line":2376},[1086,5415,1559],{"class":1304},[1086,5417,1562],{"class":1310},[1086,5419,1565],{"class":1304},[1086,5421,5422,5424,5427,5430,5432,5434,5437,5439],{"class":1088,"line":2394},[1086,5423,1572],{"class":1304},[1086,5425,5426],{"class":1310},"UDashboardPanel",[1086,5428,5429],{"class":1587}," :ui",[1086,5431,1591],{"class":1304},[1086,5433,1518],{"class":1304},[1086,5435,5436],{"class":1096},"{ body: 'p-0 sm:p-0' }",[1086,5438,1518],{"class":1304},[1086,5440,1565],{"class":1304},[1086,5442,5443,5445,5447,5450,5453],{"class":1088,"line":2410},[1086,5444,1581],{"class":1304},[1086,5446,1562],{"class":1310},[1086,5448,5449],{"class":1304}," #",[1086,5451,5452],{"class":1587},"body",[1086,5454,1565],{"class":1304},[1086,5456,5457,5459,5462,5465,5467,5469,5472,5474],{"class":1088,"line":2418},[1086,5458,1605],{"class":1304},[1086,5460,5461],{"class":1310},"UContainer",[1086,5463,5464],{"class":1587}," class",[1086,5466,1591],{"class":1304},[1086,5468,1518],{"class":1304},[1086,5470,5471],{"class":1096},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1086,5473,1518],{"class":1304},[1086,5475,1565],{"class":1304},[1086,5477,5478,5481,5484,5486,5488,5490,5493,5495],{"class":1088,"line":3413},[1086,5479,5480],{"class":1304},"        \u003C",[1086,5482,5483],{"class":1310},"h1",[1086,5485,5464],{"class":1587},[1086,5487,1591],{"class":1304},[1086,5489,1518],{"class":1304},[1086,5491,5492],{"class":1096},"text-3xl sm:text-4xl text-highlighted font-bold",[1086,5494,1518],{"class":1304},[1086,5496,1565],{"class":1304},[1086,5498,5499],{"class":1088,"line":3426},[1086,5500,5501],{"class":1300},"          How can I help you today?\n",[1086,5503,5504,5507,5509],{"class":1088,"line":3431},[1086,5505,5506],{"class":1304},"        \u003C\u002F",[1086,5508,5483],{"class":1310},[1086,5510,1565],{"class":1304},[1086,5512,5513],{"class":1088,"line":3437},[1086,5514,1369],{"emptyLinePlaceholder":21},[1086,5516,5518,5520],{"class":5517,"line":3468},[1088,1569],[1086,5519,5480],{"class":1304},[1086,5521,5522],{"class":1310},"UChatPrompt\n",[1086,5524,5526,5529,5531,5533,5535],{"class":5525,"line":3512},[1088,1569],[1086,5527,5528],{"class":1587},"          v-model",[1086,5530,1591],{"class":1304},[1086,5532,1518],{"class":1304},[1086,5534,5193],{"class":1096},[1086,5536,5537],{"class":1304},"\"\n",[1086,5539,5541,5544,5546,5548,5551],{"class":5540,"line":3519},[1088,1569],[1086,5542,5543],{"class":1587},"          :status",[1086,5545,1591],{"class":1304},[1086,5547,1518],{"class":1304},[1086,5549,5550],{"class":1096},"loading ? 'streaming' : 'ready'",[1086,5552,5537],{"class":1304},[1086,5554,5556,5559,5561,5563,5566],{"class":5555,"line":3524},[1088,1569],[1086,5557,5558],{"class":1587},"          variant",[1086,5560,1591],{"class":1304},[1086,5562,1518],{"class":1304},[1086,5564,5565],{"class":1096},"subtle",[1086,5567,5537],{"class":1304},[1086,5569,5571,5574,5576,5578,5581],{"class":5570,"line":3542},[1088,1569],[1086,5572,5573],{"class":1587},"          placeholder",[1086,5575,1591],{"class":1304},[1086,5577,1518],{"class":1304},[1086,5579,5580],{"class":1096},"Ask me anything...",[1086,5582,5537],{"class":1304},[1086,5584,5586,5589,5591,5593,5596],{"class":5585,"line":3581},[1088,1569],[1086,5587,5588],{"class":1587},"          @submit",[1086,5590,1591],{"class":1304},[1086,5592,1518],{"class":1304},[1086,5594,5595],{"class":1096},"createChat",[1086,5597,5537],{"class":1304},[1086,5599,5601],{"class":5600,"line":3587},[1088,1569],[1086,5602,5603],{"class":1304},"        >\n",[1086,5605,5607,5610,5613,5616,5618,5620,5623,5625],{"class":5606,"line":3592},[1088,1569],[1086,5608,5609],{"class":1304},"          \u003C",[1086,5611,5612],{"class":1310},"UChatPromptSubmit",[1086,5614,5615],{"class":1587}," color",[1086,5617,1591],{"class":1304},[1086,5619,1518],{"class":1304},[1086,5621,5622],{"class":1096},"neutral",[1086,5624,1518],{"class":1304},[1086,5626,1611],{"class":1304},[1086,5628,5630,5632,5634],{"class":5629,"line":3598},[1088,1569],[1086,5631,5506],{"class":1304},[1086,5633,5076],{"class":1310},[1086,5635,1565],{"class":1304},[1086,5637,5638,5641,5643],{"class":1088,"line":3618},[1086,5639,5640],{"class":1304},"      \u003C\u002F",[1086,5642,5461],{"class":1310},[1086,5644,1565],{"class":1304},[1086,5646,5647,5649,5651],{"class":1088,"line":3646},[1086,5648,1616],{"class":1304},[1086,5650,1562],{"class":1310},[1086,5652,1565],{"class":1304},[1086,5654,5655,5657,5659],{"class":1088,"line":3662},[1086,5656,1626],{"class":1304},[1086,5658,5426],{"class":1310},[1086,5660,1565],{"class":1304},[1086,5662,5663,5665,5667],{"class":1088,"line":3681},[1086,5664,1635],{"class":1304},[1086,5666,1562],{"class":1310},[1086,5668,1565],{"class":1304},[976,5670,4625,5671,5675],{},[1030,5672,5673],{"href":281},[1036,5674,5076],{}," component automatically handles:",[988,5677,5678,5685,5688,5698],{},[991,5679,5680,5681],{},"Form submission when pressing ",[5682,5683],"kbd",{"value":5684},"enter",[991,5686,5687],{},"Auto-resizing as you type",[991,5689,5690,5691,5694,5695],{},"A loading state when ",[1036,5692,5693],{},"status"," is set to ",[1036,5696,5697],{},"streaming",[991,5699,5700],{},"Focus management and keyboard shortcuts",[980,5702,5704],{"id":5703},"creating-the-chat-page","Creating the chat page",[976,5706,5707,5708,5714,5715,5722],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1030,5709,5712],{"href":5710,"rel":5711},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1034],[1036,5713,259],{}," class and ",[1030,5716,5719],{"href":5717,"rel":5718},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1034],[1036,5720,5721],{},"DefaultChatTransport"," for real-time streaming.",[1277,5724,5725],{},[1695,5726,5727],{},[1077,5728,5732],{"className":1549,"code":5729,"filename":5730,"highlights":5731,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Fchat\u002F[id].vue",[1106,1320,1335,1485,2274,2287,2317,2323,2328,2360,2376,2394,2410,2418,3413,3426,3431,3437,3468,3512,3519,3524,3542],[1036,5733,5734,5754,5784,5805,5826,5830,5844,5858,5862,5867,5915,5919,5938,5980,5984,5988,6004,6008,6013,6031,6051,6070,6086,6113,6122,6137,6143,6170,6186,6191,6196,6211,6226,6242,6259,6273,6280,6285,6292,6296,6318,6330,6350,6378,6392,6396,6400,6404,6409,6422,6450,6461,6465,6471,6479,6483,6491,6509,6521,6540,6547,6561,6574,6579,6593,6597,6622,6700,6708,6722,6736,6750,6755,6763,6776,6790,6804,6809,6819,6823,6846,6852,6866,6878,6891,6903,6907,6937,6942,6951,6959,6968,6977,6985,6989,6995,7007,7021,7033,7046,7059,7063,7070,7083,7096,7110,7124,7129,7137,7145,7153,7161],{"__ignoreMap":1082},[1086,5735,5736,5738,5740,5742,5744,5746,5748,5750,5752],{"class":1088,"line":1089},[1086,5737,1559],{"class":1304},[1086,5739,5111],{"class":1310},[1086,5741,5114],{"class":1587},[1086,5743,5117],{"class":1587},[1086,5745,1591],{"class":1304},[1086,5747,1518],{"class":1304},[1086,5749,1283],{"class":1096},[1086,5751,1518],{"class":1304},[1086,5753,1565],{"class":1304},[1086,5755,5757,5759,5761,5764,5766,5769,5771,5774,5776,5778,5780,5782],{"class":5756,"line":1106},[1088,1569],[1086,5758,1707],{"class":1290},[1086,5760,1710],{"class":1304},[1086,5762,5763],{"class":1300}," DefaultChatTransport",[1086,5765,1716],{"class":1304},[1086,5767,5768],{"class":1300}," isReasoningUIPart",[1086,5770,1716],{"class":1304},[1086,5772,5773],{"class":1300}," isTextUIPart",[1086,5775,1732],{"class":1304},[1086,5777,1735],{"class":1290},[1086,5779,1391],{"class":1304},[1086,5781,2533],{"class":1096},[1086,5783,1355],{"class":1304},[1086,5785,5787,5789,5791,5794,5796,5798,5800,5803],{"class":5786,"line":1320},[1088,1569],[1086,5788,1707],{"class":1290},[1086,5790,1710],{"class":1304},[1086,5792,5793],{"class":1300}," Chat",[1086,5795,1732],{"class":1304},[1086,5797,1735],{"class":1290},[1086,5799,1391],{"class":1304},[1086,5801,5802],{"class":1096},"@ai-sdk\u002Fvue",[1086,5804,1355],{"class":1304},[1086,5806,5808,5810,5812,5815,5817,5819,5821,5824],{"class":5807,"line":1335},[1088,1569],[1086,5809,1707],{"class":1290},[1086,5811,1710],{"class":1304},[1086,5813,5814],{"class":1300}," isPartStreaming",[1086,5816,1732],{"class":1304},[1086,5818,1735],{"class":1290},[1086,5820,1391],{"class":1304},[1086,5822,5823],{"class":1096},"@nuxt\u002Fui\u002Futils\u002Fai",[1086,5825,1355],{"class":1304},[1086,5827,5828],{"class":1088,"line":1347},[1086,5829,1369],{"emptyLinePlaceholder":21},[1086,5831,5832,5834,5837,5839,5842],{"class":1088,"line":1358},[1086,5833,3060],{"class":1587},[1086,5835,5836],{"class":1300}," route ",[1086,5838,1591],{"class":1304},[1086,5840,5841],{"class":1109}," useRoute",[1086,5843,2668],{"class":1300},[1086,5845,5846,5848,5851,5853,5856],{"class":1088,"line":1366},[1086,5847,3060],{"class":1587},[1086,5849,5850],{"class":1300}," toast ",[1086,5852,1591],{"class":1304},[1086,5854,5855],{"class":1109}," useToast",[1086,5857,2668],{"class":1300},[1086,5859,5860],{"class":1088,"line":1372},[1086,5861,1369],{"emptyLinePlaceholder":21},[1086,5863,5864],{"class":1088,"line":1383},[1086,5865,5866],{"class":1470},"\u002F\u002F Fetch existing chat data\n",[1086,5868,5869,5871,5873,5876,5878,5881,5883,5885,5887,5890,5892,5894,5897,5899,5902,5904,5907,5909,5911,5913],{"class":1088,"line":1399},[1086,5870,3060],{"class":1587},[1086,5872,1710],{"class":1304},[1086,5874,5875],{"class":1310}," data",[1086,5877,1314],{"class":1304},[1086,5879,5880],{"class":1300}," chatData ",[1086,5882,1488],{"class":1304},[1086,5884,2622],{"class":1304},[1086,5886,2625],{"class":1290},[1086,5888,5889],{"class":1109}," useFetch",[1086,5891,1301],{"class":1300},[1086,5893,3676],{"class":1304},[1086,5895,5896],{"class":1096},"\u002Fapi\u002Fchats\u002F",[1086,5898,5383],{"class":1304},[1086,5900,5901],{"class":1300},"route",[1086,5903,1808],{"class":1304},[1086,5905,5906],{"class":1300},"params",[1086,5908,1808],{"class":1304},[1086,5910,2017],{"class":1300},[1086,5912,5392],{"class":1304},[1086,5914,1491],{"class":1300},[1086,5916,5917],{"class":1088,"line":1405},[1086,5918,1369],{"emptyLinePlaceholder":21},[1086,5920,5921,5924,5926,5928,5931,5933,5936],{"class":1088,"line":1410},[1086,5922,5923],{"class":1290},"if",[1086,5925,1951],{"class":1300},[1086,5927,3532],{"class":1304},[1086,5929,5930],{"class":1300},"chatData",[1086,5932,1808],{"class":1304},[1086,5934,5935],{"class":1300},"value) ",[1086,5937,1305],{"class":1304},[1086,5939,5940,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,5969,5972,5974,5976,5978],{"class":1088,"line":1433},[1086,5941,5942],{"class":1290},"  throw",[1086,5944,2898],{"class":1109},[1086,5946,1301],{"class":1310},[1086,5948,1865],{"class":1304},[1086,5950,3554],{"class":1310},[1086,5952,1314],{"class":1304},[1086,5954,3560],{"class":3559},[1086,5956,1716],{"class":1304},[1086,5958,3565],{"class":1310},[1086,5960,1314],{"class":1304},[1086,5962,1391],{"class":1304},[1086,5964,3572],{"class":1096},[1086,5966,1329],{"class":1304},[1086,5968,1716],{"class":1304},[1086,5970,5971],{"class":1310}," fatal",[1086,5973,1314],{"class":1304},[1086,5975,4168],{"class":1466},[1086,5977,1732],{"class":1304},[1086,5979,1491],{"class":1310},[1086,5981,5982],{"class":1088,"line":1438},[1086,5983,5399],{"class":1304},[1086,5985,5986],{"class":1088,"line":1448},[1086,5987,1369],{"emptyLinePlaceholder":21},[1086,5989,5990,5992,5994,5996,5998,6000,6002],{"class":1088,"line":1458},[1086,5991,3060],{"class":1587},[1086,5993,5134],{"class":1300},[1086,5995,1591],{"class":1304},[1086,5997,5139],{"class":1109},[1086,5999,1301],{"class":1300},[1086,6001,5144],{"class":1304},[1086,6003,1491],{"class":1300},[1086,6005,6006],{"class":1088,"line":1474},[1086,6007,1369],{"emptyLinePlaceholder":21},[1086,6009,6010],{"class":1088,"line":1480},[1086,6011,6012],{"class":1470},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1086,6014,6016,6018,6021,6023,6025,6027,6029],{"class":6015,"line":1485},[1088,1569],[1086,6017,3060],{"class":1587},[1086,6019,6020],{"class":1300}," chat ",[1086,6022,1591],{"class":1304},[1086,6024,1902],{"class":1304},[1086,6026,5793],{"class":1109},[1086,6028,1301],{"class":1300},[1086,6030,1305],{"class":1304},[1086,6032,6034,6036,6038,6041,6043,6045,6047,6049],{"class":6033,"line":2274},[1088,1569],[1086,6035,1798],{"class":1310},[1086,6037,1314],{"class":1304},[1086,6039,6040],{"class":1300}," chatData",[1086,6042,1808],{"class":1304},[1086,6044,3321],{"class":1300},[1086,6046,1808],{"class":1304},[1086,6048,2017],{"class":1300},[1086,6050,1332],{"class":1304},[1086,6052,6054,6056,6058,6060,6062,6064,6066,6068],{"class":6053,"line":2287},[1088,1569],[1086,6055,1958],{"class":1310},[1086,6057,1314],{"class":1304},[1086,6059,6040],{"class":1300},[1086,6061,1808],{"class":1304},[1086,6063,3321],{"class":1300},[1086,6065,1808],{"class":1304},[1086,6067,1996],{"class":1300},[1086,6069,1332],{"class":1304},[1086,6071,6073,6076,6078,6080,6082,6084],{"class":6072,"line":2317},[1088,1569],[1086,6074,6075],{"class":1310},"  transport",[1086,6077,1314],{"class":1304},[1086,6079,1902],{"class":1304},[1086,6081,5763],{"class":1109},[1086,6083,1301],{"class":1300},[1086,6085,1305],{"class":1304},[1086,6087,6089,6092,6094,6096,6098,6100,6102,6104,6106,6108,6110],{"class":6088,"line":2323},[1088,1569],[1086,6090,6091],{"class":1310},"    api",[1086,6093,1314],{"class":1304},[1086,6095,3670],{"class":1304},[1086,6097,5896],{"class":1096},[1086,6099,5383],{"class":1304},[1086,6101,5930],{"class":1300},[1086,6103,1808],{"class":1304},[1086,6105,3321],{"class":1300},[1086,6107,1808],{"class":1304},[1086,6109,2017],{"class":1300},[1086,6111,6112],{"class":1304},"}`\n",[1086,6114,6116,6118,6120],{"class":6115,"line":2328},[1088,1569],[1086,6117,2413],{"class":1304},[1086,6119,1882],{"class":1300},[1086,6121,1332],{"class":1304},[1086,6123,6125,6128,6130,6133,6135],{"class":6124,"line":2360},[1088,1569],[1086,6126,6127],{"class":1310},"  onData",[1086,6129,1301],{"class":1304},[1086,6131,6132],{"class":1942},"dataPart",[1086,6134,1882],{"class":1304},[1086,6136,1380],{"class":1304},[1086,6138,6140],{"class":6139,"line":2376},[1088,1569],[1086,6141,6142],{"class":1470},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1086,6144,6146,6149,6151,6153,6155,6158,6160,6162,6164,6166,6168],{"class":6145,"line":2394},[1088,1569],[1086,6147,6148],{"class":1290},"    if",[1086,6150,1951],{"class":1310},[1086,6152,6132],{"class":1300},[1086,6154,1808],{"class":1304},[1086,6156,6157],{"class":1300},"type",[1086,6159,3348],{"class":1304},[1086,6161,1391],{"class":1304},[1086,6163,4315],{"class":1096},[1086,6165,1329],{"class":1304},[1086,6167,3537],{"class":1310},[1086,6169,1305],{"class":1304},[1086,6171,6173,6176,6178,6180,6182,6184],{"class":6172,"line":2410},[1088,1569],[1086,6174,6175],{"class":1109},"      refreshNuxtData",[1086,6177,1301],{"class":1310},[1086,6179,1329],{"class":1304},[1086,6181,1787],{"class":1096},[1086,6183,1329],{"class":1304},[1086,6185,1491],{"class":1310},[1086,6187,6189],{"class":6188,"line":2418},[1088,1569],[1086,6190,1477],{"class":1304},[1086,6192,6194],{"class":6193,"line":3413},[1088,1569],[1086,6195,1402],{"class":1304},[1086,6197,6199,6202,6204,6207,6209],{"class":6198,"line":3426},[1088,1569],[1086,6200,6201],{"class":1310},"  onError",[1086,6203,1301],{"class":1304},[1086,6205,6206],{"class":1942},"error",[1086,6208,1882],{"class":1304},[1086,6210,1380],{"class":1304},[1086,6212,6214,6217,6219,6222,6224],{"class":6213,"line":3431},[1088,1569],[1086,6215,6216],{"class":1300},"    toast",[1086,6218,1808],{"class":1304},[1086,6220,6221],{"class":1109},"add",[1086,6223,1301],{"class":1310},[1086,6225,1305],{"class":1304},[1086,6227,6229,6232,6234,6236,6238,6240],{"class":6228,"line":3437},[1088,1569],[1086,6230,6231],{"class":1310},"      title",[1086,6233,1314],{"class":1304},[1086,6235,1391],{"class":1304},[1086,6237,497],{"class":1096},[1086,6239,1329],{"class":1304},[1086,6241,1332],{"class":1304},[1086,6243,6245,6248,6250,6253,6255,6257],{"class":6244,"line":3468},[1088,1569],[1086,6246,6247],{"class":1310},"      description",[1086,6249,1314],{"class":1304},[1086,6251,6252],{"class":1300}," error",[1086,6254,1808],{"class":1304},[1086,6256,4467],{"class":1300},[1086,6258,1332],{"class":1304},[1086,6260,6262,6265,6267,6269,6271],{"class":6261,"line":3512},[1088,1569],[1086,6263,6264],{"class":1310},"      color",[1086,6266,1314],{"class":1304},[1086,6268,1391],{"class":1304},[1086,6270,6206],{"class":1096},[1086,6272,1355],{"class":1304},[1086,6274,6276,6278],{"class":6275,"line":3519},[1088,1569],[1086,6277,3375],{"class":1304},[1086,6279,1491],{"class":1310},[1086,6281,6283],{"class":6282,"line":3524},[1088,1569],[1086,6284,3584],{"class":1304},[1086,6286,6288,6290],{"class":6287,"line":3542},[1088,1569],[1086,6289,1488],{"class":1304},[1086,6291,1491],{"class":1300},[1086,6293,6294],{"class":1088,"line":3581},[1086,6295,1369],{"emptyLinePlaceholder":21},[1086,6297,6298,6301,6304,6306,6309,6311,6314,6316],{"class":1088,"line":3587},[1086,6299,6300],{"class":1587},"function",[1086,6302,6303],{"class":1109}," handleSubmit",[1086,6305,1301],{"class":1304},[1086,6307,6308],{"class":1942},"e",[1086,6310,1314],{"class":1304},[1086,6312,6313],{"class":1092}," Event",[1086,6315,1882],{"class":1304},[1086,6317,1380],{"class":1304},[1086,6319,6320,6323,6325,6328],{"class":1088,"line":3592},[1086,6321,6322],{"class":1300},"  e",[1086,6324,1808],{"class":1304},[1086,6326,6327],{"class":1109},"preventDefault",[1086,6329,2668],{"class":1310},[1086,6331,6332,6334,6336,6338,6340,6342,6344,6346,6348],{"class":1088,"line":3598},[1086,6333,3527],{"class":1290},[1086,6335,1951],{"class":1310},[1086,6337,5193],{"class":1300},[1086,6339,1808],{"class":1304},[1086,6341,3321],{"class":1300},[1086,6343,1808],{"class":1304},[1086,6345,5202],{"class":1109},[1086,6347,5205],{"class":1310},[1086,6349,1305],{"class":1304},[1086,6351,6352,6355,6357,6360,6362,6364,6366,6368,6370,6372,6374,6376],{"class":1088,"line":3618},[1086,6353,6354],{"class":1300},"    chat",[1086,6356,1808],{"class":1304},[1086,6358,6359],{"class":1109},"sendMessage",[1086,6361,1301],{"class":1310},[1086,6363,1865],{"class":1304},[1086,6365,1719],{"class":1310},[1086,6367,1314],{"class":1304},[1086,6369,5337],{"class":1300},[1086,6371,1808],{"class":1304},[1086,6373,3321],{"class":1300},[1086,6375,1732],{"class":1304},[1086,6377,1491],{"class":1310},[1086,6379,6380,6383,6385,6387,6389],{"class":1088,"line":3646},[1086,6381,6382],{"class":1300},"    input",[1086,6384,1808],{"class":1304},[1086,6386,3321],{"class":1300},[1086,6388,2622],{"class":1304},[1086,6390,6391],{"class":1304}," ''\n",[1086,6393,6394],{"class":1088,"line":3662},[1086,6395,3584],{"class":1304},[1086,6397,6398],{"class":1088,"line":3681},[1086,6399,5399],{"class":1304},[1086,6401,6402],{"class":1088,"line":3709},[1086,6403,1369],{"emptyLinePlaceholder":21},[1086,6405,6406],{"class":1088,"line":3716},[1086,6407,6408],{"class":1470},"\u002F\u002F Auto-generate response for first message\n",[1086,6410,6411,6414,6416,6418,6420],{"class":1088,"line":3721},[1086,6412,6413],{"class":1109},"onMounted",[1086,6415,1301],{"class":1300},[1086,6417,1805],{"class":1304},[1086,6419,1825],{"class":1587},[1086,6421,1380],{"class":1304},[1086,6423,6424,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446,6448],{"class":1088,"line":3787},[1086,6425,3527],{"class":1290},[1086,6427,1951],{"class":1310},[1086,6429,5930],{"class":1300},[1086,6431,1808],{"class":1304},[1086,6433,3321],{"class":1300},[1086,6435,3842],{"class":1304},[1086,6437,1996],{"class":1300},[1086,6439,1808],{"class":1304},[1086,6441,3821],{"class":1300},[1086,6443,3348],{"class":1304},[1086,6445,3827],{"class":3559},[1086,6447,3537],{"class":1310},[1086,6449,1305],{"class":1304},[1086,6451,6452,6454,6456,6459],{"class":1088,"line":3792},[1086,6453,6354],{"class":1300},[1086,6455,1808],{"class":1304},[1086,6457,6458],{"class":1109},"regenerate",[1086,6460,2668],{"class":1310},[1086,6462,6463],{"class":1088,"line":3797},[1086,6464,3584],{"class":1304},[1086,6466,6467,6469],{"class":1088,"line":3803},[1086,6468,1488],{"class":1304},[1086,6470,1491],{"class":1300},[1086,6472,6473,6475,6477],{"class":1088,"line":3832},[1086,6474,1635],{"class":1304},[1086,6476,5111],{"class":1310},[1086,6478,1565],{"class":1304},[1086,6480,6481],{"class":1088,"line":3873},[1086,6482,1369],{"emptyLinePlaceholder":21},[1086,6484,6485,6487,6489],{"class":1088,"line":3902},[1086,6486,1559],{"class":1304},[1086,6488,1562],{"class":1310},[1086,6490,1565],{"class":1304},[1086,6492,6493,6495,6497,6499,6501,6503,6505,6507],{"class":1088,"line":3914},[1086,6494,1572],{"class":1304},[1086,6496,5426],{"class":1310},[1086,6498,5429],{"class":1587},[1086,6500,1591],{"class":1304},[1086,6502,1518],{"class":1304},[1086,6504,5436],{"class":1096},[1086,6506,1518],{"class":1304},[1086,6508,1565],{"class":1304},[1086,6510,6511,6513,6515,6517,6519],{"class":1088,"line":3930},[1086,6512,1581],{"class":1304},[1086,6514,1562],{"class":1310},[1086,6516,5449],{"class":1304},[1086,6518,5452],{"class":1587},[1086,6520,1565],{"class":1304},[1086,6522,6523,6525,6527,6529,6531,6533,6536,6538],{"class":1088,"line":3944},[1086,6524,1605],{"class":1304},[1086,6526,5461],{"class":1310},[1086,6528,5464],{"class":1587},[1086,6530,1591],{"class":1304},[1086,6532,1518],{"class":1304},[1086,6534,6535],{"class":1096},"min-h-dvh flex flex-col py-4 sm:py-6",[1086,6537,1518],{"class":1304},[1086,6539,1565],{"class":1304},[1086,6541,6542,6544],{"class":1088,"line":3951},[1086,6543,5480],{"class":1304},[1086,6545,6546],{"class":1310},"UChatMessages\n",[1086,6548,6549,6552,6554,6556,6559],{"class":1088,"line":3956},[1086,6550,6551],{"class":1587},"          :messages",[1086,6553,1591],{"class":1304},[1086,6555,1518],{"class":1304},[1086,6557,6558],{"class":1096},"chat.messages",[1086,6560,5537],{"class":1304},[1086,6562,6563,6565,6567,6569,6572],{"class":1088,"line":3961},[1086,6564,5543],{"class":1587},[1086,6566,1591],{"class":1304},[1086,6568,1518],{"class":1304},[1086,6570,6571],{"class":1096},"chat.status",[1086,6573,5537],{"class":1304},[1086,6575,6576],{"class":1088,"line":3967},[1086,6577,6578],{"class":1587},"          should-auto-scroll\n",[1086,6580,6581,6584,6586,6588,6591],{"class":1088,"line":3984},[1086,6582,6583],{"class":1587},"          class",[1086,6585,1591],{"class":1304},[1086,6587,1518],{"class":1304},[1086,6589,6590],{"class":1096},"flex-1",[1086,6592,5537],{"class":1304},[1086,6594,6595],{"class":1088,"line":4006},[1086,6596,5603],{"class":1304},[1086,6598,6599,6601,6603,6605,6607,6609,6611,6613,6616,6618,6620],{"class":1088,"line":4024},[1086,6600,5609],{"class":1304},[1086,6602,1562],{"class":1310},[1086,6604,5449],{"class":1304},[1086,6606,371],{"class":1587},[1086,6608,1591],{"class":1304},[1086,6610,1518],{"class":1304},[1086,6612,1865],{"class":1304},[1086,6614,6615],{"class":1300}," message ",[1086,6617,1488],{"class":1304},[1086,6619,1518],{"class":1304},[1086,6621,1565],{"class":1304},[1086,6623,6624,6627,6629,6632,6634,6636,6639,6641,6644,6647,6649,6651,6653,6655,6658,6661,6663,6666,6668,6670,6672,6674,6677,6679,6682,6684,6686,6688,6690,6692,6695,6698],{"class":1088,"line":4032},[1086,6625,6626],{"class":1304},"            \u003C",[1086,6628,1562],{"class":1310},[1086,6630,6631],{"class":1290}," v-for",[1086,6633,1591],{"class":1304},[1086,6635,1518],{"class":1304},[1086,6637,6638],{"class":1300},"(part",[1086,6640,1716],{"class":1304},[1086,6642,6643],{"class":1300}," index) ",[1086,6645,6646],{"class":1304},"in",[1086,6648,2617],{"class":1300},[1086,6650,1808],{"class":1304},[1086,6652,2198],{"class":1300},[1086,6654,1518],{"class":1304},[1086,6656,6657],{"class":1304}," :",[1086,6659,6660],{"class":1587},"key",[1086,6662,1591],{"class":1304},[1086,6664,6665],{"class":1304},"\"`${",[1086,6667,4467],{"class":1300},[1086,6669,1808],{"class":1304},[1086,6671,2017],{"class":1300},[1086,6673,1488],{"class":1304},[1086,6675,6676],{"class":1096},"-",[1086,6678,5383],{"class":1304},[1086,6680,6681],{"class":1300},"part",[1086,6683,1808],{"class":1304},[1086,6685,6157],{"class":1300},[1086,6687,1488],{"class":1304},[1086,6689,6676],{"class":1096},[1086,6691,5383],{"class":1304},[1086,6693,6694],{"class":1300},"index",[1086,6696,6697],{"class":1304},"}`\"",[1086,6699,1565],{"class":1304},[1086,6701,6702,6705],{"class":1088,"line":4049},[1086,6703,6704],{"class":1304},"              \u003C",[1086,6706,6707],{"class":1310},"UChatReasoning\n",[1086,6709,6710,6713,6715,6717,6720],{"class":1088,"line":4070},[1086,6711,6712],{"class":1587},"                v-if",[1086,6714,1591],{"class":1304},[1086,6716,1518],{"class":1304},[1086,6718,6719],{"class":1096},"isReasoningUIPart(part)",[1086,6721,5537],{"class":1304},[1086,6723,6724,6727,6729,6731,6734],{"class":1088,"line":4080},[1086,6725,6726],{"class":1587},"                :text",[1086,6728,1591],{"class":1304},[1086,6730,1518],{"class":1304},[1086,6732,6733],{"class":1096},"part.text",[1086,6735,5537],{"class":1304},[1086,6737,6738,6741,6743,6745,6748],{"class":1088,"line":4090},[1086,6739,6740],{"class":1587},"                :streaming",[1086,6742,1591],{"class":1304},[1086,6744,1518],{"class":1304},[1086,6746,6747],{"class":1096},"isPartStreaming(part)",[1086,6749,5537],{"class":1304},[1086,6751,6752],{"class":1088,"line":4100},[1086,6753,6754],{"class":1304},"              >\n",[1086,6756,6757,6760],{"class":1088,"line":4117},[1086,6758,6759],{"class":1304},"                \u003C",[1086,6761,6762],{"class":1310},"MDC\n",[1086,6764,6765,6768,6770,6772,6774],{"class":1088,"line":4128},[1086,6766,6767],{"class":1587},"                  :value",[1086,6769,1591],{"class":1304},[1086,6771,1518],{"class":1304},[1086,6773,6733],{"class":1096},[1086,6775,5537],{"class":1304},[1086,6777,6778,6781,6783,6785,6788],{"class":1088,"line":4134},[1086,6779,6780],{"class":1587},"                  :cache-key",[1086,6782,1591],{"class":1304},[1086,6784,1518],{"class":1304},[1086,6786,6787],{"class":1096},"`reasoning-${message.id}-${index}`",[1086,6789,5537],{"class":1304},[1086,6791,6792,6795,6797,6799,6802],{"class":1088,"line":4140},[1086,6793,6794],{"class":1587},"                  class",[1086,6796,1591],{"class":1304},[1086,6798,1518],{"class":1304},[1086,6800,6801],{"class":1096},"*:first:mt-0 *:last:mb-0",[1086,6803,5537],{"class":1304},[1086,6805,6806],{"class":1088,"line":4150},[1086,6807,6808],{"class":1304},"                \u002F>\n",[1086,6810,6811,6814,6817],{"class":1088,"line":4160},[1086,6812,6813],{"class":1304},"              \u003C\u002F",[1086,6815,6816],{"class":1310},"UChatReasoning",[1086,6818,1565],{"class":1304},[1086,6820,6821],{"class":1088,"line":4173},[1086,6822,1369],{"emptyLinePlaceholder":21},[1086,6824,6825,6827,6829,6832,6834,6836,6839,6842,6844],{"class":1088,"line":4188},[1086,6826,6704],{"class":1304},[1086,6828,1562],{"class":1310},[1086,6830,6831],{"class":1290}," v-else-if",[1086,6833,1591],{"class":1304},[1086,6835,1518],{"class":1304},[1086,6837,6838],{"class":1109},"isTextUIPart",[1086,6840,6841],{"class":1300},"(part)",[1086,6843,1518],{"class":1304},[1086,6845,1565],{"class":1304},[1086,6847,6848,6850],{"class":1088,"line":4193},[1086,6849,6759],{"class":1304},[1086,6851,6762],{"class":1310},[1086,6853,6854,6857,6859,6861,6864],{"class":1088,"line":4198},[1086,6855,6856],{"class":1587},"                  v-if",[1086,6858,1591],{"class":1304},[1086,6860,1518],{"class":1304},[1086,6862,6863],{"class":1096},"message.role === 'assistant'",[1086,6865,5537],{"class":1304},[1086,6867,6868,6870,6872,6874,6876],{"class":1088,"line":4208},[1086,6869,6767],{"class":1587},[1086,6871,1591],{"class":1304},[1086,6873,1518],{"class":1304},[1086,6875,6733],{"class":1096},[1086,6877,5537],{"class":1304},[1086,6879,6880,6882,6884,6886,6889],{"class":1088,"line":4224},[1086,6881,6780],{"class":1587},[1086,6883,1591],{"class":1304},[1086,6885,1518],{"class":1304},[1086,6887,6888],{"class":1096},"`${message.id}-${index}`",[1086,6890,5537],{"class":1304},[1086,6892,6893,6895,6897,6899,6901],{"class":1088,"line":4239},[1086,6894,6794],{"class":1587},[1086,6896,1591],{"class":1304},[1086,6898,1518],{"class":1304},[1086,6900,6801],{"class":1096},[1086,6902,5537],{"class":1304},[1086,6904,6905],{"class":1088,"line":4245},[1086,6906,6808],{"class":1304},[1086,6908,6909,6911,6913,6915,6917,6919,6922,6924,6926,6928,6930,6933,6935],{"class":1088,"line":4251},[1086,6910,6759],{"class":1304},[1086,6912,976],{"class":1310},[1086,6914,6831],{"class":1587},[1086,6916,1591],{"class":1304},[1086,6918,1518],{"class":1304},[1086,6920,6921],{"class":1096},"message.role === 'user'",[1086,6923,1518],{"class":1304},[1086,6925,5464],{"class":1587},[1086,6927,1591],{"class":1304},[1086,6929,1518],{"class":1304},[1086,6931,6932],{"class":1096},"whitespace-pre-wrap",[1086,6934,1518],{"class":1304},[1086,6936,1565],{"class":1304},[1086,6938,6939],{"class":1088,"line":4259},[1086,6940,6941],{"class":1300},"                  {{ part.text }}\n",[1086,6943,6944,6947,6949],{"class":1088,"line":4264},[1086,6945,6946],{"class":1304},"                \u003C\u002F",[1086,6948,976],{"class":1310},[1086,6950,1565],{"class":1304},[1086,6952,6953,6955,6957],{"class":1088,"line":4270},[1086,6954,6813],{"class":1304},[1086,6956,1562],{"class":1310},[1086,6958,1565],{"class":1304},[1086,6960,6961,6964,6966],{"class":1088,"line":4290},[1086,6962,6963],{"class":1304},"            \u003C\u002F",[1086,6965,1562],{"class":1310},[1086,6967,1565],{"class":1304},[1086,6969,6970,6973,6975],{"class":1088,"line":4305},[1086,6971,6972],{"class":1304},"          \u003C\u002F",[1086,6974,1562],{"class":1310},[1086,6976,1565],{"class":1304},[1086,6978,6979,6981,6983],{"class":1088,"line":4322},[1086,6980,5506],{"class":1304},[1086,6982,5082],{"class":1310},[1086,6984,1565],{"class":1304},[1086,6986,6987],{"class":1088,"line":4345},[1086,6988,1369],{"emptyLinePlaceholder":21},[1086,6990,6991,6993],{"class":1088,"line":4356},[1086,6992,5480],{"class":1304},[1086,6994,5522],{"class":1310},[1086,6996,6997,6999,7001,7003,7005],{"class":1088,"line":4364},[1086,6998,5528],{"class":1587},[1086,7000,1591],{"class":1304},[1086,7002,1518],{"class":1304},[1086,7004,5193],{"class":1096},[1086,7006,5537],{"class":1304},[1086,7008,7009,7012,7014,7016,7019],{"class":1088,"line":4370},[1086,7010,7011],{"class":1587},"          :error",[1086,7013,1591],{"class":1304},[1086,7015,1518],{"class":1304},[1086,7017,7018],{"class":1096},"chat.error",[1086,7020,5537],{"class":1304},[1086,7022,7023,7025,7027,7029,7031],{"class":1088,"line":4375},[1086,7024,5558],{"class":1587},[1086,7026,1591],{"class":1304},[1086,7028,1518],{"class":1304},[1086,7030,5565],{"class":1096},[1086,7032,5537],{"class":1304},[1086,7034,7035,7037,7039,7041,7044],{"class":1088,"line":4398},[1086,7036,6583],{"class":1587},[1086,7038,1591],{"class":1304},[1086,7040,1518],{"class":1304},[1086,7042,7043],{"class":1096},"sticky bottom-0",[1086,7045,5537],{"class":1304},[1086,7047,7048,7050,7052,7054,7057],{"class":1088,"line":4404},[1086,7049,5588],{"class":1587},[1086,7051,1591],{"class":1304},[1086,7053,1518],{"class":1304},[1086,7055,7056],{"class":1096},"handleSubmit",[1086,7058,5537],{"class":1304},[1086,7060,7061],{"class":1088,"line":4424},[1086,7062,5603],{"class":1304},[1086,7064,7065,7067],{"class":1088,"line":4430},[1086,7066,5609],{"class":1304},[1086,7068,7069],{"class":1310},"UChatPromptSubmit\n",[1086,7071,7072,7075,7077,7079,7081],{"class":1088,"line":4476},[1086,7073,7074],{"class":1587},"            :status",[1086,7076,1591],{"class":1304},[1086,7078,1518],{"class":1304},[1086,7080,6571],{"class":1096},[1086,7082,5537],{"class":1304},[1086,7084,7085,7088,7090,7092,7094],{"class":1088,"line":4492},[1086,7086,7087],{"class":1587},"            color",[1086,7089,1591],{"class":1304},[1086,7091,1518],{"class":1304},[1086,7093,5622],{"class":1096},[1086,7095,5537],{"class":1304},[1086,7097,7098,7101,7103,7105,7108],{"class":1088,"line":4525},[1086,7099,7100],{"class":1587},"            @stop",[1086,7102,1591],{"class":1304},[1086,7104,1518],{"class":1304},[1086,7106,7107],{"class":1096},"chat.stop()",[1086,7109,5537],{"class":1304},[1086,7111,7112,7115,7117,7119,7122],{"class":1088,"line":4539},[1086,7113,7114],{"class":1587},"            @reload",[1086,7116,1591],{"class":1304},[1086,7118,1518],{"class":1304},[1086,7120,7121],{"class":1096},"chat.regenerate()",[1086,7123,5537],{"class":1304},[1086,7125,7126],{"class":1088,"line":4547},[1086,7127,7128],{"class":1304},"          \u002F>\n",[1086,7130,7131,7133,7135],{"class":1088,"line":4552},[1086,7132,5506],{"class":1304},[1086,7134,5076],{"class":1310},[1086,7136,1565],{"class":1304},[1086,7138,7139,7141,7143],{"class":1088,"line":4559},[1086,7140,5640],{"class":1304},[1086,7142,5461],{"class":1310},[1086,7144,1565],{"class":1304},[1086,7146,7147,7149,7151],{"class":1088,"line":4564},[1086,7148,1616],{"class":1304},[1086,7150,1562],{"class":1310},[1086,7152,1565],{"class":1304},[1086,7154,7155,7157,7159],{"class":1088,"line":4582},[1086,7156,1626],{"class":1304},[1086,7158,5426],{"class":1310},[1086,7160,1565],{"class":1304},[1086,7162,7164,7166,7168],{"class":1088,"line":7163},112,[1086,7165,1635],{"class":1304},[1086,7167,1562],{"class":1310},[1086,7169,1565],{"class":1304},[976,7171,7172],{},"Here's a breakdown of the key parts:",[976,7174,7175],{},[994,7176,7177],{},"The Chat Class",[976,7179,4625,7180,7185,7186,7188],{},[1030,7181,7183],{"href":5710,"rel":7182},[1034],[1036,7184,259],{}," class from ",[1036,7187,5802],{}," manages the entire conversation state. It handles:",[988,7190,7191,7196,7211,7217,7222],{},[991,7192,7193,7194],{},"Message history with ",[1036,7195,6558],{},[991,7197,7198,7199,1951,7201,2863,7204,2863,7207,2863,7209,1882],{},"Connection status with ",[1036,7200,6571],{},[1036,7202,7203],{},"ready",[1036,7205,7206],{},"submitted",[1036,7208,5697],{},[1036,7210,6206],{},[991,7212,7213,7214],{},"Sending messages with ",[1036,7215,7216],{},"chat.sendMessage()",[991,7218,7219,7220],{},"Stopping generation with ",[1036,7221,7107],{},[991,7223,7224,7225],{},"Regenerating responses with ",[1036,7226,7121],{},[976,7228,4625,7229,7232,7233,7238,7239,7241],{},[1036,7230,7231],{},"onData"," callback receives ",[1030,7234,7237],{"href":7235,"rel":7236},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1034],"custom data events"," from the server (like ",[1036,7240,4315],{},"), allowing you to react to server-side events during streaming.",[976,7243,7244],{},[994,7245,7246],{},"UChatMessages Component",[976,7248,4625,7249,7253],{},[1030,7250,7251],{"href":271},[1036,7252,5082],{}," component is purpose-built for AI chatbots with:",[988,7255,7256,7259,7262,7265],{},[991,7257,7258],{},"Auto-scroll to bottom on load",[991,7260,7261],{},"Continuous scrolling as messages stream in",[991,7263,7264],{},"A loading indicator while the assistant processes",[991,7266,7267],{},"An \"Auto scroll\" button when scrolled up",[976,7269,7270],{},[994,7271,7272],{},"Rendering Markdown with MDC",[976,7274,7275,7276,7278,7279,1039,7281,7284,7285,7292,7293,7299,7300,7304,7305,7308,7309,7311],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). We iterate over message ",[1036,7277,2198],{}," using AI SDK helpers like ",[1036,7280,6838],{},[1036,7282,7283],{},"isReasoningUIPart",", rendering text with the ",[1030,7286,7289],{"href":7287,"rel":7288},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc#mdc",[1034],[1036,7290,7291],{},"MDC"," component from ",[1030,7294,7297],{"href":7295,"rel":7296},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc",[1034],[1036,7298,1340],{}," and reasoning with ",[1030,7301,7302],{"href":291},[1036,7303,6816],{},". The ",[1036,7306,7307],{},"isPartStreaming"," utility from ",[1036,7310,5823],{}," detects if a part is currently being streamed.",[1665,7313,7314],{"to":859},[976,7315,7316],{},"Nuxt UI provides pre-styled prose components, so your markdown content will be automatically styled to match your theme.",[976,7318,7319],{},[994,7320,7321],{},"UChatPromptSubmit Component",[976,7323,4625,7324,7328],{},[1030,7325,7326],{"href":286},[1036,7327,5612],{}," component adapts based on the chat status:",[988,7330,7331,7334,7337],{},[991,7332,7333],{},"Shows a send button when ready",[991,7335,7336],{},"Shows a stop button while streaming",[991,7338,7339],{},"Shows a reload button after an error",[980,7341,7343],{"id":7342},"adding-chat-history","Adding chat history",[976,7345,7346],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1114,7348,7350],{"id":7349},"listing-chats-api","Listing chats API",[976,7352,7353],{},"First, create an endpoint to fetch all chats:",[1277,7355,7356],{},[1077,7357,7360],{"className":1281,"code":7358,"filename":7359,"language":1283,"meta":1082,"style":1082},"import { defineEventHandler } from 'h3'\nimport { db, schema } from 'hub:db'\nimport { desc } from 'drizzle-orm'\n\nexport default defineEventHandler(async () => {\n  return await db.query.chats.findMany({\n    orderBy: () => desc(schema.chats.createdAt)\n  })\n})\n","server\u002Fapi\u002Fchats.get.ts",[1036,7361,7362,7380,7402,7421,7425,7443,7468,7495,7501],{"__ignoreMap":1082},[1086,7363,7364,7366,7368,7370,7372,7374,7376,7378],{"class":1088,"line":1089},[1086,7365,1707],{"class":1290},[1086,7367,1710],{"class":1304},[1086,7369,2497],{"class":1300},[1086,7371,1732],{"class":1304},[1086,7373,1735],{"class":1290},[1086,7375,1391],{"class":1304},[1086,7377,1114],{"class":1096},[1086,7379,1355],{"class":1304},[1086,7381,7382,7384,7386,7388,7390,7392,7394,7396,7398,7400],{"class":1088,"line":1106},[1086,7383,1707],{"class":1290},[1086,7385,1710],{"class":1304},[1086,7387,2440],{"class":1300},[1086,7389,1716],{"class":1304},[1086,7391,2548],{"class":1300},[1086,7393,1732],{"class":1304},[1086,7395,1735],{"class":1290},[1086,7397,1391],{"class":1304},[1086,7399,2557],{"class":1096},[1086,7401,1355],{"class":1304},[1086,7403,7404,7406,7408,7411,7413,7415,7417,7419],{"class":1088,"line":1320},[1086,7405,1707],{"class":1290},[1086,7407,1710],{"class":1304},[1086,7409,7410],{"class":1300}," desc",[1086,7412,1732],{"class":1304},[1086,7414,1735],{"class":1290},[1086,7416,1391],{"class":1304},[1086,7418,1760],{"class":1096},[1086,7420,1355],{"class":1304},[1086,7422,7423],{"class":1088,"line":1335},[1086,7424,1369],{"emptyLinePlaceholder":21},[1086,7426,7427,7429,7431,7433,7435,7437,7439,7441],{"class":1088,"line":1347},[1086,7428,1291],{"class":1290},[1086,7430,1294],{"class":1290},[1086,7432,2497],{"class":1109},[1086,7434,1301],{"class":1300},[1086,7436,2596],{"class":1587},[1086,7438,4961],{"class":1304},[1086,7440,1825],{"class":1587},[1086,7442,1380],{"class":1304},[1086,7444,7445,7447,7449,7451,7453,7455,7457,7459,7461,7464,7466],{"class":1088,"line":1358},[1086,7446,2839],{"class":1290},[1086,7448,2625],{"class":1290},[1086,7450,2440],{"class":1300},[1086,7452,1808],{"class":1304},[1086,7454,3452],{"class":1300},[1086,7456,1808],{"class":1304},[1086,7458,1787],{"class":1300},[1086,7460,1808],{"class":1304},[1086,7462,7463],{"class":1109},"findMany",[1086,7465,1301],{"class":1310},[1086,7467,1305],{"class":1304},[1086,7469,7470,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491,7493],{"class":1088,"line":1366},[1086,7471,7472],{"class":1109},"    orderBy",[1086,7474,1314],{"class":1304},[1086,7476,4961],{"class":1304},[1086,7478,1825],{"class":1587},[1086,7480,7410],{"class":1109},[1086,7482,1301],{"class":1310},[1086,7484,2716],{"class":1300},[1086,7486,1808],{"class":1304},[1086,7488,1787],{"class":1300},[1086,7490,1808],{"class":1304},[1086,7492,4978],{"class":1300},[1086,7494,1491],{"class":1310},[1086,7496,7497,7499],{"class":1088,"line":1372},[1086,7498,2413],{"class":1304},[1086,7500,1491],{"class":1310},[1086,7502,7503,7505],{"class":1088,"line":1383},[1086,7504,1488],{"class":1304},[1086,7506,1491],{"class":1300},[1114,7508,7510],{"id":7509},"building-the-chats-history-dropdown","Building the chats history dropdown",[976,7512,7513,7514,7519,7520,7525,7526,7519,7533,7535],{},"The component uses ",[1030,7515,7516],{"href":457},[1036,7517,7518],{},"UDropdownMenu"," with a ",[1030,7521,7522],{"href":230},[1036,7523,7524],{},"UButton"," as trigger. Use ",[1030,7527,7530],{"href":7528,"rel":7529},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1034],[1036,7531,7532],{},"useFetch",[1036,7534,6660],{}," to fetch and cache the chat list:",[1277,7537,7538],{},[1077,7539,7542],{"className":1549,"code":7540,"filename":7541,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst route = useRoute()\n\nconst { data: chats } = await useFetch('\u002Fapi\u002Fchats', {\n  key: 'chats',\n  default: () => []\n})\n\nconst items = computed(() => [\n  {\n    label: 'New chat',\n    to: '\u002F',\n    icon: 'i-lucide-plus-square',\n    active: route.name === 'index'\n  },\n  ...chats.value.map(chat => ({\n    label: chat.title || 'Untitled',\n    to: `\u002Fchat\u002F${chat.id}`,\n    active: route.params.id === chat.id\n  }))\n])\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDropdownMenu :items=\"items\" class=\"m-2\">\n    \u003CUButton\n      icon=\"i-lucide-messages-square\"\n      variant=\"ghost\"\n      label=\"Chats History\"\n      color=\"neutral\"\n      class=\"w-fit\"\n    \u002F>\n  \u003C\u002FUDropdownMenu>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FChatsHistory.vue",[1036,7543,7544,7564,7576,7580,7612,7627,7641,7647,7651,7671,7676,7692,7708,7724,7748,7752,7777,7802,7824,7850,7856,7860,7868,7872,7880,7911,7918,7932,7946,7960,7972,7986,7991,7999],{"__ignoreMap":1082},[1086,7545,7546,7548,7550,7552,7554,7556,7558,7560,7562],{"class":1088,"line":1089},[1086,7547,1559],{"class":1304},[1086,7549,5111],{"class":1310},[1086,7551,5114],{"class":1587},[1086,7553,5117],{"class":1587},[1086,7555,1591],{"class":1304},[1086,7557,1518],{"class":1304},[1086,7559,1283],{"class":1096},[1086,7561,1518],{"class":1304},[1086,7563,1565],{"class":1304},[1086,7565,7566,7568,7570,7572,7574],{"class":1088,"line":1106},[1086,7567,3060],{"class":1587},[1086,7569,5836],{"class":1300},[1086,7571,1591],{"class":1304},[1086,7573,5841],{"class":1109},[1086,7575,2668],{"class":1300},[1086,7577,7578],{"class":1088,"line":1320},[1086,7579,1369],{"emptyLinePlaceholder":21},[1086,7581,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610],{"class":1088,"line":1335},[1086,7583,3060],{"class":1587},[1086,7585,1710],{"class":1304},[1086,7587,5875],{"class":1310},[1086,7589,1314],{"class":1304},[1086,7591,1776],{"class":1300},[1086,7593,1488],{"class":1304},[1086,7595,2622],{"class":1304},[1086,7597,2625],{"class":1290},[1086,7599,5889],{"class":1109},[1086,7601,1301],{"class":1300},[1086,7603,1329],{"class":1304},[1086,7605,5254],{"class":1096},[1086,7607,1329],{"class":1304},[1086,7609,1716],{"class":1304},[1086,7611,1380],{"class":1304},[1086,7613,7614,7617,7619,7621,7623,7625],{"class":1088,"line":1347},[1086,7615,7616],{"class":1310},"  key",[1086,7618,1314],{"class":1304},[1086,7620,1391],{"class":1304},[1086,7622,1787],{"class":1096},[1086,7624,1329],{"class":1304},[1086,7626,1332],{"class":1304},[1086,7628,7629,7632,7634,7636,7638],{"class":1088,"line":1358},[1086,7630,7631],{"class":1109},"  default",[1086,7633,1314],{"class":1304},[1086,7635,4961],{"class":1304},[1086,7637,1825],{"class":1587},[1086,7639,7640],{"class":1300}," []\n",[1086,7642,7643,7645],{"class":1088,"line":1366},[1086,7644,1488],{"class":1304},[1086,7646,1491],{"class":1300},[1086,7648,7649],{"class":1088,"line":1372},[1086,7650,1369],{"emptyLinePlaceholder":21},[1086,7652,7653,7655,7658,7660,7663,7665,7667,7669],{"class":1088,"line":1383},[1086,7654,3060],{"class":1587},[1086,7656,7657],{"class":1300}," items ",[1086,7659,1591],{"class":1304},[1086,7661,7662],{"class":1109}," computed",[1086,7664,1301],{"class":1300},[1086,7666,1805],{"class":1304},[1086,7668,1825],{"class":1587},[1086,7670,1317],{"class":1300},[1086,7672,7673],{"class":1088,"line":1399},[1086,7674,7675],{"class":1304},"  {\n",[1086,7677,7678,7681,7683,7685,7688,7690],{"class":1088,"line":1405},[1086,7679,7680],{"class":1310},"    label",[1086,7682,1314],{"class":1304},[1086,7684,1391],{"class":1304},[1086,7686,7687],{"class":1096},"New chat",[1086,7689,1329],{"class":1304},[1086,7691,1332],{"class":1304},[1086,7693,7694,7697,7699,7701,7704,7706],{"class":1088,"line":1410},[1086,7695,7696],{"class":1310},"    to",[1086,7698,1314],{"class":1304},[1086,7700,1391],{"class":1304},[1086,7702,7703],{"class":1096},"\u002F",[1086,7705,1329],{"class":1304},[1086,7707,1332],{"class":1304},[1086,7709,7710,7713,7715,7717,7720,7722],{"class":1088,"line":1433},[1086,7711,7712],{"class":1310},"    icon",[1086,7714,1314],{"class":1304},[1086,7716,1391],{"class":1304},[1086,7718,7719],{"class":1096},"i-lucide-plus-square",[1086,7721,1329],{"class":1304},[1086,7723,1332],{"class":1304},[1086,7725,7726,7729,7731,7734,7736,7739,7742,7744,7746],{"class":1088,"line":1438},[1086,7727,7728],{"class":1310},"    active",[1086,7730,1314],{"class":1304},[1086,7732,7733],{"class":1300}," route",[1086,7735,1808],{"class":1304},[1086,7737,7738],{"class":1300},"name ",[1086,7740,7741],{"class":1304},"===",[1086,7743,1391],{"class":1304},[1086,7745,6694],{"class":1096},[1086,7747,1355],{"class":1304},[1086,7749,7750],{"class":1088,"line":1448},[1086,7751,1402],{"class":1304},[1086,7753,7754,7757,7759,7761,7763,7765,7767,7769,7771,7773,7775],{"class":1088,"line":1458},[1086,7755,7756],{"class":1304},"  ...",[1086,7758,1787],{"class":1300},[1086,7760,1808],{"class":1304},[1086,7762,3321],{"class":1300},[1086,7764,1808],{"class":1304},[1086,7766,4462],{"class":1109},[1086,7768,1301],{"class":1300},[1086,7770,262],{"class":1942},[1086,7772,1825],{"class":1587},[1086,7774,1951],{"class":1300},[1086,7776,1305],{"class":1304},[1086,7778,7779,7781,7783,7785,7787,7790,7793,7795,7798,7800],{"class":1088,"line":1474},[1086,7780,7680],{"class":1310},[1086,7782,1314],{"class":1304},[1086,7784,2789],{"class":1300},[1086,7786,1808],{"class":1304},[1086,7788,7789],{"class":1300},"title ",[1086,7791,7792],{"class":1304},"||",[1086,7794,1391],{"class":1304},[1086,7796,7797],{"class":1096},"Untitled",[1086,7799,1329],{"class":1304},[1086,7801,1332],{"class":1304},[1086,7803,7804,7806,7808,7810,7812,7814,7816,7818,7820,7822],{"class":1088,"line":1480},[1086,7805,7696],{"class":1310},[1086,7807,1314],{"class":1304},[1086,7809,3670],{"class":1304},[1086,7811,5380],{"class":1096},[1086,7813,5383],{"class":1304},[1086,7815,262],{"class":1300},[1086,7817,1808],{"class":1304},[1086,7819,2017],{"class":1300},[1086,7821,5392],{"class":1304},[1086,7823,1332],{"class":1304},[1086,7825,7826,7828,7830,7832,7834,7836,7838,7841,7843,7845,7847],{"class":1088,"line":1485},[1086,7827,7728],{"class":1310},[1086,7829,1314],{"class":1304},[1086,7831,7733],{"class":1300},[1086,7833,1808],{"class":1304},[1086,7835,5906],{"class":1300},[1086,7837,1808],{"class":1304},[1086,7839,7840],{"class":1300},"id ",[1086,7842,7741],{"class":1304},[1086,7844,2789],{"class":1300},[1086,7846,1808],{"class":1304},[1086,7848,7849],{"class":1300},"id\n",[1086,7851,7852,7854],{"class":1088,"line":2274},[1086,7853,2413],{"class":1304},[1086,7855,1972],{"class":1300},[1086,7857,7858],{"class":1088,"line":2287},[1086,7859,2320],{"class":1300},[1086,7861,7862,7864,7866],{"class":1088,"line":2317},[1086,7863,1635],{"class":1304},[1086,7865,5111],{"class":1310},[1086,7867,1565],{"class":1304},[1086,7869,7870],{"class":1088,"line":2323},[1086,7871,1369],{"emptyLinePlaceholder":21},[1086,7873,7874,7876,7878],{"class":1088,"line":2328},[1086,7875,1559],{"class":1304},[1086,7877,1562],{"class":1310},[1086,7879,1565],{"class":1304},[1086,7881,7882,7884,7886,7889,7891,7893,7896,7898,7900,7902,7904,7907,7909],{"class":1088,"line":2360},[1086,7883,1572],{"class":1304},[1086,7885,7518],{"class":1310},[1086,7887,7888],{"class":1587}," :items",[1086,7890,1591],{"class":1304},[1086,7892,1518],{"class":1304},[1086,7894,7895],{"class":1096},"items",[1086,7897,1518],{"class":1304},[1086,7899,5464],{"class":1587},[1086,7901,1591],{"class":1304},[1086,7903,1518],{"class":1304},[1086,7905,7906],{"class":1096},"m-2",[1086,7908,1518],{"class":1304},[1086,7910,1565],{"class":1304},[1086,7912,7913,7915],{"class":1088,"line":2376},[1086,7914,1581],{"class":1304},[1086,7916,7917],{"class":1310},"UButton\n",[1086,7919,7920,7923,7925,7927,7930],{"class":1088,"line":2394},[1086,7921,7922],{"class":1587},"      icon",[1086,7924,1591],{"class":1304},[1086,7926,1518],{"class":1304},[1086,7928,7929],{"class":1096},"i-lucide-messages-square",[1086,7931,5537],{"class":1304},[1086,7933,7934,7937,7939,7941,7944],{"class":1088,"line":2410},[1086,7935,7936],{"class":1587},"      variant",[1086,7938,1591],{"class":1304},[1086,7940,1518],{"class":1304},[1086,7942,7943],{"class":1096},"ghost",[1086,7945,5537],{"class":1304},[1086,7947,7948,7951,7953,7955,7958],{"class":1088,"line":2418},[1086,7949,7950],{"class":1587},"      label",[1086,7952,1591],{"class":1304},[1086,7954,1518],{"class":1304},[1086,7956,7957],{"class":1096},"Chats History",[1086,7959,5537],{"class":1304},[1086,7961,7962,7964,7966,7968,7970],{"class":1088,"line":3413},[1086,7963,6264],{"class":1587},[1086,7965,1591],{"class":1304},[1086,7967,1518],{"class":1304},[1086,7969,5622],{"class":1096},[1086,7971,5537],{"class":1304},[1086,7973,7974,7977,7979,7981,7984],{"class":1088,"line":3426},[1086,7975,7976],{"class":1587},"      class",[1086,7978,1591],{"class":1304},[1086,7980,1518],{"class":1304},[1086,7982,7983],{"class":1096},"w-fit",[1086,7985,5537],{"class":1304},[1086,7987,7988],{"class":1088,"line":3431},[1086,7989,7990],{"class":1304},"    \u002F>\n",[1086,7992,7993,7995,7997],{"class":1088,"line":3437},[1086,7994,1626],{"class":1304},[1086,7996,7518],{"class":1310},[1086,7998,1565],{"class":1304},[1086,8000,8001,8003,8005],{"class":1088,"line":3468},[1086,8002,1635],{"class":1304},[1086,8004,1562],{"class":1310},[1086,8006,1565],{"class":1304},[980,8008,8010],{"id":8009},"integrating-history-in-the-home-page","Integrating history in the home page",[1277,8012,8013],{},[1695,8014,8015],{},[1077,8016,8019],{"className":1549,"code":8017,"filename":5101,"highlights":8018,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst input = ref('')\nconst loading = ref(false)\n\nasync function createChat() {\n  if (!input.value.trim()) return\n\n  loading.value = true\n\n  \u002F\u002F Create a new chat on the server\n  const chat = await $fetch('\u002Fapi\u002Fchats', {\n    method: 'POST',\n    body: {\n      message: {\n        role: 'user',\n        parts: [{ type: 'text', text: input.value }]\n      }\n    }\n  })\n\n  \u002F\u002F Navigate to the chat page\n  navigateTo(`\u002Fchat\u002F${chat.id}`)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col justify-center gap-6 py-8\">\n        \u003Ch1 class=\"text-3xl sm:text-4xl text-highlighted font-bold\">\n          How can I help you today?\n        \u003C\u002Fh1>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :status=\"loading ? 'streaming' : 'ready'\"\n          variant=\"subtle\"\n          placeholder=\"Ask me anything...\"\n          @submit=\"createChat\"\n        >\n          \u003CUChatPromptSubmit color=\"neutral\" \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[2410,2418,3413],[1036,8020,8021,8041,8057,8073,8077,8089,8111,8115,8127,8131,8135,8159,8173,8181,8189,8203,8239,8243,8247,8253,8257,8261,8283,8287,8295,8299,8307,8325,8339,8349,8358,8370,8388,8406,8410,8418,8422,8428,8440,8452,8464,8476,8488,8492,8510,8518,8526,8534,8542],{"__ignoreMap":1082},[1086,8022,8023,8025,8027,8029,8031,8033,8035,8037,8039],{"class":1088,"line":1089},[1086,8024,1559],{"class":1304},[1086,8026,5111],{"class":1310},[1086,8028,5114],{"class":1587},[1086,8030,5117],{"class":1587},[1086,8032,1591],{"class":1304},[1086,8034,1518],{"class":1304},[1086,8036,1283],{"class":1096},[1086,8038,1518],{"class":1304},[1086,8040,1565],{"class":1304},[1086,8042,8043,8045,8047,8049,8051,8053,8055],{"class":1088,"line":1106},[1086,8044,3060],{"class":1587},[1086,8046,5134],{"class":1300},[1086,8048,1591],{"class":1304},[1086,8050,5139],{"class":1109},[1086,8052,1301],{"class":1300},[1086,8054,5144],{"class":1304},[1086,8056,1491],{"class":1300},[1086,8058,8059,8061,8063,8065,8067,8069,8071],{"class":1088,"line":1320},[1086,8060,3060],{"class":1587},[1086,8062,5153],{"class":1300},[1086,8064,1591],{"class":1304},[1086,8066,5139],{"class":1109},[1086,8068,1301],{"class":1300},[1086,8070,5162],{"class":1466},[1086,8072,1491],{"class":1300},[1086,8074,8075],{"class":1088,"line":1335},[1086,8076,1369],{"emptyLinePlaceholder":21},[1086,8078,8079,8081,8083,8085,8087],{"class":1088,"line":1347},[1086,8080,2596],{"class":1587},[1086,8082,5175],{"class":1587},[1086,8084,5178],{"class":1109},[1086,8086,1805],{"class":1304},[1086,8088,1380],{"class":1304},[1086,8090,8091,8093,8095,8097,8099,8101,8103,8105,8107,8109],{"class":1088,"line":1358},[1086,8092,3527],{"class":1290},[1086,8094,1951],{"class":1310},[1086,8096,3532],{"class":1304},[1086,8098,5193],{"class":1300},[1086,8100,1808],{"class":1304},[1086,8102,3321],{"class":1300},[1086,8104,1808],{"class":1304},[1086,8106,5202],{"class":1109},[1086,8108,5205],{"class":1310},[1086,8110,5208],{"class":1290},[1086,8112,8113],{"class":1088,"line":1366},[1086,8114,1369],{"emptyLinePlaceholder":21},[1086,8116,8117,8119,8121,8123,8125],{"class":1088,"line":1372},[1086,8118,5217],{"class":1300},[1086,8120,1808],{"class":1304},[1086,8122,3321],{"class":1300},[1086,8124,2622],{"class":1304},[1086,8126,4353],{"class":1466},[1086,8128,8129],{"class":1088,"line":1383},[1086,8130,1369],{"emptyLinePlaceholder":21},[1086,8132,8133],{"class":1088,"line":1399},[1086,8134,5234],{"class":1470},[1086,8136,8137,8139,8141,8143,8145,8147,8149,8151,8153,8155,8157],{"class":1088,"line":1405},[1086,8138,2612],{"class":1587},[1086,8140,2789],{"class":1300},[1086,8142,2622],{"class":1304},[1086,8144,2625],{"class":1290},[1086,8146,5247],{"class":1109},[1086,8148,1301],{"class":1310},[1086,8150,1329],{"class":1304},[1086,8152,5254],{"class":1096},[1086,8154,1329],{"class":1304},[1086,8156,1716],{"class":1304},[1086,8158,1380],{"class":1304},[1086,8160,8161,8163,8165,8167,8169,8171],{"class":1088,"line":1410},[1086,8162,5265],{"class":1310},[1086,8164,1314],{"class":1304},[1086,8166,1391],{"class":1304},[1086,8168,5272],{"class":1096},[1086,8170,1329],{"class":1304},[1086,8172,1332],{"class":1304},[1086,8174,8175,8177,8179],{"class":1088,"line":1433},[1086,8176,5281],{"class":1310},[1086,8178,1314],{"class":1304},[1086,8180,1380],{"class":1304},[1086,8182,8183,8185,8187],{"class":1088,"line":1438},[1086,8184,3361],{"class":1310},[1086,8186,1314],{"class":1304},[1086,8188,1380],{"class":1304},[1086,8190,8191,8193,8195,8197,8199,8201],{"class":1088,"line":1448},[1086,8192,4495],{"class":1310},[1086,8194,1314],{"class":1304},[1086,8196,1391],{"class":1304},[1086,8198,2147],{"class":1096},[1086,8200,1329],{"class":1304},[1086,8202,1332],{"class":1304},[1086,8204,8205,8207,8209,8211,8213,8215,8217,8219,8221,8223,8225,8227,8229,8231,8233,8235,8237],{"class":1088,"line":1458},[1086,8206,4528],{"class":1310},[1086,8208,1314],{"class":1304},[1086,8210,1418],{"class":1310},[1086,8212,1865],{"class":1304},[1086,8214,2519],{"class":1310},[1086,8216,1314],{"class":1304},[1086,8218,1391],{"class":1304},[1086,8220,5326],{"class":1096},[1086,8222,1329],{"class":1304},[1086,8224,1716],{"class":1304},[1086,8226,1719],{"class":1310},[1086,8228,1314],{"class":1304},[1086,8230,5337],{"class":1300},[1086,8232,1808],{"class":1304},[1086,8234,3321],{"class":1300},[1086,8236,1732],{"class":1304},[1086,8238,3167],{"class":1310},[1086,8240,8241],{"class":1088,"line":1474},[1086,8242,4367],{"class":1304},[1086,8244,8245],{"class":1088,"line":1480},[1086,8246,1477],{"class":1304},[1086,8248,8249,8251],{"class":1088,"line":1485},[1086,8250,2413],{"class":1304},[1086,8252,1491],{"class":1310},[1086,8254,8255],{"class":1088,"line":2274},[1086,8256,1369],{"emptyLinePlaceholder":21},[1086,8258,8259],{"class":1088,"line":2287},[1086,8260,5368],{"class":1470},[1086,8262,8263,8265,8267,8269,8271,8273,8275,8277,8279,8281],{"class":1088,"line":2317},[1086,8264,5373],{"class":1109},[1086,8266,1301],{"class":1310},[1086,8268,3676],{"class":1304},[1086,8270,5380],{"class":1096},[1086,8272,5383],{"class":1304},[1086,8274,262],{"class":1300},[1086,8276,1808],{"class":1304},[1086,8278,2017],{"class":1300},[1086,8280,5392],{"class":1304},[1086,8282,1491],{"class":1310},[1086,8284,8285],{"class":1088,"line":2323},[1086,8286,5399],{"class":1304},[1086,8288,8289,8291,8293],{"class":1088,"line":2328},[1086,8290,1635],{"class":1304},[1086,8292,5111],{"class":1310},[1086,8294,1565],{"class":1304},[1086,8296,8297],{"class":1088,"line":2360},[1086,8298,1369],{"emptyLinePlaceholder":21},[1086,8300,8301,8303,8305],{"class":1088,"line":2376},[1086,8302,1559],{"class":1304},[1086,8304,1562],{"class":1310},[1086,8306,1565],{"class":1304},[1086,8308,8309,8311,8313,8315,8317,8319,8321,8323],{"class":1088,"line":2394},[1086,8310,1572],{"class":1304},[1086,8312,5426],{"class":1310},[1086,8314,5429],{"class":1587},[1086,8316,1591],{"class":1304},[1086,8318,1518],{"class":1304},[1086,8320,5436],{"class":1096},[1086,8322,1518],{"class":1304},[1086,8324,1565],{"class":1304},[1086,8326,8328,8330,8332,8334,8337],{"class":8327,"line":2410},[1088,1569],[1086,8329,1581],{"class":1304},[1086,8331,1562],{"class":1310},[1086,8333,5449],{"class":1304},[1086,8335,8336],{"class":1587},"header",[1086,8338,1565],{"class":1304},[1086,8340,8342,8344,8347],{"class":8341,"line":2418},[1088,1569],[1086,8343,1605],{"class":1304},[1086,8345,8346],{"class":1310},"ChatsHistory",[1086,8348,1611],{"class":1304},[1086,8350,8352,8354,8356],{"class":8351,"line":3413},[1088,1569],[1086,8353,1616],{"class":1304},[1086,8355,1562],{"class":1310},[1086,8357,1565],{"class":1304},[1086,8359,8360,8362,8364,8366,8368],{"class":1088,"line":3426},[1086,8361,1581],{"class":1304},[1086,8363,1562],{"class":1310},[1086,8365,5449],{"class":1304},[1086,8367,5452],{"class":1587},[1086,8369,1565],{"class":1304},[1086,8371,8372,8374,8376,8378,8380,8382,8384,8386],{"class":1088,"line":3431},[1086,8373,1605],{"class":1304},[1086,8375,5461],{"class":1310},[1086,8377,5464],{"class":1587},[1086,8379,1591],{"class":1304},[1086,8381,1518],{"class":1304},[1086,8383,5471],{"class":1096},[1086,8385,1518],{"class":1304},[1086,8387,1565],{"class":1304},[1086,8389,8390,8392,8394,8396,8398,8400,8402,8404],{"class":1088,"line":3437},[1086,8391,5480],{"class":1304},[1086,8393,5483],{"class":1310},[1086,8395,5464],{"class":1587},[1086,8397,1591],{"class":1304},[1086,8399,1518],{"class":1304},[1086,8401,5492],{"class":1096},[1086,8403,1518],{"class":1304},[1086,8405,1565],{"class":1304},[1086,8407,8408],{"class":1088,"line":3468},[1086,8409,5501],{"class":1300},[1086,8411,8412,8414,8416],{"class":1088,"line":3512},[1086,8413,5506],{"class":1304},[1086,8415,5483],{"class":1310},[1086,8417,1565],{"class":1304},[1086,8419,8420],{"class":1088,"line":3519},[1086,8421,1369],{"emptyLinePlaceholder":21},[1086,8423,8424,8426],{"class":1088,"line":3524},[1086,8425,5480],{"class":1304},[1086,8427,5522],{"class":1310},[1086,8429,8430,8432,8434,8436,8438],{"class":1088,"line":3542},[1086,8431,5528],{"class":1587},[1086,8433,1591],{"class":1304},[1086,8435,1518],{"class":1304},[1086,8437,5193],{"class":1096},[1086,8439,5537],{"class":1304},[1086,8441,8442,8444,8446,8448,8450],{"class":1088,"line":3581},[1086,8443,5543],{"class":1587},[1086,8445,1591],{"class":1304},[1086,8447,1518],{"class":1304},[1086,8449,5550],{"class":1096},[1086,8451,5537],{"class":1304},[1086,8453,8454,8456,8458,8460,8462],{"class":1088,"line":3587},[1086,8455,5558],{"class":1587},[1086,8457,1591],{"class":1304},[1086,8459,1518],{"class":1304},[1086,8461,5565],{"class":1096},[1086,8463,5537],{"class":1304},[1086,8465,8466,8468,8470,8472,8474],{"class":1088,"line":3592},[1086,8467,5573],{"class":1587},[1086,8469,1591],{"class":1304},[1086,8471,1518],{"class":1304},[1086,8473,5580],{"class":1096},[1086,8475,5537],{"class":1304},[1086,8477,8478,8480,8482,8484,8486],{"class":1088,"line":3598},[1086,8479,5588],{"class":1587},[1086,8481,1591],{"class":1304},[1086,8483,1518],{"class":1304},[1086,8485,5595],{"class":1096},[1086,8487,5537],{"class":1304},[1086,8489,8490],{"class":1088,"line":3618},[1086,8491,5603],{"class":1304},[1086,8493,8494,8496,8498,8500,8502,8504,8506,8508],{"class":1088,"line":3646},[1086,8495,5609],{"class":1304},[1086,8497,5612],{"class":1310},[1086,8499,5615],{"class":1587},[1086,8501,1591],{"class":1304},[1086,8503,1518],{"class":1304},[1086,8505,5622],{"class":1096},[1086,8507,1518],{"class":1304},[1086,8509,1611],{"class":1304},[1086,8511,8512,8514,8516],{"class":1088,"line":3662},[1086,8513,5506],{"class":1304},[1086,8515,5076],{"class":1310},[1086,8517,1565],{"class":1304},[1086,8519,8520,8522,8524],{"class":1088,"line":3681},[1086,8521,5640],{"class":1304},[1086,8523,5461],{"class":1310},[1086,8525,1565],{"class":1304},[1086,8527,8528,8530,8532],{"class":1088,"line":3709},[1086,8529,1616],{"class":1304},[1086,8531,1562],{"class":1310},[1086,8533,1565],{"class":1304},[1086,8535,8536,8538,8540],{"class":1088,"line":3716},[1086,8537,1626],{"class":1304},[1086,8539,5426],{"class":1310},[1086,8541,1565],{"class":1304},[1086,8543,8544,8546,8548],{"class":1088,"line":3721},[1086,8545,1635],{"class":1304},[1086,8547,1562],{"class":1310},[1086,8549,1565],{"class":1304},[980,8551,8553],{"id":8552},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1277,8555,8556],{},[1695,8557,8558],{},[1077,8559,8562],{"className":1549,"code":8560,"filename":5730,"highlights":8561,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[3961,3967,3984],[1036,8563,8564,8584,8610,8628,8646,8650,8662,8674,8678,8682,8724,8728,8744,8784,8788,8792,8808,8812,8816,8832,8850,8868,8882,8906,8914,8926,8930,8954,8968,8972,8976,8988,9000,9014,9028,9040,9046,9050,9056,9060,9078,9088,9108,9134,9146,9150,9154,9158,9162,9174,9202,9212,9216,9222,9230,9234,9242,9260,9272,9280,9288,9300,9319,9326,9339,9351,9355,9367,9371,9395,9461,9467,9479,9491,9503,9507,9513,9525,9537,9549,9553,9561,9565,9585,9591,9603,9615,9627,9639,9643,9671,9675,9683,9691,9699,9707,9715,9719,9725,9737,9749,9761,9773,9785,9789,9795,9807,9819,9831,9843,9847,9855,9863,9872,9881],{"__ignoreMap":1082},[1086,8565,8566,8568,8570,8572,8574,8576,8578,8580,8582],{"class":1088,"line":1089},[1086,8567,1559],{"class":1304},[1086,8569,5111],{"class":1310},[1086,8571,5114],{"class":1587},[1086,8573,5117],{"class":1587},[1086,8575,1591],{"class":1304},[1086,8577,1518],{"class":1304},[1086,8579,1283],{"class":1096},[1086,8581,1518],{"class":1304},[1086,8583,1565],{"class":1304},[1086,8585,8586,8588,8590,8592,8594,8596,8598,8600,8602,8604,8606,8608],{"class":1088,"line":1106},[1086,8587,1707],{"class":1290},[1086,8589,1710],{"class":1304},[1086,8591,5763],{"class":1300},[1086,8593,1716],{"class":1304},[1086,8595,5768],{"class":1300},[1086,8597,1716],{"class":1304},[1086,8599,5773],{"class":1300},[1086,8601,1732],{"class":1304},[1086,8603,1735],{"class":1290},[1086,8605,1391],{"class":1304},[1086,8607,2533],{"class":1096},[1086,8609,1355],{"class":1304},[1086,8611,8612,8614,8616,8618,8620,8622,8624,8626],{"class":1088,"line":1320},[1086,8613,1707],{"class":1290},[1086,8615,1710],{"class":1304},[1086,8617,5793],{"class":1300},[1086,8619,1732],{"class":1304},[1086,8621,1735],{"class":1290},[1086,8623,1391],{"class":1304},[1086,8625,5802],{"class":1096},[1086,8627,1355],{"class":1304},[1086,8629,8630,8632,8634,8636,8638,8640,8642,8644],{"class":1088,"line":1335},[1086,8631,1707],{"class":1290},[1086,8633,1710],{"class":1304},[1086,8635,5814],{"class":1300},[1086,8637,1732],{"class":1304},[1086,8639,1735],{"class":1290},[1086,8641,1391],{"class":1304},[1086,8643,5823],{"class":1096},[1086,8645,1355],{"class":1304},[1086,8647,8648],{"class":1088,"line":1347},[1086,8649,1369],{"emptyLinePlaceholder":21},[1086,8651,8652,8654,8656,8658,8660],{"class":1088,"line":1358},[1086,8653,3060],{"class":1587},[1086,8655,5836],{"class":1300},[1086,8657,1591],{"class":1304},[1086,8659,5841],{"class":1109},[1086,8661,2668],{"class":1300},[1086,8663,8664,8666,8668,8670,8672],{"class":1088,"line":1366},[1086,8665,3060],{"class":1587},[1086,8667,5850],{"class":1300},[1086,8669,1591],{"class":1304},[1086,8671,5855],{"class":1109},[1086,8673,2668],{"class":1300},[1086,8675,8676],{"class":1088,"line":1372},[1086,8677,1369],{"emptyLinePlaceholder":21},[1086,8679,8680],{"class":1088,"line":1383},[1086,8681,5866],{"class":1470},[1086,8683,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722],{"class":1088,"line":1399},[1086,8685,3060],{"class":1587},[1086,8687,1710],{"class":1304},[1086,8689,5875],{"class":1310},[1086,8691,1314],{"class":1304},[1086,8693,5880],{"class":1300},[1086,8695,1488],{"class":1304},[1086,8697,2622],{"class":1304},[1086,8699,2625],{"class":1290},[1086,8701,5889],{"class":1109},[1086,8703,1301],{"class":1300},[1086,8705,3676],{"class":1304},[1086,8707,5896],{"class":1096},[1086,8709,5383],{"class":1304},[1086,8711,5901],{"class":1300},[1086,8713,1808],{"class":1304},[1086,8715,5906],{"class":1300},[1086,8717,1808],{"class":1304},[1086,8719,2017],{"class":1300},[1086,8721,5392],{"class":1304},[1086,8723,1491],{"class":1300},[1086,8725,8726],{"class":1088,"line":1405},[1086,8727,1369],{"emptyLinePlaceholder":21},[1086,8729,8730,8732,8734,8736,8738,8740,8742],{"class":1088,"line":1410},[1086,8731,5923],{"class":1290},[1086,8733,1951],{"class":1300},[1086,8735,3532],{"class":1304},[1086,8737,5930],{"class":1300},[1086,8739,1808],{"class":1304},[1086,8741,5935],{"class":1300},[1086,8743,1305],{"class":1304},[1086,8745,8746,8748,8750,8752,8754,8756,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,8778,8780,8782],{"class":1088,"line":1433},[1086,8747,5942],{"class":1290},[1086,8749,2898],{"class":1109},[1086,8751,1301],{"class":1310},[1086,8753,1865],{"class":1304},[1086,8755,3554],{"class":1310},[1086,8757,1314],{"class":1304},[1086,8759,3560],{"class":3559},[1086,8761,1716],{"class":1304},[1086,8763,3565],{"class":1310},[1086,8765,1314],{"class":1304},[1086,8767,1391],{"class":1304},[1086,8769,3572],{"class":1096},[1086,8771,1329],{"class":1304},[1086,8773,1716],{"class":1304},[1086,8775,5971],{"class":1310},[1086,8777,1314],{"class":1304},[1086,8779,4168],{"class":1466},[1086,8781,1732],{"class":1304},[1086,8783,1491],{"class":1310},[1086,8785,8786],{"class":1088,"line":1438},[1086,8787,5399],{"class":1304},[1086,8789,8790],{"class":1088,"line":1448},[1086,8791,1369],{"emptyLinePlaceholder":21},[1086,8793,8794,8796,8798,8800,8802,8804,8806],{"class":1088,"line":1458},[1086,8795,3060],{"class":1587},[1086,8797,5134],{"class":1300},[1086,8799,1591],{"class":1304},[1086,8801,5139],{"class":1109},[1086,8803,1301],{"class":1300},[1086,8805,5144],{"class":1304},[1086,8807,1491],{"class":1300},[1086,8809,8810],{"class":1088,"line":1474},[1086,8811,1369],{"emptyLinePlaceholder":21},[1086,8813,8814],{"class":1088,"line":1480},[1086,8815,6012],{"class":1470},[1086,8817,8818,8820,8822,8824,8826,8828,8830],{"class":1088,"line":1485},[1086,8819,3060],{"class":1587},[1086,8821,6020],{"class":1300},[1086,8823,1591],{"class":1304},[1086,8825,1902],{"class":1304},[1086,8827,5793],{"class":1109},[1086,8829,1301],{"class":1300},[1086,8831,1305],{"class":1304},[1086,8833,8834,8836,8838,8840,8842,8844,8846,8848],{"class":1088,"line":2274},[1086,8835,1798],{"class":1310},[1086,8837,1314],{"class":1304},[1086,8839,6040],{"class":1300},[1086,8841,1808],{"class":1304},[1086,8843,3321],{"class":1300},[1086,8845,1808],{"class":1304},[1086,8847,2017],{"class":1300},[1086,8849,1332],{"class":1304},[1086,8851,8852,8854,8856,8858,8860,8862,8864,8866],{"class":1088,"line":2287},[1086,8853,1958],{"class":1310},[1086,8855,1314],{"class":1304},[1086,8857,6040],{"class":1300},[1086,8859,1808],{"class":1304},[1086,8861,3321],{"class":1300},[1086,8863,1808],{"class":1304},[1086,8865,1996],{"class":1300},[1086,8867,1332],{"class":1304},[1086,8869,8870,8872,8874,8876,8878,8880],{"class":1088,"line":2317},[1086,8871,6075],{"class":1310},[1086,8873,1314],{"class":1304},[1086,8875,1902],{"class":1304},[1086,8877,5763],{"class":1109},[1086,8879,1301],{"class":1300},[1086,8881,1305],{"class":1304},[1086,8883,8884,8886,8888,8890,8892,8894,8896,8898,8900,8902,8904],{"class":1088,"line":2323},[1086,8885,6091],{"class":1310},[1086,8887,1314],{"class":1304},[1086,8889,3670],{"class":1304},[1086,8891,5896],{"class":1096},[1086,8893,5383],{"class":1304},[1086,8895,5930],{"class":1300},[1086,8897,1808],{"class":1304},[1086,8899,3321],{"class":1300},[1086,8901,1808],{"class":1304},[1086,8903,2017],{"class":1300},[1086,8905,6112],{"class":1304},[1086,8907,8908,8910,8912],{"class":1088,"line":2328},[1086,8909,2413],{"class":1304},[1086,8911,1882],{"class":1300},[1086,8913,1332],{"class":1304},[1086,8915,8916,8918,8920,8922,8924],{"class":1088,"line":2360},[1086,8917,6127],{"class":1310},[1086,8919,1301],{"class":1304},[1086,8921,6132],{"class":1942},[1086,8923,1882],{"class":1304},[1086,8925,1380],{"class":1304},[1086,8927,8928],{"class":1088,"line":2376},[1086,8929,6142],{"class":1470},[1086,8931,8932,8934,8936,8938,8940,8942,8944,8946,8948,8950,8952],{"class":1088,"line":2394},[1086,8933,6148],{"class":1290},[1086,8935,1951],{"class":1310},[1086,8937,6132],{"class":1300},[1086,8939,1808],{"class":1304},[1086,8941,6157],{"class":1300},[1086,8943,3348],{"class":1304},[1086,8945,1391],{"class":1304},[1086,8947,4315],{"class":1096},[1086,8949,1329],{"class":1304},[1086,8951,3537],{"class":1310},[1086,8953,1305],{"class":1304},[1086,8955,8956,8958,8960,8962,8964,8966],{"class":1088,"line":2410},[1086,8957,6175],{"class":1109},[1086,8959,1301],{"class":1310},[1086,8961,1329],{"class":1304},[1086,8963,1787],{"class":1096},[1086,8965,1329],{"class":1304},[1086,8967,1491],{"class":1310},[1086,8969,8970],{"class":1088,"line":2418},[1086,8971,1477],{"class":1304},[1086,8973,8974],{"class":1088,"line":3413},[1086,8975,1402],{"class":1304},[1086,8977,8978,8980,8982,8984,8986],{"class":1088,"line":3426},[1086,8979,6201],{"class":1310},[1086,8981,1301],{"class":1304},[1086,8983,6206],{"class":1942},[1086,8985,1882],{"class":1304},[1086,8987,1380],{"class":1304},[1086,8989,8990,8992,8994,8996,8998],{"class":1088,"line":3431},[1086,8991,6216],{"class":1300},[1086,8993,1808],{"class":1304},[1086,8995,6221],{"class":1109},[1086,8997,1301],{"class":1310},[1086,8999,1305],{"class":1304},[1086,9001,9002,9004,9006,9008,9010,9012],{"class":1088,"line":3437},[1086,9003,6231],{"class":1310},[1086,9005,1314],{"class":1304},[1086,9007,1391],{"class":1304},[1086,9009,497],{"class":1096},[1086,9011,1329],{"class":1304},[1086,9013,1332],{"class":1304},[1086,9015,9016,9018,9020,9022,9024,9026],{"class":1088,"line":3468},[1086,9017,6247],{"class":1310},[1086,9019,1314],{"class":1304},[1086,9021,6252],{"class":1300},[1086,9023,1808],{"class":1304},[1086,9025,4467],{"class":1300},[1086,9027,1332],{"class":1304},[1086,9029,9030,9032,9034,9036,9038],{"class":1088,"line":3512},[1086,9031,6264],{"class":1310},[1086,9033,1314],{"class":1304},[1086,9035,1391],{"class":1304},[1086,9037,6206],{"class":1096},[1086,9039,1355],{"class":1304},[1086,9041,9042,9044],{"class":1088,"line":3519},[1086,9043,3375],{"class":1304},[1086,9045,1491],{"class":1310},[1086,9047,9048],{"class":1088,"line":3524},[1086,9049,3584],{"class":1304},[1086,9051,9052,9054],{"class":1088,"line":3542},[1086,9053,1488],{"class":1304},[1086,9055,1491],{"class":1300},[1086,9057,9058],{"class":1088,"line":3581},[1086,9059,1369],{"emptyLinePlaceholder":21},[1086,9061,9062,9064,9066,9068,9070,9072,9074,9076],{"class":1088,"line":3587},[1086,9063,6300],{"class":1587},[1086,9065,6303],{"class":1109},[1086,9067,1301],{"class":1304},[1086,9069,6308],{"class":1942},[1086,9071,1314],{"class":1304},[1086,9073,6313],{"class":1092},[1086,9075,1882],{"class":1304},[1086,9077,1380],{"class":1304},[1086,9079,9080,9082,9084,9086],{"class":1088,"line":3592},[1086,9081,6322],{"class":1300},[1086,9083,1808],{"class":1304},[1086,9085,6327],{"class":1109},[1086,9087,2668],{"class":1310},[1086,9089,9090,9092,9094,9096,9098,9100,9102,9104,9106],{"class":1088,"line":3598},[1086,9091,3527],{"class":1290},[1086,9093,1951],{"class":1310},[1086,9095,5193],{"class":1300},[1086,9097,1808],{"class":1304},[1086,9099,3321],{"class":1300},[1086,9101,1808],{"class":1304},[1086,9103,5202],{"class":1109},[1086,9105,5205],{"class":1310},[1086,9107,1305],{"class":1304},[1086,9109,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132],{"class":1088,"line":3618},[1086,9111,6354],{"class":1300},[1086,9113,1808],{"class":1304},[1086,9115,6359],{"class":1109},[1086,9117,1301],{"class":1310},[1086,9119,1865],{"class":1304},[1086,9121,1719],{"class":1310},[1086,9123,1314],{"class":1304},[1086,9125,5337],{"class":1300},[1086,9127,1808],{"class":1304},[1086,9129,3321],{"class":1300},[1086,9131,1732],{"class":1304},[1086,9133,1491],{"class":1310},[1086,9135,9136,9138,9140,9142,9144],{"class":1088,"line":3646},[1086,9137,6382],{"class":1300},[1086,9139,1808],{"class":1304},[1086,9141,3321],{"class":1300},[1086,9143,2622],{"class":1304},[1086,9145,6391],{"class":1304},[1086,9147,9148],{"class":1088,"line":3662},[1086,9149,3584],{"class":1304},[1086,9151,9152],{"class":1088,"line":3681},[1086,9153,5399],{"class":1304},[1086,9155,9156],{"class":1088,"line":3709},[1086,9157,1369],{"emptyLinePlaceholder":21},[1086,9159,9160],{"class":1088,"line":3716},[1086,9161,6408],{"class":1470},[1086,9163,9164,9166,9168,9170,9172],{"class":1088,"line":3721},[1086,9165,6413],{"class":1109},[1086,9167,1301],{"class":1300},[1086,9169,1805],{"class":1304},[1086,9171,1825],{"class":1587},[1086,9173,1380],{"class":1304},[1086,9175,9176,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196,9198,9200],{"class":1088,"line":3787},[1086,9177,3527],{"class":1290},[1086,9179,1951],{"class":1310},[1086,9181,5930],{"class":1300},[1086,9183,1808],{"class":1304},[1086,9185,3321],{"class":1300},[1086,9187,3842],{"class":1304},[1086,9189,1996],{"class":1300},[1086,9191,1808],{"class":1304},[1086,9193,3821],{"class":1300},[1086,9195,3348],{"class":1304},[1086,9197,3827],{"class":3559},[1086,9199,3537],{"class":1310},[1086,9201,1305],{"class":1304},[1086,9203,9204,9206,9208,9210],{"class":1088,"line":3792},[1086,9205,6354],{"class":1300},[1086,9207,1808],{"class":1304},[1086,9209,6458],{"class":1109},[1086,9211,2668],{"class":1310},[1086,9213,9214],{"class":1088,"line":3797},[1086,9215,3584],{"class":1304},[1086,9217,9218,9220],{"class":1088,"line":3803},[1086,9219,1488],{"class":1304},[1086,9221,1491],{"class":1300},[1086,9223,9224,9226,9228],{"class":1088,"line":3832},[1086,9225,1635],{"class":1304},[1086,9227,5111],{"class":1310},[1086,9229,1565],{"class":1304},[1086,9231,9232],{"class":1088,"line":3873},[1086,9233,1369],{"emptyLinePlaceholder":21},[1086,9235,9236,9238,9240],{"class":1088,"line":3902},[1086,9237,1559],{"class":1304},[1086,9239,1562],{"class":1310},[1086,9241,1565],{"class":1304},[1086,9243,9244,9246,9248,9250,9252,9254,9256,9258],{"class":1088,"line":3914},[1086,9245,1572],{"class":1304},[1086,9247,5426],{"class":1310},[1086,9249,5429],{"class":1587},[1086,9251,1591],{"class":1304},[1086,9253,1518],{"class":1304},[1086,9255,5436],{"class":1096},[1086,9257,1518],{"class":1304},[1086,9259,1565],{"class":1304},[1086,9261,9262,9264,9266,9268,9270],{"class":1088,"line":3930},[1086,9263,1581],{"class":1304},[1086,9265,1562],{"class":1310},[1086,9267,5449],{"class":1304},[1086,9269,8336],{"class":1587},[1086,9271,1565],{"class":1304},[1086,9273,9274,9276,9278],{"class":1088,"line":3944},[1086,9275,1605],{"class":1304},[1086,9277,8346],{"class":1310},[1086,9279,1611],{"class":1304},[1086,9281,9282,9284,9286],{"class":1088,"line":3951},[1086,9283,1616],{"class":1304},[1086,9285,1562],{"class":1310},[1086,9287,1565],{"class":1304},[1086,9289,9290,9292,9294,9296,9298],{"class":1088,"line":3956},[1086,9291,1581],{"class":1304},[1086,9293,1562],{"class":1310},[1086,9295,5449],{"class":1304},[1086,9297,5452],{"class":1587},[1086,9299,1565],{"class":1304},[1086,9301,9303,9305,9307,9309,9311,9313,9315,9317],{"class":9302,"line":3961},[1088,1569],[1086,9304,1605],{"class":1304},[1086,9306,5461],{"class":1310},[1086,9308,5464],{"class":1587},[1086,9310,1591],{"class":1304},[1086,9312,1518],{"class":1304},[1086,9314,6535],{"class":1096},[1086,9316,1518],{"class":1304},[1086,9318,1565],{"class":1304},[1086,9320,9322,9324],{"class":9321,"line":3967},[1088,1569],[1086,9323,5480],{"class":1304},[1086,9325,6546],{"class":1310},[1086,9327,9329,9331,9333,9335,9337],{"class":9328,"line":3984},[1088,1569],[1086,9330,6551],{"class":1587},[1086,9332,1591],{"class":1304},[1086,9334,1518],{"class":1304},[1086,9336,6558],{"class":1096},[1086,9338,5537],{"class":1304},[1086,9340,9341,9343,9345,9347,9349],{"class":1088,"line":4006},[1086,9342,5543],{"class":1587},[1086,9344,1591],{"class":1304},[1086,9346,1518],{"class":1304},[1086,9348,6571],{"class":1096},[1086,9350,5537],{"class":1304},[1086,9352,9353],{"class":1088,"line":4024},[1086,9354,6578],{"class":1587},[1086,9356,9357,9359,9361,9363,9365],{"class":1088,"line":4032},[1086,9358,6583],{"class":1587},[1086,9360,1591],{"class":1304},[1086,9362,1518],{"class":1304},[1086,9364,6590],{"class":1096},[1086,9366,5537],{"class":1304},[1086,9368,9369],{"class":1088,"line":4049},[1086,9370,5603],{"class":1304},[1086,9372,9373,9375,9377,9379,9381,9383,9385,9387,9389,9391,9393],{"class":1088,"line":4070},[1086,9374,5609],{"class":1304},[1086,9376,1562],{"class":1310},[1086,9378,5449],{"class":1304},[1086,9380,371],{"class":1587},[1086,9382,1591],{"class":1304},[1086,9384,1518],{"class":1304},[1086,9386,1865],{"class":1304},[1086,9388,6615],{"class":1300},[1086,9390,1488],{"class":1304},[1086,9392,1518],{"class":1304},[1086,9394,1565],{"class":1304},[1086,9396,9397,9399,9401,9403,9405,9407,9409,9411,9413,9415,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435,9437,9439,9441,9443,9445,9447,9449,9451,9453,9455,9457,9459],{"class":1088,"line":4080},[1086,9398,6626],{"class":1304},[1086,9400,1562],{"class":1310},[1086,9402,6631],{"class":1290},[1086,9404,1591],{"class":1304},[1086,9406,1518],{"class":1304},[1086,9408,6638],{"class":1300},[1086,9410,1716],{"class":1304},[1086,9412,6643],{"class":1300},[1086,9414,6646],{"class":1304},[1086,9416,2617],{"class":1300},[1086,9418,1808],{"class":1304},[1086,9420,2198],{"class":1300},[1086,9422,1518],{"class":1304},[1086,9424,6657],{"class":1304},[1086,9426,6660],{"class":1587},[1086,9428,1591],{"class":1304},[1086,9430,6665],{"class":1304},[1086,9432,4467],{"class":1300},[1086,9434,1808],{"class":1304},[1086,9436,2017],{"class":1300},[1086,9438,1488],{"class":1304},[1086,9440,6676],{"class":1096},[1086,9442,5383],{"class":1304},[1086,9444,6681],{"class":1300},[1086,9446,1808],{"class":1304},[1086,9448,6157],{"class":1300},[1086,9450,1488],{"class":1304},[1086,9452,6676],{"class":1096},[1086,9454,5383],{"class":1304},[1086,9456,6694],{"class":1300},[1086,9458,6697],{"class":1304},[1086,9460,1565],{"class":1304},[1086,9462,9463,9465],{"class":1088,"line":4090},[1086,9464,6704],{"class":1304},[1086,9466,6707],{"class":1310},[1086,9468,9469,9471,9473,9475,9477],{"class":1088,"line":4100},[1086,9470,6712],{"class":1587},[1086,9472,1591],{"class":1304},[1086,9474,1518],{"class":1304},[1086,9476,6719],{"class":1096},[1086,9478,5537],{"class":1304},[1086,9480,9481,9483,9485,9487,9489],{"class":1088,"line":4117},[1086,9482,6726],{"class":1587},[1086,9484,1591],{"class":1304},[1086,9486,1518],{"class":1304},[1086,9488,6733],{"class":1096},[1086,9490,5537],{"class":1304},[1086,9492,9493,9495,9497,9499,9501],{"class":1088,"line":4128},[1086,9494,6740],{"class":1587},[1086,9496,1591],{"class":1304},[1086,9498,1518],{"class":1304},[1086,9500,6747],{"class":1096},[1086,9502,5537],{"class":1304},[1086,9504,9505],{"class":1088,"line":4134},[1086,9506,6754],{"class":1304},[1086,9508,9509,9511],{"class":1088,"line":4140},[1086,9510,6759],{"class":1304},[1086,9512,6762],{"class":1310},[1086,9514,9515,9517,9519,9521,9523],{"class":1088,"line":4150},[1086,9516,6767],{"class":1587},[1086,9518,1591],{"class":1304},[1086,9520,1518],{"class":1304},[1086,9522,6733],{"class":1096},[1086,9524,5537],{"class":1304},[1086,9526,9527,9529,9531,9533,9535],{"class":1088,"line":4160},[1086,9528,6780],{"class":1587},[1086,9530,1591],{"class":1304},[1086,9532,1518],{"class":1304},[1086,9534,6787],{"class":1096},[1086,9536,5537],{"class":1304},[1086,9538,9539,9541,9543,9545,9547],{"class":1088,"line":4173},[1086,9540,6794],{"class":1587},[1086,9542,1591],{"class":1304},[1086,9544,1518],{"class":1304},[1086,9546,6801],{"class":1096},[1086,9548,5537],{"class":1304},[1086,9550,9551],{"class":1088,"line":4188},[1086,9552,6808],{"class":1304},[1086,9554,9555,9557,9559],{"class":1088,"line":4193},[1086,9556,6813],{"class":1304},[1086,9558,6816],{"class":1310},[1086,9560,1565],{"class":1304},[1086,9562,9563],{"class":1088,"line":4198},[1086,9564,1369],{"emptyLinePlaceholder":21},[1086,9566,9567,9569,9571,9573,9575,9577,9579,9581,9583],{"class":1088,"line":4208},[1086,9568,6704],{"class":1304},[1086,9570,1562],{"class":1310},[1086,9572,6831],{"class":1290},[1086,9574,1591],{"class":1304},[1086,9576,1518],{"class":1304},[1086,9578,6838],{"class":1109},[1086,9580,6841],{"class":1300},[1086,9582,1518],{"class":1304},[1086,9584,1565],{"class":1304},[1086,9586,9587,9589],{"class":1088,"line":4224},[1086,9588,6759],{"class":1304},[1086,9590,6762],{"class":1310},[1086,9592,9593,9595,9597,9599,9601],{"class":1088,"line":4239},[1086,9594,6856],{"class":1587},[1086,9596,1591],{"class":1304},[1086,9598,1518],{"class":1304},[1086,9600,6863],{"class":1096},[1086,9602,5537],{"class":1304},[1086,9604,9605,9607,9609,9611,9613],{"class":1088,"line":4245},[1086,9606,6767],{"class":1587},[1086,9608,1591],{"class":1304},[1086,9610,1518],{"class":1304},[1086,9612,6733],{"class":1096},[1086,9614,5537],{"class":1304},[1086,9616,9617,9619,9621,9623,9625],{"class":1088,"line":4251},[1086,9618,6780],{"class":1587},[1086,9620,1591],{"class":1304},[1086,9622,1518],{"class":1304},[1086,9624,6888],{"class":1096},[1086,9626,5537],{"class":1304},[1086,9628,9629,9631,9633,9635,9637],{"class":1088,"line":4259},[1086,9630,6794],{"class":1587},[1086,9632,1591],{"class":1304},[1086,9634,1518],{"class":1304},[1086,9636,6801],{"class":1096},[1086,9638,5537],{"class":1304},[1086,9640,9641],{"class":1088,"line":4264},[1086,9642,6808],{"class":1304},[1086,9644,9645,9647,9649,9651,9653,9655,9657,9659,9661,9663,9665,9667,9669],{"class":1088,"line":4270},[1086,9646,6759],{"class":1304},[1086,9648,976],{"class":1310},[1086,9650,6831],{"class":1587},[1086,9652,1591],{"class":1304},[1086,9654,1518],{"class":1304},[1086,9656,6921],{"class":1096},[1086,9658,1518],{"class":1304},[1086,9660,5464],{"class":1587},[1086,9662,1591],{"class":1304},[1086,9664,1518],{"class":1304},[1086,9666,6932],{"class":1096},[1086,9668,1518],{"class":1304},[1086,9670,1565],{"class":1304},[1086,9672,9673],{"class":1088,"line":4290},[1086,9674,6941],{"class":1300},[1086,9676,9677,9679,9681],{"class":1088,"line":4305},[1086,9678,6946],{"class":1304},[1086,9680,976],{"class":1310},[1086,9682,1565],{"class":1304},[1086,9684,9685,9687,9689],{"class":1088,"line":4322},[1086,9686,6813],{"class":1304},[1086,9688,1562],{"class":1310},[1086,9690,1565],{"class":1304},[1086,9692,9693,9695,9697],{"class":1088,"line":4345},[1086,9694,6963],{"class":1304},[1086,9696,1562],{"class":1310},[1086,9698,1565],{"class":1304},[1086,9700,9701,9703,9705],{"class":1088,"line":4356},[1086,9702,6972],{"class":1304},[1086,9704,1562],{"class":1310},[1086,9706,1565],{"class":1304},[1086,9708,9709,9711,9713],{"class":1088,"line":4364},[1086,9710,5506],{"class":1304},[1086,9712,5082],{"class":1310},[1086,9714,1565],{"class":1304},[1086,9716,9717],{"class":1088,"line":4370},[1086,9718,1369],{"emptyLinePlaceholder":21},[1086,9720,9721,9723],{"class":1088,"line":4375},[1086,9722,5480],{"class":1304},[1086,9724,5522],{"class":1310},[1086,9726,9727,9729,9731,9733,9735],{"class":1088,"line":4398},[1086,9728,5528],{"class":1587},[1086,9730,1591],{"class":1304},[1086,9732,1518],{"class":1304},[1086,9734,5193],{"class":1096},[1086,9736,5537],{"class":1304},[1086,9738,9739,9741,9743,9745,9747],{"class":1088,"line":4404},[1086,9740,7011],{"class":1587},[1086,9742,1591],{"class":1304},[1086,9744,1518],{"class":1304},[1086,9746,7018],{"class":1096},[1086,9748,5537],{"class":1304},[1086,9750,9751,9753,9755,9757,9759],{"class":1088,"line":4424},[1086,9752,5558],{"class":1587},[1086,9754,1591],{"class":1304},[1086,9756,1518],{"class":1304},[1086,9758,5565],{"class":1096},[1086,9760,5537],{"class":1304},[1086,9762,9763,9765,9767,9769,9771],{"class":1088,"line":4430},[1086,9764,6583],{"class":1587},[1086,9766,1591],{"class":1304},[1086,9768,1518],{"class":1304},[1086,9770,7043],{"class":1096},[1086,9772,5537],{"class":1304},[1086,9774,9775,9777,9779,9781,9783],{"class":1088,"line":4476},[1086,9776,5588],{"class":1587},[1086,9778,1591],{"class":1304},[1086,9780,1518],{"class":1304},[1086,9782,7056],{"class":1096},[1086,9784,5537],{"class":1304},[1086,9786,9787],{"class":1088,"line":4492},[1086,9788,5603],{"class":1304},[1086,9790,9791,9793],{"class":1088,"line":4525},[1086,9792,5609],{"class":1304},[1086,9794,7069],{"class":1310},[1086,9796,9797,9799,9801,9803,9805],{"class":1088,"line":4539},[1086,9798,7074],{"class":1587},[1086,9800,1591],{"class":1304},[1086,9802,1518],{"class":1304},[1086,9804,6571],{"class":1096},[1086,9806,5537],{"class":1304},[1086,9808,9809,9811,9813,9815,9817],{"class":1088,"line":4547},[1086,9810,7087],{"class":1587},[1086,9812,1591],{"class":1304},[1086,9814,1518],{"class":1304},[1086,9816,5622],{"class":1096},[1086,9818,5537],{"class":1304},[1086,9820,9821,9823,9825,9827,9829],{"class":1088,"line":4552},[1086,9822,7100],{"class":1587},[1086,9824,1591],{"class":1304},[1086,9826,1518],{"class":1304},[1086,9828,7107],{"class":1096},[1086,9830,5537],{"class":1304},[1086,9832,9833,9835,9837,9839,9841],{"class":1088,"line":4559},[1086,9834,7114],{"class":1587},[1086,9836,1591],{"class":1304},[1086,9838,1518],{"class":1304},[1086,9840,7121],{"class":1096},[1086,9842,5537],{"class":1304},[1086,9844,9845],{"class":1088,"line":4564},[1086,9846,7128],{"class":1304},[1086,9848,9849,9851,9853],{"class":1088,"line":4582},[1086,9850,5506],{"class":1304},[1086,9852,5076],{"class":1310},[1086,9854,1565],{"class":1304},[1086,9856,9857,9859,9861],{"class":1088,"line":7163},[1086,9858,5640],{"class":1304},[1086,9860,5461],{"class":1310},[1086,9862,1565],{"class":1304},[1086,9864,9866,9868,9870],{"class":1088,"line":9865},113,[1086,9867,1616],{"class":1304},[1086,9869,1562],{"class":1310},[1086,9871,1565],{"class":1304},[1086,9873,9875,9877,9879],{"class":1088,"line":9874},114,[1086,9876,1626],{"class":1304},[1086,9878,5426],{"class":1310},[1086,9880,1565],{"class":1304},[1086,9882,9884,9886,9888],{"class":1088,"line":9883},115,[1086,9885,1635],{"class":1304},[1086,9887,1562],{"class":1310},[1086,9889,1565],{"class":1304},[976,9891,4625,9892,9895,9896,9898],{},[1036,9893,9894],{},"refreshNuxtData('chats')"," call in the chat page's ",[1036,9897,7231],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[980,9900,9902],{"id":9901},"adding-multi-model-support","Adding multi-model support",[976,9904,9905,9906,9909],{},"One of the benefits of using ",[1030,9907,4594],{"href":1065,"rel":9908},[1034]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1114,9911,9913],{"id":9912},"creating-a-models-composable","Creating a models composable",[976,9915,9916,9917,1314],{},"Define the available models and persist the user's selection using ",[1030,9918,9921],{"href":9919,"rel":9920},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1034],[1036,9922,9923],{},"useCookie",[1277,9925,9926],{},[1077,9927,9930],{"className":1281,"code":9928,"filename":9929,"language":1283,"meta":1082,"style":1082},"export function useModels() {\n  const models = [\n    { label: 'GPT-5 Nano', value: 'openai\u002Fgpt-5-nano', icon: 'i-simple-icons-openai' },\n    { label: 'Claude Haiku 4.5', value: 'anthropic\u002Fclaude-haiku-4.5', icon: 'i-simple-icons-anthropic' },\n    { label: 'Gemini 3 Flash', value: 'google\u002Fgemini-3-flash', icon: 'i-simple-icons-google' }\n  ]\n\n  const model = useCookie\u003Cstring>('ai-model', {\n    default: () => 'anthropic\u002Fclaude-haiku-4.5'\n  })\n\n  return {\n    models,\n    model\n  }\n}\n","app\u002Fcomposables\u002FuseModels.ts",[1036,9931,9932,9945,9956,9999,10040,10081,10086,10090,10120,10137,10143,10147,10153,10160,10165,10169],{"__ignoreMap":1082},[1086,9933,9934,9936,9938,9941,9943],{"class":1088,"line":1089},[1086,9935,1291],{"class":1290},[1086,9937,5175],{"class":1587},[1086,9939,9940],{"class":1109}," useModels",[1086,9942,1805],{"class":1304},[1086,9944,1380],{"class":1304},[1086,9946,9947,9949,9952,9954],{"class":1088,"line":1106},[1086,9948,2612],{"class":1587},[1086,9950,9951],{"class":1300}," models",[1086,9953,2622],{"class":1304},[1086,9955,1317],{"class":1310},[1086,9957,9958,9961,9963,9965,9967,9969,9971,9973,9975,9977,9979,9981,9983,9985,9988,9990,9992,9995,9997],{"class":1088,"line":1320},[1086,9959,9960],{"class":1304},"    {",[1086,9962,3089],{"class":1310},[1086,9964,1314],{"class":1304},[1086,9966,1391],{"class":1304},[1086,9968,3096],{"class":1096},[1086,9970,1329],{"class":1304},[1086,9972,1716],{"class":1304},[1086,9974,3075],{"class":1310},[1086,9976,1314],{"class":1304},[1086,9978,1391],{"class":1304},[1086,9980,3082],{"class":1096},[1086,9982,1329],{"class":1304},[1086,9984,1716],{"class":1304},[1086,9986,9987],{"class":1310}," icon",[1086,9989,1314],{"class":1304},[1086,9991,1391],{"class":1304},[1086,9993,9994],{"class":1096},"i-simple-icons-openai",[1086,9996,1329],{"class":1304},[1086,9998,3101],{"class":1304},[1086,10000,10001,10003,10005,10007,10009,10011,10013,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10036,10038],{"class":1088,"line":1335},[1086,10002,9960],{"class":1304},[1086,10004,3089],{"class":1310},[1086,10006,1314],{"class":1304},[1086,10008,1391],{"class":1304},[1086,10010,3127],{"class":1096},[1086,10012,1329],{"class":1304},[1086,10014,1716],{"class":1304},[1086,10016,3075],{"class":1310},[1086,10018,1314],{"class":1304},[1086,10020,1391],{"class":1304},[1086,10022,3114],{"class":1096},[1086,10024,1329],{"class":1304},[1086,10026,1716],{"class":1304},[1086,10028,9987],{"class":1310},[1086,10030,1314],{"class":1304},[1086,10032,1391],{"class":1304},[1086,10034,10035],{"class":1096},"i-simple-icons-anthropic",[1086,10037,1329],{"class":1304},[1086,10039,3101],{"class":1304},[1086,10041,10042,10044,10046,10048,10050,10052,10054,10056,10058,10060,10062,10064,10066,10068,10070,10072,10074,10077,10079],{"class":1088,"line":1347},[1086,10043,9960],{"class":1304},[1086,10045,3089],{"class":1310},[1086,10047,1314],{"class":1304},[1086,10049,1391],{"class":1304},[1086,10051,3157],{"class":1096},[1086,10053,1329],{"class":1304},[1086,10055,1716],{"class":1304},[1086,10057,3075],{"class":1310},[1086,10059,1314],{"class":1304},[1086,10061,1391],{"class":1304},[1086,10063,3144],{"class":1096},[1086,10065,1329],{"class":1304},[1086,10067,1716],{"class":1304},[1086,10069,9987],{"class":1310},[1086,10071,1314],{"class":1304},[1086,10073,1391],{"class":1304},[1086,10075,10076],{"class":1096},"i-simple-icons-google",[1086,10078,1329],{"class":1304},[1086,10080,3162],{"class":1304},[1086,10082,10083],{"class":1088,"line":1358},[1086,10084,10085],{"class":1310},"  ]\n",[1086,10087,10088],{"class":1088,"line":1366},[1086,10089,1369],{"emptyLinePlaceholder":21},[1086,10091,10092,10094,10096,10098,10101,10103,10105,10107,10109,10111,10114,10116,10118],{"class":1088,"line":1372},[1086,10093,2612],{"class":1587},[1086,10095,3267],{"class":1300},[1086,10097,2622],{"class":1304},[1086,10099,10100],{"class":1109}," useCookie",[1086,10102,1559],{"class":1304},[1086,10104,3240],{"class":1092},[1086,10106,2665],{"class":1304},[1086,10108,1301],{"class":1310},[1086,10110,1329],{"class":1304},[1086,10112,10113],{"class":1096},"ai-model",[1086,10115,1329],{"class":1304},[1086,10117,1716],{"class":1304},[1086,10119,1380],{"class":1304},[1086,10121,10122,10125,10127,10129,10131,10133,10135],{"class":1088,"line":1383},[1086,10123,10124],{"class":1109},"    default",[1086,10126,1314],{"class":1304},[1086,10128,4961],{"class":1304},[1086,10130,1825],{"class":1587},[1086,10132,1391],{"class":1304},[1086,10134,3114],{"class":1096},[1086,10136,1355],{"class":1304},[1086,10138,10139,10141],{"class":1088,"line":1399},[1086,10140,2413],{"class":1304},[1086,10142,1491],{"class":1310},[1086,10144,10145],{"class":1088,"line":1405},[1086,10146,1369],{"emptyLinePlaceholder":21},[1086,10148,10149,10151],{"class":1088,"line":1410},[1086,10150,2839],{"class":1290},[1086,10152,1380],{"class":1304},[1086,10154,10155,10158],{"class":1088,"line":1433},[1086,10156,10157],{"class":1300},"    models",[1086,10159,1332],{"class":1304},[1086,10161,10162],{"class":1088,"line":1438},[1086,10163,10164],{"class":1300},"    model\n",[1086,10166,10167],{"class":1088,"line":1448},[1086,10168,3584],{"class":1304},[1086,10170,10171],{"class":1088,"line":1458},[1086,10172,5399],{"class":1304},[1114,10174,10176],{"id":10175},"building-the-model-selector","Building the model selector",[976,10178,1642,10179,10184],{},[1030,10180,10181],{"href":734},[1036,10182,10183],{},"USelectMenu"," component that displays the available models:",[1277,10186,10187],{},[1077,10188,10191],{"className":1549,"code":10189,"filename":10190,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst model = defineModel\u003Cstring>({ required: true })\n\nconst { models } = useModels()\n\nconst selectedModel = computed(() =>\n  models.find(m => m.value === model.value)\n)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUSelectMenu\n    v-model=\"model\"\n    :items=\"models\"\n    :icon=\"selectedModel?.icon\"\n    variant=\"ghost\"\n    value-key=\"value\"\n  \u002F>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FModelSelect.vue",[1036,10192,10193,10213,10246,10250,10267,10271,10289,10321,10325,10333,10337,10345,10352,10365,10379,10393,10406,10419,10424],{"__ignoreMap":1082},[1086,10194,10195,10197,10199,10201,10203,10205,10207,10209,10211],{"class":1088,"line":1089},[1086,10196,1559],{"class":1304},[1086,10198,5111],{"class":1310},[1086,10200,5114],{"class":1587},[1086,10202,5117],{"class":1587},[1086,10204,1591],{"class":1304},[1086,10206,1518],{"class":1304},[1086,10208,1283],{"class":1096},[1086,10210,1518],{"class":1304},[1086,10212,1565],{"class":1304},[1086,10214,10215,10217,10220,10222,10225,10227,10229,10231,10233,10235,10238,10240,10242,10244],{"class":1088,"line":1106},[1086,10216,3060],{"class":1587},[1086,10218,10219],{"class":1300}," model ",[1086,10221,1591],{"class":1304},[1086,10223,10224],{"class":1109}," defineModel",[1086,10226,1559],{"class":1304},[1086,10228,3240],{"class":1092},[1086,10230,2665],{"class":1304},[1086,10232,1301],{"class":1300},[1086,10234,1865],{"class":1304},[1086,10236,10237],{"class":1310}," required",[1086,10239,1314],{"class":1304},[1086,10241,4168],{"class":1466},[1086,10243,1732],{"class":1304},[1086,10245,1491],{"class":1300},[1086,10247,10248],{"class":1088,"line":1320},[1086,10249,1369],{"emptyLinePlaceholder":21},[1086,10251,10252,10254,10256,10259,10261,10263,10265],{"class":1088,"line":1335},[1086,10253,3060],{"class":1587},[1086,10255,1710],{"class":1304},[1086,10257,10258],{"class":1300}," models ",[1086,10260,1488],{"class":1304},[1086,10262,2622],{"class":1304},[1086,10264,9940],{"class":1109},[1086,10266,2668],{"class":1300},[1086,10268,10269],{"class":1088,"line":1347},[1086,10270,1369],{"emptyLinePlaceholder":21},[1086,10272,10273,10275,10278,10280,10282,10284,10286],{"class":1088,"line":1358},[1086,10274,3060],{"class":1587},[1086,10276,10277],{"class":1300}," selectedModel ",[1086,10279,1591],{"class":1304},[1086,10281,7662],{"class":1109},[1086,10283,1301],{"class":1300},[1086,10285,1805],{"class":1304},[1086,10287,10288],{"class":1587}," =>\n",[1086,10290,10291,10294,10296,10299,10301,10303,10305,10307,10309,10312,10314,10316,10318],{"class":1088,"line":1366},[1086,10292,10293],{"class":1300},"  models",[1086,10295,1808],{"class":1304},[1086,10297,10298],{"class":1109},"find",[1086,10300,1301],{"class":1300},[1086,10302,3336],{"class":1942},[1086,10304,1825],{"class":1587},[1086,10306,3341],{"class":1300},[1086,10308,1808],{"class":1304},[1086,10310,10311],{"class":1300},"value ",[1086,10313,7741],{"class":1304},[1086,10315,3267],{"class":1300},[1086,10317,1808],{"class":1304},[1086,10319,10320],{"class":1300},"value)\n",[1086,10322,10323],{"class":1088,"line":1372},[1086,10324,1491],{"class":1300},[1086,10326,10327,10329,10331],{"class":1088,"line":1383},[1086,10328,1635],{"class":1304},[1086,10330,5111],{"class":1310},[1086,10332,1565],{"class":1304},[1086,10334,10335],{"class":1088,"line":1399},[1086,10336,1369],{"emptyLinePlaceholder":21},[1086,10338,10339,10341,10343],{"class":1088,"line":1405},[1086,10340,1559],{"class":1304},[1086,10342,1562],{"class":1310},[1086,10344,1565],{"class":1304},[1086,10346,10347,10349],{"class":1088,"line":1410},[1086,10348,1572],{"class":1304},[1086,10350,10351],{"class":1310},"USelectMenu\n",[1086,10353,10354,10357,10359,10361,10363],{"class":1088,"line":1433},[1086,10355,10356],{"class":1587},"    v-model",[1086,10358,1591],{"class":1304},[1086,10360,1518],{"class":1304},[1086,10362,4638],{"class":1096},[1086,10364,5537],{"class":1304},[1086,10366,10367,10370,10372,10374,10377],{"class":1088,"line":1438},[1086,10368,10369],{"class":1587},"    :items",[1086,10371,1591],{"class":1304},[1086,10373,1518],{"class":1304},[1086,10375,10376],{"class":1096},"models",[1086,10378,5537],{"class":1304},[1086,10380,10381,10384,10386,10388,10391],{"class":1088,"line":1448},[1086,10382,10383],{"class":1587},"    :icon",[1086,10385,1591],{"class":1304},[1086,10387,1518],{"class":1304},[1086,10389,10390],{"class":1096},"selectedModel?.icon",[1086,10392,5537],{"class":1304},[1086,10394,10395,10398,10400,10402,10404],{"class":1088,"line":1458},[1086,10396,10397],{"class":1587},"    variant",[1086,10399,1591],{"class":1304},[1086,10401,1518],{"class":1304},[1086,10403,7943],{"class":1096},[1086,10405,5537],{"class":1304},[1086,10407,10408,10411,10413,10415,10417],{"class":1088,"line":1474},[1086,10409,10410],{"class":1587},"    value-key",[1086,10412,1591],{"class":1304},[1086,10414,1518],{"class":1304},[1086,10416,3321],{"class":1096},[1086,10418,5537],{"class":1304},[1086,10420,10421],{"class":1088,"line":1480},[1086,10422,10423],{"class":1304},"  \u002F>\n",[1086,10425,10426,10428,10430],{"class":1088,"line":1485},[1086,10427,1635],{"class":1304},[1086,10429,1562],{"class":1310},[1086,10431,1565],{"class":1304},[1114,10433,10435],{"id":10434},"integrating-with-the-chat","Integrating with the chat",[976,10437,10438],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1277,10440,10441],{},[1695,10442,10443],{},[1077,10444,10447],{"className":1549,"code":10445,"filename":5730,"highlights":10446,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\nconst { model } = useModels()\n\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`,\n    body: {\n      model: model.value \u002F\u002F Pass the selected model\n    }\n  }),\n  onData(dataPart) {\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003Ctemplate #footer>\n            \u003CModelSelect v-model=\"model\" \u002F>\n          \u003C\u002Ftemplate>\n\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1372,2328,2360,2376,4345,4356,4364],[1036,10448,10449,10469,10495,10513,10531,10535,10547,10559,10576,10580,10622,10626,10642,10682,10686,10690,10706,10710,10726,10744,10762,10776,10802,10810,10826,10831,10840,10852,10876,10890,10894,10898,10910,10922,10936,10950,10962,10968,10972,10978,10982,11000,11010,11030,11056,11068,11072,11076,11080,11092,11120,11130,11134,11140,11148,11152,11160,11178,11190,11198,11206,11218,11236,11242,11254,11266,11270,11282,11286,11310,11376,11382,11394,11406,11418,11422,11428,11440,11452,11464,11468,11476,11480,11500,11506,11518,11530,11542,11554,11558,11586,11590,11598,11606,11615,11624,11633,11637,11643,11655,11667,11679,11691,11703,11707,11720,11740,11748,11752,11758,11770,11782,11794,11806,11810,11818,11827,11836,11845],{"__ignoreMap":1082},[1086,10450,10451,10453,10455,10457,10459,10461,10463,10465,10467],{"class":1088,"line":1089},[1086,10452,1559],{"class":1304},[1086,10454,5111],{"class":1310},[1086,10456,5114],{"class":1587},[1086,10458,5117],{"class":1587},[1086,10460,1591],{"class":1304},[1086,10462,1518],{"class":1304},[1086,10464,1283],{"class":1096},[1086,10466,1518],{"class":1304},[1086,10468,1565],{"class":1304},[1086,10470,10471,10473,10475,10477,10479,10481,10483,10485,10487,10489,10491,10493],{"class":1088,"line":1106},[1086,10472,1707],{"class":1290},[1086,10474,1710],{"class":1304},[1086,10476,5763],{"class":1300},[1086,10478,1716],{"class":1304},[1086,10480,5768],{"class":1300},[1086,10482,1716],{"class":1304},[1086,10484,5773],{"class":1300},[1086,10486,1732],{"class":1304},[1086,10488,1735],{"class":1290},[1086,10490,1391],{"class":1304},[1086,10492,2533],{"class":1096},[1086,10494,1355],{"class":1304},[1086,10496,10497,10499,10501,10503,10505,10507,10509,10511],{"class":1088,"line":1320},[1086,10498,1707],{"class":1290},[1086,10500,1710],{"class":1304},[1086,10502,5793],{"class":1300},[1086,10504,1732],{"class":1304},[1086,10506,1735],{"class":1290},[1086,10508,1391],{"class":1304},[1086,10510,5802],{"class":1096},[1086,10512,1355],{"class":1304},[1086,10514,10515,10517,10519,10521,10523,10525,10527,10529],{"class":1088,"line":1335},[1086,10516,1707],{"class":1290},[1086,10518,1710],{"class":1304},[1086,10520,5814],{"class":1300},[1086,10522,1732],{"class":1304},[1086,10524,1735],{"class":1290},[1086,10526,1391],{"class":1304},[1086,10528,5823],{"class":1096},[1086,10530,1355],{"class":1304},[1086,10532,10533],{"class":1088,"line":1347},[1086,10534,1369],{"emptyLinePlaceholder":21},[1086,10536,10537,10539,10541,10543,10545],{"class":1088,"line":1358},[1086,10538,3060],{"class":1587},[1086,10540,5836],{"class":1300},[1086,10542,1591],{"class":1304},[1086,10544,5841],{"class":1109},[1086,10546,2668],{"class":1300},[1086,10548,10549,10551,10553,10555,10557],{"class":1088,"line":1366},[1086,10550,3060],{"class":1587},[1086,10552,5850],{"class":1300},[1086,10554,1591],{"class":1304},[1086,10556,5855],{"class":1109},[1086,10558,2668],{"class":1300},[1086,10560,10562,10564,10566,10568,10570,10572,10574],{"class":10561,"line":1372},[1088,1569],[1086,10563,3060],{"class":1587},[1086,10565,1710],{"class":1304},[1086,10567,10219],{"class":1300},[1086,10569,1488],{"class":1304},[1086,10571,2622],{"class":1304},[1086,10573,9940],{"class":1109},[1086,10575,2668],{"class":1300},[1086,10577,10578],{"class":1088,"line":1383},[1086,10579,1369],{"emptyLinePlaceholder":21},[1086,10581,10582,10584,10586,10588,10590,10592,10594,10596,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620],{"class":1088,"line":1399},[1086,10583,3060],{"class":1587},[1086,10585,1710],{"class":1304},[1086,10587,5875],{"class":1310},[1086,10589,1314],{"class":1304},[1086,10591,5880],{"class":1300},[1086,10593,1488],{"class":1304},[1086,10595,2622],{"class":1304},[1086,10597,2625],{"class":1290},[1086,10599,5889],{"class":1109},[1086,10601,1301],{"class":1300},[1086,10603,3676],{"class":1304},[1086,10605,5896],{"class":1096},[1086,10607,5383],{"class":1304},[1086,10609,5901],{"class":1300},[1086,10611,1808],{"class":1304},[1086,10613,5906],{"class":1300},[1086,10615,1808],{"class":1304},[1086,10617,2017],{"class":1300},[1086,10619,5392],{"class":1304},[1086,10621,1491],{"class":1300},[1086,10623,10624],{"class":1088,"line":1405},[1086,10625,1369],{"emptyLinePlaceholder":21},[1086,10627,10628,10630,10632,10634,10636,10638,10640],{"class":1088,"line":1410},[1086,10629,5923],{"class":1290},[1086,10631,1951],{"class":1300},[1086,10633,3532],{"class":1304},[1086,10635,5930],{"class":1300},[1086,10637,1808],{"class":1304},[1086,10639,5935],{"class":1300},[1086,10641,1305],{"class":1304},[1086,10643,10644,10646,10648,10650,10652,10654,10656,10658,10660,10662,10664,10666,10668,10670,10672,10674,10676,10678,10680],{"class":1088,"line":1433},[1086,10645,5942],{"class":1290},[1086,10647,2898],{"class":1109},[1086,10649,1301],{"class":1310},[1086,10651,1865],{"class":1304},[1086,10653,3554],{"class":1310},[1086,10655,1314],{"class":1304},[1086,10657,3560],{"class":3559},[1086,10659,1716],{"class":1304},[1086,10661,3565],{"class":1310},[1086,10663,1314],{"class":1304},[1086,10665,1391],{"class":1304},[1086,10667,3572],{"class":1096},[1086,10669,1329],{"class":1304},[1086,10671,1716],{"class":1304},[1086,10673,5971],{"class":1310},[1086,10675,1314],{"class":1304},[1086,10677,4168],{"class":1466},[1086,10679,1732],{"class":1304},[1086,10681,1491],{"class":1310},[1086,10683,10684],{"class":1088,"line":1438},[1086,10685,5399],{"class":1304},[1086,10687,10688],{"class":1088,"line":1448},[1086,10689,1369],{"emptyLinePlaceholder":21},[1086,10691,10692,10694,10696,10698,10700,10702,10704],{"class":1088,"line":1458},[1086,10693,3060],{"class":1587},[1086,10695,5134],{"class":1300},[1086,10697,1591],{"class":1304},[1086,10699,5139],{"class":1109},[1086,10701,1301],{"class":1300},[1086,10703,5144],{"class":1304},[1086,10705,1491],{"class":1300},[1086,10707,10708],{"class":1088,"line":1474},[1086,10709,1369],{"emptyLinePlaceholder":21},[1086,10711,10712,10714,10716,10718,10720,10722,10724],{"class":1088,"line":1480},[1086,10713,3060],{"class":1587},[1086,10715,6020],{"class":1300},[1086,10717,1591],{"class":1304},[1086,10719,1902],{"class":1304},[1086,10721,5793],{"class":1109},[1086,10723,1301],{"class":1300},[1086,10725,1305],{"class":1304},[1086,10727,10728,10730,10732,10734,10736,10738,10740,10742],{"class":1088,"line":1485},[1086,10729,1798],{"class":1310},[1086,10731,1314],{"class":1304},[1086,10733,6040],{"class":1300},[1086,10735,1808],{"class":1304},[1086,10737,3321],{"class":1300},[1086,10739,1808],{"class":1304},[1086,10741,2017],{"class":1300},[1086,10743,1332],{"class":1304},[1086,10745,10746,10748,10750,10752,10754,10756,10758,10760],{"class":1088,"line":2274},[1086,10747,1958],{"class":1310},[1086,10749,1314],{"class":1304},[1086,10751,6040],{"class":1300},[1086,10753,1808],{"class":1304},[1086,10755,3321],{"class":1300},[1086,10757,1808],{"class":1304},[1086,10759,1996],{"class":1300},[1086,10761,1332],{"class":1304},[1086,10763,10764,10766,10768,10770,10772,10774],{"class":1088,"line":2287},[1086,10765,6075],{"class":1310},[1086,10767,1314],{"class":1304},[1086,10769,1902],{"class":1304},[1086,10771,5763],{"class":1109},[1086,10773,1301],{"class":1300},[1086,10775,1305],{"class":1304},[1086,10777,10778,10780,10782,10784,10786,10788,10790,10792,10794,10796,10798,10800],{"class":1088,"line":2317},[1086,10779,6091],{"class":1310},[1086,10781,1314],{"class":1304},[1086,10783,3670],{"class":1304},[1086,10785,5896],{"class":1096},[1086,10787,5383],{"class":1304},[1086,10789,5930],{"class":1300},[1086,10791,1808],{"class":1304},[1086,10793,3321],{"class":1300},[1086,10795,1808],{"class":1304},[1086,10797,2017],{"class":1300},[1086,10799,5392],{"class":1304},[1086,10801,1332],{"class":1304},[1086,10803,10804,10806,10808],{"class":1088,"line":2323},[1086,10805,5281],{"class":1310},[1086,10807,1314],{"class":1304},[1086,10809,1380],{"class":1304},[1086,10811,10813,10815,10817,10819,10821,10823],{"class":10812,"line":2328},[1088,1569],[1086,10814,3649],{"class":1310},[1086,10816,1314],{"class":1304},[1086,10818,3267],{"class":1300},[1086,10820,1808],{"class":1304},[1086,10822,10311],{"class":1300},[1086,10824,10825],{"class":1470},"\u002F\u002F Pass the selected model\n",[1086,10827,10829],{"class":10828,"line":2360},[1088,1569],[1086,10830,1477],{"class":1304},[1086,10832,10834,10836,10838],{"class":10833,"line":2376},[1088,1569],[1086,10835,2413],{"class":1304},[1086,10837,1882],{"class":1300},[1086,10839,1332],{"class":1304},[1086,10841,10842,10844,10846,10848,10850],{"class":1088,"line":2394},[1086,10843,6127],{"class":1310},[1086,10845,1301],{"class":1304},[1086,10847,6132],{"class":1942},[1086,10849,1882],{"class":1304},[1086,10851,1380],{"class":1304},[1086,10853,10854,10856,10858,10860,10862,10864,10866,10868,10870,10872,10874],{"class":1088,"line":2410},[1086,10855,6148],{"class":1290},[1086,10857,1951],{"class":1310},[1086,10859,6132],{"class":1300},[1086,10861,1808],{"class":1304},[1086,10863,6157],{"class":1300},[1086,10865,3348],{"class":1304},[1086,10867,1391],{"class":1304},[1086,10869,4315],{"class":1096},[1086,10871,1329],{"class":1304},[1086,10873,3537],{"class":1310},[1086,10875,1305],{"class":1304},[1086,10877,10878,10880,10882,10884,10886,10888],{"class":1088,"line":2418},[1086,10879,6175],{"class":1109},[1086,10881,1301],{"class":1310},[1086,10883,1329],{"class":1304},[1086,10885,1787],{"class":1096},[1086,10887,1329],{"class":1304},[1086,10889,1491],{"class":1310},[1086,10891,10892],{"class":1088,"line":3413},[1086,10893,1477],{"class":1304},[1086,10895,10896],{"class":1088,"line":3426},[1086,10897,1402],{"class":1304},[1086,10899,10900,10902,10904,10906,10908],{"class":1088,"line":3431},[1086,10901,6201],{"class":1310},[1086,10903,1301],{"class":1304},[1086,10905,6206],{"class":1942},[1086,10907,1882],{"class":1304},[1086,10909,1380],{"class":1304},[1086,10911,10912,10914,10916,10918,10920],{"class":1088,"line":3437},[1086,10913,6216],{"class":1300},[1086,10915,1808],{"class":1304},[1086,10917,6221],{"class":1109},[1086,10919,1301],{"class":1310},[1086,10921,1305],{"class":1304},[1086,10923,10924,10926,10928,10930,10932,10934],{"class":1088,"line":3468},[1086,10925,6231],{"class":1310},[1086,10927,1314],{"class":1304},[1086,10929,1391],{"class":1304},[1086,10931,497],{"class":1096},[1086,10933,1329],{"class":1304},[1086,10935,1332],{"class":1304},[1086,10937,10938,10940,10942,10944,10946,10948],{"class":1088,"line":3512},[1086,10939,6247],{"class":1310},[1086,10941,1314],{"class":1304},[1086,10943,6252],{"class":1300},[1086,10945,1808],{"class":1304},[1086,10947,4467],{"class":1300},[1086,10949,1332],{"class":1304},[1086,10951,10952,10954,10956,10958,10960],{"class":1088,"line":3519},[1086,10953,6264],{"class":1310},[1086,10955,1314],{"class":1304},[1086,10957,1391],{"class":1304},[1086,10959,6206],{"class":1096},[1086,10961,1355],{"class":1304},[1086,10963,10964,10966],{"class":1088,"line":3524},[1086,10965,3375],{"class":1304},[1086,10967,1491],{"class":1310},[1086,10969,10970],{"class":1088,"line":3542},[1086,10971,3584],{"class":1304},[1086,10973,10974,10976],{"class":1088,"line":3581},[1086,10975,1488],{"class":1304},[1086,10977,1491],{"class":1300},[1086,10979,10980],{"class":1088,"line":3587},[1086,10981,1369],{"emptyLinePlaceholder":21},[1086,10983,10984,10986,10988,10990,10992,10994,10996,10998],{"class":1088,"line":3592},[1086,10985,6300],{"class":1587},[1086,10987,6303],{"class":1109},[1086,10989,1301],{"class":1304},[1086,10991,6308],{"class":1942},[1086,10993,1314],{"class":1304},[1086,10995,6313],{"class":1092},[1086,10997,1882],{"class":1304},[1086,10999,1380],{"class":1304},[1086,11001,11002,11004,11006,11008],{"class":1088,"line":3598},[1086,11003,6322],{"class":1300},[1086,11005,1808],{"class":1304},[1086,11007,6327],{"class":1109},[1086,11009,2668],{"class":1310},[1086,11011,11012,11014,11016,11018,11020,11022,11024,11026,11028],{"class":1088,"line":3618},[1086,11013,3527],{"class":1290},[1086,11015,1951],{"class":1310},[1086,11017,5193],{"class":1300},[1086,11019,1808],{"class":1304},[1086,11021,3321],{"class":1300},[1086,11023,1808],{"class":1304},[1086,11025,5202],{"class":1109},[1086,11027,5205],{"class":1310},[1086,11029,1305],{"class":1304},[1086,11031,11032,11034,11036,11038,11040,11042,11044,11046,11048,11050,11052,11054],{"class":1088,"line":3646},[1086,11033,6354],{"class":1300},[1086,11035,1808],{"class":1304},[1086,11037,6359],{"class":1109},[1086,11039,1301],{"class":1310},[1086,11041,1865],{"class":1304},[1086,11043,1719],{"class":1310},[1086,11045,1314],{"class":1304},[1086,11047,5337],{"class":1300},[1086,11049,1808],{"class":1304},[1086,11051,3321],{"class":1300},[1086,11053,1732],{"class":1304},[1086,11055,1491],{"class":1310},[1086,11057,11058,11060,11062,11064,11066],{"class":1088,"line":3662},[1086,11059,6382],{"class":1300},[1086,11061,1808],{"class":1304},[1086,11063,3321],{"class":1300},[1086,11065,2622],{"class":1304},[1086,11067,6391],{"class":1304},[1086,11069,11070],{"class":1088,"line":3681},[1086,11071,3584],{"class":1304},[1086,11073,11074],{"class":1088,"line":3709},[1086,11075,5399],{"class":1304},[1086,11077,11078],{"class":1088,"line":3716},[1086,11079,1369],{"emptyLinePlaceholder":21},[1086,11081,11082,11084,11086,11088,11090],{"class":1088,"line":3721},[1086,11083,6413],{"class":1109},[1086,11085,1301],{"class":1300},[1086,11087,1805],{"class":1304},[1086,11089,1825],{"class":1587},[1086,11091,1380],{"class":1304},[1086,11093,11094,11096,11098,11100,11102,11104,11106,11108,11110,11112,11114,11116,11118],{"class":1088,"line":3787},[1086,11095,3527],{"class":1290},[1086,11097,1951],{"class":1310},[1086,11099,5930],{"class":1300},[1086,11101,1808],{"class":1304},[1086,11103,3321],{"class":1300},[1086,11105,3842],{"class":1304},[1086,11107,1996],{"class":1300},[1086,11109,1808],{"class":1304},[1086,11111,3821],{"class":1300},[1086,11113,3348],{"class":1304},[1086,11115,3827],{"class":3559},[1086,11117,3537],{"class":1310},[1086,11119,1305],{"class":1304},[1086,11121,11122,11124,11126,11128],{"class":1088,"line":3792},[1086,11123,6354],{"class":1300},[1086,11125,1808],{"class":1304},[1086,11127,6458],{"class":1109},[1086,11129,2668],{"class":1310},[1086,11131,11132],{"class":1088,"line":3797},[1086,11133,3584],{"class":1304},[1086,11135,11136,11138],{"class":1088,"line":3803},[1086,11137,1488],{"class":1304},[1086,11139,1491],{"class":1300},[1086,11141,11142,11144,11146],{"class":1088,"line":3832},[1086,11143,1635],{"class":1304},[1086,11145,5111],{"class":1310},[1086,11147,1565],{"class":1304},[1086,11149,11150],{"class":1088,"line":3873},[1086,11151,1369],{"emptyLinePlaceholder":21},[1086,11153,11154,11156,11158],{"class":1088,"line":3902},[1086,11155,1559],{"class":1304},[1086,11157,1562],{"class":1310},[1086,11159,1565],{"class":1304},[1086,11161,11162,11164,11166,11168,11170,11172,11174,11176],{"class":1088,"line":3914},[1086,11163,1572],{"class":1304},[1086,11165,5426],{"class":1310},[1086,11167,5429],{"class":1587},[1086,11169,1591],{"class":1304},[1086,11171,1518],{"class":1304},[1086,11173,5436],{"class":1096},[1086,11175,1518],{"class":1304},[1086,11177,1565],{"class":1304},[1086,11179,11180,11182,11184,11186,11188],{"class":1088,"line":3930},[1086,11181,1581],{"class":1304},[1086,11183,1562],{"class":1310},[1086,11185,5449],{"class":1304},[1086,11187,8336],{"class":1587},[1086,11189,1565],{"class":1304},[1086,11191,11192,11194,11196],{"class":1088,"line":3944},[1086,11193,1605],{"class":1304},[1086,11195,8346],{"class":1310},[1086,11197,1611],{"class":1304},[1086,11199,11200,11202,11204],{"class":1088,"line":3951},[1086,11201,1616],{"class":1304},[1086,11203,1562],{"class":1310},[1086,11205,1565],{"class":1304},[1086,11207,11208,11210,11212,11214,11216],{"class":1088,"line":3956},[1086,11209,1581],{"class":1304},[1086,11211,1562],{"class":1310},[1086,11213,5449],{"class":1304},[1086,11215,5452],{"class":1587},[1086,11217,1565],{"class":1304},[1086,11219,11220,11222,11224,11226,11228,11230,11232,11234],{"class":1088,"line":3961},[1086,11221,1605],{"class":1304},[1086,11223,5461],{"class":1310},[1086,11225,5464],{"class":1587},[1086,11227,1591],{"class":1304},[1086,11229,1518],{"class":1304},[1086,11231,6535],{"class":1096},[1086,11233,1518],{"class":1304},[1086,11235,1565],{"class":1304},[1086,11237,11238,11240],{"class":1088,"line":3967},[1086,11239,5480],{"class":1304},[1086,11241,6546],{"class":1310},[1086,11243,11244,11246,11248,11250,11252],{"class":1088,"line":3984},[1086,11245,6551],{"class":1587},[1086,11247,1591],{"class":1304},[1086,11249,1518],{"class":1304},[1086,11251,6558],{"class":1096},[1086,11253,5537],{"class":1304},[1086,11255,11256,11258,11260,11262,11264],{"class":1088,"line":4006},[1086,11257,5543],{"class":1587},[1086,11259,1591],{"class":1304},[1086,11261,1518],{"class":1304},[1086,11263,6571],{"class":1096},[1086,11265,5537],{"class":1304},[1086,11267,11268],{"class":1088,"line":4024},[1086,11269,6578],{"class":1587},[1086,11271,11272,11274,11276,11278,11280],{"class":1088,"line":4032},[1086,11273,6583],{"class":1587},[1086,11275,1591],{"class":1304},[1086,11277,1518],{"class":1304},[1086,11279,6590],{"class":1096},[1086,11281,5537],{"class":1304},[1086,11283,11284],{"class":1088,"line":4049},[1086,11285,5603],{"class":1304},[1086,11287,11288,11290,11292,11294,11296,11298,11300,11302,11304,11306,11308],{"class":1088,"line":4070},[1086,11289,5609],{"class":1304},[1086,11291,1562],{"class":1310},[1086,11293,5449],{"class":1304},[1086,11295,371],{"class":1587},[1086,11297,1591],{"class":1304},[1086,11299,1518],{"class":1304},[1086,11301,1865],{"class":1304},[1086,11303,6615],{"class":1300},[1086,11305,1488],{"class":1304},[1086,11307,1518],{"class":1304},[1086,11309,1565],{"class":1304},[1086,11311,11312,11314,11316,11318,11320,11322,11324,11326,11328,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362,11364,11366,11368,11370,11372,11374],{"class":1088,"line":4080},[1086,11313,6626],{"class":1304},[1086,11315,1562],{"class":1310},[1086,11317,6631],{"class":1290},[1086,11319,1591],{"class":1304},[1086,11321,1518],{"class":1304},[1086,11323,6638],{"class":1300},[1086,11325,1716],{"class":1304},[1086,11327,6643],{"class":1300},[1086,11329,6646],{"class":1304},[1086,11331,2617],{"class":1300},[1086,11333,1808],{"class":1304},[1086,11335,2198],{"class":1300},[1086,11337,1518],{"class":1304},[1086,11339,6657],{"class":1304},[1086,11341,6660],{"class":1587},[1086,11343,1591],{"class":1304},[1086,11345,6665],{"class":1304},[1086,11347,4467],{"class":1300},[1086,11349,1808],{"class":1304},[1086,11351,2017],{"class":1300},[1086,11353,1488],{"class":1304},[1086,11355,6676],{"class":1096},[1086,11357,5383],{"class":1304},[1086,11359,6681],{"class":1300},[1086,11361,1808],{"class":1304},[1086,11363,6157],{"class":1300},[1086,11365,1488],{"class":1304},[1086,11367,6676],{"class":1096},[1086,11369,5383],{"class":1304},[1086,11371,6694],{"class":1300},[1086,11373,6697],{"class":1304},[1086,11375,1565],{"class":1304},[1086,11377,11378,11380],{"class":1088,"line":4090},[1086,11379,6704],{"class":1304},[1086,11381,6707],{"class":1310},[1086,11383,11384,11386,11388,11390,11392],{"class":1088,"line":4100},[1086,11385,6712],{"class":1587},[1086,11387,1591],{"class":1304},[1086,11389,1518],{"class":1304},[1086,11391,6719],{"class":1096},[1086,11393,5537],{"class":1304},[1086,11395,11396,11398,11400,11402,11404],{"class":1088,"line":4117},[1086,11397,6726],{"class":1587},[1086,11399,1591],{"class":1304},[1086,11401,1518],{"class":1304},[1086,11403,6733],{"class":1096},[1086,11405,5537],{"class":1304},[1086,11407,11408,11410,11412,11414,11416],{"class":1088,"line":4128},[1086,11409,6740],{"class":1587},[1086,11411,1591],{"class":1304},[1086,11413,1518],{"class":1304},[1086,11415,6747],{"class":1096},[1086,11417,5537],{"class":1304},[1086,11419,11420],{"class":1088,"line":4134},[1086,11421,6754],{"class":1304},[1086,11423,11424,11426],{"class":1088,"line":4140},[1086,11425,6759],{"class":1304},[1086,11427,6762],{"class":1310},[1086,11429,11430,11432,11434,11436,11438],{"class":1088,"line":4150},[1086,11431,6767],{"class":1587},[1086,11433,1591],{"class":1304},[1086,11435,1518],{"class":1304},[1086,11437,6733],{"class":1096},[1086,11439,5537],{"class":1304},[1086,11441,11442,11444,11446,11448,11450],{"class":1088,"line":4160},[1086,11443,6780],{"class":1587},[1086,11445,1591],{"class":1304},[1086,11447,1518],{"class":1304},[1086,11449,6787],{"class":1096},[1086,11451,5537],{"class":1304},[1086,11453,11454,11456,11458,11460,11462],{"class":1088,"line":4173},[1086,11455,6794],{"class":1587},[1086,11457,1591],{"class":1304},[1086,11459,1518],{"class":1304},[1086,11461,6801],{"class":1096},[1086,11463,5537],{"class":1304},[1086,11465,11466],{"class":1088,"line":4188},[1086,11467,6808],{"class":1304},[1086,11469,11470,11472,11474],{"class":1088,"line":4193},[1086,11471,6813],{"class":1304},[1086,11473,6816],{"class":1310},[1086,11475,1565],{"class":1304},[1086,11477,11478],{"class":1088,"line":4198},[1086,11479,1369],{"emptyLinePlaceholder":21},[1086,11481,11482,11484,11486,11488,11490,11492,11494,11496,11498],{"class":1088,"line":4208},[1086,11483,6704],{"class":1304},[1086,11485,1562],{"class":1310},[1086,11487,6831],{"class":1290},[1086,11489,1591],{"class":1304},[1086,11491,1518],{"class":1304},[1086,11493,6838],{"class":1109},[1086,11495,6841],{"class":1300},[1086,11497,1518],{"class":1304},[1086,11499,1565],{"class":1304},[1086,11501,11502,11504],{"class":1088,"line":4224},[1086,11503,6759],{"class":1304},[1086,11505,6762],{"class":1310},[1086,11507,11508,11510,11512,11514,11516],{"class":1088,"line":4239},[1086,11509,6856],{"class":1587},[1086,11511,1591],{"class":1304},[1086,11513,1518],{"class":1304},[1086,11515,6863],{"class":1096},[1086,11517,5537],{"class":1304},[1086,11519,11520,11522,11524,11526,11528],{"class":1088,"line":4245},[1086,11521,6767],{"class":1587},[1086,11523,1591],{"class":1304},[1086,11525,1518],{"class":1304},[1086,11527,6733],{"class":1096},[1086,11529,5537],{"class":1304},[1086,11531,11532,11534,11536,11538,11540],{"class":1088,"line":4251},[1086,11533,6780],{"class":1587},[1086,11535,1591],{"class":1304},[1086,11537,1518],{"class":1304},[1086,11539,6888],{"class":1096},[1086,11541,5537],{"class":1304},[1086,11543,11544,11546,11548,11550,11552],{"class":1088,"line":4259},[1086,11545,6794],{"class":1587},[1086,11547,1591],{"class":1304},[1086,11549,1518],{"class":1304},[1086,11551,6801],{"class":1096},[1086,11553,5537],{"class":1304},[1086,11555,11556],{"class":1088,"line":4264},[1086,11557,6808],{"class":1304},[1086,11559,11560,11562,11564,11566,11568,11570,11572,11574,11576,11578,11580,11582,11584],{"class":1088,"line":4270},[1086,11561,6759],{"class":1304},[1086,11563,976],{"class":1310},[1086,11565,6831],{"class":1587},[1086,11567,1591],{"class":1304},[1086,11569,1518],{"class":1304},[1086,11571,6921],{"class":1096},[1086,11573,1518],{"class":1304},[1086,11575,5464],{"class":1587},[1086,11577,1591],{"class":1304},[1086,11579,1518],{"class":1304},[1086,11581,6932],{"class":1096},[1086,11583,1518],{"class":1304},[1086,11585,1565],{"class":1304},[1086,11587,11588],{"class":1088,"line":4290},[1086,11589,6941],{"class":1300},[1086,11591,11592,11594,11596],{"class":1088,"line":4305},[1086,11593,6946],{"class":1304},[1086,11595,976],{"class":1310},[1086,11597,1565],{"class":1304},[1086,11599,11600,11602,11604],{"class":1088,"line":4322},[1086,11601,6813],{"class":1304},[1086,11603,1562],{"class":1310},[1086,11605,1565],{"class":1304},[1086,11607,11609,11611,11613],{"class":11608,"line":4345},[1088,1569],[1086,11610,6963],{"class":1304},[1086,11612,1562],{"class":1310},[1086,11614,1565],{"class":1304},[1086,11616,11618,11620,11622],{"class":11617,"line":4356},[1088,1569],[1086,11619,6972],{"class":1304},[1086,11621,1562],{"class":1310},[1086,11623,1565],{"class":1304},[1086,11625,11627,11629,11631],{"class":11626,"line":4364},[1088,1569],[1086,11628,5506],{"class":1304},[1086,11630,5082],{"class":1310},[1086,11632,1565],{"class":1304},[1086,11634,11635],{"class":1088,"line":4370},[1086,11636,1369],{"emptyLinePlaceholder":21},[1086,11638,11639,11641],{"class":1088,"line":4375},[1086,11640,5480],{"class":1304},[1086,11642,5522],{"class":1310},[1086,11644,11645,11647,11649,11651,11653],{"class":1088,"line":4398},[1086,11646,5528],{"class":1587},[1086,11648,1591],{"class":1304},[1086,11650,1518],{"class":1304},[1086,11652,5193],{"class":1096},[1086,11654,5537],{"class":1304},[1086,11656,11657,11659,11661,11663,11665],{"class":1088,"line":4404},[1086,11658,7011],{"class":1587},[1086,11660,1591],{"class":1304},[1086,11662,1518],{"class":1304},[1086,11664,7018],{"class":1096},[1086,11666,5537],{"class":1304},[1086,11668,11669,11671,11673,11675,11677],{"class":1088,"line":4424},[1086,11670,5558],{"class":1587},[1086,11672,1591],{"class":1304},[1086,11674,1518],{"class":1304},[1086,11676,5565],{"class":1096},[1086,11678,5537],{"class":1304},[1086,11680,11681,11683,11685,11687,11689],{"class":1088,"line":4430},[1086,11682,6583],{"class":1587},[1086,11684,1591],{"class":1304},[1086,11686,1518],{"class":1304},[1086,11688,7043],{"class":1096},[1086,11690,5537],{"class":1304},[1086,11692,11693,11695,11697,11699,11701],{"class":1088,"line":4476},[1086,11694,5588],{"class":1587},[1086,11696,1591],{"class":1304},[1086,11698,1518],{"class":1304},[1086,11700,7056],{"class":1096},[1086,11702,5537],{"class":1304},[1086,11704,11705],{"class":1088,"line":4492},[1086,11706,5603],{"class":1304},[1086,11708,11709,11711,11713,11715,11718],{"class":1088,"line":4525},[1086,11710,5609],{"class":1304},[1086,11712,1562],{"class":1310},[1086,11714,5449],{"class":1304},[1086,11716,11717],{"class":1587},"footer",[1086,11719,1565],{"class":1304},[1086,11721,11722,11724,11727,11730,11732,11734,11736,11738],{"class":1088,"line":4539},[1086,11723,6626],{"class":1304},[1086,11725,11726],{"class":1310},"ModelSelect",[1086,11728,11729],{"class":1587}," v-model",[1086,11731,1591],{"class":1304},[1086,11733,1518],{"class":1304},[1086,11735,4638],{"class":1096},[1086,11737,1518],{"class":1304},[1086,11739,1611],{"class":1304},[1086,11741,11742,11744,11746],{"class":1088,"line":4547},[1086,11743,6972],{"class":1304},[1086,11745,1562],{"class":1310},[1086,11747,1565],{"class":1304},[1086,11749,11750],{"class":1088,"line":4552},[1086,11751,1369],{"emptyLinePlaceholder":21},[1086,11753,11754,11756],{"class":1088,"line":4559},[1086,11755,5609],{"class":1304},[1086,11757,7069],{"class":1310},[1086,11759,11760,11762,11764,11766,11768],{"class":1088,"line":4564},[1086,11761,7074],{"class":1587},[1086,11763,1591],{"class":1304},[1086,11765,1518],{"class":1304},[1086,11767,6571],{"class":1096},[1086,11769,5537],{"class":1304},[1086,11771,11772,11774,11776,11778,11780],{"class":1088,"line":4582},[1086,11773,7087],{"class":1587},[1086,11775,1591],{"class":1304},[1086,11777,1518],{"class":1304},[1086,11779,5622],{"class":1096},[1086,11781,5537],{"class":1304},[1086,11783,11784,11786,11788,11790,11792],{"class":1088,"line":7163},[1086,11785,7100],{"class":1587},[1086,11787,1591],{"class":1304},[1086,11789,1518],{"class":1304},[1086,11791,7107],{"class":1096},[1086,11793,5537],{"class":1304},[1086,11795,11796,11798,11800,11802,11804],{"class":1088,"line":9865},[1086,11797,7114],{"class":1587},[1086,11799,1591],{"class":1304},[1086,11801,1518],{"class":1304},[1086,11803,7121],{"class":1096},[1086,11805,5537],{"class":1304},[1086,11807,11808],{"class":1088,"line":9874},[1086,11809,7128],{"class":1304},[1086,11811,11812,11814,11816],{"class":1088,"line":9883},[1086,11813,5506],{"class":1304},[1086,11815,5076],{"class":1310},[1086,11817,1565],{"class":1304},[1086,11819,11821,11823,11825],{"class":1088,"line":11820},116,[1086,11822,5640],{"class":1304},[1086,11824,5461],{"class":1310},[1086,11826,1565],{"class":1304},[1086,11828,11830,11832,11834],{"class":1088,"line":11829},117,[1086,11831,1616],{"class":1304},[1086,11833,1562],{"class":1310},[1086,11835,1565],{"class":1304},[1086,11837,11839,11841,11843],{"class":1088,"line":11838},118,[1086,11840,1626],{"class":1304},[1086,11842,5426],{"class":1310},[1086,11844,1565],{"class":1304},[1086,11846,11848,11850,11852],{"class":1088,"line":11847},119,[1086,11849,1635],{"class":1304},[1086,11851,1562],{"class":1310},[1086,11853,1565],{"class":1304},[980,11855,11857],{"id":11856},"going-further","Going further",[976,11859,11860],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[976,11862,11863],{},[994,11864,11865],{},"User Authentication",[976,11867,11868,11869,11874],{},"Add authentication with ",[1030,11870,11873],{"href":11871,"rel":11872},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1034],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[976,11876,11877],{},[994,11878,11879],{},"AI Tools",[976,11881,11882,11883,11888],{},"Extend your chatbot with ",[1030,11884,11887],{"href":11885,"rel":11886},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1034],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1077,11890,11892],{"className":1281,"code":11891,"language":1283,"meta":1082,"style":1082},"import { tool } from 'ai'\nimport { z } from 'zod'\n\nconst weatherTool = tool({\n  description: 'Get the current weather for a location',\n  parameters: z.object({\n    location: z.string().describe('The city name')\n  }),\n  execute: async ({ location }) => {\n    \u002F\u002F Fetch weather data from an API\n    return { location, temperature: 22, condition: 'Sunny' }\n  }\n})\n",[1036,11893,11894,11913,11931,11935,11950,11966,11983,12014,12022,12042,12047,12082,12086],{"__ignoreMap":1082},[1086,11895,11896,11898,11900,11903,11905,11907,11909,11911],{"class":1088,"line":1089},[1086,11897,1707],{"class":1290},[1086,11899,1710],{"class":1304},[1086,11901,11902],{"class":1300}," tool",[1086,11904,1732],{"class":1304},[1086,11906,1735],{"class":1290},[1086,11908,1391],{"class":1304},[1086,11910,2533],{"class":1096},[1086,11912,1355],{"class":1304},[1086,11914,11915,11917,11919,11921,11923,11925,11927,11929],{"class":1088,"line":1106},[1086,11916,1707],{"class":1290},[1086,11918,1710],{"class":1304},[1086,11920,2568],{"class":1300},[1086,11922,1732],{"class":1304},[1086,11924,1735],{"class":1290},[1086,11926,1391],{"class":1304},[1086,11928,2577],{"class":1096},[1086,11930,1355],{"class":1304},[1086,11932,11933],{"class":1088,"line":1320},[1086,11934,1369],{"emptyLinePlaceholder":21},[1086,11936,11937,11939,11942,11944,11946,11948],{"class":1088,"line":1335},[1086,11938,3060],{"class":1587},[1086,11940,11941],{"class":1300}," weatherTool ",[1086,11943,1591],{"class":1304},[1086,11945,11902],{"class":1109},[1086,11947,1301],{"class":1300},[1086,11949,1305],{"class":1304},[1086,11951,11952,11955,11957,11959,11962,11964],{"class":1088,"line":1347},[1086,11953,11954],{"class":1310},"  description",[1086,11956,1314],{"class":1304},[1086,11958,1391],{"class":1304},[1086,11960,11961],{"class":1096},"Get the current weather for a location",[1086,11963,1329],{"class":1304},[1086,11965,1332],{"class":1304},[1086,11967,11968,11971,11973,11975,11977,11979,11981],{"class":1088,"line":1358},[1086,11969,11970],{"class":1310},"  parameters",[1086,11972,1314],{"class":1304},[1086,11974,2568],{"class":1300},[1086,11976,1808],{"class":1304},[1086,11978,2640],{"class":1109},[1086,11980,1301],{"class":1300},[1086,11982,1305],{"class":1304},[1086,11984,11985,11988,11990,11992,11994,11996,11998,12000,12003,12005,12007,12010,12012],{"class":1088,"line":1366},[1086,11986,11987],{"class":1310},"    location",[1086,11989,1314],{"class":1304},[1086,11991,2568],{"class":1300},[1086,11993,1808],{"class":1304},[1086,11995,3240],{"class":1109},[1086,11997,1805],{"class":1300},[1086,11999,1808],{"class":1304},[1086,12001,12002],{"class":1109},"describe",[1086,12004,1301],{"class":1300},[1086,12006,1329],{"class":1304},[1086,12008,12009],{"class":1096},"The city name",[1086,12011,1329],{"class":1304},[1086,12013,1491],{"class":1300},[1086,12015,12016,12018,12020],{"class":1088,"line":1372},[1086,12017,2413],{"class":1304},[1086,12019,1882],{"class":1300},[1086,12021,1332],{"class":1304},[1086,12023,12024,12027,12029,12031,12033,12036,12038,12040],{"class":1088,"line":1383},[1086,12025,12026],{"class":1109},"  execute",[1086,12028,1314],{"class":1304},[1086,12030,3992],{"class":1587},[1086,12032,1939],{"class":1304},[1086,12034,12035],{"class":1942}," location",[1086,12037,1946],{"class":1304},[1086,12039,1825],{"class":1587},[1086,12041,1380],{"class":1304},[1086,12043,12044],{"class":1088,"line":1399},[1086,12045,12046],{"class":1470},"    \u002F\u002F Fetch weather data from an API\n",[1086,12048,12049,12052,12054,12056,12058,12061,12063,12066,12068,12071,12073,12075,12078,12080],{"class":1088,"line":1405},[1086,12050,12051],{"class":1290},"    return",[1086,12053,1710],{"class":1304},[1086,12055,12035],{"class":1300},[1086,12057,1716],{"class":1304},[1086,12059,12060],{"class":1310}," temperature",[1086,12062,1314],{"class":1304},[1086,12064,12065],{"class":3559}," 22",[1086,12067,1716],{"class":1304},[1086,12069,12070],{"class":1310}," condition",[1086,12072,1314],{"class":1304},[1086,12074,1391],{"class":1304},[1086,12076,12077],{"class":1096},"Sunny",[1086,12079,1329],{"class":1304},[1086,12081,3162],{"class":1304},[1086,12083,12084],{"class":1088,"line":1410},[1086,12085,3584],{"class":1304},[1086,12087,12088,12090],{"class":1088,"line":1433},[1086,12089,1488],{"class":1304},[1086,12091,1491],{"class":1300},[980,12093,12095],{"id":12094},"deploying-to-vercel","Deploying to Vercel",[976,12097,12098],{},"Deploy your chatbot to Vercel with zero configuration:",[1077,12100,12102],{"className":1079,"code":12101,"language":1081,"meta":1082,"style":1082},"npx vercel deploy\n",[1036,12103,12104],{"__ignoreMap":1082},[1086,12105,12106,12108,12111],{"class":1088,"line":1089},[1086,12107,1093],{"class":1092},[1086,12109,12110],{"class":1096}," vercel",[1086,12112,12113],{"class":1096}," deploy\n",[976,12115,12116],{},"Then, in the Vercel dashboard:",[988,12118,12119,12125],{},[991,12120,12121,12122,12124],{},"Enable ",[994,12123,4594],{}," and add credits so requests can be processed.",[991,12126,12127,12128,12131],{},"Add a ",[994,12129,12130],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12133,12134,12135],"blockquote",{},[976,12136,12137,12138,12143,12144,12146],{},"Note: On Vercel, you ",[994,12139,12140,12141],{},"don’t need to manually add ",[1036,12142,1658],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1036,12145,1645],{}," locally for development.",[1665,12148,12150],{"to":1065,"target":12149},"_blank",[976,12151,12152,12153,1808],{},"Learn more about setting up AI Gateway in the ",[994,12154,12155],{},"Vercel AI Gateway documentation",[980,12157,12159],{"id":12158},"conclusion","Conclusion",[976,12161,12162],{},"You've built a complete AI chatbot with:",[988,12164,12165,12171,12177,12182,12187],{},[991,12166,12167,12170],{},[994,12168,12169],{},"A complete chat interface"," using Nuxt UI components",[991,12172,12173,12176],{},[994,12174,12175],{},"Real-time streaming responses"," with the AI SDK",[991,12178,12179,12181],{},[994,12180,1008],{}," with MDC for rich content display",[991,12183,12184,12186],{},[994,12185,1014],{}," via AI Gateway",[991,12188,12189,12192],{},[994,12190,12191],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[976,12194,12195],{},"The combination of Nuxt's full-stack capabilities, Nuxt UI's purpose-built chat components, a local SQLite dev database with a production Turso database, and the AI SDK's streaming infrastructure makes building AI applications straightforward and enjoyable.",[976,12197,12198],{},[994,12199,12200],{},"Resources:",[988,12202,12203,12210,12217,12224,12230,12236],{},[991,12204,12205],{},[1030,12206,12209],{"href":12207,"rel":12208},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1034],"Nuxt UI Chat Components",[991,12211,12212],{},[1030,12213,12216],{"href":12214,"rel":12215},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1034],"NuxtHub Database",[991,12218,12219],{},[1030,12220,12223],{"href":12221,"rel":12222},"https:\u002F\u002Fai-sdk.dev",[1034],"AI SDK Documentation",[991,12225,12226],{},[1030,12227,12229],{"href":1065,"rel":12228},[1034],"AI Gateway Documentation",[991,12231,12232],{},[1030,12233,12235],{"href":1032,"rel":12234},[1034],"Nuxt AI Chat Template",[991,12237,12238],{},[1030,12239,12241],{"href":1042,"rel":12240},[1034],"Vue AI Chat Template",[976,12243,12244],{},"We're excited to see what you'll build!",[12246,12247,12248],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":1082,"searchDepth":1106,"depth":1106,"links":12250},[12251,12252,12253,12259,12264,12267,12268,12272,12273,12274,12279,12280,12281],{"id":982,"depth":1106,"text":983},{"id":1050,"depth":1106,"text":1051},{"id":1071,"depth":1106,"text":1072,"children":12254},[12255,12256,12257,12258],{"id":1116,"depth":1320,"text":1117},{"id":1267,"depth":1320,"text":1268},{"id":1536,"depth":1320,"text":1537},{"id":1676,"depth":1320,"text":1677},{"id":2456,"depth":1106,"text":2457,"children":12260},[12261,12262,12263],{"id":2468,"depth":1320,"text":2469},{"id":2851,"depth":1320,"text":2852},{"id":4685,"depth":1320,"text":4686},{"id":5067,"depth":1106,"text":5068,"children":12265},[12266],{"id":5086,"depth":1320,"text":5087},{"id":5703,"depth":1106,"text":5704},{"id":7342,"depth":1106,"text":7343,"children":12269},[12270,12271],{"id":7349,"depth":1320,"text":7350},{"id":7509,"depth":1320,"text":7510},{"id":8009,"depth":1106,"text":8010},{"id":8552,"depth":1106,"text":8553},{"id":9901,"depth":1106,"text":9902,"children":12275},[12276,12277,12278],{"id":9912,"depth":1320,"text":9913},{"id":10175,"depth":1320,"text":10176},{"id":10434,"depth":1320,"text":10435},{"id":11856,"depth":1106,"text":11857},{"id":12094,"depth":1106,"text":12095},{"id":12158,"depth":1106,"text":12159},"2025-12-16T10:00:00.000Z","Learn how to build a full-featured AI chatbot with streaming responses, multiple models support, and a beautiful UI using Nuxt, Nuxt UI, and Vercel AI SDK.","md","\u002Fassets\u002Fblog\u002Fbuilding-nuxt-ai-chatbot.png",{"category":12287},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":960,"description":12283},"blog\u002Fhow-to-build-an-ai-chat","0w08aHw2dV31F0VfglVayCmc5PGMimBzKjFu7Z3IMnQ",1776223740080]