[{"data":1,"prerenderedAt":13046},["ShallowReactive",2],{"$f3e2g6nnllgvga":3,"module":1000,"-blog-how-to-build-an-ai-chat":1009},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,167,840,886,992],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,43,49,72,137,159],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"to":16,"target":16,"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,"to":16,"target":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,"to":16,"target":16,"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,"to":16,"target":16,"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,"path":39,"stem":40,"framework":16,"category":16,"description":41,"to":16,"target":16,"icon":42},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.","i-lucide-arrow-right-left",{"title":44,"path":45,"stem":46,"framework":16,"category":16,"description":47,"to":16,"target":16,"icon":48},"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":50,"path":51,"stem":52,"children":53,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[54,60,66],{"title":55,"path":56,"stem":57,"framework":16,"category":16,"description":58,"to":16,"target":16,"icon":59},"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":61,"path":62,"stem":63,"framework":16,"category":16,"description":64,"to":16,"target":16,"icon":65},"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":67,"path":68,"stem":69,"framework":16,"category":16,"description":70,"to":16,"target":16,"icon":71},"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":73,"framework":16,"category":16,"description":16,"to":16,"target":16,"path":74,"stem":75,"children":76,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[77,91,97,111,125,131],{"title":78,"framework":16,"category":16,"description":16,"to":16,"target":16,"shadow":21,"path":79,"stem":80,"children":81,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[82,87],{"title":78,"path":83,"stem":84,"framework":28,"category":16,"description":85,"to":16,"target":16,"icon":86},"\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":78,"path":88,"stem":89,"framework":34,"category":16,"description":90,"to":16,"target":16,"icon":86},"\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":92,"path":93,"stem":94,"framework":28,"category":16,"description":95,"to":16,"target":16,"icon":96},"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":98,"framework":16,"category":16,"description":16,"to":16,"target":16,"shadow":21,"path":99,"stem":100,"children":101,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[102,107],{"title":98,"path":103,"stem":104,"framework":28,"category":16,"description":105,"to":16,"target":16,"icon":106},"\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":98,"path":108,"stem":109,"framework":34,"category":16,"description":110,"to":16,"target":16,"icon":106},"\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":112,"framework":16,"category":16,"description":16,"to":16,"target":16,"shadow":21,"path":113,"stem":114,"children":115,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[116,122],{"title":117,"path":118,"stem":119,"framework":28,"category":16,"description":120,"to":16,"target":16,"icon":121},"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":117,"path":123,"stem":124,"framework":34,"category":16,"description":120,"to":16,"target":16,"icon":121},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":126,"path":127,"stem":128,"framework":28,"category":16,"description":129,"to":16,"target":16,"icon":130},"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":132,"path":133,"stem":134,"framework":34,"category":16,"description":135,"to":16,"target":16,"icon":136},"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":138,"framework":16,"category":16,"description":16,"to":16,"target":16,"path":139,"stem":140,"children":141,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[142,147,153],{"title":143,"path":144,"stem":145,"framework":16,"category":16,"description":146,"to":16,"target":16,"icon":136},"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":148,"path":149,"stem":150,"framework":16,"category":16,"description":151,"to":16,"target":16,"icon":152},"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":154,"path":155,"stem":156,"framework":16,"category":16,"description":157,"to":16,"target":16,"icon":158},"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":160,"path":161,"stem":162,"framework":16,"category":16,"description":163,"to":164,"target":165,"icon":166},"Figma","\u002Fdocs\u002Fgetting-started\u002Ffigma","docs\u002F1.getting-started\u002Ffigma","How to use Nuxt UI in Figma.","https:\u002F\u002Fgo.nuxt.com\u002Ffigma-ui","_blank","i-simple-icons-figma",{"title":67,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":168,"path":169,"stem":170,"children":171,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[172,178,184,190,196,201,206,211,216,221,226,232,237,242,247,252,257,262,268,273,278,283,288,293,298,303,308,314,319,324,329,335,340,345,350,355,360,365,370,376,381,386,391,396,402,408,413,418,423,428,433,438,443,448,453,458,463,469,474,479,484,489,494,499,504,509,514,519,524,529,534,539,544,549,554,559,564,569,574,579,584,589,594,600,605,610,615,620,625,630,635,640,645,650,655,660,665,670,675,680,685,690,695,700,705,710,715,720,725,730,736,741,746,751,756,761,766,771,776,781,786,791,796,801,806,811,815,820,825,830,835],{"title":173,"path":174,"stem":175,"framework":16,"category":176,"description":177,"to":16,"target":16},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":179,"path":180,"stem":181,"framework":16,"category":182,"description":183,"to":16,"target":16},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw the user's attention.",{"title":185,"path":186,"stem":187,"framework":16,"category":188,"description":189,"to":16,"target":16},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","A wrapper to provide global configuration, toasts and tooltips to your app.",{"title":191,"path":192,"stem":193,"framework":16,"category":194,"description":195,"to":16,"target":16},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":197,"path":198,"stem":199,"framework":16,"category":182,"description":200,"to":16,"target":16},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":202,"path":203,"stem":204,"framework":16,"category":182,"description":205,"to":16,"target":16},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":207,"path":208,"stem":209,"framework":16,"category":182,"description":210,"to":16,"target":16},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":212,"path":213,"stem":214,"framework":16,"category":182,"description":215,"to":16,"target":16},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":217,"path":218,"stem":219,"framework":16,"category":194,"description":220,"to":16,"target":16},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":222,"path":223,"stem":224,"framework":16,"category":194,"description":225,"to":16,"target":16},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":227,"path":228,"stem":229,"framework":16,"category":230,"description":231,"to":16,"target":16},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":233,"path":234,"stem":235,"framework":16,"category":182,"description":236,"to":16,"target":16},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":238,"path":239,"stem":240,"framework":16,"category":182,"description":241,"to":16,"target":16},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":243,"path":244,"stem":245,"framework":16,"category":182,"description":246,"to":16,"target":16},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":248,"path":249,"stem":250,"framework":16,"category":176,"description":251,"to":16,"target":16},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":253,"path":254,"stem":255,"framework":16,"category":194,"description":256,"to":16,"target":16},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":258,"path":259,"stem":260,"framework":16,"category":194,"description":261,"to":16,"target":16},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":263,"path":264,"stem":265,"framework":16,"category":266,"description":267,"to":16,"target":16},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":269,"path":270,"stem":271,"framework":16,"category":266,"description":272,"to":16,"target":16},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":274,"path":275,"stem":276,"framework":16,"category":266,"description":277,"to":16,"target":16},"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":279,"path":280,"stem":281,"framework":16,"category":266,"description":282,"to":16,"target":16},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":284,"path":285,"stem":286,"framework":16,"category":266,"description":287,"to":16,"target":16},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":289,"path":290,"stem":291,"framework":16,"category":266,"description":292,"to":16,"target":16},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":294,"path":295,"stem":296,"framework":16,"category":266,"description":297,"to":16,"target":16},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.",{"title":299,"path":300,"stem":301,"framework":16,"category":266,"description":302,"to":16,"target":16},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":304,"path":305,"stem":306,"framework":16,"category":266,"description":307,"to":16,"target":16},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":309,"path":310,"stem":311,"framework":16,"category":312,"description":313,"to":16,"target":16},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":315,"path":316,"stem":317,"framework":16,"category":312,"description":318,"to":16,"target":16},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checkboxes to select multiple options from a list.",{"title":320,"path":321,"stem":322,"framework":16,"category":182,"description":323,"to":16,"target":16},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":325,"path":326,"stem":327,"framework":16,"category":182,"description":328,"to":16,"target":16},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":330,"path":331,"stem":332,"framework":16,"category":333,"description":334,"to":16,"target":16},"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":336,"path":337,"stem":338,"framework":16,"category":333,"description":339,"to":16,"target":16},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":341,"path":342,"stem":343,"framework":16,"category":333,"description":344,"to":16,"target":16},"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":346,"path":347,"stem":348,"framework":16,"category":333,"description":349,"to":16,"target":16},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark and light mode.",{"title":351,"path":352,"stem":353,"framework":16,"category":333,"description":354,"to":16,"target":16},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A Switch to toggle between light and dark mode.",{"title":356,"path":357,"stem":358,"framework":16,"category":312,"description":359,"to":16,"target":16},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":361,"path":362,"stem":363,"framework":16,"category":230,"description":364,"to":16,"target":16},"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":366,"path":367,"stem":368,"framework":16,"category":188,"description":369,"to":16,"target":16},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A layout element to center and constrain the width of your content.",{"title":371,"path":372,"stem":373,"framework":28,"category":374,"description":375,"to":16,"target":16},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":377,"path":378,"stem":379,"framework":28,"category":374,"description":380,"to":16,"target":16},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready-to-use CommandPalette to add to your documentation.",{"title":382,"path":383,"stem":384,"framework":28,"category":374,"description":385,"to":16,"target":16},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":387,"path":388,"stem":389,"framework":28,"category":374,"description":390,"to":16,"target":16},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":392,"path":393,"stem":394,"framework":28,"category":374,"description":395,"to":16,"target":16},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":397,"path":398,"stem":399,"framework":16,"category":400,"description":401,"to":16,"target":16},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":403,"path":404,"stem":405,"framework":16,"category":406,"description":407,"to":16,"target":16},"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":409,"path":410,"stem":411,"framework":16,"category":406,"description":412,"to":16,"target":16},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":414,"path":415,"stem":416,"framework":16,"category":406,"description":417,"to":16,"target":16},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":419,"path":420,"stem":421,"framework":16,"category":406,"description":422,"to":16,"target":16},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":424,"path":425,"stem":426,"framework":16,"category":406,"description":427,"to":16,"target":16},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready-to-use CommandPalette to add to your dashboard.",{"title":429,"path":430,"stem":431,"framework":16,"category":406,"description":432,"to":16,"target":16},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":434,"path":435,"stem":436,"framework":16,"category":406,"description":437,"to":16,"target":16},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":439,"path":440,"stem":441,"framework":16,"category":406,"description":442,"to":16,"target":16},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":444,"path":445,"stem":446,"framework":16,"category":406,"description":447,"to":16,"target":16},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":449,"path":450,"stem":451,"framework":16,"category":406,"description":452,"to":16,"target":16},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":454,"path":455,"stem":456,"framework":16,"category":400,"description":457,"to":16,"target":16},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in and out of the screen.",{"title":459,"path":460,"stem":461,"framework":16,"category":400,"description":462,"to":16,"target":16},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":464,"path":465,"stem":466,"framework":16,"category":467,"description":468,"to":16,"target":16},"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":470,"path":471,"stem":472,"framework":16,"category":467,"description":473,"to":16,"target":16},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":475,"path":476,"stem":477,"framework":16,"category":467,"description":478,"to":16,"target":16},"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":480,"path":481,"stem":482,"framework":16,"category":467,"description":483,"to":16,"target":16},"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":485,"path":486,"stem":487,"framework":16,"category":467,"description":488,"to":16,"target":16},"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":490,"path":491,"stem":492,"framework":16,"category":467,"description":493,"to":16,"target":16},"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":495,"path":496,"stem":497,"framework":16,"category":176,"description":498,"to":16,"target":16},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":500,"path":501,"stem":502,"framework":16,"category":188,"description":503,"to":16,"target":16},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":505,"path":506,"stem":507,"framework":16,"category":182,"description":508,"to":16,"target":16},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":510,"path":511,"stem":512,"framework":16,"category":312,"description":513,"to":16,"target":16},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":515,"path":516,"stem":517,"framework":16,"category":188,"description":518,"to":16,"target":16},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer for your site links and legal notices.",{"title":520,"path":521,"stem":522,"framework":16,"category":230,"description":523,"to":16,"target":16},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":525,"path":526,"stem":527,"framework":16,"category":312,"description":528,"to":16,"target":16},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":530,"path":531,"stem":532,"framework":16,"category":312,"description":533,"to":16,"target":16},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":535,"path":536,"stem":537,"framework":16,"category":188,"description":538,"to":16,"target":16},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header for your site navigation.",{"title":540,"path":541,"stem":542,"framework":16,"category":182,"description":543,"to":16,"target":16},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":545,"path":546,"stem":547,"framework":16,"category":312,"description":548,"to":16,"target":16},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":550,"path":551,"stem":552,"framework":16,"category":312,"description":553,"to":16,"target":16},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":555,"path":556,"stem":557,"framework":16,"category":312,"description":558,"to":16,"target":16},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":560,"path":561,"stem":562,"framework":16,"category":312,"description":563,"to":16,"target":16},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":565,"path":566,"stem":567,"framework":16,"category":312,"description":568,"to":16,"target":16},"InputRating","\u002Fdocs\u002Fcomponents\u002Finput-rating","docs\u002F2.components\u002Finput-rating","A component to display and collect ratings from users.",{"title":570,"path":571,"stem":572,"framework":16,"category":312,"description":573,"to":16,"target":16},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":575,"path":576,"stem":577,"framework":16,"category":312,"description":578,"to":16,"target":16},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":580,"path":581,"stem":582,"framework":16,"category":182,"description":583,"to":16,"target":16},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":585,"path":586,"stem":587,"framework":16,"category":230,"description":588,"to":16,"target":16},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around NuxtLink with extra props.",{"title":590,"path":591,"stem":592,"framework":16,"category":312,"description":593,"to":16,"target":16},"Listbox","\u002Fdocs\u002Fcomponents\u002Flistbox","docs\u002F2.components\u002Flistbox","A selectable list of items with search, virtualization and rich item rendering.",{"title":595,"path":596,"stem":597,"framework":16,"category":598,"description":599,"to":16,"target":16},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":601,"path":602,"stem":603,"framework":16,"category":188,"description":604,"to":16,"target":16},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":606,"path":607,"stem":608,"framework":16,"category":176,"description":609,"to":16,"target":16},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":611,"path":612,"stem":613,"framework":16,"category":400,"description":614,"to":16,"target":16},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":616,"path":617,"stem":618,"framework":16,"category":230,"description":619,"to":16,"target":16},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":621,"path":622,"stem":623,"framework":16,"category":194,"description":624,"to":16,"target":16},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":626,"path":627,"stem":628,"framework":16,"category":194,"description":629,"to":16,"target":16},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":631,"path":632,"stem":633,"framework":16,"category":194,"description":634,"to":16,"target":16},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":636,"path":637,"stem":638,"framework":16,"category":194,"description":639,"to":16,"target":16},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":641,"path":642,"stem":643,"framework":16,"category":194,"description":644,"to":16,"target":16},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":646,"path":647,"stem":648,"framework":16,"category":194,"description":649,"to":16,"target":16},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":651,"path":652,"stem":653,"framework":16,"category":194,"description":654,"to":16,"target":16},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":656,"path":657,"stem":658,"framework":16,"category":194,"description":659,"to":16,"target":16},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":661,"path":662,"stem":663,"framework":16,"category":194,"description":664,"to":16,"target":16},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":666,"path":667,"stem":668,"framework":16,"category":194,"description":669,"to":16,"target":16},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":671,"path":672,"stem":673,"framework":16,"category":194,"description":674,"to":16,"target":16},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":676,"path":677,"stem":678,"framework":16,"category":194,"description":679,"to":16,"target":16},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":681,"path":682,"stem":683,"framework":16,"category":194,"description":684,"to":16,"target":16},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":686,"path":687,"stem":688,"framework":16,"category":194,"description":689,"to":16,"target":16},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":691,"path":692,"stem":693,"framework":16,"category":194,"description":694,"to":16,"target":16},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":696,"path":697,"stem":698,"framework":16,"category":230,"description":699,"to":16,"target":16},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":701,"path":702,"stem":703,"framework":16,"category":312,"description":704,"to":16,"target":16},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":706,"path":707,"stem":708,"framework":16,"category":400,"description":709,"to":16,"target":16},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":711,"path":712,"stem":713,"framework":16,"category":194,"description":714,"to":16,"target":16},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":716,"path":717,"stem":718,"framework":16,"category":194,"description":719,"to":16,"target":16},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":721,"path":722,"stem":723,"framework":16,"category":194,"description":724,"to":16,"target":16},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":726,"path":727,"stem":728,"framework":16,"category":182,"description":729,"to":16,"target":16},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":731,"path":732,"stem":733,"framework":16,"category":182,"description":734,"to":16,"target":16,"badge":735},"ProgressGroup","\u002Fdocs\u002Fcomponents\u002Fprogress-group","docs\u002F2.components\u002Fprogress-group","A progress bar split into multiple segments that add up to a total.","New",{"title":737,"path":738,"stem":739,"framework":16,"category":312,"description":740,"to":16,"target":16},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":742,"path":743,"stem":744,"framework":16,"category":176,"description":745,"to":16,"target":16},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":747,"path":748,"stem":749,"framework":16,"category":312,"description":750,"to":16,"target":16},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":752,"path":753,"stem":754,"framework":16,"category":312,"description":755,"to":16,"target":16},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":757,"path":758,"stem":759,"framework":16,"category":182,"description":760,"to":16,"target":16},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":762,"path":763,"stem":764,"framework":16,"category":188,"description":765,"to":16,"target":16},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":767,"path":768,"stem":769,"framework":16,"category":182,"description":770,"to":16,"target":16},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":772,"path":773,"stem":774,"framework":16,"category":400,"description":775,"to":16,"target":16},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":777,"path":778,"stem":779,"framework":16,"category":312,"description":780,"to":16,"target":16},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":782,"path":783,"stem":784,"framework":16,"category":188,"description":785,"to":16,"target":16,"badge":735},"Splitter","\u002Fdocs\u002Fcomponents\u002Fsplitter","docs\u002F2.components\u002Fsplitter","A set of resizable panels separated by draggable handles.",{"title":787,"path":788,"stem":789,"framework":16,"category":230,"description":790,"to":16,"target":16},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":792,"path":793,"stem":794,"framework":16,"category":312,"description":795,"to":16,"target":16},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":797,"path":798,"stem":799,"framework":16,"category":176,"description":800,"to":16,"target":16},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":802,"path":803,"stem":804,"framework":16,"category":230,"description":805,"to":16,"target":16},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":807,"path":808,"stem":809,"framework":16,"category":312,"description":810,"to":16,"target":16},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":50,"path":812,"stem":813,"framework":16,"category":188,"description":814,"to":16,"target":16},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":816,"path":817,"stem":818,"framework":16,"category":176,"description":819,"to":16,"target":16},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":821,"path":822,"stem":823,"framework":16,"category":400,"description":824,"to":16,"target":16},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":826,"path":827,"stem":828,"framework":16,"category":400,"description":829,"to":16,"target":16},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":831,"path":832,"stem":833,"framework":16,"category":176,"description":834,"to":16,"target":16},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":836,"path":837,"stem":838,"framework":16,"category":176,"description":839,"to":16,"target":16},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":841,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":842,"path":843,"stem":844,"children":845,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[846,851,856,861,866,871,876,881],{"title":847,"path":848,"stem":849,"framework":16,"category":16,"description":850,"to":16,"target":16},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":852,"path":853,"stem":854,"framework":16,"category":16,"description":855,"to":16,"target":16},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":857,"path":858,"stem":859,"framework":16,"category":16,"description":860,"to":16,"target":16},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":862,"path":863,"stem":864,"framework":16,"category":16,"description":865,"to":16,"target":16},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":867,"path":868,"stem":869,"framework":16,"category":16,"description":870,"to":16,"target":16},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":872,"path":873,"stem":874,"framework":16,"category":16,"description":875,"to":16,"target":16},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":877,"path":878,"stem":879,"framework":16,"category":16,"description":880,"to":16,"target":16},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":882,"path":883,"stem":884,"framework":16,"category":16,"description":885,"to":16,"target":16},"useTour","\u002Fdocs\u002Fcomposables\u002Fuse-tour","docs\u002F3.composables\u002Fuse-tour","A composable to build guided tours by re-anchoring a single Popover across steps.",{"title":887,"path":888,"stem":889,"children":890,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":991},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[891,893,898,903,908,913,918,922,927,931,936,941,946,951,956,960,965,969,973,977,982,987],{"title":15,"path":888,"stem":889,"framework":16,"category":16,"description":892,"to":16,"target":16},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":894,"path":895,"stem":896,"framework":16,"category":16,"description":897,"to":16,"target":16},"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":899,"path":900,"stem":901,"framework":16,"category":16,"description":902,"to":16,"target":16},"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":904,"path":905,"stem":906,"framework":16,"category":16,"description":907,"to":16,"target":16},"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":909,"path":910,"stem":911,"framework":16,"category":16,"description":912,"to":16,"target":16},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":173,"path":914,"stem":915,"framework":16,"category":916,"description":917,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":207,"path":919,"stem":920,"framework":16,"category":916,"description":921,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":923,"path":924,"stem":925,"framework":16,"category":916,"description":926,"to":16,"target":16},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":243,"path":928,"stem":929,"framework":16,"category":916,"description":930,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":932,"path":933,"stem":934,"framework":16,"category":916,"description":935,"to":16,"target":16},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":937,"path":938,"stem":939,"framework":16,"category":916,"description":940,"to":16,"target":16},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":942,"path":943,"stem":944,"framework":16,"category":916,"description":945,"to":16,"target":16},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":947,"path":948,"stem":949,"framework":16,"category":916,"description":950,"to":16,"target":16},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":952,"path":953,"stem":954,"framework":16,"category":916,"description":955,"to":16,"target":16},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":325,"path":957,"stem":958,"framework":16,"category":916,"description":959,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":961,"path":962,"stem":963,"framework":16,"category":916,"description":964,"to":16,"target":16},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":505,"path":966,"stem":967,"framework":16,"category":916,"description":968,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":540,"path":970,"stem":971,"framework":16,"category":916,"description":972,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":580,"path":974,"stem":975,"framework":16,"category":916,"description":976,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":978,"path":979,"stem":980,"framework":16,"category":916,"description":981,"to":16,"target":16},"Prompt","\u002Fdocs\u002Ftypography\u002Fprompt","docs\u002F4.typography\u002Fprompt","Display pre-built AI prompts with one-click copy and IDE integration.",{"title":983,"path":984,"stem":985,"framework":16,"category":916,"description":986,"to":16,"target":16},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":802,"path":988,"stem":989,"framework":16,"category":916,"description":990,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"title":993,"path":994,"stem":995,"children":996,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":999},"Releases","\u002Fdocs\u002Freleases","docs\u002F5.releases\u002F1.index",[997],{"title":993,"path":994,"stem":995,"framework":16,"category":16,"description":998,"to":16,"target":16},"Stay up to date with the newest features, enhancements, and fixes for Nuxt UI.","i-lucide-rocket",{"stats":1001},{"version":1002,"downloads":1003,"stars":1004,"watchers":1004,"forks":1005,"defaultBranch":1006,"publishedAt":1007,"createdAt":1008},"4.11.3",2820263,6995,1138,"v4",1790861861108,1639059438669,{"id":1010,"title":1011,"authors":1012,"body":1023,"category":13035,"date":13036,"description":13037,"extension":13038,"image":13039,"meta":13040,"navigation":36,"path":13041,"seo":13042,"sitemap":13043,"stem":13044,"__hash__":13045},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[1013,1018],{"name":1014,"avatar":1015,"to":1017},"Hugo Richard",{"src":1016},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":1019,"avatar":1020,"to":1022},"Benjamin Canac",{"src":1021},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":1024,"value":1025,"toc":13001},"minimark",[1026,1030,1035,1038,1073,1099,1103,1106,1120,1124,1127,1164,1169,1172,1325,1329,1336,1500,1512,1515,1554,1558,1565,1660,1667,1684,1693,1697,1711,2448,2451,2469,2479,2483,2491,2495,2506,2875,2879,2906,4664,4667,4672,4679,4684,4695,4700,4709,4728,4733,4748,4761,4765,4768,5143,5147,5162,5166,5174,5789,5796,5819,5823,5852,6049,6056,6059,6191,6195,6214,7729,7732,7739,7750,7789,7804,7809,7816,7830,7835,7860,7865,7872,7883,7887,7890,7894,7897,8050,8054,8079,8558,8562,9133,9137,10550,10559,10563,10570,10574,10584,10842,10846,10854,11109,11113,11116,12610,12614,12617,12622,12631,12636,12645,12848,12852,12855,12870,12873,12888,12899,12907,12911,12914,12945,12948,12953,12994,12997],[1027,1028,1029],"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.",[1031,1032,1034],"h2",{"id":1033},"what-were-building","What we're building",[1027,1036,1037],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[1039,1040,1041,1049,1055,1061,1067],"ul",{},[1042,1043,1044,1048],"li",{},[1045,1046,1047],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1042,1050,1051,1054],{},[1045,1052,1053],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1042,1056,1057,1060],{},[1045,1058,1059],{},"Markdown rendering"," for rich AI responses with code highlighting",[1042,1062,1063,1066],{},[1045,1064,1065],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1042,1068,1069,1072],{},[1045,1070,1071],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1074,1075,1077],"callout",{"icon":1076},"i-simple-icons-github",[1027,1078,1079,1080,1090,1091,1098],{},"Check out the ",[1081,1082,1086],"a",{"href":1083,"rel":1084},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1085],"nofollow",[1087,1088,1089],"code",{},"Nuxt"," and ",[1081,1092,1095],{"href":1093,"rel":1094},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1085],[1087,1096,1097],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[1031,1100,1102],{"id":1101},"prerequisites","Prerequisites",[1027,1104,1105],{},"Before we start, make sure you have:",[1039,1107,1108,1111],{},[1042,1109,1110],{},"Node.js 22.19+ or 24.11+ installed",[1042,1112,1113,1114,1119],{},"A ",[1081,1115,1118],{"href":1116,"rel":1117},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1085],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[1031,1121,1123],{"id":1122},"project-setup","Project setup",[1027,1125,1126],{},"Start by creating a new Nuxt project:",[1128,1129,1134],"pre",{"className":1130,"code":1131,"language":1132,"meta":1133,"style":1133},"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","",[1087,1135,1136,1155],{"__ignoreMap":1133},[1137,1138,1141,1145,1149,1152],"span",{"class":1139,"line":1140},"line",1,[1137,1142,1144],{"class":1143},"sBMFI","npx",[1137,1146,1148],{"class":1147},"sfazB"," nuxi@latest",[1137,1150,1151],{"class":1147}," init",[1137,1153,1154],{"class":1147}," nuxt-ai-chat\n",[1137,1156,1158,1162],{"class":1139,"line":1157},2,[1137,1159,1161],{"class":1160},"s2Zo4","cd",[1137,1163,1154],{"class":1147},[1165,1166,1168],"h3",{"id":1167},"installing-dependencies","Installing dependencies",[1027,1170,1171],{},"Install Nuxt UI and the AI-specific dependencies:",[1173,1174,1176,1222,1256,1291],"code-group",{"sync":1175},"pm",[1128,1177,1180],{"className":1130,"code":1178,"filename":1179,"language":1132,"meta":1133,"style":1133},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1087,1181,1182],{"__ignoreMap":1133},[1137,1183,1184,1186,1189,1192,1195,1198,1201,1204,1207,1210,1213,1216,1219],{"class":1139,"line":1140},[1137,1185,1179],{"class":1143},[1137,1187,1188],{"class":1147}," add",[1137,1190,1191],{"class":1147}," @nuxt\u002Fui",[1137,1193,1194],{"class":1147}," tailwindcss",[1137,1196,1197],{"class":1147}," @comark\u002Fnuxt",[1137,1199,1200],{"class":1147}," @shikijs\u002Flangs",[1137,1202,1203],{"class":1147}," @nuxthub\u002Fcore",[1137,1205,1206],{"class":1147}," drizzle-orm",[1137,1208,1209],{"class":1147}," drizzle-kit",[1137,1211,1212],{"class":1147}," @libsql\u002Fclient",[1137,1214,1215],{"class":1147}," ai",[1137,1217,1218],{"class":1147}," @ai-sdk\u002Fvue",[1137,1220,1221],{"class":1147}," zod\n",[1128,1223,1226],{"className":1130,"code":1224,"filename":1225,"language":1132,"meta":1133,"style":1133},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1087,1227,1228],{"__ignoreMap":1133},[1137,1229,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254],{"class":1139,"line":1140},[1137,1231,1225],{"class":1143},[1137,1233,1188],{"class":1147},[1137,1235,1191],{"class":1147},[1137,1237,1194],{"class":1147},[1137,1239,1197],{"class":1147},[1137,1241,1200],{"class":1147},[1137,1243,1203],{"class":1147},[1137,1245,1206],{"class":1147},[1137,1247,1209],{"class":1147},[1137,1249,1212],{"class":1147},[1137,1251,1215],{"class":1147},[1137,1253,1218],{"class":1147},[1137,1255,1221],{"class":1147},[1128,1257,1260],{"className":1130,"code":1258,"filename":1259,"language":1132,"meta":1133,"style":1133},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1087,1261,1262],{"__ignoreMap":1133},[1137,1263,1264,1266,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289],{"class":1139,"line":1140},[1137,1265,1259],{"class":1143},[1137,1267,1268],{"class":1147}," install",[1137,1270,1191],{"class":1147},[1137,1272,1194],{"class":1147},[1137,1274,1197],{"class":1147},[1137,1276,1200],{"class":1147},[1137,1278,1203],{"class":1147},[1137,1280,1206],{"class":1147},[1137,1282,1209],{"class":1147},[1137,1284,1212],{"class":1147},[1137,1286,1215],{"class":1147},[1137,1288,1218],{"class":1147},[1137,1290,1221],{"class":1147},[1128,1292,1295],{"className":1130,"code":1293,"filename":1294,"language":1132,"meta":1133,"style":1133},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1087,1296,1297],{"__ignoreMap":1133},[1137,1298,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323],{"class":1139,"line":1140},[1137,1300,1294],{"class":1143},[1137,1302,1188],{"class":1147},[1137,1304,1191],{"class":1147},[1137,1306,1194],{"class":1147},[1137,1308,1197],{"class":1147},[1137,1310,1200],{"class":1147},[1137,1312,1203],{"class":1147},[1137,1314,1206],{"class":1147},[1137,1316,1209],{"class":1147},[1137,1318,1212],{"class":1147},[1137,1320,1215],{"class":1147},[1137,1322,1218],{"class":1147},[1137,1324,1221],{"class":1147},[1165,1326,1328],{"id":1327},"configuration","Configuration",[1027,1330,1331,1332,1335],{},"Update your ",[1087,1333,1334],{},"nuxt.config.ts"," to register the modules:",[1337,1338,1339],"code-tree-intersection",{},[1128,1340,1344],{"className":1341,"code":1342,"filename":1334,"language":1343,"meta":1133,"style":1133},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: [\n    '@nuxt\u002Fui',\n    '@comark\u002Fnuxt',\n    '@nuxthub\u002Fcore'\n  ],\n\n  hub: {\n    db: 'sqlite'\n  },\n\n  css: ['~\u002Fassets\u002Fcss\u002Fmain.css'],\n})\n","ts",[1087,1345,1346,1366,1378,1393,1405,1416,1424,1430,1441,1457,1463,1468,1491],{"__ignoreMap":1133},[1137,1347,1348,1352,1355,1358,1362],{"class":1139,"line":1140},[1137,1349,1351],{"class":1350},"s7zQu","export",[1137,1353,1354],{"class":1350}," default",[1137,1356,1357],{"class":1160}," defineNuxtConfig",[1137,1359,1361],{"class":1360},"sTEyZ","(",[1137,1363,1365],{"class":1364},"sMK4o","{\n",[1137,1367,1368,1372,1375],{"class":1139,"line":1157},[1137,1369,1371],{"class":1370},"swJcz","  modules",[1137,1373,1374],{"class":1364},":",[1137,1376,1377],{"class":1360}," [\n",[1137,1379,1381,1384,1387,1390],{"class":1139,"line":1380},3,[1137,1382,1383],{"class":1364},"    '",[1137,1385,1386],{"class":1147},"@nuxt\u002Fui",[1137,1388,1389],{"class":1364},"'",[1137,1391,1392],{"class":1364},",\n",[1137,1394,1396,1398,1401,1403],{"class":1139,"line":1395},4,[1137,1397,1383],{"class":1364},[1137,1399,1400],{"class":1147},"@comark\u002Fnuxt",[1137,1402,1389],{"class":1364},[1137,1404,1392],{"class":1364},[1137,1406,1408,1410,1413],{"class":1139,"line":1407},5,[1137,1409,1383],{"class":1364},[1137,1411,1412],{"class":1147},"@nuxthub\u002Fcore",[1137,1414,1415],{"class":1364},"'\n",[1137,1417,1419,1422],{"class":1139,"line":1418},6,[1137,1420,1421],{"class":1360},"  ]",[1137,1423,1392],{"class":1364},[1137,1425,1427],{"class":1139,"line":1426},7,[1137,1428,1429],{"emptyLinePlaceholder":21},"\n",[1137,1431,1433,1436,1438],{"class":1139,"line":1432},8,[1137,1434,1435],{"class":1370},"  hub",[1137,1437,1374],{"class":1364},[1137,1439,1440],{"class":1364}," {\n",[1137,1442,1444,1447,1449,1452,1455],{"class":1139,"line":1443},9,[1137,1445,1446],{"class":1370},"    db",[1137,1448,1374],{"class":1364},[1137,1450,1451],{"class":1364}," '",[1137,1453,1454],{"class":1147},"sqlite",[1137,1456,1415],{"class":1364},[1137,1458,1460],{"class":1139,"line":1459},10,[1137,1461,1462],{"class":1364},"  },\n",[1137,1464,1466],{"class":1139,"line":1465},11,[1137,1467,1429],{"emptyLinePlaceholder":21},[1137,1469,1471,1474,1476,1479,1481,1484,1486,1489],{"class":1139,"line":1470},12,[1137,1472,1473],{"class":1370},"  css",[1137,1475,1374],{"class":1364},[1137,1477,1478],{"class":1360}," [",[1137,1480,1389],{"class":1364},[1137,1482,1483],{"class":1147},"~\u002Fassets\u002Fcss\u002Fmain.css",[1137,1485,1389],{"class":1364},[1137,1487,1488],{"class":1360},"]",[1137,1490,1392],{"class":1364},[1137,1492,1494,1497],{"class":1139,"line":1493},13,[1137,1495,1496],{"class":1364},"}",[1137,1498,1499],{"class":1360},")\n",[1501,1502,1503],"note",{"to":888},[1027,1504,1505,1507,1508,1511],{},[1087,1506,1400],{}," automatically enables Nuxt UI's ",[1081,1509,1510],{"href":888},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[1027,1513,1514],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1337,1516,1517],{},[1128,1518,1523],{"className":1519,"code":1520,"filename":1521,"language":1522,"meta":1133,"style":1133},"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",[1087,1524,1525,1542],{"__ignoreMap":1133},[1137,1526,1527,1530,1533,1536,1539],{"class":1139,"line":1140},[1137,1528,1529],{"class":1350},"@import",[1137,1531,1532],{"class":1364}," \"",[1137,1534,1535],{"class":1147},"tailwindcss",[1137,1537,1538],{"class":1364},"\"",[1137,1540,1541],{"class":1364},";\n",[1137,1543,1544,1546,1548,1550,1552],{"class":1139,"line":1157},[1137,1545,1529],{"class":1350},[1137,1547,1532],{"class":1364},[1137,1549,1386],{"class":1147},[1137,1551,1538],{"class":1364},[1137,1553,1541],{"class":1364},[1165,1555,1557],{"id":1556},"setting-up-the-app","Setting up the app",[1027,1559,1560,1561,1564],{},"Nuxt UI requires wrapping your app with ",[1087,1562,1563],{},"UApp"," for modals, toasts, and overlays to work properly:",[1337,1566,1567],{},[1128,1568,1573],{"className":1569,"code":1570,"filename":1571,"highlights":1572,"language":34,"meta":1133,"style":1133},"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",[1157,1418],[1087,1574,1575,1586,1597,1621,1632,1641,1651],{"__ignoreMap":1133},[1137,1576,1577,1580,1583],{"class":1139,"line":1140},[1137,1578,1579],{"class":1364},"\u003C",[1137,1581,1582],{"class":1370},"template",[1137,1584,1585],{"class":1364},">\n",[1137,1587,1590,1593,1595],{"class":1588,"line":1157},[1139,1589],"highlight",[1137,1591,1592],{"class":1364},"  \u003C",[1137,1594,1563],{"class":1370},[1137,1596,1585],{"class":1364},[1137,1598,1599,1602,1605,1609,1612,1614,1617,1619],{"class":1139,"line":1380},[1137,1600,1601],{"class":1364},"    \u003C",[1137,1603,1604],{"class":1370},"UDashboardGroup",[1137,1606,1608],{"class":1607},"spNyl"," unit",[1137,1610,1611],{"class":1364},"=",[1137,1613,1538],{"class":1364},[1137,1615,1616],{"class":1147},"rem",[1137,1618,1538],{"class":1364},[1137,1620,1585],{"class":1364},[1137,1622,1623,1626,1629],{"class":1139,"line":1395},[1137,1624,1625],{"class":1364},"      \u003C",[1137,1627,1628],{"class":1370},"NuxtPage",[1137,1630,1631],{"class":1364}," \u002F>\n",[1137,1633,1634,1637,1639],{"class":1139,"line":1407},[1137,1635,1636],{"class":1364},"    \u003C\u002F",[1137,1638,1604],{"class":1370},[1137,1640,1585],{"class":1364},[1137,1642,1644,1647,1649],{"class":1643,"line":1418},[1139,1589],[1137,1645,1646],{"class":1364},"  \u003C\u002F",[1137,1648,1563],{"class":1370},[1137,1650,1585],{"class":1364},[1137,1652,1653,1656,1658],{"class":1139,"line":1426},[1137,1654,1655],{"class":1364},"\u003C\u002F",[1137,1657,1582],{"class":1370},[1137,1659,1585],{"class":1364},[1027,1661,1662,1663,1666],{},"Create a ",[1087,1664,1665],{},".env"," file with your AI Gateway API key:",[1337,1668,1669],{},[1128,1670,1672],{"className":1130,"code":1671,"filename":1665,"language":1132,"meta":1133,"style":1133},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1087,1673,1674],{"__ignoreMap":1133},[1137,1675,1676,1679,1681],{"class":1139,"line":1140},[1137,1677,1678],{"class":1360},"AI_GATEWAY_API_KEY",[1137,1680,1611],{"class":1364},[1137,1682,1683],{"class":1147},"your-api-key-here\n",[1501,1685,1686],{},[1027,1687,1688,1689,1692],{},"With ",[1081,1690,1118],{"href":1116,"rel":1691},[1085],", 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.",[1165,1694,1696],{"id":1695},"setting-up-the-database","Setting up the database",[1027,1698,1699,1704,1705,1710],{},[1081,1700,1703],{"href":1701,"rel":1702},"https:\u002F\u002Fhub.nuxt.com",[1085],"NuxtHub"," provides a zero-config database powered by ",[1081,1706,1709],{"href":1707,"rel":1708},"https:\u002F\u002Form.drizzle.team",[1085],"Drizzle ORM",". Here is the schema for the chat application:",[1337,1712,1713],{},[1714,1715,1716],"code-collapse",{},[1128,1717,1720],{"className":1341,"code":1718,"filename":1719,"language":1343,"meta":1133,"style":1133},"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",[1087,1721,1722,1762,1782,1786,1813,1858,1871,1928,1934,1938,1973,1985,1992,1996,2023,2069,2136,2206,2246,2297,2310,2340,2346,2351,2383,2399,2417,2433,2441],{"__ignoreMap":1133},[1137,1723,1724,1727,1730,1733,1736,1739,1741,1744,1746,1749,1752,1755,1757,1760],{"class":1139,"line":1140},[1137,1725,1726],{"class":1350},"import",[1137,1728,1729],{"class":1364}," {",[1137,1731,1732],{"class":1360}," sqliteTable",[1137,1734,1735],{"class":1364},",",[1137,1737,1738],{"class":1360}," text",[1137,1740,1735],{"class":1364},[1137,1742,1743],{"class":1360}," integer",[1137,1745,1735],{"class":1364},[1137,1747,1748],{"class":1360}," index",[1137,1750,1751],{"class":1364}," }",[1137,1753,1754],{"class":1350}," from",[1137,1756,1451],{"class":1364},[1137,1758,1759],{"class":1147},"drizzle-orm\u002Fsqlite-core",[1137,1761,1415],{"class":1364},[1137,1763,1764,1766,1768,1771,1773,1775,1777,1780],{"class":1139,"line":1157},[1137,1765,1726],{"class":1350},[1137,1767,1729],{"class":1364},[1137,1769,1770],{"class":1360}," relations",[1137,1772,1751],{"class":1364},[1137,1774,1754],{"class":1350},[1137,1776,1451],{"class":1364},[1137,1778,1779],{"class":1147},"drizzle-orm",[1137,1781,1415],{"class":1364},[1137,1783,1784],{"class":1139,"line":1380},[1137,1785,1429],{"emptyLinePlaceholder":21},[1137,1787,1788,1790,1793,1796,1798,1800,1802,1804,1807,1809,1811],{"class":1139,"line":1395},[1137,1789,1351],{"class":1350},[1137,1791,1792],{"class":1607}," const",[1137,1794,1795],{"class":1360}," chats ",[1137,1797,1611],{"class":1364},[1137,1799,1732],{"class":1160},[1137,1801,1361],{"class":1360},[1137,1803,1389],{"class":1364},[1137,1805,1806],{"class":1147},"chats",[1137,1808,1389],{"class":1364},[1137,1810,1735],{"class":1364},[1137,1812,1440],{"class":1364},[1137,1814,1815,1818,1820,1822,1825,1828,1831,1833,1835,1838,1840,1842,1845,1848,1850,1853,1856],{"class":1139,"line":1407},[1137,1816,1817],{"class":1370},"  id",[1137,1819,1374],{"class":1364},[1137,1821,1738],{"class":1160},[1137,1823,1824],{"class":1360},"()",[1137,1826,1827],{"class":1364},".",[1137,1829,1830],{"class":1160},"primaryKey",[1137,1832,1824],{"class":1360},[1137,1834,1827],{"class":1364},[1137,1836,1837],{"class":1160},"$defaultFn",[1137,1839,1361],{"class":1360},[1137,1841,1824],{"class":1364},[1137,1843,1844],{"class":1607}," =>",[1137,1846,1847],{"class":1360}," crypto",[1137,1849,1827],{"class":1364},[1137,1851,1852],{"class":1160},"randomUUID",[1137,1854,1855],{"class":1360},"())",[1137,1857,1392],{"class":1364},[1137,1859,1860,1863,1865,1867,1869],{"class":1139,"line":1418},[1137,1861,1862],{"class":1370},"  title",[1137,1864,1374],{"class":1364},[1137,1866,1738],{"class":1160},[1137,1868,1824],{"class":1360},[1137,1870,1392],{"class":1364},[1137,1872,1873,1876,1878,1880,1882,1885,1888,1890,1892,1895,1897,1899,1902,1904,1907,1909,1911,1913,1915,1917,1919,1922,1925],{"class":1139,"line":1426},[1137,1874,1875],{"class":1370},"  createdAt",[1137,1877,1374],{"class":1364},[1137,1879,1743],{"class":1160},[1137,1881,1361],{"class":1360},[1137,1883,1884],{"class":1364},"{",[1137,1886,1887],{"class":1370}," mode",[1137,1889,1374],{"class":1364},[1137,1891,1451],{"class":1364},[1137,1893,1894],{"class":1147},"timestamp",[1137,1896,1389],{"class":1364},[1137,1898,1751],{"class":1364},[1137,1900,1901],{"class":1360},")",[1137,1903,1827],{"class":1364},[1137,1905,1906],{"class":1160},"notNull",[1137,1908,1824],{"class":1360},[1137,1910,1827],{"class":1364},[1137,1912,1837],{"class":1160},[1137,1914,1361],{"class":1360},[1137,1916,1824],{"class":1364},[1137,1918,1844],{"class":1607},[1137,1920,1921],{"class":1364}," new",[1137,1923,1924],{"class":1160}," Date",[1137,1926,1927],{"class":1360},"())\n",[1137,1929,1930,1932],{"class":1139,"line":1432},[1137,1931,1496],{"class":1364},[1137,1933,1499],{"class":1360},[1137,1935,1936],{"class":1139,"line":1443},[1137,1937,1429],{"emptyLinePlaceholder":21},[1137,1939,1940,1942,1944,1947,1949,1951,1954,1956,1959,1963,1966,1968,1971],{"class":1139,"line":1459},[1137,1941,1351],{"class":1350},[1137,1943,1792],{"class":1607},[1137,1945,1946],{"class":1360}," chatsRelations ",[1137,1948,1611],{"class":1364},[1137,1950,1770],{"class":1160},[1137,1952,1953],{"class":1360},"(chats",[1137,1955,1735],{"class":1364},[1137,1957,1958],{"class":1364}," ({",[1137,1960,1962],{"class":1961},"sHdIc"," many",[1137,1964,1965],{"class":1364}," })",[1137,1967,1844],{"class":1607},[1137,1969,1970],{"class":1360}," (",[1137,1972,1365],{"class":1364},[1137,1974,1975,1978,1980,1982],{"class":1139,"line":1465},[1137,1976,1977],{"class":1370},"  messages",[1137,1979,1374],{"class":1364},[1137,1981,1962],{"class":1160},[1137,1983,1984],{"class":1360},"(messages)\n",[1137,1986,1987,1989],{"class":1139,"line":1470},[1137,1988,1496],{"class":1364},[1137,1990,1991],{"class":1360},"))\n",[1137,1993,1994],{"class":1139,"line":1493},[1137,1995,1429],{"emptyLinePlaceholder":21},[1137,1997,1999,2001,2003,2006,2008,2010,2012,2014,2017,2019,2021],{"class":1139,"line":1998},14,[1137,2000,1351],{"class":1350},[1137,2002,1792],{"class":1607},[1137,2004,2005],{"class":1360}," messages ",[1137,2007,1611],{"class":1364},[1137,2009,1732],{"class":1160},[1137,2011,1361],{"class":1360},[1137,2013,1389],{"class":1364},[1137,2015,2016],{"class":1147},"messages",[1137,2018,1389],{"class":1364},[1137,2020,1735],{"class":1364},[1137,2022,1440],{"class":1364},[1137,2024,2026,2028,2030,2032,2034,2036,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067],{"class":1139,"line":2025},15,[1137,2027,1817],{"class":1370},[1137,2029,1374],{"class":1364},[1137,2031,1738],{"class":1160},[1137,2033,1361],{"class":1360},[1137,2035,1389],{"class":1364},[1137,2037,2038],{"class":1147},"id",[1137,2040,1389],{"class":1364},[1137,2042,1901],{"class":1360},[1137,2044,1827],{"class":1364},[1137,2046,1830],{"class":1160},[1137,2048,1824],{"class":1360},[1137,2050,1827],{"class":1364},[1137,2052,1837],{"class":1160},[1137,2054,1361],{"class":1360},[1137,2056,1824],{"class":1364},[1137,2058,1844],{"class":1607},[1137,2060,1847],{"class":1360},[1137,2062,1827],{"class":1364},[1137,2064,1852],{"class":1160},[1137,2066,1855],{"class":1360},[1137,2068,1392],{"class":1364},[1137,2070,2072,2075,2077,2079,2081,2083,2086,2088,2090,2092,2094,2096,2098,2101,2103,2105,2107,2110,2112,2114,2116,2118,2121,2123,2125,2128,2130,2132,2134],{"class":1139,"line":2071},16,[1137,2073,2074],{"class":1370},"  chatId",[1137,2076,1374],{"class":1364},[1137,2078,1738],{"class":1160},[1137,2080,1361],{"class":1360},[1137,2082,1389],{"class":1364},[1137,2084,2085],{"class":1147},"chat_id",[1137,2087,1389],{"class":1364},[1137,2089,1901],{"class":1360},[1137,2091,1827],{"class":1364},[1137,2093,1906],{"class":1160},[1137,2095,1824],{"class":1360},[1137,2097,1827],{"class":1364},[1137,2099,2100],{"class":1160},"references",[1137,2102,1361],{"class":1360},[1137,2104,1824],{"class":1364},[1137,2106,1844],{"class":1607},[1137,2108,2109],{"class":1360}," chats",[1137,2111,1827],{"class":1364},[1137,2113,2038],{"class":1360},[1137,2115,1735],{"class":1364},[1137,2117,1729],{"class":1364},[1137,2119,2120],{"class":1370}," onDelete",[1137,2122,1374],{"class":1364},[1137,2124,1451],{"class":1364},[1137,2126,2127],{"class":1147},"cascade",[1137,2129,1389],{"class":1364},[1137,2131,1751],{"class":1364},[1137,2133,1901],{"class":1360},[1137,2135,1392],{"class":1364},[1137,2137,2139,2142,2144,2146,2148,2150,2153,2155,2157,2159,2162,2164,2166,2168,2171,2173,2175,2177,2180,2182,2184,2186,2189,2191,2194,2196,2198,2200,2202,2204],{"class":1139,"line":2138},17,[1137,2140,2141],{"class":1370},"  role",[1137,2143,1374],{"class":1364},[1137,2145,1738],{"class":1160},[1137,2147,1361],{"class":1360},[1137,2149,1389],{"class":1364},[1137,2151,2152],{"class":1147},"role",[1137,2154,1389],{"class":1364},[1137,2156,1735],{"class":1364},[1137,2158,1729],{"class":1364},[1137,2160,2161],{"class":1370}," enum",[1137,2163,1374],{"class":1364},[1137,2165,1478],{"class":1360},[1137,2167,1389],{"class":1364},[1137,2169,2170],{"class":1147},"user",[1137,2172,1389],{"class":1364},[1137,2174,1735],{"class":1364},[1137,2176,1451],{"class":1364},[1137,2178,2179],{"class":1147},"assistant",[1137,2181,1389],{"class":1364},[1137,2183,1735],{"class":1364},[1137,2185,1451],{"class":1364},[1137,2187,2188],{"class":1147},"system",[1137,2190,1389],{"class":1364},[1137,2192,2193],{"class":1360},"] ",[1137,2195,1496],{"class":1364},[1137,2197,1901],{"class":1360},[1137,2199,1827],{"class":1364},[1137,2201,1906],{"class":1160},[1137,2203,1824],{"class":1360},[1137,2205,1392],{"class":1364},[1137,2207,2209,2212,2214,2216,2218,2220,2223,2225,2227,2229,2231,2233,2235,2238,2240,2242,2244],{"class":1139,"line":2208},18,[1137,2210,2211],{"class":1370},"  parts",[1137,2213,1374],{"class":1364},[1137,2215,1738],{"class":1160},[1137,2217,1361],{"class":1360},[1137,2219,1389],{"class":1364},[1137,2221,2222],{"class":1147},"parts",[1137,2224,1389],{"class":1364},[1137,2226,1735],{"class":1364},[1137,2228,1729],{"class":1364},[1137,2230,1887],{"class":1370},[1137,2232,1374],{"class":1364},[1137,2234,1451],{"class":1364},[1137,2236,2237],{"class":1147},"json",[1137,2239,1389],{"class":1364},[1137,2241,1751],{"class":1364},[1137,2243,1901],{"class":1360},[1137,2245,1392],{"class":1364},[1137,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295],{"class":1139,"line":2248},19,[1137,2250,1875],{"class":1370},[1137,2252,1374],{"class":1364},[1137,2254,1743],{"class":1160},[1137,2256,1361],{"class":1360},[1137,2258,1884],{"class":1364},[1137,2260,1887],{"class":1370},[1137,2262,1374],{"class":1364},[1137,2264,1451],{"class":1364},[1137,2266,1894],{"class":1147},[1137,2268,1389],{"class":1364},[1137,2270,1751],{"class":1364},[1137,2272,1901],{"class":1360},[1137,2274,1827],{"class":1364},[1137,2276,1906],{"class":1160},[1137,2278,1824],{"class":1360},[1137,2280,1827],{"class":1364},[1137,2282,1837],{"class":1160},[1137,2284,1361],{"class":1360},[1137,2286,1824],{"class":1364},[1137,2288,1844],{"class":1607},[1137,2290,1921],{"class":1364},[1137,2292,1924],{"class":1160},[1137,2294,1855],{"class":1360},[1137,2296,1392],{"class":1364},[1137,2298,2300,2303,2306,2308],{"class":1139,"line":2299},20,[1137,2301,2302],{"class":1364},"},",[1137,2304,2305],{"class":1961}," table",[1137,2307,1844],{"class":1607},[1137,2309,1377],{"class":1360},[1137,2311,2313,2316,2318,2320,2323,2325,2327,2329,2332,2335,2337],{"class":1139,"line":2312},21,[1137,2314,2315],{"class":1160},"  index",[1137,2317,1361],{"class":1360},[1137,2319,1389],{"class":1364},[1137,2321,2322],{"class":1147},"messages_chat_id_idx",[1137,2324,1389],{"class":1364},[1137,2326,1901],{"class":1360},[1137,2328,1827],{"class":1364},[1137,2330,2331],{"class":1160},"on",[1137,2333,2334],{"class":1360},"(table",[1137,2336,1827],{"class":1364},[1137,2338,2339],{"class":1360},"chatId)\n",[1137,2341,2343],{"class":1139,"line":2342},22,[1137,2344,2345],{"class":1360},"])\n",[1137,2347,2349],{"class":1139,"line":2348},23,[1137,2350,1429],{"emptyLinePlaceholder":21},[1137,2352,2354,2356,2358,2361,2363,2365,2368,2370,2372,2375,2377,2379,2381],{"class":1139,"line":2353},24,[1137,2355,1351],{"class":1350},[1137,2357,1792],{"class":1607},[1137,2359,2360],{"class":1360}," messagesRelations ",[1137,2362,1611],{"class":1364},[1137,2364,1770],{"class":1160},[1137,2366,2367],{"class":1360},"(messages",[1137,2369,1735],{"class":1364},[1137,2371,1958],{"class":1364},[1137,2373,2374],{"class":1961}," one",[1137,2376,1965],{"class":1364},[1137,2378,1844],{"class":1607},[1137,2380,1970],{"class":1360},[1137,2382,1365],{"class":1364},[1137,2384,2386,2389,2391,2393,2395,2397],{"class":1139,"line":2385},25,[1137,2387,2388],{"class":1370},"  chat",[1137,2390,1374],{"class":1364},[1137,2392,2374],{"class":1160},[1137,2394,1953],{"class":1360},[1137,2396,1735],{"class":1364},[1137,2398,1440],{"class":1364},[1137,2400,2402,2405,2407,2410,2412,2415],{"class":1139,"line":2401},26,[1137,2403,2404],{"class":1370},"    fields",[1137,2406,1374],{"class":1364},[1137,2408,2409],{"class":1360}," [messages",[1137,2411,1827],{"class":1364},[1137,2413,2414],{"class":1360},"chatId]",[1137,2416,1392],{"class":1364},[1137,2418,2420,2423,2425,2428,2430],{"class":1139,"line":2419},27,[1137,2421,2422],{"class":1370},"    references",[1137,2424,1374],{"class":1364},[1137,2426,2427],{"class":1360}," [chats",[1137,2429,1827],{"class":1364},[1137,2431,2432],{"class":1360},"id]\n",[1137,2434,2436,2439],{"class":1139,"line":2435},28,[1137,2437,2438],{"class":1364},"  }",[1137,2440,1499],{"class":1360},[1137,2442,2444,2446],{"class":1139,"line":2443},29,[1137,2445,1496],{"class":1364},[1137,2447,1991],{"class":1360},[1027,2449,2450],{},"Generate the database migrations from your schema:",[1128,2452,2454],{"className":1130,"code":2453,"language":1132,"meta":1133,"style":1133},"npx nuxt db generate\n",[1087,2455,2456],{"__ignoreMap":1133},[1137,2457,2458,2460,2463,2466],{"class":1139,"line":1140},[1137,2459,1144],{"class":1143},[1137,2461,2462],{"class":1147}," nuxt",[1137,2464,2465],{"class":1147}," db",[1137,2467,2468],{"class":1147}," generate\n",[2470,2471,2472],"tip",{},[1027,2473,2474,2475,2478],{},"Migrations are automatically applied when you start the development server with ",[1087,2476,2477],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[1031,2480,2482],{"id":2481},"building-the-backend","Building the backend",[1027,2484,2485,2486,1827],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1081,2487,2490],{"href":2488,"rel":2489},"https:\u002F\u002Fnitro.build",[1085],"Nitro",[1165,2492,2494],{"id":2493},"creating-a-chat","Creating a chat",[1027,2496,2497,2498,2505],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1081,2499,2502],{"href":2500,"rel":2501},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fui-message",[1085],[1087,2503,2504],{},"UIMessage"," type from the AI SDK:",[1337,2507,2508],{},[1128,2509,2512],{"className":1341,"code":2510,"filename":2511,"language":1343,"meta":1133,"style":1133},"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",[1087,2513,2514,2538,2561,2585,2605,2609,2633,2670,2694,2707,2711,2717,2768,2772,2777,2806,2822,2837,2851,2857,2861,2869],{"__ignoreMap":1133},[1137,2515,2516,2518,2520,2523,2525,2528,2530,2532,2534,2536],{"class":1139,"line":1140},[1137,2517,1726],{"class":1350},[1137,2519,1729],{"class":1364},[1137,2521,2522],{"class":1360}," defineEventHandler",[1137,2524,1735],{"class":1364},[1137,2526,2527],{"class":1360}," readValidatedBody",[1137,2529,1751],{"class":1364},[1137,2531,1754],{"class":1350},[1137,2533,1451],{"class":1364},[1137,2535,1165],{"class":1147},[1137,2537,1415],{"class":1364},[1137,2539,2540,2542,2545,2547,2550,2552,2554,2556,2559],{"class":1139,"line":1157},[1137,2541,1726],{"class":1350},[1137,2543,2544],{"class":1350}," type",[1137,2546,1729],{"class":1364},[1137,2548,2549],{"class":1360}," UIMessage",[1137,2551,1751],{"class":1364},[1137,2553,1754],{"class":1350},[1137,2555,1451],{"class":1364},[1137,2557,2558],{"class":1147},"ai",[1137,2560,1415],{"class":1364},[1137,2562,2563,2565,2567,2569,2571,2574,2576,2578,2580,2583],{"class":1139,"line":1380},[1137,2564,1726],{"class":1350},[1137,2566,1729],{"class":1364},[1137,2568,2465],{"class":1360},[1137,2570,1735],{"class":1364},[1137,2572,2573],{"class":1360}," schema",[1137,2575,1751],{"class":1364},[1137,2577,1754],{"class":1350},[1137,2579,1451],{"class":1364},[1137,2581,2582],{"class":1147},"hub:db",[1137,2584,1415],{"class":1364},[1137,2586,2587,2589,2591,2594,2596,2598,2600,2603],{"class":1139,"line":1395},[1137,2588,1726],{"class":1350},[1137,2590,1729],{"class":1364},[1137,2592,2593],{"class":1360}," z",[1137,2595,1751],{"class":1364},[1137,2597,1754],{"class":1350},[1137,2599,1451],{"class":1364},[1137,2601,2602],{"class":1147},"zod",[1137,2604,1415],{"class":1364},[1137,2606,2607],{"class":1139,"line":1407},[1137,2608,1429],{"emptyLinePlaceholder":21},[1137,2610,2611,2613,2615,2617,2619,2622,2624,2627,2629,2631],{"class":1139,"line":1418},[1137,2612,1351],{"class":1350},[1137,2614,1354],{"class":1350},[1137,2616,2522],{"class":1160},[1137,2618,1361],{"class":1360},[1137,2620,2621],{"class":1607},"async",[1137,2623,1970],{"class":1364},[1137,2625,2626],{"class":1961},"event",[1137,2628,1901],{"class":1364},[1137,2630,1844],{"class":1607},[1137,2632,1440],{"class":1364},[1137,2634,2635,2638,2640,2643,2645,2648,2651,2653,2655,2657,2659,2661,2663,2666,2668],{"class":1139,"line":1426},[1137,2636,2637],{"class":1607},"  const",[1137,2639,1729],{"class":1364},[1137,2641,2642],{"class":1360}," message",[1137,2644,1751],{"class":1364},[1137,2646,2647],{"class":1364}," =",[1137,2649,2650],{"class":1350}," await",[1137,2652,2527],{"class":1160},[1137,2654,1361],{"class":1370},[1137,2656,2626],{"class":1360},[1137,2658,1735],{"class":1364},[1137,2660,2593],{"class":1360},[1137,2662,1827],{"class":1364},[1137,2664,2665],{"class":1160},"object",[1137,2667,1361],{"class":1370},[1137,2669,1365],{"class":1364},[1137,2671,2672,2675,2677,2679,2681,2684,2686,2688,2691],{"class":1139,"line":1432},[1137,2673,2674],{"class":1370},"    message",[1137,2676,1374],{"class":1364},[1137,2678,2593],{"class":1360},[1137,2680,1827],{"class":1364},[1137,2682,2683],{"class":1160},"custom",[1137,2685,1579],{"class":1364},[1137,2687,2504],{"class":1143},[1137,2689,2690],{"class":1364},">",[1137,2692,2693],{"class":1370},"()\n",[1137,2695,2696,2698,2700,2702,2705],{"class":1139,"line":1443},[1137,2697,2438],{"class":1364},[1137,2699,1901],{"class":1370},[1137,2701,1827],{"class":1364},[1137,2703,2704],{"class":1360},"parse",[1137,2706,1499],{"class":1370},[1137,2708,2709],{"class":1139,"line":1459},[1137,2710,1429],{"emptyLinePlaceholder":21},[1137,2712,2713],{"class":1139,"line":1465},[1137,2714,2716],{"class":2715},"sHwdD","  \u002F\u002F Create a new chat\n",[1137,2718,2719,2721,2723,2725,2727,2729,2731,2733,2735,2738,2740,2743,2745,2747,2749,2751,2754,2756,2759,2761,2763,2766],{"class":1139,"line":1470},[1137,2720,2637],{"class":1607},[1137,2722,1478],{"class":1364},[1137,2724,266],{"class":1360},[1137,2726,1488],{"class":1364},[1137,2728,2647],{"class":1364},[1137,2730,2650],{"class":1350},[1137,2732,2465],{"class":1360},[1137,2734,1827],{"class":1364},[1137,2736,2737],{"class":1160},"insert",[1137,2739,1361],{"class":1370},[1137,2741,2742],{"class":1360},"schema",[1137,2744,1827],{"class":1364},[1137,2746,1806],{"class":1360},[1137,2748,1901],{"class":1370},[1137,2750,1827],{"class":1364},[1137,2752,2753],{"class":1160},"values",[1137,2755,1361],{"class":1370},[1137,2757,2758],{"class":1364},"{}",[1137,2760,1901],{"class":1370},[1137,2762,1827],{"class":1364},[1137,2764,2765],{"class":1160},"returning",[1137,2767,2693],{"class":1370},[1137,2769,2770],{"class":1139,"line":1493},[1137,2771,1429],{"emptyLinePlaceholder":21},[1137,2773,2774],{"class":1139,"line":1998},[1137,2775,2776],{"class":2715},"  \u002F\u002F Save the first user message\n",[1137,2778,2779,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804],{"class":1139,"line":2025},[1137,2780,2781],{"class":1350},"  await",[1137,2783,2465],{"class":1360},[1137,2785,1827],{"class":1364},[1137,2787,2737],{"class":1160},[1137,2789,1361],{"class":1370},[1137,2791,2742],{"class":1360},[1137,2793,1827],{"class":1364},[1137,2795,2016],{"class":1360},[1137,2797,1901],{"class":1370},[1137,2799,1827],{"class":1364},[1137,2801,2753],{"class":1160},[1137,2803,1361],{"class":1370},[1137,2805,1365],{"class":1364},[1137,2807,2808,2811,2813,2816,2818,2820],{"class":1139,"line":2071},[1137,2809,2810],{"class":1370},"    chatId",[1137,2812,1374],{"class":1364},[1137,2814,2815],{"class":1360}," chat",[1137,2817,1827],{"class":1364},[1137,2819,2038],{"class":1360},[1137,2821,1392],{"class":1364},[1137,2823,2824,2827,2829,2831,2833,2835],{"class":1139,"line":2138},[1137,2825,2826],{"class":1370},"    role",[1137,2828,1374],{"class":1364},[1137,2830,1451],{"class":1364},[1137,2832,2170],{"class":1147},[1137,2834,1389],{"class":1364},[1137,2836,1392],{"class":1364},[1137,2838,2839,2842,2844,2846,2848],{"class":1139,"line":2208},[1137,2840,2841],{"class":1370},"    parts",[1137,2843,1374],{"class":1364},[1137,2845,2642],{"class":1360},[1137,2847,1827],{"class":1364},[1137,2849,2850],{"class":1360},"parts\n",[1137,2852,2853,2855],{"class":1139,"line":2248},[1137,2854,2438],{"class":1364},[1137,2856,1499],{"class":1370},[1137,2858,2859],{"class":1139,"line":2299},[1137,2860,1429],{"emptyLinePlaceholder":21},[1137,2862,2863,2866],{"class":1139,"line":2312},[1137,2864,2865],{"class":1350},"  return",[1137,2867,2868],{"class":1360}," chat\n",[1137,2870,2871,2873],{"class":1139,"line":2342},[1137,2872,1496],{"class":1364},[1137,2874,1499],{"class":1360},[1165,2876,2878],{"id":2877},"streaming-ai-responses","Streaming AI responses",[1027,2880,2881,2882,2889,2890,2897,2898,2905],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1081,2883,2886],{"href":2884,"rel":2885},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1085],[1087,2887,2888],{},"streamText",", ",[1081,2891,2894],{"href":2892,"rel":2893},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1085],[1087,2895,2896],{},"createUIMessageStream",", and ",[1081,2899,2902],{"href":2900,"rel":2901},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1085],[1087,2903,2904],{},"createUIMessageStreamResponse"," from the AI SDK:",[1337,2907,2908],{},[1714,2909,2910],{},[1128,2911,2914],{"className":1341,"code":2912,"filename":2913,"language":1343,"meta":1133,"style":1133},"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  toUIMessageStream\n} from 'ai'\nimport type { UIMessage } from 'ai'\n\nconst DEFAULT_MODEL = 'anthropic\u002Fclaude-haiku-4.5'\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 = DEFAULT_MODEL, messages } = await readValidatedBody(event, z.object({\n    model: z.string().refine(value => MODELS.some(m => m.value === value), {\n      message: 'Invalid model'\n    }).optional(),\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: DEFAULT_MODEL,\n      instructions: `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        instructions: `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(toUIMessageStream({ stream: result.stream }))\n    },\n    onEnd: 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",[1087,2915,2916,2948,2967,2989,3007,3013,3020,3027,3034,3041,3048,3053,3065,3085,3089,3106,3110,3121,3155,3184,3215,3220,3224,3246,3279,3295,3307,3311,3354,3414,3429,3446,3478,3491,3496,3502,3533,3577,3584,3589,3607,3646,3652,3657,3663,3683,3711,3723,3742,3770,3777,3782,3848,3853,3858,3864,3893,3934,3963,3975,3991,4005,4012,4017,4022,4028,4045,4067,4085,4093,4110,4131,4141,4151,4161,4178,4189,4195,4201,4211,4221,4235,4250,4255,4260,4270,4286,4301,4307,4313,4321,4326,4332,4352,4367,4384,4407,4418,4426,4432,4437,4472,4478,4498,4504,4550,4566,4599,4613,4621,4627,4634,4639,4657],{"__ignoreMap":1133},[1137,2917,2918,2920,2922,2925,2927,2929,2931,2934,2936,2938,2940,2942,2944,2946],{"class":1139,"line":1140},[1137,2919,1726],{"class":1350},[1137,2921,1729],{"class":1364},[1137,2923,2924],{"class":1360}," createError",[1137,2926,1735],{"class":1364},[1137,2928,2522],{"class":1360},[1137,2930,1735],{"class":1364},[1137,2932,2933],{"class":1360}," getValidatedRouterParams",[1137,2935,1735],{"class":1364},[1137,2937,2527],{"class":1360},[1137,2939,1751],{"class":1364},[1137,2941,1754],{"class":1350},[1137,2943,1451],{"class":1364},[1137,2945,1165],{"class":1147},[1137,2947,1415],{"class":1364},[1137,2949,2950,2952,2954,2957,2959,2961,2963,2965],{"class":1139,"line":1157},[1137,2951,1726],{"class":1350},[1137,2953,1729],{"class":1364},[1137,2955,2956],{"class":1360}," eq",[1137,2958,1751],{"class":1364},[1137,2960,1754],{"class":1350},[1137,2962,1451],{"class":1364},[1137,2964,1779],{"class":1147},[1137,2966,1415],{"class":1364},[1137,2968,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987],{"class":1139,"line":1380},[1137,2970,1726],{"class":1350},[1137,2972,1729],{"class":1364},[1137,2974,2465],{"class":1360},[1137,2976,1735],{"class":1364},[1137,2978,2573],{"class":1360},[1137,2980,1751],{"class":1364},[1137,2982,1754],{"class":1350},[1137,2984,1451],{"class":1364},[1137,2986,2582],{"class":1147},[1137,2988,1415],{"class":1364},[1137,2990,2991,2993,2995,2997,2999,3001,3003,3005],{"class":1139,"line":1395},[1137,2992,1726],{"class":1350},[1137,2994,1729],{"class":1364},[1137,2996,2593],{"class":1360},[1137,2998,1751],{"class":1364},[1137,3000,1754],{"class":1350},[1137,3002,1451],{"class":1364},[1137,3004,2602],{"class":1147},[1137,3006,1415],{"class":1364},[1137,3008,3009,3011],{"class":1139,"line":1407},[1137,3010,1726],{"class":1350},[1137,3012,1440],{"class":1364},[1137,3014,3015,3018],{"class":1139,"line":1418},[1137,3016,3017],{"class":1360},"  convertToModelMessages",[1137,3019,1392],{"class":1364},[1137,3021,3022,3025],{"class":1139,"line":1426},[1137,3023,3024],{"class":1360},"  createUIMessageStream",[1137,3026,1392],{"class":1364},[1137,3028,3029,3032],{"class":1139,"line":1432},[1137,3030,3031],{"class":1360},"  createUIMessageStreamResponse",[1137,3033,1392],{"class":1364},[1137,3035,3036,3039],{"class":1139,"line":1443},[1137,3037,3038],{"class":1360},"  generateText",[1137,3040,1392],{"class":1364},[1137,3042,3043,3046],{"class":1139,"line":1459},[1137,3044,3045],{"class":1360},"  streamText",[1137,3047,1392],{"class":1364},[1137,3049,3050],{"class":1139,"line":1465},[1137,3051,3052],{"class":1360},"  toUIMessageStream\n",[1137,3054,3055,3057,3059,3061,3063],{"class":1139,"line":1470},[1137,3056,1496],{"class":1364},[1137,3058,1754],{"class":1350},[1137,3060,1451],{"class":1364},[1137,3062,2558],{"class":1147},[1137,3064,1415],{"class":1364},[1137,3066,3067,3069,3071,3073,3075,3077,3079,3081,3083],{"class":1139,"line":1493},[1137,3068,1726],{"class":1350},[1137,3070,2544],{"class":1350},[1137,3072,1729],{"class":1364},[1137,3074,2549],{"class":1360},[1137,3076,1751],{"class":1364},[1137,3078,1754],{"class":1350},[1137,3080,1451],{"class":1364},[1137,3082,2558],{"class":1147},[1137,3084,1415],{"class":1364},[1137,3086,3087],{"class":1139,"line":1998},[1137,3088,1429],{"emptyLinePlaceholder":21},[1137,3090,3091,3094,3097,3099,3101,3104],{"class":1139,"line":2025},[1137,3092,3093],{"class":1607},"const",[1137,3095,3096],{"class":1360}," DEFAULT_MODEL ",[1137,3098,1611],{"class":1364},[1137,3100,1451],{"class":1364},[1137,3102,3103],{"class":1147},"anthropic\u002Fclaude-haiku-4.5",[1137,3105,1415],{"class":1364},[1137,3107,3108],{"class":1139,"line":2071},[1137,3109,1429],{"emptyLinePlaceholder":21},[1137,3111,3112,3114,3117,3119],{"class":1139,"line":2138},[1137,3113,3093],{"class":1607},[1137,3115,3116],{"class":1360}," MODELS ",[1137,3118,1611],{"class":1364},[1137,3120,1377],{"class":1360},[1137,3122,3123,3126,3129,3131,3133,3136,3138,3140,3143,3145,3147,3150,3152],{"class":1139,"line":2208},[1137,3124,3125],{"class":1364},"  {",[1137,3127,3128],{"class":1370}," value",[1137,3130,1374],{"class":1364},[1137,3132,1451],{"class":1364},[1137,3134,3135],{"class":1147},"openai\u002Fgpt-5-nano",[1137,3137,1389],{"class":1364},[1137,3139,1735],{"class":1364},[1137,3141,3142],{"class":1370}," label",[1137,3144,1374],{"class":1364},[1137,3146,1451],{"class":1364},[1137,3148,3149],{"class":1147},"GPT-5 Nano",[1137,3151,1389],{"class":1364},[1137,3153,3154],{"class":1364}," },\n",[1137,3156,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3180,3182],{"class":1139,"line":2248},[1137,3158,3125],{"class":1364},[1137,3160,3128],{"class":1370},[1137,3162,1374],{"class":1364},[1137,3164,1451],{"class":1364},[1137,3166,3103],{"class":1147},[1137,3168,1389],{"class":1364},[1137,3170,1735],{"class":1364},[1137,3172,3142],{"class":1370},[1137,3174,1374],{"class":1364},[1137,3176,1451],{"class":1364},[1137,3178,3179],{"class":1147},"Claude Haiku 4.5",[1137,3181,1389],{"class":1364},[1137,3183,3154],{"class":1364},[1137,3185,3186,3188,3190,3192,3194,3197,3199,3201,3203,3205,3207,3210,3212],{"class":1139,"line":2299},[1137,3187,3125],{"class":1364},[1137,3189,3128],{"class":1370},[1137,3191,1374],{"class":1364},[1137,3193,1451],{"class":1364},[1137,3195,3196],{"class":1147},"google\u002Fgemini-3-flash",[1137,3198,1389],{"class":1364},[1137,3200,1735],{"class":1364},[1137,3202,3142],{"class":1370},[1137,3204,1374],{"class":1364},[1137,3206,1451],{"class":1364},[1137,3208,3209],{"class":1147},"Gemini 3 Flash",[1137,3211,1389],{"class":1364},[1137,3213,3214],{"class":1364}," }\n",[1137,3216,3217],{"class":1139,"line":2312},[1137,3218,3219],{"class":1360},"]\n",[1137,3221,3222],{"class":1139,"line":2342},[1137,3223,1429],{"emptyLinePlaceholder":21},[1137,3225,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244],{"class":1139,"line":2348},[1137,3227,1351],{"class":1350},[1137,3229,1354],{"class":1350},[1137,3231,2522],{"class":1160},[1137,3233,1361],{"class":1360},[1137,3235,2621],{"class":1607},[1137,3237,1970],{"class":1364},[1137,3239,2626],{"class":1961},[1137,3241,1901],{"class":1364},[1137,3243,1844],{"class":1607},[1137,3245,1440],{"class":1364},[1137,3247,3248,3250,3252,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277],{"class":1139,"line":2353},[1137,3249,2637],{"class":1607},[1137,3251,1729],{"class":1364},[1137,3253,3254],{"class":1360}," id",[1137,3256,1751],{"class":1364},[1137,3258,2647],{"class":1364},[1137,3260,2650],{"class":1350},[1137,3262,2933],{"class":1160},[1137,3264,1361],{"class":1370},[1137,3266,2626],{"class":1360},[1137,3268,1735],{"class":1364},[1137,3270,2593],{"class":1360},[1137,3272,1827],{"class":1364},[1137,3274,2665],{"class":1160},[1137,3276,1361],{"class":1370},[1137,3278,1365],{"class":1364},[1137,3280,3281,3284,3286,3288,3290,3293],{"class":1139,"line":2385},[1137,3282,3283],{"class":1370},"    id",[1137,3285,1374],{"class":1364},[1137,3287,2593],{"class":1360},[1137,3289,1827],{"class":1364},[1137,3291,3292],{"class":1160},"string",[1137,3294,2693],{"class":1370},[1137,3296,3297,3299,3301,3303,3305],{"class":1139,"line":2401},[1137,3298,2438],{"class":1364},[1137,3300,1901],{"class":1370},[1137,3302,1827],{"class":1364},[1137,3304,2704],{"class":1360},[1137,3306,1499],{"class":1370},[1137,3308,3309],{"class":1139,"line":2419},[1137,3310,1429],{"emptyLinePlaceholder":21},[1137,3312,3313,3315,3317,3320,3322,3325,3327,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352],{"class":1139,"line":2435},[1137,3314,2637],{"class":1607},[1137,3316,1729],{"class":1364},[1137,3318,3319],{"class":1360}," model",[1137,3321,2647],{"class":1364},[1137,3323,3324],{"class":1360}," DEFAULT_MODEL",[1137,3326,1735],{"class":1364},[1137,3328,3329],{"class":1360}," messages",[1137,3331,1751],{"class":1364},[1137,3333,2647],{"class":1364},[1137,3335,2650],{"class":1350},[1137,3337,2527],{"class":1160},[1137,3339,1361],{"class":1370},[1137,3341,2626],{"class":1360},[1137,3343,1735],{"class":1364},[1137,3345,2593],{"class":1360},[1137,3347,1827],{"class":1364},[1137,3349,2665],{"class":1160},[1137,3351,1361],{"class":1370},[1137,3353,1365],{"class":1364},[1137,3355,3356,3359,3361,3363,3365,3367,3369,3371,3374,3376,3379,3381,3384,3386,3389,3391,3394,3396,3399,3401,3403,3406,3408,3410,3412],{"class":1139,"line":2443},[1137,3357,3358],{"class":1370},"    model",[1137,3360,1374],{"class":1364},[1137,3362,2593],{"class":1360},[1137,3364,1827],{"class":1364},[1137,3366,3292],{"class":1160},[1137,3368,1824],{"class":1370},[1137,3370,1827],{"class":1364},[1137,3372,3373],{"class":1160},"refine",[1137,3375,1361],{"class":1370},[1137,3377,3378],{"class":1961},"value",[1137,3380,1844],{"class":1607},[1137,3382,3383],{"class":1360}," MODELS",[1137,3385,1827],{"class":1364},[1137,3387,3388],{"class":1160},"some",[1137,3390,1361],{"class":1370},[1137,3392,3393],{"class":1961},"m",[1137,3395,1844],{"class":1607},[1137,3397,3398],{"class":1360}," m",[1137,3400,1827],{"class":1364},[1137,3402,3378],{"class":1360},[1137,3404,3405],{"class":1364}," ===",[1137,3407,3128],{"class":1360},[1137,3409,1901],{"class":1370},[1137,3411,1735],{"class":1364},[1137,3413,1440],{"class":1364},[1137,3415,3417,3420,3422,3424,3427],{"class":1139,"line":3416},30,[1137,3418,3419],{"class":1370},"      message",[1137,3421,1374],{"class":1364},[1137,3423,1451],{"class":1364},[1137,3425,3426],{"class":1147},"Invalid model",[1137,3428,1415],{"class":1364},[1137,3430,3432,3435,3437,3439,3442,3444],{"class":1139,"line":3431},31,[1137,3433,3434],{"class":1364},"    }",[1137,3436,1901],{"class":1370},[1137,3438,1827],{"class":1364},[1137,3440,3441],{"class":1160},"optional",[1137,3443,1824],{"class":1370},[1137,3445,1392],{"class":1364},[1137,3447,3449,3452,3454,3456,3458,3461,3463,3466,3468,3470,3472,3474,3476],{"class":1139,"line":3448},32,[1137,3450,3451],{"class":1370},"    messages",[1137,3453,1374],{"class":1364},[1137,3455,2593],{"class":1360},[1137,3457,1827],{"class":1364},[1137,3459,3460],{"class":1160},"array",[1137,3462,1361],{"class":1370},[1137,3464,3465],{"class":1360},"z",[1137,3467,1827],{"class":1364},[1137,3469,2683],{"class":1160},[1137,3471,1579],{"class":1364},[1137,3473,2504],{"class":1143},[1137,3475,2690],{"class":1364},[1137,3477,1927],{"class":1370},[1137,3479,3481,3483,3485,3487,3489],{"class":1139,"line":3480},33,[1137,3482,2438],{"class":1364},[1137,3484,1901],{"class":1370},[1137,3486,1827],{"class":1364},[1137,3488,2704],{"class":1360},[1137,3490,1499],{"class":1370},[1137,3492,3494],{"class":1139,"line":3493},34,[1137,3495,1429],{"emptyLinePlaceholder":21},[1137,3497,3499],{"class":1139,"line":3498},35,[1137,3500,3501],{"class":2715},"  \u002F\u002F Fetch the chat from the database\n",[1137,3503,3505,3507,3509,3511,3513,3515,3517,3520,3522,3524,3526,3529,3531],{"class":1139,"line":3504},36,[1137,3506,2637],{"class":1607},[1137,3508,2815],{"class":1360},[1137,3510,2647],{"class":1364},[1137,3512,2650],{"class":1350},[1137,3514,2465],{"class":1360},[1137,3516,1827],{"class":1364},[1137,3518,3519],{"class":1360},"query",[1137,3521,1827],{"class":1364},[1137,3523,1806],{"class":1360},[1137,3525,1827],{"class":1364},[1137,3527,3528],{"class":1160},"findFirst",[1137,3530,1361],{"class":1370},[1137,3532,1365],{"class":1364},[1137,3534,3536,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3572,3575],{"class":1139,"line":3535},37,[1137,3537,3538],{"class":1160},"    where",[1137,3540,1374],{"class":1364},[1137,3542,1970],{"class":1364},[1137,3544,266],{"class":1961},[1137,3546,1735],{"class":1364},[1137,3548,1729],{"class":1364},[1137,3550,2956],{"class":1961},[1137,3552,1965],{"class":1364},[1137,3554,1844],{"class":1607},[1137,3556,2956],{"class":1160},[1137,3558,1361],{"class":1370},[1137,3560,266],{"class":1360},[1137,3562,1827],{"class":1364},[1137,3564,2038],{"class":1360},[1137,3566,1735],{"class":1364},[1137,3568,3254],{"class":1360},[1137,3570,3571],{"class":1350}," as",[1137,3573,3574],{"class":1143}," string",[1137,3576,1499],{"class":1370},[1137,3578,3580,3582],{"class":1139,"line":3579},38,[1137,3581,2438],{"class":1364},[1137,3583,1499],{"class":1370},[1137,3585,3587],{"class":1139,"line":3586},39,[1137,3588,1429],{"emptyLinePlaceholder":21},[1137,3590,3592,3595,3597,3600,3602,3605],{"class":1139,"line":3591},40,[1137,3593,3594],{"class":1350},"  if",[1137,3596,1970],{"class":1370},[1137,3598,3599],{"class":1364},"!",[1137,3601,266],{"class":1360},[1137,3603,3604],{"class":1370},") ",[1137,3606,1365],{"class":1364},[1137,3608,3610,3613,3615,3617,3619,3622,3624,3628,3630,3633,3635,3637,3640,3642,3644],{"class":1139,"line":3609},41,[1137,3611,3612],{"class":1350},"    throw",[1137,3614,2924],{"class":1160},[1137,3616,1361],{"class":1370},[1137,3618,1884],{"class":1364},[1137,3620,3621],{"class":1370}," statusCode",[1137,3623,1374],{"class":1364},[1137,3625,3627],{"class":3626},"sbssI"," 404",[1137,3629,1735],{"class":1364},[1137,3631,3632],{"class":1370}," statusMessage",[1137,3634,1374],{"class":1364},[1137,3636,1451],{"class":1364},[1137,3638,3639],{"class":1147},"Chat not found",[1137,3641,1389],{"class":1364},[1137,3643,1751],{"class":1364},[1137,3645,1499],{"class":1370},[1137,3647,3649],{"class":1139,"line":3648},42,[1137,3650,3651],{"class":1364},"  }\n",[1137,3653,3655],{"class":1139,"line":3654},43,[1137,3656,1429],{"emptyLinePlaceholder":21},[1137,3658,3660],{"class":1139,"line":3659},44,[1137,3661,3662],{"class":2715},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1137,3664,3666,3668,3670,3672,3674,3676,3679,3681],{"class":1139,"line":3665},45,[1137,3667,3594],{"class":1350},[1137,3669,1970],{"class":1370},[1137,3671,3599],{"class":1364},[1137,3673,266],{"class":1360},[1137,3675,1827],{"class":1364},[1137,3677,3678],{"class":1360},"title",[1137,3680,3604],{"class":1370},[1137,3682,1365],{"class":1364},[1137,3684,3686,3689,3691,3693,3695,3698,3700,3702,3704,3707,3709],{"class":1139,"line":3685},46,[1137,3687,3688],{"class":1607},"    const",[1137,3690,1729],{"class":1364},[1137,3692,1738],{"class":1370},[1137,3694,1374],{"class":1364},[1137,3696,3697],{"class":1360}," title",[1137,3699,1751],{"class":1364},[1137,3701,2647],{"class":1364},[1137,3703,2650],{"class":1350},[1137,3705,3706],{"class":1160}," generateText",[1137,3708,1361],{"class":1370},[1137,3710,1365],{"class":1364},[1137,3712,3714,3717,3719,3721],{"class":1139,"line":3713},47,[1137,3715,3716],{"class":1370},"      model",[1137,3718,1374],{"class":1364},[1137,3720,3324],{"class":1360},[1137,3722,1392],{"class":1364},[1137,3724,3726,3729,3731,3734,3737,3740],{"class":1139,"line":3725},48,[1137,3727,3728],{"class":1370},"      instructions",[1137,3730,1374],{"class":1364},[1137,3732,3733],{"class":1364}," `",[1137,3735,3736],{"class":1147},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1137,3738,3739],{"class":1364},"`",[1137,3741,1392],{"class":1364},[1137,3743,3745,3748,3750,3753,3755,3758,3760,3762,3765,3768],{"class":1139,"line":3744},49,[1137,3746,3747],{"class":1370},"      prompt",[1137,3749,1374],{"class":1364},[1137,3751,3752],{"class":1360}," JSON",[1137,3754,1827],{"class":1364},[1137,3756,3757],{"class":1160},"stringify",[1137,3759,1361],{"class":1370},[1137,3761,2016],{"class":1360},[1137,3763,3764],{"class":1370},"[",[1137,3766,3767],{"class":3626},"0",[1137,3769,2345],{"class":1370},[1137,3771,3773,3775],{"class":1139,"line":3772},50,[1137,3774,3434],{"class":1364},[1137,3776,1499],{"class":1370},[1137,3778,3780],{"class":1139,"line":3779},51,[1137,3781,1429],{"emptyLinePlaceholder":21},[1137,3783,3785,3788,3790,3792,3795,3797,3799,3801,3803,3805,3807,3810,3812,3814,3816,3818,3820,3822,3825,3827,3830,3832,3834,3836,3838,3840,3842,3844,3846],{"class":1139,"line":3784},52,[1137,3786,3787],{"class":1350},"    await",[1137,3789,2465],{"class":1360},[1137,3791,1827],{"class":1364},[1137,3793,3794],{"class":1160},"update",[1137,3796,1361],{"class":1370},[1137,3798,2742],{"class":1360},[1137,3800,1827],{"class":1364},[1137,3802,1806],{"class":1360},[1137,3804,1901],{"class":1370},[1137,3806,1827],{"class":1364},[1137,3808,3809],{"class":1160},"set",[1137,3811,1361],{"class":1370},[1137,3813,1884],{"class":1364},[1137,3815,3697],{"class":1360},[1137,3817,1751],{"class":1364},[1137,3819,1901],{"class":1370},[1137,3821,1827],{"class":1364},[1137,3823,3824],{"class":1160},"where",[1137,3826,1361],{"class":1370},[1137,3828,3829],{"class":1160},"eq",[1137,3831,1361],{"class":1370},[1137,3833,2742],{"class":1360},[1137,3835,1827],{"class":1364},[1137,3837,1806],{"class":1360},[1137,3839,1827],{"class":1364},[1137,3841,2038],{"class":1360},[1137,3843,1735],{"class":1364},[1137,3845,3254],{"class":1360},[1137,3847,1991],{"class":1370},[1137,3849,3851],{"class":1139,"line":3850},53,[1137,3852,3651],{"class":1364},[1137,3854,3856],{"class":1139,"line":3855},54,[1137,3857,1429],{"emptyLinePlaceholder":21},[1137,3859,3861],{"class":1139,"line":3860},55,[1137,3862,3863],{"class":2715},"  \u002F\u002F Save the user message if it's a follow-up\n",[1137,3865,3867,3869,3872,3874,3876,3878,3880,3882,3885,3888,3891],{"class":1139,"line":3866},56,[1137,3868,2637],{"class":1607},[1137,3870,3871],{"class":1360}," lastMessage",[1137,3873,2647],{"class":1364},[1137,3875,3329],{"class":1360},[1137,3877,3764],{"class":1370},[1137,3879,2016],{"class":1360},[1137,3881,1827],{"class":1364},[1137,3883,3884],{"class":1360},"length",[1137,3886,3887],{"class":1364}," -",[1137,3889,3890],{"class":3626}," 1",[1137,3892,3219],{"class":1370},[1137,3894,3896,3898,3900,3903,3906,3908,3910,3912,3914,3916,3919,3921,3923,3925,3928,3930,3932],{"class":1139,"line":3895},57,[1137,3897,3594],{"class":1350},[1137,3899,1970],{"class":1370},[1137,3901,3902],{"class":1360},"lastMessage",[1137,3904,3905],{"class":1364},"?.",[1137,3907,2152],{"class":1360},[1137,3909,3405],{"class":1364},[1137,3911,1451],{"class":1364},[1137,3913,2170],{"class":1147},[1137,3915,1389],{"class":1364},[1137,3917,3918],{"class":1364}," &&",[1137,3920,3329],{"class":1360},[1137,3922,1827],{"class":1364},[1137,3924,3884],{"class":1360},[1137,3926,3927],{"class":1364}," >",[1137,3929,3890],{"class":3626},[1137,3931,3604],{"class":1370},[1137,3933,1365],{"class":1364},[1137,3935,3937,3939,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961],{"class":1139,"line":3936},58,[1137,3938,3787],{"class":1350},[1137,3940,2465],{"class":1360},[1137,3942,1827],{"class":1364},[1137,3944,2737],{"class":1160},[1137,3946,1361],{"class":1370},[1137,3948,2742],{"class":1360},[1137,3950,1827],{"class":1364},[1137,3952,2016],{"class":1360},[1137,3954,1901],{"class":1370},[1137,3956,1827],{"class":1364},[1137,3958,2753],{"class":1160},[1137,3960,1361],{"class":1370},[1137,3962,1365],{"class":1364},[1137,3964,3966,3969,3971,3973],{"class":1139,"line":3965},59,[1137,3967,3968],{"class":1370},"      chatId",[1137,3970,1374],{"class":1364},[1137,3972,3254],{"class":1360},[1137,3974,1392],{"class":1364},[1137,3976,3978,3981,3983,3985,3987,3989],{"class":1139,"line":3977},60,[1137,3979,3980],{"class":1370},"      role",[1137,3982,1374],{"class":1364},[1137,3984,1451],{"class":1364},[1137,3986,2170],{"class":1147},[1137,3988,1389],{"class":1364},[1137,3990,1392],{"class":1364},[1137,3992,3994,3997,3999,4001,4003],{"class":1139,"line":3993},61,[1137,3995,3996],{"class":1370},"      parts",[1137,3998,1374],{"class":1364},[1137,4000,3871],{"class":1360},[1137,4002,1827],{"class":1364},[1137,4004,2850],{"class":1360},[1137,4006,4008,4010],{"class":1139,"line":4007},62,[1137,4009,3434],{"class":1364},[1137,4011,1499],{"class":1370},[1137,4013,4015],{"class":1139,"line":4014},63,[1137,4016,3651],{"class":1364},[1137,4018,4020],{"class":1139,"line":4019},64,[1137,4021,1429],{"emptyLinePlaceholder":21},[1137,4023,4025],{"class":1139,"line":4024},65,[1137,4026,4027],{"class":2715},"  \u002F\u002F Create the streaming response\n",[1137,4029,4031,4033,4036,4038,4041,4043],{"class":1139,"line":4030},66,[1137,4032,2637],{"class":1607},[1137,4034,4035],{"class":1360}," stream",[1137,4037,2647],{"class":1364},[1137,4039,4040],{"class":1160}," createUIMessageStream",[1137,4042,1361],{"class":1370},[1137,4044,1365],{"class":1364},[1137,4046,4048,4051,4053,4056,4058,4061,4063,4065],{"class":1139,"line":4047},67,[1137,4049,4050],{"class":1160},"    execute",[1137,4052,1374],{"class":1364},[1137,4054,4055],{"class":1607}," async",[1137,4057,1958],{"class":1364},[1137,4059,4060],{"class":1961}," writer",[1137,4062,1965],{"class":1364},[1137,4064,1844],{"class":1607},[1137,4066,1440],{"class":1364},[1137,4068,4070,4073,4076,4078,4081,4083],{"class":1139,"line":4069},68,[1137,4071,4072],{"class":1607},"      const",[1137,4074,4075],{"class":1360}," result",[1137,4077,2647],{"class":1364},[1137,4079,4080],{"class":1160}," streamText",[1137,4082,1361],{"class":1370},[1137,4084,1365],{"class":1364},[1137,4086,4088,4091],{"class":1139,"line":4087},69,[1137,4089,4090],{"class":1360},"        model",[1137,4092,1392],{"class":1364},[1137,4094,4096,4099,4101,4103,4106,4108],{"class":1139,"line":4095},70,[1137,4097,4098],{"class":1370},"        instructions",[1137,4100,1374],{"class":1364},[1137,4102,3733],{"class":1364},[1137,4104,4105],{"class":1147},"You are a helpful AI assistant. Be concise and friendly.",[1137,4107,3739],{"class":1364},[1137,4109,1392],{"class":1364},[1137,4111,4113,4116,4118,4120,4123,4125,4127,4129],{"class":1139,"line":4112},71,[1137,4114,4115],{"class":1370},"        messages",[1137,4117,1374],{"class":1364},[1137,4119,2650],{"class":1350},[1137,4121,4122],{"class":1160}," convertToModelMessages",[1137,4124,1361],{"class":1370},[1137,4126,2016],{"class":1360},[1137,4128,1901],{"class":1370},[1137,4130,1392],{"class":1364},[1137,4132,4134,4137,4139],{"class":1139,"line":4133},72,[1137,4135,4136],{"class":1370},"        providerOptions",[1137,4138,1374],{"class":1364},[1137,4140,1440],{"class":1364},[1137,4142,4144,4147,4149],{"class":1139,"line":4143},73,[1137,4145,4146],{"class":1370},"          anthropic",[1137,4148,1374],{"class":1364},[1137,4150,1440],{"class":1364},[1137,4152,4154,4157,4159],{"class":1139,"line":4153},74,[1137,4155,4156],{"class":1370},"            thinking",[1137,4158,1374],{"class":1364},[1137,4160,1440],{"class":1364},[1137,4162,4164,4167,4169,4171,4174,4176],{"class":1139,"line":4163},75,[1137,4165,4166],{"class":1370},"              type",[1137,4168,1374],{"class":1364},[1137,4170,1451],{"class":1364},[1137,4172,4173],{"class":1147},"enabled",[1137,4175,1389],{"class":1364},[1137,4177,1392],{"class":1364},[1137,4179,4181,4184,4186],{"class":1139,"line":4180},76,[1137,4182,4183],{"class":1370},"              budgetTokens",[1137,4185,1374],{"class":1364},[1137,4187,4188],{"class":3626}," 2048\n",[1137,4190,4192],{"class":1139,"line":4191},77,[1137,4193,4194],{"class":1364},"            }\n",[1137,4196,4198],{"class":1139,"line":4197},78,[1137,4199,4200],{"class":1364},"          },\n",[1137,4202,4204,4207,4209],{"class":1139,"line":4203},79,[1137,4205,4206],{"class":1370},"          google",[1137,4208,1374],{"class":1364},[1137,4210,1440],{"class":1364},[1137,4212,4214,4217,4219],{"class":1139,"line":4213},80,[1137,4215,4216],{"class":1370},"            thinkingConfig",[1137,4218,1374],{"class":1364},[1137,4220,1440],{"class":1364},[1137,4222,4224,4227,4229,4233],{"class":1139,"line":4223},81,[1137,4225,4226],{"class":1370},"              includeThoughts",[1137,4228,1374],{"class":1364},[1137,4230,4232],{"class":4231},"sfNiH"," true",[1137,4234,1392],{"class":1364},[1137,4236,4238,4241,4243,4245,4248],{"class":1139,"line":4237},82,[1137,4239,4240],{"class":1370},"              thinkingLevel",[1137,4242,1374],{"class":1364},[1137,4244,1451],{"class":1364},[1137,4246,4247],{"class":1147},"low",[1137,4249,1415],{"class":1364},[1137,4251,4253],{"class":1139,"line":4252},83,[1137,4254,4194],{"class":1364},[1137,4256,4258],{"class":1139,"line":4257},84,[1137,4259,4200],{"class":1364},[1137,4261,4263,4266,4268],{"class":1139,"line":4262},85,[1137,4264,4265],{"class":1370},"          openai",[1137,4267,1374],{"class":1364},[1137,4269,1440],{"class":1364},[1137,4271,4273,4276,4278,4280,4282,4284],{"class":1139,"line":4272},86,[1137,4274,4275],{"class":1370},"            reasoningEffort",[1137,4277,1374],{"class":1364},[1137,4279,1451],{"class":1364},[1137,4281,4247],{"class":1147},[1137,4283,1389],{"class":1364},[1137,4285,1392],{"class":1364},[1137,4287,4289,4292,4294,4296,4299],{"class":1139,"line":4288},87,[1137,4290,4291],{"class":1370},"            reasoningSummary",[1137,4293,1374],{"class":1364},[1137,4295,1451],{"class":1364},[1137,4297,4298],{"class":1147},"detailed",[1137,4300,1415],{"class":1364},[1137,4302,4304],{"class":1139,"line":4303},88,[1137,4305,4306],{"class":1364},"          }\n",[1137,4308,4310],{"class":1139,"line":4309},89,[1137,4311,4312],{"class":1364},"        }\n",[1137,4314,4316,4319],{"class":1139,"line":4315},90,[1137,4317,4318],{"class":1364},"      }",[1137,4320,1499],{"class":1370},[1137,4322,4324],{"class":1139,"line":4323},91,[1137,4325,1429],{"emptyLinePlaceholder":21},[1137,4327,4329],{"class":1139,"line":4328},92,[1137,4330,4331],{"class":2715},"      \u002F\u002F Notify the client that a title was generated\n",[1137,4333,4335,4338,4340,4342,4344,4346,4348,4350],{"class":1139,"line":4334},93,[1137,4336,4337],{"class":1350},"      if",[1137,4339,1970],{"class":1370},[1137,4341,3599],{"class":1364},[1137,4343,266],{"class":1360},[1137,4345,1827],{"class":1364},[1137,4347,3678],{"class":1360},[1137,4349,3604],{"class":1370},[1137,4351,1365],{"class":1364},[1137,4353,4355,4358,4360,4363,4365],{"class":1139,"line":4354},94,[1137,4356,4357],{"class":1360},"        writer",[1137,4359,1827],{"class":1364},[1137,4361,4362],{"class":1160},"write",[1137,4364,1361],{"class":1370},[1137,4366,1365],{"class":1364},[1137,4368,4370,4373,4375,4377,4380,4382],{"class":1139,"line":4369},95,[1137,4371,4372],{"class":1370},"          type",[1137,4374,1374],{"class":1364},[1137,4376,1451],{"class":1364},[1137,4378,4379],{"class":1147},"data-chat-title",[1137,4381,1389],{"class":1364},[1137,4383,1392],{"class":1364},[1137,4385,4387,4390,4392,4394,4396,4398,4400,4403,4405],{"class":1139,"line":4386},96,[1137,4388,4389],{"class":1370},"          data",[1137,4391,1374],{"class":1364},[1137,4393,1729],{"class":1364},[1137,4395,2642],{"class":1370},[1137,4397,1374],{"class":1364},[1137,4399,1451],{"class":1364},[1137,4401,4402],{"class":1147},"Title generated",[1137,4404,1389],{"class":1364},[1137,4406,3154],{"class":1364},[1137,4408,4410,4413,4415],{"class":1139,"line":4409},97,[1137,4411,4412],{"class":1370},"          transient",[1137,4414,1374],{"class":1364},[1137,4416,4417],{"class":4231}," true\n",[1137,4419,4421,4424],{"class":1139,"line":4420},98,[1137,4422,4423],{"class":1364},"        }",[1137,4425,1499],{"class":1370},[1137,4427,4429],{"class":1139,"line":4428},99,[1137,4430,4431],{"class":1364},"      }\n",[1137,4433,4435],{"class":1139,"line":4434},100,[1137,4436,1429],{"emptyLinePlaceholder":21},[1137,4438,4440,4443,4445,4448,4450,4453,4455,4457,4459,4461,4463,4465,4468,4470],{"class":1139,"line":4439},101,[1137,4441,4442],{"class":1360},"      writer",[1137,4444,1827],{"class":1364},[1137,4446,4447],{"class":1160},"merge",[1137,4449,1361],{"class":1370},[1137,4451,4452],{"class":1160},"toUIMessageStream",[1137,4454,1361],{"class":1370},[1137,4456,1884],{"class":1364},[1137,4458,4035],{"class":1370},[1137,4460,1374],{"class":1364},[1137,4462,4075],{"class":1360},[1137,4464,1827],{"class":1364},[1137,4466,4467],{"class":1360},"stream",[1137,4469,1751],{"class":1364},[1137,4471,1991],{"class":1370},[1137,4473,4475],{"class":1139,"line":4474},102,[1137,4476,4477],{"class":1364},"    },\n",[1137,4479,4481,4484,4486,4488,4490,4492,4494,4496],{"class":1139,"line":4480},103,[1137,4482,4483],{"class":1160},"    onEnd",[1137,4485,1374],{"class":1364},[1137,4487,4055],{"class":1607},[1137,4489,1958],{"class":1364},[1137,4491,3329],{"class":1961},[1137,4493,1965],{"class":1364},[1137,4495,1844],{"class":1607},[1137,4497,1440],{"class":1364},[1137,4499,4501],{"class":1139,"line":4500},104,[1137,4502,4503],{"class":2715},"      \u002F\u002F Save the assistant's response to the database\n",[1137,4505,4507,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536,4539,4541,4544,4546,4548],{"class":1139,"line":4506},105,[1137,4508,4509],{"class":1350},"      await",[1137,4511,2465],{"class":1360},[1137,4513,1827],{"class":1364},[1137,4515,2737],{"class":1160},[1137,4517,1361],{"class":1370},[1137,4519,2742],{"class":1360},[1137,4521,1827],{"class":1364},[1137,4523,2016],{"class":1360},[1137,4525,1901],{"class":1370},[1137,4527,1827],{"class":1364},[1137,4529,2753],{"class":1160},[1137,4531,1361],{"class":1370},[1137,4533,2016],{"class":1360},[1137,4535,1827],{"class":1364},[1137,4537,4538],{"class":1160},"map",[1137,4540,1361],{"class":1370},[1137,4542,4543],{"class":1961},"message",[1137,4545,1844],{"class":1607},[1137,4547,1970],{"class":1370},[1137,4549,1365],{"class":1364},[1137,4551,4553,4556,4558,4560,4562,4564],{"class":1139,"line":4552},106,[1137,4554,4555],{"class":1370},"        chatId",[1137,4557,1374],{"class":1364},[1137,4559,2815],{"class":1360},[1137,4561,1827],{"class":1364},[1137,4563,2038],{"class":1360},[1137,4565,1392],{"class":1364},[1137,4567,4569,4572,4574,4576,4578,4580,4582,4584,4586,4588,4591,4593,4595,4597],{"class":1139,"line":4568},107,[1137,4570,4571],{"class":1370},"        role",[1137,4573,1374],{"class":1364},[1137,4575,2642],{"class":1360},[1137,4577,1827],{"class":1364},[1137,4579,2152],{"class":1360},[1137,4581,3571],{"class":1350},[1137,4583,1451],{"class":1364},[1137,4585,2170],{"class":1147},[1137,4587,1389],{"class":1364},[1137,4589,4590],{"class":1364}," |",[1137,4592,1451],{"class":1364},[1137,4594,2179],{"class":1147},[1137,4596,1389],{"class":1364},[1137,4598,1392],{"class":1364},[1137,4600,4602,4605,4607,4609,4611],{"class":1139,"line":4601},108,[1137,4603,4604],{"class":1370},"        parts",[1137,4606,1374],{"class":1364},[1137,4608,2642],{"class":1360},[1137,4610,1827],{"class":1364},[1137,4612,2850],{"class":1360},[1137,4614,4616,4618],{"class":1139,"line":4615},109,[1137,4617,4318],{"class":1364},[1137,4619,4620],{"class":1370},")))\n",[1137,4622,4624],{"class":1139,"line":4623},110,[1137,4625,4626],{"class":1364},"    }\n",[1137,4628,4630,4632],{"class":1139,"line":4629},111,[1137,4631,2438],{"class":1364},[1137,4633,1499],{"class":1370},[1137,4635,4637],{"class":1139,"line":4636},112,[1137,4638,1429],{"emptyLinePlaceholder":21},[1137,4640,4642,4644,4647,4649,4651,4653,4655],{"class":1139,"line":4641},113,[1137,4643,2865],{"class":1350},[1137,4645,4646],{"class":1160}," createUIMessageStreamResponse",[1137,4648,1361],{"class":1370},[1137,4650,1884],{"class":1364},[1137,4652,4035],{"class":1360},[1137,4654,1751],{"class":1364},[1137,4656,1499],{"class":1370},[1137,4658,4660,4662],{"class":1139,"line":4659},114,[1137,4661,1496],{"class":1364},[1137,4663,1499],{"class":1360},[1027,4665,4666],{},"Here's what each part does:",[1027,4668,4669],{},[1045,4670,4671],{},"AI Gateway",[1027,4673,4674,4675,4678],{},"Thanks to ",[1081,4676,1118],{"href":1116,"rel":4677},[1085],", we can use any AI model supported by the gateway just by specifying the model name.",[1027,4680,4681],{},[1045,4682,4683],{},"Automatic Title Generation",[1027,4685,4686,4687,4694],{},"When a chat doesn't have a title yet, we use ",[1081,4688,4691],{"href":4689,"rel":4690},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1085],[1087,4692,4693],{},"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\".",[1027,4696,4697],{},[1045,4698,4699],{},"Streaming with streamText",[1027,4701,4702,4703,4708],{},"The ",[1081,4704,4706],{"href":2884,"rel":4705},[1085],[1087,4707,2888],{}," function generates a streaming response from the AI model. Key options include:",[1039,4710,4711,4717,4723],{},[1042,4712,4713,4716],{},[1087,4714,4715],{},"model",": The AI model to use",[1042,4718,4719,4722],{},[1087,4720,4721],{},"instructions",": Guidance that shapes the AI's behavior",[1042,4724,4725,4727],{},[1087,4726,2016],{},": The conversation history",[1027,4729,4730],{},[1045,4731,4732],{},"UIMessageStream",[1027,4734,4702,4735,1090,4741,4747],{},[1081,4736,4739],{"href":4737,"rel":4738},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1085],[1087,4740,2896],{},[1081,4742,4745],{"href":4743,"rel":4744},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1085],[1087,4746,2904],{}," 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.",[1027,4749,4702,4750,4753,4754,4756,4757,4760],{},[1087,4751,4752],{},"writer.write()"," method allows sending custom data events to the client (like ",[1087,4755,4379],{},"), while ",[1087,4758,4759],{},"onEnd"," is called when streaming completes, perfect for persisting the assistant's response.",[1165,4762,4764],{"id":4763},"fetching-a-chat","Fetching a chat",[1027,4766,4767],{},"Add an endpoint to fetch existing chat data from your database:",[1337,4769,4770],{},[1128,4771,4774],{"className":1341,"code":4772,"filename":4773,"language":1343,"meta":1133,"style":1133},"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",[1087,4775,4776,4802,4825,4847,4865,4869,4891,4923,4937,4949,4953,4981,5012,5021,5030,5059,5063,5067,5073,5077,5091,5123,5127,5131,5137],{"__ignoreMap":1133},[1137,4777,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798,4800],{"class":1139,"line":1140},[1137,4779,1726],{"class":1350},[1137,4781,1729],{"class":1364},[1137,4783,2924],{"class":1360},[1137,4785,1735],{"class":1364},[1137,4787,2522],{"class":1360},[1137,4789,1735],{"class":1364},[1137,4791,2933],{"class":1360},[1137,4793,1751],{"class":1364},[1137,4795,1754],{"class":1350},[1137,4797,1451],{"class":1364},[1137,4799,1165],{"class":1147},[1137,4801,1415],{"class":1364},[1137,4803,4804,4806,4808,4811,4813,4815,4817,4819,4821,4823],{"class":1139,"line":1157},[1137,4805,1726],{"class":1350},[1137,4807,1729],{"class":1364},[1137,4809,4810],{"class":1360}," asc",[1137,4812,1735],{"class":1364},[1137,4814,2956],{"class":1360},[1137,4816,1751],{"class":1364},[1137,4818,1754],{"class":1350},[1137,4820,1451],{"class":1364},[1137,4822,1779],{"class":1147},[1137,4824,1415],{"class":1364},[1137,4826,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845],{"class":1139,"line":1380},[1137,4828,1726],{"class":1350},[1137,4830,1729],{"class":1364},[1137,4832,2465],{"class":1360},[1137,4834,1735],{"class":1364},[1137,4836,2573],{"class":1360},[1137,4838,1751],{"class":1364},[1137,4840,1754],{"class":1350},[1137,4842,1451],{"class":1364},[1137,4844,2582],{"class":1147},[1137,4846,1415],{"class":1364},[1137,4848,4849,4851,4853,4855,4857,4859,4861,4863],{"class":1139,"line":1395},[1137,4850,1726],{"class":1350},[1137,4852,1729],{"class":1364},[1137,4854,2593],{"class":1360},[1137,4856,1751],{"class":1364},[1137,4858,1754],{"class":1350},[1137,4860,1451],{"class":1364},[1137,4862,2602],{"class":1147},[1137,4864,1415],{"class":1364},[1137,4866,4867],{"class":1139,"line":1407},[1137,4868,1429],{"emptyLinePlaceholder":21},[1137,4870,4871,4873,4875,4877,4879,4881,4883,4885,4887,4889],{"class":1139,"line":1418},[1137,4872,1351],{"class":1350},[1137,4874,1354],{"class":1350},[1137,4876,2522],{"class":1160},[1137,4878,1361],{"class":1360},[1137,4880,2621],{"class":1607},[1137,4882,1970],{"class":1364},[1137,4884,2626],{"class":1961},[1137,4886,1901],{"class":1364},[1137,4888,1844],{"class":1607},[1137,4890,1440],{"class":1364},[1137,4892,4893,4895,4897,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921],{"class":1139,"line":1426},[1137,4894,2637],{"class":1607},[1137,4896,1729],{"class":1364},[1137,4898,3254],{"class":1360},[1137,4900,1751],{"class":1364},[1137,4902,2647],{"class":1364},[1137,4904,2650],{"class":1350},[1137,4906,2933],{"class":1160},[1137,4908,1361],{"class":1370},[1137,4910,2626],{"class":1360},[1137,4912,1735],{"class":1364},[1137,4914,2593],{"class":1360},[1137,4916,1827],{"class":1364},[1137,4918,2665],{"class":1160},[1137,4920,1361],{"class":1370},[1137,4922,1365],{"class":1364},[1137,4924,4925,4927,4929,4931,4933,4935],{"class":1139,"line":1432},[1137,4926,3283],{"class":1370},[1137,4928,1374],{"class":1364},[1137,4930,2593],{"class":1360},[1137,4932,1827],{"class":1364},[1137,4934,3292],{"class":1160},[1137,4936,2693],{"class":1370},[1137,4938,4939,4941,4943,4945,4947],{"class":1139,"line":1443},[1137,4940,2438],{"class":1364},[1137,4942,1901],{"class":1370},[1137,4944,1827],{"class":1364},[1137,4946,2704],{"class":1360},[1137,4948,1499],{"class":1370},[1137,4950,4951],{"class":1139,"line":1459},[1137,4952,1429],{"emptyLinePlaceholder":21},[1137,4954,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973,4975,4977,4979],{"class":1139,"line":1465},[1137,4956,2637],{"class":1607},[1137,4958,2815],{"class":1360},[1137,4960,2647],{"class":1364},[1137,4962,2650],{"class":1350},[1137,4964,2465],{"class":1360},[1137,4966,1827],{"class":1364},[1137,4968,3519],{"class":1360},[1137,4970,1827],{"class":1364},[1137,4972,1806],{"class":1360},[1137,4974,1827],{"class":1364},[1137,4976,3528],{"class":1160},[1137,4978,1361],{"class":1370},[1137,4980,1365],{"class":1364},[1137,4982,4983,4985,4987,4989,4991,4993,4995,4997,4999,5001,5003,5005,5007,5010],{"class":1139,"line":1470},[1137,4984,3538],{"class":1370},[1137,4986,1374],{"class":1364},[1137,4988,1970],{"class":1370},[1137,4990,3829],{"class":1160},[1137,4992,1361],{"class":1370},[1137,4994,2742],{"class":1360},[1137,4996,1827],{"class":1364},[1137,4998,1806],{"class":1360},[1137,5000,1827],{"class":1364},[1137,5002,2038],{"class":1360},[1137,5004,1735],{"class":1364},[1137,5006,3254],{"class":1360},[1137,5008,5009],{"class":1370},"))",[1137,5011,1392],{"class":1364},[1137,5013,5014,5017,5019],{"class":1139,"line":1493},[1137,5015,5016],{"class":1370},"    with",[1137,5018,1374],{"class":1364},[1137,5020,1440],{"class":1364},[1137,5022,5023,5026,5028],{"class":1139,"line":1998},[1137,5024,5025],{"class":1370},"      messages",[1137,5027,1374],{"class":1364},[1137,5029,1440],{"class":1364},[1137,5031,5032,5035,5037,5040,5042,5044,5046,5048,5050,5052,5054,5057],{"class":1139,"line":2025},[1137,5033,5034],{"class":1160},"        orderBy",[1137,5036,1374],{"class":1364},[1137,5038,5039],{"class":1364}," ()",[1137,5041,1844],{"class":1607},[1137,5043,4810],{"class":1160},[1137,5045,1361],{"class":1370},[1137,5047,2742],{"class":1360},[1137,5049,1827],{"class":1364},[1137,5051,2016],{"class":1360},[1137,5053,1827],{"class":1364},[1137,5055,5056],{"class":1360},"createdAt",[1137,5058,1499],{"class":1370},[1137,5060,5061],{"class":1139,"line":2071},[1137,5062,4431],{"class":1364},[1137,5064,5065],{"class":1139,"line":2138},[1137,5066,4626],{"class":1364},[1137,5068,5069,5071],{"class":1139,"line":2208},[1137,5070,2438],{"class":1364},[1137,5072,1499],{"class":1370},[1137,5074,5075],{"class":1139,"line":2248},[1137,5076,1429],{"emptyLinePlaceholder":21},[1137,5078,5079,5081,5083,5085,5087,5089],{"class":1139,"line":2299},[1137,5080,3594],{"class":1350},[1137,5082,1970],{"class":1370},[1137,5084,3599],{"class":1364},[1137,5086,266],{"class":1360},[1137,5088,3604],{"class":1370},[1137,5090,1365],{"class":1364},[1137,5092,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121],{"class":1139,"line":2312},[1137,5094,3612],{"class":1350},[1137,5096,2924],{"class":1160},[1137,5098,1361],{"class":1370},[1137,5100,1884],{"class":1364},[1137,5102,3621],{"class":1370},[1137,5104,1374],{"class":1364},[1137,5106,3627],{"class":3626},[1137,5108,1735],{"class":1364},[1137,5110,3632],{"class":1370},[1137,5112,1374],{"class":1364},[1137,5114,1451],{"class":1364},[1137,5116,3639],{"class":1147},[1137,5118,1389],{"class":1364},[1137,5120,1751],{"class":1364},[1137,5122,1499],{"class":1370},[1137,5124,5125],{"class":1139,"line":2342},[1137,5126,3651],{"class":1364},[1137,5128,5129],{"class":1139,"line":2348},[1137,5130,1429],{"emptyLinePlaceholder":21},[1137,5132,5133,5135],{"class":1139,"line":2353},[1137,5134,2865],{"class":1350},[1137,5136,2868],{"class":1360},[1137,5138,5139,5141],{"class":1139,"line":2385},[1137,5140,1496],{"class":1364},[1137,5142,1499],{"class":1360},[1031,5144,5146],{"id":5145},"wiring-up-the-ui","Wiring up the UI",[1027,5148,5149,5150,5155,5156,5161],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1081,5151,5152],{"href":285},[1087,5153,5154],{},"UChatPrompt"," for the input area and ",[1081,5157,5158],{"href":275},[1087,5159,5160],{},"UChatMessages"," for displaying the conversation.",[1165,5163,5165],{"id":5164},"creating-the-home-page","Creating the home page",[1027,5167,5168,5169,5173],{},"The home page is where users start a new conversation. The ",[1081,5170,5171],{"href":285},[1087,5172,5154],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1337,5175,5176],{},[1128,5177,5181],{"className":1569,"code":5178,"filename":5179,"highlights":5180,"language":34,"meta":1133,"style":1133},"\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",[3493,3498,3504,3535,3579,3586,3591,3609,3648],[1087,5182,5183,5206,5225,5243,5247,5261,5287,5291,5304,5308,5313,5339,5355,5364,5372,5386,5424,5428,5432,5438,5442,5447,5473,5478,5486,5490,5498,5537,5550,5571,5592,5597,5606,5610,5618,5633,5670,5685,5700,5718,5724,5747,5756,5765,5773,5781],{"__ignoreMap":1133},[1137,5184,5185,5187,5190,5193,5196,5198,5200,5202,5204],{"class":1139,"line":1140},[1137,5186,1579],{"class":1364},[1137,5188,5189],{"class":1370},"script",[1137,5191,5192],{"class":1607}," setup",[1137,5194,5195],{"class":1607}," lang",[1137,5197,1611],{"class":1364},[1137,5199,1538],{"class":1364},[1137,5201,1343],{"class":1147},[1137,5203,1538],{"class":1364},[1137,5205,1585],{"class":1364},[1137,5207,5208,5210,5213,5215,5218,5220,5223],{"class":1139,"line":1157},[1137,5209,3093],{"class":1607},[1137,5211,5212],{"class":1360}," input ",[1137,5214,1611],{"class":1364},[1137,5216,5217],{"class":1160}," ref",[1137,5219,1361],{"class":1360},[1137,5221,5222],{"class":1364},"''",[1137,5224,1499],{"class":1360},[1137,5226,5227,5229,5232,5234,5236,5238,5241],{"class":1139,"line":1380},[1137,5228,3093],{"class":1607},[1137,5230,5231],{"class":1360}," loading ",[1137,5233,1611],{"class":1364},[1137,5235,5217],{"class":1160},[1137,5237,1361],{"class":1360},[1137,5239,5240],{"class":4231},"false",[1137,5242,1499],{"class":1360},[1137,5244,5245],{"class":1139,"line":1395},[1137,5246,1429],{"emptyLinePlaceholder":21},[1137,5248,5249,5251,5254,5257,5259],{"class":1139,"line":1407},[1137,5250,2621],{"class":1607},[1137,5252,5253],{"class":1607}," function",[1137,5255,5256],{"class":1160}," createChat",[1137,5258,1824],{"class":1364},[1137,5260,1440],{"class":1364},[1137,5262,5263,5265,5267,5269,5272,5274,5276,5278,5281,5284],{"class":1139,"line":1418},[1137,5264,3594],{"class":1350},[1137,5266,1970],{"class":1370},[1137,5268,3599],{"class":1364},[1137,5270,5271],{"class":1360},"input",[1137,5273,1827],{"class":1364},[1137,5275,3378],{"class":1360},[1137,5277,1827],{"class":1364},[1137,5279,5280],{"class":1160},"trim",[1137,5282,5283],{"class":1370},"()) ",[1137,5285,5286],{"class":1350},"return\n",[1137,5288,5289],{"class":1139,"line":1426},[1137,5290,1429],{"emptyLinePlaceholder":21},[1137,5292,5293,5296,5298,5300,5302],{"class":1139,"line":1432},[1137,5294,5295],{"class":1360},"  loading",[1137,5297,1827],{"class":1364},[1137,5299,3378],{"class":1360},[1137,5301,2647],{"class":1364},[1137,5303,4417],{"class":4231},[1137,5305,5306],{"class":1139,"line":1443},[1137,5307,1429],{"emptyLinePlaceholder":21},[1137,5309,5310],{"class":1139,"line":1459},[1137,5311,5312],{"class":2715},"  \u002F\u002F Create a new chat on the server\n",[1137,5314,5315,5317,5319,5321,5323,5326,5328,5330,5333,5335,5337],{"class":1139,"line":1465},[1137,5316,2637],{"class":1607},[1137,5318,2815],{"class":1360},[1137,5320,2647],{"class":1364},[1137,5322,2650],{"class":1350},[1137,5324,5325],{"class":1160}," $fetch",[1137,5327,1361],{"class":1370},[1137,5329,1389],{"class":1364},[1137,5331,5332],{"class":1147},"\u002Fapi\u002Fchats",[1137,5334,1389],{"class":1364},[1137,5336,1735],{"class":1364},[1137,5338,1440],{"class":1364},[1137,5340,5341,5344,5346,5348,5351,5353],{"class":1139,"line":1470},[1137,5342,5343],{"class":1370},"    method",[1137,5345,1374],{"class":1364},[1137,5347,1451],{"class":1364},[1137,5349,5350],{"class":1147},"POST",[1137,5352,1389],{"class":1364},[1137,5354,1392],{"class":1364},[1137,5356,5357,5360,5362],{"class":1139,"line":1493},[1137,5358,5359],{"class":1370},"    body",[1137,5361,1374],{"class":1364},[1137,5363,1440],{"class":1364},[1137,5365,5366,5368,5370],{"class":1139,"line":1998},[1137,5367,3419],{"class":1370},[1137,5369,1374],{"class":1364},[1137,5371,1440],{"class":1364},[1137,5373,5374,5376,5378,5380,5382,5384],{"class":1139,"line":2025},[1137,5375,4571],{"class":1370},[1137,5377,1374],{"class":1364},[1137,5379,1451],{"class":1364},[1137,5381,2170],{"class":1147},[1137,5383,1389],{"class":1364},[1137,5385,1392],{"class":1364},[1137,5387,5388,5390,5392,5394,5396,5398,5400,5402,5405,5407,5409,5411,5413,5416,5418,5420,5422],{"class":1139,"line":2071},[1137,5389,4604],{"class":1370},[1137,5391,1374],{"class":1364},[1137,5393,1478],{"class":1370},[1137,5395,1884],{"class":1364},[1137,5397,2544],{"class":1370},[1137,5399,1374],{"class":1364},[1137,5401,1451],{"class":1364},[1137,5403,5404],{"class":1147},"text",[1137,5406,1389],{"class":1364},[1137,5408,1735],{"class":1364},[1137,5410,1738],{"class":1370},[1137,5412,1374],{"class":1364},[1137,5414,5415],{"class":1360}," input",[1137,5417,1827],{"class":1364},[1137,5419,3378],{"class":1360},[1137,5421,1751],{"class":1364},[1137,5423,3219],{"class":1370},[1137,5425,5426],{"class":1139,"line":2138},[1137,5427,4431],{"class":1364},[1137,5429,5430],{"class":1139,"line":2208},[1137,5431,4626],{"class":1364},[1137,5433,5434,5436],{"class":1139,"line":2248},[1137,5435,2438],{"class":1364},[1137,5437,1499],{"class":1370},[1137,5439,5440],{"class":1139,"line":2299},[1137,5441,1429],{"emptyLinePlaceholder":21},[1137,5443,5444],{"class":1139,"line":2312},[1137,5445,5446],{"class":2715},"  \u002F\u002F Navigate to the chat page\n",[1137,5448,5449,5452,5454,5456,5459,5462,5464,5466,5468,5471],{"class":1139,"line":2342},[1137,5450,5451],{"class":1160},"  navigateTo",[1137,5453,1361],{"class":1370},[1137,5455,3739],{"class":1364},[1137,5457,5458],{"class":1147},"\u002Fchat\u002F",[1137,5460,5461],{"class":1364},"${",[1137,5463,266],{"class":1360},[1137,5465,1827],{"class":1364},[1137,5467,2038],{"class":1360},[1137,5469,5470],{"class":1364},"}`",[1137,5472,1499],{"class":1370},[1137,5474,5475],{"class":1139,"line":2348},[1137,5476,5477],{"class":1364},"}\n",[1137,5479,5480,5482,5484],{"class":1139,"line":2353},[1137,5481,1655],{"class":1364},[1137,5483,5189],{"class":1370},[1137,5485,1585],{"class":1364},[1137,5487,5488],{"class":1139,"line":2385},[1137,5489,1429],{"emptyLinePlaceholder":21},[1137,5491,5492,5494,5496],{"class":1139,"line":2401},[1137,5493,1579],{"class":1364},[1137,5495,1582],{"class":1370},[1137,5497,1585],{"class":1364},[1137,5499,5500,5502,5505,5508,5511,5513,5515,5518,5521,5524,5526,5529,5531,5533,5535],{"class":1139,"line":2419},[1137,5501,1592],{"class":1364},[1137,5503,5504],{"class":1370},"UDashboardPanel",[1137,5506,5507],{"class":1364}," :",[1137,5509,5510],{"class":1607},"ui",[1137,5512,1611],{"class":1364},[1137,5514,1538],{"class":1364},[1137,5516,5517],{"class":1364},"{ ",[1137,5519,5520],{"class":1370},"body",[1137,5522,5523],{"class":1364},": ",[1137,5525,1389],{"class":1364},[1137,5527,5528],{"class":1147},"p-0 sm:p-0",[1137,5530,1389],{"class":1364},[1137,5532,1751],{"class":1364},[1137,5534,1538],{"class":1364},[1137,5536,1585],{"class":1364},[1137,5538,5539,5541,5543,5546,5548],{"class":1139,"line":2435},[1137,5540,1601],{"class":1364},[1137,5542,1582],{"class":1370},[1137,5544,5545],{"class":1364}," #",[1137,5547,5520],{"class":1607},[1137,5549,1585],{"class":1364},[1137,5551,5552,5554,5557,5560,5562,5564,5567,5569],{"class":1139,"line":2443},[1137,5553,1625],{"class":1364},[1137,5555,5556],{"class":1370},"UContainer",[1137,5558,5559],{"class":1607}," class",[1137,5561,1611],{"class":1364},[1137,5563,1538],{"class":1364},[1137,5565,5566],{"class":1147},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1137,5568,1538],{"class":1364},[1137,5570,1585],{"class":1364},[1137,5572,5573,5576,5579,5581,5583,5585,5588,5590],{"class":1139,"line":3416},[1137,5574,5575],{"class":1364},"        \u003C",[1137,5577,5578],{"class":1370},"h1",[1137,5580,5559],{"class":1607},[1137,5582,1611],{"class":1364},[1137,5584,1538],{"class":1364},[1137,5586,5587],{"class":1147},"text-3xl sm:text-4xl text-highlighted font-bold",[1137,5589,1538],{"class":1364},[1137,5591,1585],{"class":1364},[1137,5593,5594],{"class":1139,"line":3431},[1137,5595,5596],{"class":1360},"          How can I help you today?\n",[1137,5598,5599,5602,5604],{"class":1139,"line":3448},[1137,5600,5601],{"class":1364},"        \u003C\u002F",[1137,5603,5578],{"class":1370},[1137,5605,1585],{"class":1364},[1137,5607,5608],{"class":1139,"line":3480},[1137,5609,1429],{"emptyLinePlaceholder":21},[1137,5611,5613,5615],{"class":5612,"line":3493},[1139,1589],[1137,5614,5575],{"class":1364},[1137,5616,5617],{"class":1370},"UChatPrompt\n",[1137,5619,5621,5624,5626,5628,5630],{"class":5620,"line":3498},[1139,1589],[1137,5622,5623],{"class":1607},"          v-model",[1137,5625,1611],{"class":1364},[1137,5627,1538],{"class":1364},[1137,5629,5271],{"class":1360},[1137,5631,5632],{"class":1364},"\"\n",[1137,5634,5636,5639,5642,5644,5646,5649,5652,5654,5657,5659,5662,5664,5667],{"class":5635,"line":3504},[1139,1589],[1137,5637,5638],{"class":1364},"          :",[1137,5640,5641],{"class":1607},"status",[1137,5643,1611],{"class":1364},[1137,5645,1538],{"class":1364},[1137,5647,5648],{"class":1360},"loading",[1137,5650,5651],{"class":1364}," ? ",[1137,5653,1389],{"class":1364},[1137,5655,5656],{"class":1147},"streaming",[1137,5658,1389],{"class":1364},[1137,5660,5661],{"class":1364}," : ",[1137,5663,1389],{"class":1364},[1137,5665,5666],{"class":1147},"ready",[1137,5668,5669],{"class":1364},"'\"\n",[1137,5671,5673,5676,5678,5680,5683],{"class":5672,"line":3535},[1139,1589],[1137,5674,5675],{"class":1607},"          variant",[1137,5677,1611],{"class":1364},[1137,5679,1538],{"class":1364},[1137,5681,5682],{"class":1147},"subtle",[1137,5684,5632],{"class":1364},[1137,5686,5688,5691,5693,5695,5698],{"class":5687,"line":3579},[1139,1589],[1137,5689,5690],{"class":1607},"          placeholder",[1137,5692,1611],{"class":1364},[1137,5694,1538],{"class":1364},[1137,5696,5697],{"class":1147},"Ask me anything...",[1137,5699,5632],{"class":1364},[1137,5701,5703,5706,5709,5711,5713,5716],{"class":5702,"line":3586},[1139,1589],[1137,5704,5705],{"class":1364},"          @",[1137,5707,5708],{"class":1607},"submit",[1137,5710,1611],{"class":1364},[1137,5712,1538],{"class":1364},[1137,5714,5715],{"class":1360},"createChat",[1137,5717,5632],{"class":1364},[1137,5719,5721],{"class":5720,"line":3591},[1139,1589],[1137,5722,5723],{"class":1364},"        >\n",[1137,5725,5727,5730,5733,5736,5738,5740,5743,5745],{"class":5726,"line":3609},[1139,1589],[1137,5728,5729],{"class":1364},"          \u003C",[1137,5731,5732],{"class":1370},"UChatPromptSubmit",[1137,5734,5735],{"class":1607}," color",[1137,5737,1611],{"class":1364},[1137,5739,1538],{"class":1364},[1137,5741,5742],{"class":1147},"neutral",[1137,5744,1538],{"class":1364},[1137,5746,1631],{"class":1364},[1137,5748,5750,5752,5754],{"class":5749,"line":3648},[1139,1589],[1137,5751,5601],{"class":1364},[1137,5753,5154],{"class":1370},[1137,5755,1585],{"class":1364},[1137,5757,5758,5761,5763],{"class":1139,"line":3654},[1137,5759,5760],{"class":1364},"      \u003C\u002F",[1137,5762,5556],{"class":1370},[1137,5764,1585],{"class":1364},[1137,5766,5767,5769,5771],{"class":1139,"line":3659},[1137,5768,1636],{"class":1364},[1137,5770,1582],{"class":1370},[1137,5772,1585],{"class":1364},[1137,5774,5775,5777,5779],{"class":1139,"line":3665},[1137,5776,1646],{"class":1364},[1137,5778,5504],{"class":1370},[1137,5780,1585],{"class":1364},[1137,5782,5783,5785,5787],{"class":1139,"line":3685},[1137,5784,1655],{"class":1364},[1137,5786,1582],{"class":1370},[1137,5788,1585],{"class":1364},[1027,5790,4702,5791,5795],{},[1081,5792,5793],{"href":285},[1087,5794,5154],{}," component automatically handles:",[1039,5797,5798,5805,5808,5816],{},[1042,5799,5800,5801],{},"Form submission when pressing ",[5802,5803],"kbd",{"value":5804},"enter",[1042,5806,5807],{},"Auto-resizing as you type",[1042,5809,5810,5811,5813,5814],{},"A loading state when ",[1087,5812,5641],{}," is set to ",[1087,5815,5656],{},[1042,5817,5818],{},"Focus management and keyboard shortcuts",[1165,5820,5822],{"id":5821},"setting-up-markdown-rendering","Setting up Markdown rendering",[1027,5824,5825,5826,5833,5834,5841,5842,5845,5846,5851],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1081,5827,5830],{"href":5828,"rel":5829},"https:\u002F\u002Fcomark.dev",[1085],[1087,5831,5832],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1081,5835,5838],{"href":5836,"rel":5837},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-markdown-code-definemarkdowncomponent-code",[1085],[1087,5839,5840],{},"defineMarkdownComponent",", you can enable the ",[1087,5843,5844],{},"shiki"," plugin for syntax highlighting in code blocks and register additional ",[1081,5847,5850],{"href":5848,"rel":5849},"https:\u002F\u002Fshiki.style",[1085],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1337,5853,5854],{},[1128,5855,5858],{"className":1341,"code":5856,"filename":5857,"language":1343,"meta":1133,"style":1133},"import shiki from '@comark\u002Fnuxt\u002Fplugins\u002Fshiki'\nimport python from '@shikijs\u002Flangs\u002Fpython'\nimport sql from '@shikijs\u002Flangs\u002Fsql'\nimport go from '@shikijs\u002Flangs\u002Fgo'\nimport rust from '@shikijs\u002Flangs\u002Frust'\n\nexport default defineMarkdownComponent({\n  name: 'ChatMarkdown',\n  plugins: [\n    shiki({\n      languages: [python, sql, go, rust]\n    })\n  ],\n  class: '*:first:mt-0 *:last:mb-0'\n})\n","app\u002Fcomponents\u002Fchat\u002FMarkdown.ts",[1087,5859,5860,5877,5893,5909,5925,5941,5945,5958,5974,5983,5992,6017,6023,6029,6043],{"__ignoreMap":1133},[1137,5861,5862,5864,5867,5870,5872,5875],{"class":1139,"line":1140},[1137,5863,1726],{"class":1350},[1137,5865,5866],{"class":1360}," shiki ",[1137,5868,5869],{"class":1350},"from",[1137,5871,1451],{"class":1364},[1137,5873,5874],{"class":1147},"@comark\u002Fnuxt\u002Fplugins\u002Fshiki",[1137,5876,1415],{"class":1364},[1137,5878,5879,5881,5884,5886,5888,5891],{"class":1139,"line":1157},[1137,5880,1726],{"class":1350},[1137,5882,5883],{"class":1360}," python ",[1137,5885,5869],{"class":1350},[1137,5887,1451],{"class":1364},[1137,5889,5890],{"class":1147},"@shikijs\u002Flangs\u002Fpython",[1137,5892,1415],{"class":1364},[1137,5894,5895,5897,5900,5902,5904,5907],{"class":1139,"line":1380},[1137,5896,1726],{"class":1350},[1137,5898,5899],{"class":1360}," sql ",[1137,5901,5869],{"class":1350},[1137,5903,1451],{"class":1364},[1137,5905,5906],{"class":1147},"@shikijs\u002Flangs\u002Fsql",[1137,5908,1415],{"class":1364},[1137,5910,5911,5913,5916,5918,5920,5923],{"class":1139,"line":1395},[1137,5912,1726],{"class":1350},[1137,5914,5915],{"class":1360}," go ",[1137,5917,5869],{"class":1350},[1137,5919,1451],{"class":1364},[1137,5921,5922],{"class":1147},"@shikijs\u002Flangs\u002Fgo",[1137,5924,1415],{"class":1364},[1137,5926,5927,5929,5932,5934,5936,5939],{"class":1139,"line":1407},[1137,5928,1726],{"class":1350},[1137,5930,5931],{"class":1360}," rust ",[1137,5933,5869],{"class":1350},[1137,5935,1451],{"class":1364},[1137,5937,5938],{"class":1147},"@shikijs\u002Flangs\u002Frust",[1137,5940,1415],{"class":1364},[1137,5942,5943],{"class":1139,"line":1418},[1137,5944,1429],{"emptyLinePlaceholder":21},[1137,5946,5947,5949,5951,5954,5956],{"class":1139,"line":1426},[1137,5948,1351],{"class":1350},[1137,5950,1354],{"class":1350},[1137,5952,5953],{"class":1160}," defineMarkdownComponent",[1137,5955,1361],{"class":1360},[1137,5957,1365],{"class":1364},[1137,5959,5960,5963,5965,5967,5970,5972],{"class":1139,"line":1432},[1137,5961,5962],{"class":1370},"  name",[1137,5964,1374],{"class":1364},[1137,5966,1451],{"class":1364},[1137,5968,5969],{"class":1147},"ChatMarkdown",[1137,5971,1389],{"class":1364},[1137,5973,1392],{"class":1364},[1137,5975,5976,5979,5981],{"class":1139,"line":1443},[1137,5977,5978],{"class":1370},"  plugins",[1137,5980,1374],{"class":1364},[1137,5982,1377],{"class":1360},[1137,5984,5985,5988,5990],{"class":1139,"line":1459},[1137,5986,5987],{"class":1160},"    shiki",[1137,5989,1361],{"class":1360},[1137,5991,1365],{"class":1364},[1137,5993,5994,5997,5999,6002,6004,6007,6009,6012,6014],{"class":1139,"line":1465},[1137,5995,5996],{"class":1370},"      languages",[1137,5998,1374],{"class":1364},[1137,6000,6001],{"class":1360}," [python",[1137,6003,1735],{"class":1364},[1137,6005,6006],{"class":1360}," sql",[1137,6008,1735],{"class":1364},[1137,6010,6011],{"class":1360}," go",[1137,6013,1735],{"class":1364},[1137,6015,6016],{"class":1360}," rust]\n",[1137,6018,6019,6021],{"class":1139,"line":1470},[1137,6020,3434],{"class":1364},[1137,6022,1499],{"class":1360},[1137,6024,6025,6027],{"class":1139,"line":1493},[1137,6026,1421],{"class":1360},[1137,6028,1392],{"class":1364},[1137,6030,6031,6034,6036,6038,6041],{"class":1139,"line":1998},[1137,6032,6033],{"class":1370},"  class",[1137,6035,1374],{"class":1364},[1137,6037,1451],{"class":1364},[1137,6039,6040],{"class":1147},"*:first:mt-0 *:last:mb-0",[1137,6042,1415],{"class":1364},[1137,6044,6045,6047],{"class":1139,"line":2025},[1137,6046,1496],{"class":1364},[1137,6048,1499],{"class":1360},[1027,6050,6051,6052,6055],{},"This creates a ",[1087,6053,6054],{},"\u003CChatMarkdown>"," component we'll use in the chat page to render assistant messages and reasoning content.",[1027,6057,6058],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1128,6060,6062],{"className":1519,"code":6061,"filename":1521,"language":1522,"meta":1133,"style":1133},"html.dark .shiki span {\n  color: var(--shiki-dark) !important;\n  background-color: var(--shiki-dark-bg) !important;\n  font-style: var(--shiki-dark-font-style) !important;\n  font-weight: var(--shiki-dark-font-weight) !important;\n  text-decoration: var(--shiki-dark-text-decoration) !important;\n}\n",[1087,6063,6064,6084,6107,6127,6147,6167,6187],{"__ignoreMap":1133},[1137,6065,6066,6069,6071,6074,6077,6079,6082],{"class":1139,"line":1140},[1137,6067,6068],{"class":1143},"html",[1137,6070,1827],{"class":1364},[1137,6072,6073],{"class":1143},"dark",[1137,6075,6076],{"class":1364}," .",[1137,6078,5844],{"class":1143},[1137,6080,6081],{"class":1143}," span",[1137,6083,1440],{"class":1364},[1137,6085,6086,6090,6092,6095,6097,6100,6102,6105],{"class":1139,"line":1157},[1137,6087,6089],{"class":6088},"sqsOY","  color",[1137,6091,1374],{"class":1364},[1137,6093,6094],{"class":1160}," var",[1137,6096,1361],{"class":1364},[1137,6098,6099],{"class":1360},"--shiki-dark",[1137,6101,1901],{"class":1364},[1137,6103,6104],{"class":3626}," !important",[1137,6106,1541],{"class":1364},[1137,6108,6109,6112,6114,6116,6118,6121,6123,6125],{"class":1139,"line":1380},[1137,6110,6111],{"class":6088},"  background-color",[1137,6113,1374],{"class":1364},[1137,6115,6094],{"class":1160},[1137,6117,1361],{"class":1364},[1137,6119,6120],{"class":1360},"--shiki-dark-bg",[1137,6122,1901],{"class":1364},[1137,6124,6104],{"class":3626},[1137,6126,1541],{"class":1364},[1137,6128,6129,6132,6134,6136,6138,6141,6143,6145],{"class":1139,"line":1395},[1137,6130,6131],{"class":6088},"  font-style",[1137,6133,1374],{"class":1364},[1137,6135,6094],{"class":1160},[1137,6137,1361],{"class":1364},[1137,6139,6140],{"class":1360},"--shiki-dark-font-style",[1137,6142,1901],{"class":1364},[1137,6144,6104],{"class":3626},[1137,6146,1541],{"class":1364},[1137,6148,6149,6152,6154,6156,6158,6161,6163,6165],{"class":1139,"line":1407},[1137,6150,6151],{"class":6088},"  font-weight",[1137,6153,1374],{"class":1364},[1137,6155,6094],{"class":1160},[1137,6157,1361],{"class":1364},[1137,6159,6160],{"class":1360},"--shiki-dark-font-weight",[1137,6162,1901],{"class":1364},[1137,6164,6104],{"class":3626},[1137,6166,1541],{"class":1364},[1137,6168,6169,6172,6174,6176,6178,6181,6183,6185],{"class":1139,"line":1418},[1137,6170,6171],{"class":6088},"  text-decoration",[1137,6173,1374],{"class":1364},[1137,6175,6094],{"class":1160},[1137,6177,1361],{"class":1364},[1137,6179,6180],{"class":1360},"--shiki-dark-text-decoration",[1137,6182,1901],{"class":1364},[1137,6184,6104],{"class":3626},[1137,6186,1541],{"class":1364},[1137,6188,6189],{"class":1139,"line":1426},[1137,6190,5477],{"class":1364},[1031,6192,6194],{"id":6193},"creating-the-chat-page","Creating the chat page",[1027,6196,6197,6198,6205,6206,6213],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1081,6199,6202],{"href":6200,"rel":6201},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fuse-chat",[1085],[1087,6203,6204],{},"useChat"," composable and ",[1081,6207,6210],{"href":6208,"rel":6209},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Ftransport#default-transport",[1085],[1087,6211,6212],{},"DefaultChatTransport"," for real-time streaming.",[1337,6215,6216],{},[1714,6217,6218],{},[1128,6219,6223],{"className":1569,"code":6220,"filename":6221,"highlights":6222,"language":34,"meta":1133,"style":1133},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { useChat } 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 useChat composable from AI SDK\nconst { messages, status, error, sendMessage, regenerate, stop } = useChat({\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    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    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=\"messages\"\n          :status=\"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                \u003CChatMarkdown\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatMarkdown\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\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=\"error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"status\"\n            color=\"neutral\"\n            @stop=\"stop()\"\n            @reload=\"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",[1157,1380,1395,2248,2299,2312,2342,2348,2353,2385,2401,2419,2435,2443,3416,3431,3448,3480,3493,3498,3504,3535,3579],[1087,6224,6225,6245,6275,6296,6317,6321,6335,6349,6353,6358,6406,6410,6429,6471,6475,6479,6495,6499,6504,6548,6568,6587,6603,6630,6639,6654,6660,6687,6703,6708,6713,6728,6743,6759,6775,6789,6796,6801,6808,6812,6834,6846,6866,6889,6903,6907,6911,6915,6920,6933,6961,6968,6972,6978,6986,6990,6998,7030,7042,7061,7068,7082,7096,7101,7115,7119,7144,7221,7229,7249,7268,7289,7294,7302,7321,7341,7346,7356,7360,7383,7389,7413,7431,7451,7455,7485,7490,7499,7507,7516,7525,7533,7537,7543,7555,7569,7581,7594,7609,7613,7620,7635,7648,7666,7684,7689,7697,7705,7713,7721],{"__ignoreMap":1133},[1137,6226,6227,6229,6231,6233,6235,6237,6239,6241,6243],{"class":1139,"line":1140},[1137,6228,1579],{"class":1364},[1137,6230,5189],{"class":1370},[1137,6232,5192],{"class":1607},[1137,6234,5195],{"class":1607},[1137,6236,1611],{"class":1364},[1137,6238,1538],{"class":1364},[1137,6240,1343],{"class":1147},[1137,6242,1538],{"class":1364},[1137,6244,1585],{"class":1364},[1137,6246,6248,6250,6252,6255,6257,6260,6262,6265,6267,6269,6271,6273],{"class":6247,"line":1157},[1139,1589],[1137,6249,1726],{"class":1350},[1137,6251,1729],{"class":1364},[1137,6253,6254],{"class":1360}," DefaultChatTransport",[1137,6256,1735],{"class":1364},[1137,6258,6259],{"class":1360}," isReasoningUIPart",[1137,6261,1735],{"class":1364},[1137,6263,6264],{"class":1360}," isTextUIPart",[1137,6266,1751],{"class":1364},[1137,6268,1754],{"class":1350},[1137,6270,1451],{"class":1364},[1137,6272,2558],{"class":1147},[1137,6274,1415],{"class":1364},[1137,6276,6278,6280,6282,6285,6287,6289,6291,6294],{"class":6277,"line":1380},[1139,1589],[1137,6279,1726],{"class":1350},[1137,6281,1729],{"class":1364},[1137,6283,6284],{"class":1360}," useChat",[1137,6286,1751],{"class":1364},[1137,6288,1754],{"class":1350},[1137,6290,1451],{"class":1364},[1137,6292,6293],{"class":1147},"@ai-sdk\u002Fvue",[1137,6295,1415],{"class":1364},[1137,6297,6299,6301,6303,6306,6308,6310,6312,6315],{"class":6298,"line":1395},[1139,1589],[1137,6300,1726],{"class":1350},[1137,6302,1729],{"class":1364},[1137,6304,6305],{"class":1360}," isPartStreaming",[1137,6307,1751],{"class":1364},[1137,6309,1754],{"class":1350},[1137,6311,1451],{"class":1364},[1137,6313,6314],{"class":1147},"@nuxt\u002Fui\u002Futils\u002Fai",[1137,6316,1415],{"class":1364},[1137,6318,6319],{"class":1139,"line":1407},[1137,6320,1429],{"emptyLinePlaceholder":21},[1137,6322,6323,6325,6328,6330,6333],{"class":1139,"line":1418},[1137,6324,3093],{"class":1607},[1137,6326,6327],{"class":1360}," route ",[1137,6329,1611],{"class":1364},[1137,6331,6332],{"class":1160}," useRoute",[1137,6334,2693],{"class":1360},[1137,6336,6337,6339,6342,6344,6347],{"class":1139,"line":1426},[1137,6338,3093],{"class":1607},[1137,6340,6341],{"class":1360}," toast ",[1137,6343,1611],{"class":1364},[1137,6345,6346],{"class":1160}," useToast",[1137,6348,2693],{"class":1360},[1137,6350,6351],{"class":1139,"line":1432},[1137,6352,1429],{"emptyLinePlaceholder":21},[1137,6354,6355],{"class":1139,"line":1443},[1137,6356,6357],{"class":2715},"\u002F\u002F Fetch existing chat data\n",[1137,6359,6360,6362,6364,6367,6369,6372,6374,6376,6378,6381,6383,6385,6388,6390,6393,6395,6398,6400,6402,6404],{"class":1139,"line":1459},[1137,6361,3093],{"class":1607},[1137,6363,1729],{"class":1364},[1137,6365,6366],{"class":1370}," data",[1137,6368,1374],{"class":1364},[1137,6370,6371],{"class":1360}," chatData ",[1137,6373,1496],{"class":1364},[1137,6375,2647],{"class":1364},[1137,6377,2650],{"class":1350},[1137,6379,6380],{"class":1160}," useFetch",[1137,6382,1361],{"class":1360},[1137,6384,3739],{"class":1364},[1137,6386,6387],{"class":1147},"\u002Fapi\u002Fchats\u002F",[1137,6389,5461],{"class":1364},[1137,6391,6392],{"class":1360},"route",[1137,6394,1827],{"class":1364},[1137,6396,6397],{"class":1360},"params",[1137,6399,1827],{"class":1364},[1137,6401,2038],{"class":1360},[1137,6403,5470],{"class":1364},[1137,6405,1499],{"class":1360},[1137,6407,6408],{"class":1139,"line":1465},[1137,6409,1429],{"emptyLinePlaceholder":21},[1137,6411,6412,6415,6417,6419,6422,6424,6427],{"class":1139,"line":1470},[1137,6413,6414],{"class":1350},"if",[1137,6416,1970],{"class":1360},[1137,6418,3599],{"class":1364},[1137,6420,6421],{"class":1360},"chatData",[1137,6423,1827],{"class":1364},[1137,6425,6426],{"class":1360},"value) ",[1137,6428,1365],{"class":1364},[1137,6430,6431,6434,6436,6438,6440,6442,6444,6446,6448,6450,6452,6454,6456,6458,6460,6463,6465,6467,6469],{"class":1139,"line":1493},[1137,6432,6433],{"class":1350},"  throw",[1137,6435,2924],{"class":1160},[1137,6437,1361],{"class":1370},[1137,6439,1884],{"class":1364},[1137,6441,3621],{"class":1370},[1137,6443,1374],{"class":1364},[1137,6445,3627],{"class":3626},[1137,6447,1735],{"class":1364},[1137,6449,3632],{"class":1370},[1137,6451,1374],{"class":1364},[1137,6453,1451],{"class":1364},[1137,6455,3639],{"class":1147},[1137,6457,1389],{"class":1364},[1137,6459,1735],{"class":1364},[1137,6461,6462],{"class":1370}," fatal",[1137,6464,1374],{"class":1364},[1137,6466,4232],{"class":4231},[1137,6468,1751],{"class":1364},[1137,6470,1499],{"class":1370},[1137,6472,6473],{"class":1139,"line":1998},[1137,6474,5477],{"class":1364},[1137,6476,6477],{"class":1139,"line":2025},[1137,6478,1429],{"emptyLinePlaceholder":21},[1137,6480,6481,6483,6485,6487,6489,6491,6493],{"class":1139,"line":2071},[1137,6482,3093],{"class":1607},[1137,6484,5212],{"class":1360},[1137,6486,1611],{"class":1364},[1137,6488,5217],{"class":1160},[1137,6490,1361],{"class":1360},[1137,6492,5222],{"class":1364},[1137,6494,1499],{"class":1360},[1137,6496,6497],{"class":1139,"line":2138},[1137,6498,1429],{"emptyLinePlaceholder":21},[1137,6500,6501],{"class":1139,"line":2208},[1137,6502,6503],{"class":2715},"\u002F\u002F Initialize the useChat composable from AI SDK\n",[1137,6505,6507,6509,6511,6513,6515,6518,6520,6523,6525,6528,6530,6533,6535,6538,6540,6542,6544,6546],{"class":6506,"line":2248},[1139,1589],[1137,6508,3093],{"class":1607},[1137,6510,1729],{"class":1364},[1137,6512,3329],{"class":1360},[1137,6514,1735],{"class":1364},[1137,6516,6517],{"class":1360}," status",[1137,6519,1735],{"class":1364},[1137,6521,6522],{"class":1360}," error",[1137,6524,1735],{"class":1364},[1137,6526,6527],{"class":1360}," sendMessage",[1137,6529,1735],{"class":1364},[1137,6531,6532],{"class":1360}," regenerate",[1137,6534,1735],{"class":1364},[1137,6536,6537],{"class":1360}," stop ",[1137,6539,1496],{"class":1364},[1137,6541,2647],{"class":1364},[1137,6543,6284],{"class":1160},[1137,6545,1361],{"class":1360},[1137,6547,1365],{"class":1364},[1137,6549,6551,6553,6555,6558,6560,6562,6564,6566],{"class":6550,"line":2299},[1139,1589],[1137,6552,1817],{"class":1370},[1137,6554,1374],{"class":1364},[1137,6556,6557],{"class":1360}," chatData",[1137,6559,1827],{"class":1364},[1137,6561,3378],{"class":1360},[1137,6563,1827],{"class":1364},[1137,6565,2038],{"class":1360},[1137,6567,1392],{"class":1364},[1137,6569,6571,6573,6575,6577,6579,6581,6583,6585],{"class":6570,"line":2312},[1139,1589],[1137,6572,1977],{"class":1370},[1137,6574,1374],{"class":1364},[1137,6576,6557],{"class":1360},[1137,6578,1827],{"class":1364},[1137,6580,3378],{"class":1360},[1137,6582,1827],{"class":1364},[1137,6584,2016],{"class":1360},[1137,6586,1392],{"class":1364},[1137,6588,6590,6593,6595,6597,6599,6601],{"class":6589,"line":2342},[1139,1589],[1137,6591,6592],{"class":1370},"  transport",[1137,6594,1374],{"class":1364},[1137,6596,1921],{"class":1364},[1137,6598,6254],{"class":1160},[1137,6600,1361],{"class":1360},[1137,6602,1365],{"class":1364},[1137,6604,6606,6609,6611,6613,6615,6617,6619,6621,6623,6625,6627],{"class":6605,"line":2348},[1139,1589],[1137,6607,6608],{"class":1370},"    api",[1137,6610,1374],{"class":1364},[1137,6612,3733],{"class":1364},[1137,6614,6387],{"class":1147},[1137,6616,5461],{"class":1364},[1137,6618,6421],{"class":1360},[1137,6620,1827],{"class":1364},[1137,6622,3378],{"class":1360},[1137,6624,1827],{"class":1364},[1137,6626,2038],{"class":1360},[1137,6628,6629],{"class":1364},"}`\n",[1137,6631,6633,6635,6637],{"class":6632,"line":2353},[1139,1589],[1137,6634,2438],{"class":1364},[1137,6636,1901],{"class":1360},[1137,6638,1392],{"class":1364},[1137,6640,6642,6645,6647,6650,6652],{"class":6641,"line":2385},[1139,1589],[1137,6643,6644],{"class":1370},"  onData",[1137,6646,1361],{"class":1364},[1137,6648,6649],{"class":1961},"dataPart",[1137,6651,1901],{"class":1364},[1137,6653,1440],{"class":1364},[1137,6655,6657],{"class":6656,"line":2401},[1139,1589],[1137,6658,6659],{"class":2715},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1137,6661,6663,6666,6668,6670,6672,6675,6677,6679,6681,6683,6685],{"class":6662,"line":2419},[1139,1589],[1137,6664,6665],{"class":1350},"    if",[1137,6667,1970],{"class":1370},[1137,6669,6649],{"class":1360},[1137,6671,1827],{"class":1364},[1137,6673,6674],{"class":1360},"type",[1137,6676,3405],{"class":1364},[1137,6678,1451],{"class":1364},[1137,6680,4379],{"class":1147},[1137,6682,1389],{"class":1364},[1137,6684,3604],{"class":1370},[1137,6686,1365],{"class":1364},[1137,6688,6690,6693,6695,6697,6699,6701],{"class":6689,"line":2435},[1139,1589],[1137,6691,6692],{"class":1160},"      refreshNuxtData",[1137,6694,1361],{"class":1370},[1137,6696,1389],{"class":1364},[1137,6698,1806],{"class":1147},[1137,6700,1389],{"class":1364},[1137,6702,1499],{"class":1370},[1137,6704,6706],{"class":6705,"line":2443},[1139,1589],[1137,6707,4626],{"class":1364},[1137,6709,6711],{"class":6710,"line":3416},[1139,1589],[1137,6712,1462],{"class":1364},[1137,6714,6716,6719,6721,6724,6726],{"class":6715,"line":3431},[1139,1589],[1137,6717,6718],{"class":1370},"  onError",[1137,6720,1361],{"class":1364},[1137,6722,6723],{"class":1961},"error",[1137,6725,1901],{"class":1364},[1137,6727,1440],{"class":1364},[1137,6729,6731,6734,6736,6739,6741],{"class":6730,"line":3448},[1139,1589],[1137,6732,6733],{"class":1360},"    toast",[1137,6735,1827],{"class":1364},[1137,6737,6738],{"class":1160},"add",[1137,6740,1361],{"class":1370},[1137,6742,1365],{"class":1364},[1137,6744,6746,6749,6751,6753,6755,6757],{"class":6745,"line":3480},[1139,1589],[1137,6747,6748],{"class":1370},"      title",[1137,6750,1374],{"class":1364},[1137,6752,1451],{"class":1364},[1137,6754,500],{"class":1147},[1137,6756,1389],{"class":1364},[1137,6758,1392],{"class":1364},[1137,6760,6762,6765,6767,6769,6771,6773],{"class":6761,"line":3493},[1139,1589],[1137,6763,6764],{"class":1370},"      description",[1137,6766,1374],{"class":1364},[1137,6768,6522],{"class":1360},[1137,6770,1827],{"class":1364},[1137,6772,4543],{"class":1360},[1137,6774,1392],{"class":1364},[1137,6776,6778,6781,6783,6785,6787],{"class":6777,"line":3498},[1139,1589],[1137,6779,6780],{"class":1370},"      color",[1137,6782,1374],{"class":1364},[1137,6784,1451],{"class":1364},[1137,6786,6723],{"class":1147},[1137,6788,1415],{"class":1364},[1137,6790,6792,6794],{"class":6791,"line":3504},[1139,1589],[1137,6793,3434],{"class":1364},[1137,6795,1499],{"class":1370},[1137,6797,6799],{"class":6798,"line":3535},[1139,1589],[1137,6800,3651],{"class":1364},[1137,6802,6804,6806],{"class":6803,"line":3579},[1139,1589],[1137,6805,1496],{"class":1364},[1137,6807,1499],{"class":1360},[1137,6809,6810],{"class":1139,"line":3586},[1137,6811,1429],{"emptyLinePlaceholder":21},[1137,6813,6814,6817,6820,6822,6825,6827,6830,6832],{"class":1139,"line":3591},[1137,6815,6816],{"class":1607},"function",[1137,6818,6819],{"class":1160}," handleSubmit",[1137,6821,1361],{"class":1364},[1137,6823,6824],{"class":1961},"e",[1137,6826,1374],{"class":1364},[1137,6828,6829],{"class":1143}," Event",[1137,6831,1901],{"class":1364},[1137,6833,1440],{"class":1364},[1137,6835,6836,6839,6841,6844],{"class":1139,"line":3609},[1137,6837,6838],{"class":1360},"  e",[1137,6840,1827],{"class":1364},[1137,6842,6843],{"class":1160},"preventDefault",[1137,6845,2693],{"class":1370},[1137,6847,6848,6850,6852,6854,6856,6858,6860,6862,6864],{"class":1139,"line":3648},[1137,6849,3594],{"class":1350},[1137,6851,1970],{"class":1370},[1137,6853,5271],{"class":1360},[1137,6855,1827],{"class":1364},[1137,6857,3378],{"class":1360},[1137,6859,1827],{"class":1364},[1137,6861,5280],{"class":1160},[1137,6863,5283],{"class":1370},[1137,6865,1365],{"class":1364},[1137,6867,6868,6871,6873,6875,6877,6879,6881,6883,6885,6887],{"class":1139,"line":3654},[1137,6869,6870],{"class":1160},"    sendMessage",[1137,6872,1361],{"class":1370},[1137,6874,1884],{"class":1364},[1137,6876,1738],{"class":1370},[1137,6878,1374],{"class":1364},[1137,6880,5415],{"class":1360},[1137,6882,1827],{"class":1364},[1137,6884,3378],{"class":1360},[1137,6886,1751],{"class":1364},[1137,6888,1499],{"class":1370},[1137,6890,6891,6894,6896,6898,6900],{"class":1139,"line":3659},[1137,6892,6893],{"class":1360},"    input",[1137,6895,1827],{"class":1364},[1137,6897,3378],{"class":1360},[1137,6899,2647],{"class":1364},[1137,6901,6902],{"class":1364}," ''\n",[1137,6904,6905],{"class":1139,"line":3665},[1137,6906,3651],{"class":1364},[1137,6908,6909],{"class":1139,"line":3685},[1137,6910,5477],{"class":1364},[1137,6912,6913],{"class":1139,"line":3713},[1137,6914,1429],{"emptyLinePlaceholder":21},[1137,6916,6917],{"class":1139,"line":3725},[1137,6918,6919],{"class":2715},"\u002F\u002F Auto-generate response for first message\n",[1137,6921,6922,6925,6927,6929,6931],{"class":1139,"line":3744},[1137,6923,6924],{"class":1160},"onMounted",[1137,6926,1361],{"class":1360},[1137,6928,1824],{"class":1364},[1137,6930,1844],{"class":1607},[1137,6932,1440],{"class":1364},[1137,6934,6935,6937,6939,6941,6943,6945,6947,6949,6951,6953,6955,6957,6959],{"class":1139,"line":3772},[1137,6936,3594],{"class":1350},[1137,6938,1970],{"class":1370},[1137,6940,6421],{"class":1360},[1137,6942,1827],{"class":1364},[1137,6944,3378],{"class":1360},[1137,6946,3905],{"class":1364},[1137,6948,2016],{"class":1360},[1137,6950,1827],{"class":1364},[1137,6952,3884],{"class":1360},[1137,6954,3405],{"class":1364},[1137,6956,3890],{"class":3626},[1137,6958,3604],{"class":1370},[1137,6960,1365],{"class":1364},[1137,6962,6963,6966],{"class":1139,"line":3779},[1137,6964,6965],{"class":1160},"    regenerate",[1137,6967,2693],{"class":1370},[1137,6969,6970],{"class":1139,"line":3784},[1137,6971,3651],{"class":1364},[1137,6973,6974,6976],{"class":1139,"line":3850},[1137,6975,1496],{"class":1364},[1137,6977,1499],{"class":1360},[1137,6979,6980,6982,6984],{"class":1139,"line":3855},[1137,6981,1655],{"class":1364},[1137,6983,5189],{"class":1370},[1137,6985,1585],{"class":1364},[1137,6987,6988],{"class":1139,"line":3860},[1137,6989,1429],{"emptyLinePlaceholder":21},[1137,6991,6992,6994,6996],{"class":1139,"line":3866},[1137,6993,1579],{"class":1364},[1137,6995,1582],{"class":1370},[1137,6997,1585],{"class":1364},[1137,6999,7000,7002,7004,7006,7008,7010,7012,7014,7016,7018,7020,7022,7024,7026,7028],{"class":1139,"line":3895},[1137,7001,1592],{"class":1364},[1137,7003,5504],{"class":1370},[1137,7005,5507],{"class":1364},[1137,7007,5510],{"class":1607},[1137,7009,1611],{"class":1364},[1137,7011,1538],{"class":1364},[1137,7013,5517],{"class":1364},[1137,7015,5520],{"class":1370},[1137,7017,5523],{"class":1364},[1137,7019,1389],{"class":1364},[1137,7021,5528],{"class":1147},[1137,7023,1389],{"class":1364},[1137,7025,1751],{"class":1364},[1137,7027,1538],{"class":1364},[1137,7029,1585],{"class":1364},[1137,7031,7032,7034,7036,7038,7040],{"class":1139,"line":3936},[1137,7033,1601],{"class":1364},[1137,7035,1582],{"class":1370},[1137,7037,5545],{"class":1364},[1137,7039,5520],{"class":1607},[1137,7041,1585],{"class":1364},[1137,7043,7044,7046,7048,7050,7052,7054,7057,7059],{"class":1139,"line":3965},[1137,7045,1625],{"class":1364},[1137,7047,5556],{"class":1370},[1137,7049,5559],{"class":1607},[1137,7051,1611],{"class":1364},[1137,7053,1538],{"class":1364},[1137,7055,7056],{"class":1147},"min-h-dvh flex flex-col py-4 sm:py-6",[1137,7058,1538],{"class":1364},[1137,7060,1585],{"class":1364},[1137,7062,7063,7065],{"class":1139,"line":3977},[1137,7064,5575],{"class":1364},[1137,7066,7067],{"class":1370},"UChatMessages\n",[1137,7069,7070,7072,7074,7076,7078,7080],{"class":1139,"line":3993},[1137,7071,5638],{"class":1364},[1137,7073,2016],{"class":1607},[1137,7075,1611],{"class":1364},[1137,7077,1538],{"class":1364},[1137,7079,2016],{"class":1360},[1137,7081,5632],{"class":1364},[1137,7083,7084,7086,7088,7090,7092,7094],{"class":1139,"line":4007},[1137,7085,5638],{"class":1364},[1137,7087,5641],{"class":1607},[1137,7089,1611],{"class":1364},[1137,7091,1538],{"class":1364},[1137,7093,5641],{"class":1360},[1137,7095,5632],{"class":1364},[1137,7097,7098],{"class":1139,"line":4014},[1137,7099,7100],{"class":1607},"          should-auto-scroll\n",[1137,7102,7103,7106,7108,7110,7113],{"class":1139,"line":4019},[1137,7104,7105],{"class":1607},"          class",[1137,7107,1611],{"class":1364},[1137,7109,1538],{"class":1364},[1137,7111,7112],{"class":1147},"flex-1",[1137,7114,5632],{"class":1364},[1137,7116,7117],{"class":1139,"line":4024},[1137,7118,5723],{"class":1364},[1137,7120,7121,7123,7125,7127,7129,7131,7133,7135,7138,7140,7142],{"class":1139,"line":4030},[1137,7122,5729],{"class":1364},[1137,7124,1582],{"class":1370},[1137,7126,5545],{"class":1364},[1137,7128,374],{"class":1607},[1137,7130,1611],{"class":1364},[1137,7132,1538],{"class":1364},[1137,7134,1884],{"class":1364},[1137,7136,7137],{"class":1360}," message ",[1137,7139,1496],{"class":1364},[1137,7141,1538],{"class":1364},[1137,7143,1585],{"class":1364},[1137,7145,7146,7149,7151,7154,7156,7158,7161,7163,7166,7169,7171,7173,7175,7177,7179,7182,7184,7187,7189,7191,7193,7195,7198,7200,7203,7205,7207,7209,7211,7213,7216,7219],{"class":1139,"line":4047},[1137,7147,7148],{"class":1364},"            \u003C",[1137,7150,1582],{"class":1370},[1137,7152,7153],{"class":1350}," v-for",[1137,7155,1611],{"class":1364},[1137,7157,1538],{"class":1364},[1137,7159,7160],{"class":1360},"(part",[1137,7162,1735],{"class":1364},[1137,7164,7165],{"class":1360}," index) ",[1137,7167,7168],{"class":1364},"in",[1137,7170,2642],{"class":1360},[1137,7172,1827],{"class":1364},[1137,7174,2222],{"class":1360},[1137,7176,1538],{"class":1364},[1137,7178,5507],{"class":1364},[1137,7180,7181],{"class":1607},"key",[1137,7183,1611],{"class":1364},[1137,7185,7186],{"class":1364},"\"`${",[1137,7188,4543],{"class":1360},[1137,7190,1827],{"class":1364},[1137,7192,2038],{"class":1360},[1137,7194,1496],{"class":1364},[1137,7196,7197],{"class":1147},"-",[1137,7199,5461],{"class":1364},[1137,7201,7202],{"class":1360},"part",[1137,7204,1827],{"class":1364},[1137,7206,6674],{"class":1360},[1137,7208,1496],{"class":1364},[1137,7210,7197],{"class":1147},[1137,7212,5461],{"class":1364},[1137,7214,7215],{"class":1360},"index",[1137,7217,7218],{"class":1364},"}`\"",[1137,7220,1585],{"class":1364},[1137,7222,7223,7226],{"class":1139,"line":4069},[1137,7224,7225],{"class":1364},"              \u003C",[1137,7227,7228],{"class":1370},"UChatReasoning\n",[1137,7230,7231,7234,7236,7238,7241,7243,7245,7247],{"class":1139,"line":4087},[1137,7232,7233],{"class":1350},"                v-if",[1137,7235,1611],{"class":1364},[1137,7237,1538],{"class":1364},[1137,7239,7240],{"class":1160},"isReasoningUIPart",[1137,7242,1361],{"class":1364},[1137,7244,7202],{"class":1360},[1137,7246,1901],{"class":1364},[1137,7248,5632],{"class":1364},[1137,7250,7251,7254,7256,7258,7260,7262,7264,7266],{"class":1139,"line":4095},[1137,7252,7253],{"class":1364},"                :",[1137,7255,5404],{"class":1607},[1137,7257,1611],{"class":1364},[1137,7259,1538],{"class":1364},[1137,7261,7202],{"class":1360},[1137,7263,1827],{"class":1364},[1137,7265,5404],{"class":1360},[1137,7267,5632],{"class":1364},[1137,7269,7270,7272,7274,7276,7278,7281,7283,7285,7287],{"class":1139,"line":4112},[1137,7271,7253],{"class":1364},[1137,7273,5656],{"class":1607},[1137,7275,1611],{"class":1364},[1137,7277,1538],{"class":1364},[1137,7279,7280],{"class":1160},"isPartStreaming",[1137,7282,1361],{"class":1364},[1137,7284,7202],{"class":1360},[1137,7286,1901],{"class":1364},[1137,7288,5632],{"class":1364},[1137,7290,7291],{"class":1139,"line":4133},[1137,7292,7293],{"class":1364},"              >\n",[1137,7295,7296,7299],{"class":1139,"line":4143},[1137,7297,7298],{"class":1364},"                \u003C",[1137,7300,7301],{"class":1370},"ChatMarkdown\n",[1137,7303,7304,7307,7309,7311,7313,7315,7317,7319],{"class":1139,"line":4153},[1137,7305,7306],{"class":1364},"                  :",[1137,7308,3378],{"class":1607},[1137,7310,1611],{"class":1364},[1137,7312,1538],{"class":1364},[1137,7314,7202],{"class":1360},[1137,7316,1827],{"class":1364},[1137,7318,5404],{"class":1360},[1137,7320,5632],{"class":1364},[1137,7322,7323,7325,7327,7329,7331,7333,7335,7337,7339],{"class":1139,"line":4163},[1137,7324,7306],{"class":1364},[1137,7326,5656],{"class":1607},[1137,7328,1611],{"class":1364},[1137,7330,1538],{"class":1364},[1137,7332,7280],{"class":1160},[1137,7334,1361],{"class":1364},[1137,7336,7202],{"class":1360},[1137,7338,1901],{"class":1364},[1137,7340,5632],{"class":1364},[1137,7342,7343],{"class":1139,"line":4180},[1137,7344,7345],{"class":1364},"                \u002F>\n",[1137,7347,7348,7351,7354],{"class":1139,"line":4191},[1137,7349,7350],{"class":1364},"              \u003C\u002F",[1137,7352,7353],{"class":1370},"UChatReasoning",[1137,7355,1585],{"class":1364},[1137,7357,7358],{"class":1139,"line":4197},[1137,7359,1429],{"emptyLinePlaceholder":21},[1137,7361,7362,7364,7366,7369,7371,7373,7376,7379,7381],{"class":1139,"line":4203},[1137,7363,7225],{"class":1364},[1137,7365,1582],{"class":1370},[1137,7367,7368],{"class":1350}," v-else-if",[1137,7370,1611],{"class":1364},[1137,7372,1538],{"class":1364},[1137,7374,7375],{"class":1160},"isTextUIPart",[1137,7377,7378],{"class":1360},"(part)",[1137,7380,1538],{"class":1364},[1137,7382,1585],{"class":1364},[1137,7384,7385,7387],{"class":1139,"line":4213},[1137,7386,7298],{"class":1364},[1137,7388,7301],{"class":1370},[1137,7390,7391,7394,7396,7398,7400,7402,7404,7407,7409,7411],{"class":1139,"line":4223},[1137,7392,7393],{"class":1350},"                  v-if",[1137,7395,1611],{"class":1364},[1137,7397,1538],{"class":1364},[1137,7399,4543],{"class":1360},[1137,7401,1827],{"class":1364},[1137,7403,2152],{"class":1360},[1137,7405,7406],{"class":1364}," === ",[1137,7408,1389],{"class":1364},[1137,7410,2179],{"class":1147},[1137,7412,5669],{"class":1364},[1137,7414,7415,7417,7419,7421,7423,7425,7427,7429],{"class":1139,"line":4237},[1137,7416,7306],{"class":1364},[1137,7418,3378],{"class":1607},[1137,7420,1611],{"class":1364},[1137,7422,1538],{"class":1364},[1137,7424,7202],{"class":1360},[1137,7426,1827],{"class":1364},[1137,7428,5404],{"class":1360},[1137,7430,5632],{"class":1364},[1137,7432,7433,7435,7437,7439,7441,7443,7445,7447,7449],{"class":1139,"line":4252},[1137,7434,7306],{"class":1364},[1137,7436,5656],{"class":1607},[1137,7438,1611],{"class":1364},[1137,7440,1538],{"class":1364},[1137,7442,7280],{"class":1160},[1137,7444,1361],{"class":1364},[1137,7446,7202],{"class":1360},[1137,7448,1901],{"class":1364},[1137,7450,5632],{"class":1364},[1137,7452,7453],{"class":1139,"line":4257},[1137,7454,7345],{"class":1364},[1137,7456,7457,7459,7461,7463,7465,7467,7470,7472,7474,7476,7478,7481,7483],{"class":1139,"line":4262},[1137,7458,7298],{"class":1364},[1137,7460,1027],{"class":1370},[1137,7462,7368],{"class":1607},[1137,7464,1611],{"class":1364},[1137,7466,1538],{"class":1364},[1137,7468,7469],{"class":1147},"message.role === 'user'",[1137,7471,1538],{"class":1364},[1137,7473,5559],{"class":1607},[1137,7475,1611],{"class":1364},[1137,7477,1538],{"class":1364},[1137,7479,7480],{"class":1147},"whitespace-pre-wrap",[1137,7482,1538],{"class":1364},[1137,7484,1585],{"class":1364},[1137,7486,7487],{"class":1139,"line":4272},[1137,7488,7489],{"class":1360},"                  {{ part.text }}\n",[1137,7491,7492,7495,7497],{"class":1139,"line":4288},[1137,7493,7494],{"class":1364},"                \u003C\u002F",[1137,7496,1027],{"class":1370},[1137,7498,1585],{"class":1364},[1137,7500,7501,7503,7505],{"class":1139,"line":4303},[1137,7502,7350],{"class":1364},[1137,7504,1582],{"class":1370},[1137,7506,1585],{"class":1364},[1137,7508,7509,7512,7514],{"class":1139,"line":4309},[1137,7510,7511],{"class":1364},"            \u003C\u002F",[1137,7513,1582],{"class":1370},[1137,7515,1585],{"class":1364},[1137,7517,7518,7521,7523],{"class":1139,"line":4315},[1137,7519,7520],{"class":1364},"          \u003C\u002F",[1137,7522,1582],{"class":1370},[1137,7524,1585],{"class":1364},[1137,7526,7527,7529,7531],{"class":1139,"line":4323},[1137,7528,5601],{"class":1364},[1137,7530,5160],{"class":1370},[1137,7532,1585],{"class":1364},[1137,7534,7535],{"class":1139,"line":4328},[1137,7536,1429],{"emptyLinePlaceholder":21},[1137,7538,7539,7541],{"class":1139,"line":4334},[1137,7540,5575],{"class":1364},[1137,7542,5617],{"class":1370},[1137,7544,7545,7547,7549,7551,7553],{"class":1139,"line":4354},[1137,7546,5623],{"class":1607},[1137,7548,1611],{"class":1364},[1137,7550,1538],{"class":1364},[1137,7552,5271],{"class":1360},[1137,7554,5632],{"class":1364},[1137,7556,7557,7559,7561,7563,7565,7567],{"class":1139,"line":4369},[1137,7558,5638],{"class":1364},[1137,7560,6723],{"class":1607},[1137,7562,1611],{"class":1364},[1137,7564,1538],{"class":1364},[1137,7566,6723],{"class":1360},[1137,7568,5632],{"class":1364},[1137,7570,7571,7573,7575,7577,7579],{"class":1139,"line":4386},[1137,7572,5675],{"class":1607},[1137,7574,1611],{"class":1364},[1137,7576,1538],{"class":1364},[1137,7578,5682],{"class":1147},[1137,7580,5632],{"class":1364},[1137,7582,7583,7585,7587,7589,7592],{"class":1139,"line":4409},[1137,7584,7105],{"class":1607},[1137,7586,1611],{"class":1364},[1137,7588,1538],{"class":1364},[1137,7590,7591],{"class":1147},"sticky bottom-0",[1137,7593,5632],{"class":1364},[1137,7595,7596,7598,7600,7602,7604,7607],{"class":1139,"line":4420},[1137,7597,5705],{"class":1364},[1137,7599,5708],{"class":1607},[1137,7601,1611],{"class":1364},[1137,7603,1538],{"class":1364},[1137,7605,7606],{"class":1360},"handleSubmit",[1137,7608,5632],{"class":1364},[1137,7610,7611],{"class":1139,"line":4428},[1137,7612,5723],{"class":1364},[1137,7614,7615,7617],{"class":1139,"line":4434},[1137,7616,5729],{"class":1364},[1137,7618,7619],{"class":1370},"UChatPromptSubmit\n",[1137,7621,7622,7625,7627,7629,7631,7633],{"class":1139,"line":4439},[1137,7623,7624],{"class":1364},"            :",[1137,7626,5641],{"class":1607},[1137,7628,1611],{"class":1364},[1137,7630,1538],{"class":1364},[1137,7632,5641],{"class":1360},[1137,7634,5632],{"class":1364},[1137,7636,7637,7640,7642,7644,7646],{"class":1139,"line":4474},[1137,7638,7639],{"class":1607},"            color",[1137,7641,1611],{"class":1364},[1137,7643,1538],{"class":1364},[1137,7645,5742],{"class":1147},[1137,7647,5632],{"class":1364},[1137,7649,7650,7653,7656,7658,7660,7662,7664],{"class":1139,"line":4480},[1137,7651,7652],{"class":1364},"            @",[1137,7654,7655],{"class":1607},"stop",[1137,7657,1611],{"class":1364},[1137,7659,1538],{"class":1364},[1137,7661,7655],{"class":1160},[1137,7663,1824],{"class":1364},[1137,7665,5632],{"class":1364},[1137,7667,7668,7670,7673,7675,7677,7680,7682],{"class":1139,"line":4500},[1137,7669,7652],{"class":1364},[1137,7671,7672],{"class":1607},"reload",[1137,7674,1611],{"class":1364},[1137,7676,1538],{"class":1364},[1137,7678,7679],{"class":1160},"regenerate",[1137,7681,1824],{"class":1364},[1137,7683,5632],{"class":1364},[1137,7685,7686],{"class":1139,"line":4506},[1137,7687,7688],{"class":1364},"          \u002F>\n",[1137,7690,7691,7693,7695],{"class":1139,"line":4552},[1137,7692,5601],{"class":1364},[1137,7694,5154],{"class":1370},[1137,7696,1585],{"class":1364},[1137,7698,7699,7701,7703],{"class":1139,"line":4568},[1137,7700,5760],{"class":1364},[1137,7702,5556],{"class":1370},[1137,7704,1585],{"class":1364},[1137,7706,7707,7709,7711],{"class":1139,"line":4601},[1137,7708,1636],{"class":1364},[1137,7710,1582],{"class":1370},[1137,7712,1585],{"class":1364},[1137,7714,7715,7717,7719],{"class":1139,"line":4615},[1137,7716,1646],{"class":1364},[1137,7718,5504],{"class":1370},[1137,7720,1585],{"class":1364},[1137,7722,7723,7725,7727],{"class":1139,"line":4623},[1137,7724,1655],{"class":1364},[1137,7726,1582],{"class":1370},[1137,7728,1585],{"class":1364},[1027,7730,7731],{},"Here's a breakdown of the key parts:",[1027,7733,7734],{},[1045,7735,4702,7736,7738],{},[1087,7737,6204],{}," composable",[1027,7740,4702,7741,7746,7747,7749],{},[1081,7742,7744],{"href":6200,"rel":7743},[1085],[1087,7745,6204],{}," composable from ",[1087,7748,6293],{}," manages the entire conversation state. It handles:",[1039,7751,7752,7757,7771,7777,7783],{},[1042,7753,7754,7755],{},"Message history with ",[1087,7756,2016],{},[1042,7758,7759,7760,1970,7762,2889,7764,2889,7767,2889,7769,1901],{},"Connection status with ",[1087,7761,5641],{},[1087,7763,5666],{},[1087,7765,7766],{},"submitted",[1087,7768,5656],{},[1087,7770,6723],{},[1042,7772,7773,7774],{},"Sending messages with ",[1087,7775,7776],{},"sendMessage()",[1042,7778,7779,7780],{},"Stopping generation with ",[1087,7781,7782],{},"stop()",[1042,7784,7785,7786],{},"Regenerating responses with ",[1087,7787,7788],{},"regenerate()",[1027,7790,4702,7791,7794,7795,7800,7801,7803],{},[1087,7792,7793],{},"onData"," callback receives ",[1081,7796,7799],{"href":7797,"rel":7798},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1085],"custom data events"," from the server (like ",[1087,7802,4379],{},"), so you can react to server-side events during streaming.",[1027,7805,7806],{},[1045,7807,7808],{},"UChatMessages Component",[1027,7810,4702,7811,7815],{},[1081,7812,7813],{"href":275},[1087,7814,5160],{}," component is purpose-built for AI chatbots with:",[1039,7817,7818,7821,7824,7827],{},[1042,7819,7820],{},"Auto-scroll to bottom on load",[1042,7822,7823],{},"Continuous scrolling as messages stream in",[1042,7825,7826],{},"A loading indicator while the assistant processes",[1042,7828,7829],{},"An \"Auto scroll\" button when scrolled up",[1027,7831,7832],{},[1045,7833,7834],{},"Rendering Message Parts",[1027,7836,7837,7838,7840,7841,1090,7843,7845,7846,7848,7849,7853,7854,7856,7857,7859],{},"We iterate over message ",[1087,7839,2222],{}," using AI SDK helpers like ",[1087,7842,7375],{},[1087,7844,7240],{},", rendering assistant text with the ",[1087,7847,6054],{}," component we created earlier and reasoning content with ",[1081,7850,7851],{"href":295},[1087,7852,7353],{},". The ",[1087,7855,7280],{}," utility from ",[1087,7858,6314],{}," detects if a part is currently being streamed.",[1027,7861,7862],{},[1045,7863,7864],{},"UChatPromptSubmit Component",[1027,7866,4702,7867,7871],{},[1081,7868,7869],{"href":290},[1087,7870,5732],{}," component adapts based on the chat status:",[1039,7873,7874,7877,7880],{},[1042,7875,7876],{},"Shows a send button when ready",[1042,7878,7879],{},"Shows a stop button while streaming",[1042,7881,7882],{},"Shows a reload button after an error",[1031,7884,7886],{"id":7885},"adding-chat-history","Adding chat history",[1027,7888,7889],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1165,7891,7893],{"id":7892},"listing-chats-api","Listing chats API",[1027,7895,7896],{},"First, create an endpoint to fetch all chats:",[1337,7898,7899],{},[1128,7900,7903],{"className":1341,"code":7901,"filename":7902,"language":1343,"meta":1133,"style":1133},"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",[1087,7904,7905,7923,7945,7964,7968,7986,8011,8038,8044],{"__ignoreMap":1133},[1137,7906,7907,7909,7911,7913,7915,7917,7919,7921],{"class":1139,"line":1140},[1137,7908,1726],{"class":1350},[1137,7910,1729],{"class":1364},[1137,7912,2522],{"class":1360},[1137,7914,1751],{"class":1364},[1137,7916,1754],{"class":1350},[1137,7918,1451],{"class":1364},[1137,7920,1165],{"class":1147},[1137,7922,1415],{"class":1364},[1137,7924,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943],{"class":1139,"line":1157},[1137,7926,1726],{"class":1350},[1137,7928,1729],{"class":1364},[1137,7930,2465],{"class":1360},[1137,7932,1735],{"class":1364},[1137,7934,2573],{"class":1360},[1137,7936,1751],{"class":1364},[1137,7938,1754],{"class":1350},[1137,7940,1451],{"class":1364},[1137,7942,2582],{"class":1147},[1137,7944,1415],{"class":1364},[1137,7946,7947,7949,7951,7954,7956,7958,7960,7962],{"class":1139,"line":1380},[1137,7948,1726],{"class":1350},[1137,7950,1729],{"class":1364},[1137,7952,7953],{"class":1360}," desc",[1137,7955,1751],{"class":1364},[1137,7957,1754],{"class":1350},[1137,7959,1451],{"class":1364},[1137,7961,1779],{"class":1147},[1137,7963,1415],{"class":1364},[1137,7965,7966],{"class":1139,"line":1395},[1137,7967,1429],{"emptyLinePlaceholder":21},[1137,7969,7970,7972,7974,7976,7978,7980,7982,7984],{"class":1139,"line":1407},[1137,7971,1351],{"class":1350},[1137,7973,1354],{"class":1350},[1137,7975,2522],{"class":1160},[1137,7977,1361],{"class":1360},[1137,7979,2621],{"class":1607},[1137,7981,5039],{"class":1364},[1137,7983,1844],{"class":1607},[1137,7985,1440],{"class":1364},[1137,7987,7988,7990,7992,7994,7996,7998,8000,8002,8004,8007,8009],{"class":1139,"line":1418},[1137,7989,2865],{"class":1350},[1137,7991,2650],{"class":1350},[1137,7993,2465],{"class":1360},[1137,7995,1827],{"class":1364},[1137,7997,3519],{"class":1360},[1137,7999,1827],{"class":1364},[1137,8001,1806],{"class":1360},[1137,8003,1827],{"class":1364},[1137,8005,8006],{"class":1160},"findMany",[1137,8008,1361],{"class":1370},[1137,8010,1365],{"class":1364},[1137,8012,8013,8016,8018,8020,8022,8024,8026,8028,8030,8032,8034,8036],{"class":1139,"line":1426},[1137,8014,8015],{"class":1160},"    orderBy",[1137,8017,1374],{"class":1364},[1137,8019,5039],{"class":1364},[1137,8021,1844],{"class":1607},[1137,8023,7953],{"class":1160},[1137,8025,1361],{"class":1370},[1137,8027,2742],{"class":1360},[1137,8029,1827],{"class":1364},[1137,8031,1806],{"class":1360},[1137,8033,1827],{"class":1364},[1137,8035,5056],{"class":1360},[1137,8037,1499],{"class":1370},[1137,8039,8040,8042],{"class":1139,"line":1432},[1137,8041,2438],{"class":1364},[1137,8043,1499],{"class":1370},[1137,8045,8046,8048],{"class":1139,"line":1443},[1137,8047,1496],{"class":1364},[1137,8049,1499],{"class":1360},[1165,8051,8053],{"id":8052},"building-the-chats-history-dropdown","Building the chats history dropdown",[1027,8055,8056,8057,8062,8063,8068,8069,8062,8076,8078],{},"The component uses ",[1081,8058,8059],{"href":460},[1087,8060,8061],{},"UDropdownMenu"," with a ",[1081,8064,8065],{"href":234},[1087,8066,8067],{},"UButton"," as trigger. Use ",[1081,8070,8073],{"href":8071,"rel":8072},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1085],[1087,8074,8075],{},"useFetch",[1087,8077,7181],{}," to fetch and cache the chat list:",[1337,8080,8081],{},[1128,8082,8085],{"className":1569,"code":8083,"filename":8084,"language":34,"meta":1133,"style":1133},"\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",[1087,8086,8087,8107,8119,8123,8155,8170,8184,8190,8194,8214,8219,8235,8251,8271,8295,8299,8324,8349,8371,8397,8403,8407,8415,8419,8427,8459,8466,8483,8497,8511,8523,8537,8542,8550],{"__ignoreMap":1133},[1137,8088,8089,8091,8093,8095,8097,8099,8101,8103,8105],{"class":1139,"line":1140},[1137,8090,1579],{"class":1364},[1137,8092,5189],{"class":1370},[1137,8094,5192],{"class":1607},[1137,8096,5195],{"class":1607},[1137,8098,1611],{"class":1364},[1137,8100,1538],{"class":1364},[1137,8102,1343],{"class":1147},[1137,8104,1538],{"class":1364},[1137,8106,1585],{"class":1364},[1137,8108,8109,8111,8113,8115,8117],{"class":1139,"line":1157},[1137,8110,3093],{"class":1607},[1137,8112,6327],{"class":1360},[1137,8114,1611],{"class":1364},[1137,8116,6332],{"class":1160},[1137,8118,2693],{"class":1360},[1137,8120,8121],{"class":1139,"line":1380},[1137,8122,1429],{"emptyLinePlaceholder":21},[1137,8124,8125,8127,8129,8131,8133,8135,8137,8139,8141,8143,8145,8147,8149,8151,8153],{"class":1139,"line":1395},[1137,8126,3093],{"class":1607},[1137,8128,1729],{"class":1364},[1137,8130,6366],{"class":1370},[1137,8132,1374],{"class":1364},[1137,8134,1795],{"class":1360},[1137,8136,1496],{"class":1364},[1137,8138,2647],{"class":1364},[1137,8140,2650],{"class":1350},[1137,8142,6380],{"class":1160},[1137,8144,1361],{"class":1360},[1137,8146,1389],{"class":1364},[1137,8148,5332],{"class":1147},[1137,8150,1389],{"class":1364},[1137,8152,1735],{"class":1364},[1137,8154,1440],{"class":1364},[1137,8156,8157,8160,8162,8164,8166,8168],{"class":1139,"line":1407},[1137,8158,8159],{"class":1370},"  key",[1137,8161,1374],{"class":1364},[1137,8163,1451],{"class":1364},[1137,8165,1806],{"class":1147},[1137,8167,1389],{"class":1364},[1137,8169,1392],{"class":1364},[1137,8171,8172,8175,8177,8179,8181],{"class":1139,"line":1418},[1137,8173,8174],{"class":1160},"  default",[1137,8176,1374],{"class":1364},[1137,8178,5039],{"class":1364},[1137,8180,1844],{"class":1607},[1137,8182,8183],{"class":1360}," []\n",[1137,8185,8186,8188],{"class":1139,"line":1426},[1137,8187,1496],{"class":1364},[1137,8189,1499],{"class":1360},[1137,8191,8192],{"class":1139,"line":1432},[1137,8193,1429],{"emptyLinePlaceholder":21},[1137,8195,8196,8198,8201,8203,8206,8208,8210,8212],{"class":1139,"line":1443},[1137,8197,3093],{"class":1607},[1137,8199,8200],{"class":1360}," items ",[1137,8202,1611],{"class":1364},[1137,8204,8205],{"class":1160}," computed",[1137,8207,1361],{"class":1360},[1137,8209,1824],{"class":1364},[1137,8211,1844],{"class":1607},[1137,8213,1377],{"class":1360},[1137,8215,8216],{"class":1139,"line":1459},[1137,8217,8218],{"class":1364},"  {\n",[1137,8220,8221,8224,8226,8228,8231,8233],{"class":1139,"line":1465},[1137,8222,8223],{"class":1370},"    label",[1137,8225,1374],{"class":1364},[1137,8227,1451],{"class":1364},[1137,8229,8230],{"class":1147},"New chat",[1137,8232,1389],{"class":1364},[1137,8234,1392],{"class":1364},[1137,8236,8237,8240,8242,8244,8247,8249],{"class":1139,"line":1470},[1137,8238,8239],{"class":1370},"    to",[1137,8241,1374],{"class":1364},[1137,8243,1451],{"class":1364},[1137,8245,8246],{"class":1147},"\u002F",[1137,8248,1389],{"class":1364},[1137,8250,1392],{"class":1364},[1137,8252,8253,8256,8258,8260,8267,8269],{"class":1139,"line":1493},[1137,8254,8255],{"class":1370},"    icon",[1137,8257,1374],{"class":1364},[1137,8259,1451],{"class":1364},[1137,8261,8262,8266],{"class":1147},[8263,8264],"i",{"class":8265},"shiki-icon-highlight s5r3L","i-lucide-plus-square",[1137,8268,1389],{"class":1364},[1137,8270,1392],{"class":1364},[1137,8272,8273,8276,8278,8281,8283,8286,8289,8291,8293],{"class":1139,"line":1998},[1137,8274,8275],{"class":1370},"    active",[1137,8277,1374],{"class":1364},[1137,8279,8280],{"class":1360}," route",[1137,8282,1827],{"class":1364},[1137,8284,8285],{"class":1360},"name ",[1137,8287,8288],{"class":1364},"===",[1137,8290,1451],{"class":1364},[1137,8292,7215],{"class":1147},[1137,8294,1415],{"class":1364},[1137,8296,8297],{"class":1139,"line":2025},[1137,8298,1462],{"class":1364},[1137,8300,8301,8304,8306,8308,8310,8312,8314,8316,8318,8320,8322],{"class":1139,"line":2071},[1137,8302,8303],{"class":1364},"  ...",[1137,8305,1806],{"class":1360},[1137,8307,1827],{"class":1364},[1137,8309,3378],{"class":1360},[1137,8311,1827],{"class":1364},[1137,8313,4538],{"class":1160},[1137,8315,1361],{"class":1360},[1137,8317,266],{"class":1961},[1137,8319,1844],{"class":1607},[1137,8321,1970],{"class":1360},[1137,8323,1365],{"class":1364},[1137,8325,8326,8328,8330,8332,8334,8337,8340,8342,8345,8347],{"class":1139,"line":2138},[1137,8327,8223],{"class":1370},[1137,8329,1374],{"class":1364},[1137,8331,2815],{"class":1360},[1137,8333,1827],{"class":1364},[1137,8335,8336],{"class":1360},"title ",[1137,8338,8339],{"class":1364},"||",[1137,8341,1451],{"class":1364},[1137,8343,8344],{"class":1147},"Untitled",[1137,8346,1389],{"class":1364},[1137,8348,1392],{"class":1364},[1137,8350,8351,8353,8355,8357,8359,8361,8363,8365,8367,8369],{"class":1139,"line":2208},[1137,8352,8239],{"class":1370},[1137,8354,1374],{"class":1364},[1137,8356,3733],{"class":1364},[1137,8358,5458],{"class":1147},[1137,8360,5461],{"class":1364},[1137,8362,266],{"class":1360},[1137,8364,1827],{"class":1364},[1137,8366,2038],{"class":1360},[1137,8368,5470],{"class":1364},[1137,8370,1392],{"class":1364},[1137,8372,8373,8375,8377,8379,8381,8383,8385,8388,8390,8392,8394],{"class":1139,"line":2248},[1137,8374,8275],{"class":1370},[1137,8376,1374],{"class":1364},[1137,8378,8280],{"class":1360},[1137,8380,1827],{"class":1364},[1137,8382,6397],{"class":1360},[1137,8384,1827],{"class":1364},[1137,8386,8387],{"class":1360},"id ",[1137,8389,8288],{"class":1364},[1137,8391,2815],{"class":1360},[1137,8393,1827],{"class":1364},[1137,8395,8396],{"class":1360},"id\n",[1137,8398,8399,8401],{"class":1139,"line":2299},[1137,8400,2438],{"class":1364},[1137,8402,1991],{"class":1360},[1137,8404,8405],{"class":1139,"line":2312},[1137,8406,2345],{"class":1360},[1137,8408,8409,8411,8413],{"class":1139,"line":2342},[1137,8410,1655],{"class":1364},[1137,8412,5189],{"class":1370},[1137,8414,1585],{"class":1364},[1137,8416,8417],{"class":1139,"line":2348},[1137,8418,1429],{"emptyLinePlaceholder":21},[1137,8420,8421,8423,8425],{"class":1139,"line":2353},[1137,8422,1579],{"class":1364},[1137,8424,1582],{"class":1370},[1137,8426,1585],{"class":1364},[1137,8428,8429,8431,8433,8435,8438,8440,8442,8444,8446,8448,8450,8452,8455,8457],{"class":1139,"line":2385},[1137,8430,1592],{"class":1364},[1137,8432,8061],{"class":1370},[1137,8434,5507],{"class":1364},[1137,8436,8437],{"class":1607},"items",[1137,8439,1611],{"class":1364},[1137,8441,1538],{"class":1364},[1137,8443,8437],{"class":1360},[1137,8445,1538],{"class":1364},[1137,8447,5559],{"class":1607},[1137,8449,1611],{"class":1364},[1137,8451,1538],{"class":1364},[1137,8453,8454],{"class":1147},"m-2",[1137,8456,1538],{"class":1364},[1137,8458,1585],{"class":1364},[1137,8460,8461,8463],{"class":1139,"line":2401},[1137,8462,1601],{"class":1364},[1137,8464,8465],{"class":1370},"UButton\n",[1137,8467,8468,8471,8473,8475,8481],{"class":1139,"line":2419},[1137,8469,8470],{"class":1607},"      icon",[1137,8472,1611],{"class":1364},[1137,8474,1538],{"class":1364},[1137,8476,8477,8480],{"class":1147},[8263,8478],{"class":8479},"shiki-icon-highlight sS-BN","i-lucide-messages-square",[1137,8482,5632],{"class":1364},[1137,8484,8485,8488,8490,8492,8495],{"class":1139,"line":2435},[1137,8486,8487],{"class":1607},"      variant",[1137,8489,1611],{"class":1364},[1137,8491,1538],{"class":1364},[1137,8493,8494],{"class":1147},"ghost",[1137,8496,5632],{"class":1364},[1137,8498,8499,8502,8504,8506,8509],{"class":1139,"line":2443},[1137,8500,8501],{"class":1607},"      label",[1137,8503,1611],{"class":1364},[1137,8505,1538],{"class":1364},[1137,8507,8508],{"class":1147},"Chats History",[1137,8510,5632],{"class":1364},[1137,8512,8513,8515,8517,8519,8521],{"class":1139,"line":3416},[1137,8514,6780],{"class":1607},[1137,8516,1611],{"class":1364},[1137,8518,1538],{"class":1364},[1137,8520,5742],{"class":1147},[1137,8522,5632],{"class":1364},[1137,8524,8525,8528,8530,8532,8535],{"class":1139,"line":3431},[1137,8526,8527],{"class":1607},"      class",[1137,8529,1611],{"class":1364},[1137,8531,1538],{"class":1364},[1137,8533,8534],{"class":1147},"w-fit",[1137,8536,5632],{"class":1364},[1137,8538,8539],{"class":1139,"line":3448},[1137,8540,8541],{"class":1364},"    \u002F>\n",[1137,8543,8544,8546,8548],{"class":1139,"line":3480},[1137,8545,1646],{"class":1364},[1137,8547,8061],{"class":1370},[1137,8549,1585],{"class":1364},[1137,8551,8552,8554,8556],{"class":1139,"line":3493},[1137,8553,1655],{"class":1364},[1137,8555,1582],{"class":1370},[1137,8557,1585],{"class":1364},[1031,8559,8561],{"id":8560},"integrating-history-in-the-home-page","Integrating history in the home page",[1337,8563,8564],{},[1714,8565,8566],{},[1128,8567,8570],{"className":1569,"code":8568,"filename":5179,"highlights":8569,"language":34,"meta":1133,"style":1133},"\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",[2435,2443,3416],[1087,8571,8572,8592,8608,8624,8628,8640,8662,8666,8678,8682,8686,8710,8724,8732,8740,8754,8790,8794,8798,8804,8808,8812,8834,8838,8846,8850,8858,8890,8904,8914,8923,8935,8953,8971,8975,8983,8987,8993,9005,9033,9045,9057,9071,9075,9093,9101,9109,9117,9125],{"__ignoreMap":1133},[1137,8573,8574,8576,8578,8580,8582,8584,8586,8588,8590],{"class":1139,"line":1140},[1137,8575,1579],{"class":1364},[1137,8577,5189],{"class":1370},[1137,8579,5192],{"class":1607},[1137,8581,5195],{"class":1607},[1137,8583,1611],{"class":1364},[1137,8585,1538],{"class":1364},[1137,8587,1343],{"class":1147},[1137,8589,1538],{"class":1364},[1137,8591,1585],{"class":1364},[1137,8593,8594,8596,8598,8600,8602,8604,8606],{"class":1139,"line":1157},[1137,8595,3093],{"class":1607},[1137,8597,5212],{"class":1360},[1137,8599,1611],{"class":1364},[1137,8601,5217],{"class":1160},[1137,8603,1361],{"class":1360},[1137,8605,5222],{"class":1364},[1137,8607,1499],{"class":1360},[1137,8609,8610,8612,8614,8616,8618,8620,8622],{"class":1139,"line":1380},[1137,8611,3093],{"class":1607},[1137,8613,5231],{"class":1360},[1137,8615,1611],{"class":1364},[1137,8617,5217],{"class":1160},[1137,8619,1361],{"class":1360},[1137,8621,5240],{"class":4231},[1137,8623,1499],{"class":1360},[1137,8625,8626],{"class":1139,"line":1395},[1137,8627,1429],{"emptyLinePlaceholder":21},[1137,8629,8630,8632,8634,8636,8638],{"class":1139,"line":1407},[1137,8631,2621],{"class":1607},[1137,8633,5253],{"class":1607},[1137,8635,5256],{"class":1160},[1137,8637,1824],{"class":1364},[1137,8639,1440],{"class":1364},[1137,8641,8642,8644,8646,8648,8650,8652,8654,8656,8658,8660],{"class":1139,"line":1418},[1137,8643,3594],{"class":1350},[1137,8645,1970],{"class":1370},[1137,8647,3599],{"class":1364},[1137,8649,5271],{"class":1360},[1137,8651,1827],{"class":1364},[1137,8653,3378],{"class":1360},[1137,8655,1827],{"class":1364},[1137,8657,5280],{"class":1160},[1137,8659,5283],{"class":1370},[1137,8661,5286],{"class":1350},[1137,8663,8664],{"class":1139,"line":1426},[1137,8665,1429],{"emptyLinePlaceholder":21},[1137,8667,8668,8670,8672,8674,8676],{"class":1139,"line":1432},[1137,8669,5295],{"class":1360},[1137,8671,1827],{"class":1364},[1137,8673,3378],{"class":1360},[1137,8675,2647],{"class":1364},[1137,8677,4417],{"class":4231},[1137,8679,8680],{"class":1139,"line":1443},[1137,8681,1429],{"emptyLinePlaceholder":21},[1137,8683,8684],{"class":1139,"line":1459},[1137,8685,5312],{"class":2715},[1137,8687,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706,8708],{"class":1139,"line":1465},[1137,8689,2637],{"class":1607},[1137,8691,2815],{"class":1360},[1137,8693,2647],{"class":1364},[1137,8695,2650],{"class":1350},[1137,8697,5325],{"class":1160},[1137,8699,1361],{"class":1370},[1137,8701,1389],{"class":1364},[1137,8703,5332],{"class":1147},[1137,8705,1389],{"class":1364},[1137,8707,1735],{"class":1364},[1137,8709,1440],{"class":1364},[1137,8711,8712,8714,8716,8718,8720,8722],{"class":1139,"line":1470},[1137,8713,5343],{"class":1370},[1137,8715,1374],{"class":1364},[1137,8717,1451],{"class":1364},[1137,8719,5350],{"class":1147},[1137,8721,1389],{"class":1364},[1137,8723,1392],{"class":1364},[1137,8725,8726,8728,8730],{"class":1139,"line":1493},[1137,8727,5359],{"class":1370},[1137,8729,1374],{"class":1364},[1137,8731,1440],{"class":1364},[1137,8733,8734,8736,8738],{"class":1139,"line":1998},[1137,8735,3419],{"class":1370},[1137,8737,1374],{"class":1364},[1137,8739,1440],{"class":1364},[1137,8741,8742,8744,8746,8748,8750,8752],{"class":1139,"line":2025},[1137,8743,4571],{"class":1370},[1137,8745,1374],{"class":1364},[1137,8747,1451],{"class":1364},[1137,8749,2170],{"class":1147},[1137,8751,1389],{"class":1364},[1137,8753,1392],{"class":1364},[1137,8755,8756,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784,8786,8788],{"class":1139,"line":2071},[1137,8757,4604],{"class":1370},[1137,8759,1374],{"class":1364},[1137,8761,1478],{"class":1370},[1137,8763,1884],{"class":1364},[1137,8765,2544],{"class":1370},[1137,8767,1374],{"class":1364},[1137,8769,1451],{"class":1364},[1137,8771,5404],{"class":1147},[1137,8773,1389],{"class":1364},[1137,8775,1735],{"class":1364},[1137,8777,1738],{"class":1370},[1137,8779,1374],{"class":1364},[1137,8781,5415],{"class":1360},[1137,8783,1827],{"class":1364},[1137,8785,3378],{"class":1360},[1137,8787,1751],{"class":1364},[1137,8789,3219],{"class":1370},[1137,8791,8792],{"class":1139,"line":2138},[1137,8793,4431],{"class":1364},[1137,8795,8796],{"class":1139,"line":2208},[1137,8797,4626],{"class":1364},[1137,8799,8800,8802],{"class":1139,"line":2248},[1137,8801,2438],{"class":1364},[1137,8803,1499],{"class":1370},[1137,8805,8806],{"class":1139,"line":2299},[1137,8807,1429],{"emptyLinePlaceholder":21},[1137,8809,8810],{"class":1139,"line":2312},[1137,8811,5446],{"class":2715},[1137,8813,8814,8816,8818,8820,8822,8824,8826,8828,8830,8832],{"class":1139,"line":2342},[1137,8815,5451],{"class":1160},[1137,8817,1361],{"class":1370},[1137,8819,3739],{"class":1364},[1137,8821,5458],{"class":1147},[1137,8823,5461],{"class":1364},[1137,8825,266],{"class":1360},[1137,8827,1827],{"class":1364},[1137,8829,2038],{"class":1360},[1137,8831,5470],{"class":1364},[1137,8833,1499],{"class":1370},[1137,8835,8836],{"class":1139,"line":2348},[1137,8837,5477],{"class":1364},[1137,8839,8840,8842,8844],{"class":1139,"line":2353},[1137,8841,1655],{"class":1364},[1137,8843,5189],{"class":1370},[1137,8845,1585],{"class":1364},[1137,8847,8848],{"class":1139,"line":2385},[1137,8849,1429],{"emptyLinePlaceholder":21},[1137,8851,8852,8854,8856],{"class":1139,"line":2401},[1137,8853,1579],{"class":1364},[1137,8855,1582],{"class":1370},[1137,8857,1585],{"class":1364},[1137,8859,8860,8862,8864,8866,8868,8870,8872,8874,8876,8878,8880,8882,8884,8886,8888],{"class":1139,"line":2419},[1137,8861,1592],{"class":1364},[1137,8863,5504],{"class":1370},[1137,8865,5507],{"class":1364},[1137,8867,5510],{"class":1607},[1137,8869,1611],{"class":1364},[1137,8871,1538],{"class":1364},[1137,8873,5517],{"class":1364},[1137,8875,5520],{"class":1370},[1137,8877,5523],{"class":1364},[1137,8879,1389],{"class":1364},[1137,8881,5528],{"class":1147},[1137,8883,1389],{"class":1364},[1137,8885,1751],{"class":1364},[1137,8887,1538],{"class":1364},[1137,8889,1585],{"class":1364},[1137,8891,8893,8895,8897,8899,8902],{"class":8892,"line":2435},[1139,1589],[1137,8894,1601],{"class":1364},[1137,8896,1582],{"class":1370},[1137,8898,5545],{"class":1364},[1137,8900,8901],{"class":1607},"header",[1137,8903,1585],{"class":1364},[1137,8905,8907,8909,8912],{"class":8906,"line":2443},[1139,1589],[1137,8908,1625],{"class":1364},[1137,8910,8911],{"class":1370},"ChatsHistory",[1137,8913,1631],{"class":1364},[1137,8915,8917,8919,8921],{"class":8916,"line":3416},[1139,1589],[1137,8918,1636],{"class":1364},[1137,8920,1582],{"class":1370},[1137,8922,1585],{"class":1364},[1137,8924,8925,8927,8929,8931,8933],{"class":1139,"line":3431},[1137,8926,1601],{"class":1364},[1137,8928,1582],{"class":1370},[1137,8930,5545],{"class":1364},[1137,8932,5520],{"class":1607},[1137,8934,1585],{"class":1364},[1137,8936,8937,8939,8941,8943,8945,8947,8949,8951],{"class":1139,"line":3448},[1137,8938,1625],{"class":1364},[1137,8940,5556],{"class":1370},[1137,8942,5559],{"class":1607},[1137,8944,1611],{"class":1364},[1137,8946,1538],{"class":1364},[1137,8948,5566],{"class":1147},[1137,8950,1538],{"class":1364},[1137,8952,1585],{"class":1364},[1137,8954,8955,8957,8959,8961,8963,8965,8967,8969],{"class":1139,"line":3480},[1137,8956,5575],{"class":1364},[1137,8958,5578],{"class":1370},[1137,8960,5559],{"class":1607},[1137,8962,1611],{"class":1364},[1137,8964,1538],{"class":1364},[1137,8966,5587],{"class":1147},[1137,8968,1538],{"class":1364},[1137,8970,1585],{"class":1364},[1137,8972,8973],{"class":1139,"line":3493},[1137,8974,5596],{"class":1360},[1137,8976,8977,8979,8981],{"class":1139,"line":3498},[1137,8978,5601],{"class":1364},[1137,8980,5578],{"class":1370},[1137,8982,1585],{"class":1364},[1137,8984,8985],{"class":1139,"line":3504},[1137,8986,1429],{"emptyLinePlaceholder":21},[1137,8988,8989,8991],{"class":1139,"line":3535},[1137,8990,5575],{"class":1364},[1137,8992,5617],{"class":1370},[1137,8994,8995,8997,8999,9001,9003],{"class":1139,"line":3579},[1137,8996,5623],{"class":1607},[1137,8998,1611],{"class":1364},[1137,9000,1538],{"class":1364},[1137,9002,5271],{"class":1360},[1137,9004,5632],{"class":1364},[1137,9006,9007,9009,9011,9013,9015,9017,9019,9021,9023,9025,9027,9029,9031],{"class":1139,"line":3586},[1137,9008,5638],{"class":1364},[1137,9010,5641],{"class":1607},[1137,9012,1611],{"class":1364},[1137,9014,1538],{"class":1364},[1137,9016,5648],{"class":1360},[1137,9018,5651],{"class":1364},[1137,9020,1389],{"class":1364},[1137,9022,5656],{"class":1147},[1137,9024,1389],{"class":1364},[1137,9026,5661],{"class":1364},[1137,9028,1389],{"class":1364},[1137,9030,5666],{"class":1147},[1137,9032,5669],{"class":1364},[1137,9034,9035,9037,9039,9041,9043],{"class":1139,"line":3591},[1137,9036,5675],{"class":1607},[1137,9038,1611],{"class":1364},[1137,9040,1538],{"class":1364},[1137,9042,5682],{"class":1147},[1137,9044,5632],{"class":1364},[1137,9046,9047,9049,9051,9053,9055],{"class":1139,"line":3609},[1137,9048,5690],{"class":1607},[1137,9050,1611],{"class":1364},[1137,9052,1538],{"class":1364},[1137,9054,5697],{"class":1147},[1137,9056,5632],{"class":1364},[1137,9058,9059,9061,9063,9065,9067,9069],{"class":1139,"line":3648},[1137,9060,5705],{"class":1364},[1137,9062,5708],{"class":1607},[1137,9064,1611],{"class":1364},[1137,9066,1538],{"class":1364},[1137,9068,5715],{"class":1360},[1137,9070,5632],{"class":1364},[1137,9072,9073],{"class":1139,"line":3654},[1137,9074,5723],{"class":1364},[1137,9076,9077,9079,9081,9083,9085,9087,9089,9091],{"class":1139,"line":3659},[1137,9078,5729],{"class":1364},[1137,9080,5732],{"class":1370},[1137,9082,5735],{"class":1607},[1137,9084,1611],{"class":1364},[1137,9086,1538],{"class":1364},[1137,9088,5742],{"class":1147},[1137,9090,1538],{"class":1364},[1137,9092,1631],{"class":1364},[1137,9094,9095,9097,9099],{"class":1139,"line":3665},[1137,9096,5601],{"class":1364},[1137,9098,5154],{"class":1370},[1137,9100,1585],{"class":1364},[1137,9102,9103,9105,9107],{"class":1139,"line":3685},[1137,9104,5760],{"class":1364},[1137,9106,5556],{"class":1370},[1137,9108,1585],{"class":1364},[1137,9110,9111,9113,9115],{"class":1139,"line":3713},[1137,9112,1636],{"class":1364},[1137,9114,1582],{"class":1370},[1137,9116,1585],{"class":1364},[1137,9118,9119,9121,9123],{"class":1139,"line":3725},[1137,9120,1646],{"class":1364},[1137,9122,5504],{"class":1370},[1137,9124,1585],{"class":1364},[1137,9126,9127,9129,9131],{"class":1139,"line":3744},[1137,9128,1655],{"class":1364},[1137,9130,1582],{"class":1370},[1137,9132,1585],{"class":1364},[1031,9134,9136],{"id":9135},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1337,9138,9139],{},[1714,9140,9141],{},[1128,9142,9145],{"className":1569,"code":9143,"filename":6221,"highlights":9144,"language":34,"meta":1133,"style":1133},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { useChat } 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 useChat composable from AI SDK\nconst { messages, status, error, sendMessage, regenerate, stop } = useChat({\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    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    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=\"messages\"\n          :status=\"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                \u003CChatMarkdown\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatMarkdown\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\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=\"error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"status\"\n            color=\"neutral\"\n            @stop=\"stop()\"\n            @reload=\"regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[4007,4014,4019],[1087,9146,9147,9167,9193,9211,9229,9233,9245,9257,9261,9265,9307,9311,9327,9367,9371,9375,9391,9395,9399,9437,9455,9473,9487,9511,9519,9531,9535,9559,9573,9577,9581,9593,9605,9619,9633,9645,9651,9655,9661,9665,9683,9693,9713,9735,9747,9751,9755,9759,9763,9775,9803,9809,9813,9819,9827,9831,9839,9871,9883,9891,9899,9911,9930,9937,9952,9966,9970,9982,9986,10010,10076,10082,10100,10118,10138,10142,10148,10166,10186,10190,10198,10202,10222,10228,10250,10268,10288,10292,10320,10324,10332,10340,10348,10356,10364,10368,10374,10386,10400,10412,10424,10438,10442,10448,10462,10474,10490,10506,10510,10518,10526,10534,10542],{"__ignoreMap":1133},[1137,9148,9149,9151,9153,9155,9157,9159,9161,9163,9165],{"class":1139,"line":1140},[1137,9150,1579],{"class":1364},[1137,9152,5189],{"class":1370},[1137,9154,5192],{"class":1607},[1137,9156,5195],{"class":1607},[1137,9158,1611],{"class":1364},[1137,9160,1538],{"class":1364},[1137,9162,1343],{"class":1147},[1137,9164,1538],{"class":1364},[1137,9166,1585],{"class":1364},[1137,9168,9169,9171,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191],{"class":1139,"line":1157},[1137,9170,1726],{"class":1350},[1137,9172,1729],{"class":1364},[1137,9174,6254],{"class":1360},[1137,9176,1735],{"class":1364},[1137,9178,6259],{"class":1360},[1137,9180,1735],{"class":1364},[1137,9182,6264],{"class":1360},[1137,9184,1751],{"class":1364},[1137,9186,1754],{"class":1350},[1137,9188,1451],{"class":1364},[1137,9190,2558],{"class":1147},[1137,9192,1415],{"class":1364},[1137,9194,9195,9197,9199,9201,9203,9205,9207,9209],{"class":1139,"line":1380},[1137,9196,1726],{"class":1350},[1137,9198,1729],{"class":1364},[1137,9200,6284],{"class":1360},[1137,9202,1751],{"class":1364},[1137,9204,1754],{"class":1350},[1137,9206,1451],{"class":1364},[1137,9208,6293],{"class":1147},[1137,9210,1415],{"class":1364},[1137,9212,9213,9215,9217,9219,9221,9223,9225,9227],{"class":1139,"line":1395},[1137,9214,1726],{"class":1350},[1137,9216,1729],{"class":1364},[1137,9218,6305],{"class":1360},[1137,9220,1751],{"class":1364},[1137,9222,1754],{"class":1350},[1137,9224,1451],{"class":1364},[1137,9226,6314],{"class":1147},[1137,9228,1415],{"class":1364},[1137,9230,9231],{"class":1139,"line":1407},[1137,9232,1429],{"emptyLinePlaceholder":21},[1137,9234,9235,9237,9239,9241,9243],{"class":1139,"line":1418},[1137,9236,3093],{"class":1607},[1137,9238,6327],{"class":1360},[1137,9240,1611],{"class":1364},[1137,9242,6332],{"class":1160},[1137,9244,2693],{"class":1360},[1137,9246,9247,9249,9251,9253,9255],{"class":1139,"line":1426},[1137,9248,3093],{"class":1607},[1137,9250,6341],{"class":1360},[1137,9252,1611],{"class":1364},[1137,9254,6346],{"class":1160},[1137,9256,2693],{"class":1360},[1137,9258,9259],{"class":1139,"line":1432},[1137,9260,1429],{"emptyLinePlaceholder":21},[1137,9262,9263],{"class":1139,"line":1443},[1137,9264,6357],{"class":2715},[1137,9266,9267,9269,9271,9273,9275,9277,9279,9281,9283,9285,9287,9289,9291,9293,9295,9297,9299,9301,9303,9305],{"class":1139,"line":1459},[1137,9268,3093],{"class":1607},[1137,9270,1729],{"class":1364},[1137,9272,6366],{"class":1370},[1137,9274,1374],{"class":1364},[1137,9276,6371],{"class":1360},[1137,9278,1496],{"class":1364},[1137,9280,2647],{"class":1364},[1137,9282,2650],{"class":1350},[1137,9284,6380],{"class":1160},[1137,9286,1361],{"class":1360},[1137,9288,3739],{"class":1364},[1137,9290,6387],{"class":1147},[1137,9292,5461],{"class":1364},[1137,9294,6392],{"class":1360},[1137,9296,1827],{"class":1364},[1137,9298,6397],{"class":1360},[1137,9300,1827],{"class":1364},[1137,9302,2038],{"class":1360},[1137,9304,5470],{"class":1364},[1137,9306,1499],{"class":1360},[1137,9308,9309],{"class":1139,"line":1465},[1137,9310,1429],{"emptyLinePlaceholder":21},[1137,9312,9313,9315,9317,9319,9321,9323,9325],{"class":1139,"line":1470},[1137,9314,6414],{"class":1350},[1137,9316,1970],{"class":1360},[1137,9318,3599],{"class":1364},[1137,9320,6421],{"class":1360},[1137,9322,1827],{"class":1364},[1137,9324,6426],{"class":1360},[1137,9326,1365],{"class":1364},[1137,9328,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353,9355,9357,9359,9361,9363,9365],{"class":1139,"line":1493},[1137,9330,6433],{"class":1350},[1137,9332,2924],{"class":1160},[1137,9334,1361],{"class":1370},[1137,9336,1884],{"class":1364},[1137,9338,3621],{"class":1370},[1137,9340,1374],{"class":1364},[1137,9342,3627],{"class":3626},[1137,9344,1735],{"class":1364},[1137,9346,3632],{"class":1370},[1137,9348,1374],{"class":1364},[1137,9350,1451],{"class":1364},[1137,9352,3639],{"class":1147},[1137,9354,1389],{"class":1364},[1137,9356,1735],{"class":1364},[1137,9358,6462],{"class":1370},[1137,9360,1374],{"class":1364},[1137,9362,4232],{"class":4231},[1137,9364,1751],{"class":1364},[1137,9366,1499],{"class":1370},[1137,9368,9369],{"class":1139,"line":1998},[1137,9370,5477],{"class":1364},[1137,9372,9373],{"class":1139,"line":2025},[1137,9374,1429],{"emptyLinePlaceholder":21},[1137,9376,9377,9379,9381,9383,9385,9387,9389],{"class":1139,"line":2071},[1137,9378,3093],{"class":1607},[1137,9380,5212],{"class":1360},[1137,9382,1611],{"class":1364},[1137,9384,5217],{"class":1160},[1137,9386,1361],{"class":1360},[1137,9388,5222],{"class":1364},[1137,9390,1499],{"class":1360},[1137,9392,9393],{"class":1139,"line":2138},[1137,9394,1429],{"emptyLinePlaceholder":21},[1137,9396,9397],{"class":1139,"line":2208},[1137,9398,6503],{"class":2715},[1137,9400,9401,9403,9405,9407,9409,9411,9413,9415,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435],{"class":1139,"line":2248},[1137,9402,3093],{"class":1607},[1137,9404,1729],{"class":1364},[1137,9406,3329],{"class":1360},[1137,9408,1735],{"class":1364},[1137,9410,6517],{"class":1360},[1137,9412,1735],{"class":1364},[1137,9414,6522],{"class":1360},[1137,9416,1735],{"class":1364},[1137,9418,6527],{"class":1360},[1137,9420,1735],{"class":1364},[1137,9422,6532],{"class":1360},[1137,9424,1735],{"class":1364},[1137,9426,6537],{"class":1360},[1137,9428,1496],{"class":1364},[1137,9430,2647],{"class":1364},[1137,9432,6284],{"class":1160},[1137,9434,1361],{"class":1360},[1137,9436,1365],{"class":1364},[1137,9438,9439,9441,9443,9445,9447,9449,9451,9453],{"class":1139,"line":2299},[1137,9440,1817],{"class":1370},[1137,9442,1374],{"class":1364},[1137,9444,6557],{"class":1360},[1137,9446,1827],{"class":1364},[1137,9448,3378],{"class":1360},[1137,9450,1827],{"class":1364},[1137,9452,2038],{"class":1360},[1137,9454,1392],{"class":1364},[1137,9456,9457,9459,9461,9463,9465,9467,9469,9471],{"class":1139,"line":2312},[1137,9458,1977],{"class":1370},[1137,9460,1374],{"class":1364},[1137,9462,6557],{"class":1360},[1137,9464,1827],{"class":1364},[1137,9466,3378],{"class":1360},[1137,9468,1827],{"class":1364},[1137,9470,2016],{"class":1360},[1137,9472,1392],{"class":1364},[1137,9474,9475,9477,9479,9481,9483,9485],{"class":1139,"line":2342},[1137,9476,6592],{"class":1370},[1137,9478,1374],{"class":1364},[1137,9480,1921],{"class":1364},[1137,9482,6254],{"class":1160},[1137,9484,1361],{"class":1360},[1137,9486,1365],{"class":1364},[1137,9488,9489,9491,9493,9495,9497,9499,9501,9503,9505,9507,9509],{"class":1139,"line":2348},[1137,9490,6608],{"class":1370},[1137,9492,1374],{"class":1364},[1137,9494,3733],{"class":1364},[1137,9496,6387],{"class":1147},[1137,9498,5461],{"class":1364},[1137,9500,6421],{"class":1360},[1137,9502,1827],{"class":1364},[1137,9504,3378],{"class":1360},[1137,9506,1827],{"class":1364},[1137,9508,2038],{"class":1360},[1137,9510,6629],{"class":1364},[1137,9512,9513,9515,9517],{"class":1139,"line":2353},[1137,9514,2438],{"class":1364},[1137,9516,1901],{"class":1360},[1137,9518,1392],{"class":1364},[1137,9520,9521,9523,9525,9527,9529],{"class":1139,"line":2385},[1137,9522,6644],{"class":1370},[1137,9524,1361],{"class":1364},[1137,9526,6649],{"class":1961},[1137,9528,1901],{"class":1364},[1137,9530,1440],{"class":1364},[1137,9532,9533],{"class":1139,"line":2401},[1137,9534,6659],{"class":2715},[1137,9536,9537,9539,9541,9543,9545,9547,9549,9551,9553,9555,9557],{"class":1139,"line":2419},[1137,9538,6665],{"class":1350},[1137,9540,1970],{"class":1370},[1137,9542,6649],{"class":1360},[1137,9544,1827],{"class":1364},[1137,9546,6674],{"class":1360},[1137,9548,3405],{"class":1364},[1137,9550,1451],{"class":1364},[1137,9552,4379],{"class":1147},[1137,9554,1389],{"class":1364},[1137,9556,3604],{"class":1370},[1137,9558,1365],{"class":1364},[1137,9560,9561,9563,9565,9567,9569,9571],{"class":1139,"line":2435},[1137,9562,6692],{"class":1160},[1137,9564,1361],{"class":1370},[1137,9566,1389],{"class":1364},[1137,9568,1806],{"class":1147},[1137,9570,1389],{"class":1364},[1137,9572,1499],{"class":1370},[1137,9574,9575],{"class":1139,"line":2443},[1137,9576,4626],{"class":1364},[1137,9578,9579],{"class":1139,"line":3416},[1137,9580,1462],{"class":1364},[1137,9582,9583,9585,9587,9589,9591],{"class":1139,"line":3431},[1137,9584,6718],{"class":1370},[1137,9586,1361],{"class":1364},[1137,9588,6723],{"class":1961},[1137,9590,1901],{"class":1364},[1137,9592,1440],{"class":1364},[1137,9594,9595,9597,9599,9601,9603],{"class":1139,"line":3448},[1137,9596,6733],{"class":1360},[1137,9598,1827],{"class":1364},[1137,9600,6738],{"class":1160},[1137,9602,1361],{"class":1370},[1137,9604,1365],{"class":1364},[1137,9606,9607,9609,9611,9613,9615,9617],{"class":1139,"line":3480},[1137,9608,6748],{"class":1370},[1137,9610,1374],{"class":1364},[1137,9612,1451],{"class":1364},[1137,9614,500],{"class":1147},[1137,9616,1389],{"class":1364},[1137,9618,1392],{"class":1364},[1137,9620,9621,9623,9625,9627,9629,9631],{"class":1139,"line":3493},[1137,9622,6764],{"class":1370},[1137,9624,1374],{"class":1364},[1137,9626,6522],{"class":1360},[1137,9628,1827],{"class":1364},[1137,9630,4543],{"class":1360},[1137,9632,1392],{"class":1364},[1137,9634,9635,9637,9639,9641,9643],{"class":1139,"line":3498},[1137,9636,6780],{"class":1370},[1137,9638,1374],{"class":1364},[1137,9640,1451],{"class":1364},[1137,9642,6723],{"class":1147},[1137,9644,1415],{"class":1364},[1137,9646,9647,9649],{"class":1139,"line":3504},[1137,9648,3434],{"class":1364},[1137,9650,1499],{"class":1370},[1137,9652,9653],{"class":1139,"line":3535},[1137,9654,3651],{"class":1364},[1137,9656,9657,9659],{"class":1139,"line":3579},[1137,9658,1496],{"class":1364},[1137,9660,1499],{"class":1360},[1137,9662,9663],{"class":1139,"line":3586},[1137,9664,1429],{"emptyLinePlaceholder":21},[1137,9666,9667,9669,9671,9673,9675,9677,9679,9681],{"class":1139,"line":3591},[1137,9668,6816],{"class":1607},[1137,9670,6819],{"class":1160},[1137,9672,1361],{"class":1364},[1137,9674,6824],{"class":1961},[1137,9676,1374],{"class":1364},[1137,9678,6829],{"class":1143},[1137,9680,1901],{"class":1364},[1137,9682,1440],{"class":1364},[1137,9684,9685,9687,9689,9691],{"class":1139,"line":3609},[1137,9686,6838],{"class":1360},[1137,9688,1827],{"class":1364},[1137,9690,6843],{"class":1160},[1137,9692,2693],{"class":1370},[1137,9694,9695,9697,9699,9701,9703,9705,9707,9709,9711],{"class":1139,"line":3648},[1137,9696,3594],{"class":1350},[1137,9698,1970],{"class":1370},[1137,9700,5271],{"class":1360},[1137,9702,1827],{"class":1364},[1137,9704,3378],{"class":1360},[1137,9706,1827],{"class":1364},[1137,9708,5280],{"class":1160},[1137,9710,5283],{"class":1370},[1137,9712,1365],{"class":1364},[1137,9714,9715,9717,9719,9721,9723,9725,9727,9729,9731,9733],{"class":1139,"line":3654},[1137,9716,6870],{"class":1160},[1137,9718,1361],{"class":1370},[1137,9720,1884],{"class":1364},[1137,9722,1738],{"class":1370},[1137,9724,1374],{"class":1364},[1137,9726,5415],{"class":1360},[1137,9728,1827],{"class":1364},[1137,9730,3378],{"class":1360},[1137,9732,1751],{"class":1364},[1137,9734,1499],{"class":1370},[1137,9736,9737,9739,9741,9743,9745],{"class":1139,"line":3659},[1137,9738,6893],{"class":1360},[1137,9740,1827],{"class":1364},[1137,9742,3378],{"class":1360},[1137,9744,2647],{"class":1364},[1137,9746,6902],{"class":1364},[1137,9748,9749],{"class":1139,"line":3665},[1137,9750,3651],{"class":1364},[1137,9752,9753],{"class":1139,"line":3685},[1137,9754,5477],{"class":1364},[1137,9756,9757],{"class":1139,"line":3713},[1137,9758,1429],{"emptyLinePlaceholder":21},[1137,9760,9761],{"class":1139,"line":3725},[1137,9762,6919],{"class":2715},[1137,9764,9765,9767,9769,9771,9773],{"class":1139,"line":3744},[1137,9766,6924],{"class":1160},[1137,9768,1361],{"class":1360},[1137,9770,1824],{"class":1364},[1137,9772,1844],{"class":1607},[1137,9774,1440],{"class":1364},[1137,9776,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801],{"class":1139,"line":3772},[1137,9778,3594],{"class":1350},[1137,9780,1970],{"class":1370},[1137,9782,6421],{"class":1360},[1137,9784,1827],{"class":1364},[1137,9786,3378],{"class":1360},[1137,9788,3905],{"class":1364},[1137,9790,2016],{"class":1360},[1137,9792,1827],{"class":1364},[1137,9794,3884],{"class":1360},[1137,9796,3405],{"class":1364},[1137,9798,3890],{"class":3626},[1137,9800,3604],{"class":1370},[1137,9802,1365],{"class":1364},[1137,9804,9805,9807],{"class":1139,"line":3779},[1137,9806,6965],{"class":1160},[1137,9808,2693],{"class":1370},[1137,9810,9811],{"class":1139,"line":3784},[1137,9812,3651],{"class":1364},[1137,9814,9815,9817],{"class":1139,"line":3850},[1137,9816,1496],{"class":1364},[1137,9818,1499],{"class":1360},[1137,9820,9821,9823,9825],{"class":1139,"line":3855},[1137,9822,1655],{"class":1364},[1137,9824,5189],{"class":1370},[1137,9826,1585],{"class":1364},[1137,9828,9829],{"class":1139,"line":3860},[1137,9830,1429],{"emptyLinePlaceholder":21},[1137,9832,9833,9835,9837],{"class":1139,"line":3866},[1137,9834,1579],{"class":1364},[1137,9836,1582],{"class":1370},[1137,9838,1585],{"class":1364},[1137,9840,9841,9843,9845,9847,9849,9851,9853,9855,9857,9859,9861,9863,9865,9867,9869],{"class":1139,"line":3895},[1137,9842,1592],{"class":1364},[1137,9844,5504],{"class":1370},[1137,9846,5507],{"class":1364},[1137,9848,5510],{"class":1607},[1137,9850,1611],{"class":1364},[1137,9852,1538],{"class":1364},[1137,9854,5517],{"class":1364},[1137,9856,5520],{"class":1370},[1137,9858,5523],{"class":1364},[1137,9860,1389],{"class":1364},[1137,9862,5528],{"class":1147},[1137,9864,1389],{"class":1364},[1137,9866,1751],{"class":1364},[1137,9868,1538],{"class":1364},[1137,9870,1585],{"class":1364},[1137,9872,9873,9875,9877,9879,9881],{"class":1139,"line":3936},[1137,9874,1601],{"class":1364},[1137,9876,1582],{"class":1370},[1137,9878,5545],{"class":1364},[1137,9880,8901],{"class":1607},[1137,9882,1585],{"class":1364},[1137,9884,9885,9887,9889],{"class":1139,"line":3965},[1137,9886,1625],{"class":1364},[1137,9888,8911],{"class":1370},[1137,9890,1631],{"class":1364},[1137,9892,9893,9895,9897],{"class":1139,"line":3977},[1137,9894,1636],{"class":1364},[1137,9896,1582],{"class":1370},[1137,9898,1585],{"class":1364},[1137,9900,9901,9903,9905,9907,9909],{"class":1139,"line":3993},[1137,9902,1601],{"class":1364},[1137,9904,1582],{"class":1370},[1137,9906,5545],{"class":1364},[1137,9908,5520],{"class":1607},[1137,9910,1585],{"class":1364},[1137,9912,9914,9916,9918,9920,9922,9924,9926,9928],{"class":9913,"line":4007},[1139,1589],[1137,9915,1625],{"class":1364},[1137,9917,5556],{"class":1370},[1137,9919,5559],{"class":1607},[1137,9921,1611],{"class":1364},[1137,9923,1538],{"class":1364},[1137,9925,7056],{"class":1147},[1137,9927,1538],{"class":1364},[1137,9929,1585],{"class":1364},[1137,9931,9933,9935],{"class":9932,"line":4014},[1139,1589],[1137,9934,5575],{"class":1364},[1137,9936,7067],{"class":1370},[1137,9938,9940,9942,9944,9946,9948,9950],{"class":9939,"line":4019},[1139,1589],[1137,9941,5638],{"class":1364},[1137,9943,2016],{"class":1607},[1137,9945,1611],{"class":1364},[1137,9947,1538],{"class":1364},[1137,9949,2016],{"class":1360},[1137,9951,5632],{"class":1364},[1137,9953,9954,9956,9958,9960,9962,9964],{"class":1139,"line":4024},[1137,9955,5638],{"class":1364},[1137,9957,5641],{"class":1607},[1137,9959,1611],{"class":1364},[1137,9961,1538],{"class":1364},[1137,9963,5641],{"class":1360},[1137,9965,5632],{"class":1364},[1137,9967,9968],{"class":1139,"line":4030},[1137,9969,7100],{"class":1607},[1137,9971,9972,9974,9976,9978,9980],{"class":1139,"line":4047},[1137,9973,7105],{"class":1607},[1137,9975,1611],{"class":1364},[1137,9977,1538],{"class":1364},[1137,9979,7112],{"class":1147},[1137,9981,5632],{"class":1364},[1137,9983,9984],{"class":1139,"line":4069},[1137,9985,5723],{"class":1364},[1137,9987,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008],{"class":1139,"line":4087},[1137,9989,5729],{"class":1364},[1137,9991,1582],{"class":1370},[1137,9993,5545],{"class":1364},[1137,9995,374],{"class":1607},[1137,9997,1611],{"class":1364},[1137,9999,1538],{"class":1364},[1137,10001,1884],{"class":1364},[1137,10003,7137],{"class":1360},[1137,10005,1496],{"class":1364},[1137,10007,1538],{"class":1364},[1137,10009,1585],{"class":1364},[1137,10011,10012,10014,10016,10018,10020,10022,10024,10026,10028,10030,10032,10034,10036,10038,10040,10042,10044,10046,10048,10050,10052,10054,10056,10058,10060,10062,10064,10066,10068,10070,10072,10074],{"class":1139,"line":4095},[1137,10013,7148],{"class":1364},[1137,10015,1582],{"class":1370},[1137,10017,7153],{"class":1350},[1137,10019,1611],{"class":1364},[1137,10021,1538],{"class":1364},[1137,10023,7160],{"class":1360},[1137,10025,1735],{"class":1364},[1137,10027,7165],{"class":1360},[1137,10029,7168],{"class":1364},[1137,10031,2642],{"class":1360},[1137,10033,1827],{"class":1364},[1137,10035,2222],{"class":1360},[1137,10037,1538],{"class":1364},[1137,10039,5507],{"class":1364},[1137,10041,7181],{"class":1607},[1137,10043,1611],{"class":1364},[1137,10045,7186],{"class":1364},[1137,10047,4543],{"class":1360},[1137,10049,1827],{"class":1364},[1137,10051,2038],{"class":1360},[1137,10053,1496],{"class":1364},[1137,10055,7197],{"class":1147},[1137,10057,5461],{"class":1364},[1137,10059,7202],{"class":1360},[1137,10061,1827],{"class":1364},[1137,10063,6674],{"class":1360},[1137,10065,1496],{"class":1364},[1137,10067,7197],{"class":1147},[1137,10069,5461],{"class":1364},[1137,10071,7215],{"class":1360},[1137,10073,7218],{"class":1364},[1137,10075,1585],{"class":1364},[1137,10077,10078,10080],{"class":1139,"line":4112},[1137,10079,7225],{"class":1364},[1137,10081,7228],{"class":1370},[1137,10083,10084,10086,10088,10090,10092,10094,10096,10098],{"class":1139,"line":4133},[1137,10085,7233],{"class":1350},[1137,10087,1611],{"class":1364},[1137,10089,1538],{"class":1364},[1137,10091,7240],{"class":1160},[1137,10093,1361],{"class":1364},[1137,10095,7202],{"class":1360},[1137,10097,1901],{"class":1364},[1137,10099,5632],{"class":1364},[1137,10101,10102,10104,10106,10108,10110,10112,10114,10116],{"class":1139,"line":4143},[1137,10103,7253],{"class":1364},[1137,10105,5404],{"class":1607},[1137,10107,1611],{"class":1364},[1137,10109,1538],{"class":1364},[1137,10111,7202],{"class":1360},[1137,10113,1827],{"class":1364},[1137,10115,5404],{"class":1360},[1137,10117,5632],{"class":1364},[1137,10119,10120,10122,10124,10126,10128,10130,10132,10134,10136],{"class":1139,"line":4153},[1137,10121,7253],{"class":1364},[1137,10123,5656],{"class":1607},[1137,10125,1611],{"class":1364},[1137,10127,1538],{"class":1364},[1137,10129,7280],{"class":1160},[1137,10131,1361],{"class":1364},[1137,10133,7202],{"class":1360},[1137,10135,1901],{"class":1364},[1137,10137,5632],{"class":1364},[1137,10139,10140],{"class":1139,"line":4163},[1137,10141,7293],{"class":1364},[1137,10143,10144,10146],{"class":1139,"line":4180},[1137,10145,7298],{"class":1364},[1137,10147,7301],{"class":1370},[1137,10149,10150,10152,10154,10156,10158,10160,10162,10164],{"class":1139,"line":4191},[1137,10151,7306],{"class":1364},[1137,10153,3378],{"class":1607},[1137,10155,1611],{"class":1364},[1137,10157,1538],{"class":1364},[1137,10159,7202],{"class":1360},[1137,10161,1827],{"class":1364},[1137,10163,5404],{"class":1360},[1137,10165,5632],{"class":1364},[1137,10167,10168,10170,10172,10174,10176,10178,10180,10182,10184],{"class":1139,"line":4197},[1137,10169,7306],{"class":1364},[1137,10171,5656],{"class":1607},[1137,10173,1611],{"class":1364},[1137,10175,1538],{"class":1364},[1137,10177,7280],{"class":1160},[1137,10179,1361],{"class":1364},[1137,10181,7202],{"class":1360},[1137,10183,1901],{"class":1364},[1137,10185,5632],{"class":1364},[1137,10187,10188],{"class":1139,"line":4203},[1137,10189,7345],{"class":1364},[1137,10191,10192,10194,10196],{"class":1139,"line":4213},[1137,10193,7350],{"class":1364},[1137,10195,7353],{"class":1370},[1137,10197,1585],{"class":1364},[1137,10199,10200],{"class":1139,"line":4223},[1137,10201,1429],{"emptyLinePlaceholder":21},[1137,10203,10204,10206,10208,10210,10212,10214,10216,10218,10220],{"class":1139,"line":4237},[1137,10205,7225],{"class":1364},[1137,10207,1582],{"class":1370},[1137,10209,7368],{"class":1350},[1137,10211,1611],{"class":1364},[1137,10213,1538],{"class":1364},[1137,10215,7375],{"class":1160},[1137,10217,7378],{"class":1360},[1137,10219,1538],{"class":1364},[1137,10221,1585],{"class":1364},[1137,10223,10224,10226],{"class":1139,"line":4252},[1137,10225,7298],{"class":1364},[1137,10227,7301],{"class":1370},[1137,10229,10230,10232,10234,10236,10238,10240,10242,10244,10246,10248],{"class":1139,"line":4257},[1137,10231,7393],{"class":1350},[1137,10233,1611],{"class":1364},[1137,10235,1538],{"class":1364},[1137,10237,4543],{"class":1360},[1137,10239,1827],{"class":1364},[1137,10241,2152],{"class":1360},[1137,10243,7406],{"class":1364},[1137,10245,1389],{"class":1364},[1137,10247,2179],{"class":1147},[1137,10249,5669],{"class":1364},[1137,10251,10252,10254,10256,10258,10260,10262,10264,10266],{"class":1139,"line":4262},[1137,10253,7306],{"class":1364},[1137,10255,3378],{"class":1607},[1137,10257,1611],{"class":1364},[1137,10259,1538],{"class":1364},[1137,10261,7202],{"class":1360},[1137,10263,1827],{"class":1364},[1137,10265,5404],{"class":1360},[1137,10267,5632],{"class":1364},[1137,10269,10270,10272,10274,10276,10278,10280,10282,10284,10286],{"class":1139,"line":4272},[1137,10271,7306],{"class":1364},[1137,10273,5656],{"class":1607},[1137,10275,1611],{"class":1364},[1137,10277,1538],{"class":1364},[1137,10279,7280],{"class":1160},[1137,10281,1361],{"class":1364},[1137,10283,7202],{"class":1360},[1137,10285,1901],{"class":1364},[1137,10287,5632],{"class":1364},[1137,10289,10290],{"class":1139,"line":4288},[1137,10291,7345],{"class":1364},[1137,10293,10294,10296,10298,10300,10302,10304,10306,10308,10310,10312,10314,10316,10318],{"class":1139,"line":4303},[1137,10295,7298],{"class":1364},[1137,10297,1027],{"class":1370},[1137,10299,7368],{"class":1607},[1137,10301,1611],{"class":1364},[1137,10303,1538],{"class":1364},[1137,10305,7469],{"class":1147},[1137,10307,1538],{"class":1364},[1137,10309,5559],{"class":1607},[1137,10311,1611],{"class":1364},[1137,10313,1538],{"class":1364},[1137,10315,7480],{"class":1147},[1137,10317,1538],{"class":1364},[1137,10319,1585],{"class":1364},[1137,10321,10322],{"class":1139,"line":4309},[1137,10323,7489],{"class":1360},[1137,10325,10326,10328,10330],{"class":1139,"line":4315},[1137,10327,7494],{"class":1364},[1137,10329,1027],{"class":1370},[1137,10331,1585],{"class":1364},[1137,10333,10334,10336,10338],{"class":1139,"line":4323},[1137,10335,7350],{"class":1364},[1137,10337,1582],{"class":1370},[1137,10339,1585],{"class":1364},[1137,10341,10342,10344,10346],{"class":1139,"line":4328},[1137,10343,7511],{"class":1364},[1137,10345,1582],{"class":1370},[1137,10347,1585],{"class":1364},[1137,10349,10350,10352,10354],{"class":1139,"line":4334},[1137,10351,7520],{"class":1364},[1137,10353,1582],{"class":1370},[1137,10355,1585],{"class":1364},[1137,10357,10358,10360,10362],{"class":1139,"line":4354},[1137,10359,5601],{"class":1364},[1137,10361,5160],{"class":1370},[1137,10363,1585],{"class":1364},[1137,10365,10366],{"class":1139,"line":4369},[1137,10367,1429],{"emptyLinePlaceholder":21},[1137,10369,10370,10372],{"class":1139,"line":4386},[1137,10371,5575],{"class":1364},[1137,10373,5617],{"class":1370},[1137,10375,10376,10378,10380,10382,10384],{"class":1139,"line":4409},[1137,10377,5623],{"class":1607},[1137,10379,1611],{"class":1364},[1137,10381,1538],{"class":1364},[1137,10383,5271],{"class":1360},[1137,10385,5632],{"class":1364},[1137,10387,10388,10390,10392,10394,10396,10398],{"class":1139,"line":4420},[1137,10389,5638],{"class":1364},[1137,10391,6723],{"class":1607},[1137,10393,1611],{"class":1364},[1137,10395,1538],{"class":1364},[1137,10397,6723],{"class":1360},[1137,10399,5632],{"class":1364},[1137,10401,10402,10404,10406,10408,10410],{"class":1139,"line":4428},[1137,10403,5675],{"class":1607},[1137,10405,1611],{"class":1364},[1137,10407,1538],{"class":1364},[1137,10409,5682],{"class":1147},[1137,10411,5632],{"class":1364},[1137,10413,10414,10416,10418,10420,10422],{"class":1139,"line":4434},[1137,10415,7105],{"class":1607},[1137,10417,1611],{"class":1364},[1137,10419,1538],{"class":1364},[1137,10421,7591],{"class":1147},[1137,10423,5632],{"class":1364},[1137,10425,10426,10428,10430,10432,10434,10436],{"class":1139,"line":4439},[1137,10427,5705],{"class":1364},[1137,10429,5708],{"class":1607},[1137,10431,1611],{"class":1364},[1137,10433,1538],{"class":1364},[1137,10435,7606],{"class":1360},[1137,10437,5632],{"class":1364},[1137,10439,10440],{"class":1139,"line":4474},[1137,10441,5723],{"class":1364},[1137,10443,10444,10446],{"class":1139,"line":4480},[1137,10445,5729],{"class":1364},[1137,10447,7619],{"class":1370},[1137,10449,10450,10452,10454,10456,10458,10460],{"class":1139,"line":4500},[1137,10451,7624],{"class":1364},[1137,10453,5641],{"class":1607},[1137,10455,1611],{"class":1364},[1137,10457,1538],{"class":1364},[1137,10459,5641],{"class":1360},[1137,10461,5632],{"class":1364},[1137,10463,10464,10466,10468,10470,10472],{"class":1139,"line":4506},[1137,10465,7639],{"class":1607},[1137,10467,1611],{"class":1364},[1137,10469,1538],{"class":1364},[1137,10471,5742],{"class":1147},[1137,10473,5632],{"class":1364},[1137,10475,10476,10478,10480,10482,10484,10486,10488],{"class":1139,"line":4552},[1137,10477,7652],{"class":1364},[1137,10479,7655],{"class":1607},[1137,10481,1611],{"class":1364},[1137,10483,1538],{"class":1364},[1137,10485,7655],{"class":1160},[1137,10487,1824],{"class":1364},[1137,10489,5632],{"class":1364},[1137,10491,10492,10494,10496,10498,10500,10502,10504],{"class":1139,"line":4568},[1137,10493,7652],{"class":1364},[1137,10495,7672],{"class":1607},[1137,10497,1611],{"class":1364},[1137,10499,1538],{"class":1364},[1137,10501,7679],{"class":1160},[1137,10503,1824],{"class":1364},[1137,10505,5632],{"class":1364},[1137,10507,10508],{"class":1139,"line":4601},[1137,10509,7688],{"class":1364},[1137,10511,10512,10514,10516],{"class":1139,"line":4615},[1137,10513,5601],{"class":1364},[1137,10515,5154],{"class":1370},[1137,10517,1585],{"class":1364},[1137,10519,10520,10522,10524],{"class":1139,"line":4623},[1137,10521,5760],{"class":1364},[1137,10523,5556],{"class":1370},[1137,10525,1585],{"class":1364},[1137,10527,10528,10530,10532],{"class":1139,"line":4629},[1137,10529,1636],{"class":1364},[1137,10531,1582],{"class":1370},[1137,10533,1585],{"class":1364},[1137,10535,10536,10538,10540],{"class":1139,"line":4636},[1137,10537,1646],{"class":1364},[1137,10539,5504],{"class":1370},[1137,10541,1585],{"class":1364},[1137,10543,10544,10546,10548],{"class":1139,"line":4641},[1137,10545,1655],{"class":1364},[1137,10547,1582],{"class":1370},[1137,10549,1585],{"class":1364},[1027,10551,4702,10552,10555,10556,10558],{},[1087,10553,10554],{},"refreshNuxtData('chats')"," call in the chat page's ",[1087,10557,7793],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[1031,10560,10562],{"id":10561},"adding-multi-model-support","Adding multi-model support",[1027,10564,10565,10566,10569],{},"One of the benefits of using ",[1081,10567,4671],{"href":1116,"rel":10568},[1085]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1165,10571,10573],{"id":10572},"creating-a-models-composable","Creating a models composable",[1027,10575,10576,10577,1374],{},"Define the available models and persist the user's selection using ",[1081,10578,10581],{"href":10579,"rel":10580},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1085],[1087,10582,10583],{},"useCookie",[1337,10585,10586],{},[1128,10587,10590],{"className":1341,"code":10588,"filename":10589,"language":1343,"meta":1133,"style":1133},"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",[1087,10591,10592,10605,10616,10662,10706,10750,10755,10759,10789,10806,10812,10816,10822,10829,10834,10838],{"__ignoreMap":1133},[1137,10593,10594,10596,10598,10601,10603],{"class":1139,"line":1140},[1137,10595,1351],{"class":1350},[1137,10597,5253],{"class":1607},[1137,10599,10600],{"class":1160}," useModels",[1137,10602,1824],{"class":1364},[1137,10604,1440],{"class":1364},[1137,10606,10607,10609,10612,10614],{"class":1139,"line":1157},[1137,10608,2637],{"class":1607},[1137,10610,10611],{"class":1360}," models",[1137,10613,2647],{"class":1364},[1137,10615,1377],{"class":1370},[1137,10617,10618,10621,10623,10625,10627,10629,10631,10633,10635,10637,10639,10641,10643,10645,10648,10650,10652,10658,10660],{"class":1139,"line":1380},[1137,10619,10620],{"class":1364},"    {",[1137,10622,3142],{"class":1370},[1137,10624,1374],{"class":1364},[1137,10626,1451],{"class":1364},[1137,10628,3149],{"class":1147},[1137,10630,1389],{"class":1364},[1137,10632,1735],{"class":1364},[1137,10634,3128],{"class":1370},[1137,10636,1374],{"class":1364},[1137,10638,1451],{"class":1364},[1137,10640,3135],{"class":1147},[1137,10642,1389],{"class":1364},[1137,10644,1735],{"class":1364},[1137,10646,10647],{"class":1370}," icon",[1137,10649,1374],{"class":1364},[1137,10651,1451],{"class":1364},[1137,10653,10654,10657],{"class":1147},[8263,10655],{"class":10656},"shiki-icon-highlight spZLw","i-simple-icons-openai",[1137,10659,1389],{"class":1364},[1137,10661,3154],{"class":1364},[1137,10663,10664,10666,10668,10670,10672,10674,10676,10678,10680,10682,10684,10686,10688,10690,10692,10694,10696,10702,10704],{"class":1139,"line":1395},[1137,10665,10620],{"class":1364},[1137,10667,3142],{"class":1370},[1137,10669,1374],{"class":1364},[1137,10671,1451],{"class":1364},[1137,10673,3179],{"class":1147},[1137,10675,1389],{"class":1364},[1137,10677,1735],{"class":1364},[1137,10679,3128],{"class":1370},[1137,10681,1374],{"class":1364},[1137,10683,1451],{"class":1364},[1137,10685,3103],{"class":1147},[1137,10687,1389],{"class":1364},[1137,10689,1735],{"class":1364},[1137,10691,10647],{"class":1370},[1137,10693,1374],{"class":1364},[1137,10695,1451],{"class":1364},[1137,10697,10698,10701],{"class":1147},[8263,10699],{"class":10700},"shiki-icon-highlight sVmEp","i-simple-icons-anthropic",[1137,10703,1389],{"class":1364},[1137,10705,3154],{"class":1364},[1137,10707,10708,10710,10712,10714,10716,10718,10720,10722,10724,10726,10728,10730,10732,10734,10736,10738,10740,10746,10748],{"class":1139,"line":1407},[1137,10709,10620],{"class":1364},[1137,10711,3142],{"class":1370},[1137,10713,1374],{"class":1364},[1137,10715,1451],{"class":1364},[1137,10717,3209],{"class":1147},[1137,10719,1389],{"class":1364},[1137,10721,1735],{"class":1364},[1137,10723,3128],{"class":1370},[1137,10725,1374],{"class":1364},[1137,10727,1451],{"class":1364},[1137,10729,3196],{"class":1147},[1137,10731,1389],{"class":1364},[1137,10733,1735],{"class":1364},[1137,10735,10647],{"class":1370},[1137,10737,1374],{"class":1364},[1137,10739,1451],{"class":1364},[1137,10741,10742,10745],{"class":1147},[8263,10743],{"class":10744},"shiki-icon-highlight st_gQ","i-simple-icons-google",[1137,10747,1389],{"class":1364},[1137,10749,3214],{"class":1364},[1137,10751,10752],{"class":1139,"line":1418},[1137,10753,10754],{"class":1370},"  ]\n",[1137,10756,10757],{"class":1139,"line":1426},[1137,10758,1429],{"emptyLinePlaceholder":21},[1137,10760,10761,10763,10765,10767,10770,10772,10774,10776,10778,10780,10783,10785,10787],{"class":1139,"line":1432},[1137,10762,2637],{"class":1607},[1137,10764,3319],{"class":1360},[1137,10766,2647],{"class":1364},[1137,10768,10769],{"class":1160}," useCookie",[1137,10771,1579],{"class":1364},[1137,10773,3292],{"class":1143},[1137,10775,2690],{"class":1364},[1137,10777,1361],{"class":1370},[1137,10779,1389],{"class":1364},[1137,10781,10782],{"class":1147},"ai-model",[1137,10784,1389],{"class":1364},[1137,10786,1735],{"class":1364},[1137,10788,1440],{"class":1364},[1137,10790,10791,10794,10796,10798,10800,10802,10804],{"class":1139,"line":1443},[1137,10792,10793],{"class":1160},"    default",[1137,10795,1374],{"class":1364},[1137,10797,5039],{"class":1364},[1137,10799,1844],{"class":1607},[1137,10801,1451],{"class":1364},[1137,10803,3103],{"class":1147},[1137,10805,1415],{"class":1364},[1137,10807,10808,10810],{"class":1139,"line":1459},[1137,10809,2438],{"class":1364},[1137,10811,1499],{"class":1370},[1137,10813,10814],{"class":1139,"line":1465},[1137,10815,1429],{"emptyLinePlaceholder":21},[1137,10817,10818,10820],{"class":1139,"line":1470},[1137,10819,2865],{"class":1350},[1137,10821,1440],{"class":1364},[1137,10823,10824,10827],{"class":1139,"line":1493},[1137,10825,10826],{"class":1360},"    models",[1137,10828,1392],{"class":1364},[1137,10830,10831],{"class":1139,"line":1998},[1137,10832,10833],{"class":1360},"    model\n",[1137,10835,10836],{"class":1139,"line":2025},[1137,10837,3651],{"class":1364},[1137,10839,10840],{"class":1139,"line":2071},[1137,10841,5477],{"class":1364},[1165,10843,10845],{"id":10844},"building-the-model-selector","Building the model selector",[1027,10847,1662,10848,10853],{},[1081,10849,10850],{"href":753},[1087,10851,10852],{},"USelectMenu"," component that displays the available models:",[1337,10855,10856],{},[1128,10857,10860],{"className":1569,"code":10858,"filename":10859,"language":34,"meta":1133,"style":1133},"\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",[1087,10861,10862,10882,10915,10919,10936,10940,10958,10990,10994,11002,11006,11014,11021,11034,11050,11070,11083,11096,11101],{"__ignoreMap":1133},[1137,10863,10864,10866,10868,10870,10872,10874,10876,10878,10880],{"class":1139,"line":1140},[1137,10865,1579],{"class":1364},[1137,10867,5189],{"class":1370},[1137,10869,5192],{"class":1607},[1137,10871,5195],{"class":1607},[1137,10873,1611],{"class":1364},[1137,10875,1538],{"class":1364},[1137,10877,1343],{"class":1147},[1137,10879,1538],{"class":1364},[1137,10881,1585],{"class":1364},[1137,10883,10884,10886,10889,10891,10894,10896,10898,10900,10902,10904,10907,10909,10911,10913],{"class":1139,"line":1157},[1137,10885,3093],{"class":1607},[1137,10887,10888],{"class":1360}," model ",[1137,10890,1611],{"class":1364},[1137,10892,10893],{"class":1160}," defineModel",[1137,10895,1579],{"class":1364},[1137,10897,3292],{"class":1143},[1137,10899,2690],{"class":1364},[1137,10901,1361],{"class":1360},[1137,10903,1884],{"class":1364},[1137,10905,10906],{"class":1370}," required",[1137,10908,1374],{"class":1364},[1137,10910,4232],{"class":4231},[1137,10912,1751],{"class":1364},[1137,10914,1499],{"class":1360},[1137,10916,10917],{"class":1139,"line":1380},[1137,10918,1429],{"emptyLinePlaceholder":21},[1137,10920,10921,10923,10925,10928,10930,10932,10934],{"class":1139,"line":1395},[1137,10922,3093],{"class":1607},[1137,10924,1729],{"class":1364},[1137,10926,10927],{"class":1360}," models ",[1137,10929,1496],{"class":1364},[1137,10931,2647],{"class":1364},[1137,10933,10600],{"class":1160},[1137,10935,2693],{"class":1360},[1137,10937,10938],{"class":1139,"line":1407},[1137,10939,1429],{"emptyLinePlaceholder":21},[1137,10941,10942,10944,10947,10949,10951,10953,10955],{"class":1139,"line":1418},[1137,10943,3093],{"class":1607},[1137,10945,10946],{"class":1360}," selectedModel ",[1137,10948,1611],{"class":1364},[1137,10950,8205],{"class":1160},[1137,10952,1361],{"class":1360},[1137,10954,1824],{"class":1364},[1137,10956,10957],{"class":1607}," =>\n",[1137,10959,10960,10963,10965,10968,10970,10972,10974,10976,10978,10981,10983,10985,10987],{"class":1139,"line":1426},[1137,10961,10962],{"class":1360},"  models",[1137,10964,1827],{"class":1364},[1137,10966,10967],{"class":1160},"find",[1137,10969,1361],{"class":1360},[1137,10971,3393],{"class":1961},[1137,10973,1844],{"class":1607},[1137,10975,3398],{"class":1360},[1137,10977,1827],{"class":1364},[1137,10979,10980],{"class":1360},"value ",[1137,10982,8288],{"class":1364},[1137,10984,3319],{"class":1360},[1137,10986,1827],{"class":1364},[1137,10988,10989],{"class":1360},"value)\n",[1137,10991,10992],{"class":1139,"line":1432},[1137,10993,1499],{"class":1360},[1137,10995,10996,10998,11000],{"class":1139,"line":1443},[1137,10997,1655],{"class":1364},[1137,10999,5189],{"class":1370},[1137,11001,1585],{"class":1364},[1137,11003,11004],{"class":1139,"line":1459},[1137,11005,1429],{"emptyLinePlaceholder":21},[1137,11007,11008,11010,11012],{"class":1139,"line":1465},[1137,11009,1579],{"class":1364},[1137,11011,1582],{"class":1370},[1137,11013,1585],{"class":1364},[1137,11015,11016,11018],{"class":1139,"line":1470},[1137,11017,1592],{"class":1364},[1137,11019,11020],{"class":1370},"USelectMenu\n",[1137,11022,11023,11026,11028,11030,11032],{"class":1139,"line":1493},[1137,11024,11025],{"class":1607},"    v-model",[1137,11027,1611],{"class":1364},[1137,11029,1538],{"class":1364},[1137,11031,4715],{"class":1360},[1137,11033,5632],{"class":1364},[1137,11035,11036,11039,11041,11043,11045,11048],{"class":1139,"line":1998},[1137,11037,11038],{"class":1364},"    :",[1137,11040,8437],{"class":1607},[1137,11042,1611],{"class":1364},[1137,11044,1538],{"class":1364},[1137,11046,11047],{"class":1360},"models",[1137,11049,5632],{"class":1364},[1137,11051,11052,11054,11057,11059,11061,11064,11066,11068],{"class":1139,"line":2025},[1137,11053,11038],{"class":1364},[1137,11055,11056],{"class":1607},"icon",[1137,11058,1611],{"class":1364},[1137,11060,1538],{"class":1364},[1137,11062,11063],{"class":1360},"selectedModel",[1137,11065,3905],{"class":1364},[1137,11067,11056],{"class":1360},[1137,11069,5632],{"class":1364},[1137,11071,11072,11075,11077,11079,11081],{"class":1139,"line":2071},[1137,11073,11074],{"class":1607},"    variant",[1137,11076,1611],{"class":1364},[1137,11078,1538],{"class":1364},[1137,11080,8494],{"class":1147},[1137,11082,5632],{"class":1364},[1137,11084,11085,11088,11090,11092,11094],{"class":1139,"line":2138},[1137,11086,11087],{"class":1607},"    value-key",[1137,11089,1611],{"class":1364},[1137,11091,1538],{"class":1364},[1137,11093,3378],{"class":1147},[1137,11095,5632],{"class":1364},[1137,11097,11098],{"class":1139,"line":2208},[1137,11099,11100],{"class":1364},"  \u002F>\n",[1137,11102,11103,11105,11107],{"class":1139,"line":2248},[1137,11104,1655],{"class":1364},[1137,11106,1582],{"class":1370},[1137,11108,1585],{"class":1364},[1165,11110,11112],{"id":11111},"integrating-with-the-chat","Integrating with the chat",[1027,11114,11115],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1337,11117,11118],{},[1714,11119,11120],{},[1128,11121,11124],{"className":1569,"code":11122,"filename":6221,"highlights":11123,"language":34,"meta":1133,"style":1133},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { useChat } 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 { messages, status, error, sendMessage, regenerate, stop } = useChat({\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    sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    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=\"messages\"\n          :status=\"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                \u003CChatMarkdown\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatMarkdown\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\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=\"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=\"status\"\n            color=\"neutral\"\n            @stop=\"stop()\"\n            @reload=\"regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1432,2353,2385,2401,4354,4369,4386],[1087,11125,11126,11146,11172,11190,11208,11212,11224,11236,11253,11257,11299,11303,11319,11359,11363,11367,11383,11387,11425,11443,11461,11475,11501,11509,11525,11530,11539,11551,11575,11589,11593,11597,11609,11621,11635,11649,11661,11667,11671,11677,11681,11699,11709,11729,11751,11763,11767,11771,11775,11787,11815,11821,11825,11831,11839,11843,11851,11883,11895,11903,11911,11923,11941,11947,11961,11975,11979,11991,11995,12019,12085,12091,12109,12127,12147,12151,12157,12175,12195,12199,12207,12211,12231,12237,12259,12277,12297,12301,12329,12333,12341,12349,12357,12365,12374,12379,12386,12398,12412,12424,12436,12450,12454,12467,12487,12495,12499,12505,12519,12531,12547,12563,12567,12575,12583,12592,12601],{"__ignoreMap":1133},[1137,11127,11128,11130,11132,11134,11136,11138,11140,11142,11144],{"class":1139,"line":1140},[1137,11129,1579],{"class":1364},[1137,11131,5189],{"class":1370},[1137,11133,5192],{"class":1607},[1137,11135,5195],{"class":1607},[1137,11137,1611],{"class":1364},[1137,11139,1538],{"class":1364},[1137,11141,1343],{"class":1147},[1137,11143,1538],{"class":1364},[1137,11145,1585],{"class":1364},[1137,11147,11148,11150,11152,11154,11156,11158,11160,11162,11164,11166,11168,11170],{"class":1139,"line":1157},[1137,11149,1726],{"class":1350},[1137,11151,1729],{"class":1364},[1137,11153,6254],{"class":1360},[1137,11155,1735],{"class":1364},[1137,11157,6259],{"class":1360},[1137,11159,1735],{"class":1364},[1137,11161,6264],{"class":1360},[1137,11163,1751],{"class":1364},[1137,11165,1754],{"class":1350},[1137,11167,1451],{"class":1364},[1137,11169,2558],{"class":1147},[1137,11171,1415],{"class":1364},[1137,11173,11174,11176,11178,11180,11182,11184,11186,11188],{"class":1139,"line":1380},[1137,11175,1726],{"class":1350},[1137,11177,1729],{"class":1364},[1137,11179,6284],{"class":1360},[1137,11181,1751],{"class":1364},[1137,11183,1754],{"class":1350},[1137,11185,1451],{"class":1364},[1137,11187,6293],{"class":1147},[1137,11189,1415],{"class":1364},[1137,11191,11192,11194,11196,11198,11200,11202,11204,11206],{"class":1139,"line":1395},[1137,11193,1726],{"class":1350},[1137,11195,1729],{"class":1364},[1137,11197,6305],{"class":1360},[1137,11199,1751],{"class":1364},[1137,11201,1754],{"class":1350},[1137,11203,1451],{"class":1364},[1137,11205,6314],{"class":1147},[1137,11207,1415],{"class":1364},[1137,11209,11210],{"class":1139,"line":1407},[1137,11211,1429],{"emptyLinePlaceholder":21},[1137,11213,11214,11216,11218,11220,11222],{"class":1139,"line":1418},[1137,11215,3093],{"class":1607},[1137,11217,6327],{"class":1360},[1137,11219,1611],{"class":1364},[1137,11221,6332],{"class":1160},[1137,11223,2693],{"class":1360},[1137,11225,11226,11228,11230,11232,11234],{"class":1139,"line":1426},[1137,11227,3093],{"class":1607},[1137,11229,6341],{"class":1360},[1137,11231,1611],{"class":1364},[1137,11233,6346],{"class":1160},[1137,11235,2693],{"class":1360},[1137,11237,11239,11241,11243,11245,11247,11249,11251],{"class":11238,"line":1432},[1139,1589],[1137,11240,3093],{"class":1607},[1137,11242,1729],{"class":1364},[1137,11244,10888],{"class":1360},[1137,11246,1496],{"class":1364},[1137,11248,2647],{"class":1364},[1137,11250,10600],{"class":1160},[1137,11252,2693],{"class":1360},[1137,11254,11255],{"class":1139,"line":1443},[1137,11256,1429],{"emptyLinePlaceholder":21},[1137,11258,11259,11261,11263,11265,11267,11269,11271,11273,11275,11277,11279,11281,11283,11285,11287,11289,11291,11293,11295,11297],{"class":1139,"line":1459},[1137,11260,3093],{"class":1607},[1137,11262,1729],{"class":1364},[1137,11264,6366],{"class":1370},[1137,11266,1374],{"class":1364},[1137,11268,6371],{"class":1360},[1137,11270,1496],{"class":1364},[1137,11272,2647],{"class":1364},[1137,11274,2650],{"class":1350},[1137,11276,6380],{"class":1160},[1137,11278,1361],{"class":1360},[1137,11280,3739],{"class":1364},[1137,11282,6387],{"class":1147},[1137,11284,5461],{"class":1364},[1137,11286,6392],{"class":1360},[1137,11288,1827],{"class":1364},[1137,11290,6397],{"class":1360},[1137,11292,1827],{"class":1364},[1137,11294,2038],{"class":1360},[1137,11296,5470],{"class":1364},[1137,11298,1499],{"class":1360},[1137,11300,11301],{"class":1139,"line":1465},[1137,11302,1429],{"emptyLinePlaceholder":21},[1137,11304,11305,11307,11309,11311,11313,11315,11317],{"class":1139,"line":1470},[1137,11306,6414],{"class":1350},[1137,11308,1970],{"class":1360},[1137,11310,3599],{"class":1364},[1137,11312,6421],{"class":1360},[1137,11314,1827],{"class":1364},[1137,11316,6426],{"class":1360},[1137,11318,1365],{"class":1364},[1137,11320,11321,11323,11325,11327,11329,11331,11333,11335,11337,11339,11341,11343,11345,11347,11349,11351,11353,11355,11357],{"class":1139,"line":1493},[1137,11322,6433],{"class":1350},[1137,11324,2924],{"class":1160},[1137,11326,1361],{"class":1370},[1137,11328,1884],{"class":1364},[1137,11330,3621],{"class":1370},[1137,11332,1374],{"class":1364},[1137,11334,3627],{"class":3626},[1137,11336,1735],{"class":1364},[1137,11338,3632],{"class":1370},[1137,11340,1374],{"class":1364},[1137,11342,1451],{"class":1364},[1137,11344,3639],{"class":1147},[1137,11346,1389],{"class":1364},[1137,11348,1735],{"class":1364},[1137,11350,6462],{"class":1370},[1137,11352,1374],{"class":1364},[1137,11354,4232],{"class":4231},[1137,11356,1751],{"class":1364},[1137,11358,1499],{"class":1370},[1137,11360,11361],{"class":1139,"line":1998},[1137,11362,5477],{"class":1364},[1137,11364,11365],{"class":1139,"line":2025},[1137,11366,1429],{"emptyLinePlaceholder":21},[1137,11368,11369,11371,11373,11375,11377,11379,11381],{"class":1139,"line":2071},[1137,11370,3093],{"class":1607},[1137,11372,5212],{"class":1360},[1137,11374,1611],{"class":1364},[1137,11376,5217],{"class":1160},[1137,11378,1361],{"class":1360},[1137,11380,5222],{"class":1364},[1137,11382,1499],{"class":1360},[1137,11384,11385],{"class":1139,"line":2138},[1137,11386,1429],{"emptyLinePlaceholder":21},[1137,11388,11389,11391,11393,11395,11397,11399,11401,11403,11405,11407,11409,11411,11413,11415,11417,11419,11421,11423],{"class":1139,"line":2208},[1137,11390,3093],{"class":1607},[1137,11392,1729],{"class":1364},[1137,11394,3329],{"class":1360},[1137,11396,1735],{"class":1364},[1137,11398,6517],{"class":1360},[1137,11400,1735],{"class":1364},[1137,11402,6522],{"class":1360},[1137,11404,1735],{"class":1364},[1137,11406,6527],{"class":1360},[1137,11408,1735],{"class":1364},[1137,11410,6532],{"class":1360},[1137,11412,1735],{"class":1364},[1137,11414,6537],{"class":1360},[1137,11416,1496],{"class":1364},[1137,11418,2647],{"class":1364},[1137,11420,6284],{"class":1160},[1137,11422,1361],{"class":1360},[1137,11424,1365],{"class":1364},[1137,11426,11427,11429,11431,11433,11435,11437,11439,11441],{"class":1139,"line":2248},[1137,11428,1817],{"class":1370},[1137,11430,1374],{"class":1364},[1137,11432,6557],{"class":1360},[1137,11434,1827],{"class":1364},[1137,11436,3378],{"class":1360},[1137,11438,1827],{"class":1364},[1137,11440,2038],{"class":1360},[1137,11442,1392],{"class":1364},[1137,11444,11445,11447,11449,11451,11453,11455,11457,11459],{"class":1139,"line":2299},[1137,11446,1977],{"class":1370},[1137,11448,1374],{"class":1364},[1137,11450,6557],{"class":1360},[1137,11452,1827],{"class":1364},[1137,11454,3378],{"class":1360},[1137,11456,1827],{"class":1364},[1137,11458,2016],{"class":1360},[1137,11460,1392],{"class":1364},[1137,11462,11463,11465,11467,11469,11471,11473],{"class":1139,"line":2312},[1137,11464,6592],{"class":1370},[1137,11466,1374],{"class":1364},[1137,11468,1921],{"class":1364},[1137,11470,6254],{"class":1160},[1137,11472,1361],{"class":1360},[1137,11474,1365],{"class":1364},[1137,11476,11477,11479,11481,11483,11485,11487,11489,11491,11493,11495,11497,11499],{"class":1139,"line":2342},[1137,11478,6608],{"class":1370},[1137,11480,1374],{"class":1364},[1137,11482,3733],{"class":1364},[1137,11484,6387],{"class":1147},[1137,11486,5461],{"class":1364},[1137,11488,6421],{"class":1360},[1137,11490,1827],{"class":1364},[1137,11492,3378],{"class":1360},[1137,11494,1827],{"class":1364},[1137,11496,2038],{"class":1360},[1137,11498,5470],{"class":1364},[1137,11500,1392],{"class":1364},[1137,11502,11503,11505,11507],{"class":1139,"line":2348},[1137,11504,5359],{"class":1370},[1137,11506,1374],{"class":1364},[1137,11508,1440],{"class":1364},[1137,11510,11512,11514,11516,11518,11520,11522],{"class":11511,"line":2353},[1139,1589],[1137,11513,3716],{"class":1370},[1137,11515,1374],{"class":1364},[1137,11517,3319],{"class":1360},[1137,11519,1827],{"class":1364},[1137,11521,10980],{"class":1360},[1137,11523,11524],{"class":2715},"\u002F\u002F Pass the selected model\n",[1137,11526,11528],{"class":11527,"line":2385},[1139,1589],[1137,11529,4626],{"class":1364},[1137,11531,11533,11535,11537],{"class":11532,"line":2401},[1139,1589],[1137,11534,2438],{"class":1364},[1137,11536,1901],{"class":1360},[1137,11538,1392],{"class":1364},[1137,11540,11541,11543,11545,11547,11549],{"class":1139,"line":2419},[1137,11542,6644],{"class":1370},[1137,11544,1361],{"class":1364},[1137,11546,6649],{"class":1961},[1137,11548,1901],{"class":1364},[1137,11550,1440],{"class":1364},[1137,11552,11553,11555,11557,11559,11561,11563,11565,11567,11569,11571,11573],{"class":1139,"line":2435},[1137,11554,6665],{"class":1350},[1137,11556,1970],{"class":1370},[1137,11558,6649],{"class":1360},[1137,11560,1827],{"class":1364},[1137,11562,6674],{"class":1360},[1137,11564,3405],{"class":1364},[1137,11566,1451],{"class":1364},[1137,11568,4379],{"class":1147},[1137,11570,1389],{"class":1364},[1137,11572,3604],{"class":1370},[1137,11574,1365],{"class":1364},[1137,11576,11577,11579,11581,11583,11585,11587],{"class":1139,"line":2443},[1137,11578,6692],{"class":1160},[1137,11580,1361],{"class":1370},[1137,11582,1389],{"class":1364},[1137,11584,1806],{"class":1147},[1137,11586,1389],{"class":1364},[1137,11588,1499],{"class":1370},[1137,11590,11591],{"class":1139,"line":3416},[1137,11592,4626],{"class":1364},[1137,11594,11595],{"class":1139,"line":3431},[1137,11596,1462],{"class":1364},[1137,11598,11599,11601,11603,11605,11607],{"class":1139,"line":3448},[1137,11600,6718],{"class":1370},[1137,11602,1361],{"class":1364},[1137,11604,6723],{"class":1961},[1137,11606,1901],{"class":1364},[1137,11608,1440],{"class":1364},[1137,11610,11611,11613,11615,11617,11619],{"class":1139,"line":3480},[1137,11612,6733],{"class":1360},[1137,11614,1827],{"class":1364},[1137,11616,6738],{"class":1160},[1137,11618,1361],{"class":1370},[1137,11620,1365],{"class":1364},[1137,11622,11623,11625,11627,11629,11631,11633],{"class":1139,"line":3493},[1137,11624,6748],{"class":1370},[1137,11626,1374],{"class":1364},[1137,11628,1451],{"class":1364},[1137,11630,500],{"class":1147},[1137,11632,1389],{"class":1364},[1137,11634,1392],{"class":1364},[1137,11636,11637,11639,11641,11643,11645,11647],{"class":1139,"line":3498},[1137,11638,6764],{"class":1370},[1137,11640,1374],{"class":1364},[1137,11642,6522],{"class":1360},[1137,11644,1827],{"class":1364},[1137,11646,4543],{"class":1360},[1137,11648,1392],{"class":1364},[1137,11650,11651,11653,11655,11657,11659],{"class":1139,"line":3504},[1137,11652,6780],{"class":1370},[1137,11654,1374],{"class":1364},[1137,11656,1451],{"class":1364},[1137,11658,6723],{"class":1147},[1137,11660,1415],{"class":1364},[1137,11662,11663,11665],{"class":1139,"line":3535},[1137,11664,3434],{"class":1364},[1137,11666,1499],{"class":1370},[1137,11668,11669],{"class":1139,"line":3579},[1137,11670,3651],{"class":1364},[1137,11672,11673,11675],{"class":1139,"line":3586},[1137,11674,1496],{"class":1364},[1137,11676,1499],{"class":1360},[1137,11678,11679],{"class":1139,"line":3591},[1137,11680,1429],{"emptyLinePlaceholder":21},[1137,11682,11683,11685,11687,11689,11691,11693,11695,11697],{"class":1139,"line":3609},[1137,11684,6816],{"class":1607},[1137,11686,6819],{"class":1160},[1137,11688,1361],{"class":1364},[1137,11690,6824],{"class":1961},[1137,11692,1374],{"class":1364},[1137,11694,6829],{"class":1143},[1137,11696,1901],{"class":1364},[1137,11698,1440],{"class":1364},[1137,11700,11701,11703,11705,11707],{"class":1139,"line":3648},[1137,11702,6838],{"class":1360},[1137,11704,1827],{"class":1364},[1137,11706,6843],{"class":1160},[1137,11708,2693],{"class":1370},[1137,11710,11711,11713,11715,11717,11719,11721,11723,11725,11727],{"class":1139,"line":3654},[1137,11712,3594],{"class":1350},[1137,11714,1970],{"class":1370},[1137,11716,5271],{"class":1360},[1137,11718,1827],{"class":1364},[1137,11720,3378],{"class":1360},[1137,11722,1827],{"class":1364},[1137,11724,5280],{"class":1160},[1137,11726,5283],{"class":1370},[1137,11728,1365],{"class":1364},[1137,11730,11731,11733,11735,11737,11739,11741,11743,11745,11747,11749],{"class":1139,"line":3659},[1137,11732,6870],{"class":1160},[1137,11734,1361],{"class":1370},[1137,11736,1884],{"class":1364},[1137,11738,1738],{"class":1370},[1137,11740,1374],{"class":1364},[1137,11742,5415],{"class":1360},[1137,11744,1827],{"class":1364},[1137,11746,3378],{"class":1360},[1137,11748,1751],{"class":1364},[1137,11750,1499],{"class":1370},[1137,11752,11753,11755,11757,11759,11761],{"class":1139,"line":3665},[1137,11754,6893],{"class":1360},[1137,11756,1827],{"class":1364},[1137,11758,3378],{"class":1360},[1137,11760,2647],{"class":1364},[1137,11762,6902],{"class":1364},[1137,11764,11765],{"class":1139,"line":3685},[1137,11766,3651],{"class":1364},[1137,11768,11769],{"class":1139,"line":3713},[1137,11770,5477],{"class":1364},[1137,11772,11773],{"class":1139,"line":3725},[1137,11774,1429],{"emptyLinePlaceholder":21},[1137,11776,11777,11779,11781,11783,11785],{"class":1139,"line":3744},[1137,11778,6924],{"class":1160},[1137,11780,1361],{"class":1360},[1137,11782,1824],{"class":1364},[1137,11784,1844],{"class":1607},[1137,11786,1440],{"class":1364},[1137,11788,11789,11791,11793,11795,11797,11799,11801,11803,11805,11807,11809,11811,11813],{"class":1139,"line":3772},[1137,11790,3594],{"class":1350},[1137,11792,1970],{"class":1370},[1137,11794,6421],{"class":1360},[1137,11796,1827],{"class":1364},[1137,11798,3378],{"class":1360},[1137,11800,3905],{"class":1364},[1137,11802,2016],{"class":1360},[1137,11804,1827],{"class":1364},[1137,11806,3884],{"class":1360},[1137,11808,3405],{"class":1364},[1137,11810,3890],{"class":3626},[1137,11812,3604],{"class":1370},[1137,11814,1365],{"class":1364},[1137,11816,11817,11819],{"class":1139,"line":3779},[1137,11818,6965],{"class":1160},[1137,11820,2693],{"class":1370},[1137,11822,11823],{"class":1139,"line":3784},[1137,11824,3651],{"class":1364},[1137,11826,11827,11829],{"class":1139,"line":3850},[1137,11828,1496],{"class":1364},[1137,11830,1499],{"class":1360},[1137,11832,11833,11835,11837],{"class":1139,"line":3855},[1137,11834,1655],{"class":1364},[1137,11836,5189],{"class":1370},[1137,11838,1585],{"class":1364},[1137,11840,11841],{"class":1139,"line":3860},[1137,11842,1429],{"emptyLinePlaceholder":21},[1137,11844,11845,11847,11849],{"class":1139,"line":3866},[1137,11846,1579],{"class":1364},[1137,11848,1582],{"class":1370},[1137,11850,1585],{"class":1364},[1137,11852,11853,11855,11857,11859,11861,11863,11865,11867,11869,11871,11873,11875,11877,11879,11881],{"class":1139,"line":3895},[1137,11854,1592],{"class":1364},[1137,11856,5504],{"class":1370},[1137,11858,5507],{"class":1364},[1137,11860,5510],{"class":1607},[1137,11862,1611],{"class":1364},[1137,11864,1538],{"class":1364},[1137,11866,5517],{"class":1364},[1137,11868,5520],{"class":1370},[1137,11870,5523],{"class":1364},[1137,11872,1389],{"class":1364},[1137,11874,5528],{"class":1147},[1137,11876,1389],{"class":1364},[1137,11878,1751],{"class":1364},[1137,11880,1538],{"class":1364},[1137,11882,1585],{"class":1364},[1137,11884,11885,11887,11889,11891,11893],{"class":1139,"line":3936},[1137,11886,1601],{"class":1364},[1137,11888,1582],{"class":1370},[1137,11890,5545],{"class":1364},[1137,11892,8901],{"class":1607},[1137,11894,1585],{"class":1364},[1137,11896,11897,11899,11901],{"class":1139,"line":3965},[1137,11898,1625],{"class":1364},[1137,11900,8911],{"class":1370},[1137,11902,1631],{"class":1364},[1137,11904,11905,11907,11909],{"class":1139,"line":3977},[1137,11906,1636],{"class":1364},[1137,11908,1582],{"class":1370},[1137,11910,1585],{"class":1364},[1137,11912,11913,11915,11917,11919,11921],{"class":1139,"line":3993},[1137,11914,1601],{"class":1364},[1137,11916,1582],{"class":1370},[1137,11918,5545],{"class":1364},[1137,11920,5520],{"class":1607},[1137,11922,1585],{"class":1364},[1137,11924,11925,11927,11929,11931,11933,11935,11937,11939],{"class":1139,"line":4007},[1137,11926,1625],{"class":1364},[1137,11928,5556],{"class":1370},[1137,11930,5559],{"class":1607},[1137,11932,1611],{"class":1364},[1137,11934,1538],{"class":1364},[1137,11936,7056],{"class":1147},[1137,11938,1538],{"class":1364},[1137,11940,1585],{"class":1364},[1137,11942,11943,11945],{"class":1139,"line":4014},[1137,11944,5575],{"class":1364},[1137,11946,7067],{"class":1370},[1137,11948,11949,11951,11953,11955,11957,11959],{"class":1139,"line":4019},[1137,11950,5638],{"class":1364},[1137,11952,2016],{"class":1607},[1137,11954,1611],{"class":1364},[1137,11956,1538],{"class":1364},[1137,11958,2016],{"class":1360},[1137,11960,5632],{"class":1364},[1137,11962,11963,11965,11967,11969,11971,11973],{"class":1139,"line":4024},[1137,11964,5638],{"class":1364},[1137,11966,5641],{"class":1607},[1137,11968,1611],{"class":1364},[1137,11970,1538],{"class":1364},[1137,11972,5641],{"class":1360},[1137,11974,5632],{"class":1364},[1137,11976,11977],{"class":1139,"line":4030},[1137,11978,7100],{"class":1607},[1137,11980,11981,11983,11985,11987,11989],{"class":1139,"line":4047},[1137,11982,7105],{"class":1607},[1137,11984,1611],{"class":1364},[1137,11986,1538],{"class":1364},[1137,11988,7112],{"class":1147},[1137,11990,5632],{"class":1364},[1137,11992,11993],{"class":1139,"line":4069},[1137,11994,5723],{"class":1364},[1137,11996,11997,11999,12001,12003,12005,12007,12009,12011,12013,12015,12017],{"class":1139,"line":4087},[1137,11998,5729],{"class":1364},[1137,12000,1582],{"class":1370},[1137,12002,5545],{"class":1364},[1137,12004,374],{"class":1607},[1137,12006,1611],{"class":1364},[1137,12008,1538],{"class":1364},[1137,12010,1884],{"class":1364},[1137,12012,7137],{"class":1360},[1137,12014,1496],{"class":1364},[1137,12016,1538],{"class":1364},[1137,12018,1585],{"class":1364},[1137,12020,12021,12023,12025,12027,12029,12031,12033,12035,12037,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073,12075,12077,12079,12081,12083],{"class":1139,"line":4095},[1137,12022,7148],{"class":1364},[1137,12024,1582],{"class":1370},[1137,12026,7153],{"class":1350},[1137,12028,1611],{"class":1364},[1137,12030,1538],{"class":1364},[1137,12032,7160],{"class":1360},[1137,12034,1735],{"class":1364},[1137,12036,7165],{"class":1360},[1137,12038,7168],{"class":1364},[1137,12040,2642],{"class":1360},[1137,12042,1827],{"class":1364},[1137,12044,2222],{"class":1360},[1137,12046,1538],{"class":1364},[1137,12048,5507],{"class":1364},[1137,12050,7181],{"class":1607},[1137,12052,1611],{"class":1364},[1137,12054,7186],{"class":1364},[1137,12056,4543],{"class":1360},[1137,12058,1827],{"class":1364},[1137,12060,2038],{"class":1360},[1137,12062,1496],{"class":1364},[1137,12064,7197],{"class":1147},[1137,12066,5461],{"class":1364},[1137,12068,7202],{"class":1360},[1137,12070,1827],{"class":1364},[1137,12072,6674],{"class":1360},[1137,12074,1496],{"class":1364},[1137,12076,7197],{"class":1147},[1137,12078,5461],{"class":1364},[1137,12080,7215],{"class":1360},[1137,12082,7218],{"class":1364},[1137,12084,1585],{"class":1364},[1137,12086,12087,12089],{"class":1139,"line":4112},[1137,12088,7225],{"class":1364},[1137,12090,7228],{"class":1370},[1137,12092,12093,12095,12097,12099,12101,12103,12105,12107],{"class":1139,"line":4133},[1137,12094,7233],{"class":1350},[1137,12096,1611],{"class":1364},[1137,12098,1538],{"class":1364},[1137,12100,7240],{"class":1160},[1137,12102,1361],{"class":1364},[1137,12104,7202],{"class":1360},[1137,12106,1901],{"class":1364},[1137,12108,5632],{"class":1364},[1137,12110,12111,12113,12115,12117,12119,12121,12123,12125],{"class":1139,"line":4143},[1137,12112,7253],{"class":1364},[1137,12114,5404],{"class":1607},[1137,12116,1611],{"class":1364},[1137,12118,1538],{"class":1364},[1137,12120,7202],{"class":1360},[1137,12122,1827],{"class":1364},[1137,12124,5404],{"class":1360},[1137,12126,5632],{"class":1364},[1137,12128,12129,12131,12133,12135,12137,12139,12141,12143,12145],{"class":1139,"line":4153},[1137,12130,7253],{"class":1364},[1137,12132,5656],{"class":1607},[1137,12134,1611],{"class":1364},[1137,12136,1538],{"class":1364},[1137,12138,7280],{"class":1160},[1137,12140,1361],{"class":1364},[1137,12142,7202],{"class":1360},[1137,12144,1901],{"class":1364},[1137,12146,5632],{"class":1364},[1137,12148,12149],{"class":1139,"line":4163},[1137,12150,7293],{"class":1364},[1137,12152,12153,12155],{"class":1139,"line":4180},[1137,12154,7298],{"class":1364},[1137,12156,7301],{"class":1370},[1137,12158,12159,12161,12163,12165,12167,12169,12171,12173],{"class":1139,"line":4191},[1137,12160,7306],{"class":1364},[1137,12162,3378],{"class":1607},[1137,12164,1611],{"class":1364},[1137,12166,1538],{"class":1364},[1137,12168,7202],{"class":1360},[1137,12170,1827],{"class":1364},[1137,12172,5404],{"class":1360},[1137,12174,5632],{"class":1364},[1137,12176,12177,12179,12181,12183,12185,12187,12189,12191,12193],{"class":1139,"line":4197},[1137,12178,7306],{"class":1364},[1137,12180,5656],{"class":1607},[1137,12182,1611],{"class":1364},[1137,12184,1538],{"class":1364},[1137,12186,7280],{"class":1160},[1137,12188,1361],{"class":1364},[1137,12190,7202],{"class":1360},[1137,12192,1901],{"class":1364},[1137,12194,5632],{"class":1364},[1137,12196,12197],{"class":1139,"line":4203},[1137,12198,7345],{"class":1364},[1137,12200,12201,12203,12205],{"class":1139,"line":4213},[1137,12202,7350],{"class":1364},[1137,12204,7353],{"class":1370},[1137,12206,1585],{"class":1364},[1137,12208,12209],{"class":1139,"line":4223},[1137,12210,1429],{"emptyLinePlaceholder":21},[1137,12212,12213,12215,12217,12219,12221,12223,12225,12227,12229],{"class":1139,"line":4237},[1137,12214,7225],{"class":1364},[1137,12216,1582],{"class":1370},[1137,12218,7368],{"class":1350},[1137,12220,1611],{"class":1364},[1137,12222,1538],{"class":1364},[1137,12224,7375],{"class":1160},[1137,12226,7378],{"class":1360},[1137,12228,1538],{"class":1364},[1137,12230,1585],{"class":1364},[1137,12232,12233,12235],{"class":1139,"line":4252},[1137,12234,7298],{"class":1364},[1137,12236,7301],{"class":1370},[1137,12238,12239,12241,12243,12245,12247,12249,12251,12253,12255,12257],{"class":1139,"line":4257},[1137,12240,7393],{"class":1350},[1137,12242,1611],{"class":1364},[1137,12244,1538],{"class":1364},[1137,12246,4543],{"class":1360},[1137,12248,1827],{"class":1364},[1137,12250,2152],{"class":1360},[1137,12252,7406],{"class":1364},[1137,12254,1389],{"class":1364},[1137,12256,2179],{"class":1147},[1137,12258,5669],{"class":1364},[1137,12260,12261,12263,12265,12267,12269,12271,12273,12275],{"class":1139,"line":4262},[1137,12262,7306],{"class":1364},[1137,12264,3378],{"class":1607},[1137,12266,1611],{"class":1364},[1137,12268,1538],{"class":1364},[1137,12270,7202],{"class":1360},[1137,12272,1827],{"class":1364},[1137,12274,5404],{"class":1360},[1137,12276,5632],{"class":1364},[1137,12278,12279,12281,12283,12285,12287,12289,12291,12293,12295],{"class":1139,"line":4272},[1137,12280,7306],{"class":1364},[1137,12282,5656],{"class":1607},[1137,12284,1611],{"class":1364},[1137,12286,1538],{"class":1364},[1137,12288,7280],{"class":1160},[1137,12290,1361],{"class":1364},[1137,12292,7202],{"class":1360},[1137,12294,1901],{"class":1364},[1137,12296,5632],{"class":1364},[1137,12298,12299],{"class":1139,"line":4288},[1137,12300,7345],{"class":1364},[1137,12302,12303,12305,12307,12309,12311,12313,12315,12317,12319,12321,12323,12325,12327],{"class":1139,"line":4303},[1137,12304,7298],{"class":1364},[1137,12306,1027],{"class":1370},[1137,12308,7368],{"class":1607},[1137,12310,1611],{"class":1364},[1137,12312,1538],{"class":1364},[1137,12314,7469],{"class":1147},[1137,12316,1538],{"class":1364},[1137,12318,5559],{"class":1607},[1137,12320,1611],{"class":1364},[1137,12322,1538],{"class":1364},[1137,12324,7480],{"class":1147},[1137,12326,1538],{"class":1364},[1137,12328,1585],{"class":1364},[1137,12330,12331],{"class":1139,"line":4309},[1137,12332,7489],{"class":1360},[1137,12334,12335,12337,12339],{"class":1139,"line":4315},[1137,12336,7494],{"class":1364},[1137,12338,1027],{"class":1370},[1137,12340,1585],{"class":1364},[1137,12342,12343,12345,12347],{"class":1139,"line":4323},[1137,12344,7350],{"class":1364},[1137,12346,1582],{"class":1370},[1137,12348,1585],{"class":1364},[1137,12350,12351,12353,12355],{"class":1139,"line":4328},[1137,12352,7511],{"class":1364},[1137,12354,1582],{"class":1370},[1137,12356,1585],{"class":1364},[1137,12358,12359,12361,12363],{"class":1139,"line":4334},[1137,12360,7520],{"class":1364},[1137,12362,1582],{"class":1370},[1137,12364,1585],{"class":1364},[1137,12366,12368,12370,12372],{"class":12367,"line":4354},[1139,1589],[1137,12369,5601],{"class":1364},[1137,12371,5160],{"class":1370},[1137,12373,1585],{"class":1364},[1137,12375,12377],{"class":12376,"line":4369},[1139,1589],[1137,12378,1429],{"emptyLinePlaceholder":21},[1137,12380,12382,12384],{"class":12381,"line":4386},[1139,1589],[1137,12383,5575],{"class":1364},[1137,12385,5617],{"class":1370},[1137,12387,12388,12390,12392,12394,12396],{"class":1139,"line":4409},[1137,12389,5623],{"class":1607},[1137,12391,1611],{"class":1364},[1137,12393,1538],{"class":1364},[1137,12395,5271],{"class":1360},[1137,12397,5632],{"class":1364},[1137,12399,12400,12402,12404,12406,12408,12410],{"class":1139,"line":4420},[1137,12401,5638],{"class":1364},[1137,12403,6723],{"class":1607},[1137,12405,1611],{"class":1364},[1137,12407,1538],{"class":1364},[1137,12409,6723],{"class":1360},[1137,12411,5632],{"class":1364},[1137,12413,12414,12416,12418,12420,12422],{"class":1139,"line":4428},[1137,12415,5675],{"class":1607},[1137,12417,1611],{"class":1364},[1137,12419,1538],{"class":1364},[1137,12421,5682],{"class":1147},[1137,12423,5632],{"class":1364},[1137,12425,12426,12428,12430,12432,12434],{"class":1139,"line":4434},[1137,12427,7105],{"class":1607},[1137,12429,1611],{"class":1364},[1137,12431,1538],{"class":1364},[1137,12433,7591],{"class":1147},[1137,12435,5632],{"class":1364},[1137,12437,12438,12440,12442,12444,12446,12448],{"class":1139,"line":4439},[1137,12439,5705],{"class":1364},[1137,12441,5708],{"class":1607},[1137,12443,1611],{"class":1364},[1137,12445,1538],{"class":1364},[1137,12447,7606],{"class":1360},[1137,12449,5632],{"class":1364},[1137,12451,12452],{"class":1139,"line":4474},[1137,12453,5723],{"class":1364},[1137,12455,12456,12458,12460,12462,12465],{"class":1139,"line":4480},[1137,12457,5729],{"class":1364},[1137,12459,1582],{"class":1370},[1137,12461,5545],{"class":1364},[1137,12463,12464],{"class":1607},"footer",[1137,12466,1585],{"class":1364},[1137,12468,12469,12471,12474,12477,12479,12481,12483,12485],{"class":1139,"line":4500},[1137,12470,7148],{"class":1364},[1137,12472,12473],{"class":1370},"ModelSelect",[1137,12475,12476],{"class":1607}," v-model",[1137,12478,1611],{"class":1364},[1137,12480,1538],{"class":1364},[1137,12482,4715],{"class":1360},[1137,12484,1538],{"class":1364},[1137,12486,1631],{"class":1364},[1137,12488,12489,12491,12493],{"class":1139,"line":4506},[1137,12490,7520],{"class":1364},[1137,12492,1582],{"class":1370},[1137,12494,1585],{"class":1364},[1137,12496,12497],{"class":1139,"line":4552},[1137,12498,1429],{"emptyLinePlaceholder":21},[1137,12500,12501,12503],{"class":1139,"line":4568},[1137,12502,5729],{"class":1364},[1137,12504,7619],{"class":1370},[1137,12506,12507,12509,12511,12513,12515,12517],{"class":1139,"line":4601},[1137,12508,7624],{"class":1364},[1137,12510,5641],{"class":1607},[1137,12512,1611],{"class":1364},[1137,12514,1538],{"class":1364},[1137,12516,5641],{"class":1360},[1137,12518,5632],{"class":1364},[1137,12520,12521,12523,12525,12527,12529],{"class":1139,"line":4615},[1137,12522,7639],{"class":1607},[1137,12524,1611],{"class":1364},[1137,12526,1538],{"class":1364},[1137,12528,5742],{"class":1147},[1137,12530,5632],{"class":1364},[1137,12532,12533,12535,12537,12539,12541,12543,12545],{"class":1139,"line":4623},[1137,12534,7652],{"class":1364},[1137,12536,7655],{"class":1607},[1137,12538,1611],{"class":1364},[1137,12540,1538],{"class":1364},[1137,12542,7655],{"class":1160},[1137,12544,1824],{"class":1364},[1137,12546,5632],{"class":1364},[1137,12548,12549,12551,12553,12555,12557,12559,12561],{"class":1139,"line":4629},[1137,12550,7652],{"class":1364},[1137,12552,7672],{"class":1607},[1137,12554,1611],{"class":1364},[1137,12556,1538],{"class":1364},[1137,12558,7679],{"class":1160},[1137,12560,1824],{"class":1364},[1137,12562,5632],{"class":1364},[1137,12564,12565],{"class":1139,"line":4636},[1137,12566,7688],{"class":1364},[1137,12568,12569,12571,12573],{"class":1139,"line":4641},[1137,12570,5601],{"class":1364},[1137,12572,5154],{"class":1370},[1137,12574,1585],{"class":1364},[1137,12576,12577,12579,12581],{"class":1139,"line":4659},[1137,12578,5760],{"class":1364},[1137,12580,5556],{"class":1370},[1137,12582,1585],{"class":1364},[1137,12584,12586,12588,12590],{"class":1139,"line":12585},115,[1137,12587,1636],{"class":1364},[1137,12589,1582],{"class":1370},[1137,12591,1585],{"class":1364},[1137,12593,12595,12597,12599],{"class":1139,"line":12594},116,[1137,12596,1646],{"class":1364},[1137,12598,5504],{"class":1370},[1137,12600,1585],{"class":1364},[1137,12602,12604,12606,12608],{"class":1139,"line":12603},117,[1137,12605,1655],{"class":1364},[1137,12607,1582],{"class":1370},[1137,12609,1585],{"class":1364},[1031,12611,12613],{"id":12612},"going-further","Going further",[1027,12615,12616],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[1027,12618,12619],{},[1045,12620,12621],{},"User Authentication",[1027,12623,12624,12625,12630],{},"Add authentication with ",[1081,12626,12629],{"href":12627,"rel":12628},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1085],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[1027,12632,12633],{},[1045,12634,12635],{},"AI Tools",[1027,12637,12638,12639,12644],{},"Extend your chatbot with ",[1081,12640,12643],{"href":12641,"rel":12642},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1085],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1128,12646,12648],{"className":1341,"code":12647,"language":1343,"meta":1133,"style":1133},"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",[1087,12649,12650,12669,12687,12691,12706,12722,12739,12770,12778,12798,12803,12838,12842],{"__ignoreMap":1133},[1137,12651,12652,12654,12656,12659,12661,12663,12665,12667],{"class":1139,"line":1140},[1137,12653,1726],{"class":1350},[1137,12655,1729],{"class":1364},[1137,12657,12658],{"class":1360}," tool",[1137,12660,1751],{"class":1364},[1137,12662,1754],{"class":1350},[1137,12664,1451],{"class":1364},[1137,12666,2558],{"class":1147},[1137,12668,1415],{"class":1364},[1137,12670,12671,12673,12675,12677,12679,12681,12683,12685],{"class":1139,"line":1157},[1137,12672,1726],{"class":1350},[1137,12674,1729],{"class":1364},[1137,12676,2593],{"class":1360},[1137,12678,1751],{"class":1364},[1137,12680,1754],{"class":1350},[1137,12682,1451],{"class":1364},[1137,12684,2602],{"class":1147},[1137,12686,1415],{"class":1364},[1137,12688,12689],{"class":1139,"line":1380},[1137,12690,1429],{"emptyLinePlaceholder":21},[1137,12692,12693,12695,12698,12700,12702,12704],{"class":1139,"line":1395},[1137,12694,3093],{"class":1607},[1137,12696,12697],{"class":1360}," weatherTool ",[1137,12699,1611],{"class":1364},[1137,12701,12658],{"class":1160},[1137,12703,1361],{"class":1360},[1137,12705,1365],{"class":1364},[1137,12707,12708,12711,12713,12715,12718,12720],{"class":1139,"line":1407},[1137,12709,12710],{"class":1370},"  description",[1137,12712,1374],{"class":1364},[1137,12714,1451],{"class":1364},[1137,12716,12717],{"class":1147},"Get the current weather for a location",[1137,12719,1389],{"class":1364},[1137,12721,1392],{"class":1364},[1137,12723,12724,12727,12729,12731,12733,12735,12737],{"class":1139,"line":1418},[1137,12725,12726],{"class":1370},"  parameters",[1137,12728,1374],{"class":1364},[1137,12730,2593],{"class":1360},[1137,12732,1827],{"class":1364},[1137,12734,2665],{"class":1160},[1137,12736,1361],{"class":1360},[1137,12738,1365],{"class":1364},[1137,12740,12741,12744,12746,12748,12750,12752,12754,12756,12759,12761,12763,12766,12768],{"class":1139,"line":1426},[1137,12742,12743],{"class":1370},"    location",[1137,12745,1374],{"class":1364},[1137,12747,2593],{"class":1360},[1137,12749,1827],{"class":1364},[1137,12751,3292],{"class":1160},[1137,12753,1824],{"class":1360},[1137,12755,1827],{"class":1364},[1137,12757,12758],{"class":1160},"describe",[1137,12760,1361],{"class":1360},[1137,12762,1389],{"class":1364},[1137,12764,12765],{"class":1147},"The city name",[1137,12767,1389],{"class":1364},[1137,12769,1499],{"class":1360},[1137,12771,12772,12774,12776],{"class":1139,"line":1432},[1137,12773,2438],{"class":1364},[1137,12775,1901],{"class":1360},[1137,12777,1392],{"class":1364},[1137,12779,12780,12783,12785,12787,12789,12792,12794,12796],{"class":1139,"line":1443},[1137,12781,12782],{"class":1160},"  execute",[1137,12784,1374],{"class":1364},[1137,12786,4055],{"class":1607},[1137,12788,1958],{"class":1364},[1137,12790,12791],{"class":1961}," location",[1137,12793,1965],{"class":1364},[1137,12795,1844],{"class":1607},[1137,12797,1440],{"class":1364},[1137,12799,12800],{"class":1139,"line":1459},[1137,12801,12802],{"class":2715},"    \u002F\u002F Fetch weather data from an API\n",[1137,12804,12805,12808,12810,12812,12814,12817,12819,12822,12824,12827,12829,12831,12834,12836],{"class":1139,"line":1465},[1137,12806,12807],{"class":1350},"    return",[1137,12809,1729],{"class":1364},[1137,12811,12791],{"class":1360},[1137,12813,1735],{"class":1364},[1137,12815,12816],{"class":1370}," temperature",[1137,12818,1374],{"class":1364},[1137,12820,12821],{"class":3626}," 22",[1137,12823,1735],{"class":1364},[1137,12825,12826],{"class":1370}," condition",[1137,12828,1374],{"class":1364},[1137,12830,1451],{"class":1364},[1137,12832,12833],{"class":1147},"Sunny",[1137,12835,1389],{"class":1364},[1137,12837,3214],{"class":1364},[1137,12839,12840],{"class":1139,"line":1470},[1137,12841,3651],{"class":1364},[1137,12843,12844,12846],{"class":1139,"line":1493},[1137,12845,1496],{"class":1364},[1137,12847,1499],{"class":1360},[1031,12849,12851],{"id":12850},"deploying-to-vercel","Deploying to Vercel",[1027,12853,12854],{},"Deploy your chatbot to Vercel with zero configuration:",[1128,12856,12858],{"className":1130,"code":12857,"language":1132,"meta":1133,"style":1133},"npx vercel deploy\n",[1087,12859,12860],{"__ignoreMap":1133},[1137,12861,12862,12864,12867],{"class":1139,"line":1140},[1137,12863,1144],{"class":1143},[1137,12865,12866],{"class":1147}," vercel",[1137,12868,12869],{"class":1147}," deploy\n",[1027,12871,12872],{},"Then, in the Vercel dashboard:",[1039,12874,12875,12881],{},[1042,12876,12877,12878,12880],{},"Enable ",[1045,12879,4671],{}," and add credits so requests can be processed.",[1042,12882,12883,12884,12887],{},"Add a ",[1045,12885,12886],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[1501,12889,12890],{},[1027,12891,12892,12893,12895,12896,12898],{},"On Vercel you don't need to manually add ",[1087,12894,1678],{},". Vercel handles the gateway configuration for deployments. Keep using ",[1087,12897,1665],{}," locally for development.",[1501,12900,12901],{"to":1116,"target":165},[1027,12902,12903,12904,1827],{},"Learn more about setting up AI Gateway in the ",[1045,12905,12906],{},"Vercel AI Gateway documentation",[1031,12908,12910],{"id":12909},"conclusion","Conclusion",[1027,12912,12913],{},"You've built a complete AI chatbot with:",[1039,12915,12916,12922,12928,12934,12939],{},[1042,12917,12918,12921],{},[1045,12919,12920],{},"A complete chat interface"," using Nuxt UI components",[1042,12923,12924,12927],{},[1045,12925,12926],{},"Real-time streaming responses"," with the AI SDK",[1042,12929,12930,12933],{},[1045,12931,12932],{},"Streaming Markdown rendering"," with Comark for rich content display",[1042,12935,12936,12938],{},[1045,12937,1065],{}," via AI Gateway",[1042,12940,12941,12944],{},[1045,12942,12943],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[1027,12946,12947],{},"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.",[1027,12949,12950],{},[1045,12951,12952],{},"Resources:",[1039,12954,12955,12962,12969,12976,12982,12988],{},[1042,12956,12957],{},[1081,12958,12961],{"href":12959,"rel":12960},"https:\u002F\u002Fui.nuxt.com\u002Fdocs\u002Fcomponents\u002Fchat",[1085],"Nuxt UI Chat Components",[1042,12963,12964],{},[1081,12965,12968],{"href":12966,"rel":12967},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1085],"NuxtHub Database",[1042,12970,12971],{},[1081,12972,12975],{"href":12973,"rel":12974},"https:\u002F\u002Fai-sdk.dev",[1085],"AI SDK Documentation",[1042,12977,12978],{},[1081,12979,12981],{"href":1116,"rel":12980},[1085],"AI Gateway Documentation",[1042,12983,12984],{},[1081,12985,12987],{"href":1083,"rel":12986},[1085],"Nuxt AI Chat Template",[1042,12989,12990],{},[1081,12991,12993],{"href":1093,"rel":12992},[1085],"Vue AI Chat Template",[1027,12995,12996],{},"We're excited to see what you'll build!",[12998,12999,13000],"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 .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s5r3L, html code.shiki .s5r3L{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Flucide:plus-square.svg?color=%23000)}html pre.shiki code .sS-BN, html code.shiki .sS-BN{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Flucide:messages-square.svg?color=%23000)}html pre.shiki code .spZLw, html code.shiki .spZLw{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:openai.svg?color=%23000)}html pre.shiki code .sVmEp, html code.shiki .sVmEp{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:anthropic.svg?color=%23000)}html pre.shiki code .st_gQ, html code.shiki .st_gQ{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:google.svg?color=%23000)}",{"title":1133,"searchDepth":1157,"depth":1157,"links":13002},[13003,13004,13005,13011,13016,13020,13021,13025,13026,13027,13032,13033,13034],{"id":1033,"depth":1157,"text":1034},{"id":1101,"depth":1157,"text":1102},{"id":1122,"depth":1157,"text":1123,"children":13006},[13007,13008,13009,13010],{"id":1167,"depth":1380,"text":1168},{"id":1327,"depth":1380,"text":1328},{"id":1556,"depth":1380,"text":1557},{"id":1695,"depth":1380,"text":1696},{"id":2481,"depth":1157,"text":2482,"children":13012},[13013,13014,13015],{"id":2493,"depth":1380,"text":2494},{"id":2877,"depth":1380,"text":2878},{"id":4763,"depth":1380,"text":4764},{"id":5145,"depth":1157,"text":5146,"children":13017},[13018,13019],{"id":5164,"depth":1380,"text":5165},{"id":5821,"depth":1380,"text":5822},{"id":6193,"depth":1157,"text":6194},{"id":7885,"depth":1157,"text":7886,"children":13022},[13023,13024],{"id":7892,"depth":1380,"text":7893},{"id":8052,"depth":1380,"text":8053},{"id":8560,"depth":1157,"text":8561},{"id":9135,"depth":1157,"text":9136},{"id":10561,"depth":1157,"text":10562,"children":13028},[13029,13030,13031],{"id":10572,"depth":1380,"text":10573},{"id":10844,"depth":1380,"text":10845},{"id":11111,"depth":1380,"text":11112},{"id":12612,"depth":1157,"text":12613},{"id":12850,"depth":1157,"text":12851},{"id":12909,"depth":1157,"text":12910},"Tutorial","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",{},"\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":1011,"description":13037},{"loc":13041},"blog\u002Fhow-to-build-an-ai-chat","OyA30wSPV-cwbC7iiF8bX9oTtDFRB8TfpLoapK-rtrE",1791788360641]