xinference 1.5.0.post1__py3-none-any.whl → 1.5.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.

Files changed (89) hide show
  1. xinference/_version.py +3 -3
  2. xinference/api/restful_api.py +10 -3
  3. xinference/constants.py +5 -1
  4. xinference/core/supervisor.py +12 -3
  5. xinference/core/utils.py +1 -1
  6. xinference/core/worker.py +2 -2
  7. xinference/deploy/cmdline.py +17 -0
  8. xinference/model/audio/core.py +1 -1
  9. xinference/model/audio/model_spec.json +43 -43
  10. xinference/model/audio/model_spec_modelscope.json +13 -13
  11. xinference/model/llm/__init__.py +3 -5
  12. xinference/model/llm/core.py +14 -0
  13. xinference/model/llm/llama_cpp/core.py +15 -4
  14. xinference/model/llm/llm_family.json +3251 -4304
  15. xinference/model/llm/llm_family.py +62 -6
  16. xinference/model/llm/llm_family_csghub.json +0 -32
  17. xinference/model/llm/llm_family_modelscope.json +1161 -1789
  18. xinference/model/llm/llm_family_openmind_hub.json +19 -325
  19. xinference/model/llm/lmdeploy/core.py +7 -2
  20. xinference/model/llm/mlx/core.py +19 -6
  21. xinference/model/llm/sglang/core.py +25 -10
  22. xinference/model/llm/transformers/chatglm.py +8 -1
  23. xinference/model/llm/transformers/cogagent.py +10 -12
  24. xinference/model/llm/transformers/cogvlm2.py +6 -3
  25. xinference/model/llm/transformers/cogvlm2_video.py +3 -6
  26. xinference/model/llm/transformers/core.py +50 -58
  27. xinference/model/llm/transformers/deepseek_v2.py +4 -2
  28. xinference/model/llm/transformers/deepseek_vl.py +10 -4
  29. xinference/model/llm/transformers/deepseek_vl2.py +9 -4
  30. xinference/model/llm/transformers/gemma3.py +15 -7
  31. xinference/model/llm/transformers/glm4v.py +2 -20
  32. xinference/model/llm/transformers/glm_edge_v.py +3 -20
  33. xinference/model/llm/transformers/intern_vl.py +3 -6
  34. xinference/model/llm/transformers/internlm2.py +1 -1
  35. xinference/model/llm/transformers/minicpmv25.py +4 -2
  36. xinference/model/llm/transformers/minicpmv26.py +5 -3
  37. xinference/model/llm/transformers/omnilmm.py +1 -1
  38. xinference/model/llm/transformers/opt.py +1 -1
  39. xinference/model/llm/transformers/ovis2.py +302 -0
  40. xinference/model/llm/transformers/qwen-omni.py +2 -1
  41. xinference/model/llm/transformers/qwen2_audio.py +3 -1
  42. xinference/model/llm/transformers/qwen2_vl.py +5 -1
  43. xinference/model/llm/transformers/qwen_vl.py +5 -2
  44. xinference/model/llm/utils.py +28 -0
  45. xinference/model/llm/vllm/core.py +73 -9
  46. xinference/model/llm/vllm/distributed_executor.py +8 -7
  47. xinference/model/llm/vllm/xavier/allocator.py +1 -1
  48. xinference/model/llm/vllm/xavier/block_manager.py +1 -1
  49. xinference/model/llm/vllm/xavier/block_tracker.py +3 -3
  50. xinference/model/llm/vllm/xavier/executor.py +1 -1
  51. xinference/model/llm/vllm/xavier/test/test_xavier.py +1 -1
  52. xinference/model/video/diffusers.py +30 -3
  53. xinference/model/video/model_spec.json +46 -0
  54. xinference/model/video/model_spec_modelscope.json +48 -0
  55. xinference/types.py +2 -0
  56. xinference/web/ui/build/asset-manifest.json +6 -6
  57. xinference/web/ui/build/index.html +1 -1
  58. xinference/web/ui/build/static/css/{main.0f6523be.css → main.337afe76.css} +2 -2
  59. xinference/web/ui/build/static/css/main.337afe76.css.map +1 -0
  60. xinference/web/ui/build/static/js/main.91e77b5c.js +3 -0
  61. xinference/web/ui/build/static/js/main.91e77b5c.js.map +1 -0
  62. xinference/web/ui/node_modules/.cache/babel-loader/5c08e2cd07809ed3e41486b16652253404cbb63a3ff8d0366ee50f57e2413cea.json +1 -0
  63. xinference/web/ui/node_modules/.cache/babel-loader/5e6edb0fb87e3798f142e9abf8dd2dc46bab33a60d31dff525797c0c99887097.json +1 -0
  64. xinference/web/ui/node_modules/.cache/babel-loader/6087820be1bd5c02c42dff797e7df365448ef35ab26dd5d6bd33e967e05cbfd4.json +1 -0
  65. xinference/web/ui/node_modules/.cache/babel-loader/6798e126f3bc5f95a4c16a9c2ad52ffe77970c62406d83e20604dfda7ffd2247.json +1 -0
  66. xinference/web/ui/node_modules/.cache/babel-loader/b617f7d21a95045fc57b26a9373551740f1978a826134cbf705c3a1bf8714a93.json +1 -0
  67. xinference/web/ui/node_modules/.cache/babel-loader/c1506cb142151366074975f30fa1ff9cd6e5e978b62a4b074dfc16fe08d70d75.json +1 -0
  68. xinference/web/ui/node_modules/.cache/babel-loader/c5c7c2cd1b863ce41adff2c4737bba06eef3a1acf28288cb83d992060f6b8923.json +1 -0
  69. xinference/web/ui/src/locales/en.json +1 -0
  70. xinference/web/ui/src/locales/zh.json +1 -0
  71. {xinference-1.5.0.post1.dist-info → xinference-1.5.1.dist-info}/METADATA +1 -1
  72. {xinference-1.5.0.post1.dist-info → xinference-1.5.1.dist-info}/RECORD +77 -78
  73. {xinference-1.5.0.post1.dist-info → xinference-1.5.1.dist-info}/WHEEL +1 -1
  74. xinference/model/llm/transformers/compression.py +0 -258
  75. xinference/model/llm/transformers/yi_vl.py +0 -239
  76. xinference/web/ui/build/static/css/main.0f6523be.css.map +0 -1
  77. xinference/web/ui/build/static/js/main.58bd483c.js +0 -3
  78. xinference/web/ui/build/static/js/main.58bd483c.js.map +0 -1
  79. xinference/web/ui/node_modules/.cache/babel-loader/51709f5d3e53bcf19e613662ef9b91fb9174942c5518987a248348dd4e1e0e02.json +0 -1
  80. xinference/web/ui/node_modules/.cache/babel-loader/69081049f0c7447544b7cfd73dd13d8846c02fe5febe4d81587e95c89a412d5b.json +0 -1
  81. xinference/web/ui/node_modules/.cache/babel-loader/8f9af2979e45d4648f0cfae108363e58ee421c29a9d4e7329b6f06d9adfd4133.json +0 -1
  82. xinference/web/ui/node_modules/.cache/babel-loader/9c8b1a86e7c65b2b2599a205e30920652d6c2105f926508ef5bcf29a3ef4ce76.json +0 -1
  83. xinference/web/ui/node_modules/.cache/babel-loader/b8551e9775a01b28ae674125c688febe763732ea969ae344512e64ea01bf632e.json +0 -1
  84. xinference/web/ui/node_modules/.cache/babel-loader/efe7cd132c27a8f9fd5352a394c491fd5fb0da0348cf9fcbd923164a32365eab.json +0 -1
  85. xinference/web/ui/node_modules/.cache/babel-loader/f199e8173f6409a5802ed44acb95f218388131136504b2e9132129e150c92f9a.json +0 -1
  86. /xinference/web/ui/build/static/js/{main.58bd483c.js.LICENSE.txt → main.91e77b5c.js.LICENSE.txt} +0 -0
  87. {xinference-1.5.0.post1.dist-info → xinference-1.5.1.dist-info}/entry_points.txt +0 -0
  88. {xinference-1.5.0.post1.dist-info → xinference-1.5.1.dist-info}/licenses/LICENSE +0 -0
  89. {xinference-1.5.0.post1.dist-info → xinference-1.5.1.dist-info}/top_level.txt +0 -0
