mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-28 09:03:53 +00:00
flow chat
This commit is contained in:
@@ -21,6 +21,7 @@ import MyIcon from '@/components/Icon';
|
||||
import Avatar from '@/components/Avatar';
|
||||
|
||||
import { adaptChatItem_openAI } from '@/utils/plugin/openai';
|
||||
import { useMarkdown } from '@/hooks/useMarkdown';
|
||||
import { VariableItemType } from '@/types/app';
|
||||
import { VariableInputEnum } from '@/constants/app';
|
||||
import { useForm } from 'react-hook-form';
|
||||
@@ -68,8 +69,34 @@ const VariableLabel = ({
|
||||
</Box>
|
||||
);
|
||||
|
||||
const Empty = () => {
|
||||
const { data: chatProblem } = useMarkdown({ url: '/chatProblem.md' });
|
||||
const { data: versionIntro } = useMarkdown({ url: '/versionIntro.md' });
|
||||
|
||||
return (
|
||||
<Box
|
||||
minH={'100%'}
|
||||
w={'85%'}
|
||||
maxW={'600px'}
|
||||
m={'auto'}
|
||||
py={'5vh'}
|
||||
alignItems={'center'}
|
||||
justifyContent={'center'}
|
||||
>
|
||||
{/* version intro */}
|
||||
<Card p={4} mb={10}>
|
||||
<Markdown source={versionIntro} />
|
||||
</Card>
|
||||
<Card p={4}>
|
||||
<Markdown source={chatProblem} />
|
||||
</Card>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
const ChatBox = (
|
||||
{
|
||||
showEmptyIntro = false,
|
||||
historyId,
|
||||
appAvatar,
|
||||
variableModules,
|
||||
@@ -78,6 +105,7 @@ const ChatBox = (
|
||||
onStartChat,
|
||||
onDelMessage
|
||||
}: {
|
||||
showEmptyIntro?: boolean;
|
||||
historyId?: string;
|
||||
appAvatar: string;
|
||||
variableModules?: VariableItemType[];
|
||||
@@ -568,6 +596,8 @@ const ChatBox = (
|
||||
</Flex>
|
||||
))}
|
||||
</Box>
|
||||
|
||||
{showEmptyIntro && chatHistory.length === 0 && !hasVariableInput && <Empty />}
|
||||
</Box>
|
||||
</Box>
|
||||
{/* input */}
|
||||
|
@@ -15,7 +15,7 @@ import MyIcon from '@/components/Icon';
|
||||
import TotalUsage from './Charts/TotalUsage';
|
||||
|
||||
const InfoModal = dynamic(() => import('./InfoModal'));
|
||||
const AppEdit = dynamic(() => import('./edit'), { ssr: true });
|
||||
import AppEdit from './edit';
|
||||
import styles from '../../list/index.module.scss';
|
||||
|
||||
const Settings = ({ appId }: { appId: string }) => {
|
||||
|
@@ -11,6 +11,7 @@ import MySelect from '@/components/Select';
|
||||
import { chatModelList } from '@/store/static';
|
||||
import MySlider from '@/components/Slider';
|
||||
import { Box } from '@chakra-ui/react';
|
||||
import { formatPrice } from '@/utils/user';
|
||||
|
||||
const NodeChat = ({
|
||||
data: { moduleId, inputs, outputs, onChangeNode, ...props }
|
||||
@@ -29,45 +30,56 @@ const NodeChat = ({
|
||||
onChangeNode={onChangeNode}
|
||||
flowInputList={inputs}
|
||||
CustomComponent={{
|
||||
model: (inputItem) => (
|
||||
<MySelect
|
||||
width={'100%'}
|
||||
value={inputItem.value}
|
||||
list={inputItem.list || []}
|
||||
onchange={(e) => {
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: inputItem.key,
|
||||
value: e
|
||||
});
|
||||
// update max tokens
|
||||
const model = chatModelList.find((item) => item.model === e);
|
||||
if (!model) return;
|
||||
model: (inputItem) => {
|
||||
const list = chatModelList.map((item) => {
|
||||
const priceStr = `(${formatPrice(item.price, 1000)}元/1k Tokens)`;
|
||||
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: 'maxToken',
|
||||
valueKey: 'markList',
|
||||
value: [
|
||||
{ label: '100', value: 100 },
|
||||
{ label: `${model.contextMaxToken}`, value: model.contextMaxToken }
|
||||
]
|
||||
});
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: 'maxToken',
|
||||
valueKey: 'max',
|
||||
value: model.contextMaxToken
|
||||
});
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: 'maxToken',
|
||||
valueKey: 'value',
|
||||
value: model.contextMaxToken / 2
|
||||
});
|
||||
}}
|
||||
/>
|
||||
),
|
||||
return {
|
||||
value: item.model,
|
||||
label: `${item.name}${priceStr}`
|
||||
};
|
||||
});
|
||||
|
||||
return (
|
||||
<MySelect
|
||||
width={'100%'}
|
||||
value={inputItem.value}
|
||||
list={list}
|
||||
onchange={(e) => {
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: inputItem.key,
|
||||
value: e
|
||||
});
|
||||
// update max tokens
|
||||
const model = chatModelList.find((item) => item.model === e);
|
||||
if (!model) return;
|
||||
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: 'maxToken',
|
||||
valueKey: 'markList',
|
||||
value: [
|
||||
{ label: '100', value: 100 },
|
||||
{ label: `${model.contextMaxToken}`, value: model.contextMaxToken }
|
||||
]
|
||||
});
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: 'maxToken',
|
||||
valueKey: 'max',
|
||||
value: model.contextMaxToken
|
||||
});
|
||||
onChangeNode({
|
||||
moduleId,
|
||||
key: 'maxToken',
|
||||
valueKey: 'value',
|
||||
value: model.contextMaxToken / 2
|
||||
});
|
||||
}}
|
||||
/>
|
||||
);
|
||||
},
|
||||
maxToken: (inputItem) => {
|
||||
const model = inputs.find((item) => item.key === 'model')?.value;
|
||||
const modelData = chatModelList.find((item) => item.model === model);
|
||||
|
@@ -296,6 +296,7 @@ const Chat = () => {
|
||||
<Box flex={1}>
|
||||
<ChatBox
|
||||
ref={ChatBoxRef}
|
||||
showEmptyIntro
|
||||
historyId={historyId}
|
||||
appAvatar={chatData.app.avatar}
|
||||
variableModules={chatData.app.variableModules}
|
||||
|
@@ -13,7 +13,6 @@ import MyIcon from '@/components/Icon';
|
||||
const Home = () => {
|
||||
const router = useRouter();
|
||||
const { inviterId } = router.query as { inviterId: string };
|
||||
const { data } = useMarkdown({ url: '/intro.md' });
|
||||
const { isPc } = useGlobalStore();
|
||||
const [star, setStar] = useState(1500);
|
||||
|
||||
@@ -211,10 +210,6 @@ const Home = () => {
|
||||
</Flex>
|
||||
|
||||
<Box w={'100%'} mt={'100vh'} px={[5, 10]} pb={[5, 10]}>
|
||||
<Card p={5} lineHeight={2}>
|
||||
<Markdown source={data} isChatting={false} />
|
||||
</Card>
|
||||
|
||||
<Card p={5} mt={4} textAlign={'center'}>
|
||||
{beianText && (
|
||||
<Link href="https://beian.miit.gov.cn/" target="_blank">
|
||||
|
@@ -113,7 +113,7 @@ const PayModal = ({ onClose }: { onClose: () => void }) => {
|
||||
source={`
|
||||
| 计费项 | 价格: 元/ 1K tokens(包含上下文)|
|
||||
| --- | --- |
|
||||
| 知识库 - 索引 | 0.001 |
|
||||
| 知识库 - 索引 | 0.002 |
|
||||
| FastAI4k - 对话 | 0.015 |
|
||||
| FastAI16k - 对话 | 0.03 |
|
||||
| FastAI-Plus - 对话 | 0.45 |
|
||||
|
Reference in New Issue
Block a user