mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-26 17:16:52 +08:00
### What problem does this PR solve? Feat: Display the selected list of memories in the retrieval node. #4213 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
@ -1,13 +1,16 @@
|
|||||||
import { NodeCollapsible } from '@/components/collapse';
|
import { NodeCollapsible } from '@/components/collapse';
|
||||||
import { RAGFlowAvatar } from '@/components/ragflow-avatar';
|
import { RAGFlowAvatar } from '@/components/ragflow-avatar';
|
||||||
import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request';
|
import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request';
|
||||||
import { IRetrievalNode } from '@/interfaces/database/flow';
|
import { useFetchAllMemoryList } from '@/hooks/use-memory-request';
|
||||||
|
import { BaseNode } from '@/interfaces/database/flow';
|
||||||
import { NodeProps, Position } from '@xyflow/react';
|
import { NodeProps, Position } from '@xyflow/react';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { get } from 'lodash';
|
import { get } from 'lodash';
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import { NodeHandleId } from '../../constant';
|
import { NodeHandleId, RetrievalFrom } from '../../constant';
|
||||||
|
import { RetrievalFormSchemaType } from '../../form/retrieval-form/next';
|
||||||
import { useGetVariableLabelOrTypeByValue } from '../../hooks/use-get-begin-query';
|
import { useGetVariableLabelOrTypeByValue } from '../../hooks/use-get-begin-query';
|
||||||
|
import { LabelCard } from './card';
|
||||||
import { CommonHandle, LeftEndHandle } from './handle';
|
import { CommonHandle, LeftEndHandle } from './handle';
|
||||||
import styles from './index.less';
|
import styles from './index.less';
|
||||||
import NodeHeader from './node-header';
|
import NodeHeader from './node-header';
|
||||||
@ -19,12 +22,17 @@ function InnerRetrievalNode({
|
|||||||
data,
|
data,
|
||||||
isConnectable = true,
|
isConnectable = true,
|
||||||
selected,
|
selected,
|
||||||
}: NodeProps<IRetrievalNode>) {
|
}: NodeProps<BaseNode<RetrievalFormSchemaType>>) {
|
||||||
const knowledgeBaseIds: string[] = get(data, 'form.kb_ids', []);
|
const knowledgeBaseIds: string[] = get(data, 'form.kb_ids', []);
|
||||||
|
const memoryIds: string[] = get(data, 'form.memory_ids', []);
|
||||||
const { list: knowledgeList } = useFetchKnowledgeList(true);
|
const { list: knowledgeList } = useFetchKnowledgeList(true);
|
||||||
|
|
||||||
const { getLabel } = useGetVariableLabelOrTypeByValue({ nodeId: id });
|
const { getLabel } = useGetVariableLabelOrTypeByValue({ nodeId: id });
|
||||||
|
|
||||||
|
const isMemory = data.form?.retrieval_from === RetrievalFrom.Memory;
|
||||||
|
|
||||||
|
const memoryList = useFetchAllMemoryList();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ToolBar selected={selected} id={id} label={data.label}>
|
<ToolBar selected={selected} id={id} label={data.label}>
|
||||||
<NodeWrapper selected={selected} id={id}>
|
<NodeWrapper selected={selected} id={id}>
|
||||||
@ -45,8 +53,22 @@ function InnerRetrievalNode({
|
|||||||
[styles.nodeHeader]: knowledgeBaseIds.length > 0,
|
[styles.nodeHeader]: knowledgeBaseIds.length > 0,
|
||||||
})}
|
})}
|
||||||
></NodeHeader>
|
></NodeHeader>
|
||||||
<NodeCollapsible items={knowledgeBaseIds}>
|
<NodeCollapsible items={isMemory ? memoryIds : knowledgeBaseIds}>
|
||||||
{(id) => {
|
{(id) => {
|
||||||
|
if (isMemory) {
|
||||||
|
const item = memoryList.data?.find((y) => id === y.id);
|
||||||
|
return (
|
||||||
|
<LabelCard key={id} className="flex items-center gap-1.5">
|
||||||
|
<RAGFlowAvatar
|
||||||
|
className="size-6 rounded-lg"
|
||||||
|
avatar={item?.avatar ?? ''}
|
||||||
|
name={item ? item?.name : id}
|
||||||
|
/>
|
||||||
|
<span className="flex-1 truncate"> {item?.name}</span>
|
||||||
|
</LabelCard>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const item = knowledgeList.find((y) => id === y.id);
|
const item = knowledgeList.find((y) => id === y.id);
|
||||||
const label = getLabel(id);
|
const label = getLabel(id);
|
||||||
|
|
||||||
|
|||||||
@ -54,6 +54,7 @@ export const RetrievalPartialSchema = {
|
|||||||
toc_enhance: z.boolean(),
|
toc_enhance: z.boolean(),
|
||||||
...MetadataFilterSchema,
|
...MetadataFilterSchema,
|
||||||
memory_ids: z.array(z.string()).optional(),
|
memory_ids: z.array(z.string()).optional(),
|
||||||
|
retrieval_from: z.string(),
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FormSchema = z.object({
|
export const FormSchema = z.object({
|
||||||
@ -61,6 +62,8 @@ export const FormSchema = z.object({
|
|||||||
...RetrievalPartialSchema,
|
...RetrievalPartialSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export type RetrievalFormSchemaType = z.infer<typeof FormSchema>;
|
||||||
|
|
||||||
export function MemoryDatasetForm() {
|
export function MemoryDatasetForm() {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const form = useFormContext();
|
const form = useFormContext();
|
||||||
|
|||||||
Reference in New Issue
Block a user