MeUtils 2025.8.21.9.53.54__py3-none-any.whl → 2025.8.26.11.24.49__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.
- examples/_openaisdk/openai_chatfire.py +3 -1
- examples/_openaisdk/openai_ffire.py +8 -10
- examples/_openaisdk/openai_images.py +11 -52
- examples/ann/x.py +115 -0
- meutils/apis/chatglm/glm_video_api.py +3 -3
- meutils/apis/chatglm/zai.py +7 -5
- meutils/apis/gitee/openai_images.py +20 -8
- meutils/apis/images/generations.py +26 -3
- meutils/apis/oneapi/channel.py +16 -33
- meutils/apis/oneapi/common.py +17 -6
- meutils/{llm/mappers.py → apis/volcengine_apis/doubao_images.py} +7 -4
- meutils/apis/volcengine_apis/images.py +4 -3
- meutils/data/VERSION +1 -1
- meutils/llm/check_utils.py +5 -2
- meutils/llm/models/__init__.py +1 -3
- meutils/llm/models/ele.py +35 -0
- meutils/llm/models/modelscope.py +66 -0
- meutils/llm/models/ppio.py +33 -0
- meutils/llm/models/siliconflow.py +12 -1
- meutils/llm/openai_utils/adapters.py +19 -4
- meutils/llm/openai_utils/billing_utils.py +4 -1
- meutils/schemas/image_types.py +1 -1
- meutils/schemas/oneapi/common.py +41 -18
- meutils/str_utils/__init__.py +1 -5
- meutils/str_utils/regular_expression.py +74 -0
- {meutils-2025.8.21.9.53.54.dist-info → meutils-2025.8.26.11.24.49.dist-info}/METADATA +264 -264
- {meutils-2025.8.21.9.53.54.dist-info → meutils-2025.8.26.11.24.49.dist-info}/RECORD +32 -28
- /meutils/llm/{models_mapping.py → models/models_mapping.py} +0 -0
- {meutils-2025.8.21.9.53.54.dist-info → meutils-2025.8.26.11.24.49.dist-info}/WHEEL +0 -0
- {meutils-2025.8.21.9.53.54.dist-info → meutils-2025.8.26.11.24.49.dist-info}/entry_points.txt +0 -0
- {meutils-2025.8.21.9.53.54.dist-info → meutils-2025.8.26.11.24.49.dist-info}/licenses/LICENSE +0 -0
- {meutils-2025.8.21.9.53.54.dist-info → meutils-2025.8.26.11.24.49.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : modelscope
|
5
|
+
# @Time : 2025/8/22 22:47
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
|
13
|
+
models_mapping = {
|
14
|
+
"flux-kontext-dev": "MusePublic/FLUX.1-Kontext-Dev",
|
15
|
+
# "flux-kontext-dev": "black-forest-labs/FLUX.1-Kontext-dev",
|
16
|
+
|
17
|
+
"flux.1-krea-dev": "black-forest-labs/FLUX.1-Krea-dev",
|
18
|
+
|
19
|
+
"moonshotai/kimi-k2-instruct": "moonshotai/Kimi-K2-Instruct",
|
20
|
+
"kimi-k2-0711-preview": "moonshotai/Kimi-K2-Instruct",
|
21
|
+
"majicflus_v1": "MAILAND/majicflus_v1",
|
22
|
+
"deepseek-reasoner": "deepseek-ai/DeepSeek-R1-0528",
|
23
|
+
|
24
|
+
"deepseek-r1": "deepseek-ai/DeepSeek-R1-0528",
|
25
|
+
"deepseek-r1-0528": "deepseek-ai/DeepSeek-R1-0528",
|
26
|
+
"deepseek-r1-250528": "deepseek-ai/DeepSeek-R1-0528",
|
27
|
+
"deepseek-chat": "deepseek-ai/DeepSeek-V3",
|
28
|
+
"deepseek-v3": "deepseek-ai/DeepSeek-V3",
|
29
|
+
"deepseek-v3-0324": "deepseek-ai/DeepSeek-V3",
|
30
|
+
"deepseek-v3-250324": "deepseek-ai/DeepSeek-V3",
|
31
|
+
"deepseek-v3-1-250821": "deepseek-ai/DeepSeek-V3.1",
|
32
|
+
|
33
|
+
"deepseek-r1-distill-qwen-14b": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",
|
34
|
+
"deepseek-r1-distill-qwen-32b": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
|
35
|
+
"deepseek-r1-distill-llama-70b": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
|
36
|
+
"qwen2.5-coder-32b-instruct": "Qwen/Qwen2.5-Coder-32B-Instruct",
|
37
|
+
"qwen2.5-coder-14b-instruct": "Qwen/Qwen2.5-Coder-14B-Instruct",
|
38
|
+
"qwen2.5-coder-7b-instruct": "Qwen/Qwen2.5-Coder-7B-Instruct",
|
39
|
+
"qwen2.5-72b-instruct": "Qwen/Qwen2.5-72B-Instruct",
|
40
|
+
"qwen2.5-32b-instruct": "Qwen/Qwen2.5-32B-Instruct",
|
41
|
+
"qwen2.5-14b-instruct": "Qwen/Qwen2.5-14B-Instruct",
|
42
|
+
"qwen2.5-7b-instruct": "Qwen/Qwen2.5-7B-Instruct",
|
43
|
+
"qwq-32b-preview": "Qwen/QwQ-32B-Preview",
|
44
|
+
"qvq-72b-preview": "Qwen/QVQ-72B-Preview",
|
45
|
+
"qwen2-vl-7b-instruct": "Qwen/Qwen2-VL-7B-Instruct",
|
46
|
+
"qwen2.5-14b-instruct-1m": "Qwen/Qwen2.5-14B-Instruct-1M",
|
47
|
+
"qwen2.5-7b-instruct-1m": "Qwen/Qwen2.5-7B-Instruct-1M",
|
48
|
+
"qwen2.5-vl-3b-instruct": "Qwen/Qwen2.5-VL-3B-Instruct",
|
49
|
+
"qwen2.5-vl-7b-instruct": "Qwen/Qwen2.5-VL-7B-Instruct",
|
50
|
+
"qwen2.5-vl-72b-instruct": "Qwen/Qwen2.5-VL-72B-Instruct",
|
51
|
+
"qwq-32b": "Qwen/QwQ-32B",
|
52
|
+
"qwen2.5-vl-32b-instruct": "Qwen/Qwen2.5-VL-32B-Instruct",
|
53
|
+
"qwen3-0.6b": "Qwen/Qwen3-0.6B",
|
54
|
+
"qwen3-1.7b": "Qwen/Qwen3-1.7B",
|
55
|
+
"qwen3-4b": "Qwen/Qwen3-4B",
|
56
|
+
"qwen3-14b": "Qwen/Qwen3-14B",
|
57
|
+
"qwen3-30b-a3b": "Qwen/Qwen3-30B-A3B",
|
58
|
+
"qwen3-32b": "Qwen/Qwen3-32B",
|
59
|
+
"qwen3-235b-a22b": "Qwen/Qwen3-235B-A22B",
|
60
|
+
"qwen3-coder-480b-a35b-instruct": "Qwen/Qwen3-Coder-480B-A35B-Instruct",
|
61
|
+
"qwen3-235b-a22b-instruct-2507": "Qwen/Qwen3-235B-A22B-Instruct-2507"
|
62
|
+
|
63
|
+
}
|
64
|
+
|
65
|
+
if __name__ == '__main__':
|
66
|
+
print(','.join(models))
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : ppio
|
5
|
+
# @Time : 2025/8/22 11:05
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
|
13
|
+
models = {
|
14
|
+
|
15
|
+
"glm-4.5": "zai-org/glm-4.5",
|
16
|
+
|
17
|
+
"qwen3-235b-a22b-thinking-2507": "qwen/qwen3-235b-a22b-thinking-2507",
|
18
|
+
"qwen3-235b-a22b-instruct-2507": "qwen/qwen3-235b-a22b-instruct-2507",
|
19
|
+
"kimi-k2-0711-preview": "moonshotai/kimi-k2-instruct",
|
20
|
+
"deepseek-v3.1": "deepseek/deepseek-v3.1",
|
21
|
+
"deepseek-v3": "deepseek/deepseek-v3-turbo",
|
22
|
+
"deepseek-v3-0324": "deepseek/deepseek-v3-0324",
|
23
|
+
"deepseek-v3-250324": "deepseek/deepseek-v3-0324",
|
24
|
+
|
25
|
+
# "deepseek/deepseek-v3/community"
|
26
|
+
"deepseek-r1": "deepseek/deepseek-r1-turbo",
|
27
|
+
"deepseek-reasoner": "deepseek/deepseek-r1-turbo",
|
28
|
+
|
29
|
+
"deepseek-r1-250528": "deepseek/deepseek-r1-0528",
|
30
|
+
|
31
|
+
}
|
32
|
+
|
33
|
+
print(','.join(models))
|
@@ -19,6 +19,10 @@ models_mapping = {
|
|
19
19
|
"deepseek-v3-0324": "deepseek-ai/DeepSeek-V3",
|
20
20
|
"deepseek-v3-250324": "deepseek-ai/DeepSeek-V3",
|
21
21
|
"deepseek-chat": "deepseek-ai/DeepSeek-V3",
|
22
|
+
"deepseek-v3.1": "deepseek-ai/DeepSeek-V3.1",
|
23
|
+
"deepseek-v3-1-250821": "deepseek-ai/DeepSeek-V3.1",
|
24
|
+
|
25
|
+
|
22
26
|
"qwen3-32b": "Qwen/Qwen3-32B",
|
23
27
|
"deepseek-r1": "deepseek-ai/DeepSeek-R1",
|
24
28
|
"deepseek-r1-250528": "deepseek-ai/DeepSeek-R1",
|
@@ -38,7 +42,14 @@ models_mapping = {
|
|
38
42
|
"deepseek-r1-distill-qwen-7b": "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
|
39
43
|
"deepseek-r1:8b": "deepseek-ai/DeepSeek-R1-Distill-Llama-8B",
|
40
44
|
"deepseek-r1-distill-llama-8b": "deepseek-ai/DeepSeek-R1-Distill-Llama-8B",
|
41
|
-
"qwen2.5-32b-instruct": "Qwen/Qwen2.5-32B-Instruct"
|
45
|
+
"qwen2.5-32b-instruct": "Qwen/Qwen2.5-32B-Instruct",
|
46
|
+
|
47
|
+
"flux": "black-forest-labs/FLUX.1-schnell",
|
48
|
+
"flux-schnell": "black-forest-labs/FLUX.1-schnell",
|
49
|
+
"flux-pro-max": "black-forest-labs/FLUX.1-dev",
|
50
|
+
"flux-dev": "black-forest-labs/FLUX.1-dev",
|
51
|
+
"flux-pro": "black-forest-labs/FLUX.1-dev",
|
52
|
+
"flux.1.1-pro": "black-forest-labs/FLUX.1-dev",
|
42
53
|
}
|
43
54
|
|
44
55
|
|
@@ -16,6 +16,7 @@ from meutils.llm.openai_utils import create_chat_completion
|
|
16
16
|
from meutils.schemas.openai_types import CompletionRequest, ChatCompletion
|
17
17
|
from meutils.schemas.image_types import ImageRequest
|
18
18
|
from meutils.llm.openai_utils import chat_completion, chat_completion_chunk, create_chat_completion_chunk
|
19
|
+
from meutils.str_utils import parse_url, parse_command_string
|
19
20
|
|
20
21
|
|
21
22
|
async def stream_to_nostream(
|
@@ -25,11 +26,12 @@ async def stream_to_nostream(
|
|
25
26
|
|
26
27
|
|
27
28
|
async def chat_for_image(
|
28
|
-
generate: Callable,
|
29
|
+
generate: Optional[Callable],
|
29
30
|
request: CompletionRequest,
|
30
31
|
api_key: Optional[str] = None,
|
32
|
+
base_url: Optional[str] = None,
|
31
33
|
):
|
32
|
-
generate = partial(generate, api_key=api_key)
|
34
|
+
generate = generate and partial(generate, api_key=api_key, base_url=base_url)
|
33
35
|
|
34
36
|
if not request.stream or request.last_user_content.startswith( # 跳过nextchat
|
35
37
|
(
|
@@ -66,7 +68,20 @@ async def chat_for_image(
|
|
66
68
|
prompt=prompt,
|
67
69
|
image=image
|
68
70
|
)
|
71
|
+
if not request.image:
|
72
|
+
request.image, request.prompt = request.image_and_prompt
|
69
73
|
|
74
|
+
if '--' in request.prompt:
|
75
|
+
prompt_dict = parse_command_string(request.prompt)
|
76
|
+
|
77
|
+
data = {
|
78
|
+
**request.model_dump(exclude_none=True, exclude={"extra_fields", "aspect_ratio"}),
|
79
|
+
**prompt_dict
|
80
|
+
}
|
81
|
+
request = ImageRequest(**data)
|
82
|
+
logger.debug(request)
|
83
|
+
|
84
|
+
if not generate: return
|
70
85
|
future_task = asyncio.create_task(generate(request)) # 异步执行
|
71
86
|
|
72
87
|
async def gen():
|
@@ -125,8 +140,8 @@ if __name__ == '__main__':
|
|
125
140
|
request = CompletionRequest(
|
126
141
|
model="deepseek-r1-Distill-Qwen-1.5B",
|
127
142
|
messages=[
|
128
|
-
{"role": "user", "content": "``hi"}
|
143
|
+
{"role": "user", "content": "``hi --a 1"}
|
129
144
|
],
|
130
|
-
stream=
|
145
|
+
stream=True,
|
131
146
|
)
|
132
147
|
arun(chat_for_image(None, request))
|
@@ -263,7 +263,10 @@ if __name__ == '__main__':
|
|
263
263
|
model = "Wan-AI/Wan2.1-T2V-14B"
|
264
264
|
|
265
265
|
# arun(billing_for_async_task(model, task_id=task_id, n=3))
|
266
|
-
arun(billing_for_async_task(task_id='fal-ai-sync'))
|
266
|
+
# arun(billing_for_async_task(task_id='fal-ai-sync'))
|
267
|
+
arun(billing_for_async_task())
|
268
|
+
|
269
|
+
|
267
270
|
|
268
271
|
# data = {
|
269
272
|
# "model": "doubao-seedance-1-0-pro-250528",
|
meutils/schemas/image_types.py
CHANGED
meutils/schemas/oneapi/common.py
CHANGED
@@ -25,6 +25,9 @@ MINIMAX_VIDEO = 2 * 0.6
|
|
25
25
|
FAL = 3
|
26
26
|
FAL_ = 5
|
27
27
|
FAL_MODELS = {
|
28
|
+
#
|
29
|
+
"fal-ai/clarity-upscaler": 1, # Your request will cost $0.03 per upscaled megapixel.
|
30
|
+
|
28
31
|
'fal-kling-video-lipsync-audio-to-video': 0.5,
|
29
32
|
|
30
33
|
'fal-pixverse-v4.5-effects': 1,
|
@@ -108,6 +111,7 @@ MODEL_PRICE = {
|
|
108
111
|
**FAL_MODELS,
|
109
112
|
|
110
113
|
"qwen-image": 0.05,
|
114
|
+
"qwen-image-edit": 0.05,
|
111
115
|
|
112
116
|
"wan-ai-wan2.1-t2v-14b": 1,
|
113
117
|
"wan-ai-wan2.1-t2v-14b-turbo": 1,
|
@@ -222,10 +226,6 @@ MODEL_PRICE = {
|
|
222
226
|
"qwen3-reranker-4b": 0.0011,
|
223
227
|
"qwen3-reranker-8b": 0.0011,
|
224
228
|
|
225
|
-
"qwen3-embedding-0.6b": 0.0011,
|
226
|
-
"qwen3-embedding-4b": 0.0011,
|
227
|
-
"qwen3-embedding-8b": 0.0011,
|
228
|
-
|
229
229
|
# 视频
|
230
230
|
"api-videos-3d": 0.01,
|
231
231
|
"api-videos-3d-1.5": 0.01,
|
@@ -249,13 +249,7 @@ MODEL_PRICE = {
|
|
249
249
|
|
250
250
|
# 官方apit todo 免费模型
|
251
251
|
"cogvideox-flash": 0.05,
|
252
|
-
"cogvideox": 0.1,
|
253
|
-
"cogvideox-2": 0.2,
|
254
252
|
"cogvideox-3": 0.3,
|
255
|
-
"cogvideox-3-flash": 0.1,
|
256
|
-
|
257
|
-
"official-api-cogvideox": 0.1,
|
258
|
-
"official-api-kling-video": 0.5,
|
259
253
|
|
260
254
|
"api-videos-seedream-3.0": 0.5,
|
261
255
|
|
@@ -544,8 +538,18 @@ MODEL_RATIO = {
|
|
544
538
|
"elevenlabs/scribe_v1": 3 * 0.03 * 1000 / 60 / 2, # Your request will cost $0.03 per minute of audio transcribed
|
545
539
|
"elevenlabs/eleven_multilingual_v2": 3 * 0.1 * 1000 / 2,
|
546
540
|
"elevenlabs/eleven_turbo_v2_5": 3 * 0.05 * 1000 / 2, # Your request will cost $0.05 per thousand characters.
|
541
|
+
"elevenlabs/eleven_v3": 3 * 0.05 * 1000 / 2, # Your request will cost $0.05 per thousand characters.
|
542
|
+
|
543
|
+
'elevenlabs/eleven_flash_v2_5': 3 * 0.05 * 1000 / 2,
|
544
|
+
'elevenlabs/eleven_turbo_v2': 3 * 0.05 * 1000 / 2,
|
545
|
+
'elevenlabs/eleven_flash_v2': 3 * 0.05 * 1000 / 2,
|
546
|
+
'elevenlabs/eleven_monolingual_v1': 3 * 0.05 * 1000 / 2,
|
547
|
+
'elevenlabs/eleven_english_sts_v2': 3 * 0.05 * 1000 / 2,
|
548
|
+
'elevenlabs/eleven_multilingual_sts_v2': 3 * 0.05 * 1000 / 2,
|
549
|
+
'elevenlabs/eleven_multilingual_v1': 3 * 0.05 * 1000 / 2,
|
547
550
|
|
548
551
|
"fal-elevenlabs-speech-to-text": 3 * 0.03 * 1000 / 60 / 2,
|
552
|
+
"fal-elevenlabs-tts-eleven-v3": 3 * 0.03 * 1000 / 60 / 2,
|
549
553
|
'fal-elevenlabs-tts-turbo-v2.5': 3 * 0.05 * 1000 / 2,
|
550
554
|
'fal-elevenlabs-tts-multilingual-v2': 3 * 0.1 * 1000 / 2,
|
551
555
|
|
@@ -593,6 +597,14 @@ MODEL_RATIO = {
|
|
593
597
|
"jina-embeddings-v4": 0.1,
|
594
598
|
"jina-reranker-m0": 0.1,
|
595
599
|
|
600
|
+
"qwen3-embedding-0.6b": 0.1,
|
601
|
+
"qwen3-embedding-4b": 0.1,
|
602
|
+
"qwen3-embedding-8b": 0.1,
|
603
|
+
|
604
|
+
"doubao-embedding-vision-250615": 0.9,
|
605
|
+
"doubao-embedding-large-text-250515": 0.25,
|
606
|
+
"doubao-embedding-text-240715": 0.35,
|
607
|
+
|
596
608
|
# 百川
|
597
609
|
'baichuan4-turbo': 7.5,
|
598
610
|
'baichuan4-air': 0.49,
|
@@ -668,10 +680,10 @@ MODEL_RATIO = {
|
|
668
680
|
"glm-4.1v-thinking-flashx": 1,
|
669
681
|
|
670
682
|
"glm-4.5-flash": 0.1,
|
671
|
-
"glm-4.5-air": 0.
|
683
|
+
"glm-4.5-air": 0.4,
|
672
684
|
"glm-4.5-airx": 1,
|
673
|
-
"glm-4.5":
|
674
|
-
"glm-4.5-x":
|
685
|
+
"glm-4.5": 2,
|
686
|
+
"glm-4.5-x": 6,
|
675
687
|
"glm-4.5v": 1,
|
676
688
|
|
677
689
|
# 阿里千问 https://dashscope.console.aliyun.com/billing
|
@@ -712,8 +724,8 @@ MODEL_RATIO = {
|
|
712
724
|
"qwen3-235b-a22b": 1,
|
713
725
|
"qwen-math-plus": 2,
|
714
726
|
"qwen3-coder-480b-a35b-instruct": 3,
|
715
|
-
"qwen3-235b-a22b-instruct-2507":
|
716
|
-
"qwen3-235b-a22b-thinking-2507":
|
727
|
+
"qwen3-235b-a22b-instruct-2507": 2,
|
728
|
+
"qwen3-235b-a22b-thinking-2507": 2,
|
717
729
|
|
718
730
|
"qwen3-coder-plus": 2,
|
719
731
|
"qwen3-coder-plus-2025-07-22": 2,
|
@@ -802,6 +814,9 @@ MODEL_RATIO = {
|
|
802
814
|
"deepseek-v3-8k": 0.5,
|
803
815
|
"deepseek-v3-128k": 5,
|
804
816
|
"deepseek-chat": 1,
|
817
|
+
"deepseek-v3.1": 2,
|
818
|
+
"deepseek-v3-1-250821": 2,
|
819
|
+
"deepseek-v3-1-think": 2,
|
805
820
|
|
806
821
|
"deepseek-chat-8k": 0.5,
|
807
822
|
"deepseek-chat-64k": 5,
|
@@ -858,6 +873,7 @@ MODEL_RATIO = {
|
|
858
873
|
"doubao-seed-1-6-250615": 0.4,
|
859
874
|
"doubao-seed-1-6-thinking-250615": 0.4,
|
860
875
|
"doubao-seed-1-6-thinking-250715": 0.4,
|
876
|
+
"doubao-seed-1-6-vision-250815": 0.6,
|
861
877
|
|
862
878
|
"doubao-1-5-ui-tars-250428": 1.75,
|
863
879
|
"ui-tars-72b": 1.75,
|
@@ -878,6 +894,8 @@ MODEL_RATIO = {
|
|
878
894
|
"doubao-pro-4k": 0.4,
|
879
895
|
"doubao-pro-32k": 0.4,
|
880
896
|
"doubao-pro-32k-character": 0.4,
|
897
|
+
"doubao-pro-32k-character-241215": 0.4,
|
898
|
+
|
881
899
|
"doubao-pro-128k": 2.5,
|
882
900
|
"doubao-pro-256k": 2.5,
|
883
901
|
"doubao-1.5-pro-32k": 0.4,
|
@@ -1462,7 +1480,7 @@ COMPLETION_RATIO = {
|
|
1462
1480
|
"qwen3-235b-a22b": 4,
|
1463
1481
|
"qwenlong-l1-32b": 4,
|
1464
1482
|
"qwen3-235b-a22b-instruct-2507": 4,
|
1465
|
-
"qwen3-235b-a22b-thinking-2507":
|
1483
|
+
"qwen3-235b-a22b-thinking-2507": 10,
|
1466
1484
|
"qwen3-coder-480b-a35b-instruct": 4,
|
1467
1485
|
|
1468
1486
|
"qwen3-coder-plus": 4,
|
@@ -1477,6 +1495,7 @@ COMPLETION_RATIO = {
|
|
1477
1495
|
"doubao-seed-1-6-250615": 10,
|
1478
1496
|
"doubao-seed-1-6-thinking-250615": 10,
|
1479
1497
|
"doubao-seed-1-6-thinking-250715": 10,
|
1498
|
+
"doubao-seed-1-6-vision-250815": 13.33,
|
1480
1499
|
|
1481
1500
|
"doubao-1-5-ui-tars-250428": 3.43,
|
1482
1501
|
"ui-tars-72b": 4,
|
@@ -1491,6 +1510,7 @@ COMPLETION_RATIO = {
|
|
1491
1510
|
"doubao-pro-4k": 3,
|
1492
1511
|
"doubao-pro-32k": 2.5,
|
1493
1512
|
"doubao-pro-32k-character": 3,
|
1513
|
+
"doubao-pro-32k-character-241215": 3,
|
1494
1514
|
"doubao-pro-128k": 3,
|
1495
1515
|
"doubao-pro-256k": 1.8,
|
1496
1516
|
"doubao-1.5-pro-32k": 2.5,
|
@@ -1548,6 +1568,9 @@ COMPLETION_RATIO = {
|
|
1548
1568
|
"deepseek-v3-250324": 4,
|
1549
1569
|
"deepseek-chat": 4,
|
1550
1570
|
"deepseek-v3-fast": 4,
|
1571
|
+
"deepseek-v3.1": 3,
|
1572
|
+
"deepseek-v3-1-250821": 3,
|
1573
|
+
"deepseek-v3-1-think": 3,
|
1551
1574
|
|
1552
1575
|
'deepseek-r1': 4,
|
1553
1576
|
"deepseek-r1-160k": 5,
|
@@ -1588,8 +1611,8 @@ COMPLETION_RATIO = {
|
|
1588
1611
|
"glm-4.1v-thinking-flashx": 4,
|
1589
1612
|
|
1590
1613
|
"glm-4.5-flash": 3,
|
1591
|
-
"glm-4.5-air":
|
1592
|
-
"glm-4.5-airx":
|
1614
|
+
"glm-4.5-air": 7.5,
|
1615
|
+
"glm-4.5-airx": 4,
|
1593
1616
|
"glm-4.5": 4,
|
1594
1617
|
"glm-4.5-x": 4,
|
1595
1618
|
"glm-4.5v": 3,
|
meutils/str_utils/__init__.py
CHANGED
@@ -7,14 +7,10 @@
|
|
7
7
|
# @WeChat : meutils
|
8
8
|
# @Software : PyCharm
|
9
9
|
# @Description :
|
10
|
-
import re
|
11
10
|
|
12
|
-
import httpx
|
13
11
|
|
14
12
|
from meutils.pipe import *
|
15
|
-
|
16
|
-
from meutils.str_utils.regular_expression import parse_url
|
17
|
-
from meutils.caches import cache
|
13
|
+
from meutils.str_utils.regular_expression import parse_url, parse_command_string
|
18
14
|
from meutils.request_utils.crawler import Crawler
|
19
15
|
from urllib.parse import urlencode, parse_qs, parse_qsl, quote_plus, unquote_plus, urljoin
|
20
16
|
|
@@ -114,6 +114,80 @@ def parse_url(text: str, for_image=False, fn: Optional[Callable] = None):
|
|
114
114
|
def parse_url_from_json():
|
115
115
|
pass
|
116
116
|
|
117
|
+
def parse_command_string(command_str: str) -> dict:
|
118
|
+
"""
|
119
|
+
解析一个类似 "prompt --key1 value1 --key2 value2" 格式的字符串。
|
120
|
+
|
121
|
+
Args:
|
122
|
+
command_str: 输入的命令行字符串。
|
123
|
+
|
124
|
+
Returns:
|
125
|
+
一个包含 prompt 和解析后参数的字典。
|
126
|
+
例如: {"prompt": "画条狗", "size": "1:1", "n": 10}
|
127
|
+
"""
|
128
|
+
# 初始化结果字典
|
129
|
+
result = {}
|
130
|
+
|
131
|
+
# 使用正则表达式找到第一个参数 '--' 的位置
|
132
|
+
# 这比简单的 split 更健壮,可以处理 prompt 中包含 '--' 的情况(虽然不常见)
|
133
|
+
match = re.search(r'\s--\w', command_str)
|
134
|
+
|
135
|
+
if not match:
|
136
|
+
# 如果没有找到任何参数,整个字符串都是 prompt
|
137
|
+
result['prompt'] = command_str.strip()
|
138
|
+
return result
|
139
|
+
|
140
|
+
first_arg_index = match.start()
|
141
|
+
|
142
|
+
# 提取 prompt 和参数部分
|
143
|
+
prompt = command_str[:first_arg_index].strip()
|
144
|
+
args_str = command_str[first_arg_index:].strip()
|
145
|
+
|
146
|
+
result['prompt'] = prompt
|
147
|
+
|
148
|
+
# 将参数字符串按空格分割成列表
|
149
|
+
# 例如 "--size 1:1 --n 10" -> ['--size', '1:1', '--n', '10']
|
150
|
+
args_list = args_str.split()
|
151
|
+
|
152
|
+
# 遍历参数列表,每次处理一个键值对
|
153
|
+
i = 0
|
154
|
+
while i < len(args_list):
|
155
|
+
arg = args_list[i]
|
156
|
+
|
157
|
+
# 确认当前项是一个参数键(以 '--' 开头)
|
158
|
+
if arg.startswith('--'):
|
159
|
+
key = arg[2:] # 去掉 '--' 前缀
|
160
|
+
|
161
|
+
# 检查后面是否跟着一个值
|
162
|
+
if i + 1 < len(args_list) and not args_list[i + 1].startswith('--'):
|
163
|
+
value = args_list[i + 1]
|
164
|
+
|
165
|
+
# 尝试将值转换为整数,如果失败则保留为字符串
|
166
|
+
try:
|
167
|
+
processed_value = int(value)
|
168
|
+
except ValueError:
|
169
|
+
processed_value = value
|
170
|
+
|
171
|
+
# 布尔型
|
172
|
+
if processed_value in ['true', 'yes', 'on']:
|
173
|
+
processed_value = True
|
174
|
+
elif processed_value in ['false', 'no', 'off']:
|
175
|
+
processed_value = False
|
176
|
+
|
177
|
+
result[key] = processed_value
|
178
|
+
|
179
|
+
i += 2 # 跳过键和值,移动到下一个参数
|
180
|
+
else:
|
181
|
+
# 处理没有值的参数,例如 --test,可以设为 True 或忽略
|
182
|
+
result[key] = True # 或者可以写 pass 直接忽略
|
183
|
+
i += 1
|
184
|
+
else:
|
185
|
+
# 如果某一项不是以 '--' 开头,它可能是格式错误,直接跳过
|
186
|
+
i += 1
|
187
|
+
|
188
|
+
return result
|
189
|
+
|
190
|
+
|
117
191
|
|
118
192
|
if __name__ == '__main__':
|
119
193
|
# from urllib.parse import urlparse
|