Files
ragflow/web/src/pages/dataset/testing/testing-form.tsx
balibabu f98597a19e Fix: Recall Test Page Metadata Not Displaying. (#14297)
### What problem does this PR solve?

Fix: Recall Test Page Metadata Not Displaying.
### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
2026-04-23 10:57:05 +08:00

144 lines
4.0 KiB
TypeScript

'use client';
import { zodResolver } from '@hookform/resolvers/zod';
import { useForm, useWatch } from 'react-hook-form';
import { z } from 'zod';
import { CrossLanguageFormField } from '@/components/cross-language-form-field';
import { FormContainer } from '@/components/form-container';
import {
MetadataFilter,
MetadataFilterSchema,
} from '@/components/metadata-filter';
import {
RerankFormFields,
initialTopKValue,
topKSchema,
} from '@/components/rerank';
import {
SimilaritySliderFormField,
initialSimilarityThresholdValue,
initialVectorSimilarityWeightValue,
similarityThresholdSchema,
vectorSimilarityWeightSchema,
} from '@/components/similarity-slider';
import { ButtonLoading } from '@/components/ui/button';
import {
Form,
FormControl,
FormField,
FormItem,
FormMessage,
} from '@/components/ui/form';
import { Textarea } from '@/components/ui/textarea';
import { UseKnowledgeGraphFormField } from '@/components/use-knowledge-graph-item';
import { useTestRetrieval } from '@/hooks/use-knowledge-request';
import { ITestRetrievalRequestBody } from '@/interfaces/request/knowledge';
import { trim } from 'lodash';
import { Send } from 'lucide-react';
import { useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { useParams } from 'react-router';
type TestingFormProps = Pick<
ReturnType<typeof useTestRetrieval>,
'loading' | 'refetch' | 'setValues'
>;
export default function TestingForm({
loading,
refetch,
setValues,
}: TestingFormProps) {
const { t } = useTranslation();
const { id } = useParams();
const knowledgeBaseId = id;
const formSchema = z.object({
question: z.string().min(1, {
message: t('knowledgeDetails.testTextPlaceholder'),
}),
...similarityThresholdSchema,
...vectorSimilarityWeightSchema,
...topKSchema,
use_kg: z.boolean().optional(),
dataset_ids: z.array(z.string()).optional(),
...MetadataFilterSchema,
});
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
...initialSimilarityThresholdValue,
...initialVectorSimilarityWeightValue,
...initialTopKValue,
use_kg: false,
dataset_ids: [knowledgeBaseId],
},
});
const question = form.watch('question');
const values = useWatch({ control: form.control });
useEffect(() => {
setValues(values as ITestRetrievalRequestBody);
}, [setValues, values]);
function onSubmit() {
refetch();
}
return (
<Form {...form}>
<form
className="size-full flex flex-col"
onSubmit={form.handleSubmit(onSubmit)}
>
<div className="px-5 h-0 flex-1">
<FormContainer className="p-5 h-full overflow-auto">
<SimilaritySliderFormField
isTooltipShown={true}
></SimilaritySliderFormField>
<RerankFormFields></RerankFormFields>
<UseKnowledgeGraphFormField name="use_kg"></UseKnowledgeGraphFormField>
<CrossLanguageFormField
name={'cross_languages'}
></CrossLanguageFormField>
<MetadataFilter prefix=""></MetadataFilter>
</FormContainer>
</div>
<footer className="flex-0 p-5">
<FormField
control={form.control}
name="question"
render={({ field }) => (
<FormItem>
{/* <FormLabel>{t('knowledgeDetails.testText')}</FormLabel> */}
<FormControl>
<Textarea {...field}></Textarea>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<div className="mt-2.5 text-end">
<ButtonLoading
type="submit"
disabled={!trim(question)}
loading={loading}
>
{/* {!loading && <CirclePlay />} */}
{t('knowledgeDetails.testingLabel')}
<Send />
</ButtonLoading>
</div>
</footer>
</form>
</Form>
);
}