fix: set default spec to form

This commit is contained in:
jialin
2025-06-03 15:16:52 +08:00
parent 31ea81c211
commit ed28bcdfb0
10 changed files with 128 additions and 45 deletions
+7 -2
View File
@@ -7,10 +7,14 @@ interface UploadAudioProps {
accept?: string;
maxCount?: number;
type?: 'text' | 'primary' | 'default';
icon?: React.ReactNode;
size?: 'small' | 'middle' | 'large';
shape?: 'circle' | 'round' | 'default';
onChange?: (data: { file: any; fileList: any[] }) => void;
}
const UploadAudio: React.FC<UploadAudioProps> = (props) => {
const { icon, accept, type, size = 'large', shape = 'circle' } = props;
const intl = useIntl();
const beforeUpload = (file: any) => {
return false;
@@ -48,9 +52,10 @@ const UploadAudio: React.FC<UploadAudioProps> = (props) => {
}}
>
<Button
icon={<UploadOutlined />}
size={size}
icon={icon ?? <UploadOutlined />}
type={props.type ?? 'text'}
shape="circle"
shape={shape}
></Button>
</div>
</Upload>
@@ -132,8 +132,7 @@ const AddModal: React.FC<AddModalProps> = (props) => {
'worker_selector',
'gpu_selector',
'env',
'backend_version',
'backend_parameters'
'backend_version'
]);
};
+21 -4
View File
@@ -38,7 +38,8 @@ const resetFieldsByModel = [
const resetFieldsByFile = [
'cpu_offloading',
'distributed_inference_across_workers'
'distributed_inference_across_workers',
'backend_parameters'
];
const ModalFooterStyle = {
@@ -99,6 +100,7 @@ const AddModal: FC<AddModalProps> = (props) => {
handleBackendChangeBefore,
cancelEvaluate,
handleOnValuesChange,
handleEvaluateOnChange,
warningStatus,
submitAnyway
} = useCheckCompatibility();
@@ -140,22 +142,37 @@ const AddModal: FC<AddModalProps> = (props) => {
return categories || null;
};
const handleSelectModelFile = (item: any, evaluate?: boolean) => {
const handleSelectModelFile = async (item: any, evaluate?: boolean) => {
form.current?.form?.resetFields(resetFieldsByFile);
const modelInfo = onSelectModel(selectedModel, props.source);
form.current?.setFieldsValue?.({
file_name: item.fakeName,
...getDefaultSpec(item),
...modelInfo,
categories: getCategory(item)
});
await new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, 0);
});
if (item.fakeName) {
handleOnValuesChange?.({
const evaluateRes = await handleEvaluateOnChange?.({
changedValues: {},
allValues: form.current?.form?.getFieldsValue?.(),
source: props.source
});
const defaultSpec = getDefaultSpec({
evaluateResult: evaluateRes
});
console.log('defaultSpec', defaultSpec);
form.current?.setFieldsValue?.({
file_name: item.fakeName,
...defaultSpec,
...modelInfo,
categories: getCategory(item)
});
}
};
@@ -604,6 +604,10 @@ const options = [
{
label: '--swa-full',
value: '--swa-full'
},
{
label: '--no-enable-reasoning',
value: '--no-enable-reasoning'
}
];
+7 -2
View File
@@ -7,6 +7,7 @@ import {
import { ListItem as WorkerListItem } from '@/pages/resources/config/types';
import { convertFileSize } from '@/utils';
import { useIntl } from '@umijs/max';
import { useDebounceFn } from 'ahooks';
import _ from 'lodash';
import { useEffect, useRef, useState } from 'react';
import { evaluationsModelSpec, queryGPUList } from '../apis';
@@ -513,7 +514,7 @@ export const useCheckCompatibility = () => {
cacheFormValuesRef.current = allValues;
const data = getSourceRepoConfigValue(source, allValues);
const gpuSelector = generateGPUIds(data.values);
await handleDoEvalute({
return await handleDoEvalute({
...data.values,
...gpuSelector
});
@@ -537,7 +538,10 @@ export const useCheckCompatibility = () => {
return res;
};
const debounceHandleValuesChange = _.debounce(handleOnValuesChange, 500);
const { run: debounceHandleValuesChange } = useDebounceFn(
handleOnValuesChange,
{ wait: 500 }
);
const cancelEvaluate = () => {
checkTokenRef.current?.cancel();
@@ -561,6 +565,7 @@ export const useCheckCompatibility = () => {
cancelEvaluate,
handleBackendChangeBefore,
handleOnValuesChange: debounceHandleValuesChange,
handleEvaluateOnChange: handleOnValuesChange,
warningStatus,
checkTokenRef,
submitAnyway
@@ -1,5 +1,6 @@
import IconFont from '@/components/icon-font';
import HotKeys, { KeyMap } from '@/config/hotkeys';
import { convertFileToBase64 } from '@/utils/load-audio-file';
import { ClearOutlined, SendOutlined, SwapOutlined } from '@ant-design/icons';
import { useIntl } from '@umijs/max';
import { Button, Checkbox, Divider, Input, Tooltip } from 'antd';
@@ -19,6 +20,12 @@ import '../style/message-input.less';
import ThumbImg from './thumb-img';
import UploadImg from './upload-img';
const audioTypeMap: Record<string, string> = {
'audio/wav': 'wav',
'audio/mp3': 'mp3',
'audio/mpeg': 'mp3'
};
type CurrentMessage = Omit<MessageItem, 'uid'>;
type ActionType =
@@ -260,6 +267,26 @@ const MessageInput: React.FC<MessageInputProps> = forwardRef(
});
};
const handleUploadAudioChange = async (data: {
file: any;
fileList: any[];
}) => {
// convert audio file to base64
try {
console.log('audio file====', data.file);
const base64Audio = await convertFileToBase64(data.file);
setMessage({
...message,
audio: {
format: audioTypeMap[data.file.type],
dataUrl: base64Audio
}
});
} catch (error) {
console.error('Error converting audio to Base64:', error);
}
};
const handleDeleteImg = (uid: number | string) => {
const list = _.filter(
message.imgs,
@@ -360,6 +387,22 @@ const MessageInput: React.FC<MessageInputProps> = forwardRef(
size="middle"
></UploadImg>
)}
{/* {actions.includes('upload') && message.role === Roles.User && (
<UploadAudio
type="text"
accept={'.mp3,.wav'}
size="middle"
shape="default"
icon={<CustomerServiceOutlined />}
onChange={handleUploadAudioChange}
></UploadAudio>
)} */}
{actions.includes('upload') && message.role === Roles.User && (
<UploadImg
handleUpdateImgList={handleUpdateImgList}
size="middle"
></UploadImg>
)}
{tools}
{actions.includes('clear') && (
<Tooltip
+1
View File
@@ -16,6 +16,7 @@ export type MessageItemAction =
export interface MessageItem {
content: string;
imgs?: { uid: string | number; dataUrl: string }[];
audio?: { uid: string | number; dataUrl: string; format: 'wav' | 'mp3' };
role: string;
title?: React.ReactNode;
uid: number;
+9
View File
@@ -1,5 +1,14 @@
import { convertFileSize } from './index';
export const convertFileToBase64 = (file: File): Promise<string> => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result as string);
reader.onerror = (error) => reject(error);
});
};
export const loadAudioData = async (data: any, type: string) => {
return new Promise((resolve, reject) => {
try {