@ -1,6 +1,7 @@
import { create } from "zustand" ;
import type { OtherParameters , Store } from "./types.js" ;
import type { ConversationsId } from "./database/generated/public/Conversations.js" ;
import { immer } from "zustand/middleware/immer" ;
export const defaultSystemPrompt = ` You are a helpful assistant that answers questions based on the provided context. If you don't know the answer, just say that you don't know, don't try to make up an answer. ` ;
export const defaultParameters = {
@ -8,31 +9,65 @@ export const defaultParameters = {
max_tokens : 100 ,
} as OtherParameters ;
export const useStore = create < Store > ( ) ( ( set ) = > ( {
conversationId : 0 as ConversationsId ,
conversationTitle : "" ,
conversations : [ ] ,
messages : [ ] ,
message : "" ,
systemPrompt : defaultSystemPrompt ,
parameters : defaultParameters ,
loading : false ,
setConversationId : ( conversationId ) = > set ( { conversationId } ) ,
setConversationTitle : ( conversationTitle ) = > set ( { conversationTitle } ) ,
setConversations : ( conversations ) = > set ( { conversations } ) ,
addConversation : ( conversation ) = >
set ( ( state ) = > ( {
conversations : [ . . . state . conversations , conversation ] ,
} ) ) ,
removeConversation : ( conversationId ) = >
set ( ( state ) = > ( {
conversations : state.conversations.filter (
( conversation ) = > conversation . id !== conversationId ,
) ,
} ) ) ,
setMessages : ( messages ) = > set ( { messages } ) ,
setMessage : ( message ) = > set ( { message } ) ,
setSystemPrompt : ( systemPrompt ) = > set ( { systemPrompt } ) ,
setParameters : ( parameters ) = > set ( { parameters } ) ,
setLoading : ( loading ) = > set ( { loading } ) ,
} ) ) ;
export const useStore = create < Store > ( ) (
immer ( ( set , get ) = > ( {
selectedConversationId : 0 as ConversationsId ,
conversations : [ ] ,
messages : [ ] ,
message : "" ,
systemPrompt : defaultSystemPrompt ,
parameters : defaultParameters ,
loading : false ,
setConversationId : ( conversationId ) = >
set ( ( stateDraft ) = > {
stateDraft . selectedConversationId = conversationId ;
} ) ,
setConversationTitle : ( conversationTitle ) = >
set ( ( stateDraft ) = > {
const conversation = stateDraft . conversations . find (
( c ) = > c . id === stateDraft . selectedConversationId ,
) ;
if ( conversation ) {
conversation . title = conversationTitle ;
}
} ) ,
setConversations : ( conversations ) = >
set ( ( stateDraft ) = > {
stateDraft . conversations = conversations ;
} ) ,
addConversation : ( conversation ) = >
set ( ( stateDraft ) = > {
stateDraft . conversations . push ( conversation ) ;
} ) ,
removeConversation : ( conversationId ) = >
set ( ( stateDraft ) = > {
stateDraft . conversations . splice (
stateDraft . conversations . findIndex (
( conversation ) = > conversation . id === conversationId ,
) ,
1 ,
) ;
} ) ,
setMessages : ( messages ) = >
set ( ( stateDraft ) = > {
//@ts-ignore
stateDraft . messages = messages ;
} ) ,
setMessage : ( message ) = >
set ( ( stateDraft ) = > {
stateDraft . message = message ;
} ) ,
setSystemPrompt : ( systemPrompt ) = >
set ( ( stateDraft ) = > {
stateDraft . systemPrompt = systemPrompt ;
} ) ,
setParameters : ( parameters ) = >
set ( ( stateDraft ) = > {
stateDraft . parameters = parameters ;
} ) ,
setLoading : ( loading ) = >
set ( ( stateDraft ) = > {
stateDraft . loading = loading ;
} ) ,
} ) ) ,
) ;