balibabu commited on
Commit
942993f
·
1 Parent(s): 88e14ed

feat: add arxiv operator #918 (#1683)

Browse files

### What problem does this PR solve?

feat: add arxiv operator #918

### Type of change


- [x] New Feature (non-breaking change which adds functionality)

web/src/assets/svg/arxiv.svg ADDED
web/src/components/operate-dropdown/index.tsx CHANGED
@@ -9,6 +9,7 @@ import styles from './index.less';
9
  interface IProps {
10
  deleteItem: () => Promise<any> | void;
11
  iconFontSize?: number;
 
12
  items?: MenuProps['items'];
13
  height?: number;
14
  needsDeletionValidation?: boolean;
@@ -18,6 +19,7 @@ const OperateDropdown = ({
18
  deleteItem,
19
  children,
20
  iconFontSize = 30,
 
21
  items: otherItems = [],
22
  height = 24,
23
  needsDeletionValidation = true,
@@ -69,7 +71,7 @@ const OperateDropdown = ({
69
  rotate={90}
70
  style={{
71
  fontSize: iconFontSize,
72
- color: 'gray',
73
  cursor: 'pointer',
74
  height,
75
  }}
 
9
  interface IProps {
10
  deleteItem: () => Promise<any> | void;
11
  iconFontSize?: number;
12
+ iconFontColor?: string;
13
  items?: MenuProps['items'];
14
  height?: number;
15
  needsDeletionValidation?: boolean;
 
19
  deleteItem,
20
  children,
21
  iconFontSize = 30,
22
+ iconFontColor = 'gray',
23
  items: otherItems = [],
24
  height = 24,
25
  needsDeletionValidation = true,
 
71
  rotate={90}
72
  style={{
73
  fontSize: iconFontSize,
74
+ color: iconFontColor,
75
  cursor: 'pointer',
76
  height,
77
  }}
web/src/locales/en.ts CHANGED
@@ -632,6 +632,13 @@ The above is the content you need to summarize.`,
632
  email: 'Email',
633
  emailTip:
634
  'This component is used to get search result from https://pubmed.ncbi.nlm.nih.gov/. Typically, it performs as a supplement to knowledgebases. Top N specifies the number of search results you need to adapt. E-mail is a required field.',
 
 
 
 
 
 
 
635
  },
636
  footer: {
637
  profile: 'All rights reserved @ React',
 
632
  email: 'Email',
633
  emailTip:
634
  'This component is used to get search result from https://pubmed.ncbi.nlm.nih.gov/. Typically, it performs as a supplement to knowledgebases. Top N specifies the number of search results you need to adapt. E-mail is a required field.',
635
+ arxiv: 'Arxiv',
636
+ arxivTip:
637
+ 'This component is used to get search result from https://arxiv.org/. Typically, it performs as a supplement to knowledgebases. Top N specifies the number of search results you need to adapt.',
638
+ sortBy: 'Sort by',
639
+ submittedDate: 'Submitted date',
640
+ lastUpdatedDate: 'Last updated date',
641
+ relevance: 'Relevance',
642
  },
643
  footer: {
644
  profile: 'All rights reserved @ React',
web/src/locales/zh-traditional.ts CHANGED
@@ -592,6 +592,13 @@ export default {
592
  email: '信箱',
593
  emailTip:
594
  '此元件用於從 https://pubmed.ncbi.nlm.nih.gov/ 取得搜尋結果。通常,它充當知識庫的補充。 Top N 指定您需要適應的搜尋結果的數量。電子郵件是必填欄位。',
 
 
 
 
 
 
 
595
  },
596
  footer: {
597
  profile: '“保留所有權利 @ react”',
 
592
  email: '信箱',
593
  emailTip:
594
  '此元件用於從 https://pubmed.ncbi.nlm.nih.gov/ 取得搜尋結果。通常,它充當知識庫的補充。 Top N 指定您需要適應的搜尋結果的數量。電子郵件是必填欄位。',
595
+ arxiv: 'Arxiv',
596
+ arxivTip:
597
+ '此元件用於從 https://arxiv.org/ 取得搜尋結果。通常,它充當知識庫的補充。 Top N 指定您需要適應的搜尋結果的數量。',
598
+ sortBy: '排序方式',
599
+ submittedDate: '提交日期',
600
+ lastUpdatedDate: '最後更新日期',
601
+ relevance: '關聯',
602
  },
603
  footer: {
604
  profile: '“保留所有權利 @ react”',
web/src/locales/zh.ts CHANGED
@@ -610,6 +610,13 @@ export default {
610
  email: '邮箱',
611
  emailTip:
612
  '此组件用于从 https://pubmed.ncbi.nlm.nih.gov/ 获取搜索结果。通常,它作为知识库的补充。Top N 指定您需要调整的搜索结果数。电子邮件是必填字段。',
 
 
 
 
 
 
 
613
  },
614
  footer: {
615
  profile: 'All rights reserved @ React',
 
610
  email: '邮箱',
611
  emailTip:
612
  '此组件用于从 https://pubmed.ncbi.nlm.nih.gov/ 获取搜索结果。通常,它作为知识库的补充。Top N 指定您需要调整的搜索结果数。电子邮件是必填字段。',
613
+ arxiv: 'Arxiv',
614
+ arxivTip:
615
+ '此组件用于从 https://arxiv.org/ 获取搜索结果。通常,它作为知识库的补充。Top N 指定您需要调整的搜索结果数量。',
616
+ sortBy: '排序方式',
617
+ submittedDate: '提交日期',
618
+ lastUpdatedDate: '最后更新日期',
619
+ relevance: '关联',
620
  },
621
  footer: {
622
  profile: 'All rights reserved @ React',
web/src/pages/flow/arxiv-form/index.tsx ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import TopNItem from '@/components/top-n-item';
2
+ import { useTranslate } from '@/hooks/common-hooks';
3
+ import { Form, Select } from 'antd';
4
+ import { useMemo } from 'react';
5
+ import { IOperatorForm } from '../interface';
6
+
7
+ const ArxivForm = ({ onValuesChange, form }: IOperatorForm) => {
8
+ const { t } = useTranslate('flow');
9
+
10
+ const options = useMemo(() => {
11
+ return ['submittedDate', 'lastUpdatedDate', 'relevance'].map((x) => ({
12
+ value: x,
13
+ label: t(x),
14
+ }));
15
+ }, [t]);
16
+
17
+ return (
18
+ <Form
19
+ name="basic"
20
+ labelCol={{ span: 6 }}
21
+ wrapperCol={{ span: 18 }}
22
+ autoComplete="off"
23
+ form={form}
24
+ onValuesChange={onValuesChange}
25
+ >
26
+ <TopNItem initialValue={10}></TopNItem>
27
+ <Form.Item label={t('sortBy')} name={'sort_by'}>
28
+ <Select options={options}></Select>
29
+ </Form.Item>
30
+ </Form>
31
+ );
32
+ };
33
+
34
+ export default ArxivForm;
web/src/pages/flow/canvas/node/dropdown.tsx CHANGED
@@ -7,9 +7,10 @@ import useGraphStore from '../../store';
7
 
8
  interface IProps {
9
  id: string;
 
10
  }
11
 
12
- const NodeDropdown = ({ id }: IProps) => {
13
  const { t } = useTranslation();
14
  const deleteNodeById = useGraphStore((store) => store.deleteNodeById);
15
  const duplicateNodeById = useGraphStore((store) => store.duplicateNode);
@@ -42,6 +43,7 @@ const NodeDropdown = ({ id }: IProps) => {
42
  deleteItem={deleteNode}
43
  items={items}
44
  needsDeletionValidation={false}
 
45
  ></OperateDropdown>
46
  );
47
  };
 
7
 
8
  interface IProps {
9
  id: string;
10
+ iconFontColor?: string;
11
  }
12
 
13
+ const NodeDropdown = ({ id, iconFontColor }: IProps) => {
14
  const { t } = useTranslation();
15
  const deleteNodeById = useGraphStore((store) => store.deleteNodeById);
16
  const duplicateNodeById = useGraphStore((store) => store.duplicateNode);
 
43
  deleteItem={deleteNode}
44
  items={items}
45
  needsDeletionValidation={false}
46
+ iconFontColor={iconFontColor}
47
  ></OperateDropdown>
48
  );
49
  };
web/src/pages/flow/canvas/node/index.tsx CHANGED
@@ -11,7 +11,11 @@ import NodeDropdown from './dropdown';
11
  import styles from './index.less';
12
  import NodePopover from './popover';
13
 
14
- const ZeroGapOperators = [Operator.RewriteQuestion, Operator.KeywordExtract];
 
 
 
 
15
 
16
  export function RagNode({
17
  id,
@@ -69,8 +73,10 @@ export function RagNode({
69
  </span>
70
  </Flex>
71
  <Flex flex={1}>
72
- {' '}
73
- <NodeDropdown id={id}></NodeDropdown>
 
 
74
  </Flex>
75
  </Flex>
76
 
 
11
  import styles from './index.less';
12
  import NodePopover from './popover';
13
 
14
+ const ZeroGapOperators = [
15
+ Operator.RewriteQuestion,
16
+ Operator.KeywordExtract,
17
+ Operator.Arxiv,
18
+ ];
19
 
20
  export function RagNode({
21
  id,
 
73
  </span>
74
  </Flex>
75
  <Flex flex={1}>
76
+ <NodeDropdown
77
+ id={id}
78
+ iconFontColor={style?.moreIconColor}
79
+ ></NodeDropdown>
80
  </Flex>
81
  </Flex>
82
 
web/src/pages/flow/constant.tsx CHANGED
@@ -1,3 +1,4 @@
 
1
  import { ReactComponent as BaiduIcon } from '@/assets/svg/baidu.svg';
2
  import { ReactComponent as DuckIcon } from '@/assets/svg/duck.svg';
3
  import { ReactComponent as KeywordIcon } from '@/assets/svg/keyword.svg';
@@ -38,6 +39,7 @@ export enum Operator {
38
  DuckDuckGo = 'DuckDuckGo',
39
  Wikipedia = 'Wikipedia',
40
  PubMed = 'PubMed',
 
41
  }
42
 
43
  export const operatorIconMap = {
@@ -54,6 +56,7 @@ export const operatorIconMap = {
54
  [Operator.Baidu]: BaiduIcon,
55
  [Operator.Wikipedia]: WikipediaIcon,
56
  [Operator.PubMed]: PubMedIcon,
 
57
  };
58
 
59
  export const operatorMap = {
@@ -120,6 +123,16 @@ export const operatorMap = {
120
  [Operator.PubMed]: {
121
  backgroundColor: '#a2ccf0',
122
  },
 
 
 
 
 
 
 
 
 
 
123
  };
124
 
125
  export const componentMenuList = [
@@ -159,6 +172,9 @@ export const componentMenuList = [
159
  {
160
  name: Operator.PubMed,
161
  },
 
 
 
162
  ];
163
 
164
  export const initialRetrievalValues = {
@@ -236,6 +252,11 @@ export const initialPubMedValues = {
236
  email: '',
237
  };
238
 
 
 
 
 
 
239
  export const CategorizeAnchorPointPositions = [
240
  { top: 1, right: 34 },
241
  { top: 8, right: 18 },
@@ -296,6 +317,7 @@ export const RestrictedUpstreamMap = {
296
  [Operator.DuckDuckGo]: [Operator.Begin, Operator.Retrieval],
297
  [Operator.Wikipedia]: [Operator.Begin, Operator.Retrieval],
298
  [Operator.PubMed]: [Operator.Begin, Operator.Retrieval],
 
299
  };
300
 
301
  export const NodeMap = {
@@ -312,6 +334,7 @@ export const NodeMap = {
312
  [Operator.Baidu]: 'ragNode',
313
  [Operator.Wikipedia]: 'ragNode',
314
  [Operator.PubMed]: 'ragNode',
 
315
  };
316
 
317
  export const LanguageOptions = [
 
1
+ import { ReactComponent as ArxivIcon } from '@/assets/svg/arxiv.svg';
2
  import { ReactComponent as BaiduIcon } from '@/assets/svg/baidu.svg';
3
  import { ReactComponent as DuckIcon } from '@/assets/svg/duck.svg';
4
  import { ReactComponent as KeywordIcon } from '@/assets/svg/keyword.svg';
 
39
  DuckDuckGo = 'DuckDuckGo',
40
  Wikipedia = 'Wikipedia',
41
  PubMed = 'PubMed',
42
+ Arxiv = 'Arxiv',
43
  }
44
 
45
  export const operatorIconMap = {
 
56
  [Operator.Baidu]: BaiduIcon,
57
  [Operator.Wikipedia]: WikipediaIcon,
58
  [Operator.PubMed]: PubMedIcon,
59
+ [Operator.Arxiv]: ArxivIcon,
60
  };
61
 
62
  export const operatorMap = {
 
123
  [Operator.PubMed]: {
124
  backgroundColor: '#a2ccf0',
125
  },
126
+ [Operator.Arxiv]: {
127
+ width: 70,
128
+ height: 70,
129
+ fontSize: 12,
130
+ iconWidth: 16,
131
+ iconFontSize: 16,
132
+ moreIconColor: 'white',
133
+ backgroundColor: '#b31b1b',
134
+ color: 'white',
135
+ },
136
  };
137
 
138
  export const componentMenuList = [
 
172
  {
173
  name: Operator.PubMed,
174
  },
175
+ {
176
+ name: Operator.Arxiv,
177
+ },
178
  ];
179
 
180
  export const initialRetrievalValues = {
 
252
  email: '',
253
  };
254
 
255
+ export const initialArxivValues = {
256
+ top_n: 10,
257
+ sort_by: 'relevance',
258
+ };
259
+
260
  export const CategorizeAnchorPointPositions = [
261
  { top: 1, right: 34 },
262
  { top: 8, right: 18 },
 
317
  [Operator.DuckDuckGo]: [Operator.Begin, Operator.Retrieval],
318
  [Operator.Wikipedia]: [Operator.Begin, Operator.Retrieval],
319
  [Operator.PubMed]: [Operator.Begin, Operator.Retrieval],
320
+ [Operator.Arxiv]: [Operator.Begin, Operator.Retrieval],
321
  };
322
 
323
  export const NodeMap = {
 
334
  [Operator.Baidu]: 'ragNode',
335
  [Operator.Wikipedia]: 'ragNode',
336
  [Operator.PubMed]: 'ragNode',
337
+ [Operator.Arxiv]: 'ragNode',
338
  };
339
 
340
  export const LanguageOptions = [
web/src/pages/flow/flow-drawer/index.tsx CHANGED
@@ -4,6 +4,7 @@ import { Drawer, Flex, Form, Input } from 'antd';
4
  import { useEffect } from 'react';
5
  import { Node } from 'reactflow';
6
  import AnswerForm from '../answer-form';
 
7
  import BaiduForm from '../baidu-form';
8
  import BeginForm from '../begin-form';
9
  import CategorizeForm from '../categorize-form';
@@ -40,6 +41,7 @@ const FormMap = {
40
  [Operator.KeywordExtract]: KeywordExtractForm,
41
  [Operator.Wikipedia]: WikipediaForm,
42
  [Operator.PubMed]: PubMedForm,
 
43
  };
44
 
45
  const EmptyContent = () => <div>empty</div>;
 
4
  import { useEffect } from 'react';
5
  import { Node } from 'reactflow';
6
  import AnswerForm from '../answer-form';
7
+ import ArxivForm from '../arxiv-form';
8
  import BaiduForm from '../baidu-form';
9
  import BeginForm from '../begin-form';
10
  import CategorizeForm from '../categorize-form';
 
41
  [Operator.KeywordExtract]: KeywordExtractForm,
42
  [Operator.Wikipedia]: WikipediaForm,
43
  [Operator.PubMed]: PubMedForm,
44
+ [Operator.Arxiv]: ArxivForm,
45
  };
46
 
47
  const EmptyContent = () => <div>empty</div>;
web/src/pages/flow/hooks.ts CHANGED
@@ -31,6 +31,7 @@ import {
31
  NodeMap,
32
  Operator,
33
  RestrictedUpstreamMap,
 
34
  initialBaiduValues,
35
  initialBeginValues,
36
  initialCategorizeValues,
@@ -92,6 +93,7 @@ export const useInitializeOperatorParams = () => {
92
  [Operator.Baidu]: initialBaiduValues,
93
  [Operator.Wikipedia]: initialWikipediaValues,
94
  [Operator.PubMed]: initialPubMedValues,
 
95
  };
96
  }, [llmId]);
97
 
 
31
  NodeMap,
32
  Operator,
33
  RestrictedUpstreamMap,
34
+ initialArxivValues,
35
  initialBaiduValues,
36
  initialBeginValues,
37
  initialCategorizeValues,
 
93
  [Operator.Baidu]: initialBaiduValues,
94
  [Operator.Wikipedia]: initialWikipediaValues,
95
  [Operator.PubMed]: initialPubMedValues,
96
+ [Operator.Arxiv]: initialArxivValues,
97
  };
98
  }, [llmId]);
99
 
web/src/pages/force-graph.tsx ADDED
File without changes