fix: null pointer (#3130)
* fix: null pointer * perf: not input text * update doc url
This commit is contained in:
@@ -17,7 +17,6 @@ import {
|
|||||||
Input_Template_History,
|
Input_Template_History,
|
||||||
Input_Template_System_Prompt,
|
Input_Template_System_Prompt,
|
||||||
Input_Template_UserChatInput,
|
Input_Template_UserChatInput,
|
||||||
Input_Template_Text_Quote,
|
|
||||||
Input_Template_File_Link_Prompt
|
Input_Template_File_Link_Prompt
|
||||||
} from '../../input';
|
} from '../../input';
|
||||||
import { chatNodeSystemPromptTip, systemPromptTip } from '../../tip';
|
import { chatNodeSystemPromptTip, systemPromptTip } from '../../tip';
|
||||||
@@ -55,7 +54,7 @@ export const AiChatModule: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('workflow:template.ai_chat_intro'),
|
intro: i18nT('workflow:template.ai_chat_intro'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
isTool: true,
|
isTool: true,
|
||||||
courseUrl: '/docs/workflow/modules/ai_chat/',
|
courseUrl: '/docs/guide/workbench/workflow/ai_chat/',
|
||||||
version: '4813',
|
version: '4813',
|
||||||
inputs: [
|
inputs: [
|
||||||
Input_Template_SettingAiModel,
|
Input_Template_SettingAiModel,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export const AssignedAnswerModule: FlowNodeTemplateType = {
|
|||||||
avatar: 'core/workflow/template/reply',
|
avatar: 'core/workflow/template/reply',
|
||||||
name: i18nT('workflow:assigned_reply'),
|
name: i18nT('workflow:assigned_reply'),
|
||||||
intro: i18nT('workflow:intro_assigned_reply'),
|
intro: i18nT('workflow:intro_assigned_reply'),
|
||||||
courseUrl: '/docs/workflow/modules/reply/',
|
courseUrl: '/docs/guide/workbench/workflow/reply/',
|
||||||
version: '481',
|
version: '481',
|
||||||
isTool: true,
|
isTool: true,
|
||||||
inputs: [
|
inputs: [
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export const ClassifyQuestionModule: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('workflow:intro_question_classification'),
|
intro: i18nT('workflow:intro_question_classification'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
version: '481',
|
version: '481',
|
||||||
courseUrl: '/docs/workflow/modules/question_classify/',
|
courseUrl: '/docs/guide/workbench/workflow/question_classify/',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
...Input_Template_SelectAIModel,
|
...Input_Template_SelectAIModel,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export const ContextExtractModule: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('workflow:intro_text_content_extraction'),
|
intro: i18nT('workflow:intro_text_content_extraction'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
isTool: true,
|
isTool: true,
|
||||||
courseUrl: '/docs/workflow/modules/content_extract/',
|
courseUrl: '/docs/guide/workbench/workflow/content_extract/',
|
||||||
version: '481',
|
version: '481',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export const CustomFeedbackNode: FlowNodeTemplateType = {
|
|||||||
avatar: 'core/workflow/template/customFeedback',
|
avatar: 'core/workflow/template/customFeedback',
|
||||||
name: i18nT('workflow:custom_feedback'),
|
name: i18nT('workflow:custom_feedback'),
|
||||||
intro: i18nT('workflow:intro_custom_feedback'),
|
intro: i18nT('workflow:intro_custom_feedback'),
|
||||||
courseUrl: '/docs/workflow/modules/custom_feedback/',
|
courseUrl: '/docs/guide/workbench/workflow/custom_feedback/',
|
||||||
version: '486',
|
version: '486',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ export const DatasetConcatModule: FlowNodeTemplateType = {
|
|||||||
|
|
||||||
showStatus: false,
|
showStatus: false,
|
||||||
version: '486',
|
version: '486',
|
||||||
|
courseUrl: '/docs/guide/workbench/workflow/knowledge_base_search_merge/',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
key: NodeInputKeyEnum.datasetMaxTokens,
|
key: NodeInputKeyEnum.datasetMaxTokens,
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export const DatasetSearchModule: FlowNodeTemplateType = {
|
|||||||
intro: Dataset_SEARCH_DESC,
|
intro: Dataset_SEARCH_DESC,
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
isTool: true,
|
isTool: true,
|
||||||
courseUrl: '/docs/workflow/modules/dataset_search/',
|
courseUrl: '/docs/guide/workbench/workflow/dataset_search/',
|
||||||
version: '481',
|
version: '481',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export const HttpNode468: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('workflow:intro_http_request'),
|
intro: i18nT('workflow:intro_http_request'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
isTool: true,
|
isTool: true,
|
||||||
courseUrl: '/docs/workflow/modules/http/',
|
courseUrl: '/docs/guide/workbench/workflow/http/',
|
||||||
version: '481',
|
version: '481',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const IfElseNode: FlowNodeTemplateType = {
|
|||||||
name: i18nT('workflow:condition_checker'),
|
name: i18nT('workflow:condition_checker'),
|
||||||
intro: i18nT('workflow:execute_different_branches_based_on_conditions'),
|
intro: i18nT('workflow:execute_different_branches_based_on_conditions'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
courseUrl: '/docs/workflow/modules/tfswitch/',
|
courseUrl: '/docs/guide/workbench/workflow/tfswitch/',
|
||||||
version: '481',
|
version: '481',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export const UserSelectNode: FlowNodeTemplateType = {
|
|||||||
intro: i18nT(`app:workflow.user_select_tip`),
|
intro: i18nT(`app:workflow.user_select_tip`),
|
||||||
isTool: true,
|
isTool: true,
|
||||||
version: '489',
|
version: '489',
|
||||||
|
courseUrl: '/docs/guide/workbench/workflow/user-selection/',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
key: NodeInputKeyEnum.description,
|
key: NodeInputKeyEnum.description,
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export const LafModule: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('workflow:intro_laf_function_call'),
|
intro: i18nT('workflow:intro_laf_function_call'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
isTool: true,
|
isTool: true,
|
||||||
courseUrl: '/docs/workflow/modules/laf/',
|
courseUrl: '/docs/guide/workbench/workflow/laf/',
|
||||||
version: '481',
|
version: '481',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ export const LoopNode: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('workflow:intro_loop'),
|
intro: i18nT('workflow:intro_loop'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
version: '4811',
|
version: '4811',
|
||||||
|
courseUrl: '/docs/guide/workbench/workflow/loop/',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
key: NodeInputKeyEnum.loopInputArray,
|
key: NodeInputKeyEnum.loopInputArray,
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ export const ReadFilesNode: FlowNodeTemplateType = {
|
|||||||
intro: i18nT('app:workflow.read_files_tip'),
|
intro: i18nT('app:workflow.read_files_tip'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
version: '4812',
|
version: '4812',
|
||||||
isTool: true,
|
isTool: false,
|
||||||
|
courseUrl: '/docs/guide/course/fileinput/',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
key: NodeInputKeyEnum.fileUrlList,
|
key: NodeInputKeyEnum.fileUrlList,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export const CodeNode: FlowNodeTemplateType = {
|
|||||||
name: i18nT('workflow:code_execution'),
|
name: i18nT('workflow:code_execution'),
|
||||||
intro: i18nT('workflow:execute_a_simple_script_code_usually_for_complex_data_processing'),
|
intro: i18nT('workflow:execute_a_simple_script_code_usually_for_complex_data_processing'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
courseUrl: '/docs/workflow/modules/sandbox/',
|
courseUrl: '/docs/guide/workbench/workflow/sandbox/',
|
||||||
version: '482',
|
version: '482',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const TextEditorNode: FlowNodeTemplateType = {
|
|||||||
avatar: 'core/workflow/template/textConcat',
|
avatar: 'core/workflow/template/textConcat',
|
||||||
name: i18nT('workflow:text_concatenation'),
|
name: i18nT('workflow:text_concatenation'),
|
||||||
intro: i18nT('workflow:intro_text_concatenation'),
|
intro: i18nT('workflow:intro_text_concatenation'),
|
||||||
courseUrl: '/docs/workflow/modules/text_editor/',
|
courseUrl: '/docs/guide/workbench/workflow/text_editor/',
|
||||||
version: '4813',
|
version: '4813',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export const ToolModule: FlowNodeTemplateType = {
|
|||||||
name: i18nT('workflow:template.tool_call'),
|
name: i18nT('workflow:template.tool_call'),
|
||||||
intro: i18nT('workflow:template.tool_call_intro'),
|
intro: i18nT('workflow:template.tool_call_intro'),
|
||||||
showStatus: true,
|
showStatus: true,
|
||||||
courseUrl: '/docs/workflow/modules/tool/',
|
courseUrl: '/docs/guide/workbench/workflow/tool/',
|
||||||
version: '4813',
|
version: '4813',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ export const VariableUpdateNode: FlowNodeTemplateType = {
|
|||||||
showStatus: false,
|
showStatus: false,
|
||||||
isTool: true,
|
isTool: true,
|
||||||
version: '481',
|
version: '481',
|
||||||
|
courseUrl: '/docs/guide/workbench/workflow/variable_update/',
|
||||||
inputs: [
|
inputs: [
|
||||||
{
|
{
|
||||||
key: NodeInputKeyEnum.updateList,
|
key: NodeInputKeyEnum.updateList,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export const WorkflowStart: FlowNodeTemplateType = {
|
|||||||
intro: '',
|
intro: '',
|
||||||
forbidDelete: true,
|
forbidDelete: true,
|
||||||
unique: true,
|
unique: true,
|
||||||
courseUrl: '/docs/workflow/modules/input/',
|
courseUrl: '/docs/guide/workbench/workflow/input/',
|
||||||
version: '481',
|
version: '481',
|
||||||
inputs: [{ ...Input_Template_UserChatInput, toolDescription: i18nT('workflow:user_question') }],
|
inputs: [{ ...Input_Template_UserChatInput, toolDescription: i18nT('workflow:user_question') }],
|
||||||
outputs: [
|
outputs: [
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ export const dispatchRunTools = async (props: DispatchToolModuleProps): Promise<
|
|||||||
maxFiles: chatConfig?.fileSelectConfig?.maxFiles || 20,
|
maxFiles: chatConfig?.fileSelectConfig?.maxFiles || 20,
|
||||||
teamId,
|
teamId,
|
||||||
fileLinks,
|
fileLinks,
|
||||||
inputFiles: globalFiles
|
inputFiles: globalFiles,
|
||||||
|
hasReadFilesTool
|
||||||
});
|
});
|
||||||
|
|
||||||
const concatenateSystemPrompt = [
|
const concatenateSystemPrompt = [
|
||||||
@@ -184,7 +185,7 @@ export const dispatchRunTools = async (props: DispatchToolModuleProps): Promise<
|
|||||||
}
|
}
|
||||||
|
|
||||||
const lastMessage = adaptMessages[adaptMessages.length - 1];
|
const lastMessage = adaptMessages[adaptMessages.length - 1];
|
||||||
if (typeof lastMessage.content === 'string') {
|
if (typeof lastMessage?.content === 'string') {
|
||||||
lastMessage.content = replaceVariable(Prompt_Tool_Call, {
|
lastMessage.content = replaceVariable(Prompt_Tool_Call, {
|
||||||
question: lastMessage.content
|
question: lastMessage.content
|
||||||
});
|
});
|
||||||
@@ -271,7 +272,8 @@ const getMultiInput = async ({
|
|||||||
requestOrigin,
|
requestOrigin,
|
||||||
maxFiles,
|
maxFiles,
|
||||||
teamId,
|
teamId,
|
||||||
inputFiles
|
inputFiles,
|
||||||
|
hasReadFilesTool
|
||||||
}: {
|
}: {
|
||||||
histories: ChatItemType[];
|
histories: ChatItemType[];
|
||||||
fileLinks?: string[];
|
fileLinks?: string[];
|
||||||
@@ -279,9 +281,10 @@ const getMultiInput = async ({
|
|||||||
maxFiles: number;
|
maxFiles: number;
|
||||||
teamId: string;
|
teamId: string;
|
||||||
inputFiles: UserChatItemValueItemType['file'][];
|
inputFiles: UserChatItemValueItemType['file'][];
|
||||||
|
hasReadFilesTool: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
// Not file quote
|
// Not file quote
|
||||||
if (!fileLinks) {
|
if (!fileLinks || hasReadFilesTool) {
|
||||||
return {
|
return {
|
||||||
documentQuoteText: '',
|
documentQuoteText: '',
|
||||||
userFiles: inputFiles
|
userFiles: inputFiles
|
||||||
@@ -323,28 +326,40 @@ const toolCallMessagesAdapt = ({
|
|||||||
}: {
|
}: {
|
||||||
userInput: UserChatItemValueItemType[];
|
userInput: UserChatItemValueItemType[];
|
||||||
skip?: boolean;
|
skip?: boolean;
|
||||||
}) => {
|
}): UserChatItemValueItemType[] => {
|
||||||
if (skip) return userInput;
|
if (skip) return userInput;
|
||||||
|
|
||||||
const files = userInput.filter((item) => item.type === 'file');
|
const files = userInput.filter((item) => item.type === 'file');
|
||||||
|
|
||||||
if (files.length > 0) {
|
if (files.length > 0) {
|
||||||
return userInput.map((item) => {
|
const filesCount = files.filter((file) => file.file?.type === 'file').length;
|
||||||
if (item.type === 'text') {
|
const imgCount = files.filter((file) => file.file?.type === 'image').length;
|
||||||
const filesCount = files.filter((file) => file.file?.type === 'file').length;
|
|
||||||
const imgCount = files.filter((file) => file.file?.type === 'image').length;
|
|
||||||
const text = item.text?.content || '';
|
|
||||||
|
|
||||||
return {
|
if (userInput.some((item) => item.type === 'text')) {
|
||||||
...item,
|
return userInput.map((item) => {
|
||||||
text: {
|
if (item.type === 'text') {
|
||||||
content: getMultiplePrompt({ fileCount: filesCount, imgCount, question: text })
|
const text = item.text?.content || '';
|
||||||
}
|
|
||||||
};
|
return {
|
||||||
|
...item,
|
||||||
|
text: {
|
||||||
|
content: getMultiplePrompt({ fileCount: filesCount, imgCount, question: text })
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Every input is a file
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
type: ChatItemValueTypeEnum.text,
|
||||||
|
text: {
|
||||||
|
content: getMultiplePrompt({ fileCount: filesCount, imgCount, question: '' })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
];
|
||||||
return item;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return userInput;
|
return userInput;
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ const AIChatSettingsModal = ({
|
|||||||
{t('common:core.ai.AI settings')}
|
{t('common:core.ai.AI settings')}
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link
|
<Link
|
||||||
href={getDocPath('/docs/course/ai_settings/')}
|
href={getDocPath('/docs/guide/course/ai_settings/')}
|
||||||
target={'_blank'}
|
target={'_blank'}
|
||||||
ml={1}
|
ml={1}
|
||||||
textDecoration={'underline'}
|
textDecoration={'underline'}
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ const InputGuideConfig = ({
|
|||||||
<Flex mt={8} alignItems={'center'}>
|
<Flex mt={8} alignItems={'center'}>
|
||||||
<FormLabel>{chatT('custom_input_guide_url')}</FormLabel>
|
<FormLabel>{chatT('custom_input_guide_url')}</FormLabel>
|
||||||
<Flex
|
<Flex
|
||||||
onClick={() => window.open(getDocPath('/docs/course/chat_input_guide'))}
|
onClick={() => window.open(getDocPath('/docs/guide/course/chat_input_guide/'))}
|
||||||
color={'primary.700'}
|
color={'primary.700'}
|
||||||
alignItems={'center'}
|
alignItems={'center'}
|
||||||
cursor={'pointer'}
|
cursor={'pointer'}
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ const LafAccountModal = ({
|
|||||||
<Box fontSize={'sm'} color={'myGray.500'}>
|
<Box fontSize={'sm'} color={'myGray.500'}>
|
||||||
<Box>{t('common:support.user.Laf account intro')}</Box>
|
<Box>{t('common:support.user.Laf account intro')}</Box>
|
||||||
<Box textDecoration={'underline'}>
|
<Box textDecoration={'underline'}>
|
||||||
<Link href={getDocPath('/docs/workflow/modules/laf/')} isExternal>
|
<Link href={getDocPath('/docs/guide/workbench/workflow/laf/')} isExternal>
|
||||||
{t('common:support.user.Laf account course')}
|
{t('common:support.user.Laf account course')}
|
||||||
</Link>
|
</Link>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -90,7 +90,10 @@ const FeiShuEditModal = ({
|
|||||||
<Box color="myGray.600">{t('publish:feishu_api')}</Box>
|
<Box color="myGray.600">{t('publish:feishu_api')}</Box>
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link
|
<Link
|
||||||
href={feConfigs.openAPIDocUrl || getDocPath('/docs/course/feishu')}
|
href={
|
||||||
|
feConfigs.openAPIDocUrl ||
|
||||||
|
getDocPath('/docs/use-cases/external-integration/feishu/')
|
||||||
|
}
|
||||||
target={'_blank'}
|
target={'_blank'}
|
||||||
ml={2}
|
ml={2}
|
||||||
color={'primary.500'}
|
color={'primary.500'}
|
||||||
|
|||||||
@@ -73,7 +73,10 @@ const FeiShu = ({ appId }: { appId: string }) => {
|
|||||||
</Box>
|
</Box>
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link
|
<Link
|
||||||
href={feConfigs.openAPIDocUrl || getDocPath('/docs/course/feishu')}
|
href={
|
||||||
|
feConfigs.openAPIDocUrl ||
|
||||||
|
getDocPath('/docs/use-cases/external-integration/feishu/')
|
||||||
|
}
|
||||||
target={'_blank'}
|
target={'_blank'}
|
||||||
color={'primary.500'}
|
color={'primary.500'}
|
||||||
fontSize={'sm'}
|
fontSize={'sm'}
|
||||||
|
|||||||
@@ -96,7 +96,10 @@ const OffiAccountEditModal = ({
|
|||||||
<Box color="myGray.600">{t('publish:official_account.params')}</Box>
|
<Box color="myGray.600">{t('publish:official_account.params')}</Box>
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link
|
<Link
|
||||||
href={feConfigs.openAPIDocUrl || getDocPath('/docs/course/official_account')}
|
href={
|
||||||
|
feConfigs.openAPIDocUrl ||
|
||||||
|
getDocPath('/docs/use-cases/external-integration/official_account/')
|
||||||
|
}
|
||||||
target={'_blank'}
|
target={'_blank'}
|
||||||
ml={2}
|
ml={2}
|
||||||
color={'primary.500'}
|
color={'primary.500'}
|
||||||
|
|||||||
@@ -75,7 +75,10 @@ const OffiAccount = ({ appId }: { appId: string }) => {
|
|||||||
|
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link
|
<Link
|
||||||
href={feConfigs.openAPIDocUrl || getDocPath('/docs/course/official_account')}
|
href={
|
||||||
|
feConfigs.openAPIDocUrl ||
|
||||||
|
getDocPath('/docs/use-cases/external-integration/official_account/')
|
||||||
|
}
|
||||||
target={'_blank'}
|
target={'_blank'}
|
||||||
ml={2}
|
ml={2}
|
||||||
color={'primary.500'}
|
color={'primary.500'}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ const WebsiteConfigModal = ({
|
|||||||
{t('common:core.dataset.website.Config Description')}
|
{t('common:core.dataset.website.Config Description')}
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link
|
<Link
|
||||||
href={getDocPath('/docs/course/websync')}
|
href={getDocPath('/docs/guide/knowledge_base/websync/')}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
textDecoration={'underline'}
|
textDecoration={'underline'}
|
||||||
fontWeight={'bold'}
|
fontWeight={'bold'}
|
||||||
|
|||||||
@@ -80,7 +80,10 @@ const CustomLinkImport = () => {
|
|||||||
{t('common:core.dataset.website.Selector')}
|
{t('common:core.dataset.website.Selector')}
|
||||||
<Box color={'myGray.500'} fontSize={'sm'}>
|
<Box color={'myGray.500'} fontSize={'sm'}>
|
||||||
{feConfigs?.docUrl && (
|
{feConfigs?.docUrl && (
|
||||||
<Link href={getDocPath('/docs/course/websync/#选择器如何使用')} target="_blank">
|
<Link
|
||||||
|
href={getDocPath('/docs/guide/knowledge_base/websync/#选择器如何使用')}
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
{t('common:core.dataset.website.Selector Course')}
|
{t('common:core.dataset.website.Selector Course')}
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -99,7 +99,9 @@ const InputDataModal = ({
|
|||||||
mr={'0.38rem'}
|
mr={'0.38rem'}
|
||||||
color={'myGray.500'}
|
color={'myGray.500'}
|
||||||
ml={1}
|
ml={1}
|
||||||
onClick={() => window.open(getDocPath('/docs/course/dataset_engine'), '_blank')}
|
onClick={() =>
|
||||||
|
window.open(getDocPath('/docs/guide/knowledge_base/dataset_engine/'), '_blank')
|
||||||
|
}
|
||||||
_hover={{
|
_hover={{
|
||||||
color: 'primary.600',
|
color: 'primary.600',
|
||||||
cursor: 'pointer'
|
cursor: 'pointer'
|
||||||
|
|||||||
Reference in New Issue
Block a user