diff --git a/src/atoms/models.ts b/src/atoms/models.ts index e01c2a11..097fedf7 100644 --- a/src/atoms/models.ts +++ b/src/atoms/models.ts @@ -51,7 +51,7 @@ export interface BackGroupOption { label: string; value: string; title?: string; - children: BackendOption[]; + options: BackendOption[]; } export const backendOptionsAtom = atom([]); diff --git a/src/pages/llmodels/config/form-context.ts b/src/pages/llmodels/config/form-context.ts index 7ff22151..d656c737 100644 --- a/src/pages/llmodels/config/form-context.ts +++ b/src/pages/llmodels/config/form-context.ts @@ -24,7 +24,7 @@ interface FormContextProps { label: string; value: string; title?: string; - children: BackendOption[]; + options: BackendOption[]; }[]; flatBackendOptions: BackendOption[]; initialValues?: FormData; // for editing model diff --git a/src/pages/llmodels/forms/backend.tsx b/src/pages/llmodels/forms/backend.tsx index 3bb3b90a..265a0f63 100644 --- a/src/pages/llmodels/forms/backend.tsx +++ b/src/pages/llmodels/forms/backend.tsx @@ -1,13 +1,10 @@ -import SealCascader from '@/components/seal-form/seal-cascader'; -import SealInput from '@/components/seal-form/seal-input'; import SealSelect from '@/components/seal-form/seal-select'; import TooltipList from '@/components/tooltip-list'; import useAppUtils from '@/hooks/use-app-utils'; -import { BackendSourceValueMap } from '@/pages/backends/config'; import { CaretDownOutlined, InfoCircleOutlined } from '@ant-design/icons'; import { useIntl, useNavigate } from '@umijs/max'; import { Form, Select } from 'antd'; -import React, { useEffect, useMemo } from 'react'; +import React, { useMemo } from 'react'; import styled from 'styled-components'; import { backendTipsList } from '../config'; import { backendOptionsMap } from '../config/backend-parameters'; @@ -31,13 +28,8 @@ const BackendFields: React.FC = () => { const navigate = useNavigate(); const { getRuleMessage } = useAppUtils(); const form = Form.useFormInstance(); - const { - action, - onValuesChange, - backendOptions, - flatBackendOptions, - onBackendChange - } = useFormContext(); + const { action, onValuesChange, backendOptions, onBackendChange } = + useFormContext(); const backend = Form.useWatch('backend', form); const [showDeprecated, setShowDeprecated] = React.useState(false); const [selectedBackend, setSelectedBackend] = @@ -51,22 +43,6 @@ const BackendFields: React.FC = () => { onValuesChange?.({}, form.getFieldsValue()); }; - const backendHelperText = useMemo(() => { - const selected = flatBackendOptions?.find((item) => item.value === backend); - if ( - selected && - !selected.enabled && - selected.backend_source === BackendSourceValueMap.COMMUNITY - ) { - return ( - - {intl.formatMessage({ id: 'models.form.backend.helperText' })} - - ); - } - return null; - }, [backend, flatBackendOptions, intl]); - const backendVersions = useMemo((): { builtIn: any[]; custom: any[]; @@ -137,30 +113,16 @@ const BackendFields: React.FC = () => { ); }; - const handleOnBackendChange = (value: any[], option: any[]) => { - const selectedBackend = value?.[1]; - const selectedOption = option?.[1] || {}; - + const handleOnBackendChange = (value: any, option: any) => { + console.log('Selected backend value:', value, option); form.setFieldsValue({ - backend: selectedBackend + backend: value }); form.setFieldValue('env', { - ...(selectedOption.default_env || {}) + ...(option.default_env || {}) }); - onBackendChange?.(selectedBackend, selectedOption); - setSelectedBackend(selectedOption); - }; - - const displayRender = (labels: any[], selectedOptions?: any[]) => { - const groupTitle = selectedOptions?.[0]?.title; - if (!groupTitle) { - return {labels?.[0]}; - } - return ( - - {intl.formatMessage({ id: groupTitle })} / {labels?.[1]} - - ); + onBackendChange?.(value, option); + setSelectedBackend(option); }; const renderDeprecatedVersionOptions = (values: any[]) => { @@ -192,73 +154,35 @@ const BackendFields: React.FC = () => { ); }; - const BackendNode = (props: any) => { - const { data: backend } = props; - return backend.isLeaf ? ( - - {backend.label} - {backend.backend_source === BackendSourceValueMap.COMMUNITY && - !backend.enabled && ( - - [{intl.formatMessage({ id: 'common.status.disabled' })}] - - )} - - ) : ( - {intl.formatMessage({ id: backend.title })} - ); + const optionRender = (option: any) => { + return option.data.title; }; - useEffect(() => { - if (backend) { - const selected = flatBackendOptions?.find( - (item) => item.value === backend - ); - if (selected) { - form.setFieldValue('backend_selection', [ - selected.backend_source, - backend - ]); - } - // TODO: init env variables from selected backend, when action is CREATE - } - }, [backend, flatBackendOptions]); + const labelRender = (option: any) => { + return option.title; + }; return ( <> - - triggerNode.parentNode} - optionNode={BackendNode} - displayRender={displayRender} onChange={handleOnBackendChange} - > + label={intl.formatMessage({ id: 'models.form.backend' })} + description={} + options={backendOptions} + optionRender={optionRender} + labelRender={labelRender} + > {backendOptionsMap.custom !== backend && ( diff --git a/src/pages/llmodels/hooks/use-query-backends.ts b/src/pages/llmodels/hooks/use-query-backends.ts index a92220f9..222ec9bc 100644 --- a/src/pages/llmodels/hooks/use-query-backends.ts +++ b/src/pages/llmodels/hooks/use-query-backends.ts @@ -16,33 +16,9 @@ interface BackendGroup { value: string; title?: string; isLeaf?: boolean; - children: BackendOption[]; + options: BackendOption[]; } -const groupByBackendSource = (list: BackendOption[]): BackendGroup[] => { - const map = list.reduce>((acc, item) => { - const key = item.backend_source; - - if (!acc[key]) { - acc[key] = []; - } - - acc[key].push(item); - return acc; - }, {}); - - return Object.entries(map).map(([backend_source, backends]) => ({ - label: backend_source, - value: backend_source, - title: - backend_source === BackendSourceValueMap.CUSTOM - ? BackendSourceLabelMap[BackendSourceValueMap.USER_DEFINED] - : BackendSourceLabelMap[backend_source], - isLeaf: false, - children: backends - })); -}; - export default function useQueryBackends() { const [backendOptions, setBackendOptions] = useAtom(backendOptionsAtom); const [flatBackendOptions, setFlatBackendOptions] = useState( @@ -50,6 +26,32 @@ export default function useQueryBackends() { ); const intl = useIntl(); + const groupByBackendSource = (list: BackendOption[]): BackendGroup[] => { + const map = list.reduce>((acc, item) => { + const key = item.backend_source; + + if (!acc[key]) { + acc[key] = []; + } + + acc[key].push(item); + return acc; + }, {}); + + return Object.entries(map).map(([backend_source, backends]) => { + const title = + backend_source === BackendSourceValueMap.CUSTOM + ? BackendSourceLabelMap[BackendSourceValueMap.USER_DEFINED] + : BackendSourceLabelMap[backend_source]; + return { + value: backend_source, + label: title ? intl.formatMessage({ id: title }) : backend_source, + isLeaf: false, + options: backends + }; + }); + }; + const getBackendOptions = async (params?: { cluster_id: number }) => { try { const res = await queryBackendList(params);