mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-08-15 05:04:27 +08:00
Fix: Remove the model from the wiki template. (#18119)
This commit is contained in:
@@ -14,7 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ModelTreeSelectFormField } from '@/components/model-tree-select';
|
||||
import { SelectWithSearch } from '@/components/originui/select-with-search';
|
||||
import { RAGFlowFormItem } from '@/components/ragflow-form';
|
||||
import { SwitchFormField } from '@/components/switch-fom-field';
|
||||
@@ -176,12 +175,6 @@ export function TemplateConfiguration({
|
||||
/>
|
||||
</RAGFlowFormItem>
|
||||
|
||||
<ModelTreeSelectFormField
|
||||
name={`templates.${selectedTemplateIndex}.llm_id`}
|
||||
label={t('setting.llmForExtraction')}
|
||||
required
|
||||
/>
|
||||
|
||||
<RAGFlowFormItem
|
||||
name={`templates.${selectedTemplateIndex}.kind`}
|
||||
label={t('knowledgeCompilation.builtinTemplates')}
|
||||
|
||||
@@ -28,11 +28,9 @@ export const DefaultTemplateValues: TemplateSchemaType = {
|
||||
id: undefined,
|
||||
name: '',
|
||||
description: '',
|
||||
llm_id: '',
|
||||
kind: '',
|
||||
config: {
|
||||
kind: '',
|
||||
llm_id: '',
|
||||
global_rules: '',
|
||||
example: '',
|
||||
instruction: '',
|
||||
|
||||
@@ -15,14 +15,11 @@
|
||||
*/
|
||||
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import { useEffect, useMemo } from 'react';
|
||||
import { useEffect } from 'react';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { ModelTypeMap } from '@/components/model-tree-select';
|
||||
import { useFetchAllAddedModels } from '@/hooks/use-llm-request';
|
||||
import { ICompilationTemplateGroup } from '@/interfaces/database/compilation-template';
|
||||
import { buildValidModelIds } from '@/utils/llm-util';
|
||||
|
||||
import { buildFormSchema, FormSchemaType } from '../schema';
|
||||
import { DefaultValues } from '../constant';
|
||||
@@ -30,40 +27,15 @@ import { transformGroupDetailToForm } from '../utils';
|
||||
|
||||
type UseCompilationTemplateGroupFormOptions = {
|
||||
detail?: ICompilationTemplateGroup;
|
||||
defaultLlmId?: string;
|
||||
isCreate: boolean;
|
||||
};
|
||||
|
||||
export const useCompilationTemplateGroupForm = ({
|
||||
detail,
|
||||
defaultLlmId,
|
||||
isCreate,
|
||||
}: UseCompilationTemplateGroupFormOptions) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const {
|
||||
data: allAddedModels,
|
||||
isFetched: modelsFetched,
|
||||
isError: modelsError,
|
||||
} = useFetchAllAddedModels();
|
||||
|
||||
// null until the model list has actually loaded (or if it failed) — while
|
||||
// unknown, any persisted id is accepted as-is so validation never judges
|
||||
// against the empty placeholder list.
|
||||
const validModelIds = useMemo(
|
||||
() =>
|
||||
modelsFetched && !modelsError
|
||||
? buildValidModelIds(allAddedModels, ModelTypeMap.llm_id)
|
||||
: null,
|
||||
[allAddedModels, modelsFetched, modelsError],
|
||||
);
|
||||
|
||||
const form = useForm<FormSchemaType>({
|
||||
// useForm refreshes its options (including the resolver) on every render,
|
||||
// so this closure always validates against the latest validModelIds.
|
||||
resolver: zodResolver(
|
||||
buildFormSchema(t, (id) => validModelIds?.has(id) ?? true),
|
||||
),
|
||||
resolver: zodResolver(buildFormSchema(t)),
|
||||
defaultValues: DefaultValues,
|
||||
mode: 'onChange',
|
||||
});
|
||||
@@ -71,14 +43,8 @@ export const useCompilationTemplateGroupForm = ({
|
||||
useEffect(() => {
|
||||
if (detail) {
|
||||
form.reset(transformGroupDetailToForm(detail));
|
||||
} else if (
|
||||
isCreate &&
|
||||
defaultLlmId &&
|
||||
!form.getValues('templates.0.llm_id')
|
||||
) {
|
||||
form.setValue('templates.0.llm_id', defaultLlmId);
|
||||
}
|
||||
}, [defaultLlmId, detail, form, isCreate]);
|
||||
}, [detail, form]);
|
||||
|
||||
return { form };
|
||||
};
|
||||
|
||||
@@ -21,7 +21,6 @@ import {
|
||||
useUpdateCompilationTemplateGroup,
|
||||
} from '@/hooks/use-compilation-template-group-request';
|
||||
import { useFetchBuiltinCompilationTemplates } from '@/hooks/use-compilation-template-request';
|
||||
import { useFetchDefaultModelDictionary } from '@/hooks/use-llm-request';
|
||||
import { isCreateCompilationTemplateGroup } from '@/utils/compilation-template-util';
|
||||
import { useMemo } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@@ -48,7 +47,6 @@ export const useEditNextCompilationTemplateGroup = ({
|
||||
const { data: detail } = useFetchCompilationTemplateGroup();
|
||||
const { data: builtins, kindOptions: builtinKindOptions } =
|
||||
useFetchBuiltinCompilationTemplates();
|
||||
const defaultModelDictionary = useFetchDefaultModelDictionary();
|
||||
|
||||
const { createGroup, loading: createLoading } =
|
||||
useCreateCompilationTemplateGroup();
|
||||
@@ -64,11 +62,7 @@ export const useEditNextCompilationTemplateGroup = ({
|
||||
[builtinKindOptions, t],
|
||||
);
|
||||
|
||||
const { form } = useCompilationTemplateGroupForm({
|
||||
detail,
|
||||
defaultLlmId: defaultModelDictionary.llm_id,
|
||||
isCreate,
|
||||
});
|
||||
const { form } = useCompilationTemplateGroupForm({ detail });
|
||||
|
||||
const { onSubmit } = useCompilationTemplateGroupSubmit({
|
||||
isCreate,
|
||||
|
||||
@@ -44,11 +44,7 @@ export const useTemplateKindChange = ({
|
||||
if (builtinTemplate) {
|
||||
form.setValue(
|
||||
`templates.${index}.config`,
|
||||
buildConfigFromBuiltin(
|
||||
builtinTemplate,
|
||||
value,
|
||||
form.getValues(`templates.${index}.llm_id`),
|
||||
),
|
||||
buildConfigFromBuiltin(builtinTemplate, value),
|
||||
{ shouldValidate: false },
|
||||
);
|
||||
}
|
||||
|
||||
@@ -42,20 +42,11 @@ export const buildSynthesisSchema = () =>
|
||||
})
|
||||
.passthrough();
|
||||
|
||||
export const buildTemplateSchema = (
|
||||
t: (key: string) => string,
|
||||
isModelAvailable?: (id: string) => boolean,
|
||||
) =>
|
||||
export const buildTemplateSchema = (t: (key: string) => string) =>
|
||||
z.object({
|
||||
id: z.string().optional(),
|
||||
name: z.string().min(1, t('setting.templateNameRequired')),
|
||||
description: z.string().optional(),
|
||||
llm_id: z
|
||||
.string()
|
||||
.min(1, t('setting.llmForExtractionRequired'))
|
||||
.refine((val) => !val || (isModelAvailable?.(val) ?? true), {
|
||||
message: t('setting.llmForExtractionUnavailable'),
|
||||
}),
|
||||
kind: z.string().min(1, t('setting.templateKindRequired')),
|
||||
config: z.record(
|
||||
z.union([
|
||||
@@ -68,15 +59,12 @@ export const buildTemplateSchema = (
|
||||
),
|
||||
});
|
||||
|
||||
export const buildFormSchema = (
|
||||
t: (key: string) => string,
|
||||
isModelAvailable?: (id: string) => boolean,
|
||||
) =>
|
||||
export const buildFormSchema = (t: (key: string) => string) =>
|
||||
z.object({
|
||||
name: z.string().optional(),
|
||||
description: z.string().optional(),
|
||||
avatar: z.string().optional(),
|
||||
templates: z.array(buildTemplateSchema(t, isModelAvailable)).min(1),
|
||||
templates: z.array(buildTemplateSchema(t)).min(1),
|
||||
});
|
||||
|
||||
export type TemplateSchemaType = z.infer<
|
||||
|
||||
@@ -80,7 +80,6 @@ export const normalizeSection = (
|
||||
export const buildConfigFromBuiltin = (
|
||||
builtinTemplate: ICompilationTemplateBuiltin,
|
||||
kind: string,
|
||||
llmId: string,
|
||||
): TemplateSchemaType['config'] => {
|
||||
const instruction =
|
||||
typeof builtinTemplate.config?.instruction === 'string'
|
||||
@@ -92,7 +91,6 @@ export const buildConfigFromBuiltin = (
|
||||
: '';
|
||||
const sections: TemplateSchemaType['config'] = {
|
||||
kind,
|
||||
llm_id: llmId,
|
||||
global_rules:
|
||||
typeof builtinTemplate.config?.global_rules === 'string'
|
||||
? builtinTemplate.config.global_rules
|
||||
@@ -172,7 +170,6 @@ export const transformDetailToForm = (
|
||||
);
|
||||
const base: TemplateSchemaType['config'] = {
|
||||
kind: config.kind ?? '',
|
||||
llm_id: config.llm_id ?? '',
|
||||
global_rules: config.global_rules ?? '',
|
||||
example: storedExample,
|
||||
...(typeof config.synthesis === 'object' && config.synthesis !== null
|
||||
@@ -209,7 +206,6 @@ export const transformDetailToForm = (
|
||||
id: detail.id,
|
||||
name: detail.name ?? '',
|
||||
description: detail.description ?? '',
|
||||
llm_id: config.llm_id ?? '',
|
||||
kind: detail.kind ?? '',
|
||||
config: {
|
||||
...base,
|
||||
@@ -235,7 +231,6 @@ export const transformDetailToForm = (
|
||||
id: detail.id,
|
||||
name: detail.name ?? '',
|
||||
description: detail.description ?? '',
|
||||
llm_id: config.llm_id ?? '',
|
||||
kind: detail.kind ?? '',
|
||||
config: base,
|
||||
};
|
||||
@@ -259,11 +254,10 @@ export const transformGroupDetailToForm = (
|
||||
export const transformTemplateToPayload = (template: TemplateSchemaType) => {
|
||||
const config: ICompilationTemplateConfigRequest = {
|
||||
kind: template.kind,
|
||||
llm_id: template.llm_id,
|
||||
};
|
||||
|
||||
Object.entries(template.config).forEach(([key, value]) => {
|
||||
if (key === 'kind' || key === 'llm_id') return;
|
||||
if (key === 'kind') return;
|
||||
if (key === 'example' || key === 'instruction') return;
|
||||
if (key === 'synthesis') {
|
||||
config[key] = value as ICompilationTemplateConfigRequest[string];
|
||||
|
||||
Reference in New Issue
Block a user