mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-28 19:58:11 +08:00
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { LlmModelType } from '@/constants/knowledge';
|
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
import { forwardRef, memo, useMemo, useState } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { LlmSettingFieldItems } from '../llm-setting-items/next';
|
|
import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';
|
|
import { Select, SelectTrigger, SelectValue } from '../ui/select';
|
|
import LLMLabel from './llm-label';
|
|
|
|
export interface NextInnerLLMSelectProps {
|
|
id?: string;
|
|
value?: string;
|
|
onInitialValue?: (value: string, option: any) => void;
|
|
onChange?: (value: string) => void;
|
|
disabled?: boolean;
|
|
filter?: string;
|
|
showSpeech2TextModel?: boolean;
|
|
triggerTestId?: string;
|
|
optionTestIdPrefix?: string;
|
|
ownerTenantId?: string;
|
|
}
|
|
|
|
const NextInnerLLMSelect = forwardRef<
|
|
React.ElementRef<typeof SelectPrimitive.Trigger>,
|
|
NextInnerLLMSelectProps
|
|
>(
|
|
(
|
|
{
|
|
value,
|
|
disabled,
|
|
filter,
|
|
showSpeech2TextModel = false,
|
|
triggerTestId,
|
|
optionTestIdPrefix,
|
|
ownerTenantId,
|
|
},
|
|
ref,
|
|
) => {
|
|
const { t } = useTranslation();
|
|
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
|
|
const ttsModel = useMemo(() => {
|
|
return showSpeech2TextModel ? [LlmModelType.Speech2text] : [];
|
|
}, [showSpeech2TextModel]);
|
|
|
|
const modelTypes = useMemo(() => {
|
|
if (filter === LlmModelType.Chat) {
|
|
return [LlmModelType.Chat];
|
|
} else if (filter === LlmModelType.Image2text) {
|
|
return [LlmModelType.Image2text, ...ttsModel];
|
|
} else {
|
|
return [LlmModelType.Chat, LlmModelType.Image2text, ...ttsModel];
|
|
}
|
|
}, [filter, ttsModel]);
|
|
|
|
return (
|
|
<Select disabled={disabled} value={value}>
|
|
<Popover open={isPopoverOpen} onOpenChange={setIsPopoverOpen}>
|
|
<PopoverTrigger asChild>
|
|
<SelectTrigger
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
setIsPopoverOpen(true);
|
|
}}
|
|
ref={ref}
|
|
data-testid={triggerTestId}
|
|
>
|
|
<SelectValue placeholder={t('common.pleaseSelect')}>
|
|
<LLMLabel value={value} ownerTenantId={ownerTenantId} />
|
|
</SelectValue>
|
|
</SelectTrigger>
|
|
</PopoverTrigger>
|
|
<PopoverContent side={'left'}>
|
|
<LlmSettingFieldItems
|
|
modelTypes={modelTypes}
|
|
llmOptionTestIdPrefix={optionTestIdPrefix}
|
|
ownerTenantId={ownerTenantId}
|
|
></LlmSettingFieldItems>
|
|
</PopoverContent>
|
|
</Popover>
|
|
</Select>
|
|
);
|
|
},
|
|
);
|
|
|
|
NextInnerLLMSelect.displayName = 'LLMSelect';
|
|
|
|
export const NextLLMSelect = memo(NextInnerLLMSelect);
|