4.7-alpha2 (#1027)

* feat: stop toolCall and rename some field. (#46)

* perf: node delete tip;pay tip

* fix: toolCall cannot save child answer

* feat: stop tool

* fix: team modal

* fix feckbackMoal  auth bug (#47)

* 简单的支持提示词运行tool。优化workflow模板 (#49)

* remove templates

* fix: request body undefined

* feat: prompt tool run

* feat: workflow tamplates modal

* perf: plugin start

* 4.7 (#50)

* fix docker-compose download url (#994)

original code is a bad url with '404 NOT FOUND' return.
fix docker-compose download url, add 'v' before docker-compose version

* Update ai_settings.md (#1000)

* Update configuration.md

* Update configuration.md

* Fix history in classifyQuestion and extract modules (#1012)

* Fix history in classifyQuestion and extract modules

* Add chatValue2RuntimePrompt import and update text formatting

* flow controller to packages

* fix: rerank select

* modal ui

* perf: modal code path

* point not sufficient

* feat: http url support variable

* fix http key

* perf: prompt

* perf: ai setting modal

* simple edit ui

---------

Co-authored-by: entorick <entorick11@qq.com>
Co-authored-by: liujianglc <liujianglc@163.com>
Co-authored-by: Fengrui Liu <liufengrui.work@bytedance.com>

* fix team share redirect to login (#51)

* feat: support openapi import plugins (#48)

* feat: support openapi import plugins

* feat: import from url

* fix: add body params parse

* fix build

* fix

* fix

* fix

* tool box ui (#52)

* fix: training queue

* feat: simple edit tool select

* perf: simple edit dataset prompt

* fix: chatbox tool ux

* feat: quote prompt module

* perf: plugin tools sign

* perf: model avatar

* tool selector ui

* feat: max histories

* perf: http plugin import (#53)

* perf: plugin http import

* chatBox ui

* perf: name

* fix: Node template card (#54)

* fix: ts

* setting modal

* package

* package

* feat: add plugins search (#57)

* feat: add plugins search

* perf: change http plugin header input

* Yjl (#56)

* perf: prompt tool call

* perf: chat box ux

* doc

* doc

* price tip

* perf: tool selector

* ui'

* fix: vector queue

* fix: empty tool and empty response

* fix: empty msg

* perf: pg index

* perf: ui tip

* doc

* tool tip

---------

Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com>
Co-authored-by: entorick <entorick11@qq.com>
Co-authored-by: liujianglc <liujianglc@163.com>
Co-authored-by: Fengrui Liu <liufengrui.work@bytedance.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
This commit is contained in:
Archer
2024-03-21 13:32:31 +08:00
committed by GitHub
parent 6d4b331db9
commit 9d27de154b
322 changed files with 9282 additions and 6498 deletions

View File

@@ -1,6 +1,6 @@
import React from 'react';
import { ModalBody, Box, useTheme } from '@chakra-ui/react';
import MyModal from '../MyModal';
import MyModal from '@fastgpt/web/components/common/MyModal';
import { DispatchNodeResponseType } from '@fastgpt/global/core/module/runtime/type.d';
const ContextModal = ({

View File

@@ -1,6 +1,6 @@
import React, { useRef } from 'react';
import { ModalBody, Textarea, ModalFooter, Button } from '@chakra-ui/react';
import MyModal from '../MyModal';
import MyModal from '@fastgpt/web/components/common/MyModal';
import { useRequest } from '@/web/common/hooks/useRequest';
import { useTranslation } from 'next-i18next';
import { updateChatUserFeedback } from '@/web/core/chat/api';
@@ -9,6 +9,8 @@ const FeedbackModal = ({
appId,
chatId,
chatItemId,
teamId,
teamToken,
shareId,
outLinkUid,
onSuccess,
@@ -18,6 +20,8 @@ const FeedbackModal = ({
chatId: string;
chatItemId: string;
shareId?: string;
teamId?: string;
teamToken?: string;
outLinkUid?: string;
onSuccess: (e: string) => void;
onClose: () => void;
@@ -33,6 +37,8 @@ const FeedbackModal = ({
chatId,
chatItemId,
shareId,
teamId,
teamToken,
outLinkUid,
userBadFeedback: val
});

View File

@@ -1,7 +1,7 @@
import React, { useMemo } from 'react';
import { ModalBody, Box, useTheme } from '@chakra-ui/react';
import MyModal from '../MyModal';
import MyModal from '@fastgpt/web/components/common/MyModal';
import { useTranslation } from 'next-i18next';
import type { SearchDataResponseItemType } from '@fastgpt/global/core/dataset/type';
import QuoteItem from '../core/dataset/QuoteItem';

View File

@@ -1,6 +1,6 @@
import React from 'react';
import { ModalBody, ModalFooter, Button } from '@chakra-ui/react';
import MyModal from '../MyModal';
import MyModal from '@fastgpt/web/components/common/MyModal';
import { useTranslation } from 'next-i18next';
const ReadFeedbackModal = ({

View File

@@ -5,7 +5,7 @@ import { useTranslation } from 'next-i18next';
import { moduleTemplatesFlat } from '@fastgpt/global/core/module/template/constants';
import Tabs from '../Tabs';
import MyModal from '../MyModal';
import MyModal from '@fastgpt/web/components/common/MyModal';
import MyTooltip from '../MyTooltip';
import { QuestionOutlineIcon } from '@chakra-ui/icons';
import Markdown from '../Markdown';

View File

@@ -9,9 +9,7 @@ import {
AccordionButton,
AccordionPanel,
AccordionIcon,
Button,
Image,
Grid
Image
} from '@chakra-ui/react';
import React, { useMemo } from 'react';
import ChatController, { type ChatControllerProps } from './ChatController';
@@ -88,7 +86,7 @@ const ChatItem = ({
return (
<>
{files.length > 0 && <FilesBlock files={files} />}
<Markdown source={text} isChatting={false} />
<Markdown source={text} />
</>
);
}
@@ -100,13 +98,26 @@ const ChatItem = ({
if (value.text) {
let source = value.text?.content || '';
if (isLastChild && !isChatting && questionGuides.length > 0) {
if (!source && chat.value.length > 1) return <></>;
if (
isLastChild &&
!isChatting &&
questionGuides.length > 0 &&
i === chat.value.length - 1
) {
source = `${source}
\`\`\`${CodeClassName.questionGuide}
${JSON.stringify(questionGuides)}`;
}
return <Markdown key={key} source={source} isChatting={isLastChild && isChatting} />;
return (
<Markdown
key={key}
source={source}
showAnimation={isLastChild && isChatting && i === chat.value.length - 1}
/>
);
}
if (value.type === ChatItemValueTypeEnum.tool && value.tools) {
return (
@@ -233,4 +244,4 @@ ${toolResponse}`}
);
};
export default ChatItem;
export default React.memo(ChatItem);

View File

@@ -18,7 +18,7 @@ const WelcomeBox = ({ appAvatar, welcomeText }: { appAvatar?: string; welcomeTex
bg={'white'}
boxShadow={'0 0 8px rgba(0,0,0,0.15)'}
>
<Markdown source={`~~~guide \n${welcomeText}`} isChatting={false} />
<Markdown source={`~~~guide \n${welcomeText}`} />
</Card>
</Box>
</Box>

View File

@@ -257,10 +257,7 @@ const ChatBox = (
};
return {
...item,
value:
lastValue && lastValue.text
? item.value.slice(0, -1).concat(val)
: item.value.concat(val)
value: item.value.concat(val)
};
} else if (
event === SseResponseEventEnum.toolParams &&
@@ -441,6 +438,7 @@ const ChatBox = (
chatController.current = abortSignal;
const messages = chats2GPTMessages({ messages: newChatList, reserveId: true });
const {
responseData,
responseText,
@@ -537,10 +535,9 @@ const ChatBox = (
setLoading(true);
const index = chatHistories.findIndex((item) => item.dataId === dataId);
const delHistory = chatHistories.slice(index);
try {
await Promise.all(
delHistory.map(async (item) => {
delHistory.map((item) => {
if (item.dataId) {
return onDelMessage({ contentId: item.dataId });
}
@@ -563,14 +560,29 @@ const ChatBox = (
},
[chatHistories, onDelMessage, sendPrompt, setLoading, toast]
);
// delete one message
// delete one message(One human and the ai response)
const delOneMessage = useCallback(
(dataId?: string) => {
if (!dataId || !onDelMessage) return;
return () => {
setChatHistories((state) => state.filter((chat) => chat.dataId !== dataId));
onDelMessage({
contentId: dataId
setChatHistories((state) => {
let aiIndex = -1;
return state.filter((chat, i) => {
if (chat.dataId === dataId) {
aiIndex = i + 1;
onDelMessage({
contentId: dataId
});
return false;
} else if (aiIndex === i && chat.obj === ChatRoleEnum.AI && chat.dataId) {
onDelMessage({
contentId: chat.dataId
});
return false;
}
return true;
});
});
};
},
@@ -630,6 +642,8 @@ const ChatBox = (
updateChatUserFeedback({
appId,
chatId,
teamId,
teamToken,
chatItemId: chat.dataId,
shareId,
outLinkUid,
@@ -654,6 +668,8 @@ const ChatBox = (
);
updateChatUserFeedback({
appId,
teamId,
teamToken,
chatId,
chatItemId: chat.dataId,
userGoodFeedback: undefined
@@ -687,6 +703,8 @@ const ChatBox = (
chatId,
chatItemId: chat.dataId,
shareId,
teamId,
teamToken,
outLinkUid
});
} catch (error) {}
@@ -869,7 +887,6 @@ const ChatBox = (
avatar={appAvatar}
chat={item}
isChatting={isChatting}
onDelete={delOneMessage(item.dataId)}
{...(item.obj === 'AI' && {
setChatHistories,
showVoiceIcon,
@@ -955,6 +972,8 @@ const ChatBox = (
{!!feedbackId && chatId && appId && (
<FeedbackModal
appId={appId}
teamId={teamId}
teamToken={teamToken}
chatId={chatId}
chatItemId={feedbackId}
shareId={shareId}