Files
tweakcn/store/ai-chat-store.ts
Sahaj Jain 5882f60c32 Enhance ai chat (#218)
* update package locks to avoid conflict

* Refactor AI Generation with AI SDK v5 (#210)

* refactor(wip): Whole Chat implementation

* fix: Deps

* chore: Update types and create tool to handle theme generation

* chore: Add hook and component to handle feedback text

* chore: Check for themeStyles in asssiatant metadata

* feat: Improve messages styles and feedback

* chore: Update react-hook-form deps

* chore: Improve Messages display

* chore: Show a banner when theme is generating

* chore: Optimize the Messages syncing

* feat: Add debug button to MessageActions in dev mode

* chore: messages

* chore: Improve System prompt + tools + utils

* fix: correctly display User messages with only images

* feat: Handle errors in UI and adapt to AI sdk

* feat: Use tool output instead of custom data parts

* chore: System prompt and schema context

* chore: Gemini 2.5 pro as the default model

* refactor: Change name to Chat Context and apply generated theme automatically

* chore: Update ai packages to latest version

* feat: Stop ongoing request before starting a new chat

* feat: Refactor logic for Scroll start/end sentinels

* feat: Improve UI streaming with AI Elements and Stream Text utils

* chore: Generate theme types and logic

* feat: Allow customize the speed of streaming text

* refactor: Theme generation utils

* fix: Avoid duplicated Mention references

* styles: Improve Chat error banner

* feat: Enhance Prompt core implementation

* feat: Implement enhance prompt in components

* chore: Add TODOS comments

* chore: Remove Openai provider

* chore: Update AI adk packages

* fix: Free request constant

---------

Co-authored-by: Sahaj Jain <82111591+jnsahaj@users.noreply.github.com>

* update lockfile

* fix import

* fix types

* chore: Trigger theme generation before transitioning to editor page

* refactor: Move AI sdk specific code into Lib and update imports

* chore: Provide model ID to record usage util

* refactor: Multi model provider convention

* fix types

* refactor: Use Zustand persist middleware versioning

* feat: Improve prompts and context

* feat: Optimize streaming JSONContent into text area

* chore: Improve Theme Generation prompt

* feat: Improve prompt

* feat: Add subscription checks for enhancing prompt and Posthog tracking

---------

Co-authored-by: Luis Llanes <137589205+llanesluis@users.noreply.github.com>
Co-authored-by: Luis Llanes <luisllaboj@gmail.com>
2025-10-01 16:31:10 +05:30

48 lines
1.3 KiB
TypeScript

import { ChatMessage } from "@/types/ai";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import { idbStorage } from "./idb-storage";
interface AIChatStore {
messages: ChatMessage[];
setMessages: (messages: ChatMessage[]) => void;
// Hook into zustand hydration lifecycle
hasHydrated: boolean;
_setHasHydrated: () => void;
}
export const useAIChatStore = create<AIChatStore>()(
persist(
(set) => ({
messages: [],
setMessages: (messages: ChatMessage[]) => {
set({ messages });
},
hasHydrated: false,
_setHasHydrated: () => {
set({ hasHydrated: true });
},
}),
{
version: 2,
name: "ai-chat-storage",
storage: createJSONStorage(() => idbStorage),
partialize: (state) => ({ messages: state.messages }),
migrate: (persistedState, fromVersion) => {
if (!persistedState || typeof persistedState !== "object") {
return { messages: [] };
}
if (fromVersion === 2) {
const current = persistedState as AIChatStore;
return { messages: Array.isArray(current.messages) ? current.messages : [] };
}
},
onRehydrateStorage: () => (state) => {
state?._setHasHydrated?.();
},
}
)
);