xinference 0.15.2__py3-none-any.whl → 0.15.4__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 +29 -2
- xinference/client/restful/restful_client.py +10 -0
- xinference/constants.py +4 -0
- xinference/core/image_interface.py +76 -23
- xinference/core/model.py +80 -39
- xinference/core/progress_tracker.py +187 -0
- xinference/core/supervisor.py +11 -0
- xinference/core/worker.py +1 -0
- xinference/model/audio/chattts.py +2 -1
- xinference/model/audio/core.py +0 -2
- xinference/model/audio/model_spec.json +8 -0
- xinference/model/audio/model_spec_modelscope.json +9 -0
- xinference/model/embedding/core.py +14 -5
- xinference/model/embedding/model_spec.json +7 -0
- xinference/model/embedding/model_spec_modelscope.json +9 -1
- xinference/model/image/core.py +6 -7
- xinference/model/image/sdapi.py +35 -4
- xinference/model/image/stable_diffusion/core.py +212 -70
- xinference/model/llm/llm_family.json +28 -40
- xinference/model/llm/llm_family_modelscope.json +18 -22
- xinference/model/llm/transformers/cogvlm2.py +2 -1
- xinference/model/llm/transformers/cogvlm2_video.py +2 -0
- xinference/model/llm/transformers/core.py +6 -2
- xinference/model/llm/transformers/deepseek_vl.py +2 -0
- xinference/model/llm/transformers/glm4v.py +2 -1
- xinference/model/llm/transformers/intern_vl.py +2 -0
- xinference/model/llm/transformers/minicpmv25.py +2 -0
- xinference/model/llm/transformers/minicpmv26.py +2 -0
- xinference/model/llm/transformers/omnilmm.py +2 -0
- xinference/model/llm/transformers/qwen2_audio.py +11 -4
- xinference/model/llm/transformers/qwen2_vl.py +2 -28
- xinference/model/llm/transformers/qwen_vl.py +2 -1
- xinference/model/llm/transformers/utils.py +35 -2
- xinference/model/llm/transformers/yi_vl.py +2 -0
- xinference/model/llm/utils.py +72 -17
- xinference/model/llm/vllm/core.py +69 -9
- xinference/model/llm/vllm/utils.py +41 -0
- xinference/model/rerank/core.py +19 -0
- xinference/model/rerank/model_spec.json +8 -0
- xinference/model/rerank/model_spec_modelscope.json +8 -0
- xinference/model/utils.py +7 -29
- xinference/model/video/core.py +0 -2
- xinference/web/ui/build/asset-manifest.json +3 -3
- xinference/web/ui/build/index.html +1 -1
- xinference/web/ui/build/static/js/{main.29578905.js → main.e51a356d.js} +3 -3
- xinference/web/ui/build/static/js/main.e51a356d.js.map +1 -0
- xinference/web/ui/node_modules/.cache/babel-loader/4385c1095eefbff0a8ec3b2964ba6e5a66a05ab31be721483ca2f43e2a91f6ff.json +1 -0
- {xinference-0.15.2.dist-info → xinference-0.15.4.dist-info}/METADATA +6 -5
- {xinference-0.15.2.dist-info → xinference-0.15.4.dist-info}/RECORD +55 -53
- xinference/web/ui/build/static/js/main.29578905.js.map +0 -1
- xinference/web/ui/node_modules/.cache/babel-loader/68bede6d95bb5ef0b35bbb3ec5b8c937eaf6862c6cdbddb5ef222a7776aaf336.json +0 -1
- /xinference/web/ui/build/static/js/{main.29578905.js.LICENSE.txt → main.e51a356d.js.LICENSE.txt} +0 -0
- {xinference-0.15.2.dist-info → xinference-0.15.4.dist-info}/LICENSE +0 -0
- {xinference-0.15.2.dist-info → xinference-0.15.4.dist-info}/WHEEL +0 -0
- {xinference-0.15.2.dist-info → xinference-0.15.4.dist-info}/entry_points.txt +0 -0
- {xinference-0.15.2.dist-info → xinference-0.15.4.dist-info}/top_level.txt +0 -0
|
@@ -71,6 +71,14 @@
|
|
|
71
71
|
"model_ability": "audio-to-text",
|
|
72
72
|
"multilingual": true
|
|
73
73
|
},
|
|
74
|
+
{
|
|
75
|
+
"model_name": "whisper-large-v3-turbo",
|
|
76
|
+
"model_family": "whisper",
|
|
77
|
+
"model_id": "openai/whisper-large-v3-turbo",
|
|
78
|
+
"model_revision": "41f01f3fe87f28c78e2fbf8b568835947dd65ed9",
|
|
79
|
+
"model_ability": "audio-to-text",
|
|
80
|
+
"multilingual": true
|
|
81
|
+
},
|
|
74
82
|
{
|
|
75
83
|
"model_name": "Belle-distilwhisper-large-v2-zh",
|
|
76
84
|
"model_family": "whisper",
|
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
"model_ability": "audio-to-text",
|
|
9
9
|
"multilingual": true
|
|
10
10
|
},
|
|
11
|
+
{
|
|
12
|
+
"model_name": "whisper-large-v3-turbo",
|
|
13
|
+
"model_family": "whisper",
|
|
14
|
+
"model_hub": "modelscope",
|
|
15
|
+
"model_id": "AI-ModelScope/whisper-large-v3-turbo",
|
|
16
|
+
"model_revision": "master",
|
|
17
|
+
"model_ability": "audio-to-text",
|
|
18
|
+
"multilingual": true
|
|
19
|
+
},
|
|
11
20
|
{
|
|
12
21
|
"model_name": "SenseVoiceSmall",
|
|
13
22
|
"model_family": "funasr",
|
|
@@ -141,7 +141,15 @@ class EmbeddingModel:
|
|
|
141
141
|
|
|
142
142
|
def load(self):
|
|
143
143
|
try:
|
|
144
|
+
import sentence_transformers
|
|
144
145
|
from sentence_transformers import SentenceTransformer
|
|
146
|
+
|
|
147
|
+
if sentence_transformers.__version__ < "3.1.0":
|
|
148
|
+
raise ValueError(
|
|
149
|
+
"The sentence_transformers version must be greater than 3.1.0. "
|
|
150
|
+
"Please upgrade your version via `pip install -U sentence_transformers` or refer to "
|
|
151
|
+
"https://github.com/UKPLab/sentence-transformers"
|
|
152
|
+
)
|
|
145
153
|
except ImportError:
|
|
146
154
|
error_message = "Failed to import module 'SentenceTransformer'"
|
|
147
155
|
installation_guide = [
|
|
@@ -173,9 +181,6 @@ class EmbeddingModel:
|
|
|
173
181
|
)
|
|
174
182
|
torch_dtype = torch.float32
|
|
175
183
|
|
|
176
|
-
from ..utils import patch_trust_remote_code
|
|
177
|
-
|
|
178
|
-
patch_trust_remote_code()
|
|
179
184
|
if (
|
|
180
185
|
"gte" in self._model_spec.model_name.lower()
|
|
181
186
|
and "qwen2" in self._model_spec.model_name.lower()
|
|
@@ -191,7 +196,10 @@ class EmbeddingModel:
|
|
|
191
196
|
else:
|
|
192
197
|
model_kwargs = {"torch_dtype": torch_dtype} if torch_dtype else None
|
|
193
198
|
self._model = SentenceTransformer(
|
|
194
|
-
self._model_path,
|
|
199
|
+
self._model_path,
|
|
200
|
+
device=self._device,
|
|
201
|
+
model_kwargs=model_kwargs,
|
|
202
|
+
trust_remote_code=True,
|
|
195
203
|
)
|
|
196
204
|
|
|
197
205
|
def create_embedding(self, sentences: Union[str, List[str]], **kwargs):
|
|
@@ -213,6 +221,7 @@ class EmbeddingModel:
|
|
|
213
221
|
convert_to_tensor: bool = False,
|
|
214
222
|
device: str = None,
|
|
215
223
|
normalize_embeddings: bool = False,
|
|
224
|
+
**kwargs,
|
|
216
225
|
):
|
|
217
226
|
"""
|
|
218
227
|
Computes sentence embeddings
|
|
@@ -317,7 +326,7 @@ class EmbeddingModel:
|
|
|
317
326
|
all_token_nums += features["attention_mask"].sum().item()
|
|
318
327
|
|
|
319
328
|
with torch.no_grad():
|
|
320
|
-
out_features = model.forward(features)
|
|
329
|
+
out_features = model.forward(features, **kwargs)
|
|
321
330
|
|
|
322
331
|
if output_value == "token_embeddings":
|
|
323
332
|
embeddings = []
|
|
@@ -238,5 +238,12 @@
|
|
|
238
238
|
"language": ["zh", "en"],
|
|
239
239
|
"model_id": "Alibaba-NLP/gte-Qwen2-7B-instruct",
|
|
240
240
|
"model_revision": "e26182b2122f4435e8b3ebecbf363990f409b45b"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"model_name": "jina-embeddings-v3",
|
|
244
|
+
"dimensions": 1024,
|
|
245
|
+
"max_tokens": 8192,
|
|
246
|
+
"language": ["zh", "en"],
|
|
247
|
+
"model_id": "jinaai/jina-embeddings-v3"
|
|
241
248
|
}
|
|
242
249
|
]
|
|
@@ -233,12 +233,20 @@
|
|
|
233
233
|
"model_id": "AI-ModelScope/m3e-large",
|
|
234
234
|
"model_hub": "modelscope"
|
|
235
235
|
},
|
|
236
|
-
|
|
236
|
+
{
|
|
237
237
|
"model_name": "gte-Qwen2",
|
|
238
238
|
"dimensions": 4096,
|
|
239
239
|
"max_tokens": 32000,
|
|
240
240
|
"language": ["zh", "en"],
|
|
241
241
|
"model_id": "iic/gte_Qwen2-7B-instruct",
|
|
242
242
|
"model_hub": "modelscope"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"model_name": "jina-embeddings-v3",
|
|
246
|
+
"dimensions": 1024,
|
|
247
|
+
"max_tokens": 8192,
|
|
248
|
+
"language": ["zh", "en"],
|
|
249
|
+
"model_id": "jinaai/jina-embeddings-v3",
|
|
250
|
+
"model_hub": "modelscope"
|
|
243
251
|
}
|
|
244
252
|
]
|
xinference/model/image/core.py
CHANGED
|
@@ -23,8 +23,6 @@ from ..core import CacheableModelSpec, ModelDescription
|
|
|
23
23
|
from ..utils import valid_model_revision
|
|
24
24
|
from .stable_diffusion.core import DiffusionModel
|
|
25
25
|
|
|
26
|
-
MAX_ATTEMPTS = 3
|
|
27
|
-
|
|
28
26
|
logger = logging.getLogger(__name__)
|
|
29
27
|
|
|
30
28
|
MODEL_NAME_TO_REVISION: Dict[str, List[str]] = defaultdict(list)
|
|
@@ -210,18 +208,19 @@ def create_image_model_instance(
|
|
|
210
208
|
for name in controlnet:
|
|
211
209
|
for cn_model_spec in model_spec.controlnet:
|
|
212
210
|
if cn_model_spec.model_name == name:
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
controlnet_model_paths.append(model_path)
|
|
211
|
+
controlnet_model_path = cache(cn_model_spec)
|
|
212
|
+
controlnet_model_paths.append(controlnet_model_path)
|
|
216
213
|
break
|
|
217
214
|
else:
|
|
218
215
|
raise ValueError(
|
|
219
216
|
f"controlnet `{name}` is not supported for model `{model_name}`."
|
|
220
217
|
)
|
|
221
218
|
if len(controlnet_model_paths) == 1:
|
|
222
|
-
kwargs["controlnet"] = controlnet_model_paths[0]
|
|
219
|
+
kwargs["controlnet"] = (controlnet[0], controlnet_model_paths[0])
|
|
223
220
|
else:
|
|
224
|
-
kwargs["controlnet"] =
|
|
221
|
+
kwargs["controlnet"] = [
|
|
222
|
+
(n, path) for n, path in zip(controlnet, controlnet_model_paths)
|
|
223
|
+
]
|
|
225
224
|
if not model_path:
|
|
226
225
|
model_path = cache(model_spec)
|
|
227
226
|
if peft_model_config is not None:
|
xinference/model/image/sdapi.py
CHANGED
|
@@ -11,11 +11,12 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
+
|
|
14
15
|
import base64
|
|
15
16
|
import io
|
|
16
17
|
import warnings
|
|
17
18
|
|
|
18
|
-
from PIL import Image
|
|
19
|
+
from PIL import Image, ImageOps
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class SDAPIToDiffusersConverter:
|
|
@@ -26,11 +27,12 @@ class SDAPIToDiffusersConverter:
|
|
|
26
27
|
"width",
|
|
27
28
|
"height",
|
|
28
29
|
"sampler_name",
|
|
30
|
+
"progressor",
|
|
29
31
|
}
|
|
30
32
|
txt2img_arg_mapping = {
|
|
31
33
|
"steps": "num_inference_steps",
|
|
32
34
|
"cfg_scale": "guidance_scale",
|
|
33
|
-
|
|
35
|
+
"denoising_strength": "strength",
|
|
34
36
|
}
|
|
35
37
|
img2img_identical_args = {
|
|
36
38
|
"prompt",
|
|
@@ -39,12 +41,15 @@ class SDAPIToDiffusersConverter:
|
|
|
39
41
|
"width",
|
|
40
42
|
"height",
|
|
41
43
|
"sampler_name",
|
|
44
|
+
"progressor",
|
|
42
45
|
}
|
|
43
46
|
img2img_arg_mapping = {
|
|
44
47
|
"init_images": "image",
|
|
48
|
+
"mask": "mask_image",
|
|
45
49
|
"steps": "num_inference_steps",
|
|
46
50
|
"cfg_scale": "guidance_scale",
|
|
47
51
|
"denoising_strength": "strength",
|
|
52
|
+
"inpaint_full_res_padding": "padding_mask_crop",
|
|
48
53
|
}
|
|
49
54
|
|
|
50
55
|
@staticmethod
|
|
@@ -121,12 +126,38 @@ class SDAPIDiffusionModelMixin:
|
|
|
121
126
|
|
|
122
127
|
def img2img(self, **kwargs):
|
|
123
128
|
init_images = kwargs.pop("init_images", [])
|
|
124
|
-
kwargs["init_images"] =
|
|
129
|
+
kwargs["init_images"] = init_images = [
|
|
130
|
+
self._decode_b64_img(i) for i in init_images
|
|
131
|
+
]
|
|
132
|
+
if len(init_images) == 1:
|
|
133
|
+
kwargs["init_images"] = init_images[0]
|
|
134
|
+
mask_image = kwargs.pop("mask", None)
|
|
135
|
+
if mask_image:
|
|
136
|
+
if kwargs.pop("inpainting_mask_invert"):
|
|
137
|
+
mask_image = ImageOps.invert(mask_image)
|
|
138
|
+
|
|
139
|
+
kwargs["mask"] = self._decode_b64_img(mask_image)
|
|
140
|
+
|
|
141
|
+
# process inpaint_full_res and inpaint_full_res_padding
|
|
142
|
+
if kwargs.pop("inpaint_full_res", None):
|
|
143
|
+
kwargs["inpaint_full_res_padding"] = kwargs.pop(
|
|
144
|
+
"inpaint_full_res_padding", 0
|
|
145
|
+
)
|
|
146
|
+
else:
|
|
147
|
+
# inpaint_full_res_padding is turned `into padding_mask_crop`
|
|
148
|
+
# in diffusers, if padding_mask_crop is passed, it will do inpaint_full_res
|
|
149
|
+
# so if not inpaint_full_rs, we need to pop this option
|
|
150
|
+
kwargs.pop("inpaint_full_res_padding", None)
|
|
151
|
+
|
|
125
152
|
clip_skip = kwargs.get("override_settings", {}).get("clip_skip")
|
|
126
153
|
converted_kwargs = self._check_kwargs("img2img", kwargs)
|
|
127
154
|
if clip_skip:
|
|
128
155
|
converted_kwargs["clip_skip"] = clip_skip
|
|
129
|
-
|
|
156
|
+
|
|
157
|
+
if not converted_kwargs.get("mask_image"):
|
|
158
|
+
result = self.image_to_image(response_format="b64_json", **converted_kwargs) # type: ignore
|
|
159
|
+
else:
|
|
160
|
+
result = self.inpainting(response_format="b64_json", **converted_kwargs) # type: ignore
|
|
130
161
|
|
|
131
162
|
# convert to SD API result
|
|
132
163
|
return {
|