import { createContext, useContext } from 'use-context-selector' import { PromptMode } from '@/models/debug' import type { AnnotationReplyConfig, BlockStatus, ChatPromptConfig, CitationConfig, CompletionPromptConfig, ConversationHistoriesRole, DatasetConfigs, Inputs, ModelConfig, ModerationConfig, MoreLikeThisConfig, PromptConfig, PromptItem, SpeechToTextConfig, SuggestedQuestionsAfterAnswerConfig, TextToSpeechConfig, } from '@/models/debug' import type { ExternalDataTool } from '@/models/common' import type { DataSet } from '@/models/datasets' import type { VisionSettings } from '@/types/app' import { ModelModeType, RETRIEVE_TYPE, Resolution, TransferMethod } from '@/types/app' import { ANNOTATION_DEFAULT, DEFAULT_AGENT_SETTING, DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG } from '@/config' import type { FormValue } from '@/app/components/header/account-setting/model-provider-page/declarations' import type { Collection } from '@/app/components/tools/types' type IDebugConfiguration = { appId: string hasSetAPIKEY: boolean isTrailFinished: boolean mode: string modelModeType: ModelModeType promptMode: PromptMode setPromptMode: (promptMode: PromptMode) => void isAdvancedMode: boolean isAgent: boolean isFunctionCall: boolean isOpenAI: boolean collectionList: Collection[] canReturnToSimpleMode: boolean setCanReturnToSimpleMode: (canReturnToSimpleMode: boolean) => void chatPromptConfig: ChatPromptConfig completionPromptConfig: CompletionPromptConfig currentAdvancedPrompt: PromptItem | PromptItem[] setCurrentAdvancedPrompt: (prompt: PromptItem | PromptItem[], isUserChanged?: boolean) => void showHistoryModal: () => void conversationHistoriesRole: ConversationHistoriesRole setConversationHistoriesRole: (conversationHistoriesRole: ConversationHistoriesRole) => void hasSetBlockStatus: BlockStatus conversationId: string | null // after first chat send setConversationId: (conversationId: string | null) => void introduction: string setIntroduction: (introduction: string) => void suggestedQuestions: string[] setSuggestedQuestions: (questions: string[]) => void controlClearChatMessage: number setControlClearChatMessage: (controlClearChatMessage: number) => void prevPromptConfig: PromptConfig setPrevPromptConfig: (prevPromptConfig: PromptConfig) => void moreLikeThisConfig: MoreLikeThisConfig setMoreLikeThisConfig: (moreLikeThisConfig: MoreLikeThisConfig) => void suggestedQuestionsAfterAnswerConfig: SuggestedQuestionsAfterAnswerConfig setSuggestedQuestionsAfterAnswerConfig: (suggestedQuestionsAfterAnswerConfig: SuggestedQuestionsAfterAnswerConfig) => void speechToTextConfig: SpeechToTextConfig setSpeechToTextConfig: (speechToTextConfig: SpeechToTextConfig) => void textToSpeechConfig: TextToSpeechConfig setTextToSpeechConfig: (textToSpeechConfig: TextToSpeechConfig) => void citationConfig: CitationConfig setCitationConfig: (citationConfig: CitationConfig) => void annotationConfig: AnnotationReplyConfig setAnnotationConfig: (annotationConfig: AnnotationReplyConfig) => void moderationConfig: ModerationConfig setModerationConfig: (moderationConfig: ModerationConfig) => void externalDataToolsConfig: ExternalDataTool[] setExternalDataToolsConfig: (externalDataTools: ExternalDataTool[]) => void formattingChanged: boolean setFormattingChanged: (formattingChanged: boolean) => void inputs: Inputs setInputs: (inputs: Inputs) => void query: string // user question setQuery: (query: string) => void // Belows are draft infos completionParams: FormValue setCompletionParams: (completionParams: FormValue) => void // model_config modelConfig: ModelConfig setModelConfig: (modelConfig: ModelConfig) => void dataSets: DataSet[] setDataSets: (dataSet: DataSet[]) => void showSelectDataSet: () => void // dataset config datasetConfigs: DatasetConfigs setDatasetConfigs: (config: DatasetConfigs) => void hasSetContextVar: boolean isShowVisionConfig: boolean visionConfig: VisionSettings setVisionConfig: (visionConfig: VisionSettings, noNotice?: boolean) => void } const DebugConfigurationContext = createContext({ appId: '', hasSetAPIKEY: false, isTrailFinished: false, mode: '', modelModeType: ModelModeType.chat, promptMode: PromptMode.simple, setPromptMode: () => { }, isAdvancedMode: false, isAgent: false, isFunctionCall: false, isOpenAI: false, collectionList: [], canReturnToSimpleMode: false, setCanReturnToSimpleMode: () => { }, chatPromptConfig: DEFAULT_CHAT_PROMPT_CONFIG, completionPromptConfig: DEFAULT_COMPLETION_PROMPT_CONFIG, currentAdvancedPrompt: [], showHistoryModal: () => { }, conversationHistoriesRole: { user_prefix: 'user', assistant_prefix: 'assistant', }, setConversationHistoriesRole: () => { }, setCurrentAdvancedPrompt: () => { }, hasSetBlockStatus: { context: false, history: false, query: false, }, conversationId: '', setConversationId: () => { }, introduction: '', setIntroduction: () => { }, suggestedQuestions: [], setSuggestedQuestions: () => {}, controlClearChatMessage: 0, setControlClearChatMessage: () => { }, prevPromptConfig: { prompt_template: '', prompt_variables: [], }, setPrevPromptConfig: () => { }, moreLikeThisConfig: { enabled: false, }, setMoreLikeThisConfig: () => { }, suggestedQuestionsAfterAnswerConfig: { enabled: false, }, setSuggestedQuestionsAfterAnswerConfig: () => { }, speechToTextConfig: { enabled: false, }, setSpeechToTextConfig: () => { }, textToSpeechConfig: { enabled: false, voice: '', language: '', }, setTextToSpeechConfig: () => { }, citationConfig: { enabled: false, }, setCitationConfig: () => { }, moderationConfig: { enabled: false, }, annotationConfig: { id: '', enabled: false, score_threshold: ANNOTATION_DEFAULT.score_threshold, embedding_model: { embedding_model_name: '', embedding_provider_name: '', }, }, setAnnotationConfig: () => { }, setModerationConfig: () => { }, externalDataToolsConfig: [], setExternalDataToolsConfig: () => { }, formattingChanged: false, setFormattingChanged: () => { }, inputs: {}, setInputs: () => { }, query: '', setQuery: () => { }, completionParams: { max_tokens: 16, temperature: 1, // 0-2 top_p: 1, presence_penalty: 1, // -2-2 frequency_penalty: 1, // -2-2 }, setCompletionParams: () => { }, modelConfig: { provider: 'OPENAI', // 'OPENAI' model_id: 'gpt-3.5-turbo', // 'gpt-3.5-turbo' mode: ModelModeType.unset, configs: { prompt_template: '', prompt_variables: [], }, opening_statement: null, more_like_this: null, suggested_questions_after_answer: null, speech_to_text: null, text_to_speech: null, retriever_resource: null, sensitive_word_avoidance: null, dataSets: [], agentConfig: DEFAULT_AGENT_SETTING, }, setModelConfig: () => { }, dataSets: [], showSelectDataSet: () => { }, setDataSets: () => { }, datasetConfigs: { retrieval_model: RETRIEVE_TYPE.oneWay, reranking_model: { reranking_provider_name: '', reranking_model_name: '', }, top_k: 2, score_threshold_enabled: false, score_threshold: 0.7, datasets: { datasets: [], }, }, setDatasetConfigs: () => { }, hasSetContextVar: false, isShowVisionConfig: false, visionConfig: { enabled: false, number_limits: 2, detail: Resolution.low, transfer_methods: [TransferMethod.remote_url], }, setVisionConfig: () => { }, }) export const useDebugConfigurationContext = () => useContext(DebugConfigurationContext) export default DebugConfigurationContext