mirror of
https://github.com/langgenius/dify.git
synced 2025-11-28 11:56:08 +00:00
refactor(web): remove redundant dataset card-item components and related code (#28199)
This commit is contained in:
parent
7b1fc4d2e6
commit
bc274e7300
@ -1,31 +0,0 @@
|
||||
'use client'
|
||||
import React, { useState } from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
|
||||
type IRemoveIconProps = {
|
||||
className?: string
|
||||
isHoverStatus?: boolean
|
||||
onClick: () => void
|
||||
}
|
||||
|
||||
const RemoveIcon = ({
|
||||
className,
|
||||
isHoverStatus,
|
||||
onClick,
|
||||
}: IRemoveIconProps) => {
|
||||
const [isHovered, setIsHovered] = useState(false)
|
||||
const computedIsHovered = isHoverStatus || isHovered
|
||||
return (
|
||||
<div
|
||||
className={cn(className, computedIsHovered && 'bg-[#FEE4E2]', 'flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-[#FEE4E2]')}
|
||||
onMouseEnter={() => setIsHovered(true)}
|
||||
onMouseLeave={() => setIsHovered(false)}
|
||||
onClick={onClick}
|
||||
>
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 6H14M6 8H18M16.6667 8L16.1991 15.0129C16.129 16.065 16.0939 16.5911 15.8667 16.99C15.6666 17.3412 15.3648 17.6235 15.0011 17.7998C14.588 18 14.0607 18 13.0062 18H10.9938C9.93927 18 9.41202 18 8.99889 17.7998C8.63517 17.6235 8.33339 17.3412 8.13332 16.99C7.90607 16.5911 7.871 16.065 7.80086 15.0129L7.33333 8M10.6667 11V14.3333M13.3333 11V14.3333" stroke={computedIsHovered ? '#D92D20' : '#667085'} strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
||||
</svg>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default React.memo(RemoveIcon)
|
||||
@ -1,58 +1,112 @@
|
||||
'use client'
|
||||
import type { FC } from 'react'
|
||||
import React from 'react'
|
||||
import React, { useState } from 'react'
|
||||
import {
|
||||
RiDeleteBinLine,
|
||||
RiEditLine,
|
||||
} from '@remixicon/react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import TypeIcon from '../type-icon'
|
||||
import RemoveIcon from '../../base/icons/remove-icon'
|
||||
import s from './style.module.css'
|
||||
import cn from '@/utils/classnames'
|
||||
import SettingsModal from '../settings-modal'
|
||||
import type { DataSet } from '@/models/datasets'
|
||||
import { formatNumber } from '@/utils/format'
|
||||
import Tooltip from '@/app/components/base/tooltip'
|
||||
import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
|
||||
import Drawer from '@/app/components/base/drawer'
|
||||
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
|
||||
import Badge from '@/app/components/base/badge'
|
||||
import { useKnowledge } from '@/hooks/use-knowledge'
|
||||
import cn from '@/utils/classnames'
|
||||
import AppIcon from '@/app/components/base/app-icon'
|
||||
|
||||
export type ICardItemProps = {
|
||||
type ItemProps = {
|
||||
className?: string
|
||||
config: DataSet
|
||||
onRemove: (id: string) => void
|
||||
readonly?: boolean
|
||||
onSave: (newDataset: DataSet) => void
|
||||
editable?: boolean
|
||||
}
|
||||
const CardItem: FC<ICardItemProps> = ({
|
||||
className,
|
||||
|
||||
const Item: FC<ItemProps> = ({
|
||||
config,
|
||||
onSave,
|
||||
onRemove,
|
||||
readonly,
|
||||
editable = true,
|
||||
}) => {
|
||||
const media = useBreakpoints()
|
||||
const isMobile = media === MediaType.mobile
|
||||
const [showSettingsModal, setShowSettingsModal] = useState(false)
|
||||
const { formatIndexingTechniqueAndMethod } = useKnowledge()
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
<div
|
||||
className={
|
||||
cn(className, s.card,
|
||||
'relative flex cursor-pointer items-center rounded-xl border border-gray-200 bg-white px-3 py-2.5')
|
||||
}>
|
||||
<div className='flex items-center space-x-2'>
|
||||
<div className={cn(!config.embedding_available && 'opacity-50')}>
|
||||
<TypeIcon type="upload_file" />
|
||||
</div>
|
||||
<div>
|
||||
<div className='mr-1 flex w-[160px] items-center'>
|
||||
<div className={cn('overflow-hidden text-ellipsis whitespace-nowrap text-[13px] font-medium leading-[18px] text-gray-800', !config.embedding_available && 'opacity-50')}>{config.name}</div>
|
||||
{!config.embedding_available && (
|
||||
<Tooltip
|
||||
popupContent={t('dataset.unavailableTip')}
|
||||
>
|
||||
<span className='inline-flex shrink-0 whitespace-nowrap rounded-md border border-gray-200 px-1 text-xs font-normal leading-[18px] text-gray-500'>{t('dataset.unavailable')}</span>
|
||||
</Tooltip>
|
||||
)}
|
||||
</div>
|
||||
<div className={cn('flex max-w-[150px] text-xs text-gray-500', !config.embedding_available && 'opacity-50')}>
|
||||
{formatNumber(config.word_count)} {t('appDebug.feature.dataSet.words')} · {formatNumber(config.document_count)} {t('appDebug.feature.dataSet.textBlocks')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
const handleSave = (newDataset: DataSet) => {
|
||||
onSave(newDataset)
|
||||
setShowSettingsModal(false)
|
||||
}
|
||||
|
||||
{!readonly && <RemoveIcon className={`${s.deleteBtn} absolute right-1 top-1/2 translate-y-[-50%]`} onClick={() => onRemove(config.id)} />}
|
||||
</div>
|
||||
const [isDeleting, setIsDeleting] = useState(false)
|
||||
|
||||
const iconInfo = config.icon_info || {
|
||||
icon: '📙',
|
||||
icon_type: 'emoji',
|
||||
icon_background: '#FFF4ED',
|
||||
icon_url: '',
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={cn(
|
||||
'group relative mb-1 flex h-10 w-full cursor-pointer items-center justify-between rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg px-2 last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover',
|
||||
isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover',
|
||||
)}>
|
||||
<div className='flex w-0 grow items-center space-x-1.5'>
|
||||
<AppIcon
|
||||
size='tiny'
|
||||
iconType={iconInfo.icon_type}
|
||||
icon={iconInfo.icon}
|
||||
background={iconInfo.icon_type === 'image' ? undefined : iconInfo.icon_background}
|
||||
imageUrl={iconInfo.icon_type === 'image' ? iconInfo.icon_url : undefined}
|
||||
/>
|
||||
<div className='system-sm-medium w-0 grow truncate text-text-secondary' title={config.name}>{config.name}</div>
|
||||
</div>
|
||||
<div className='ml-2 hidden shrink-0 items-center space-x-1 group-hover:flex'>
|
||||
{
|
||||
editable && <ActionButton
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
setShowSettingsModal(true)
|
||||
}}
|
||||
>
|
||||
<RiEditLine className='h-4 w-4 shrink-0 text-text-tertiary' />
|
||||
</ActionButton>
|
||||
}
|
||||
<ActionButton
|
||||
onClick={() => onRemove(config.id)}
|
||||
state={isDeleting ? ActionButtonState.Destructive : ActionButtonState.Default}
|
||||
onMouseEnter={() => setIsDeleting(true)}
|
||||
onMouseLeave={() => setIsDeleting(false)}
|
||||
>
|
||||
<RiDeleteBinLine className={cn('h-4 w-4 shrink-0 text-text-tertiary', isDeleting && 'text-text-destructive')} />
|
||||
</ActionButton>
|
||||
</div>
|
||||
{
|
||||
config.indexing_technique && <Badge
|
||||
className='shrink-0 group-hover:hidden'
|
||||
text={formatIndexingTechniqueAndMethod(config.indexing_technique, config.retrieval_model_dict?.search_method)}
|
||||
/>
|
||||
}
|
||||
{
|
||||
config.provider === 'external' && <Badge
|
||||
className='shrink-0 group-hover:hidden'
|
||||
text={t('dataset.externalTag') as string}
|
||||
/>
|
||||
}
|
||||
<Drawer isOpen={showSettingsModal} onClose={() => setShowSettingsModal(false)} footer={null} mask={isMobile} panelClassName='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'>
|
||||
<SettingsModal
|
||||
currentDataset={config}
|
||||
onCancel={() => setShowSettingsModal(false)}
|
||||
onSave={handleSave}
|
||||
/>
|
||||
</Drawer>
|
||||
</div >
|
||||
)
|
||||
}
|
||||
export default React.memo(CardItem)
|
||||
|
||||
export default Item
|
||||
|
||||
@ -1,112 +0,0 @@
|
||||
'use client'
|
||||
import type { FC } from 'react'
|
||||
import React, { useState } from 'react'
|
||||
import {
|
||||
RiDeleteBinLine,
|
||||
RiEditLine,
|
||||
} from '@remixicon/react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import SettingsModal from '../settings-modal'
|
||||
import type { DataSet } from '@/models/datasets'
|
||||
import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
|
||||
import Drawer from '@/app/components/base/drawer'
|
||||
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
|
||||
import Badge from '@/app/components/base/badge'
|
||||
import { useKnowledge } from '@/hooks/use-knowledge'
|
||||
import cn from '@/utils/classnames'
|
||||
import AppIcon from '@/app/components/base/app-icon'
|
||||
|
||||
type ItemProps = {
|
||||
className?: string
|
||||
config: DataSet
|
||||
onRemove: (id: string) => void
|
||||
readonly?: boolean
|
||||
onSave: (newDataset: DataSet) => void
|
||||
editable?: boolean
|
||||
}
|
||||
|
||||
const Item: FC<ItemProps> = ({
|
||||
config,
|
||||
onSave,
|
||||
onRemove,
|
||||
editable = true,
|
||||
}) => {
|
||||
const media = useBreakpoints()
|
||||
const isMobile = media === MediaType.mobile
|
||||
const [showSettingsModal, setShowSettingsModal] = useState(false)
|
||||
const { formatIndexingTechniqueAndMethod } = useKnowledge()
|
||||
const { t } = useTranslation()
|
||||
|
||||
const handleSave = (newDataset: DataSet) => {
|
||||
onSave(newDataset)
|
||||
setShowSettingsModal(false)
|
||||
}
|
||||
|
||||
const [isDeleting, setIsDeleting] = useState(false)
|
||||
|
||||
const iconInfo = config.icon_info || {
|
||||
icon: '📙',
|
||||
icon_type: 'emoji',
|
||||
icon_background: '#FFF4ED',
|
||||
icon_url: '',
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={cn(
|
||||
'group relative mb-1 flex h-10 w-full cursor-pointer items-center justify-between rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg px-2 last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover',
|
||||
isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover',
|
||||
)}>
|
||||
<div className='flex w-0 grow items-center space-x-1.5'>
|
||||
<AppIcon
|
||||
size='tiny'
|
||||
iconType={iconInfo.icon_type}
|
||||
icon={iconInfo.icon}
|
||||
background={iconInfo.icon_type === 'image' ? undefined : iconInfo.icon_background}
|
||||
imageUrl={iconInfo.icon_type === 'image' ? iconInfo.icon_url : undefined}
|
||||
/>
|
||||
<div className='system-sm-medium w-0 grow truncate text-text-secondary' title={config.name}>{config.name}</div>
|
||||
</div>
|
||||
<div className='ml-2 hidden shrink-0 items-center space-x-1 group-hover:flex'>
|
||||
{
|
||||
editable && <ActionButton
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
setShowSettingsModal(true)
|
||||
}}
|
||||
>
|
||||
<RiEditLine className='h-4 w-4 shrink-0 text-text-tertiary' />
|
||||
</ActionButton>
|
||||
}
|
||||
<ActionButton
|
||||
onClick={() => onRemove(config.id)}
|
||||
state={isDeleting ? ActionButtonState.Destructive : ActionButtonState.Default}
|
||||
onMouseEnter={() => setIsDeleting(true)}
|
||||
onMouseLeave={() => setIsDeleting(false)}
|
||||
>
|
||||
<RiDeleteBinLine className={cn('h-4 w-4 shrink-0 text-text-tertiary', isDeleting && 'text-text-destructive')} />
|
||||
</ActionButton>
|
||||
</div>
|
||||
{
|
||||
config.indexing_technique && <Badge
|
||||
className='shrink-0 group-hover:hidden'
|
||||
text={formatIndexingTechniqueAndMethod(config.indexing_technique, config.retrieval_model_dict?.search_method)}
|
||||
/>
|
||||
}
|
||||
{
|
||||
config.provider === 'external' && <Badge
|
||||
className='shrink-0 group-hover:hidden'
|
||||
text={t('dataset.externalTag') as string}
|
||||
/>
|
||||
}
|
||||
<Drawer isOpen={showSettingsModal} onClose={() => setShowSettingsModal(false)} footer={null} mask={isMobile} panelClassName='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'>
|
||||
<SettingsModal
|
||||
currentDataset={config}
|
||||
onCancel={() => setShowSettingsModal(false)}
|
||||
onSave={handleSave}
|
||||
/>
|
||||
</Drawer>
|
||||
</div >
|
||||
)
|
||||
}
|
||||
|
||||
export default Item
|
||||
@ -1,22 +0,0 @@
|
||||
.card {
|
||||
box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 40, 0.06);
|
||||
}
|
||||
|
||||
.btnWrap {
|
||||
padding-left: 64px;
|
||||
visibility: hidden;
|
||||
background: linear-gradient(270deg, #FFF 49.99%, rgba(255, 255, 255, 0.00) 98.1%);
|
||||
}
|
||||
|
||||
.card:hover .btnWrap {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.settingBtn:hover {
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
@ -9,7 +9,7 @@ import { v4 as uuid4 } from 'uuid'
|
||||
import { useFormattingChangedDispatcher } from '../debug/hooks'
|
||||
import FeaturePanel from '../base/feature-panel'
|
||||
import OperationBtn from '../base/operation-btn'
|
||||
import CardItem from './card-item/item'
|
||||
import CardItem from './card-item'
|
||||
import ParamsConfig from './params-config'
|
||||
import ContextVar from './context-var'
|
||||
import ConfigContext from '@/context/debug-configuration'
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
'use client'
|
||||
import type { FC } from 'react'
|
||||
import React from 'react'
|
||||
|
||||
export type ITypeIconProps = {
|
||||
type: 'upload_file'
|
||||
size?: 'md' | 'lg'
|
||||
}
|
||||
|
||||
// data_source_type: current only support upload_file
|
||||
const Icon = ({ type, size = 'lg' }: ITypeIconProps) => {
|
||||
const len = size === 'lg' ? 32 : 24
|
||||
const iconMap = {
|
||||
upload_file: (
|
||||
<svg width={len} height={len} viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0.25" y="0.25" width="31.5" height="31.5" rx="7.75" fill="#F5F8FF" />
|
||||
<path fillRule="evenodd" clipRule="evenodd" d="M8.66669 12.1078C8.66668 11.7564 8.66667 11.4532 8.68707 11.2035C8.7086 10.9399 8.75615 10.6778 8.88468 10.4255C9.07642 10.0492 9.38238 9.74322 9.75871 9.55147C10.011 9.42294 10.2731 9.3754 10.5367 9.35387C10.7864 9.33346 11.0896 9.33347 11.441 9.33349L14.0978 9.33341C14.4935 9.33289 14.8415 9.33243 15.1615 9.4428C15.4417 9.53946 15.697 9.69722 15.9087 9.90465C16.1506 10.1415 16.3058 10.4529 16.4823 10.8071L17.0786 12H19.4942C20.0309 12 20.4738 12 20.8346 12.0295C21.2093 12.0601 21.5538 12.1258 21.8773 12.2907C22.3791 12.5463 22.787 12.9543 23.0427 13.456C23.2076 13.7796 23.2733 14.1241 23.3039 14.4988C23.3334 14.8596 23.3334 15.3025 23.3334 15.8391V18.8276C23.3334 19.3642 23.3334 19.8071 23.3039 20.1679C23.2733 20.5426 23.2076 20.8871 23.0427 21.2107C22.787 21.7124 22.3791 22.1204 21.8773 22.376C21.5538 22.5409 21.2093 22.6066 20.8346 22.6372C20.4738 22.6667 20.0309 22.6667 19.4942 22.6667H12.5058C11.9692 22.6667 11.5263 22.6667 11.1655 22.6372C10.7907 22.6066 10.4463 22.5409 10.1227 22.376C9.62095 22.1204 9.213 21.7124 8.95734 21.2107C8.79248 20.8871 8.72677 20.5426 8.69615 20.1679C8.66667 19.8071 8.66668 19.3642 8.66669 18.8276V12.1078ZM14.0149 10.6668C14.5418 10.6668 14.6463 10.6755 14.7267 10.7033C14.8201 10.7355 14.9052 10.7881 14.9758 10.8572C15.0366 10.9167 15.0911 11.0063 15.3267 11.4776L15.5879 12L10.0001 12C10.0004 11.69 10.0024 11.4781 10.016 11.312C10.0308 11.1309 10.0559 11.0638 10.0727 11.0308C10.1366 10.9054 10.2386 10.8034 10.364 10.7395C10.397 10.7227 10.4641 10.6976 10.6452 10.6828C10.8341 10.6673 11.0823 10.6668 11.4667 10.6668H14.0149Z" fill="#444CE7" />
|
||||
<rect x="0.25" y="0.25" width="31.5" height="31.5" rx="7.75" stroke="#E0EAFF" strokeWidth="0.5" />
|
||||
</svg>
|
||||
),
|
||||
}
|
||||
return iconMap[type]
|
||||
}
|
||||
|
||||
const TypeIcon: FC<ITypeIconProps> = ({
|
||||
type,
|
||||
size = 'lg',
|
||||
}) => {
|
||||
return (
|
||||
<Icon type={type} size={size} ></Icon>
|
||||
)
|
||||
}
|
||||
export default React.memo(TypeIcon)
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Kontext',
|
||||
noData: 'Sie können Wissen als Kontext importieren',
|
||||
words: 'Wörter',
|
||||
textBlocks: 'Textblöcke',
|
||||
selectTitle: 'Wählen Sie Referenzwissen',
|
||||
selected: 'Wissen ausgewählt',
|
||||
noDataSet: 'Kein Wissen gefunden',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'kann erstellt werden',
|
||||
intro6: ' als ein eigenständiges ChatGPT-Index-Plugin zum Veröffentlichen',
|
||||
unavailable: 'Nicht verfügbar',
|
||||
unavailableTip: 'Einbettungsmodell ist nicht verfügbar, das Standard-Einbettungsmodell muss konfiguriert werden',
|
||||
datasets: 'WISSEN',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Knowledge',
|
||||
noData: 'You can import Knowledge as context',
|
||||
words: 'Words',
|
||||
textBlocks: 'Text Blocks',
|
||||
selectTitle: 'Select reference Knowledge',
|
||||
selected: 'Knowledge selected',
|
||||
noDataSet: 'No Knowledge found',
|
||||
|
||||
@ -93,7 +93,6 @@ const translation = {
|
||||
intro5: 'can be published',
|
||||
intro6: ' as an independent service.',
|
||||
unavailable: 'Unavailable',
|
||||
unavailableTip: 'Embedding model is not available, the default embedding model needs to be configured',
|
||||
datasets: 'KNOWLEDGE',
|
||||
datasetsApi: 'API ACCESS',
|
||||
externalKnowledgeForm: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Contexto',
|
||||
noData: 'Puedes importar Conocimiento como contexto',
|
||||
words: 'Palabras',
|
||||
textBlocks: 'Bloques de Texto',
|
||||
selectTitle: 'Seleccionar Conocimiento de referencia',
|
||||
selected: 'Conocimiento seleccionado',
|
||||
noDataSet: 'No se encontró Conocimiento',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'se puede crear',
|
||||
intro6: ' como un complemento independiente de ChatGPT para publicar',
|
||||
unavailable: 'No disponible',
|
||||
unavailableTip: 'El modelo de incrustación no está disponible, es necesario configurar el modelo de incrustación predeterminado',
|
||||
datasets: 'CONOCIMIENTO',
|
||||
datasetsApi: 'ACCESO A LA API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'زمینه',
|
||||
noData: 'شما میتوانید دانش را به عنوان زمینه وارد کنید',
|
||||
words: 'کلمات',
|
||||
textBlocks: 'بلوکهای متن',
|
||||
selectTitle: 'انتخاب دانش مرجع',
|
||||
selected: 'دانش انتخاب شده',
|
||||
noDataSet: 'هیچ دانشی یافت نشد',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'به عنوان یک افزونه مستقل ChatGPT برای انتشار',
|
||||
intro6: 'ایجاد شود',
|
||||
unavailable: 'در دسترس نیست',
|
||||
unavailableTip: 'مدل جاسازی در دسترس نیست، نیاز است مدل جاسازی پیشفرض پیکربندی شود',
|
||||
datasets: 'دانش',
|
||||
datasetsApi: 'دسترسی API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Contexte',
|
||||
noData: 'Vous pouvez importer des Connaissances comme contexte',
|
||||
words: 'Mots',
|
||||
textBlocks: 'Blocs de texte',
|
||||
selectTitle: 'Sélectionnez la connaissance de référence',
|
||||
selected: 'Connaissance sélectionnée',
|
||||
noDataSet: 'Aucune connaissance trouvée',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'peut être créé',
|
||||
intro6: 'comme un plug-in d\'index ChatGPT autonome à publier',
|
||||
unavailable: 'Indisponible',
|
||||
unavailableTip: 'Le modèle d\'embedding n\'est pas disponible, le modèle d\'embedding par défaut doit être configuré',
|
||||
datasets: 'CONNAISSANCE',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
@ -117,8 +117,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'प्रसंग',
|
||||
noData: 'आप संदर्भ के रूप में ज्ञान आयात कर सकते हैं',
|
||||
words: 'शब्द',
|
||||
textBlocks: 'पाठ खंड',
|
||||
selectTitle: 'संदर्भ ज्ञान का चयन करें',
|
||||
selected: 'ज्ञान चुना गया',
|
||||
noDataSet: 'कोई ज्ञान नहीं मिला',
|
||||
|
||||
@ -21,8 +21,6 @@ const translation = {
|
||||
intro6:
|
||||
' एक स्वतंत्र ChatGPT इंडेक्स प्लग-इन के रूप में प्रकाशित करने के लिए',
|
||||
unavailable: 'उपलब्ध नहीं',
|
||||
unavailableTip:
|
||||
'एम्बेडिंग मॉडल उपलब्ध नहीं है, डिफ़ॉल्ट एम्बेडिंग मॉडल को कॉन्फ़िगर किया जाना चाहिए',
|
||||
datasets: 'ज्ञान',
|
||||
datasetsApi: 'API पहुँच',
|
||||
retrieval: {
|
||||
|
||||
@ -115,9 +115,7 @@ const translation = {
|
||||
noVarTip: 'silakan buat variabel di bawah bagian Variabel',
|
||||
},
|
||||
notSupportSelectMulti: 'Saat ini hanya mendukung satu Pengetahuan',
|
||||
textBlocks: 'Blok Teks',
|
||||
selectTitle: 'Pilih referensi Pengetahuan',
|
||||
words: 'Kata',
|
||||
toCreate: 'Pergi ke membuat',
|
||||
noDataSet: 'Tidak ada Pengetahuan yang ditemukan',
|
||||
noData: 'Anda dapat mengimpor Pengetahuan sebagai konteks',
|
||||
|
||||
@ -210,7 +210,6 @@ const translation = {
|
||||
allExternalTip: 'Saat hanya menggunakan pengetahuan eksternal, pengguna dapat memilih apakah akan mengaktifkan model Rerank. Jika tidak diaktifkan, potongan yang diambil akan diurutkan berdasarkan skor. Ketika strategi pengambilan dari basis pengetahuan yang berbeda tidak konsisten, itu akan menjadi tidak akurat.',
|
||||
datasetUsedByApp: 'Pengetahuan tersebut digunakan oleh beberapa aplikasi. Aplikasi tidak akan lagi dapat menggunakan Pengetahuan ini, dan semua konfigurasi prompt serta log akan dihapus secara permanen.',
|
||||
mixtureInternalAndExternalTip: 'Model Rerank diperlukan untuk campuran pengetahuan internal dan eksternal.',
|
||||
unavailableTip: 'Model penyematan tidak tersedia, model penyematan default perlu dikonfigurasi',
|
||||
nTo1RetrievalLegacy: 'Pengambilan N-to-1 akan secara resmi tidak digunakan lagi mulai September. Disarankan untuk menggunakan pengambilan Multi-jalur terbaru untuk mendapatkan hasil yang lebih baik.',
|
||||
inconsistentEmbeddingModelTip: 'Model Rerank diperlukan jika model Penyematan dari basis pengetahuan yang dipilih tidak konsisten.',
|
||||
allKnowledgeDescription: 'Pilih untuk menampilkan semua pengetahuan di ruang kerja ini. Hanya Pemilik Ruang Kerja yang dapat mengelola semua pengetahuan.',
|
||||
|
||||
@ -116,8 +116,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Contesto',
|
||||
noData: 'Puoi importare Conoscenza come contesto',
|
||||
words: 'Parole',
|
||||
textBlocks: 'Blocchi di testo',
|
||||
selectTitle: 'Seleziona Conoscenza di riferimento',
|
||||
selected: 'Conoscenza selezionata',
|
||||
noDataSet: 'Nessuna Conoscenza trovata',
|
||||
|
||||
@ -21,8 +21,6 @@ const translation = {
|
||||
intro5: 'può essere creata',
|
||||
intro6: ' come un plug-in di indicizzazione ChatGPT autonomo da pubblicare',
|
||||
unavailable: 'Non disponibile',
|
||||
unavailableTip:
|
||||
'Il modello di embedding non è disponibile, è necessario configurare il modello di embedding predefinito',
|
||||
datasets: 'CONOSCENZA',
|
||||
datasetsApi: 'ACCESSO API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'コンテキスト',
|
||||
noData: 'コンテキストとして知識をインポートできます',
|
||||
words: '単語',
|
||||
textBlocks: 'テキストブロック',
|
||||
selectTitle: '参照する知識を選択',
|
||||
selected: '選択された知識',
|
||||
noDataSet: '知識が見つかりません',
|
||||
|
||||
@ -90,7 +90,6 @@ const translation = {
|
||||
intro5: '公開することができます',
|
||||
intro6: '独立したサービスとして',
|
||||
unavailable: '利用不可',
|
||||
unavailableTip: '埋め込みモデルが利用できません。デフォルトの埋め込みモデルを設定する必要があります',
|
||||
datasets: 'ナレッジベース',
|
||||
datasetsApi: 'API ACCESS',
|
||||
externalKnowledgeForm: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: '컨텍스트',
|
||||
noData: '지식을 컨텍스트로 가져올 수 있습니다',
|
||||
words: '단어',
|
||||
textBlocks: '텍스트 블록',
|
||||
selectTitle: '참조할 지식 선택',
|
||||
selected: '선택한 지식',
|
||||
noDataSet: '지식이 없습니다',
|
||||
|
||||
@ -18,7 +18,6 @@ const translation = {
|
||||
intro5: '이처럼',
|
||||
intro6: ' 독립적인 ChatGPT 인덱스 플러그인으로 공개할 수 있습니다',
|
||||
unavailable: '사용 불가',
|
||||
unavailableTip: '임베딩 모델을 사용할 수 없습니다. 기본 임베딩 모델을 설정해야 합니다.',
|
||||
datasets: '지식',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
@ -114,8 +114,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Kontekst',
|
||||
noData: 'Możesz importować wiedzę jako kontekst',
|
||||
words: 'Słowa',
|
||||
textBlocks: 'Bloki tekstu',
|
||||
selectTitle: 'Wybierz odniesienie do wiedzy',
|
||||
selected: 'Wiedza wybrana',
|
||||
noDataSet: 'Nie znaleziono wiedzy',
|
||||
|
||||
@ -20,8 +20,6 @@ const translation = {
|
||||
intro5: 'może być utworzona',
|
||||
intro6: ' jako samodzielny wtyczka indeksująca ChatGPT do publikacji',
|
||||
unavailable: 'Niedostępny',
|
||||
unavailableTip:
|
||||
'Model osadzający jest niedostępny, domyślny model osadzający musi być skonfigurowany',
|
||||
datasets: 'WIEDZA',
|
||||
datasetsApi: 'DOSTĘP DO API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Contexto',
|
||||
noData: 'Você pode importar Conhecimento como contexto',
|
||||
words: 'Palavras',
|
||||
textBlocks: 'Blocos de Texto',
|
||||
selectTitle: 'Selecionar Conhecimento de referência',
|
||||
selected: 'Conhecimento selecionado',
|
||||
noDataSet: 'Nenhum Conhecimento encontrado',
|
||||
|
||||
@ -18,7 +18,6 @@ const translation = {
|
||||
intro4: 'ou pode ser criado',
|
||||
intro5: ' como um plug-in de índice ChatGPT independente para publicação',
|
||||
unavailable: 'Indisponível',
|
||||
unavailableTip: 'O modelo de incorporação não está disponível, o modelo de incorporação padrão precisa ser configurado',
|
||||
datasets: 'CONHECIMENTO',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Context',
|
||||
noData: 'Puteți importa Cunoștințe ca context',
|
||||
words: 'Cuvinte',
|
||||
textBlocks: 'Blocuri de text',
|
||||
selectTitle: 'Selectați Cunoștințe de referință',
|
||||
selected: 'Cunoștințe selectate',
|
||||
noDataSet: 'Nu s-au găsit Cunoștințe',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'pot fi create',
|
||||
intro6: ' ca un plug-in index ChatGPT standalone pentru publicare',
|
||||
unavailable: 'Indisponibil',
|
||||
unavailableTip: 'Modelul de încorporare nu este disponibil, modelul de încorporare implicit trebuie configurat',
|
||||
datasets: 'CUNOȘTINȚE',
|
||||
datasetsApi: 'ACCES API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Контекст',
|
||||
noData: 'Вы можете импортировать знания в качестве контекста',
|
||||
words: 'Слова',
|
||||
textBlocks: 'Текстовые блоки',
|
||||
selectTitle: 'Выберите справочные знания',
|
||||
selected: 'Знания выбраны',
|
||||
noDataSet: 'Знания не найдены',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'можно создать',
|
||||
intro6: ' как отдельный плагин индекса ChatGPT для публикации',
|
||||
unavailable: 'Недоступно',
|
||||
unavailableTip: 'Модель встраивания недоступна, необходимо настроить модель встраивания по умолчанию',
|
||||
datasets: 'БАЗЫ ЗНАНИЙ',
|
||||
datasetsApi: 'ДОСТУП К API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Kontekst',
|
||||
noData: 'Uvozi znanje kot kontekst',
|
||||
words: 'Besede',
|
||||
textBlocks: 'Bloki besedila',
|
||||
selectTitle: 'Izberi referenčno znanje',
|
||||
selected: 'Izbrano znanje',
|
||||
noDataSet: 'Znanje ni bilo najdeno',
|
||||
|
||||
@ -75,7 +75,6 @@ const translation = {
|
||||
intro5: 'se lahko ustvari',
|
||||
intro6: ' kot samostojni vtičnik ChatGPT za objavo',
|
||||
unavailable: 'Ni na voljo',
|
||||
unavailableTip: 'Vdelani model ni na voljo, potrebno je konfigurirati privzeti vdelani model',
|
||||
datasets: 'ZNANJE',
|
||||
datasetsApi: 'API DOSTOP',
|
||||
externalKnowledgeForm: {
|
||||
|
||||
@ -104,8 +104,6 @@ const translation = {
|
||||
selected: 'เลือกความรู้',
|
||||
title: 'ความรู้',
|
||||
toCreate: 'ไปที่สร้าง',
|
||||
words: 'นิรุกติ',
|
||||
textBlocks: 'บล็อกข้อความ',
|
||||
noData: 'คุณสามารถนําเข้าความรู้เป็นบริบทได้',
|
||||
selectTitle: 'เลือกข้อมูลอ้างอิง ความรู้',
|
||||
},
|
||||
|
||||
@ -74,7 +74,6 @@ const translation = {
|
||||
intro5: 'สามารถสร้างได้',
|
||||
intro6: 'เป็นปลั๊กอินดัชนี ChatGPT แบบสแตนด์อโลนเพื่อเผยแพร่',
|
||||
unavailable: 'ไม่',
|
||||
unavailableTip: 'โมเดลการฝังไม่พร้อมใช้งาน จําเป็นต้องกําหนดค่าโมเดลการฝังเริ่มต้น',
|
||||
datasets: 'ความรู้',
|
||||
datasetsApi: 'การเข้าถึง API',
|
||||
externalKnowledgeForm: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Bağlam',
|
||||
noData: 'Bağlam olarak Bilgi\'yi içe aktarabilirsiniz',
|
||||
words: 'Kelimeler',
|
||||
textBlocks: 'Metin Blokları',
|
||||
selectTitle: 'Referans Bilgi\'yi seçin',
|
||||
selected: 'Bilgi seçildi',
|
||||
noDataSet: 'Bilgi bulunamadı',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'bağımsız bir ChatGPT dizin eklentisi olarak oluşturulabilir',
|
||||
intro6: ' ve yayınlanabilir.',
|
||||
unavailable: 'Kullanılamıyor',
|
||||
unavailableTip: 'Yerleştirme modeli mevcut değil, varsayılan yerleştirme modelinin yapılandırılması gerekiyor',
|
||||
datasets: 'BİLGİ',
|
||||
datasetsApi: 'API ERİŞİMİ',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Контекст', // Context
|
||||
noData: 'Ви можете імпортувати знання як контекст', // You can import Knowledge as context
|
||||
words: 'Слова', // Words
|
||||
textBlocks: 'Текстові блоки', // Text Blocks
|
||||
selectTitle: 'Виберіть довідкові знання', // Select reference Knowledge
|
||||
selected: 'Знання обрані', // Knowledge selected
|
||||
noDataSet: 'Знання не знайдені', // No Knowledge found
|
||||
|
||||
@ -20,7 +20,6 @@ const translation = {
|
||||
intro5: 'можна створити',
|
||||
intro6: ' як автономний плагін індексу ChatGPT для публікації',
|
||||
unavailable: 'Недоступно',
|
||||
unavailableTip: 'Модель вбудовування недоступна, необхідно налаштувати модель вбудовування за замовчуванням',
|
||||
datasets: 'ЗНАННЯ',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: 'Ngữ cảnh',
|
||||
noData: 'Bạn có thể nhập dữ liệu làm ngữ cảnh',
|
||||
words: 'Từ',
|
||||
textBlocks: 'Khối văn bản',
|
||||
selectTitle: 'Chọn kiến thức tham khảo',
|
||||
selected: 'Kiến thức đã chọn',
|
||||
noDataSet: 'Không tìm thấy kiến thức',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: 'có thể được tạo',
|
||||
intro6: ' dưới dạng một plugin chỉ mục ChatGPT độc lập để xuất bản',
|
||||
unavailable: 'Không khả dụng',
|
||||
unavailableTip: 'Mô hình nhúng không khả dụng, cần cấu hình mô hình nhúng mặc định',
|
||||
datasets: 'BỘ KIẾN THỨC',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: '知识库',
|
||||
noData: '您可以导入知识库作为上下文',
|
||||
words: '词',
|
||||
textBlocks: '文本块',
|
||||
selectTitle: '选择引用知识库',
|
||||
selected: '个知识库被选中',
|
||||
noDataSet: '未找到知识库',
|
||||
|
||||
@ -93,7 +93,6 @@ const translation = {
|
||||
intro5: '发布',
|
||||
intro6: '为独立的服务',
|
||||
unavailable: '不可用',
|
||||
unavailableTip: '由于 embedding 模型不可用,需要配置默认 embedding 模型',
|
||||
datasets: '知识库',
|
||||
datasetsApi: 'API',
|
||||
externalKnowledgeForm: {
|
||||
|
||||
@ -105,8 +105,6 @@ const translation = {
|
||||
dataSet: {
|
||||
title: '上下文',
|
||||
noData: '您可以匯入知識庫作為上下文',
|
||||
words: '詞',
|
||||
textBlocks: '文字塊',
|
||||
selectTitle: '選擇引用知識庫',
|
||||
selected: '個知識庫被選中',
|
||||
noDataSet: '未找到知識庫',
|
||||
|
||||
@ -19,7 +19,6 @@ const translation = {
|
||||
intro5: '建立',
|
||||
intro6: '為獨立的 ChatGPT 外掛釋出使用',
|
||||
unavailable: '不可用',
|
||||
unavailableTip: '由於 embedding 模型不可用,需要配置預設 embedding 模型',
|
||||
datasets: '知識庫',
|
||||
datasetsApi: 'API',
|
||||
retrieval: {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user