diff --git a/src/components/modal-footer/index.tsx b/src/components/modal-footer/index.tsx index 921dec24..4f494e05 100644 --- a/src/components/modal-footer/index.tsx +++ b/src/components/modal-footer/index.tsx @@ -7,24 +7,27 @@ type ModalFooterProps = { okText?: string; htmlType?: 'button' | 'submit'; form?: any; + loading?: boolean; }; const ModalFooter: React.FC = ({ onOk, onCancel, cancelText, okText, + loading, htmlType = 'button', form }) => { return ( - + ) } > -
- - name="name" - rules={[ - { - required: true, - message: intl.formatMessage( - { id: 'common.form.rule.input' }, + + {!showKey ? ( + <> + + name="name" + rules={[ { - name: intl.formatMessage({ id: 'common.table.name' }) + required: true, + message: intl.formatMessage( + { id: 'common.form.rule.input' }, + { + name: intl.formatMessage({ id: 'common.table.name' }) + } + ) } - ) - } - ]} - > - - - - name="expires_in" - rules={[ - { - required: true, - message: intl.formatMessage( - { id: 'common.form.rule.select' }, + ]} + > + + + + name="expires_in" + rules={[ { - name: intl.formatMessage({ id: 'apikeys.form.expiretime' }) + required: true, + message: intl.formatMessage( + { id: 'common.form.rule.select' }, + { + name: intl.formatMessage({ + id: 'apikeys.form.expiretime' + }) + } + ) } - ) + ]} + > + + {expirationOptions.map((option) => { + return ( + + {intl.formatMessage({ id: option.label })} + + ); + })} + + + + name="description" + rules={[{ required: false }]} + > + + + + ) : ( + + {intl.formatMessage({ id: 'apikeys.table.save.tips' })} + } - ]} - > - - {expirationOptions.map((option) => { - return ( - - {intl.formatMessage({ id: option.label })} - - ); - })} - - - name="description" rules={[{ required: false }]}> - - + } + > + + )} ); diff --git a/src/pages/api-keys/index.tsx b/src/pages/api-keys/index.tsx index 1dd20660..9f4e561a 100644 --- a/src/pages/api-keys/index.tsx +++ b/src/pages/api-keys/index.tsx @@ -21,10 +21,9 @@ import { import dayjs from 'dayjs'; import _ from 'lodash'; import { useEffect, useState } from 'react'; -import { createApisKey, deleteApisKey, queryApisKeysList } from './apis'; +import { deleteApisKey, queryApisKeysList } from './apis'; import AddAPIKeyModal from './components/add-apikey'; -import { expirationOptions } from './config'; -import { FormData, ListItem } from './config/types'; +import { ListItem } from './config/types'; const { Column } = Table; @@ -67,24 +66,6 @@ const Models: React.FC = () => { setSortOrder(sorter.order); }; - const getExpireValue = (val: number | null) => { - const expires_in = val; - if (expires_in === -1) { - return 0; - } - const selected = expirationOptions.find( - (item) => expires_in === item.value - ); - - const d1 = dayjs().add( - selected?.value as number, - `${selected?.type}` as never - ); - const d2 = dayjs(); - const res = d1.diff(d2, 'second'); - return res; - }; - const fetchData = async () => { setLoading(true); try { @@ -118,19 +99,10 @@ const Models: React.FC = () => { setAction(PageAction.CREATE); }; - const handleModalOk = async (data: FormData) => { - console.log('handleModalOk'); - + const handleModalOk = async () => { try { - const params = { - ...data, - expires_in: getExpireValue(data.expires_in) - }; - const res = await createApisKey({ data: params }); setOpenAddModal(false); - message.success(intl.formatMessage({ id: 'common.message.success' })); - setDataSource([res, ...dataSource]); - setTotal(total + 1); + fetchData(); } catch (error) { setOpenAddModal(false); } @@ -273,9 +245,8 @@ const Models: React.FC = () => { key="name" width={400} ellipsis={{ - showTitle: false + showTitle: true }} - render={renderSecrectKey} /> { - handleChildSelect(val, item)} - > +
+ handleChildSelect(val, item)} + > +
diff --git a/src/pages/playground/components/view-code-modal.tsx b/src/pages/playground/components/view-code-modal.tsx index b854984a..8ec958d0 100644 --- a/src/pages/playground/components/view-code-modal.tsx +++ b/src/pages/playground/components/view-code-modal.tsx @@ -53,7 +53,7 @@ const ViewCodeModal: React.FC = (props) => { const systemList = systemMessage ? [{ role: 'system', content: systemMessage }] : []; - const code = `curl ${window.location.origin}/v1/chat/completions \n-H "Content-Type: application/json" \n-H "Authorization: Bearer $\{GPUSTACK_API_KEY}" \n-d '${JSON.stringify( + const code = `curl ${window.location.origin}/v1-openai/chat/completions \\ \n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify( { ...parameters, messages: [...systemList, ...messageList] @@ -66,7 +66,7 @@ const ViewCodeModal: React.FC = (props) => { const systemList = systemMessage ? [{ role: 'system', content: systemMessage }] : []; - const code = `import OpenAI from "openai";\nconst openai = new OpenAI();\n\nasync function main(){\nconst params = ${JSON.stringify( + const code = `import OpenAI from "openai";\nconst openai = new OpenAI({\n"base_url": "/v1-openai", \n "gpustack_api_key": "$\{GPUSTACK_API_KEY}"\n });\n\nasync function main(){\nconst params = ${JSON.stringify( { ...parameters, messages: [...systemList, ...messageList] @@ -92,7 +92,7 @@ const ViewCodeModal: React.FC = (props) => { const systemList = systemMessage ? [{ role: 'system', content: systemMessage }] : []; - const code = `from openai import OpenAI\nclient = OpenAI()\n\ncompletion = client.chat.completions.create(\n${formattedParams} messages=${JSON.stringify([...systemList, ...messageList], null, 2)})\nprint(completion.choices[0].message)`; + const code = `from openai import OpenAI\nclient = OpenAI({\n "base_url": "/v1-openai", \n "gpustack_api_key": "$\{GPUSTACK_API_KEY}"\n })\n\ncompletion = client.chat.completions.create(\n${formattedParams} messages=${JSON.stringify([...systemList, ...messageList], null, 2)})\nprint(completion.choices[0].message)`; setCodeValue(code); } formatCode();