+
{selectedValues?.slice(0, maxCount)?.map((value) => {
const option = flatOptions.find((o) => o.value === value);
@@ -348,9 +348,9 @@ export const MultiSelect = React.forwardRef<
)}
-
+
{
event.stopPropagation();
handleClear();
@@ -358,17 +358,17 @@ export const MultiSelect = React.forwardRef<
/>
-
+
) : (
-
+
{placeholder}
-
+
)}
@@ -379,14 +379,16 @@ export const MultiSelect = React.forwardRef<
onEscapeKeyDown={() => setIsPopoverOpen(false)}
>
-
+ {options && options.length > 0 && (
+
+ )}
No results found.
- {showSelectAll && (
+ {showSelectAll && options && options.length > 0 && (
>
)}
- setIsPopoverOpen(false)}
- className="flex-1 justify-center cursor-pointer max-w-full"
- >
- {t('common.close')}
-
+ {options && options.length > 0 && (
+ setIsPopoverOpen(false)}
+ className="flex-1 justify-center cursor-pointer max-w-full"
+ >
+ {t('common.close')}
+
+ )}
diff --git a/web/src/pages/next-search/search-setting-aisummery-config.tsx b/web/src/pages/next-search/search-setting-aisummery-config.tsx
deleted file mode 100644
index 8764c3014..000000000
--- a/web/src/pages/next-search/search-setting-aisummery-config.tsx
+++ /dev/null
@@ -1,236 +0,0 @@
-import { SliderInputSwitchFormField } from '@/components/llm-setting-items/slider';
-import { SelectWithSearch } from '@/components/originui/select-with-search';
-import {
- FormControl,
- FormField,
- FormItem,
- FormLabel,
- FormMessage,
-} from '@/components/ui/form';
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from '@/components/ui/select';
-import {
- LlmModelType,
- ModelVariableType,
- settledModelVariableMap,
-} from '@/constants/knowledge';
-import { useTranslate } from '@/hooks/common-hooks';
-import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks';
-import { camelCase, isEqual } from 'lodash';
-import { useCallback } from 'react';
-import { useFormContext } from 'react-hook-form';
-import { z } from 'zod';
-
-interface LlmSettingFieldItemsProps {
- prefix?: string;
- options?: any[];
-}
-const LlmSettingEnableSchema = {
- temperatureEnabled: z.boolean(),
- topPEnabled: z.boolean(),
- presencePenaltyEnabled: z.boolean(),
- frequencyPenaltyEnabled: z.boolean(),
-};
-export const LlmSettingSchema = {
- llm_id: z.string(),
- parameter: z.string().optional(),
- temperature: z.coerce.number().optional(),
- top_p: z.coerce.number().optional(),
- presence_penalty: z.coerce.number().optional(),
- frequency_penalty: z.coerce.number().optional(),
- ...LlmSettingEnableSchema,
- // maxTokensEnabled: z.boolean(),
-};
-
-export function LlmSettingFieldItems({
- prefix,
- options,
-}: LlmSettingFieldItemsProps) {
- const form = useFormContext();
- const { t } = useTranslate('chat');
-
- const modelOptions = useComposeLlmOptionsByModelTypes([
- LlmModelType.Chat,
- LlmModelType.Image2text,
- ]);
-
- const handleChange = useCallback(
- (parameter: string) => {
- const values =
- settledModelVariableMap[
- parameter as keyof typeof settledModelVariableMap
- ];
- const enabledKeys = Object.keys(LlmSettingEnableSchema);
-
- for (const key in values) {
- if (Object.prototype.hasOwnProperty.call(values, key)) {
- const element = values[key as keyof typeof values];
- form.setValue(`${prefix}.${key}`, element);
- }
- }
- if (enabledKeys && enabledKeys.length) {
- for (const key of enabledKeys) {
- form.setValue(`${prefix}.${key}`, true);
- }
- }
- },
- [form, prefix],
- );
-
- const parameterOptions = Object.values(ModelVariableType).map((x) => ({
- label: t(camelCase(x)),
- value: x,
- })) as unknown as { label: string; value: ModelVariableType | 'Custom' }[];
- parameterOptions.push({
- label: t(camelCase('Custom')),
- value: 'Custom',
- });
-
- const getFieldWithPrefix = useCallback(
- (name: string) => {
- return prefix ? `${prefix}.${name}` : name;
- },
- [prefix],
- );
-
- const checkParameterIsEquel = () => {
- const [
- parameter,
- topPValue,
- frequencyPenaltyValue,
- temperatureValue,
- presencePenaltyValue,
- ] = form.getValues([
- getFieldWithPrefix('parameter'),
- getFieldWithPrefix('temperature'),
- getFieldWithPrefix('top_p'),
- getFieldWithPrefix('frequency_penalty'),
- getFieldWithPrefix('presence_penalty'),
- ]);
- if (parameter && parameter !== 'Custom') {
- const parameterValue =
- settledModelVariableMap[parameter as keyof typeof ModelVariableType];
- const parameterRealValue = {
- top_p: topPValue,
- temperature: temperatureValue,
- frequency_penalty: frequencyPenaltyValue,
- presence_penalty: presencePenaltyValue,
- };
- if (!isEqual(parameterValue, parameterRealValue)) {
- form.setValue(getFieldWithPrefix('parameter'), 'Custom');
- }
- }
- };
-
- return (
-
-
(
-
-
- *
- {t('model')}
-
-
-
-
-
-
- )}
- />
- (
-
- {t('freedom')}
-
-
-
-
-
-
-
- )}
- />
- {
- checkParameterIsEquel();
- }}
- >
- {
- checkParameterIsEquel();
- }}
- >
- {
- checkParameterIsEquel();
- }}
- >
- {
- checkParameterIsEquel();
- }}
- >
- {/* */}
-
- );
-}
diff --git a/web/src/pages/next-search/search-setting.tsx b/web/src/pages/next-search/search-setting.tsx
index 665d7e49b..365c366cb 100644
--- a/web/src/pages/next-search/search-setting.tsx
+++ b/web/src/pages/next-search/search-setting.tsx
@@ -1,6 +1,10 @@
// src/pages/next-search/search-setting.tsx
import { AvatarUpload } from '@/components/avatar-upload';
+import {
+ LlmSettingFieldItems,
+ LlmSettingSchema,
+} from '@/components/llm-setting-items/next';
import {
MetadataFilter,
MetadataFilterSchema,
@@ -46,10 +50,10 @@ import {
IllmSettingProps,
useUpdateSearch,
} from '../next-searches/hooks';
-import {
- LlmSettingFieldItems,
- LlmSettingSchema,
-} from './search-setting-aisummery-config';
+// import {
+// LlmSettingFieldItems,
+// LlmSettingSchema,
+// } from './search-setting-aisummery-config';
interface SearchSettingProps {
open: boolean;
@@ -397,6 +401,7 @@ const SearchSetting: React.FC
= ({
isTooltipShown
similarityName="search_config.similarity_threshold"
vectorSimilarityWeightName="search_config.vector_similarity_weight"
+ numberInputClassName="rounded-sm"
>
{/* Rerank Model */}
= ({
= ({
)}
/>
{aiSummaryDisabled && (
+ //
)}
{/* Feature Controls */}