@@ -41,7 +41,7 @@ class QwenVLChatModel(PytorchChatModel):
41
41
  self._device = None
42
42
 
43
43
  @classmethod
44
- def match(
44
+ def match_json(
45
45
  cls, model_family: "LLMFamilyV1", model_spec: "LLMSpecV1", quantization: str
46
46
  ) -> bool:
47
47
  llm_family = model_family.model_family or model_family.model_name
@@ -66,6 +66,8 @@ class QwenVLChatModel(PytorchChatModel):
66
66
  # for multiple GPU, set back to auto to make multiple devices work
67
67
  device = "auto" if device == "cuda" else device
68
68
 
69
+ kwargs = self.apply_bnb_quantization()
70
+
69
71
  self._tokenizer = AutoTokenizer.from_pretrained(
70
72
  self.model_path,
71
73
  trust_remote_code=True,
@@ -76,6 +78,7 @@ class QwenVLChatModel(PytorchChatModel):
76
78
  device_map=device,
77
79
  trust_remote_code=True,
78
80
  code_revision=self.model_spec.model_revision,
81
+ **kwargs,
79
82
  ).eval()
80
83
 
81
84
  # Specify hyperparameters for generation
@@ -310,7 +313,7 @@ class QwenVLChatModel(PytorchChatModel):
310
313
 
311
314
  return raw_text, context_tokens
312
315
 
313
- def _get_full_prompt(self, messages: List[Dict], tools):
316
+ def _get_full_prompt(self, messages: List[Dict], tools): # type: ignore
314
317
  prompt, qwen_history = self._get_prompt_and_chat_history(messages)
315
318
  _, context_tokens = self.make_context(self._tokenizer, prompt, qwen_history)
316
319
  return context_tokens
@@ -68,6 +68,8 @@ QWEN_TOOL_CALL_FAMILY = [
68
68
  "qwen2-moe-instruct",
69
69
  "qwen2.5-instruct",
70
70
  "qwen2.5-coder-instruct",
71
+ "QwQ-32B",
72
+ "qwen3",
71
73
  ]
72
74
 
73
75
  GLM4_TOOL_CALL_FAMILY = [
@@ -143,6 +145,7 @@ class ChatModelMixin:
143
145
  add_generation_prompt=True,
144
146
  **kwargs,
145
147
  )
148
+ logger.debug("Prompt: %s", full_context)
146
149
  return full_context
147
150
  except Exception as e:
148
151
  logger.warning(
@@ -154,6 +157,31 @@ class ChatModelMixin:
154
157
  # Compilation function uses a cache to avoid recompiling the same template
155
158
  return self._build_from_raw_template(messages, chat_template, **kwargs)
156
159
 
160
+ @staticmethod
161
+ def _get_chat_template_kwargs_from_generate_config(
162
+ generate_config: Optional[Union[dict, Any]],
163
+ ) -> Optional[dict]:
164
+ if not generate_config:
165
+ return None
166
+ if "chat_template_kwargs" in generate_config:
167
+ kwargs = generate_config["chat_template_kwargs"]
168
+ if isinstance(kwargs, str):
169
+ try:
170
+ return json.loads(kwargs)
171
+ except json.JSONDecodeError:
172
+ raise TypeError(
173
+ f"`chat_template_kwargs` should be json parsable, "
174
+ f"got: {kwargs}"
175
+ )
176
+ elif isinstance(kwargs, dict):
177
+ return kwargs
178
+ else:
179
+ raise TypeError(
180
+ f"`chat_template_kwargs` but be a JSON parsable str "
181
+ f"or dict, got: {kwargs}"
182
+ )
183
+ return None
184
+
157
185
  @staticmethod
158
186
  def convert_messages_with_content_list_to_str_conversion(
159
187
  messages: List[Dict],
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import asyncio
16
+ import importlib.util
16
17
  import itertools
17
18
  import json
18
19
  import logging
@@ -50,7 +51,7 @@ from ....types import (
50
51
  LoRA,
51
52
  )
52
53
  from .. import LLM, LLMFamilyV1, LLMSpecV1
53
- from ..llm_family import CustomLLMFamilyV1
54
+ from ..llm_family import CustomLLMFamilyV1, cache_model_tokenizer_and_config
54
55
  from ..utils import (
55
56
  DEEPSEEK_TOOL_CALL_FAMILY,
56
57
  QWEN_TOOL_CALL_FAMILY,
@@ -239,6 +240,9 @@ if VLLM_INSTALLED and vllm.__version__ >= "0.8.0":
239
240
  if VLLM_INSTALLED and vllm.__version__ >= "0.8.4":
240
241
  VLLM_SUPPORTED_CHAT_MODELS.append("glm4-0414")
241
242
 
243
+ if VLLM_INSTALLED and vllm.__version__ >= "0.8.5":
244
+ VLLM_SUPPORTED_CHAT_MODELS.append("qwen3")
245
+
242
246
 
243
247
  class VLLMModel(LLM):
244
248
  def __init__(
@@ -330,8 +334,10 @@ class VLLMModel(LLM):
330
334
 
331
335
  raise ImportError(f"{error_message}\n\n{''.join(installation_guide)}")
332
336
 
333
- if vllm.__version__ >= "0.3.1":
334
- # from vllm v0.3.1, it uses cupy as NCCL backend
337
+ from ..llm_family import LlamaCppLLMSpecV1
338
+
339
+ if "0.3.1" <= vllm.__version__ <= "0.3.3":
340
+ # from vllm v0.3.1 to v0.3.3, it uses cupy as NCCL backend
335
341
  # in which cupy will fork a process
336
342
  # only for xoscar >= 0.3.0, new process is allowed in subpool
337
343
  # besides, xinference set start method as forkserver for unix
@@ -344,6 +350,13 @@ class VLLMModel(LLM):
344
350
 
345
351
  self.prepare_parse_reasoning_content(reasoning_content)
346
352
 
353
+ if (
354
+ isinstance(self.model_spec, LlamaCppLLMSpecV1)
355
+ and self.model_spec.model_format == "ggufv2"
356
+ ):
357
+ # gguf
358
+ self._preprocess_load_gguf()
359
+
347
360
  if self.lora_modules is None:
348
361
  self.lora_requests = []
349
362
  else:
@@ -482,6 +495,45 @@ class VLLMModel(LLM):
482
495
  _, err, tb = self._loading_error
483
496
  raise err.with_traceback(tb)
484
497
 
498
+ def _preprocess_load_gguf(self):
499
+ # check if it is multi gguf files
500
+ if (
501
+ not os.path.isfile(self.model_path)
502
+ and self.model_spec.quantization_parts
503
+ and self.quantization in self.model_spec.quantization_parts
504
+ ):
505
+ raise RuntimeError(
506
+ "vllm does not support multiple gguf files, please merge them first and "
507
+ "provide `model_path` with merged file"
508
+ )
509
+
510
+ if "tokenizer" not in self._model_config:
511
+ # find pytorch format without quantization
512
+ non_quant_spec = next(
513
+ spec
514
+ for spec in self.model_family.model_specs
515
+ if spec.model_format == "pytorch"
516
+ and "none" in spec.quantizations
517
+ and spec.model_size_in_billions
518
+ == self.model_spec.model_size_in_billions
519
+ )
520
+
521
+ path = cache_model_tokenizer_and_config(self.model_family, non_quant_spec)
522
+ # other than gguf file, vllm requires to provide tokenizer and hf_config_path
523
+ self._model_config["tokenizer"] = self._model_config[
524
+ "hf_config_path"
525
+ ] = path
526
+
527
+ if not os.path.isfile(self.model_path):
528
+ self.model_path = os.path.realpath(
529
+ os.path.join(
530
+ self.model_path,
531
+ self.model_spec.model_file_name_template.format(
532
+ quantization=self.quantization
533
+ ),
534
+ )
535
+ )
536
+
485
537
  def stop(self):
486
538
  # though the vLLM engine will shutdown when deleted,
487
539
  # but some issue e.g. GH#1682 reported
@@ -642,7 +694,11 @@ class VLLMModel(LLM):
642
694
  return sanitized
643
695
 
644
696
  @classmethod
645
- def match(
697
+ def check_lib(cls) -> bool:
698
+ return importlib.util.find_spec("vllm") is not None
699
+
700
+ @classmethod
701
+ def match_json(
646
702
  cls, llm_family: "LLMFamilyV1", llm_spec: "LLMSpecV1", quantization: str
647
703
  ) -> bool:
648
704
  if not cls._has_cuda_device():
@@ -935,10 +991,10 @@ class VLLMModel(LLM):
935
991
 
936
992
  class VLLMChatModel(VLLMModel, ChatModelMixin):
937
993
  @classmethod
938
- def match(
994
+ def match_json(
939
995
  cls, llm_family: "LLMFamilyV1", llm_spec: "LLMSpecV1", quantization: str
940
996
  ) -> bool:
941
- if llm_spec.model_format not in ["pytorch", "gptq", "awq", "fp8"]:
997
+ if llm_spec.model_format not in ["pytorch", "gptq", "awq", "fp8", "ggufv2"]:
942
998
  return False
943
999
  if llm_spec.model_format == "pytorch":
944
1000
  if quantization != "none" and not (quantization is None):
@@ -954,6 +1010,9 @@ class VLLMChatModel(VLLMModel, ChatModelMixin):
954
1010
  else:
955
1011
  if "4" not in quantization:
956
1012
  return False
1013
+ if llm_spec.model_format == "ggufv2":
1014
+ if not (VLLM_INSTALLED and vllm.__version__ >= "0.8.2"):
1015
+ return False
957
1016
  if isinstance(llm_family, CustomLLMFamilyV1):
958
1017
  if llm_family.model_family not in VLLM_SUPPORTED_CHAT_MODELS:
959
1018
  return False
@@ -1018,7 +1077,9 @@ class VLLMChatModel(VLLMModel, ChatModelMixin):
1018
1077
  ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:
1019
1078
  tools = generate_config.pop("tools", []) if generate_config else None
1020
1079
  model_family = self.model_family.model_family or self.model_family.model_name
1021
- full_context_kwargs = {}
1080
+ full_context_kwargs = (
1081
+ self._get_chat_template_kwargs_from_generate_config(generate_config) or {}
1082
+ )
1022
1083
  if tools:
1023
1084
  if (
1024
1085
  model_family in QWEN_TOOL_CALL_FAMILY
@@ -1055,7 +1116,7 @@ class VLLMChatModel(VLLMModel, ChatModelMixin):
1055
1116
 
1056
1117
  class VLLMVisionModel(VLLMModel, ChatModelMixin):
1057
1118
  @classmethod
1058
- def match(
1119
+ def match_json(
1059
1120
  cls, llm_family: "LLMFamilyV1", llm_spec: "LLMSpecV1", quantization: str
1060
1121
  ) -> bool:
1061
1122
  if not cls._has_cuda_device():
@@ -1136,7 +1197,10 @@ class VLLMVisionModel(VLLMModel, ChatModelMixin):
1136
1197
  if "internvl2" not in model_family.lower():
1137
1198
  from qwen_vl_utils import process_vision_info
1138
1199
 
1139
- full_context_kwargs = {}
1200
+ full_context_kwargs = (
1201
+ self._get_chat_template_kwargs_from_generate_config(generate_config)
1202
+ or {}
1203
+ )
1140
1204
  if tools and model_family in QWEN_TOOL_CALL_FAMILY:
1141
1205
  full_context_kwargs["tools"] = tools
1142
1206
  assert self.model_family.chat_template is not None
@@ -54,13 +54,14 @@ class WorkerActor(xo.StatelessActor):
54
54
  return f"VllmWorker_{rank}"
55
55
 
56
56
  def execute_method(self, method: Union[str, Callable], *args, **kwargs):
57
- logger.debug(
58
- "Calling method %s in vllm worker %s, args: %s, kwargs: %s",
59
- method,
60
- self.uid,
61
- args,
62
- kwargs,
63
- )
57
+ # NOTE: too many logs, but useful for debug
58
+ # logger.debug(
59
+ # "Calling method %s in vllm worker %s, args: %s, kwargs: %s",
60
+ # method,
61
+ # self.uid,
62
+ # args,
63
+ # kwargs,
64
+ # )
64
65
  if isinstance(method, str):
65
66
  return getattr(self._worker, method)(*args, **kwargs)
66
67
  else:
@@ -24,7 +24,7 @@ from .block import XavierPrefixCachingBlockAllocator
24
24
  class XavierCpuGpuBlockAllocator(CpuGpuBlockAllocator):
25
25
  def __init__(self, *args, **kwargs):
26
26
  super().__init__(*args, **kwargs)
27
- self._xavier_config: Optional[Dict[str, Any]] = None
27
+ self._xavier_config: Optional[Dict[str, Any]] = None # type: ignore
28
28
 
29
29
  @property
30
30
  def xavier_config(self):
@@ -30,7 +30,7 @@ class XavierBlockManager(SelfAttnBlockSpaceManager):
30
30
  # Monkey patch
31
31
  CpuGpuBlockAllocator.create = XavierCpuGpuBlockAllocator.create
32
32
  super().__init__(*args, **kwargs)
33
- self._xavier_config: Optional[Dict[str, Any]] = None
33
+ self._xavier_config: Optional[Dict[str, Any]] = None # type: ignore
34
34
  logger.debug("Init xavier block manager done.")
35
35
 
36
36
  @property
@@ -25,10 +25,10 @@ class VLLMBlockTracker(xo.StatelessActor):
25
25
  def __init__(self):
26
26
  super().__init__()
27
27
  # engine -> hash -> (rank, block_id)
28
- self._hash_to_rank_and_block_id: Dict[int, Dict[int, Set[Tuple[int, int]]]] = {}
28
+ self._hash_to_rank_and_block_id: Dict[int, Dict[int, Set[Tuple[int, int]]]] = {} # type: ignore
29
29
  # engine -> rank -> (hash, block_id)
30
- self._rank_to_hash_and_block_id: Dict[int, Dict[int, Set[Tuple[int, int]]]] = {}
31
- self._unavailable_ranks: Set[int] = set()
30
+ self._rank_to_hash_and_block_id: Dict[int, Dict[int, Set[Tuple[int, int]]]] = {} # type: ignore
31
+ self._unavailable_ranks: Set[int] = set() # type: ignore
32
32
 
33
33
  def register_blocks(
34
34
  self, virtual_engine: int, block_infos: List[Tuple[int, int]], rank: int
@@ -38,7 +38,7 @@ class XavierExecutor(MultiprocessingDistributedExecutor):
38
38
  Retrieve the necessary transmission information from the `cache_engine`.
39
39
  """
40
40
  transfer_ref = await self._get_transfer_ref()
41
- ref_cache_engine: CacheEngine = self.driver_worker.cache_engine[0]
41
+ ref_cache_engine: CacheEngine = self.driver_worker.cache_engine[0] # type: ignore
42
42
  buffer_dtype = ref_cache_engine.dtype
43
43
  buffer_device = "cpu"
44
44
  buffer_pin_memory = is_pin_memory_available()
@@ -46,7 +46,7 @@ async def actor_pool_context():
46
46
  async def test_block_tracker(actor_pool_context):
47
47
  actor_pool = actor_pool_context
48
48
  addr = actor_pool.external_address
49
- tracker_ref: xo.ActorRefType[ExtendedBlockTracker] = await xo.create_actor(
49
+ tracker_ref: xo.ActorRefType[ExtendedBlockTracker] = await xo.create_actor( # type: ignore
50
50
  ExtendedBlockTracker,
51
51
  address=addr,
52
52
  uid=VLLMBlockTracker.default_uid(),
@@ -64,6 +64,7 @@ class DiffUsersVideoModel:
64
64
  self._model_uid = model_uid
65
65
  self._model_path = model_path
66
66
  self._model_spec = model_spec
67
+ self._abilities = model_spec.model_ability or [] # type: ignore
67
68
  self._model = None
68
69
  self._kwargs = kwargs
69
70
 
@@ -71,6 +72,10 @@ class DiffUsersVideoModel:
71
72
  def model_spec(self):
72
73
  return self._model_spec
73
74
 
75
+ @property
76
+ def model_ability(self):
77
+ return self._abilities
78
+
74
79
  def load(self):
75
80
  import torch
76
81
 
@@ -105,6 +110,12 @@ class DiffUsersVideoModel:
105
110
  pipeline = self._model = HunyuanVideoPipeline.from_pretrained(
106
111
  self._model_path, transformer=transformer, **kwargs
107
112
  )
113
+ elif self.model_spec.model_family == "Wan":
114
+ from diffusers import WanPipeline
115
+
116
+ pipeline = self._model = WanPipeline.from_pretrained(
117
+ self._model_path, **kwargs
118
+ )
108
119
  else:
109
120
  raise Exception(
110
121
  f"Unsupported model family: {self._model_spec.model_family}"
@@ -124,8 +135,16 @@ class DiffUsersVideoModel:
124
135
  pipeline.enable_model_cpu_offload()
125
136
  if kwargs.get("sequential_cpu_offload", True):
126
137
  pipeline.enable_sequential_cpu_offload()
127
- pipeline.vae.enable_slicing()
128
- pipeline.vae.enable_tiling()
138
+ try:
139
+ pipeline.vae.enable_slicing()
140
+ except AttributeError:
141
+ # model does not support slicing
142
+ pass
143
+ try:
144
+ pipeline.vae.enable_tiling()
145
+ except AttributeError:
146
+ # model does support tiling
147
+ pass
129
148
  elif not kwargs.get("device_map"):
130
149
  logger.debug("Loading model to available device")
131
150
  if gpu_count() > 1:
@@ -145,6 +164,8 @@ class DiffUsersVideoModel:
145
164
  ) -> VideoList:
146
165
  import gc
147
166
 
167
+ from diffusers.utils import export_to_video
168
+
148
169
  # cv2 bug will cause the video cannot be normally displayed
149
170
  # thus we use the imageio one
150
171
  # from diffusers.utils import export_to_video
@@ -155,6 +176,7 @@ class DiffUsersVideoModel:
155
176
  generate_kwargs = self._model_spec.default_generate_config.copy()
156
177
  generate_kwargs.update(kwargs)
157
178
  generate_kwargs["num_videos_per_prompt"] = n
179
+ fps = generate_kwargs.pop("fps", 10)
158
180
  logger.debug(
159
181
  "diffusers text_to_video args: %s",
160
182
  generate_kwargs,
@@ -173,7 +195,12 @@ class DiffUsersVideoModel:
173
195
  urls = []
174
196
  for f in output.frames:
175
197
  path = os.path.join(XINFERENCE_VIDEO_DIR, uuid.uuid4().hex + ".mp4")
176
- p = export_to_video_imageio(f, path, fps=8)
198
+ export = (
199
+ export_to_video
200
+ if self.model_spec.model_family != "CogVideoX"
201
+ else export_to_video_imageio
202
+ )
203
+ p = export(f, path, fps=fps)
177
204
  urls.append(p)
178
205
  if response_format == "url":
179
206
  return VideoList(
@@ -45,5 +45,51 @@
45
45
  },
46
46
  "default_generate_config": {
47
47
  }
48
+ },
49
+ {
50
+ "model_name": "Wan2.1-1.3B",
51
+ "model_family": "Wan",
52
+ "model_id": "Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
53
+ "model_revision": "0fad780a534b6463e45facd96134c9f345acfa5b",
54
+ "model_ability": [
55
+ "text2video"
56
+ ],
57
+ "default_model_config": {
58
+ "torch_dtype": "bfloat16"
59
+ },
60
+ "default_generate_config": {
61
+ },
62
+ "virtualenv": {
63
+ "packages": [
64
+ "diffusers>=0.33.0",
65
+ "ftfy",
66
+ "imageio-ffmpeg",
67
+ "imageio",
68
+ "numpy==1.26.4"
69
+ ]
70
+ }
71
+ },
72
+ {
73
+ "model_name": "Wan2.1-14B",
74
+ "model_family": "Wan",
75
+ "model_id": "Wan-AI/Wan2.1-T2V-14B-Diffusers",
76
+ "model_revision": "38ec498cb3208fb688890f8cc7e94ede2cbd7f68",
77
+ "model_ability": [
78
+ "text2video"
79
+ ],
80
+ "default_model_config": {
81
+ "torch_dtype": "bfloat16"
82
+ },
83
+ "default_generate_config": {
84
+ },
85
+ "virtualenv": {
86
+ "packages": [
87
+ "diffusers>=0.33.0",
88
+ "ftfy",
89
+ "imageio-ffmpeg",
90
+ "imageio",
91
+ "numpy==1.26.4"
92
+ ]
93
+ }
48
94
  }
49
95
  ]
@@ -48,5 +48,53 @@
48
48
  },
49
49
  "default_generate_config": {
50
50
  }
51
+ },
52
+ {
53
+ "model_name": "Wan2.1-1.3B",
54
+ "model_family": "Wan",
55
+ "model_hub": "modelscope",
56
+ "model_id": "Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
57
+ "model_revision": "master",
58
+ "model_ability": [
59
+ "text2video"
60
+ ],
61
+ "default_model_config": {
62
+ "torch_dtype": "bfloat16"
63
+ },
64
+ "default_generate_config": {
65
+ },
66
+ "virtualenv": {
67
+ "packages": [
68
+ "diffusers>=0.33.0",
69
+ "ftfy",
70
+ "imageio-ffmpeg",
71
+ "imageio",
72
+ "numpy==1.26.4"
73
+ ]
74
+ }
75
+ },
76
+ {
77
+ "model_name": "Wan2.1-14B",
78
+ "model_family": "Wan",
79
+ "model_hub": "modelscope",
80
+ "model_id": "Wan-AI/Wan2.1-T2V-14B-Diffusers",
81
+ "model_revision": "master",
82
+ "model_ability": [
83
+ "text2video"
84
+ ],
85
+ "default_model_config": {
86
+ "torch_dtype": "bfloat16"
87
+ },
88
+ "default_generate_config": {
89
+ },
90
+ "virtualenv": {
91
+ "packages": [
92
+ "diffusers>=0.33.0",
93
+ "ftfy",
94
+ "imageio-ffmpeg",
95
+ "imageio",
96
+ "numpy==1.26.4"
97
+ ]
98
+ }
51
99
  }
52
100
  ]
xinference/types.py CHANGED
@@ -344,6 +344,7 @@ class PytorchModelConfig(TypedDict, total=False):
344
344
  reasoning_content: bool
345
345
  min_pixels: NotRequired[int]
346
346
  max_pixels: NotRequired[int]
347
+ quantization_config: NotRequired[Dict]
347
348
 
348
349
 
349
350
  def get_pydantic_model_from_method(
@@ -411,6 +412,7 @@ class CreateCompletionTorch(BaseModel):
411
412
  top_k: int = top_k_field
412
413
  lora_name: Optional[str]
413
414
  request_id: Optional[str]
415
+ chat_template_kwargs: Optional[Union[str, Dict[str, Any]]]
414
416
 
415
417
 
416
418
  CreateCompletionLlamaCpp: BaseModel
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "./static/css/main.0f6523be.css",
4
- "main.js": "./static/js/main.58bd483c.js",
3
+ "main.css": "./static/css/main.337afe76.css",
4
+ "main.js": "./static/js/main.91e77b5c.js",
5
5
  "static/media/icon.webp": "./static/media/icon.4603d52c63041e5dfbfd.webp",
6
6
  "index.html": "./index.html",
7
- "main.0f6523be.css.map": "./static/css/main.0f6523be.css.map",
8
- "main.58bd483c.js.map": "./static/js/main.58bd483c.js.map"
7
+ "main.337afe76.css.map": "./static/css/main.337afe76.css.map",
8
+ "main.91e77b5c.js.map": "./static/js/main.91e77b5c.js.map"
9
9
  },
10
10
  "entrypoints": [
11
- "static/css/main.0f6523be.css",
12
- "static/js/main.58bd483c.js"
11
+ "static/css/main.337afe76.css",
12
+ "static/js/main.91e77b5c.js"
13
13
  ]
14
14
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.svg"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Xinference</title><script defer="defer" src="./static/js/main.58bd483c.js"></script><link href="./static/css/main.0f6523be.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.svg"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Xinference</title><script defer="defer" src="./static/js/main.91e77b5c.js"></script><link href="./static/css/main.337afe76.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -1,2 +1,2 @@
1
- .container{cursor:pointer;display:block}.container,.descriptionCard{border-radius:20px;height:300px;position:relative;width:300px}.descriptionCard{left:-1px;padding:20px;top:-1px}.cardTitle{display:flex;justify-content:space-between}.iconButtonBox{align-items:center;display:flex}.drawerCard{min-height:100%;padding:20px 80px 0;position:relative;width:60vw}.p{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;font-size:14px;overflow:hidden;padding:0 10px;text-overflow:ellipsis;word-break:break-word}.pasteText{color:#1976d2;cursor:pointer;font-size:18px!important;margin-inline:10px}.pasteText:hover{color:#1976d2b3}.copyToCommandLine{color:#1976d2;cursor:pointer;font-size:16px!important}.copyToCommandLine:hover{color:#1976d2b3}.formContainer{height:80%;overflow:scroll;padding:0 10px 160px}.buttonsContainer{bottom:50px;left:100px;position:absolute;right:100px}.buttons{align-items:center;display:flex;gap:20px;justify-content:space-between}.css-1be5mm1-MuiLinearProgress-root-MuiMobileStepper-progress,.css-r5rjnf-MuiLinearProgress-root-MuiMobileStepper-progress{width:100%!important}.instructionText{color:#666;font-size:12px;font-style:italic;margin:30px 0;text-align:center}.iconRow{bottom:20px;justify-content:space-between;left:20px;position:absolute;right:20px}.iconItem,.iconRow{align-items:center;display:flex}.iconItem{flex-direction:column;margin:20px}.boldIconText{font-size:1.2em;font-weight:700}.muiIcon{font-size:1.5em}.smallText{font-size:.8em}.dialogBox{height:607px;margin:32px;overflow-x:scroll;width:1241px}.dialogTitle{display:flex;justify-content:space-between;padding:20px 20px 7px}.dialogTitle-model_name{font-size:18px;font-weight:700}.pathBox{cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:160px}.pathBox2{width:300px}.empty{color:#555;font-size:20px;left:50%;position:absolute;top:30%;-webkit-transform:translate(-50%);transform:translate(-50%)}.deleteDialog{align-items:center;display:flex}.warningIcon{color:#ed6c02;margin-right:10px}.jsonDialog{border-radius:8px;color:#000;display:flex;flex-direction:column;padding:10px 30px}.jsonDialog-title{align-items:center;display:flex;justify-content:space-between;margin:10px 0 20px}.title-name{font-size:16px;font-weight:700}.main-box{height:500px;width:700px}.but-box{display:flex;justify-content:end;margin-top:20px}.drawer{bottom:0;left:0;opacity:0;position:fixed;right:0;top:0;transition:visibility .3s ease,opacity .3s ease;visibility:hidden;z-index:1000}.drawer.open{opacity:1;visibility:visible}.drawer-overlay{background-color:rgba(0,0,0,.5);left:0;z-index:999}.drawer-content,.drawer-overlay{bottom:0;position:absolute;right:0;top:0}.drawer-content{background-color:#fff;box-shadow:-2px 0 10px rgba(0,0,0,.1);overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;z-index:1000}.drawer.open .drawer-content{-webkit-transform:translateX(0);transform:translateX(0)}.copyText{color:#666;cursor:pointer;font-size:14px!important}.copyText:hover{color:#1976d2}.formBox{max-height:80vh;max-width:50vw;min-width:50vw;overflow:auto;padding:40px 20px 0 0;position:relative;transition:all .4s ease-in-out}.broaden{max-width:100%;min-width:100%;padding-right:0}.show-json{align-items:center;display:flex;right:60px;top:90px}.icon,.show-json{position:absolute}.icon{cursor:pointer;margin-left:20px;right:-40px}.icon:hover{color:#1976d2}.arrow{font-size:24px!important}.jsonBox{min-height:80vh;position:relative;transition:all .4s ease-in-out;width:100%}.hide{overflow:hidden;-webkit-transform:translate(30vw);transform:translate(30vw);width:0}.checkboxWrapper{align-items:center;display:flex;flex-wrap:wrap;width:100%}.jsonBox-header{align-items:center;display:flex;justify-content:space-between}.jsonBox-title{font-weight:700;line-height:40px}.textarea{background-color:initial;border:1px solid #ddd;border-radius:5px;color:#666;height:calc(100% - 40px);padding:5px 10px;resize:none;width:100%}.addBtn{margin-left:20px!important}.item{border:1px solid #ddd;border-radius:10px;margin:10px 50px 0;overflow:hidden;padding:20px;position:relative}.item:hover .deleteBtn{-webkit-transform:translateX(-50px);transform:translateX(-50px)}.deleteBtn{background-color:#1976d2;border-radius:25px;height:50px;line-height:70px;position:absolute;right:20px;text-align:center;top:calc(50% - 25px);-webkit-transform:translateX(80px);transform:translateX(80px);transition:all .3s ease-in-out;width:50px}.deleteBtn:hover{box-shadow:0 0 10px #aaa;cursor:pointer}.deleteIcon{color:#fff;font-size:28px!important}.chat_template_box{align-items:start;display:flex;gap:10px}.chat_template_test{width:30%}.chat_template_test_mainBox{border:1px solid #ccc;border-radius:4px;height:137px;overflow:scroll;padding:10px}.chat_template_test_tip{color:rgba(0,0,0,.6);font-size:10px;margin:4px 14px 0}.test_res_box{border:1px solid #ddd;border-radius:4px;margin-top:5px;min-height:55px;padding:10px}.css-19qh8xo-MuiInputBase-input-MuiOutlinedInput-input.Mui-disabled{-webkit-text-fill-color:#000!important}
2
- /*# sourceMappingURL=main.0f6523be.css.map*/
1
+ .container{cursor:pointer;display:block}.container,.descriptionCard{border-radius:20px;height:300px;position:relative;width:300px}.descriptionCard{left:-1px;padding:20px;top:-1px}.cardTitle{display:flex;justify-content:space-between}.iconButtonBox{align-items:center;display:flex}.drawerCard{min-height:100%;padding:20px 80px 0;position:relative;width:60vw}.p{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;font-size:14px;overflow:hidden;padding:0 10px;text-overflow:ellipsis;word-break:break-word}.pasteText{color:#1976d2;cursor:pointer;font-size:18px!important;margin-inline:10px}.pasteText:hover{color:#1976d2b3}.copyToCommandLine{color:#1976d2;cursor:pointer;font-size:16px!important}.copyToCommandLine:hover{color:#1976d2b3}.formContainer{height:80%;overflow:scroll;padding:0 10px 160px}.buttonsContainer{bottom:50px;left:100px;position:absolute;right:100px}.buttons{align-items:center;display:flex;gap:20px;justify-content:space-between}.css-1be5mm1-MuiLinearProgress-root-MuiMobileStepper-progress,.css-r5rjnf-MuiLinearProgress-root-MuiMobileStepper-progress{width:100%!important}.instructionText{color:#666;font-size:12px;font-style:italic;margin:30px 0;text-align:center}.iconRow{bottom:20px;justify-content:space-between;left:20px;position:absolute;right:20px}.iconItem,.iconRow{align-items:center;display:flex}.iconItem{flex-direction:column;margin:20px}.boldIconText{font-size:1.2em;font-weight:700}.muiIcon{font-size:1.5em}.smallText{font-size:.8em}.dialogBox{height:607px;margin:32px;overflow-x:scroll;width:1241px}.dialogTitle{display:flex;justify-content:space-between;padding:20px 20px 7px}.dialogTitle-model_name{font-size:18px;font-weight:700}.pathBox{cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:160px}.pathBox2{width:300px}.empty{color:#555;font-size:20px;left:50%;position:absolute;top:30%;-webkit-transform:translate(-50%);transform:translate(-50%)}.deleteDialog{align-items:center;display:flex}.warningIcon{color:#ed6c02;margin-right:10px}.jsonDialog{border-radius:8px;color:#000;display:flex;flex-direction:column;padding:10px 30px}.jsonDialog-title{align-items:center;display:flex;justify-content:space-between;margin:10px 0 20px}.title-name{font-size:16px;font-weight:700}.main-box{height:500px;width:700px}.but-box{display:flex;justify-content:end;margin-top:20px}.drawer{bottom:0;left:0;opacity:0;position:fixed;right:0;top:0;transition:visibility .3s ease,opacity .3s ease;visibility:hidden;z-index:1000}.drawer.open{opacity:1;visibility:visible}.drawer-overlay{background-color:rgba(0,0,0,.5);left:0;z-index:999}.drawer-content,.drawer-overlay{bottom:0;position:absolute;right:0;top:0}.drawer-content{background-color:#fff;box-shadow:-2px 0 10px rgba(0,0,0,.1);overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;z-index:1000}.drawer.open .drawer-content{-webkit-transform:translateX(0);transform:translateX(0)}.textHighlight .MuiInputBase-input,.textHighlight .MuiSelect-select{color:#1976d2}.copyText{color:#666;cursor:pointer;font-size:14px!important}.copyText:hover{color:#1976d2}.formBox{max-height:80vh;max-width:50vw;min-width:50vw;overflow:auto;padding:40px 20px 0 0;position:relative;transition:all .4s ease-in-out}.broaden{max-width:100%;min-width:100%;padding-right:0}.show-json{align-items:center;display:flex;right:60px;top:90px}.icon,.show-json{position:absolute}.icon{cursor:pointer;margin-left:20px;right:-40px}.icon:hover{color:#1976d2}.arrow{font-size:24px!important}.jsonBox{min-height:80vh;position:relative;transition:all .4s ease-in-out;width:100%}.hide{overflow:hidden;-webkit-transform:translate(30vw);transform:translate(30vw);width:0}.checkboxWrapper{align-items:center;display:flex;flex-wrap:wrap;width:100%}.jsonBox-header{align-items:center;display:flex;justify-content:space-between}.jsonBox-title{font-weight:700;line-height:40px}.textarea{background-color:initial;border:1px solid #ddd;border-radius:5px;color:#666;height:calc(100% - 40px);padding:5px 10px;resize:none;width:100%}.addBtn{margin-left:20px!important}.item{border:1px solid #ddd;border-radius:10px;margin:10px 50px 0;overflow:hidden;padding:20px;position:relative}.item:hover .deleteBtn{-webkit-transform:translateX(-50px);transform:translateX(-50px)}.deleteBtn{background-color:#1976d2;border-radius:25px;height:50px;line-height:70px;position:absolute;right:20px;text-align:center;top:calc(50% - 25px);-webkit-transform:translateX(80px);transform:translateX(80px);transition:all .3s ease-in-out;width:50px}.deleteBtn:hover{box-shadow:0 0 10px #aaa;cursor:pointer}.deleteIcon{color:#fff;font-size:28px!important}.chat_template_box{align-items:start;display:flex;gap:10px}.chat_template_test{width:30%}.chat_template_test_mainBox{border:1px solid #ccc;border-radius:4px;height:137px;overflow:scroll;padding:10px}.chat_template_test_tip{color:rgba(0,0,0,.6);font-size:10px;margin:4px 14px 0}.test_res_box{border:1px solid #ddd;border-radius:4px;margin-top:5px;min-height:55px;padding:10px}.css-19qh8xo-MuiInputBase-input-MuiOutlinedInput-input.Mui-disabled{-webkit-text-fill-color:#000!important}
2
+ /*# sourceMappingURL=main.337afe76.css.map*/
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/css/main.337afe76.css","mappings":"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","sources":["scenes/launch_model/styles/modelCardStyle.css","components/copyComponent/style.css","scenes/register_model/styles/registerModelStyle.css"],"sourcesContent":[".container {\n display: block;\n position: relative;\n width: 300px;\n height: 300px;\n cursor: pointer;\n border-radius: 20px;\n}\n.descriptionCard {\n position: relative;\n top: -1px;\n left: -1px;\n width: 300px;\n height: 300px;\n padding: 20px;\n border-radius: 20px;\n}\n.cardTitle {\n display: flex;\n justify-content: space-between;\n}\n.iconButtonBox {\n display: flex;\n align-items: center;\n}\n.drawerCard {\n position: relative;\n padding: 20px 80px 0;\n min-height: 100%;\n width: 60vw;\n}\n.p {\n display: -webkit-box;\n -webkit-line-clamp: 4;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n font-size: 14px;\n padding: 0px 10px;\n}\n.pasteText {\n font-size: 18px !important;\n color: #1976d2;\n cursor: pointer;\n margin-inline: 10px;\n}\n.pasteText:hover {\n color: #1976d2b3;\n}\n.copyToCommandLine {\n font-size: 16px !important;\n color: #1976d2;\n cursor: pointer;\n}\n.copyToCommandLine:hover {\n color: #1976d2b3;\n}\n.formContainer {\n height: 80%;\n overflow: scroll;\n padding: 0 10px;\n padding-bottom: 160px;\n}\n.buttonsContainer {\n position: absolute;\n bottom: 50px;\n left: 100px;\n right: 100px;\n}\n.buttons {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 20px;\n}\n.css-1be5mm1-MuiLinearProgress-root-MuiMobileStepper-progress {\n width: 100% !important;\n}\n.css-r5rjnf-MuiLinearProgress-root-MuiMobileStepper-progress {\n width: 100% !important;\n}\n.instructionText {\n font-size: 12px;\n color: #666666;\n font-style: italic;\n margin: 30px 0;\n text-align: center;\n}\n.iconRow {\n position: absolute;\n bottom: 20px;\n left: 20px;\n right: 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.iconItem {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 20px;\n}\n.boldIconText {\n font-weight: bold;\n font-size: 1.2em;\n}\n.muiIcon {\n font-size: 1.5em;\n}\n.smallText {\n font-size: 0.8em;\n}\n.dialogBox {\n width: 1241px;\n height: 607px;\n margin: 32px;\n overflow-x: scroll;\n}\n.dialogTitle {\n display: flex;\n justify-content: space-between;\n padding: 20px 20px 7px;\n}\n.dialogTitle-model_name {\n font-size: 18px;\n font-weight: 700;\n}\n.pathBox {\n width: 160px;\n cursor: pointer;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.pathBox2 {\n width: 300px;\n}\n.empty {\n position: absolute;\n left: 50%;\n top: 30%;\n font-size: 20px;\n color: #555;\n transform: translate(-50%, 0);\n}\n.deleteDialog {\n display: flex;\n align-items: center;\n}\n.warningIcon {\n margin-right: 10px;\n color: rgb(237, 108, 2);\n}\n.jsonDialog {\n display: flex;\n flex-direction: column;\n padding: 10px 30px;\n color: #000;\n border-radius: 8px;\n}\n.jsonDialog-title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 10px 0 20px 0;\n}\n.title-name {\n font-size: 16px;\n font-weight: 700;\n}\n.main-box {\n width: 700px;\n height: 500px;\n}\n.but-box {\n display: flex;\n justify-content: end;\n margin-top: 20px;\n}\n.drawer {\n z-index: 1000;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n visibility: hidden;\n opacity: 0;\n transition: visibility 0.3s ease, opacity 0.3s ease;\n}\n.drawer.open {\n visibility: visible;\n opacity: 1;\n}\n.drawer-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n}\n.drawer-content {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: white;\n z-index: 1000;\n box-shadow: -2px 0 10px rgba(0, 0, 0, 0.1);\n transition: transform 0.3s ease;\n transform: translateX(100%);\n overflow-y: auto;\n}\n.drawer.open .drawer-content {\n transform: translateX(0);\n}\n.textHighlight .MuiSelect-select {\n color: #1976d2;\n}\n.textHighlight .MuiInputBase-input {\n color: #1976d2;\n}\n",".copyText {\n font-size: 14px !important;\n color: #666;\n cursor: pointer;\n}\n\n.copyText:hover {\n color: #1976d2;\n}\n",".formBox {\n position: relative;\n max-width: 50vw;\n min-width: 50vw;\n max-height: 80vh;\n overflow: auto;\n padding: 40px 20px 0 0;\n transition: all 0.4s ease-in-out;\n}\n\n.broaden {\n max-width: 100%;\n min-width: 100%;\n padding-right: 0;\n}\n\n.show-json {\n display: flex;\n align-items: center;\n position: absolute;\n top: 90px;\n right: 60px;\n}\n\n.icon {\n position: absolute;\n right: -40px;\n cursor: pointer;\n margin-left: 20px;\n}\n\n.icon:hover {\n color: #1976d2;\n}\n\n.arrow {\n font-size: 24px !important;\n}\n\n.jsonBox {\n position: relative;\n min-height: 80vh;\n width: 100%;\n transition: all 0.4s ease-in-out;\n}\n\n.hide {\n width: 0;\n transform: translate(30vw, 0);\n overflow: hidden;\n}\n\n.checkboxWrapper {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n width: 100%;\n}\n\n.jsonBox-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.jsonBox-title {\n line-height: 40px;\n font-weight: 700;\n}\n\n.textarea {\n width: 100%;\n height: calc(100% - 40px);\n padding: 5px 10px;\n border: 1px solid #ddd;\n border-radius: 5px;\n resize: none;\n color: #666;\n background-color: transparent;\n}\n\n.addBtn {\n margin-left: 20px !important;\n}\n\n.item {\n position: relative;\n border: 1px solid #ddd;\n margin: 10px 50px 0;\n padding: 20px;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.item:hover .deleteBtn {\n transform: translateX(-50px);\n}\n\n.deleteBtn {\n position: absolute;\n right: 20px;\n top: calc(50% - 25px);\n width: 50px;\n height: 50px;\n transform: translateX(80px);\n text-align: center;\n line-height: 70px;\n border-radius: 25px;\n background-color: #1976d2;\n transition: all 0.3s ease-in-out;\n}\n\n.deleteBtn:hover {\n cursor: pointer;\n box-shadow: 0 0 10px #aaa;\n}\n\n.deleteIcon {\n font-size: 28px !important;\n color: #fff;\n}\n\n.chat_template_box {\n display: flex;\n align-items: start;\n gap: 10px;\n}\n\n.chat_template_test {\n width: 30%;\n}\n\n.chat_template_test_mainBox {\n height: 137px;\n padding: 10px;\n border: 1px solid #ccc;\n border-radius: 4px;\n overflow: scroll;\n}\n\n.chat_template_test_tip {\n font-size: 10px;\n margin: 4px 14px 0;\n color: rgba(0, 0, 0, 0.6);\n}\n\n.test_res_box {\n border: 1px solid #ddd;\n min-height: 55px;\n padding: 10px;\n margin-top: 5px;\n border-radius: 4px;\n}\n\n.css-19qh8xo-MuiInputBase-input-MuiOutlinedInput-input.Mui-disabled {\n -webkit-text-fill-color: #000 !important;\n}\n"],"names":[],"sourceRoot":""}