From 1edbd36baf1c30e8b67d2264e0b42b95d367a2a3 Mon Sep 17 00:00:00 2001 From: KevinHuSh <kevinhu.sh@gmail.com> Date: Fri, 22 Mar 2024 15:35:06 +0800 Subject: [PATCH] add help info (#142) --- .../components/similarity-slider/index.tsx | 10 +- .../knowledge-setting/category-panel.tsx | 6 +- .../knowledge-setting/configuration.tsx | 14 +-- .../components/knowledge-setting/utils.ts | 113 ++++++++++++------ .../testing-control/index.tsx | 5 +- .../assistant-setting.tsx | 10 +- .../model-setting.tsx | 16 +-- .../prompt-engine.tsx | 11 +- .../setting-model/api-key-modal/index.tsx | 2 +- .../system-model-setting-modal/index.tsx | 22 ++-- .../user-setting/setting-profile/index.tsx | 6 - 11 files changed, 131 insertions(+), 84 deletions(-) diff --git a/web/src/components/similarity-slider/index.tsx b/web/src/components/similarity-slider/index.tsx index 7f60199..a70dfcb 100644 --- a/web/src/components/similarity-slider/index.tsx +++ b/web/src/components/similarity-slider/index.tsx @@ -15,7 +15,10 @@ const SimilaritySlider = ({ isTooltipShown = false }: IProps) => { <Form.Item<FieldType> label="Similarity threshold" name={'similarity_threshold'} - tooltip={isTooltipShown && 'coming soon'} + tooltip={isTooltipShown && `We use hybrid similarity score to evaluate distance between two lines of text. + It\'s weighted keywords similarity and vector cosine similarity. + If the similarity between query and chunk is less than this threshold, the chunk will be filtered out.` + } initialValue={0.2} > <Slider max={1} step={0.01} /> @@ -24,7 +27,10 @@ const SimilaritySlider = ({ isTooltipShown = false }: IProps) => { label="Vector similarity weight" name={'vector_similarity_weight'} initialValue={0.3} - tooltip={isTooltipShown && 'coming soon'} + tooltip={isTooltipShown && `We use hybrid similarity score to evaluate distance between two lines of text. + It\'s weighted keywords similarity and vector cosine similarity. + The sum of both weights is 1.0. + `} > <Slider max={1} step={0.01} /> </Form.Item> diff --git a/web/src/pages/add-knowledge/components/knowledge-setting/category-panel.tsx b/web/src/pages/add-knowledge/components/knowledge-setting/category-panel.tsx index 84af184..8b6168e 100644 --- a/web/src/pages/add-knowledge/components/knowledge-setting/category-panel.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-setting/category-panel.tsx @@ -33,16 +33,16 @@ const CategoryPanel = ({ chunkMethod }: { chunkMethod: string }) => { {imageList.length > 0 ? ( <> <Title level={5} className={styles.topTitle}> - {item.title} Category + "{item.title}" Chunking Method Description </Title> <p dangerouslySetInnerHTML={{ __html: item.description, }} ></p> - <Title level={5}>{item.title} Image Examples</Title> + <Title level={5}>"{item.title}" Examples</Title> <Text> - We've prepared detailed visual guides to make understanding easier + This visual guides is in order to make understanding easier for you. </Text> <Row gutter={[10, 10]} className={styles.imageRow}> diff --git a/web/src/pages/add-knowledge/components/knowledge-setting/configuration.tsx b/web/src/pages/add-knowledge/components/knowledge-setting/configuration.tsx index f69f631..fc8d056 100644 --- a/web/src/pages/add-knowledge/components/knowledge-setting/configuration.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-setting/configuration.tsx @@ -83,7 +83,7 @@ const ConfigurationForm = ({ form }: { form: FormInstance }) => { <Form.Item name="permission" label="Permissions" - tooltip="coming soon" + tooltip="If the permission is 'Team', all the team member can manipulate the knowledgebase." rules={[{ required: true }]} > <Radio.Group> @@ -93,22 +93,22 @@ const ConfigurationForm = ({ form }: { form: FormInstance }) => { </Form.Item> <Form.Item name="embd_id" - label="Embedding Model" + label="Embedding model" rules={[{ required: true }]} - tooltip="xx" + tooltip="The embedding model used to embedding chunks. It's unchangable once the knowledgebase has chunks. You need to delete all the chunks if you want to change it." > <Select - placeholder="Please select a country" + placeholder="Please select a embedding model" options={embeddingModelOptions} ></Select> </Form.Item> <Form.Item name="parser_id" label="Chunk method" - tooltip="xx" + tooltip="The instruction is at right." rules={[{ required: true }]} > - <Select placeholder="Please select a country"> + <Select placeholder="Please select a chunk method"> {parserList.map((x) => ( <Option value={x.value} key={x.value}> {x.label} @@ -122,7 +122,7 @@ const ConfigurationForm = ({ form }: { form: FormInstance }) => { if (parserId === 'naive') { return ( - <Form.Item label="Max token number" tooltip="xxx"> + <Form.Item label="Token number" tooltip="It determine the token number of a chunk approximately."> <Flex gap={20} align="center"> <Flex flex={1}> <Form.Item diff --git a/web/src/pages/add-knowledge/components/knowledge-setting/utils.ts b/web/src/pages/add-knowledge/components/knowledge-setting/utils.ts index 4edda9c..9cb8cd0 100644 --- a/web/src/pages/add-knowledge/components/knowledge-setting/utils.ts +++ b/web/src/pages/add-knowledge/components/knowledge-setting/utils.ts @@ -7,78 +7,117 @@ export const ImageMap = { book: getImageName('book', 4), laws: getImageName('law', 4), manual: getImageName('manual', 4), - media: getImageName('media', 2), + picture: getImageName('picture', 2), naive: getImageName('naive', 2), paper: getImageName('paper', 2), presentation: getImageName('presentation', 2), qa: getImageName('qa', 2), resume: getImageName('resume', 2), table: getImageName('table', 2), + one: getImageName('one', 2), }; export const TextMap = { book: { title: '', - description: `Supported file formats are docx, excel, pdf, txt. + description: `<p>Supported file formats are <b>DOCX</b>, <b>PDF</b>, <b>TXT</b>.</p><p> Since a book is long and not all the parts are useful, if it's a PDF, - please setup the page ranges for every book in order eliminate negative effects and save computing time for analyzing.`, + please setup the <i>page ranges</i> for every book in order eliminate negative effects and save computing time for analyzing.</p>`, }, laws: { title: '', - description: `Supported file formats are docx, pdf, txt.`, + description: `<p>Supported file formats are <b>DOCX</b>, <b>PDF</b>, <b>TXT</b>.</p><p> + Legal documents have a very rigorous writing format. We use text feature to detect split point. + </p><p> + The chunk granularity is consistent with 'ARTICLE', and all the upper level text will be included in the chunk. + </p>`, }, - manual: { title: '', description: `Only pdf is supported.` }, - media: { title: '', description: '' }, + manual: { title: '', description: `<p>Only <b>PDF</b> is supported.</p><p> + We assume manual has hierarchical section structure. We use the lowest section titles as pivots to slice documents. + So, the figures and tables in the same section will not be sliced apart, and chunk size might be large. + </p>` }, naive: { title: '', - description: `Supported file formats are docx, pdf, txt. - This method apply the naive ways to chunk files. - Successive text will be sliced into pieces using 'delimiter'. - Next, these successive pieces are merge into chunks whose token number is no more than 'Max token number'.`, + description: `<p>Supported file formats are <b>DOCX, EXCEL, PPT, IMAGE, PDF, TXT</b>.</p> + <p>This method apply the naive ways to chunk files: </p> + <p> + <li>Successive text will be sliced into pieces using vision detection model.</li> + <li>Next, these successive pieces are merge into chunks whose token number is no more than 'Token number'.</li></p>`, }, paper: { title: '', - description: `Only pdf is supported. - The special part is that, the abstract of the paper will be sliced as an entire chunk, and will not be sliced partly.`, + description: `<p>Only <b>PDF</b> file is supported.</p><p> + If our model works well, the paper will be sliced by it's sections, like <i>abstract, 1.1, 1.2</i>, etc. </p><p> + The benefit of doing this is that LLM can better summarize the content of relevant sections in the paper, + resulting in more comprehensive answers that help readers better understand the paper. + The downside is that it increases the context of the LLM conversation and adds computational cost, + so during the conversation, you can consider reducing the â€<b>topN</b>’ setting.</p>`, }, presentation: { title: '', - description: `The supported file formats are pdf, pptx. - Every page will be treated as a chunk. And the thumbnail of every page will be stored. - PPT file will be parsed by using this method automatically, setting-up for every PPT file is not necessary.`, + description: `<p>The supported file formats are <b>PDF</b>, <b>PPTX</b>.</p><p> + Every page will be treated as a chunk. And the thumbnail of every page will be stored.</p><p> + <i>All the PPT files you uploaded will be chunked by using this method automatically, setting-up for every PPT file is not necessary.</i></p>`, }, qa: { title: '', - description: `Excel and csv(txt) format files are supported. - If the file is in excel format, there should be 2 column question and answer without header. + description: `<p><b>EXCEL</b> and <b>CSV/TXT</b> files are supported.</p><p> + If the file is in excel format, there should be 2 columns question and answer without header. And question column is ahead of answer column. - And it's O.K if it has multiple sheets as long as the columns are rightly composed. + And it's O.K if it has multiple sheets as long as the columns are rightly composed.</p><p> - If it's in csv format, it should be UTF-8 encoded. Use TAB as delimiter to separate question and answer. + If it's in csv format, it should be UTF-8 encoded. Use TAB as delimiter to separate question and answer.</p><p> - All the deformed lines will be ignored. - Every pair of Q&A will be treated as a chunk.`, + <i>All the deformed lines will be ignored. + Every pair of Q&A will be treated as a chunk.</i></p>`, }, resume: { title: '', - description: `The supported file formats are pdf, docx and txt.`, + description: `<p>The supported file formats are <b>DOCX</b>, <b>PDF</b>, <b>TXT</b>. + </p><p> + The rĂ©sumĂ© comes in a variety of formats, just like a person’s personality, but we often have to organize them into structured data that makes it easy to search. + </p><p> + Instead of chunking the rĂ©sumĂ©, we parse the rĂ©sumĂ© into structured data. As a HR, you can dump all the rĂ©sumĂ© you have, + the you can list all the candidates that match the qualifications just by talk with <i>'RagFlow'</i>. + </p> + `, }, table: { title: '', - description: `Excel and csv(txt) format files are supported. - For csv or txt file, the delimiter between columns is TAB. - The first line must be column headers. - Column headers must be meaningful terms inorder to make our NLP model understanding. - It's good to enumerate some synonyms using slash '/' to separate, and even better to - enumerate values using brackets like 'gender/sex(male, female)'. - Here are some examples for headers: - 1. supplier/vendor\tcolor(yellow, red, brown)\tgender/sex(male, female)\tsize(M,L,XL,XXL) - 2. 姓ĺŤ/ĺŤĺ—\t电话/手机/微信\t最é«ĺ¦ĺŽ†ďĽé«ä¸ďĽŚčŚé«ďĽŚçˇ•ĺŁ«ďĽŚćś¬ç§‘,博士,ĺťä¸ďĽŚä¸ćŠ€ďĽŚä¸ä¸“,专科,专升本,MPA,MBA,EMBA) - Every row in table will be treated as a chunk. - -visual: - Image files are supported. Video is comming soon. - If the picture has text in it, OCR is applied to extract the text as a description of it. - If the text extracted by OCR is not enough, visual LLM is used to get the descriptions.`, + description: `<p><b>EXCEL</b> and <b>CSV/TXT</b> format files are supported.</p><p> + Here're some tips: + <ul> + <li>For csv or txt file, the delimiter between columns is <em><b>TAB</b></em>.</li> + <li>The first line must be column headers.</li> + <li>Column headers must be meaningful terms in order to make our LLM understanding. + It's good to enumerate some synonyms using slash <i>'/'</i> to separate, and even better to + enumerate values using brackets like <i>'gender/sex(male, female)'</i>.<p> + Here are some examples for headers:<ol> + <li>supplier/vendor<b>'TAB'</b>color(yellow, red, brown)<b>'TAB'</b>gender/sex(male, female)<b>'TAB'</b>size(M,L,XL,XXL)</li> + <li>姓ĺŤ/ĺŤĺ—<b>'TAB'</b>电话/手机/微信<b>'TAB'</b>最é«ĺ¦ĺŽ†ďĽé«ä¸ďĽŚčŚé«ďĽŚçˇ•ĺŁ«ďĽŚćś¬ç§‘,博士,ĺťä¸ďĽŚä¸ćŠ€ďĽŚä¸ä¸“,专科,专升本,MPA,MBA,EMBA)</li> + </ol> + </p> + </li> + <li>Every row in table will be treated as a chunk.</li> + </ul>`, +}, +picture: { + title: '', + description: ` + <p>Image files are supported. Video is coming soon.</p><p> + If the picture has text in it, OCR is applied to extract the text as its text description. + </p><p> + If the text extracted by OCR is not enough, visual LLM is used to get the descriptions. + </p>`, + }, +one: { + title: '', + description: ` + <p>Supported file formats are <b>DOCX, EXCEL, PDF, TXT</b>. + </p><p> + For a document, it will be treated as an entire chunk, no split at all. + </p><p> + If you don't trust any chunk method and the selected LLM's context length covers the document length, you can try this method. + </p>`, }, }; diff --git a/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx b/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx index 81d9a95..138614a 100644 --- a/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx @@ -53,9 +53,10 @@ const TestingControl = ({ form, handleTesting }: IProps) => { > <SimilaritySlider isTooltipShown></SimilaritySlider> <Form.Item<FieldType> - label="Top k" + label="Top K" name={'top_k'} - tooltip="coming soon" + tooltip="For the computaion cost, not all the retrieved chunk will be computed vector cosine similarity with query. + The bigger the 'Top K' is, the higher the recall rate is, the slower the retrieval speed is." > <Slider marks={{ 0: 0, 2048: 2048 }} max={2048} /> </Form.Item> diff --git a/web/src/pages/chat/chat-configuration-modal/assistant-setting.tsx b/web/src/pages/chat/chat-configuration-modal/assistant-setting.tsx index 15b670e..bca69b6 100644 --- a/web/src/pages/chat/chat-configuration-modal/assistant-setting.tsx +++ b/web/src/pages/chat/chat-configuration-modal/assistant-setting.tsx @@ -55,6 +55,7 @@ const AssistantSetting = ({ show }: ISegmentedContentProps) => { label="Language" initialValue={'Chinese'} tooltip="coming soon" + style={{display:'none'}} > <Select options={[ @@ -66,22 +67,23 @@ const AssistantSetting = ({ show }: ISegmentedContentProps) => { <Form.Item name={['prompt_config', 'empty_response']} label="Empty response" - tooltip="coming soon" + tooltip="If nothing is retrieved with user's question in the knowledgebase, it will use this as an answer. + If you want LLM comes up with its own opinion when nothing is retrieved, leave this blank." > <Input placeholder="" /> </Form.Item> <Form.Item name={['prompt_config', 'prologue']} label="Set an opener" - tooltip="coming soon" + tooltip="How do you want to welcome your clients?" initialValue={"Hi! I'm your assistant, what can I do for you?"} > <Input.TextArea autoSize={{ minRows: 5 }} /> </Form.Item> <Form.Item - label="Select one context" + label="Knowledgebases" name="kb_ids" - tooltip="coming soon" + tooltip="Select knowledgebases associated." rules={[ { required: true, diff --git a/web/src/pages/chat/chat-configuration-modal/model-setting.tsx b/web/src/pages/chat/chat-configuration-modal/model-setting.tsx index cf2ec45..87390ab 100644 --- a/web/src/pages/chat/chat-configuration-modal/model-setting.tsx +++ b/web/src/pages/chat/chat-configuration-modal/model-setting.tsx @@ -46,16 +46,16 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => { <Form.Item label="Model" name="llm_id" - tooltip="coming soon" + tooltip="Large language chat model" rules={[{ required: true, message: 'Please select!' }]} > <Select options={modelOptions} showSearch /> </Form.Item> <Divider></Divider> <Form.Item - label="Parameters" + label="Freedom" name="parameters" - tooltip="coming soon" + tooltip="'Precise' means the LLM will be conservative and answer your question cautiously. 'Improvise' means the you want LLM talk much and freely. 'Balance' is between cautiously and freely." initialValue={ModelVariableType.Precise} // rules={[{ required: true, message: 'Please input!' }]} > @@ -64,7 +64,7 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => { onChange={handleParametersChange} /> </Form.Item> - <Form.Item label="Temperature" tooltip={'xx'}> + <Form.Item label="Temperature" tooltip={'This parameter controls the randomness of predictions by the model. A lower temperature makes the model more confident in its responses, while a higher temperature makes it more creative and diverse.'}> <Flex gap={20} align="center"> <Form.Item name={'temperatureEnabled'} @@ -96,7 +96,7 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => { </Form.Item> </Flex> </Form.Item> - <Form.Item label="Top P" tooltip={'xx'}> + <Form.Item label="Top P" tooltip={'Also known as “nucleus sampling,” this parameter sets a threshold to select a smaller set of words to sample from. It focuses on the most likely words, cutting off the less probable ones.'}> <Flex gap={20} align="center"> <Form.Item name={'topPEnabled'} valuePropName="checked" noStyle> <Switch size="small" /> @@ -124,7 +124,7 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => { </Form.Item> </Flex> </Form.Item> - <Form.Item label="Presence Penalty" tooltip={'xx'}> + <Form.Item label="Presence Penalty" tooltip={'This discourages the model from repeating the same information by penalizing words that have already appeared in the conversation.'}> <Flex gap={20} align="center"> <Form.Item name={'presencePenaltyEnabled'} @@ -160,7 +160,7 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => { </Form.Item> </Flex> </Form.Item> - <Form.Item label="Frequency Penalty" tooltip={'xx'}> + <Form.Item label="Frequency Penalty" tooltip={'Similar to the presence penalty, this reduces the model’s tendency to repeat the same words frequently.'}> <Flex gap={20} align="center"> <Form.Item name={'frequencyPenaltyEnabled'} @@ -196,7 +196,7 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => { </Form.Item> </Flex> </Form.Item> - <Form.Item label="Max Tokens" tooltip={'xx'}> + <Form.Item label="Max Tokens" tooltip={'This sets the maximum length of the model’s output, measured in the number of tokens (words or pieces of words).'}> <Flex gap={20} align="center"> <Form.Item name={'maxTokensEnabled'} valuePropName="checked" noStyle> <Switch size="small" /> diff --git a/web/src/pages/chat/chat-configuration-modal/prompt-engine.tsx b/web/src/pages/chat/chat-configuration-modal/prompt-engine.tsx index 758330a..1fc6e10 100644 --- a/web/src/pages/chat/chat-configuration-modal/prompt-engine.tsx +++ b/web/src/pages/chat/chat-configuration-modal/prompt-engine.tsx @@ -154,7 +154,7 @@ const PromptEngine = ( <Form.Item label="System" rules={[{ required: true, message: 'Please input!' }]} - tooltip="coming soon" + tooltip="Instructions you need LLM to follow when LLM answers questions, like charactor design, answer length and answer language etc." name={['prompt_config', 'system']} initialValue={`ä˝ ćŻä¸€ä¸Şć™şč˝ĺŠ©ć‰‹ďĽŚčŻ·ć€»ç»“知识库的内容来回ç”é—®é˘ďĽŚčŻ·ĺ—举知识库ä¸çš„数据详细回ç”。当所有知识库内容é˝ä¸Žé—®é˘ć— ĺ…łć—¶ďĽŚä˝ çš„ĺ›žç”必须包括“知识库ä¸ćśŞć‰ľĺ°ć‚¨č¦çš„ç”ćˇďĽâ€ťčż™ĺŹĄčŻťă€‚回ç”需č¦č€č™‘čŠĺ¤©ĺŽ†ĺŹ˛ă€‚ 以下ćŻçźĄčŻ†ĺş“: @@ -166,10 +166,10 @@ const PromptEngine = ( <Divider></Divider> <SimilaritySlider isTooltipShown></SimilaritySlider> <Form.Item<FieldType> - label="Top n" + label="Top N" name={'top_n'} initialValue={8} - tooltip={'xxx'} + tooltip={`Not all the chunks whose similarity score is above the 'simialrity threashold' will be feed to LLMs. LLM can only see these 'Top N' chunks.`} > <Slider max={30} /> </Form.Item> @@ -178,7 +178,10 @@ const PromptEngine = ( <Col span={7} className={styles.variableAlign}> <label className={styles.variableLabel}> Variables - <Tooltip title="coming soon"> + <Tooltip title="If you use dialog APIs, the varialbes might help you chat with your clients with different strategies. + The variables are used to fill-in the 'System' part in prompt in order to give LLM a hint. + The 'knowledge' is a very special variable which will be filled-in with the retrieved chunks. + All the variables in 'System' should be curly bracketed."> <QuestionCircleOutlined className={styles.variableIcon} /> </Tooltip> </label> diff --git a/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx b/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx index fabdec4..d35186e 100644 --- a/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx +++ b/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx @@ -66,7 +66,7 @@ const ApiKeyModal = ({ <Form.Item<FieldType> label="Api-Key" name="api_key" - tooltip="coming soon" + tooltip="The API key can be obtained by registering the corresponding LLM supplier." rules={[{ required: true, message: 'Please input api key!' }]} > <Input /> diff --git a/web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx b/web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx index 54ccc72..1deb482 100644 --- a/web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx +++ b/web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx @@ -43,25 +43,27 @@ const SystemModelSettingModal = ({ confirmLoading={loading} > <Form form={form} onValuesChange={onFormLayoutChange} layout={'vertical'}> - <Form.Item - label="Sequence2txt model" - name="asr_id" - tooltip="coming soon" - > - <Select options={allOptions[LlmModelType.Speech2text]} /> + + <Form.Item label="Chat model" name="llm_id" tooltip="The default chat LLM all the newly created knowledgebase will use."> + <Select options={allOptions[LlmModelType.Chat]} /> </Form.Item> - <Form.Item label="Embedding model" name="embd_id" tooltip="coming soon"> + <Form.Item label="Embedding model" name="embd_id" tooltip="The default embedding model all the newly created knowledgebase will use."> <Select options={allOptions[LlmModelType.Embedding]} /> </Form.Item> <Form.Item label="Img2txt model" name="img2txt_id" - tooltip="coming soon" + tooltip="The default multi-module model all the newly created knowledgebase will use. It can describe a picture or video." > <Select options={allOptions[LlmModelType.Image2text]} /> </Form.Item> - <Form.Item label="Chat model" name="llm_id" tooltip="coming soon"> - <Select options={allOptions[LlmModelType.Chat]} /> + + <Form.Item + label="Sequence2txt model" + name="asr_id" + tooltip="The default ASR model all the newly created knowledgebase will use. Use this model to translate voices to corresponding text." + > + <Select options={allOptions[LlmModelType.Speech2text]} /> </Form.Item> </Form> </Modal> diff --git a/web/src/pages/user-setting/setting-profile/index.tsx b/web/src/pages/user-setting/setting-profile/index.tsx index 13ea15f..bb3e3f9 100644 --- a/web/src/pages/user-setting/setting-profile/index.tsx +++ b/web/src/pages/user-setting/setting-profile/index.tsx @@ -110,9 +110,6 @@ const UserSettingProfile = () => { <div> <Space> Your photo - <Tooltip title="coming soon"> - <QuestionCircleOutlined /> - </Tooltip> </Space> <div>This will be displayed on your profile.</div> </div> @@ -140,7 +137,6 @@ const UserSettingProfile = () => { <Form.Item<FieldType> label="Color schema" name="color_schema" - tooltip="coming soon" rules={[ { required: true, message: 'Please select your color schema!' }, ]} @@ -154,7 +150,6 @@ const UserSettingProfile = () => { <Form.Item<FieldType> label="Language" name="language" - tooltip="coming soon" rules={[{ required: true, message: 'Please input your language!' }]} > <Select placeholder="select your language"> @@ -166,7 +161,6 @@ const UserSettingProfile = () => { <Form.Item<FieldType> label="Timezone" name="timezone" - tooltip="coming soon" rules={[{ required: true, message: 'Please input your timezone!' }]} > <Select placeholder="select your timezone" showSearch> -- GitLab