balibabu
commited on
Commit
·
55e7b7a
1
Parent(s):
6d597a0
feat: Add component WenCai #1739 (#2388)
Browse files### What problem does this PR solve?
feat: Add component WenCai #1739
### Type of change
- [x] New Feature (non-breaking change which adds functionality)
- web/src/assets/svg/wencai.svg +152 -0
- web/src/locales/en.ts +17 -0
- web/src/locales/zh-traditional.ts +17 -0
- web/src/locales/zh.ts +17 -0
- web/src/pages/flow/constant.tsx +25 -0
- web/src/pages/flow/flow-drawer/index.tsx +2 -0
- web/src/pages/flow/hooks.ts +2 -0
- web/src/pages/flow/wencai-form/index.tsx +35 -0
web/src/assets/svg/wencai.svg
ADDED
|
web/src/locales/en.ts
CHANGED
@@ -875,6 +875,23 @@ The above is the content you need to summarize.`,
|
|
875 |
operator: 'Operator',
|
876 |
value: 'Value',
|
877 |
useTemplate: 'Use this template',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
878 |
},
|
879 |
footer: {
|
880 |
profile: 'All rights reserved @ React',
|
|
|
875 |
operator: 'Operator',
|
876 |
value: 'Value',
|
877 |
useTemplate: 'Use this template',
|
878 |
+
wenCai: 'WenCai',
|
879 |
+
queryType: 'Query type',
|
880 |
+
wenCaiDescription:
|
881 |
+
'The component can be used to obtain information on a wide range of financial areas, including but not limited to stocks, funds, etc...',
|
882 |
+
wenCaiQueryTypeOptions: {
|
883 |
+
stock: 'stock',
|
884 |
+
zhishu: 'index',
|
885 |
+
fund: 'fund',
|
886 |
+
hkstock: 'Hong Kong shares',
|
887 |
+
usstock: 'US stock market',
|
888 |
+
threeboard: 'New OTC Market',
|
889 |
+
conbond: 'Convertible Bond',
|
890 |
+
insurance: 'insurance',
|
891 |
+
futures: 'futures',
|
892 |
+
lccp: 'Financing',
|
893 |
+
foreign_exchange: 'Foreign currency',
|
894 |
+
},
|
895 |
},
|
896 |
footer: {
|
897 |
profile: 'All rights reserved @ React',
|
web/src/locales/zh-traditional.ts
CHANGED
@@ -829,6 +829,23 @@ export default {
|
|
829 |
operator: '操作符',
|
830 |
value: '值',
|
831 |
useTemplate: '使用該模板',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
832 |
},
|
833 |
footer: {
|
834 |
profile: '“保留所有權利 @ react”',
|
|
|
829 |
operator: '操作符',
|
830 |
value: '值',
|
831 |
useTemplate: '使用該模板',
|
832 |
+
wenCai: '問財',
|
833 |
+
queryType: '查詢類型',
|
834 |
+
wenCaiDescription:
|
835 |
+
'該組件可用於獲取廣泛的金融領域的信息,包括但不限於股票、基金等...',
|
836 |
+
wenCaiQueryTypeOptions: {
|
837 |
+
stock: '股票',
|
838 |
+
zhishu: '指數',
|
839 |
+
fund: '基金',
|
840 |
+
hkstock: '港股',
|
841 |
+
usstock: '美股',
|
842 |
+
threeboard: '新三板',
|
843 |
+
conbond: '可轉債',
|
844 |
+
insurance: '保險',
|
845 |
+
futures: '期貨',
|
846 |
+
lccp: '理財',
|
847 |
+
foreign_exchange: '股票',
|
848 |
+
},
|
849 |
},
|
850 |
footer: {
|
851 |
profile: '“保留所有權利 @ react”',
|
web/src/locales/zh.ts
CHANGED
@@ -847,6 +847,23 @@ export default {
|
|
847 |
operator: '操作符',
|
848 |
value: '值',
|
849 |
useTemplate: '使用该模板',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
850 |
},
|
851 |
footer: {
|
852 |
profile: 'All rights reserved @ React',
|
|
|
847 |
operator: '操作符',
|
848 |
value: '值',
|
849 |
useTemplate: '使用该模板',
|
850 |
+
wenCai: '问财',
|
851 |
+
queryType: '查询类型',
|
852 |
+
wenCaiDescription:
|
853 |
+
'该组件可用于获取广泛金融领域的信息,包括但不限于股票、基金等...',
|
854 |
+
wenCaiQueryTypeOptions: {
|
855 |
+
stock: '股票',
|
856 |
+
zhishu: '指数',
|
857 |
+
fund: '基金',
|
858 |
+
hkstock: '港股',
|
859 |
+
usstock: '美股',
|
860 |
+
threeboard: '新三板',
|
861 |
+
conbond: '可转债',
|
862 |
+
insurance: '保险',
|
863 |
+
futures: '期货',
|
864 |
+
lccp: '理财',
|
865 |
+
foreign_exchange: '股票',
|
866 |
+
},
|
867 |
},
|
868 |
footer: {
|
869 |
profile: 'All rights reserved @ React',
|
web/src/pages/flow/constant.tsx
CHANGED
@@ -12,6 +12,7 @@ import { ReactComponent as KeywordIcon } from '@/assets/svg/keyword.svg';
|
|
12 |
import { ReactComponent as PubMedIcon } from '@/assets/svg/pubmed.svg';
|
13 |
import { ReactComponent as QWeatherIcon } from '@/assets/svg/qweather.svg';
|
14 |
import { ReactComponent as SwitchIcon } from '@/assets/svg/switch.svg';
|
|
|
15 |
import { ReactComponent as WikipediaIcon } from '@/assets/svg/wikipedia.svg';
|
16 |
|
17 |
import { variableEnabledFieldMap } from '@/constants/chat';
|
@@ -59,6 +60,7 @@ export enum Operator {
|
|
59 |
QWeather = 'QWeather',
|
60 |
ExeSQL = 'ExeSQL',
|
61 |
Switch = 'Switch',
|
|
|
62 |
}
|
63 |
|
64 |
export const operatorIconMap = {
|
@@ -85,6 +87,7 @@ export const operatorIconMap = {
|
|
85 |
[Operator.QWeather]: QWeatherIcon,
|
86 |
[Operator.ExeSQL]: ExeSqlIcon,
|
87 |
[Operator.Switch]: SwitchIcon,
|
|
|
88 |
};
|
89 |
|
90 |
export const operatorMap: Record<
|
@@ -194,6 +197,7 @@ export const operatorMap: Record<
|
|
194 |
[Operator.QWeather]: { backgroundColor: '#a4bbf3' },
|
195 |
[Operator.ExeSQL]: { backgroundColor: '#b9efe8' },
|
196 |
[Operator.Switch]: { backgroundColor: '#dbaff6' },
|
|
|
197 |
};
|
198 |
|
199 |
export const componentMenuList = [
|
@@ -263,6 +267,9 @@ export const componentMenuList = [
|
|
263 |
{
|
264 |
name: Operator.ExeSQL,
|
265 |
},
|
|
|
|
|
|
|
266 |
];
|
267 |
|
268 |
export const initialRetrievalValues = {
|
@@ -402,6 +409,8 @@ export const initialExeSqlValues = {
|
|
402 |
|
403 |
export const initialSwitchValues = { conditions: [] };
|
404 |
|
|
|
|
|
405 |
export const CategorizeAnchorPointPositions = [
|
406 |
{ top: 1, right: 34 },
|
407 |
{ top: 8, right: 18 },
|
@@ -472,6 +481,7 @@ export const RestrictedUpstreamMap = {
|
|
472 |
[Operator.QWeather]: [Operator.Begin, Operator.Retrieval],
|
473 |
[Operator.ExeSQL]: [Operator.Begin],
|
474 |
[Operator.Switch]: [Operator.Begin],
|
|
|
475 |
};
|
476 |
|
477 |
export const NodeMap = {
|
@@ -498,6 +508,7 @@ export const NodeMap = {
|
|
498 |
[Operator.QWeather]: 'ragNode',
|
499 |
[Operator.ExeSQL]: 'ragNode',
|
500 |
[Operator.Switch]: 'categorizeNode',
|
|
|
501 |
};
|
502 |
|
503 |
export const LanguageOptions = [
|
@@ -2652,3 +2663,17 @@ export const SwitchOperatorOptions = [
|
|
2652 |
];
|
2653 |
|
2654 |
export const SwitchLogicOperatorOptions = ['and', 'or'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
import { ReactComponent as PubMedIcon } from '@/assets/svg/pubmed.svg';
|
13 |
import { ReactComponent as QWeatherIcon } from '@/assets/svg/qweather.svg';
|
14 |
import { ReactComponent as SwitchIcon } from '@/assets/svg/switch.svg';
|
15 |
+
import { ReactComponent as WenCaiIcon } from '@/assets/svg/wencai.svg';
|
16 |
import { ReactComponent as WikipediaIcon } from '@/assets/svg/wikipedia.svg';
|
17 |
|
18 |
import { variableEnabledFieldMap } from '@/constants/chat';
|
|
|
60 |
QWeather = 'QWeather',
|
61 |
ExeSQL = 'ExeSQL',
|
62 |
Switch = 'Switch',
|
63 |
+
WenCai = 'WenCai',
|
64 |
}
|
65 |
|
66 |
export const operatorIconMap = {
|
|
|
87 |
[Operator.QWeather]: QWeatherIcon,
|
88 |
[Operator.ExeSQL]: ExeSqlIcon,
|
89 |
[Operator.Switch]: SwitchIcon,
|
90 |
+
[Operator.WenCai]: WenCaiIcon,
|
91 |
};
|
92 |
|
93 |
export const operatorMap: Record<
|
|
|
197 |
[Operator.QWeather]: { backgroundColor: '#a4bbf3' },
|
198 |
[Operator.ExeSQL]: { backgroundColor: '#b9efe8' },
|
199 |
[Operator.Switch]: { backgroundColor: '#dbaff6' },
|
200 |
+
[Operator.WenCai]: { backgroundColor: '#faac5b' },
|
201 |
};
|
202 |
|
203 |
export const componentMenuList = [
|
|
|
267 |
{
|
268 |
name: Operator.ExeSQL,
|
269 |
},
|
270 |
+
{
|
271 |
+
name: Operator.WenCai,
|
272 |
+
},
|
273 |
];
|
274 |
|
275 |
export const initialRetrievalValues = {
|
|
|
409 |
|
410 |
export const initialSwitchValues = { conditions: [] };
|
411 |
|
412 |
+
export const initialWenCaiValues = { top_n: 20, query_type: 'stock' };
|
413 |
+
|
414 |
export const CategorizeAnchorPointPositions = [
|
415 |
{ top: 1, right: 34 },
|
416 |
{ top: 8, right: 18 },
|
|
|
481 |
[Operator.QWeather]: [Operator.Begin, Operator.Retrieval],
|
482 |
[Operator.ExeSQL]: [Operator.Begin],
|
483 |
[Operator.Switch]: [Operator.Begin],
|
484 |
+
[Operator.WenCai]: [Operator.Begin],
|
485 |
};
|
486 |
|
487 |
export const NodeMap = {
|
|
|
508 |
[Operator.QWeather]: 'ragNode',
|
509 |
[Operator.ExeSQL]: 'ragNode',
|
510 |
[Operator.Switch]: 'categorizeNode',
|
511 |
+
[Operator.WenCai]: 'ragNode',
|
512 |
};
|
513 |
|
514 |
export const LanguageOptions = [
|
|
|
2663 |
];
|
2664 |
|
2665 |
export const SwitchLogicOperatorOptions = ['and', 'or'];
|
2666 |
+
|
2667 |
+
export const WenCaiQueryTypeOptions = [
|
2668 |
+
'stock',
|
2669 |
+
'zhishu',
|
2670 |
+
'fund',
|
2671 |
+
'hkstock',
|
2672 |
+
'usstock',
|
2673 |
+
'threeboard',
|
2674 |
+
'conbond',
|
2675 |
+
'insurance',
|
2676 |
+
'futures',
|
2677 |
+
'lccp',
|
2678 |
+
'foreign_exchange',
|
2679 |
+
];
|
web/src/pages/flow/flow-drawer/index.tsx
CHANGED
@@ -28,6 +28,7 @@ import RelevantForm from '../relevant-form';
|
|
28 |
import RetrievalForm from '../retrieval-form';
|
29 |
import RewriteQuestionForm from '../rewrite-question-form';
|
30 |
import SwitchForm from '../switch-form';
|
|
|
31 |
import WikipediaForm from '../wikipedia-form';
|
32 |
|
33 |
import styles from './index.less';
|
@@ -60,6 +61,7 @@ const FormMap = {
|
|
60 |
[Operator.QWeather]: QWeatherForm,
|
61 |
[Operator.ExeSQL]: ExeSQLForm,
|
62 |
[Operator.Switch]: SwitchForm,
|
|
|
63 |
};
|
64 |
|
65 |
const EmptyContent = () => <div>empty</div>;
|
|
|
28 |
import RetrievalForm from '../retrieval-form';
|
29 |
import RewriteQuestionForm from '../rewrite-question-form';
|
30 |
import SwitchForm from '../switch-form';
|
31 |
+
import WenCaiForm from '../wencai-form';
|
32 |
import WikipediaForm from '../wikipedia-form';
|
33 |
|
34 |
import styles from './index.less';
|
|
|
61 |
[Operator.QWeather]: QWeatherForm,
|
62 |
[Operator.ExeSQL]: ExeSQLForm,
|
63 |
[Operator.Switch]: SwitchForm,
|
64 |
+
[Operator.WenCai]: WenCaiForm,
|
65 |
};
|
66 |
|
67 |
const EmptyContent = () => <div>empty</div>;
|
web/src/pages/flow/hooks.ts
CHANGED
@@ -52,6 +52,7 @@ import {
|
|
52 |
initialRetrievalValues,
|
53 |
initialRewriteQuestionValues,
|
54 |
initialSwitchValues,
|
|
|
55 |
initialWikipediaValues,
|
56 |
} from './constant';
|
57 |
import { ICategorizeForm, IRelevantForm, ISwitchForm } from './interface';
|
@@ -113,6 +114,7 @@ export const useInitializeOperatorParams = () => {
|
|
113 |
[Operator.QWeather]: initialQWeatherValues,
|
114 |
[Operator.ExeSQL]: initialExeSqlValues,
|
115 |
[Operator.Switch]: initialSwitchValues,
|
|
|
116 |
};
|
117 |
}, [llmId]);
|
118 |
|
|
|
52 |
initialRetrievalValues,
|
53 |
initialRewriteQuestionValues,
|
54 |
initialSwitchValues,
|
55 |
+
initialWenCaiValues,
|
56 |
initialWikipediaValues,
|
57 |
} from './constant';
|
58 |
import { ICategorizeForm, IRelevantForm, ISwitchForm } from './interface';
|
|
|
114 |
[Operator.QWeather]: initialQWeatherValues,
|
115 |
[Operator.ExeSQL]: initialExeSqlValues,
|
116 |
[Operator.Switch]: initialSwitchValues,
|
117 |
+
[Operator.WenCai]: initialWenCaiValues,
|
118 |
};
|
119 |
}, [llmId]);
|
120 |
|
web/src/pages/flow/wencai-form/index.tsx
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 { WenCaiQueryTypeOptions } from '../constant';
|
6 |
+
import { IOperatorForm } from '../interface';
|
7 |
+
|
8 |
+
const WenCaiForm = ({ onValuesChange, form }: IOperatorForm) => {
|
9 |
+
const { t } = useTranslate('flow');
|
10 |
+
|
11 |
+
const wenCaiQueryTypeOptions = useMemo(() => {
|
12 |
+
return WenCaiQueryTypeOptions.map((x) => ({
|
13 |
+
value: x,
|
14 |
+
label: t(`wenCaiQueryTypeOptions.${x}`),
|
15 |
+
}));
|
16 |
+
}, [t]);
|
17 |
+
|
18 |
+
return (
|
19 |
+
<Form
|
20 |
+
name="basic"
|
21 |
+
labelCol={{ span: 6 }}
|
22 |
+
wrapperCol={{ span: 18 }}
|
23 |
+
autoComplete="off"
|
24 |
+
form={form}
|
25 |
+
onValuesChange={onValuesChange}
|
26 |
+
>
|
27 |
+
<TopNItem initialValue={10} max={99}></TopNItem>
|
28 |
+
<Form.Item label={t('queryType')} name={'query_type'}>
|
29 |
+
<Select options={wenCaiQueryTypeOptions}></Select>
|
30 |
+
</Form.Item>
|
31 |
+
</Form>
|
32 |
+
);
|
33 |
+
};
|
34 |
+
|
35 |
+
export default WenCaiForm;
|