mirror of https://gitee.com/godoos/godoos.git
2 changed files with 230 additions and 192 deletions
@ -1,202 +1,237 @@ |
|||
import { defineStore } from "pinia" |
|||
import { db } from "./db.js" |
|||
import { t } from "@/i18n/index.ts" |
|||
import { useAssistantStore } from "./assistant.ts"; |
|||
import { useModelStore } from "@/stores/model"; |
|||
import { ref } from "vue"; |
|||
export const useAiChatStore = defineStore('aichat', () => { |
|||
const modelStore = useModelStore() |
|||
const promptStore = useAssistantStore() |
|||
const activeId: any = ref(0) |
|||
const currentMessage: any = ref({}) |
|||
// 聊天列表
|
|||
const chatList: any = ref([]) |
|||
const chatInfo: any = ref({}) |
|||
const messageList: any = ref([]) |
|||
const modelList:any = ref([]) |
|||
const promptList: any = ref([]) |
|||
const searchInput: any = ref('') |
|||
const showInfo = ref(false) |
|||
const editInfo: any = ref({}); //编辑聊天信息
|
|||
const isEditor = ref(true); |
|||
import { defineStore } from 'pinia' |
|||
import { db } from './db.js' |
|||
import { t } from '@/i18n/index.ts' |
|||
import { useAssistantStore } from './assistant.ts' |
|||
import { useModelStore } from '@/stores/model' |
|||
import { ref } from 'vue' |
|||
export const useAiChatStore = defineStore( |
|||
'aichat', |
|||
() => { |
|||
const modelStore = useModelStore() |
|||
const promptStore = useAssistantStore() |
|||
const activeId: any = ref(0) |
|||
const currentMessage: any = ref({}) |
|||
// 聊天列表
|
|||
const chatList: any = ref([]) |
|||
const chatInfo: any = ref({}) |
|||
const messageList: any = ref([]) |
|||
const modelList: any = ref([]) |
|||
const promptList: any = ref([]) |
|||
const searchInput: any = ref('') |
|||
const showInfo = ref(false) |
|||
const editInfo: any = ref({}) //编辑聊天信息
|
|||
const isEditor = ref(true) |
|||
|
|||
const newChat = async () => { |
|||
const currentModel = await modelStore.getModel('chat') |
|||
if (!currentModel) { |
|||
return false |
|||
const newChat = async (knowledgeId: any) => { |
|||
const currentModel = await modelStore.getModel('chat') |
|||
if (!currentModel) { |
|||
return false |
|||
} |
|||
const promptData = await promptStore.getPrompt('chat') |
|||
if (knowledgeId) { |
|||
return await addChat( |
|||
'知识库对话' + knowledgeId, |
|||
currentModel, |
|||
promptData, |
|||
knowledgeId |
|||
) |
|||
} |
|||
return await addChat( |
|||
t('aichat.newchat'), |
|||
currentModel, |
|||
promptData, |
|||
knowledgeId |
|||
) |
|||
} |
|||
const promptData = await promptStore.getPrompt('chat') |
|||
return await addChat(t('aichat.newchat'), currentModel, promptData, "") |
|||
} |
|||
const getPrompt = async (type: string) => { |
|||
return await promptStore.getPrompt(type) |
|||
} |
|||
const initChat = async () => { |
|||
if (activeId.value === 0) { |
|||
await newChat() |
|||
} |
|||
modelList.value = await modelStore.getModelAction('chat') |
|||
const promptRes = await promptStore.getPrompts('chat') |
|||
promptList.value = promptRes.list |
|||
chatList.value = await db.getAll('aichatlist') |
|||
if(activeId.value > 0){ |
|||
messageList.value = await db.getByField('aichatmsg', 'chatId', activeId.value) |
|||
const getPrompt = async (type: string) => { |
|||
return await promptStore.getPrompt(type) |
|||
} |
|||
const initChat = async (knowledgeId: any) => { |
|||
if (knowledgeId) { |
|||
const chat = await db.getByField( |
|||
'aichatlist', |
|||
'knowledgeId', |
|||
knowledgeId |
|||
) |
|||
if (chat.length) { |
|||
activeId.value = chat[0].id |
|||
} else { |
|||
await newChat(knowledgeId) |
|||
} |
|||
} |
|||
if (activeId.value === 0) { |
|||
await newChat(knowledgeId) |
|||
} |
|||
modelList.value = await modelStore.getModelAction('chat') |
|||
const promptRes = await promptStore.getPrompts('chat') |
|||
promptList.value = promptRes.list |
|||
chatList.value = await db.getAll('aichatlist') |
|||
if (activeId.value > 0) { |
|||
messageList.value = await db.getByField( |
|||
'aichatmsg', |
|||
'chatId', |
|||
activeId.value |
|||
) |
|||
chatInfo.value = await db.getOne('aichatlist', activeId.value) |
|||
} |
|||
} |
|||
const getActiveChat = async () => { |
|||
chatInfo.value = await db.getOne('aichatlist', activeId.value) |
|||
messageList.value = await db.getByField( |
|||
'aichatmsg', |
|||
'chatId', |
|||
activeId.value |
|||
) |
|||
chatList.value = await db.getAll('aichatlist') |
|||
return { chatInfo, messageList, chatList } |
|||
} |
|||
} |
|||
const getActiveChat = async () => { |
|||
chatInfo.value = await db.getOne('aichatlist', activeId.value) |
|||
messageList.value = await db.getByField('aichatmsg', 'chatId', activeId.value) |
|||
chatList.value = await db.getAll('aichatlist') |
|||
return { chatInfo, messageList, chatList } |
|||
} |
|||
const getChatList = async () => { |
|||
const list = await db.getAll('aichatlist') |
|||
chatList.value = list |
|||
return list |
|||
} |
|||
// 添加聊天
|
|||
async function addChat(title: string, modelData: any, promptData: any, knowledgeId: string) { |
|||
const newChat = { |
|||
title, |
|||
prompt: promptData.prompt, |
|||
promptId: promptData.id, |
|||
model: modelData.model, |
|||
engine: modelData.info.engine, |
|||
createdAt: Date.now(), |
|||
knowledgeId |
|||
} |
|||
//console.log(newChat)
|
|||
activeId.value = await db.addOne('aichatlist', newChat) |
|||
return activeId.value |
|||
|
|||
} |
|||
async function setActiveId(newId: number) { |
|||
activeId.value = newId |
|||
chatInfo.value = await db.getOne('aichatlist', newId) |
|||
messageList.value = await db.getByField('aichatmsg', 'chatId', newId) |
|||
} |
|||
// 删除单个聊天
|
|||
async function deleteChat(chatId: number) { |
|||
await db.delete('aichatlist', chatId) |
|||
await db.deleteByField('aichatmsg', 'chatId', chatId) |
|||
//如果删除的id是当前id
|
|||
let id; |
|||
if (chatId == activeId.value) { |
|||
//
|
|||
const getChatList = async () => { |
|||
const list = await db.getAll('aichatlist') |
|||
if (list.length > 0) { |
|||
id = list[0]['id'] |
|||
|
|||
} else { |
|||
id = await newChat() |
|||
chatList.value = list |
|||
return list |
|||
} |
|||
// 添加聊天
|
|||
async function addChat( |
|||
title: string, |
|||
modelData: any, |
|||
promptData: any, |
|||
knowledgeId: string |
|||
) { |
|||
const newChat = { |
|||
title, |
|||
prompt: promptData.prompt, |
|||
promptId: promptData.id, |
|||
model: modelData.model, |
|||
engine: modelData.info.engine, |
|||
createdAt: Date.now(), |
|||
knowledgeId: knowledgeId || 0, |
|||
} |
|||
setActiveId(id) |
|||
//console.log(newChat)
|
|||
activeId.value = await db.addOne('aichatlist', newChat) |
|||
return activeId.value |
|||
} |
|||
async function setActiveId(newId: number) { |
|||
activeId.value = newId |
|||
chatInfo.value = await db.getOne('aichatlist', newId) |
|||
messageList.value = await db.getByField('aichatmsg', 'chatId', newId) |
|||
} |
|||
// 删除单个聊天
|
|||
async function deleteChat(chatId: number) { |
|||
await db.delete('aichatlist', chatId) |
|||
await db.deleteByField('aichatmsg', 'chatId', chatId) |
|||
//如果删除的id是当前id
|
|||
let id |
|||
if (chatId == activeId.value) { |
|||
//
|
|||
const list = await db.getAll('aichatlist') |
|||
if (list.length > 0) { |
|||
id = list[0]['id'] |
|||
} else { |
|||
id = await newChat(0) |
|||
} |
|||
setActiveId(id) |
|||
} |
|||
chatList.value = await db.getAll('aichatlist') |
|||
} |
|||
chatList.value = await db.getAll('aichatlist') |
|||
} |
|||
|
|||
// 更新聊天菜单标题
|
|||
async function updateTitle(chatId: number, title: string) { |
|||
await db.update('aichatlist', chatId, { title }) |
|||
} |
|||
|
|||
// 清空所有Chat
|
|||
async function clearChat() { |
|||
await db.clear('aichatlist') |
|||
await db.clear('aichatmsg') |
|||
} |
|||
|
|||
// 更新聊天菜单标题
|
|||
async function updateTitle(chatId: number, title: string) { |
|||
await db.update('aichatlist', chatId, { title }) |
|||
} |
|||
|
|||
// 新增历史消息
|
|||
async function addMessages(chatId: number, message: any) { |
|||
const currentChat = await db.getOne('aichatlist', chatId) |
|||
//console.log(currentChat)
|
|||
if (currentChat) { |
|||
return await db.addOne('aichatmsg', message) |
|||
// 清空所有Chat
|
|||
async function clearChat() { |
|||
await db.clear('aichatlist') |
|||
await db.clear('aichatmsg') |
|||
} |
|||
} |
|||
|
|||
async function getChat(chatId: number) { |
|||
const chats = await db.getOne('aichatlist', chatId) |
|||
//console.log(chats)
|
|||
const messages = await db.getByField('aichatmsg', 'chatId', chatId) |
|||
return { chats, messages } |
|||
} |
|||
// 新增历史消息
|
|||
async function addMessages(chatId: number, message: any) { |
|||
const currentChat = await db.getOne('aichatlist', chatId) |
|||
//console.log(currentChat)
|
|||
if (currentChat) { |
|||
return await db.addOne('aichatmsg', message) |
|||
} |
|||
} |
|||
|
|||
// 获取指定id的聊天的历史记录
|
|||
async function getChat(chatId: number) { |
|||
const chats = await db.getOne('aichatlist', chatId) |
|||
//console.log(chats)
|
|||
const messages = await db.getByField('aichatmsg', 'chatId', chatId) |
|||
return { chats, messages } |
|||
} |
|||
|
|||
async function getChatHistory(chatId: number) { |
|||
return await db.getByField('aichatmsg', 'chatId', chatId) |
|||
} |
|||
// 获取指定id的聊天的历史记录
|
|||
|
|||
// 删除指定id的聊天的历史记录
|
|||
async function clearChatHistory() { |
|||
if(activeId.value > 0){ |
|||
await db.deleteByField('aichatmsg', 'chatId', activeId.value) |
|||
messageList.value = [] |
|||
async function getChatHistory(chatId: number) { |
|||
return await db.getByField('aichatmsg', 'chatId', chatId) |
|||
} |
|||
|
|||
} |
|||
|
|||
// 更新聊天配置
|
|||
async function updateChat(config: any, chatId: number) { |
|||
//console.log(config)
|
|||
return await db.update('aichatlist', chatId, config) |
|||
} |
|||
const showBox = (flag: any) => { |
|||
isEditor.value = flag; |
|||
if (flag === true) { |
|||
editInfo.value = toRaw(chatInfo.value); |
|||
} else { |
|||
editInfo.value = { |
|||
title: "", |
|||
model: "", |
|||
prompt: "", |
|||
promptId: "", |
|||
}; |
|||
} |
|||
showInfo.value = true; |
|||
}; |
|||
return { |
|||
activeId, |
|||
chatList, |
|||
messageList, |
|||
chatInfo, |
|||
currentMessage, |
|||
searchInput, |
|||
showInfo, |
|||
editInfo, |
|||
isEditor, |
|||
getPrompt, |
|||
modelList, |
|||
promptList, |
|||
initChat, |
|||
setActiveId, |
|||
getActiveChat, |
|||
getChatList, |
|||
addChat, |
|||
updateTitle, |
|||
deleteChat, |
|||
clearChat, |
|||
addMessages, |
|||
getChat, |
|||
getChatHistory, |
|||
clearChatHistory, |
|||
updateChat, |
|||
showBox |
|||
} |
|||
// 删除指定id的聊天的历史记录
|
|||
async function clearChatHistory() { |
|||
if (activeId.value > 0) { |
|||
await db.deleteByField('aichatmsg', 'chatId', activeId.value) |
|||
messageList.value = [] |
|||
} |
|||
} |
|||
|
|||
}, { |
|||
persist: { |
|||
enabled: true, |
|||
strategies: [ |
|||
{ |
|||
storage: localStorage, |
|||
paths: [ |
|||
"activeId" |
|||
] |
|||
}, // name 字段用localstorage存储
|
|||
], |
|||
} |
|||
}) |
|||
// 更新聊天配置
|
|||
async function updateChat(config: any, chatId: number) { |
|||
//console.log(config)
|
|||
return await db.update('aichatlist', chatId, config) |
|||
} |
|||
const showBox = (flag: any) => { |
|||
isEditor.value = flag |
|||
if (flag === true) { |
|||
editInfo.value = toRaw(chatInfo.value) |
|||
} else { |
|||
editInfo.value = { |
|||
title: '', |
|||
model: '', |
|||
prompt: '', |
|||
promptId: '', |
|||
} |
|||
} |
|||
showInfo.value = true |
|||
} |
|||
return { |
|||
activeId, |
|||
chatList, |
|||
messageList, |
|||
chatInfo, |
|||
currentMessage, |
|||
searchInput, |
|||
showInfo, |
|||
editInfo, |
|||
isEditor, |
|||
getPrompt, |
|||
modelList, |
|||
promptList, |
|||
initChat, |
|||
setActiveId, |
|||
getActiveChat, |
|||
getChatList, |
|||
addChat, |
|||
updateTitle, |
|||
deleteChat, |
|||
clearChat, |
|||
addMessages, |
|||
getChat, |
|||
getChatHistory, |
|||
clearChatHistory, |
|||
updateChat, |
|||
showBox, |
|||
} |
|||
}, |
|||
{ |
|||
persist: { |
|||
enabled: true, |
|||
strategies: [ |
|||
{ |
|||
storage: localStorage, |
|||
paths: ['activeId'], |
|||
}, // name 字段用localstorage存储
|
|||
], |
|||
}, |
|||
} |
|||
) |
|||
|
Loading…
Reference in new issue