chore: update playground payload format
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ const isProduction = env === 'production';
|
|||||||
const t = Date.now();
|
const t = Date.now();
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
proxy: {
|
proxy: {
|
||||||
...proxy()
|
...proxy('http://192.168.50.2:8088/')
|
||||||
},
|
},
|
||||||
history: {
|
history: {
|
||||||
type: 'hash'
|
type: 'hash'
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
useState
|
useState
|
||||||
} from 'react';
|
} from 'react';
|
||||||
import { CHAT_API } from '../apis';
|
import { CHAT_API } from '../apis';
|
||||||
import { Roles } from '../config';
|
import { Roles, formatMessageParams } from '../config';
|
||||||
import { MessageItem } from '../config/types';
|
import { MessageItem } from '../config/types';
|
||||||
import '../style/ground-left.less';
|
import '../style/ground-left.less';
|
||||||
import '../style/system-message-wrap.less';
|
import '../style/system-message-wrap.less';
|
||||||
@@ -51,6 +51,7 @@ const GroundLeft: React.FC<MessageProps> = forwardRef((props, ref) => {
|
|||||||
const currentMessageRef = useRef<any>(null);
|
const currentMessageRef = useRef<any>(null);
|
||||||
const paramsRef = useRef<any>(null);
|
const paramsRef = useRef<any>(null);
|
||||||
const messageListLengthCache = useRef<number>(0);
|
const messageListLengthCache = useRef<number>(0);
|
||||||
|
const [viewCodeMessage, setViewCodeMessage] = useState<any[]>([]);
|
||||||
|
|
||||||
const { initialize, updateScrollerPosition } = useOverlayScroller();
|
const { initialize, updateScrollerPosition } = useOverlayScroller();
|
||||||
const { initialize: innitializeParams } = useOverlayScroller();
|
const { initialize: innitializeParams } = useOverlayScroller();
|
||||||
@@ -158,21 +159,27 @@ const GroundLeft: React.FC<MessageProps> = forwardRef((props, ref) => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
const messageParams = systemMessage
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
role: Roles.System,
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
text: systemMessage
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
...formatMessages
|
||||||
|
]
|
||||||
|
: [...formatMessages];
|
||||||
|
|
||||||
|
const finalMessageParams = formatMessageParams(messageParams);
|
||||||
|
|
||||||
|
setViewCodeMessage(finalMessageParams);
|
||||||
|
|
||||||
const chatParams = {
|
const chatParams = {
|
||||||
messages: systemMessage
|
messages: finalMessageParams,
|
||||||
? [
|
|
||||||
{
|
|
||||||
role: Roles.System,
|
|
||||||
content: [
|
|
||||||
{
|
|
||||||
type: 'text',
|
|
||||||
text: systemMessage
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
...formatMessages
|
|
||||||
]
|
|
||||||
: [...formatMessages],
|
|
||||||
...parameters,
|
...parameters,
|
||||||
stream: true,
|
stream: true,
|
||||||
stream_options: {
|
stream_options: {
|
||||||
@@ -196,6 +203,13 @@ const GroundLeft: React.FC<MessageProps> = forwardRef((props, ref) => {
|
|||||||
setMessageId();
|
setMessageId();
|
||||||
const { reader, decoder } = result;
|
const { reader, decoder } = result;
|
||||||
await readStreamData(reader, decoder, (chunk: any) => {
|
await readStreamData(reader, decoder, (chunk: any) => {
|
||||||
|
if (chunk?.error) {
|
||||||
|
setTokenResult({
|
||||||
|
error: true,
|
||||||
|
errorMessage: chunk?.error?.message || chunk?.message || ''
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
joinMessage(chunk);
|
joinMessage(chunk);
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -344,8 +358,7 @@ const GroundLeft: React.FC<MessageProps> = forwardRef((props, ref) => {
|
|||||||
|
|
||||||
<ViewCodeModal
|
<ViewCodeModal
|
||||||
open={show}
|
open={show}
|
||||||
systemMessage={systemMessage}
|
messageList={viewCodeMessage}
|
||||||
messageList={messageList}
|
|
||||||
parameters={parameters}
|
parameters={parameters}
|
||||||
onCancel={handleCloseViewCode}
|
onCancel={handleCloseViewCode}
|
||||||
title={intl.formatMessage({ id: 'playground.viewcode' })}
|
title={intl.formatMessage({ id: 'playground.viewcode' })}
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ const ContentItem: React.FC<MessageItemProps> = ({
|
|||||||
{data.title ?? intl.formatMessage({ id: `playground.${data.role}` })}
|
{data.title ?? intl.formatMessage({ id: `playground.${data.role}` })}
|
||||||
</div>
|
</div>
|
||||||
<div className="actions">
|
<div className="actions">
|
||||||
{actions.includes('upload') && (
|
{actions.includes('upload') && data.role === Roles.User && (
|
||||||
<UploadImg handleUpdateImgList={handleUpdateImgList}></UploadImg>
|
<UploadImg handleUpdateImgList={handleUpdateImgList}></UploadImg>
|
||||||
)}
|
)}
|
||||||
{data.content && actions.includes('copy') && (
|
{data.content && actions.includes('copy') && (
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import React, {
|
|||||||
} from 'react';
|
} from 'react';
|
||||||
import 'simplebar-react/dist/simplebar.min.css';
|
import 'simplebar-react/dist/simplebar.min.css';
|
||||||
import { CHAT_API } from '../../apis';
|
import { CHAT_API } from '../../apis';
|
||||||
import { Roles } from '../../config';
|
import { Roles, formatMessageParams } from '../../config';
|
||||||
import CompareContext from '../../config/compare-context';
|
import CompareContext from '../../config/compare-context';
|
||||||
import { MessageItem, ModelSelectionItem } from '../../config/types';
|
import { MessageItem, ModelSelectionItem } from '../../config/types';
|
||||||
import '../../style/model-item.less';
|
import '../../style/model-item.less';
|
||||||
@@ -67,6 +67,7 @@ const ModelItem: React.FC<ModelItemProps> = forwardRef(
|
|||||||
const currentMessageRef = useRef<MessageItem[]>([]);
|
const currentMessageRef = useRef<MessageItem[]>([]);
|
||||||
const modelScrollRef = useRef<any>(null);
|
const modelScrollRef = useRef<any>(null);
|
||||||
const messageListLengthCache = useRef<number>(0);
|
const messageListLengthCache = useRef<number>(0);
|
||||||
|
const [viewCodeMessage, setViewCodeMessage] = useState<any[]>([]);
|
||||||
|
|
||||||
const { initialize, updateScrollerPosition } = useOverlayScroller();
|
const { initialize, updateScrollerPosition } = useOverlayScroller();
|
||||||
|
|
||||||
@@ -157,21 +158,28 @@ const ModelItem: React.FC<ModelItemProps> = forwardRef(
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const messageParams = systemMessage
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
role: Roles.System,
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
text: systemMessage
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
...formatMessages
|
||||||
|
]
|
||||||
|
: [...formatMessages];
|
||||||
|
|
||||||
|
const finalMessageParams = formatMessageParams(messageParams);
|
||||||
|
|
||||||
|
setViewCodeMessage(finalMessageParams);
|
||||||
|
|
||||||
const chatParams = {
|
const chatParams = {
|
||||||
messages: systemMessage
|
messages: finalMessageParams,
|
||||||
? [
|
|
||||||
{
|
|
||||||
role: Roles.System,
|
|
||||||
content: [
|
|
||||||
{
|
|
||||||
type: 'text',
|
|
||||||
text: systemMessage
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
...formatMessages
|
|
||||||
]
|
|
||||||
: [...formatMessages],
|
|
||||||
...params,
|
...params,
|
||||||
stream: true,
|
stream: true,
|
||||||
stream_options: {
|
stream_options: {
|
||||||
@@ -196,6 +204,13 @@ const ModelItem: React.FC<ModelItemProps> = forwardRef(
|
|||||||
setMessageId();
|
setMessageId();
|
||||||
const { reader, decoder } = result;
|
const { reader, decoder } = result;
|
||||||
await readStreamData(reader, decoder, (chunk: any) => {
|
await readStreamData(reader, decoder, (chunk: any) => {
|
||||||
|
if (chunk?.error) {
|
||||||
|
setTokenResult({
|
||||||
|
error: true,
|
||||||
|
errorMessage: chunk?.error?.message || chunk?.message || ''
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
joinMessage(chunk);
|
joinMessage(chunk);
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -473,8 +488,7 @@ const ModelItem: React.FC<ModelItemProps> = forwardRef(
|
|||||||
</div>
|
</div>
|
||||||
<ViewCodeModal
|
<ViewCodeModal
|
||||||
open={show}
|
open={show}
|
||||||
systemMessage={systemMessage}
|
messageList={viewCodeMessage}
|
||||||
messageList={messageList}
|
|
||||||
parameters={params}
|
parameters={params}
|
||||||
onCancel={handleCloseViewCode}
|
onCancel={handleCloseViewCode}
|
||||||
title={intl.formatMessage({ id: 'playground.viewcode' })}
|
title={intl.formatMessage({ id: 'playground.viewcode' })}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { WarningOutlined } from '@ant-design/icons';
|
import { WarningOutlined } from '@ant-design/icons';
|
||||||
import { useIntl } from '@umijs/max';
|
import { useIntl } from '@umijs/max';
|
||||||
import { Alert, Space, Tooltip } from 'antd';
|
import { Space, Tooltip, Typography } from 'antd';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import '../style/reference-params.less';
|
import '../style/reference-params.less';
|
||||||
@@ -28,18 +28,22 @@ const ReferenceParams = (props: ReferenceParamsProps) => {
|
|||||||
}
|
}
|
||||||
if (usage.error) {
|
if (usage.error) {
|
||||||
return (
|
return (
|
||||||
<Alert
|
<Typography.Paragraph
|
||||||
type="error"
|
type="danger"
|
||||||
style={{ textAlign: 'center', paddingBlock: 0 }}
|
ellipsis={{
|
||||||
message={
|
rows: 2,
|
||||||
<span style={{ color: 'var(--ant-color-error)' }}>
|
tooltip: usage?.errorMessage
|
||||||
<WarningOutlined className="m-r-8" />
|
}}
|
||||||
{usage?.errorMessage}
|
style={{
|
||||||
</span>
|
textAlign: 'center',
|
||||||
}
|
paddingBlock: 0,
|
||||||
banner
|
margin: 0,
|
||||||
showIcon={false}
|
backgroundColor: 'var(--ant-color-error-bg)'
|
||||||
/>
|
}}
|
||||||
|
>
|
||||||
|
<WarningOutlined className="m-r-8" />
|
||||||
|
{usage?.errorMessage}
|
||||||
|
</Typography.Paragraph>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -50,41 +50,41 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
|
|||||||
apiType === 'chat' ? 'choices[0].message.content' : 'data[0].embedding';
|
apiType === 'chat' ? 'choices[0].message.content' : 'data[0].embedding';
|
||||||
|
|
||||||
const generateCode = () => {
|
const generateCode = () => {
|
||||||
const systemList = systemMessage
|
// const systemList = systemMessage
|
||||||
? [
|
// ? [
|
||||||
{
|
// {
|
||||||
role: 'system',
|
// role: 'system',
|
||||||
content: [
|
// content: [
|
||||||
{
|
// {
|
||||||
type: 'text',
|
// type: 'text',
|
||||||
text: systemMessage
|
// text: systemMessage
|
||||||
}
|
// }
|
||||||
]
|
// ]
|
||||||
}
|
// }
|
||||||
]
|
// ]
|
||||||
: [];
|
// : [];
|
||||||
|
|
||||||
const formatMessageList = _.map(messageList, (item: any) => {
|
// const formatMessageList = _.map(messageList, (item: any) => {
|
||||||
return {
|
// return {
|
||||||
role: item.role,
|
// role: item.role,
|
||||||
content: [
|
// content: [
|
||||||
{
|
// {
|
||||||
type: 'text',
|
// type: 'text',
|
||||||
text: item.content
|
// text: item.content
|
||||||
},
|
// },
|
||||||
..._.map(item.imgs, (img: any) => {
|
// ..._.map(item.imgs, (img: any) => {
|
||||||
return {
|
// return {
|
||||||
type: 'image_url',
|
// type: 'image_url',
|
||||||
image_url: {
|
// image_url: {
|
||||||
url: img.dataUrl
|
// url: img.dataUrl
|
||||||
}
|
// }
|
||||||
};
|
// };
|
||||||
})
|
// })
|
||||||
]
|
// ]
|
||||||
};
|
// };
|
||||||
});
|
// });
|
||||||
if (lang === langMap.shell) {
|
if (lang === langMap.shell) {
|
||||||
const messages = [...systemList, ...formatMessageList];
|
const messages = messageList;
|
||||||
const code = `curl ${window.location.origin}/v1-openai/${api} \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify(
|
const code = `curl ${window.location.origin}/v1-openai/${api} \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify(
|
||||||
{
|
{
|
||||||
...parameters,
|
...parameters,
|
||||||
@@ -95,7 +95,7 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
|
|||||||
)}'`;
|
)}'`;
|
||||||
setCodeValue(code);
|
setCodeValue(code);
|
||||||
} else if (lang === langMap.javascript) {
|
} else if (lang === langMap.javascript) {
|
||||||
const messages = [...systemList, ...formatMessageList];
|
const messages = messageList;
|
||||||
const code = `const OpenAI = require("openai");\n\nconst openai = new OpenAI({\n "apiKey": "YOUR_GPUSTACK_API_KEY",\n "baseURL": "${BaseURL}"\n});\n\nasync function main(){\n const params = ${JSON.stringify(
|
const code = `const OpenAI = require("openai");\n\nconst openai = new OpenAI({\n "apiKey": "YOUR_GPUSTACK_API_KEY",\n "baseURL": "${BaseURL}"\n});\n\nasync function main(){\n const params = ${JSON.stringify(
|
||||||
{
|
{
|
||||||
...parameters,
|
...parameters,
|
||||||
@@ -121,11 +121,7 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
|
|||||||
);
|
);
|
||||||
const messages =
|
const messages =
|
||||||
apiType === 'chat'
|
apiType === 'chat'
|
||||||
? `messages=${JSON.stringify(
|
? `messages=${JSON.stringify(messageList, null, 2)}`
|
||||||
[...systemList, ...formatMessageList],
|
|
||||||
null,
|
|
||||||
2
|
|
||||||
)}`
|
|
||||||
: '';
|
: '';
|
||||||
const code = `from openai import OpenAI\n\nclient = OpenAI(\n base_url="${BaseURL}", \n api_key="YOUR_GPUSTACK_API_KEY"\n)\n\nresponse = client.${ClientType}.create(\n${formattedParams} ${messages})\nprint(response.${logcommand})`;
|
const code = `from openai import OpenAI\n\nclient = OpenAI(\n base_url="${BaseURL}", \n api_key="YOUR_GPUSTACK_API_KEY"\n)\n\nresponse = client.${ClientType}.create(\n${formattedParams} ${messages})\nprint(response.${logcommand})`;
|
||||||
setCodeValue(code);
|
setCodeValue(code);
|
||||||
@@ -158,7 +154,7 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
generateCode();
|
generateCode();
|
||||||
}, [lang, systemMessage, messageList, parameters]);
|
}, [lang, messageList, parameters]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -13,3 +13,30 @@ export const playGroundRoles = [
|
|||||||
label: 'playground.assitant'
|
label: 'playground.assitant'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const formatMessageParams = (messageList: any[]) => {
|
||||||
|
const result: any[] = [];
|
||||||
|
|
||||||
|
messageList.forEach((item) => {
|
||||||
|
const { role, content, title, imgs, uid } = item;
|
||||||
|
content?.forEach((contentItem: any) => {
|
||||||
|
if (contentItem.type === 'text') {
|
||||||
|
result.push({
|
||||||
|
role,
|
||||||
|
content: contentItem.text
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (contentItem.type === 'image_url') {
|
||||||
|
result.push({
|
||||||
|
role,
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
...contentItem
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user