xinference 1.10.0__py3-none-any.whl → 1.10.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of xinference might be problematic. Click here for more details.
- xinference/_version.py +3 -3
- xinference/api/restful_api.py +11 -28
- xinference/client/restful/async_restful_client.py +20 -3
- xinference/client/restful/restful_client.py +20 -3
- xinference/core/supervisor.py +87 -53
- xinference/core/worker.py +10 -0
- xinference/deploy/cmdline.py +15 -0
- xinference/model/audio/core.py +21 -6
- xinference/model/audio/indextts2.py +166 -0
- xinference/model/audio/model_spec.json +38 -1
- xinference/model/image/model_spec.json +69 -0
- xinference/model/image/stable_diffusion/core.py +13 -4
- xinference/model/llm/__init__.py +4 -0
- xinference/model/llm/llm_family.json +464 -2
- xinference/model/llm/sglang/core.py +30 -11
- xinference/model/llm/tool_parsers/deepseek_r1_tool_parser.py +94 -32
- xinference/model/llm/transformers/multimodal/qwen2_vl.py +34 -8
- xinference/model/llm/utils.py +12 -9
- xinference/model/llm/vllm/core.py +93 -17
- xinference/thirdparty/audiotools/__init__.py +10 -0
- xinference/thirdparty/audiotools/core/__init__.py +4 -0
- xinference/thirdparty/audiotools/core/audio_signal.py +1682 -0
- xinference/thirdparty/audiotools/core/display.py +194 -0
- xinference/thirdparty/audiotools/core/dsp.py +390 -0
- xinference/thirdparty/audiotools/core/effects.py +647 -0
- xinference/thirdparty/audiotools/core/ffmpeg.py +211 -0
- xinference/thirdparty/audiotools/core/loudness.py +320 -0
- xinference/thirdparty/audiotools/core/playback.py +252 -0
- xinference/thirdparty/audiotools/core/templates/__init__.py +0 -0
- xinference/thirdparty/audiotools/core/templates/headers.html +322 -0
- xinference/thirdparty/audiotools/core/templates/pandoc.css +407 -0
- xinference/thirdparty/audiotools/core/templates/widget.html +52 -0
- xinference/thirdparty/audiotools/core/util.py +671 -0
- xinference/thirdparty/audiotools/core/whisper.py +97 -0
- xinference/thirdparty/audiotools/data/__init__.py +3 -0
- xinference/thirdparty/audiotools/data/datasets.py +517 -0
- xinference/thirdparty/audiotools/data/preprocess.py +81 -0
- xinference/thirdparty/audiotools/data/transforms.py +1592 -0
- xinference/thirdparty/audiotools/metrics/__init__.py +6 -0
- xinference/thirdparty/audiotools/metrics/distance.py +131 -0
- xinference/thirdparty/audiotools/metrics/quality.py +159 -0
- xinference/thirdparty/audiotools/metrics/spectral.py +247 -0
- xinference/thirdparty/audiotools/ml/__init__.py +5 -0
- xinference/thirdparty/audiotools/ml/accelerator.py +184 -0
- xinference/thirdparty/audiotools/ml/decorators.py +440 -0
- xinference/thirdparty/audiotools/ml/experiment.py +90 -0
- xinference/thirdparty/audiotools/ml/layers/__init__.py +2 -0
- xinference/thirdparty/audiotools/ml/layers/base.py +328 -0
- xinference/thirdparty/audiotools/ml/layers/spectral_gate.py +127 -0
- xinference/thirdparty/audiotools/post.py +140 -0
- xinference/thirdparty/audiotools/preference.py +600 -0
- xinference/thirdparty/indextts/BigVGAN/ECAPA_TDNN.py +656 -0
- xinference/thirdparty/indextts/BigVGAN/__init__.py +0 -0
- xinference/thirdparty/indextts/BigVGAN/activations.py +122 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/__init__.py +0 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/.gitignore +1 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/__init__.py +0 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/activation1d.py +76 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/anti_alias_activation.cpp +23 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/anti_alias_activation_cuda.cu +256 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/compat.h +29 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/load.py +121 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/type_shim.h +92 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/__init__.py +6 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/act.py +31 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/filter.py +102 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/resample.py +58 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_torch/__init__.py +6 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_torch/act.py +29 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_torch/filter.py +96 -0
- xinference/thirdparty/indextts/BigVGAN/alias_free_torch/resample.py +49 -0
- xinference/thirdparty/indextts/BigVGAN/bigvgan.py +534 -0
- xinference/thirdparty/indextts/BigVGAN/models.py +451 -0
- xinference/thirdparty/indextts/BigVGAN/nnet/CNN.py +546 -0
- xinference/thirdparty/indextts/BigVGAN/nnet/__init__.py +0 -0
- xinference/thirdparty/indextts/BigVGAN/nnet/linear.py +89 -0
- xinference/thirdparty/indextts/BigVGAN/nnet/normalization.py +670 -0
- xinference/thirdparty/indextts/BigVGAN/utils.py +101 -0
- xinference/thirdparty/indextts/__init__.py +0 -0
- xinference/thirdparty/indextts/cli.py +65 -0
- xinference/thirdparty/indextts/gpt/__init__.py +0 -0
- xinference/thirdparty/indextts/gpt/conformer/__init__.py +0 -0
- xinference/thirdparty/indextts/gpt/conformer/attention.py +312 -0
- xinference/thirdparty/indextts/gpt/conformer/embedding.py +163 -0
- xinference/thirdparty/indextts/gpt/conformer/subsampling.py +348 -0
- xinference/thirdparty/indextts/gpt/conformer_encoder.py +520 -0
- xinference/thirdparty/indextts/gpt/model.py +713 -0
- xinference/thirdparty/indextts/gpt/model_v2.py +747 -0
- xinference/thirdparty/indextts/gpt/perceiver.py +317 -0
- xinference/thirdparty/indextts/gpt/transformers_beam_search.py +1013 -0
- xinference/thirdparty/indextts/gpt/transformers_generation_utils.py +4747 -0
- xinference/thirdparty/indextts/gpt/transformers_gpt2.py +1878 -0
- xinference/thirdparty/indextts/gpt/transformers_modeling_utils.py +5525 -0
- xinference/thirdparty/indextts/infer.py +690 -0
- xinference/thirdparty/indextts/infer_v2.py +739 -0
- xinference/thirdparty/indextts/s2mel/dac/__init__.py +16 -0
- xinference/thirdparty/indextts/s2mel/dac/__main__.py +36 -0
- xinference/thirdparty/indextts/s2mel/dac/model/__init__.py +4 -0
- xinference/thirdparty/indextts/s2mel/dac/model/base.py +294 -0
- xinference/thirdparty/indextts/s2mel/dac/model/dac.py +400 -0
- xinference/thirdparty/indextts/s2mel/dac/model/discriminator.py +228 -0
- xinference/thirdparty/indextts/s2mel/dac/model/encodec.py +320 -0
- xinference/thirdparty/indextts/s2mel/dac/nn/__init__.py +3 -0
- xinference/thirdparty/indextts/s2mel/dac/nn/layers.py +33 -0
- xinference/thirdparty/indextts/s2mel/dac/nn/loss.py +368 -0
- xinference/thirdparty/indextts/s2mel/dac/nn/quantize.py +339 -0
- xinference/thirdparty/indextts/s2mel/dac/utils/__init__.py +123 -0
- xinference/thirdparty/indextts/s2mel/dac/utils/decode.py +95 -0
- xinference/thirdparty/indextts/s2mel/dac/utils/encode.py +94 -0
- xinference/thirdparty/indextts/s2mel/hf_utils.py +12 -0
- xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/__init__.py +5 -0
- xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/act.py +29 -0
- xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/filter.py +96 -0
- xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/resample.py +57 -0
- xinference/thirdparty/indextts/s2mel/modules/audio.py +82 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/activations.py +120 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py +0 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py +77 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp +23 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu +246 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h +29 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py +86 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h +92 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py +6 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py +30 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py +101 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py +58 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/bigvgan.py +492 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/config.json +63 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/env.py +18 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/meldataset.py +354 -0
- xinference/thirdparty/indextts/s2mel/modules/bigvgan/utils.py +99 -0
- xinference/thirdparty/indextts/s2mel/modules/campplus/DTDNN.py +115 -0
- xinference/thirdparty/indextts/s2mel/modules/campplus/classifier.py +70 -0
- xinference/thirdparty/indextts/s2mel/modules/campplus/layers.py +253 -0
- xinference/thirdparty/indextts/s2mel/modules/commons.py +632 -0
- xinference/thirdparty/indextts/s2mel/modules/diffusion_transformer.py +257 -0
- xinference/thirdparty/indextts/s2mel/modules/encodec.py +292 -0
- xinference/thirdparty/indextts/s2mel/modules/flow_matching.py +171 -0
- xinference/thirdparty/indextts/s2mel/modules/gpt_fast/generate.py +436 -0
- xinference/thirdparty/indextts/s2mel/modules/gpt_fast/model.py +360 -0
- xinference/thirdparty/indextts/s2mel/modules/gpt_fast/quantize.py +622 -0
- xinference/thirdparty/indextts/s2mel/modules/hifigan/f0_predictor.py +55 -0
- xinference/thirdparty/indextts/s2mel/modules/hifigan/generator.py +454 -0
- xinference/thirdparty/indextts/s2mel/modules/layers.py +354 -0
- xinference/thirdparty/indextts/s2mel/modules/length_regulator.py +141 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/__init__.py +0 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/api.py +186 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/attentions.py +465 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/checkpoints_v2/converter/config.json +57 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/commons.py +160 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/mel_processing.py +183 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/models.py +499 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/modules.py +598 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/openvoice_app.py +275 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/se_extractor.py +153 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/transforms.py +209 -0
- xinference/thirdparty/indextts/s2mel/modules/openvoice/utils.py +194 -0
- xinference/thirdparty/indextts/s2mel/modules/quantize.py +229 -0
- xinference/thirdparty/indextts/s2mel/modules/rmvpe.py +631 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/__init__.py +4 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/heads.py +164 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/helpers.py +71 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/loss.py +114 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/models.py +118 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/modules.py +213 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/pretrained.py +51 -0
- xinference/thirdparty/indextts/s2mel/modules/vocos/spectral_ops.py +192 -0
- xinference/thirdparty/indextts/s2mel/modules/wavenet.py +174 -0
- xinference/thirdparty/indextts/s2mel/optimizers.py +96 -0
- xinference/thirdparty/indextts/s2mel/wav2vecbert_extract.py +148 -0
- xinference/thirdparty/indextts/utils/__init__.py +0 -0
- xinference/thirdparty/indextts/utils/arch_util.py +120 -0
- xinference/thirdparty/indextts/utils/checkpoint.py +34 -0
- xinference/thirdparty/indextts/utils/common.py +121 -0
- xinference/thirdparty/indextts/utils/feature_extractors.py +50 -0
- xinference/thirdparty/indextts/utils/front.py +536 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/__init__.py +0 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/codec.py +427 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py +11 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py +150 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py +77 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py +177 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py +401 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py +881 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_dataset.py +264 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_inference.py +515 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_sampler.py +126 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_trainer.py +166 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/__init__.py +0 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py +5 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py +29 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py +96 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py +57 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py +98 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py +137 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py +776 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py +1 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 +0 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py +219 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py +437 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/commons.py +331 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py +35 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/layers.py +460 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py +741 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py +110 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py +224 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/optimizer.py +104 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py +210 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/kmeans/vocos.py +850 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/melvqgan/melspec.py +108 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/README.md +216 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py +6 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py +5 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py +29 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py +96 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py +57 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py +1222 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py +35 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py +102 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py +7 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py +116 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py +87 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py +234 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/model.py +184 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py +27 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py +346 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py +46 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py +37 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py +14 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py +317 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py +388 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py +135 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py +125 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py +414 -0
- xinference/thirdparty/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py +592 -0
- xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt +0 -0
- xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py +650 -0
- xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py +503 -0
- xinference/thirdparty/indextts/utils/maskgct_utils.py +259 -0
- xinference/thirdparty/indextts/utils/text_utils.py +41 -0
- xinference/thirdparty/indextts/utils/typical_sampling.py +30 -0
- xinference/thirdparty/indextts/utils/utils.py +93 -0
- xinference/thirdparty/indextts/utils/webui_utils.py +42 -0
- xinference/thirdparty/indextts/utils/xtransformers.py +1247 -0
- xinference/thirdparty/indextts/vqvae/__init__.py +0 -0
- xinference/thirdparty/indextts/vqvae/xtts_dvae.py +395 -0
- xinference/ui/gradio/media_interface.py +66 -8
- xinference/ui/web/ui/build/asset-manifest.json +6 -6
- xinference/ui/web/ui/build/index.html +1 -1
- xinference/ui/web/ui/build/static/css/main.5ea97072.css +2 -0
- xinference/ui/web/ui/build/static/css/main.5ea97072.css.map +1 -0
- xinference/ui/web/ui/build/static/js/main.d192c4f3.js +3 -0
- xinference/ui/web/ui/build/static/js/{main.1086c759.js.LICENSE.txt → main.d192c4f3.js.LICENSE.txt} +0 -7
- xinference/ui/web/ui/build/static/js/main.d192c4f3.js.map +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/089c38df5f52348d212ed868dda5c518a42e0c2762caed4175487c0405830c35.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/2b6e3a5b6eb2c5c5f2d007e68cd46c372721cd52bf63508adcdb21ecf79241d8.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/2d887825fd07a56f872eda4420da25fba0b5b62a23bdcc6c6da1a5281887f618.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/4001f9c3e64e73a4f2158826650c174a59d5e3f89ddecddf17cbb6bb688cc4ca.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/4a7018a69e6b7f90fc313248c2aa86f2a8f1eb1db120df586047a8023549b44b.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/64b12aaa1c1d1bf53820ada8a63769067c0ccc5aab46b32348eb1917ae7f2a11.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/7275b67c78ec76ce38a686bb8a576d8c9cecf54e1573614c84859d538efb9be5.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/a68b6ee3b31eadc051fb95ce8f8ccb9c2e8b52c60f290dbab545a1917e065282.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/ae8771cc37693feb160fa8727231312a0c54ef2d1d1ca893be568cd70016ca7e.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/bb4e8722d2d41d87f1fce3661bc8937bffe9448e231fc5f0462630849e851592.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/be6aada1ee4adc2bbf65dbe56d17db32bb3b5478be05d6b527805a8ba6cfb2b9.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/de91c352653c233cf0cb6674e6e04049a44fd0e1156560de65d5c4620521391e.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/e85f7002fc325c83b9c9cd8a1619e5b3ebc701d30e811afc284b88e6ae710cb5.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/e8b603c78944bf3d213639078bfe155ff5c0dfa4048a93cbb967cad6a4eb4ff3.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/f05535160a508b2a312de546a6de234776c613db276479ea4253c0b1bdeeb7d6.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/f09ba9e11106bd59a0de10cc85c55084097729dcab575f43dfcf07375961ed87.json +1 -0
- xinference/ui/web/ui/node_modules/.cache/babel-loader/f995a2425dfb0822fd07127f66ffe9b026883bc156b402eb8bd0b83d52460a93.json +1 -0
- xinference/ui/web/ui/node_modules/.package-lock.json +0 -33
- xinference/ui/web/ui/package-lock.json +0 -34
- xinference/ui/web/ui/package.json +0 -1
- xinference/ui/web/ui/src/locales/en.json +9 -3
- xinference/ui/web/ui/src/locales/ja.json +9 -3
- xinference/ui/web/ui/src/locales/ko.json +9 -3
- xinference/ui/web/ui/src/locales/zh.json +9 -3
- {xinference-1.10.0.dist-info → xinference-1.10.1.dist-info}/METADATA +18 -2
- {xinference-1.10.0.dist-info → xinference-1.10.1.dist-info}/RECORD +285 -67
- xinference/ui/web/ui/build/static/css/main.013f296b.css +0 -2
- xinference/ui/web/ui/build/static/css/main.013f296b.css.map +0 -1
- xinference/ui/web/ui/build/static/js/main.1086c759.js +0 -3
- xinference/ui/web/ui/build/static/js/main.1086c759.js.map +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/0b0f77000cc1b482ca091cfbcae511dfe02f08916971645fad21d0b1234d04a2.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/1c5f8ff423a7c9202bea60b15680f04b1e9964b445b0da3f86c6ff70cf24e797.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/44ce7993e344980e3ed4f13e8f69237d4a5dfc60e37ca6b54f51f8ee1357bd67.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/4aec1cc414ac3ebb3481d3d915e4db597d9127de813291346eacb8554ab170d4.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/644cfec52f3c57a6e222ce60f112237a1efefe9835efd9aad857a685f53d8eed.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/663436f72af53fe0d72394f56d003fa4e0bba489e5bb4e483fd34b00f84637f7.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/69db82ca9bfe27fe417cc6cf2b1716b09be9c6f0cd198530f12bfc60e801bbcf.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/85087e27618d740c236bf159f30e0219db443ab55f0997388eed5fde6f9e90cc.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/88b07838348864aa86c672be3bbca1e9f58f6f3a2881b32070ec27f4e7b449d1.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/8b8cd408ccfbe115acef27ccfa5b233da8597131a2a5712add13e1e4d5d4504b.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/a23824fe746b9c6ca5eee9159b5764d1ff1653c1d856288c0f75c742bbb0023b.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/a3eb18af328280b139693c9092dff2a0ef8c9a967e6c8956ceee0996611f1984.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/bc1aacc65a102db325ca61bcd2f681e1ae22c36a1f1d98a6ff5e4ad49dc7544f.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/c682fd521747c19dae437d83ce3235a306ce6b68e24a117bc57c27ebb8d1f1ca.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/d5c224be7081f18cba1678b7874a9782eba895df004874ff8f243f94ba79942a.json +0 -1
- xinference/ui/web/ui/node_modules/.cache/babel-loader/f7f18bfb539b036a6a342176dd98a85df5057a884a8da978d679f2a0264883d0.json +0 -1
- xinference/ui/web/ui/node_modules/clipboard/.babelrc.json +0 -11
- xinference/ui/web/ui/node_modules/clipboard/.eslintrc.json +0 -24
- xinference/ui/web/ui/node_modules/clipboard/.prettierrc.json +0 -9
- xinference/ui/web/ui/node_modules/clipboard/bower.json +0 -18
- xinference/ui/web/ui/node_modules/clipboard/composer.json +0 -25
- xinference/ui/web/ui/node_modules/clipboard/package.json +0 -63
- xinference/ui/web/ui/node_modules/delegate/package.json +0 -31
- xinference/ui/web/ui/node_modules/good-listener/bower.json +0 -11
- xinference/ui/web/ui/node_modules/good-listener/package.json +0 -35
- xinference/ui/web/ui/node_modules/select/bower.json +0 -13
- xinference/ui/web/ui/node_modules/select/package.json +0 -29
- xinference/ui/web/ui/node_modules/tiny-emitter/package.json +0 -53
- {xinference-1.10.0.dist-info → xinference-1.10.1.dist-info}/WHEEL +0 -0
- {xinference-1.10.0.dist-info → xinference-1.10.1.dist-info}/entry_points.txt +0 -0
- {xinference-1.10.0.dist-info → xinference-1.10.1.dist-info}/licenses/LICENSE +0 -0
- {xinference-1.10.0.dist-info → xinference-1.10.1.dist-info}/top_level.txt +0 -0
xinference/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-09-
|
|
11
|
+
"date": "2025-09-30T23:23:16+0800",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.10.
|
|
14
|
+
"full-revisionid": "98a3c8ad4a6debd97ef29cc05aad3514f4ba488c",
|
|
15
|
+
"version": "1.10.1"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
xinference/api/restful_api.py
CHANGED
|
@@ -2136,7 +2136,7 @@ class RESTfulAPI(CancelMixin):
|
|
|
2136
2136
|
async def create_variations(
|
|
2137
2137
|
self,
|
|
2138
2138
|
model: str = Form(...),
|
|
2139
|
-
image: UploadFile = File(media_type="application/octet-stream"),
|
|
2139
|
+
image: List[UploadFile] = File(media_type="application/octet-stream"),
|
|
2140
2140
|
prompt: Optional[Union[str, List[str]]] = Form(None),
|
|
2141
2141
|
negative_prompt: Optional[Union[str, List[str]]] = Form(None),
|
|
2142
2142
|
n: Optional[int] = Form(1),
|
|
@@ -2164,8 +2164,17 @@ class RESTfulAPI(CancelMixin):
|
|
|
2164
2164
|
parsed_kwargs = {}
|
|
2165
2165
|
request_id = parsed_kwargs.get("request_id")
|
|
2166
2166
|
self._add_running_task(request_id)
|
|
2167
|
+
|
|
2168
|
+
# Handle single image or multiple images
|
|
2169
|
+
if len(image) == 1:
|
|
2170
|
+
# Single image
|
|
2171
|
+
image_data = Image.open(image[0].file)
|
|
2172
|
+
else:
|
|
2173
|
+
# Multiple images - convert to list of PIL Images
|
|
2174
|
+
image_data = [Image.open(img.file) for img in image]
|
|
2175
|
+
|
|
2167
2176
|
image_list = await model_ref.image_to_image(
|
|
2168
|
-
image=
|
|
2177
|
+
image=image_data,
|
|
2169
2178
|
prompt=prompt,
|
|
2170
2179
|
negative_prompt=negative_prompt,
|
|
2171
2180
|
n=n,
|
|
@@ -2858,19 +2867,6 @@ class RESTfulAPI(CancelMixin):
|
|
|
2858
2867
|
def extract_guided_params(raw_body: dict) -> dict:
|
|
2859
2868
|
kwargs = {}
|
|
2860
2869
|
raw_extra_body: dict = raw_body.get("extra_body") # type: ignore
|
|
2861
|
-
# Convert OpenAI response_format to vLLM guided decoding
|
|
2862
|
-
response_format = raw_body.get("response_format")
|
|
2863
|
-
if response_format is not None:
|
|
2864
|
-
if isinstance(response_format, dict):
|
|
2865
|
-
format_type = response_format.get("type")
|
|
2866
|
-
if format_type == "json_schema":
|
|
2867
|
-
json_schema = response_format.get("json_schema")
|
|
2868
|
-
if isinstance(json_schema, dict):
|
|
2869
|
-
schema = json_schema.get("schema")
|
|
2870
|
-
if schema is not None:
|
|
2871
|
-
kwargs["guided_json"] = schema
|
|
2872
|
-
elif format_type == "json_object":
|
|
2873
|
-
kwargs["guided_json_object"] = True
|
|
2874
2870
|
if raw_body.get("guided_json"):
|
|
2875
2871
|
kwargs["guided_json"] = raw_body.get("guided_json")
|
|
2876
2872
|
if raw_body.get("guided_regex") is not None:
|
|
@@ -2889,19 +2885,6 @@ class RESTfulAPI(CancelMixin):
|
|
|
2889
2885
|
)
|
|
2890
2886
|
# Parse OpenAI extra_body
|
|
2891
2887
|
if raw_extra_body is not None:
|
|
2892
|
-
# Convert OpenAI response_format to vLLM guided decoding
|
|
2893
|
-
extra_response_format = raw_extra_body.get("response_format")
|
|
2894
|
-
if extra_response_format is not None:
|
|
2895
|
-
if isinstance(extra_response_format, dict):
|
|
2896
|
-
format_type = extra_response_format.get("type")
|
|
2897
|
-
if format_type == "json_schema":
|
|
2898
|
-
json_schema = extra_response_format.get("json_schema")
|
|
2899
|
-
if isinstance(json_schema, dict):
|
|
2900
|
-
schema = json_schema.get("schema")
|
|
2901
|
-
if schema is not None:
|
|
2902
|
-
kwargs["guided_json"] = schema
|
|
2903
|
-
elif format_type == "json_object":
|
|
2904
|
-
kwargs["guided_json_object"] = True
|
|
2905
2888
|
if raw_extra_body.get("guided_json"):
|
|
2906
2889
|
kwargs["guided_json"] = raw_extra_body.get("guided_json")
|
|
2907
2890
|
if raw_extra_body.get("guided_regex") is not None:
|
|
@@ -285,7 +285,7 @@ class AsyncRESTfulImageModelHandle(AsyncRESTfulModelHandle):
|
|
|
285
285
|
|
|
286
286
|
async def image_to_image(
|
|
287
287
|
self,
|
|
288
|
-
image: Union[str, bytes],
|
|
288
|
+
image: Union[str, bytes, List[Union[str, bytes]]],
|
|
289
289
|
prompt: str,
|
|
290
290
|
negative_prompt: Optional[str] = None,
|
|
291
291
|
n: int = 1,
|
|
@@ -298,7 +298,7 @@ class AsyncRESTfulImageModelHandle(AsyncRESTfulModelHandle):
|
|
|
298
298
|
|
|
299
299
|
Parameters
|
|
300
300
|
----------
|
|
301
|
-
image: `Union[str, bytes]`
|
|
301
|
+
image: `Union[str, bytes, List[Union[str, bytes]]]`
|
|
302
302
|
The ControlNet input condition to provide guidance to the `unet` for generation. If the type is
|
|
303
303
|
specified as `torch.FloatTensor`, it is passed to ControlNet as is. `PIL.Image.Image` can also be
|
|
304
304
|
accepted as an image. The dimensions of the output image defaults to `image`'s dimensions. If height
|
|
@@ -338,7 +338,24 @@ class AsyncRESTfulImageModelHandle(AsyncRESTfulModelHandle):
|
|
|
338
338
|
files: List[Any] = []
|
|
339
339
|
for key, value in params.items():
|
|
340
340
|
files.append((key, (None, value)))
|
|
341
|
-
|
|
341
|
+
|
|
342
|
+
# Handle both single image and list of images
|
|
343
|
+
if isinstance(image, list):
|
|
344
|
+
if len(image) == 0:
|
|
345
|
+
raise ValueError("Image list cannot be empty")
|
|
346
|
+
elif len(image) == 1:
|
|
347
|
+
# Single image in list, use it directly
|
|
348
|
+
files.append(("image", ("image", image[0], "application/octet-stream")))
|
|
349
|
+
else:
|
|
350
|
+
# Multiple images - send all images with same field name
|
|
351
|
+
# FastAPI will collect them into a list
|
|
352
|
+
for img_data in image:
|
|
353
|
+
files.append(
|
|
354
|
+
("image", ("image", img_data, "application/octet-stream"))
|
|
355
|
+
)
|
|
356
|
+
else:
|
|
357
|
+
# Single image
|
|
358
|
+
files.append(("image", ("image", image, "application/octet-stream")))
|
|
342
359
|
response = await self.session.post(url, files=files, headers=self.auth_headers)
|
|
343
360
|
if response.status != 200:
|
|
344
361
|
raise RuntimeError(
|
|
@@ -250,7 +250,7 @@ class RESTfulImageModelHandle(RESTfulModelHandle):
|
|
|
250
250
|
|
|
251
251
|
def image_to_image(
|
|
252
252
|
self,
|
|
253
|
-
image: Union[str, bytes],
|
|
253
|
+
image: Union[str, bytes, List[Union[str, bytes]]],
|
|
254
254
|
prompt: str,
|
|
255
255
|
negative_prompt: Optional[str] = None,
|
|
256
256
|
n: int = 1,
|
|
@@ -263,7 +263,7 @@ class RESTfulImageModelHandle(RESTfulModelHandle):
|
|
|
263
263
|
|
|
264
264
|
Parameters
|
|
265
265
|
----------
|
|
266
|
-
image: `Union[str, bytes]`
|
|
266
|
+
image: `Union[str, bytes, List[Union[str, bytes]]]`
|
|
267
267
|
The ControlNet input condition to provide guidance to the `unet` for generation. If the type is
|
|
268
268
|
specified as `torch.FloatTensor`, it is passed to ControlNet as is. `PIL.Image.Image` can also be
|
|
269
269
|
accepted as an image. The dimensions of the output image defaults to `image`'s dimensions. If height
|
|
@@ -302,7 +302,24 @@ class RESTfulImageModelHandle(RESTfulModelHandle):
|
|
|
302
302
|
files: List[Any] = []
|
|
303
303
|
for key, value in params.items():
|
|
304
304
|
files.append((key, (None, value)))
|
|
305
|
-
|
|
305
|
+
|
|
306
|
+
# Handle both single image and list of images
|
|
307
|
+
if isinstance(image, list):
|
|
308
|
+
if len(image) == 0:
|
|
309
|
+
raise ValueError("Image list cannot be empty")
|
|
310
|
+
elif len(image) == 1:
|
|
311
|
+
# Single image in list, use it directly
|
|
312
|
+
files.append(("image", ("image", image[0], "application/octet-stream")))
|
|
313
|
+
else:
|
|
314
|
+
# Multiple images - send all images with same field name
|
|
315
|
+
# FastAPI will collect them into a list
|
|
316
|
+
for img_data in image:
|
|
317
|
+
files.append(
|
|
318
|
+
("image", ("image", img_data, "application/octet-stream"))
|
|
319
|
+
)
|
|
320
|
+
else:
|
|
321
|
+
# Single image
|
|
322
|
+
files.append(("image", ("image", image, "application/octet-stream")))
|
|
306
323
|
response = self.session.post(url, files=files, headers=self.auth_headers)
|
|
307
324
|
if response.status_code != 200:
|
|
308
325
|
raise RuntimeError(
|
xinference/core/supervisor.py
CHANGED
|
@@ -31,6 +31,7 @@ from typing import (
|
|
|
31
31
|
Literal,
|
|
32
32
|
Optional,
|
|
33
33
|
Tuple,
|
|
34
|
+
Type,
|
|
34
35
|
Union,
|
|
35
36
|
)
|
|
36
37
|
|
|
@@ -406,6 +407,26 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
406
407
|
"workers": self._worker_status,
|
|
407
408
|
}
|
|
408
409
|
|
|
410
|
+
def _get_spec_dicts(
|
|
411
|
+
self, model_family: Any, cache_manager_cls: Type
|
|
412
|
+
) -> Tuple[List[dict], List[str]]:
|
|
413
|
+
specs = []
|
|
414
|
+
download_hubs: Dict[str, None] = dict()
|
|
415
|
+
for spec in model_family.model_specs:
|
|
416
|
+
model_hub = spec.model_hub
|
|
417
|
+
if model_hub not in download_hubs:
|
|
418
|
+
download_hubs[model_hub] = None
|
|
419
|
+
if model_hub != "huggingface":
|
|
420
|
+
# since we only need to know all specs
|
|
421
|
+
# thus filter huggingface specs only
|
|
422
|
+
continue
|
|
423
|
+
model_family.model_specs = [spec]
|
|
424
|
+
cache_manager = cache_manager_cls(model_family)
|
|
425
|
+
specs.append(
|
|
426
|
+
{**spec.dict(), "cache_status": cache_manager.get_cache_status()}
|
|
427
|
+
)
|
|
428
|
+
return specs, list(download_hubs)
|
|
429
|
+
|
|
409
430
|
async def _to_llm_reg(
|
|
410
431
|
self, llm_family: "LLMFamilyV2", is_builtin: bool
|
|
411
432
|
) -> Dict[str, Any]:
|
|
@@ -415,20 +436,15 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
415
436
|
version_cnt = await self.get_model_version_count(llm_family.model_name)
|
|
416
437
|
|
|
417
438
|
if self.is_local_deployment():
|
|
418
|
-
specs = []
|
|
419
439
|
# TODO: does not work when the supervisor and worker are running on separate nodes.
|
|
420
440
|
_llm_family = llm_family.copy()
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
specs.append(
|
|
429
|
-
{**spec.dict(), "cache_status": cache_manager.get_cache_status()}
|
|
430
|
-
)
|
|
431
|
-
res = {**llm_family.dict(), "is_builtin": is_builtin, "model_specs": specs}
|
|
441
|
+
specs, download_hubs = self._get_spec_dicts(_llm_family, LLMCacheManager)
|
|
442
|
+
res = {
|
|
443
|
+
**llm_family.dict(),
|
|
444
|
+
"is_builtin": is_builtin,
|
|
445
|
+
"model_specs": specs,
|
|
446
|
+
"download_hubs": download_hubs,
|
|
447
|
+
}
|
|
432
448
|
else:
|
|
433
449
|
res = {**llm_family.dict(), "is_builtin": is_builtin}
|
|
434
450
|
res["model_version_count"] = version_cnt
|
|
@@ -445,24 +461,13 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
445
461
|
|
|
446
462
|
if self.is_local_deployment():
|
|
447
463
|
_family = model_family.copy()
|
|
448
|
-
specs = []
|
|
449
464
|
# TODO: does not work when the supervisor and worker are running on separate nodes.
|
|
450
|
-
|
|
451
|
-
x for x in model_family.model_specs if x.model_hub == "huggingface"
|
|
452
|
-
]:
|
|
453
|
-
_family.model_specs = [spec]
|
|
454
|
-
specs.append(
|
|
455
|
-
{
|
|
456
|
-
**spec.dict(),
|
|
457
|
-
"cache_status": EmbeddingCacheManager(
|
|
458
|
-
_family
|
|
459
|
-
).get_cache_status(),
|
|
460
|
-
}
|
|
461
|
-
)
|
|
465
|
+
specs, download_hubs = self._get_spec_dicts(_family, EmbeddingCacheManager)
|
|
462
466
|
res = {
|
|
463
467
|
**model_family.dict(),
|
|
464
468
|
"is_builtin": is_builtin,
|
|
465
469
|
"model_specs": specs,
|
|
470
|
+
"download_hubs": download_hubs,
|
|
466
471
|
}
|
|
467
472
|
else:
|
|
468
473
|
res = {
|
|
@@ -474,25 +479,26 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
474
479
|
return res
|
|
475
480
|
|
|
476
481
|
async def _to_rerank_model_reg(
|
|
477
|
-
self,
|
|
482
|
+
self, model_family: "RerankModelFamilyV2", is_builtin: bool
|
|
478
483
|
) -> Dict[str, Any]:
|
|
479
|
-
from ..model.rerank.cache_manager import RerankCacheManager
|
|
484
|
+
from ..model.rerank.cache_manager import RerankCacheManager
|
|
480
485
|
|
|
481
|
-
instance_cnt = await self.get_instance_count(
|
|
482
|
-
version_cnt = await self.get_model_version_count(
|
|
483
|
-
cache_manager = CacheManager(model_spec)
|
|
486
|
+
instance_cnt = await self.get_instance_count(model_family.model_name)
|
|
487
|
+
version_cnt = await self.get_model_version_count(model_family.model_name)
|
|
484
488
|
|
|
485
489
|
if self.is_local_deployment():
|
|
490
|
+
_family = model_family.copy()
|
|
486
491
|
# TODO: does not work when the supervisor and worker are running on separate nodes.
|
|
487
|
-
|
|
492
|
+
specs, download_hubs = self._get_spec_dicts(_family, RerankCacheManager)
|
|
488
493
|
res = {
|
|
489
|
-
**
|
|
490
|
-
"cache_status": cache_status,
|
|
494
|
+
**model_family.dict(),
|
|
491
495
|
"is_builtin": is_builtin,
|
|
496
|
+
"model_specs": specs,
|
|
497
|
+
"download_hubs": download_hubs,
|
|
492
498
|
}
|
|
493
499
|
else:
|
|
494
500
|
res = {
|
|
495
|
-
**
|
|
501
|
+
**model_family.dict(),
|
|
496
502
|
"is_builtin": is_builtin,
|
|
497
503
|
}
|
|
498
504
|
res["model_version_count"] = version_cnt
|
|
@@ -657,7 +663,9 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
657
663
|
for model_name, families in BUILTIN_IMAGE_MODELS.items():
|
|
658
664
|
if detailed:
|
|
659
665
|
family = [x for x in families if x.model_hub == "huggingface"][0]
|
|
660
|
-
|
|
666
|
+
info = await self._to_image_model_reg(family, is_builtin=True)
|
|
667
|
+
info["download_hubs"] = [x.model_hub for x in families]
|
|
668
|
+
ret.append(info)
|
|
661
669
|
else:
|
|
662
670
|
ret.append({"model_name": model_name, "is_builtin": True})
|
|
663
671
|
|
|
@@ -680,7 +688,9 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
680
688
|
for model_name, families in BUILTIN_AUDIO_MODELS.items():
|
|
681
689
|
if detailed:
|
|
682
690
|
family = [x for x in families if x.model_hub == "huggingface"][0]
|
|
683
|
-
|
|
691
|
+
info = await self._to_audio_model_reg(family, is_builtin=True)
|
|
692
|
+
info["download_hubs"] = [x.model_hub for x in families]
|
|
693
|
+
ret.append(info)
|
|
684
694
|
else:
|
|
685
695
|
ret.append({"model_name": model_name, "is_builtin": True})
|
|
686
696
|
|
|
@@ -702,7 +712,9 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
702
712
|
for model_name, families in BUILTIN_VIDEO_MODELS.items():
|
|
703
713
|
if detailed:
|
|
704
714
|
family = [x for x in families if x.model_hub == "huggingface"][0]
|
|
705
|
-
|
|
715
|
+
info = await self._to_video_model_reg(family, is_builtin=True)
|
|
716
|
+
info["download_hubs"] = [x.model_hub for x in families]
|
|
717
|
+
ret.append(info)
|
|
706
718
|
else:
|
|
707
719
|
ret.append({"model_name": model_name, "is_builtin": True})
|
|
708
720
|
|
|
@@ -812,16 +824,9 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
812
824
|
from ..model.rerank import BUILTIN_RERANK_MODELS
|
|
813
825
|
from ..model.rerank.custom import get_user_defined_reranks
|
|
814
826
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
for x in BUILTIN_RERANK_MODELS[model_name]
|
|
819
|
-
if x.model_hub == "huggingface"
|
|
820
|
-
][0]
|
|
821
|
-
else:
|
|
822
|
-
for f in get_user_defined_reranks():
|
|
823
|
-
if f.model_name == model_name:
|
|
824
|
-
return f
|
|
827
|
+
for f in list(BUILTIN_RERANK_MODELS.values()) + get_user_defined_reranks():
|
|
828
|
+
if f.model_name == model_name:
|
|
829
|
+
return f
|
|
825
830
|
raise ValueError(f"Model {model_name} not found")
|
|
826
831
|
elif model_type == "flexible":
|
|
827
832
|
from ..model.flexible import get_flexible_models
|
|
@@ -830,6 +835,16 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
830
835
|
if f.model_name == model_name:
|
|
831
836
|
return f
|
|
832
837
|
raise ValueError(f"Model {model_name} not found")
|
|
838
|
+
elif model_type == "video":
|
|
839
|
+
from ..model.video import BUILTIN_VIDEO_MODELS
|
|
840
|
+
|
|
841
|
+
if model_name in BUILTIN_VIDEO_MODELS:
|
|
842
|
+
return [
|
|
843
|
+
x
|
|
844
|
+
for x in BUILTIN_VIDEO_MODELS[model_name]
|
|
845
|
+
if x.model_hub == "huggingface"
|
|
846
|
+
][0]
|
|
847
|
+
raise ValueError(f"Model {model_name} not found")
|
|
833
848
|
else:
|
|
834
849
|
raise ValueError(f"Unsupported model type: {model_type}")
|
|
835
850
|
|
|
@@ -864,6 +879,26 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
864
879
|
generate_fn,
|
|
865
880
|
) = self._custom_register_type_to_cls[model_type]
|
|
866
881
|
|
|
882
|
+
model_spec = model_spec_cls.parse_raw(model)
|
|
883
|
+
|
|
884
|
+
# check if model already registered
|
|
885
|
+
try:
|
|
886
|
+
model = await self.get_model_registration(
|
|
887
|
+
model_type, model_spec.model_name
|
|
888
|
+
)
|
|
889
|
+
if model is not None:
|
|
890
|
+
raise ValueError(
|
|
891
|
+
f"Model {model_spec.model_name} already registered"
|
|
892
|
+
)
|
|
893
|
+
except ValueError as e:
|
|
894
|
+
if "not found" in str(e):
|
|
895
|
+
pass
|
|
896
|
+
else:
|
|
897
|
+
raise e
|
|
898
|
+
except Exception:
|
|
899
|
+
logger.error("Get model registration failed.", exc_info=True)
|
|
900
|
+
raise
|
|
901
|
+
|
|
867
902
|
target_ip_worker_ref = (
|
|
868
903
|
self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None
|
|
869
904
|
)
|
|
@@ -880,7 +915,6 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
880
915
|
await target_ip_worker_ref.register_model(model_type, model, persist)
|
|
881
916
|
return
|
|
882
917
|
|
|
883
|
-
model_spec = model_spec_cls.parse_raw(model)
|
|
884
918
|
try:
|
|
885
919
|
register_fn(model_spec, persist)
|
|
886
920
|
await self._cache_tracker_ref.record_model_version(
|
|
@@ -901,25 +935,25 @@ class SupervisorActor(xo.StatelessActor):
|
|
|
901
935
|
async def _sync_register_model(
|
|
902
936
|
self, model_type: str, model: str, persist: bool, model_name: str
|
|
903
937
|
):
|
|
904
|
-
logger.info(f"begin sync model:{model_name} to worker")
|
|
938
|
+
logger.info(f"begin sync model: {model_name} to worker")
|
|
905
939
|
try:
|
|
906
940
|
# Sync model to all workers.
|
|
907
941
|
for name, worker in self._worker_address_to_worker.items():
|
|
908
|
-
logger.info(f"sync model:{model_name} to {name}")
|
|
942
|
+
logger.info(f"sync model: {model_name} to {name}")
|
|
909
943
|
if name == self.address:
|
|
910
944
|
# Ignore: when worker and supervisor at the same node.
|
|
911
945
|
logger.info(
|
|
912
|
-
f"ignore sync model:{model_name} to {name} for same node"
|
|
946
|
+
f"ignore sync model: {model_name} to {name} for same node"
|
|
913
947
|
)
|
|
914
948
|
else:
|
|
915
949
|
await worker.register_model(model_type, model, persist)
|
|
916
|
-
logger.info(f"success sync model:{model_name} to {name}")
|
|
950
|
+
logger.info(f"success sync model: {model_name} to {name}")
|
|
917
951
|
except Exception as e:
|
|
918
952
|
# If sync fails, unregister the model in all workers.
|
|
919
953
|
for name, worker in self._worker_address_to_worker.items():
|
|
920
954
|
logger.warning(f"ready to unregister model for {name}")
|
|
921
955
|
await worker.unregister_model(model_type, model_name)
|
|
922
|
-
logger.warning(f"finish unregister model:{model} for {name}")
|
|
956
|
+
logger.warning(f"finish unregister model: {model} for {name}")
|
|
923
957
|
raise e
|
|
924
958
|
|
|
925
959
|
@log_async(logger=logger)
|
xinference/core/worker.py
CHANGED
|
@@ -710,6 +710,16 @@ class WorkerActor(xo.StatelessActor):
|
|
|
710
710
|
for model_spec in get_user_defined_reranks():
|
|
711
711
|
ret.append({"model_name": model_spec.model_name, "is_builtin": False})
|
|
712
712
|
|
|
713
|
+
ret.sort(key=sort_helper)
|
|
714
|
+
return ret
|
|
715
|
+
elif model_type == "flexible":
|
|
716
|
+
from ..model.flexible.custom import get_flexible_models
|
|
717
|
+
|
|
718
|
+
ret = []
|
|
719
|
+
|
|
720
|
+
for model_spec in get_flexible_models():
|
|
721
|
+
ret.append({"model_name": model_spec.model_name, "is_builtin": False})
|
|
722
|
+
|
|
713
723
|
ret.sort(key=sort_helper)
|
|
714
724
|
return ret
|
|
715
725
|
else:
|
xinference/deploy/cmdline.py
CHANGED
|
@@ -576,6 +576,21 @@ def list_model_registrations(
|
|
|
576
576
|
),
|
|
577
577
|
file=sys.stderr,
|
|
578
578
|
)
|
|
579
|
+
elif model_type == "flexible":
|
|
580
|
+
for registration in registrations:
|
|
581
|
+
model_name = registration["model_name"]
|
|
582
|
+
model_family = client.get_model_registration(model_type, model_name)
|
|
583
|
+
table.append(
|
|
584
|
+
[
|
|
585
|
+
model_type,
|
|
586
|
+
model_family["model_name"],
|
|
587
|
+
registration["is_builtin"],
|
|
588
|
+
]
|
|
589
|
+
)
|
|
590
|
+
print(
|
|
591
|
+
tabulate(table, headers=["Type", "Name", "Is-built-in"]),
|
|
592
|
+
file=sys.stderr,
|
|
593
|
+
)
|
|
579
594
|
else:
|
|
580
595
|
raise NotImplementedError(f"List {model_type} is not implemented.")
|
|
581
596
|
|
xinference/model/audio/core.py
CHANGED
|
@@ -23,6 +23,7 @@ from .f5tts import F5TTSModel
|
|
|
23
23
|
from .f5tts_mlx import F5TTSMLXModel
|
|
24
24
|
from .fish_speech import FishSpeechModel
|
|
25
25
|
from .funasr import FunASRModel
|
|
26
|
+
from .indextts2 import Indextts2
|
|
26
27
|
from .kokoro import KokoroModel
|
|
27
28
|
from .kokoro_mlx import KokoroMLXModel
|
|
28
29
|
from .kokoro_zh import KokoroZHModel
|
|
@@ -107,13 +108,23 @@ def match_audio(
|
|
|
107
108
|
|
|
108
109
|
if model_name in BUILTIN_AUDIO_MODELS:
|
|
109
110
|
model_families = BUILTIN_AUDIO_MODELS[model_name]
|
|
110
|
-
if download_hub
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
if download_hub is not None:
|
|
112
|
+
if download_hub == "modelscope":
|
|
113
|
+
return (
|
|
114
|
+
[x for x in model_families if x.model_hub == "modelscope"]
|
|
115
|
+
+ [x for x in model_families if x.model_hub == "huggingface"]
|
|
116
|
+
)[0]
|
|
117
|
+
else:
|
|
118
|
+
return [x for x in model_families if x.model_hub == download_hub][0]
|
|
115
119
|
else:
|
|
116
|
-
|
|
120
|
+
if download_from_modelscope():
|
|
121
|
+
return (
|
|
122
|
+
[x for x in model_families if x.model_hub == "modelscope"]
|
|
123
|
+
+ [x for x in model_families if x.model_hub == "huggingface"]
|
|
124
|
+
)[0]
|
|
125
|
+
else:
|
|
126
|
+
return [x for x in model_families if x.model_hub == "huggingface"][0]
|
|
127
|
+
|
|
117
128
|
else:
|
|
118
129
|
raise ValueError(
|
|
119
130
|
f"Audio model {model_name} not found, available"
|
|
@@ -143,6 +154,7 @@ def create_audio_model_instance(
|
|
|
143
154
|
KokoroMLXModel,
|
|
144
155
|
KokoroZHModel,
|
|
145
156
|
MegaTTSModel,
|
|
157
|
+
Indextts2,
|
|
146
158
|
]:
|
|
147
159
|
from ..cache_manager import CacheManager
|
|
148
160
|
|
|
@@ -164,6 +176,7 @@ def create_audio_model_instance(
|
|
|
164
176
|
KokoroMLXModel,
|
|
165
177
|
KokoroZHModel,
|
|
166
178
|
MegaTTSModel,
|
|
179
|
+
Indextts2,
|
|
167
180
|
]
|
|
168
181
|
if model_spec.model_family == "whisper":
|
|
169
182
|
if not model_spec.engine:
|
|
@@ -192,6 +205,8 @@ def create_audio_model_instance(
|
|
|
192
205
|
model = KokoroMLXModel(model_uid, model_path, model_spec, **kwargs)
|
|
193
206
|
elif model_spec.model_family == "MegaTTS":
|
|
194
207
|
model = MegaTTSModel(model_uid, model_path, model_spec, **kwargs)
|
|
208
|
+
elif model_spec.model_family == "IndexTTS2":
|
|
209
|
+
model = Indextts2(model_uid, model_path, model_spec, **kwargs)
|
|
195
210
|
else:
|
|
196
211
|
raise Exception(f"Unsupported audio model family: {model_spec.model_family}")
|
|
197
212
|
return model
|