|
@@ -18,6 +18,7 @@ import PromptEditor from '@/app/components/base/prompt-editor'
|
|
|
import ConfigContext from '@/context/debug-configuration'
|
|
|
import { getNewVar, getVars } from '@/utils/var'
|
|
|
import { AppType } from '@/types/app'
|
|
|
+import { AlertCircle } from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback'
|
|
|
|
|
|
type Props = {
|
|
|
type: PromptRole
|
|
@@ -28,6 +29,8 @@ type Props = {
|
|
|
canDelete: boolean
|
|
|
onDelete: () => void
|
|
|
promptVariables: PromptVariable[]
|
|
|
+ isContextMissing: boolean
|
|
|
+ onHideContextMissingTip: () => void
|
|
|
}
|
|
|
|
|
|
const AdvancedPromptInput: FC<Props> = ({
|
|
@@ -39,6 +42,8 @@ const AdvancedPromptInput: FC<Props> = ({
|
|
|
canDelete,
|
|
|
onDelete,
|
|
|
promptVariables,
|
|
|
+ isContextMissing,
|
|
|
+ onHideContextMissingTip,
|
|
|
}) => {
|
|
|
const { t } = useTranslation()
|
|
|
|
|
@@ -91,50 +96,71 @@ const AdvancedPromptInput: FC<Props> = ({
|
|
|
}
|
|
|
|
|
|
const editorHeight = isChatMode ? 'h-[200px]' : 'h-[508px]'
|
|
|
-
|
|
|
+ const contextMissing = (
|
|
|
+ <div
|
|
|
+ className='flex justify-between items-center h-11 pt-2 pr-3 pb-1 pl-4 rounded-tl-xl rounded-tr-xl'
|
|
|
+ style={{
|
|
|
+ background: 'linear-gradient(180deg, #FEF0C7 0%, rgba(254, 240, 199, 0) 100%)',
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div className='flex items-center pr-2' >
|
|
|
+ <AlertCircle className='mr-1 w-4 h-4 text-[#F79009]'/>
|
|
|
+ <div className='leading-[18px] text-[13px] font-medium text-[#DC6803]'>{t('appDebug.promptMode.contextMissing')}</div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ className='flex items-center h-6 px-2 rounded-md bg-[#fff] border border-gray-200 shadow-xs text-xs font-medium text-primary-600 cursor-pointer'
|
|
|
+ onClick={onHideContextMissingTip}
|
|
|
+ >{t('common.operation.ok')}</div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
return (
|
|
|
- <div className={`relative ${s.gradientBorder}`}>
|
|
|
+ <div className={`relative ${!isContextMissing ? s.gradientBorder : s.warningBorder}`}>
|
|
|
<div className='rounded-xl bg-white'>
|
|
|
- <div className={cn(s.boxHeader, 'flex justify-between items-center h-11 pt-2 pr-3 pb-1 pl-4 rounded-tl-xl rounded-tr-xl bg-white hover:shadow-xs')}>
|
|
|
- {isChatMode
|
|
|
- ? (
|
|
|
- <MessageTypeSelector value={type} onChange={onTypeChange} />
|
|
|
- )
|
|
|
- : (
|
|
|
- <div className='flex items-center space-x-1'>
|
|
|
+ {isContextMissing
|
|
|
+ ? contextMissing
|
|
|
+ : (
|
|
|
+ <div className={cn(s.boxHeader, 'flex justify-between items-center h-11 pt-2 pr-3 pb-1 pl-4 rounded-tl-xl rounded-tr-xl bg-white hover:shadow-xs')}>
|
|
|
+ {isChatMode
|
|
|
+ ? (
|
|
|
+ <MessageTypeSelector value={type} onChange={onTypeChange} />
|
|
|
+ )
|
|
|
+ : (
|
|
|
+ <div className='flex items-center space-x-1'>
|
|
|
|
|
|
- <div className='text-sm font-semibold uppercase text-indigo-800'>{t('appDebug.pageTitle.line1')}
|
|
|
- </div>
|
|
|
- <Tooltip
|
|
|
- htmlContent={<div className='w-[180px]'>
|
|
|
- {t('appDebug.promptTip')}
|
|
|
- </div>}
|
|
|
- selector='config-prompt-tooltip'>
|
|
|
- <HelpCircle className='w-[14px] h-[14px] text-indigo-400' />
|
|
|
- </Tooltip>
|
|
|
- </div>)}
|
|
|
- <div className={cn(s.optionWrap, 'items-center space-x-1')}>
|
|
|
- {canDelete && (
|
|
|
- <Trash03 onClick={onDelete} className='h-6 w-6 p-1 text-gray-500 cursor-pointer' />
|
|
|
- )}
|
|
|
- {!isCopied
|
|
|
- ? (
|
|
|
- <Clipboard className='h-6 w-6 p-1 text-gray-500 cursor-pointer' onClick={() => {
|
|
|
- copy(value)
|
|
|
- setIsCopied(true)
|
|
|
- }} />
|
|
|
- )
|
|
|
- : (
|
|
|
- <ClipboardCheck className='h-6 w-6 p-1 text-gray-500' />
|
|
|
- )}
|
|
|
+ <div className='text-sm font-semibold uppercase text-indigo-800'>{t('appDebug.pageTitle.line1')}
|
|
|
+ </div>
|
|
|
+ <Tooltip
|
|
|
+ htmlContent={<div className='w-[180px]'>
|
|
|
+ {t('appDebug.promptTip')}
|
|
|
+ </div>}
|
|
|
+ selector='config-prompt-tooltip'>
|
|
|
+ <HelpCircle className='w-[14px] h-[14px] text-indigo-400' />
|
|
|
+ </Tooltip>
|
|
|
+ </div>)}
|
|
|
+ <div className={cn(s.optionWrap, 'items-center space-x-1')}>
|
|
|
+ {canDelete && (
|
|
|
+ <Trash03 onClick={onDelete} className='h-6 w-6 p-1 text-gray-500 cursor-pointer' />
|
|
|
+ )}
|
|
|
+ {!isCopied
|
|
|
+ ? (
|
|
|
+ <Clipboard className='h-6 w-6 p-1 text-gray-500 cursor-pointer' onClick={() => {
|
|
|
+ copy(value)
|
|
|
+ setIsCopied(true)
|
|
|
+ }} />
|
|
|
+ )
|
|
|
+ : (
|
|
|
+ <ClipboardCheck className='h-6 w-6 p-1 text-gray-500' />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
|
|
|
- </div>
|
|
|
- </div>
|
|
|
<div className={cn(editorHeight, 'px-4 min-h-[102px] overflow-y-auto text-sm text-gray-700')}>
|
|
|
<PromptEditor
|
|
|
className={editorHeight}
|
|
|
value={value}
|
|
|
contextBlock={{
|
|
|
+ show: true,
|
|
|
selectable: !hasSetBlockStatus.context,
|
|
|
datasets: dataSets.map(item => ({
|
|
|
id: item.id,
|