import EditorWrap from '@/components/editor-wrap'; import HighlightCode from '@/components/highlight-code'; import { BulbOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Modal } from 'antd'; import _ from 'lodash'; import React, { useMemo, useState } from 'react'; type ViewModalProps = { systemMessage?: string; messageList?: any[]; payload: Record; parameters: any; title: string; api: string; clientType: string; logcommand?: string; open: boolean; onCancel: () => void; }; const langMap = { shell: 'bash', python: 'python', javascript: 'javascript' }; const langOptions = [ { label: 'Curl', value: langMap.shell }, { label: 'Python', value: langMap.python }, { label: 'Nodejs', value: langMap.javascript } ]; const ViewCodeModal: React.FC = (props) => { const { title, open, api, clientType, logcommand, onCancel, payload, parameters = {} } = props || {}; const intl = useIntl(); const [lang, setLang] = useState(langMap.shell); const BaseURL = `${window.location.origin}/v1-openai`; const formatPyParams = (params: any) => { return _.keys(params).reduce((acc: string, key: string) => { if (params[key] === null) { return acc; } const value = typeof params[key] === 'object' ? JSON.stringify(params[key], null, 2) : `"${params[key]}"`; return acc + ` ${key}=${value},\n`; }, ''); }; const codeValue = useMemo(() => { const consoleLog = logcommand ? `console.log(response.${logcommand});\n` : ''; const printLog = logcommand ? `print(response.${logcommand})` : ''; if (lang === langMap.shell) { 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, ...payload }, null, 2 )}'`; return code; } if (lang === langMap.javascript) { 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, ...payload }, null, 4 )};\nconst response = await openai.${clientType}(params);\n ${consoleLog}}\nmain();`; return code; } if (lang === langMap.python) { const formattedParams = _.keys(parameters).reduce( (acc: string, key: string) => { if (parameters[key] === null) { return acc; } const value = typeof parameters[key] === 'string' ? `"${parameters[key]}"` : parameters[key]; return acc + ` ${key}=${value},\n`; }, '' ); const params = formatPyParams(payload); 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}(\n${formattedParams}${params})\n${printLog}`; return code; } return ''; }, [lang, payload, parameters, api, clientType, logcommand]); const handleOnChangeLang = (value: string) => { setLang(value); }; const handleClose = () => { setLang(langMap.shell); onCancel(); }; return ( <>
{intl.formatMessage({ id: 'playground.viewcode.info' })}
{intl.formatMessage( { id: 'playground.viewcode.tips' }, { here: ( ) } )}
); }; export default React.memo(ViewCodeModal);