123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import { useState } from 'react'
- import { clone } from 'lodash-es'
- import produce from 'immer'
- import type { ChatPromptConfig, CompletionParams, CompletionPromptConfig, ConversationHistoriesRole, PromptItem } from '@/models/debug'
- import { PromptMode } from '@/models/debug'
- import { AppType, ModelModeType } from '@/types/app'
- import { DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG } from '@/config'
- import { PRE_PROMPT_PLACEHOLDER_TEXT, checkHasContextBlock, checkHasHistoryBlock, checkHasQueryBlock } from '@/app/components/base/prompt-editor/constants'
- import { fetchPromptTemplate } from '@/service/debug'
- type Param = {
- appMode: string
- modelModeType: ModelModeType
- modelName: string
- promptMode: PromptMode
- prePrompt: string
- onUserChangedPrompt: () => void
- hasSetDataSet: boolean
- completionParams: CompletionParams
- setCompletionParams: (params: CompletionParams) => void
- setStop: (stop: string[]) => void
- }
- const useAdvancedPromptConfig = ({
- appMode,
- modelModeType,
- modelName,
- promptMode,
- prePrompt,
- onUserChangedPrompt,
- hasSetDataSet,
- completionParams,
- setCompletionParams,
- setStop,
- }: Param) => {
- const isAdvancedPrompt = promptMode === PromptMode.advanced
- const [chatPromptConfig, setChatPromptConfig] = useState<ChatPromptConfig>(clone(DEFAULT_CHAT_PROMPT_CONFIG))
- const [completionPromptConfig, setCompletionPromptConfig] = useState<CompletionPromptConfig>(clone(DEFAULT_COMPLETION_PROMPT_CONFIG))
- const currentAdvancedPrompt = (() => {
- if (!isAdvancedPrompt)
- return []
- return (modelModeType === ModelModeType.chat) ? chatPromptConfig.prompt : completionPromptConfig.prompt
- })()
- const setCurrentAdvancedPrompt = (prompt: PromptItem | PromptItem[], isUserChanged?: boolean) => {
- if (!isAdvancedPrompt)
- return
- if (modelModeType === ModelModeType.chat) {
- setChatPromptConfig({
- ...chatPromptConfig,
- prompt: prompt as PromptItem[],
- })
- }
- else {
- setCompletionPromptConfig({
- ...completionPromptConfig,
- prompt: prompt as PromptItem,
- })
- }
- if (isUserChanged)
- onUserChangedPrompt()
- }
- const setConversationHistoriesRole = (conversationHistoriesRole: ConversationHistoriesRole) => {
- setCompletionPromptConfig({
- ...completionPromptConfig,
- conversation_histories_role: conversationHistoriesRole,
- })
- }
- const hasSetBlockStatus = (() => {
- if (!isAdvancedPrompt) {
- return {
- context: checkHasContextBlock(prePrompt),
- history: false,
- query: false,
- }
- }
- if (modelModeType === ModelModeType.chat) {
- return {
- context: !!chatPromptConfig.prompt.find(p => checkHasContextBlock(p.text)),
- history: false,
- query: !!chatPromptConfig.prompt.find(p => checkHasQueryBlock(p.text)),
- }
- }
- else {
- const prompt = completionPromptConfig.prompt.text
- return {
- context: checkHasContextBlock(prompt),
- history: checkHasHistoryBlock(prompt),
- query: checkHasQueryBlock(prompt),
- }
- }
- })()
- /* prompt: simple to advanced process, or chat model to completion model
- * 1. migrate prompt
- * 2. change promptMode to advanced
- */
- const migrateToDefaultPrompt = async (isMigrateToCompetition?: boolean, toModelModeType?: ModelModeType) => {
- const mode = modelModeType
- const toReplacePrePrompt = prePrompt || ''
- if (!isAdvancedPrompt) {
- const { chat_prompt_config, completion_prompt_config, stop } = await fetchPromptTemplate({
- appMode,
- mode,
- modelName,
- hasSetDataSet,
- })
- if (modelModeType === ModelModeType.chat) {
- const newPromptConfig = produce(chat_prompt_config, (draft) => {
- draft.prompt = draft.prompt.map((p) => {
- return {
- ...p,
- text: p.text.replace(PRE_PROMPT_PLACEHOLDER_TEXT, toReplacePrePrompt),
- }
- })
- })
- setChatPromptConfig(newPromptConfig)
- }
- else {
- const newPromptConfig = produce(completion_prompt_config, (draft) => {
- draft.prompt.text = draft.prompt.text.replace(PRE_PROMPT_PLACEHOLDER_TEXT, toReplacePrePrompt)
- })
- setCompletionPromptConfig(newPromptConfig)
- setCompletionParams({
- ...completionParams,
- stop,
- })
- }
- return
- }
- if (isMigrateToCompetition) {
- const { completion_prompt_config, chat_prompt_config, stop } = await fetchPromptTemplate({
- appMode,
- mode: toModelModeType as ModelModeType,
- modelName,
- hasSetDataSet,
- })
- if (toModelModeType === ModelModeType.completion) {
- const newPromptConfig = produce(completion_prompt_config, (draft) => {
- if (!completionPromptConfig.prompt.text)
- draft.prompt.text = draft.prompt.text.replace(PRE_PROMPT_PLACEHOLDER_TEXT, toReplacePrePrompt)
- else
- draft.prompt.text = completionPromptConfig.prompt.text.replace(PRE_PROMPT_PLACEHOLDER_TEXT, toReplacePrePrompt)
- if (appMode === AppType.chat && completionPromptConfig.conversation_histories_role.assistant_prefix && completionPromptConfig.conversation_histories_role.user_prefix)
- draft.conversation_histories_role = completionPromptConfig.conversation_histories_role
- })
- setCompletionPromptConfig(newPromptConfig)
- if (!completionParams.stop || completionParams.stop.length === 0) {
- setCompletionParams({
- ...completionParams,
- stop,
- })
- }
- setStop(stop) // switch mode's params is async. It may override the stop value.
- }
- else {
- const newPromptConfig = produce(chat_prompt_config, (draft) => {
- draft.prompt = draft.prompt.map((p) => {
- return {
- ...p,
- text: p.text.replace(PRE_PROMPT_PLACEHOLDER_TEXT, toReplacePrePrompt),
- }
- })
- })
- setChatPromptConfig(newPromptConfig)
- }
- }
- }
- return {
- chatPromptConfig,
- setChatPromptConfig,
- completionPromptConfig,
- setCompletionPromptConfig,
- currentAdvancedPrompt,
- setCurrentAdvancedPrompt,
- hasSetBlockStatus,
- setConversationHistoriesRole,
- migrateToDefaultPrompt,
- }
- }
- export default useAdvancedPromptConfig
|