jan/web/hooks/useCreateConversation.ts
Faisal Amir 539b467141
ui: interface revamp (#429)
* feat: adding create bot functionality

Signed-off-by: James <james@jan.ai>

* update the temperature progress bar

Signed-off-by: James <james@jan.ai>

* WIP baselayout

* Mapping plugins with available preferences

* Added loader component

* WIP working another screen

* Cleanup types and avoid import one by one

* Prepare bottom bar

* Add css variables colors to enable user select the accent

* Enable change accent color

* Seperate css variable

* Fix conflict

* Add blank state of my model empty

* Restyle explore models page

* Enable user config left sidebar

* Restyle my models page

* WIP styling chat page

* Restyling chat message

* Fix conflict

* Adde form preferences setting plugins

* Fixed form bot info

* Sidebar bot chat

* Showing rightbar for both setting when user created bot

* Fix style bot info

* Using overflow auto intead of scroll

* Remove script built UI from root package

* Fix missig import

* Resolve error linter

* fix e2e tests

Signed-off-by: James <james@jan.ai>

---------

Signed-off-by: James <james@jan.ai>
Co-authored-by: James <james@jan.ai>
2023-10-24 10:59:12 +07:00

83 lines
2.3 KiB
TypeScript

import { useAtom, useSetAtom } from 'jotai'
import { executeSerial } from '@services/pluginService'
import { DataService, ModelManagementService } from '@janhq/core'
import {
userConversationsAtom,
setActiveConvoIdAtom,
addNewConversationStateAtom,
updateConversationWaitingForResponseAtom,
updateConversationErrorAtom,
} from '@helpers/atoms/Conversation.atom'
import useInitModel from './useInitModel'
const useCreateConversation = () => {
const { initModel } = useInitModel()
const [userConversations, setUserConversations] = useAtom(
userConversationsAtom
)
const setActiveConvoId = useSetAtom(setActiveConvoIdAtom)
const addNewConvoState = useSetAtom(addNewConversationStateAtom)
const updateConvWaiting = useSetAtom(updateConversationWaitingForResponseAtom)
const updateConvError = useSetAtom(updateConversationErrorAtom)
const createConvoByBot = async (bot: Bot) => {
const model = await executeSerial(
ModelManagementService.GetModelById,
bot.modelId
)
if (!model) {
alert(
`Model ${bot.modelId} not found! Please re-download the model first.`
)
return
}
return requestCreateConvo(model, bot)
}
const requestCreateConvo = async (model: AssistantModel, bot?: Bot) => {
const conversationName = model.name
const conv: Conversation = {
modelId: model._id,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
name: conversationName,
botId: bot?._id ?? undefined,
}
const id = await executeSerial(DataService.CreateConversation, conv)
if (id) updateConvWaiting(id, true)
initModel(model).then((res: any) => {
if (id) updateConvWaiting(id, false)
if (res?.error) {
updateConvError(id, res.error)
}
})
const mappedConvo: Conversation = {
_id: id,
modelId: model._id,
name: conversationName,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
botId: bot?._id ?? undefined,
}
addNewConvoState(id ?? '', {
hasMore: true,
waitingForResponse: false,
})
setUserConversations([mappedConvo, ...userConversations])
setActiveConvoId(id)
}
return {
createConvoByBot,
requestCreateConvo,
}
}
export default useCreateConversation