diff --git a/src/components/logs-viewer/use-size.ts b/src/components/logs-viewer/use-size.ts index f3efd067..f1fac2c0 100644 --- a/src/components/logs-viewer/use-size.ts +++ b/src/components/logs-viewer/use-size.ts @@ -1,25 +1,32 @@ import { useEffect, useState } from 'react'; -const useResizeObserver = (ref: React.RefObject) => { +export const useResizeObserver = (ref: React.RefObject) => { const [size, setSize] = useState({ width: 0, height: 0 }); useEffect(() => { const element = ref.current; if (!element) return; - const observer = new ResizeObserver((entries) => { - if (entries[0]) { - const { width, height } = entries[0].contentRect; - setSize({ width, height }); - } + const updateSize = () => { + const rect = element.getBoundingClientRect(); + setSize((prev) => { + if (prev.width === rect.width && prev.height === rect.height) + return prev; + return { width: rect.width, height: rect.height }; + }); + }; + + const observer = new ResizeObserver(() => { + updateSize(); }); observer.observe(element); + updateSize(); return () => { observer.disconnect(); }; - }, [ref]); + }, [ref.current]); return size; }; diff --git a/src/pages/_components/column-wrapper/index.tsx b/src/pages/_components/column-wrapper/index.tsx index 451f3e43..70fa45f5 100644 --- a/src/pages/_components/column-wrapper/index.tsx +++ b/src/pages/_components/column-wrapper/index.tsx @@ -18,17 +18,17 @@ const ColumnWrapper: React.FC = ({ children, footer, maxHeight, - paddingBottom = 50, styles = {} }) => { const scroller = React.useRef(null); + const footerRef = React.useRef(null); + const contentRef = React.useRef(null); const { initialize, instance, scrollEventElement, scrollToBottom, scrollToTarget, - getScrollElement, getScrollElementScrollableHeight } = useOverlayScroller({ options: { @@ -44,13 +44,28 @@ const ColumnWrapper: React.FC = ({ } }, []); + React.useLayoutEffect(() => { + if (!scroller.current || !footerRef.current || !contentRef.current) return; + + const updatePadding = () => { + const height = footerRef.current!.getBoundingClientRect().height; + contentRef.current!.style.paddingBottom = `${height - 22}px`; + }; + + updatePadding(); + + const observer = new ResizeObserver(updatePadding); + observer.observe(footerRef.current); + + return () => observer.disconnect(); + }, []); + return ( = ({ ref={scroller} style={{ padding: '16px 24px', ...styles.container }} > -
- {children} -
+
{children}
- {footer &&
{footer}
} + {footer && ( +
+ {footer} +
+ )}
); diff --git a/src/pages/backends/config/index.ts b/src/pages/backends/config/index.ts index 48309ec2..d354bf51 100644 --- a/src/pages/backends/config/index.ts +++ b/src/pages/backends/config/index.ts @@ -192,20 +192,20 @@ export const frameworks = [ ]; export const yamlTemplate = `# backend configuration template -backend_name: my-backend-custom -description: this is my-backend -default_version: v0.5.1 +backend_name: vllm-custom +description: this is my custom vllm backend +default_version: v0.11.0 health_check_path: /${GPUSTACK_API_BASE_URL}/models default_backend_param: - --host -default_run_command: myBackend serve {{model_path}} --port {{port}} +default_run_command: vllm serve {{model_path}} --port {{port}} --served-model-name {{model_name}} version_configs: - v0.0.1: - image_name: lm/mybackend:latest - run_command: myBackend serve {{model_path}} --port {{port}} + v0.11.0: + image_name: lm/vllm:latest + run_command: vllm serve {{model_path}} --port {{port}} --served-model-name {{model_name}} custom_framework: cuda - v0.0.2: - image_name: lm/mybackend:test + v0.10.0: + image_name: lm/vllm:test run_command: custom_framework: `; diff --git a/src/pages/backends/forms/basic.tsx b/src/pages/backends/forms/basic.tsx index 90c00806..ceb2ebeb 100644 --- a/src/pages/backends/forms/basic.tsx +++ b/src/pages/backends/forms/basic.tsx @@ -55,7 +55,7 @@ const BasicForm: React.FC = ({ action, currentData }) => { = (props) => { const { title, @@ -97,7 +95,6 @@ const AddModal: React.FC = (props) => { const axiosToken = useRef(null); const selectSpecRef = useRef({} as CatalogSpec); const specListRef = useRef([]); - const hasF16Ref = useRef(false); const handleSumit = () => { form.current?.submit?.(); @@ -361,13 +358,6 @@ const AddModal: React.FC = (props) => { paddingTop: 0 } }} - paddingBottom={ - warningStatus.show - ? Array.isArray(warningStatus.message) - ? 150 - : 125 - : 50 - } footer={ <> = (props) => { = (props) => { paddingTop: 0 } }} - paddingBottom={warningStatus.show ? 100 : 50} footer={ <> = (props) => { )} { { })} placeholder={intl.formatMessage( { id: 'common.help.eg' }, - { content: 'vllm serve {{model_path}} --port {{port}}' } + { + content: + 'vllm serve {{model_path}} --port {{port}} --served-model-name {{model_name}}' + } )} > diff --git a/src/pages/llmodels/forms/index.tsx b/src/pages/llmodels/forms/index.tsx index 035e8188..54771cbd 100644 --- a/src/pages/llmodels/forms/index.tsx +++ b/src/pages/llmodels/forms/index.tsx @@ -103,12 +103,9 @@ const DataForm: React.FC = forwardRef((props, ref) => { onClusterChange, onOk } = props; - const { - getScrollElementScrollableHeight, - getScrollElement, - osInstance, - scrollEventElement - } = useWrapperContext(); + const { getScrollElementScrollableHeight, osInstance, scrollEventElement } = + useWrapperContext(); + console.log('data form render'); const { backendOptions, getBackendOptions } = useQueryBackends(); const { getGPUOptionList, gpuOptions, workerLabelOptions } = useGenerateGPUOptions(); @@ -171,7 +168,6 @@ const DataForm: React.FC = forwardRef((props, ref) => { setActiveKey, segmentOptions, segmentedTop: segmentedTop, - getScrollElement, getScrollElementScrollableHeight: getScrollElementScrollableHeight }); diff --git a/src/pages/llmodels/hooks/use-field-scroll.ts b/src/pages/llmodels/hooks/use-field-scroll.ts index e1f54754..f28ca18c 100644 --- a/src/pages/llmodels/hooks/use-field-scroll.ts +++ b/src/pages/llmodels/hooks/use-field-scroll.ts @@ -15,8 +15,7 @@ export default function useScrollAfterExpand({ segmentOptions, defaultWait = 300, segmentedTop = { top: 0, offsetTop: 96 }, - getScrollElementScrollableHeight, - getScrollElement + getScrollElementScrollableHeight }: { form: any; activeKey: string[]; @@ -26,7 +25,6 @@ export default function useScrollAfterExpand({ scrollHeight: number; scrollTop: number; }; - getScrollElement?: () => HTMLElement | null; defaultWait?: number; segmentedTop: { top: number; diff --git a/src/pages/playground/config/params-config.ts b/src/pages/playground/config/params-config.ts index c7122034..525712de 100644 --- a/src/pages/playground/config/params-config.ts +++ b/src/pages/playground/config/params-config.ts @@ -125,6 +125,9 @@ export const ImageParamsConfig: ParamsSchema[] = [ min: 1, max: 4 }, + formItemAttrs: { + hidden: true + }, rules: [ { required: false @@ -164,6 +167,9 @@ export const ImageCountConfig: ParamsSchema[] = [ min: 1, max: 4 }, + formItemAttrs: { + hidden: true + }, rules: [ { required: false @@ -223,6 +229,9 @@ export const ImageEidtParamsConfig: ParamsSchema[] = [ min: 1, max: 4 }, + formItemAttrs: { + hidden: true + }, rules: [ { required: false diff --git a/src/pages/playground/style/ground-left.less b/src/pages/playground/style/ground-left.less index 791604e0..e7828f65 100644 --- a/src/pages/playground/style/ground-left.less +++ b/src/pages/playground/style/ground-left.less @@ -90,6 +90,7 @@ left: calc(50% + 10px); transform: translateX(-50%); background-color: transparent; + cursor: ns-resize; } } }