page-assist/src/store/option.tsx
zhaoweijie 2b4885ae2d refactor(iod): 重构数联网相关组件和逻辑
-优化了 Data、Scene 和 Team组件的逻辑,使用 currentIodMessage 替代复杂的条件判断- 改进了 IodRelevant 组件的动画和数据处理方式
- 调整了 Message 组件以支持数联网搜索功能
- 重构了 PlaygroundIodProvider,简化了上下文类型和数据处理
- 更新了数据库相关操作,使用新的 HistoryMessage 类型
- 新增了 IodDb 类来管理数联网连接配置
2025-08-24 19:00:49 +08:00

154 lines
4.7 KiB
TypeScript

import { Knowledge } from "@/db/knowledge"
import { create } from "zustand"
import { Message } from "esbuild"
export type ChatHistory = {
role: "user" | "assistant" | "system"
content: string
image?: string
messageType?: string
}[]
type State = {
messages: Message[]
setMessages: (messages: Message[]) => void
history: ChatHistory
setHistory: (history: ChatHistory) => void
currentMeteringEntry: { data: MeteringEntry; loading: boolean }
setCurrentMeteringEntry: (meteringEntry: {
data: MeteringEntry
loading: boolean
}) => void
meteringEntries: MeteringEntry[]
setMeteringEntries: (meteringEntries: MeteringEntry[]) => void
streaming: boolean
setStreaming: (streaming: boolean) => void
isFirstMessage: boolean
setIsFirstMessage: (isFirstMessage: boolean) => void
historyId: string | null
setHistoryId: (history_id: string | null) => void
isLoading: boolean
setIsLoading: (isLoading: boolean) => void
isProcessing: boolean
setIsProcessing: (isProcessing: boolean) => void
selectedModel: string | null
setSelectedModel: (selectedModel: string) => void
chatMode: "normal" | "rag"
setChatMode: (chatMode: "normal" | "rag") => void
isEmbedding: boolean
setIsEmbedding: (isEmbedding: boolean) => void
webSearch: boolean
setWebSearch: (webSearch: boolean) => void
iodSearch: boolean
setIodSearch: (iodSearch: boolean) => void
isSearchingInternet: boolean
setIsSearchingInternet: (isSearchingInternet: boolean) => void
selectedSystemPrompt: string | null
setSelectedSystemPrompt: (selectedSystemPrompt: string) => void
selectedQuickPrompt: string | null
setSelectedQuickPrompt: (selectedQuickPrompt: string) => void
selectedKnowledge: Knowledge | null
setSelectedKnowledge: (selectedKnowledge: Knowledge) => void
setSpeechToTextLanguage: (language: string) => void
speechToTextLanguage: string
temporaryChat: boolean
setTemporaryChat: (temporaryChat: boolean) => void
useOCR: boolean
setUseOCR: (useOCR: boolean) => void
}
export type MeteringEntry = {
id: string
// 问题
queryContent: string
// 提示词全文
prompt: string
// 思维链(只有深度思考时有)
cot?: string
// 回答
responseContent: string
// 关联数据个数
relatedDataCount: number
// 数联网输入token
iodInputToken: string
// 数联网输出token
iodOutputToken: string
// 大模型输入token数量
modelInputTokenCount: number
// 大模型输出token数量
modelOutputTokenCount: number
// 日期
date: number
// 耗时
timeTaken: number
// 大模型回答的全部内容
modelResponseContent: string
// iod的全部内容的token数量
iodTokenCount: number
// iod返回的数据
iodData: any[]
// iod keywords
iodKeywords: string[]
// 模型
model: string
}
export const useStoreMessageOption = create<State>((set) => ({
messages: [],
setMessages: (messages) => set({ messages }),
history: [],
setHistory: (history) => set({ history }),
currentMeteringEntry: { data: {} as MeteringEntry, loading: false },
setCurrentMeteringEntry: (currentMeteringEntry) =>
set({ currentMeteringEntry }),
meteringEntries: JSON.parse(
localStorage.getItem("meteringEntries") || JSON.stringify([])
),
setMeteringEntries: (meteringEntries) => set({ meteringEntries }),
streaming: false,
setStreaming: (streaming) => set({ streaming }),
isFirstMessage: true,
setIsFirstMessage: (isFirstMessage) => set({ isFirstMessage }),
historyId: null,
setHistoryId: (historyId) => set({ historyId }),
isLoading: false,
setIsLoading: (isLoading) => set({ isLoading }),
isProcessing: false,
setIsProcessing: (isProcessing) => set({ isProcessing }),
speechToTextLanguage: "en-US",
setSpeechToTextLanguage: (language) =>
set({ speechToTextLanguage: language }),
selectedModel: null,
setSelectedModel: (selectedModel) => set({ selectedModel }),
chatMode: "normal",
setChatMode: (chatMode) => set({ chatMode }),
isEmbedding: false,
setIsEmbedding: (isEmbedding) => set({ isEmbedding }),
webSearch: false,
setWebSearch: (webSearch) => set({ webSearch }),
iodSearch: true,
setIodSearch: (iodSearch) => set({ iodSearch }),
isSearchingInternet: false,
setIsSearchingInternet: (isSearchingInternet) => set({ isSearchingInternet }),
selectedSystemPrompt: null,
setSelectedSystemPrompt: (selectedSystemPrompt) =>
set({ selectedSystemPrompt }),
selectedQuickPrompt: null,
setSelectedQuickPrompt: (selectedQuickPrompt) => set({ selectedQuickPrompt }),
selectedKnowledge: null,
setSelectedKnowledge: (selectedKnowledge) => set({ selectedKnowledge }),
temporaryChat: false,
setTemporaryChat: (temporaryChat) => set({ temporaryChat }),
useOCR: false,
setUseOCR: (useOCR) => set({ useOCR })
}))