import IconFont from '@/components/icon-font'; import { StatusMaps } from '@/config'; import { AudioOutlined, EditOutlined, PictureOutlined, WechatWorkOutlined } from '@ant-design/icons'; import React from 'react'; import { backendOptionsMap } from './backend-parameters'; export const backendTipsList = [ { title: backendOptionsMap.vllm, tips: 'models.form.backend.vllm' }, { title: backendOptionsMap.SGLang, tips: 'models.form.backend.sglang' }, { title: backendOptionsMap.ascendMindie, tips: 'models.form.backend.mindie' }, { title: backendOptionsMap.voxBox, tips: 'models.form.backend.voxbox' } ]; export const localPathTipsList = [ { title: { text: 'models.localpath.gguf.tips.title', locale: true }, tips: 'models.localpath.gguf.tips' }, { title: { text: 'models.localpath.shared.tips.title', locale: true }, tips: 'models.localpath.chunks.tips' }, { title: { text: 'models.localpat.safe.tips.title', locale: true }, tips: 'models.localpath.safe.tips' } ]; export const backendLabelMap = { [backendOptionsMap.llamaBox]: 'llama-box', [backendOptionsMap.vllm]: 'vLLM', [backendOptionsMap.voxBox]: 'vox-box', [backendOptionsMap.ascendMindie]: 'Ascend MindIE', [backendOptionsMap.custom]: 'Custom' }; export const backendParamsHolderTips = { [backendOptionsMap.llamaBox]: { holder: 'models.form.backend_parameters.llamabox.placeholder', tooltip: 'models.form.backend_parameters.vllm.tips' }, [backendOptionsMap.vllm]: { holder: 'models.form.backend_parameters.vllm.placeholder', tooltip: 'models.form.backend_parameters.vllm.tips' }, [backendOptionsMap.SGLang]: { holder: 'models.form.backend_parameters.sglang.placeholder', tooltip: '' }, [backendOptionsMap.voxBox]: null }; export const modelTaskMap = { textToSpeech: 'text-to-speech', speechToText: 'speech-to-text', textToText: 'text-to-text', textToImage: 'text-to-image', audio: 'audio', image: 'image' }; export const ModelscopeTaskMap = { [modelTaskMap.textToSpeech]: 'text-to-speech', [modelTaskMap.speechToText]: 'auto-speech-recognition', [modelTaskMap.textToText]: 'TextToText', [modelTaskMap.textToImage]: 'text-to-image', audio: ['text-to-speech', 'auto-speech-recognition'] }; export const HuggingFaceTaskMap = { [modelTaskMap.textToSpeech]: 'text-to-speech', [modelTaskMap.speechToText]: 'automatic-speech-recognition', [modelTaskMap.textToText]: 'text-2-text', [modelTaskMap.textToImage]: 'text-to-image', audio: ['text-to-speech', 'automatic-speech-recognition'] }; export const AudioModeTypeMap = { FunASR: ['FunASR', 'funasr', 'fun-asr', 'fun_asr'], Bark: ['Bark', 'bark'], Whisper: ['Whisper', 'whisper'], CosyVoice: ['CosyVoice', 'cosyvoice', 'cosy-voice', 'cosy_voice'] }; interface ModelSource { huggingface: string; huggingface_value: string; ollama_library: string; ollama_library_value: string; modelScope: string; modelscope_value: string; local_path: string; local_path_value: string; model_scope: string; } export const modelSourceMap: ModelSource = { huggingface: 'Hugging Face', huggingface_value: 'huggingface', ollama_library: 'Ollama Library', ollama_library_value: 'ollama_library', modelScope: 'ModelScope', modelscope_value: 'model_scope', model_scope: 'ModelScope', local_path: 'Local Path', local_path_value: 'local_path' }; export const modelSourceValueMap = { [modelSourceMap.huggingface_value]: modelSourceMap.huggingface, [modelSourceMap.ollama_library_value]: modelSourceMap.ollama_library, [modelSourceMap.modelscope_value]: modelSourceMap.modelScope, [modelSourceMap.local_path_value]: modelSourceMap.local_path }; export const sourceOptions = [ { label: 'Hugging Face', value: modelSourceMap.huggingface_value, key: 'huggingface' }, { label: 'ModelScope', value: modelSourceMap.modelscope_value, key: 'model_scope' }, { label: 'models.form.localPath', locale: true, value: modelSourceMap.local_path_value, key: 'local_path' } ]; export const InstanceStatusMap = { Initializing: 'initializing', Starting: 'starting', Pending: 'pending', Running: 'running', Scheduled: 'scheduled', Error: 'error', Downloading: 'downloading', Unknown: 'unknown', Analyzing: 'analyzing', Unreachable: 'unreachable' }; export const InstanceRealtimeLogStatus = [ InstanceStatusMap.Downloading, InstanceStatusMap.Initializing, InstanceStatusMap.Starting ]; export const InstanceStatusMapValue = { [InstanceStatusMap.Initializing]: 'Initializing', [InstanceStatusMap.Pending]: 'Pending', [InstanceStatusMap.Running]: 'Running', [InstanceStatusMap.Scheduled]: 'Scheduled', [InstanceStatusMap.Error]: 'Error', [InstanceStatusMap.Downloading]: 'Downloading', [InstanceStatusMap.Unknown]: 'Unknown', [InstanceStatusMap.Analyzing]: 'Analyzing', [InstanceStatusMap.Starting]: 'Starting', [InstanceStatusMap.Unreachable]: 'Unreachable' }; export const status: any = { [InstanceStatusMap.Running]: StatusMaps.success, [InstanceStatusMap.Pending]: StatusMaps.transitioning, [InstanceStatusMap.Initializing]: StatusMaps.transitioning, [InstanceStatusMap.Scheduled]: StatusMaps.transitioning, [InstanceStatusMap.Error]: StatusMaps.error, [InstanceStatusMap.Downloading]: StatusMaps.transitioning, [InstanceStatusMap.Unknown]: StatusMaps.inactive, [InstanceStatusMap.Analyzing]: StatusMaps.transitioning, [InstanceStatusMap.Starting]: StatusMaps.transitioning, [InstanceStatusMap.Unreachable]: StatusMaps.error }; export const MyModelsStatusValueMap = { Inactive: 'stopped', Degrade: 'not_ready', Active: 'ready' }; export const MyModelsStatusMap = { [MyModelsStatusValueMap.Inactive]: StatusMaps.inactive, [MyModelsStatusValueMap.Degrade]: StatusMaps.error, [MyModelsStatusValueMap.Active]: StatusMaps.success }; export const MyModelsStatusLabelMap = { [MyModelsStatusValueMap.Inactive]: 'models.mymodels.status.inactive', [MyModelsStatusValueMap.Degrade]: 'models.mymodels.status.degrade', [MyModelsStatusValueMap.Active]: 'models.mymodels.status.active' }; export const ScheduleValueMap = { Auto: 'auto', Manual: 'manual', SpecificGPUType: 'specific_gpu_type' }; export const scheduleList = [ { label: 'models.form.scheduletype.auto', locale: true, value: ScheduleValueMap.Auto }, { label: 'models.form.scheduletype.manual', value: ScheduleValueMap.Manual, locale: true } // { // label: 'models.form.scheduletype.gpuType', // value: ScheduleValueMap.SpecificGPUType, // locale: true // } ]; export const ActionList = [ { label: 'common.button.edit', key: 'edit', icon: EditOutlined }, { label: 'models.openinplayground', key: 'chat', icon: EditOutlined }, { label: 'common.button.delete', key: 'delete', icon: EditOutlined } ]; export const ModelSortType = { trendingScore: 'trendingScore', likes: 'likes', downloads: 'downloads', lastModified: 'lastModified' }; export const ModelScopeSortType = { [ModelSortType.trendingScore]: 'Default', [ModelSortType.likes]: 'StarsCount', [ModelSortType.downloads]: 'DownloadsCount', [ModelSortType.lastModified]: 'GmtModified' }; export const placementStrategyOptions = [ { label: 'Spread', value: 'spread' }, { label: 'Binpack', value: 'binpack' } ]; export const modelCategoriesMap = { image: 'image', text_to_speech: 'text_to_speech', speech_to_text: 'speech_to_text', embedding: 'embedding', reranker: 'reranker', llm: 'llm' }; export const categoryOptions = [ { label: 'LLM', value: modelCategoriesMap.llm, icon: React.createElement(WechatWorkOutlined, { style: { color: 'green' } }) }, { label: 'Embedding', value: modelCategoriesMap.embedding, icon: React.createElement(IconFont, { type: 'icon-cube', style: { color: 'magenta' } }) }, { label: 'Reranker', value: modelCategoriesMap.reranker, icon: React.createElement(IconFont, { type: 'icon-rank1', style: { color: 'cyan' } }) }, { label: 'Image', value: modelCategoriesMap.image, icon: React.createElement(PictureOutlined, { style: { color: 'orange' } }) }, { label: 'Text-to-Speech', value: modelCategoriesMap.text_to_speech, icon: React.createElement(IconFont, { type: 'icon-sound-wave', style: { color: 'geekblue' } }) }, { label: 'Speech-to-Text', value: modelCategoriesMap.speech_to_text, icon: React.createElement(AudioOutlined, { style: { color: 'processing' } }) } ]; export const modelCategories = [ { label: 'common.options.auto', value: null, locale: true }, ...categoryOptions ]; export const getbackendParameters = (data: any) => { const backendParameters = data.backend_parameters || {}; const result: string[] = []; Object.keys(backendParameters)?.forEach((key: string) => { result.push(`${key}=${backendParameters[key]}`); }); return result; }; export const setbackendParameters = (data: any) => { const result: Record = {}; const backendParameters = data.backend_parameters || []; backendParameters.forEach((item: string) => { const [key, value] = item.split('='); result[key] = value; }); return result; }; export const modelLabels = [ { label: 'Image', value: 'image_only' }, { label: 'Text-to-speech', value: 'text_to_speech' }, { label: 'Speech-to-text', value: 'speech_to_text' }, { label: 'reranker', value: 'reranker' }, { label: 'Embedding', value: 'embedding_only' } ]; // do not trigger form check compatibility when these fields change, maybe triggered manually export const DO_NOT_TRIGGER_CHECK_COMPATIBILITY = [ 'model_scope_model_id', 'huggingface_repo_id', 'huggingface_filename', 'model_scope_file_path', 'name', 'description', 'env', 'source', 'cluster_id', 'quantization', 'size', 'restart_on_error', 'worker_selector', 'backend_parameters', 'local_path', 'backend_version', 'ollama_library_model_name', 'scheduleType', 'placement_strategy', 'backend', 'gpu_selector.gpu_ids', 'run_command', 'image_name', 'extended_kv_cache.enabled', 'extended_kv_cache.ram_size', 'speculative_config.enabled', 'speculative_config.draft_model', 'max_context_len' ]; // ignore to compare old and new data when these fields change in updating model export const DO_NOT_NOTIFY_RECREATE = ['categories', 'replicas', 'description']; export const defaultFormValues = { replicas: 1, description: '', categories: null, env: {}, scheduleType: ScheduleValueMap.Auto, placement_strategy: 'spread', gpu_ids: null, gpu_selector: {}, worker_selector: {}, backend_parameters: [], backend_version: null }; export const getBackendParamsTips = (backend: string) => { if (backend === backendOptionsMap.llamaBox) { return { backend: 'llama-box', releases: 'https://github.com/gpustack/llama-box/releases', link: 'https://github.com/gpustack/llama-box?tab=readme-ov-file#usage', version: 'v0.0.140' }; } if (backend === backendOptionsMap.vllm) { return { backend: 'vLLM', releases: 'https://github.com/vllm-project/vllm/releases', link: 'https://docs.vllm.ai/en/stable/cli/serve.html', version: 'v0.8.5' }; } if (backend === backendOptionsMap.ascendMindie) { return { backend: 'Ascend MindIE', releases: '', link: 'http://docs.gpustack.ai/latest/user-guide/inference-backends/#parameters-reference_2', version: '1.0.0' }; } if (backend === backendOptionsMap.SGLang) { return { backend: 'SGLang', releases: '', link: 'https://docs.sglang.ai/advanced_features/server_arguments.html', version: 'v0.5.4' }; } return { backend: 'vox-box', releases: 'https://github.com/gpustack/vox-box/releases', link: '', version: 'v0.0.13' }; }; export const scheduleTypeTips = [ { title: { text: 'models.form.scheduletype.auto', locale: true }, tips: 'models.form.scheduletype.auto.tips' }, { title: { text: 'models.form.scheduletype.manual', locale: true }, tips: 'models.form.scheduletype.manual.tips' } ]; // transform to enum type export enum DeployFormKeyMap { DEPLOYMENT = 'deployment', CATALOG = 'catalog' }