import { OnnxExecutionProvider, Framework, fileSelector } from "@dannadori/voice-changer-client-js" import React from "react" import { useMemo } from "react" import { ClientState } from "@dannadori/voice-changer-client-js"; export type UseServerSettingProps = { clientState: ClientState } export type ServerSettingState = { serverSetting: JSX.Element; } export const useServerSettingArea = (props: UseServerSettingProps): ServerSettingState => { const uploadeModelRow = useMemo(() => { const onPyTorchFileLoadClicked = async () => { const file = await fileSelector("") if (file.name.endsWith(".pth") == false) { alert("モデルファイルの拡張子はpthである必要があります。") return } props.clientState.serverSetting.setFileUploadSetting({ ...props.clientState.serverSetting.fileUploadSetting, pyTorchModel: file }) } const onPyTorchFileClearClicked = () => { props.clientState.serverSetting.setFileUploadSetting({ ...props.clientState.serverSetting.fileUploadSetting, pyTorchModel: null }) } const onConfigFileLoadClicked = async () => { const file = await fileSelector("") if (file.name.endsWith(".json") == false) { alert("モデルファイルの拡張子はjsonである必要があります。") return } props.clientState.serverSetting.setFileUploadSetting({ ...props.clientState.serverSetting.fileUploadSetting, configFile: file }) } const onConfigFileClearClicked = () => { props.clientState.serverSetting.setFileUploadSetting({ ...props.clientState.serverSetting.fileUploadSetting, configFile: null }) } const onOnnxFileLoadClicked = async () => { const file = await fileSelector("") if (file.name.endsWith(".onnx") == false) { alert("モデルファイルの拡張子はonnxである必要があります。") return } props.clientState.serverSetting.setFileUploadSetting({ ...props.clientState.serverSetting.fileUploadSetting, onnxModel: file }) } const onOnnxFileClearClicked = () => { props.clientState.serverSetting.setFileUploadSetting({ ...props.clientState.serverSetting.fileUploadSetting, onnxModel: null }) } const onModelUploadClicked = async () => { props.clientState.serverSetting.loadModel() } return ( <>
Model Uploader
Config(.json)
{props.clientState.serverSetting.fileUploadSetting.configFile?.name}
select
clear
PyTorch(.pth)
{props.clientState.serverSetting.fileUploadSetting.pyTorchModel?.name}
select
clear
Onnx(.onnx)
{props.clientState.serverSetting.fileUploadSetting.onnxModel?.name}
select
clear
{props.clientState.serverSetting.isUploading ? `uploading.... ${props.clientState.serverSetting.uploadProgress}%` : ""}
upload
) }, [ props.clientState.serverSetting.fileUploadSetting, props.clientState.serverSetting.loadModel, props.clientState.serverSetting.isUploading, props.clientState.serverSetting.uploadProgress]) const frameworkRow = useMemo(() => { const onFrameworkChanged = async (val: Framework) => { props.clientState.serverSetting.setFramework(val) } return (
Framework
) }, [props.clientState.serverSetting.setting.framework, props.clientState.serverSetting.setFramework]) const onnxExecutionProviderRow = useMemo(() => { if (props.clientState.serverSetting.setting.framework != "ONNX") { return } const onOnnxExecutionProviderChanged = async (val: OnnxExecutionProvider) => { props.clientState.serverSetting.setOnnxExecutionProvider(val) } return (
OnnxExecutionProvider
) }, [props.clientState.serverSetting.setting.framework, props.clientState.serverSetting.setting.onnxExecutionProvider, props.clientState.serverSetting.setOnnxExecutionProvider]) const serverSetting = useMemo(() => { return ( <>
Server Setting
{uploadeModelRow} {frameworkRow} {onnxExecutionProviderRow} ) }, [uploadeModelRow, frameworkRow, onnxExecutionProviderRow]) return { serverSetting, } }