[{"data":1,"prerenderedAt":12308},["ShallowReactive",2],{"navigation":3,"-blog-how-to-build-an-ai-chat":958},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,816,857],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,791,796,801,806,811],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":585,"description":586},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":593,"path":594,"stem":595,"framework":16,"category":172,"description":596},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":598,"path":599,"stem":600,"framework":16,"category":397,"description":601},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":603,"path":604,"stem":605,"framework":16,"category":226,"description":606},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":608,"path":609,"stem":610,"framework":16,"category":190,"description":611},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":613,"path":614,"stem":615,"framework":16,"category":190,"description":616},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":618,"path":619,"stem":620,"framework":16,"category":190,"description":621},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":623,"path":624,"stem":625,"framework":16,"category":190,"description":626},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":628,"path":629,"stem":630,"framework":16,"category":190,"description":631},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":633,"path":634,"stem":635,"framework":16,"category":190,"description":636},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":638,"path":639,"stem":640,"framework":16,"category":190,"description":641},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":643,"path":644,"stem":645,"framework":16,"category":190,"description":646},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":648,"path":649,"stem":650,"framework":16,"category":190,"description":651},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":653,"path":654,"stem":655,"framework":16,"category":190,"description":656},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":190,"description":661},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":190,"description":666},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":668,"path":669,"stem":670,"framework":16,"category":190,"description":671},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":673,"path":674,"stem":675,"framework":16,"category":190,"description":676},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":678,"path":679,"stem":680,"framework":16,"category":190,"description":681},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":683,"path":684,"stem":685,"framework":16,"category":226,"description":686},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":688,"path":689,"stem":690,"framework":16,"category":309,"description":691},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":693,"path":694,"stem":695,"framework":16,"category":397,"description":696},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":698,"path":699,"stem":700,"framework":16,"category":190,"description":701},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":703,"path":704,"stem":705,"framework":16,"category":190,"description":706},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":708,"path":709,"stem":710,"framework":16,"category":190,"description":711},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":713,"path":714,"stem":715,"framework":16,"category":178,"description":716},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":718,"path":719,"stem":720,"framework":16,"category":309,"description":721},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":723,"path":724,"stem":725,"framework":16,"category":172,"description":726},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":728,"path":729,"stem":730,"framework":16,"category":309,"description":731},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":733,"path":734,"stem":735,"framework":16,"category":309,"description":736},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":738,"path":739,"stem":740,"framework":16,"category":178,"description":741},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":743,"path":744,"stem":745,"framework":16,"category":184,"description":746,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":748,"path":749,"stem":750,"framework":16,"category":178,"description":751},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":753,"path":754,"stem":755,"framework":16,"category":397,"description":756},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":758,"path":759,"stem":760,"framework":16,"category":309,"description":761},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":763,"path":764,"stem":765,"framework":16,"category":226,"description":766},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":768,"path":769,"stem":770,"framework":16,"category":309,"description":771},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":773,"path":774,"stem":775,"framework":16,"category":172,"description":776},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":778,"path":779,"stem":780,"framework":16,"category":226,"description":781},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":783,"path":784,"stem":785,"framework":16,"category":309,"description":786},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":788,"stem":789,"framework":16,"category":184,"description":790},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":792,"path":793,"stem":794,"framework":16,"category":172,"description":795},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":797,"path":798,"stem":799,"framework":16,"category":397,"description":800},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":802,"path":803,"stem":804,"framework":16,"category":397,"description":805},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":807,"path":808,"stem":809,"framework":16,"category":172,"description":810},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":812,"path":813,"stem":814,"framework":16,"category":172,"description":815},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":817,"framework":16,"category":16,"description":16,"icon":818,"path":819,"stem":820,"children":821,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[822,827,832,837,842,847,852],{"title":823,"path":824,"stem":825,"framework":16,"category":16,"description":826},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":828,"path":829,"stem":830,"framework":16,"category":16,"description":831},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":833,"path":834,"stem":835,"framework":16,"category":16,"description":836},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":838,"path":839,"stem":840,"framework":16,"category":16,"description":841},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":843,"path":844,"stem":845,"framework":16,"category":16,"description":846},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":848,"path":849,"stem":850,"framework":16,"category":16,"description":851,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":853,"path":854,"stem":855,"framework":16,"category":16,"description":856},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":858,"path":859,"stem":860,"children":861,"framework":28,"category":16,"description":16,"icon":957},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[862,864,869,874,879,884,889,893,898,902,907,912,917,922,927,931,936,940,944,948,953],{"title":15,"path":859,"stem":860,"framework":28,"category":16,"description":863},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":865,"path":866,"stem":867,"framework":28,"category":16,"description":868},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":870,"path":871,"stem":872,"framework":28,"category":16,"description":873},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":875,"path":876,"stem":877,"framework":28,"category":16,"description":878},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":880,"path":881,"stem":882,"framework":28,"category":16,"description":883},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":885,"stem":886,"framework":28,"category":887,"description":888},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":890,"stem":891,"framework":28,"category":887,"description":892},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":894,"path":895,"stem":896,"framework":28,"category":887,"description":897},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":899,"stem":900,"framework":28,"category":887,"description":901},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":903,"path":904,"stem":905,"framework":28,"category":887,"description":906},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":908,"path":909,"stem":910,"framework":28,"category":887,"description":911},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":913,"path":914,"stem":915,"framework":28,"category":887,"description":916},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":918,"path":919,"stem":920,"framework":28,"category":887,"description":921},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":923,"path":924,"stem":925,"framework":28,"category":887,"description":926},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":928,"stem":929,"framework":28,"category":887,"description":930},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":932,"path":933,"stem":934,"framework":28,"category":887,"description":935},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":937,"stem":938,"framework":28,"category":887,"description":939},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":941,"stem":942,"framework":28,"category":887,"description":943},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":945,"stem":946,"framework":28,"category":887,"description":947},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":949,"path":950,"stem":951,"framework":28,"category":887,"description":952},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":954,"stem":955,"framework":28,"category":887,"description":956},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":959,"title":960,"authors":961,"body":972,"date":12298,"description":12299,"extension":12300,"image":12301,"meta":12302,"navigation":36,"path":12304,"seo":12305,"stem":12306,"__hash__":12307},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[962,967],{"name":963,"avatar":964,"to":966},"Hugo Richard",{"src":965},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":968,"avatar":969,"to":971},"Benjamin Canac",{"src":970},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":973,"value":974,"toc":12265},"minimark",[975,979,984,987,1022,1048,1052,1055,1069,1073,1076,1113,1118,1121,1265,1269,1276,1492,1495,1534,1538,1545,1640,1647,1664,1674,1678,1692,2423,2426,2444,2454,2458,2466,2470,2481,2849,2853,2880,4587,4590,4595,4602,4607,4618,4623,4632,4650,4655,4670,4683,4687,4690,5065,5069,5084,5088,5096,5669,5676,5701,5705,5723,7170,7173,7178,7189,7227,7242,7247,7254,7268,7273,7312,7317,7322,7329,7340,7344,7347,7351,7354,7507,7511,7536,8014,8018,8557,8561,9897,9906,9910,9917,9921,9931,10189,10193,10201,10448,10452,10455,11870,11874,11877,11882,11891,11896,11905,12108,12112,12115,12130,12133,12148,12163,12172,12176,12179,12209,12212,12217,12258,12261],[976,977,978],"p",{},"Building AI-powered applications has never been more accessible. This guide walks through creating a full-featured AI chatbot using Nuxt, Nuxt UI, and the Vercel AI SDK. Each step is explained in detail so you understand how every piece works together.",[980,981,983],"h2",{"id":982},"what-were-building","What we're building",[976,985,986],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[988,989,990,998,1004,1010,1016],"ul",{},[991,992,993,997],"li",{},[994,995,996],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[991,999,1000,1003],{},[994,1001,1002],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[991,1005,1006,1009],{},[994,1007,1008],{},"Markdown rendering"," for rich AI responses with code highlighting",[991,1011,1012,1015],{},[994,1013,1014],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[991,1017,1018,1021],{},[994,1019,1020],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1023,1024,1026],"callout",{"icon":1025},"i-simple-icons-github",[976,1027,1028,1029,1039,1040,1047],{},"Check out the ",[1030,1031,1035],"a",{"href":1032,"rel":1033},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1034],"nofollow",[1036,1037,1038],"code",{},"Nuxt"," and ",[1030,1041,1044],{"href":1042,"rel":1043},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1034],[1036,1045,1046],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[980,1049,1051],{"id":1050},"prerequisites","Prerequisites",[976,1053,1054],{},"Before we start, make sure you have:",[988,1056,1057,1060],{},[991,1058,1059],{},"Node.js 20+ installed",[991,1061,1062,1063,1068],{},"A ",[1030,1064,1067],{"href":1065,"rel":1066},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1034],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[980,1070,1072],{"id":1071},"project-setup","Project setup",[976,1074,1075],{},"Start by creating a new Nuxt project:",[1077,1078,1083],"pre",{"className":1079,"code":1080,"language":1081,"meta":1082,"style":1082},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx nuxi@latest init nuxt-ai-chat\ncd nuxt-ai-chat\n","bash","",[1036,1084,1085,1104],{"__ignoreMap":1082},[1086,1087,1090,1094,1098,1101],"span",{"class":1088,"line":1089},"line",1,[1086,1091,1093],{"class":1092},"sBMFI","npx",[1086,1095,1097],{"class":1096},"sfazB"," nuxi@latest",[1086,1099,1100],{"class":1096}," init",[1086,1102,1103],{"class":1096}," nuxt-ai-chat\n",[1086,1105,1107,1111],{"class":1088,"line":1106},2,[1086,1108,1110],{"class":1109},"s2Zo4","cd",[1086,1112,1103],{"class":1096},[1114,1115,1117],"h3",{"id":1116},"installing-dependencies","Installing dependencies",[976,1119,1120],{},"Install Nuxt UI and the AI-specific dependencies:",[1122,1123,1125,1168,1200,1233],"code-group",{"sync":1124},"pm",[1077,1126,1129],{"className":1079,"code":1127,"filename":1128,"language":1081,"meta":1082,"style":1082},"pnpm add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1036,1130,1131],{"__ignoreMap":1082},[1086,1132,1133,1135,1138,1141,1144,1147,1150,1153,1156,1159,1162,1165],{"class":1088,"line":1089},[1086,1134,1128],{"class":1092},[1086,1136,1137],{"class":1096}," add",[1086,1139,1140],{"class":1096}," @nuxt\u002Fui",[1086,1142,1143],{"class":1096}," tailwindcss",[1086,1145,1146],{"class":1096}," @nuxtjs\u002Fmdc",[1086,1148,1149],{"class":1096}," @nuxthub\u002Fcore",[1086,1151,1152],{"class":1096}," drizzle-orm",[1086,1154,1155],{"class":1096}," drizzle-kit",[1086,1157,1158],{"class":1096}," @libsql\u002Fclient",[1086,1160,1161],{"class":1096}," ai",[1086,1163,1164],{"class":1096}," @ai-sdk\u002Fvue",[1086,1166,1167],{"class":1096}," zod\n",[1077,1169,1172],{"className":1079,"code":1170,"filename":1171,"language":1081,"meta":1082,"style":1082},"yarn add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1036,1173,1174],{"__ignoreMap":1082},[1086,1175,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198],{"class":1088,"line":1089},[1086,1177,1171],{"class":1092},[1086,1179,1137],{"class":1096},[1086,1181,1140],{"class":1096},[1086,1183,1143],{"class":1096},[1086,1185,1146],{"class":1096},[1086,1187,1149],{"class":1096},[1086,1189,1152],{"class":1096},[1086,1191,1155],{"class":1096},[1086,1193,1158],{"class":1096},[1086,1195,1161],{"class":1096},[1086,1197,1164],{"class":1096},[1086,1199,1167],{"class":1096},[1077,1201,1204],{"className":1079,"code":1202,"filename":1203,"language":1081,"meta":1082,"style":1082},"npm install @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1036,1205,1206],{"__ignoreMap":1082},[1086,1207,1208,1210,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231],{"class":1088,"line":1089},[1086,1209,1203],{"class":1092},[1086,1211,1212],{"class":1096}," install",[1086,1214,1140],{"class":1096},[1086,1216,1143],{"class":1096},[1086,1218,1146],{"class":1096},[1086,1220,1149],{"class":1096},[1086,1222,1152],{"class":1096},[1086,1224,1155],{"class":1096},[1086,1226,1158],{"class":1096},[1086,1228,1161],{"class":1096},[1086,1230,1164],{"class":1096},[1086,1232,1167],{"class":1096},[1077,1234,1237],{"className":1079,"code":1235,"filename":1236,"language":1081,"meta":1082,"style":1082},"bun add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1036,1238,1239],{"__ignoreMap":1082},[1086,1240,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263],{"class":1088,"line":1089},[1086,1242,1236],{"class":1092},[1086,1244,1137],{"class":1096},[1086,1246,1140],{"class":1096},[1086,1248,1143],{"class":1096},[1086,1250,1146],{"class":1096},[1086,1252,1149],{"class":1096},[1086,1254,1152],{"class":1096},[1086,1256,1155],{"class":1096},[1086,1258,1158],{"class":1096},[1086,1260,1161],{"class":1096},[1086,1262,1164],{"class":1096},[1086,1264,1167],{"class":1096},[1114,1266,1268],{"id":1267},"configuration","Configuration",[976,1270,1271,1272,1275],{},"Update your ",[1036,1273,1274],{},"nuxt.config.ts"," to register the modules:",[1277,1278,1279],"code-tree-intersection",{},[1077,1280,1284],{"className":1281,"code":1282,"filename":1274,"language":1283,"meta":1082,"style":1082},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: [\n    '@nuxt\u002Fui',\n    '@nuxtjs\u002Fmdc',\n    '@nuxthub\u002Fcore'\n  ],\n\n  hub: {\n    db: 'sqlite'\n  },\n\n  css: ['~\u002Fassets\u002Fcss\u002Fmain.css'],\n\n  mdc: {\n    headings: {\n      anchorLinks: false \u002F\u002F Disable anchor links in AI responses\n    }\n  },\n})\n","ts",[1036,1285,1286,1306,1318,1333,1345,1356,1364,1370,1381,1397,1403,1408,1431,1436,1446,1456,1472,1478,1483],{"__ignoreMap":1082},[1086,1287,1288,1292,1295,1298,1302],{"class":1088,"line":1089},[1086,1289,1291],{"class":1290},"s7zQu","export",[1086,1293,1294],{"class":1290}," default",[1086,1296,1297],{"class":1109}," defineNuxtConfig",[1086,1299,1301],{"class":1300},"sTEyZ","(",[1086,1303,1305],{"class":1304},"sMK4o","{\n",[1086,1307,1308,1312,1315],{"class":1088,"line":1106},[1086,1309,1311],{"class":1310},"swJcz","  modules",[1086,1313,1314],{"class":1304},":",[1086,1316,1317],{"class":1300}," [\n",[1086,1319,1321,1324,1327,1330],{"class":1088,"line":1320},3,[1086,1322,1323],{"class":1304},"    '",[1086,1325,1326],{"class":1096},"@nuxt\u002Fui",[1086,1328,1329],{"class":1304},"'",[1086,1331,1332],{"class":1304},",\n",[1086,1334,1336,1338,1341,1343],{"class":1088,"line":1335},4,[1086,1337,1323],{"class":1304},[1086,1339,1340],{"class":1096},"@nuxtjs\u002Fmdc",[1086,1342,1329],{"class":1304},[1086,1344,1332],{"class":1304},[1086,1346,1348,1350,1353],{"class":1088,"line":1347},5,[1086,1349,1323],{"class":1304},[1086,1351,1352],{"class":1096},"@nuxthub\u002Fcore",[1086,1354,1355],{"class":1304},"'\n",[1086,1357,1359,1362],{"class":1088,"line":1358},6,[1086,1360,1361],{"class":1300},"  ]",[1086,1363,1332],{"class":1304},[1086,1365,1367],{"class":1088,"line":1366},7,[1086,1368,1369],{"emptyLinePlaceholder":21},"\n",[1086,1371,1373,1376,1378],{"class":1088,"line":1372},8,[1086,1374,1375],{"class":1310},"  hub",[1086,1377,1314],{"class":1304},[1086,1379,1380],{"class":1304}," {\n",[1086,1382,1384,1387,1389,1392,1395],{"class":1088,"line":1383},9,[1086,1385,1386],{"class":1310},"    db",[1086,1388,1314],{"class":1304},[1086,1390,1391],{"class":1304}," '",[1086,1393,1394],{"class":1096},"sqlite",[1086,1396,1355],{"class":1304},[1086,1398,1400],{"class":1088,"line":1399},10,[1086,1401,1402],{"class":1304},"  },\n",[1086,1404,1406],{"class":1088,"line":1405},11,[1086,1407,1369],{"emptyLinePlaceholder":21},[1086,1409,1411,1414,1416,1419,1421,1424,1426,1429],{"class":1088,"line":1410},12,[1086,1412,1413],{"class":1310},"  css",[1086,1415,1314],{"class":1304},[1086,1417,1418],{"class":1300}," [",[1086,1420,1329],{"class":1304},[1086,1422,1423],{"class":1096},"~\u002Fassets\u002Fcss\u002Fmain.css",[1086,1425,1329],{"class":1304},[1086,1427,1428],{"class":1300},"]",[1086,1430,1332],{"class":1304},[1086,1432,1434],{"class":1088,"line":1433},13,[1086,1435,1369],{"emptyLinePlaceholder":21},[1086,1437,1439,1442,1444],{"class":1088,"line":1438},14,[1086,1440,1441],{"class":1310},"  mdc",[1086,1443,1314],{"class":1304},[1086,1445,1380],{"class":1304},[1086,1447,1449,1452,1454],{"class":1088,"line":1448},15,[1086,1450,1451],{"class":1310},"    headings",[1086,1453,1314],{"class":1304},[1086,1455,1380],{"class":1304},[1086,1457,1459,1462,1464,1468],{"class":1088,"line":1458},16,[1086,1460,1461],{"class":1310},"      anchorLinks",[1086,1463,1314],{"class":1304},[1086,1465,1467],{"class":1466},"sfNiH"," false",[1086,1469,1471],{"class":1470},"sHwdD"," \u002F\u002F Disable anchor links in AI responses\n",[1086,1473,1475],{"class":1088,"line":1474},17,[1086,1476,1477],{"class":1304},"    }\n",[1086,1479,1481],{"class":1088,"line":1480},18,[1086,1482,1402],{"class":1304},[1086,1484,1486,1489],{"class":1088,"line":1485},19,[1086,1487,1488],{"class":1304},"}",[1086,1490,1491],{"class":1300},")\n",[976,1493,1494],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1277,1496,1497],{},[1077,1498,1503],{"className":1499,"code":1500,"filename":1501,"language":1502,"meta":1082,"style":1082},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@import \"tailwindcss\";\n@import \"@nuxt\u002Fui\";\n","app\u002Fassets\u002Fcss\u002Fmain.css","css",[1036,1504,1505,1522],{"__ignoreMap":1082},[1086,1506,1507,1510,1513,1516,1519],{"class":1088,"line":1089},[1086,1508,1509],{"class":1290},"@import",[1086,1511,1512],{"class":1304}," \"",[1086,1514,1515],{"class":1096},"tailwindcss",[1086,1517,1518],{"class":1304},"\"",[1086,1520,1521],{"class":1304},";\n",[1086,1523,1524,1526,1528,1530,1532],{"class":1088,"line":1106},[1086,1525,1509],{"class":1290},[1086,1527,1512],{"class":1304},[1086,1529,1326],{"class":1096},[1086,1531,1518],{"class":1304},[1086,1533,1521],{"class":1304},[1114,1535,1537],{"id":1536},"setting-up-the-app","Setting up the app",[976,1539,1540,1541,1544],{},"Nuxt UI requires wrapping your app with ",[1036,1542,1543],{},"UApp"," for modals, toasts, and overlays to work properly:",[1277,1546,1547],{},[1077,1548,1553],{"className":1549,"code":1550,"filename":1551,"highlights":1552,"language":34,"meta":1082,"style":1082},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n  \u003CUApp>\n    \u003CUDashboardGroup unit=\"rem\">\n      \u003CNuxtPage \u002F>\n    \u003C\u002FUDashboardGroup>\n  \u003C\u002FUApp>\n\u003C\u002Ftemplate>\n","app\u002Fapp.vue",[1106,1358],[1036,1554,1555,1566,1577,1601,1612,1621,1631],{"__ignoreMap":1082},[1086,1556,1557,1560,1563],{"class":1088,"line":1089},[1086,1558,1559],{"class":1304},"\u003C",[1086,1561,1562],{"class":1310},"template",[1086,1564,1565],{"class":1304},">\n",[1086,1567,1570,1573,1575],{"class":1568,"line":1106},[1088,1569],"highlight",[1086,1571,1572],{"class":1304},"  \u003C",[1086,1574,1543],{"class":1310},[1086,1576,1565],{"class":1304},[1086,1578,1579,1582,1585,1589,1592,1594,1597,1599],{"class":1088,"line":1320},[1086,1580,1581],{"class":1304},"    \u003C",[1086,1583,1584],{"class":1310},"UDashboardGroup",[1086,1586,1588],{"class":1587},"spNyl"," unit",[1086,1590,1591],{"class":1304},"=",[1086,1593,1518],{"class":1304},[1086,1595,1596],{"class":1096},"rem",[1086,1598,1518],{"class":1304},[1086,1600,1565],{"class":1304},[1086,1602,1603,1606,1609],{"class":1088,"line":1335},[1086,1604,1605],{"class":1304},"      \u003C",[1086,1607,1608],{"class":1310},"NuxtPage",[1086,1610,1611],{"class":1304}," \u002F>\n",[1086,1613,1614,1617,1619],{"class":1088,"line":1347},[1086,1615,1616],{"class":1304},"    \u003C\u002F",[1086,1618,1584],{"class":1310},[1086,1620,1565],{"class":1304},[1086,1622,1624,1627,1629],{"class":1623,"line":1358},[1088,1569],[1086,1625,1626],{"class":1304},"  \u003C\u002F",[1086,1628,1543],{"class":1310},[1086,1630,1565],{"class":1304},[1086,1632,1633,1636,1638],{"class":1088,"line":1366},[1086,1634,1635],{"class":1304},"\u003C\u002F",[1086,1637,1562],{"class":1310},[1086,1639,1565],{"class":1304},[976,1641,1642,1643,1646],{},"Create a ",[1036,1644,1645],{},".env"," file with your AI Gateway API key:",[1277,1648,1649],{},[1077,1650,1652],{"className":1079,"code":1651,"filename":1645,"language":1081,"meta":1082,"style":1082},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1036,1653,1654],{"__ignoreMap":1082},[1086,1655,1656,1659,1661],{"class":1088,"line":1089},[1086,1657,1658],{"class":1300},"AI_GATEWAY_API_KEY",[1086,1660,1591],{"class":1304},[1086,1662,1663],{"class":1096},"your-api-key-here\n",[1665,1666,1667],"note",{},[976,1668,1669,1670,1673],{},"With ",[1030,1671,1067],{"href":1065,"rel":1672},[1034],", you don't need individual API keys for OpenAI, Anthropic, or Google. The AI Gateway provides a unified API to access hundreds of models through a single endpoint.",[1114,1675,1677],{"id":1676},"setting-up-the-database","Setting up the database",[976,1679,1680,1685,1686,1691],{},[1030,1681,1684],{"href":1682,"rel":1683},"https:\u002F\u002Fhub.nuxt.com",[1034],"NuxtHub"," provides a zero-config database powered by ",[1030,1687,1690],{"href":1688,"rel":1689},"https:\u002F\u002Form.drizzle.team",[1034],"Drizzle ORM",". Here is the schema for the chat application:",[1277,1693,1694],{},[1695,1696,1697],"code-collapse",{},[1077,1698,1701],{"className":1281,"code":1699,"filename":1700,"language":1283,"meta":1082,"style":1082},"import { sqliteTable, text, integer, index } from 'drizzle-orm\u002Fsqlite-core'\nimport { relations } from 'drizzle-orm'\n\nexport const chats = sqliteTable('chats', {\n  id: text().primaryKey().$defaultFn(() => crypto.randomUUID()),\n  title: text(),\n  createdAt: integer({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date())\n})\n\nexport const chatsRelations = relations(chats, ({ many }) => ({\n  messages: many(messages)\n}))\n\nexport const messages = sqliteTable('messages', {\n  id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),\n  chatId: text('chat_id').notNull().references(() => chats.id, { onDelete: 'cascade' }),\n  role: text('role', { enum: ['user', 'assistant', 'system'] }).notNull(),\n  parts: text('parts', { mode: 'json' }),\n  createdAt: integer({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n}, table => [\n  index('messages_chat_id_idx').on(table.chatId)\n])\n\nexport const messagesRelations = relations(messages, ({ one }) => ({\n  chat: one(chats, {\n    fields: [messages.chatId],\n    references: [chats.id]\n  })\n}))\n","server\u002Fdb\u002Fschema.ts",[1036,1702,1703,1743,1763,1767,1794,1839,1852,1909,1915,1919,1954,1966,1973,1977,2003,2048,2114,2183,2222,2272,2285,2315,2321,2326,2358,2374,2392,2408,2416],{"__ignoreMap":1082},[1086,1704,1705,1708,1711,1714,1717,1720,1722,1725,1727,1730,1733,1736,1738,1741],{"class":1088,"line":1089},[1086,1706,1707],{"class":1290},"import",[1086,1709,1710],{"class":1304}," {",[1086,1712,1713],{"class":1300}," sqliteTable",[1086,1715,1716],{"class":1304},",",[1086,1718,1719],{"class":1300}," text",[1086,1721,1716],{"class":1304},[1086,1723,1724],{"class":1300}," integer",[1086,1726,1716],{"class":1304},[1086,1728,1729],{"class":1300}," index",[1086,1731,1732],{"class":1304}," }",[1086,1734,1735],{"class":1290}," from",[1086,1737,1391],{"class":1304},[1086,1739,1740],{"class":1096},"drizzle-orm\u002Fsqlite-core",[1086,1742,1355],{"class":1304},[1086,1744,1745,1747,1749,1752,1754,1756,1758,1761],{"class":1088,"line":1106},[1086,1746,1707],{"class":1290},[1086,1748,1710],{"class":1304},[1086,1750,1751],{"class":1300}," relations",[1086,1753,1732],{"class":1304},[1086,1755,1735],{"class":1290},[1086,1757,1391],{"class":1304},[1086,1759,1760],{"class":1096},"drizzle-orm",[1086,1762,1355],{"class":1304},[1086,1764,1765],{"class":1088,"line":1320},[1086,1766,1369],{"emptyLinePlaceholder":21},[1086,1768,1769,1771,1774,1777,1779,1781,1783,1785,1788,1790,1792],{"class":1088,"line":1335},[1086,1770,1291],{"class":1290},[1086,1772,1773],{"class":1587}," const",[1086,1775,1776],{"class":1300}," chats ",[1086,1778,1591],{"class":1304},[1086,1780,1713],{"class":1109},[1086,1782,1301],{"class":1300},[1086,1784,1329],{"class":1304},[1086,1786,1787],{"class":1096},"chats",[1086,1789,1329],{"class":1304},[1086,1791,1716],{"class":1304},[1086,1793,1380],{"class":1304},[1086,1795,1796,1799,1801,1803,1806,1809,1812,1814,1816,1819,1821,1823,1826,1829,1831,1834,1837],{"class":1088,"line":1347},[1086,1797,1798],{"class":1310},"  id",[1086,1800,1314],{"class":1304},[1086,1802,1719],{"class":1109},[1086,1804,1805],{"class":1300},"()",[1086,1807,1808],{"class":1304},".",[1086,1810,1811],{"class":1109},"primaryKey",[1086,1813,1805],{"class":1300},[1086,1815,1808],{"class":1304},[1086,1817,1818],{"class":1109},"$defaultFn",[1086,1820,1301],{"class":1300},[1086,1822,1805],{"class":1304},[1086,1824,1825],{"class":1587}," =>",[1086,1827,1828],{"class":1300}," crypto",[1086,1830,1808],{"class":1304},[1086,1832,1833],{"class":1109},"randomUUID",[1086,1835,1836],{"class":1300},"())",[1086,1838,1332],{"class":1304},[1086,1840,1841,1844,1846,1848,1850],{"class":1088,"line":1358},[1086,1842,1843],{"class":1310},"  title",[1086,1845,1314],{"class":1304},[1086,1847,1719],{"class":1109},[1086,1849,1805],{"class":1300},[1086,1851,1332],{"class":1304},[1086,1853,1854,1857,1859,1861,1863,1866,1869,1871,1873,1876,1878,1880,1883,1885,1888,1890,1892,1894,1896,1898,1900,1903,1906],{"class":1088,"line":1366},[1086,1855,1856],{"class":1310},"  createdAt",[1086,1858,1314],{"class":1304},[1086,1860,1724],{"class":1109},[1086,1862,1301],{"class":1300},[1086,1864,1865],{"class":1304},"{",[1086,1867,1868],{"class":1310}," mode",[1086,1870,1314],{"class":1304},[1086,1872,1391],{"class":1304},[1086,1874,1875],{"class":1096},"timestamp",[1086,1877,1329],{"class":1304},[1086,1879,1732],{"class":1304},[1086,1881,1882],{"class":1300},")",[1086,1884,1808],{"class":1304},[1086,1886,1887],{"class":1109},"notNull",[1086,1889,1805],{"class":1300},[1086,1891,1808],{"class":1304},[1086,1893,1818],{"class":1109},[1086,1895,1301],{"class":1300},[1086,1897,1805],{"class":1304},[1086,1899,1825],{"class":1587},[1086,1901,1902],{"class":1304}," new",[1086,1904,1905],{"class":1109}," Date",[1086,1907,1908],{"class":1300},"())\n",[1086,1910,1911,1913],{"class":1088,"line":1372},[1086,1912,1488],{"class":1304},[1086,1914,1491],{"class":1300},[1086,1916,1917],{"class":1088,"line":1383},[1086,1918,1369],{"emptyLinePlaceholder":21},[1086,1920,1921,1923,1925,1928,1930,1932,1935,1937,1940,1944,1947,1949,1952],{"class":1088,"line":1399},[1086,1922,1291],{"class":1290},[1086,1924,1773],{"class":1587},[1086,1926,1927],{"class":1300}," chatsRelations ",[1086,1929,1591],{"class":1304},[1086,1931,1751],{"class":1109},[1086,1933,1934],{"class":1300},"(chats",[1086,1936,1716],{"class":1304},[1086,1938,1939],{"class":1304}," ({",[1086,1941,1943],{"class":1942},"sHdIc"," many",[1086,1945,1946],{"class":1304}," })",[1086,1948,1825],{"class":1587},[1086,1950,1951],{"class":1300}," (",[1086,1953,1305],{"class":1304},[1086,1955,1956,1959,1961,1963],{"class":1088,"line":1405},[1086,1957,1958],{"class":1310},"  messages",[1086,1960,1314],{"class":1304},[1086,1962,1943],{"class":1109},[1086,1964,1965],{"class":1300},"(messages)\n",[1086,1967,1968,1970],{"class":1088,"line":1410},[1086,1969,1488],{"class":1304},[1086,1971,1972],{"class":1300},"))\n",[1086,1974,1975],{"class":1088,"line":1433},[1086,1976,1369],{"emptyLinePlaceholder":21},[1086,1978,1979,1981,1983,1986,1988,1990,1992,1994,1997,1999,2001],{"class":1088,"line":1438},[1086,1980,1291],{"class":1290},[1086,1982,1773],{"class":1587},[1086,1984,1985],{"class":1300}," messages ",[1086,1987,1591],{"class":1304},[1086,1989,1713],{"class":1109},[1086,1991,1301],{"class":1300},[1086,1993,1329],{"class":1304},[1086,1995,1996],{"class":1096},"messages",[1086,1998,1329],{"class":1304},[1086,2000,1716],{"class":1304},[1086,2002,1380],{"class":1304},[1086,2004,2005,2007,2009,2011,2013,2015,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046],{"class":1088,"line":1448},[1086,2006,1798],{"class":1310},[1086,2008,1314],{"class":1304},[1086,2010,1719],{"class":1109},[1086,2012,1301],{"class":1300},[1086,2014,1329],{"class":1304},[1086,2016,2017],{"class":1096},"id",[1086,2019,1329],{"class":1304},[1086,2021,1882],{"class":1300},[1086,2023,1808],{"class":1304},[1086,2025,1811],{"class":1109},[1086,2027,1805],{"class":1300},[1086,2029,1808],{"class":1304},[1086,2031,1818],{"class":1109},[1086,2033,1301],{"class":1300},[1086,2035,1805],{"class":1304},[1086,2037,1825],{"class":1587},[1086,2039,1828],{"class":1300},[1086,2041,1808],{"class":1304},[1086,2043,1833],{"class":1109},[1086,2045,1836],{"class":1300},[1086,2047,1332],{"class":1304},[1086,2049,2050,2053,2055,2057,2059,2061,2064,2066,2068,2070,2072,2074,2076,2079,2081,2083,2085,2088,2090,2092,2094,2096,2099,2101,2103,2106,2108,2110,2112],{"class":1088,"line":1458},[1086,2051,2052],{"class":1310},"  chatId",[1086,2054,1314],{"class":1304},[1086,2056,1719],{"class":1109},[1086,2058,1301],{"class":1300},[1086,2060,1329],{"class":1304},[1086,2062,2063],{"class":1096},"chat_id",[1086,2065,1329],{"class":1304},[1086,2067,1882],{"class":1300},[1086,2069,1808],{"class":1304},[1086,2071,1887],{"class":1109},[1086,2073,1805],{"class":1300},[1086,2075,1808],{"class":1304},[1086,2077,2078],{"class":1109},"references",[1086,2080,1301],{"class":1300},[1086,2082,1805],{"class":1304},[1086,2084,1825],{"class":1587},[1086,2086,2087],{"class":1300}," chats",[1086,2089,1808],{"class":1304},[1086,2091,2017],{"class":1300},[1086,2093,1716],{"class":1304},[1086,2095,1710],{"class":1304},[1086,2097,2098],{"class":1310}," onDelete",[1086,2100,1314],{"class":1304},[1086,2102,1391],{"class":1304},[1086,2104,2105],{"class":1096},"cascade",[1086,2107,1329],{"class":1304},[1086,2109,1732],{"class":1304},[1086,2111,1882],{"class":1300},[1086,2113,1332],{"class":1304},[1086,2115,2116,2119,2121,2123,2125,2127,2130,2132,2134,2136,2139,2141,2143,2145,2148,2150,2152,2154,2157,2159,2161,2163,2166,2168,2171,2173,2175,2177,2179,2181],{"class":1088,"line":1474},[1086,2117,2118],{"class":1310},"  role",[1086,2120,1314],{"class":1304},[1086,2122,1719],{"class":1109},[1086,2124,1301],{"class":1300},[1086,2126,1329],{"class":1304},[1086,2128,2129],{"class":1096},"role",[1086,2131,1329],{"class":1304},[1086,2133,1716],{"class":1304},[1086,2135,1710],{"class":1304},[1086,2137,2138],{"class":1310}," enum",[1086,2140,1314],{"class":1304},[1086,2142,1418],{"class":1300},[1086,2144,1329],{"class":1304},[1086,2146,2147],{"class":1096},"user",[1086,2149,1329],{"class":1304},[1086,2151,1716],{"class":1304},[1086,2153,1391],{"class":1304},[1086,2155,2156],{"class":1096},"assistant",[1086,2158,1329],{"class":1304},[1086,2160,1716],{"class":1304},[1086,2162,1391],{"class":1304},[1086,2164,2165],{"class":1096},"system",[1086,2167,1329],{"class":1304},[1086,2169,2170],{"class":1300},"] ",[1086,2172,1488],{"class":1304},[1086,2174,1882],{"class":1300},[1086,2176,1808],{"class":1304},[1086,2178,1887],{"class":1109},[1086,2180,1805],{"class":1300},[1086,2182,1332],{"class":1304},[1086,2184,2185,2188,2190,2192,2194,2196,2199,2201,2203,2205,2207,2209,2211,2214,2216,2218,2220],{"class":1088,"line":1480},[1086,2186,2187],{"class":1310},"  parts",[1086,2189,1314],{"class":1304},[1086,2191,1719],{"class":1109},[1086,2193,1301],{"class":1300},[1086,2195,1329],{"class":1304},[1086,2197,2198],{"class":1096},"parts",[1086,2200,1329],{"class":1304},[1086,2202,1716],{"class":1304},[1086,2204,1710],{"class":1304},[1086,2206,1868],{"class":1310},[1086,2208,1314],{"class":1304},[1086,2210,1391],{"class":1304},[1086,2212,2213],{"class":1096},"json",[1086,2215,1329],{"class":1304},[1086,2217,1732],{"class":1304},[1086,2219,1882],{"class":1300},[1086,2221,1332],{"class":1304},[1086,2223,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270],{"class":1088,"line":1485},[1086,2225,1856],{"class":1310},[1086,2227,1314],{"class":1304},[1086,2229,1724],{"class":1109},[1086,2231,1301],{"class":1300},[1086,2233,1865],{"class":1304},[1086,2235,1868],{"class":1310},[1086,2237,1314],{"class":1304},[1086,2239,1391],{"class":1304},[1086,2241,1875],{"class":1096},[1086,2243,1329],{"class":1304},[1086,2245,1732],{"class":1304},[1086,2247,1882],{"class":1300},[1086,2249,1808],{"class":1304},[1086,2251,1887],{"class":1109},[1086,2253,1805],{"class":1300},[1086,2255,1808],{"class":1304},[1086,2257,1818],{"class":1109},[1086,2259,1301],{"class":1300},[1086,2261,1805],{"class":1304},[1086,2263,1825],{"class":1587},[1086,2265,1902],{"class":1304},[1086,2267,1905],{"class":1109},[1086,2269,1836],{"class":1300},[1086,2271,1332],{"class":1304},[1086,2273,2275,2278,2281,2283],{"class":1088,"line":2274},20,[1086,2276,2277],{"class":1304},"},",[1086,2279,2280],{"class":1942}," table",[1086,2282,1825],{"class":1587},[1086,2284,1317],{"class":1300},[1086,2286,2288,2291,2293,2295,2298,2300,2302,2304,2307,2310,2312],{"class":1088,"line":2287},21,[1086,2289,2290],{"class":1109},"  index",[1086,2292,1301],{"class":1300},[1086,2294,1329],{"class":1304},[1086,2296,2297],{"class":1096},"messages_chat_id_idx",[1086,2299,1329],{"class":1304},[1086,2301,1882],{"class":1300},[1086,2303,1808],{"class":1304},[1086,2305,2306],{"class":1109},"on",[1086,2308,2309],{"class":1300},"(table",[1086,2311,1808],{"class":1304},[1086,2313,2314],{"class":1300},"chatId)\n",[1086,2316,2318],{"class":1088,"line":2317},22,[1086,2319,2320],{"class":1300},"])\n",[1086,2322,2324],{"class":1088,"line":2323},23,[1086,2325,1369],{"emptyLinePlaceholder":21},[1086,2327,2329,2331,2333,2336,2338,2340,2343,2345,2347,2350,2352,2354,2356],{"class":1088,"line":2328},24,[1086,2330,1291],{"class":1290},[1086,2332,1773],{"class":1587},[1086,2334,2335],{"class":1300}," messagesRelations ",[1086,2337,1591],{"class":1304},[1086,2339,1751],{"class":1109},[1086,2341,2342],{"class":1300},"(messages",[1086,2344,1716],{"class":1304},[1086,2346,1939],{"class":1304},[1086,2348,2349],{"class":1942}," one",[1086,2351,1946],{"class":1304},[1086,2353,1825],{"class":1587},[1086,2355,1951],{"class":1300},[1086,2357,1305],{"class":1304},[1086,2359,2361,2364,2366,2368,2370,2372],{"class":1088,"line":2360},25,[1086,2362,2363],{"class":1310},"  chat",[1086,2365,1314],{"class":1304},[1086,2367,2349],{"class":1109},[1086,2369,1934],{"class":1300},[1086,2371,1716],{"class":1304},[1086,2373,1380],{"class":1304},[1086,2375,2377,2380,2382,2385,2387,2390],{"class":1088,"line":2376},26,[1086,2378,2379],{"class":1310},"    fields",[1086,2381,1314],{"class":1304},[1086,2383,2384],{"class":1300}," [messages",[1086,2386,1808],{"class":1304},[1086,2388,2389],{"class":1300},"chatId]",[1086,2391,1332],{"class":1304},[1086,2393,2395,2398,2400,2403,2405],{"class":1088,"line":2394},27,[1086,2396,2397],{"class":1310},"    references",[1086,2399,1314],{"class":1304},[1086,2401,2402],{"class":1300}," [chats",[1086,2404,1808],{"class":1304},[1086,2406,2407],{"class":1300},"id]\n",[1086,2409,2411,2414],{"class":1088,"line":2410},28,[1086,2412,2413],{"class":1304},"  }",[1086,2415,1491],{"class":1300},[1086,2417,2419,2421],{"class":1088,"line":2418},29,[1086,2420,1488],{"class":1304},[1086,2422,1972],{"class":1300},[976,2424,2425],{},"Generate the database migrations from your schema:",[1077,2427,2429],{"className":1079,"code":2428,"language":1081,"meta":1082,"style":1082},"npx nuxt db generate\n",[1036,2430,2431],{"__ignoreMap":1082},[1086,2432,2433,2435,2438,2441],{"class":1088,"line":1089},[1086,2434,1093],{"class":1092},[1086,2436,2437],{"class":1096}," nuxt",[1086,2439,2440],{"class":1096}," db",[1086,2442,2443],{"class":1096}," generate\n",[2445,2446,2447],"tip",{},[976,2448,2449,2450,2453],{},"Migrations are automatically applied when you start the development server with ",[1036,2451,2452],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[980,2455,2457],{"id":2456},"building-the-backend","Building the backend",[976,2459,2460,2461,1808],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1030,2462,2465],{"href":2463,"rel":2464},"https:\u002F\u002Fnitro.build",[1034],"Nitro",[1114,2467,2469],{"id":2468},"creating-a-chat","Creating a chat",[976,2471,2472,2473,2480],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1030,2474,2477],{"href":2475,"rel":2476},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1034],[1036,2478,2479],{},"UIMessage"," type from the AI SDK:",[1277,2482,2483],{},[1077,2484,2487],{"className":1281,"code":2485,"filename":2486,"language":1283,"meta":1082,"style":1082},"import { defineEventHandler, readValidatedBody } from 'h3'\nimport type { UIMessage } from 'ai'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\n\nexport default defineEventHandler(async (event) => {\n  const { message } = await readValidatedBody(event, z.object({\n    message: z.custom\u003CUIMessage>()\n  }).parse)\n\n  \u002F\u002F Create a new chat\n  const [chat] = await db.insert(schema.chats).values({}).returning()\n\n  \u002F\u002F Save the first user message\n  await db.insert(schema.messages).values({\n    chatId: chat.id,\n    role: 'user',\n    parts: message.parts\n  })\n\n  return chat\n})\n","server\u002Fapi\u002Fchats.post.ts",[1036,2488,2489,2513,2536,2560,2580,2584,2608,2645,2669,2682,2686,2691,2742,2746,2751,2780,2796,2811,2825,2831,2835,2843],{"__ignoreMap":1082},[1086,2490,2491,2493,2495,2498,2500,2503,2505,2507,2509,2511],{"class":1088,"line":1089},[1086,2492,1707],{"class":1290},[1086,2494,1710],{"class":1304},[1086,2496,2497],{"class":1300}," defineEventHandler",[1086,2499,1716],{"class":1304},[1086,2501,2502],{"class":1300}," readValidatedBody",[1086,2504,1732],{"class":1304},[1086,2506,1735],{"class":1290},[1086,2508,1391],{"class":1304},[1086,2510,1114],{"class":1096},[1086,2512,1355],{"class":1304},[1086,2514,2515,2517,2520,2522,2525,2527,2529,2531,2534],{"class":1088,"line":1106},[1086,2516,1707],{"class":1290},[1086,2518,2519],{"class":1290}," type",[1086,2521,1710],{"class":1304},[1086,2523,2524],{"class":1300}," UIMessage",[1086,2526,1732],{"class":1304},[1086,2528,1735],{"class":1290},[1086,2530,1391],{"class":1304},[1086,2532,2533],{"class":1096},"ai",[1086,2535,1355],{"class":1304},[1086,2537,2538,2540,2542,2544,2546,2549,2551,2553,2555,2558],{"class":1088,"line":1320},[1086,2539,1707],{"class":1290},[1086,2541,1710],{"class":1304},[1086,2543,2440],{"class":1300},[1086,2545,1716],{"class":1304},[1086,2547,2548],{"class":1300}," schema",[1086,2550,1732],{"class":1304},[1086,2552,1735],{"class":1290},[1086,2554,1391],{"class":1304},[1086,2556,2557],{"class":1096},"hub:db",[1086,2559,1355],{"class":1304},[1086,2561,2562,2564,2566,2569,2571,2573,2575,2578],{"class":1088,"line":1335},[1086,2563,1707],{"class":1290},[1086,2565,1710],{"class":1304},[1086,2567,2568],{"class":1300}," z",[1086,2570,1732],{"class":1304},[1086,2572,1735],{"class":1290},[1086,2574,1391],{"class":1304},[1086,2576,2577],{"class":1096},"zod",[1086,2579,1355],{"class":1304},[1086,2581,2582],{"class":1088,"line":1347},[1086,2583,1369],{"emptyLinePlaceholder":21},[1086,2585,2586,2588,2590,2592,2594,2597,2599,2602,2604,2606],{"class":1088,"line":1358},[1086,2587,1291],{"class":1290},[1086,2589,1294],{"class":1290},[1086,2591,2497],{"class":1109},[1086,2593,1301],{"class":1300},[1086,2595,2596],{"class":1587},"async",[1086,2598,1951],{"class":1304},[1086,2600,2601],{"class":1942},"event",[1086,2603,1882],{"class":1304},[1086,2605,1825],{"class":1587},[1086,2607,1380],{"class":1304},[1086,2609,2610,2613,2615,2618,2620,2623,2626,2628,2630,2632,2634,2636,2638,2641,2643],{"class":1088,"line":1366},[1086,2611,2612],{"class":1587},"  const",[1086,2614,1710],{"class":1304},[1086,2616,2617],{"class":1300}," message",[1086,2619,1732],{"class":1304},[1086,2621,2622],{"class":1304}," =",[1086,2624,2625],{"class":1290}," await",[1086,2627,2502],{"class":1109},[1086,2629,1301],{"class":1310},[1086,2631,2601],{"class":1300},[1086,2633,1716],{"class":1304},[1086,2635,2568],{"class":1300},[1086,2637,1808],{"class":1304},[1086,2639,2640],{"class":1109},"object",[1086,2642,1301],{"class":1310},[1086,2644,1305],{"class":1304},[1086,2646,2647,2650,2652,2654,2656,2659,2661,2663,2666],{"class":1088,"line":1372},[1086,2648,2649],{"class":1310},"    message",[1086,2651,1314],{"class":1304},[1086,2653,2568],{"class":1300},[1086,2655,1808],{"class":1304},[1086,2657,2658],{"class":1109},"custom",[1086,2660,1559],{"class":1304},[1086,2662,2479],{"class":1092},[1086,2664,2665],{"class":1304},">",[1086,2667,2668],{"class":1310},"()\n",[1086,2670,2671,2673,2675,2677,2680],{"class":1088,"line":1383},[1086,2672,2413],{"class":1304},[1086,2674,1882],{"class":1310},[1086,2676,1808],{"class":1304},[1086,2678,2679],{"class":1300},"parse",[1086,2681,1491],{"class":1310},[1086,2683,2684],{"class":1088,"line":1399},[1086,2685,1369],{"emptyLinePlaceholder":21},[1086,2687,2688],{"class":1088,"line":1405},[1086,2689,2690],{"class":1470},"  \u002F\u002F Create a new chat\n",[1086,2692,2693,2695,2697,2699,2701,2703,2705,2707,2709,2712,2714,2717,2719,2721,2723,2725,2728,2730,2733,2735,2737,2740],{"class":1088,"line":1410},[1086,2694,2612],{"class":1587},[1086,2696,1418],{"class":1304},[1086,2698,262],{"class":1300},[1086,2700,1428],{"class":1304},[1086,2702,2622],{"class":1304},[1086,2704,2625],{"class":1290},[1086,2706,2440],{"class":1300},[1086,2708,1808],{"class":1304},[1086,2710,2711],{"class":1109},"insert",[1086,2713,1301],{"class":1310},[1086,2715,2716],{"class":1300},"schema",[1086,2718,1808],{"class":1304},[1086,2720,1787],{"class":1300},[1086,2722,1882],{"class":1310},[1086,2724,1808],{"class":1304},[1086,2726,2727],{"class":1109},"values",[1086,2729,1301],{"class":1310},[1086,2731,2732],{"class":1304},"{}",[1086,2734,1882],{"class":1310},[1086,2736,1808],{"class":1304},[1086,2738,2739],{"class":1109},"returning",[1086,2741,2668],{"class":1310},[1086,2743,2744],{"class":1088,"line":1433},[1086,2745,1369],{"emptyLinePlaceholder":21},[1086,2747,2748],{"class":1088,"line":1438},[1086,2749,2750],{"class":1470},"  \u002F\u002F Save the first user message\n",[1086,2752,2753,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778],{"class":1088,"line":1448},[1086,2754,2755],{"class":1290},"  await",[1086,2757,2440],{"class":1300},[1086,2759,1808],{"class":1304},[1086,2761,2711],{"class":1109},[1086,2763,1301],{"class":1310},[1086,2765,2716],{"class":1300},[1086,2767,1808],{"class":1304},[1086,2769,1996],{"class":1300},[1086,2771,1882],{"class":1310},[1086,2773,1808],{"class":1304},[1086,2775,2727],{"class":1109},[1086,2777,1301],{"class":1310},[1086,2779,1305],{"class":1304},[1086,2781,2782,2785,2787,2790,2792,2794],{"class":1088,"line":1458},[1086,2783,2784],{"class":1310},"    chatId",[1086,2786,1314],{"class":1304},[1086,2788,2789],{"class":1300}," chat",[1086,2791,1808],{"class":1304},[1086,2793,2017],{"class":1300},[1086,2795,1332],{"class":1304},[1086,2797,2798,2801,2803,2805,2807,2809],{"class":1088,"line":1474},[1086,2799,2800],{"class":1310},"    role",[1086,2802,1314],{"class":1304},[1086,2804,1391],{"class":1304},[1086,2806,2147],{"class":1096},[1086,2808,1329],{"class":1304},[1086,2810,1332],{"class":1304},[1086,2812,2813,2816,2818,2820,2822],{"class":1088,"line":1480},[1086,2814,2815],{"class":1310},"    parts",[1086,2817,1314],{"class":1304},[1086,2819,2617],{"class":1300},[1086,2821,1808],{"class":1304},[1086,2823,2824],{"class":1300},"parts\n",[1086,2826,2827,2829],{"class":1088,"line":1485},[1086,2828,2413],{"class":1304},[1086,2830,1491],{"class":1310},[1086,2832,2833],{"class":1088,"line":2274},[1086,2834,1369],{"emptyLinePlaceholder":21},[1086,2836,2837,2840],{"class":1088,"line":2287},[1086,2838,2839],{"class":1290},"  return",[1086,2841,2842],{"class":1300}," chat\n",[1086,2844,2845,2847],{"class":1088,"line":2317},[1086,2846,1488],{"class":1304},[1086,2848,1491],{"class":1300},[1114,2850,2852],{"id":2851},"streaming-ai-responses","Streaming AI responses",[976,2854,2855,2856,2863,2864,2871,2872,2879],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1030,2857,2860],{"href":2858,"rel":2859},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1034],[1036,2861,2862],{},"streamText",", ",[1030,2865,2868],{"href":2866,"rel":2867},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1034],[1036,2869,2870],{},"createUIMessageStream",", and ",[1030,2873,2876],{"href":2874,"rel":2875},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1034],[1036,2877,2878],{},"createUIMessageStreamResponse"," from the AI SDK:",[1277,2881,2882],{},[1695,2883,2884],{},[1077,2885,2888],{"className":1281,"code":2886,"filename":2887,"language":1283,"meta":1082,"style":1082},"import { createError, defineEventHandler, getValidatedRouterParams, readValidatedBody } from 'h3'\nimport { eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\nimport {\n  convertToModelMessages,\n  createUIMessageStream,\n  createUIMessageStreamResponse,\n  generateText,\n  streamText\n} from 'ai'\nimport type { UIMessage } from 'ai'\n\nconst MODELS = [\n  { value: 'openai\u002Fgpt-5-nano', label: 'GPT-5 Nano' },\n  { value: 'anthropic\u002Fclaude-haiku-4.5', label: 'Claude Haiku 4.5' },\n  { value: 'google\u002Fgemini-3-flash', label: 'Gemini 3 Flash' }\n]\n\nexport default defineEventHandler(async (event) => {\n  const { id } = await getValidatedRouterParams(event, z.object({\n    id: z.string()\n  }).parse)\n\n  const { model, messages } = await readValidatedBody(event, z.object({\n    model: z.string().refine(value => MODELS.some(m => m.value === value), {\n      message: 'Invalid model'\n    }),\n    messages: z.array(z.custom\u003CUIMessage>())\n  }).parse)\n\n  \u002F\u002F Fetch the chat from the database\n  const chat = await db.query.chats.findFirst({\n    where: (chat, { eq }) => eq(chat.id, id as string)\n  })\n\n  if (!chat) {\n    throw createError({ statusCode: 404, statusMessage: 'Chat not found' })\n  }\n\n  \u002F\u002F Generate a title for the chat if it doesn't have one\n  if (!chat.title) {\n    const { text: title } = await generateText({\n      model: 'anthropic\u002Fclaude-haiku-4.5',\n      system: `Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.`,\n      prompt: JSON.stringify(messages[0])\n    })\n\n    await db.update(schema.chats).set({ title }).where(eq(schema.chats.id, id))\n  }\n\n  \u002F\u002F Save the user message if it's a follow-up\n  const lastMessage = messages[messages.length - 1]\n  if (lastMessage?.role === 'user' && messages.length > 1) {\n    await db.insert(schema.messages).values({\n      chatId: id,\n      role: 'user',\n      parts: lastMessage.parts\n    })\n  }\n\n  \u002F\u002F Create the streaming response\n  const stream = createUIMessageStream({\n    execute: async ({ writer }) => {\n      const result = streamText({\n        model,\n        system: `You are a helpful AI assistant. Be concise and friendly.`,\n        messages: await convertToModelMessages(messages),\n        providerOptions: {\n          anthropic: {\n            thinking: {\n              type: 'enabled',\n              budgetTokens: 2048\n            }\n          },\n          google: {\n            thinkingConfig: {\n              includeThoughts: true,\n              thinkingLevel: 'low'\n            }\n          },\n          openai: {\n            reasoningEffort: 'low',\n            reasoningSummary: 'detailed'\n          }\n        }\n      })\n\n      \u002F\u002F Notify the client that a title was generated\n      if (!chat.title) {\n        writer.write({\n          type: 'data-chat-title',\n          data: { message: 'Title generated' },\n          transient: true\n        })\n      }\n\n      writer.merge(result.toUIMessageStream())\n    },\n    onFinish: async ({ messages }) => {\n      \u002F\u002F Save the assistant's response to the database\n      await db.insert(schema.messages).values(messages.map(message => ({\n        chatId: chat.id,\n        role: message.role as 'user' | 'assistant',\n        parts: message.parts\n      })))\n    }\n  })\n\n  return createUIMessageStreamResponse({ stream })\n})\n","server\u002Fapi\u002Fchats\u002F[id].post.ts",[1036,2889,2890,2922,2941,2963,2981,2987,2994,3001,3008,3015,3020,3032,3052,3056,3068,3102,3132,3163,3168,3172,3194,3227,3243,3255,3259,3297,3357,3371,3380,3411,3424,3429,3435,3466,3510,3517,3522,3540,3579,3585,3590,3596,3616,3644,3660,3679,3707,3714,3719,3785,3790,3795,3801,3830,3871,3900,3912,3928,3942,3949,3954,3959,3965,3982,4004,4022,4030,4047,4068,4078,4088,4098,4115,4126,4132,4138,4148,4158,4171,4186,4191,4196,4206,4222,4237,4243,4249,4257,4262,4268,4288,4303,4320,4343,4354,4362,4368,4373,4396,4402,4422,4428,4474,4490,4523,4537,4545,4550,4557,4562,4580],{"__ignoreMap":1082},[1086,2891,2892,2894,2896,2899,2901,2903,2905,2908,2910,2912,2914,2916,2918,2920],{"class":1088,"line":1089},[1086,2893,1707],{"class":1290},[1086,2895,1710],{"class":1304},[1086,2897,2898],{"class":1300}," createError",[1086,2900,1716],{"class":1304},[1086,2902,2497],{"class":1300},[1086,2904,1716],{"class":1304},[1086,2906,2907],{"class":1300}," getValidatedRouterParams",[1086,2909,1716],{"class":1304},[1086,2911,2502],{"class":1300},[1086,2913,1732],{"class":1304},[1086,2915,1735],{"class":1290},[1086,2917,1391],{"class":1304},[1086,2919,1114],{"class":1096},[1086,2921,1355],{"class":1304},[1086,2923,2924,2926,2928,2931,2933,2935,2937,2939],{"class":1088,"line":1106},[1086,2925,1707],{"class":1290},[1086,2927,1710],{"class":1304},[1086,2929,2930],{"class":1300}," eq",[1086,2932,1732],{"class":1304},[1086,2934,1735],{"class":1290},[1086,2936,1391],{"class":1304},[1086,2938,1760],{"class":1096},[1086,2940,1355],{"class":1304},[1086,2942,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961],{"class":1088,"line":1320},[1086,2944,1707],{"class":1290},[1086,2946,1710],{"class":1304},[1086,2948,2440],{"class":1300},[1086,2950,1716],{"class":1304},[1086,2952,2548],{"class":1300},[1086,2954,1732],{"class":1304},[1086,2956,1735],{"class":1290},[1086,2958,1391],{"class":1304},[1086,2960,2557],{"class":1096},[1086,2962,1355],{"class":1304},[1086,2964,2965,2967,2969,2971,2973,2975,2977,2979],{"class":1088,"line":1335},[1086,2966,1707],{"class":1290},[1086,2968,1710],{"class":1304},[1086,2970,2568],{"class":1300},[1086,2972,1732],{"class":1304},[1086,2974,1735],{"class":1290},[1086,2976,1391],{"class":1304},[1086,2978,2577],{"class":1096},[1086,2980,1355],{"class":1304},[1086,2982,2983,2985],{"class":1088,"line":1347},[1086,2984,1707],{"class":1290},[1086,2986,1380],{"class":1304},[1086,2988,2989,2992],{"class":1088,"line":1358},[1086,2990,2991],{"class":1300},"  convertToModelMessages",[1086,2993,1332],{"class":1304},[1086,2995,2996,2999],{"class":1088,"line":1366},[1086,2997,2998],{"class":1300},"  createUIMessageStream",[1086,3000,1332],{"class":1304},[1086,3002,3003,3006],{"class":1088,"line":1372},[1086,3004,3005],{"class":1300},"  createUIMessageStreamResponse",[1086,3007,1332],{"class":1304},[1086,3009,3010,3013],{"class":1088,"line":1383},[1086,3011,3012],{"class":1300},"  generateText",[1086,3014,1332],{"class":1304},[1086,3016,3017],{"class":1088,"line":1399},[1086,3018,3019],{"class":1300},"  streamText\n",[1086,3021,3022,3024,3026,3028,3030],{"class":1088,"line":1405},[1086,3023,1488],{"class":1304},[1086,3025,1735],{"class":1290},[1086,3027,1391],{"class":1304},[1086,3029,2533],{"class":1096},[1086,3031,1355],{"class":1304},[1086,3033,3034,3036,3038,3040,3042,3044,3046,3048,3050],{"class":1088,"line":1410},[1086,3035,1707],{"class":1290},[1086,3037,2519],{"class":1290},[1086,3039,1710],{"class":1304},[1086,3041,2524],{"class":1300},[1086,3043,1732],{"class":1304},[1086,3045,1735],{"class":1290},[1086,3047,1391],{"class":1304},[1086,3049,2533],{"class":1096},[1086,3051,1355],{"class":1304},[1086,3053,3054],{"class":1088,"line":1433},[1086,3055,1369],{"emptyLinePlaceholder":21},[1086,3057,3058,3061,3064,3066],{"class":1088,"line":1438},[1086,3059,3060],{"class":1587},"const",[1086,3062,3063],{"class":1300}," MODELS ",[1086,3065,1591],{"class":1304},[1086,3067,1317],{"class":1300},[1086,3069,3070,3073,3076,3078,3080,3083,3085,3087,3090,3092,3094,3097,3099],{"class":1088,"line":1448},[1086,3071,3072],{"class":1304},"  {",[1086,3074,3075],{"class":1310}," value",[1086,3077,1314],{"class":1304},[1086,3079,1391],{"class":1304},[1086,3081,3082],{"class":1096},"openai\u002Fgpt-5-nano",[1086,3084,1329],{"class":1304},[1086,3086,1716],{"class":1304},[1086,3088,3089],{"class":1310}," label",[1086,3091,1314],{"class":1304},[1086,3093,1391],{"class":1304},[1086,3095,3096],{"class":1096},"GPT-5 Nano",[1086,3098,1329],{"class":1304},[1086,3100,3101],{"class":1304}," },\n",[1086,3103,3104,3106,3108,3110,3112,3115,3117,3119,3121,3123,3125,3128,3130],{"class":1088,"line":1458},[1086,3105,3072],{"class":1304},[1086,3107,3075],{"class":1310},[1086,3109,1314],{"class":1304},[1086,3111,1391],{"class":1304},[1086,3113,3114],{"class":1096},"anthropic\u002Fclaude-haiku-4.5",[1086,3116,1329],{"class":1304},[1086,3118,1716],{"class":1304},[1086,3120,3089],{"class":1310},[1086,3122,1314],{"class":1304},[1086,3124,1391],{"class":1304},[1086,3126,3127],{"class":1096},"Claude Haiku 4.5",[1086,3129,1329],{"class":1304},[1086,3131,3101],{"class":1304},[1086,3133,3134,3136,3138,3140,3142,3145,3147,3149,3151,3153,3155,3158,3160],{"class":1088,"line":1474},[1086,3135,3072],{"class":1304},[1086,3137,3075],{"class":1310},[1086,3139,1314],{"class":1304},[1086,3141,1391],{"class":1304},[1086,3143,3144],{"class":1096},"google\u002Fgemini-3-flash",[1086,3146,1329],{"class":1304},[1086,3148,1716],{"class":1304},[1086,3150,3089],{"class":1310},[1086,3152,1314],{"class":1304},[1086,3154,1391],{"class":1304},[1086,3156,3157],{"class":1096},"Gemini 3 Flash",[1086,3159,1329],{"class":1304},[1086,3161,3162],{"class":1304}," }\n",[1086,3164,3165],{"class":1088,"line":1480},[1086,3166,3167],{"class":1300},"]\n",[1086,3169,3170],{"class":1088,"line":1485},[1086,3171,1369],{"emptyLinePlaceholder":21},[1086,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192],{"class":1088,"line":2274},[1086,3175,1291],{"class":1290},[1086,3177,1294],{"class":1290},[1086,3179,2497],{"class":1109},[1086,3181,1301],{"class":1300},[1086,3183,2596],{"class":1587},[1086,3185,1951],{"class":1304},[1086,3187,2601],{"class":1942},[1086,3189,1882],{"class":1304},[1086,3191,1825],{"class":1587},[1086,3193,1380],{"class":1304},[1086,3195,3196,3198,3200,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225],{"class":1088,"line":2287},[1086,3197,2612],{"class":1587},[1086,3199,1710],{"class":1304},[1086,3201,3202],{"class":1300}," id",[1086,3204,1732],{"class":1304},[1086,3206,2622],{"class":1304},[1086,3208,2625],{"class":1290},[1086,3210,2907],{"class":1109},[1086,3212,1301],{"class":1310},[1086,3214,2601],{"class":1300},[1086,3216,1716],{"class":1304},[1086,3218,2568],{"class":1300},[1086,3220,1808],{"class":1304},[1086,3222,2640],{"class":1109},[1086,3224,1301],{"class":1310},[1086,3226,1305],{"class":1304},[1086,3228,3229,3232,3234,3236,3238,3241],{"class":1088,"line":2317},[1086,3230,3231],{"class":1310},"    id",[1086,3233,1314],{"class":1304},[1086,3235,2568],{"class":1300},[1086,3237,1808],{"class":1304},[1086,3239,3240],{"class":1109},"string",[1086,3242,2668],{"class":1310},[1086,3244,3245,3247,3249,3251,3253],{"class":1088,"line":2323},[1086,3246,2413],{"class":1304},[1086,3248,1882],{"class":1310},[1086,3250,1808],{"class":1304},[1086,3252,2679],{"class":1300},[1086,3254,1491],{"class":1310},[1086,3256,3257],{"class":1088,"line":2328},[1086,3258,1369],{"emptyLinePlaceholder":21},[1086,3260,3261,3263,3265,3268,3270,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295],{"class":1088,"line":2360},[1086,3262,2612],{"class":1587},[1086,3264,1710],{"class":1304},[1086,3266,3267],{"class":1300}," model",[1086,3269,1716],{"class":1304},[1086,3271,3272],{"class":1300}," messages",[1086,3274,1732],{"class":1304},[1086,3276,2622],{"class":1304},[1086,3278,2625],{"class":1290},[1086,3280,2502],{"class":1109},[1086,3282,1301],{"class":1310},[1086,3284,2601],{"class":1300},[1086,3286,1716],{"class":1304},[1086,3288,2568],{"class":1300},[1086,3290,1808],{"class":1304},[1086,3292,2640],{"class":1109},[1086,3294,1301],{"class":1310},[1086,3296,1305],{"class":1304},[1086,3298,3299,3302,3304,3306,3308,3310,3312,3314,3317,3319,3322,3324,3327,3329,3332,3334,3337,3339,3342,3344,3346,3349,3351,3353,3355],{"class":1088,"line":2376},[1086,3300,3301],{"class":1310},"    model",[1086,3303,1314],{"class":1304},[1086,3305,2568],{"class":1300},[1086,3307,1808],{"class":1304},[1086,3309,3240],{"class":1109},[1086,3311,1805],{"class":1310},[1086,3313,1808],{"class":1304},[1086,3315,3316],{"class":1109},"refine",[1086,3318,1301],{"class":1310},[1086,3320,3321],{"class":1942},"value",[1086,3323,1825],{"class":1587},[1086,3325,3326],{"class":1300}," MODELS",[1086,3328,1808],{"class":1304},[1086,3330,3331],{"class":1109},"some",[1086,3333,1301],{"class":1310},[1086,3335,3336],{"class":1942},"m",[1086,3338,1825],{"class":1587},[1086,3340,3341],{"class":1300}," m",[1086,3343,1808],{"class":1304},[1086,3345,3321],{"class":1300},[1086,3347,3348],{"class":1304}," ===",[1086,3350,3075],{"class":1300},[1086,3352,1882],{"class":1310},[1086,3354,1716],{"class":1304},[1086,3356,1380],{"class":1304},[1086,3358,3359,3362,3364,3366,3369],{"class":1088,"line":2394},[1086,3360,3361],{"class":1310},"      message",[1086,3363,1314],{"class":1304},[1086,3365,1391],{"class":1304},[1086,3367,3368],{"class":1096},"Invalid model",[1086,3370,1355],{"class":1304},[1086,3372,3373,3376,3378],{"class":1088,"line":2410},[1086,3374,3375],{"class":1304},"    }",[1086,3377,1882],{"class":1310},[1086,3379,1332],{"class":1304},[1086,3381,3382,3385,3387,3389,3391,3394,3396,3399,3401,3403,3405,3407,3409],{"class":1088,"line":2418},[1086,3383,3384],{"class":1310},"    messages",[1086,3386,1314],{"class":1304},[1086,3388,2568],{"class":1300},[1086,3390,1808],{"class":1304},[1086,3392,3393],{"class":1109},"array",[1086,3395,1301],{"class":1310},[1086,3397,3398],{"class":1300},"z",[1086,3400,1808],{"class":1304},[1086,3402,2658],{"class":1109},[1086,3404,1559],{"class":1304},[1086,3406,2479],{"class":1092},[1086,3408,2665],{"class":1304},[1086,3410,1908],{"class":1310},[1086,3412,3414,3416,3418,3420,3422],{"class":1088,"line":3413},30,[1086,3415,2413],{"class":1304},[1086,3417,1882],{"class":1310},[1086,3419,1808],{"class":1304},[1086,3421,2679],{"class":1300},[1086,3423,1491],{"class":1310},[1086,3425,3427],{"class":1088,"line":3426},31,[1086,3428,1369],{"emptyLinePlaceholder":21},[1086,3430,3432],{"class":1088,"line":3431},32,[1086,3433,3434],{"class":1470},"  \u002F\u002F Fetch the chat from the database\n",[1086,3436,3438,3440,3442,3444,3446,3448,3450,3453,3455,3457,3459,3462,3464],{"class":1088,"line":3437},33,[1086,3439,2612],{"class":1587},[1086,3441,2789],{"class":1300},[1086,3443,2622],{"class":1304},[1086,3445,2625],{"class":1290},[1086,3447,2440],{"class":1300},[1086,3449,1808],{"class":1304},[1086,3451,3452],{"class":1300},"query",[1086,3454,1808],{"class":1304},[1086,3456,1787],{"class":1300},[1086,3458,1808],{"class":1304},[1086,3460,3461],{"class":1109},"findFirst",[1086,3463,1301],{"class":1310},[1086,3465,1305],{"class":1304},[1086,3467,3469,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3505,3508],{"class":1088,"line":3468},34,[1086,3470,3471],{"class":1109},"    where",[1086,3473,1314],{"class":1304},[1086,3475,1951],{"class":1304},[1086,3477,262],{"class":1942},[1086,3479,1716],{"class":1304},[1086,3481,1710],{"class":1304},[1086,3483,2930],{"class":1942},[1086,3485,1946],{"class":1304},[1086,3487,1825],{"class":1587},[1086,3489,2930],{"class":1109},[1086,3491,1301],{"class":1310},[1086,3493,262],{"class":1300},[1086,3495,1808],{"class":1304},[1086,3497,2017],{"class":1300},[1086,3499,1716],{"class":1304},[1086,3501,3202],{"class":1300},[1086,3503,3504],{"class":1290}," as",[1086,3506,3507],{"class":1092}," string",[1086,3509,1491],{"class":1310},[1086,3511,3513,3515],{"class":1088,"line":3512},35,[1086,3514,2413],{"class":1304},[1086,3516,1491],{"class":1310},[1086,3518,3520],{"class":1088,"line":3519},36,[1086,3521,1369],{"emptyLinePlaceholder":21},[1086,3523,3525,3528,3530,3533,3535,3538],{"class":1088,"line":3524},37,[1086,3526,3527],{"class":1290},"  if",[1086,3529,1951],{"class":1310},[1086,3531,3532],{"class":1304},"!",[1086,3534,262],{"class":1300},[1086,3536,3537],{"class":1310},") ",[1086,3539,1305],{"class":1304},[1086,3541,3543,3546,3548,3550,3552,3555,3557,3561,3563,3566,3568,3570,3573,3575,3577],{"class":1088,"line":3542},38,[1086,3544,3545],{"class":1290},"    throw",[1086,3547,2898],{"class":1109},[1086,3549,1301],{"class":1310},[1086,3551,1865],{"class":1304},[1086,3553,3554],{"class":1310}," statusCode",[1086,3556,1314],{"class":1304},[1086,3558,3560],{"class":3559},"sbssI"," 404",[1086,3562,1716],{"class":1304},[1086,3564,3565],{"class":1310}," statusMessage",[1086,3567,1314],{"class":1304},[1086,3569,1391],{"class":1304},[1086,3571,3572],{"class":1096},"Chat not found",[1086,3574,1329],{"class":1304},[1086,3576,1732],{"class":1304},[1086,3578,1491],{"class":1310},[1086,3580,3582],{"class":1088,"line":3581},39,[1086,3583,3584],{"class":1304},"  }\n",[1086,3586,3588],{"class":1088,"line":3587},40,[1086,3589,1369],{"emptyLinePlaceholder":21},[1086,3591,3593],{"class":1088,"line":3592},41,[1086,3594,3595],{"class":1470},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1086,3597,3599,3601,3603,3605,3607,3609,3612,3614],{"class":1088,"line":3598},42,[1086,3600,3527],{"class":1290},[1086,3602,1951],{"class":1310},[1086,3604,3532],{"class":1304},[1086,3606,262],{"class":1300},[1086,3608,1808],{"class":1304},[1086,3610,3611],{"class":1300},"title",[1086,3613,3537],{"class":1310},[1086,3615,1305],{"class":1304},[1086,3617,3619,3622,3624,3626,3628,3631,3633,3635,3637,3640,3642],{"class":1088,"line":3618},43,[1086,3620,3621],{"class":1587},"    const",[1086,3623,1710],{"class":1304},[1086,3625,1719],{"class":1310},[1086,3627,1314],{"class":1304},[1086,3629,3630],{"class":1300}," title",[1086,3632,1732],{"class":1304},[1086,3634,2622],{"class":1304},[1086,3636,2625],{"class":1290},[1086,3638,3639],{"class":1109}," generateText",[1086,3641,1301],{"class":1310},[1086,3643,1305],{"class":1304},[1086,3645,3647,3650,3652,3654,3656,3658],{"class":1088,"line":3646},44,[1086,3648,3649],{"class":1310},"      model",[1086,3651,1314],{"class":1304},[1086,3653,1391],{"class":1304},[1086,3655,3114],{"class":1096},[1086,3657,1329],{"class":1304},[1086,3659,1332],{"class":1304},[1086,3661,3663,3666,3668,3671,3674,3677],{"class":1088,"line":3662},45,[1086,3664,3665],{"class":1310},"      system",[1086,3667,1314],{"class":1304},[1086,3669,3670],{"class":1304}," `",[1086,3672,3673],{"class":1096},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1086,3675,3676],{"class":1304},"`",[1086,3678,1332],{"class":1304},[1086,3680,3682,3685,3687,3690,3692,3695,3697,3699,3702,3705],{"class":1088,"line":3681},46,[1086,3683,3684],{"class":1310},"      prompt",[1086,3686,1314],{"class":1304},[1086,3688,3689],{"class":1300}," JSON",[1086,3691,1808],{"class":1304},[1086,3693,3694],{"class":1109},"stringify",[1086,3696,1301],{"class":1310},[1086,3698,1996],{"class":1300},[1086,3700,3701],{"class":1310},"[",[1086,3703,3704],{"class":3559},"0",[1086,3706,2320],{"class":1310},[1086,3708,3710,3712],{"class":1088,"line":3709},47,[1086,3711,3375],{"class":1304},[1086,3713,1491],{"class":1310},[1086,3715,3717],{"class":1088,"line":3716},48,[1086,3718,1369],{"emptyLinePlaceholder":21},[1086,3720,3722,3725,3727,3729,3732,3734,3736,3738,3740,3742,3744,3747,3749,3751,3753,3755,3757,3759,3762,3764,3767,3769,3771,3773,3775,3777,3779,3781,3783],{"class":1088,"line":3721},49,[1086,3723,3724],{"class":1290},"    await",[1086,3726,2440],{"class":1300},[1086,3728,1808],{"class":1304},[1086,3730,3731],{"class":1109},"update",[1086,3733,1301],{"class":1310},[1086,3735,2716],{"class":1300},[1086,3737,1808],{"class":1304},[1086,3739,1787],{"class":1300},[1086,3741,1882],{"class":1310},[1086,3743,1808],{"class":1304},[1086,3745,3746],{"class":1109},"set",[1086,3748,1301],{"class":1310},[1086,3750,1865],{"class":1304},[1086,3752,3630],{"class":1300},[1086,3754,1732],{"class":1304},[1086,3756,1882],{"class":1310},[1086,3758,1808],{"class":1304},[1086,3760,3761],{"class":1109},"where",[1086,3763,1301],{"class":1310},[1086,3765,3766],{"class":1109},"eq",[1086,3768,1301],{"class":1310},[1086,3770,2716],{"class":1300},[1086,3772,1808],{"class":1304},[1086,3774,1787],{"class":1300},[1086,3776,1808],{"class":1304},[1086,3778,2017],{"class":1300},[1086,3780,1716],{"class":1304},[1086,3782,3202],{"class":1300},[1086,3784,1972],{"class":1310},[1086,3786,3788],{"class":1088,"line":3787},50,[1086,3789,3584],{"class":1304},[1086,3791,3793],{"class":1088,"line":3792},51,[1086,3794,1369],{"emptyLinePlaceholder":21},[1086,3796,3798],{"class":1088,"line":3797},52,[1086,3799,3800],{"class":1470},"  \u002F\u002F Save the user message if it's a follow-up\n",[1086,3802,3804,3806,3809,3811,3813,3815,3817,3819,3822,3825,3828],{"class":1088,"line":3803},53,[1086,3805,2612],{"class":1587},[1086,3807,3808],{"class":1300}," lastMessage",[1086,3810,2622],{"class":1304},[1086,3812,3272],{"class":1300},[1086,3814,3701],{"class":1310},[1086,3816,1996],{"class":1300},[1086,3818,1808],{"class":1304},[1086,3820,3821],{"class":1300},"length",[1086,3823,3824],{"class":1304}," -",[1086,3826,3827],{"class":3559}," 1",[1086,3829,3167],{"class":1310},[1086,3831,3833,3835,3837,3840,3843,3845,3847,3849,3851,3853,3856,3858,3860,3862,3865,3867,3869],{"class":1088,"line":3832},54,[1086,3834,3527],{"class":1290},[1086,3836,1951],{"class":1310},[1086,3838,3839],{"class":1300},"lastMessage",[1086,3841,3842],{"class":1304},"?.",[1086,3844,2129],{"class":1300},[1086,3846,3348],{"class":1304},[1086,3848,1391],{"class":1304},[1086,3850,2147],{"class":1096},[1086,3852,1329],{"class":1304},[1086,3854,3855],{"class":1304}," &&",[1086,3857,3272],{"class":1300},[1086,3859,1808],{"class":1304},[1086,3861,3821],{"class":1300},[1086,3863,3864],{"class":1304}," >",[1086,3866,3827],{"class":3559},[1086,3868,3537],{"class":1310},[1086,3870,1305],{"class":1304},[1086,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898],{"class":1088,"line":3873},55,[1086,3875,3724],{"class":1290},[1086,3877,2440],{"class":1300},[1086,3879,1808],{"class":1304},[1086,3881,2711],{"class":1109},[1086,3883,1301],{"class":1310},[1086,3885,2716],{"class":1300},[1086,3887,1808],{"class":1304},[1086,3889,1996],{"class":1300},[1086,3891,1882],{"class":1310},[1086,3893,1808],{"class":1304},[1086,3895,2727],{"class":1109},[1086,3897,1301],{"class":1310},[1086,3899,1305],{"class":1304},[1086,3901,3903,3906,3908,3910],{"class":1088,"line":3902},56,[1086,3904,3905],{"class":1310},"      chatId",[1086,3907,1314],{"class":1304},[1086,3909,3202],{"class":1300},[1086,3911,1332],{"class":1304},[1086,3913,3915,3918,3920,3922,3924,3926],{"class":1088,"line":3914},57,[1086,3916,3917],{"class":1310},"      role",[1086,3919,1314],{"class":1304},[1086,3921,1391],{"class":1304},[1086,3923,2147],{"class":1096},[1086,3925,1329],{"class":1304},[1086,3927,1332],{"class":1304},[1086,3929,3931,3934,3936,3938,3940],{"class":1088,"line":3930},58,[1086,3932,3933],{"class":1310},"      parts",[1086,3935,1314],{"class":1304},[1086,3937,3808],{"class":1300},[1086,3939,1808],{"class":1304},[1086,3941,2824],{"class":1300},[1086,3943,3945,3947],{"class":1088,"line":3944},59,[1086,3946,3375],{"class":1304},[1086,3948,1491],{"class":1310},[1086,3950,3952],{"class":1088,"line":3951},60,[1086,3953,3584],{"class":1304},[1086,3955,3957],{"class":1088,"line":3956},61,[1086,3958,1369],{"emptyLinePlaceholder":21},[1086,3960,3962],{"class":1088,"line":3961},62,[1086,3963,3964],{"class":1470},"  \u002F\u002F Create the streaming response\n",[1086,3966,3968,3970,3973,3975,3978,3980],{"class":1088,"line":3967},63,[1086,3969,2612],{"class":1587},[1086,3971,3972],{"class":1300}," stream",[1086,3974,2622],{"class":1304},[1086,3976,3977],{"class":1109}," createUIMessageStream",[1086,3979,1301],{"class":1310},[1086,3981,1305],{"class":1304},[1086,3983,3985,3988,3990,3993,3995,3998,4000,4002],{"class":1088,"line":3984},64,[1086,3986,3987],{"class":1109},"    execute",[1086,3989,1314],{"class":1304},[1086,3991,3992],{"class":1587}," async",[1086,3994,1939],{"class":1304},[1086,3996,3997],{"class":1942}," writer",[1086,3999,1946],{"class":1304},[1086,4001,1825],{"class":1587},[1086,4003,1380],{"class":1304},[1086,4005,4007,4010,4013,4015,4018,4020],{"class":1088,"line":4006},65,[1086,4008,4009],{"class":1587},"      const",[1086,4011,4012],{"class":1300}," result",[1086,4014,2622],{"class":1304},[1086,4016,4017],{"class":1109}," streamText",[1086,4019,1301],{"class":1310},[1086,4021,1305],{"class":1304},[1086,4023,4025,4028],{"class":1088,"line":4024},66,[1086,4026,4027],{"class":1300},"        model",[1086,4029,1332],{"class":1304},[1086,4031,4033,4036,4038,4040,4043,4045],{"class":1088,"line":4032},67,[1086,4034,4035],{"class":1310},"        system",[1086,4037,1314],{"class":1304},[1086,4039,3670],{"class":1304},[1086,4041,4042],{"class":1096},"You are a helpful AI assistant. Be concise and friendly.",[1086,4044,3676],{"class":1304},[1086,4046,1332],{"class":1304},[1086,4048,4050,4053,4055,4057,4060,4062,4064,4066],{"class":1088,"line":4049},68,[1086,4051,4052],{"class":1310},"        messages",[1086,4054,1314],{"class":1304},[1086,4056,2625],{"class":1290},[1086,4058,4059],{"class":1109}," convertToModelMessages",[1086,4061,1301],{"class":1310},[1086,4063,1996],{"class":1300},[1086,4065,1882],{"class":1310},[1086,4067,1332],{"class":1304},[1086,4069,4071,4074,4076],{"class":1088,"line":4070},69,[1086,4072,4073],{"class":1310},"        providerOptions",[1086,4075,1314],{"class":1304},[1086,4077,1380],{"class":1304},[1086,4079,4081,4084,4086],{"class":1088,"line":4080},70,[1086,4082,4083],{"class":1310},"          anthropic",[1086,4085,1314],{"class":1304},[1086,4087,1380],{"class":1304},[1086,4089,4091,4094,4096],{"class":1088,"line":4090},71,[1086,4092,4093],{"class":1310},"            thinking",[1086,4095,1314],{"class":1304},[1086,4097,1380],{"class":1304},[1086,4099,4101,4104,4106,4108,4111,4113],{"class":1088,"line":4100},72,[1086,4102,4103],{"class":1310},"              type",[1086,4105,1314],{"class":1304},[1086,4107,1391],{"class":1304},[1086,4109,4110],{"class":1096},"enabled",[1086,4112,1329],{"class":1304},[1086,4114,1332],{"class":1304},[1086,4116,4118,4121,4123],{"class":1088,"line":4117},73,[1086,4119,4120],{"class":1310},"              budgetTokens",[1086,4122,1314],{"class":1304},[1086,4124,4125],{"class":3559}," 2048\n",[1086,4127,4129],{"class":1088,"line":4128},74,[1086,4130,4131],{"class":1304},"            }\n",[1086,4133,4135],{"class":1088,"line":4134},75,[1086,4136,4137],{"class":1304},"          },\n",[1086,4139,4141,4144,4146],{"class":1088,"line":4140},76,[1086,4142,4143],{"class":1310},"          google",[1086,4145,1314],{"class":1304},[1086,4147,1380],{"class":1304},[1086,4149,4151,4154,4156],{"class":1088,"line":4150},77,[1086,4152,4153],{"class":1310},"            thinkingConfig",[1086,4155,1314],{"class":1304},[1086,4157,1380],{"class":1304},[1086,4159,4161,4164,4166,4169],{"class":1088,"line":4160},78,[1086,4162,4163],{"class":1310},"              includeThoughts",[1086,4165,1314],{"class":1304},[1086,4167,4168],{"class":1466}," true",[1086,4170,1332],{"class":1304},[1086,4172,4174,4177,4179,4181,4184],{"class":1088,"line":4173},79,[1086,4175,4176],{"class":1310},"              thinkingLevel",[1086,4178,1314],{"class":1304},[1086,4180,1391],{"class":1304},[1086,4182,4183],{"class":1096},"low",[1086,4185,1355],{"class":1304},[1086,4187,4189],{"class":1088,"line":4188},80,[1086,4190,4131],{"class":1304},[1086,4192,4194],{"class":1088,"line":4193},81,[1086,4195,4137],{"class":1304},[1086,4197,4199,4202,4204],{"class":1088,"line":4198},82,[1086,4200,4201],{"class":1310},"          openai",[1086,4203,1314],{"class":1304},[1086,4205,1380],{"class":1304},[1086,4207,4209,4212,4214,4216,4218,4220],{"class":1088,"line":4208},83,[1086,4210,4211],{"class":1310},"            reasoningEffort",[1086,4213,1314],{"class":1304},[1086,4215,1391],{"class":1304},[1086,4217,4183],{"class":1096},[1086,4219,1329],{"class":1304},[1086,4221,1332],{"class":1304},[1086,4223,4225,4228,4230,4232,4235],{"class":1088,"line":4224},84,[1086,4226,4227],{"class":1310},"            reasoningSummary",[1086,4229,1314],{"class":1304},[1086,4231,1391],{"class":1304},[1086,4233,4234],{"class":1096},"detailed",[1086,4236,1355],{"class":1304},[1086,4238,4240],{"class":1088,"line":4239},85,[1086,4241,4242],{"class":1304},"          }\n",[1086,4244,4246],{"class":1088,"line":4245},86,[1086,4247,4248],{"class":1304},"        }\n",[1086,4250,4252,4255],{"class":1088,"line":4251},87,[1086,4253,4254],{"class":1304},"      }",[1086,4256,1491],{"class":1310},[1086,4258,4260],{"class":1088,"line":4259},88,[1086,4261,1369],{"emptyLinePlaceholder":21},[1086,4263,4265],{"class":1088,"line":4264},89,[1086,4266,4267],{"class":1470},"      \u002F\u002F Notify the client that a title was generated\n",[1086,4269,4271,4274,4276,4278,4280,4282,4284,4286],{"class":1088,"line":4270},90,[1086,4272,4273],{"class":1290},"      if",[1086,4275,1951],{"class":1310},[1086,4277,3532],{"class":1304},[1086,4279,262],{"class":1300},[1086,4281,1808],{"class":1304},[1086,4283,3611],{"class":1300},[1086,4285,3537],{"class":1310},[1086,4287,1305],{"class":1304},[1086,4289,4291,4294,4296,4299,4301],{"class":1088,"line":4290},91,[1086,4292,4293],{"class":1300},"        writer",[1086,4295,1808],{"class":1304},[1086,4297,4298],{"class":1109},"write",[1086,4300,1301],{"class":1310},[1086,4302,1305],{"class":1304},[1086,4304,4306,4309,4311,4313,4316,4318],{"class":1088,"line":4305},92,[1086,4307,4308],{"class":1310},"          type",[1086,4310,1314],{"class":1304},[1086,4312,1391],{"class":1304},[1086,4314,4315],{"class":1096},"data-chat-title",[1086,4317,1329],{"class":1304},[1086,4319,1332],{"class":1304},[1086,4321,4323,4326,4328,4330,4332,4334,4336,4339,4341],{"class":1088,"line":4322},93,[1086,4324,4325],{"class":1310},"          data",[1086,4327,1314],{"class":1304},[1086,4329,1710],{"class":1304},[1086,4331,2617],{"class":1310},[1086,4333,1314],{"class":1304},[1086,4335,1391],{"class":1304},[1086,4337,4338],{"class":1096},"Title generated",[1086,4340,1329],{"class":1304},[1086,4342,3101],{"class":1304},[1086,4344,4346,4349,4351],{"class":1088,"line":4345},94,[1086,4347,4348],{"class":1310},"          transient",[1086,4350,1314],{"class":1304},[1086,4352,4353],{"class":1466}," true\n",[1086,4355,4357,4360],{"class":1088,"line":4356},95,[1086,4358,4359],{"class":1304},"        }",[1086,4361,1491],{"class":1310},[1086,4363,4365],{"class":1088,"line":4364},96,[1086,4366,4367],{"class":1304},"      }\n",[1086,4369,4371],{"class":1088,"line":4370},97,[1086,4372,1369],{"emptyLinePlaceholder":21},[1086,4374,4376,4379,4381,4384,4386,4389,4391,4394],{"class":1088,"line":4375},98,[1086,4377,4378],{"class":1300},"      writer",[1086,4380,1808],{"class":1304},[1086,4382,4383],{"class":1109},"merge",[1086,4385,1301],{"class":1310},[1086,4387,4388],{"class":1300},"result",[1086,4390,1808],{"class":1304},[1086,4392,4393],{"class":1109},"toUIMessageStream",[1086,4395,1908],{"class":1310},[1086,4397,4399],{"class":1088,"line":4398},99,[1086,4400,4401],{"class":1304},"    },\n",[1086,4403,4405,4408,4410,4412,4414,4416,4418,4420],{"class":1088,"line":4404},100,[1086,4406,4407],{"class":1109},"    onFinish",[1086,4409,1314],{"class":1304},[1086,4411,3992],{"class":1587},[1086,4413,1939],{"class":1304},[1086,4415,3272],{"class":1942},[1086,4417,1946],{"class":1304},[1086,4419,1825],{"class":1587},[1086,4421,1380],{"class":1304},[1086,4423,4425],{"class":1088,"line":4424},101,[1086,4426,4427],{"class":1470},"      \u002F\u002F Save the assistant's response to the database\n",[1086,4429,4431,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4463,4465,4468,4470,4472],{"class":1088,"line":4430},102,[1086,4432,4433],{"class":1290},"      await",[1086,4435,2440],{"class":1300},[1086,4437,1808],{"class":1304},[1086,4439,2711],{"class":1109},[1086,4441,1301],{"class":1310},[1086,4443,2716],{"class":1300},[1086,4445,1808],{"class":1304},[1086,4447,1996],{"class":1300},[1086,4449,1882],{"class":1310},[1086,4451,1808],{"class":1304},[1086,4453,2727],{"class":1109},[1086,4455,1301],{"class":1310},[1086,4457,1996],{"class":1300},[1086,4459,1808],{"class":1304},[1086,4461,4462],{"class":1109},"map",[1086,4464,1301],{"class":1310},[1086,4466,4467],{"class":1942},"message",[1086,4469,1825],{"class":1587},[1086,4471,1951],{"class":1310},[1086,4473,1305],{"class":1304},[1086,4475,4477,4480,4482,4484,4486,4488],{"class":1088,"line":4476},103,[1086,4478,4479],{"class":1310},"        chatId",[1086,4481,1314],{"class":1304},[1086,4483,2789],{"class":1300},[1086,4485,1808],{"class":1304},[1086,4487,2017],{"class":1300},[1086,4489,1332],{"class":1304},[1086,4491,4493,4496,4498,4500,4502,4504,4506,4508,4510,4512,4515,4517,4519,4521],{"class":1088,"line":4492},104,[1086,4494,4495],{"class":1310},"        role",[1086,4497,1314],{"class":1304},[1086,4499,2617],{"class":1300},[1086,4501,1808],{"class":1304},[1086,4503,2129],{"class":1300},[1086,4505,3504],{"class":1290},[1086,4507,1391],{"class":1304},[1086,4509,2147],{"class":1096},[1086,4511,1329],{"class":1304},[1086,4513,4514],{"class":1304}," |",[1086,4516,1391],{"class":1304},[1086,4518,2156],{"class":1096},[1086,4520,1329],{"class":1304},[1086,4522,1332],{"class":1304},[1086,4524,4526,4529,4531,4533,4535],{"class":1088,"line":4525},105,[1086,4527,4528],{"class":1310},"        parts",[1086,4530,1314],{"class":1304},[1086,4532,2617],{"class":1300},[1086,4534,1808],{"class":1304},[1086,4536,2824],{"class":1300},[1086,4538,4540,4542],{"class":1088,"line":4539},106,[1086,4541,4254],{"class":1304},[1086,4543,4544],{"class":1310},")))\n",[1086,4546,4548],{"class":1088,"line":4547},107,[1086,4549,1477],{"class":1304},[1086,4551,4553,4555],{"class":1088,"line":4552},108,[1086,4554,2413],{"class":1304},[1086,4556,1491],{"class":1310},[1086,4558,4560],{"class":1088,"line":4559},109,[1086,4561,1369],{"emptyLinePlaceholder":21},[1086,4563,4565,4567,4570,4572,4574,4576,4578],{"class":1088,"line":4564},110,[1086,4566,2839],{"class":1290},[1086,4568,4569],{"class":1109}," createUIMessageStreamResponse",[1086,4571,1301],{"class":1310},[1086,4573,1865],{"class":1304},[1086,4575,3972],{"class":1300},[1086,4577,1732],{"class":1304},[1086,4579,1491],{"class":1310},[1086,4581,4583,4585],{"class":1088,"line":4582},111,[1086,4584,1488],{"class":1304},[1086,4586,1491],{"class":1300},[976,4588,4589],{},"Here's what each part does:",[976,4591,4592],{},[994,4593,4594],{},"AI Gateway",[976,4596,4597,4598,4601],{},"Thanks to ",[1030,4599,1067],{"href":1065,"rel":4600},[1034],", we can use any AI model supported by the gateway just by specifying the model name.",[976,4603,4604],{},[994,4605,4606],{},"Automatic Title Generation",[976,4608,4609,4610,4617],{},"When a chat doesn't have a title yet, we use ",[1030,4611,4614],{"href":4612,"rel":4613},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1034],[1036,4615,4616],{},"generateText"," to create one based on the first message. This provides a better UX by showing meaningful titles in the chat history instead of \"Untitled\".",[976,4619,4620],{},[994,4621,4622],{},"Streaming with streamText",[976,4624,4625,4626,4631],{},"The ",[1030,4627,4629],{"href":2858,"rel":4628},[1034],[1036,4630,2862],{}," function generates a streaming response from the AI model. Key options include:",[988,4633,4634,4640,4645],{},[991,4635,4636,4639],{},[1036,4637,4638],{},"model",": The AI model to use",[991,4641,4642,4644],{},[1036,4643,2165],{},": Instructions that guide the AI's behavior",[991,4646,4647,4649],{},[1036,4648,1996],{},": The conversation history",[976,4651,4652],{},[994,4653,4654],{},"UIMessageStream",[976,4656,4625,4657,1039,4663,4669],{},[1030,4658,4661],{"href":4659,"rel":4660},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1034],[1036,4662,2870],{},[1030,4664,4667],{"href":4665,"rel":4666},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1034],[1036,4668,2878],{}," functions create a stream that the AI SDK client can consume. The response streams chunks as they're generated, creating the real-time typing effect.",[976,4671,4625,4672,4675,4676,4678,4679,4682],{},[1036,4673,4674],{},"writer.write()"," method allows sending custom data events to the client (like ",[1036,4677,4315],{},"), while ",[1036,4680,4681],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1114,4684,4686],{"id":4685},"fetching-a-chat","Fetching a chat",[976,4688,4689],{},"Add an endpoint to fetch existing chat data from your database:",[1277,4691,4692],{},[1077,4693,4696],{"className":1281,"code":4694,"filename":4695,"language":1283,"meta":1082,"style":1082},"import { createError, defineEventHandler, getValidatedRouterParams } from 'h3'\nimport { asc, eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\n\nexport default defineEventHandler(async (event) => {\n  const { id } = await getValidatedRouterParams(event, z.object({\n    id: z.string()\n  }).parse)\n\n  const chat = await db.query.chats.findFirst({\n    where: (eq(schema.chats.id, id)),\n    with: {\n      messages: {\n        orderBy: () => asc(schema.messages.createdAt)\n      }\n    }\n  })\n\n  if (!chat) {\n    throw createError({ statusCode: 404, statusMessage: 'Chat not found' })\n  }\n\n  return chat\n})\n","server\u002Fapi\u002Fchats\u002F[id].get.ts",[1036,4697,4698,4724,4747,4769,4787,4791,4813,4845,4859,4871,4875,4903,4934,4943,4952,4981,4985,4989,4995,4999,5013,5045,5049,5053,5059],{"__ignoreMap":1082},[1086,4699,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722],{"class":1088,"line":1089},[1086,4701,1707],{"class":1290},[1086,4703,1710],{"class":1304},[1086,4705,2898],{"class":1300},[1086,4707,1716],{"class":1304},[1086,4709,2497],{"class":1300},[1086,4711,1716],{"class":1304},[1086,4713,2907],{"class":1300},[1086,4715,1732],{"class":1304},[1086,4717,1735],{"class":1290},[1086,4719,1391],{"class":1304},[1086,4721,1114],{"class":1096},[1086,4723,1355],{"class":1304},[1086,4725,4726,4728,4730,4733,4735,4737,4739,4741,4743,4745],{"class":1088,"line":1106},[1086,4727,1707],{"class":1290},[1086,4729,1710],{"class":1304},[1086,4731,4732],{"class":1300}," asc",[1086,4734,1716],{"class":1304},[1086,4736,2930],{"class":1300},[1086,4738,1732],{"class":1304},[1086,4740,1735],{"class":1290},[1086,4742,1391],{"class":1304},[1086,4744,1760],{"class":1096},[1086,4746,1355],{"class":1304},[1086,4748,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767],{"class":1088,"line":1320},[1086,4750,1707],{"class":1290},[1086,4752,1710],{"class":1304},[1086,4754,2440],{"class":1300},[1086,4756,1716],{"class":1304},[1086,4758,2548],{"class":1300},[1086,4760,1732],{"class":1304},[1086,4762,1735],{"class":1290},[1086,4764,1391],{"class":1304},[1086,4766,2557],{"class":1096},[1086,4768,1355],{"class":1304},[1086,4770,4771,4773,4775,4777,4779,4781,4783,4785],{"class":1088,"line":1335},[1086,4772,1707],{"class":1290},[1086,4774,1710],{"class":1304},[1086,4776,2568],{"class":1300},[1086,4778,1732],{"class":1304},[1086,4780,1735],{"class":1290},[1086,4782,1391],{"class":1304},[1086,4784,2577],{"class":1096},[1086,4786,1355],{"class":1304},[1086,4788,4789],{"class":1088,"line":1347},[1086,4790,1369],{"emptyLinePlaceholder":21},[1086,4792,4793,4795,4797,4799,4801,4803,4805,4807,4809,4811],{"class":1088,"line":1358},[1086,4794,1291],{"class":1290},[1086,4796,1294],{"class":1290},[1086,4798,2497],{"class":1109},[1086,4800,1301],{"class":1300},[1086,4802,2596],{"class":1587},[1086,4804,1951],{"class":1304},[1086,4806,2601],{"class":1942},[1086,4808,1882],{"class":1304},[1086,4810,1825],{"class":1587},[1086,4812,1380],{"class":1304},[1086,4814,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843],{"class":1088,"line":1366},[1086,4816,2612],{"class":1587},[1086,4818,1710],{"class":1304},[1086,4820,3202],{"class":1300},[1086,4822,1732],{"class":1304},[1086,4824,2622],{"class":1304},[1086,4826,2625],{"class":1290},[1086,4828,2907],{"class":1109},[1086,4830,1301],{"class":1310},[1086,4832,2601],{"class":1300},[1086,4834,1716],{"class":1304},[1086,4836,2568],{"class":1300},[1086,4838,1808],{"class":1304},[1086,4840,2640],{"class":1109},[1086,4842,1301],{"class":1310},[1086,4844,1305],{"class":1304},[1086,4846,4847,4849,4851,4853,4855,4857],{"class":1088,"line":1372},[1086,4848,3231],{"class":1310},[1086,4850,1314],{"class":1304},[1086,4852,2568],{"class":1300},[1086,4854,1808],{"class":1304},[1086,4856,3240],{"class":1109},[1086,4858,2668],{"class":1310},[1086,4860,4861,4863,4865,4867,4869],{"class":1088,"line":1383},[1086,4862,2413],{"class":1304},[1086,4864,1882],{"class":1310},[1086,4866,1808],{"class":1304},[1086,4868,2679],{"class":1300},[1086,4870,1491],{"class":1310},[1086,4872,4873],{"class":1088,"line":1399},[1086,4874,1369],{"emptyLinePlaceholder":21},[1086,4876,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901],{"class":1088,"line":1405},[1086,4878,2612],{"class":1587},[1086,4880,2789],{"class":1300},[1086,4882,2622],{"class":1304},[1086,4884,2625],{"class":1290},[1086,4886,2440],{"class":1300},[1086,4888,1808],{"class":1304},[1086,4890,3452],{"class":1300},[1086,4892,1808],{"class":1304},[1086,4894,1787],{"class":1300},[1086,4896,1808],{"class":1304},[1086,4898,3461],{"class":1109},[1086,4900,1301],{"class":1310},[1086,4902,1305],{"class":1304},[1086,4904,4905,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4932],{"class":1088,"line":1410},[1086,4906,3471],{"class":1310},[1086,4908,1314],{"class":1304},[1086,4910,1951],{"class":1310},[1086,4912,3766],{"class":1109},[1086,4914,1301],{"class":1310},[1086,4916,2716],{"class":1300},[1086,4918,1808],{"class":1304},[1086,4920,1787],{"class":1300},[1086,4922,1808],{"class":1304},[1086,4924,2017],{"class":1300},[1086,4926,1716],{"class":1304},[1086,4928,3202],{"class":1300},[1086,4930,4931],{"class":1310},"))",[1086,4933,1332],{"class":1304},[1086,4935,4936,4939,4941],{"class":1088,"line":1433},[1086,4937,4938],{"class":1310},"    with",[1086,4940,1314],{"class":1304},[1086,4942,1380],{"class":1304},[1086,4944,4945,4948,4950],{"class":1088,"line":1438},[1086,4946,4947],{"class":1310},"      messages",[1086,4949,1314],{"class":1304},[1086,4951,1380],{"class":1304},[1086,4953,4954,4957,4959,4962,4964,4966,4968,4970,4972,4974,4976,4979],{"class":1088,"line":1448},[1086,4955,4956],{"class":1109},"        orderBy",[1086,4958,1314],{"class":1304},[1086,4960,4961],{"class":1304}," ()",[1086,4963,1825],{"class":1587},[1086,4965,4732],{"class":1109},[1086,4967,1301],{"class":1310},[1086,4969,2716],{"class":1300},[1086,4971,1808],{"class":1304},[1086,4973,1996],{"class":1300},[1086,4975,1808],{"class":1304},[1086,4977,4978],{"class":1300},"createdAt",[1086,4980,1491],{"class":1310},[1086,4982,4983],{"class":1088,"line":1458},[1086,4984,4367],{"class":1304},[1086,4986,4987],{"class":1088,"line":1474},[1086,4988,1477],{"class":1304},[1086,4990,4991,4993],{"class":1088,"line":1480},[1086,4992,2413],{"class":1304},[1086,4994,1491],{"class":1310},[1086,4996,4997],{"class":1088,"line":1485},[1086,4998,1369],{"emptyLinePlaceholder":21},[1086,5000,5001,5003,5005,5007,5009,5011],{"class":1088,"line":2274},[1086,5002,3527],{"class":1290},[1086,5004,1951],{"class":1310},[1086,5006,3532],{"class":1304},[1086,5008,262],{"class":1300},[1086,5010,3537],{"class":1310},[1086,5012,1305],{"class":1304},[1086,5014,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043],{"class":1088,"line":2287},[1086,5016,3545],{"class":1290},[1086,5018,2898],{"class":1109},[1086,5020,1301],{"class":1310},[1086,5022,1865],{"class":1304},[1086,5024,3554],{"class":1310},[1086,5026,1314],{"class":1304},[1086,5028,3560],{"class":3559},[1086,5030,1716],{"class":1304},[1086,5032,3565],{"class":1310},[1086,5034,1314],{"class":1304},[1086,5036,1391],{"class":1304},[1086,5038,3572],{"class":1096},[1086,5040,1329],{"class":1304},[1086,5042,1732],{"class":1304},[1086,5044,1491],{"class":1310},[1086,5046,5047],{"class":1088,"line":2317},[1086,5048,3584],{"class":1304},[1086,5050,5051],{"class":1088,"line":2323},[1086,5052,1369],{"emptyLinePlaceholder":21},[1086,5054,5055,5057],{"class":1088,"line":2328},[1086,5056,2839],{"class":1290},[1086,5058,2842],{"class":1300},[1086,5060,5061,5063],{"class":1088,"line":2360},[1086,5062,1488],{"class":1304},[1086,5064,1491],{"class":1300},[980,5066,5068],{"id":5067},"wire-up-the-ui","Wire up the UI",[976,5070,5071,5072,5077,5078,5083],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1030,5073,5074],{"href":281},[1036,5075,5076],{},"UChatPrompt"," for the input area and ",[1030,5079,5080],{"href":271},[1036,5081,5082],{},"UChatMessages"," for displaying the conversation.",[1114,5085,5087],{"id":5086},"creating-the-home-page","Creating the home page",[976,5089,5090,5091,5095],{},"The home page is where users start a new conversation. The ",[1030,5092,5093],{"href":281},[1036,5094,5076],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1277,5097,5098],{},[1077,5099,5103],{"className":1549,"code":5100,"filename":5101,"highlights":5102,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst input = ref('')\nconst loading = ref(false)\n\nasync function createChat() {\n  if (!input.value.trim()) return\n\n  loading.value = true\n\n  \u002F\u002F Create a new chat on the server\n  const chat = await $fetch('\u002Fapi\u002Fchats', {\n    method: 'POST',\n    body: {\n      message: {\n        role: 'user',\n        parts: [{ type: 'text', text: input.value }]\n      }\n    }\n  })\n\n  \u002F\u002F Navigate to the chat page\n  navigateTo(`\u002Fchat\u002F${chat.id}`)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col justify-center gap-6 py-8\">\n        \u003Ch1 class=\"text-3xl sm:text-4xl text-highlighted font-bold\">\n          How can I help you today?\n        \u003C\u002Fh1>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :status=\"loading ? 'streaming' : 'ready'\"\n          variant=\"subtle\"\n          placeholder=\"Ask me anything...\"\n          @submit=\"createChat\"\n        >\n          \u003CUChatPromptSubmit color=\"neutral\" \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Findex.vue",[3468,3512,3519,3524,3542,3581,3587,3592,3598],[1036,5104,5105,5128,5147,5165,5169,5183,5209,5213,5226,5230,5235,5261,5277,5286,5294,5308,5346,5350,5354,5360,5364,5369,5395,5400,5408,5412,5420,5441,5455,5476,5497,5502,5511,5515,5523,5538,5553,5568,5583,5598,5604,5627,5636,5645,5653,5661],{"__ignoreMap":1082},[1086,5106,5107,5109,5112,5115,5118,5120,5122,5124,5126],{"class":1088,"line":1089},[1086,5108,1559],{"class":1304},[1086,5110,5111],{"class":1310},"script",[1086,5113,5114],{"class":1587}," setup",[1086,5116,5117],{"class":1587}," lang",[1086,5119,1591],{"class":1304},[1086,5121,1518],{"class":1304},[1086,5123,1283],{"class":1096},[1086,5125,1518],{"class":1304},[1086,5127,1565],{"class":1304},[1086,5129,5130,5132,5135,5137,5140,5142,5145],{"class":1088,"line":1106},[1086,5131,3060],{"class":1587},[1086,5133,5134],{"class":1300}," input ",[1086,5136,1591],{"class":1304},[1086,5138,5139],{"class":1109}," ref",[1086,5141,1301],{"class":1300},[1086,5143,5144],{"class":1304},"''",[1086,5146,1491],{"class":1300},[1086,5148,5149,5151,5154,5156,5158,5160,5163],{"class":1088,"line":1320},[1086,5150,3060],{"class":1587},[1086,5152,5153],{"class":1300}," loading ",[1086,5155,1591],{"class":1304},[1086,5157,5139],{"class":1109},[1086,5159,1301],{"class":1300},[1086,5161,5162],{"class":1466},"false",[1086,5164,1491],{"class":1300},[1086,5166,5167],{"class":1088,"line":1335},[1086,5168,1369],{"emptyLinePlaceholder":21},[1086,5170,5171,5173,5176,5179,5181],{"class":1088,"line":1347},[1086,5172,2596],{"class":1587},[1086,5174,5175],{"class":1587}," function",[1086,5177,5178],{"class":1109}," createChat",[1086,5180,1805],{"class":1304},[1086,5182,1380],{"class":1304},[1086,5184,5185,5187,5189,5191,5194,5196,5198,5200,5203,5206],{"class":1088,"line":1358},[1086,5186,3527],{"class":1290},[1086,5188,1951],{"class":1310},[1086,5190,3532],{"class":1304},[1086,5192,5193],{"class":1300},"input",[1086,5195,1808],{"class":1304},[1086,5197,3321],{"class":1300},[1086,5199,1808],{"class":1304},[1086,5201,5202],{"class":1109},"trim",[1086,5204,5205],{"class":1310},"()) ",[1086,5207,5208],{"class":1290},"return\n",[1086,5210,5211],{"class":1088,"line":1366},[1086,5212,1369],{"emptyLinePlaceholder":21},[1086,5214,5215,5218,5220,5222,5224],{"class":1088,"line":1372},[1086,5216,5217],{"class":1300},"  loading",[1086,5219,1808],{"class":1304},[1086,5221,3321],{"class":1300},[1086,5223,2622],{"class":1304},[1086,5225,4353],{"class":1466},[1086,5227,5228],{"class":1088,"line":1383},[1086,5229,1369],{"emptyLinePlaceholder":21},[1086,5231,5232],{"class":1088,"line":1399},[1086,5233,5234],{"class":1470},"  \u002F\u002F Create a new chat on the server\n",[1086,5236,5237,5239,5241,5243,5245,5248,5250,5252,5255,5257,5259],{"class":1088,"line":1405},[1086,5238,2612],{"class":1587},[1086,5240,2789],{"class":1300},[1086,5242,2622],{"class":1304},[1086,5244,2625],{"class":1290},[1086,5246,5247],{"class":1109}," $fetch",[1086,5249,1301],{"class":1310},[1086,5251,1329],{"class":1304},[1086,5253,5254],{"class":1096},"\u002Fapi\u002Fchats",[1086,5256,1329],{"class":1304},[1086,5258,1716],{"class":1304},[1086,5260,1380],{"class":1304},[1086,5262,5263,5266,5268,5270,5273,5275],{"class":1088,"line":1410},[1086,5264,5265],{"class":1310},"    method",[1086,5267,1314],{"class":1304},[1086,5269,1391],{"class":1304},[1086,5271,5272],{"class":1096},"POST",[1086,5274,1329],{"class":1304},[1086,5276,1332],{"class":1304},[1086,5278,5279,5282,5284],{"class":1088,"line":1433},[1086,5280,5281],{"class":1310},"    body",[1086,5283,1314],{"class":1304},[1086,5285,1380],{"class":1304},[1086,5287,5288,5290,5292],{"class":1088,"line":1438},[1086,5289,3361],{"class":1310},[1086,5291,1314],{"class":1304},[1086,5293,1380],{"class":1304},[1086,5295,5296,5298,5300,5302,5304,5306],{"class":1088,"line":1448},[1086,5297,4495],{"class":1310},[1086,5299,1314],{"class":1304},[1086,5301,1391],{"class":1304},[1086,5303,2147],{"class":1096},[1086,5305,1329],{"class":1304},[1086,5307,1332],{"class":1304},[1086,5309,5310,5312,5314,5316,5318,5320,5322,5324,5327,5329,5331,5333,5335,5338,5340,5342,5344],{"class":1088,"line":1458},[1086,5311,4528],{"class":1310},[1086,5313,1314],{"class":1304},[1086,5315,1418],{"class":1310},[1086,5317,1865],{"class":1304},[1086,5319,2519],{"class":1310},[1086,5321,1314],{"class":1304},[1086,5323,1391],{"class":1304},[1086,5325,5326],{"class":1096},"text",[1086,5328,1329],{"class":1304},[1086,5330,1716],{"class":1304},[1086,5332,1719],{"class":1310},[1086,5334,1314],{"class":1304},[1086,5336,5337],{"class":1300}," input",[1086,5339,1808],{"class":1304},[1086,5341,3321],{"class":1300},[1086,5343,1732],{"class":1304},[1086,5345,3167],{"class":1310},[1086,5347,5348],{"class":1088,"line":1474},[1086,5349,4367],{"class":1304},[1086,5351,5352],{"class":1088,"line":1480},[1086,5353,1477],{"class":1304},[1086,5355,5356,5358],{"class":1088,"line":1485},[1086,5357,2413],{"class":1304},[1086,5359,1491],{"class":1310},[1086,5361,5362],{"class":1088,"line":2274},[1086,5363,1369],{"emptyLinePlaceholder":21},[1086,5365,5366],{"class":1088,"line":2287},[1086,5367,5368],{"class":1470},"  \u002F\u002F Navigate to the chat page\n",[1086,5370,5371,5374,5376,5378,5381,5384,5386,5388,5390,5393],{"class":1088,"line":2317},[1086,5372,5373],{"class":1109},"  navigateTo",[1086,5375,1301],{"class":1310},[1086,5377,3676],{"class":1304},[1086,5379,5380],{"class":1096},"\u002Fchat\u002F",[1086,5382,5383],{"class":1304},"${",[1086,5385,262],{"class":1300},[1086,5387,1808],{"class":1304},[1086,5389,2017],{"class":1300},[1086,5391,5392],{"class":1304},"}`",[1086,5394,1491],{"class":1310},[1086,5396,5397],{"class":1088,"line":2323},[1086,5398,5399],{"class":1304},"}\n",[1086,5401,5402,5404,5406],{"class":1088,"line":2328},[1086,5403,1635],{"class":1304},[1086,5405,5111],{"class":1310},[1086,5407,1565],{"class":1304},[1086,5409,5410],{"class":1088,"line":2360},[1086,5411,1369],{"emptyLinePlaceholder":21},[1086,5413,5414,5416,5418],{"class":1088,"line":2376},[1086,5415,1559],{"class":1304},[1086,5417,1562],{"class":1310},[1086,5419,1565],{"class":1304},[1086,5421,5422,5424,5427,5430,5432,5434,5437,5439],{"class":1088,"line":2394},[1086,5423,1572],{"class":1304},[1086,5425,5426],{"class":1310},"UDashboardPanel",[1086,5428,5429],{"class":1587}," :ui",[1086,5431,1591],{"class":1304},[1086,5433,1518],{"class":1304},[1086,5435,5436],{"class":1096},"{ body: 'p-0 sm:p-0' }",[1086,5438,1518],{"class":1304},[1086,5440,1565],{"class":1304},[1086,5442,5443,5445,5447,5450,5453],{"class":1088,"line":2410},[1086,5444,1581],{"class":1304},[1086,5446,1562],{"class":1310},[1086,5448,5449],{"class":1304}," #",[1086,5451,5452],{"class":1587},"body",[1086,5454,1565],{"class":1304},[1086,5456,5457,5459,5462,5465,5467,5469,5472,5474],{"class":1088,"line":2418},[1086,5458,1605],{"class":1304},[1086,5460,5461],{"class":1310},"UContainer",[1086,5463,5464],{"class":1587}," class",[1086,5466,1591],{"class":1304},[1086,5468,1518],{"class":1304},[1086,5470,5471],{"class":1096},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1086,5473,1518],{"class":1304},[1086,5475,1565],{"class":1304},[1086,5477,5478,5481,5484,5486,5488,5490,5493,5495],{"class":1088,"line":3413},[1086,5479,5480],{"class":1304},"        \u003C",[1086,5482,5483],{"class":1310},"h1",[1086,5485,5464],{"class":1587},[1086,5487,1591],{"class":1304},[1086,5489,1518],{"class":1304},[1086,5491,5492],{"class":1096},"text-3xl sm:text-4xl text-highlighted font-bold",[1086,5494,1518],{"class":1304},[1086,5496,1565],{"class":1304},[1086,5498,5499],{"class":1088,"line":3426},[1086,5500,5501],{"class":1300},"          How can I help you today?\n",[1086,5503,5504,5507,5509],{"class":1088,"line":3431},[1086,5505,5506],{"class":1304},"        \u003C\u002F",[1086,5508,5483],{"class":1310},[1086,5510,1565],{"class":1304},[1086,5512,5513],{"class":1088,"line":3437},[1086,5514,1369],{"emptyLinePlaceholder":21},[1086,5516,5518,5520],{"class":5517,"line":3468},[1088,1569],[1086,5519,5480],{"class":1304},[1086,5521,5522],{"class":1310},"UChatPrompt\n",[1086,5524,5526,5529,5531,5533,5535],{"class":5525,"line":3512},[1088,1569],[1086,5527,5528],{"class":1587},"          v-model",[1086,5530,1591],{"class":1304},[1086,5532,1518],{"class":1304},[1086,5534,5193],{"class":1096},[1086,5536,5537],{"class":1304},"\"\n",[1086,5539,5541,5544,5546,5548,5551],{"class":5540,"line":3519},[1088,1569],[1086,5542,5543],{"class":1587},"          :status",[1086,5545,1591],{"class":1304},[1086,5547,1518],{"class":1304},[1086,5549,5550],{"class":1096},"loading ? 'streaming' : 'ready'",[1086,5552,5537],{"class":1304},[1086,5554,5556,5559,5561,5563,5566],{"class":5555,"line":3524},[1088,1569],[1086,5557,5558],{"class":1587},"          variant",[1086,5560,1591],{"class":1304},[1086,5562,1518],{"class":1304},[1086,5564,5565],{"class":1096},"subtle",[1086,5567,5537],{"class":1304},[1086,5569,5571,5574,5576,5578,5581],{"class":5570,"line":3542},[1088,1569],[1086,5572,5573],{"class":1587},"          placeholder",[1086,5575,1591],{"class":1304},[1086,5577,1518],{"class":1304},[1086,5579,5580],{"class":1096},"Ask me anything...",[1086,5582,5537],{"class":1304},[1086,5584,5586,5589,5591,5593,5596],{"class":5585,"line":3581},[1088,1569],[1086,5587,5588],{"class":1587},"          @submit",[1086,5590,1591],{"class":1304},[1086,5592,1518],{"class":1304},[1086,5594,5595],{"class":1096},"createChat",[1086,5597,5537],{"class":1304},[1086,5599,5601],{"class":5600,"line":3587},[1088,1569],[1086,5602,5603],{"class":1304},"        >\n",[1086,5605,5607,5610,5613,5616,5618,5620,5623,5625],{"class":5606,"line":3592},[1088,1569],[1086,5608,5609],{"class":1304},"          \u003C",[1086,5611,5612],{"class":1310},"UChatPromptSubmit",[1086,5614,5615],{"class":1587}," color",[1086,5617,1591],{"class":1304},[1086,5619,1518],{"class":1304},[1086,5621,5622],{"class":1096},"neutral",[1086,5624,1518],{"class":1304},[1086,5626,1611],{"class":1304},[1086,5628,5630,5632,5634],{"class":5629,"line":3598},[1088,1569],[1086,5631,5506],{"class":1304},[1086,5633,5076],{"class":1310},[1086,5635,1565],{"class":1304},[1086,5637,5638,5641,5643],{"class":1088,"line":3618},[1086,5639,5640],{"class":1304},"      \u003C\u002F",[1086,5642,5461],{"class":1310},[1086,5644,1565],{"class":1304},[1086,5646,5647,5649,5651],{"class":1088,"line":3646},[1086,5648,1616],{"class":1304},[1086,5650,1562],{"class":1310},[1086,5652,1565],{"class":1304},[1086,5654,5655,5657,5659],{"class":1088,"line":3662},[1086,5656,1626],{"class":1304},[1086,5658,5426],{"class":1310},[1086,5660,1565],{"class":1304},[1086,5662,5663,5665,5667],{"class":1088,"line":3681},[1086,5664,1635],{"class":1304},[1086,5666,1562],{"class":1310},[1086,5668,1565],{"class":1304},[976,5670,4625,5671,5675],{},[1030,5672,5673],{"href":281},[1036,5674,5076],{}," component automatically handles:",[988,5677,5678,5685,5688,5698],{},[991,5679,5680,5681],{},"Form submission when pressing ",[5682,5683],"kbd",{"value":5684},"enter",[991,5686,5687],{},"Auto-resizing as you type",[991,5689,5690,5691,5694,5695],{},"A loading state when ",[1036,5692,5693],{},"status"," is set to ",[1036,5696,5697],{},"streaming",[991,5699,5700],{},"Focus management and keyboard shortcuts",[980,5702,5704],{"id":5703},"creating-the-chat-page","Creating the chat page",[976,5706,5707,5708,5714,5715,5722],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1030,5709,5712],{"href":5710,"rel":5711},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1034],[1036,5713,259],{}," class and ",[1030,5716,5719],{"href":5717,"rel":5718},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1034],[1036,5720,5721],{},"DefaultChatTransport"," for real-time streaming.",[1277,5724,5725],{},[1695,5726,5727],{},[1077,5728,5732],{"className":1549,"code":5729,"filename":5730,"highlights":5731,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Fchat\u002F[id].vue",[1106,1320,1335,1485,2274,2287,2317,2323,2328,2360,2376,2394,2410,2418,3413,3426,3431,3437,3468,3512,3519,3524,3542],[1036,5733,5734,5754,5784,5805,5826,5830,5844,5858,5862,5867,5915,5919,5938,5980,5984,5988,6004,6008,6013,6031,6051,6070,6086,6113,6122,6137,6143,6170,6186,6191,6196,6211,6226,6242,6259,6273,6280,6285,6292,6296,6318,6330,6350,6378,6392,6396,6400,6404,6409,6422,6450,6461,6465,6471,6479,6483,6491,6509,6521,6540,6547,6561,6574,6579,6593,6597,6622,6700,6708,6722,6736,6750,6755,6763,6776,6790,6804,6809,6819,6823,6846,6852,6866,6878,6891,6903,6907,6937,6942,6951,6959,6968,6977,6985,6989,6995,7007,7021,7033,7046,7059,7063,7070,7083,7096,7110,7124,7129,7137,7145,7153,7161],{"__ignoreMap":1082},[1086,5735,5736,5738,5740,5742,5744,5746,5748,5750,5752],{"class":1088,"line":1089},[1086,5737,1559],{"class":1304},[1086,5739,5111],{"class":1310},[1086,5741,5114],{"class":1587},[1086,5743,5117],{"class":1587},[1086,5745,1591],{"class":1304},[1086,5747,1518],{"class":1304},[1086,5749,1283],{"class":1096},[1086,5751,1518],{"class":1304},[1086,5753,1565],{"class":1304},[1086,5755,5757,5759,5761,5764,5766,5769,5771,5774,5776,5778,5780,5782],{"class":5756,"line":1106},[1088,1569],[1086,5758,1707],{"class":1290},[1086,5760,1710],{"class":1304},[1086,5762,5763],{"class":1300}," DefaultChatTransport",[1086,5765,1716],{"class":1304},[1086,5767,5768],{"class":1300}," isReasoningUIPart",[1086,5770,1716],{"class":1304},[1086,5772,5773],{"class":1300}," isTextUIPart",[1086,5775,1732],{"class":1304},[1086,5777,1735],{"class":1290},[1086,5779,1391],{"class":1304},[1086,5781,2533],{"class":1096},[1086,5783,1355],{"class":1304},[1086,5785,5787,5789,5791,5794,5796,5798,5800,5803],{"class":5786,"line":1320},[1088,1569],[1086,5788,1707],{"class":1290},[1086,5790,1710],{"class":1304},[1086,5792,5793],{"class":1300}," Chat",[1086,5795,1732],{"class":1304},[1086,5797,1735],{"class":1290},[1086,5799,1391],{"class":1304},[1086,5801,5802],{"class":1096},"@ai-sdk\u002Fvue",[1086,5804,1355],{"class":1304},[1086,5806,5808,5810,5812,5815,5817,5819,5821,5824],{"class":5807,"line":1335},[1088,1569],[1086,5809,1707],{"class":1290},[1086,5811,1710],{"class":1304},[1086,5813,5814],{"class":1300}," isPartStreaming",[1086,5816,1732],{"class":1304},[1086,5818,1735],{"class":1290},[1086,5820,1391],{"class":1304},[1086,5822,5823],{"class":1096},"@nuxt\u002Fui\u002Futils\u002Fai",[1086,5825,1355],{"class":1304},[1086,5827,5828],{"class":1088,"line":1347},[1086,5829,1369],{"emptyLinePlaceholder":21},[1086,5831,5832,5834,5837,5839,5842],{"class":1088,"line":1358},[1086,5833,3060],{"class":1587},[1086,5835,5836],{"class":1300}," route ",[1086,5838,1591],{"class":1304},[1086,5840,5841],{"class":1109}," useRoute",[1086,5843,2668],{"class":1300},[1086,5845,5846,5848,5851,5853,5856],{"class":1088,"line":1366},[1086,5847,3060],{"class":1587},[1086,5849,5850],{"class":1300}," toast ",[1086,5852,1591],{"class":1304},[1086,5854,5855],{"class":1109}," useToast",[1086,5857,2668],{"class":1300},[1086,5859,5860],{"class":1088,"line":1372},[1086,5861,1369],{"emptyLinePlaceholder":21},[1086,5863,5864],{"class":1088,"line":1383},[1086,5865,5866],{"class":1470},"\u002F\u002F Fetch existing chat data\n",[1086,5868,5869,5871,5873,5876,5878,5881,5883,5885,5887,5890,5892,5894,5897,5899,5902,5904,5907,5909,5911,5913],{"class":1088,"line":1399},[1086,5870,3060],{"class":1587},[1086,5872,1710],{"class":1304},[1086,5874,5875],{"class":1310}," data",[1086,5877,1314],{"class":1304},[1086,5879,5880],{"class":1300}," chatData ",[1086,5882,1488],{"class":1304},[1086,5884,2622],{"class":1304},[1086,5886,2625],{"class":1290},[1086,5888,5889],{"class":1109}," useFetch",[1086,5891,1301],{"class":1300},[1086,5893,3676],{"class":1304},[1086,5895,5896],{"class":1096},"\u002Fapi\u002Fchats\u002F",[1086,5898,5383],{"class":1304},[1086,5900,5901],{"class":1300},"route",[1086,5903,1808],{"class":1304},[1086,5905,5906],{"class":1300},"params",[1086,5908,1808],{"class":1304},[1086,5910,2017],{"class":1300},[1086,5912,5392],{"class":1304},[1086,5914,1491],{"class":1300},[1086,5916,5917],{"class":1088,"line":1405},[1086,5918,1369],{"emptyLinePlaceholder":21},[1086,5920,5921,5924,5926,5928,5931,5933,5936],{"class":1088,"line":1410},[1086,5922,5923],{"class":1290},"if",[1086,5925,1951],{"class":1300},[1086,5927,3532],{"class":1304},[1086,5929,5930],{"class":1300},"chatData",[1086,5932,1808],{"class":1304},[1086,5934,5935],{"class":1300},"value) ",[1086,5937,1305],{"class":1304},[1086,5939,5940,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,5969,5972,5974,5976,5978],{"class":1088,"line":1433},[1086,5941,5942],{"class":1290},"  throw",[1086,5944,2898],{"class":1109},[1086,5946,1301],{"class":1310},[1086,5948,1865],{"class":1304},[1086,5950,3554],{"class":1310},[1086,5952,1314],{"class":1304},[1086,5954,3560],{"class":3559},[1086,5956,1716],{"class":1304},[1086,5958,3565],{"class":1310},[1086,5960,1314],{"class":1304},[1086,5962,1391],{"class":1304},[1086,5964,3572],{"class":1096},[1086,5966,1329],{"class":1304},[1086,5968,1716],{"class":1304},[1086,5970,5971],{"class":1310}," fatal",[1086,5973,1314],{"class":1304},[1086,5975,4168],{"class":1466},[1086,5977,1732],{"class":1304},[1086,5979,1491],{"class":1310},[1086,5981,5982],{"class":1088,"line":1438},[1086,5983,5399],{"class":1304},[1086,5985,5986],{"class":1088,"line":1448},[1086,5987,1369],{"emptyLinePlaceholder":21},[1086,5989,5990,5992,5994,5996,5998,6000,6002],{"class":1088,"line":1458},[1086,5991,3060],{"class":1587},[1086,5993,5134],{"class":1300},[1086,5995,1591],{"class":1304},[1086,5997,5139],{"class":1109},[1086,5999,1301],{"class":1300},[1086,6001,5144],{"class":1304},[1086,6003,1491],{"class":1300},[1086,6005,6006],{"class":1088,"line":1474},[1086,6007,1369],{"emptyLinePlaceholder":21},[1086,6009,6010],{"class":1088,"line":1480},[1086,6011,6012],{"class":1470},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1086,6014,6016,6018,6021,6023,6025,6027,6029],{"class":6015,"line":1485},[1088,1569],[1086,6017,3060],{"class":1587},[1086,6019,6020],{"class":1300}," chat ",[1086,6022,1591],{"class":1304},[1086,6024,1902],{"class":1304},[1086,6026,5793],{"class":1109},[1086,6028,1301],{"class":1300},[1086,6030,1305],{"class":1304},[1086,6032,6034,6036,6038,6041,6043,6045,6047,6049],{"class":6033,"line":2274},[1088,1569],[1086,6035,1798],{"class":1310},[1086,6037,1314],{"class":1304},[1086,6039,6040],{"class":1300}," chatData",[1086,6042,1808],{"class":1304},[1086,6044,3321],{"class":1300},[1086,6046,1808],{"class":1304},[1086,6048,2017],{"class":1300},[1086,6050,1332],{"class":1304},[1086,6052,6054,6056,6058,6060,6062,6064,6066,6068],{"class":6053,"line":2287},[1088,1569],[1086,6055,1958],{"class":1310},[1086,6057,1314],{"class":1304},[1086,6059,6040],{"class":1300},[1086,6061,1808],{"class":1304},[1086,6063,3321],{"class":1300},[1086,6065,1808],{"class":1304},[1086,6067,1996],{"class":1300},[1086,6069,1332],{"class":1304},[1086,6071,6073,6076,6078,6080,6082,6084],{"class":6072,"line":2317},[1088,1569],[1086,6074,6075],{"class":1310},"  transport",[1086,6077,1314],{"class":1304},[1086,6079,1902],{"class":1304},[1086,6081,5763],{"class":1109},[1086,6083,1301],{"class":1300},[1086,6085,1305],{"class":1304},[1086,6087,6089,6092,6094,6096,6098,6100,6102,6104,6106,6108,6110],{"class":6088,"line":2323},[1088,1569],[1086,6090,6091],{"class":1310},"    api",[1086,6093,1314],{"class":1304},[1086,6095,3670],{"class":1304},[1086,6097,5896],{"class":1096},[1086,6099,5383],{"class":1304},[1086,6101,5930],{"class":1300},[1086,6103,1808],{"class":1304},[1086,6105,3321],{"class":1300},[1086,6107,1808],{"class":1304},[1086,6109,2017],{"class":1300},[1086,6111,6112],{"class":1304},"}`\n",[1086,6114,6116,6118,6120],{"class":6115,"line":2328},[1088,1569],[1086,6117,2413],{"class":1304},[1086,6119,1882],{"class":1300},[1086,6121,1332],{"class":1304},[1086,6123,6125,6128,6130,6133,6135],{"class":6124,"line":2360},[1088,1569],[1086,6126,6127],{"class":1310},"  onData",[1086,6129,1301],{"class":1304},[1086,6131,6132],{"class":1942},"dataPart",[1086,6134,1882],{"class":1304},[1086,6136,1380],{"class":1304},[1086,6138,6140],{"class":6139,"line":2376},[1088,1569],[1086,6141,6142],{"class":1470},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1086,6144,6146,6149,6151,6153,6155,6158,6160,6162,6164,6166,6168],{"class":6145,"line":2394},[1088,1569],[1086,6147,6148],{"class":1290},"    if",[1086,6150,1951],{"class":1310},[1086,6152,6132],{"class":1300},[1086,6154,1808],{"class":1304},[1086,6156,6157],{"class":1300},"type",[1086,6159,3348],{"class":1304},[1086,6161,1391],{"class":1304},[1086,6163,4315],{"class":1096},[1086,6165,1329],{"class":1304},[1086,6167,3537],{"class":1310},[1086,6169,1305],{"class":1304},[1086,6171,6173,6176,6178,6180,6182,6184],{"class":6172,"line":2410},[1088,1569],[1086,6174,6175],{"class":1109},"      refreshNuxtData",[1086,6177,1301],{"class":1310},[1086,6179,1329],{"class":1304},[1086,6181,1787],{"class":1096},[1086,6183,1329],{"class":1304},[1086,6185,1491],{"class":1310},[1086,6187,6189],{"class":6188,"line":2418},[1088,1569],[1086,6190,1477],{"class":1304},[1086,6192,6194],{"class":6193,"line":3413},[1088,1569],[1086,6195,1402],{"class":1304},[1086,6197,6199,6202,6204,6207,6209],{"class":6198,"line":3426},[1088,1569],[1086,6200,6201],{"class":1310},"  onError",[1086,6203,1301],{"class":1304},[1086,6205,6206],{"class":1942},"error",[1086,6208,1882],{"class":1304},[1086,6210,1380],{"class":1304},[1086,6212,6214,6217,6219,6222,6224],{"class":6213,"line":3431},[1088,1569],[1086,6215,6216],{"class":1300},"    toast",[1086,6218,1808],{"class":1304},[1086,6220,6221],{"class":1109},"add",[1086,6223,1301],{"class":1310},[1086,6225,1305],{"class":1304},[1086,6227,6229,6232,6234,6236,6238,6240],{"class":6228,"line":3437},[1088,1569],[1086,6230,6231],{"class":1310},"      title",[1086,6233,1314],{"class":1304},[1086,6235,1391],{"class":1304},[1086,6237,497],{"class":1096},[1086,6239,1329],{"class":1304},[1086,6241,1332],{"class":1304},[1086,6243,6245,6248,6250,6253,6255,6257],{"class":6244,"line":3468},[1088,1569],[1086,6246,6247],{"class":1310},"      description",[1086,6249,1314],{"class":1304},[1086,6251,6252],{"class":1300}," error",[1086,6254,1808],{"class":1304},[1086,6256,4467],{"class":1300},[1086,6258,1332],{"class":1304},[1086,6260,6262,6265,6267,6269,6271],{"class":6261,"line":3512},[1088,1569],[1086,6263,6264],{"class":1310},"      color",[1086,6266,1314],{"class":1304},[1086,6268,1391],{"class":1304},[1086,6270,6206],{"class":1096},[1086,6272,1355],{"class":1304},[1086,6274,6276,6278],{"class":6275,"line":3519},[1088,1569],[1086,6277,3375],{"class":1304},[1086,6279,1491],{"class":1310},[1086,6281,6283],{"class":6282,"line":3524},[1088,1569],[1086,6284,3584],{"class":1304},[1086,6286,6288,6290],{"class":6287,"line":3542},[1088,1569],[1086,6289,1488],{"class":1304},[1086,6291,1491],{"class":1300},[1086,6293,6294],{"class":1088,"line":3581},[1086,6295,1369],{"emptyLinePlaceholder":21},[1086,6297,6298,6301,6304,6306,6309,6311,6314,6316],{"class":1088,"line":3587},[1086,6299,6300],{"class":1587},"function",[1086,6302,6303],{"class":1109}," handleSubmit",[1086,6305,1301],{"class":1304},[1086,6307,6308],{"class":1942},"e",[1086,6310,1314],{"class":1304},[1086,6312,6313],{"class":1092}," Event",[1086,6315,1882],{"class":1304},[1086,6317,1380],{"class":1304},[1086,6319,6320,6323,6325,6328],{"class":1088,"line":3592},[1086,6321,6322],{"class":1300},"  e",[1086,6324,1808],{"class":1304},[1086,6326,6327],{"class":1109},"preventDefault",[1086,6329,2668],{"class":1310},[1086,6331,6332,6334,6336,6338,6340,6342,6344,6346,6348],{"class":1088,"line":3598},[1086,6333,3527],{"class":1290},[1086,6335,1951],{"class":1310},[1086,6337,5193],{"class":1300},[1086,6339,1808],{"class":1304},[1086,6341,3321],{"class":1300},[1086,6343,1808],{"class":1304},[1086,6345,5202],{"class":1109},[1086,6347,5205],{"class":1310},[1086,6349,1305],{"class":1304},[1086,6351,6352,6355,6357,6360,6362,6364,6366,6368,6370,6372,6374,6376],{"class":1088,"line":3618},[1086,6353,6354],{"class":1300},"    chat",[1086,6356,1808],{"class":1304},[1086,6358,6359],{"class":1109},"sendMessage",[1086,6361,1301],{"class":1310},[1086,6363,1865],{"class":1304},[1086,6365,1719],{"class":1310},[1086,6367,1314],{"class":1304},[1086,6369,5337],{"class":1300},[1086,6371,1808],{"class":1304},[1086,6373,3321],{"class":1300},[1086,6375,1732],{"class":1304},[1086,6377,1491],{"class":1310},[1086,6379,6380,6383,6385,6387,6389],{"class":1088,"line":3646},[1086,6381,6382],{"class":1300},"    input",[1086,6384,1808],{"class":1304},[1086,6386,3321],{"class":1300},[1086,6388,2622],{"class":1304},[1086,6390,6391],{"class":1304}," ''\n",[1086,6393,6394],{"class":1088,"line":3662},[1086,6395,3584],{"class":1304},[1086,6397,6398],{"class":1088,"line":3681},[1086,6399,5399],{"class":1304},[1086,6401,6402],{"class":1088,"line":3709},[1086,6403,1369],{"emptyLinePlaceholder":21},[1086,6405,6406],{"class":1088,"line":3716},[1086,6407,6408],{"class":1470},"\u002F\u002F Auto-generate response for first message\n",[1086,6410,6411,6414,6416,6418,6420],{"class":1088,"line":3721},[1086,6412,6413],{"class":1109},"onMounted",[1086,6415,1301],{"class":1300},[1086,6417,1805],{"class":1304},[1086,6419,1825],{"class":1587},[1086,6421,1380],{"class":1304},[1086,6423,6424,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446,6448],{"class":1088,"line":3787},[1086,6425,3527],{"class":1290},[1086,6427,1951],{"class":1310},[1086,6429,5930],{"class":1300},[1086,6431,1808],{"class":1304},[1086,6433,3321],{"class":1300},[1086,6435,3842],{"class":1304},[1086,6437,1996],{"class":1300},[1086,6439,1808],{"class":1304},[1086,6441,3821],{"class":1300},[1086,6443,3348],{"class":1304},[1086,6445,3827],{"class":3559},[1086,6447,3537],{"class":1310},[1086,6449,1305],{"class":1304},[1086,6451,6452,6454,6456,6459],{"class":1088,"line":3792},[1086,6453,6354],{"class":1300},[1086,6455,1808],{"class":1304},[1086,6457,6458],{"class":1109},"regenerate",[1086,6460,2668],{"class":1310},[1086,6462,6463],{"class":1088,"line":3797},[1086,6464,3584],{"class":1304},[1086,6466,6467,6469],{"class":1088,"line":3803},[1086,6468,1488],{"class":1304},[1086,6470,1491],{"class":1300},[1086,6472,6473,6475,6477],{"class":1088,"line":3832},[1086,6474,1635],{"class":1304},[1086,6476,5111],{"class":1310},[1086,6478,1565],{"class":1304},[1086,6480,6481],{"class":1088,"line":3873},[1086,6482,1369],{"emptyLinePlaceholder":21},[1086,6484,6485,6487,6489],{"class":1088,"line":3902},[1086,6486,1559],{"class":1304},[1086,6488,1562],{"class":1310},[1086,6490,1565],{"class":1304},[1086,6492,6493,6495,6497,6499,6501,6503,6505,6507],{"class":1088,"line":3914},[1086,6494,1572],{"class":1304},[1086,6496,5426],{"class":1310},[1086,6498,5429],{"class":1587},[1086,6500,1591],{"class":1304},[1086,6502,1518],{"class":1304},[1086,6504,5436],{"class":1096},[1086,6506,1518],{"class":1304},[1086,6508,1565],{"class":1304},[1086,6510,6511,6513,6515,6517,6519],{"class":1088,"line":3930},[1086,6512,1581],{"class":1304},[1086,6514,1562],{"class":1310},[1086,6516,5449],{"class":1304},[1086,6518,5452],{"class":1587},[1086,6520,1565],{"class":1304},[1086,6522,6523,6525,6527,6529,6531,6533,6536,6538],{"class":1088,"line":3944},[1086,6524,1605],{"class":1304},[1086,6526,5461],{"class":1310},[1086,6528,5464],{"class":1587},[1086,6530,1591],{"class":1304},[1086,6532,1518],{"class":1304},[1086,6534,6535],{"class":1096},"min-h-dvh flex flex-col py-4 sm:py-6",[1086,6537,1518],{"class":1304},[1086,6539,1565],{"class":1304},[1086,6541,6542,6544],{"class":1088,"line":3951},[1086,6543,5480],{"class":1304},[1086,6545,6546],{"class":1310},"UChatMessages\n",[1086,6548,6549,6552,6554,6556,6559],{"class":1088,"line":3956},[1086,6550,6551],{"class":1587},"          :messages",[1086,6553,1591],{"class":1304},[1086,6555,1518],{"class":1304},[1086,6557,6558],{"class":1096},"chat.messages",[1086,6560,5537],{"class":1304},[1086,6562,6563,6565,6567,6569,6572],{"class":1088,"line":3961},[1086,6564,5543],{"class":1587},[1086,6566,1591],{"class":1304},[1086,6568,1518],{"class":1304},[1086,6570,6571],{"class":1096},"chat.status",[1086,6573,5537],{"class":1304},[1086,6575,6576],{"class":1088,"line":3967},[1086,6577,6578],{"class":1587},"          should-auto-scroll\n",[1086,6580,6581,6584,6586,6588,6591],{"class":1088,"line":3984},[1086,6582,6583],{"class":1587},"          class",[1086,6585,1591],{"class":1304},[1086,6587,1518],{"class":1304},[1086,6589,6590],{"class":1096},"flex-1",[1086,6592,5537],{"class":1304},[1086,6594,6595],{"class":1088,"line":4006},[1086,6596,5603],{"class":1304},[1086,6598,6599,6601,6603,6605,6607,6609,6611,6613,6616,6618,6620],{"class":1088,"line":4024},[1086,6600,5609],{"class":1304},[1086,6602,1562],{"class":1310},[1086,6604,5449],{"class":1304},[1086,6606,371],{"class":1587},[1086,6608,1591],{"class":1304},[1086,6610,1518],{"class":1304},[1086,6612,1865],{"class":1304},[1086,6614,6615],{"class":1300}," message ",[1086,6617,1488],{"class":1304},[1086,6619,1518],{"class":1304},[1086,6621,1565],{"class":1304},[1086,6623,6624,6627,6629,6632,6634,6636,6639,6641,6644,6647,6649,6651,6653,6655,6658,6661,6663,6666,6668,6670,6672,6674,6677,6679,6682,6684,6686,6688,6690,6692,6695,6698],{"class":1088,"line":4032},[1086,6625,6626],{"class":1304},"            \u003C",[1086,6628,1562],{"class":1310},[1086,6630,6631],{"class":1290}," v-for",[1086,6633,1591],{"class":1304},[1086,6635,1518],{"class":1304},[1086,6637,6638],{"class":1300},"(part",[1086,6640,1716],{"class":1304},[1086,6642,6643],{"class":1300}," index) ",[1086,6645,6646],{"class":1304},"in",[1086,6648,2617],{"class":1300},[1086,6650,1808],{"class":1304},[1086,6652,2198],{"class":1300},[1086,6654,1518],{"class":1304},[1086,6656,6657],{"class":1304}," :",[1086,6659,6660],{"class":1587},"key",[1086,6662,1591],{"class":1304},[1086,6664,6665],{"class":1304},"\"`${",[1086,6667,4467],{"class":1300},[1086,6669,1808],{"class":1304},[1086,6671,2017],{"class":1300},[1086,6673,1488],{"class":1304},[1086,6675,6676],{"class":1096},"-",[1086,6678,5383],{"class":1304},[1086,6680,6681],{"class":1300},"part",[1086,6683,1808],{"class":1304},[1086,6685,6157],{"class":1300},[1086,6687,1488],{"class":1304},[1086,6689,6676],{"class":1096},[1086,6691,5383],{"class":1304},[1086,6693,6694],{"class":1300},"index",[1086,6696,6697],{"class":1304},"}`\"",[1086,6699,1565],{"class":1304},[1086,6701,6702,6705],{"class":1088,"line":4049},[1086,6703,6704],{"class":1304},"              \u003C",[1086,6706,6707],{"class":1310},"UChatReasoning\n",[1086,6709,6710,6713,6715,6717,6720],{"class":1088,"line":4070},[1086,6711,6712],{"class":1587},"                v-if",[1086,6714,1591],{"class":1304},[1086,6716,1518],{"class":1304},[1086,6718,6719],{"class":1096},"isReasoningUIPart(part)",[1086,6721,5537],{"class":1304},[1086,6723,6724,6727,6729,6731,6734],{"class":1088,"line":4080},[1086,6725,6726],{"class":1587},"                :text",[1086,6728,1591],{"class":1304},[1086,6730,1518],{"class":1304},[1086,6732,6733],{"class":1096},"part.text",[1086,6735,5537],{"class":1304},[1086,6737,6738,6741,6743,6745,6748],{"class":1088,"line":4090},[1086,6739,6740],{"class":1587},"                :streaming",[1086,6742,1591],{"class":1304},[1086,6744,1518],{"class":1304},[1086,6746,6747],{"class":1096},"isPartStreaming(part)",[1086,6749,5537],{"class":1304},[1086,6751,6752],{"class":1088,"line":4100},[1086,6753,6754],{"class":1304},"              >\n",[1086,6756,6757,6760],{"class":1088,"line":4117},[1086,6758,6759],{"class":1304},"                \u003C",[1086,6761,6762],{"class":1310},"MDC\n",[1086,6764,6765,6768,6770,6772,6774],{"class":1088,"line":4128},[1086,6766,6767],{"class":1587},"                  :value",[1086,6769,1591],{"class":1304},[1086,6771,1518],{"class":1304},[1086,6773,6733],{"class":1096},[1086,6775,5537],{"class":1304},[1086,6777,6778,6781,6783,6785,6788],{"class":1088,"line":4134},[1086,6779,6780],{"class":1587},"                  :cache-key",[1086,6782,1591],{"class":1304},[1086,6784,1518],{"class":1304},[1086,6786,6787],{"class":1096},"`reasoning-${message.id}-${index}`",[1086,6789,5537],{"class":1304},[1086,6791,6792,6795,6797,6799,6802],{"class":1088,"line":4140},[1086,6793,6794],{"class":1587},"                  class",[1086,6796,1591],{"class":1304},[1086,6798,1518],{"class":1304},[1086,6800,6801],{"class":1096},"*:first:mt-0 *:last:mb-0",[1086,6803,5537],{"class":1304},[1086,6805,6806],{"class":1088,"line":4150},[1086,6807,6808],{"class":1304},"                \u002F>\n",[1086,6810,6811,6814,6817],{"class":1088,"line":4160},[1086,6812,6813],{"class":1304},"              \u003C\u002F",[1086,6815,6816],{"class":1310},"UChatReasoning",[1086,6818,1565],{"class":1304},[1086,6820,6821],{"class":1088,"line":4173},[1086,6822,1369],{"emptyLinePlaceholder":21},[1086,6824,6825,6827,6829,6832,6834,6836,6839,6842,6844],{"class":1088,"line":4188},[1086,6826,6704],{"class":1304},[1086,6828,1562],{"class":1310},[1086,6830,6831],{"class":1290}," v-else-if",[1086,6833,1591],{"class":1304},[1086,6835,1518],{"class":1304},[1086,6837,6838],{"class":1109},"isTextUIPart",[1086,6840,6841],{"class":1300},"(part)",[1086,6843,1518],{"class":1304},[1086,6845,1565],{"class":1304},[1086,6847,6848,6850],{"class":1088,"line":4193},[1086,6849,6759],{"class":1304},[1086,6851,6762],{"class":1310},[1086,6853,6854,6857,6859,6861,6864],{"class":1088,"line":4198},[1086,6855,6856],{"class":1587},"                  v-if",[1086,6858,1591],{"class":1304},[1086,6860,1518],{"class":1304},[1086,6862,6863],{"class":1096},"message.role === 'assistant'",[1086,6865,5537],{"class":1304},[1086,6867,6868,6870,6872,6874,6876],{"class":1088,"line":4208},[1086,6869,6767],{"class":1587},[1086,6871,1591],{"class":1304},[1086,6873,1518],{"class":1304},[1086,6875,6733],{"class":1096},[1086,6877,5537],{"class":1304},[1086,6879,6880,6882,6884,6886,6889],{"class":1088,"line":4224},[1086,6881,6780],{"class":1587},[1086,6883,1591],{"class":1304},[1086,6885,1518],{"class":1304},[1086,6887,6888],{"class":1096},"`${message.id}-${index}`",[1086,6890,5537],{"class":1304},[1086,6892,6893,6895,6897,6899,6901],{"class":1088,"line":4239},[1086,6894,6794],{"class":1587},[1086,6896,1591],{"class":1304},[1086,6898,1518],{"class":1304},[1086,6900,6801],{"class":1096},[1086,6902,5537],{"class":1304},[1086,6904,6905],{"class":1088,"line":4245},[1086,6906,6808],{"class":1304},[1086,6908,6909,6911,6913,6915,6917,6919,6922,6924,6926,6928,6930,6933,6935],{"class":1088,"line":4251},[1086,6910,6759],{"class":1304},[1086,6912,976],{"class":1310},[1086,6914,6831],{"class":1587},[1086,6916,1591],{"class":1304},[1086,6918,1518],{"class":1304},[1086,6920,6921],{"class":1096},"message.role === 'user'",[1086,6923,1518],{"class":1304},[1086,6925,5464],{"class":1587},[1086,6927,1591],{"class":1304},[1086,6929,1518],{"class":1304},[1086,6931,6932],{"class":1096},"whitespace-pre-wrap",[1086,6934,1518],{"class":1304},[1086,6936,1565],{"class":1304},[1086,6938,6939],{"class":1088,"line":4259},[1086,6940,6941],{"class":1300},"                  {{ part.text }}\n",[1086,6943,6944,6947,6949],{"class":1088,"line":4264},[1086,6945,6946],{"class":1304},"                \u003C\u002F",[1086,6948,976],{"class":1310},[1086,6950,1565],{"class":1304},[1086,6952,6953,6955,6957],{"class":1088,"line":4270},[1086,6954,6813],{"class":1304},[1086,6956,1562],{"class":1310},[1086,6958,1565],{"class":1304},[1086,6960,6961,6964,6966],{"class":1088,"line":4290},[1086,6962,6963],{"class":1304},"            \u003C\u002F",[1086,6965,1562],{"class":1310},[1086,6967,1565],{"class":1304},[1086,6969,6970,6973,6975],{"class":1088,"line":4305},[1086,6971,6972],{"class":1304},"          \u003C\u002F",[1086,6974,1562],{"class":1310},[1086,6976,1565],{"class":1304},[1086,6978,6979,6981,6983],{"class":1088,"line":4322},[1086,6980,5506],{"class":1304},[1086,6982,5082],{"class":1310},[1086,6984,1565],{"class":1304},[1086,6986,6987],{"class":1088,"line":4345},[1086,6988,1369],{"emptyLinePlaceholder":21},[1086,6990,6991,6993],{"class":1088,"line":4356},[1086,6992,5480],{"class":1304},[1086,6994,5522],{"class":1310},[1086,6996,6997,6999,7001,7003,7005],{"class":1088,"line":4364},[1086,6998,5528],{"class":1587},[1086,7000,1591],{"class":1304},[1086,7002,1518],{"class":1304},[1086,7004,5193],{"class":1096},[1086,7006,5537],{"class":1304},[1086,7008,7009,7012,7014,7016,7019],{"class":1088,"line":4370},[1086,7010,7011],{"class":1587},"          :error",[1086,7013,1591],{"class":1304},[1086,7015,1518],{"class":1304},[1086,7017,7018],{"class":1096},"chat.error",[1086,7020,5537],{"class":1304},[1086,7022,7023,7025,7027,7029,7031],{"class":1088,"line":4375},[1086,7024,5558],{"class":1587},[1086,7026,1591],{"class":1304},[1086,7028,1518],{"class":1304},[1086,7030,5565],{"class":1096},[1086,7032,5537],{"class":1304},[1086,7034,7035,7037,7039,7041,7044],{"class":1088,"line":4398},[1086,7036,6583],{"class":1587},[1086,7038,1591],{"class":1304},[1086,7040,1518],{"class":1304},[1086,7042,7043],{"class":1096},"sticky bottom-0",[1086,7045,5537],{"class":1304},[1086,7047,7048,7050,7052,7054,7057],{"class":1088,"line":4404},[1086,7049,5588],{"class":1587},[1086,7051,1591],{"class":1304},[1086,7053,1518],{"class":1304},[1086,7055,7056],{"class":1096},"handleSubmit",[1086,7058,5537],{"class":1304},[1086,7060,7061],{"class":1088,"line":4424},[1086,7062,5603],{"class":1304},[1086,7064,7065,7067],{"class":1088,"line":4430},[1086,7066,5609],{"class":1304},[1086,7068,7069],{"class":1310},"UChatPromptSubmit\n",[1086,7071,7072,7075,7077,7079,7081],{"class":1088,"line":4476},[1086,7073,7074],{"class":1587},"            :status",[1086,7076,1591],{"class":1304},[1086,7078,1518],{"class":1304},[1086,7080,6571],{"class":1096},[1086,7082,5537],{"class":1304},[1086,7084,7085,7088,7090,7092,7094],{"class":1088,"line":4492},[1086,7086,7087],{"class":1587},"            color",[1086,7089,1591],{"class":1304},[1086,7091,1518],{"class":1304},[1086,7093,5622],{"class":1096},[1086,7095,5537],{"class":1304},[1086,7097,7098,7101,7103,7105,7108],{"class":1088,"line":4525},[1086,7099,7100],{"class":1587},"            @stop",[1086,7102,1591],{"class":1304},[1086,7104,1518],{"class":1304},[1086,7106,7107],{"class":1096},"chat.stop()",[1086,7109,5537],{"class":1304},[1086,7111,7112,7115,7117,7119,7122],{"class":1088,"line":4539},[1086,7113,7114],{"class":1587},"            @reload",[1086,7116,1591],{"class":1304},[1086,7118,1518],{"class":1304},[1086,7120,7121],{"class":1096},"chat.regenerate()",[1086,7123,5537],{"class":1304},[1086,7125,7126],{"class":1088,"line":4547},[1086,7127,7128],{"class":1304},"          \u002F>\n",[1086,7130,7131,7133,7135],{"class":1088,"line":4552},[1086,7132,5506],{"class":1304},[1086,7134,5076],{"class":1310},[1086,7136,1565],{"class":1304},[1086,7138,7139,7141,7143],{"class":1088,"line":4559},[1086,7140,5640],{"class":1304},[1086,7142,5461],{"class":1310},[1086,7144,1565],{"class":1304},[1086,7146,7147,7149,7151],{"class":1088,"line":4564},[1086,7148,1616],{"class":1304},[1086,7150,1562],{"class":1310},[1086,7152,1565],{"class":1304},[1086,7154,7155,7157,7159],{"class":1088,"line":4582},[1086,7156,1626],{"class":1304},[1086,7158,5426],{"class":1310},[1086,7160,1565],{"class":1304},[1086,7162,7164,7166,7168],{"class":1088,"line":7163},112,[1086,7165,1635],{"class":1304},[1086,7167,1562],{"class":1310},[1086,7169,1565],{"class":1304},[976,7171,7172],{},"Here's a breakdown of the key parts:",[976,7174,7175],{},[994,7176,7177],{},"The Chat Class",[976,7179,4625,7180,7185,7186,7188],{},[1030,7181,7183],{"href":5710,"rel":7182},[1034],[1036,7184,259],{}," class from ",[1036,7187,5802],{}," manages the entire conversation state. It handles:",[988,7190,7191,7196,7211,7217,7222],{},[991,7192,7193,7194],{},"Message history with ",[1036,7195,6558],{},[991,7197,7198,7199,1951,7201,2863,7204,2863,7207,2863,7209,1882],{},"Connection status with ",[1036,7200,6571],{},[1036,7202,7203],{},"ready",[1036,7205,7206],{},"submitted",[1036,7208,5697],{},[1036,7210,6206],{},[991,7212,7213,7214],{},"Sending messages with ",[1036,7215,7216],{},"chat.sendMessage()",[991,7218,7219,7220],{},"Stopping generation with ",[1036,7221,7107],{},[991,7223,7224,7225],{},"Regenerating responses with ",[1036,7226,7121],{},[976,7228,4625,7229,7232,7233,7238,7239,7241],{},[1036,7230,7231],{},"onData"," callback receives ",[1030,7234,7237],{"href":7235,"rel":7236},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1034],"custom data events"," from the server (like ",[1036,7240,4315],{},"), allowing you to react to server-side events during streaming.",[976,7243,7244],{},[994,7245,7246],{},"UChatMessages Component",[976,7248,4625,7249,7253],{},[1030,7250,7251],{"href":271},[1036,7252,5082],{}," component is purpose-built for AI chatbots with:",[988,7255,7256,7259,7262,7265],{},[991,7257,7258],{},"Auto-scroll to bottom on load",[991,7260,7261],{},"Continuous scrolling as messages stream in",[991,7263,7264],{},"A loading indicator while the assistant processes",[991,7266,7267],{},"An \"Auto scroll\" button when scrolled up",[976,7269,7270],{},[994,7271,7272],{},"Rendering Markdown with MDC",[976,7274,7275,7276,7278,7279,1039,7281,7284,7285,7292,7293,7299,7300,7304,7305,7308,7309,7311],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). We iterate over message ",[1036,7277,2198],{}," using AI SDK helpers like ",[1036,7280,6838],{},[1036,7282,7283],{},"isReasoningUIPart",", rendering text with the ",[1030,7286,7289],{"href":7287,"rel":7288},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc#mdc",[1034],[1036,7290,7291],{},"MDC"," component from ",[1030,7294,7297],{"href":7295,"rel":7296},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc",[1034],[1036,7298,1340],{}," and reasoning with ",[1030,7301,7302],{"href":291},[1036,7303,6816],{},". The ",[1036,7306,7307],{},"isPartStreaming"," utility from ",[1036,7310,5823],{}," detects if a part is currently being streamed.",[1665,7313,7314],{"to":859},[976,7315,7316],{},"Nuxt UI provides pre-styled prose components, so your markdown content will be automatically styled to match your theme.",[976,7318,7319],{},[994,7320,7321],{},"UChatPromptSubmit Component",[976,7323,4625,7324,7328],{},[1030,7325,7326],{"href":286},[1036,7327,5612],{}," component adapts based on the chat status:",[988,7330,7331,7334,7337],{},[991,7332,7333],{},"Shows a send button when ready",[991,7335,7336],{},"Shows a stop button while streaming",[991,7338,7339],{},"Shows a reload button after an error",[980,7341,7343],{"id":7342},"adding-chat-history","Adding chat history",[976,7345,7346],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1114,7348,7350],{"id":7349},"listing-chats-api","Listing chats API",[976,7352,7353],{},"First, create an endpoint to fetch all chats:",[1277,7355,7356],{},[1077,7357,7360],{"className":1281,"code":7358,"filename":7359,"language":1283,"meta":1082,"style":1082},"import { defineEventHandler } from 'h3'\nimport { db, schema } from 'hub:db'\nimport { desc } from 'drizzle-orm'\n\nexport default defineEventHandler(async () => {\n  return await db.query.chats.findMany({\n    orderBy: () => desc(schema.chats.createdAt)\n  })\n})\n","server\u002Fapi\u002Fchats.get.ts",[1036,7361,7362,7380,7402,7421,7425,7443,7468,7495,7501],{"__ignoreMap":1082},[1086,7363,7364,7366,7368,7370,7372,7374,7376,7378],{"class":1088,"line":1089},[1086,7365,1707],{"class":1290},[1086,7367,1710],{"class":1304},[1086,7369,2497],{"class":1300},[1086,7371,1732],{"class":1304},[1086,7373,1735],{"class":1290},[1086,7375,1391],{"class":1304},[1086,7377,1114],{"class":1096},[1086,7379,1355],{"class":1304},[1086,7381,7382,7384,7386,7388,7390,7392,7394,7396,7398,7400],{"class":1088,"line":1106},[1086,7383,1707],{"class":1290},[1086,7385,1710],{"class":1304},[1086,7387,2440],{"class":1300},[1086,7389,1716],{"class":1304},[1086,7391,2548],{"class":1300},[1086,7393,1732],{"class":1304},[1086,7395,1735],{"class":1290},[1086,7397,1391],{"class":1304},[1086,7399,2557],{"class":1096},[1086,7401,1355],{"class":1304},[1086,7403,7404,7406,7408,7411,7413,7415,7417,7419],{"class":1088,"line":1320},[1086,7405,1707],{"class":1290},[1086,7407,1710],{"class":1304},[1086,7409,7410],{"class":1300}," desc",[1086,7412,1732],{"class":1304},[1086,7414,1735],{"class":1290},[1086,7416,1391],{"class":1304},[1086,7418,1760],{"class":1096},[1086,7420,1355],{"class":1304},[1086,7422,7423],{"class":1088,"line":1335},[1086,7424,1369],{"emptyLinePlaceholder":21},[1086,7426,7427,7429,7431,7433,7435,7437,7439,7441],{"class":1088,"line":1347},[1086,7428,1291],{"class":1290},[1086,7430,1294],{"class":1290},[1086,7432,2497],{"class":1109},[1086,7434,1301],{"class":1300},[1086,7436,2596],{"class":1587},[1086,7438,4961],{"class":1304},[1086,7440,1825],{"class":1587},[1086,7442,1380],{"class":1304},[1086,7444,7445,7447,7449,7451,7453,7455,7457,7459,7461,7464,7466],{"class":1088,"line":1358},[1086,7446,2839],{"class":1290},[1086,7448,2625],{"class":1290},[1086,7450,2440],{"class":1300},[1086,7452,1808],{"class":1304},[1086,7454,3452],{"class":1300},[1086,7456,1808],{"class":1304},[1086,7458,1787],{"class":1300},[1086,7460,1808],{"class":1304},[1086,7462,7463],{"class":1109},"findMany",[1086,7465,1301],{"class":1310},[1086,7467,1305],{"class":1304},[1086,7469,7470,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491,7493],{"class":1088,"line":1366},[1086,7471,7472],{"class":1109},"    orderBy",[1086,7474,1314],{"class":1304},[1086,7476,4961],{"class":1304},[1086,7478,1825],{"class":1587},[1086,7480,7410],{"class":1109},[1086,7482,1301],{"class":1310},[1086,7484,2716],{"class":1300},[1086,7486,1808],{"class":1304},[1086,7488,1787],{"class":1300},[1086,7490,1808],{"class":1304},[1086,7492,4978],{"class":1300},[1086,7494,1491],{"class":1310},[1086,7496,7497,7499],{"class":1088,"line":1372},[1086,7498,2413],{"class":1304},[1086,7500,1491],{"class":1310},[1086,7502,7503,7505],{"class":1088,"line":1383},[1086,7504,1488],{"class":1304},[1086,7506,1491],{"class":1300},[1114,7508,7510],{"id":7509},"building-the-chats-history-dropdown","Building the chats history dropdown",[976,7512,7513,7514,7519,7520,7525,7526,7519,7533,7535],{},"The component uses ",[1030,7515,7516],{"href":457},[1036,7517,7518],{},"UDropdownMenu"," with a ",[1030,7521,7522],{"href":230},[1036,7523,7524],{},"UButton"," as trigger. Use ",[1030,7527,7530],{"href":7528,"rel":7529},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1034],[1036,7531,7532],{},"useFetch",[1036,7534,6660],{}," to fetch and cache the chat list:",[1277,7537,7538],{},[1077,7539,7542],{"className":1549,"code":7540,"filename":7541,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst route = useRoute()\n\nconst { data: chats } = await useFetch('\u002Fapi\u002Fchats', {\n  key: 'chats',\n  default: () => []\n})\n\nconst items = computed(() => [\n  {\n    label: 'New chat',\n    to: '\u002F',\n    icon: 'i-lucide-plus-square',\n    active: route.name === 'index'\n  },\n  ...chats.value.map(chat => ({\n    label: chat.title || 'Untitled',\n    to: `\u002Fchat\u002F${chat.id}`,\n    active: route.params.id === chat.id\n  }))\n])\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDropdownMenu :items=\"items\" class=\"m-2\">\n    \u003CUButton\n      icon=\"i-lucide-messages-square\"\n      variant=\"ghost\"\n      label=\"Chats History\"\n      color=\"neutral\"\n      class=\"w-fit\"\n    \u002F>\n  \u003C\u002FUDropdownMenu>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FChatsHistory.vue",[1036,7543,7544,7564,7576,7580,7612,7627,7641,7647,7651,7671,7676,7692,7708,7728,7752,7756,7781,7806,7828,7854,7860,7864,7872,7876,7884,7915,7922,7939,7953,7967,7979,7993,7998,8006],{"__ignoreMap":1082},[1086,7545,7546,7548,7550,7552,7554,7556,7558,7560,7562],{"class":1088,"line":1089},[1086,7547,1559],{"class":1304},[1086,7549,5111],{"class":1310},[1086,7551,5114],{"class":1587},[1086,7553,5117],{"class":1587},[1086,7555,1591],{"class":1304},[1086,7557,1518],{"class":1304},[1086,7559,1283],{"class":1096},[1086,7561,1518],{"class":1304},[1086,7563,1565],{"class":1304},[1086,7565,7566,7568,7570,7572,7574],{"class":1088,"line":1106},[1086,7567,3060],{"class":1587},[1086,7569,5836],{"class":1300},[1086,7571,1591],{"class":1304},[1086,7573,5841],{"class":1109},[1086,7575,2668],{"class":1300},[1086,7577,7578],{"class":1088,"line":1320},[1086,7579,1369],{"emptyLinePlaceholder":21},[1086,7581,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610],{"class":1088,"line":1335},[1086,7583,3060],{"class":1587},[1086,7585,1710],{"class":1304},[1086,7587,5875],{"class":1310},[1086,7589,1314],{"class":1304},[1086,7591,1776],{"class":1300},[1086,7593,1488],{"class":1304},[1086,7595,2622],{"class":1304},[1086,7597,2625],{"class":1290},[1086,7599,5889],{"class":1109},[1086,7601,1301],{"class":1300},[1086,7603,1329],{"class":1304},[1086,7605,5254],{"class":1096},[1086,7607,1329],{"class":1304},[1086,7609,1716],{"class":1304},[1086,7611,1380],{"class":1304},[1086,7613,7614,7617,7619,7621,7623,7625],{"class":1088,"line":1347},[1086,7615,7616],{"class":1310},"  key",[1086,7618,1314],{"class":1304},[1086,7620,1391],{"class":1304},[1086,7622,1787],{"class":1096},[1086,7624,1329],{"class":1304},[1086,7626,1332],{"class":1304},[1086,7628,7629,7632,7634,7636,7638],{"class":1088,"line":1358},[1086,7630,7631],{"class":1109},"  default",[1086,7633,1314],{"class":1304},[1086,7635,4961],{"class":1304},[1086,7637,1825],{"class":1587},[1086,7639,7640],{"class":1300}," []\n",[1086,7642,7643,7645],{"class":1088,"line":1366},[1086,7644,1488],{"class":1304},[1086,7646,1491],{"class":1300},[1086,7648,7649],{"class":1088,"line":1372},[1086,7650,1369],{"emptyLinePlaceholder":21},[1086,7652,7653,7655,7658,7660,7663,7665,7667,7669],{"class":1088,"line":1383},[1086,7654,3060],{"class":1587},[1086,7656,7657],{"class":1300}," items ",[1086,7659,1591],{"class":1304},[1086,7661,7662],{"class":1109}," computed",[1086,7664,1301],{"class":1300},[1086,7666,1805],{"class":1304},[1086,7668,1825],{"class":1587},[1086,7670,1317],{"class":1300},[1086,7672,7673],{"class":1088,"line":1399},[1086,7674,7675],{"class":1304},"  {\n",[1086,7677,7678,7681,7683,7685,7688,7690],{"class":1088,"line":1405},[1086,7679,7680],{"class":1310},"    label",[1086,7682,1314],{"class":1304},[1086,7684,1391],{"class":1304},[1086,7686,7687],{"class":1096},"New chat",[1086,7689,1329],{"class":1304},[1086,7691,1332],{"class":1304},[1086,7693,7694,7697,7699,7701,7704,7706],{"class":1088,"line":1410},[1086,7695,7696],{"class":1310},"    to",[1086,7698,1314],{"class":1304},[1086,7700,1391],{"class":1304},[1086,7702,7703],{"class":1096},"\u002F",[1086,7705,1329],{"class":1304},[1086,7707,1332],{"class":1304},[1086,7709,7710,7713,7715,7717,7724,7726],{"class":1088,"line":1433},[1086,7711,7712],{"class":1310},"    icon",[1086,7714,1314],{"class":1304},[1086,7716,1391],{"class":1304},[1086,7718,7719,7723],{"class":1096},[7720,7721],"i",{"class":7722},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1086,7725,1329],{"class":1304},[1086,7727,1332],{"class":1304},[1086,7729,7730,7733,7735,7738,7740,7743,7746,7748,7750],{"class":1088,"line":1438},[1086,7731,7732],{"class":1310},"    active",[1086,7734,1314],{"class":1304},[1086,7736,7737],{"class":1300}," route",[1086,7739,1808],{"class":1304},[1086,7741,7742],{"class":1300},"name ",[1086,7744,7745],{"class":1304},"===",[1086,7747,1391],{"class":1304},[1086,7749,6694],{"class":1096},[1086,7751,1355],{"class":1304},[1086,7753,7754],{"class":1088,"line":1448},[1086,7755,1402],{"class":1304},[1086,7757,7758,7761,7763,7765,7767,7769,7771,7773,7775,7777,7779],{"class":1088,"line":1458},[1086,7759,7760],{"class":1304},"  ...",[1086,7762,1787],{"class":1300},[1086,7764,1808],{"class":1304},[1086,7766,3321],{"class":1300},[1086,7768,1808],{"class":1304},[1086,7770,4462],{"class":1109},[1086,7772,1301],{"class":1300},[1086,7774,262],{"class":1942},[1086,7776,1825],{"class":1587},[1086,7778,1951],{"class":1300},[1086,7780,1305],{"class":1304},[1086,7782,7783,7785,7787,7789,7791,7794,7797,7799,7802,7804],{"class":1088,"line":1474},[1086,7784,7680],{"class":1310},[1086,7786,1314],{"class":1304},[1086,7788,2789],{"class":1300},[1086,7790,1808],{"class":1304},[1086,7792,7793],{"class":1300},"title ",[1086,7795,7796],{"class":1304},"||",[1086,7798,1391],{"class":1304},[1086,7800,7801],{"class":1096},"Untitled",[1086,7803,1329],{"class":1304},[1086,7805,1332],{"class":1304},[1086,7807,7808,7810,7812,7814,7816,7818,7820,7822,7824,7826],{"class":1088,"line":1480},[1086,7809,7696],{"class":1310},[1086,7811,1314],{"class":1304},[1086,7813,3670],{"class":1304},[1086,7815,5380],{"class":1096},[1086,7817,5383],{"class":1304},[1086,7819,262],{"class":1300},[1086,7821,1808],{"class":1304},[1086,7823,2017],{"class":1300},[1086,7825,5392],{"class":1304},[1086,7827,1332],{"class":1304},[1086,7829,7830,7832,7834,7836,7838,7840,7842,7845,7847,7849,7851],{"class":1088,"line":1485},[1086,7831,7732],{"class":1310},[1086,7833,1314],{"class":1304},[1086,7835,7737],{"class":1300},[1086,7837,1808],{"class":1304},[1086,7839,5906],{"class":1300},[1086,7841,1808],{"class":1304},[1086,7843,7844],{"class":1300},"id ",[1086,7846,7745],{"class":1304},[1086,7848,2789],{"class":1300},[1086,7850,1808],{"class":1304},[1086,7852,7853],{"class":1300},"id\n",[1086,7855,7856,7858],{"class":1088,"line":2274},[1086,7857,2413],{"class":1304},[1086,7859,1972],{"class":1300},[1086,7861,7862],{"class":1088,"line":2287},[1086,7863,2320],{"class":1300},[1086,7865,7866,7868,7870],{"class":1088,"line":2317},[1086,7867,1635],{"class":1304},[1086,7869,5111],{"class":1310},[1086,7871,1565],{"class":1304},[1086,7873,7874],{"class":1088,"line":2323},[1086,7875,1369],{"emptyLinePlaceholder":21},[1086,7877,7878,7880,7882],{"class":1088,"line":2328},[1086,7879,1559],{"class":1304},[1086,7881,1562],{"class":1310},[1086,7883,1565],{"class":1304},[1086,7885,7886,7888,7890,7893,7895,7897,7900,7902,7904,7906,7908,7911,7913],{"class":1088,"line":2360},[1086,7887,1572],{"class":1304},[1086,7889,7518],{"class":1310},[1086,7891,7892],{"class":1587}," :items",[1086,7894,1591],{"class":1304},[1086,7896,1518],{"class":1304},[1086,7898,7899],{"class":1096},"items",[1086,7901,1518],{"class":1304},[1086,7903,5464],{"class":1587},[1086,7905,1591],{"class":1304},[1086,7907,1518],{"class":1304},[1086,7909,7910],{"class":1096},"m-2",[1086,7912,1518],{"class":1304},[1086,7914,1565],{"class":1304},[1086,7916,7917,7919],{"class":1088,"line":2376},[1086,7918,1581],{"class":1304},[1086,7920,7921],{"class":1310},"UButton\n",[1086,7923,7924,7927,7929,7931,7937],{"class":1088,"line":2394},[1086,7925,7926],{"class":1587},"      icon",[1086,7928,1591],{"class":1304},[1086,7930,1518],{"class":1304},[1086,7932,7933,7936],{"class":1096},[7720,7934],{"class":7935},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1086,7938,5537],{"class":1304},[1086,7940,7941,7944,7946,7948,7951],{"class":1088,"line":2410},[1086,7942,7943],{"class":1587},"      variant",[1086,7945,1591],{"class":1304},[1086,7947,1518],{"class":1304},[1086,7949,7950],{"class":1096},"ghost",[1086,7952,5537],{"class":1304},[1086,7954,7955,7958,7960,7962,7965],{"class":1088,"line":2418},[1086,7956,7957],{"class":1587},"      label",[1086,7959,1591],{"class":1304},[1086,7961,1518],{"class":1304},[1086,7963,7964],{"class":1096},"Chats History",[1086,7966,5537],{"class":1304},[1086,7968,7969,7971,7973,7975,7977],{"class":1088,"line":3413},[1086,7970,6264],{"class":1587},[1086,7972,1591],{"class":1304},[1086,7974,1518],{"class":1304},[1086,7976,5622],{"class":1096},[1086,7978,5537],{"class":1304},[1086,7980,7981,7984,7986,7988,7991],{"class":1088,"line":3426},[1086,7982,7983],{"class":1587},"      class",[1086,7985,1591],{"class":1304},[1086,7987,1518],{"class":1304},[1086,7989,7990],{"class":1096},"w-fit",[1086,7992,5537],{"class":1304},[1086,7994,7995],{"class":1088,"line":3431},[1086,7996,7997],{"class":1304},"    \u002F>\n",[1086,7999,8000,8002,8004],{"class":1088,"line":3437},[1086,8001,1626],{"class":1304},[1086,8003,7518],{"class":1310},[1086,8005,1565],{"class":1304},[1086,8007,8008,8010,8012],{"class":1088,"line":3468},[1086,8009,1635],{"class":1304},[1086,8011,1562],{"class":1310},[1086,8013,1565],{"class":1304},[980,8015,8017],{"id":8016},"integrating-history-in-the-home-page","Integrating history in the home page",[1277,8019,8020],{},[1695,8021,8022],{},[1077,8023,8026],{"className":1549,"code":8024,"filename":5101,"highlights":8025,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst input = ref('')\nconst loading = ref(false)\n\nasync function createChat() {\n  if (!input.value.trim()) return\n\n  loading.value = true\n\n  \u002F\u002F Create a new chat on the server\n  const chat = await $fetch('\u002Fapi\u002Fchats', {\n    method: 'POST',\n    body: {\n      message: {\n        role: 'user',\n        parts: [{ type: 'text', text: input.value }]\n      }\n    }\n  })\n\n  \u002F\u002F Navigate to the chat page\n  navigateTo(`\u002Fchat\u002F${chat.id}`)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col justify-center gap-6 py-8\">\n        \u003Ch1 class=\"text-3xl sm:text-4xl text-highlighted font-bold\">\n          How can I help you today?\n        \u003C\u002Fh1>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :status=\"loading ? 'streaming' : 'ready'\"\n          variant=\"subtle\"\n          placeholder=\"Ask me anything...\"\n          @submit=\"createChat\"\n        >\n          \u003CUChatPromptSubmit color=\"neutral\" \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[2410,2418,3413],[1036,8027,8028,8048,8064,8080,8084,8096,8118,8122,8134,8138,8142,8166,8180,8188,8196,8210,8246,8250,8254,8260,8264,8268,8290,8294,8302,8306,8314,8332,8346,8356,8365,8377,8395,8413,8417,8425,8429,8435,8447,8459,8471,8483,8495,8499,8517,8525,8533,8541,8549],{"__ignoreMap":1082},[1086,8029,8030,8032,8034,8036,8038,8040,8042,8044,8046],{"class":1088,"line":1089},[1086,8031,1559],{"class":1304},[1086,8033,5111],{"class":1310},[1086,8035,5114],{"class":1587},[1086,8037,5117],{"class":1587},[1086,8039,1591],{"class":1304},[1086,8041,1518],{"class":1304},[1086,8043,1283],{"class":1096},[1086,8045,1518],{"class":1304},[1086,8047,1565],{"class":1304},[1086,8049,8050,8052,8054,8056,8058,8060,8062],{"class":1088,"line":1106},[1086,8051,3060],{"class":1587},[1086,8053,5134],{"class":1300},[1086,8055,1591],{"class":1304},[1086,8057,5139],{"class":1109},[1086,8059,1301],{"class":1300},[1086,8061,5144],{"class":1304},[1086,8063,1491],{"class":1300},[1086,8065,8066,8068,8070,8072,8074,8076,8078],{"class":1088,"line":1320},[1086,8067,3060],{"class":1587},[1086,8069,5153],{"class":1300},[1086,8071,1591],{"class":1304},[1086,8073,5139],{"class":1109},[1086,8075,1301],{"class":1300},[1086,8077,5162],{"class":1466},[1086,8079,1491],{"class":1300},[1086,8081,8082],{"class":1088,"line":1335},[1086,8083,1369],{"emptyLinePlaceholder":21},[1086,8085,8086,8088,8090,8092,8094],{"class":1088,"line":1347},[1086,8087,2596],{"class":1587},[1086,8089,5175],{"class":1587},[1086,8091,5178],{"class":1109},[1086,8093,1805],{"class":1304},[1086,8095,1380],{"class":1304},[1086,8097,8098,8100,8102,8104,8106,8108,8110,8112,8114,8116],{"class":1088,"line":1358},[1086,8099,3527],{"class":1290},[1086,8101,1951],{"class":1310},[1086,8103,3532],{"class":1304},[1086,8105,5193],{"class":1300},[1086,8107,1808],{"class":1304},[1086,8109,3321],{"class":1300},[1086,8111,1808],{"class":1304},[1086,8113,5202],{"class":1109},[1086,8115,5205],{"class":1310},[1086,8117,5208],{"class":1290},[1086,8119,8120],{"class":1088,"line":1366},[1086,8121,1369],{"emptyLinePlaceholder":21},[1086,8123,8124,8126,8128,8130,8132],{"class":1088,"line":1372},[1086,8125,5217],{"class":1300},[1086,8127,1808],{"class":1304},[1086,8129,3321],{"class":1300},[1086,8131,2622],{"class":1304},[1086,8133,4353],{"class":1466},[1086,8135,8136],{"class":1088,"line":1383},[1086,8137,1369],{"emptyLinePlaceholder":21},[1086,8139,8140],{"class":1088,"line":1399},[1086,8141,5234],{"class":1470},[1086,8143,8144,8146,8148,8150,8152,8154,8156,8158,8160,8162,8164],{"class":1088,"line":1405},[1086,8145,2612],{"class":1587},[1086,8147,2789],{"class":1300},[1086,8149,2622],{"class":1304},[1086,8151,2625],{"class":1290},[1086,8153,5247],{"class":1109},[1086,8155,1301],{"class":1310},[1086,8157,1329],{"class":1304},[1086,8159,5254],{"class":1096},[1086,8161,1329],{"class":1304},[1086,8163,1716],{"class":1304},[1086,8165,1380],{"class":1304},[1086,8167,8168,8170,8172,8174,8176,8178],{"class":1088,"line":1410},[1086,8169,5265],{"class":1310},[1086,8171,1314],{"class":1304},[1086,8173,1391],{"class":1304},[1086,8175,5272],{"class":1096},[1086,8177,1329],{"class":1304},[1086,8179,1332],{"class":1304},[1086,8181,8182,8184,8186],{"class":1088,"line":1433},[1086,8183,5281],{"class":1310},[1086,8185,1314],{"class":1304},[1086,8187,1380],{"class":1304},[1086,8189,8190,8192,8194],{"class":1088,"line":1438},[1086,8191,3361],{"class":1310},[1086,8193,1314],{"class":1304},[1086,8195,1380],{"class":1304},[1086,8197,8198,8200,8202,8204,8206,8208],{"class":1088,"line":1448},[1086,8199,4495],{"class":1310},[1086,8201,1314],{"class":1304},[1086,8203,1391],{"class":1304},[1086,8205,2147],{"class":1096},[1086,8207,1329],{"class":1304},[1086,8209,1332],{"class":1304},[1086,8211,8212,8214,8216,8218,8220,8222,8224,8226,8228,8230,8232,8234,8236,8238,8240,8242,8244],{"class":1088,"line":1458},[1086,8213,4528],{"class":1310},[1086,8215,1314],{"class":1304},[1086,8217,1418],{"class":1310},[1086,8219,1865],{"class":1304},[1086,8221,2519],{"class":1310},[1086,8223,1314],{"class":1304},[1086,8225,1391],{"class":1304},[1086,8227,5326],{"class":1096},[1086,8229,1329],{"class":1304},[1086,8231,1716],{"class":1304},[1086,8233,1719],{"class":1310},[1086,8235,1314],{"class":1304},[1086,8237,5337],{"class":1300},[1086,8239,1808],{"class":1304},[1086,8241,3321],{"class":1300},[1086,8243,1732],{"class":1304},[1086,8245,3167],{"class":1310},[1086,8247,8248],{"class":1088,"line":1474},[1086,8249,4367],{"class":1304},[1086,8251,8252],{"class":1088,"line":1480},[1086,8253,1477],{"class":1304},[1086,8255,8256,8258],{"class":1088,"line":1485},[1086,8257,2413],{"class":1304},[1086,8259,1491],{"class":1310},[1086,8261,8262],{"class":1088,"line":2274},[1086,8263,1369],{"emptyLinePlaceholder":21},[1086,8265,8266],{"class":1088,"line":2287},[1086,8267,5368],{"class":1470},[1086,8269,8270,8272,8274,8276,8278,8280,8282,8284,8286,8288],{"class":1088,"line":2317},[1086,8271,5373],{"class":1109},[1086,8273,1301],{"class":1310},[1086,8275,3676],{"class":1304},[1086,8277,5380],{"class":1096},[1086,8279,5383],{"class":1304},[1086,8281,262],{"class":1300},[1086,8283,1808],{"class":1304},[1086,8285,2017],{"class":1300},[1086,8287,5392],{"class":1304},[1086,8289,1491],{"class":1310},[1086,8291,8292],{"class":1088,"line":2323},[1086,8293,5399],{"class":1304},[1086,8295,8296,8298,8300],{"class":1088,"line":2328},[1086,8297,1635],{"class":1304},[1086,8299,5111],{"class":1310},[1086,8301,1565],{"class":1304},[1086,8303,8304],{"class":1088,"line":2360},[1086,8305,1369],{"emptyLinePlaceholder":21},[1086,8307,8308,8310,8312],{"class":1088,"line":2376},[1086,8309,1559],{"class":1304},[1086,8311,1562],{"class":1310},[1086,8313,1565],{"class":1304},[1086,8315,8316,8318,8320,8322,8324,8326,8328,8330],{"class":1088,"line":2394},[1086,8317,1572],{"class":1304},[1086,8319,5426],{"class":1310},[1086,8321,5429],{"class":1587},[1086,8323,1591],{"class":1304},[1086,8325,1518],{"class":1304},[1086,8327,5436],{"class":1096},[1086,8329,1518],{"class":1304},[1086,8331,1565],{"class":1304},[1086,8333,8335,8337,8339,8341,8344],{"class":8334,"line":2410},[1088,1569],[1086,8336,1581],{"class":1304},[1086,8338,1562],{"class":1310},[1086,8340,5449],{"class":1304},[1086,8342,8343],{"class":1587},"header",[1086,8345,1565],{"class":1304},[1086,8347,8349,8351,8354],{"class":8348,"line":2418},[1088,1569],[1086,8350,1605],{"class":1304},[1086,8352,8353],{"class":1310},"ChatsHistory",[1086,8355,1611],{"class":1304},[1086,8357,8359,8361,8363],{"class":8358,"line":3413},[1088,1569],[1086,8360,1616],{"class":1304},[1086,8362,1562],{"class":1310},[1086,8364,1565],{"class":1304},[1086,8366,8367,8369,8371,8373,8375],{"class":1088,"line":3426},[1086,8368,1581],{"class":1304},[1086,8370,1562],{"class":1310},[1086,8372,5449],{"class":1304},[1086,8374,5452],{"class":1587},[1086,8376,1565],{"class":1304},[1086,8378,8379,8381,8383,8385,8387,8389,8391,8393],{"class":1088,"line":3431},[1086,8380,1605],{"class":1304},[1086,8382,5461],{"class":1310},[1086,8384,5464],{"class":1587},[1086,8386,1591],{"class":1304},[1086,8388,1518],{"class":1304},[1086,8390,5471],{"class":1096},[1086,8392,1518],{"class":1304},[1086,8394,1565],{"class":1304},[1086,8396,8397,8399,8401,8403,8405,8407,8409,8411],{"class":1088,"line":3437},[1086,8398,5480],{"class":1304},[1086,8400,5483],{"class":1310},[1086,8402,5464],{"class":1587},[1086,8404,1591],{"class":1304},[1086,8406,1518],{"class":1304},[1086,8408,5492],{"class":1096},[1086,8410,1518],{"class":1304},[1086,8412,1565],{"class":1304},[1086,8414,8415],{"class":1088,"line":3468},[1086,8416,5501],{"class":1300},[1086,8418,8419,8421,8423],{"class":1088,"line":3512},[1086,8420,5506],{"class":1304},[1086,8422,5483],{"class":1310},[1086,8424,1565],{"class":1304},[1086,8426,8427],{"class":1088,"line":3519},[1086,8428,1369],{"emptyLinePlaceholder":21},[1086,8430,8431,8433],{"class":1088,"line":3524},[1086,8432,5480],{"class":1304},[1086,8434,5522],{"class":1310},[1086,8436,8437,8439,8441,8443,8445],{"class":1088,"line":3542},[1086,8438,5528],{"class":1587},[1086,8440,1591],{"class":1304},[1086,8442,1518],{"class":1304},[1086,8444,5193],{"class":1096},[1086,8446,5537],{"class":1304},[1086,8448,8449,8451,8453,8455,8457],{"class":1088,"line":3581},[1086,8450,5543],{"class":1587},[1086,8452,1591],{"class":1304},[1086,8454,1518],{"class":1304},[1086,8456,5550],{"class":1096},[1086,8458,5537],{"class":1304},[1086,8460,8461,8463,8465,8467,8469],{"class":1088,"line":3587},[1086,8462,5558],{"class":1587},[1086,8464,1591],{"class":1304},[1086,8466,1518],{"class":1304},[1086,8468,5565],{"class":1096},[1086,8470,5537],{"class":1304},[1086,8472,8473,8475,8477,8479,8481],{"class":1088,"line":3592},[1086,8474,5573],{"class":1587},[1086,8476,1591],{"class":1304},[1086,8478,1518],{"class":1304},[1086,8480,5580],{"class":1096},[1086,8482,5537],{"class":1304},[1086,8484,8485,8487,8489,8491,8493],{"class":1088,"line":3598},[1086,8486,5588],{"class":1587},[1086,8488,1591],{"class":1304},[1086,8490,1518],{"class":1304},[1086,8492,5595],{"class":1096},[1086,8494,5537],{"class":1304},[1086,8496,8497],{"class":1088,"line":3618},[1086,8498,5603],{"class":1304},[1086,8500,8501,8503,8505,8507,8509,8511,8513,8515],{"class":1088,"line":3646},[1086,8502,5609],{"class":1304},[1086,8504,5612],{"class":1310},[1086,8506,5615],{"class":1587},[1086,8508,1591],{"class":1304},[1086,8510,1518],{"class":1304},[1086,8512,5622],{"class":1096},[1086,8514,1518],{"class":1304},[1086,8516,1611],{"class":1304},[1086,8518,8519,8521,8523],{"class":1088,"line":3662},[1086,8520,5506],{"class":1304},[1086,8522,5076],{"class":1310},[1086,8524,1565],{"class":1304},[1086,8526,8527,8529,8531],{"class":1088,"line":3681},[1086,8528,5640],{"class":1304},[1086,8530,5461],{"class":1310},[1086,8532,1565],{"class":1304},[1086,8534,8535,8537,8539],{"class":1088,"line":3709},[1086,8536,1616],{"class":1304},[1086,8538,1562],{"class":1310},[1086,8540,1565],{"class":1304},[1086,8542,8543,8545,8547],{"class":1088,"line":3716},[1086,8544,1626],{"class":1304},[1086,8546,5426],{"class":1310},[1086,8548,1565],{"class":1304},[1086,8550,8551,8553,8555],{"class":1088,"line":3721},[1086,8552,1635],{"class":1304},[1086,8554,1562],{"class":1310},[1086,8556,1565],{"class":1304},[980,8558,8560],{"id":8559},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1277,8562,8563],{},[1695,8564,8565],{},[1077,8566,8569],{"className":1549,"code":8567,"filename":5730,"highlights":8568,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[3961,3967,3984],[1036,8570,8571,8591,8617,8635,8653,8657,8669,8681,8685,8689,8731,8735,8751,8791,8795,8799,8815,8819,8823,8839,8857,8875,8889,8913,8921,8933,8937,8961,8975,8979,8983,8995,9007,9021,9035,9047,9053,9057,9063,9067,9085,9095,9115,9141,9153,9157,9161,9165,9169,9181,9209,9219,9223,9229,9237,9241,9249,9267,9279,9287,9295,9307,9326,9333,9346,9358,9362,9374,9378,9402,9468,9474,9486,9498,9510,9514,9520,9532,9544,9556,9560,9568,9572,9592,9598,9610,9622,9634,9646,9650,9678,9682,9690,9698,9706,9714,9722,9726,9732,9744,9756,9768,9780,9792,9796,9802,9814,9826,9838,9850,9854,9862,9870,9879,9888],{"__ignoreMap":1082},[1086,8572,8573,8575,8577,8579,8581,8583,8585,8587,8589],{"class":1088,"line":1089},[1086,8574,1559],{"class":1304},[1086,8576,5111],{"class":1310},[1086,8578,5114],{"class":1587},[1086,8580,5117],{"class":1587},[1086,8582,1591],{"class":1304},[1086,8584,1518],{"class":1304},[1086,8586,1283],{"class":1096},[1086,8588,1518],{"class":1304},[1086,8590,1565],{"class":1304},[1086,8592,8593,8595,8597,8599,8601,8603,8605,8607,8609,8611,8613,8615],{"class":1088,"line":1106},[1086,8594,1707],{"class":1290},[1086,8596,1710],{"class":1304},[1086,8598,5763],{"class":1300},[1086,8600,1716],{"class":1304},[1086,8602,5768],{"class":1300},[1086,8604,1716],{"class":1304},[1086,8606,5773],{"class":1300},[1086,8608,1732],{"class":1304},[1086,8610,1735],{"class":1290},[1086,8612,1391],{"class":1304},[1086,8614,2533],{"class":1096},[1086,8616,1355],{"class":1304},[1086,8618,8619,8621,8623,8625,8627,8629,8631,8633],{"class":1088,"line":1320},[1086,8620,1707],{"class":1290},[1086,8622,1710],{"class":1304},[1086,8624,5793],{"class":1300},[1086,8626,1732],{"class":1304},[1086,8628,1735],{"class":1290},[1086,8630,1391],{"class":1304},[1086,8632,5802],{"class":1096},[1086,8634,1355],{"class":1304},[1086,8636,8637,8639,8641,8643,8645,8647,8649,8651],{"class":1088,"line":1335},[1086,8638,1707],{"class":1290},[1086,8640,1710],{"class":1304},[1086,8642,5814],{"class":1300},[1086,8644,1732],{"class":1304},[1086,8646,1735],{"class":1290},[1086,8648,1391],{"class":1304},[1086,8650,5823],{"class":1096},[1086,8652,1355],{"class":1304},[1086,8654,8655],{"class":1088,"line":1347},[1086,8656,1369],{"emptyLinePlaceholder":21},[1086,8658,8659,8661,8663,8665,8667],{"class":1088,"line":1358},[1086,8660,3060],{"class":1587},[1086,8662,5836],{"class":1300},[1086,8664,1591],{"class":1304},[1086,8666,5841],{"class":1109},[1086,8668,2668],{"class":1300},[1086,8670,8671,8673,8675,8677,8679],{"class":1088,"line":1366},[1086,8672,3060],{"class":1587},[1086,8674,5850],{"class":1300},[1086,8676,1591],{"class":1304},[1086,8678,5855],{"class":1109},[1086,8680,2668],{"class":1300},[1086,8682,8683],{"class":1088,"line":1372},[1086,8684,1369],{"emptyLinePlaceholder":21},[1086,8686,8687],{"class":1088,"line":1383},[1086,8688,5866],{"class":1470},[1086,8690,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729],{"class":1088,"line":1399},[1086,8692,3060],{"class":1587},[1086,8694,1710],{"class":1304},[1086,8696,5875],{"class":1310},[1086,8698,1314],{"class":1304},[1086,8700,5880],{"class":1300},[1086,8702,1488],{"class":1304},[1086,8704,2622],{"class":1304},[1086,8706,2625],{"class":1290},[1086,8708,5889],{"class":1109},[1086,8710,1301],{"class":1300},[1086,8712,3676],{"class":1304},[1086,8714,5896],{"class":1096},[1086,8716,5383],{"class":1304},[1086,8718,5901],{"class":1300},[1086,8720,1808],{"class":1304},[1086,8722,5906],{"class":1300},[1086,8724,1808],{"class":1304},[1086,8726,2017],{"class":1300},[1086,8728,5392],{"class":1304},[1086,8730,1491],{"class":1300},[1086,8732,8733],{"class":1088,"line":1405},[1086,8734,1369],{"emptyLinePlaceholder":21},[1086,8736,8737,8739,8741,8743,8745,8747,8749],{"class":1088,"line":1410},[1086,8738,5923],{"class":1290},[1086,8740,1951],{"class":1300},[1086,8742,3532],{"class":1304},[1086,8744,5930],{"class":1300},[1086,8746,1808],{"class":1304},[1086,8748,5935],{"class":1300},[1086,8750,1305],{"class":1304},[1086,8752,8753,8755,8757,8759,8761,8763,8765,8767,8769,8771,8773,8775,8777,8779,8781,8783,8785,8787,8789],{"class":1088,"line":1433},[1086,8754,5942],{"class":1290},[1086,8756,2898],{"class":1109},[1086,8758,1301],{"class":1310},[1086,8760,1865],{"class":1304},[1086,8762,3554],{"class":1310},[1086,8764,1314],{"class":1304},[1086,8766,3560],{"class":3559},[1086,8768,1716],{"class":1304},[1086,8770,3565],{"class":1310},[1086,8772,1314],{"class":1304},[1086,8774,1391],{"class":1304},[1086,8776,3572],{"class":1096},[1086,8778,1329],{"class":1304},[1086,8780,1716],{"class":1304},[1086,8782,5971],{"class":1310},[1086,8784,1314],{"class":1304},[1086,8786,4168],{"class":1466},[1086,8788,1732],{"class":1304},[1086,8790,1491],{"class":1310},[1086,8792,8793],{"class":1088,"line":1438},[1086,8794,5399],{"class":1304},[1086,8796,8797],{"class":1088,"line":1448},[1086,8798,1369],{"emptyLinePlaceholder":21},[1086,8800,8801,8803,8805,8807,8809,8811,8813],{"class":1088,"line":1458},[1086,8802,3060],{"class":1587},[1086,8804,5134],{"class":1300},[1086,8806,1591],{"class":1304},[1086,8808,5139],{"class":1109},[1086,8810,1301],{"class":1300},[1086,8812,5144],{"class":1304},[1086,8814,1491],{"class":1300},[1086,8816,8817],{"class":1088,"line":1474},[1086,8818,1369],{"emptyLinePlaceholder":21},[1086,8820,8821],{"class":1088,"line":1480},[1086,8822,6012],{"class":1470},[1086,8824,8825,8827,8829,8831,8833,8835,8837],{"class":1088,"line":1485},[1086,8826,3060],{"class":1587},[1086,8828,6020],{"class":1300},[1086,8830,1591],{"class":1304},[1086,8832,1902],{"class":1304},[1086,8834,5793],{"class":1109},[1086,8836,1301],{"class":1300},[1086,8838,1305],{"class":1304},[1086,8840,8841,8843,8845,8847,8849,8851,8853,8855],{"class":1088,"line":2274},[1086,8842,1798],{"class":1310},[1086,8844,1314],{"class":1304},[1086,8846,6040],{"class":1300},[1086,8848,1808],{"class":1304},[1086,8850,3321],{"class":1300},[1086,8852,1808],{"class":1304},[1086,8854,2017],{"class":1300},[1086,8856,1332],{"class":1304},[1086,8858,8859,8861,8863,8865,8867,8869,8871,8873],{"class":1088,"line":2287},[1086,8860,1958],{"class":1310},[1086,8862,1314],{"class":1304},[1086,8864,6040],{"class":1300},[1086,8866,1808],{"class":1304},[1086,8868,3321],{"class":1300},[1086,8870,1808],{"class":1304},[1086,8872,1996],{"class":1300},[1086,8874,1332],{"class":1304},[1086,8876,8877,8879,8881,8883,8885,8887],{"class":1088,"line":2317},[1086,8878,6075],{"class":1310},[1086,8880,1314],{"class":1304},[1086,8882,1902],{"class":1304},[1086,8884,5763],{"class":1109},[1086,8886,1301],{"class":1300},[1086,8888,1305],{"class":1304},[1086,8890,8891,8893,8895,8897,8899,8901,8903,8905,8907,8909,8911],{"class":1088,"line":2323},[1086,8892,6091],{"class":1310},[1086,8894,1314],{"class":1304},[1086,8896,3670],{"class":1304},[1086,8898,5896],{"class":1096},[1086,8900,5383],{"class":1304},[1086,8902,5930],{"class":1300},[1086,8904,1808],{"class":1304},[1086,8906,3321],{"class":1300},[1086,8908,1808],{"class":1304},[1086,8910,2017],{"class":1300},[1086,8912,6112],{"class":1304},[1086,8914,8915,8917,8919],{"class":1088,"line":2328},[1086,8916,2413],{"class":1304},[1086,8918,1882],{"class":1300},[1086,8920,1332],{"class":1304},[1086,8922,8923,8925,8927,8929,8931],{"class":1088,"line":2360},[1086,8924,6127],{"class":1310},[1086,8926,1301],{"class":1304},[1086,8928,6132],{"class":1942},[1086,8930,1882],{"class":1304},[1086,8932,1380],{"class":1304},[1086,8934,8935],{"class":1088,"line":2376},[1086,8936,6142],{"class":1470},[1086,8938,8939,8941,8943,8945,8947,8949,8951,8953,8955,8957,8959],{"class":1088,"line":2394},[1086,8940,6148],{"class":1290},[1086,8942,1951],{"class":1310},[1086,8944,6132],{"class":1300},[1086,8946,1808],{"class":1304},[1086,8948,6157],{"class":1300},[1086,8950,3348],{"class":1304},[1086,8952,1391],{"class":1304},[1086,8954,4315],{"class":1096},[1086,8956,1329],{"class":1304},[1086,8958,3537],{"class":1310},[1086,8960,1305],{"class":1304},[1086,8962,8963,8965,8967,8969,8971,8973],{"class":1088,"line":2410},[1086,8964,6175],{"class":1109},[1086,8966,1301],{"class":1310},[1086,8968,1329],{"class":1304},[1086,8970,1787],{"class":1096},[1086,8972,1329],{"class":1304},[1086,8974,1491],{"class":1310},[1086,8976,8977],{"class":1088,"line":2418},[1086,8978,1477],{"class":1304},[1086,8980,8981],{"class":1088,"line":3413},[1086,8982,1402],{"class":1304},[1086,8984,8985,8987,8989,8991,8993],{"class":1088,"line":3426},[1086,8986,6201],{"class":1310},[1086,8988,1301],{"class":1304},[1086,8990,6206],{"class":1942},[1086,8992,1882],{"class":1304},[1086,8994,1380],{"class":1304},[1086,8996,8997,8999,9001,9003,9005],{"class":1088,"line":3431},[1086,8998,6216],{"class":1300},[1086,9000,1808],{"class":1304},[1086,9002,6221],{"class":1109},[1086,9004,1301],{"class":1310},[1086,9006,1305],{"class":1304},[1086,9008,9009,9011,9013,9015,9017,9019],{"class":1088,"line":3437},[1086,9010,6231],{"class":1310},[1086,9012,1314],{"class":1304},[1086,9014,1391],{"class":1304},[1086,9016,497],{"class":1096},[1086,9018,1329],{"class":1304},[1086,9020,1332],{"class":1304},[1086,9022,9023,9025,9027,9029,9031,9033],{"class":1088,"line":3468},[1086,9024,6247],{"class":1310},[1086,9026,1314],{"class":1304},[1086,9028,6252],{"class":1300},[1086,9030,1808],{"class":1304},[1086,9032,4467],{"class":1300},[1086,9034,1332],{"class":1304},[1086,9036,9037,9039,9041,9043,9045],{"class":1088,"line":3512},[1086,9038,6264],{"class":1310},[1086,9040,1314],{"class":1304},[1086,9042,1391],{"class":1304},[1086,9044,6206],{"class":1096},[1086,9046,1355],{"class":1304},[1086,9048,9049,9051],{"class":1088,"line":3519},[1086,9050,3375],{"class":1304},[1086,9052,1491],{"class":1310},[1086,9054,9055],{"class":1088,"line":3524},[1086,9056,3584],{"class":1304},[1086,9058,9059,9061],{"class":1088,"line":3542},[1086,9060,1488],{"class":1304},[1086,9062,1491],{"class":1300},[1086,9064,9065],{"class":1088,"line":3581},[1086,9066,1369],{"emptyLinePlaceholder":21},[1086,9068,9069,9071,9073,9075,9077,9079,9081,9083],{"class":1088,"line":3587},[1086,9070,6300],{"class":1587},[1086,9072,6303],{"class":1109},[1086,9074,1301],{"class":1304},[1086,9076,6308],{"class":1942},[1086,9078,1314],{"class":1304},[1086,9080,6313],{"class":1092},[1086,9082,1882],{"class":1304},[1086,9084,1380],{"class":1304},[1086,9086,9087,9089,9091,9093],{"class":1088,"line":3592},[1086,9088,6322],{"class":1300},[1086,9090,1808],{"class":1304},[1086,9092,6327],{"class":1109},[1086,9094,2668],{"class":1310},[1086,9096,9097,9099,9101,9103,9105,9107,9109,9111,9113],{"class":1088,"line":3598},[1086,9098,3527],{"class":1290},[1086,9100,1951],{"class":1310},[1086,9102,5193],{"class":1300},[1086,9104,1808],{"class":1304},[1086,9106,3321],{"class":1300},[1086,9108,1808],{"class":1304},[1086,9110,5202],{"class":1109},[1086,9112,5205],{"class":1310},[1086,9114,1305],{"class":1304},[1086,9116,9117,9119,9121,9123,9125,9127,9129,9131,9133,9135,9137,9139],{"class":1088,"line":3618},[1086,9118,6354],{"class":1300},[1086,9120,1808],{"class":1304},[1086,9122,6359],{"class":1109},[1086,9124,1301],{"class":1310},[1086,9126,1865],{"class":1304},[1086,9128,1719],{"class":1310},[1086,9130,1314],{"class":1304},[1086,9132,5337],{"class":1300},[1086,9134,1808],{"class":1304},[1086,9136,3321],{"class":1300},[1086,9138,1732],{"class":1304},[1086,9140,1491],{"class":1310},[1086,9142,9143,9145,9147,9149,9151],{"class":1088,"line":3646},[1086,9144,6382],{"class":1300},[1086,9146,1808],{"class":1304},[1086,9148,3321],{"class":1300},[1086,9150,2622],{"class":1304},[1086,9152,6391],{"class":1304},[1086,9154,9155],{"class":1088,"line":3662},[1086,9156,3584],{"class":1304},[1086,9158,9159],{"class":1088,"line":3681},[1086,9160,5399],{"class":1304},[1086,9162,9163],{"class":1088,"line":3709},[1086,9164,1369],{"emptyLinePlaceholder":21},[1086,9166,9167],{"class":1088,"line":3716},[1086,9168,6408],{"class":1470},[1086,9170,9171,9173,9175,9177,9179],{"class":1088,"line":3721},[1086,9172,6413],{"class":1109},[1086,9174,1301],{"class":1300},[1086,9176,1805],{"class":1304},[1086,9178,1825],{"class":1587},[1086,9180,1380],{"class":1304},[1086,9182,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207],{"class":1088,"line":3787},[1086,9184,3527],{"class":1290},[1086,9186,1951],{"class":1310},[1086,9188,5930],{"class":1300},[1086,9190,1808],{"class":1304},[1086,9192,3321],{"class":1300},[1086,9194,3842],{"class":1304},[1086,9196,1996],{"class":1300},[1086,9198,1808],{"class":1304},[1086,9200,3821],{"class":1300},[1086,9202,3348],{"class":1304},[1086,9204,3827],{"class":3559},[1086,9206,3537],{"class":1310},[1086,9208,1305],{"class":1304},[1086,9210,9211,9213,9215,9217],{"class":1088,"line":3792},[1086,9212,6354],{"class":1300},[1086,9214,1808],{"class":1304},[1086,9216,6458],{"class":1109},[1086,9218,2668],{"class":1310},[1086,9220,9221],{"class":1088,"line":3797},[1086,9222,3584],{"class":1304},[1086,9224,9225,9227],{"class":1088,"line":3803},[1086,9226,1488],{"class":1304},[1086,9228,1491],{"class":1300},[1086,9230,9231,9233,9235],{"class":1088,"line":3832},[1086,9232,1635],{"class":1304},[1086,9234,5111],{"class":1310},[1086,9236,1565],{"class":1304},[1086,9238,9239],{"class":1088,"line":3873},[1086,9240,1369],{"emptyLinePlaceholder":21},[1086,9242,9243,9245,9247],{"class":1088,"line":3902},[1086,9244,1559],{"class":1304},[1086,9246,1562],{"class":1310},[1086,9248,1565],{"class":1304},[1086,9250,9251,9253,9255,9257,9259,9261,9263,9265],{"class":1088,"line":3914},[1086,9252,1572],{"class":1304},[1086,9254,5426],{"class":1310},[1086,9256,5429],{"class":1587},[1086,9258,1591],{"class":1304},[1086,9260,1518],{"class":1304},[1086,9262,5436],{"class":1096},[1086,9264,1518],{"class":1304},[1086,9266,1565],{"class":1304},[1086,9268,9269,9271,9273,9275,9277],{"class":1088,"line":3930},[1086,9270,1581],{"class":1304},[1086,9272,1562],{"class":1310},[1086,9274,5449],{"class":1304},[1086,9276,8343],{"class":1587},[1086,9278,1565],{"class":1304},[1086,9280,9281,9283,9285],{"class":1088,"line":3944},[1086,9282,1605],{"class":1304},[1086,9284,8353],{"class":1310},[1086,9286,1611],{"class":1304},[1086,9288,9289,9291,9293],{"class":1088,"line":3951},[1086,9290,1616],{"class":1304},[1086,9292,1562],{"class":1310},[1086,9294,1565],{"class":1304},[1086,9296,9297,9299,9301,9303,9305],{"class":1088,"line":3956},[1086,9298,1581],{"class":1304},[1086,9300,1562],{"class":1310},[1086,9302,5449],{"class":1304},[1086,9304,5452],{"class":1587},[1086,9306,1565],{"class":1304},[1086,9308,9310,9312,9314,9316,9318,9320,9322,9324],{"class":9309,"line":3961},[1088,1569],[1086,9311,1605],{"class":1304},[1086,9313,5461],{"class":1310},[1086,9315,5464],{"class":1587},[1086,9317,1591],{"class":1304},[1086,9319,1518],{"class":1304},[1086,9321,6535],{"class":1096},[1086,9323,1518],{"class":1304},[1086,9325,1565],{"class":1304},[1086,9327,9329,9331],{"class":9328,"line":3967},[1088,1569],[1086,9330,5480],{"class":1304},[1086,9332,6546],{"class":1310},[1086,9334,9336,9338,9340,9342,9344],{"class":9335,"line":3984},[1088,1569],[1086,9337,6551],{"class":1587},[1086,9339,1591],{"class":1304},[1086,9341,1518],{"class":1304},[1086,9343,6558],{"class":1096},[1086,9345,5537],{"class":1304},[1086,9347,9348,9350,9352,9354,9356],{"class":1088,"line":4006},[1086,9349,5543],{"class":1587},[1086,9351,1591],{"class":1304},[1086,9353,1518],{"class":1304},[1086,9355,6571],{"class":1096},[1086,9357,5537],{"class":1304},[1086,9359,9360],{"class":1088,"line":4024},[1086,9361,6578],{"class":1587},[1086,9363,9364,9366,9368,9370,9372],{"class":1088,"line":4032},[1086,9365,6583],{"class":1587},[1086,9367,1591],{"class":1304},[1086,9369,1518],{"class":1304},[1086,9371,6590],{"class":1096},[1086,9373,5537],{"class":1304},[1086,9375,9376],{"class":1088,"line":4049},[1086,9377,5603],{"class":1304},[1086,9379,9380,9382,9384,9386,9388,9390,9392,9394,9396,9398,9400],{"class":1088,"line":4070},[1086,9381,5609],{"class":1304},[1086,9383,1562],{"class":1310},[1086,9385,5449],{"class":1304},[1086,9387,371],{"class":1587},[1086,9389,1591],{"class":1304},[1086,9391,1518],{"class":1304},[1086,9393,1865],{"class":1304},[1086,9395,6615],{"class":1300},[1086,9397,1488],{"class":1304},[1086,9399,1518],{"class":1304},[1086,9401,1565],{"class":1304},[1086,9403,9404,9406,9408,9410,9412,9414,9416,9418,9420,9422,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464,9466],{"class":1088,"line":4080},[1086,9405,6626],{"class":1304},[1086,9407,1562],{"class":1310},[1086,9409,6631],{"class":1290},[1086,9411,1591],{"class":1304},[1086,9413,1518],{"class":1304},[1086,9415,6638],{"class":1300},[1086,9417,1716],{"class":1304},[1086,9419,6643],{"class":1300},[1086,9421,6646],{"class":1304},[1086,9423,2617],{"class":1300},[1086,9425,1808],{"class":1304},[1086,9427,2198],{"class":1300},[1086,9429,1518],{"class":1304},[1086,9431,6657],{"class":1304},[1086,9433,6660],{"class":1587},[1086,9435,1591],{"class":1304},[1086,9437,6665],{"class":1304},[1086,9439,4467],{"class":1300},[1086,9441,1808],{"class":1304},[1086,9443,2017],{"class":1300},[1086,9445,1488],{"class":1304},[1086,9447,6676],{"class":1096},[1086,9449,5383],{"class":1304},[1086,9451,6681],{"class":1300},[1086,9453,1808],{"class":1304},[1086,9455,6157],{"class":1300},[1086,9457,1488],{"class":1304},[1086,9459,6676],{"class":1096},[1086,9461,5383],{"class":1304},[1086,9463,6694],{"class":1300},[1086,9465,6697],{"class":1304},[1086,9467,1565],{"class":1304},[1086,9469,9470,9472],{"class":1088,"line":4090},[1086,9471,6704],{"class":1304},[1086,9473,6707],{"class":1310},[1086,9475,9476,9478,9480,9482,9484],{"class":1088,"line":4100},[1086,9477,6712],{"class":1587},[1086,9479,1591],{"class":1304},[1086,9481,1518],{"class":1304},[1086,9483,6719],{"class":1096},[1086,9485,5537],{"class":1304},[1086,9487,9488,9490,9492,9494,9496],{"class":1088,"line":4117},[1086,9489,6726],{"class":1587},[1086,9491,1591],{"class":1304},[1086,9493,1518],{"class":1304},[1086,9495,6733],{"class":1096},[1086,9497,5537],{"class":1304},[1086,9499,9500,9502,9504,9506,9508],{"class":1088,"line":4128},[1086,9501,6740],{"class":1587},[1086,9503,1591],{"class":1304},[1086,9505,1518],{"class":1304},[1086,9507,6747],{"class":1096},[1086,9509,5537],{"class":1304},[1086,9511,9512],{"class":1088,"line":4134},[1086,9513,6754],{"class":1304},[1086,9515,9516,9518],{"class":1088,"line":4140},[1086,9517,6759],{"class":1304},[1086,9519,6762],{"class":1310},[1086,9521,9522,9524,9526,9528,9530],{"class":1088,"line":4150},[1086,9523,6767],{"class":1587},[1086,9525,1591],{"class":1304},[1086,9527,1518],{"class":1304},[1086,9529,6733],{"class":1096},[1086,9531,5537],{"class":1304},[1086,9533,9534,9536,9538,9540,9542],{"class":1088,"line":4160},[1086,9535,6780],{"class":1587},[1086,9537,1591],{"class":1304},[1086,9539,1518],{"class":1304},[1086,9541,6787],{"class":1096},[1086,9543,5537],{"class":1304},[1086,9545,9546,9548,9550,9552,9554],{"class":1088,"line":4173},[1086,9547,6794],{"class":1587},[1086,9549,1591],{"class":1304},[1086,9551,1518],{"class":1304},[1086,9553,6801],{"class":1096},[1086,9555,5537],{"class":1304},[1086,9557,9558],{"class":1088,"line":4188},[1086,9559,6808],{"class":1304},[1086,9561,9562,9564,9566],{"class":1088,"line":4193},[1086,9563,6813],{"class":1304},[1086,9565,6816],{"class":1310},[1086,9567,1565],{"class":1304},[1086,9569,9570],{"class":1088,"line":4198},[1086,9571,1369],{"emptyLinePlaceholder":21},[1086,9573,9574,9576,9578,9580,9582,9584,9586,9588,9590],{"class":1088,"line":4208},[1086,9575,6704],{"class":1304},[1086,9577,1562],{"class":1310},[1086,9579,6831],{"class":1290},[1086,9581,1591],{"class":1304},[1086,9583,1518],{"class":1304},[1086,9585,6838],{"class":1109},[1086,9587,6841],{"class":1300},[1086,9589,1518],{"class":1304},[1086,9591,1565],{"class":1304},[1086,9593,9594,9596],{"class":1088,"line":4224},[1086,9595,6759],{"class":1304},[1086,9597,6762],{"class":1310},[1086,9599,9600,9602,9604,9606,9608],{"class":1088,"line":4239},[1086,9601,6856],{"class":1587},[1086,9603,1591],{"class":1304},[1086,9605,1518],{"class":1304},[1086,9607,6863],{"class":1096},[1086,9609,5537],{"class":1304},[1086,9611,9612,9614,9616,9618,9620],{"class":1088,"line":4245},[1086,9613,6767],{"class":1587},[1086,9615,1591],{"class":1304},[1086,9617,1518],{"class":1304},[1086,9619,6733],{"class":1096},[1086,9621,5537],{"class":1304},[1086,9623,9624,9626,9628,9630,9632],{"class":1088,"line":4251},[1086,9625,6780],{"class":1587},[1086,9627,1591],{"class":1304},[1086,9629,1518],{"class":1304},[1086,9631,6888],{"class":1096},[1086,9633,5537],{"class":1304},[1086,9635,9636,9638,9640,9642,9644],{"class":1088,"line":4259},[1086,9637,6794],{"class":1587},[1086,9639,1591],{"class":1304},[1086,9641,1518],{"class":1304},[1086,9643,6801],{"class":1096},[1086,9645,5537],{"class":1304},[1086,9647,9648],{"class":1088,"line":4264},[1086,9649,6808],{"class":1304},[1086,9651,9652,9654,9656,9658,9660,9662,9664,9666,9668,9670,9672,9674,9676],{"class":1088,"line":4270},[1086,9653,6759],{"class":1304},[1086,9655,976],{"class":1310},[1086,9657,6831],{"class":1587},[1086,9659,1591],{"class":1304},[1086,9661,1518],{"class":1304},[1086,9663,6921],{"class":1096},[1086,9665,1518],{"class":1304},[1086,9667,5464],{"class":1587},[1086,9669,1591],{"class":1304},[1086,9671,1518],{"class":1304},[1086,9673,6932],{"class":1096},[1086,9675,1518],{"class":1304},[1086,9677,1565],{"class":1304},[1086,9679,9680],{"class":1088,"line":4290},[1086,9681,6941],{"class":1300},[1086,9683,9684,9686,9688],{"class":1088,"line":4305},[1086,9685,6946],{"class":1304},[1086,9687,976],{"class":1310},[1086,9689,1565],{"class":1304},[1086,9691,9692,9694,9696],{"class":1088,"line":4322},[1086,9693,6813],{"class":1304},[1086,9695,1562],{"class":1310},[1086,9697,1565],{"class":1304},[1086,9699,9700,9702,9704],{"class":1088,"line":4345},[1086,9701,6963],{"class":1304},[1086,9703,1562],{"class":1310},[1086,9705,1565],{"class":1304},[1086,9707,9708,9710,9712],{"class":1088,"line":4356},[1086,9709,6972],{"class":1304},[1086,9711,1562],{"class":1310},[1086,9713,1565],{"class":1304},[1086,9715,9716,9718,9720],{"class":1088,"line":4364},[1086,9717,5506],{"class":1304},[1086,9719,5082],{"class":1310},[1086,9721,1565],{"class":1304},[1086,9723,9724],{"class":1088,"line":4370},[1086,9725,1369],{"emptyLinePlaceholder":21},[1086,9727,9728,9730],{"class":1088,"line":4375},[1086,9729,5480],{"class":1304},[1086,9731,5522],{"class":1310},[1086,9733,9734,9736,9738,9740,9742],{"class":1088,"line":4398},[1086,9735,5528],{"class":1587},[1086,9737,1591],{"class":1304},[1086,9739,1518],{"class":1304},[1086,9741,5193],{"class":1096},[1086,9743,5537],{"class":1304},[1086,9745,9746,9748,9750,9752,9754],{"class":1088,"line":4404},[1086,9747,7011],{"class":1587},[1086,9749,1591],{"class":1304},[1086,9751,1518],{"class":1304},[1086,9753,7018],{"class":1096},[1086,9755,5537],{"class":1304},[1086,9757,9758,9760,9762,9764,9766],{"class":1088,"line":4424},[1086,9759,5558],{"class":1587},[1086,9761,1591],{"class":1304},[1086,9763,1518],{"class":1304},[1086,9765,5565],{"class":1096},[1086,9767,5537],{"class":1304},[1086,9769,9770,9772,9774,9776,9778],{"class":1088,"line":4430},[1086,9771,6583],{"class":1587},[1086,9773,1591],{"class":1304},[1086,9775,1518],{"class":1304},[1086,9777,7043],{"class":1096},[1086,9779,5537],{"class":1304},[1086,9781,9782,9784,9786,9788,9790],{"class":1088,"line":4476},[1086,9783,5588],{"class":1587},[1086,9785,1591],{"class":1304},[1086,9787,1518],{"class":1304},[1086,9789,7056],{"class":1096},[1086,9791,5537],{"class":1304},[1086,9793,9794],{"class":1088,"line":4492},[1086,9795,5603],{"class":1304},[1086,9797,9798,9800],{"class":1088,"line":4525},[1086,9799,5609],{"class":1304},[1086,9801,7069],{"class":1310},[1086,9803,9804,9806,9808,9810,9812],{"class":1088,"line":4539},[1086,9805,7074],{"class":1587},[1086,9807,1591],{"class":1304},[1086,9809,1518],{"class":1304},[1086,9811,6571],{"class":1096},[1086,9813,5537],{"class":1304},[1086,9815,9816,9818,9820,9822,9824],{"class":1088,"line":4547},[1086,9817,7087],{"class":1587},[1086,9819,1591],{"class":1304},[1086,9821,1518],{"class":1304},[1086,9823,5622],{"class":1096},[1086,9825,5537],{"class":1304},[1086,9827,9828,9830,9832,9834,9836],{"class":1088,"line":4552},[1086,9829,7100],{"class":1587},[1086,9831,1591],{"class":1304},[1086,9833,1518],{"class":1304},[1086,9835,7107],{"class":1096},[1086,9837,5537],{"class":1304},[1086,9839,9840,9842,9844,9846,9848],{"class":1088,"line":4559},[1086,9841,7114],{"class":1587},[1086,9843,1591],{"class":1304},[1086,9845,1518],{"class":1304},[1086,9847,7121],{"class":1096},[1086,9849,5537],{"class":1304},[1086,9851,9852],{"class":1088,"line":4564},[1086,9853,7128],{"class":1304},[1086,9855,9856,9858,9860],{"class":1088,"line":4582},[1086,9857,5506],{"class":1304},[1086,9859,5076],{"class":1310},[1086,9861,1565],{"class":1304},[1086,9863,9864,9866,9868],{"class":1088,"line":7163},[1086,9865,5640],{"class":1304},[1086,9867,5461],{"class":1310},[1086,9869,1565],{"class":1304},[1086,9871,9873,9875,9877],{"class":1088,"line":9872},113,[1086,9874,1616],{"class":1304},[1086,9876,1562],{"class":1310},[1086,9878,1565],{"class":1304},[1086,9880,9882,9884,9886],{"class":1088,"line":9881},114,[1086,9883,1626],{"class":1304},[1086,9885,5426],{"class":1310},[1086,9887,1565],{"class":1304},[1086,9889,9891,9893,9895],{"class":1088,"line":9890},115,[1086,9892,1635],{"class":1304},[1086,9894,1562],{"class":1310},[1086,9896,1565],{"class":1304},[976,9898,4625,9899,9902,9903,9905],{},[1036,9900,9901],{},"refreshNuxtData('chats')"," call in the chat page's ",[1036,9904,7231],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[980,9907,9909],{"id":9908},"adding-multi-model-support","Adding multi-model support",[976,9911,9912,9913,9916],{},"One of the benefits of using ",[1030,9914,4594],{"href":1065,"rel":9915},[1034]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1114,9918,9920],{"id":9919},"creating-a-models-composable","Creating a models composable",[976,9922,9923,9924,1314],{},"Define the available models and persist the user's selection using ",[1030,9925,9928],{"href":9926,"rel":9927},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1034],[1036,9929,9930],{},"useCookie",[1277,9932,9933],{},[1077,9934,9937],{"className":1281,"code":9935,"filename":9936,"language":1283,"meta":1082,"style":1082},"export function useModels() {\n  const models = [\n    { label: 'GPT-5 Nano', value: 'openai\u002Fgpt-5-nano', icon: 'i-simple-icons-openai' },\n    { label: 'Claude Haiku 4.5', value: 'anthropic\u002Fclaude-haiku-4.5', icon: 'i-simple-icons-anthropic' },\n    { label: 'Gemini 3 Flash', value: 'google\u002Fgemini-3-flash', icon: 'i-simple-icons-google' }\n  ]\n\n  const model = useCookie\u003Cstring>('ai-model', {\n    default: () => 'anthropic\u002Fclaude-haiku-4.5'\n  })\n\n  return {\n    models,\n    model\n  }\n}\n","app\u002Fcomposables\u002FuseModels.ts",[1036,9938,9939,9952,9963,10009,10053,10097,10102,10106,10136,10153,10159,10163,10169,10176,10181,10185],{"__ignoreMap":1082},[1086,9940,9941,9943,9945,9948,9950],{"class":1088,"line":1089},[1086,9942,1291],{"class":1290},[1086,9944,5175],{"class":1587},[1086,9946,9947],{"class":1109}," useModels",[1086,9949,1805],{"class":1304},[1086,9951,1380],{"class":1304},[1086,9953,9954,9956,9959,9961],{"class":1088,"line":1106},[1086,9955,2612],{"class":1587},[1086,9957,9958],{"class":1300}," models",[1086,9960,2622],{"class":1304},[1086,9962,1317],{"class":1310},[1086,9964,9965,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990,9992,9995,9997,9999,10005,10007],{"class":1088,"line":1320},[1086,9966,9967],{"class":1304},"    {",[1086,9969,3089],{"class":1310},[1086,9971,1314],{"class":1304},[1086,9973,1391],{"class":1304},[1086,9975,3096],{"class":1096},[1086,9977,1329],{"class":1304},[1086,9979,1716],{"class":1304},[1086,9981,3075],{"class":1310},[1086,9983,1314],{"class":1304},[1086,9985,1391],{"class":1304},[1086,9987,3082],{"class":1096},[1086,9989,1329],{"class":1304},[1086,9991,1716],{"class":1304},[1086,9993,9994],{"class":1310}," icon",[1086,9996,1314],{"class":1304},[1086,9998,1391],{"class":1304},[1086,10000,10001,10004],{"class":1096},[7720,10002],{"class":10003},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1086,10006,1329],{"class":1304},[1086,10008,3101],{"class":1304},[1086,10010,10011,10013,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10035,10037,10039,10041,10043,10049,10051],{"class":1088,"line":1335},[1086,10012,9967],{"class":1304},[1086,10014,3089],{"class":1310},[1086,10016,1314],{"class":1304},[1086,10018,1391],{"class":1304},[1086,10020,3127],{"class":1096},[1086,10022,1329],{"class":1304},[1086,10024,1716],{"class":1304},[1086,10026,3075],{"class":1310},[1086,10028,1314],{"class":1304},[1086,10030,1391],{"class":1304},[1086,10032,3114],{"class":1096},[1086,10034,1329],{"class":1304},[1086,10036,1716],{"class":1304},[1086,10038,9994],{"class":1310},[1086,10040,1314],{"class":1304},[1086,10042,1391],{"class":1304},[1086,10044,10045,10048],{"class":1096},[7720,10046],{"class":10047},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1086,10050,1329],{"class":1304},[1086,10052,3101],{"class":1304},[1086,10054,10055,10057,10059,10061,10063,10065,10067,10069,10071,10073,10075,10077,10079,10081,10083,10085,10087,10093,10095],{"class":1088,"line":1347},[1086,10056,9967],{"class":1304},[1086,10058,3089],{"class":1310},[1086,10060,1314],{"class":1304},[1086,10062,1391],{"class":1304},[1086,10064,3157],{"class":1096},[1086,10066,1329],{"class":1304},[1086,10068,1716],{"class":1304},[1086,10070,3075],{"class":1310},[1086,10072,1314],{"class":1304},[1086,10074,1391],{"class":1304},[1086,10076,3144],{"class":1096},[1086,10078,1329],{"class":1304},[1086,10080,1716],{"class":1304},[1086,10082,9994],{"class":1310},[1086,10084,1314],{"class":1304},[1086,10086,1391],{"class":1304},[1086,10088,10089,10092],{"class":1096},[7720,10090],{"class":10091},"shiki-icon-highlight scZL3","i-simple-icons-google",[1086,10094,1329],{"class":1304},[1086,10096,3162],{"class":1304},[1086,10098,10099],{"class":1088,"line":1358},[1086,10100,10101],{"class":1310},"  ]\n",[1086,10103,10104],{"class":1088,"line":1366},[1086,10105,1369],{"emptyLinePlaceholder":21},[1086,10107,10108,10110,10112,10114,10117,10119,10121,10123,10125,10127,10130,10132,10134],{"class":1088,"line":1372},[1086,10109,2612],{"class":1587},[1086,10111,3267],{"class":1300},[1086,10113,2622],{"class":1304},[1086,10115,10116],{"class":1109}," useCookie",[1086,10118,1559],{"class":1304},[1086,10120,3240],{"class":1092},[1086,10122,2665],{"class":1304},[1086,10124,1301],{"class":1310},[1086,10126,1329],{"class":1304},[1086,10128,10129],{"class":1096},"ai-model",[1086,10131,1329],{"class":1304},[1086,10133,1716],{"class":1304},[1086,10135,1380],{"class":1304},[1086,10137,10138,10141,10143,10145,10147,10149,10151],{"class":1088,"line":1383},[1086,10139,10140],{"class":1109},"    default",[1086,10142,1314],{"class":1304},[1086,10144,4961],{"class":1304},[1086,10146,1825],{"class":1587},[1086,10148,1391],{"class":1304},[1086,10150,3114],{"class":1096},[1086,10152,1355],{"class":1304},[1086,10154,10155,10157],{"class":1088,"line":1399},[1086,10156,2413],{"class":1304},[1086,10158,1491],{"class":1310},[1086,10160,10161],{"class":1088,"line":1405},[1086,10162,1369],{"emptyLinePlaceholder":21},[1086,10164,10165,10167],{"class":1088,"line":1410},[1086,10166,2839],{"class":1290},[1086,10168,1380],{"class":1304},[1086,10170,10171,10174],{"class":1088,"line":1433},[1086,10172,10173],{"class":1300},"    models",[1086,10175,1332],{"class":1304},[1086,10177,10178],{"class":1088,"line":1438},[1086,10179,10180],{"class":1300},"    model\n",[1086,10182,10183],{"class":1088,"line":1448},[1086,10184,3584],{"class":1304},[1086,10186,10187],{"class":1088,"line":1458},[1086,10188,5399],{"class":1304},[1114,10190,10192],{"id":10191},"building-the-model-selector","Building the model selector",[976,10194,1642,10195,10200],{},[1030,10196,10197],{"href":734},[1036,10198,10199],{},"USelectMenu"," component that displays the available models:",[1277,10202,10203],{},[1077,10204,10207],{"className":1549,"code":10205,"filename":10206,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nconst model = defineModel\u003Cstring>({ required: true })\n\nconst { models } = useModels()\n\nconst selectedModel = computed(() =>\n  models.find(m => m.value === model.value)\n)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUSelectMenu\n    v-model=\"model\"\n    :items=\"models\"\n    :icon=\"selectedModel?.icon\"\n    variant=\"ghost\"\n    value-key=\"value\"\n  \u002F>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FModelSelect.vue",[1036,10208,10209,10229,10262,10266,10283,10287,10305,10337,10341,10349,10353,10361,10368,10381,10395,10409,10422,10435,10440],{"__ignoreMap":1082},[1086,10210,10211,10213,10215,10217,10219,10221,10223,10225,10227],{"class":1088,"line":1089},[1086,10212,1559],{"class":1304},[1086,10214,5111],{"class":1310},[1086,10216,5114],{"class":1587},[1086,10218,5117],{"class":1587},[1086,10220,1591],{"class":1304},[1086,10222,1518],{"class":1304},[1086,10224,1283],{"class":1096},[1086,10226,1518],{"class":1304},[1086,10228,1565],{"class":1304},[1086,10230,10231,10233,10236,10238,10241,10243,10245,10247,10249,10251,10254,10256,10258,10260],{"class":1088,"line":1106},[1086,10232,3060],{"class":1587},[1086,10234,10235],{"class":1300}," model ",[1086,10237,1591],{"class":1304},[1086,10239,10240],{"class":1109}," defineModel",[1086,10242,1559],{"class":1304},[1086,10244,3240],{"class":1092},[1086,10246,2665],{"class":1304},[1086,10248,1301],{"class":1300},[1086,10250,1865],{"class":1304},[1086,10252,10253],{"class":1310}," required",[1086,10255,1314],{"class":1304},[1086,10257,4168],{"class":1466},[1086,10259,1732],{"class":1304},[1086,10261,1491],{"class":1300},[1086,10263,10264],{"class":1088,"line":1320},[1086,10265,1369],{"emptyLinePlaceholder":21},[1086,10267,10268,10270,10272,10275,10277,10279,10281],{"class":1088,"line":1335},[1086,10269,3060],{"class":1587},[1086,10271,1710],{"class":1304},[1086,10273,10274],{"class":1300}," models ",[1086,10276,1488],{"class":1304},[1086,10278,2622],{"class":1304},[1086,10280,9947],{"class":1109},[1086,10282,2668],{"class":1300},[1086,10284,10285],{"class":1088,"line":1347},[1086,10286,1369],{"emptyLinePlaceholder":21},[1086,10288,10289,10291,10294,10296,10298,10300,10302],{"class":1088,"line":1358},[1086,10290,3060],{"class":1587},[1086,10292,10293],{"class":1300}," selectedModel ",[1086,10295,1591],{"class":1304},[1086,10297,7662],{"class":1109},[1086,10299,1301],{"class":1300},[1086,10301,1805],{"class":1304},[1086,10303,10304],{"class":1587}," =>\n",[1086,10306,10307,10310,10312,10315,10317,10319,10321,10323,10325,10328,10330,10332,10334],{"class":1088,"line":1366},[1086,10308,10309],{"class":1300},"  models",[1086,10311,1808],{"class":1304},[1086,10313,10314],{"class":1109},"find",[1086,10316,1301],{"class":1300},[1086,10318,3336],{"class":1942},[1086,10320,1825],{"class":1587},[1086,10322,3341],{"class":1300},[1086,10324,1808],{"class":1304},[1086,10326,10327],{"class":1300},"value ",[1086,10329,7745],{"class":1304},[1086,10331,3267],{"class":1300},[1086,10333,1808],{"class":1304},[1086,10335,10336],{"class":1300},"value)\n",[1086,10338,10339],{"class":1088,"line":1372},[1086,10340,1491],{"class":1300},[1086,10342,10343,10345,10347],{"class":1088,"line":1383},[1086,10344,1635],{"class":1304},[1086,10346,5111],{"class":1310},[1086,10348,1565],{"class":1304},[1086,10350,10351],{"class":1088,"line":1399},[1086,10352,1369],{"emptyLinePlaceholder":21},[1086,10354,10355,10357,10359],{"class":1088,"line":1405},[1086,10356,1559],{"class":1304},[1086,10358,1562],{"class":1310},[1086,10360,1565],{"class":1304},[1086,10362,10363,10365],{"class":1088,"line":1410},[1086,10364,1572],{"class":1304},[1086,10366,10367],{"class":1310},"USelectMenu\n",[1086,10369,10370,10373,10375,10377,10379],{"class":1088,"line":1433},[1086,10371,10372],{"class":1587},"    v-model",[1086,10374,1591],{"class":1304},[1086,10376,1518],{"class":1304},[1086,10378,4638],{"class":1096},[1086,10380,5537],{"class":1304},[1086,10382,10383,10386,10388,10390,10393],{"class":1088,"line":1438},[1086,10384,10385],{"class":1587},"    :items",[1086,10387,1591],{"class":1304},[1086,10389,1518],{"class":1304},[1086,10391,10392],{"class":1096},"models",[1086,10394,5537],{"class":1304},[1086,10396,10397,10400,10402,10404,10407],{"class":1088,"line":1448},[1086,10398,10399],{"class":1587},"    :icon",[1086,10401,1591],{"class":1304},[1086,10403,1518],{"class":1304},[1086,10405,10406],{"class":1096},"selectedModel?.icon",[1086,10408,5537],{"class":1304},[1086,10410,10411,10414,10416,10418,10420],{"class":1088,"line":1458},[1086,10412,10413],{"class":1587},"    variant",[1086,10415,1591],{"class":1304},[1086,10417,1518],{"class":1304},[1086,10419,7950],{"class":1096},[1086,10421,5537],{"class":1304},[1086,10423,10424,10427,10429,10431,10433],{"class":1088,"line":1474},[1086,10425,10426],{"class":1587},"    value-key",[1086,10428,1591],{"class":1304},[1086,10430,1518],{"class":1304},[1086,10432,3321],{"class":1096},[1086,10434,5537],{"class":1304},[1086,10436,10437],{"class":1088,"line":1480},[1086,10438,10439],{"class":1304},"  \u002F>\n",[1086,10441,10442,10444,10446],{"class":1088,"line":1485},[1086,10443,1635],{"class":1304},[1086,10445,1562],{"class":1310},[1086,10447,1565],{"class":1304},[1114,10449,10451],{"id":10450},"integrating-with-the-chat","Integrating with the chat",[976,10453,10454],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1277,10456,10457],{},[1695,10458,10459],{},[1077,10460,10463],{"className":1549,"code":10461,"filename":5730,"highlights":10462,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\nconst { model } = useModels()\n\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`,\n    body: {\n      model: model.value \u002F\u002F Pass the selected model\n    }\n  }),\n  onData(dataPart) {\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003Ctemplate #footer>\n            \u003CModelSelect v-model=\"model\" \u002F>\n          \u003C\u002Ftemplate>\n\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1372,2328,2360,2376,4345,4356,4364],[1036,10464,10465,10485,10511,10529,10547,10551,10563,10575,10592,10596,10638,10642,10658,10698,10702,10706,10722,10726,10742,10760,10778,10792,10818,10826,10842,10847,10856,10868,10892,10906,10910,10914,10926,10938,10952,10966,10978,10984,10988,10994,10998,11016,11026,11046,11072,11084,11088,11092,11096,11108,11136,11146,11150,11156,11164,11168,11176,11194,11206,11214,11222,11234,11252,11258,11270,11282,11286,11298,11302,11326,11392,11398,11410,11422,11434,11438,11444,11456,11468,11480,11484,11492,11496,11516,11522,11534,11546,11558,11570,11574,11602,11606,11614,11622,11631,11640,11649,11653,11659,11671,11683,11695,11707,11719,11723,11736,11756,11764,11768,11774,11786,11798,11810,11822,11826,11834,11843,11852,11861],{"__ignoreMap":1082},[1086,10466,10467,10469,10471,10473,10475,10477,10479,10481,10483],{"class":1088,"line":1089},[1086,10468,1559],{"class":1304},[1086,10470,5111],{"class":1310},[1086,10472,5114],{"class":1587},[1086,10474,5117],{"class":1587},[1086,10476,1591],{"class":1304},[1086,10478,1518],{"class":1304},[1086,10480,1283],{"class":1096},[1086,10482,1518],{"class":1304},[1086,10484,1565],{"class":1304},[1086,10486,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505,10507,10509],{"class":1088,"line":1106},[1086,10488,1707],{"class":1290},[1086,10490,1710],{"class":1304},[1086,10492,5763],{"class":1300},[1086,10494,1716],{"class":1304},[1086,10496,5768],{"class":1300},[1086,10498,1716],{"class":1304},[1086,10500,5773],{"class":1300},[1086,10502,1732],{"class":1304},[1086,10504,1735],{"class":1290},[1086,10506,1391],{"class":1304},[1086,10508,2533],{"class":1096},[1086,10510,1355],{"class":1304},[1086,10512,10513,10515,10517,10519,10521,10523,10525,10527],{"class":1088,"line":1320},[1086,10514,1707],{"class":1290},[1086,10516,1710],{"class":1304},[1086,10518,5793],{"class":1300},[1086,10520,1732],{"class":1304},[1086,10522,1735],{"class":1290},[1086,10524,1391],{"class":1304},[1086,10526,5802],{"class":1096},[1086,10528,1355],{"class":1304},[1086,10530,10531,10533,10535,10537,10539,10541,10543,10545],{"class":1088,"line":1335},[1086,10532,1707],{"class":1290},[1086,10534,1710],{"class":1304},[1086,10536,5814],{"class":1300},[1086,10538,1732],{"class":1304},[1086,10540,1735],{"class":1290},[1086,10542,1391],{"class":1304},[1086,10544,5823],{"class":1096},[1086,10546,1355],{"class":1304},[1086,10548,10549],{"class":1088,"line":1347},[1086,10550,1369],{"emptyLinePlaceholder":21},[1086,10552,10553,10555,10557,10559,10561],{"class":1088,"line":1358},[1086,10554,3060],{"class":1587},[1086,10556,5836],{"class":1300},[1086,10558,1591],{"class":1304},[1086,10560,5841],{"class":1109},[1086,10562,2668],{"class":1300},[1086,10564,10565,10567,10569,10571,10573],{"class":1088,"line":1366},[1086,10566,3060],{"class":1587},[1086,10568,5850],{"class":1300},[1086,10570,1591],{"class":1304},[1086,10572,5855],{"class":1109},[1086,10574,2668],{"class":1300},[1086,10576,10578,10580,10582,10584,10586,10588,10590],{"class":10577,"line":1372},[1088,1569],[1086,10579,3060],{"class":1587},[1086,10581,1710],{"class":1304},[1086,10583,10235],{"class":1300},[1086,10585,1488],{"class":1304},[1086,10587,2622],{"class":1304},[1086,10589,9947],{"class":1109},[1086,10591,2668],{"class":1300},[1086,10593,10594],{"class":1088,"line":1383},[1086,10595,1369],{"emptyLinePlaceholder":21},[1086,10597,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620,10622,10624,10626,10628,10630,10632,10634,10636],{"class":1088,"line":1399},[1086,10599,3060],{"class":1587},[1086,10601,1710],{"class":1304},[1086,10603,5875],{"class":1310},[1086,10605,1314],{"class":1304},[1086,10607,5880],{"class":1300},[1086,10609,1488],{"class":1304},[1086,10611,2622],{"class":1304},[1086,10613,2625],{"class":1290},[1086,10615,5889],{"class":1109},[1086,10617,1301],{"class":1300},[1086,10619,3676],{"class":1304},[1086,10621,5896],{"class":1096},[1086,10623,5383],{"class":1304},[1086,10625,5901],{"class":1300},[1086,10627,1808],{"class":1304},[1086,10629,5906],{"class":1300},[1086,10631,1808],{"class":1304},[1086,10633,2017],{"class":1300},[1086,10635,5392],{"class":1304},[1086,10637,1491],{"class":1300},[1086,10639,10640],{"class":1088,"line":1405},[1086,10641,1369],{"emptyLinePlaceholder":21},[1086,10643,10644,10646,10648,10650,10652,10654,10656],{"class":1088,"line":1410},[1086,10645,5923],{"class":1290},[1086,10647,1951],{"class":1300},[1086,10649,3532],{"class":1304},[1086,10651,5930],{"class":1300},[1086,10653,1808],{"class":1304},[1086,10655,5935],{"class":1300},[1086,10657,1305],{"class":1304},[1086,10659,10660,10662,10664,10666,10668,10670,10672,10674,10676,10678,10680,10682,10684,10686,10688,10690,10692,10694,10696],{"class":1088,"line":1433},[1086,10661,5942],{"class":1290},[1086,10663,2898],{"class":1109},[1086,10665,1301],{"class":1310},[1086,10667,1865],{"class":1304},[1086,10669,3554],{"class":1310},[1086,10671,1314],{"class":1304},[1086,10673,3560],{"class":3559},[1086,10675,1716],{"class":1304},[1086,10677,3565],{"class":1310},[1086,10679,1314],{"class":1304},[1086,10681,1391],{"class":1304},[1086,10683,3572],{"class":1096},[1086,10685,1329],{"class":1304},[1086,10687,1716],{"class":1304},[1086,10689,5971],{"class":1310},[1086,10691,1314],{"class":1304},[1086,10693,4168],{"class":1466},[1086,10695,1732],{"class":1304},[1086,10697,1491],{"class":1310},[1086,10699,10700],{"class":1088,"line":1438},[1086,10701,5399],{"class":1304},[1086,10703,10704],{"class":1088,"line":1448},[1086,10705,1369],{"emptyLinePlaceholder":21},[1086,10707,10708,10710,10712,10714,10716,10718,10720],{"class":1088,"line":1458},[1086,10709,3060],{"class":1587},[1086,10711,5134],{"class":1300},[1086,10713,1591],{"class":1304},[1086,10715,5139],{"class":1109},[1086,10717,1301],{"class":1300},[1086,10719,5144],{"class":1304},[1086,10721,1491],{"class":1300},[1086,10723,10724],{"class":1088,"line":1474},[1086,10725,1369],{"emptyLinePlaceholder":21},[1086,10727,10728,10730,10732,10734,10736,10738,10740],{"class":1088,"line":1480},[1086,10729,3060],{"class":1587},[1086,10731,6020],{"class":1300},[1086,10733,1591],{"class":1304},[1086,10735,1902],{"class":1304},[1086,10737,5793],{"class":1109},[1086,10739,1301],{"class":1300},[1086,10741,1305],{"class":1304},[1086,10743,10744,10746,10748,10750,10752,10754,10756,10758],{"class":1088,"line":1485},[1086,10745,1798],{"class":1310},[1086,10747,1314],{"class":1304},[1086,10749,6040],{"class":1300},[1086,10751,1808],{"class":1304},[1086,10753,3321],{"class":1300},[1086,10755,1808],{"class":1304},[1086,10757,2017],{"class":1300},[1086,10759,1332],{"class":1304},[1086,10761,10762,10764,10766,10768,10770,10772,10774,10776],{"class":1088,"line":2274},[1086,10763,1958],{"class":1310},[1086,10765,1314],{"class":1304},[1086,10767,6040],{"class":1300},[1086,10769,1808],{"class":1304},[1086,10771,3321],{"class":1300},[1086,10773,1808],{"class":1304},[1086,10775,1996],{"class":1300},[1086,10777,1332],{"class":1304},[1086,10779,10780,10782,10784,10786,10788,10790],{"class":1088,"line":2287},[1086,10781,6075],{"class":1310},[1086,10783,1314],{"class":1304},[1086,10785,1902],{"class":1304},[1086,10787,5763],{"class":1109},[1086,10789,1301],{"class":1300},[1086,10791,1305],{"class":1304},[1086,10793,10794,10796,10798,10800,10802,10804,10806,10808,10810,10812,10814,10816],{"class":1088,"line":2317},[1086,10795,6091],{"class":1310},[1086,10797,1314],{"class":1304},[1086,10799,3670],{"class":1304},[1086,10801,5896],{"class":1096},[1086,10803,5383],{"class":1304},[1086,10805,5930],{"class":1300},[1086,10807,1808],{"class":1304},[1086,10809,3321],{"class":1300},[1086,10811,1808],{"class":1304},[1086,10813,2017],{"class":1300},[1086,10815,5392],{"class":1304},[1086,10817,1332],{"class":1304},[1086,10819,10820,10822,10824],{"class":1088,"line":2323},[1086,10821,5281],{"class":1310},[1086,10823,1314],{"class":1304},[1086,10825,1380],{"class":1304},[1086,10827,10829,10831,10833,10835,10837,10839],{"class":10828,"line":2328},[1088,1569],[1086,10830,3649],{"class":1310},[1086,10832,1314],{"class":1304},[1086,10834,3267],{"class":1300},[1086,10836,1808],{"class":1304},[1086,10838,10327],{"class":1300},[1086,10840,10841],{"class":1470},"\u002F\u002F Pass the selected model\n",[1086,10843,10845],{"class":10844,"line":2360},[1088,1569],[1086,10846,1477],{"class":1304},[1086,10848,10850,10852,10854],{"class":10849,"line":2376},[1088,1569],[1086,10851,2413],{"class":1304},[1086,10853,1882],{"class":1300},[1086,10855,1332],{"class":1304},[1086,10857,10858,10860,10862,10864,10866],{"class":1088,"line":2394},[1086,10859,6127],{"class":1310},[1086,10861,1301],{"class":1304},[1086,10863,6132],{"class":1942},[1086,10865,1882],{"class":1304},[1086,10867,1380],{"class":1304},[1086,10869,10870,10872,10874,10876,10878,10880,10882,10884,10886,10888,10890],{"class":1088,"line":2410},[1086,10871,6148],{"class":1290},[1086,10873,1951],{"class":1310},[1086,10875,6132],{"class":1300},[1086,10877,1808],{"class":1304},[1086,10879,6157],{"class":1300},[1086,10881,3348],{"class":1304},[1086,10883,1391],{"class":1304},[1086,10885,4315],{"class":1096},[1086,10887,1329],{"class":1304},[1086,10889,3537],{"class":1310},[1086,10891,1305],{"class":1304},[1086,10893,10894,10896,10898,10900,10902,10904],{"class":1088,"line":2418},[1086,10895,6175],{"class":1109},[1086,10897,1301],{"class":1310},[1086,10899,1329],{"class":1304},[1086,10901,1787],{"class":1096},[1086,10903,1329],{"class":1304},[1086,10905,1491],{"class":1310},[1086,10907,10908],{"class":1088,"line":3413},[1086,10909,1477],{"class":1304},[1086,10911,10912],{"class":1088,"line":3426},[1086,10913,1402],{"class":1304},[1086,10915,10916,10918,10920,10922,10924],{"class":1088,"line":3431},[1086,10917,6201],{"class":1310},[1086,10919,1301],{"class":1304},[1086,10921,6206],{"class":1942},[1086,10923,1882],{"class":1304},[1086,10925,1380],{"class":1304},[1086,10927,10928,10930,10932,10934,10936],{"class":1088,"line":3437},[1086,10929,6216],{"class":1300},[1086,10931,1808],{"class":1304},[1086,10933,6221],{"class":1109},[1086,10935,1301],{"class":1310},[1086,10937,1305],{"class":1304},[1086,10939,10940,10942,10944,10946,10948,10950],{"class":1088,"line":3468},[1086,10941,6231],{"class":1310},[1086,10943,1314],{"class":1304},[1086,10945,1391],{"class":1304},[1086,10947,497],{"class":1096},[1086,10949,1329],{"class":1304},[1086,10951,1332],{"class":1304},[1086,10953,10954,10956,10958,10960,10962,10964],{"class":1088,"line":3512},[1086,10955,6247],{"class":1310},[1086,10957,1314],{"class":1304},[1086,10959,6252],{"class":1300},[1086,10961,1808],{"class":1304},[1086,10963,4467],{"class":1300},[1086,10965,1332],{"class":1304},[1086,10967,10968,10970,10972,10974,10976],{"class":1088,"line":3519},[1086,10969,6264],{"class":1310},[1086,10971,1314],{"class":1304},[1086,10973,1391],{"class":1304},[1086,10975,6206],{"class":1096},[1086,10977,1355],{"class":1304},[1086,10979,10980,10982],{"class":1088,"line":3524},[1086,10981,3375],{"class":1304},[1086,10983,1491],{"class":1310},[1086,10985,10986],{"class":1088,"line":3542},[1086,10987,3584],{"class":1304},[1086,10989,10990,10992],{"class":1088,"line":3581},[1086,10991,1488],{"class":1304},[1086,10993,1491],{"class":1300},[1086,10995,10996],{"class":1088,"line":3587},[1086,10997,1369],{"emptyLinePlaceholder":21},[1086,10999,11000,11002,11004,11006,11008,11010,11012,11014],{"class":1088,"line":3592},[1086,11001,6300],{"class":1587},[1086,11003,6303],{"class":1109},[1086,11005,1301],{"class":1304},[1086,11007,6308],{"class":1942},[1086,11009,1314],{"class":1304},[1086,11011,6313],{"class":1092},[1086,11013,1882],{"class":1304},[1086,11015,1380],{"class":1304},[1086,11017,11018,11020,11022,11024],{"class":1088,"line":3598},[1086,11019,6322],{"class":1300},[1086,11021,1808],{"class":1304},[1086,11023,6327],{"class":1109},[1086,11025,2668],{"class":1310},[1086,11027,11028,11030,11032,11034,11036,11038,11040,11042,11044],{"class":1088,"line":3618},[1086,11029,3527],{"class":1290},[1086,11031,1951],{"class":1310},[1086,11033,5193],{"class":1300},[1086,11035,1808],{"class":1304},[1086,11037,3321],{"class":1300},[1086,11039,1808],{"class":1304},[1086,11041,5202],{"class":1109},[1086,11043,5205],{"class":1310},[1086,11045,1305],{"class":1304},[1086,11047,11048,11050,11052,11054,11056,11058,11060,11062,11064,11066,11068,11070],{"class":1088,"line":3646},[1086,11049,6354],{"class":1300},[1086,11051,1808],{"class":1304},[1086,11053,6359],{"class":1109},[1086,11055,1301],{"class":1310},[1086,11057,1865],{"class":1304},[1086,11059,1719],{"class":1310},[1086,11061,1314],{"class":1304},[1086,11063,5337],{"class":1300},[1086,11065,1808],{"class":1304},[1086,11067,3321],{"class":1300},[1086,11069,1732],{"class":1304},[1086,11071,1491],{"class":1310},[1086,11073,11074,11076,11078,11080,11082],{"class":1088,"line":3662},[1086,11075,6382],{"class":1300},[1086,11077,1808],{"class":1304},[1086,11079,3321],{"class":1300},[1086,11081,2622],{"class":1304},[1086,11083,6391],{"class":1304},[1086,11085,11086],{"class":1088,"line":3681},[1086,11087,3584],{"class":1304},[1086,11089,11090],{"class":1088,"line":3709},[1086,11091,5399],{"class":1304},[1086,11093,11094],{"class":1088,"line":3716},[1086,11095,1369],{"emptyLinePlaceholder":21},[1086,11097,11098,11100,11102,11104,11106],{"class":1088,"line":3721},[1086,11099,6413],{"class":1109},[1086,11101,1301],{"class":1300},[1086,11103,1805],{"class":1304},[1086,11105,1825],{"class":1587},[1086,11107,1380],{"class":1304},[1086,11109,11110,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130,11132,11134],{"class":1088,"line":3787},[1086,11111,3527],{"class":1290},[1086,11113,1951],{"class":1310},[1086,11115,5930],{"class":1300},[1086,11117,1808],{"class":1304},[1086,11119,3321],{"class":1300},[1086,11121,3842],{"class":1304},[1086,11123,1996],{"class":1300},[1086,11125,1808],{"class":1304},[1086,11127,3821],{"class":1300},[1086,11129,3348],{"class":1304},[1086,11131,3827],{"class":3559},[1086,11133,3537],{"class":1310},[1086,11135,1305],{"class":1304},[1086,11137,11138,11140,11142,11144],{"class":1088,"line":3792},[1086,11139,6354],{"class":1300},[1086,11141,1808],{"class":1304},[1086,11143,6458],{"class":1109},[1086,11145,2668],{"class":1310},[1086,11147,11148],{"class":1088,"line":3797},[1086,11149,3584],{"class":1304},[1086,11151,11152,11154],{"class":1088,"line":3803},[1086,11153,1488],{"class":1304},[1086,11155,1491],{"class":1300},[1086,11157,11158,11160,11162],{"class":1088,"line":3832},[1086,11159,1635],{"class":1304},[1086,11161,5111],{"class":1310},[1086,11163,1565],{"class":1304},[1086,11165,11166],{"class":1088,"line":3873},[1086,11167,1369],{"emptyLinePlaceholder":21},[1086,11169,11170,11172,11174],{"class":1088,"line":3902},[1086,11171,1559],{"class":1304},[1086,11173,1562],{"class":1310},[1086,11175,1565],{"class":1304},[1086,11177,11178,11180,11182,11184,11186,11188,11190,11192],{"class":1088,"line":3914},[1086,11179,1572],{"class":1304},[1086,11181,5426],{"class":1310},[1086,11183,5429],{"class":1587},[1086,11185,1591],{"class":1304},[1086,11187,1518],{"class":1304},[1086,11189,5436],{"class":1096},[1086,11191,1518],{"class":1304},[1086,11193,1565],{"class":1304},[1086,11195,11196,11198,11200,11202,11204],{"class":1088,"line":3930},[1086,11197,1581],{"class":1304},[1086,11199,1562],{"class":1310},[1086,11201,5449],{"class":1304},[1086,11203,8343],{"class":1587},[1086,11205,1565],{"class":1304},[1086,11207,11208,11210,11212],{"class":1088,"line":3944},[1086,11209,1605],{"class":1304},[1086,11211,8353],{"class":1310},[1086,11213,1611],{"class":1304},[1086,11215,11216,11218,11220],{"class":1088,"line":3951},[1086,11217,1616],{"class":1304},[1086,11219,1562],{"class":1310},[1086,11221,1565],{"class":1304},[1086,11223,11224,11226,11228,11230,11232],{"class":1088,"line":3956},[1086,11225,1581],{"class":1304},[1086,11227,1562],{"class":1310},[1086,11229,5449],{"class":1304},[1086,11231,5452],{"class":1587},[1086,11233,1565],{"class":1304},[1086,11235,11236,11238,11240,11242,11244,11246,11248,11250],{"class":1088,"line":3961},[1086,11237,1605],{"class":1304},[1086,11239,5461],{"class":1310},[1086,11241,5464],{"class":1587},[1086,11243,1591],{"class":1304},[1086,11245,1518],{"class":1304},[1086,11247,6535],{"class":1096},[1086,11249,1518],{"class":1304},[1086,11251,1565],{"class":1304},[1086,11253,11254,11256],{"class":1088,"line":3967},[1086,11255,5480],{"class":1304},[1086,11257,6546],{"class":1310},[1086,11259,11260,11262,11264,11266,11268],{"class":1088,"line":3984},[1086,11261,6551],{"class":1587},[1086,11263,1591],{"class":1304},[1086,11265,1518],{"class":1304},[1086,11267,6558],{"class":1096},[1086,11269,5537],{"class":1304},[1086,11271,11272,11274,11276,11278,11280],{"class":1088,"line":4006},[1086,11273,5543],{"class":1587},[1086,11275,1591],{"class":1304},[1086,11277,1518],{"class":1304},[1086,11279,6571],{"class":1096},[1086,11281,5537],{"class":1304},[1086,11283,11284],{"class":1088,"line":4024},[1086,11285,6578],{"class":1587},[1086,11287,11288,11290,11292,11294,11296],{"class":1088,"line":4032},[1086,11289,6583],{"class":1587},[1086,11291,1591],{"class":1304},[1086,11293,1518],{"class":1304},[1086,11295,6590],{"class":1096},[1086,11297,5537],{"class":1304},[1086,11299,11300],{"class":1088,"line":4049},[1086,11301,5603],{"class":1304},[1086,11303,11304,11306,11308,11310,11312,11314,11316,11318,11320,11322,11324],{"class":1088,"line":4070},[1086,11305,5609],{"class":1304},[1086,11307,1562],{"class":1310},[1086,11309,5449],{"class":1304},[1086,11311,371],{"class":1587},[1086,11313,1591],{"class":1304},[1086,11315,1518],{"class":1304},[1086,11317,1865],{"class":1304},[1086,11319,6615],{"class":1300},[1086,11321,1488],{"class":1304},[1086,11323,1518],{"class":1304},[1086,11325,1565],{"class":1304},[1086,11327,11328,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362,11364,11366,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388,11390],{"class":1088,"line":4080},[1086,11329,6626],{"class":1304},[1086,11331,1562],{"class":1310},[1086,11333,6631],{"class":1290},[1086,11335,1591],{"class":1304},[1086,11337,1518],{"class":1304},[1086,11339,6638],{"class":1300},[1086,11341,1716],{"class":1304},[1086,11343,6643],{"class":1300},[1086,11345,6646],{"class":1304},[1086,11347,2617],{"class":1300},[1086,11349,1808],{"class":1304},[1086,11351,2198],{"class":1300},[1086,11353,1518],{"class":1304},[1086,11355,6657],{"class":1304},[1086,11357,6660],{"class":1587},[1086,11359,1591],{"class":1304},[1086,11361,6665],{"class":1304},[1086,11363,4467],{"class":1300},[1086,11365,1808],{"class":1304},[1086,11367,2017],{"class":1300},[1086,11369,1488],{"class":1304},[1086,11371,6676],{"class":1096},[1086,11373,5383],{"class":1304},[1086,11375,6681],{"class":1300},[1086,11377,1808],{"class":1304},[1086,11379,6157],{"class":1300},[1086,11381,1488],{"class":1304},[1086,11383,6676],{"class":1096},[1086,11385,5383],{"class":1304},[1086,11387,6694],{"class":1300},[1086,11389,6697],{"class":1304},[1086,11391,1565],{"class":1304},[1086,11393,11394,11396],{"class":1088,"line":4090},[1086,11395,6704],{"class":1304},[1086,11397,6707],{"class":1310},[1086,11399,11400,11402,11404,11406,11408],{"class":1088,"line":4100},[1086,11401,6712],{"class":1587},[1086,11403,1591],{"class":1304},[1086,11405,1518],{"class":1304},[1086,11407,6719],{"class":1096},[1086,11409,5537],{"class":1304},[1086,11411,11412,11414,11416,11418,11420],{"class":1088,"line":4117},[1086,11413,6726],{"class":1587},[1086,11415,1591],{"class":1304},[1086,11417,1518],{"class":1304},[1086,11419,6733],{"class":1096},[1086,11421,5537],{"class":1304},[1086,11423,11424,11426,11428,11430,11432],{"class":1088,"line":4128},[1086,11425,6740],{"class":1587},[1086,11427,1591],{"class":1304},[1086,11429,1518],{"class":1304},[1086,11431,6747],{"class":1096},[1086,11433,5537],{"class":1304},[1086,11435,11436],{"class":1088,"line":4134},[1086,11437,6754],{"class":1304},[1086,11439,11440,11442],{"class":1088,"line":4140},[1086,11441,6759],{"class":1304},[1086,11443,6762],{"class":1310},[1086,11445,11446,11448,11450,11452,11454],{"class":1088,"line":4150},[1086,11447,6767],{"class":1587},[1086,11449,1591],{"class":1304},[1086,11451,1518],{"class":1304},[1086,11453,6733],{"class":1096},[1086,11455,5537],{"class":1304},[1086,11457,11458,11460,11462,11464,11466],{"class":1088,"line":4160},[1086,11459,6780],{"class":1587},[1086,11461,1591],{"class":1304},[1086,11463,1518],{"class":1304},[1086,11465,6787],{"class":1096},[1086,11467,5537],{"class":1304},[1086,11469,11470,11472,11474,11476,11478],{"class":1088,"line":4173},[1086,11471,6794],{"class":1587},[1086,11473,1591],{"class":1304},[1086,11475,1518],{"class":1304},[1086,11477,6801],{"class":1096},[1086,11479,5537],{"class":1304},[1086,11481,11482],{"class":1088,"line":4188},[1086,11483,6808],{"class":1304},[1086,11485,11486,11488,11490],{"class":1088,"line":4193},[1086,11487,6813],{"class":1304},[1086,11489,6816],{"class":1310},[1086,11491,1565],{"class":1304},[1086,11493,11494],{"class":1088,"line":4198},[1086,11495,1369],{"emptyLinePlaceholder":21},[1086,11497,11498,11500,11502,11504,11506,11508,11510,11512,11514],{"class":1088,"line":4208},[1086,11499,6704],{"class":1304},[1086,11501,1562],{"class":1310},[1086,11503,6831],{"class":1290},[1086,11505,1591],{"class":1304},[1086,11507,1518],{"class":1304},[1086,11509,6838],{"class":1109},[1086,11511,6841],{"class":1300},[1086,11513,1518],{"class":1304},[1086,11515,1565],{"class":1304},[1086,11517,11518,11520],{"class":1088,"line":4224},[1086,11519,6759],{"class":1304},[1086,11521,6762],{"class":1310},[1086,11523,11524,11526,11528,11530,11532],{"class":1088,"line":4239},[1086,11525,6856],{"class":1587},[1086,11527,1591],{"class":1304},[1086,11529,1518],{"class":1304},[1086,11531,6863],{"class":1096},[1086,11533,5537],{"class":1304},[1086,11535,11536,11538,11540,11542,11544],{"class":1088,"line":4245},[1086,11537,6767],{"class":1587},[1086,11539,1591],{"class":1304},[1086,11541,1518],{"class":1304},[1086,11543,6733],{"class":1096},[1086,11545,5537],{"class":1304},[1086,11547,11548,11550,11552,11554,11556],{"class":1088,"line":4251},[1086,11549,6780],{"class":1587},[1086,11551,1591],{"class":1304},[1086,11553,1518],{"class":1304},[1086,11555,6888],{"class":1096},[1086,11557,5537],{"class":1304},[1086,11559,11560,11562,11564,11566,11568],{"class":1088,"line":4259},[1086,11561,6794],{"class":1587},[1086,11563,1591],{"class":1304},[1086,11565,1518],{"class":1304},[1086,11567,6801],{"class":1096},[1086,11569,5537],{"class":1304},[1086,11571,11572],{"class":1088,"line":4264},[1086,11573,6808],{"class":1304},[1086,11575,11576,11578,11580,11582,11584,11586,11588,11590,11592,11594,11596,11598,11600],{"class":1088,"line":4270},[1086,11577,6759],{"class":1304},[1086,11579,976],{"class":1310},[1086,11581,6831],{"class":1587},[1086,11583,1591],{"class":1304},[1086,11585,1518],{"class":1304},[1086,11587,6921],{"class":1096},[1086,11589,1518],{"class":1304},[1086,11591,5464],{"class":1587},[1086,11593,1591],{"class":1304},[1086,11595,1518],{"class":1304},[1086,11597,6932],{"class":1096},[1086,11599,1518],{"class":1304},[1086,11601,1565],{"class":1304},[1086,11603,11604],{"class":1088,"line":4290},[1086,11605,6941],{"class":1300},[1086,11607,11608,11610,11612],{"class":1088,"line":4305},[1086,11609,6946],{"class":1304},[1086,11611,976],{"class":1310},[1086,11613,1565],{"class":1304},[1086,11615,11616,11618,11620],{"class":1088,"line":4322},[1086,11617,6813],{"class":1304},[1086,11619,1562],{"class":1310},[1086,11621,1565],{"class":1304},[1086,11623,11625,11627,11629],{"class":11624,"line":4345},[1088,1569],[1086,11626,6963],{"class":1304},[1086,11628,1562],{"class":1310},[1086,11630,1565],{"class":1304},[1086,11632,11634,11636,11638],{"class":11633,"line":4356},[1088,1569],[1086,11635,6972],{"class":1304},[1086,11637,1562],{"class":1310},[1086,11639,1565],{"class":1304},[1086,11641,11643,11645,11647],{"class":11642,"line":4364},[1088,1569],[1086,11644,5506],{"class":1304},[1086,11646,5082],{"class":1310},[1086,11648,1565],{"class":1304},[1086,11650,11651],{"class":1088,"line":4370},[1086,11652,1369],{"emptyLinePlaceholder":21},[1086,11654,11655,11657],{"class":1088,"line":4375},[1086,11656,5480],{"class":1304},[1086,11658,5522],{"class":1310},[1086,11660,11661,11663,11665,11667,11669],{"class":1088,"line":4398},[1086,11662,5528],{"class":1587},[1086,11664,1591],{"class":1304},[1086,11666,1518],{"class":1304},[1086,11668,5193],{"class":1096},[1086,11670,5537],{"class":1304},[1086,11672,11673,11675,11677,11679,11681],{"class":1088,"line":4404},[1086,11674,7011],{"class":1587},[1086,11676,1591],{"class":1304},[1086,11678,1518],{"class":1304},[1086,11680,7018],{"class":1096},[1086,11682,5537],{"class":1304},[1086,11684,11685,11687,11689,11691,11693],{"class":1088,"line":4424},[1086,11686,5558],{"class":1587},[1086,11688,1591],{"class":1304},[1086,11690,1518],{"class":1304},[1086,11692,5565],{"class":1096},[1086,11694,5537],{"class":1304},[1086,11696,11697,11699,11701,11703,11705],{"class":1088,"line":4430},[1086,11698,6583],{"class":1587},[1086,11700,1591],{"class":1304},[1086,11702,1518],{"class":1304},[1086,11704,7043],{"class":1096},[1086,11706,5537],{"class":1304},[1086,11708,11709,11711,11713,11715,11717],{"class":1088,"line":4476},[1086,11710,5588],{"class":1587},[1086,11712,1591],{"class":1304},[1086,11714,1518],{"class":1304},[1086,11716,7056],{"class":1096},[1086,11718,5537],{"class":1304},[1086,11720,11721],{"class":1088,"line":4492},[1086,11722,5603],{"class":1304},[1086,11724,11725,11727,11729,11731,11734],{"class":1088,"line":4525},[1086,11726,5609],{"class":1304},[1086,11728,1562],{"class":1310},[1086,11730,5449],{"class":1304},[1086,11732,11733],{"class":1587},"footer",[1086,11735,1565],{"class":1304},[1086,11737,11738,11740,11743,11746,11748,11750,11752,11754],{"class":1088,"line":4539},[1086,11739,6626],{"class":1304},[1086,11741,11742],{"class":1310},"ModelSelect",[1086,11744,11745],{"class":1587}," v-model",[1086,11747,1591],{"class":1304},[1086,11749,1518],{"class":1304},[1086,11751,4638],{"class":1096},[1086,11753,1518],{"class":1304},[1086,11755,1611],{"class":1304},[1086,11757,11758,11760,11762],{"class":1088,"line":4547},[1086,11759,6972],{"class":1304},[1086,11761,1562],{"class":1310},[1086,11763,1565],{"class":1304},[1086,11765,11766],{"class":1088,"line":4552},[1086,11767,1369],{"emptyLinePlaceholder":21},[1086,11769,11770,11772],{"class":1088,"line":4559},[1086,11771,5609],{"class":1304},[1086,11773,7069],{"class":1310},[1086,11775,11776,11778,11780,11782,11784],{"class":1088,"line":4564},[1086,11777,7074],{"class":1587},[1086,11779,1591],{"class":1304},[1086,11781,1518],{"class":1304},[1086,11783,6571],{"class":1096},[1086,11785,5537],{"class":1304},[1086,11787,11788,11790,11792,11794,11796],{"class":1088,"line":4582},[1086,11789,7087],{"class":1587},[1086,11791,1591],{"class":1304},[1086,11793,1518],{"class":1304},[1086,11795,5622],{"class":1096},[1086,11797,5537],{"class":1304},[1086,11799,11800,11802,11804,11806,11808],{"class":1088,"line":7163},[1086,11801,7100],{"class":1587},[1086,11803,1591],{"class":1304},[1086,11805,1518],{"class":1304},[1086,11807,7107],{"class":1096},[1086,11809,5537],{"class":1304},[1086,11811,11812,11814,11816,11818,11820],{"class":1088,"line":9872},[1086,11813,7114],{"class":1587},[1086,11815,1591],{"class":1304},[1086,11817,1518],{"class":1304},[1086,11819,7121],{"class":1096},[1086,11821,5537],{"class":1304},[1086,11823,11824],{"class":1088,"line":9881},[1086,11825,7128],{"class":1304},[1086,11827,11828,11830,11832],{"class":1088,"line":9890},[1086,11829,5506],{"class":1304},[1086,11831,5076],{"class":1310},[1086,11833,1565],{"class":1304},[1086,11835,11837,11839,11841],{"class":1088,"line":11836},116,[1086,11838,5640],{"class":1304},[1086,11840,5461],{"class":1310},[1086,11842,1565],{"class":1304},[1086,11844,11846,11848,11850],{"class":1088,"line":11845},117,[1086,11847,1616],{"class":1304},[1086,11849,1562],{"class":1310},[1086,11851,1565],{"class":1304},[1086,11853,11855,11857,11859],{"class":1088,"line":11854},118,[1086,11856,1626],{"class":1304},[1086,11858,5426],{"class":1310},[1086,11860,1565],{"class":1304},[1086,11862,11864,11866,11868],{"class":1088,"line":11863},119,[1086,11865,1635],{"class":1304},[1086,11867,1562],{"class":1310},[1086,11869,1565],{"class":1304},[980,11871,11873],{"id":11872},"going-further","Going further",[976,11875,11876],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[976,11878,11879],{},[994,11880,11881],{},"User Authentication",[976,11883,11884,11885,11890],{},"Add authentication with ",[1030,11886,11889],{"href":11887,"rel":11888},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1034],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[976,11892,11893],{},[994,11894,11895],{},"AI Tools",[976,11897,11898,11899,11904],{},"Extend your chatbot with ",[1030,11900,11903],{"href":11901,"rel":11902},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1034],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1077,11906,11908],{"className":1281,"code":11907,"language":1283,"meta":1082,"style":1082},"import { tool } from 'ai'\nimport { z } from 'zod'\n\nconst weatherTool = tool({\n  description: 'Get the current weather for a location',\n  parameters: z.object({\n    location: z.string().describe('The city name')\n  }),\n  execute: async ({ location }) => {\n    \u002F\u002F Fetch weather data from an API\n    return { location, temperature: 22, condition: 'Sunny' }\n  }\n})\n",[1036,11909,11910,11929,11947,11951,11966,11982,11999,12030,12038,12058,12063,12098,12102],{"__ignoreMap":1082},[1086,11911,11912,11914,11916,11919,11921,11923,11925,11927],{"class":1088,"line":1089},[1086,11913,1707],{"class":1290},[1086,11915,1710],{"class":1304},[1086,11917,11918],{"class":1300}," tool",[1086,11920,1732],{"class":1304},[1086,11922,1735],{"class":1290},[1086,11924,1391],{"class":1304},[1086,11926,2533],{"class":1096},[1086,11928,1355],{"class":1304},[1086,11930,11931,11933,11935,11937,11939,11941,11943,11945],{"class":1088,"line":1106},[1086,11932,1707],{"class":1290},[1086,11934,1710],{"class":1304},[1086,11936,2568],{"class":1300},[1086,11938,1732],{"class":1304},[1086,11940,1735],{"class":1290},[1086,11942,1391],{"class":1304},[1086,11944,2577],{"class":1096},[1086,11946,1355],{"class":1304},[1086,11948,11949],{"class":1088,"line":1320},[1086,11950,1369],{"emptyLinePlaceholder":21},[1086,11952,11953,11955,11958,11960,11962,11964],{"class":1088,"line":1335},[1086,11954,3060],{"class":1587},[1086,11956,11957],{"class":1300}," weatherTool ",[1086,11959,1591],{"class":1304},[1086,11961,11918],{"class":1109},[1086,11963,1301],{"class":1300},[1086,11965,1305],{"class":1304},[1086,11967,11968,11971,11973,11975,11978,11980],{"class":1088,"line":1347},[1086,11969,11970],{"class":1310},"  description",[1086,11972,1314],{"class":1304},[1086,11974,1391],{"class":1304},[1086,11976,11977],{"class":1096},"Get the current weather for a location",[1086,11979,1329],{"class":1304},[1086,11981,1332],{"class":1304},[1086,11983,11984,11987,11989,11991,11993,11995,11997],{"class":1088,"line":1358},[1086,11985,11986],{"class":1310},"  parameters",[1086,11988,1314],{"class":1304},[1086,11990,2568],{"class":1300},[1086,11992,1808],{"class":1304},[1086,11994,2640],{"class":1109},[1086,11996,1301],{"class":1300},[1086,11998,1305],{"class":1304},[1086,12000,12001,12004,12006,12008,12010,12012,12014,12016,12019,12021,12023,12026,12028],{"class":1088,"line":1366},[1086,12002,12003],{"class":1310},"    location",[1086,12005,1314],{"class":1304},[1086,12007,2568],{"class":1300},[1086,12009,1808],{"class":1304},[1086,12011,3240],{"class":1109},[1086,12013,1805],{"class":1300},[1086,12015,1808],{"class":1304},[1086,12017,12018],{"class":1109},"describe",[1086,12020,1301],{"class":1300},[1086,12022,1329],{"class":1304},[1086,12024,12025],{"class":1096},"The city name",[1086,12027,1329],{"class":1304},[1086,12029,1491],{"class":1300},[1086,12031,12032,12034,12036],{"class":1088,"line":1372},[1086,12033,2413],{"class":1304},[1086,12035,1882],{"class":1300},[1086,12037,1332],{"class":1304},[1086,12039,12040,12043,12045,12047,12049,12052,12054,12056],{"class":1088,"line":1383},[1086,12041,12042],{"class":1109},"  execute",[1086,12044,1314],{"class":1304},[1086,12046,3992],{"class":1587},[1086,12048,1939],{"class":1304},[1086,12050,12051],{"class":1942}," location",[1086,12053,1946],{"class":1304},[1086,12055,1825],{"class":1587},[1086,12057,1380],{"class":1304},[1086,12059,12060],{"class":1088,"line":1399},[1086,12061,12062],{"class":1470},"    \u002F\u002F Fetch weather data from an API\n",[1086,12064,12065,12068,12070,12072,12074,12077,12079,12082,12084,12087,12089,12091,12094,12096],{"class":1088,"line":1405},[1086,12066,12067],{"class":1290},"    return",[1086,12069,1710],{"class":1304},[1086,12071,12051],{"class":1300},[1086,12073,1716],{"class":1304},[1086,12075,12076],{"class":1310}," temperature",[1086,12078,1314],{"class":1304},[1086,12080,12081],{"class":3559}," 22",[1086,12083,1716],{"class":1304},[1086,12085,12086],{"class":1310}," condition",[1086,12088,1314],{"class":1304},[1086,12090,1391],{"class":1304},[1086,12092,12093],{"class":1096},"Sunny",[1086,12095,1329],{"class":1304},[1086,12097,3162],{"class":1304},[1086,12099,12100],{"class":1088,"line":1410},[1086,12101,3584],{"class":1304},[1086,12103,12104,12106],{"class":1088,"line":1433},[1086,12105,1488],{"class":1304},[1086,12107,1491],{"class":1300},[980,12109,12111],{"id":12110},"deploying-to-vercel","Deploying to Vercel",[976,12113,12114],{},"Deploy your chatbot to Vercel with zero configuration:",[1077,12116,12118],{"className":1079,"code":12117,"language":1081,"meta":1082,"style":1082},"npx vercel deploy\n",[1036,12119,12120],{"__ignoreMap":1082},[1086,12121,12122,12124,12127],{"class":1088,"line":1089},[1086,12123,1093],{"class":1092},[1086,12125,12126],{"class":1096}," vercel",[1086,12128,12129],{"class":1096}," deploy\n",[976,12131,12132],{},"Then, in the Vercel dashboard:",[988,12134,12135,12141],{},[991,12136,12137,12138,12140],{},"Enable ",[994,12139,4594],{}," and add credits so requests can be processed.",[991,12142,12143,12144,12147],{},"Add a ",[994,12145,12146],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12149,12150,12151],"blockquote",{},[976,12152,12153,12154,12159,12160,12162],{},"Note: On Vercel, you ",[994,12155,12156,12157],{},"don’t need to manually add ",[1036,12158,1658],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1036,12161,1645],{}," locally for development.",[1665,12164,12166],{"to":1065,"target":12165},"_blank",[976,12167,12168,12169,1808],{},"Learn more about setting up AI Gateway in the ",[994,12170,12171],{},"Vercel AI Gateway documentation",[980,12173,12175],{"id":12174},"conclusion","Conclusion",[976,12177,12178],{},"You've built a complete AI chatbot with:",[988,12180,12181,12187,12193,12198,12203],{},[991,12182,12183,12186],{},[994,12184,12185],{},"A complete chat interface"," using Nuxt UI components",[991,12188,12189,12192],{},[994,12190,12191],{},"Real-time streaming responses"," with the AI SDK",[991,12194,12195,12197],{},[994,12196,1008],{}," with MDC for rich content display",[991,12199,12200,12202],{},[994,12201,1014],{}," via AI Gateway",[991,12204,12205,12208],{},[994,12206,12207],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[976,12210,12211],{},"The combination of Nuxt's full-stack capabilities, Nuxt UI's purpose-built chat components, a local SQLite dev database with a production Turso database, and the AI SDK's streaming infrastructure makes building AI applications straightforward and enjoyable.",[976,12213,12214],{},[994,12215,12216],{},"Resources:",[988,12218,12219,12226,12233,12240,12246,12252],{},[991,12220,12221],{},[1030,12222,12225],{"href":12223,"rel":12224},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1034],"Nuxt UI Chat Components",[991,12227,12228],{},[1030,12229,12232],{"href":12230,"rel":12231},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1034],"NuxtHub Database",[991,12234,12235],{},[1030,12236,12239],{"href":12237,"rel":12238},"https:\u002F\u002Fai-sdk.dev",[1034],"AI SDK Documentation",[991,12241,12242],{},[1030,12243,12245],{"href":1065,"rel":12244},[1034],"AI Gateway Documentation",[991,12247,12248],{},[1030,12249,12251],{"href":1032,"rel":12250},[1034],"Nuxt AI Chat Template",[991,12253,12254],{},[1030,12255,12257],{"href":1042,"rel":12256},[1034],"Vue AI Chat Template",[976,12259,12260],{},"We're excited to see what you'll build!",[12262,12263,12264],"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}html pre.shiki code .sRy2g, html code.shiki .sRy2g{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:plus-square.svg?color=%23000)}html pre.shiki code .sdATh, html code.shiki .sdATh{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:messages-square.svg?color=%23000)}html pre.shiki code .sh9xi, html code.shiki .sh9xi{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:openai.svg?color=%23000)}html pre.shiki code .sNknm, html code.shiki .sNknm{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:anthropic.svg?color=%23000)}html pre.shiki code .scZL3, html code.shiki .scZL3{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:google.svg?color=%23000)}",{"title":1082,"searchDepth":1106,"depth":1106,"links":12266},[12267,12268,12269,12275,12280,12283,12284,12288,12289,12290,12295,12296,12297],{"id":982,"depth":1106,"text":983},{"id":1050,"depth":1106,"text":1051},{"id":1071,"depth":1106,"text":1072,"children":12270},[12271,12272,12273,12274],{"id":1116,"depth":1320,"text":1117},{"id":1267,"depth":1320,"text":1268},{"id":1536,"depth":1320,"text":1537},{"id":1676,"depth":1320,"text":1677},{"id":2456,"depth":1106,"text":2457,"children":12276},[12277,12278,12279],{"id":2468,"depth":1320,"text":2469},{"id":2851,"depth":1320,"text":2852},{"id":4685,"depth":1320,"text":4686},{"id":5067,"depth":1106,"text":5068,"children":12281},[12282],{"id":5086,"depth":1320,"text":5087},{"id":5703,"depth":1106,"text":5704},{"id":7342,"depth":1106,"text":7343,"children":12285},[12286,12287],{"id":7349,"depth":1320,"text":7350},{"id":7509,"depth":1320,"text":7510},{"id":8016,"depth":1106,"text":8017},{"id":8559,"depth":1106,"text":8560},{"id":9908,"depth":1106,"text":9909,"children":12291},[12292,12293,12294],{"id":9919,"depth":1320,"text":9920},{"id":10191,"depth":1320,"text":10192},{"id":10450,"depth":1320,"text":10451},{"id":11872,"depth":1106,"text":11873},{"id":12110,"depth":1106,"text":12111},{"id":12174,"depth":1106,"text":12175},"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":12303},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":960,"description":12299},"blog\u002Fhow-to-build-an-ai-chat","vi5RlZer8_2gpffsJqgpNrU4XHLDEFV94JoDNxDQx8s",1776270255934]