[{"data":1,"prerenderedAt":12082},["ShallowReactive",2],{"navigation":3,"-blog-how-to-build-an-ai-chat":959},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,817,858],{"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,792,797,802,807,812],{"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.","Soon",{"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,"badge":791},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.","New",{"title":793,"path":794,"stem":795,"framework":16,"category":172,"description":796},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":798,"path":799,"stem":800,"framework":16,"category":397,"description":801},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":803,"path":804,"stem":805,"framework":16,"category":397,"description":806},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":808,"path":809,"stem":810,"framework":16,"category":172,"description":811},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":813,"path":814,"stem":815,"framework":16,"category":172,"description":816},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":818,"framework":16,"category":16,"description":16,"icon":819,"path":820,"stem":821,"children":822,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[823,828,833,838,843,848,853],{"title":824,"path":825,"stem":826,"framework":16,"category":16,"description":827},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":829,"path":830,"stem":831,"framework":16,"category":16,"description":832},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":834,"path":835,"stem":836,"framework":16,"category":16,"description":837},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":839,"path":840,"stem":841,"framework":16,"category":16,"description":842},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":844,"path":845,"stem":846,"framework":16,"category":16,"description":847},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":849,"path":850,"stem":851,"framework":16,"category":16,"description":852,"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":854,"path":855,"stem":856,"framework":16,"category":16,"description":857},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":859,"path":860,"stem":861,"children":862,"framework":28,"category":16,"description":16,"icon":958},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[863,865,870,875,880,885,890,894,899,903,908,913,918,923,928,932,937,941,945,949,954],{"title":15,"path":860,"stem":861,"framework":28,"category":16,"description":864},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":866,"path":867,"stem":868,"framework":28,"category":16,"description":869},"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":871,"path":872,"stem":873,"framework":28,"category":16,"description":874},"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":876,"path":877,"stem":878,"framework":28,"category":16,"description":879},"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":881,"path":882,"stem":883,"framework":28,"category":16,"description":884},"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":886,"stem":887,"framework":28,"category":888,"description":889},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":891,"stem":892,"framework":28,"category":888,"description":893},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":895,"path":896,"stem":897,"framework":28,"category":888,"description":898},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":900,"stem":901,"framework":28,"category":888,"description":902},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":904,"path":905,"stem":906,"framework":28,"category":888,"description":907},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":909,"path":910,"stem":911,"framework":28,"category":888,"description":912},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":914,"path":915,"stem":916,"framework":28,"category":888,"description":917},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":919,"path":920,"stem":921,"framework":28,"category":888,"description":922},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":924,"path":925,"stem":926,"framework":28,"category":888,"description":927},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":929,"stem":930,"framework":28,"category":888,"description":931},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":933,"path":934,"stem":935,"framework":28,"category":888,"description":936},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":938,"stem":939,"framework":28,"category":888,"description":940},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":942,"stem":943,"framework":28,"category":888,"description":944},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":946,"stem":947,"framework":28,"category":888,"description":948},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":950,"path":951,"stem":952,"framework":28,"category":888,"description":953},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":955,"stem":956,"framework":28,"category":888,"description":957},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":960,"title":961,"authors":962,"body":973,"date":12072,"description":12073,"extension":12074,"image":12075,"meta":12076,"navigation":36,"path":12078,"seo":12079,"stem":12080,"__hash__":12081},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[963,968],{"name":964,"avatar":965,"to":967},"Hugo Richard",{"src":966},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":969,"avatar":970,"to":972},"Benjamin Canac",{"src":971},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":974,"value":975,"toc":12039},"minimark",[976,980,985,988,1023,1050,1054,1057,1071,1075,1078,1115,1120,1123,1267,1271,1278,1494,1497,1536,1540,1547,1642,1649,1666,1676,1680,1694,2425,2428,2446,2456,2460,2468,2472,2483,2851,2855,2882,4589,4592,4597,4604,4609,4620,4625,4634,4652,4657,4672,4685,4689,4692,5067,5071,5086,5090,5098,5671,5678,5703,5707,5725,7100,7103,7108,7119,7157,7172,7177,7184,7198,7203,7243,7248,7253,7260,7271,7275,7278,7282,7285,7438,7442,7467,7938,7942,8481,8485,9750,9759,9763,9770,9774,9784,10033,10037,10045,10292,10296,10299,11645,11649,11652,11657,11666,11671,11680,11883,11887,11890,11905,11908,11923,11938,11946,11950,11953,11983,11986,11991,12032,12035],[977,978,979],"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.",[981,982,984],"h2",{"id":983},"what-were-building","What we're building",[977,986,987],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[989,990,991,999,1005,1011,1017],"ul",{},[992,993,994,998],"li",{},[995,996,997],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[992,1000,1001,1004],{},[995,1002,1003],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[992,1006,1007,1010],{},[995,1008,1009],{},"Markdown rendering"," for rich AI responses with code highlighting",[992,1012,1013,1016],{},[995,1014,1015],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[992,1018,1019,1022],{},[995,1020,1021],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1024,1025,1027],"callout",{"icon":1026},"i-simple-icons-github",[977,1028,1029,1030,1041,1042,1049],{},"Check out the ",[1031,1032,1037],"a",{"href":1033,"rel":1034,"target":1036},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1035],"nofollow","_blank",[1038,1039,1040],"code",{},"Nuxt"," and ",[1031,1043,1046],{"href":1044,"rel":1045,"target":1036},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1035],[1038,1047,1048],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[981,1051,1053],{"id":1052},"prerequisites","Prerequisites",[977,1055,1056],{},"Before we start, make sure you have:",[989,1058,1059,1062],{},[992,1060,1061],{},"Node.js 20+ installed",[992,1063,1064,1065,1070],{},"A ",[1031,1066,1069],{"href":1067,"rel":1068},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1035],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[981,1072,1074],{"id":1073},"project-setup","Project setup",[977,1076,1077],{},"Start by creating a new Nuxt project:",[1079,1080,1085],"pre",{"className":1081,"code":1082,"language":1083,"meta":1084,"style":1084},"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","",[1038,1086,1087,1106],{"__ignoreMap":1084},[1088,1089,1092,1096,1100,1103],"span",{"class":1090,"line":1091},"line",1,[1088,1093,1095],{"class":1094},"sBMFI","npx",[1088,1097,1099],{"class":1098},"sfazB"," nuxi@latest",[1088,1101,1102],{"class":1098}," init",[1088,1104,1105],{"class":1098}," nuxt-ai-chat\n",[1088,1107,1109,1113],{"class":1090,"line":1108},2,[1088,1110,1112],{"class":1111},"s2Zo4","cd",[1088,1114,1105],{"class":1098},[1116,1117,1119],"h3",{"id":1118},"installing-dependencies","Installing dependencies",[977,1121,1122],{},"Install Nuxt UI and the AI-specific dependencies:",[1124,1125,1127,1170,1202,1235],"code-group",{"sync":1126},"pm",[1079,1128,1131],{"className":1081,"code":1129,"filename":1130,"language":1083,"meta":1084,"style":1084},"pnpm add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1038,1132,1133],{"__ignoreMap":1084},[1088,1134,1135,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1167],{"class":1090,"line":1091},[1088,1136,1130],{"class":1094},[1088,1138,1139],{"class":1098}," add",[1088,1141,1142],{"class":1098}," @nuxt\u002Fui",[1088,1144,1145],{"class":1098}," tailwindcss",[1088,1147,1148],{"class":1098}," @nuxtjs\u002Fmdc",[1088,1150,1151],{"class":1098}," @nuxthub\u002Fcore",[1088,1153,1154],{"class":1098}," drizzle-orm",[1088,1156,1157],{"class":1098}," drizzle-kit",[1088,1159,1160],{"class":1098}," @libsql\u002Fclient",[1088,1162,1163],{"class":1098}," ai",[1088,1165,1166],{"class":1098}," @ai-sdk\u002Fvue",[1088,1168,1169],{"class":1098}," zod\n",[1079,1171,1174],{"className":1081,"code":1172,"filename":1173,"language":1083,"meta":1084,"style":1084},"yarn add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1038,1175,1176],{"__ignoreMap":1084},[1088,1177,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200],{"class":1090,"line":1091},[1088,1179,1173],{"class":1094},[1088,1181,1139],{"class":1098},[1088,1183,1142],{"class":1098},[1088,1185,1145],{"class":1098},[1088,1187,1148],{"class":1098},[1088,1189,1151],{"class":1098},[1088,1191,1154],{"class":1098},[1088,1193,1157],{"class":1098},[1088,1195,1160],{"class":1098},[1088,1197,1163],{"class":1098},[1088,1199,1166],{"class":1098},[1088,1201,1169],{"class":1098},[1079,1203,1206],{"className":1081,"code":1204,"filename":1205,"language":1083,"meta":1084,"style":1084},"npm install @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1038,1207,1208],{"__ignoreMap":1084},[1088,1209,1210,1212,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233],{"class":1090,"line":1091},[1088,1211,1205],{"class":1094},[1088,1213,1214],{"class":1098}," install",[1088,1216,1142],{"class":1098},[1088,1218,1145],{"class":1098},[1088,1220,1148],{"class":1098},[1088,1222,1151],{"class":1098},[1088,1224,1154],{"class":1098},[1088,1226,1157],{"class":1098},[1088,1228,1160],{"class":1098},[1088,1230,1163],{"class":1098},[1088,1232,1166],{"class":1098},[1088,1234,1169],{"class":1098},[1079,1236,1239],{"className":1081,"code":1237,"filename":1238,"language":1083,"meta":1084,"style":1084},"bun add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1038,1240,1241],{"__ignoreMap":1084},[1088,1242,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265],{"class":1090,"line":1091},[1088,1244,1238],{"class":1094},[1088,1246,1139],{"class":1098},[1088,1248,1142],{"class":1098},[1088,1250,1145],{"class":1098},[1088,1252,1148],{"class":1098},[1088,1254,1151],{"class":1098},[1088,1256,1154],{"class":1098},[1088,1258,1157],{"class":1098},[1088,1260,1160],{"class":1098},[1088,1262,1163],{"class":1098},[1088,1264,1166],{"class":1098},[1088,1266,1169],{"class":1098},[1116,1268,1270],{"id":1269},"configuration","Configuration",[977,1272,1273,1274,1277],{},"Update your ",[1038,1275,1276],{},"nuxt.config.ts"," to register the modules:",[1279,1280,1281],"code-tree-intersection",{},[1079,1282,1286],{"className":1283,"code":1284,"filename":1276,"language":1285,"meta":1084,"style":1084},"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",[1038,1287,1288,1308,1320,1335,1347,1358,1366,1372,1383,1399,1405,1410,1433,1438,1448,1458,1474,1480,1485],{"__ignoreMap":1084},[1088,1289,1290,1294,1297,1300,1304],{"class":1090,"line":1091},[1088,1291,1293],{"class":1292},"s7zQu","export",[1088,1295,1296],{"class":1292}," default",[1088,1298,1299],{"class":1111}," defineNuxtConfig",[1088,1301,1303],{"class":1302},"sTEyZ","(",[1088,1305,1307],{"class":1306},"sMK4o","{\n",[1088,1309,1310,1314,1317],{"class":1090,"line":1108},[1088,1311,1313],{"class":1312},"swJcz","  modules",[1088,1315,1316],{"class":1306},":",[1088,1318,1319],{"class":1302}," [\n",[1088,1321,1323,1326,1329,1332],{"class":1090,"line":1322},3,[1088,1324,1325],{"class":1306},"    '",[1088,1327,1328],{"class":1098},"@nuxt\u002Fui",[1088,1330,1331],{"class":1306},"'",[1088,1333,1334],{"class":1306},",\n",[1088,1336,1338,1340,1343,1345],{"class":1090,"line":1337},4,[1088,1339,1325],{"class":1306},[1088,1341,1342],{"class":1098},"@nuxtjs\u002Fmdc",[1088,1344,1331],{"class":1306},[1088,1346,1334],{"class":1306},[1088,1348,1350,1352,1355],{"class":1090,"line":1349},5,[1088,1351,1325],{"class":1306},[1088,1353,1354],{"class":1098},"@nuxthub\u002Fcore",[1088,1356,1357],{"class":1306},"'\n",[1088,1359,1361,1364],{"class":1090,"line":1360},6,[1088,1362,1363],{"class":1302},"  ]",[1088,1365,1334],{"class":1306},[1088,1367,1369],{"class":1090,"line":1368},7,[1088,1370,1371],{"emptyLinePlaceholder":21},"\n",[1088,1373,1375,1378,1380],{"class":1090,"line":1374},8,[1088,1376,1377],{"class":1312},"  hub",[1088,1379,1316],{"class":1306},[1088,1381,1382],{"class":1306}," {\n",[1088,1384,1386,1389,1391,1394,1397],{"class":1090,"line":1385},9,[1088,1387,1388],{"class":1312},"    db",[1088,1390,1316],{"class":1306},[1088,1392,1393],{"class":1306}," '",[1088,1395,1396],{"class":1098},"sqlite",[1088,1398,1357],{"class":1306},[1088,1400,1402],{"class":1090,"line":1401},10,[1088,1403,1404],{"class":1306},"  },\n",[1088,1406,1408],{"class":1090,"line":1407},11,[1088,1409,1371],{"emptyLinePlaceholder":21},[1088,1411,1413,1416,1418,1421,1423,1426,1428,1431],{"class":1090,"line":1412},12,[1088,1414,1415],{"class":1312},"  css",[1088,1417,1316],{"class":1306},[1088,1419,1420],{"class":1302}," [",[1088,1422,1331],{"class":1306},[1088,1424,1425],{"class":1098},"~\u002Fassets\u002Fcss\u002Fmain.css",[1088,1427,1331],{"class":1306},[1088,1429,1430],{"class":1302},"]",[1088,1432,1334],{"class":1306},[1088,1434,1436],{"class":1090,"line":1435},13,[1088,1437,1371],{"emptyLinePlaceholder":21},[1088,1439,1441,1444,1446],{"class":1090,"line":1440},14,[1088,1442,1443],{"class":1312},"  mdc",[1088,1445,1316],{"class":1306},[1088,1447,1382],{"class":1306},[1088,1449,1451,1454,1456],{"class":1090,"line":1450},15,[1088,1452,1453],{"class":1312},"    headings",[1088,1455,1316],{"class":1306},[1088,1457,1382],{"class":1306},[1088,1459,1461,1464,1466,1470],{"class":1090,"line":1460},16,[1088,1462,1463],{"class":1312},"      anchorLinks",[1088,1465,1316],{"class":1306},[1088,1467,1469],{"class":1468},"sfNiH"," false",[1088,1471,1473],{"class":1472},"sHwdD"," \u002F\u002F Disable anchor links in AI responses\n",[1088,1475,1477],{"class":1090,"line":1476},17,[1088,1478,1479],{"class":1306},"    }\n",[1088,1481,1483],{"class":1090,"line":1482},18,[1088,1484,1404],{"class":1306},[1088,1486,1488,1491],{"class":1090,"line":1487},19,[1088,1489,1490],{"class":1306},"}",[1088,1492,1493],{"class":1302},")\n",[977,1495,1496],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1279,1498,1499],{},[1079,1500,1505],{"className":1501,"code":1502,"filename":1503,"language":1504,"meta":1084,"style":1084},"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",[1038,1506,1507,1524],{"__ignoreMap":1084},[1088,1508,1509,1512,1515,1518,1521],{"class":1090,"line":1091},[1088,1510,1511],{"class":1292},"@import",[1088,1513,1514],{"class":1306}," \"",[1088,1516,1517],{"class":1098},"tailwindcss",[1088,1519,1520],{"class":1306},"\"",[1088,1522,1523],{"class":1306},";\n",[1088,1525,1526,1528,1530,1532,1534],{"class":1090,"line":1108},[1088,1527,1511],{"class":1292},[1088,1529,1514],{"class":1306},[1088,1531,1328],{"class":1098},[1088,1533,1520],{"class":1306},[1088,1535,1523],{"class":1306},[1116,1537,1539],{"id":1538},"setting-up-the-app","Setting up the app",[977,1541,1542,1543,1546],{},"Nuxt UI requires wrapping your app with ",[1038,1544,1545],{},"UApp"," for modals, toasts, and overlays to work properly:",[1279,1548,1549],{},[1079,1550,1555],{"className":1551,"code":1552,"filename":1553,"highlights":1554,"language":34,"meta":1084,"style":1084},"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",[1108,1360],[1038,1556,1557,1568,1579,1603,1614,1623,1633],{"__ignoreMap":1084},[1088,1558,1559,1562,1565],{"class":1090,"line":1091},[1088,1560,1561],{"class":1306},"\u003C",[1088,1563,1564],{"class":1312},"template",[1088,1566,1567],{"class":1306},">\n",[1088,1569,1572,1575,1577],{"class":1570,"line":1108},[1090,1571],"highlight",[1088,1573,1574],{"class":1306},"  \u003C",[1088,1576,1545],{"class":1312},[1088,1578,1567],{"class":1306},[1088,1580,1581,1584,1587,1591,1594,1596,1599,1601],{"class":1090,"line":1322},[1088,1582,1583],{"class":1306},"    \u003C",[1088,1585,1586],{"class":1312},"UDashboardGroup",[1088,1588,1590],{"class":1589},"spNyl"," unit",[1088,1592,1593],{"class":1306},"=",[1088,1595,1520],{"class":1306},[1088,1597,1598],{"class":1098},"rem",[1088,1600,1520],{"class":1306},[1088,1602,1567],{"class":1306},[1088,1604,1605,1608,1611],{"class":1090,"line":1337},[1088,1606,1607],{"class":1306},"      \u003C",[1088,1609,1610],{"class":1312},"NuxtPage",[1088,1612,1613],{"class":1306}," \u002F>\n",[1088,1615,1616,1619,1621],{"class":1090,"line":1349},[1088,1617,1618],{"class":1306},"    \u003C\u002F",[1088,1620,1586],{"class":1312},[1088,1622,1567],{"class":1306},[1088,1624,1626,1629,1631],{"class":1625,"line":1360},[1090,1571],[1088,1627,1628],{"class":1306},"  \u003C\u002F",[1088,1630,1545],{"class":1312},[1088,1632,1567],{"class":1306},[1088,1634,1635,1638,1640],{"class":1090,"line":1368},[1088,1636,1637],{"class":1306},"\u003C\u002F",[1088,1639,1564],{"class":1312},[1088,1641,1567],{"class":1306},[977,1643,1644,1645,1648],{},"Create a ",[1038,1646,1647],{},".env"," file with your AI Gateway API key:",[1279,1650,1651],{},[1079,1652,1654],{"className":1081,"code":1653,"filename":1647,"language":1083,"meta":1084,"style":1084},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1038,1655,1656],{"__ignoreMap":1084},[1088,1657,1658,1661,1663],{"class":1090,"line":1091},[1088,1659,1660],{"class":1302},"AI_GATEWAY_API_KEY",[1088,1662,1593],{"class":1306},[1088,1664,1665],{"class":1098},"your-api-key-here\n",[1667,1668,1669],"note",{},[977,1670,1671,1672,1675],{},"With ",[1031,1673,1069],{"href":1067,"rel":1674},[1035],", 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.",[1116,1677,1679],{"id":1678},"setting-up-the-database","Setting up the database",[977,1681,1682,1687,1688,1693],{},[1031,1683,1686],{"href":1684,"rel":1685},"https:\u002F\u002Fhub.nuxt.com",[1035],"NuxtHub"," provides a zero-config database powered by ",[1031,1689,1692],{"href":1690,"rel":1691},"https:\u002F\u002Form.drizzle.team",[1035],"Drizzle ORM",". Here is the schema for the chat application:",[1279,1695,1696],{},[1697,1698,1699],"code-collapse",{},[1079,1700,1703],{"className":1283,"code":1701,"filename":1702,"language":1285,"meta":1084,"style":1084},"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",[1038,1704,1705,1745,1765,1769,1796,1841,1854,1911,1917,1921,1956,1968,1975,1979,2005,2050,2116,2185,2224,2274,2287,2317,2323,2328,2360,2376,2394,2410,2418],{"__ignoreMap":1084},[1088,1706,1707,1710,1713,1716,1719,1722,1724,1727,1729,1732,1735,1738,1740,1743],{"class":1090,"line":1091},[1088,1708,1709],{"class":1292},"import",[1088,1711,1712],{"class":1306}," {",[1088,1714,1715],{"class":1302}," sqliteTable",[1088,1717,1718],{"class":1306},",",[1088,1720,1721],{"class":1302}," text",[1088,1723,1718],{"class":1306},[1088,1725,1726],{"class":1302}," integer",[1088,1728,1718],{"class":1306},[1088,1730,1731],{"class":1302}," index",[1088,1733,1734],{"class":1306}," }",[1088,1736,1737],{"class":1292}," from",[1088,1739,1393],{"class":1306},[1088,1741,1742],{"class":1098},"drizzle-orm\u002Fsqlite-core",[1088,1744,1357],{"class":1306},[1088,1746,1747,1749,1751,1754,1756,1758,1760,1763],{"class":1090,"line":1108},[1088,1748,1709],{"class":1292},[1088,1750,1712],{"class":1306},[1088,1752,1753],{"class":1302}," relations",[1088,1755,1734],{"class":1306},[1088,1757,1737],{"class":1292},[1088,1759,1393],{"class":1306},[1088,1761,1762],{"class":1098},"drizzle-orm",[1088,1764,1357],{"class":1306},[1088,1766,1767],{"class":1090,"line":1322},[1088,1768,1371],{"emptyLinePlaceholder":21},[1088,1770,1771,1773,1776,1779,1781,1783,1785,1787,1790,1792,1794],{"class":1090,"line":1337},[1088,1772,1293],{"class":1292},[1088,1774,1775],{"class":1589}," const",[1088,1777,1778],{"class":1302}," chats ",[1088,1780,1593],{"class":1306},[1088,1782,1715],{"class":1111},[1088,1784,1303],{"class":1302},[1088,1786,1331],{"class":1306},[1088,1788,1789],{"class":1098},"chats",[1088,1791,1331],{"class":1306},[1088,1793,1718],{"class":1306},[1088,1795,1382],{"class":1306},[1088,1797,1798,1801,1803,1805,1808,1811,1814,1816,1818,1821,1823,1825,1828,1831,1833,1836,1839],{"class":1090,"line":1349},[1088,1799,1800],{"class":1312},"  id",[1088,1802,1316],{"class":1306},[1088,1804,1721],{"class":1111},[1088,1806,1807],{"class":1302},"()",[1088,1809,1810],{"class":1306},".",[1088,1812,1813],{"class":1111},"primaryKey",[1088,1815,1807],{"class":1302},[1088,1817,1810],{"class":1306},[1088,1819,1820],{"class":1111},"$defaultFn",[1088,1822,1303],{"class":1302},[1088,1824,1807],{"class":1306},[1088,1826,1827],{"class":1589}," =>",[1088,1829,1830],{"class":1302}," crypto",[1088,1832,1810],{"class":1306},[1088,1834,1835],{"class":1111},"randomUUID",[1088,1837,1838],{"class":1302},"())",[1088,1840,1334],{"class":1306},[1088,1842,1843,1846,1848,1850,1852],{"class":1090,"line":1360},[1088,1844,1845],{"class":1312},"  title",[1088,1847,1316],{"class":1306},[1088,1849,1721],{"class":1111},[1088,1851,1807],{"class":1302},[1088,1853,1334],{"class":1306},[1088,1855,1856,1859,1861,1863,1865,1868,1871,1873,1875,1878,1880,1882,1885,1887,1890,1892,1894,1896,1898,1900,1902,1905,1908],{"class":1090,"line":1368},[1088,1857,1858],{"class":1312},"  createdAt",[1088,1860,1316],{"class":1306},[1088,1862,1726],{"class":1111},[1088,1864,1303],{"class":1302},[1088,1866,1867],{"class":1306},"{",[1088,1869,1870],{"class":1312}," mode",[1088,1872,1316],{"class":1306},[1088,1874,1393],{"class":1306},[1088,1876,1877],{"class":1098},"timestamp",[1088,1879,1331],{"class":1306},[1088,1881,1734],{"class":1306},[1088,1883,1884],{"class":1302},")",[1088,1886,1810],{"class":1306},[1088,1888,1889],{"class":1111},"notNull",[1088,1891,1807],{"class":1302},[1088,1893,1810],{"class":1306},[1088,1895,1820],{"class":1111},[1088,1897,1303],{"class":1302},[1088,1899,1807],{"class":1306},[1088,1901,1827],{"class":1589},[1088,1903,1904],{"class":1306}," new",[1088,1906,1907],{"class":1111}," Date",[1088,1909,1910],{"class":1302},"())\n",[1088,1912,1913,1915],{"class":1090,"line":1374},[1088,1914,1490],{"class":1306},[1088,1916,1493],{"class":1302},[1088,1918,1919],{"class":1090,"line":1385},[1088,1920,1371],{"emptyLinePlaceholder":21},[1088,1922,1923,1925,1927,1930,1932,1934,1937,1939,1942,1946,1949,1951,1954],{"class":1090,"line":1401},[1088,1924,1293],{"class":1292},[1088,1926,1775],{"class":1589},[1088,1928,1929],{"class":1302}," chatsRelations ",[1088,1931,1593],{"class":1306},[1088,1933,1753],{"class":1111},[1088,1935,1936],{"class":1302},"(chats",[1088,1938,1718],{"class":1306},[1088,1940,1941],{"class":1306}," ({",[1088,1943,1945],{"class":1944},"sHdIc"," many",[1088,1947,1948],{"class":1306}," })",[1088,1950,1827],{"class":1589},[1088,1952,1953],{"class":1302}," (",[1088,1955,1307],{"class":1306},[1088,1957,1958,1961,1963,1965],{"class":1090,"line":1407},[1088,1959,1960],{"class":1312},"  messages",[1088,1962,1316],{"class":1306},[1088,1964,1945],{"class":1111},[1088,1966,1967],{"class":1302},"(messages)\n",[1088,1969,1970,1972],{"class":1090,"line":1412},[1088,1971,1490],{"class":1306},[1088,1973,1974],{"class":1302},"))\n",[1088,1976,1977],{"class":1090,"line":1435},[1088,1978,1371],{"emptyLinePlaceholder":21},[1088,1980,1981,1983,1985,1988,1990,1992,1994,1996,1999,2001,2003],{"class":1090,"line":1440},[1088,1982,1293],{"class":1292},[1088,1984,1775],{"class":1589},[1088,1986,1987],{"class":1302}," messages ",[1088,1989,1593],{"class":1306},[1088,1991,1715],{"class":1111},[1088,1993,1303],{"class":1302},[1088,1995,1331],{"class":1306},[1088,1997,1998],{"class":1098},"messages",[1088,2000,1331],{"class":1306},[1088,2002,1718],{"class":1306},[1088,2004,1382],{"class":1306},[1088,2006,2007,2009,2011,2013,2015,2017,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048],{"class":1090,"line":1450},[1088,2008,1800],{"class":1312},[1088,2010,1316],{"class":1306},[1088,2012,1721],{"class":1111},[1088,2014,1303],{"class":1302},[1088,2016,1331],{"class":1306},[1088,2018,2019],{"class":1098},"id",[1088,2021,1331],{"class":1306},[1088,2023,1884],{"class":1302},[1088,2025,1810],{"class":1306},[1088,2027,1813],{"class":1111},[1088,2029,1807],{"class":1302},[1088,2031,1810],{"class":1306},[1088,2033,1820],{"class":1111},[1088,2035,1303],{"class":1302},[1088,2037,1807],{"class":1306},[1088,2039,1827],{"class":1589},[1088,2041,1830],{"class":1302},[1088,2043,1810],{"class":1306},[1088,2045,1835],{"class":1111},[1088,2047,1838],{"class":1302},[1088,2049,1334],{"class":1306},[1088,2051,2052,2055,2057,2059,2061,2063,2066,2068,2070,2072,2074,2076,2078,2081,2083,2085,2087,2090,2092,2094,2096,2098,2101,2103,2105,2108,2110,2112,2114],{"class":1090,"line":1460},[1088,2053,2054],{"class":1312},"  chatId",[1088,2056,1316],{"class":1306},[1088,2058,1721],{"class":1111},[1088,2060,1303],{"class":1302},[1088,2062,1331],{"class":1306},[1088,2064,2065],{"class":1098},"chat_id",[1088,2067,1331],{"class":1306},[1088,2069,1884],{"class":1302},[1088,2071,1810],{"class":1306},[1088,2073,1889],{"class":1111},[1088,2075,1807],{"class":1302},[1088,2077,1810],{"class":1306},[1088,2079,2080],{"class":1111},"references",[1088,2082,1303],{"class":1302},[1088,2084,1807],{"class":1306},[1088,2086,1827],{"class":1589},[1088,2088,2089],{"class":1302}," chats",[1088,2091,1810],{"class":1306},[1088,2093,2019],{"class":1302},[1088,2095,1718],{"class":1306},[1088,2097,1712],{"class":1306},[1088,2099,2100],{"class":1312}," onDelete",[1088,2102,1316],{"class":1306},[1088,2104,1393],{"class":1306},[1088,2106,2107],{"class":1098},"cascade",[1088,2109,1331],{"class":1306},[1088,2111,1734],{"class":1306},[1088,2113,1884],{"class":1302},[1088,2115,1334],{"class":1306},[1088,2117,2118,2121,2123,2125,2127,2129,2132,2134,2136,2138,2141,2143,2145,2147,2150,2152,2154,2156,2159,2161,2163,2165,2168,2170,2173,2175,2177,2179,2181,2183],{"class":1090,"line":1476},[1088,2119,2120],{"class":1312},"  role",[1088,2122,1316],{"class":1306},[1088,2124,1721],{"class":1111},[1088,2126,1303],{"class":1302},[1088,2128,1331],{"class":1306},[1088,2130,2131],{"class":1098},"role",[1088,2133,1331],{"class":1306},[1088,2135,1718],{"class":1306},[1088,2137,1712],{"class":1306},[1088,2139,2140],{"class":1312}," enum",[1088,2142,1316],{"class":1306},[1088,2144,1420],{"class":1302},[1088,2146,1331],{"class":1306},[1088,2148,2149],{"class":1098},"user",[1088,2151,1331],{"class":1306},[1088,2153,1718],{"class":1306},[1088,2155,1393],{"class":1306},[1088,2157,2158],{"class":1098},"assistant",[1088,2160,1331],{"class":1306},[1088,2162,1718],{"class":1306},[1088,2164,1393],{"class":1306},[1088,2166,2167],{"class":1098},"system",[1088,2169,1331],{"class":1306},[1088,2171,2172],{"class":1302},"] ",[1088,2174,1490],{"class":1306},[1088,2176,1884],{"class":1302},[1088,2178,1810],{"class":1306},[1088,2180,1889],{"class":1111},[1088,2182,1807],{"class":1302},[1088,2184,1334],{"class":1306},[1088,2186,2187,2190,2192,2194,2196,2198,2201,2203,2205,2207,2209,2211,2213,2216,2218,2220,2222],{"class":1090,"line":1482},[1088,2188,2189],{"class":1312},"  parts",[1088,2191,1316],{"class":1306},[1088,2193,1721],{"class":1111},[1088,2195,1303],{"class":1302},[1088,2197,1331],{"class":1306},[1088,2199,2200],{"class":1098},"parts",[1088,2202,1331],{"class":1306},[1088,2204,1718],{"class":1306},[1088,2206,1712],{"class":1306},[1088,2208,1870],{"class":1312},[1088,2210,1316],{"class":1306},[1088,2212,1393],{"class":1306},[1088,2214,2215],{"class":1098},"json",[1088,2217,1331],{"class":1306},[1088,2219,1734],{"class":1306},[1088,2221,1884],{"class":1302},[1088,2223,1334],{"class":1306},[1088,2225,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272],{"class":1090,"line":1487},[1088,2227,1858],{"class":1312},[1088,2229,1316],{"class":1306},[1088,2231,1726],{"class":1111},[1088,2233,1303],{"class":1302},[1088,2235,1867],{"class":1306},[1088,2237,1870],{"class":1312},[1088,2239,1316],{"class":1306},[1088,2241,1393],{"class":1306},[1088,2243,1877],{"class":1098},[1088,2245,1331],{"class":1306},[1088,2247,1734],{"class":1306},[1088,2249,1884],{"class":1302},[1088,2251,1810],{"class":1306},[1088,2253,1889],{"class":1111},[1088,2255,1807],{"class":1302},[1088,2257,1810],{"class":1306},[1088,2259,1820],{"class":1111},[1088,2261,1303],{"class":1302},[1088,2263,1807],{"class":1306},[1088,2265,1827],{"class":1589},[1088,2267,1904],{"class":1306},[1088,2269,1907],{"class":1111},[1088,2271,1838],{"class":1302},[1088,2273,1334],{"class":1306},[1088,2275,2277,2280,2283,2285],{"class":1090,"line":2276},20,[1088,2278,2279],{"class":1306},"},",[1088,2281,2282],{"class":1944}," table",[1088,2284,1827],{"class":1589},[1088,2286,1319],{"class":1302},[1088,2288,2290,2293,2295,2297,2300,2302,2304,2306,2309,2312,2314],{"class":1090,"line":2289},21,[1088,2291,2292],{"class":1111},"  index",[1088,2294,1303],{"class":1302},[1088,2296,1331],{"class":1306},[1088,2298,2299],{"class":1098},"messages_chat_id_idx",[1088,2301,1331],{"class":1306},[1088,2303,1884],{"class":1302},[1088,2305,1810],{"class":1306},[1088,2307,2308],{"class":1111},"on",[1088,2310,2311],{"class":1302},"(table",[1088,2313,1810],{"class":1306},[1088,2315,2316],{"class":1302},"chatId)\n",[1088,2318,2320],{"class":1090,"line":2319},22,[1088,2321,2322],{"class":1302},"])\n",[1088,2324,2326],{"class":1090,"line":2325},23,[1088,2327,1371],{"emptyLinePlaceholder":21},[1088,2329,2331,2333,2335,2338,2340,2342,2345,2347,2349,2352,2354,2356,2358],{"class":1090,"line":2330},24,[1088,2332,1293],{"class":1292},[1088,2334,1775],{"class":1589},[1088,2336,2337],{"class":1302}," messagesRelations ",[1088,2339,1593],{"class":1306},[1088,2341,1753],{"class":1111},[1088,2343,2344],{"class":1302},"(messages",[1088,2346,1718],{"class":1306},[1088,2348,1941],{"class":1306},[1088,2350,2351],{"class":1944}," one",[1088,2353,1948],{"class":1306},[1088,2355,1827],{"class":1589},[1088,2357,1953],{"class":1302},[1088,2359,1307],{"class":1306},[1088,2361,2363,2366,2368,2370,2372,2374],{"class":1090,"line":2362},25,[1088,2364,2365],{"class":1312},"  chat",[1088,2367,1316],{"class":1306},[1088,2369,2351],{"class":1111},[1088,2371,1936],{"class":1302},[1088,2373,1718],{"class":1306},[1088,2375,1382],{"class":1306},[1088,2377,2379,2382,2384,2387,2389,2392],{"class":1090,"line":2378},26,[1088,2380,2381],{"class":1312},"    fields",[1088,2383,1316],{"class":1306},[1088,2385,2386],{"class":1302}," [messages",[1088,2388,1810],{"class":1306},[1088,2390,2391],{"class":1302},"chatId]",[1088,2393,1334],{"class":1306},[1088,2395,2397,2400,2402,2405,2407],{"class":1090,"line":2396},27,[1088,2398,2399],{"class":1312},"    references",[1088,2401,1316],{"class":1306},[1088,2403,2404],{"class":1302}," [chats",[1088,2406,1810],{"class":1306},[1088,2408,2409],{"class":1302},"id]\n",[1088,2411,2413,2416],{"class":1090,"line":2412},28,[1088,2414,2415],{"class":1306},"  }",[1088,2417,1493],{"class":1302},[1088,2419,2421,2423],{"class":1090,"line":2420},29,[1088,2422,1490],{"class":1306},[1088,2424,1974],{"class":1302},[977,2426,2427],{},"Generate the database migrations from your schema:",[1079,2429,2431],{"className":1081,"code":2430,"language":1083,"meta":1084,"style":1084},"npx nuxt db generate\n",[1038,2432,2433],{"__ignoreMap":1084},[1088,2434,2435,2437,2440,2443],{"class":1090,"line":1091},[1088,2436,1095],{"class":1094},[1088,2438,2439],{"class":1098}," nuxt",[1088,2441,2442],{"class":1098}," db",[1088,2444,2445],{"class":1098}," generate\n",[2447,2448,2449],"tip",{},[977,2450,2451,2452,2455],{},"Migrations are automatically applied when you start the development server with ",[1038,2453,2454],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[981,2457,2459],{"id":2458},"building-the-backend","Building the backend",[977,2461,2462,2463,1810],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1031,2464,2467],{"href":2465,"rel":2466},"https:\u002F\u002Fnitro.build",[1035],"Nitro",[1116,2469,2471],{"id":2470},"creating-a-chat","Creating a chat",[977,2473,2474,2475,2482],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1031,2476,2479],{"href":2477,"rel":2478},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1035],[1038,2480,2481],{},"UIMessage"," type from the AI SDK:",[1279,2484,2485],{},[1079,2486,2489],{"className":1283,"code":2487,"filename":2488,"language":1285,"meta":1084,"style":1084},"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",[1038,2490,2491,2515,2538,2562,2582,2586,2610,2647,2671,2684,2688,2693,2744,2748,2753,2782,2798,2813,2827,2833,2837,2845],{"__ignoreMap":1084},[1088,2492,2493,2495,2497,2500,2502,2505,2507,2509,2511,2513],{"class":1090,"line":1091},[1088,2494,1709],{"class":1292},[1088,2496,1712],{"class":1306},[1088,2498,2499],{"class":1302}," defineEventHandler",[1088,2501,1718],{"class":1306},[1088,2503,2504],{"class":1302}," readValidatedBody",[1088,2506,1734],{"class":1306},[1088,2508,1737],{"class":1292},[1088,2510,1393],{"class":1306},[1088,2512,1116],{"class":1098},[1088,2514,1357],{"class":1306},[1088,2516,2517,2519,2522,2524,2527,2529,2531,2533,2536],{"class":1090,"line":1108},[1088,2518,1709],{"class":1292},[1088,2520,2521],{"class":1292}," type",[1088,2523,1712],{"class":1306},[1088,2525,2526],{"class":1302}," UIMessage",[1088,2528,1734],{"class":1306},[1088,2530,1737],{"class":1292},[1088,2532,1393],{"class":1306},[1088,2534,2535],{"class":1098},"ai",[1088,2537,1357],{"class":1306},[1088,2539,2540,2542,2544,2546,2548,2551,2553,2555,2557,2560],{"class":1090,"line":1322},[1088,2541,1709],{"class":1292},[1088,2543,1712],{"class":1306},[1088,2545,2442],{"class":1302},[1088,2547,1718],{"class":1306},[1088,2549,2550],{"class":1302}," schema",[1088,2552,1734],{"class":1306},[1088,2554,1737],{"class":1292},[1088,2556,1393],{"class":1306},[1088,2558,2559],{"class":1098},"hub:db",[1088,2561,1357],{"class":1306},[1088,2563,2564,2566,2568,2571,2573,2575,2577,2580],{"class":1090,"line":1337},[1088,2565,1709],{"class":1292},[1088,2567,1712],{"class":1306},[1088,2569,2570],{"class":1302}," z",[1088,2572,1734],{"class":1306},[1088,2574,1737],{"class":1292},[1088,2576,1393],{"class":1306},[1088,2578,2579],{"class":1098},"zod",[1088,2581,1357],{"class":1306},[1088,2583,2584],{"class":1090,"line":1349},[1088,2585,1371],{"emptyLinePlaceholder":21},[1088,2587,2588,2590,2592,2594,2596,2599,2601,2604,2606,2608],{"class":1090,"line":1360},[1088,2589,1293],{"class":1292},[1088,2591,1296],{"class":1292},[1088,2593,2499],{"class":1111},[1088,2595,1303],{"class":1302},[1088,2597,2598],{"class":1589},"async",[1088,2600,1953],{"class":1306},[1088,2602,2603],{"class":1944},"event",[1088,2605,1884],{"class":1306},[1088,2607,1827],{"class":1589},[1088,2609,1382],{"class":1306},[1088,2611,2612,2615,2617,2620,2622,2625,2628,2630,2632,2634,2636,2638,2640,2643,2645],{"class":1090,"line":1368},[1088,2613,2614],{"class":1589},"  const",[1088,2616,1712],{"class":1306},[1088,2618,2619],{"class":1302}," message",[1088,2621,1734],{"class":1306},[1088,2623,2624],{"class":1306}," =",[1088,2626,2627],{"class":1292}," await",[1088,2629,2504],{"class":1111},[1088,2631,1303],{"class":1312},[1088,2633,2603],{"class":1302},[1088,2635,1718],{"class":1306},[1088,2637,2570],{"class":1302},[1088,2639,1810],{"class":1306},[1088,2641,2642],{"class":1111},"object",[1088,2644,1303],{"class":1312},[1088,2646,1307],{"class":1306},[1088,2648,2649,2652,2654,2656,2658,2661,2663,2665,2668],{"class":1090,"line":1374},[1088,2650,2651],{"class":1312},"    message",[1088,2653,1316],{"class":1306},[1088,2655,2570],{"class":1302},[1088,2657,1810],{"class":1306},[1088,2659,2660],{"class":1111},"custom",[1088,2662,1561],{"class":1306},[1088,2664,2481],{"class":1094},[1088,2666,2667],{"class":1306},">",[1088,2669,2670],{"class":1312},"()\n",[1088,2672,2673,2675,2677,2679,2682],{"class":1090,"line":1385},[1088,2674,2415],{"class":1306},[1088,2676,1884],{"class":1312},[1088,2678,1810],{"class":1306},[1088,2680,2681],{"class":1302},"parse",[1088,2683,1493],{"class":1312},[1088,2685,2686],{"class":1090,"line":1401},[1088,2687,1371],{"emptyLinePlaceholder":21},[1088,2689,2690],{"class":1090,"line":1407},[1088,2691,2692],{"class":1472},"  \u002F\u002F Create a new chat\n",[1088,2694,2695,2697,2699,2701,2703,2705,2707,2709,2711,2714,2716,2719,2721,2723,2725,2727,2730,2732,2735,2737,2739,2742],{"class":1090,"line":1412},[1088,2696,2614],{"class":1589},[1088,2698,1420],{"class":1306},[1088,2700,262],{"class":1302},[1088,2702,1430],{"class":1306},[1088,2704,2624],{"class":1306},[1088,2706,2627],{"class":1292},[1088,2708,2442],{"class":1302},[1088,2710,1810],{"class":1306},[1088,2712,2713],{"class":1111},"insert",[1088,2715,1303],{"class":1312},[1088,2717,2718],{"class":1302},"schema",[1088,2720,1810],{"class":1306},[1088,2722,1789],{"class":1302},[1088,2724,1884],{"class":1312},[1088,2726,1810],{"class":1306},[1088,2728,2729],{"class":1111},"values",[1088,2731,1303],{"class":1312},[1088,2733,2734],{"class":1306},"{}",[1088,2736,1884],{"class":1312},[1088,2738,1810],{"class":1306},[1088,2740,2741],{"class":1111},"returning",[1088,2743,2670],{"class":1312},[1088,2745,2746],{"class":1090,"line":1435},[1088,2747,1371],{"emptyLinePlaceholder":21},[1088,2749,2750],{"class":1090,"line":1440},[1088,2751,2752],{"class":1472},"  \u002F\u002F Save the first user message\n",[1088,2754,2755,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780],{"class":1090,"line":1450},[1088,2756,2757],{"class":1292},"  await",[1088,2759,2442],{"class":1302},[1088,2761,1810],{"class":1306},[1088,2763,2713],{"class":1111},[1088,2765,1303],{"class":1312},[1088,2767,2718],{"class":1302},[1088,2769,1810],{"class":1306},[1088,2771,1998],{"class":1302},[1088,2773,1884],{"class":1312},[1088,2775,1810],{"class":1306},[1088,2777,2729],{"class":1111},[1088,2779,1303],{"class":1312},[1088,2781,1307],{"class":1306},[1088,2783,2784,2787,2789,2792,2794,2796],{"class":1090,"line":1460},[1088,2785,2786],{"class":1312},"    chatId",[1088,2788,1316],{"class":1306},[1088,2790,2791],{"class":1302}," chat",[1088,2793,1810],{"class":1306},[1088,2795,2019],{"class":1302},[1088,2797,1334],{"class":1306},[1088,2799,2800,2803,2805,2807,2809,2811],{"class":1090,"line":1476},[1088,2801,2802],{"class":1312},"    role",[1088,2804,1316],{"class":1306},[1088,2806,1393],{"class":1306},[1088,2808,2149],{"class":1098},[1088,2810,1331],{"class":1306},[1088,2812,1334],{"class":1306},[1088,2814,2815,2818,2820,2822,2824],{"class":1090,"line":1482},[1088,2816,2817],{"class":1312},"    parts",[1088,2819,1316],{"class":1306},[1088,2821,2619],{"class":1302},[1088,2823,1810],{"class":1306},[1088,2825,2826],{"class":1302},"parts\n",[1088,2828,2829,2831],{"class":1090,"line":1487},[1088,2830,2415],{"class":1306},[1088,2832,1493],{"class":1312},[1088,2834,2835],{"class":1090,"line":2276},[1088,2836,1371],{"emptyLinePlaceholder":21},[1088,2838,2839,2842],{"class":1090,"line":2289},[1088,2840,2841],{"class":1292},"  return",[1088,2843,2844],{"class":1302}," chat\n",[1088,2846,2847,2849],{"class":1090,"line":2319},[1088,2848,1490],{"class":1306},[1088,2850,1493],{"class":1302},[1116,2852,2854],{"id":2853},"streaming-ai-responses","Streaming AI responses",[977,2856,2857,2858,2865,2866,2873,2874,2881],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1031,2859,2862],{"href":2860,"rel":2861},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1035],[1038,2863,2864],{},"streamText",", ",[1031,2867,2870],{"href":2868,"rel":2869},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1035],[1038,2871,2872],{},"createUIMessageStream",", and ",[1031,2875,2878],{"href":2876,"rel":2877},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1035],[1038,2879,2880],{},"createUIMessageStreamResponse"," from the AI SDK:",[1279,2883,2884],{},[1697,2885,2886],{},[1079,2887,2890],{"className":1283,"code":2888,"filename":2889,"language":1285,"meta":1084,"style":1084},"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",[1038,2891,2892,2924,2943,2965,2983,2989,2996,3003,3010,3017,3022,3034,3054,3058,3070,3104,3134,3165,3170,3174,3196,3229,3245,3257,3261,3299,3359,3373,3382,3413,3426,3431,3437,3468,3512,3519,3524,3542,3581,3587,3592,3598,3618,3646,3662,3681,3709,3716,3721,3787,3792,3797,3803,3832,3873,3902,3914,3930,3944,3951,3956,3961,3967,3984,4006,4024,4032,4049,4070,4080,4090,4100,4117,4128,4134,4140,4150,4160,4173,4188,4193,4198,4208,4224,4239,4245,4251,4259,4264,4270,4290,4305,4322,4345,4356,4364,4370,4375,4398,4404,4424,4430,4476,4492,4525,4539,4547,4552,4559,4564,4582],{"__ignoreMap":1084},[1088,2893,2894,2896,2898,2901,2903,2905,2907,2910,2912,2914,2916,2918,2920,2922],{"class":1090,"line":1091},[1088,2895,1709],{"class":1292},[1088,2897,1712],{"class":1306},[1088,2899,2900],{"class":1302}," createError",[1088,2902,1718],{"class":1306},[1088,2904,2499],{"class":1302},[1088,2906,1718],{"class":1306},[1088,2908,2909],{"class":1302}," getValidatedRouterParams",[1088,2911,1718],{"class":1306},[1088,2913,2504],{"class":1302},[1088,2915,1734],{"class":1306},[1088,2917,1737],{"class":1292},[1088,2919,1393],{"class":1306},[1088,2921,1116],{"class":1098},[1088,2923,1357],{"class":1306},[1088,2925,2926,2928,2930,2933,2935,2937,2939,2941],{"class":1090,"line":1108},[1088,2927,1709],{"class":1292},[1088,2929,1712],{"class":1306},[1088,2931,2932],{"class":1302}," eq",[1088,2934,1734],{"class":1306},[1088,2936,1737],{"class":1292},[1088,2938,1393],{"class":1306},[1088,2940,1762],{"class":1098},[1088,2942,1357],{"class":1306},[1088,2944,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963],{"class":1090,"line":1322},[1088,2946,1709],{"class":1292},[1088,2948,1712],{"class":1306},[1088,2950,2442],{"class":1302},[1088,2952,1718],{"class":1306},[1088,2954,2550],{"class":1302},[1088,2956,1734],{"class":1306},[1088,2958,1737],{"class":1292},[1088,2960,1393],{"class":1306},[1088,2962,2559],{"class":1098},[1088,2964,1357],{"class":1306},[1088,2966,2967,2969,2971,2973,2975,2977,2979,2981],{"class":1090,"line":1337},[1088,2968,1709],{"class":1292},[1088,2970,1712],{"class":1306},[1088,2972,2570],{"class":1302},[1088,2974,1734],{"class":1306},[1088,2976,1737],{"class":1292},[1088,2978,1393],{"class":1306},[1088,2980,2579],{"class":1098},[1088,2982,1357],{"class":1306},[1088,2984,2985,2987],{"class":1090,"line":1349},[1088,2986,1709],{"class":1292},[1088,2988,1382],{"class":1306},[1088,2990,2991,2994],{"class":1090,"line":1360},[1088,2992,2993],{"class":1302},"  convertToModelMessages",[1088,2995,1334],{"class":1306},[1088,2997,2998,3001],{"class":1090,"line":1368},[1088,2999,3000],{"class":1302},"  createUIMessageStream",[1088,3002,1334],{"class":1306},[1088,3004,3005,3008],{"class":1090,"line":1374},[1088,3006,3007],{"class":1302},"  createUIMessageStreamResponse",[1088,3009,1334],{"class":1306},[1088,3011,3012,3015],{"class":1090,"line":1385},[1088,3013,3014],{"class":1302},"  generateText",[1088,3016,1334],{"class":1306},[1088,3018,3019],{"class":1090,"line":1401},[1088,3020,3021],{"class":1302},"  streamText\n",[1088,3023,3024,3026,3028,3030,3032],{"class":1090,"line":1407},[1088,3025,1490],{"class":1306},[1088,3027,1737],{"class":1292},[1088,3029,1393],{"class":1306},[1088,3031,2535],{"class":1098},[1088,3033,1357],{"class":1306},[1088,3035,3036,3038,3040,3042,3044,3046,3048,3050,3052],{"class":1090,"line":1412},[1088,3037,1709],{"class":1292},[1088,3039,2521],{"class":1292},[1088,3041,1712],{"class":1306},[1088,3043,2526],{"class":1302},[1088,3045,1734],{"class":1306},[1088,3047,1737],{"class":1292},[1088,3049,1393],{"class":1306},[1088,3051,2535],{"class":1098},[1088,3053,1357],{"class":1306},[1088,3055,3056],{"class":1090,"line":1435},[1088,3057,1371],{"emptyLinePlaceholder":21},[1088,3059,3060,3063,3066,3068],{"class":1090,"line":1440},[1088,3061,3062],{"class":1589},"const",[1088,3064,3065],{"class":1302}," MODELS ",[1088,3067,1593],{"class":1306},[1088,3069,1319],{"class":1302},[1088,3071,3072,3075,3078,3080,3082,3085,3087,3089,3092,3094,3096,3099,3101],{"class":1090,"line":1450},[1088,3073,3074],{"class":1306},"  {",[1088,3076,3077],{"class":1312}," value",[1088,3079,1316],{"class":1306},[1088,3081,1393],{"class":1306},[1088,3083,3084],{"class":1098},"openai\u002Fgpt-5-nano",[1088,3086,1331],{"class":1306},[1088,3088,1718],{"class":1306},[1088,3090,3091],{"class":1312}," label",[1088,3093,1316],{"class":1306},[1088,3095,1393],{"class":1306},[1088,3097,3098],{"class":1098},"GPT-5 Nano",[1088,3100,1331],{"class":1306},[1088,3102,3103],{"class":1306}," },\n",[1088,3105,3106,3108,3110,3112,3114,3117,3119,3121,3123,3125,3127,3130,3132],{"class":1090,"line":1460},[1088,3107,3074],{"class":1306},[1088,3109,3077],{"class":1312},[1088,3111,1316],{"class":1306},[1088,3113,1393],{"class":1306},[1088,3115,3116],{"class":1098},"anthropic\u002Fclaude-haiku-4.5",[1088,3118,1331],{"class":1306},[1088,3120,1718],{"class":1306},[1088,3122,3091],{"class":1312},[1088,3124,1316],{"class":1306},[1088,3126,1393],{"class":1306},[1088,3128,3129],{"class":1098},"Claude Haiku 4.5",[1088,3131,1331],{"class":1306},[1088,3133,3103],{"class":1306},[1088,3135,3136,3138,3140,3142,3144,3147,3149,3151,3153,3155,3157,3160,3162],{"class":1090,"line":1476},[1088,3137,3074],{"class":1306},[1088,3139,3077],{"class":1312},[1088,3141,1316],{"class":1306},[1088,3143,1393],{"class":1306},[1088,3145,3146],{"class":1098},"google\u002Fgemini-3-flash",[1088,3148,1331],{"class":1306},[1088,3150,1718],{"class":1306},[1088,3152,3091],{"class":1312},[1088,3154,1316],{"class":1306},[1088,3156,1393],{"class":1306},[1088,3158,3159],{"class":1098},"Gemini 3 Flash",[1088,3161,1331],{"class":1306},[1088,3163,3164],{"class":1306}," }\n",[1088,3166,3167],{"class":1090,"line":1482},[1088,3168,3169],{"class":1302},"]\n",[1088,3171,3172],{"class":1090,"line":1487},[1088,3173,1371],{"emptyLinePlaceholder":21},[1088,3175,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194],{"class":1090,"line":2276},[1088,3177,1293],{"class":1292},[1088,3179,1296],{"class":1292},[1088,3181,2499],{"class":1111},[1088,3183,1303],{"class":1302},[1088,3185,2598],{"class":1589},[1088,3187,1953],{"class":1306},[1088,3189,2603],{"class":1944},[1088,3191,1884],{"class":1306},[1088,3193,1827],{"class":1589},[1088,3195,1382],{"class":1306},[1088,3197,3198,3200,3202,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227],{"class":1090,"line":2289},[1088,3199,2614],{"class":1589},[1088,3201,1712],{"class":1306},[1088,3203,3204],{"class":1302}," id",[1088,3206,1734],{"class":1306},[1088,3208,2624],{"class":1306},[1088,3210,2627],{"class":1292},[1088,3212,2909],{"class":1111},[1088,3214,1303],{"class":1312},[1088,3216,2603],{"class":1302},[1088,3218,1718],{"class":1306},[1088,3220,2570],{"class":1302},[1088,3222,1810],{"class":1306},[1088,3224,2642],{"class":1111},[1088,3226,1303],{"class":1312},[1088,3228,1307],{"class":1306},[1088,3230,3231,3234,3236,3238,3240,3243],{"class":1090,"line":2319},[1088,3232,3233],{"class":1312},"    id",[1088,3235,1316],{"class":1306},[1088,3237,2570],{"class":1302},[1088,3239,1810],{"class":1306},[1088,3241,3242],{"class":1111},"string",[1088,3244,2670],{"class":1312},[1088,3246,3247,3249,3251,3253,3255],{"class":1090,"line":2325},[1088,3248,2415],{"class":1306},[1088,3250,1884],{"class":1312},[1088,3252,1810],{"class":1306},[1088,3254,2681],{"class":1302},[1088,3256,1493],{"class":1312},[1088,3258,3259],{"class":1090,"line":2330},[1088,3260,1371],{"emptyLinePlaceholder":21},[1088,3262,3263,3265,3267,3270,3272,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297],{"class":1090,"line":2362},[1088,3264,2614],{"class":1589},[1088,3266,1712],{"class":1306},[1088,3268,3269],{"class":1302}," model",[1088,3271,1718],{"class":1306},[1088,3273,3274],{"class":1302}," messages",[1088,3276,1734],{"class":1306},[1088,3278,2624],{"class":1306},[1088,3280,2627],{"class":1292},[1088,3282,2504],{"class":1111},[1088,3284,1303],{"class":1312},[1088,3286,2603],{"class":1302},[1088,3288,1718],{"class":1306},[1088,3290,2570],{"class":1302},[1088,3292,1810],{"class":1306},[1088,3294,2642],{"class":1111},[1088,3296,1303],{"class":1312},[1088,3298,1307],{"class":1306},[1088,3300,3301,3304,3306,3308,3310,3312,3314,3316,3319,3321,3324,3326,3329,3331,3334,3336,3339,3341,3344,3346,3348,3351,3353,3355,3357],{"class":1090,"line":2378},[1088,3302,3303],{"class":1312},"    model",[1088,3305,1316],{"class":1306},[1088,3307,2570],{"class":1302},[1088,3309,1810],{"class":1306},[1088,3311,3242],{"class":1111},[1088,3313,1807],{"class":1312},[1088,3315,1810],{"class":1306},[1088,3317,3318],{"class":1111},"refine",[1088,3320,1303],{"class":1312},[1088,3322,3323],{"class":1944},"value",[1088,3325,1827],{"class":1589},[1088,3327,3328],{"class":1302}," MODELS",[1088,3330,1810],{"class":1306},[1088,3332,3333],{"class":1111},"some",[1088,3335,1303],{"class":1312},[1088,3337,3338],{"class":1944},"m",[1088,3340,1827],{"class":1589},[1088,3342,3343],{"class":1302}," m",[1088,3345,1810],{"class":1306},[1088,3347,3323],{"class":1302},[1088,3349,3350],{"class":1306}," ===",[1088,3352,3077],{"class":1302},[1088,3354,1884],{"class":1312},[1088,3356,1718],{"class":1306},[1088,3358,1382],{"class":1306},[1088,3360,3361,3364,3366,3368,3371],{"class":1090,"line":2396},[1088,3362,3363],{"class":1312},"      message",[1088,3365,1316],{"class":1306},[1088,3367,1393],{"class":1306},[1088,3369,3370],{"class":1098},"Invalid model",[1088,3372,1357],{"class":1306},[1088,3374,3375,3378,3380],{"class":1090,"line":2412},[1088,3376,3377],{"class":1306},"    }",[1088,3379,1884],{"class":1312},[1088,3381,1334],{"class":1306},[1088,3383,3384,3387,3389,3391,3393,3396,3398,3401,3403,3405,3407,3409,3411],{"class":1090,"line":2420},[1088,3385,3386],{"class":1312},"    messages",[1088,3388,1316],{"class":1306},[1088,3390,2570],{"class":1302},[1088,3392,1810],{"class":1306},[1088,3394,3395],{"class":1111},"array",[1088,3397,1303],{"class":1312},[1088,3399,3400],{"class":1302},"z",[1088,3402,1810],{"class":1306},[1088,3404,2660],{"class":1111},[1088,3406,1561],{"class":1306},[1088,3408,2481],{"class":1094},[1088,3410,2667],{"class":1306},[1088,3412,1910],{"class":1312},[1088,3414,3416,3418,3420,3422,3424],{"class":1090,"line":3415},30,[1088,3417,2415],{"class":1306},[1088,3419,1884],{"class":1312},[1088,3421,1810],{"class":1306},[1088,3423,2681],{"class":1302},[1088,3425,1493],{"class":1312},[1088,3427,3429],{"class":1090,"line":3428},31,[1088,3430,1371],{"emptyLinePlaceholder":21},[1088,3432,3434],{"class":1090,"line":3433},32,[1088,3435,3436],{"class":1472},"  \u002F\u002F Fetch the chat from the database\n",[1088,3438,3440,3442,3444,3446,3448,3450,3452,3455,3457,3459,3461,3464,3466],{"class":1090,"line":3439},33,[1088,3441,2614],{"class":1589},[1088,3443,2791],{"class":1302},[1088,3445,2624],{"class":1306},[1088,3447,2627],{"class":1292},[1088,3449,2442],{"class":1302},[1088,3451,1810],{"class":1306},[1088,3453,3454],{"class":1302},"query",[1088,3456,1810],{"class":1306},[1088,3458,1789],{"class":1302},[1088,3460,1810],{"class":1306},[1088,3462,3463],{"class":1111},"findFirst",[1088,3465,1303],{"class":1312},[1088,3467,1307],{"class":1306},[1088,3469,3471,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3507,3510],{"class":1090,"line":3470},34,[1088,3472,3473],{"class":1111},"    where",[1088,3475,1316],{"class":1306},[1088,3477,1953],{"class":1306},[1088,3479,262],{"class":1944},[1088,3481,1718],{"class":1306},[1088,3483,1712],{"class":1306},[1088,3485,2932],{"class":1944},[1088,3487,1948],{"class":1306},[1088,3489,1827],{"class":1589},[1088,3491,2932],{"class":1111},[1088,3493,1303],{"class":1312},[1088,3495,262],{"class":1302},[1088,3497,1810],{"class":1306},[1088,3499,2019],{"class":1302},[1088,3501,1718],{"class":1306},[1088,3503,3204],{"class":1302},[1088,3505,3506],{"class":1292}," as",[1088,3508,3509],{"class":1094}," string",[1088,3511,1493],{"class":1312},[1088,3513,3515,3517],{"class":1090,"line":3514},35,[1088,3516,2415],{"class":1306},[1088,3518,1493],{"class":1312},[1088,3520,3522],{"class":1090,"line":3521},36,[1088,3523,1371],{"emptyLinePlaceholder":21},[1088,3525,3527,3530,3532,3535,3537,3540],{"class":1090,"line":3526},37,[1088,3528,3529],{"class":1292},"  if",[1088,3531,1953],{"class":1312},[1088,3533,3534],{"class":1306},"!",[1088,3536,262],{"class":1302},[1088,3538,3539],{"class":1312},") ",[1088,3541,1307],{"class":1306},[1088,3543,3545,3548,3550,3552,3554,3557,3559,3563,3565,3568,3570,3572,3575,3577,3579],{"class":1090,"line":3544},38,[1088,3546,3547],{"class":1292},"    throw",[1088,3549,2900],{"class":1111},[1088,3551,1303],{"class":1312},[1088,3553,1867],{"class":1306},[1088,3555,3556],{"class":1312}," statusCode",[1088,3558,1316],{"class":1306},[1088,3560,3562],{"class":3561},"sbssI"," 404",[1088,3564,1718],{"class":1306},[1088,3566,3567],{"class":1312}," statusMessage",[1088,3569,1316],{"class":1306},[1088,3571,1393],{"class":1306},[1088,3573,3574],{"class":1098},"Chat not found",[1088,3576,1331],{"class":1306},[1088,3578,1734],{"class":1306},[1088,3580,1493],{"class":1312},[1088,3582,3584],{"class":1090,"line":3583},39,[1088,3585,3586],{"class":1306},"  }\n",[1088,3588,3590],{"class":1090,"line":3589},40,[1088,3591,1371],{"emptyLinePlaceholder":21},[1088,3593,3595],{"class":1090,"line":3594},41,[1088,3596,3597],{"class":1472},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1088,3599,3601,3603,3605,3607,3609,3611,3614,3616],{"class":1090,"line":3600},42,[1088,3602,3529],{"class":1292},[1088,3604,1953],{"class":1312},[1088,3606,3534],{"class":1306},[1088,3608,262],{"class":1302},[1088,3610,1810],{"class":1306},[1088,3612,3613],{"class":1302},"title",[1088,3615,3539],{"class":1312},[1088,3617,1307],{"class":1306},[1088,3619,3621,3624,3626,3628,3630,3633,3635,3637,3639,3642,3644],{"class":1090,"line":3620},43,[1088,3622,3623],{"class":1589},"    const",[1088,3625,1712],{"class":1306},[1088,3627,1721],{"class":1312},[1088,3629,1316],{"class":1306},[1088,3631,3632],{"class":1302}," title",[1088,3634,1734],{"class":1306},[1088,3636,2624],{"class":1306},[1088,3638,2627],{"class":1292},[1088,3640,3641],{"class":1111}," generateText",[1088,3643,1303],{"class":1312},[1088,3645,1307],{"class":1306},[1088,3647,3649,3652,3654,3656,3658,3660],{"class":1090,"line":3648},44,[1088,3650,3651],{"class":1312},"      model",[1088,3653,1316],{"class":1306},[1088,3655,1393],{"class":1306},[1088,3657,3116],{"class":1098},[1088,3659,1331],{"class":1306},[1088,3661,1334],{"class":1306},[1088,3663,3665,3668,3670,3673,3676,3679],{"class":1090,"line":3664},45,[1088,3666,3667],{"class":1312},"      system",[1088,3669,1316],{"class":1306},[1088,3671,3672],{"class":1306}," `",[1088,3674,3675],{"class":1098},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1088,3677,3678],{"class":1306},"`",[1088,3680,1334],{"class":1306},[1088,3682,3684,3687,3689,3692,3694,3697,3699,3701,3704,3707],{"class":1090,"line":3683},46,[1088,3685,3686],{"class":1312},"      prompt",[1088,3688,1316],{"class":1306},[1088,3690,3691],{"class":1302}," JSON",[1088,3693,1810],{"class":1306},[1088,3695,3696],{"class":1111},"stringify",[1088,3698,1303],{"class":1312},[1088,3700,1998],{"class":1302},[1088,3702,3703],{"class":1312},"[",[1088,3705,3706],{"class":3561},"0",[1088,3708,2322],{"class":1312},[1088,3710,3712,3714],{"class":1090,"line":3711},47,[1088,3713,3377],{"class":1306},[1088,3715,1493],{"class":1312},[1088,3717,3719],{"class":1090,"line":3718},48,[1088,3720,1371],{"emptyLinePlaceholder":21},[1088,3722,3724,3727,3729,3731,3734,3736,3738,3740,3742,3744,3746,3749,3751,3753,3755,3757,3759,3761,3764,3766,3769,3771,3773,3775,3777,3779,3781,3783,3785],{"class":1090,"line":3723},49,[1088,3725,3726],{"class":1292},"    await",[1088,3728,2442],{"class":1302},[1088,3730,1810],{"class":1306},[1088,3732,3733],{"class":1111},"update",[1088,3735,1303],{"class":1312},[1088,3737,2718],{"class":1302},[1088,3739,1810],{"class":1306},[1088,3741,1789],{"class":1302},[1088,3743,1884],{"class":1312},[1088,3745,1810],{"class":1306},[1088,3747,3748],{"class":1111},"set",[1088,3750,1303],{"class":1312},[1088,3752,1867],{"class":1306},[1088,3754,3632],{"class":1302},[1088,3756,1734],{"class":1306},[1088,3758,1884],{"class":1312},[1088,3760,1810],{"class":1306},[1088,3762,3763],{"class":1111},"where",[1088,3765,1303],{"class":1312},[1088,3767,3768],{"class":1111},"eq",[1088,3770,1303],{"class":1312},[1088,3772,2718],{"class":1302},[1088,3774,1810],{"class":1306},[1088,3776,1789],{"class":1302},[1088,3778,1810],{"class":1306},[1088,3780,2019],{"class":1302},[1088,3782,1718],{"class":1306},[1088,3784,3204],{"class":1302},[1088,3786,1974],{"class":1312},[1088,3788,3790],{"class":1090,"line":3789},50,[1088,3791,3586],{"class":1306},[1088,3793,3795],{"class":1090,"line":3794},51,[1088,3796,1371],{"emptyLinePlaceholder":21},[1088,3798,3800],{"class":1090,"line":3799},52,[1088,3801,3802],{"class":1472},"  \u002F\u002F Save the user message if it's a follow-up\n",[1088,3804,3806,3808,3811,3813,3815,3817,3819,3821,3824,3827,3830],{"class":1090,"line":3805},53,[1088,3807,2614],{"class":1589},[1088,3809,3810],{"class":1302}," lastMessage",[1088,3812,2624],{"class":1306},[1088,3814,3274],{"class":1302},[1088,3816,3703],{"class":1312},[1088,3818,1998],{"class":1302},[1088,3820,1810],{"class":1306},[1088,3822,3823],{"class":1302},"length",[1088,3825,3826],{"class":1306}," -",[1088,3828,3829],{"class":3561}," 1",[1088,3831,3169],{"class":1312},[1088,3833,3835,3837,3839,3842,3845,3847,3849,3851,3853,3855,3858,3860,3862,3864,3867,3869,3871],{"class":1090,"line":3834},54,[1088,3836,3529],{"class":1292},[1088,3838,1953],{"class":1312},[1088,3840,3841],{"class":1302},"lastMessage",[1088,3843,3844],{"class":1306},"?.",[1088,3846,2131],{"class":1302},[1088,3848,3350],{"class":1306},[1088,3850,1393],{"class":1306},[1088,3852,2149],{"class":1098},[1088,3854,1331],{"class":1306},[1088,3856,3857],{"class":1306}," &&",[1088,3859,3274],{"class":1302},[1088,3861,1810],{"class":1306},[1088,3863,3823],{"class":1302},[1088,3865,3866],{"class":1306}," >",[1088,3868,3829],{"class":3561},[1088,3870,3539],{"class":1312},[1088,3872,1307],{"class":1306},[1088,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900],{"class":1090,"line":3875},55,[1088,3877,3726],{"class":1292},[1088,3879,2442],{"class":1302},[1088,3881,1810],{"class":1306},[1088,3883,2713],{"class":1111},[1088,3885,1303],{"class":1312},[1088,3887,2718],{"class":1302},[1088,3889,1810],{"class":1306},[1088,3891,1998],{"class":1302},[1088,3893,1884],{"class":1312},[1088,3895,1810],{"class":1306},[1088,3897,2729],{"class":1111},[1088,3899,1303],{"class":1312},[1088,3901,1307],{"class":1306},[1088,3903,3905,3908,3910,3912],{"class":1090,"line":3904},56,[1088,3906,3907],{"class":1312},"      chatId",[1088,3909,1316],{"class":1306},[1088,3911,3204],{"class":1302},[1088,3913,1334],{"class":1306},[1088,3915,3917,3920,3922,3924,3926,3928],{"class":1090,"line":3916},57,[1088,3918,3919],{"class":1312},"      role",[1088,3921,1316],{"class":1306},[1088,3923,1393],{"class":1306},[1088,3925,2149],{"class":1098},[1088,3927,1331],{"class":1306},[1088,3929,1334],{"class":1306},[1088,3931,3933,3936,3938,3940,3942],{"class":1090,"line":3932},58,[1088,3934,3935],{"class":1312},"      parts",[1088,3937,1316],{"class":1306},[1088,3939,3810],{"class":1302},[1088,3941,1810],{"class":1306},[1088,3943,2826],{"class":1302},[1088,3945,3947,3949],{"class":1090,"line":3946},59,[1088,3948,3377],{"class":1306},[1088,3950,1493],{"class":1312},[1088,3952,3954],{"class":1090,"line":3953},60,[1088,3955,3586],{"class":1306},[1088,3957,3959],{"class":1090,"line":3958},61,[1088,3960,1371],{"emptyLinePlaceholder":21},[1088,3962,3964],{"class":1090,"line":3963},62,[1088,3965,3966],{"class":1472},"  \u002F\u002F Create the streaming response\n",[1088,3968,3970,3972,3975,3977,3980,3982],{"class":1090,"line":3969},63,[1088,3971,2614],{"class":1589},[1088,3973,3974],{"class":1302}," stream",[1088,3976,2624],{"class":1306},[1088,3978,3979],{"class":1111}," createUIMessageStream",[1088,3981,1303],{"class":1312},[1088,3983,1307],{"class":1306},[1088,3985,3987,3990,3992,3995,3997,4000,4002,4004],{"class":1090,"line":3986},64,[1088,3988,3989],{"class":1111},"    execute",[1088,3991,1316],{"class":1306},[1088,3993,3994],{"class":1589}," async",[1088,3996,1941],{"class":1306},[1088,3998,3999],{"class":1944}," writer",[1088,4001,1948],{"class":1306},[1088,4003,1827],{"class":1589},[1088,4005,1382],{"class":1306},[1088,4007,4009,4012,4015,4017,4020,4022],{"class":1090,"line":4008},65,[1088,4010,4011],{"class":1589},"      const",[1088,4013,4014],{"class":1302}," result",[1088,4016,2624],{"class":1306},[1088,4018,4019],{"class":1111}," streamText",[1088,4021,1303],{"class":1312},[1088,4023,1307],{"class":1306},[1088,4025,4027,4030],{"class":1090,"line":4026},66,[1088,4028,4029],{"class":1302},"        model",[1088,4031,1334],{"class":1306},[1088,4033,4035,4038,4040,4042,4045,4047],{"class":1090,"line":4034},67,[1088,4036,4037],{"class":1312},"        system",[1088,4039,1316],{"class":1306},[1088,4041,3672],{"class":1306},[1088,4043,4044],{"class":1098},"You are a helpful AI assistant. Be concise and friendly.",[1088,4046,3678],{"class":1306},[1088,4048,1334],{"class":1306},[1088,4050,4052,4055,4057,4059,4062,4064,4066,4068],{"class":1090,"line":4051},68,[1088,4053,4054],{"class":1312},"        messages",[1088,4056,1316],{"class":1306},[1088,4058,2627],{"class":1292},[1088,4060,4061],{"class":1111}," convertToModelMessages",[1088,4063,1303],{"class":1312},[1088,4065,1998],{"class":1302},[1088,4067,1884],{"class":1312},[1088,4069,1334],{"class":1306},[1088,4071,4073,4076,4078],{"class":1090,"line":4072},69,[1088,4074,4075],{"class":1312},"        providerOptions",[1088,4077,1316],{"class":1306},[1088,4079,1382],{"class":1306},[1088,4081,4083,4086,4088],{"class":1090,"line":4082},70,[1088,4084,4085],{"class":1312},"          anthropic",[1088,4087,1316],{"class":1306},[1088,4089,1382],{"class":1306},[1088,4091,4093,4096,4098],{"class":1090,"line":4092},71,[1088,4094,4095],{"class":1312},"            thinking",[1088,4097,1316],{"class":1306},[1088,4099,1382],{"class":1306},[1088,4101,4103,4106,4108,4110,4113,4115],{"class":1090,"line":4102},72,[1088,4104,4105],{"class":1312},"              type",[1088,4107,1316],{"class":1306},[1088,4109,1393],{"class":1306},[1088,4111,4112],{"class":1098},"enabled",[1088,4114,1331],{"class":1306},[1088,4116,1334],{"class":1306},[1088,4118,4120,4123,4125],{"class":1090,"line":4119},73,[1088,4121,4122],{"class":1312},"              budgetTokens",[1088,4124,1316],{"class":1306},[1088,4126,4127],{"class":3561}," 2048\n",[1088,4129,4131],{"class":1090,"line":4130},74,[1088,4132,4133],{"class":1306},"            }\n",[1088,4135,4137],{"class":1090,"line":4136},75,[1088,4138,4139],{"class":1306},"          },\n",[1088,4141,4143,4146,4148],{"class":1090,"line":4142},76,[1088,4144,4145],{"class":1312},"          google",[1088,4147,1316],{"class":1306},[1088,4149,1382],{"class":1306},[1088,4151,4153,4156,4158],{"class":1090,"line":4152},77,[1088,4154,4155],{"class":1312},"            thinkingConfig",[1088,4157,1316],{"class":1306},[1088,4159,1382],{"class":1306},[1088,4161,4163,4166,4168,4171],{"class":1090,"line":4162},78,[1088,4164,4165],{"class":1312},"              includeThoughts",[1088,4167,1316],{"class":1306},[1088,4169,4170],{"class":1468}," true",[1088,4172,1334],{"class":1306},[1088,4174,4176,4179,4181,4183,4186],{"class":1090,"line":4175},79,[1088,4177,4178],{"class":1312},"              thinkingLevel",[1088,4180,1316],{"class":1306},[1088,4182,1393],{"class":1306},[1088,4184,4185],{"class":1098},"low",[1088,4187,1357],{"class":1306},[1088,4189,4191],{"class":1090,"line":4190},80,[1088,4192,4133],{"class":1306},[1088,4194,4196],{"class":1090,"line":4195},81,[1088,4197,4139],{"class":1306},[1088,4199,4201,4204,4206],{"class":1090,"line":4200},82,[1088,4202,4203],{"class":1312},"          openai",[1088,4205,1316],{"class":1306},[1088,4207,1382],{"class":1306},[1088,4209,4211,4214,4216,4218,4220,4222],{"class":1090,"line":4210},83,[1088,4212,4213],{"class":1312},"            reasoningEffort",[1088,4215,1316],{"class":1306},[1088,4217,1393],{"class":1306},[1088,4219,4185],{"class":1098},[1088,4221,1331],{"class":1306},[1088,4223,1334],{"class":1306},[1088,4225,4227,4230,4232,4234,4237],{"class":1090,"line":4226},84,[1088,4228,4229],{"class":1312},"            reasoningSummary",[1088,4231,1316],{"class":1306},[1088,4233,1393],{"class":1306},[1088,4235,4236],{"class":1098},"detailed",[1088,4238,1357],{"class":1306},[1088,4240,4242],{"class":1090,"line":4241},85,[1088,4243,4244],{"class":1306},"          }\n",[1088,4246,4248],{"class":1090,"line":4247},86,[1088,4249,4250],{"class":1306},"        }\n",[1088,4252,4254,4257],{"class":1090,"line":4253},87,[1088,4255,4256],{"class":1306},"      }",[1088,4258,1493],{"class":1312},[1088,4260,4262],{"class":1090,"line":4261},88,[1088,4263,1371],{"emptyLinePlaceholder":21},[1088,4265,4267],{"class":1090,"line":4266},89,[1088,4268,4269],{"class":1472},"      \u002F\u002F Notify the client that a title was generated\n",[1088,4271,4273,4276,4278,4280,4282,4284,4286,4288],{"class":1090,"line":4272},90,[1088,4274,4275],{"class":1292},"      if",[1088,4277,1953],{"class":1312},[1088,4279,3534],{"class":1306},[1088,4281,262],{"class":1302},[1088,4283,1810],{"class":1306},[1088,4285,3613],{"class":1302},[1088,4287,3539],{"class":1312},[1088,4289,1307],{"class":1306},[1088,4291,4293,4296,4298,4301,4303],{"class":1090,"line":4292},91,[1088,4294,4295],{"class":1302},"        writer",[1088,4297,1810],{"class":1306},[1088,4299,4300],{"class":1111},"write",[1088,4302,1303],{"class":1312},[1088,4304,1307],{"class":1306},[1088,4306,4308,4311,4313,4315,4318,4320],{"class":1090,"line":4307},92,[1088,4309,4310],{"class":1312},"          type",[1088,4312,1316],{"class":1306},[1088,4314,1393],{"class":1306},[1088,4316,4317],{"class":1098},"data-chat-title",[1088,4319,1331],{"class":1306},[1088,4321,1334],{"class":1306},[1088,4323,4325,4328,4330,4332,4334,4336,4338,4341,4343],{"class":1090,"line":4324},93,[1088,4326,4327],{"class":1312},"          data",[1088,4329,1316],{"class":1306},[1088,4331,1712],{"class":1306},[1088,4333,2619],{"class":1312},[1088,4335,1316],{"class":1306},[1088,4337,1393],{"class":1306},[1088,4339,4340],{"class":1098},"Title generated",[1088,4342,1331],{"class":1306},[1088,4344,3103],{"class":1306},[1088,4346,4348,4351,4353],{"class":1090,"line":4347},94,[1088,4349,4350],{"class":1312},"          transient",[1088,4352,1316],{"class":1306},[1088,4354,4355],{"class":1468}," true\n",[1088,4357,4359,4362],{"class":1090,"line":4358},95,[1088,4360,4361],{"class":1306},"        }",[1088,4363,1493],{"class":1312},[1088,4365,4367],{"class":1090,"line":4366},96,[1088,4368,4369],{"class":1306},"      }\n",[1088,4371,4373],{"class":1090,"line":4372},97,[1088,4374,1371],{"emptyLinePlaceholder":21},[1088,4376,4378,4381,4383,4386,4388,4391,4393,4396],{"class":1090,"line":4377},98,[1088,4379,4380],{"class":1302},"      writer",[1088,4382,1810],{"class":1306},[1088,4384,4385],{"class":1111},"merge",[1088,4387,1303],{"class":1312},[1088,4389,4390],{"class":1302},"result",[1088,4392,1810],{"class":1306},[1088,4394,4395],{"class":1111},"toUIMessageStream",[1088,4397,1910],{"class":1312},[1088,4399,4401],{"class":1090,"line":4400},99,[1088,4402,4403],{"class":1306},"    },\n",[1088,4405,4407,4410,4412,4414,4416,4418,4420,4422],{"class":1090,"line":4406},100,[1088,4408,4409],{"class":1111},"    onFinish",[1088,4411,1316],{"class":1306},[1088,4413,3994],{"class":1589},[1088,4415,1941],{"class":1306},[1088,4417,3274],{"class":1944},[1088,4419,1948],{"class":1306},[1088,4421,1827],{"class":1589},[1088,4423,1382],{"class":1306},[1088,4425,4427],{"class":1090,"line":4426},101,[1088,4428,4429],{"class":1472},"      \u002F\u002F Save the assistant's response to the database\n",[1088,4431,4433,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4465,4467,4470,4472,4474],{"class":1090,"line":4432},102,[1088,4434,4435],{"class":1292},"      await",[1088,4437,2442],{"class":1302},[1088,4439,1810],{"class":1306},[1088,4441,2713],{"class":1111},[1088,4443,1303],{"class":1312},[1088,4445,2718],{"class":1302},[1088,4447,1810],{"class":1306},[1088,4449,1998],{"class":1302},[1088,4451,1884],{"class":1312},[1088,4453,1810],{"class":1306},[1088,4455,2729],{"class":1111},[1088,4457,1303],{"class":1312},[1088,4459,1998],{"class":1302},[1088,4461,1810],{"class":1306},[1088,4463,4464],{"class":1111},"map",[1088,4466,1303],{"class":1312},[1088,4468,4469],{"class":1944},"message",[1088,4471,1827],{"class":1589},[1088,4473,1953],{"class":1312},[1088,4475,1307],{"class":1306},[1088,4477,4479,4482,4484,4486,4488,4490],{"class":1090,"line":4478},103,[1088,4480,4481],{"class":1312},"        chatId",[1088,4483,1316],{"class":1306},[1088,4485,2791],{"class":1302},[1088,4487,1810],{"class":1306},[1088,4489,2019],{"class":1302},[1088,4491,1334],{"class":1306},[1088,4493,4495,4498,4500,4502,4504,4506,4508,4510,4512,4514,4517,4519,4521,4523],{"class":1090,"line":4494},104,[1088,4496,4497],{"class":1312},"        role",[1088,4499,1316],{"class":1306},[1088,4501,2619],{"class":1302},[1088,4503,1810],{"class":1306},[1088,4505,2131],{"class":1302},[1088,4507,3506],{"class":1292},[1088,4509,1393],{"class":1306},[1088,4511,2149],{"class":1098},[1088,4513,1331],{"class":1306},[1088,4515,4516],{"class":1306}," |",[1088,4518,1393],{"class":1306},[1088,4520,2158],{"class":1098},[1088,4522,1331],{"class":1306},[1088,4524,1334],{"class":1306},[1088,4526,4528,4531,4533,4535,4537],{"class":1090,"line":4527},105,[1088,4529,4530],{"class":1312},"        parts",[1088,4532,1316],{"class":1306},[1088,4534,2619],{"class":1302},[1088,4536,1810],{"class":1306},[1088,4538,2826],{"class":1302},[1088,4540,4542,4544],{"class":1090,"line":4541},106,[1088,4543,4256],{"class":1306},[1088,4545,4546],{"class":1312},")))\n",[1088,4548,4550],{"class":1090,"line":4549},107,[1088,4551,1479],{"class":1306},[1088,4553,4555,4557],{"class":1090,"line":4554},108,[1088,4556,2415],{"class":1306},[1088,4558,1493],{"class":1312},[1088,4560,4562],{"class":1090,"line":4561},109,[1088,4563,1371],{"emptyLinePlaceholder":21},[1088,4565,4567,4569,4572,4574,4576,4578,4580],{"class":1090,"line":4566},110,[1088,4568,2841],{"class":1292},[1088,4570,4571],{"class":1111}," createUIMessageStreamResponse",[1088,4573,1303],{"class":1312},[1088,4575,1867],{"class":1306},[1088,4577,3974],{"class":1302},[1088,4579,1734],{"class":1306},[1088,4581,1493],{"class":1312},[1088,4583,4585,4587],{"class":1090,"line":4584},111,[1088,4586,1490],{"class":1306},[1088,4588,1493],{"class":1302},[977,4590,4591],{},"Here's what each part does:",[977,4593,4594],{},[995,4595,4596],{},"AI Gateway",[977,4598,4599,4600,4603],{},"Thanks to ",[1031,4601,1069],{"href":1067,"rel":4602},[1035],", we can use any AI model supported by the gateway just by specifying the model name.",[977,4605,4606],{},[995,4607,4608],{},"Automatic Title Generation",[977,4610,4611,4612,4619],{},"When a chat doesn't have a title yet, we use ",[1031,4613,4616],{"href":4614,"rel":4615},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1035],[1038,4617,4618],{},"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\".",[977,4621,4622],{},[995,4623,4624],{},"Streaming with streamText",[977,4626,4627,4628,4633],{},"The ",[1031,4629,4631],{"href":2860,"rel":4630},[1035],[1038,4632,2864],{}," function generates a streaming response from the AI model. Key options include:",[989,4635,4636,4642,4647],{},[992,4637,4638,4641],{},[1038,4639,4640],{},"model",": The AI model to use",[992,4643,4644,4646],{},[1038,4645,2167],{},": Instructions that guide the AI's behavior",[992,4648,4649,4651],{},[1038,4650,1998],{},": The conversation history",[977,4653,4654],{},[995,4655,4656],{},"UIMessageStream",[977,4658,4627,4659,1041,4665,4671],{},[1031,4660,4663],{"href":4661,"rel":4662},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1035],[1038,4664,2872],{},[1031,4666,4669],{"href":4667,"rel":4668},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1035],[1038,4670,2880],{}," 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.",[977,4673,4627,4674,4677,4678,4680,4681,4684],{},[1038,4675,4676],{},"writer.write()"," method allows sending custom data events to the client (like ",[1038,4679,4317],{},"), while ",[1038,4682,4683],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1116,4686,4688],{"id":4687},"fetching-a-chat","Fetching a chat",[977,4690,4691],{},"Add an endpoint to fetch existing chat data from your database:",[1279,4693,4694],{},[1079,4695,4698],{"className":1283,"code":4696,"filename":4697,"language":1285,"meta":1084,"style":1084},"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",[1038,4699,4700,4726,4749,4771,4789,4793,4815,4847,4861,4873,4877,4905,4936,4945,4954,4983,4987,4991,4997,5001,5015,5047,5051,5055,5061],{"__ignoreMap":1084},[1088,4701,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724],{"class":1090,"line":1091},[1088,4703,1709],{"class":1292},[1088,4705,1712],{"class":1306},[1088,4707,2900],{"class":1302},[1088,4709,1718],{"class":1306},[1088,4711,2499],{"class":1302},[1088,4713,1718],{"class":1306},[1088,4715,2909],{"class":1302},[1088,4717,1734],{"class":1306},[1088,4719,1737],{"class":1292},[1088,4721,1393],{"class":1306},[1088,4723,1116],{"class":1098},[1088,4725,1357],{"class":1306},[1088,4727,4728,4730,4732,4735,4737,4739,4741,4743,4745,4747],{"class":1090,"line":1108},[1088,4729,1709],{"class":1292},[1088,4731,1712],{"class":1306},[1088,4733,4734],{"class":1302}," asc",[1088,4736,1718],{"class":1306},[1088,4738,2932],{"class":1302},[1088,4740,1734],{"class":1306},[1088,4742,1737],{"class":1292},[1088,4744,1393],{"class":1306},[1088,4746,1762],{"class":1098},[1088,4748,1357],{"class":1306},[1088,4750,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769],{"class":1090,"line":1322},[1088,4752,1709],{"class":1292},[1088,4754,1712],{"class":1306},[1088,4756,2442],{"class":1302},[1088,4758,1718],{"class":1306},[1088,4760,2550],{"class":1302},[1088,4762,1734],{"class":1306},[1088,4764,1737],{"class":1292},[1088,4766,1393],{"class":1306},[1088,4768,2559],{"class":1098},[1088,4770,1357],{"class":1306},[1088,4772,4773,4775,4777,4779,4781,4783,4785,4787],{"class":1090,"line":1337},[1088,4774,1709],{"class":1292},[1088,4776,1712],{"class":1306},[1088,4778,2570],{"class":1302},[1088,4780,1734],{"class":1306},[1088,4782,1737],{"class":1292},[1088,4784,1393],{"class":1306},[1088,4786,2579],{"class":1098},[1088,4788,1357],{"class":1306},[1088,4790,4791],{"class":1090,"line":1349},[1088,4792,1371],{"emptyLinePlaceholder":21},[1088,4794,4795,4797,4799,4801,4803,4805,4807,4809,4811,4813],{"class":1090,"line":1360},[1088,4796,1293],{"class":1292},[1088,4798,1296],{"class":1292},[1088,4800,2499],{"class":1111},[1088,4802,1303],{"class":1302},[1088,4804,2598],{"class":1589},[1088,4806,1953],{"class":1306},[1088,4808,2603],{"class":1944},[1088,4810,1884],{"class":1306},[1088,4812,1827],{"class":1589},[1088,4814,1382],{"class":1306},[1088,4816,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845],{"class":1090,"line":1368},[1088,4818,2614],{"class":1589},[1088,4820,1712],{"class":1306},[1088,4822,3204],{"class":1302},[1088,4824,1734],{"class":1306},[1088,4826,2624],{"class":1306},[1088,4828,2627],{"class":1292},[1088,4830,2909],{"class":1111},[1088,4832,1303],{"class":1312},[1088,4834,2603],{"class":1302},[1088,4836,1718],{"class":1306},[1088,4838,2570],{"class":1302},[1088,4840,1810],{"class":1306},[1088,4842,2642],{"class":1111},[1088,4844,1303],{"class":1312},[1088,4846,1307],{"class":1306},[1088,4848,4849,4851,4853,4855,4857,4859],{"class":1090,"line":1374},[1088,4850,3233],{"class":1312},[1088,4852,1316],{"class":1306},[1088,4854,2570],{"class":1302},[1088,4856,1810],{"class":1306},[1088,4858,3242],{"class":1111},[1088,4860,2670],{"class":1312},[1088,4862,4863,4865,4867,4869,4871],{"class":1090,"line":1385},[1088,4864,2415],{"class":1306},[1088,4866,1884],{"class":1312},[1088,4868,1810],{"class":1306},[1088,4870,2681],{"class":1302},[1088,4872,1493],{"class":1312},[1088,4874,4875],{"class":1090,"line":1401},[1088,4876,1371],{"emptyLinePlaceholder":21},[1088,4878,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903],{"class":1090,"line":1407},[1088,4880,2614],{"class":1589},[1088,4882,2791],{"class":1302},[1088,4884,2624],{"class":1306},[1088,4886,2627],{"class":1292},[1088,4888,2442],{"class":1302},[1088,4890,1810],{"class":1306},[1088,4892,3454],{"class":1302},[1088,4894,1810],{"class":1306},[1088,4896,1789],{"class":1302},[1088,4898,1810],{"class":1306},[1088,4900,3463],{"class":1111},[1088,4902,1303],{"class":1312},[1088,4904,1307],{"class":1306},[1088,4906,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4934],{"class":1090,"line":1412},[1088,4908,3473],{"class":1312},[1088,4910,1316],{"class":1306},[1088,4912,1953],{"class":1312},[1088,4914,3768],{"class":1111},[1088,4916,1303],{"class":1312},[1088,4918,2718],{"class":1302},[1088,4920,1810],{"class":1306},[1088,4922,1789],{"class":1302},[1088,4924,1810],{"class":1306},[1088,4926,2019],{"class":1302},[1088,4928,1718],{"class":1306},[1088,4930,3204],{"class":1302},[1088,4932,4933],{"class":1312},"))",[1088,4935,1334],{"class":1306},[1088,4937,4938,4941,4943],{"class":1090,"line":1435},[1088,4939,4940],{"class":1312},"    with",[1088,4942,1316],{"class":1306},[1088,4944,1382],{"class":1306},[1088,4946,4947,4950,4952],{"class":1090,"line":1440},[1088,4948,4949],{"class":1312},"      messages",[1088,4951,1316],{"class":1306},[1088,4953,1382],{"class":1306},[1088,4955,4956,4959,4961,4964,4966,4968,4970,4972,4974,4976,4978,4981],{"class":1090,"line":1450},[1088,4957,4958],{"class":1111},"        orderBy",[1088,4960,1316],{"class":1306},[1088,4962,4963],{"class":1306}," ()",[1088,4965,1827],{"class":1589},[1088,4967,4734],{"class":1111},[1088,4969,1303],{"class":1312},[1088,4971,2718],{"class":1302},[1088,4973,1810],{"class":1306},[1088,4975,1998],{"class":1302},[1088,4977,1810],{"class":1306},[1088,4979,4980],{"class":1302},"createdAt",[1088,4982,1493],{"class":1312},[1088,4984,4985],{"class":1090,"line":1460},[1088,4986,4369],{"class":1306},[1088,4988,4989],{"class":1090,"line":1476},[1088,4990,1479],{"class":1306},[1088,4992,4993,4995],{"class":1090,"line":1482},[1088,4994,2415],{"class":1306},[1088,4996,1493],{"class":1312},[1088,4998,4999],{"class":1090,"line":1487},[1088,5000,1371],{"emptyLinePlaceholder":21},[1088,5002,5003,5005,5007,5009,5011,5013],{"class":1090,"line":2276},[1088,5004,3529],{"class":1292},[1088,5006,1953],{"class":1312},[1088,5008,3534],{"class":1306},[1088,5010,262],{"class":1302},[1088,5012,3539],{"class":1312},[1088,5014,1307],{"class":1306},[1088,5016,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045],{"class":1090,"line":2289},[1088,5018,3547],{"class":1292},[1088,5020,2900],{"class":1111},[1088,5022,1303],{"class":1312},[1088,5024,1867],{"class":1306},[1088,5026,3556],{"class":1312},[1088,5028,1316],{"class":1306},[1088,5030,3562],{"class":3561},[1088,5032,1718],{"class":1306},[1088,5034,3567],{"class":1312},[1088,5036,1316],{"class":1306},[1088,5038,1393],{"class":1306},[1088,5040,3574],{"class":1098},[1088,5042,1331],{"class":1306},[1088,5044,1734],{"class":1306},[1088,5046,1493],{"class":1312},[1088,5048,5049],{"class":1090,"line":2319},[1088,5050,3586],{"class":1306},[1088,5052,5053],{"class":1090,"line":2325},[1088,5054,1371],{"emptyLinePlaceholder":21},[1088,5056,5057,5059],{"class":1090,"line":2330},[1088,5058,2841],{"class":1292},[1088,5060,2844],{"class":1302},[1088,5062,5063,5065],{"class":1090,"line":2362},[1088,5064,1490],{"class":1306},[1088,5066,1493],{"class":1302},[981,5068,5070],{"id":5069},"wire-up-the-ui","Wire up the UI",[977,5072,5073,5074,5079,5080,5085],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1031,5075,5076],{"href":281},[1038,5077,5078],{},"UChatPrompt"," for the input area and ",[1031,5081,5082],{"href":271},[1038,5083,5084],{},"UChatMessages"," for displaying the conversation.",[1116,5087,5089],{"id":5088},"creating-the-home-page","Creating the home page",[977,5091,5092,5093,5097],{},"The home page is where users start a new conversation. The ",[1031,5094,5095],{"href":281},[1038,5096,5078],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1279,5099,5100],{},[1079,5101,5105],{"className":1551,"code":5102,"filename":5103,"highlights":5104,"language":34,"meta":1084,"style":1084},"\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",[3470,3514,3521,3526,3544,3583,3589,3594,3600],[1038,5106,5107,5130,5149,5167,5171,5185,5211,5215,5228,5232,5237,5263,5279,5288,5296,5310,5348,5352,5356,5362,5366,5371,5397,5402,5410,5414,5422,5443,5457,5478,5499,5504,5513,5517,5525,5540,5555,5570,5585,5600,5606,5629,5638,5647,5655,5663],{"__ignoreMap":1084},[1088,5108,5109,5111,5114,5117,5120,5122,5124,5126,5128],{"class":1090,"line":1091},[1088,5110,1561],{"class":1306},[1088,5112,5113],{"class":1312},"script",[1088,5115,5116],{"class":1589}," setup",[1088,5118,5119],{"class":1589}," lang",[1088,5121,1593],{"class":1306},[1088,5123,1520],{"class":1306},[1088,5125,1285],{"class":1098},[1088,5127,1520],{"class":1306},[1088,5129,1567],{"class":1306},[1088,5131,5132,5134,5137,5139,5142,5144,5147],{"class":1090,"line":1108},[1088,5133,3062],{"class":1589},[1088,5135,5136],{"class":1302}," input ",[1088,5138,1593],{"class":1306},[1088,5140,5141],{"class":1111}," ref",[1088,5143,1303],{"class":1302},[1088,5145,5146],{"class":1306},"''",[1088,5148,1493],{"class":1302},[1088,5150,5151,5153,5156,5158,5160,5162,5165],{"class":1090,"line":1322},[1088,5152,3062],{"class":1589},[1088,5154,5155],{"class":1302}," loading ",[1088,5157,1593],{"class":1306},[1088,5159,5141],{"class":1111},[1088,5161,1303],{"class":1302},[1088,5163,5164],{"class":1468},"false",[1088,5166,1493],{"class":1302},[1088,5168,5169],{"class":1090,"line":1337},[1088,5170,1371],{"emptyLinePlaceholder":21},[1088,5172,5173,5175,5178,5181,5183],{"class":1090,"line":1349},[1088,5174,2598],{"class":1589},[1088,5176,5177],{"class":1589}," function",[1088,5179,5180],{"class":1111}," createChat",[1088,5182,1807],{"class":1306},[1088,5184,1382],{"class":1306},[1088,5186,5187,5189,5191,5193,5196,5198,5200,5202,5205,5208],{"class":1090,"line":1360},[1088,5188,3529],{"class":1292},[1088,5190,1953],{"class":1312},[1088,5192,3534],{"class":1306},[1088,5194,5195],{"class":1302},"input",[1088,5197,1810],{"class":1306},[1088,5199,3323],{"class":1302},[1088,5201,1810],{"class":1306},[1088,5203,5204],{"class":1111},"trim",[1088,5206,5207],{"class":1312},"()) ",[1088,5209,5210],{"class":1292},"return\n",[1088,5212,5213],{"class":1090,"line":1368},[1088,5214,1371],{"emptyLinePlaceholder":21},[1088,5216,5217,5220,5222,5224,5226],{"class":1090,"line":1374},[1088,5218,5219],{"class":1302},"  loading",[1088,5221,1810],{"class":1306},[1088,5223,3323],{"class":1302},[1088,5225,2624],{"class":1306},[1088,5227,4355],{"class":1468},[1088,5229,5230],{"class":1090,"line":1385},[1088,5231,1371],{"emptyLinePlaceholder":21},[1088,5233,5234],{"class":1090,"line":1401},[1088,5235,5236],{"class":1472},"  \u002F\u002F Create a new chat on the server\n",[1088,5238,5239,5241,5243,5245,5247,5250,5252,5254,5257,5259,5261],{"class":1090,"line":1407},[1088,5240,2614],{"class":1589},[1088,5242,2791],{"class":1302},[1088,5244,2624],{"class":1306},[1088,5246,2627],{"class":1292},[1088,5248,5249],{"class":1111}," $fetch",[1088,5251,1303],{"class":1312},[1088,5253,1331],{"class":1306},[1088,5255,5256],{"class":1098},"\u002Fapi\u002Fchats",[1088,5258,1331],{"class":1306},[1088,5260,1718],{"class":1306},[1088,5262,1382],{"class":1306},[1088,5264,5265,5268,5270,5272,5275,5277],{"class":1090,"line":1412},[1088,5266,5267],{"class":1312},"    method",[1088,5269,1316],{"class":1306},[1088,5271,1393],{"class":1306},[1088,5273,5274],{"class":1098},"POST",[1088,5276,1331],{"class":1306},[1088,5278,1334],{"class":1306},[1088,5280,5281,5284,5286],{"class":1090,"line":1435},[1088,5282,5283],{"class":1312},"    body",[1088,5285,1316],{"class":1306},[1088,5287,1382],{"class":1306},[1088,5289,5290,5292,5294],{"class":1090,"line":1440},[1088,5291,3363],{"class":1312},[1088,5293,1316],{"class":1306},[1088,5295,1382],{"class":1306},[1088,5297,5298,5300,5302,5304,5306,5308],{"class":1090,"line":1450},[1088,5299,4497],{"class":1312},[1088,5301,1316],{"class":1306},[1088,5303,1393],{"class":1306},[1088,5305,2149],{"class":1098},[1088,5307,1331],{"class":1306},[1088,5309,1334],{"class":1306},[1088,5311,5312,5314,5316,5318,5320,5322,5324,5326,5329,5331,5333,5335,5337,5340,5342,5344,5346],{"class":1090,"line":1460},[1088,5313,4530],{"class":1312},[1088,5315,1316],{"class":1306},[1088,5317,1420],{"class":1312},[1088,5319,1867],{"class":1306},[1088,5321,2521],{"class":1312},[1088,5323,1316],{"class":1306},[1088,5325,1393],{"class":1306},[1088,5327,5328],{"class":1098},"text",[1088,5330,1331],{"class":1306},[1088,5332,1718],{"class":1306},[1088,5334,1721],{"class":1312},[1088,5336,1316],{"class":1306},[1088,5338,5339],{"class":1302}," input",[1088,5341,1810],{"class":1306},[1088,5343,3323],{"class":1302},[1088,5345,1734],{"class":1306},[1088,5347,3169],{"class":1312},[1088,5349,5350],{"class":1090,"line":1476},[1088,5351,4369],{"class":1306},[1088,5353,5354],{"class":1090,"line":1482},[1088,5355,1479],{"class":1306},[1088,5357,5358,5360],{"class":1090,"line":1487},[1088,5359,2415],{"class":1306},[1088,5361,1493],{"class":1312},[1088,5363,5364],{"class":1090,"line":2276},[1088,5365,1371],{"emptyLinePlaceholder":21},[1088,5367,5368],{"class":1090,"line":2289},[1088,5369,5370],{"class":1472},"  \u002F\u002F Navigate to the chat page\n",[1088,5372,5373,5376,5378,5380,5383,5386,5388,5390,5392,5395],{"class":1090,"line":2319},[1088,5374,5375],{"class":1111},"  navigateTo",[1088,5377,1303],{"class":1312},[1088,5379,3678],{"class":1306},[1088,5381,5382],{"class":1098},"\u002Fchat\u002F",[1088,5384,5385],{"class":1306},"${",[1088,5387,262],{"class":1302},[1088,5389,1810],{"class":1306},[1088,5391,2019],{"class":1302},[1088,5393,5394],{"class":1306},"}`",[1088,5396,1493],{"class":1312},[1088,5398,5399],{"class":1090,"line":2325},[1088,5400,5401],{"class":1306},"}\n",[1088,5403,5404,5406,5408],{"class":1090,"line":2330},[1088,5405,1637],{"class":1306},[1088,5407,5113],{"class":1312},[1088,5409,1567],{"class":1306},[1088,5411,5412],{"class":1090,"line":2362},[1088,5413,1371],{"emptyLinePlaceholder":21},[1088,5415,5416,5418,5420],{"class":1090,"line":2378},[1088,5417,1561],{"class":1306},[1088,5419,1564],{"class":1312},[1088,5421,1567],{"class":1306},[1088,5423,5424,5426,5429,5432,5434,5436,5439,5441],{"class":1090,"line":2396},[1088,5425,1574],{"class":1306},[1088,5427,5428],{"class":1312},"UDashboardPanel",[1088,5430,5431],{"class":1589}," :ui",[1088,5433,1593],{"class":1306},[1088,5435,1520],{"class":1306},[1088,5437,5438],{"class":1098},"{ body: 'p-0 sm:p-0' }",[1088,5440,1520],{"class":1306},[1088,5442,1567],{"class":1306},[1088,5444,5445,5447,5449,5452,5455],{"class":1090,"line":2412},[1088,5446,1583],{"class":1306},[1088,5448,1564],{"class":1312},[1088,5450,5451],{"class":1306}," #",[1088,5453,5454],{"class":1589},"body",[1088,5456,1567],{"class":1306},[1088,5458,5459,5461,5464,5467,5469,5471,5474,5476],{"class":1090,"line":2420},[1088,5460,1607],{"class":1306},[1088,5462,5463],{"class":1312},"UContainer",[1088,5465,5466],{"class":1589}," class",[1088,5468,1593],{"class":1306},[1088,5470,1520],{"class":1306},[1088,5472,5473],{"class":1098},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1088,5475,1520],{"class":1306},[1088,5477,1567],{"class":1306},[1088,5479,5480,5483,5486,5488,5490,5492,5495,5497],{"class":1090,"line":3415},[1088,5481,5482],{"class":1306},"        \u003C",[1088,5484,5485],{"class":1312},"h1",[1088,5487,5466],{"class":1589},[1088,5489,1593],{"class":1306},[1088,5491,1520],{"class":1306},[1088,5493,5494],{"class":1098},"text-3xl sm:text-4xl text-highlighted font-bold",[1088,5496,1520],{"class":1306},[1088,5498,1567],{"class":1306},[1088,5500,5501],{"class":1090,"line":3428},[1088,5502,5503],{"class":1302},"          How can I help you today?\n",[1088,5505,5506,5509,5511],{"class":1090,"line":3433},[1088,5507,5508],{"class":1306},"        \u003C\u002F",[1088,5510,5485],{"class":1312},[1088,5512,1567],{"class":1306},[1088,5514,5515],{"class":1090,"line":3439},[1088,5516,1371],{"emptyLinePlaceholder":21},[1088,5518,5520,5522],{"class":5519,"line":3470},[1090,1571],[1088,5521,5482],{"class":1306},[1088,5523,5524],{"class":1312},"UChatPrompt\n",[1088,5526,5528,5531,5533,5535,5537],{"class":5527,"line":3514},[1090,1571],[1088,5529,5530],{"class":1589},"          v-model",[1088,5532,1593],{"class":1306},[1088,5534,1520],{"class":1306},[1088,5536,5195],{"class":1098},[1088,5538,5539],{"class":1306},"\"\n",[1088,5541,5543,5546,5548,5550,5553],{"class":5542,"line":3521},[1090,1571],[1088,5544,5545],{"class":1589},"          :status",[1088,5547,1593],{"class":1306},[1088,5549,1520],{"class":1306},[1088,5551,5552],{"class":1098},"loading ? 'streaming' : 'ready'",[1088,5554,5539],{"class":1306},[1088,5556,5558,5561,5563,5565,5568],{"class":5557,"line":3526},[1090,1571],[1088,5559,5560],{"class":1589},"          variant",[1088,5562,1593],{"class":1306},[1088,5564,1520],{"class":1306},[1088,5566,5567],{"class":1098},"subtle",[1088,5569,5539],{"class":1306},[1088,5571,5573,5576,5578,5580,5583],{"class":5572,"line":3544},[1090,1571],[1088,5574,5575],{"class":1589},"          placeholder",[1088,5577,1593],{"class":1306},[1088,5579,1520],{"class":1306},[1088,5581,5582],{"class":1098},"Ask me anything...",[1088,5584,5539],{"class":1306},[1088,5586,5588,5591,5593,5595,5598],{"class":5587,"line":3583},[1090,1571],[1088,5589,5590],{"class":1589},"          @submit",[1088,5592,1593],{"class":1306},[1088,5594,1520],{"class":1306},[1088,5596,5597],{"class":1098},"createChat",[1088,5599,5539],{"class":1306},[1088,5601,5603],{"class":5602,"line":3589},[1090,1571],[1088,5604,5605],{"class":1306},"        >\n",[1088,5607,5609,5612,5615,5618,5620,5622,5625,5627],{"class":5608,"line":3594},[1090,1571],[1088,5610,5611],{"class":1306},"          \u003C",[1088,5613,5614],{"class":1312},"UChatPromptSubmit",[1088,5616,5617],{"class":1589}," color",[1088,5619,1593],{"class":1306},[1088,5621,1520],{"class":1306},[1088,5623,5624],{"class":1098},"neutral",[1088,5626,1520],{"class":1306},[1088,5628,1613],{"class":1306},[1088,5630,5632,5634,5636],{"class":5631,"line":3600},[1090,1571],[1088,5633,5508],{"class":1306},[1088,5635,5078],{"class":1312},[1088,5637,1567],{"class":1306},[1088,5639,5640,5643,5645],{"class":1090,"line":3620},[1088,5641,5642],{"class":1306},"      \u003C\u002F",[1088,5644,5463],{"class":1312},[1088,5646,1567],{"class":1306},[1088,5648,5649,5651,5653],{"class":1090,"line":3648},[1088,5650,1618],{"class":1306},[1088,5652,1564],{"class":1312},[1088,5654,1567],{"class":1306},[1088,5656,5657,5659,5661],{"class":1090,"line":3664},[1088,5658,1628],{"class":1306},[1088,5660,5428],{"class":1312},[1088,5662,1567],{"class":1306},[1088,5664,5665,5667,5669],{"class":1090,"line":3683},[1088,5666,1637],{"class":1306},[1088,5668,1564],{"class":1312},[1088,5670,1567],{"class":1306},[977,5672,4627,5673,5677],{},[1031,5674,5675],{"href":281},[1038,5676,5078],{}," component automatically handles:",[989,5679,5680,5687,5690,5700],{},[992,5681,5682,5683],{},"Form submission when pressing ",[5684,5685],"kbd",{"value":5686},"enter",[992,5688,5689],{},"Auto-resizing as you type",[992,5691,5692,5693,5696,5697],{},"A loading state when ",[1038,5694,5695],{},"status"," is set to ",[1038,5698,5699],{},"streaming",[992,5701,5702],{},"Focus management and keyboard shortcuts",[981,5704,5706],{"id":5705},"creating-the-chat-page","Creating the chat page",[977,5708,5709,5710,5716,5717,5724],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1031,5711,5714],{"href":5712,"rel":5713},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1035],[1038,5715,259],{}," class and ",[1031,5718,5721],{"href":5719,"rel":5720},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1035],[1038,5722,5723],{},"DefaultChatTransport"," for real-time streaming.",[1279,5726,5727],{},[1697,5728,5729],{},[1079,5730,5734],{"className":1551,"code":5731,"filename":5732,"highlights":5733,"language":34,"meta":1084,"style":1084},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isReasoningStreaming } 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=\"isReasoningStreaming(message, index, chat)\"\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              \u003CMDC\n                v-else-if=\"isTextUIPart(part)\"\n                :value=\"part.text\"\n                :cache-key=\"`${message.id}-${index}`\"\n                class=\"*:first:mt-0 *:last:mb-0\"\n              \u002F>\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",[1108,1322,1337,1487,2276,2289,2319,2325,2330,2362,2378,2396,2412,2420,3415,3428,3433,3439,3470,3514,3521,3526,3544],[1038,5735,5736,5756,5786,5807,5828,5832,5846,5860,5864,5869,5917,5921,5940,5982,5986,5990,6006,6010,6015,6033,6053,6072,6088,6115,6124,6139,6145,6172,6188,6193,6198,6213,6228,6244,6261,6275,6282,6287,6294,6298,6320,6332,6352,6380,6394,6398,6402,6406,6411,6424,6452,6463,6467,6473,6481,6485,6493,6511,6523,6542,6549,6563,6576,6581,6595,6599,6624,6702,6710,6724,6738,6752,6757,6765,6778,6792,6806,6811,6821,6825,6831,6845,6858,6872,6885,6890,6899,6908,6916,6920,6926,6938,6952,6964,6977,6990,6994,7001,7014,7027,7041,7055,7060,7068,7076,7084,7092],{"__ignoreMap":1084},[1088,5737,5738,5740,5742,5744,5746,5748,5750,5752,5754],{"class":1090,"line":1091},[1088,5739,1561],{"class":1306},[1088,5741,5113],{"class":1312},[1088,5743,5116],{"class":1589},[1088,5745,5119],{"class":1589},[1088,5747,1593],{"class":1306},[1088,5749,1520],{"class":1306},[1088,5751,1285],{"class":1098},[1088,5753,1520],{"class":1306},[1088,5755,1567],{"class":1306},[1088,5757,5759,5761,5763,5766,5768,5771,5773,5776,5778,5780,5782,5784],{"class":5758,"line":1108},[1090,1571],[1088,5760,1709],{"class":1292},[1088,5762,1712],{"class":1306},[1088,5764,5765],{"class":1302}," DefaultChatTransport",[1088,5767,1718],{"class":1306},[1088,5769,5770],{"class":1302}," isReasoningUIPart",[1088,5772,1718],{"class":1306},[1088,5774,5775],{"class":1302}," isTextUIPart",[1088,5777,1734],{"class":1306},[1088,5779,1737],{"class":1292},[1088,5781,1393],{"class":1306},[1088,5783,2535],{"class":1098},[1088,5785,1357],{"class":1306},[1088,5787,5789,5791,5793,5796,5798,5800,5802,5805],{"class":5788,"line":1322},[1090,1571],[1088,5790,1709],{"class":1292},[1088,5792,1712],{"class":1306},[1088,5794,5795],{"class":1302}," Chat",[1088,5797,1734],{"class":1306},[1088,5799,1737],{"class":1292},[1088,5801,1393],{"class":1306},[1088,5803,5804],{"class":1098},"@ai-sdk\u002Fvue",[1088,5806,1357],{"class":1306},[1088,5808,5810,5812,5814,5817,5819,5821,5823,5826],{"class":5809,"line":1337},[1090,1571],[1088,5811,1709],{"class":1292},[1088,5813,1712],{"class":1306},[1088,5815,5816],{"class":1302}," isReasoningStreaming",[1088,5818,1734],{"class":1306},[1088,5820,1737],{"class":1292},[1088,5822,1393],{"class":1306},[1088,5824,5825],{"class":1098},"@nuxt\u002Fui\u002Futils\u002Fai",[1088,5827,1357],{"class":1306},[1088,5829,5830],{"class":1090,"line":1349},[1088,5831,1371],{"emptyLinePlaceholder":21},[1088,5833,5834,5836,5839,5841,5844],{"class":1090,"line":1360},[1088,5835,3062],{"class":1589},[1088,5837,5838],{"class":1302}," route ",[1088,5840,1593],{"class":1306},[1088,5842,5843],{"class":1111}," useRoute",[1088,5845,2670],{"class":1302},[1088,5847,5848,5850,5853,5855,5858],{"class":1090,"line":1368},[1088,5849,3062],{"class":1589},[1088,5851,5852],{"class":1302}," toast ",[1088,5854,1593],{"class":1306},[1088,5856,5857],{"class":1111}," useToast",[1088,5859,2670],{"class":1302},[1088,5861,5862],{"class":1090,"line":1374},[1088,5863,1371],{"emptyLinePlaceholder":21},[1088,5865,5866],{"class":1090,"line":1385},[1088,5867,5868],{"class":1472},"\u002F\u002F Fetch existing chat data\n",[1088,5870,5871,5873,5875,5878,5880,5883,5885,5887,5889,5892,5894,5896,5899,5901,5904,5906,5909,5911,5913,5915],{"class":1090,"line":1401},[1088,5872,3062],{"class":1589},[1088,5874,1712],{"class":1306},[1088,5876,5877],{"class":1312}," data",[1088,5879,1316],{"class":1306},[1088,5881,5882],{"class":1302}," chatData ",[1088,5884,1490],{"class":1306},[1088,5886,2624],{"class":1306},[1088,5888,2627],{"class":1292},[1088,5890,5891],{"class":1111}," useFetch",[1088,5893,1303],{"class":1302},[1088,5895,3678],{"class":1306},[1088,5897,5898],{"class":1098},"\u002Fapi\u002Fchats\u002F",[1088,5900,5385],{"class":1306},[1088,5902,5903],{"class":1302},"route",[1088,5905,1810],{"class":1306},[1088,5907,5908],{"class":1302},"params",[1088,5910,1810],{"class":1306},[1088,5912,2019],{"class":1302},[1088,5914,5394],{"class":1306},[1088,5916,1493],{"class":1302},[1088,5918,5919],{"class":1090,"line":1407},[1088,5920,1371],{"emptyLinePlaceholder":21},[1088,5922,5923,5926,5928,5930,5933,5935,5938],{"class":1090,"line":1412},[1088,5924,5925],{"class":1292},"if",[1088,5927,1953],{"class":1302},[1088,5929,3534],{"class":1306},[1088,5931,5932],{"class":1302},"chatData",[1088,5934,1810],{"class":1306},[1088,5936,5937],{"class":1302},"value) ",[1088,5939,1307],{"class":1306},[1088,5941,5942,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,5969,5971,5974,5976,5978,5980],{"class":1090,"line":1435},[1088,5943,5944],{"class":1292},"  throw",[1088,5946,2900],{"class":1111},[1088,5948,1303],{"class":1312},[1088,5950,1867],{"class":1306},[1088,5952,3556],{"class":1312},[1088,5954,1316],{"class":1306},[1088,5956,3562],{"class":3561},[1088,5958,1718],{"class":1306},[1088,5960,3567],{"class":1312},[1088,5962,1316],{"class":1306},[1088,5964,1393],{"class":1306},[1088,5966,3574],{"class":1098},[1088,5968,1331],{"class":1306},[1088,5970,1718],{"class":1306},[1088,5972,5973],{"class":1312}," fatal",[1088,5975,1316],{"class":1306},[1088,5977,4170],{"class":1468},[1088,5979,1734],{"class":1306},[1088,5981,1493],{"class":1312},[1088,5983,5984],{"class":1090,"line":1440},[1088,5985,5401],{"class":1306},[1088,5987,5988],{"class":1090,"line":1450},[1088,5989,1371],{"emptyLinePlaceholder":21},[1088,5991,5992,5994,5996,5998,6000,6002,6004],{"class":1090,"line":1460},[1088,5993,3062],{"class":1589},[1088,5995,5136],{"class":1302},[1088,5997,1593],{"class":1306},[1088,5999,5141],{"class":1111},[1088,6001,1303],{"class":1302},[1088,6003,5146],{"class":1306},[1088,6005,1493],{"class":1302},[1088,6007,6008],{"class":1090,"line":1476},[1088,6009,1371],{"emptyLinePlaceholder":21},[1088,6011,6012],{"class":1090,"line":1482},[1088,6013,6014],{"class":1472},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1088,6016,6018,6020,6023,6025,6027,6029,6031],{"class":6017,"line":1487},[1090,1571],[1088,6019,3062],{"class":1589},[1088,6021,6022],{"class":1302}," chat ",[1088,6024,1593],{"class":1306},[1088,6026,1904],{"class":1306},[1088,6028,5795],{"class":1111},[1088,6030,1303],{"class":1302},[1088,6032,1307],{"class":1306},[1088,6034,6036,6038,6040,6043,6045,6047,6049,6051],{"class":6035,"line":2276},[1090,1571],[1088,6037,1800],{"class":1312},[1088,6039,1316],{"class":1306},[1088,6041,6042],{"class":1302}," chatData",[1088,6044,1810],{"class":1306},[1088,6046,3323],{"class":1302},[1088,6048,1810],{"class":1306},[1088,6050,2019],{"class":1302},[1088,6052,1334],{"class":1306},[1088,6054,6056,6058,6060,6062,6064,6066,6068,6070],{"class":6055,"line":2289},[1090,1571],[1088,6057,1960],{"class":1312},[1088,6059,1316],{"class":1306},[1088,6061,6042],{"class":1302},[1088,6063,1810],{"class":1306},[1088,6065,3323],{"class":1302},[1088,6067,1810],{"class":1306},[1088,6069,1998],{"class":1302},[1088,6071,1334],{"class":1306},[1088,6073,6075,6078,6080,6082,6084,6086],{"class":6074,"line":2319},[1090,1571],[1088,6076,6077],{"class":1312},"  transport",[1088,6079,1316],{"class":1306},[1088,6081,1904],{"class":1306},[1088,6083,5765],{"class":1111},[1088,6085,1303],{"class":1302},[1088,6087,1307],{"class":1306},[1088,6089,6091,6094,6096,6098,6100,6102,6104,6106,6108,6110,6112],{"class":6090,"line":2325},[1090,1571],[1088,6092,6093],{"class":1312},"    api",[1088,6095,1316],{"class":1306},[1088,6097,3672],{"class":1306},[1088,6099,5898],{"class":1098},[1088,6101,5385],{"class":1306},[1088,6103,5932],{"class":1302},[1088,6105,1810],{"class":1306},[1088,6107,3323],{"class":1302},[1088,6109,1810],{"class":1306},[1088,6111,2019],{"class":1302},[1088,6113,6114],{"class":1306},"}`\n",[1088,6116,6118,6120,6122],{"class":6117,"line":2330},[1090,1571],[1088,6119,2415],{"class":1306},[1088,6121,1884],{"class":1302},[1088,6123,1334],{"class":1306},[1088,6125,6127,6130,6132,6135,6137],{"class":6126,"line":2362},[1090,1571],[1088,6128,6129],{"class":1312},"  onData",[1088,6131,1303],{"class":1306},[1088,6133,6134],{"class":1944},"dataPart",[1088,6136,1884],{"class":1306},[1088,6138,1382],{"class":1306},[1088,6140,6142],{"class":6141,"line":2378},[1090,1571],[1088,6143,6144],{"class":1472},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1088,6146,6148,6151,6153,6155,6157,6160,6162,6164,6166,6168,6170],{"class":6147,"line":2396},[1090,1571],[1088,6149,6150],{"class":1292},"    if",[1088,6152,1953],{"class":1312},[1088,6154,6134],{"class":1302},[1088,6156,1810],{"class":1306},[1088,6158,6159],{"class":1302},"type",[1088,6161,3350],{"class":1306},[1088,6163,1393],{"class":1306},[1088,6165,4317],{"class":1098},[1088,6167,1331],{"class":1306},[1088,6169,3539],{"class":1312},[1088,6171,1307],{"class":1306},[1088,6173,6175,6178,6180,6182,6184,6186],{"class":6174,"line":2412},[1090,1571],[1088,6176,6177],{"class":1111},"      refreshNuxtData",[1088,6179,1303],{"class":1312},[1088,6181,1331],{"class":1306},[1088,6183,1789],{"class":1098},[1088,6185,1331],{"class":1306},[1088,6187,1493],{"class":1312},[1088,6189,6191],{"class":6190,"line":2420},[1090,1571],[1088,6192,1479],{"class":1306},[1088,6194,6196],{"class":6195,"line":3415},[1090,1571],[1088,6197,1404],{"class":1306},[1088,6199,6201,6204,6206,6209,6211],{"class":6200,"line":3428},[1090,1571],[1088,6202,6203],{"class":1312},"  onError",[1088,6205,1303],{"class":1306},[1088,6207,6208],{"class":1944},"error",[1088,6210,1884],{"class":1306},[1088,6212,1382],{"class":1306},[1088,6214,6216,6219,6221,6224,6226],{"class":6215,"line":3433},[1090,1571],[1088,6217,6218],{"class":1302},"    toast",[1088,6220,1810],{"class":1306},[1088,6222,6223],{"class":1111},"add",[1088,6225,1303],{"class":1312},[1088,6227,1307],{"class":1306},[1088,6229,6231,6234,6236,6238,6240,6242],{"class":6230,"line":3439},[1090,1571],[1088,6232,6233],{"class":1312},"      title",[1088,6235,1316],{"class":1306},[1088,6237,1393],{"class":1306},[1088,6239,497],{"class":1098},[1088,6241,1331],{"class":1306},[1088,6243,1334],{"class":1306},[1088,6245,6247,6250,6252,6255,6257,6259],{"class":6246,"line":3470},[1090,1571],[1088,6248,6249],{"class":1312},"      description",[1088,6251,1316],{"class":1306},[1088,6253,6254],{"class":1302}," error",[1088,6256,1810],{"class":1306},[1088,6258,4469],{"class":1302},[1088,6260,1334],{"class":1306},[1088,6262,6264,6267,6269,6271,6273],{"class":6263,"line":3514},[1090,1571],[1088,6265,6266],{"class":1312},"      color",[1088,6268,1316],{"class":1306},[1088,6270,1393],{"class":1306},[1088,6272,6208],{"class":1098},[1088,6274,1357],{"class":1306},[1088,6276,6278,6280],{"class":6277,"line":3521},[1090,1571],[1088,6279,3377],{"class":1306},[1088,6281,1493],{"class":1312},[1088,6283,6285],{"class":6284,"line":3526},[1090,1571],[1088,6286,3586],{"class":1306},[1088,6288,6290,6292],{"class":6289,"line":3544},[1090,1571],[1088,6291,1490],{"class":1306},[1088,6293,1493],{"class":1302},[1088,6295,6296],{"class":1090,"line":3583},[1088,6297,1371],{"emptyLinePlaceholder":21},[1088,6299,6300,6303,6306,6308,6311,6313,6316,6318],{"class":1090,"line":3589},[1088,6301,6302],{"class":1589},"function",[1088,6304,6305],{"class":1111}," handleSubmit",[1088,6307,1303],{"class":1306},[1088,6309,6310],{"class":1944},"e",[1088,6312,1316],{"class":1306},[1088,6314,6315],{"class":1094}," Event",[1088,6317,1884],{"class":1306},[1088,6319,1382],{"class":1306},[1088,6321,6322,6325,6327,6330],{"class":1090,"line":3594},[1088,6323,6324],{"class":1302},"  e",[1088,6326,1810],{"class":1306},[1088,6328,6329],{"class":1111},"preventDefault",[1088,6331,2670],{"class":1312},[1088,6333,6334,6336,6338,6340,6342,6344,6346,6348,6350],{"class":1090,"line":3600},[1088,6335,3529],{"class":1292},[1088,6337,1953],{"class":1312},[1088,6339,5195],{"class":1302},[1088,6341,1810],{"class":1306},[1088,6343,3323],{"class":1302},[1088,6345,1810],{"class":1306},[1088,6347,5204],{"class":1111},[1088,6349,5207],{"class":1312},[1088,6351,1307],{"class":1306},[1088,6353,6354,6357,6359,6362,6364,6366,6368,6370,6372,6374,6376,6378],{"class":1090,"line":3620},[1088,6355,6356],{"class":1302},"    chat",[1088,6358,1810],{"class":1306},[1088,6360,6361],{"class":1111},"sendMessage",[1088,6363,1303],{"class":1312},[1088,6365,1867],{"class":1306},[1088,6367,1721],{"class":1312},[1088,6369,1316],{"class":1306},[1088,6371,5339],{"class":1302},[1088,6373,1810],{"class":1306},[1088,6375,3323],{"class":1302},[1088,6377,1734],{"class":1306},[1088,6379,1493],{"class":1312},[1088,6381,6382,6385,6387,6389,6391],{"class":1090,"line":3648},[1088,6383,6384],{"class":1302},"    input",[1088,6386,1810],{"class":1306},[1088,6388,3323],{"class":1302},[1088,6390,2624],{"class":1306},[1088,6392,6393],{"class":1306}," ''\n",[1088,6395,6396],{"class":1090,"line":3664},[1088,6397,3586],{"class":1306},[1088,6399,6400],{"class":1090,"line":3683},[1088,6401,5401],{"class":1306},[1088,6403,6404],{"class":1090,"line":3711},[1088,6405,1371],{"emptyLinePlaceholder":21},[1088,6407,6408],{"class":1090,"line":3718},[1088,6409,6410],{"class":1472},"\u002F\u002F Auto-generate response for first message\n",[1088,6412,6413,6416,6418,6420,6422],{"class":1090,"line":3723},[1088,6414,6415],{"class":1111},"onMounted",[1088,6417,1303],{"class":1302},[1088,6419,1807],{"class":1306},[1088,6421,1827],{"class":1589},[1088,6423,1382],{"class":1306},[1088,6425,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446,6448,6450],{"class":1090,"line":3789},[1088,6427,3529],{"class":1292},[1088,6429,1953],{"class":1312},[1088,6431,5932],{"class":1302},[1088,6433,1810],{"class":1306},[1088,6435,3323],{"class":1302},[1088,6437,3844],{"class":1306},[1088,6439,1998],{"class":1302},[1088,6441,1810],{"class":1306},[1088,6443,3823],{"class":1302},[1088,6445,3350],{"class":1306},[1088,6447,3829],{"class":3561},[1088,6449,3539],{"class":1312},[1088,6451,1307],{"class":1306},[1088,6453,6454,6456,6458,6461],{"class":1090,"line":3794},[1088,6455,6356],{"class":1302},[1088,6457,1810],{"class":1306},[1088,6459,6460],{"class":1111},"regenerate",[1088,6462,2670],{"class":1312},[1088,6464,6465],{"class":1090,"line":3799},[1088,6466,3586],{"class":1306},[1088,6468,6469,6471],{"class":1090,"line":3805},[1088,6470,1490],{"class":1306},[1088,6472,1493],{"class":1302},[1088,6474,6475,6477,6479],{"class":1090,"line":3834},[1088,6476,1637],{"class":1306},[1088,6478,5113],{"class":1312},[1088,6480,1567],{"class":1306},[1088,6482,6483],{"class":1090,"line":3875},[1088,6484,1371],{"emptyLinePlaceholder":21},[1088,6486,6487,6489,6491],{"class":1090,"line":3904},[1088,6488,1561],{"class":1306},[1088,6490,1564],{"class":1312},[1088,6492,1567],{"class":1306},[1088,6494,6495,6497,6499,6501,6503,6505,6507,6509],{"class":1090,"line":3916},[1088,6496,1574],{"class":1306},[1088,6498,5428],{"class":1312},[1088,6500,5431],{"class":1589},[1088,6502,1593],{"class":1306},[1088,6504,1520],{"class":1306},[1088,6506,5438],{"class":1098},[1088,6508,1520],{"class":1306},[1088,6510,1567],{"class":1306},[1088,6512,6513,6515,6517,6519,6521],{"class":1090,"line":3932},[1088,6514,1583],{"class":1306},[1088,6516,1564],{"class":1312},[1088,6518,5451],{"class":1306},[1088,6520,5454],{"class":1589},[1088,6522,1567],{"class":1306},[1088,6524,6525,6527,6529,6531,6533,6535,6538,6540],{"class":1090,"line":3946},[1088,6526,1607],{"class":1306},[1088,6528,5463],{"class":1312},[1088,6530,5466],{"class":1589},[1088,6532,1593],{"class":1306},[1088,6534,1520],{"class":1306},[1088,6536,6537],{"class":1098},"min-h-dvh flex flex-col py-4 sm:py-6",[1088,6539,1520],{"class":1306},[1088,6541,1567],{"class":1306},[1088,6543,6544,6546],{"class":1090,"line":3953},[1088,6545,5482],{"class":1306},[1088,6547,6548],{"class":1312},"UChatMessages\n",[1088,6550,6551,6554,6556,6558,6561],{"class":1090,"line":3958},[1088,6552,6553],{"class":1589},"          :messages",[1088,6555,1593],{"class":1306},[1088,6557,1520],{"class":1306},[1088,6559,6560],{"class":1098},"chat.messages",[1088,6562,5539],{"class":1306},[1088,6564,6565,6567,6569,6571,6574],{"class":1090,"line":3963},[1088,6566,5545],{"class":1589},[1088,6568,1593],{"class":1306},[1088,6570,1520],{"class":1306},[1088,6572,6573],{"class":1098},"chat.status",[1088,6575,5539],{"class":1306},[1088,6577,6578],{"class":1090,"line":3969},[1088,6579,6580],{"class":1589},"          should-auto-scroll\n",[1088,6582,6583,6586,6588,6590,6593],{"class":1090,"line":3986},[1088,6584,6585],{"class":1589},"          class",[1088,6587,1593],{"class":1306},[1088,6589,1520],{"class":1306},[1088,6591,6592],{"class":1098},"flex-1",[1088,6594,5539],{"class":1306},[1088,6596,6597],{"class":1090,"line":4008},[1088,6598,5605],{"class":1306},[1088,6600,6601,6603,6605,6607,6609,6611,6613,6615,6618,6620,6622],{"class":1090,"line":4026},[1088,6602,5611],{"class":1306},[1088,6604,1564],{"class":1312},[1088,6606,5451],{"class":1306},[1088,6608,371],{"class":1589},[1088,6610,1593],{"class":1306},[1088,6612,1520],{"class":1306},[1088,6614,1867],{"class":1306},[1088,6616,6617],{"class":1302}," message ",[1088,6619,1490],{"class":1306},[1088,6621,1520],{"class":1306},[1088,6623,1567],{"class":1306},[1088,6625,6626,6629,6631,6634,6636,6638,6641,6643,6646,6649,6651,6653,6655,6657,6660,6663,6665,6668,6670,6672,6674,6676,6679,6681,6684,6686,6688,6690,6692,6694,6697,6700],{"class":1090,"line":4034},[1088,6627,6628],{"class":1306},"            \u003C",[1088,6630,1564],{"class":1312},[1088,6632,6633],{"class":1292}," v-for",[1088,6635,1593],{"class":1306},[1088,6637,1520],{"class":1306},[1088,6639,6640],{"class":1302},"(part",[1088,6642,1718],{"class":1306},[1088,6644,6645],{"class":1302}," index) ",[1088,6647,6648],{"class":1306},"in",[1088,6650,2619],{"class":1302},[1088,6652,1810],{"class":1306},[1088,6654,2200],{"class":1302},[1088,6656,1520],{"class":1306},[1088,6658,6659],{"class":1306}," :",[1088,6661,6662],{"class":1589},"key",[1088,6664,1593],{"class":1306},[1088,6666,6667],{"class":1306},"\"`${",[1088,6669,4469],{"class":1302},[1088,6671,1810],{"class":1306},[1088,6673,2019],{"class":1302},[1088,6675,1490],{"class":1306},[1088,6677,6678],{"class":1098},"-",[1088,6680,5385],{"class":1306},[1088,6682,6683],{"class":1302},"part",[1088,6685,1810],{"class":1306},[1088,6687,6159],{"class":1302},[1088,6689,1490],{"class":1306},[1088,6691,6678],{"class":1098},[1088,6693,5385],{"class":1306},[1088,6695,6696],{"class":1302},"index",[1088,6698,6699],{"class":1306},"}`\"",[1088,6701,1567],{"class":1306},[1088,6703,6704,6707],{"class":1090,"line":4051},[1088,6705,6706],{"class":1306},"              \u003C",[1088,6708,6709],{"class":1312},"UChatReasoning\n",[1088,6711,6712,6715,6717,6719,6722],{"class":1090,"line":4072},[1088,6713,6714],{"class":1589},"                v-if",[1088,6716,1593],{"class":1306},[1088,6718,1520],{"class":1306},[1088,6720,6721],{"class":1098},"isReasoningUIPart(part)",[1088,6723,5539],{"class":1306},[1088,6725,6726,6729,6731,6733,6736],{"class":1090,"line":4082},[1088,6727,6728],{"class":1589},"                :text",[1088,6730,1593],{"class":1306},[1088,6732,1520],{"class":1306},[1088,6734,6735],{"class":1098},"part.text",[1088,6737,5539],{"class":1306},[1088,6739,6740,6743,6745,6747,6750],{"class":1090,"line":4092},[1088,6741,6742],{"class":1589},"                :streaming",[1088,6744,1593],{"class":1306},[1088,6746,1520],{"class":1306},[1088,6748,6749],{"class":1098},"isReasoningStreaming(message, index, chat)",[1088,6751,5539],{"class":1306},[1088,6753,6754],{"class":1090,"line":4102},[1088,6755,6756],{"class":1306},"              >\n",[1088,6758,6759,6762],{"class":1090,"line":4119},[1088,6760,6761],{"class":1306},"                \u003C",[1088,6763,6764],{"class":1312},"MDC\n",[1088,6766,6767,6770,6772,6774,6776],{"class":1090,"line":4130},[1088,6768,6769],{"class":1589},"                  :value",[1088,6771,1593],{"class":1306},[1088,6773,1520],{"class":1306},[1088,6775,6735],{"class":1098},[1088,6777,5539],{"class":1306},[1088,6779,6780,6783,6785,6787,6790],{"class":1090,"line":4136},[1088,6781,6782],{"class":1589},"                  :cache-key",[1088,6784,1593],{"class":1306},[1088,6786,1520],{"class":1306},[1088,6788,6789],{"class":1098},"`reasoning-${message.id}-${index}`",[1088,6791,5539],{"class":1306},[1088,6793,6794,6797,6799,6801,6804],{"class":1090,"line":4142},[1088,6795,6796],{"class":1589},"                  class",[1088,6798,1593],{"class":1306},[1088,6800,1520],{"class":1306},[1088,6802,6803],{"class":1098},"*:first:mt-0 *:last:mb-0",[1088,6805,5539],{"class":1306},[1088,6807,6808],{"class":1090,"line":4152},[1088,6809,6810],{"class":1306},"                \u002F>\n",[1088,6812,6813,6816,6819],{"class":1090,"line":4162},[1088,6814,6815],{"class":1306},"              \u003C\u002F",[1088,6817,6818],{"class":1312},"UChatReasoning",[1088,6820,1567],{"class":1306},[1088,6822,6823],{"class":1090,"line":4175},[1088,6824,1371],{"emptyLinePlaceholder":21},[1088,6826,6827,6829],{"class":1090,"line":4190},[1088,6828,6706],{"class":1306},[1088,6830,6764],{"class":1312},[1088,6832,6833,6836,6838,6840,6843],{"class":1090,"line":4195},[1088,6834,6835],{"class":1589},"                v-else-if",[1088,6837,1593],{"class":1306},[1088,6839,1520],{"class":1306},[1088,6841,6842],{"class":1098},"isTextUIPart(part)",[1088,6844,5539],{"class":1306},[1088,6846,6847,6850,6852,6854,6856],{"class":1090,"line":4200},[1088,6848,6849],{"class":1589},"                :value",[1088,6851,1593],{"class":1306},[1088,6853,1520],{"class":1306},[1088,6855,6735],{"class":1098},[1088,6857,5539],{"class":1306},[1088,6859,6860,6863,6865,6867,6870],{"class":1090,"line":4210},[1088,6861,6862],{"class":1589},"                :cache-key",[1088,6864,1593],{"class":1306},[1088,6866,1520],{"class":1306},[1088,6868,6869],{"class":1098},"`${message.id}-${index}`",[1088,6871,5539],{"class":1306},[1088,6873,6874,6877,6879,6881,6883],{"class":1090,"line":4226},[1088,6875,6876],{"class":1589},"                class",[1088,6878,1593],{"class":1306},[1088,6880,1520],{"class":1306},[1088,6882,6803],{"class":1098},[1088,6884,5539],{"class":1306},[1088,6886,6887],{"class":1090,"line":4241},[1088,6888,6889],{"class":1306},"              \u002F>\n",[1088,6891,6892,6895,6897],{"class":1090,"line":4247},[1088,6893,6894],{"class":1306},"            \u003C\u002F",[1088,6896,1564],{"class":1312},[1088,6898,1567],{"class":1306},[1088,6900,6901,6904,6906],{"class":1090,"line":4253},[1088,6902,6903],{"class":1306},"          \u003C\u002F",[1088,6905,1564],{"class":1312},[1088,6907,1567],{"class":1306},[1088,6909,6910,6912,6914],{"class":1090,"line":4261},[1088,6911,5508],{"class":1306},[1088,6913,5084],{"class":1312},[1088,6915,1567],{"class":1306},[1088,6917,6918],{"class":1090,"line":4266},[1088,6919,1371],{"emptyLinePlaceholder":21},[1088,6921,6922,6924],{"class":1090,"line":4272},[1088,6923,5482],{"class":1306},[1088,6925,5524],{"class":1312},[1088,6927,6928,6930,6932,6934,6936],{"class":1090,"line":4292},[1088,6929,5530],{"class":1589},[1088,6931,1593],{"class":1306},[1088,6933,1520],{"class":1306},[1088,6935,5195],{"class":1098},[1088,6937,5539],{"class":1306},[1088,6939,6940,6943,6945,6947,6950],{"class":1090,"line":4307},[1088,6941,6942],{"class":1589},"          :error",[1088,6944,1593],{"class":1306},[1088,6946,1520],{"class":1306},[1088,6948,6949],{"class":1098},"chat.error",[1088,6951,5539],{"class":1306},[1088,6953,6954,6956,6958,6960,6962],{"class":1090,"line":4324},[1088,6955,5560],{"class":1589},[1088,6957,1593],{"class":1306},[1088,6959,1520],{"class":1306},[1088,6961,5567],{"class":1098},[1088,6963,5539],{"class":1306},[1088,6965,6966,6968,6970,6972,6975],{"class":1090,"line":4347},[1088,6967,6585],{"class":1589},[1088,6969,1593],{"class":1306},[1088,6971,1520],{"class":1306},[1088,6973,6974],{"class":1098},"sticky bottom-0",[1088,6976,5539],{"class":1306},[1088,6978,6979,6981,6983,6985,6988],{"class":1090,"line":4358},[1088,6980,5590],{"class":1589},[1088,6982,1593],{"class":1306},[1088,6984,1520],{"class":1306},[1088,6986,6987],{"class":1098},"handleSubmit",[1088,6989,5539],{"class":1306},[1088,6991,6992],{"class":1090,"line":4366},[1088,6993,5605],{"class":1306},[1088,6995,6996,6998],{"class":1090,"line":4372},[1088,6997,5611],{"class":1306},[1088,6999,7000],{"class":1312},"UChatPromptSubmit\n",[1088,7002,7003,7006,7008,7010,7012],{"class":1090,"line":4377},[1088,7004,7005],{"class":1589},"            :status",[1088,7007,1593],{"class":1306},[1088,7009,1520],{"class":1306},[1088,7011,6573],{"class":1098},[1088,7013,5539],{"class":1306},[1088,7015,7016,7019,7021,7023,7025],{"class":1090,"line":4400},[1088,7017,7018],{"class":1589},"            color",[1088,7020,1593],{"class":1306},[1088,7022,1520],{"class":1306},[1088,7024,5624],{"class":1098},[1088,7026,5539],{"class":1306},[1088,7028,7029,7032,7034,7036,7039],{"class":1090,"line":4406},[1088,7030,7031],{"class":1589},"            @stop",[1088,7033,1593],{"class":1306},[1088,7035,1520],{"class":1306},[1088,7037,7038],{"class":1098},"chat.stop()",[1088,7040,5539],{"class":1306},[1088,7042,7043,7046,7048,7050,7053],{"class":1090,"line":4426},[1088,7044,7045],{"class":1589},"            @reload",[1088,7047,1593],{"class":1306},[1088,7049,1520],{"class":1306},[1088,7051,7052],{"class":1098},"chat.regenerate()",[1088,7054,5539],{"class":1306},[1088,7056,7057],{"class":1090,"line":4432},[1088,7058,7059],{"class":1306},"          \u002F>\n",[1088,7061,7062,7064,7066],{"class":1090,"line":4478},[1088,7063,5508],{"class":1306},[1088,7065,5078],{"class":1312},[1088,7067,1567],{"class":1306},[1088,7069,7070,7072,7074],{"class":1090,"line":4494},[1088,7071,5642],{"class":1306},[1088,7073,5463],{"class":1312},[1088,7075,1567],{"class":1306},[1088,7077,7078,7080,7082],{"class":1090,"line":4527},[1088,7079,1618],{"class":1306},[1088,7081,1564],{"class":1312},[1088,7083,1567],{"class":1306},[1088,7085,7086,7088,7090],{"class":1090,"line":4541},[1088,7087,1628],{"class":1306},[1088,7089,5428],{"class":1312},[1088,7091,1567],{"class":1306},[1088,7093,7094,7096,7098],{"class":1090,"line":4549},[1088,7095,1637],{"class":1306},[1088,7097,1564],{"class":1312},[1088,7099,1567],{"class":1306},[977,7101,7102],{},"Here's a breakdown of the key parts:",[977,7104,7105],{},[995,7106,7107],{},"The Chat Class",[977,7109,4627,7110,7115,7116,7118],{},[1031,7111,7113],{"href":5712,"rel":7112},[1035],[1038,7114,259],{}," class from ",[1038,7117,5804],{}," manages the entire conversation state. It handles:",[989,7120,7121,7126,7141,7147,7152],{},[992,7122,7123,7124],{},"Message history with ",[1038,7125,6560],{},[992,7127,7128,7129,1953,7131,2865,7134,2865,7137,2865,7139,1884],{},"Connection status with ",[1038,7130,6573],{},[1038,7132,7133],{},"ready",[1038,7135,7136],{},"submitted",[1038,7138,5699],{},[1038,7140,6208],{},[992,7142,7143,7144],{},"Sending messages with ",[1038,7145,7146],{},"chat.sendMessage()",[992,7148,7149,7150],{},"Stopping generation with ",[1038,7151,7038],{},[992,7153,7154,7155],{},"Regenerating responses with ",[1038,7156,7052],{},[977,7158,4627,7159,7162,7163,7168,7169,7171],{},[1038,7160,7161],{},"onData"," callback receives ",[1031,7164,7167],{"href":7165,"rel":7166},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1035],"custom data events"," from the server (like ",[1038,7170,4317],{},"), allowing you to react to server-side events during streaming.",[977,7173,7174],{},[995,7175,7176],{},"UChatMessages Component",[977,7178,4627,7179,7183],{},[1031,7180,7181],{"href":271},[1038,7182,5084],{}," component is purpose-built for AI chatbots with:",[989,7185,7186,7189,7192,7195],{},[992,7187,7188],{},"Auto-scroll to bottom on load",[992,7190,7191],{},"Continuous scrolling as messages stream in",[992,7193,7194],{},"A loading indicator while the assistant processes",[992,7196,7197],{},"An \"Auto scroll\" button when scrolled up",[977,7199,7200],{},[995,7201,7202],{},"Rendering Markdown with MDC",[977,7204,7205,7206,7208,7209,1041,7212,7215,7216,7223,7224,7230,7231,7235,7236,7239,7240,7242],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). We iterate over message ",[1038,7207,2200],{}," using AI SDK helpers like ",[1038,7210,7211],{},"isTextUIPart",[1038,7213,7214],{},"isReasoningUIPart",", rendering text with the ",[1031,7217,7220],{"href":7218,"rel":7219},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc#mdc",[1035],[1038,7221,7222],{},"MDC"," component from ",[1031,7225,7228],{"href":7226,"rel":7227},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc",[1035],[1038,7229,1342],{}," and reasoning with ",[1031,7232,7233],{"href":291},[1038,7234,6818],{},". The ",[1038,7237,7238],{},"isReasoningStreaming"," utility from ",[1038,7241,5825],{}," detects if a reasoning part is currently being streamed.",[1667,7244,7245],{"to":860},[977,7246,7247],{},"Nuxt UI provides pre-styled prose components, so your markdown content will be automatically styled to match your theme.",[977,7249,7250],{},[995,7251,7252],{},"UChatPromptSubmit Component",[977,7254,4627,7255,7259],{},[1031,7256,7257],{"href":286},[1038,7258,5614],{}," component adapts based on the chat status:",[989,7261,7262,7265,7268],{},[992,7263,7264],{},"Shows a send button when ready",[992,7266,7267],{},"Shows a stop button while streaming",[992,7269,7270],{},"Shows a reload button after an error",[981,7272,7274],{"id":7273},"adding-chat-history","Adding chat history",[977,7276,7277],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1116,7279,7281],{"id":7280},"listing-chats-api","Listing chats API",[977,7283,7284],{},"First, create an endpoint to fetch all chats:",[1279,7286,7287],{},[1079,7288,7291],{"className":1283,"code":7289,"filename":7290,"language":1285,"meta":1084,"style":1084},"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",[1038,7292,7293,7311,7333,7352,7356,7374,7399,7426,7432],{"__ignoreMap":1084},[1088,7294,7295,7297,7299,7301,7303,7305,7307,7309],{"class":1090,"line":1091},[1088,7296,1709],{"class":1292},[1088,7298,1712],{"class":1306},[1088,7300,2499],{"class":1302},[1088,7302,1734],{"class":1306},[1088,7304,1737],{"class":1292},[1088,7306,1393],{"class":1306},[1088,7308,1116],{"class":1098},[1088,7310,1357],{"class":1306},[1088,7312,7313,7315,7317,7319,7321,7323,7325,7327,7329,7331],{"class":1090,"line":1108},[1088,7314,1709],{"class":1292},[1088,7316,1712],{"class":1306},[1088,7318,2442],{"class":1302},[1088,7320,1718],{"class":1306},[1088,7322,2550],{"class":1302},[1088,7324,1734],{"class":1306},[1088,7326,1737],{"class":1292},[1088,7328,1393],{"class":1306},[1088,7330,2559],{"class":1098},[1088,7332,1357],{"class":1306},[1088,7334,7335,7337,7339,7342,7344,7346,7348,7350],{"class":1090,"line":1322},[1088,7336,1709],{"class":1292},[1088,7338,1712],{"class":1306},[1088,7340,7341],{"class":1302}," desc",[1088,7343,1734],{"class":1306},[1088,7345,1737],{"class":1292},[1088,7347,1393],{"class":1306},[1088,7349,1762],{"class":1098},[1088,7351,1357],{"class":1306},[1088,7353,7354],{"class":1090,"line":1337},[1088,7355,1371],{"emptyLinePlaceholder":21},[1088,7357,7358,7360,7362,7364,7366,7368,7370,7372],{"class":1090,"line":1349},[1088,7359,1293],{"class":1292},[1088,7361,1296],{"class":1292},[1088,7363,2499],{"class":1111},[1088,7365,1303],{"class":1302},[1088,7367,2598],{"class":1589},[1088,7369,4963],{"class":1306},[1088,7371,1827],{"class":1589},[1088,7373,1382],{"class":1306},[1088,7375,7376,7378,7380,7382,7384,7386,7388,7390,7392,7395,7397],{"class":1090,"line":1360},[1088,7377,2841],{"class":1292},[1088,7379,2627],{"class":1292},[1088,7381,2442],{"class":1302},[1088,7383,1810],{"class":1306},[1088,7385,3454],{"class":1302},[1088,7387,1810],{"class":1306},[1088,7389,1789],{"class":1302},[1088,7391,1810],{"class":1306},[1088,7393,7394],{"class":1111},"findMany",[1088,7396,1303],{"class":1312},[1088,7398,1307],{"class":1306},[1088,7400,7401,7404,7406,7408,7410,7412,7414,7416,7418,7420,7422,7424],{"class":1090,"line":1368},[1088,7402,7403],{"class":1111},"    orderBy",[1088,7405,1316],{"class":1306},[1088,7407,4963],{"class":1306},[1088,7409,1827],{"class":1589},[1088,7411,7341],{"class":1111},[1088,7413,1303],{"class":1312},[1088,7415,2718],{"class":1302},[1088,7417,1810],{"class":1306},[1088,7419,1789],{"class":1302},[1088,7421,1810],{"class":1306},[1088,7423,4980],{"class":1302},[1088,7425,1493],{"class":1312},[1088,7427,7428,7430],{"class":1090,"line":1374},[1088,7429,2415],{"class":1306},[1088,7431,1493],{"class":1312},[1088,7433,7434,7436],{"class":1090,"line":1385},[1088,7435,1490],{"class":1306},[1088,7437,1493],{"class":1302},[1116,7439,7441],{"id":7440},"building-the-chats-history-dropdown","Building the chats history dropdown",[977,7443,7444,7445,7450,7451,7456,7457,7450,7464,7466],{},"The component uses ",[1031,7446,7447],{"href":457},[1038,7448,7449],{},"UDropdownMenu"," with a ",[1031,7452,7453],{"href":230},[1038,7454,7455],{},"UButton"," as trigger. Use ",[1031,7458,7461],{"href":7459,"rel":7460},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1035],[1038,7462,7463],{},"useFetch",[1038,7465,6662],{}," to fetch and cache the chat list:",[1279,7468,7469],{},[1079,7470,7473],{"className":1551,"code":7471,"filename":7472,"language":34,"meta":1084,"style":1084},"\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",[1038,7474,7475,7495,7507,7511,7543,7558,7572,7578,7582,7602,7607,7623,7639,7655,7679,7683,7708,7733,7755,7781,7787,7791,7799,7803,7811,7842,7849,7863,7877,7891,7903,7917,7922,7930],{"__ignoreMap":1084},[1088,7476,7477,7479,7481,7483,7485,7487,7489,7491,7493],{"class":1090,"line":1091},[1088,7478,1561],{"class":1306},[1088,7480,5113],{"class":1312},[1088,7482,5116],{"class":1589},[1088,7484,5119],{"class":1589},[1088,7486,1593],{"class":1306},[1088,7488,1520],{"class":1306},[1088,7490,1285],{"class":1098},[1088,7492,1520],{"class":1306},[1088,7494,1567],{"class":1306},[1088,7496,7497,7499,7501,7503,7505],{"class":1090,"line":1108},[1088,7498,3062],{"class":1589},[1088,7500,5838],{"class":1302},[1088,7502,1593],{"class":1306},[1088,7504,5843],{"class":1111},[1088,7506,2670],{"class":1302},[1088,7508,7509],{"class":1090,"line":1322},[1088,7510,1371],{"emptyLinePlaceholder":21},[1088,7512,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541],{"class":1090,"line":1337},[1088,7514,3062],{"class":1589},[1088,7516,1712],{"class":1306},[1088,7518,5877],{"class":1312},[1088,7520,1316],{"class":1306},[1088,7522,1778],{"class":1302},[1088,7524,1490],{"class":1306},[1088,7526,2624],{"class":1306},[1088,7528,2627],{"class":1292},[1088,7530,5891],{"class":1111},[1088,7532,1303],{"class":1302},[1088,7534,1331],{"class":1306},[1088,7536,5256],{"class":1098},[1088,7538,1331],{"class":1306},[1088,7540,1718],{"class":1306},[1088,7542,1382],{"class":1306},[1088,7544,7545,7548,7550,7552,7554,7556],{"class":1090,"line":1349},[1088,7546,7547],{"class":1312},"  key",[1088,7549,1316],{"class":1306},[1088,7551,1393],{"class":1306},[1088,7553,1789],{"class":1098},[1088,7555,1331],{"class":1306},[1088,7557,1334],{"class":1306},[1088,7559,7560,7563,7565,7567,7569],{"class":1090,"line":1360},[1088,7561,7562],{"class":1111},"  default",[1088,7564,1316],{"class":1306},[1088,7566,4963],{"class":1306},[1088,7568,1827],{"class":1589},[1088,7570,7571],{"class":1302}," []\n",[1088,7573,7574,7576],{"class":1090,"line":1368},[1088,7575,1490],{"class":1306},[1088,7577,1493],{"class":1302},[1088,7579,7580],{"class":1090,"line":1374},[1088,7581,1371],{"emptyLinePlaceholder":21},[1088,7583,7584,7586,7589,7591,7594,7596,7598,7600],{"class":1090,"line":1385},[1088,7585,3062],{"class":1589},[1088,7587,7588],{"class":1302}," items ",[1088,7590,1593],{"class":1306},[1088,7592,7593],{"class":1111}," computed",[1088,7595,1303],{"class":1302},[1088,7597,1807],{"class":1306},[1088,7599,1827],{"class":1589},[1088,7601,1319],{"class":1302},[1088,7603,7604],{"class":1090,"line":1401},[1088,7605,7606],{"class":1306},"  {\n",[1088,7608,7609,7612,7614,7616,7619,7621],{"class":1090,"line":1407},[1088,7610,7611],{"class":1312},"    label",[1088,7613,1316],{"class":1306},[1088,7615,1393],{"class":1306},[1088,7617,7618],{"class":1098},"New chat",[1088,7620,1331],{"class":1306},[1088,7622,1334],{"class":1306},[1088,7624,7625,7628,7630,7632,7635,7637],{"class":1090,"line":1412},[1088,7626,7627],{"class":1312},"    to",[1088,7629,1316],{"class":1306},[1088,7631,1393],{"class":1306},[1088,7633,7634],{"class":1098},"\u002F",[1088,7636,1331],{"class":1306},[1088,7638,1334],{"class":1306},[1088,7640,7641,7644,7646,7648,7651,7653],{"class":1090,"line":1435},[1088,7642,7643],{"class":1312},"    icon",[1088,7645,1316],{"class":1306},[1088,7647,1393],{"class":1306},[1088,7649,7650],{"class":1098},"i-lucide-plus-square",[1088,7652,1331],{"class":1306},[1088,7654,1334],{"class":1306},[1088,7656,7657,7660,7662,7665,7667,7670,7673,7675,7677],{"class":1090,"line":1440},[1088,7658,7659],{"class":1312},"    active",[1088,7661,1316],{"class":1306},[1088,7663,7664],{"class":1302}," route",[1088,7666,1810],{"class":1306},[1088,7668,7669],{"class":1302},"name ",[1088,7671,7672],{"class":1306},"===",[1088,7674,1393],{"class":1306},[1088,7676,6696],{"class":1098},[1088,7678,1357],{"class":1306},[1088,7680,7681],{"class":1090,"line":1450},[1088,7682,1404],{"class":1306},[1088,7684,7685,7688,7690,7692,7694,7696,7698,7700,7702,7704,7706],{"class":1090,"line":1460},[1088,7686,7687],{"class":1306},"  ...",[1088,7689,1789],{"class":1302},[1088,7691,1810],{"class":1306},[1088,7693,3323],{"class":1302},[1088,7695,1810],{"class":1306},[1088,7697,4464],{"class":1111},[1088,7699,1303],{"class":1302},[1088,7701,262],{"class":1944},[1088,7703,1827],{"class":1589},[1088,7705,1953],{"class":1302},[1088,7707,1307],{"class":1306},[1088,7709,7710,7712,7714,7716,7718,7721,7724,7726,7729,7731],{"class":1090,"line":1476},[1088,7711,7611],{"class":1312},[1088,7713,1316],{"class":1306},[1088,7715,2791],{"class":1302},[1088,7717,1810],{"class":1306},[1088,7719,7720],{"class":1302},"title ",[1088,7722,7723],{"class":1306},"||",[1088,7725,1393],{"class":1306},[1088,7727,7728],{"class":1098},"Untitled",[1088,7730,1331],{"class":1306},[1088,7732,1334],{"class":1306},[1088,7734,7735,7737,7739,7741,7743,7745,7747,7749,7751,7753],{"class":1090,"line":1482},[1088,7736,7627],{"class":1312},[1088,7738,1316],{"class":1306},[1088,7740,3672],{"class":1306},[1088,7742,5382],{"class":1098},[1088,7744,5385],{"class":1306},[1088,7746,262],{"class":1302},[1088,7748,1810],{"class":1306},[1088,7750,2019],{"class":1302},[1088,7752,5394],{"class":1306},[1088,7754,1334],{"class":1306},[1088,7756,7757,7759,7761,7763,7765,7767,7769,7772,7774,7776,7778],{"class":1090,"line":1487},[1088,7758,7659],{"class":1312},[1088,7760,1316],{"class":1306},[1088,7762,7664],{"class":1302},[1088,7764,1810],{"class":1306},[1088,7766,5908],{"class":1302},[1088,7768,1810],{"class":1306},[1088,7770,7771],{"class":1302},"id ",[1088,7773,7672],{"class":1306},[1088,7775,2791],{"class":1302},[1088,7777,1810],{"class":1306},[1088,7779,7780],{"class":1302},"id\n",[1088,7782,7783,7785],{"class":1090,"line":2276},[1088,7784,2415],{"class":1306},[1088,7786,1974],{"class":1302},[1088,7788,7789],{"class":1090,"line":2289},[1088,7790,2322],{"class":1302},[1088,7792,7793,7795,7797],{"class":1090,"line":2319},[1088,7794,1637],{"class":1306},[1088,7796,5113],{"class":1312},[1088,7798,1567],{"class":1306},[1088,7800,7801],{"class":1090,"line":2325},[1088,7802,1371],{"emptyLinePlaceholder":21},[1088,7804,7805,7807,7809],{"class":1090,"line":2330},[1088,7806,1561],{"class":1306},[1088,7808,1564],{"class":1312},[1088,7810,1567],{"class":1306},[1088,7812,7813,7815,7817,7820,7822,7824,7827,7829,7831,7833,7835,7838,7840],{"class":1090,"line":2362},[1088,7814,1574],{"class":1306},[1088,7816,7449],{"class":1312},[1088,7818,7819],{"class":1589}," :items",[1088,7821,1593],{"class":1306},[1088,7823,1520],{"class":1306},[1088,7825,7826],{"class":1098},"items",[1088,7828,1520],{"class":1306},[1088,7830,5466],{"class":1589},[1088,7832,1593],{"class":1306},[1088,7834,1520],{"class":1306},[1088,7836,7837],{"class":1098},"m-2",[1088,7839,1520],{"class":1306},[1088,7841,1567],{"class":1306},[1088,7843,7844,7846],{"class":1090,"line":2378},[1088,7845,1583],{"class":1306},[1088,7847,7848],{"class":1312},"UButton\n",[1088,7850,7851,7854,7856,7858,7861],{"class":1090,"line":2396},[1088,7852,7853],{"class":1589},"      icon",[1088,7855,1593],{"class":1306},[1088,7857,1520],{"class":1306},[1088,7859,7860],{"class":1098},"i-lucide-messages-square",[1088,7862,5539],{"class":1306},[1088,7864,7865,7868,7870,7872,7875],{"class":1090,"line":2412},[1088,7866,7867],{"class":1589},"      variant",[1088,7869,1593],{"class":1306},[1088,7871,1520],{"class":1306},[1088,7873,7874],{"class":1098},"ghost",[1088,7876,5539],{"class":1306},[1088,7878,7879,7882,7884,7886,7889],{"class":1090,"line":2420},[1088,7880,7881],{"class":1589},"      label",[1088,7883,1593],{"class":1306},[1088,7885,1520],{"class":1306},[1088,7887,7888],{"class":1098},"Chats History",[1088,7890,5539],{"class":1306},[1088,7892,7893,7895,7897,7899,7901],{"class":1090,"line":3415},[1088,7894,6266],{"class":1589},[1088,7896,1593],{"class":1306},[1088,7898,1520],{"class":1306},[1088,7900,5624],{"class":1098},[1088,7902,5539],{"class":1306},[1088,7904,7905,7908,7910,7912,7915],{"class":1090,"line":3428},[1088,7906,7907],{"class":1589},"      class",[1088,7909,1593],{"class":1306},[1088,7911,1520],{"class":1306},[1088,7913,7914],{"class":1098},"w-fit",[1088,7916,5539],{"class":1306},[1088,7918,7919],{"class":1090,"line":3433},[1088,7920,7921],{"class":1306},"    \u002F>\n",[1088,7923,7924,7926,7928],{"class":1090,"line":3439},[1088,7925,1628],{"class":1306},[1088,7927,7449],{"class":1312},[1088,7929,1567],{"class":1306},[1088,7931,7932,7934,7936],{"class":1090,"line":3470},[1088,7933,1637],{"class":1306},[1088,7935,1564],{"class":1312},[1088,7937,1567],{"class":1306},[981,7939,7941],{"id":7940},"integrating-history-in-the-home-page","Integrating history in the home page",[1279,7943,7944],{},[1697,7945,7946],{},[1079,7947,7950],{"className":1551,"code":7948,"filename":5103,"highlights":7949,"language":34,"meta":1084,"style":1084},"\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",[2412,2420,3415],[1038,7951,7952,7972,7988,8004,8008,8020,8042,8046,8058,8062,8066,8090,8104,8112,8120,8134,8170,8174,8178,8184,8188,8192,8214,8218,8226,8230,8238,8256,8270,8280,8289,8301,8319,8337,8341,8349,8353,8359,8371,8383,8395,8407,8419,8423,8441,8449,8457,8465,8473],{"__ignoreMap":1084},[1088,7953,7954,7956,7958,7960,7962,7964,7966,7968,7970],{"class":1090,"line":1091},[1088,7955,1561],{"class":1306},[1088,7957,5113],{"class":1312},[1088,7959,5116],{"class":1589},[1088,7961,5119],{"class":1589},[1088,7963,1593],{"class":1306},[1088,7965,1520],{"class":1306},[1088,7967,1285],{"class":1098},[1088,7969,1520],{"class":1306},[1088,7971,1567],{"class":1306},[1088,7973,7974,7976,7978,7980,7982,7984,7986],{"class":1090,"line":1108},[1088,7975,3062],{"class":1589},[1088,7977,5136],{"class":1302},[1088,7979,1593],{"class":1306},[1088,7981,5141],{"class":1111},[1088,7983,1303],{"class":1302},[1088,7985,5146],{"class":1306},[1088,7987,1493],{"class":1302},[1088,7989,7990,7992,7994,7996,7998,8000,8002],{"class":1090,"line":1322},[1088,7991,3062],{"class":1589},[1088,7993,5155],{"class":1302},[1088,7995,1593],{"class":1306},[1088,7997,5141],{"class":1111},[1088,7999,1303],{"class":1302},[1088,8001,5164],{"class":1468},[1088,8003,1493],{"class":1302},[1088,8005,8006],{"class":1090,"line":1337},[1088,8007,1371],{"emptyLinePlaceholder":21},[1088,8009,8010,8012,8014,8016,8018],{"class":1090,"line":1349},[1088,8011,2598],{"class":1589},[1088,8013,5177],{"class":1589},[1088,8015,5180],{"class":1111},[1088,8017,1807],{"class":1306},[1088,8019,1382],{"class":1306},[1088,8021,8022,8024,8026,8028,8030,8032,8034,8036,8038,8040],{"class":1090,"line":1360},[1088,8023,3529],{"class":1292},[1088,8025,1953],{"class":1312},[1088,8027,3534],{"class":1306},[1088,8029,5195],{"class":1302},[1088,8031,1810],{"class":1306},[1088,8033,3323],{"class":1302},[1088,8035,1810],{"class":1306},[1088,8037,5204],{"class":1111},[1088,8039,5207],{"class":1312},[1088,8041,5210],{"class":1292},[1088,8043,8044],{"class":1090,"line":1368},[1088,8045,1371],{"emptyLinePlaceholder":21},[1088,8047,8048,8050,8052,8054,8056],{"class":1090,"line":1374},[1088,8049,5219],{"class":1302},[1088,8051,1810],{"class":1306},[1088,8053,3323],{"class":1302},[1088,8055,2624],{"class":1306},[1088,8057,4355],{"class":1468},[1088,8059,8060],{"class":1090,"line":1385},[1088,8061,1371],{"emptyLinePlaceholder":21},[1088,8063,8064],{"class":1090,"line":1401},[1088,8065,5236],{"class":1472},[1088,8067,8068,8070,8072,8074,8076,8078,8080,8082,8084,8086,8088],{"class":1090,"line":1407},[1088,8069,2614],{"class":1589},[1088,8071,2791],{"class":1302},[1088,8073,2624],{"class":1306},[1088,8075,2627],{"class":1292},[1088,8077,5249],{"class":1111},[1088,8079,1303],{"class":1312},[1088,8081,1331],{"class":1306},[1088,8083,5256],{"class":1098},[1088,8085,1331],{"class":1306},[1088,8087,1718],{"class":1306},[1088,8089,1382],{"class":1306},[1088,8091,8092,8094,8096,8098,8100,8102],{"class":1090,"line":1412},[1088,8093,5267],{"class":1312},[1088,8095,1316],{"class":1306},[1088,8097,1393],{"class":1306},[1088,8099,5274],{"class":1098},[1088,8101,1331],{"class":1306},[1088,8103,1334],{"class":1306},[1088,8105,8106,8108,8110],{"class":1090,"line":1435},[1088,8107,5283],{"class":1312},[1088,8109,1316],{"class":1306},[1088,8111,1382],{"class":1306},[1088,8113,8114,8116,8118],{"class":1090,"line":1440},[1088,8115,3363],{"class":1312},[1088,8117,1316],{"class":1306},[1088,8119,1382],{"class":1306},[1088,8121,8122,8124,8126,8128,8130,8132],{"class":1090,"line":1450},[1088,8123,4497],{"class":1312},[1088,8125,1316],{"class":1306},[1088,8127,1393],{"class":1306},[1088,8129,2149],{"class":1098},[1088,8131,1331],{"class":1306},[1088,8133,1334],{"class":1306},[1088,8135,8136,8138,8140,8142,8144,8146,8148,8150,8152,8154,8156,8158,8160,8162,8164,8166,8168],{"class":1090,"line":1460},[1088,8137,4530],{"class":1312},[1088,8139,1316],{"class":1306},[1088,8141,1420],{"class":1312},[1088,8143,1867],{"class":1306},[1088,8145,2521],{"class":1312},[1088,8147,1316],{"class":1306},[1088,8149,1393],{"class":1306},[1088,8151,5328],{"class":1098},[1088,8153,1331],{"class":1306},[1088,8155,1718],{"class":1306},[1088,8157,1721],{"class":1312},[1088,8159,1316],{"class":1306},[1088,8161,5339],{"class":1302},[1088,8163,1810],{"class":1306},[1088,8165,3323],{"class":1302},[1088,8167,1734],{"class":1306},[1088,8169,3169],{"class":1312},[1088,8171,8172],{"class":1090,"line":1476},[1088,8173,4369],{"class":1306},[1088,8175,8176],{"class":1090,"line":1482},[1088,8177,1479],{"class":1306},[1088,8179,8180,8182],{"class":1090,"line":1487},[1088,8181,2415],{"class":1306},[1088,8183,1493],{"class":1312},[1088,8185,8186],{"class":1090,"line":2276},[1088,8187,1371],{"emptyLinePlaceholder":21},[1088,8189,8190],{"class":1090,"line":2289},[1088,8191,5370],{"class":1472},[1088,8193,8194,8196,8198,8200,8202,8204,8206,8208,8210,8212],{"class":1090,"line":2319},[1088,8195,5375],{"class":1111},[1088,8197,1303],{"class":1312},[1088,8199,3678],{"class":1306},[1088,8201,5382],{"class":1098},[1088,8203,5385],{"class":1306},[1088,8205,262],{"class":1302},[1088,8207,1810],{"class":1306},[1088,8209,2019],{"class":1302},[1088,8211,5394],{"class":1306},[1088,8213,1493],{"class":1312},[1088,8215,8216],{"class":1090,"line":2325},[1088,8217,5401],{"class":1306},[1088,8219,8220,8222,8224],{"class":1090,"line":2330},[1088,8221,1637],{"class":1306},[1088,8223,5113],{"class":1312},[1088,8225,1567],{"class":1306},[1088,8227,8228],{"class":1090,"line":2362},[1088,8229,1371],{"emptyLinePlaceholder":21},[1088,8231,8232,8234,8236],{"class":1090,"line":2378},[1088,8233,1561],{"class":1306},[1088,8235,1564],{"class":1312},[1088,8237,1567],{"class":1306},[1088,8239,8240,8242,8244,8246,8248,8250,8252,8254],{"class":1090,"line":2396},[1088,8241,1574],{"class":1306},[1088,8243,5428],{"class":1312},[1088,8245,5431],{"class":1589},[1088,8247,1593],{"class":1306},[1088,8249,1520],{"class":1306},[1088,8251,5438],{"class":1098},[1088,8253,1520],{"class":1306},[1088,8255,1567],{"class":1306},[1088,8257,8259,8261,8263,8265,8268],{"class":8258,"line":2412},[1090,1571],[1088,8260,1583],{"class":1306},[1088,8262,1564],{"class":1312},[1088,8264,5451],{"class":1306},[1088,8266,8267],{"class":1589},"header",[1088,8269,1567],{"class":1306},[1088,8271,8273,8275,8278],{"class":8272,"line":2420},[1090,1571],[1088,8274,1607],{"class":1306},[1088,8276,8277],{"class":1312},"ChatsHistory",[1088,8279,1613],{"class":1306},[1088,8281,8283,8285,8287],{"class":8282,"line":3415},[1090,1571],[1088,8284,1618],{"class":1306},[1088,8286,1564],{"class":1312},[1088,8288,1567],{"class":1306},[1088,8290,8291,8293,8295,8297,8299],{"class":1090,"line":3428},[1088,8292,1583],{"class":1306},[1088,8294,1564],{"class":1312},[1088,8296,5451],{"class":1306},[1088,8298,5454],{"class":1589},[1088,8300,1567],{"class":1306},[1088,8302,8303,8305,8307,8309,8311,8313,8315,8317],{"class":1090,"line":3433},[1088,8304,1607],{"class":1306},[1088,8306,5463],{"class":1312},[1088,8308,5466],{"class":1589},[1088,8310,1593],{"class":1306},[1088,8312,1520],{"class":1306},[1088,8314,5473],{"class":1098},[1088,8316,1520],{"class":1306},[1088,8318,1567],{"class":1306},[1088,8320,8321,8323,8325,8327,8329,8331,8333,8335],{"class":1090,"line":3439},[1088,8322,5482],{"class":1306},[1088,8324,5485],{"class":1312},[1088,8326,5466],{"class":1589},[1088,8328,1593],{"class":1306},[1088,8330,1520],{"class":1306},[1088,8332,5494],{"class":1098},[1088,8334,1520],{"class":1306},[1088,8336,1567],{"class":1306},[1088,8338,8339],{"class":1090,"line":3470},[1088,8340,5503],{"class":1302},[1088,8342,8343,8345,8347],{"class":1090,"line":3514},[1088,8344,5508],{"class":1306},[1088,8346,5485],{"class":1312},[1088,8348,1567],{"class":1306},[1088,8350,8351],{"class":1090,"line":3521},[1088,8352,1371],{"emptyLinePlaceholder":21},[1088,8354,8355,8357],{"class":1090,"line":3526},[1088,8356,5482],{"class":1306},[1088,8358,5524],{"class":1312},[1088,8360,8361,8363,8365,8367,8369],{"class":1090,"line":3544},[1088,8362,5530],{"class":1589},[1088,8364,1593],{"class":1306},[1088,8366,1520],{"class":1306},[1088,8368,5195],{"class":1098},[1088,8370,5539],{"class":1306},[1088,8372,8373,8375,8377,8379,8381],{"class":1090,"line":3583},[1088,8374,5545],{"class":1589},[1088,8376,1593],{"class":1306},[1088,8378,1520],{"class":1306},[1088,8380,5552],{"class":1098},[1088,8382,5539],{"class":1306},[1088,8384,8385,8387,8389,8391,8393],{"class":1090,"line":3589},[1088,8386,5560],{"class":1589},[1088,8388,1593],{"class":1306},[1088,8390,1520],{"class":1306},[1088,8392,5567],{"class":1098},[1088,8394,5539],{"class":1306},[1088,8396,8397,8399,8401,8403,8405],{"class":1090,"line":3594},[1088,8398,5575],{"class":1589},[1088,8400,1593],{"class":1306},[1088,8402,1520],{"class":1306},[1088,8404,5582],{"class":1098},[1088,8406,5539],{"class":1306},[1088,8408,8409,8411,8413,8415,8417],{"class":1090,"line":3600},[1088,8410,5590],{"class":1589},[1088,8412,1593],{"class":1306},[1088,8414,1520],{"class":1306},[1088,8416,5597],{"class":1098},[1088,8418,5539],{"class":1306},[1088,8420,8421],{"class":1090,"line":3620},[1088,8422,5605],{"class":1306},[1088,8424,8425,8427,8429,8431,8433,8435,8437,8439],{"class":1090,"line":3648},[1088,8426,5611],{"class":1306},[1088,8428,5614],{"class":1312},[1088,8430,5617],{"class":1589},[1088,8432,1593],{"class":1306},[1088,8434,1520],{"class":1306},[1088,8436,5624],{"class":1098},[1088,8438,1520],{"class":1306},[1088,8440,1613],{"class":1306},[1088,8442,8443,8445,8447],{"class":1090,"line":3664},[1088,8444,5508],{"class":1306},[1088,8446,5078],{"class":1312},[1088,8448,1567],{"class":1306},[1088,8450,8451,8453,8455],{"class":1090,"line":3683},[1088,8452,5642],{"class":1306},[1088,8454,5463],{"class":1312},[1088,8456,1567],{"class":1306},[1088,8458,8459,8461,8463],{"class":1090,"line":3711},[1088,8460,1618],{"class":1306},[1088,8462,1564],{"class":1312},[1088,8464,1567],{"class":1306},[1088,8466,8467,8469,8471],{"class":1090,"line":3718},[1088,8468,1628],{"class":1306},[1088,8470,5428],{"class":1312},[1088,8472,1567],{"class":1306},[1088,8474,8475,8477,8479],{"class":1090,"line":3723},[1088,8476,1637],{"class":1306},[1088,8478,1564],{"class":1312},[1088,8480,1567],{"class":1306},[981,8482,8484],{"id":8483},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1279,8486,8487],{},[1697,8488,8489],{},[1079,8490,8493],{"className":1551,"code":8491,"filename":5732,"highlights":8492,"language":34,"meta":1084,"style":1084},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isReasoningStreaming } 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=\"isReasoningStreaming(message, index, chat)\"\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              \u003CMDC\n                v-else-if=\"isTextUIPart(part)\"\n                :value=\"part.text\"\n                :cache-key=\"`${message.id}-${index}`\"\n                class=\"*:first:mt-0 *:last:mb-0\"\n              \u002F>\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",[3963,3969,3986],[1038,8494,8495,8515,8541,8559,8577,8581,8593,8605,8609,8613,8655,8659,8675,8715,8719,8723,8739,8743,8747,8763,8781,8799,8813,8837,8845,8857,8861,8885,8899,8903,8907,8919,8931,8945,8959,8971,8977,8981,8987,8991,9009,9019,9039,9065,9077,9081,9085,9089,9093,9105,9133,9143,9147,9153,9161,9165,9173,9191,9203,9211,9219,9231,9250,9257,9270,9282,9286,9298,9302,9326,9392,9398,9410,9422,9434,9438,9444,9456,9468,9480,9484,9492,9496,9502,9514,9526,9538,9550,9554,9562,9570,9578,9582,9588,9600,9612,9624,9636,9648,9652,9658,9670,9682,9694,9706,9710,9718,9726,9734,9742],{"__ignoreMap":1084},[1088,8496,8497,8499,8501,8503,8505,8507,8509,8511,8513],{"class":1090,"line":1091},[1088,8498,1561],{"class":1306},[1088,8500,5113],{"class":1312},[1088,8502,5116],{"class":1589},[1088,8504,5119],{"class":1589},[1088,8506,1593],{"class":1306},[1088,8508,1520],{"class":1306},[1088,8510,1285],{"class":1098},[1088,8512,1520],{"class":1306},[1088,8514,1567],{"class":1306},[1088,8516,8517,8519,8521,8523,8525,8527,8529,8531,8533,8535,8537,8539],{"class":1090,"line":1108},[1088,8518,1709],{"class":1292},[1088,8520,1712],{"class":1306},[1088,8522,5765],{"class":1302},[1088,8524,1718],{"class":1306},[1088,8526,5770],{"class":1302},[1088,8528,1718],{"class":1306},[1088,8530,5775],{"class":1302},[1088,8532,1734],{"class":1306},[1088,8534,1737],{"class":1292},[1088,8536,1393],{"class":1306},[1088,8538,2535],{"class":1098},[1088,8540,1357],{"class":1306},[1088,8542,8543,8545,8547,8549,8551,8553,8555,8557],{"class":1090,"line":1322},[1088,8544,1709],{"class":1292},[1088,8546,1712],{"class":1306},[1088,8548,5795],{"class":1302},[1088,8550,1734],{"class":1306},[1088,8552,1737],{"class":1292},[1088,8554,1393],{"class":1306},[1088,8556,5804],{"class":1098},[1088,8558,1357],{"class":1306},[1088,8560,8561,8563,8565,8567,8569,8571,8573,8575],{"class":1090,"line":1337},[1088,8562,1709],{"class":1292},[1088,8564,1712],{"class":1306},[1088,8566,5816],{"class":1302},[1088,8568,1734],{"class":1306},[1088,8570,1737],{"class":1292},[1088,8572,1393],{"class":1306},[1088,8574,5825],{"class":1098},[1088,8576,1357],{"class":1306},[1088,8578,8579],{"class":1090,"line":1349},[1088,8580,1371],{"emptyLinePlaceholder":21},[1088,8582,8583,8585,8587,8589,8591],{"class":1090,"line":1360},[1088,8584,3062],{"class":1589},[1088,8586,5838],{"class":1302},[1088,8588,1593],{"class":1306},[1088,8590,5843],{"class":1111},[1088,8592,2670],{"class":1302},[1088,8594,8595,8597,8599,8601,8603],{"class":1090,"line":1368},[1088,8596,3062],{"class":1589},[1088,8598,5852],{"class":1302},[1088,8600,1593],{"class":1306},[1088,8602,5857],{"class":1111},[1088,8604,2670],{"class":1302},[1088,8606,8607],{"class":1090,"line":1374},[1088,8608,1371],{"emptyLinePlaceholder":21},[1088,8610,8611],{"class":1090,"line":1385},[1088,8612,5868],{"class":1472},[1088,8614,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8647,8649,8651,8653],{"class":1090,"line":1401},[1088,8616,3062],{"class":1589},[1088,8618,1712],{"class":1306},[1088,8620,5877],{"class":1312},[1088,8622,1316],{"class":1306},[1088,8624,5882],{"class":1302},[1088,8626,1490],{"class":1306},[1088,8628,2624],{"class":1306},[1088,8630,2627],{"class":1292},[1088,8632,5891],{"class":1111},[1088,8634,1303],{"class":1302},[1088,8636,3678],{"class":1306},[1088,8638,5898],{"class":1098},[1088,8640,5385],{"class":1306},[1088,8642,5903],{"class":1302},[1088,8644,1810],{"class":1306},[1088,8646,5908],{"class":1302},[1088,8648,1810],{"class":1306},[1088,8650,2019],{"class":1302},[1088,8652,5394],{"class":1306},[1088,8654,1493],{"class":1302},[1088,8656,8657],{"class":1090,"line":1407},[1088,8658,1371],{"emptyLinePlaceholder":21},[1088,8660,8661,8663,8665,8667,8669,8671,8673],{"class":1090,"line":1412},[1088,8662,5925],{"class":1292},[1088,8664,1953],{"class":1302},[1088,8666,3534],{"class":1306},[1088,8668,5932],{"class":1302},[1088,8670,1810],{"class":1306},[1088,8672,5937],{"class":1302},[1088,8674,1307],{"class":1306},[1088,8676,8677,8679,8681,8683,8685,8687,8689,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8713],{"class":1090,"line":1435},[1088,8678,5944],{"class":1292},[1088,8680,2900],{"class":1111},[1088,8682,1303],{"class":1312},[1088,8684,1867],{"class":1306},[1088,8686,3556],{"class":1312},[1088,8688,1316],{"class":1306},[1088,8690,3562],{"class":3561},[1088,8692,1718],{"class":1306},[1088,8694,3567],{"class":1312},[1088,8696,1316],{"class":1306},[1088,8698,1393],{"class":1306},[1088,8700,3574],{"class":1098},[1088,8702,1331],{"class":1306},[1088,8704,1718],{"class":1306},[1088,8706,5973],{"class":1312},[1088,8708,1316],{"class":1306},[1088,8710,4170],{"class":1468},[1088,8712,1734],{"class":1306},[1088,8714,1493],{"class":1312},[1088,8716,8717],{"class":1090,"line":1440},[1088,8718,5401],{"class":1306},[1088,8720,8721],{"class":1090,"line":1450},[1088,8722,1371],{"emptyLinePlaceholder":21},[1088,8724,8725,8727,8729,8731,8733,8735,8737],{"class":1090,"line":1460},[1088,8726,3062],{"class":1589},[1088,8728,5136],{"class":1302},[1088,8730,1593],{"class":1306},[1088,8732,5141],{"class":1111},[1088,8734,1303],{"class":1302},[1088,8736,5146],{"class":1306},[1088,8738,1493],{"class":1302},[1088,8740,8741],{"class":1090,"line":1476},[1088,8742,1371],{"emptyLinePlaceholder":21},[1088,8744,8745],{"class":1090,"line":1482},[1088,8746,6014],{"class":1472},[1088,8748,8749,8751,8753,8755,8757,8759,8761],{"class":1090,"line":1487},[1088,8750,3062],{"class":1589},[1088,8752,6022],{"class":1302},[1088,8754,1593],{"class":1306},[1088,8756,1904],{"class":1306},[1088,8758,5795],{"class":1111},[1088,8760,1303],{"class":1302},[1088,8762,1307],{"class":1306},[1088,8764,8765,8767,8769,8771,8773,8775,8777,8779],{"class":1090,"line":2276},[1088,8766,1800],{"class":1312},[1088,8768,1316],{"class":1306},[1088,8770,6042],{"class":1302},[1088,8772,1810],{"class":1306},[1088,8774,3323],{"class":1302},[1088,8776,1810],{"class":1306},[1088,8778,2019],{"class":1302},[1088,8780,1334],{"class":1306},[1088,8782,8783,8785,8787,8789,8791,8793,8795,8797],{"class":1090,"line":2289},[1088,8784,1960],{"class":1312},[1088,8786,1316],{"class":1306},[1088,8788,6042],{"class":1302},[1088,8790,1810],{"class":1306},[1088,8792,3323],{"class":1302},[1088,8794,1810],{"class":1306},[1088,8796,1998],{"class":1302},[1088,8798,1334],{"class":1306},[1088,8800,8801,8803,8805,8807,8809,8811],{"class":1090,"line":2319},[1088,8802,6077],{"class":1312},[1088,8804,1316],{"class":1306},[1088,8806,1904],{"class":1306},[1088,8808,5765],{"class":1111},[1088,8810,1303],{"class":1302},[1088,8812,1307],{"class":1306},[1088,8814,8815,8817,8819,8821,8823,8825,8827,8829,8831,8833,8835],{"class":1090,"line":2325},[1088,8816,6093],{"class":1312},[1088,8818,1316],{"class":1306},[1088,8820,3672],{"class":1306},[1088,8822,5898],{"class":1098},[1088,8824,5385],{"class":1306},[1088,8826,5932],{"class":1302},[1088,8828,1810],{"class":1306},[1088,8830,3323],{"class":1302},[1088,8832,1810],{"class":1306},[1088,8834,2019],{"class":1302},[1088,8836,6114],{"class":1306},[1088,8838,8839,8841,8843],{"class":1090,"line":2330},[1088,8840,2415],{"class":1306},[1088,8842,1884],{"class":1302},[1088,8844,1334],{"class":1306},[1088,8846,8847,8849,8851,8853,8855],{"class":1090,"line":2362},[1088,8848,6129],{"class":1312},[1088,8850,1303],{"class":1306},[1088,8852,6134],{"class":1944},[1088,8854,1884],{"class":1306},[1088,8856,1382],{"class":1306},[1088,8858,8859],{"class":1090,"line":2378},[1088,8860,6144],{"class":1472},[1088,8862,8863,8865,8867,8869,8871,8873,8875,8877,8879,8881,8883],{"class":1090,"line":2396},[1088,8864,6150],{"class":1292},[1088,8866,1953],{"class":1312},[1088,8868,6134],{"class":1302},[1088,8870,1810],{"class":1306},[1088,8872,6159],{"class":1302},[1088,8874,3350],{"class":1306},[1088,8876,1393],{"class":1306},[1088,8878,4317],{"class":1098},[1088,8880,1331],{"class":1306},[1088,8882,3539],{"class":1312},[1088,8884,1307],{"class":1306},[1088,8886,8887,8889,8891,8893,8895,8897],{"class":1090,"line":2412},[1088,8888,6177],{"class":1111},[1088,8890,1303],{"class":1312},[1088,8892,1331],{"class":1306},[1088,8894,1789],{"class":1098},[1088,8896,1331],{"class":1306},[1088,8898,1493],{"class":1312},[1088,8900,8901],{"class":1090,"line":2420},[1088,8902,1479],{"class":1306},[1088,8904,8905],{"class":1090,"line":3415},[1088,8906,1404],{"class":1306},[1088,8908,8909,8911,8913,8915,8917],{"class":1090,"line":3428},[1088,8910,6203],{"class":1312},[1088,8912,1303],{"class":1306},[1088,8914,6208],{"class":1944},[1088,8916,1884],{"class":1306},[1088,8918,1382],{"class":1306},[1088,8920,8921,8923,8925,8927,8929],{"class":1090,"line":3433},[1088,8922,6218],{"class":1302},[1088,8924,1810],{"class":1306},[1088,8926,6223],{"class":1111},[1088,8928,1303],{"class":1312},[1088,8930,1307],{"class":1306},[1088,8932,8933,8935,8937,8939,8941,8943],{"class":1090,"line":3439},[1088,8934,6233],{"class":1312},[1088,8936,1316],{"class":1306},[1088,8938,1393],{"class":1306},[1088,8940,497],{"class":1098},[1088,8942,1331],{"class":1306},[1088,8944,1334],{"class":1306},[1088,8946,8947,8949,8951,8953,8955,8957],{"class":1090,"line":3470},[1088,8948,6249],{"class":1312},[1088,8950,1316],{"class":1306},[1088,8952,6254],{"class":1302},[1088,8954,1810],{"class":1306},[1088,8956,4469],{"class":1302},[1088,8958,1334],{"class":1306},[1088,8960,8961,8963,8965,8967,8969],{"class":1090,"line":3514},[1088,8962,6266],{"class":1312},[1088,8964,1316],{"class":1306},[1088,8966,1393],{"class":1306},[1088,8968,6208],{"class":1098},[1088,8970,1357],{"class":1306},[1088,8972,8973,8975],{"class":1090,"line":3521},[1088,8974,3377],{"class":1306},[1088,8976,1493],{"class":1312},[1088,8978,8979],{"class":1090,"line":3526},[1088,8980,3586],{"class":1306},[1088,8982,8983,8985],{"class":1090,"line":3544},[1088,8984,1490],{"class":1306},[1088,8986,1493],{"class":1302},[1088,8988,8989],{"class":1090,"line":3583},[1088,8990,1371],{"emptyLinePlaceholder":21},[1088,8992,8993,8995,8997,8999,9001,9003,9005,9007],{"class":1090,"line":3589},[1088,8994,6302],{"class":1589},[1088,8996,6305],{"class":1111},[1088,8998,1303],{"class":1306},[1088,9000,6310],{"class":1944},[1088,9002,1316],{"class":1306},[1088,9004,6315],{"class":1094},[1088,9006,1884],{"class":1306},[1088,9008,1382],{"class":1306},[1088,9010,9011,9013,9015,9017],{"class":1090,"line":3594},[1088,9012,6324],{"class":1302},[1088,9014,1810],{"class":1306},[1088,9016,6329],{"class":1111},[1088,9018,2670],{"class":1312},[1088,9020,9021,9023,9025,9027,9029,9031,9033,9035,9037],{"class":1090,"line":3600},[1088,9022,3529],{"class":1292},[1088,9024,1953],{"class":1312},[1088,9026,5195],{"class":1302},[1088,9028,1810],{"class":1306},[1088,9030,3323],{"class":1302},[1088,9032,1810],{"class":1306},[1088,9034,5204],{"class":1111},[1088,9036,5207],{"class":1312},[1088,9038,1307],{"class":1306},[1088,9040,9041,9043,9045,9047,9049,9051,9053,9055,9057,9059,9061,9063],{"class":1090,"line":3620},[1088,9042,6356],{"class":1302},[1088,9044,1810],{"class":1306},[1088,9046,6361],{"class":1111},[1088,9048,1303],{"class":1312},[1088,9050,1867],{"class":1306},[1088,9052,1721],{"class":1312},[1088,9054,1316],{"class":1306},[1088,9056,5339],{"class":1302},[1088,9058,1810],{"class":1306},[1088,9060,3323],{"class":1302},[1088,9062,1734],{"class":1306},[1088,9064,1493],{"class":1312},[1088,9066,9067,9069,9071,9073,9075],{"class":1090,"line":3648},[1088,9068,6384],{"class":1302},[1088,9070,1810],{"class":1306},[1088,9072,3323],{"class":1302},[1088,9074,2624],{"class":1306},[1088,9076,6393],{"class":1306},[1088,9078,9079],{"class":1090,"line":3664},[1088,9080,3586],{"class":1306},[1088,9082,9083],{"class":1090,"line":3683},[1088,9084,5401],{"class":1306},[1088,9086,9087],{"class":1090,"line":3711},[1088,9088,1371],{"emptyLinePlaceholder":21},[1088,9090,9091],{"class":1090,"line":3718},[1088,9092,6410],{"class":1472},[1088,9094,9095,9097,9099,9101,9103],{"class":1090,"line":3723},[1088,9096,6415],{"class":1111},[1088,9098,1303],{"class":1302},[1088,9100,1807],{"class":1306},[1088,9102,1827],{"class":1589},[1088,9104,1382],{"class":1306},[1088,9106,9107,9109,9111,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131],{"class":1090,"line":3789},[1088,9108,3529],{"class":1292},[1088,9110,1953],{"class":1312},[1088,9112,5932],{"class":1302},[1088,9114,1810],{"class":1306},[1088,9116,3323],{"class":1302},[1088,9118,3844],{"class":1306},[1088,9120,1998],{"class":1302},[1088,9122,1810],{"class":1306},[1088,9124,3823],{"class":1302},[1088,9126,3350],{"class":1306},[1088,9128,3829],{"class":3561},[1088,9130,3539],{"class":1312},[1088,9132,1307],{"class":1306},[1088,9134,9135,9137,9139,9141],{"class":1090,"line":3794},[1088,9136,6356],{"class":1302},[1088,9138,1810],{"class":1306},[1088,9140,6460],{"class":1111},[1088,9142,2670],{"class":1312},[1088,9144,9145],{"class":1090,"line":3799},[1088,9146,3586],{"class":1306},[1088,9148,9149,9151],{"class":1090,"line":3805},[1088,9150,1490],{"class":1306},[1088,9152,1493],{"class":1302},[1088,9154,9155,9157,9159],{"class":1090,"line":3834},[1088,9156,1637],{"class":1306},[1088,9158,5113],{"class":1312},[1088,9160,1567],{"class":1306},[1088,9162,9163],{"class":1090,"line":3875},[1088,9164,1371],{"emptyLinePlaceholder":21},[1088,9166,9167,9169,9171],{"class":1090,"line":3904},[1088,9168,1561],{"class":1306},[1088,9170,1564],{"class":1312},[1088,9172,1567],{"class":1306},[1088,9174,9175,9177,9179,9181,9183,9185,9187,9189],{"class":1090,"line":3916},[1088,9176,1574],{"class":1306},[1088,9178,5428],{"class":1312},[1088,9180,5431],{"class":1589},[1088,9182,1593],{"class":1306},[1088,9184,1520],{"class":1306},[1088,9186,5438],{"class":1098},[1088,9188,1520],{"class":1306},[1088,9190,1567],{"class":1306},[1088,9192,9193,9195,9197,9199,9201],{"class":1090,"line":3932},[1088,9194,1583],{"class":1306},[1088,9196,1564],{"class":1312},[1088,9198,5451],{"class":1306},[1088,9200,8267],{"class":1589},[1088,9202,1567],{"class":1306},[1088,9204,9205,9207,9209],{"class":1090,"line":3946},[1088,9206,1607],{"class":1306},[1088,9208,8277],{"class":1312},[1088,9210,1613],{"class":1306},[1088,9212,9213,9215,9217],{"class":1090,"line":3953},[1088,9214,1618],{"class":1306},[1088,9216,1564],{"class":1312},[1088,9218,1567],{"class":1306},[1088,9220,9221,9223,9225,9227,9229],{"class":1090,"line":3958},[1088,9222,1583],{"class":1306},[1088,9224,1564],{"class":1312},[1088,9226,5451],{"class":1306},[1088,9228,5454],{"class":1589},[1088,9230,1567],{"class":1306},[1088,9232,9234,9236,9238,9240,9242,9244,9246,9248],{"class":9233,"line":3963},[1090,1571],[1088,9235,1607],{"class":1306},[1088,9237,5463],{"class":1312},[1088,9239,5466],{"class":1589},[1088,9241,1593],{"class":1306},[1088,9243,1520],{"class":1306},[1088,9245,6537],{"class":1098},[1088,9247,1520],{"class":1306},[1088,9249,1567],{"class":1306},[1088,9251,9253,9255],{"class":9252,"line":3969},[1090,1571],[1088,9254,5482],{"class":1306},[1088,9256,6548],{"class":1312},[1088,9258,9260,9262,9264,9266,9268],{"class":9259,"line":3986},[1090,1571],[1088,9261,6553],{"class":1589},[1088,9263,1593],{"class":1306},[1088,9265,1520],{"class":1306},[1088,9267,6560],{"class":1098},[1088,9269,5539],{"class":1306},[1088,9271,9272,9274,9276,9278,9280],{"class":1090,"line":4008},[1088,9273,5545],{"class":1589},[1088,9275,1593],{"class":1306},[1088,9277,1520],{"class":1306},[1088,9279,6573],{"class":1098},[1088,9281,5539],{"class":1306},[1088,9283,9284],{"class":1090,"line":4026},[1088,9285,6580],{"class":1589},[1088,9287,9288,9290,9292,9294,9296],{"class":1090,"line":4034},[1088,9289,6585],{"class":1589},[1088,9291,1593],{"class":1306},[1088,9293,1520],{"class":1306},[1088,9295,6592],{"class":1098},[1088,9297,5539],{"class":1306},[1088,9299,9300],{"class":1090,"line":4051},[1088,9301,5605],{"class":1306},[1088,9303,9304,9306,9308,9310,9312,9314,9316,9318,9320,9322,9324],{"class":1090,"line":4072},[1088,9305,5611],{"class":1306},[1088,9307,1564],{"class":1312},[1088,9309,5451],{"class":1306},[1088,9311,371],{"class":1589},[1088,9313,1593],{"class":1306},[1088,9315,1520],{"class":1306},[1088,9317,1867],{"class":1306},[1088,9319,6617],{"class":1302},[1088,9321,1490],{"class":1306},[1088,9323,1520],{"class":1306},[1088,9325,1567],{"class":1306},[1088,9327,9328,9330,9332,9334,9336,9338,9340,9342,9344,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364,9366,9368,9370,9372,9374,9376,9378,9380,9382,9384,9386,9388,9390],{"class":1090,"line":4082},[1088,9329,6628],{"class":1306},[1088,9331,1564],{"class":1312},[1088,9333,6633],{"class":1292},[1088,9335,1593],{"class":1306},[1088,9337,1520],{"class":1306},[1088,9339,6640],{"class":1302},[1088,9341,1718],{"class":1306},[1088,9343,6645],{"class":1302},[1088,9345,6648],{"class":1306},[1088,9347,2619],{"class":1302},[1088,9349,1810],{"class":1306},[1088,9351,2200],{"class":1302},[1088,9353,1520],{"class":1306},[1088,9355,6659],{"class":1306},[1088,9357,6662],{"class":1589},[1088,9359,1593],{"class":1306},[1088,9361,6667],{"class":1306},[1088,9363,4469],{"class":1302},[1088,9365,1810],{"class":1306},[1088,9367,2019],{"class":1302},[1088,9369,1490],{"class":1306},[1088,9371,6678],{"class":1098},[1088,9373,5385],{"class":1306},[1088,9375,6683],{"class":1302},[1088,9377,1810],{"class":1306},[1088,9379,6159],{"class":1302},[1088,9381,1490],{"class":1306},[1088,9383,6678],{"class":1098},[1088,9385,5385],{"class":1306},[1088,9387,6696],{"class":1302},[1088,9389,6699],{"class":1306},[1088,9391,1567],{"class":1306},[1088,9393,9394,9396],{"class":1090,"line":4092},[1088,9395,6706],{"class":1306},[1088,9397,6709],{"class":1312},[1088,9399,9400,9402,9404,9406,9408],{"class":1090,"line":4102},[1088,9401,6714],{"class":1589},[1088,9403,1593],{"class":1306},[1088,9405,1520],{"class":1306},[1088,9407,6721],{"class":1098},[1088,9409,5539],{"class":1306},[1088,9411,9412,9414,9416,9418,9420],{"class":1090,"line":4119},[1088,9413,6728],{"class":1589},[1088,9415,1593],{"class":1306},[1088,9417,1520],{"class":1306},[1088,9419,6735],{"class":1098},[1088,9421,5539],{"class":1306},[1088,9423,9424,9426,9428,9430,9432],{"class":1090,"line":4130},[1088,9425,6742],{"class":1589},[1088,9427,1593],{"class":1306},[1088,9429,1520],{"class":1306},[1088,9431,6749],{"class":1098},[1088,9433,5539],{"class":1306},[1088,9435,9436],{"class":1090,"line":4136},[1088,9437,6756],{"class":1306},[1088,9439,9440,9442],{"class":1090,"line":4142},[1088,9441,6761],{"class":1306},[1088,9443,6764],{"class":1312},[1088,9445,9446,9448,9450,9452,9454],{"class":1090,"line":4152},[1088,9447,6769],{"class":1589},[1088,9449,1593],{"class":1306},[1088,9451,1520],{"class":1306},[1088,9453,6735],{"class":1098},[1088,9455,5539],{"class":1306},[1088,9457,9458,9460,9462,9464,9466],{"class":1090,"line":4162},[1088,9459,6782],{"class":1589},[1088,9461,1593],{"class":1306},[1088,9463,1520],{"class":1306},[1088,9465,6789],{"class":1098},[1088,9467,5539],{"class":1306},[1088,9469,9470,9472,9474,9476,9478],{"class":1090,"line":4175},[1088,9471,6796],{"class":1589},[1088,9473,1593],{"class":1306},[1088,9475,1520],{"class":1306},[1088,9477,6803],{"class":1098},[1088,9479,5539],{"class":1306},[1088,9481,9482],{"class":1090,"line":4190},[1088,9483,6810],{"class":1306},[1088,9485,9486,9488,9490],{"class":1090,"line":4195},[1088,9487,6815],{"class":1306},[1088,9489,6818],{"class":1312},[1088,9491,1567],{"class":1306},[1088,9493,9494],{"class":1090,"line":4200},[1088,9495,1371],{"emptyLinePlaceholder":21},[1088,9497,9498,9500],{"class":1090,"line":4210},[1088,9499,6706],{"class":1306},[1088,9501,6764],{"class":1312},[1088,9503,9504,9506,9508,9510,9512],{"class":1090,"line":4226},[1088,9505,6835],{"class":1589},[1088,9507,1593],{"class":1306},[1088,9509,1520],{"class":1306},[1088,9511,6842],{"class":1098},[1088,9513,5539],{"class":1306},[1088,9515,9516,9518,9520,9522,9524],{"class":1090,"line":4241},[1088,9517,6849],{"class":1589},[1088,9519,1593],{"class":1306},[1088,9521,1520],{"class":1306},[1088,9523,6735],{"class":1098},[1088,9525,5539],{"class":1306},[1088,9527,9528,9530,9532,9534,9536],{"class":1090,"line":4247},[1088,9529,6862],{"class":1589},[1088,9531,1593],{"class":1306},[1088,9533,1520],{"class":1306},[1088,9535,6869],{"class":1098},[1088,9537,5539],{"class":1306},[1088,9539,9540,9542,9544,9546,9548],{"class":1090,"line":4253},[1088,9541,6876],{"class":1589},[1088,9543,1593],{"class":1306},[1088,9545,1520],{"class":1306},[1088,9547,6803],{"class":1098},[1088,9549,5539],{"class":1306},[1088,9551,9552],{"class":1090,"line":4261},[1088,9553,6889],{"class":1306},[1088,9555,9556,9558,9560],{"class":1090,"line":4266},[1088,9557,6894],{"class":1306},[1088,9559,1564],{"class":1312},[1088,9561,1567],{"class":1306},[1088,9563,9564,9566,9568],{"class":1090,"line":4272},[1088,9565,6903],{"class":1306},[1088,9567,1564],{"class":1312},[1088,9569,1567],{"class":1306},[1088,9571,9572,9574,9576],{"class":1090,"line":4292},[1088,9573,5508],{"class":1306},[1088,9575,5084],{"class":1312},[1088,9577,1567],{"class":1306},[1088,9579,9580],{"class":1090,"line":4307},[1088,9581,1371],{"emptyLinePlaceholder":21},[1088,9583,9584,9586],{"class":1090,"line":4324},[1088,9585,5482],{"class":1306},[1088,9587,5524],{"class":1312},[1088,9589,9590,9592,9594,9596,9598],{"class":1090,"line":4347},[1088,9591,5530],{"class":1589},[1088,9593,1593],{"class":1306},[1088,9595,1520],{"class":1306},[1088,9597,5195],{"class":1098},[1088,9599,5539],{"class":1306},[1088,9601,9602,9604,9606,9608,9610],{"class":1090,"line":4358},[1088,9603,6942],{"class":1589},[1088,9605,1593],{"class":1306},[1088,9607,1520],{"class":1306},[1088,9609,6949],{"class":1098},[1088,9611,5539],{"class":1306},[1088,9613,9614,9616,9618,9620,9622],{"class":1090,"line":4366},[1088,9615,5560],{"class":1589},[1088,9617,1593],{"class":1306},[1088,9619,1520],{"class":1306},[1088,9621,5567],{"class":1098},[1088,9623,5539],{"class":1306},[1088,9625,9626,9628,9630,9632,9634],{"class":1090,"line":4372},[1088,9627,6585],{"class":1589},[1088,9629,1593],{"class":1306},[1088,9631,1520],{"class":1306},[1088,9633,6974],{"class":1098},[1088,9635,5539],{"class":1306},[1088,9637,9638,9640,9642,9644,9646],{"class":1090,"line":4377},[1088,9639,5590],{"class":1589},[1088,9641,1593],{"class":1306},[1088,9643,1520],{"class":1306},[1088,9645,6987],{"class":1098},[1088,9647,5539],{"class":1306},[1088,9649,9650],{"class":1090,"line":4400},[1088,9651,5605],{"class":1306},[1088,9653,9654,9656],{"class":1090,"line":4406},[1088,9655,5611],{"class":1306},[1088,9657,7000],{"class":1312},[1088,9659,9660,9662,9664,9666,9668],{"class":1090,"line":4426},[1088,9661,7005],{"class":1589},[1088,9663,1593],{"class":1306},[1088,9665,1520],{"class":1306},[1088,9667,6573],{"class":1098},[1088,9669,5539],{"class":1306},[1088,9671,9672,9674,9676,9678,9680],{"class":1090,"line":4432},[1088,9673,7018],{"class":1589},[1088,9675,1593],{"class":1306},[1088,9677,1520],{"class":1306},[1088,9679,5624],{"class":1098},[1088,9681,5539],{"class":1306},[1088,9683,9684,9686,9688,9690,9692],{"class":1090,"line":4478},[1088,9685,7031],{"class":1589},[1088,9687,1593],{"class":1306},[1088,9689,1520],{"class":1306},[1088,9691,7038],{"class":1098},[1088,9693,5539],{"class":1306},[1088,9695,9696,9698,9700,9702,9704],{"class":1090,"line":4494},[1088,9697,7045],{"class":1589},[1088,9699,1593],{"class":1306},[1088,9701,1520],{"class":1306},[1088,9703,7052],{"class":1098},[1088,9705,5539],{"class":1306},[1088,9707,9708],{"class":1090,"line":4527},[1088,9709,7059],{"class":1306},[1088,9711,9712,9714,9716],{"class":1090,"line":4541},[1088,9713,5508],{"class":1306},[1088,9715,5078],{"class":1312},[1088,9717,1567],{"class":1306},[1088,9719,9720,9722,9724],{"class":1090,"line":4549},[1088,9721,5642],{"class":1306},[1088,9723,5463],{"class":1312},[1088,9725,1567],{"class":1306},[1088,9727,9728,9730,9732],{"class":1090,"line":4554},[1088,9729,1618],{"class":1306},[1088,9731,1564],{"class":1312},[1088,9733,1567],{"class":1306},[1088,9735,9736,9738,9740],{"class":1090,"line":4561},[1088,9737,1628],{"class":1306},[1088,9739,5428],{"class":1312},[1088,9741,1567],{"class":1306},[1088,9743,9744,9746,9748],{"class":1090,"line":4566},[1088,9745,1637],{"class":1306},[1088,9747,1564],{"class":1312},[1088,9749,1567],{"class":1306},[977,9751,4627,9752,9755,9756,9758],{},[1038,9753,9754],{},"refreshNuxtData('chats')"," call in the chat page's ",[1038,9757,7161],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[981,9760,9762],{"id":9761},"adding-multi-model-support","Adding multi-model support",[977,9764,9765,9766,9769],{},"One of the benefits of using ",[1031,9767,4596],{"href":1067,"rel":9768},[1035]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1116,9771,9773],{"id":9772},"creating-a-models-composable","Creating a models composable",[977,9775,9776,9777,1316],{},"Define the available models and persist the user's selection using ",[1031,9778,9781],{"href":9779,"rel":9780},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1035],[1038,9782,9783],{},"useCookie",[1279,9785,9786],{},[1079,9787,9790],{"className":1283,"code":9788,"filename":9789,"language":1285,"meta":1084,"style":1084},"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",[1038,9791,9792,9805,9816,9859,9900,9941,9946,9950,9980,9997,10003,10007,10013,10020,10025,10029],{"__ignoreMap":1084},[1088,9793,9794,9796,9798,9801,9803],{"class":1090,"line":1091},[1088,9795,1293],{"class":1292},[1088,9797,5177],{"class":1589},[1088,9799,9800],{"class":1111}," useModels",[1088,9802,1807],{"class":1306},[1088,9804,1382],{"class":1306},[1088,9806,9807,9809,9812,9814],{"class":1090,"line":1108},[1088,9808,2614],{"class":1589},[1088,9810,9811],{"class":1302}," models",[1088,9813,2624],{"class":1306},[1088,9815,1319],{"class":1312},[1088,9817,9818,9821,9823,9825,9827,9829,9831,9833,9835,9837,9839,9841,9843,9845,9848,9850,9852,9855,9857],{"class":1090,"line":1322},[1088,9819,9820],{"class":1306},"    {",[1088,9822,3091],{"class":1312},[1088,9824,1316],{"class":1306},[1088,9826,1393],{"class":1306},[1088,9828,3098],{"class":1098},[1088,9830,1331],{"class":1306},[1088,9832,1718],{"class":1306},[1088,9834,3077],{"class":1312},[1088,9836,1316],{"class":1306},[1088,9838,1393],{"class":1306},[1088,9840,3084],{"class":1098},[1088,9842,1331],{"class":1306},[1088,9844,1718],{"class":1306},[1088,9846,9847],{"class":1312}," icon",[1088,9849,1316],{"class":1306},[1088,9851,1393],{"class":1306},[1088,9853,9854],{"class":1098},"i-simple-icons-openai",[1088,9856,1331],{"class":1306},[1088,9858,3103],{"class":1306},[1088,9860,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881,9883,9885,9887,9889,9891,9893,9896,9898],{"class":1090,"line":1337},[1088,9862,9820],{"class":1306},[1088,9864,3091],{"class":1312},[1088,9866,1316],{"class":1306},[1088,9868,1393],{"class":1306},[1088,9870,3129],{"class":1098},[1088,9872,1331],{"class":1306},[1088,9874,1718],{"class":1306},[1088,9876,3077],{"class":1312},[1088,9878,1316],{"class":1306},[1088,9880,1393],{"class":1306},[1088,9882,3116],{"class":1098},[1088,9884,1331],{"class":1306},[1088,9886,1718],{"class":1306},[1088,9888,9847],{"class":1312},[1088,9890,1316],{"class":1306},[1088,9892,1393],{"class":1306},[1088,9894,9895],{"class":1098},"i-simple-icons-anthropic",[1088,9897,1331],{"class":1306},[1088,9899,3103],{"class":1306},[1088,9901,9902,9904,9906,9908,9910,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930,9932,9934,9937,9939],{"class":1090,"line":1349},[1088,9903,9820],{"class":1306},[1088,9905,3091],{"class":1312},[1088,9907,1316],{"class":1306},[1088,9909,1393],{"class":1306},[1088,9911,3159],{"class":1098},[1088,9913,1331],{"class":1306},[1088,9915,1718],{"class":1306},[1088,9917,3077],{"class":1312},[1088,9919,1316],{"class":1306},[1088,9921,1393],{"class":1306},[1088,9923,3146],{"class":1098},[1088,9925,1331],{"class":1306},[1088,9927,1718],{"class":1306},[1088,9929,9847],{"class":1312},[1088,9931,1316],{"class":1306},[1088,9933,1393],{"class":1306},[1088,9935,9936],{"class":1098},"i-simple-icons-google",[1088,9938,1331],{"class":1306},[1088,9940,3164],{"class":1306},[1088,9942,9943],{"class":1090,"line":1360},[1088,9944,9945],{"class":1312},"  ]\n",[1088,9947,9948],{"class":1090,"line":1368},[1088,9949,1371],{"emptyLinePlaceholder":21},[1088,9951,9952,9954,9956,9958,9961,9963,9965,9967,9969,9971,9974,9976,9978],{"class":1090,"line":1374},[1088,9953,2614],{"class":1589},[1088,9955,3269],{"class":1302},[1088,9957,2624],{"class":1306},[1088,9959,9960],{"class":1111}," useCookie",[1088,9962,1561],{"class":1306},[1088,9964,3242],{"class":1094},[1088,9966,2667],{"class":1306},[1088,9968,1303],{"class":1312},[1088,9970,1331],{"class":1306},[1088,9972,9973],{"class":1098},"ai-model",[1088,9975,1331],{"class":1306},[1088,9977,1718],{"class":1306},[1088,9979,1382],{"class":1306},[1088,9981,9982,9985,9987,9989,9991,9993,9995],{"class":1090,"line":1385},[1088,9983,9984],{"class":1111},"    default",[1088,9986,1316],{"class":1306},[1088,9988,4963],{"class":1306},[1088,9990,1827],{"class":1589},[1088,9992,1393],{"class":1306},[1088,9994,3116],{"class":1098},[1088,9996,1357],{"class":1306},[1088,9998,9999,10001],{"class":1090,"line":1401},[1088,10000,2415],{"class":1306},[1088,10002,1493],{"class":1312},[1088,10004,10005],{"class":1090,"line":1407},[1088,10006,1371],{"emptyLinePlaceholder":21},[1088,10008,10009,10011],{"class":1090,"line":1412},[1088,10010,2841],{"class":1292},[1088,10012,1382],{"class":1306},[1088,10014,10015,10018],{"class":1090,"line":1435},[1088,10016,10017],{"class":1302},"    models",[1088,10019,1334],{"class":1306},[1088,10021,10022],{"class":1090,"line":1440},[1088,10023,10024],{"class":1302},"    model\n",[1088,10026,10027],{"class":1090,"line":1450},[1088,10028,3586],{"class":1306},[1088,10030,10031],{"class":1090,"line":1460},[1088,10032,5401],{"class":1306},[1116,10034,10036],{"id":10035},"building-the-model-selector","Building the model selector",[977,10038,1644,10039,10044],{},[1031,10040,10041],{"href":734},[1038,10042,10043],{},"USelectMenu"," component that displays the available models:",[1279,10046,10047],{},[1079,10048,10051],{"className":1551,"code":10049,"filename":10050,"language":34,"meta":1084,"style":1084},"\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",[1038,10052,10053,10073,10106,10110,10127,10131,10149,10181,10185,10193,10197,10205,10212,10225,10239,10253,10266,10279,10284],{"__ignoreMap":1084},[1088,10054,10055,10057,10059,10061,10063,10065,10067,10069,10071],{"class":1090,"line":1091},[1088,10056,1561],{"class":1306},[1088,10058,5113],{"class":1312},[1088,10060,5116],{"class":1589},[1088,10062,5119],{"class":1589},[1088,10064,1593],{"class":1306},[1088,10066,1520],{"class":1306},[1088,10068,1285],{"class":1098},[1088,10070,1520],{"class":1306},[1088,10072,1567],{"class":1306},[1088,10074,10075,10077,10080,10082,10085,10087,10089,10091,10093,10095,10098,10100,10102,10104],{"class":1090,"line":1108},[1088,10076,3062],{"class":1589},[1088,10078,10079],{"class":1302}," model ",[1088,10081,1593],{"class":1306},[1088,10083,10084],{"class":1111}," defineModel",[1088,10086,1561],{"class":1306},[1088,10088,3242],{"class":1094},[1088,10090,2667],{"class":1306},[1088,10092,1303],{"class":1302},[1088,10094,1867],{"class":1306},[1088,10096,10097],{"class":1312}," required",[1088,10099,1316],{"class":1306},[1088,10101,4170],{"class":1468},[1088,10103,1734],{"class":1306},[1088,10105,1493],{"class":1302},[1088,10107,10108],{"class":1090,"line":1322},[1088,10109,1371],{"emptyLinePlaceholder":21},[1088,10111,10112,10114,10116,10119,10121,10123,10125],{"class":1090,"line":1337},[1088,10113,3062],{"class":1589},[1088,10115,1712],{"class":1306},[1088,10117,10118],{"class":1302}," models ",[1088,10120,1490],{"class":1306},[1088,10122,2624],{"class":1306},[1088,10124,9800],{"class":1111},[1088,10126,2670],{"class":1302},[1088,10128,10129],{"class":1090,"line":1349},[1088,10130,1371],{"emptyLinePlaceholder":21},[1088,10132,10133,10135,10138,10140,10142,10144,10146],{"class":1090,"line":1360},[1088,10134,3062],{"class":1589},[1088,10136,10137],{"class":1302}," selectedModel ",[1088,10139,1593],{"class":1306},[1088,10141,7593],{"class":1111},[1088,10143,1303],{"class":1302},[1088,10145,1807],{"class":1306},[1088,10147,10148],{"class":1589}," =>\n",[1088,10150,10151,10154,10156,10159,10161,10163,10165,10167,10169,10172,10174,10176,10178],{"class":1090,"line":1368},[1088,10152,10153],{"class":1302},"  models",[1088,10155,1810],{"class":1306},[1088,10157,10158],{"class":1111},"find",[1088,10160,1303],{"class":1302},[1088,10162,3338],{"class":1944},[1088,10164,1827],{"class":1589},[1088,10166,3343],{"class":1302},[1088,10168,1810],{"class":1306},[1088,10170,10171],{"class":1302},"value ",[1088,10173,7672],{"class":1306},[1088,10175,3269],{"class":1302},[1088,10177,1810],{"class":1306},[1088,10179,10180],{"class":1302},"value)\n",[1088,10182,10183],{"class":1090,"line":1374},[1088,10184,1493],{"class":1302},[1088,10186,10187,10189,10191],{"class":1090,"line":1385},[1088,10188,1637],{"class":1306},[1088,10190,5113],{"class":1312},[1088,10192,1567],{"class":1306},[1088,10194,10195],{"class":1090,"line":1401},[1088,10196,1371],{"emptyLinePlaceholder":21},[1088,10198,10199,10201,10203],{"class":1090,"line":1407},[1088,10200,1561],{"class":1306},[1088,10202,1564],{"class":1312},[1088,10204,1567],{"class":1306},[1088,10206,10207,10209],{"class":1090,"line":1412},[1088,10208,1574],{"class":1306},[1088,10210,10211],{"class":1312},"USelectMenu\n",[1088,10213,10214,10217,10219,10221,10223],{"class":1090,"line":1435},[1088,10215,10216],{"class":1589},"    v-model",[1088,10218,1593],{"class":1306},[1088,10220,1520],{"class":1306},[1088,10222,4640],{"class":1098},[1088,10224,5539],{"class":1306},[1088,10226,10227,10230,10232,10234,10237],{"class":1090,"line":1440},[1088,10228,10229],{"class":1589},"    :items",[1088,10231,1593],{"class":1306},[1088,10233,1520],{"class":1306},[1088,10235,10236],{"class":1098},"models",[1088,10238,5539],{"class":1306},[1088,10240,10241,10244,10246,10248,10251],{"class":1090,"line":1450},[1088,10242,10243],{"class":1589},"    :icon",[1088,10245,1593],{"class":1306},[1088,10247,1520],{"class":1306},[1088,10249,10250],{"class":1098},"selectedModel?.icon",[1088,10252,5539],{"class":1306},[1088,10254,10255,10258,10260,10262,10264],{"class":1090,"line":1460},[1088,10256,10257],{"class":1589},"    variant",[1088,10259,1593],{"class":1306},[1088,10261,1520],{"class":1306},[1088,10263,7874],{"class":1098},[1088,10265,5539],{"class":1306},[1088,10267,10268,10271,10273,10275,10277],{"class":1090,"line":1476},[1088,10269,10270],{"class":1589},"    value-key",[1088,10272,1593],{"class":1306},[1088,10274,1520],{"class":1306},[1088,10276,3323],{"class":1098},[1088,10278,5539],{"class":1306},[1088,10280,10281],{"class":1090,"line":1482},[1088,10282,10283],{"class":1306},"  \u002F>\n",[1088,10285,10286,10288,10290],{"class":1090,"line":1487},[1088,10287,1637],{"class":1306},[1088,10289,1564],{"class":1312},[1088,10291,1567],{"class":1306},[1116,10293,10295],{"id":10294},"integrating-with-the-chat","Integrating with the chat",[977,10297,10298],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1279,10300,10301],{},[1697,10302,10303],{},[1079,10304,10307],{"className":1551,"code":10305,"filename":5732,"highlights":10306,"language":34,"meta":1084,"style":1084},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isReasoningStreaming } 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=\"isReasoningStreaming(message, index, chat)\"\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              \u003CMDC\n                v-else-if=\"isTextUIPart(part)\"\n                :value=\"part.text\"\n                :cache-key=\"`${message.id}-${index}`\"\n                class=\"*:first:mt-0 *:last:mb-0\"\n              \u002F>\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",[1374,2330,2362,2378,4347,4358,4366],[1038,10308,10309,10329,10355,10373,10391,10395,10407,10419,10436,10440,10482,10486,10502,10542,10546,10550,10566,10570,10586,10604,10622,10636,10662,10670,10686,10691,10700,10712,10736,10750,10754,10758,10770,10782,10796,10810,10822,10828,10832,10838,10842,10860,10870,10890,10916,10928,10932,10936,10940,10952,10980,10990,10994,11000,11008,11012,11020,11038,11050,11058,11066,11078,11096,11102,11114,11126,11130,11142,11146,11170,11236,11242,11254,11266,11278,11282,11288,11300,11312,11324,11328,11336,11340,11346,11358,11370,11382,11394,11398,11406,11414,11422,11426,11432,11445,11458,11471,11483,11495,11499,11512,11532,11540,11544,11550,11562,11574,11586,11598,11602,11610,11618,11627,11636],{"__ignoreMap":1084},[1088,10310,10311,10313,10315,10317,10319,10321,10323,10325,10327],{"class":1090,"line":1091},[1088,10312,1561],{"class":1306},[1088,10314,5113],{"class":1312},[1088,10316,5116],{"class":1589},[1088,10318,5119],{"class":1589},[1088,10320,1593],{"class":1306},[1088,10322,1520],{"class":1306},[1088,10324,1285],{"class":1098},[1088,10326,1520],{"class":1306},[1088,10328,1567],{"class":1306},[1088,10330,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353],{"class":1090,"line":1108},[1088,10332,1709],{"class":1292},[1088,10334,1712],{"class":1306},[1088,10336,5765],{"class":1302},[1088,10338,1718],{"class":1306},[1088,10340,5770],{"class":1302},[1088,10342,1718],{"class":1306},[1088,10344,5775],{"class":1302},[1088,10346,1734],{"class":1306},[1088,10348,1737],{"class":1292},[1088,10350,1393],{"class":1306},[1088,10352,2535],{"class":1098},[1088,10354,1357],{"class":1306},[1088,10356,10357,10359,10361,10363,10365,10367,10369,10371],{"class":1090,"line":1322},[1088,10358,1709],{"class":1292},[1088,10360,1712],{"class":1306},[1088,10362,5795],{"class":1302},[1088,10364,1734],{"class":1306},[1088,10366,1737],{"class":1292},[1088,10368,1393],{"class":1306},[1088,10370,5804],{"class":1098},[1088,10372,1357],{"class":1306},[1088,10374,10375,10377,10379,10381,10383,10385,10387,10389],{"class":1090,"line":1337},[1088,10376,1709],{"class":1292},[1088,10378,1712],{"class":1306},[1088,10380,5816],{"class":1302},[1088,10382,1734],{"class":1306},[1088,10384,1737],{"class":1292},[1088,10386,1393],{"class":1306},[1088,10388,5825],{"class":1098},[1088,10390,1357],{"class":1306},[1088,10392,10393],{"class":1090,"line":1349},[1088,10394,1371],{"emptyLinePlaceholder":21},[1088,10396,10397,10399,10401,10403,10405],{"class":1090,"line":1360},[1088,10398,3062],{"class":1589},[1088,10400,5838],{"class":1302},[1088,10402,1593],{"class":1306},[1088,10404,5843],{"class":1111},[1088,10406,2670],{"class":1302},[1088,10408,10409,10411,10413,10415,10417],{"class":1090,"line":1368},[1088,10410,3062],{"class":1589},[1088,10412,5852],{"class":1302},[1088,10414,1593],{"class":1306},[1088,10416,5857],{"class":1111},[1088,10418,2670],{"class":1302},[1088,10420,10422,10424,10426,10428,10430,10432,10434],{"class":10421,"line":1374},[1090,1571],[1088,10423,3062],{"class":1589},[1088,10425,1712],{"class":1306},[1088,10427,10079],{"class":1302},[1088,10429,1490],{"class":1306},[1088,10431,2624],{"class":1306},[1088,10433,9800],{"class":1111},[1088,10435,2670],{"class":1302},[1088,10437,10438],{"class":1090,"line":1385},[1088,10439,1371],{"emptyLinePlaceholder":21},[1088,10441,10442,10444,10446,10448,10450,10452,10454,10456,10458,10460,10462,10464,10466,10468,10470,10472,10474,10476,10478,10480],{"class":1090,"line":1401},[1088,10443,3062],{"class":1589},[1088,10445,1712],{"class":1306},[1088,10447,5877],{"class":1312},[1088,10449,1316],{"class":1306},[1088,10451,5882],{"class":1302},[1088,10453,1490],{"class":1306},[1088,10455,2624],{"class":1306},[1088,10457,2627],{"class":1292},[1088,10459,5891],{"class":1111},[1088,10461,1303],{"class":1302},[1088,10463,3678],{"class":1306},[1088,10465,5898],{"class":1098},[1088,10467,5385],{"class":1306},[1088,10469,5903],{"class":1302},[1088,10471,1810],{"class":1306},[1088,10473,5908],{"class":1302},[1088,10475,1810],{"class":1306},[1088,10477,2019],{"class":1302},[1088,10479,5394],{"class":1306},[1088,10481,1493],{"class":1302},[1088,10483,10484],{"class":1090,"line":1407},[1088,10485,1371],{"emptyLinePlaceholder":21},[1088,10487,10488,10490,10492,10494,10496,10498,10500],{"class":1090,"line":1412},[1088,10489,5925],{"class":1292},[1088,10491,1953],{"class":1302},[1088,10493,3534],{"class":1306},[1088,10495,5932],{"class":1302},[1088,10497,1810],{"class":1306},[1088,10499,5937],{"class":1302},[1088,10501,1307],{"class":1306},[1088,10503,10504,10506,10508,10510,10512,10514,10516,10518,10520,10522,10524,10526,10528,10530,10532,10534,10536,10538,10540],{"class":1090,"line":1435},[1088,10505,5944],{"class":1292},[1088,10507,2900],{"class":1111},[1088,10509,1303],{"class":1312},[1088,10511,1867],{"class":1306},[1088,10513,3556],{"class":1312},[1088,10515,1316],{"class":1306},[1088,10517,3562],{"class":3561},[1088,10519,1718],{"class":1306},[1088,10521,3567],{"class":1312},[1088,10523,1316],{"class":1306},[1088,10525,1393],{"class":1306},[1088,10527,3574],{"class":1098},[1088,10529,1331],{"class":1306},[1088,10531,1718],{"class":1306},[1088,10533,5973],{"class":1312},[1088,10535,1316],{"class":1306},[1088,10537,4170],{"class":1468},[1088,10539,1734],{"class":1306},[1088,10541,1493],{"class":1312},[1088,10543,10544],{"class":1090,"line":1440},[1088,10545,5401],{"class":1306},[1088,10547,10548],{"class":1090,"line":1450},[1088,10549,1371],{"emptyLinePlaceholder":21},[1088,10551,10552,10554,10556,10558,10560,10562,10564],{"class":1090,"line":1460},[1088,10553,3062],{"class":1589},[1088,10555,5136],{"class":1302},[1088,10557,1593],{"class":1306},[1088,10559,5141],{"class":1111},[1088,10561,1303],{"class":1302},[1088,10563,5146],{"class":1306},[1088,10565,1493],{"class":1302},[1088,10567,10568],{"class":1090,"line":1476},[1088,10569,1371],{"emptyLinePlaceholder":21},[1088,10571,10572,10574,10576,10578,10580,10582,10584],{"class":1090,"line":1482},[1088,10573,3062],{"class":1589},[1088,10575,6022],{"class":1302},[1088,10577,1593],{"class":1306},[1088,10579,1904],{"class":1306},[1088,10581,5795],{"class":1111},[1088,10583,1303],{"class":1302},[1088,10585,1307],{"class":1306},[1088,10587,10588,10590,10592,10594,10596,10598,10600,10602],{"class":1090,"line":1487},[1088,10589,1800],{"class":1312},[1088,10591,1316],{"class":1306},[1088,10593,6042],{"class":1302},[1088,10595,1810],{"class":1306},[1088,10597,3323],{"class":1302},[1088,10599,1810],{"class":1306},[1088,10601,2019],{"class":1302},[1088,10603,1334],{"class":1306},[1088,10605,10606,10608,10610,10612,10614,10616,10618,10620],{"class":1090,"line":2276},[1088,10607,1960],{"class":1312},[1088,10609,1316],{"class":1306},[1088,10611,6042],{"class":1302},[1088,10613,1810],{"class":1306},[1088,10615,3323],{"class":1302},[1088,10617,1810],{"class":1306},[1088,10619,1998],{"class":1302},[1088,10621,1334],{"class":1306},[1088,10623,10624,10626,10628,10630,10632,10634],{"class":1090,"line":2289},[1088,10625,6077],{"class":1312},[1088,10627,1316],{"class":1306},[1088,10629,1904],{"class":1306},[1088,10631,5765],{"class":1111},[1088,10633,1303],{"class":1302},[1088,10635,1307],{"class":1306},[1088,10637,10638,10640,10642,10644,10646,10648,10650,10652,10654,10656,10658,10660],{"class":1090,"line":2319},[1088,10639,6093],{"class":1312},[1088,10641,1316],{"class":1306},[1088,10643,3672],{"class":1306},[1088,10645,5898],{"class":1098},[1088,10647,5385],{"class":1306},[1088,10649,5932],{"class":1302},[1088,10651,1810],{"class":1306},[1088,10653,3323],{"class":1302},[1088,10655,1810],{"class":1306},[1088,10657,2019],{"class":1302},[1088,10659,5394],{"class":1306},[1088,10661,1334],{"class":1306},[1088,10663,10664,10666,10668],{"class":1090,"line":2325},[1088,10665,5283],{"class":1312},[1088,10667,1316],{"class":1306},[1088,10669,1382],{"class":1306},[1088,10671,10673,10675,10677,10679,10681,10683],{"class":10672,"line":2330},[1090,1571],[1088,10674,3651],{"class":1312},[1088,10676,1316],{"class":1306},[1088,10678,3269],{"class":1302},[1088,10680,1810],{"class":1306},[1088,10682,10171],{"class":1302},[1088,10684,10685],{"class":1472},"\u002F\u002F Pass the selected model\n",[1088,10687,10689],{"class":10688,"line":2362},[1090,1571],[1088,10690,1479],{"class":1306},[1088,10692,10694,10696,10698],{"class":10693,"line":2378},[1090,1571],[1088,10695,2415],{"class":1306},[1088,10697,1884],{"class":1302},[1088,10699,1334],{"class":1306},[1088,10701,10702,10704,10706,10708,10710],{"class":1090,"line":2396},[1088,10703,6129],{"class":1312},[1088,10705,1303],{"class":1306},[1088,10707,6134],{"class":1944},[1088,10709,1884],{"class":1306},[1088,10711,1382],{"class":1306},[1088,10713,10714,10716,10718,10720,10722,10724,10726,10728,10730,10732,10734],{"class":1090,"line":2412},[1088,10715,6150],{"class":1292},[1088,10717,1953],{"class":1312},[1088,10719,6134],{"class":1302},[1088,10721,1810],{"class":1306},[1088,10723,6159],{"class":1302},[1088,10725,3350],{"class":1306},[1088,10727,1393],{"class":1306},[1088,10729,4317],{"class":1098},[1088,10731,1331],{"class":1306},[1088,10733,3539],{"class":1312},[1088,10735,1307],{"class":1306},[1088,10737,10738,10740,10742,10744,10746,10748],{"class":1090,"line":2420},[1088,10739,6177],{"class":1111},[1088,10741,1303],{"class":1312},[1088,10743,1331],{"class":1306},[1088,10745,1789],{"class":1098},[1088,10747,1331],{"class":1306},[1088,10749,1493],{"class":1312},[1088,10751,10752],{"class":1090,"line":3415},[1088,10753,1479],{"class":1306},[1088,10755,10756],{"class":1090,"line":3428},[1088,10757,1404],{"class":1306},[1088,10759,10760,10762,10764,10766,10768],{"class":1090,"line":3433},[1088,10761,6203],{"class":1312},[1088,10763,1303],{"class":1306},[1088,10765,6208],{"class":1944},[1088,10767,1884],{"class":1306},[1088,10769,1382],{"class":1306},[1088,10771,10772,10774,10776,10778,10780],{"class":1090,"line":3439},[1088,10773,6218],{"class":1302},[1088,10775,1810],{"class":1306},[1088,10777,6223],{"class":1111},[1088,10779,1303],{"class":1312},[1088,10781,1307],{"class":1306},[1088,10783,10784,10786,10788,10790,10792,10794],{"class":1090,"line":3470},[1088,10785,6233],{"class":1312},[1088,10787,1316],{"class":1306},[1088,10789,1393],{"class":1306},[1088,10791,497],{"class":1098},[1088,10793,1331],{"class":1306},[1088,10795,1334],{"class":1306},[1088,10797,10798,10800,10802,10804,10806,10808],{"class":1090,"line":3514},[1088,10799,6249],{"class":1312},[1088,10801,1316],{"class":1306},[1088,10803,6254],{"class":1302},[1088,10805,1810],{"class":1306},[1088,10807,4469],{"class":1302},[1088,10809,1334],{"class":1306},[1088,10811,10812,10814,10816,10818,10820],{"class":1090,"line":3521},[1088,10813,6266],{"class":1312},[1088,10815,1316],{"class":1306},[1088,10817,1393],{"class":1306},[1088,10819,6208],{"class":1098},[1088,10821,1357],{"class":1306},[1088,10823,10824,10826],{"class":1090,"line":3526},[1088,10825,3377],{"class":1306},[1088,10827,1493],{"class":1312},[1088,10829,10830],{"class":1090,"line":3544},[1088,10831,3586],{"class":1306},[1088,10833,10834,10836],{"class":1090,"line":3583},[1088,10835,1490],{"class":1306},[1088,10837,1493],{"class":1302},[1088,10839,10840],{"class":1090,"line":3589},[1088,10841,1371],{"emptyLinePlaceholder":21},[1088,10843,10844,10846,10848,10850,10852,10854,10856,10858],{"class":1090,"line":3594},[1088,10845,6302],{"class":1589},[1088,10847,6305],{"class":1111},[1088,10849,1303],{"class":1306},[1088,10851,6310],{"class":1944},[1088,10853,1316],{"class":1306},[1088,10855,6315],{"class":1094},[1088,10857,1884],{"class":1306},[1088,10859,1382],{"class":1306},[1088,10861,10862,10864,10866,10868],{"class":1090,"line":3600},[1088,10863,6324],{"class":1302},[1088,10865,1810],{"class":1306},[1088,10867,6329],{"class":1111},[1088,10869,2670],{"class":1312},[1088,10871,10872,10874,10876,10878,10880,10882,10884,10886,10888],{"class":1090,"line":3620},[1088,10873,3529],{"class":1292},[1088,10875,1953],{"class":1312},[1088,10877,5195],{"class":1302},[1088,10879,1810],{"class":1306},[1088,10881,3323],{"class":1302},[1088,10883,1810],{"class":1306},[1088,10885,5204],{"class":1111},[1088,10887,5207],{"class":1312},[1088,10889,1307],{"class":1306},[1088,10891,10892,10894,10896,10898,10900,10902,10904,10906,10908,10910,10912,10914],{"class":1090,"line":3648},[1088,10893,6356],{"class":1302},[1088,10895,1810],{"class":1306},[1088,10897,6361],{"class":1111},[1088,10899,1303],{"class":1312},[1088,10901,1867],{"class":1306},[1088,10903,1721],{"class":1312},[1088,10905,1316],{"class":1306},[1088,10907,5339],{"class":1302},[1088,10909,1810],{"class":1306},[1088,10911,3323],{"class":1302},[1088,10913,1734],{"class":1306},[1088,10915,1493],{"class":1312},[1088,10917,10918,10920,10922,10924,10926],{"class":1090,"line":3664},[1088,10919,6384],{"class":1302},[1088,10921,1810],{"class":1306},[1088,10923,3323],{"class":1302},[1088,10925,2624],{"class":1306},[1088,10927,6393],{"class":1306},[1088,10929,10930],{"class":1090,"line":3683},[1088,10931,3586],{"class":1306},[1088,10933,10934],{"class":1090,"line":3711},[1088,10935,5401],{"class":1306},[1088,10937,10938],{"class":1090,"line":3718},[1088,10939,1371],{"emptyLinePlaceholder":21},[1088,10941,10942,10944,10946,10948,10950],{"class":1090,"line":3723},[1088,10943,6415],{"class":1111},[1088,10945,1303],{"class":1302},[1088,10947,1807],{"class":1306},[1088,10949,1827],{"class":1589},[1088,10951,1382],{"class":1306},[1088,10953,10954,10956,10958,10960,10962,10964,10966,10968,10970,10972,10974,10976,10978],{"class":1090,"line":3789},[1088,10955,3529],{"class":1292},[1088,10957,1953],{"class":1312},[1088,10959,5932],{"class":1302},[1088,10961,1810],{"class":1306},[1088,10963,3323],{"class":1302},[1088,10965,3844],{"class":1306},[1088,10967,1998],{"class":1302},[1088,10969,1810],{"class":1306},[1088,10971,3823],{"class":1302},[1088,10973,3350],{"class":1306},[1088,10975,3829],{"class":3561},[1088,10977,3539],{"class":1312},[1088,10979,1307],{"class":1306},[1088,10981,10982,10984,10986,10988],{"class":1090,"line":3794},[1088,10983,6356],{"class":1302},[1088,10985,1810],{"class":1306},[1088,10987,6460],{"class":1111},[1088,10989,2670],{"class":1312},[1088,10991,10992],{"class":1090,"line":3799},[1088,10993,3586],{"class":1306},[1088,10995,10996,10998],{"class":1090,"line":3805},[1088,10997,1490],{"class":1306},[1088,10999,1493],{"class":1302},[1088,11001,11002,11004,11006],{"class":1090,"line":3834},[1088,11003,1637],{"class":1306},[1088,11005,5113],{"class":1312},[1088,11007,1567],{"class":1306},[1088,11009,11010],{"class":1090,"line":3875},[1088,11011,1371],{"emptyLinePlaceholder":21},[1088,11013,11014,11016,11018],{"class":1090,"line":3904},[1088,11015,1561],{"class":1306},[1088,11017,1564],{"class":1312},[1088,11019,1567],{"class":1306},[1088,11021,11022,11024,11026,11028,11030,11032,11034,11036],{"class":1090,"line":3916},[1088,11023,1574],{"class":1306},[1088,11025,5428],{"class":1312},[1088,11027,5431],{"class":1589},[1088,11029,1593],{"class":1306},[1088,11031,1520],{"class":1306},[1088,11033,5438],{"class":1098},[1088,11035,1520],{"class":1306},[1088,11037,1567],{"class":1306},[1088,11039,11040,11042,11044,11046,11048],{"class":1090,"line":3932},[1088,11041,1583],{"class":1306},[1088,11043,1564],{"class":1312},[1088,11045,5451],{"class":1306},[1088,11047,8267],{"class":1589},[1088,11049,1567],{"class":1306},[1088,11051,11052,11054,11056],{"class":1090,"line":3946},[1088,11053,1607],{"class":1306},[1088,11055,8277],{"class":1312},[1088,11057,1613],{"class":1306},[1088,11059,11060,11062,11064],{"class":1090,"line":3953},[1088,11061,1618],{"class":1306},[1088,11063,1564],{"class":1312},[1088,11065,1567],{"class":1306},[1088,11067,11068,11070,11072,11074,11076],{"class":1090,"line":3958},[1088,11069,1583],{"class":1306},[1088,11071,1564],{"class":1312},[1088,11073,5451],{"class":1306},[1088,11075,5454],{"class":1589},[1088,11077,1567],{"class":1306},[1088,11079,11080,11082,11084,11086,11088,11090,11092,11094],{"class":1090,"line":3963},[1088,11081,1607],{"class":1306},[1088,11083,5463],{"class":1312},[1088,11085,5466],{"class":1589},[1088,11087,1593],{"class":1306},[1088,11089,1520],{"class":1306},[1088,11091,6537],{"class":1098},[1088,11093,1520],{"class":1306},[1088,11095,1567],{"class":1306},[1088,11097,11098,11100],{"class":1090,"line":3969},[1088,11099,5482],{"class":1306},[1088,11101,6548],{"class":1312},[1088,11103,11104,11106,11108,11110,11112],{"class":1090,"line":3986},[1088,11105,6553],{"class":1589},[1088,11107,1593],{"class":1306},[1088,11109,1520],{"class":1306},[1088,11111,6560],{"class":1098},[1088,11113,5539],{"class":1306},[1088,11115,11116,11118,11120,11122,11124],{"class":1090,"line":4008},[1088,11117,5545],{"class":1589},[1088,11119,1593],{"class":1306},[1088,11121,1520],{"class":1306},[1088,11123,6573],{"class":1098},[1088,11125,5539],{"class":1306},[1088,11127,11128],{"class":1090,"line":4026},[1088,11129,6580],{"class":1589},[1088,11131,11132,11134,11136,11138,11140],{"class":1090,"line":4034},[1088,11133,6585],{"class":1589},[1088,11135,1593],{"class":1306},[1088,11137,1520],{"class":1306},[1088,11139,6592],{"class":1098},[1088,11141,5539],{"class":1306},[1088,11143,11144],{"class":1090,"line":4051},[1088,11145,5605],{"class":1306},[1088,11147,11148,11150,11152,11154,11156,11158,11160,11162,11164,11166,11168],{"class":1090,"line":4072},[1088,11149,5611],{"class":1306},[1088,11151,1564],{"class":1312},[1088,11153,5451],{"class":1306},[1088,11155,371],{"class":1589},[1088,11157,1593],{"class":1306},[1088,11159,1520],{"class":1306},[1088,11161,1867],{"class":1306},[1088,11163,6617],{"class":1302},[1088,11165,1490],{"class":1306},[1088,11167,1520],{"class":1306},[1088,11169,1567],{"class":1306},[1088,11171,11172,11174,11176,11178,11180,11182,11184,11186,11188,11190,11192,11194,11196,11198,11200,11202,11204,11206,11208,11210,11212,11214,11216,11218,11220,11222,11224,11226,11228,11230,11232,11234],{"class":1090,"line":4082},[1088,11173,6628],{"class":1306},[1088,11175,1564],{"class":1312},[1088,11177,6633],{"class":1292},[1088,11179,1593],{"class":1306},[1088,11181,1520],{"class":1306},[1088,11183,6640],{"class":1302},[1088,11185,1718],{"class":1306},[1088,11187,6645],{"class":1302},[1088,11189,6648],{"class":1306},[1088,11191,2619],{"class":1302},[1088,11193,1810],{"class":1306},[1088,11195,2200],{"class":1302},[1088,11197,1520],{"class":1306},[1088,11199,6659],{"class":1306},[1088,11201,6662],{"class":1589},[1088,11203,1593],{"class":1306},[1088,11205,6667],{"class":1306},[1088,11207,4469],{"class":1302},[1088,11209,1810],{"class":1306},[1088,11211,2019],{"class":1302},[1088,11213,1490],{"class":1306},[1088,11215,6678],{"class":1098},[1088,11217,5385],{"class":1306},[1088,11219,6683],{"class":1302},[1088,11221,1810],{"class":1306},[1088,11223,6159],{"class":1302},[1088,11225,1490],{"class":1306},[1088,11227,6678],{"class":1098},[1088,11229,5385],{"class":1306},[1088,11231,6696],{"class":1302},[1088,11233,6699],{"class":1306},[1088,11235,1567],{"class":1306},[1088,11237,11238,11240],{"class":1090,"line":4092},[1088,11239,6706],{"class":1306},[1088,11241,6709],{"class":1312},[1088,11243,11244,11246,11248,11250,11252],{"class":1090,"line":4102},[1088,11245,6714],{"class":1589},[1088,11247,1593],{"class":1306},[1088,11249,1520],{"class":1306},[1088,11251,6721],{"class":1098},[1088,11253,5539],{"class":1306},[1088,11255,11256,11258,11260,11262,11264],{"class":1090,"line":4119},[1088,11257,6728],{"class":1589},[1088,11259,1593],{"class":1306},[1088,11261,1520],{"class":1306},[1088,11263,6735],{"class":1098},[1088,11265,5539],{"class":1306},[1088,11267,11268,11270,11272,11274,11276],{"class":1090,"line":4130},[1088,11269,6742],{"class":1589},[1088,11271,1593],{"class":1306},[1088,11273,1520],{"class":1306},[1088,11275,6749],{"class":1098},[1088,11277,5539],{"class":1306},[1088,11279,11280],{"class":1090,"line":4136},[1088,11281,6756],{"class":1306},[1088,11283,11284,11286],{"class":1090,"line":4142},[1088,11285,6761],{"class":1306},[1088,11287,6764],{"class":1312},[1088,11289,11290,11292,11294,11296,11298],{"class":1090,"line":4152},[1088,11291,6769],{"class":1589},[1088,11293,1593],{"class":1306},[1088,11295,1520],{"class":1306},[1088,11297,6735],{"class":1098},[1088,11299,5539],{"class":1306},[1088,11301,11302,11304,11306,11308,11310],{"class":1090,"line":4162},[1088,11303,6782],{"class":1589},[1088,11305,1593],{"class":1306},[1088,11307,1520],{"class":1306},[1088,11309,6789],{"class":1098},[1088,11311,5539],{"class":1306},[1088,11313,11314,11316,11318,11320,11322],{"class":1090,"line":4175},[1088,11315,6796],{"class":1589},[1088,11317,1593],{"class":1306},[1088,11319,1520],{"class":1306},[1088,11321,6803],{"class":1098},[1088,11323,5539],{"class":1306},[1088,11325,11326],{"class":1090,"line":4190},[1088,11327,6810],{"class":1306},[1088,11329,11330,11332,11334],{"class":1090,"line":4195},[1088,11331,6815],{"class":1306},[1088,11333,6818],{"class":1312},[1088,11335,1567],{"class":1306},[1088,11337,11338],{"class":1090,"line":4200},[1088,11339,1371],{"emptyLinePlaceholder":21},[1088,11341,11342,11344],{"class":1090,"line":4210},[1088,11343,6706],{"class":1306},[1088,11345,6764],{"class":1312},[1088,11347,11348,11350,11352,11354,11356],{"class":1090,"line":4226},[1088,11349,6835],{"class":1589},[1088,11351,1593],{"class":1306},[1088,11353,1520],{"class":1306},[1088,11355,6842],{"class":1098},[1088,11357,5539],{"class":1306},[1088,11359,11360,11362,11364,11366,11368],{"class":1090,"line":4241},[1088,11361,6849],{"class":1589},[1088,11363,1593],{"class":1306},[1088,11365,1520],{"class":1306},[1088,11367,6735],{"class":1098},[1088,11369,5539],{"class":1306},[1088,11371,11372,11374,11376,11378,11380],{"class":1090,"line":4247},[1088,11373,6862],{"class":1589},[1088,11375,1593],{"class":1306},[1088,11377,1520],{"class":1306},[1088,11379,6869],{"class":1098},[1088,11381,5539],{"class":1306},[1088,11383,11384,11386,11388,11390,11392],{"class":1090,"line":4253},[1088,11385,6876],{"class":1589},[1088,11387,1593],{"class":1306},[1088,11389,1520],{"class":1306},[1088,11391,6803],{"class":1098},[1088,11393,5539],{"class":1306},[1088,11395,11396],{"class":1090,"line":4261},[1088,11397,6889],{"class":1306},[1088,11399,11400,11402,11404],{"class":1090,"line":4266},[1088,11401,6894],{"class":1306},[1088,11403,1564],{"class":1312},[1088,11405,1567],{"class":1306},[1088,11407,11408,11410,11412],{"class":1090,"line":4272},[1088,11409,6903],{"class":1306},[1088,11411,1564],{"class":1312},[1088,11413,1567],{"class":1306},[1088,11415,11416,11418,11420],{"class":1090,"line":4292},[1088,11417,5508],{"class":1306},[1088,11419,5084],{"class":1312},[1088,11421,1567],{"class":1306},[1088,11423,11424],{"class":1090,"line":4307},[1088,11425,1371],{"emptyLinePlaceholder":21},[1088,11427,11428,11430],{"class":1090,"line":4324},[1088,11429,5482],{"class":1306},[1088,11431,5524],{"class":1312},[1088,11433,11435,11437,11439,11441,11443],{"class":11434,"line":4347},[1090,1571],[1088,11436,5530],{"class":1589},[1088,11438,1593],{"class":1306},[1088,11440,1520],{"class":1306},[1088,11442,5195],{"class":1098},[1088,11444,5539],{"class":1306},[1088,11446,11448,11450,11452,11454,11456],{"class":11447,"line":4358},[1090,1571],[1088,11449,6942],{"class":1589},[1088,11451,1593],{"class":1306},[1088,11453,1520],{"class":1306},[1088,11455,6949],{"class":1098},[1088,11457,5539],{"class":1306},[1088,11459,11461,11463,11465,11467,11469],{"class":11460,"line":4366},[1090,1571],[1088,11462,5560],{"class":1589},[1088,11464,1593],{"class":1306},[1088,11466,1520],{"class":1306},[1088,11468,5567],{"class":1098},[1088,11470,5539],{"class":1306},[1088,11472,11473,11475,11477,11479,11481],{"class":1090,"line":4372},[1088,11474,6585],{"class":1589},[1088,11476,1593],{"class":1306},[1088,11478,1520],{"class":1306},[1088,11480,6974],{"class":1098},[1088,11482,5539],{"class":1306},[1088,11484,11485,11487,11489,11491,11493],{"class":1090,"line":4377},[1088,11486,5590],{"class":1589},[1088,11488,1593],{"class":1306},[1088,11490,1520],{"class":1306},[1088,11492,6987],{"class":1098},[1088,11494,5539],{"class":1306},[1088,11496,11497],{"class":1090,"line":4400},[1088,11498,5605],{"class":1306},[1088,11500,11501,11503,11505,11507,11510],{"class":1090,"line":4406},[1088,11502,5611],{"class":1306},[1088,11504,1564],{"class":1312},[1088,11506,5451],{"class":1306},[1088,11508,11509],{"class":1589},"footer",[1088,11511,1567],{"class":1306},[1088,11513,11514,11516,11519,11522,11524,11526,11528,11530],{"class":1090,"line":4426},[1088,11515,6628],{"class":1306},[1088,11517,11518],{"class":1312},"ModelSelect",[1088,11520,11521],{"class":1589}," v-model",[1088,11523,1593],{"class":1306},[1088,11525,1520],{"class":1306},[1088,11527,4640],{"class":1098},[1088,11529,1520],{"class":1306},[1088,11531,1613],{"class":1306},[1088,11533,11534,11536,11538],{"class":1090,"line":4432},[1088,11535,6903],{"class":1306},[1088,11537,1564],{"class":1312},[1088,11539,1567],{"class":1306},[1088,11541,11542],{"class":1090,"line":4478},[1088,11543,1371],{"emptyLinePlaceholder":21},[1088,11545,11546,11548],{"class":1090,"line":4494},[1088,11547,5611],{"class":1306},[1088,11549,7000],{"class":1312},[1088,11551,11552,11554,11556,11558,11560],{"class":1090,"line":4527},[1088,11553,7005],{"class":1589},[1088,11555,1593],{"class":1306},[1088,11557,1520],{"class":1306},[1088,11559,6573],{"class":1098},[1088,11561,5539],{"class":1306},[1088,11563,11564,11566,11568,11570,11572],{"class":1090,"line":4541},[1088,11565,7018],{"class":1589},[1088,11567,1593],{"class":1306},[1088,11569,1520],{"class":1306},[1088,11571,5624],{"class":1098},[1088,11573,5539],{"class":1306},[1088,11575,11576,11578,11580,11582,11584],{"class":1090,"line":4549},[1088,11577,7031],{"class":1589},[1088,11579,1593],{"class":1306},[1088,11581,1520],{"class":1306},[1088,11583,7038],{"class":1098},[1088,11585,5539],{"class":1306},[1088,11587,11588,11590,11592,11594,11596],{"class":1090,"line":4554},[1088,11589,7045],{"class":1589},[1088,11591,1593],{"class":1306},[1088,11593,1520],{"class":1306},[1088,11595,7052],{"class":1098},[1088,11597,5539],{"class":1306},[1088,11599,11600],{"class":1090,"line":4561},[1088,11601,7059],{"class":1306},[1088,11603,11604,11606,11608],{"class":1090,"line":4566},[1088,11605,5508],{"class":1306},[1088,11607,5078],{"class":1312},[1088,11609,1567],{"class":1306},[1088,11611,11612,11614,11616],{"class":1090,"line":4584},[1088,11613,5642],{"class":1306},[1088,11615,5463],{"class":1312},[1088,11617,1567],{"class":1306},[1088,11619,11621,11623,11625],{"class":1090,"line":11620},112,[1088,11622,1618],{"class":1306},[1088,11624,1564],{"class":1312},[1088,11626,1567],{"class":1306},[1088,11628,11630,11632,11634],{"class":1090,"line":11629},113,[1088,11631,1628],{"class":1306},[1088,11633,5428],{"class":1312},[1088,11635,1567],{"class":1306},[1088,11637,11639,11641,11643],{"class":1090,"line":11638},114,[1088,11640,1637],{"class":1306},[1088,11642,1564],{"class":1312},[1088,11644,1567],{"class":1306},[981,11646,11648],{"id":11647},"going-further","Going further",[977,11650,11651],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[977,11653,11654],{},[995,11655,11656],{},"User Authentication",[977,11658,11659,11660,11665],{},"Add authentication with ",[1031,11661,11664],{"href":11662,"rel":11663},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1035],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[977,11667,11668],{},[995,11669,11670],{},"AI Tools",[977,11672,11673,11674,11679],{},"Extend your chatbot with ",[1031,11675,11678],{"href":11676,"rel":11677},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1035],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1079,11681,11683],{"className":1283,"code":11682,"language":1285,"meta":1084,"style":1084},"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",[1038,11684,11685,11704,11722,11726,11741,11757,11774,11805,11813,11833,11838,11873,11877],{"__ignoreMap":1084},[1088,11686,11687,11689,11691,11694,11696,11698,11700,11702],{"class":1090,"line":1091},[1088,11688,1709],{"class":1292},[1088,11690,1712],{"class":1306},[1088,11692,11693],{"class":1302}," tool",[1088,11695,1734],{"class":1306},[1088,11697,1737],{"class":1292},[1088,11699,1393],{"class":1306},[1088,11701,2535],{"class":1098},[1088,11703,1357],{"class":1306},[1088,11705,11706,11708,11710,11712,11714,11716,11718,11720],{"class":1090,"line":1108},[1088,11707,1709],{"class":1292},[1088,11709,1712],{"class":1306},[1088,11711,2570],{"class":1302},[1088,11713,1734],{"class":1306},[1088,11715,1737],{"class":1292},[1088,11717,1393],{"class":1306},[1088,11719,2579],{"class":1098},[1088,11721,1357],{"class":1306},[1088,11723,11724],{"class":1090,"line":1322},[1088,11725,1371],{"emptyLinePlaceholder":21},[1088,11727,11728,11730,11733,11735,11737,11739],{"class":1090,"line":1337},[1088,11729,3062],{"class":1589},[1088,11731,11732],{"class":1302}," weatherTool ",[1088,11734,1593],{"class":1306},[1088,11736,11693],{"class":1111},[1088,11738,1303],{"class":1302},[1088,11740,1307],{"class":1306},[1088,11742,11743,11746,11748,11750,11753,11755],{"class":1090,"line":1349},[1088,11744,11745],{"class":1312},"  description",[1088,11747,1316],{"class":1306},[1088,11749,1393],{"class":1306},[1088,11751,11752],{"class":1098},"Get the current weather for a location",[1088,11754,1331],{"class":1306},[1088,11756,1334],{"class":1306},[1088,11758,11759,11762,11764,11766,11768,11770,11772],{"class":1090,"line":1360},[1088,11760,11761],{"class":1312},"  parameters",[1088,11763,1316],{"class":1306},[1088,11765,2570],{"class":1302},[1088,11767,1810],{"class":1306},[1088,11769,2642],{"class":1111},[1088,11771,1303],{"class":1302},[1088,11773,1307],{"class":1306},[1088,11775,11776,11779,11781,11783,11785,11787,11789,11791,11794,11796,11798,11801,11803],{"class":1090,"line":1368},[1088,11777,11778],{"class":1312},"    location",[1088,11780,1316],{"class":1306},[1088,11782,2570],{"class":1302},[1088,11784,1810],{"class":1306},[1088,11786,3242],{"class":1111},[1088,11788,1807],{"class":1302},[1088,11790,1810],{"class":1306},[1088,11792,11793],{"class":1111},"describe",[1088,11795,1303],{"class":1302},[1088,11797,1331],{"class":1306},[1088,11799,11800],{"class":1098},"The city name",[1088,11802,1331],{"class":1306},[1088,11804,1493],{"class":1302},[1088,11806,11807,11809,11811],{"class":1090,"line":1374},[1088,11808,2415],{"class":1306},[1088,11810,1884],{"class":1302},[1088,11812,1334],{"class":1306},[1088,11814,11815,11818,11820,11822,11824,11827,11829,11831],{"class":1090,"line":1385},[1088,11816,11817],{"class":1111},"  execute",[1088,11819,1316],{"class":1306},[1088,11821,3994],{"class":1589},[1088,11823,1941],{"class":1306},[1088,11825,11826],{"class":1944}," location",[1088,11828,1948],{"class":1306},[1088,11830,1827],{"class":1589},[1088,11832,1382],{"class":1306},[1088,11834,11835],{"class":1090,"line":1401},[1088,11836,11837],{"class":1472},"    \u002F\u002F Fetch weather data from an API\n",[1088,11839,11840,11843,11845,11847,11849,11852,11854,11857,11859,11862,11864,11866,11869,11871],{"class":1090,"line":1407},[1088,11841,11842],{"class":1292},"    return",[1088,11844,1712],{"class":1306},[1088,11846,11826],{"class":1302},[1088,11848,1718],{"class":1306},[1088,11850,11851],{"class":1312}," temperature",[1088,11853,1316],{"class":1306},[1088,11855,11856],{"class":3561}," 22",[1088,11858,1718],{"class":1306},[1088,11860,11861],{"class":1312}," condition",[1088,11863,1316],{"class":1306},[1088,11865,1393],{"class":1306},[1088,11867,11868],{"class":1098},"Sunny",[1088,11870,1331],{"class":1306},[1088,11872,3164],{"class":1306},[1088,11874,11875],{"class":1090,"line":1412},[1088,11876,3586],{"class":1306},[1088,11878,11879,11881],{"class":1090,"line":1435},[1088,11880,1490],{"class":1306},[1088,11882,1493],{"class":1302},[981,11884,11886],{"id":11885},"deploying-to-vercel","Deploying to Vercel",[977,11888,11889],{},"Deploy your chatbot to Vercel with zero configuration:",[1079,11891,11893],{"className":1081,"code":11892,"language":1083,"meta":1084,"style":1084},"npx vercel deploy\n",[1038,11894,11895],{"__ignoreMap":1084},[1088,11896,11897,11899,11902],{"class":1090,"line":1091},[1088,11898,1095],{"class":1094},[1088,11900,11901],{"class":1098}," vercel",[1088,11903,11904],{"class":1098}," deploy\n",[977,11906,11907],{},"Then, in the Vercel dashboard:",[989,11909,11910,11916],{},[992,11911,11912,11913,11915],{},"Enable ",[995,11914,4596],{}," and add credits so requests can be processed.",[992,11917,11918,11919,11922],{},"Add a ",[995,11920,11921],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[11924,11925,11926],"blockquote",{},[977,11927,11928,11929,11934,11935,11937],{},"Note: On Vercel, you ",[995,11930,11931,11932],{},"don’t need to manually add ",[1038,11933,1660],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1038,11936,1647],{}," locally for development.",[1667,11939,11940],{"to":1067,"target":1036},[977,11941,11942,11943,1810],{},"Learn more about setting up AI Gateway in the ",[995,11944,11945],{},"Vercel AI Gateway documentation",[981,11947,11949],{"id":11948},"conclusion","Conclusion",[977,11951,11952],{},"You've built a complete AI chatbot with:",[989,11954,11955,11961,11967,11972,11977],{},[992,11956,11957,11960],{},[995,11958,11959],{},"A complete chat interface"," using Nuxt UI components",[992,11962,11963,11966],{},[995,11964,11965],{},"Real-time streaming responses"," with the AI SDK",[992,11968,11969,11971],{},[995,11970,1009],{}," with MDC for rich content display",[992,11973,11974,11976],{},[995,11975,1015],{}," via AI Gateway",[992,11978,11979,11982],{},[995,11980,11981],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[977,11984,11985],{},"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.",[977,11987,11988],{},[995,11989,11990],{},"Resources:",[989,11992,11993,12000,12007,12014,12020,12026],{},[992,11994,11995],{},[1031,11996,11999],{"href":11997,"rel":11998},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1035],"Nuxt UI Chat Components",[992,12001,12002],{},[1031,12003,12006],{"href":12004,"rel":12005},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1035],"NuxtHub Database",[992,12008,12009],{},[1031,12010,12013],{"href":12011,"rel":12012},"https:\u002F\u002Fai-sdk.dev",[1035],"AI SDK Documentation",[992,12015,12016],{},[1031,12017,12019],{"href":1067,"rel":12018},[1035],"AI Gateway Documentation",[992,12021,12022],{},[1031,12023,12025],{"href":1033,"rel":12024},[1035],"Nuxt AI Chat Template",[992,12027,12028],{},[1031,12029,12031],{"href":1044,"rel":12030},[1035],"Vue AI Chat Template",[977,12033,12034],{},"We're excited to see what you'll build!",[12036,12037,12038],"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":1084,"searchDepth":1108,"depth":1108,"links":12040},[12041,12042,12043,12049,12054,12057,12058,12062,12063,12064,12069,12070,12071],{"id":983,"depth":1108,"text":984},{"id":1052,"depth":1108,"text":1053},{"id":1073,"depth":1108,"text":1074,"children":12044},[12045,12046,12047,12048],{"id":1118,"depth":1322,"text":1119},{"id":1269,"depth":1322,"text":1270},{"id":1538,"depth":1322,"text":1539},{"id":1678,"depth":1322,"text":1679},{"id":2458,"depth":1108,"text":2459,"children":12050},[12051,12052,12053],{"id":2470,"depth":1322,"text":2471},{"id":2853,"depth":1322,"text":2854},{"id":4687,"depth":1322,"text":4688},{"id":5069,"depth":1108,"text":5070,"children":12055},[12056],{"id":5088,"depth":1322,"text":5089},{"id":5705,"depth":1108,"text":5706},{"id":7273,"depth":1108,"text":7274,"children":12059},[12060,12061],{"id":7280,"depth":1322,"text":7281},{"id":7440,"depth":1322,"text":7441},{"id":7940,"depth":1108,"text":7941},{"id":8483,"depth":1108,"text":8484},{"id":9761,"depth":1108,"text":9762,"children":12065},[12066,12067,12068],{"id":9772,"depth":1322,"text":9773},{"id":10035,"depth":1322,"text":10036},{"id":10294,"depth":1322,"text":10295},{"id":11647,"depth":1108,"text":11648},{"id":11885,"depth":1108,"text":11886},{"id":11948,"depth":1108,"text":11949},"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":12077},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":961,"description":12073},"blog\u002Fhow-to-build-an-ai-chat","ugglJqLsGgnnltNBbTrx1KjoUNVnc0W4pVd_V3GiLRg",1774013846315]