MeUtils 2025.2.18.19.56.22__py3-none-any.whl → 2025.2.25.18.30.35__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.
- {MeUtils-2025.2.18.19.56.22.dist-info → MeUtils-2025.2.25.18.30.35.dist-info}/METADATA +263 -263
- {MeUtils-2025.2.18.19.56.22.dist-info → MeUtils-2025.2.25.18.30.35.dist-info}/RECORD +49 -40
- examples/_openaisdk/4v.py +3 -2
- examples/_openaisdk/openai_chatfire.py +12 -3
- examples/_openaisdk/openai_files.py +11 -7
- examples/_openaisdk/openai_images.py +18 -13
- examples/_openaisdk/openai_jina.py +58 -0
- meutils/apis/fal/images.py +83 -19
- meutils/apis/fal/pd.py +13 -0
- meutils/apis/fal/videos.py +31 -12
- meutils/apis/images/recraft.py +9 -6
- meutils/apis/jimeng/common.py +5 -1
- meutils/apis/jimeng/images.py +19 -8
- meutils/apis/kling/api.py +1 -1
- meutils/apis/niutrans.py +2 -0
- meutils/apis/oneapi/token.py +0 -2
- meutils/apis/search/zhipu.py +80 -0
- meutils/apis/siliconflow/images.py +4 -1
- meutils/apis/sunoai/suno_api.py +42 -0
- meutils/apis/to_image/md.py +24 -2
- meutils/apis/translator/deeplx.py +2 -1
- meutils/apis/vidu/vidu_video.py +2 -1
- meutils/caches/acache.py +51 -7
- meutils/data/VERSION +1 -1
- meutils/data/oneapi/FOOTER.md +2 -2
- meutils/data/oneapi/NOTICE.md +1 -151
- meutils/data/oneapi/_NOTICE.md +140 -0
- meutils/decorators/contextmanagers.py +47 -4
- meutils/files/__init__.py +11 -0
- meutils/files/qwen_files.py +30 -0
- meutils/io/files_utils.py +2 -2
- meutils/llm/check_utils.py +2 -1
- meutils/llm/clients.py +5 -2
- meutils/llm/completions/qwenllm.py +45 -5
- meutils/llm/prompts/search_prompts.py +18 -0
- meutils/schemas/image_types.py +4 -1
- meutils/schemas/oneapi/common.py +35 -7
- meutils/schemas/openai_types.py +4 -3
- meutils/schemas/suno_types.py +1 -1
- meutils/schemas/task_types.py +1 -0
- meutils/schemas/vidu_types.py +18 -4
- meutils/serving/fastapi/dependencies/auth.py +8 -2
- meutils/serving/fastapi/dependencies/headers.py +31 -0
- meutils/str_utils/json_utils.py +1 -0
- meutils/str_utils/regular_expression.py +7 -2
- {MeUtils-2025.2.18.19.56.22.dist-info → MeUtils-2025.2.25.18.30.35.dist-info}/LICENSE +0 -0
- {MeUtils-2025.2.18.19.56.22.dist-info → MeUtils-2025.2.25.18.30.35.dist-info}/WHEEL +0 -0
- {MeUtils-2025.2.18.19.56.22.dist-info → MeUtils-2025.2.25.18.30.35.dist-info}/entry_points.txt +0 -0
- {MeUtils-2025.2.18.19.56.22.dist-info → MeUtils-2025.2.25.18.30.35.dist-info}/top_level.txt +0 -0
meutils/apis/fal/images.py
CHANGED
@@ -9,49 +9,113 @@
|
|
9
9
|
# @Description : https://fal.ai/models/fal-ai/flux-pro/v1.1-ultra/api
|
10
10
|
|
11
11
|
from meutils.pipe import *
|
12
|
+
from meutils.str_utils.regular_expression import parse_url
|
13
|
+
|
12
14
|
from meutils.schemas.image_types import ImageRequest, FluxImageRequest, SDImageRequest, ImagesResponse
|
13
15
|
from meutils.schemas.fal_types import FEISHU_URL
|
14
16
|
from meutils.config_utils.lark_utils import get_next_token_for_polling
|
15
17
|
|
16
18
|
from fal_client import AsyncClient, SyncClient
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
"flux-image-to-image": "fal-ai/flux/dev/image-to-image",
|
20
|
+
recraft_styles = "any, realistic_image, digital_illustration, vector_illustration, realistic_image/b_and_w, realistic_image/hard_flash, realistic_image/hdr, realistic_image/natural_light, realistic_image/studio_portrait, realistic_image/enterprise, realistic_image/motion_blur, realistic_image/evening_light, realistic_image/faded_nostalgia, realistic_image/forest_life, realistic_image/mystic_naturalism, realistic_image/natural_tones, realistic_image/organic_calm, realistic_image/real_life_glow, realistic_image/retro_realism, realistic_image/retro_snapshot, realistic_image/urban_drama, realistic_image/village_realism, realistic_image/warm_folk, digital_illustration/pixel_art, digital_illustration/hand_drawn, digital_illustration/grain, digital_illustration/infantile_sketch, digital_illustration/2d_art_poster, digital_illustration/handmade_3d, digital_illustration/hand_drawn_outline, digital_illustration/engraving_color, digital_illustration/2d_art_poster_2, digital_illustration/antiquarian, digital_illustration/bold_fantasy, digital_illustration/child_book, digital_illustration/child_books, digital_illustration/cover, digital_illustration/crosshatch, digital_illustration/digital_engraving, digital_illustration/expressionism, digital_illustration/freehand_details, digital_illustration/grain_20, digital_illustration/graphic_intensity, digital_illustration/hard_comics, digital_illustration/long_shadow, digital_illustration/modern_folk, digital_illustration/multicolor, digital_illustration/neon_calm, digital_illustration/noir, digital_illustration/nostalgic_pastel, digital_illustration/outline_details, digital_illustration/pastel_gradient, digital_illustration/pastel_sketch, digital_illustration/pop_art, digital_illustration/pop_renaissance, digital_illustration/street_art, digital_illustration/tablet_sketch, digital_illustration/urban_glow, digital_illustration/urban_sketching, digital_illustration/vanilla_dreams, digital_illustration/young_adult_book, digital_illustration/young_adult_book_2, vector_illustration/bold_stroke, vector_illustration/chemistry, vector_illustration/colored_stencil, vector_illustration/contour_pop_art, vector_illustration/cosmics, vector_illustration/cutout, vector_illustration/depressive, vector_illustration/editorial, vector_illustration/emotional_flat, vector_illustration/infographical, vector_illustration/marker_outline, vector_illustration/mosaic, vector_illustration/naivector, vector_illustration/roundish_flat, vector_illustration/segmented_colors, vector_illustration/sharp_contrast, vector_illustration/thin, vector_illustration/vector_photo, vector_illustration/vivid_shapes, vector_illustration/engraving, vector_illustration/line_art, vector_illustration/line_circuit, vector_illustration/linocut"
|
21
|
+
|
22
|
+
ideogram_styles = "auto, general, realistic, design, render_3D, anime"
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
}
|
26
|
-
mapper = "fal-ai/".removeprefix("fal-ai/")
|
24
|
+
# https://fal.ai/models/fal-ai/any-llm/playground
|
25
|
+
llms = "anthropic/claude-3.5-sonnet, anthropic/claude-3-5-haiku, anthropic/claude-3-haiku, google/gemini-pro-1.5, google/gemini-flash-1.5, google/gemini-flash-1.5-8b, meta-llama/llama-3.2-1b-instruct, meta-llama/llama-3.2-3b-instruct, meta-llama/llama-3.1-8b-instruct, meta-llama/llama-3.1-70b-instruct, openai/gpt-4o-mini, openai/gpt-4o, deepseek/deepseek-r1"
|
27
26
|
|
28
27
|
|
29
28
|
async def generate(request: ImageRequest, token: Optional[str] = None):
|
30
29
|
"""https://fal.ai/models/fal-ai/flux-pro/v1.1-ultra/api#api-call-submit-request
|
31
30
|
"""
|
32
|
-
token = token or await get_next_token_for_polling(feishu_url=FEISHU_URL)
|
33
|
-
request.model = MODELS.get(request.model, DEFAULT_MODEL)
|
34
31
|
logger.debug(request)
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
s = time.time()
|
34
|
+
token = token or await get_next_token_for_polling(feishu_url=FEISHU_URL)
|
35
|
+
|
36
|
+
arguments = request.model_dump(exclude_none=True)
|
37
|
+
width, height = request.size.split("x")
|
38
|
+
if request.model.startswith("fal-ai/recraft"): # https://fal.ai/models/fal-ai/recraft-v3/api#queue-submit
|
39
|
+
arguments = {
|
40
|
+
**arguments,
|
41
|
+
"image_size": {
|
42
|
+
"width": width,
|
43
|
+
"height": height
|
44
|
+
},
|
45
|
+
"style": request.style if str(request.style) in recraft_styles else "realistic_image",
|
46
|
+
|
47
|
+
"output_format": "png",
|
48
|
+
}
|
49
|
+
elif request.model.startswith(
|
50
|
+
"fal-ai/flux/dev/image-to-image"): # https://fal.ai/models/fal-ai/flux-pro/v1.1-ultra/api
|
51
|
+
urls = parse_url(request.prompt)
|
52
|
+
image_url = urls[-1]
|
53
|
+
prompt = request.prompt.replace(image_url, "")
|
54
|
+
|
55
|
+
arguments = {
|
56
|
+
**arguments,
|
57
|
+
"image_size": {
|
58
|
+
"width": width,
|
59
|
+
"height": height
|
60
|
+
},
|
41
61
|
"num_images": request.n,
|
42
62
|
|
43
|
-
"
|
63
|
+
"enable_safety_checker": False,
|
64
|
+
"safety_tolerance": "6",
|
65
|
+
"output_format": "png",
|
66
|
+
"seed": request.seed,
|
67
|
+
|
68
|
+
# image2image
|
69
|
+
"image_url": image_url,
|
70
|
+
"prompt": prompt,
|
71
|
+
"guidance_scale": request.guidance or 3.5,
|
72
|
+
|
73
|
+
**request.controls
|
74
|
+
}
|
75
|
+
elif request.model.startswith("fal-ai/flux"): # https://fal.ai/models/fal-ai/flux-pro/v1.1-ultra/api
|
76
|
+
|
77
|
+
arguments = {
|
78
|
+
**arguments,
|
79
|
+
"num_images": request.n,
|
44
80
|
|
45
81
|
"enable_safety_checker": False,
|
46
82
|
"safety_tolerance": "6",
|
47
83
|
"output_format": "png",
|
84
|
+
"seed": request.seed,
|
85
|
+
|
86
|
+
"aspect_ratio": request.aspect_ratio or "1:1" # 21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21
|
87
|
+
|
48
88
|
}
|
89
|
+
|
90
|
+
elif request.model.startswith("fal-ai/ideogram"):
|
91
|
+
arguments = {
|
92
|
+
**arguments,
|
93
|
+
"style": request.style if str(request.style) in ideogram_styles else "auto",
|
94
|
+
|
95
|
+
# 10:16, 16:10, 9:16, 16:9, 4:3, 3:4, 1:1, 1:3, 3:1, 3:2, 2:3
|
96
|
+
"aspect_ratio": request.aspect_ratio or "1:1",
|
97
|
+
|
98
|
+
"seed": request.seed,
|
99
|
+
|
100
|
+
}
|
101
|
+
|
102
|
+
data = await AsyncClient(key=token).run(
|
103
|
+
application=request.model,
|
104
|
+
arguments=arguments,
|
49
105
|
)
|
50
106
|
|
51
|
-
return ImagesResponse(data=data.get("images",
|
107
|
+
return ImagesResponse(data=data.get("images"), timings={"inference": time.time() - s})
|
52
108
|
|
53
109
|
|
54
110
|
if __name__ == '__main__':
|
55
|
-
|
56
|
-
|
111
|
+
model = "fal-ai/flux-pro/v1.1" # 0.04
|
112
|
+
# model = "fal-ai/flux-pro/v1.1-ultra"# 0.06
|
113
|
+
# model = "fal-ai/flux/dev/image-to-image" # 0.03 图生图
|
114
|
+
# model = "fal-ai/recraft-v3" # 0.04 变清晰
|
115
|
+
# model = "fal-ai/ideogram/v2" # 0.08
|
116
|
+
model = "fal-ai/ideogram/v2/turbo" # 0.05
|
117
|
+
|
118
|
+
# request = ImageRequest(prompt='https://oss.ffire.cc/files/kling_watermark.png The woman smiled', model=model)
|
119
|
+
request = ImageRequest(prompt='a cat', model=model)
|
120
|
+
|
57
121
|
arun(generate(request))
|
meutils/apis/fal/pd.py
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : pd
|
5
|
+
# @Time : 2025/2/19 13:23
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
|
13
|
+
df = pd.read_csv('x.txt', sep='--', header=None)
|
meutils/apis/fal/videos.py
CHANGED
@@ -50,34 +50,53 @@ async def get_task(task_id: str, token: Optional[str] = None):
|
|
50
50
|
application = f"fal-ai/{model}"
|
51
51
|
|
52
52
|
client = AsyncClient(key=token)
|
53
|
-
response = await client.status(application, request_id, with_logs=
|
54
|
-
logger.debug(response)
|
53
|
+
response = await client.status(application, request_id, with_logs=True)
|
55
54
|
|
56
|
-
#
|
57
|
-
# client.AsyncRequestHandle(request_id='0b7ab6b8-c7dc-4f17-a655-4ee56dd0f864')
|
58
|
-
return response
|
55
|
+
logger.debug(response.__class__.__name__) # Queued, InProgress, COMPLETED
|
59
56
|
|
57
|
+
if metrics := response.__dict__.get("metrics"): # {'inference_time': 17.29231595993042}
|
58
|
+
response = await client.result(application, request_id)
|
60
59
|
|
60
|
+
return response
|
61
61
|
|
62
62
|
|
63
63
|
if __name__ == '__main__':
|
64
64
|
model = "latentsync"
|
65
|
-
model = "sync-lipsync"
|
65
|
+
# model = "sync-lipsync"
|
66
66
|
audio_url = "https://oss.ffire.cc/files/lipsync.mp3"
|
67
67
|
video_url = "https://oss.ffire.cc/files/lipsync.mp4"
|
68
|
+
|
69
|
+
audio_url = "https://oss-shanghai.sanwubeixin.cn/cache/file/20250218/173988875057269.mp3"
|
70
|
+
video_url = "https://oss.sanwubeixin.cn/material/test/output2.mp4"
|
68
71
|
request = FalVideoRequest(
|
69
72
|
model=model,
|
70
73
|
audio_url=audio_url,
|
71
74
|
video_url=video_url
|
72
75
|
)
|
73
76
|
|
74
|
-
|
75
|
-
|
77
|
+
#
|
78
|
+
# r = arun(create_task(request))
|
79
|
+
# logger.debug(f"{r.task_id, r.system_fingerprint}")
|
80
|
+
#
|
81
|
+
# task_id = r.task_id
|
82
|
+
# arun(get_task(task_id, r.system_fingerprint))
|
76
83
|
|
77
|
-
task_id =
|
78
|
-
|
84
|
+
# task_id = "latentsync::b2350e2b-5a48-4390-9089-120fb74f6b7b"
|
85
|
+
# token = "843e6ba3-cfb1-4305-be0d-39e923295949:72bce9f9cd5257011ab18f335e2661d4"
|
86
|
+
#
|
87
|
+
# r = arun(get_task(task_id, token))
|
79
88
|
|
80
|
-
# task_id=
|
81
|
-
#
|
89
|
+
# task_id, token = ('sync-lipsync::45b89e28-8b52-47cb-99de-9b68ce65b9b8',
|
90
|
+
# '843e6ba3-cfb1-4305-be0d-39e923295949:72bce9f9cd5257011ab18f335e2661d4')
|
91
|
+
#
|
92
|
+
# r = arun(get_task(task_id, token))
|
82
93
|
|
94
|
+
# task_id, token = ('latentsync::7246cb3b-55e8-490f-bcb1-f05d8c515350',
|
95
|
+
# '3f712efa-a692-4e7f-9409-e6c505bab4e2:151a0b6093312cc8f66fc52b7c4c92a8')
|
96
|
+
#
|
83
97
|
# r = arun(get_task(task_id, token))
|
98
|
+
|
99
|
+
task_id, token = ("latentsync::a90be257-3c21-43b2-a05c-6274543c3d02",
|
100
|
+
'843e6ba3-cfb1-4305-be0d-39e923295949:72bce9f9cd5257011ab18f335e2661d4')
|
101
|
+
|
102
|
+
r = arun(get_task(task_id, token))
|
meutils/apis/images/recraft.py
CHANGED
@@ -32,8 +32,7 @@ send_message = partial(
|
|
32
32
|
|
33
33
|
@cache(ttl=10 * 60)
|
34
34
|
@retrying()
|
35
|
-
async def get_access_token(token:
|
36
|
-
token = token or await get_next_token_for_polling(feishu_url=FEISHU_URL, check_token=check_token, from_redis=True)
|
35
|
+
async def get_access_token(token: str):
|
37
36
|
headers = {"cookie": token}
|
38
37
|
|
39
38
|
async with httpx.AsyncClient(base_url="https://www.recraft.ai", headers=headers, timeout=60) as client:
|
@@ -45,6 +44,8 @@ async def get_access_token(token: Optional[str] = None):
|
|
45
44
|
|
46
45
|
# @retrying()
|
47
46
|
async def generate(request: RecraftImageRequest, token: Optional[str] = None):
|
47
|
+
token = token or await get_next_token_for_polling(feishu_url=FEISHU_URL, check_token=check_token, from_redis=True)
|
48
|
+
|
48
49
|
token = await get_access_token(token)
|
49
50
|
headers = {"Authorization": f"Bearer {token}"}
|
50
51
|
# params = {"project_id": "26016b99-3ad0-413b-821b-5f884bd9454e"} # project_id 是否是必要的
|
@@ -109,7 +110,9 @@ async def check_token(token, threshold: float = 1):
|
|
109
110
|
response = await client.get("/users/me")
|
110
111
|
response.raise_for_status()
|
111
112
|
data = response.json()
|
113
|
+
logger.debug(data)
|
112
114
|
logger.debug(data["credits"])
|
115
|
+
|
113
116
|
return data["credits"] >= threshold
|
114
117
|
except Exception as e:
|
115
118
|
logger.error(e)
|
@@ -130,7 +133,7 @@ if __name__ == '__main__':
|
|
130
133
|
token = "__Host-next-auth.csrf-token=b6b37b10948a6156a1a39d09bd43ab6d0867fcd6001987531fe6f86f802bb0aa%7C3afdfd56119e801c5cb80dc96670031c85a2d9a02e8205f38fc5d6128e1a4075; _gcl_au=1.1.386131236.1736384852; _ga=GA1.1.282109674.1736384854; AMP_MKTG_7268c9db0f=JTdCJTdE; _fbp=fb.1.1736384856672.571916090953259055; _clck=2fa0yj%7C2%7Cfsf%7C0%7C1835; x-recraft-referral-code=1f1xoKVYB9; __Secure-next-auth.callback-url=https%3A%2F%2Fwww.recraft.ai%2Fprojects; _uetsid=1d264620ce2611efaf8a0f99cb3bbb99; _uetvid=1d2649e0ce2611efb597376fda548d79; AMP_7268c9db0f=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjJlMTcxNjRlMy0xMjU4LTQ3ZTYtYTJmYi1jN2JhM2FmNWRiZWUlMjIlMkMlMjJ1c2VySWQlMjIlM0ElMjJlYTNmNmY4NC0zNzNhLTQ0ODgtYTRjMi1mYjgxMzk1YzNiMzElMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzM2Mzg0ODU2MzQxJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTczNjM4NTAzMTczNyUyQyUyMmxhc3RFdmVudElkJTIyJTNBNjQlMkMlMjJwYWdlQ291bnRlciUyMiUzQTEzJTdE; _clsk=szrjt7%7C1736385032306%7C11%7C1%7Cq.clarity.ms%2Fcollect; _ga_ME15C3DGRL=GS1.1.1736384853.1.1.1736385032.0.0.0; __Secure-next-auth.session-token.0=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..SyUWD5O3-8Fu7f9K.jbfQGmUTAstB_wL4cyqA7QcbWKp4AFMnouf-WtJnwaPC4gIfu7iuNkXmrvbfp2YsqFJzSIl-5MvZrXt-bhk-DJtwqAdPzTw6sSa33I3IHWSS3TVlVFc9Ze-HT_6dIeMpIiN-rCSNGdpmtkEJLp_3WrCSGPB0NbJLLL_MGg6cQdS5WYz4trehD8sPSQUgYlTw_VaMImqVZOxKujLLgmGfgYdV8nl9p-JmFHMbpfcgn-yXqLca8E50sQOWldPw0p4RqsYyByUANX1POJAW33rm9fsRDHEKtVxOtlW5Hy1jev__V9UqSrhcvH_OQREngiQGYbtD0qLogeUg-vbL0VUAL-9USzXIn2Una3lP04lp3m_NKldiSShXsHJT8RW8IAl7K28ILGilA1fgx0V09JFIHhM4fX-hrPzqoh-BuxaaiF5czEHTtTPLXmnV1UiQgZVmfgliI2e_r9J3WtF-SgSc1Il2cvwxAsp66p5cjixFbpj7AULPXndQniHhTiU9zgDDdv-fEf0arKzW2w0--zwSmYizXMMpNblgxZ9k51CdOBCAM9YGtzDaB-NSA8I9RuHzmgXMvT5GMZSiezuoLdRRcVpuJBz-XF0v9QoQz7SQt6aMaCCTa-fxee--nfYZELu1Uhh90StcuT84VOAlx-wg6FxPEDI6cjlVtKuzcN_RMVYbWKO2z5xLw4zlqyGBleRjt7hNNt-IeCbGuaDxgbUViwhNr_qdh-_ZjQlz_FL4rzlJwPrl6puOsydFF8NIy0MU9oBdelGTtG8LwzNnOW_hGdqEfhXfDP9mzv4Fs4kqGNQxvT0PU2NQ5hIOTb540yHqTGb3kihXPaZL4YregR2-UPRxOM1qmWwgRZ93d9m0BUplhO9s9U2hYoLhp01ID8kiNi2AWp0hRcalh6PwgqSdzgbif3IH8AcHRJpnV2pRSbD7k883O6ukkItWPE-ysv-ak_Hl8FR046xjDaX1ITtyrJmTzFqQ627PGuOt01RmsVMOb1IFCcx4Fr4AYwOMDY0RDk1YxIUUqU4kyMZMVlMrI_ITcrYshdJwdr4k3hNk51gS3QUrhIDnUq93mvUSidSUy_jX47H-ORf9Al5poN3vNJPye9ogASdqRr2psn1UpceMzrejXz_xDSBllWGlSyAmHDlXniKfzGSbRtqET9xRZfy7X0iOGd0WW2Sb9BkI2OE6h2abFkeSmTXJTMaZXhQ244XkhvDVnps1QX4mdSIa1Js0Pb73DcWLV5TR1sTVxm5h9c1l5r-YxWQ9hjF3A43_V0Jp9ATDlcPIjewTqAcPuuNhcQRR6i7pt2CadiFpfT-h7DA1PvPRo7ReySBzDK9VhnlvodflQugnxj5gsRljH6r43s4OrgpJwCtENl-_yw4jDJCCXkJwHfLpSKhLR6CFSM52vrMa9fWg7iW1C4HIVVqyqIwC98-CTe5jYDMKrX_g40oDZL3XEhFCTfzl5o_UfqXJEWlDKZ0D_Aig7iNLDOEq3cwK9QDiP4-bX6jtM1zkltpCY-HPpwTXbtV4iIP6usg9lSJgCDgJjaS39rpBVYSrj-Y_PtPlPW5rJMVkSnp_f_J7uAwQWnluuEpxrb0Ap-vF4Vk4q9gBESbnk3PBg8wfFPC1GesPI4HyG8Jy3oIss8pDXba6D70soJiozgBcPTSxdeDIP1CXsRN2wiItYHeyslQE-_egn8oezT9__8LyVrY8guv14Nu-WGPx3R9xzpHn4TPY3nJQ6bU9H0PlB0qmJLsSh6tWtJ0Yl8-NMlEKr9WkcjOJB-QpFiDEyw3V7r65U5b_BOaNpzRA5OUJ_ZmCfufmyfnHm8R6mE5wqrwUfmxYBRfP_w8_ix58zwTzFsLe7Fii5_J411vqxFHefcljnpgFgf1UIOoAPBUfygBTVdpdJcWzA2QXNI9lKxUIC6pLme9rpNlXE2bCE1cn74qA974x1gBjZ5B_FVsmkYhFRwSboi8ypRFA1F6EWwSNO-LUQH8uVbrDisjjjAX19xq_Sibwq5P-dZMY6aLCuInQjfWic5NGsjjwh4xtBv3FTyt1nvt9SonxdsJi_wvcjEoCVyP7PfYy5Eo-MkOpznzGYc9slQscUhKPihaB7wlAJZxe99tBUHLJI6XoI1o2Z3G4KGRK6PTO_THOTVFBylKTMbg_jvHw63TL4-LNlhJ2efmSjnEZqpGkgIUb8wYSoG3OR-v3H7WPvvAtJAs-NfvQXSGaFZ3O-LnStvyT869zXwP9U6_NZjml7gB9iA0cZVw4o5tAFI5DPVstJAqSrjIW59cpTxxDo2zeBdl8aq5FoKIZ63w8QebUeibLT8_lejsWQtg8RX4WrSTbuZN-gtCsMY4Q-TY4gJtVygtjz44QMzYDXq0G5mlqnPanLvR9tOfZODm8z87e355KdmD7pI305NimlYjMAFECfAaQN4G3oDZiDb85KkO92JXlVwWbo1xfbx4FTikedjY-BI1ErQB5gxTgPo252aw5r9fItydPBE_nuZU211tc41k8IF2F_cbSZ9tUjZz14yb4Ux4RWUdtHs3y7Jh9_5Pj0dnS3dEgJ-7jlhz-v2tmrcgzcEKqDPQGdhKfLl__AMM_11LqMuvj0boYiiaDx8DHN95J_d48um0YvB5IU3sQucEXiRK2j8FpAXc9ptQqPTGdSzz4VhIE0EIzZIV3QqqaRqH6ZEXcNuV_DXwl6HOjui78yu-rpqz50E9fxePaV5LHPbzXp_ZEOLrWonqo9ZAIHzWhCbVM_vMxK7CnrfmhW4ow8l71maoD0ToyTW7J0KbegCnEVyVhAF-IqYc98gq0vEbfgH42JKk07-8v1gVNQ6TZpAbtgajdrRe9XCuR58f_dt7_y8xWLXw_tINMB-x5MLNbdomfSMsit9Vfl29Yr8yD4KIkYhsfhl-nH-7ntrx4KkkLdLoNhKbhdI7o7NO1zdJ22ur7op4YlAWSNq5q-q2uhF3bKTkYhAIJ2FnPZpYmv7NoldLkAML79C7xtbZTJ0ZgXCjxzbEI50-9qvhEMSNm5AjZLrE3tTp6GVJWfIvjb3HmTvEAxR3rRefzzTaKW-MO9t3OurUPood1vkMR7oQzQY_n6DaZKUcxA6L8sK8s2MfEb78h_ZKeKDRAFsnspHdVTYf4xEu_SbXyDYbx2vBU2beXYdhzcdLWff32f3jioAf_q8hk2wKAcj2Spik7Ng-HPbme3XPD0w1b6d266bJ8GIWCUoGmJ9Wm0UalL-ZnoX16yN9El_wfOEoXBFWRe56Ur1ih6ZwZkcuCMZcnUAlXaL3JGgrxtwQjUtuSPSAo7kBZGIS7xXzFL7aJOi9ctqBAJVH0C3g8TJcW7ilF-qzEwrOoo1zWfLQpxMXhg8XKLDzOPAFBwyEOlDaRdoj20aE6NTeWST-X3QEufdM0PE0uB3FAhYWTPyILrAulrIsMJphGU-9sABotQs9apb8Vvekzou3oQ02Nr8n_CHVdDfE7m9I1lOxnB8Yz78oJhBs0WAbcZL9Vy-c-RVBauUMgceqSyQJ3uHR3iWsze4yeVOb4LE4nUxsfBMHQhW-Via3wFpInCCJxS3je2wtiyDTztuMNN8Mxn_GuTJ1i-KkDdvWiAL9c4zg_6HQfsMpLXQXpJ4Ovk-wUAV_NaW9NnVXHR-ygTcsf-BUHEV6dm0EPEk3tNVdlOTMDzXeYmpXn7xSSPuHglNcLnCzbmiANoqs1N5knV9_gVx49MLkYzE2rK_xdAFZUgiR4uujQ16mWNHtzrUUZOWmPu0HrAt2cJsz0snCfakahNceO3di-MQCDppMUnoSlq2ZnRcsMYu_n7mjOP6suimdawk9Ik1y_RpJ1O92UjKl63SqTtknADbwywiDiLr62V59YEUxKhGIaNrg; __Secure-next-auth.session-token.1=q9Nx6cKkfa0ZpdMRs7aQg5BCEByRK-upafTx1BRw9yA7R30AXoMtQfz6ExKBqsbpyVHqJFnLBQuZqJEi_Bmk34FeYJrUjD1ddsPmEex0ftUACPSugpdrgsTxc8CN0f4a8t_m8wTHxhQWbE5_GT-A4Hb4T68U9pDkzA1kWMVHkQ6h1x7HyW_Ykh1KXejgZFJBhdvv4dAKpv0ckYCNXwJVgVwCKGCNikx-ubtZ-5XDX5ZquUNzVEGpx1cr-F4e0-aw8CDQmdZ0Zh7VHV5DKL7SkQW20FHjpiK-J6gdkkjGFX7EybuEM1KCZ-KI_9hna9JzZc52f_yyoN05hqTzWmfh4aFeQL3j1nErMn23uiava2BfKIoQ59dKWOO5zos66El2TtIFerhUFJDyt8sUOcybCWsmmf05oSeLzHeaJYBA8j7SP.FYyhM198a9ZP-Ep6hZRQNQ"
|
131
134
|
token = "__Host-next-auth.csrf-token=b6b37b10948a6156a1a39d09bd43ab6d0867fcd6001987531fe6f86f802bb0aa%7C3afdfd56119e801c5cb80dc96670031c85a2d9a02e8205f38fc5d6128e1a4075; _gcl_au=1.1.386131236.1736384852; _ga=GA1.1.282109674.1736384854; AMP_MKTG_7268c9db0f=JTdCJTdE; _fbp=fb.1.1736384856672.571916090953259055; _clck=2fa0yj%7C2%7Cfsf%7C0%7C1835; x-recraft-referral-code=1f1xoKVYB9; __Secure-next-auth.callback-url=https%3A%2F%2Fwww.recraft.ai%2Fprojects; _uetsid=1d264620ce2611efaf8a0f99cb3bbb99; _uetvid=1d2649e0ce2611efb597376fda548d79; __Secure-next-auth.session-token.0=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..WqFwC8QbnjwUkMxi.RYqiKFIQTVwJF5azhoAlOscRiivJrpL5fRaArVfPstl4mOB0YTUtp3l7TMKbGEsM8nV2DW68eRarLqQeVjq0eKzD4MNuvuKy0y0phQTMs7vKlKCM5UgWMxz3Uz30f7GmH6s4D0aFDGbJ6upcsUqZ0BMwY2KkXId5uilh0jrDhinv5ZCIQA0o89Nf_lOcapGVsEi4OdYhe8fDDuhaI8x8TnkTQcDjwijc44WWUQg5vXJusYAVRbXR0-hO_fLl7verrBVKWPKXsP_tbRSk2TIqTavXoP-RcHI55R-vQD0G3lbl0hkjiDhWZ8SG2g3_KkbnF9XovoilxZpguNUSqLLHevldctBrMDG9vnoG6FRVwmPF8T5IxVYnkCb5IiyIJLMAOWlVlcNmKM2n2N-_iW21-skyqq0O0sUpukL0gFLp5UlpKtXUbTOMaD60Ja0D7n2THWO3yWrlTmXJ641igNxsAfb8iMuN9XpVSLTGmSVoojIQkbb41Br5ZmAdlH3D9X2u7cZD756HkOG4LhWp6rjaoUwDY1XBMjSxs9lOOGQGnr7xfmVC7fSWDuRhHxwF0C9PUbndo3zv12A437VASNXzuJ7W-nvBP0i7PUw09bKgYTsUyytFwBiRFW_Lj3l5Fcu0qrXQBosvdZvgS3QNEMqOWPWiyQBI5NatP8ZSQuquzvNDRt4typ5T6YP6NEqqMwSLRL6mwA1_ZquU78kygEUFYq5fUtUoWoW8CdbHsZe8DvN0fIhW2iAguey5hj7Dwg3xstOM-aDyRMbY-ML__zTi0w-TB0XzJ9NSXe8a1b3vvjzNqNWmeUwF4eT2KAloIvKRrlWZRC3OedxI8aRvoVGcnWqpRsvZNgUY3blfxG9lR1KrNgAcDhcRB3Si3APLlUT5Uv0MzfZKwWtZ16lLNmY6bRnlQO_IGRVvGWp0tXiwMAR6vXEhq3FqEOMy9W1JW2MVS9s_mpOrloRr4CIxtDbrE90Pjhm1wPzC43OMGsm2gxU8JTaRtWftnZ6EUlO2rski0Ep2Kl_iTwotDVPZY3RV9B8GWTfmJ8mU2EPTjlKcpeyPGiLdZkI4r5HGT6Bt9sv3JXQeU64ecmhbDEr9zrDVRDJlt3nGsQlDq21xkOsQw6nyFjg0cw_i5sGqkyLEQgkfVHGaNuUy_aP7us-DHeLCgusM0qFjsGh6TqY536AxlecGZr5Xh7FOEgVcNHfmT8gTRGPJuqMU_c8kyWqhihx_vm1dTTkHF0O4LJ3W9c-8sAQhsHvzsGGoEBkCi3TaTlBAcJ1_4ix1ITj21Ix1Udmc4cvNE5NRW_aBiwGQvrKlT7qvpxzzHZd-zpF2jAN78bGm6-jK2WSy59-y4FN9ZUrG1QwG5n-3rFiSl-pqRY3Bybx4ANnEU1cbf-0rnL-R3rcbCOEcMOf3CWc78PraUa7sqoV4tnmJdSwjmpVPmptOs2b9bbg6B7XqAsYX9PlkSAztLJQlVIUD4et0O1MOf5nSCmOG-x4cb1wtw8O2ZKea963732M9MUpiw9jBn2sAQbH5cufD0xlXGuVzn8gkDzOb007V018t--yJmbYcvDgMbp7VPESkQdtVMScn-jcpzNrdqDRIUjehEseVuULZhlv4HKopQjNrnyEenZb7kbeogISNKAa5zVKLKots1L9kTHkyziYdcv8bETD53c1CiIekupheQO32zXFc5KDeoTyQNi0O4KKpSCKSlp8GtmNt1q5--y8z1mmFru0xQeTcFG7rgm-q3u6lIQuxRM5n-hHdosYhRsJmX_AOlzw7UpagoV90hzxfGQwa5Oa9OHfoisF5-ueVsibMe-mqWct6OVV9Rke_7lPfjhVbQUS1-Y73MJJF1H5uW8b88GZqPIFxNTb8P-1ACFCWFpvCJRHjJ2rNP5AF1VtSKIgitmaNVwmqcwCwXOpGO7KqSqfKiIBGgik2t7T_joJjwZetvjpnZ-apNCJpmqtJc1rEfDGDBQvaXEuIJ3aB2nB1f4JNqxUatW9D_QMuLHvKmKPlRBQRtHMA7p-XFaJHQm4U-yhz75eGMCfcT7ik-3i8QNFJwwrZcWVbDNqdExmpV0hiE9fjgbmhU5OkoysPgrZfn0WSfo1Cdccb8WQuR8Kn_xj9cCqUjLm79mrsfUzLDsQOgIRBeiUoAH3oQKfI5Iqp2tquOHWb8SyZwENkpKPnipX_60G7BxcqpB5WI6-3MIilfH9itqdYYKImNncuVEzNZX-b2STHKxX1ESCgeb-Hq6SUuEwQtHK0lFnw_Jom8he6ShB-n4a2s6dBO4zT_awB4LZF42-ri7ewlONh2WzLTGW-lK7JNLPEfeXWR-jye7ALwGA2UEtXisMUhEMpuCt2La5EiCKBaw6deGygVbJ2t6dEbkSSEAoZONHctgqmZ9dNMaXC9Hyyo5sPKZPo8uXtJSslyHJlMvgY4W8Uj41IP3Umw1-j_FjYjWiOc5BFAvSbLczgWoXWqbcDa2plXnUmty9OTHw02dZb4opkhLi43ONSodwHqHGWyTgH3kdRhFYV-2uwkSVF8nZG0RHxEDGB3knN6HoHji2LJcn9TwZzOQDaG5sJzrVI12ZLPUx3KSxrygZ6d7KFJpXmi7jXe2kyExrO_HtpNebKq__h776GvuWsx887t2T-DoA1XFoNxbSWIDBaaRrrrMQnTubI7Dl6gs3ea7z2hmDFYcwrqb0r9bDBgx7yhSPjn3AgoRs43NYRe1gVoURcHduyFS6DM7wncDDMIyz3bgEtvJ4YPI2oPIH74MHDJOR1yUt6OmGMqIs_XbuekM9bi91iNAxwcIgdnYWTGUiR2Vk6O2VqqheOwAXn-_G16oGocsaLoOzu22ywuK6xNcleypBc_vyaPuoDmIlxxNvApurczDFHbTOvlq19G-CcP34gKlW_VLe_1KSA8W5cnH28yllZhzTUs14UpxLC6uV6VarxVqrUCLeWgvJ3Nc0pXiBE4ZwZuwWMzYWGSi2VtPeShJwhYpRlyt-AZLgXmNMpN4cGqxaFLhiD3m3M5r8ZzsBE_krksF4x-dfptxE18DRSZ5mQ9iF8BEl73VX5s88L4hDBZn9up6hAG-rTVVr3JOT85KYhvXfll92al7kgmYxNF3UVsHBTX8XxtiQx14wKm5gRwLtbBxeuD7HdU3cyqZgvrBrQlISH8p5ghqULI_BFIuXEN8uD52RE3vXrb9gUEMSAWeo7CS_xx-XwSVsfbnMBwzqFe7AcYDGfe38zpCi-oh9sCJjAAXN-KD40UZB7ld-kx3DrDjmRLnp1-gO0Sl4CKti9MFZboe_gxODqG070Cok0niSsoxJdLnfhcYw_JN5fWfhJOzTxRP7l4CXq74ji7ltw7N_EgYUzIONC3nAxZrU746soEvWcUNLmXyYEow3XWyTddMcenK7tLkveetyVXrQRnR7-n0y-WHKpA0dN8ZdnCM4j_z7wkoO4FN3GxGAL9Y0hi--9th4XbP8p_r6VLJ4SQNIuIKuyxRB6Y2NPFNnrOLlXuZiM9OUuFGO8Kz2qU0mPswV805wFCNh2bGNnSPOamizz4LernNK84t6_GM4NgoN7yTaBEX-Ng1EvnJhEfcZtwI3oSXBuLn7ufbWupHMJZfggEZ2FV5y3-w6SQymrpUSBnDZh1LpmibK1cGnJjAB7-1sWmTGUnV75j-qWMh97bPqJi8Uty5tYbgpulO-P4n1KTuCqGXbLDwINu_FNcmOEreQYJcEX1i0QOEoVblu5eJqC5kBPkBPEC1bVhNl3D2Ufdd3i2XCbxvfCoyc5eysl35Od1Hxst-KLZ4tmYI_pTNlI-JqwuKC2RUzJXVqiXpmaAk8jT592uFJs28jlLiB4TmWQ3L48kCnLaya0c_AFhGecdHEbbEy; __Secure-next-auth.session-token.1=twI76zjwWsf6cDBVpwTSlQGNTowWAosArlcPKymXnMkcNljStgeFkom9k95zpiXIDpFsiJB-PTLuGBj_3HmZUpEm5MuHUgbQKSFPio2l7wRW6a98uWicEzF4fcCjGz9OrDwBUnUxjcNnXue0alwa6AhF5T1B79ibZHjBtGq4IYsmt_l9mHR4wsRNXV0w_zCOhQfH1R8sczNff7eKcVnDo14FeadzZEqSNoKGU1C_6TZMOa7zzETGQPekh279ylKUaOZ9EshI_P3aRw71XNEdE2C-uOMZPuJIA3zPBvgYxdfppBXENTh8quyQAzHFmIMubPMg2zCNTD6ANvC5eTEH1B675sA9emI9DnC2UJVmNBJQPIpkncxQd98eaeYS0tHaUyzD7HQFJBFQOCmEh-ORdrJVoab1A36idPdzLusO0Tm1e.ZrEoUqMjNICG-4yAF6sAPw; AMP_7268c9db0f=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjJlMTcxNjRlMy0xMjU4LTQ3ZTYtYTJmYi1jN2JhM2FmNWRiZWUlMjIlMkMlMjJ1c2VySWQlMjIlM0ElMjJlYTNmNmY4NC0zNzNhLTQ0ODgtYTRjMi1mYjgxMzk1YzNiMzElMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzM2Mzg0ODU2MzQxJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTczNjM4NTAzMDcxOSUyQyUyMmxhc3RFdmVudElkJTIyJTNBNjElMkMlMjJwYWdlQ291bnRlciUyMiUzQTEyJTdE; _clsk=szrjt7%7C1736385030758%7C10%7C1%7Cq.clarity.ms%2Fcollect; _ga_ME15C3DGRL=GS1.1.1736384853.1.1.1736385031.0.0.0"
|
132
135
|
token = "__Host-next-auth.csrf-token=b6b37b10948a6156a1a39d09bd43ab6d0867fcd6001987531fe6f86f802bb0aa%7C3afdfd56119e801c5cb80dc96670031c85a2d9a02e8205f38fc5d6128e1a4075; _gcl_au=1.1.386131236.1736384852; _ga=GA1.1.282109674.1736384854; AMP_MKTG_7268c9db0f=JTdCJTdE; _fbp=fb.1.1736384856672.571916090953259055; _clck=2fa0yj%7C2%7Cfsf%7C0%7C1835; x-recraft-referral-code=1f1xoKVYB9; __Secure-next-auth.callback-url=https%3A%2F%2Fwww.recraft.ai%2Fprojects; _uetsid=1d264620ce2611efaf8a0f99cb3bbb99; _uetvid=1d2649e0ce2611efb597376fda548d79; AMP_7268c9db0f=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjJlMTcxNjRlMy0xMjU4LTQ3ZTYtYTJmYi1jN2JhM2FmNWRiZWUlMjIlMkMlMjJ1c2VySWQlMjIlM0ElMjJlYTNmNmY4NC0zNzNhLTQ0ODgtYTRjMi1mYjgxMzk1YzNiMzElMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzM2Mzg0ODU2MzQxJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTczNjM4NTAzMTczNyUyQyUyMmxhc3RFdmVudElkJTIyJTNBNjQlMkMlMjJwYWdlQ291bnRlciUyMiUzQTEzJTdE; _clsk=szrjt7%7C1736385032306%7C11%7C1%7Cq.clarity.ms%2Fcollect; _ga_ME15C3DGRL=GS1.1.1736384853.1.1.1736385032.0.0.0; __Secure-next-auth.session-token.0=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..SyUWD5O3-8Fu7f9K.jbfQGmUTAstB_wL4cyqA7QcbWKp4AFMnouf-WtJnwaPC4gIfu7iuNkXmrvbfp2YsqFJzSIl-5MvZrXt-bhk-DJtwqAdPzTw6sSa33I3IHWSS3TVlVFc9Ze-HT_6dIeMpIiN-rCSNGdpmtkEJLp_3WrCSGPB0NbJLLL_MGg6cQdS5WYz4trehD8sPSQUgYlTw_VaMImqVZOxKujLLgmGfgYdV8nl9p-JmFHMbpfcgn-yXqLca8E50sQOWldPw0p4RqsYyByUANX1POJAW33rm9fsRDHEKtVxOtlW5Hy1jev__V9UqSrhcvH_OQREngiQGYbtD0qLogeUg-vbL0VUAL-9USzXIn2Una3lP04lp3m_NKldiSShXsHJT8RW8IAl7K28ILGilA1fgx0V09JFIHhM4fX-hrPzqoh-BuxaaiF5czEHTtTPLXmnV1UiQgZVmfgliI2e_r9J3WtF-SgSc1Il2cvwxAsp66p5cjixFbpj7AULPXndQniHhTiU9zgDDdv-fEf0arKzW2w0--zwSmYizXMMpNblgxZ9k51CdOBCAM9YGtzDaB-NSA8I9RuHzmgXMvT5GMZSiezuoLdRRcVpuJBz-XF0v9QoQz7SQt6aMaCCTa-fxee--nfYZELu1Uhh90StcuT84VOAlx-wg6FxPEDI6cjlVtKuzcN_RMVYbWKO2z5xLw4zlqyGBleRjt7hNNt-IeCbGuaDxgbUViwhNr_qdh-_ZjQlz_FL4rzlJwPrl6puOsydFF8NIy0MU9oBdelGTtG8LwzNnOW_hGdqEfhXfDP9mzv4Fs4kqGNQxvT0PU2NQ5hIOTb540yHqTGb3kihXPaZL4YregR2-UPRxOM1qmWwgRZ93d9m0BUplhO9s9U2hYoLhp01ID8kiNi2AWp0hRcalh6PwgqSdzgbif3IH8AcHRJpnV2pRSbD7k883O6ukkItWPE-ysv-ak_Hl8FR046xjDaX1ITtyrJmTzFqQ627PGuOt01RmsVMOb1IFCcx4Fr4AYwOMDY0RDk1YxIUUqU4kyMZMVlMrI_ITcrYshdJwdr4k3hNk51gS3QUrhIDnUq93mvUSidSUy_jX47H-ORf9Al5poN3vNJPye9ogASdqRr2psn1UpceMzrejXz_xDSBllWGlSyAmHDlXniKfzGSbRtqET9xRZfy7X0iOGd0WW2Sb9BkI2OE6h2abFkeSmTXJTMaZXhQ244XkhvDVnps1QX4mdSIa1Js0Pb73DcWLV5TR1sTVxm5h9c1l5r-YxWQ9hjF3A43_V0Jp9ATDlcPIjewTqAcPuuNhcQRR6i7pt2CadiFpfT-h7DA1PvPRo7ReySBzDK9VhnlvodflQugnxj5gsRljH6r43s4OrgpJwCtENl-_yw4jDJCCXkJwHfLpSKhLR6CFSM52vrMa9fWg7iW1C4HIVVqyqIwC98-CTe5jYDMKrX_g40oDZL3XEhFCTfzl5o_UfqXJEWlDKZ0D_Aig7iNLDOEq3cwK9QDiP4-bX6jtM1zkltpCY-HPpwTXbtV4iIP6usg9lSJgCDgJjaS39rpBVYSrj-Y_PtPlPW5rJMVkSnp_f_J7uAwQWnluuEpxrb0Ap-vF4Vk4q9gBESbnk3PBg8wfFPC1GesPI4HyG8Jy3oIss8pDXba6D70soJiozgBcPTSxdeDIP1CXsRN2wiItYHeyslQE-_egn8oezT9__8LyVrY8guv14Nu-WGPx3R9xzpHn4TPY3nJQ6bU9H0PlB0qmJLsSh6tWtJ0Yl8-NMlEKr9WkcjOJB-QpFiDEyw3V7r65U5b_BOaNpzRA5OUJ_ZmCfufmyfnHm8R6mE5wqrwUfmxYBRfP_w8_ix58zwTzFsLe7Fii5_J411vqxFHefcljnpgFgf1UIOoAPBUfygBTVdpdJcWzA2QXNI9lKxUIC6pLme9rpNlXE2bCE1cn74qA974x1gBjZ5B_FVsmkYhFRwSboi8ypRFA1F6EWwSNO-LUQH8uVbrDisjjjAX19xq_Sibwq5P-dZMY6aLCuInQjfWic5NGsjjwh4xtBv3FTyt1nvt9SonxdsJi_wvcjEoCVyP7PfYy5Eo-MkOpznzGYc9slQscUhKPihaB7wlAJZxe99tBUHLJI6XoI1o2Z3G4KGRK6PTO_THOTVFBylKTMbg_jvHw63TL4-LNlhJ2efmSjnEZqpGkgIUb8wYSoG3OR-v3H7WPvvAtJAs-NfvQXSGaFZ3O-LnStvyT869zXwP9U6_NZjml7gB9iA0cZVw4o5tAFI5DPVstJAqSrjIW59cpTxxDo2zeBdl8aq5FoKIZ63w8QebUeibLT8_lejsWQtg8RX4WrSTbuZN-gtCsMY4Q-TY4gJtVygtjz44QMzYDXq0G5mlqnPanLvR9tOfZODm8z87e355KdmD7pI305NimlYjMAFECfAaQN4G3oDZiDb85KkO92JXlVwWbo1xfbx4FTikedjY-BI1ErQB5gxTgPo252aw5r9fItydPBE_nuZU211tc41k8IF2F_cbSZ9tUjZz14yb4Ux4RWUdtHs3y7Jh9_5Pj0dnS3dEgJ-7jlhz-v2tmrcgzcEKqDPQGdhKfLl__AMM_11LqMuvj0boYiiaDx8DHN95J_d48um0YvB5IU3sQucEXiRK2j8FpAXc9ptQqPTGdSzz4VhIE0EIzZIV3QqqaRqH6ZEXcNuV_DXwl6HOjui78yu-rpqz50E9fxePaV5LHPbzXp_ZEOLrWonqo9ZAIHzWhCbVM_vMxK7CnrfmhW4ow8l71maoD0ToyTW7J0KbegCnEVyVhAF-IqYc98gq0vEbfgH42JKk07-8v1gVNQ6TZpAbtgajdrRe9XCuR58f_dt7_y8xWLXw_tINMB-x5MLNbdomfSMsit9Vfl29Yr8yD4KIkYhsfhl-nH-7ntrx4KkkLdLoNhKbhdI7o7NO1zdJ22ur7op4YlAWSNq5q-q2uhF3bKTkYhAIJ2FnPZpYmv7NoldLkAML79C7xtbZTJ0ZgXCjxzbEI50-9qvhEMSNm5AjZLrE3tTp6GVJWfIvjb3HmTvEAxR3rRefzzTaKW-MO9t3OurUPood1vkMR7oQzQY_n6DaZKUcxA6L8sK8s2MfEb78h_ZKeKDRAFsnspHdVTYf4xEu_SbXyDYbx2vBU2beXYdhzcdLWff32f3jioAf_q8hk2wKAcj2Spik7Ng-HPbme3XPD0w1b6d266bJ8GIWCUoGmJ9Wm0UalL-ZnoX16yN9El_wfOEoXBFWRe56Ur1ih6ZwZkcuCMZcnUAlXaL3JGgrxtwQjUtuSPSAo7kBZGIS7xXzFL7aJOi9ctqBAJVH0C3g8TJcW7ilF-qzEwrOoo1zWfLQpxMXhg8XKLDzOPAFBwyEOlDaRdoj20aE6NTeWST-X3QEufdM0PE0uB3FAhYWTPyILrAulrIsMJphGU-9sABotQs9apb8Vvekzou3oQ02Nr8n_CHVdDfE7m9I1lOxnB8Yz78oJhBs0WAbcZL9Vy-c-RVBauUMgceqSyQJ3uHR3iWsze4yeVOb4LE4nUxsfBMHQhW-Via3wFpInCCJxS3je2wtiyDTztuMNN8Mxn_GuTJ1i-KkDdvWiAL9c4zg_6HQfsMpLXQXpJ4Ovk-wUAV_NaW9NnVXHR-ygTcsf-BUHEV6dm0EPEk3tNVdlOTMDzXeYmpXn7xSSPuHglNcLnCzbmiANoqs1N5knV9_gVx49MLkYzE2rK_xdAFZUgiR4uujQ16mWNHtzrUUZOWmPu0HrAt2cJsz0snCfakahNceO3di-MQCDppMUnoSlq2ZnRcsMYu_n7mjOP6suimdawk9Ik1y_RpJ1O92UjKl63SqTtknADbwywiDiLr62V59YEUxKhGIaNrg; __Secure-next-auth.session-token.1=q9Nx6cKkfa0ZpdMRs7aQg5BCEByRK-upafTx1BRw9yA7R30AXoMtQfz6ExKBqsbpyVHqJFnLBQuZqJEi_Bmk34FeYJrUjD1ddsPmEex0ftUACPSugpdrgsTxc8CN0f4a8t_m8wTHxhQWbE5_GT-A4Hb4T68U9pDkzA1kWMVHkQ6h1x7HyW_Ykh1KXejgZFJBhdvv4dAKpv0ckYCNXwJVgVwCKGCNikx-ubtZ-5XDX5ZquUNzVEGpx1cr-F4e0-aw8CDQmdZ0Zh7VHV5DKL7SkQW20FHjpiK-J6gdkkjGFX7EybuEM1KCZ-KI_9hna9JzZc52f_yyoN05hqTzWmfh4aFeQL3j1nErMn23uiava2BfKIoQ59dKWOO5zos66El2TtIFerhUFJDyt8sUOcybCWsmmf05oSeLzHeaJYBA8j7SP.FYyhM198a9ZP-Ep6hZRQNQ"
|
133
|
-
token =
|
136
|
+
token= "__Host-next-auth.csrf-token=14ca9d794219c34aca808cdc2a310d73ae76584a7bc746518742db0ac0baadd1%7C74c6e91fc8b1400a4035ce81d78e6a0516c8283e7c2a9104b3d75d93441a83ae; _gcl_au=1.1.526202796.1738463460; _ga=GA1.1.1626801434.1738463460; AMP_MKTG_7268c9db0f=JTdCJTdE; x-recraft-referral-code=7d7RbMefDM; __Secure-next-auth.callback-url=https%3A%2F%2Fwww.recraft.ai%2Fprojects; __Secure-next-auth.session-token.0=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..GN6pvZZE1X-avzQn.7TBThGPGii6nH6hS8TWazy7XV9Mk22vd2sqPfoHKuEbesS_pITSQc1kUchGlB_HQ_Lx8EldQGvzeVbFil6mBb4tqjNxJFecSHeDgLubqE0u5ueA-ZF4rf6Xz44NGnx-zJr6iA_rD7319KiL4-WWm57Ds5UJ_jo410_018LlUuWme0G2RKMwPySVL3Jg8Zyma5Z-twK50W8WRkwp07xiCZFXIQK6wLu_TvBYBwjVFa0wNJmyRCirM9YHKOsqVMIKP38q679Cd8S9A0s2T7SjLDm_5rme6TtaGq7Xye0cZLuARf_h2oX79Rm3XDPWYXjEJ6OMpNnlB1uvslb8Lbq0GkVAEYJbgc5PgQ2aD7WjqX8omU1uj1HVIXxr3lxDuSyvBPz_16Fkf7wMOI_OVQDCujAh4hdyNGVJ-vBuybQ6yo0vYF0S5X2_lUJqcwchUtwDneBXUUl3kI8JiZf8YF0kROkqkW82bFycQDtaNNFtwdFWyVhC7_L7gYpYpk0QrFJ7MVN25J8xbggLVRKrl-9gZ-55I9IkmM-iAtSuvTzTvqc9NzzRnoRPBDuwPwyKok2TE93QnAPQIzUacXIdZdkjTue-jymc60QrjBRGTIsIC93KD67vYdEH8vb1V0fiiqS4MkGfSpMA4NFaTpRECwqGcNzLj6XTrLGzl8Z2RO9tBWxqtq2Qfggyb8Oxftsab8hTjarw2b8mSSeyy2mnh_sIZiwM5Pl4ZDSYX9TsCdqNnOXyIGEWZCb5fb1rKSALKHrt71QZJXRETZCfJB-ndqw8I3l8rOhKuW0iio58umegRJYyFsJ6UY___fjBLz-0AwqSecklqkt8WDSaymIqR79YiGVjHt_qKLS1M43nVnp5TFneV9yorWPL6Oa2R0TAjU2fWjiaUohlI4XPSNlRXSz9m5EvYKJvKxMdRnZdx7UeZn2rP-C7K5xcjURm0QwXrcWL883DhDiYWrE3Y0IoG-U1n4MhosGeVnJA7FYeOSlpHZs0Re7Aud9nrLo3lWxyRHM9mTjBOTnpRWP5xwAneyM52FT78-RkVBrcaXc60UyK8h1WIxmLDWPIIvDI-W4wlR0SYDRUP7t_8dFXT7NCZXSzskNFa9wmPPWvh4__CXXFWwW2J5X_x_6iLfsBX8C5KsPKeRNplhWJqKM-50Vwk5gM9JtYGjsguKWrAqPbacs-cuexbg-_WwU1trXv6hc28pMU2RJ8FNk4t7OCrhbuwt-PSdAO2bksP8QFKEez8w1mfptn3DN8mFaranAzgwdo-xD0v2Ew2C_oqoYUahxVrKMHqEYSd_bQnLylaftMfYGBNU0WuY7bcvRtJp3DGfQrHTF76ZA5AqgPKFwlmE_5pa-1xb5slX76bFAm1NKhgZZDpGyeqEobp_3u4yXhJTHVHYQuFHNFQm6ZDsepFh8SLR-dWlyrYsu3KHQUcZAMzOW4jiTc7SK37z03ONM5kgw2o_MRcdmvpIMBHCwuGjwLSUxCmora5cDKQY49gKWu778wfeUw-RJIdg4TZzsRM3OV3FnyN7koaWF-D5HdOP0H2v3zre9DtY5N-3_iIo1Fa9F1Pd59X3Oz1wpJ7Yjuam-mboCXgIfQ9q-dn4vGoxdqBqyvDM9IZV8N1MnjxoG6m3BOTdLR90aaYqHKSkDE3ks4oaE2CfGuhK0hHKcnXcEFXm81Mx-eJ90rFTmYOdlId0e19mk5tu-Cbj79MbBpx5cRfojiTqrQH-AIXXRa8aBr4QxAW_p1iDnAQ9owtX8dvbacg_VKhB0IOLlBaDfDmDAwBkvMWwBnaYThOsbIOWQhH-dPBndW8G7ycKJ2xtK0PHApsn0iAujAuPUTYeobNgKdfNHu5eXwaRltkuH8jvDbcxj5m4ajsVX7qA7N8uod6TIVyh_5Hvp1iRQHjtOC6_pI7hCnC_5B9mwaXsYPQqPiP-h7sv8CoG6KQ5UlE7_SkHXpfjEsI9RWETa8YPDTHek4k4bz0Y4VIIov_sBXsqLR3ZnNMdzsbCekfMqXtzgw6I1UqzzPVew4mA0J7qC3WHW6XK2a7sxnO4y-R4njEf7W6a8nEj4n6bwfKeozaQ_mvKVekVUR1ocjD94PYBzGb_DTpToeEz8f5RS6csXMWM1BORz2pF6N-mOH_H4g-0qGdIwh5rdRu2xcZX_VGR3_vVjvm2svnSvdKEsVn4cRcytt10iiDTPw-RQVW_DdkuXOK9CPN2WJDBtSkEEwLlNTHjRxPzamsnKB2fQe02suVPpU2dfF5qy4pKXLeKabT4Ky_Ih4Yb4ez6oy2fUknvKS2JKeorGk6lWrDGlyGX36IJO6fbDQogn5ba98E5IYWCKOknszOtT36QqAywyqja_dBRepAtI1YNN5DNNryH1AnF7d4q38l1O_PPbAXrk_taIAo225y-Cwsdp3f2hOINdAORsRa5GuFXeED1MOsFMpHX7C1atdGaZGi2ypZ6plvG70fxoVw9GLrWItUStCq5i8And6ZKXd815nI7yAW0lQv3RCBRqUuoWX5E3F8-bTv4aBlM4Q3gkh6_H2GhYYmRUwA8ASeCdEeOCw-kZ_wm742k99x2N65uBWLBe7T40zYWPGBafTxcPnBrcLw2xLlEIj2KeyZ7hYDhZdeoC5plS1Qxwxw2m53g8e8K_fOgELtMfB6mr32EdSjNqnx5WNZ7NNqq8ROj6vtfGK7y5cqC7ZkoKOkK6z9KO7pyDxZ9Mj221lQte7h7hzb676GiErrovAu2pCwWT9RVNUntK6mz2W7A97tjyKOz2VuLzhPBE_WAYyYSZ0Ykl4QKAU7cpmoaXNBs58YGm_H7cSOu3_4yEIuKh_O-pggiBfdxKKDiK3Mt7jeNV98-YCUlLmZEv5yWkjBsmm2LUEgX2w6DVUUUJwy5ongmXDktpViHLLMubj9PW5GGfJPsMuXEOfUTTL1C7wnMJzWzco4y11YmzRiSlCuKkPCMcT5_yhZvAZRyyrPUOBUftcOKUbBh4oBYIN3RbT1v4sMTjSGzYez52Sisb18InbQDM0zn0j88HRorWH6bxpKDb_PvmTebrhDIiWXbI3Zlm4NCQm7NZWicEFK-1fR46b5qRD80tp_cq8BWfECvvFfcT2NzO1rMhl6xIY5-TBWXIM6-qd1Pbd3xOdLRQPotxbZimS--dFBsLvrK3Ginax_mqc01AIXcjph23oQbQ9gnQzgtwicPafnQaOEcdR-moB9ca6oEShgymUyy_XcK6UdKpy4xI1yZsQ9omcquT_s8hzVrLEXwlwtUSzfqvH9pMCIjASWqMeRkfEojrjJd4th122hn2al7s2TbmPSXDOn0iHjh8N5aLcZbG_J9x6qwnpjMwDiGpU2Il3AlXuL0IaMFKukUbx_xKz4DoHsnJMMGsJfItAzyFbLPsPlVq3I97qwTZNUHqATjW3U9AO-PntTdK0OOSu3YbbJ2dk_A-SI1oK3O64Ie-u8rS2dFRmyUT_wYOcXL5cJ_-3HPz2xsO2SzRA7c8G-LsNCSSVSv9Vd5HBQhHA5IxsCptmFZ9OIkHFqeA5wcCYuhMHqSaC6kbPClyEExzaPsrJI6-SJUd86psoJn8dmn4I31WNf_5STzPBeii6qBYbLVIfiwXJckk0M-hvDeQfCyzRpKHeCslGkm6kziutEvfS0yZwZgDpBpGevyOcPCxYicpZSzUxEvsVCjtB9NBcIEHmm8Ho_JjiebQ3HcrchWFAYYU8XScsvkpfVqF71lut7ik7VOFcmQ3a35_zEA9kzYLKvmC49nyIMIkWDR5iCKW63rw2-6PzSTzSjf_xb_VADIYdat8a-i96mCbhtah6WH7Y5tTQKUYRWLUYib6kE8hwPy7jyHX0IMebioaklJKaU_G1tBYDsF4Q; __Secure-next-auth.session-token.1=12vFH4Zo9AA6uZzZrVWEaWBTWDlMDYiDUP5HUYoEOv3R3ksn-sPq93b2jISpNOW9RecN5E_5NXB76IfeH-VZauOwKzd4Kc37Mf6EM4gwXALfqMGsvFX8DlW6MkwbNqZ14WbE1pR_KhKVYrdB6ZX6J4ZlscRoqPB-A7GpvOtVPUComrZg00-evxSWcyKvLsCW1NNqqnXA-7J94rJJBdsS6j1c3s5KiCqB1Ptr1eTeWanjxkjNfSewVQqX6WVytsLnsVE9KqmJGZiz0zIFvnLPQwSv1Bg0IFzt8UF4J1PXrQaIbwIvqmNj7BU3589K2Rb58tarZoZ-ogxZG5ZneR1CWLSlRJDhsnOvAXubqD0EuT_POI7EXdrfsNiifr7knH_xxEu7iqxzpXsDMuaO_pxzwkPuKFtcxDkVOJH-TY5njugFS.Jodtt7brKicBj8c26v0T3A; _ga_ME15C3DGRL=GS1.1.1738463460.1.1.1738463490.0.0.0; _clck=1l7d1gy%7C2%7Cft3%7C0%7C1859; _clsk=1uwygz6%7C1738463492407%7C1%7C1%7Co.clarity.ms%2Fcollect; _uetsid=be5a5d90e10d11efbff71f781c6cba79; _uetvid=be5abc90e10d11ef9a96119e1652d011; AMP_7268c9db0f=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI2ZTNiMzU3NC1lOThlLTQ2OWEtYWIzOS0xM2ZhM2M4NTdjNDglMjIlMkMlMjJ1c2VySWQlMjIlM0ElMjIyNzA0ZWQ4MC01YWExLTQ3YWUtOTRkYi0wNmQxZWZhODBjYTYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzM4NDYzNDYxMjMzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTczODQ2MzUyMjQ1NSUyQyUyMmxhc3RFdmVudElkJTIyJTNBMTklMkMlMjJwYWdlQ291bnRlciUyMiUzQTMlN0Q="
|
134
137
|
token = None
|
135
138
|
|
136
139
|
# arun(get_access_token())
|
@@ -140,7 +143,7 @@ if __name__ == '__main__':
|
|
140
143
|
"style": "any",
|
141
144
|
"response_format": "url",
|
142
145
|
"size": "1152x2048",
|
143
|
-
"n":
|
146
|
+
"n": 1,
|
144
147
|
}
|
145
148
|
request = RecraftImageRequest(
|
146
149
|
# prompt='一条猫',
|
@@ -153,5 +156,5 @@ if __name__ == '__main__':
|
|
153
156
|
# tokens = [token]
|
154
157
|
|
155
158
|
# tokens = list(arun(aget_spreadsheet_values(feishu_url=FEISHU_URL, to_dataframe=True))[0]) | xfilter_
|
156
|
-
|
157
|
-
# r = arun(check_token(tokens))
|
159
|
+
# #
|
160
|
+
# r = arun(check_token(tokens[0]))
|
meutils/apis/jimeng/common.py
CHANGED
@@ -88,6 +88,8 @@ async def check_token(token, threshold: int = 1):
|
|
88
88
|
try:
|
89
89
|
response = await get_credit(token)
|
90
90
|
logger.debug(bjson(response))
|
91
|
+
# logger.error(f"{token}")
|
92
|
+
|
91
93
|
credits = sum(response['data']['credit'].values())
|
92
94
|
return credits >= threshold
|
93
95
|
except Exception as e:
|
@@ -175,6 +177,8 @@ if __name__ == '__main__':
|
|
175
177
|
token = "38d7d300b5e0a803431ef88d8d2acfef"
|
176
178
|
token = "916fed81175f5186a2c05375699ea40d"
|
177
179
|
token = "7c5e148d9fa858e3180c42f843c20454"
|
180
|
+
token = "eb4d120829cfd3ee957943f63d6152ed"
|
181
|
+
# arun(check_token(token))
|
178
182
|
|
179
183
|
# print(arun(aget_spreadsheet_values(feishu_url=FEISHU_URL, to_dataframe=True))[0].tolist())
|
180
184
|
tokens = arun(get_series(FEISHU_URL))
|
@@ -182,7 +186,7 @@ if __name__ == '__main__':
|
|
182
186
|
# arun(check_token(token))
|
183
187
|
for token in tokens:
|
184
188
|
if not arun(check_token(token)):
|
185
|
-
|
189
|
+
logger.debug(f"无效 {token}")
|
186
190
|
|
187
191
|
# arun(get_upload_token(token))
|
188
192
|
#
|
meutils/apis/jimeng/images.py
CHANGED
@@ -7,9 +7,14 @@
|
|
7
7
|
# @WeChat : meutils
|
8
8
|
# @Software : PyCharm
|
9
9
|
# @Description :
|
10
|
+
"""
|
11
|
+
guidance 控制精细度 => sample_strength 0-1 数值越大生成的效果质量越好,耗时会更久
|
12
|
+
|
13
|
+
"""
|
10
14
|
|
11
15
|
from meutils.pipe import *
|
12
16
|
from meutils.caches.redis_cache import cache
|
17
|
+
from meutils.decorators.retry import retrying
|
13
18
|
|
14
19
|
from meutils.schemas.jimeng_types import BASE_URL, MODELS_MAP, FEISHU_URL
|
15
20
|
from meutils.schemas.image_types import ImageRequest
|
@@ -137,7 +142,7 @@ async def create_draft_content(request: ImageRequest, token: str):
|
|
137
142
|
"prompt": request.prompt,
|
138
143
|
"negative_prompt": request.negative_prompt or "",
|
139
144
|
"seed": request.seed or 426999300,
|
140
|
-
"sample_strength": 0.5,
|
145
|
+
"sample_strength": request.guidance or 0.5, # 精细度
|
141
146
|
"image_ratio": 1,
|
142
147
|
"large_image_info": {
|
143
148
|
"type": "",
|
@@ -170,6 +175,7 @@ async def create_draft_content(request: ImageRequest, token: str):
|
|
170
175
|
return draft_content
|
171
176
|
|
172
177
|
|
178
|
+
@retrying(max_retries=3)
|
173
179
|
async def create_task(request: ImageRequest, token: Optional[str] = None):
|
174
180
|
token = token or await get_next_token_for_polling(FEISHU_URL, check_token)
|
175
181
|
|
@@ -203,7 +209,8 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
|
|
203
209
|
|
204
210
|
data = response.json()
|
205
211
|
logger.debug(bjson(data))
|
206
|
-
|
212
|
+
|
213
|
+
if task_id := (data.get("data") or {}).get("aigc_data", {}).get("history_record_id"):
|
207
214
|
return TaskResponse(task_id=task_id, system_fingerprint=token)
|
208
215
|
else:
|
209
216
|
|
@@ -217,10 +224,11 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
|
|
217
224
|
|
218
225
|
raise HTTPException(
|
219
226
|
status_code=status.HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS,
|
220
|
-
detail="
|
227
|
+
detail=f"可能触发内容审核,请联系管理员:{data.get('errmsg')}"
|
221
228
|
)
|
222
229
|
|
223
230
|
|
231
|
+
@retrying()
|
224
232
|
async def get_task(task_id, token):
|
225
233
|
url = "/mweb/v1/get_history_by_ids"
|
226
234
|
headers = get_headers(url, token)
|
@@ -270,11 +278,14 @@ async def get_task(task_id, token):
|
|
270
278
|
# @cache: todo: cache 积分异常消耗
|
271
279
|
# @cache(ttl=3600)
|
272
280
|
async def generate(request: ImageRequest):
|
281
|
+
# logger.debug(request)
|
282
|
+
|
273
283
|
task_response = await create_task(request)
|
274
284
|
|
275
|
-
for i in range(1,
|
276
|
-
await asyncio.sleep(max(
|
285
|
+
for i in range(1, 15):
|
286
|
+
await asyncio.sleep(max(15 / i, 5))
|
277
287
|
response = await get_task(task_response.task_id, task_response.system_fingerprint)
|
288
|
+
logger.debug(f"{task_response.task_id, task_response.system_fingerprint}")
|
278
289
|
logger.debug(response)
|
279
290
|
if response.status.lower().startswith("fail"):
|
280
291
|
raise HTTPException(
|
@@ -320,11 +331,11 @@ if __name__ == '__main__':
|
|
320
331
|
data = {
|
321
332
|
"model": "seededit",
|
322
333
|
"prompt": "https://oss.ffire.cc/files/kling_watermark.png 让这个女人带上墨镜,衣服换个颜色",
|
323
|
-
"size": "1024x1024"
|
334
|
+
"size": "1024x1024",
|
324
335
|
}
|
325
|
-
|
336
|
+
arun(generate(ImageRequest(**data)))
|
326
337
|
|
327
|
-
arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
|
338
|
+
# arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
|
328
339
|
# prompt = "A plump Chinese beauty wearing a wedding dress revealing her skirt and underwear is swinging on the swing,Happy smile,cleavage,Exposed thighs,Spread your legs open,Extend your leg,panties,upskirt,Barefoot,sole"
|
329
340
|
# request = ImageRequest(prompt=prompt)
|
330
341
|
# task = arun(create_task(request))
|
meutils/apis/kling/api.py
CHANGED
@@ -34,7 +34,7 @@ def encode_jwt_token(ak, sk):
|
|
34
34
|
|
35
35
|
async def create_task(request: BaseModel, token: Optional[str] = None):
|
36
36
|
# token = token or await get_next_token_for_polling(API_FEISHU_URL)
|
37
|
-
token = "
|
37
|
+
token = "2111f9eb7cf84576b775e06625eb65f1|e264fd49e39a4408a76e461937ee2926"
|
38
38
|
ak, sk = token.split("|")
|
39
39
|
|
40
40
|
headers = {
|
meutils/apis/niutrans.py
CHANGED
@@ -46,6 +46,8 @@ async def translate(sentence, src_lan, tgt_lan, **kwargs):
|
|
46
46
|
|
47
47
|
response = await client.post(path="/NiuTransServer/translation", cast_to=object, body=payload)
|
48
48
|
|
49
|
+
logger.debug(response)
|
50
|
+
|
49
51
|
if isinstance(response, str) and "tgt_text" in response:
|
50
52
|
data = json.loads(response)
|
51
53
|
return data.get('tgt_text')
|
meutils/apis/oneapi/token.py
CHANGED
@@ -44,5 +44,3 @@ async def get_api_key_money(api_key):
|
|
44
44
|
if __name__ == '__main__':
|
45
45
|
arun(get_api_key_money(os.getenv("OPENAI_API_KEY_GUOCHAN")))
|
46
46
|
|
47
|
-
arun(get_api_key_money("sk-1UNhOrvuJ4PeBBpsB202577c14114f7fA234F32d3e8dF767"))
|
48
|
-
arun(get_api_key_money("sk-1UNhOrvuJ4PeBBpsB202577c14114f7fA234F32d3e8dF7677"))
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : zhipu
|
5
|
+
# @Time : 2025/2/19 20:42
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
from meutils.str_utils.json_utils import json_path
|
13
|
+
from meutils.llm.clients import AsyncOpenAI, chatfire_client, zhipuai_client, moonshot_client
|
14
|
+
from meutils.llm.openai_utils import to_openai_params
|
15
|
+
from meutils.schemas.openai_types import chat_completion, chat_completion_chunk, ChatCompletionRequest, CompletionUsage
|
16
|
+
|
17
|
+
|
18
|
+
class Completions(object):
|
19
|
+
|
20
|
+
def __init__(self, api_key: Optional[str] = None):
|
21
|
+
self.api_key = api_key
|
22
|
+
|
23
|
+
async def create(self, request: ChatCompletionRequest, search_result2md: bool = False):
|
24
|
+
request.stream = False
|
25
|
+
request.model = "web-search-pro"
|
26
|
+
request.messages = [{
|
27
|
+
"role": "user",
|
28
|
+
"content": request.last_content,
|
29
|
+
}]
|
30
|
+
data = to_openai_params(request)
|
31
|
+
|
32
|
+
search_completion = await zhipuai_client.chat.completions.create(**data)
|
33
|
+
logger.debug(search_completion.model_dump_json(indent=4))
|
34
|
+
|
35
|
+
if results := json_path(search_completion, '$..[keywords,query,search_result]'):
|
36
|
+
data = dict(zip(["keywords", "query", "search_result"], results))
|
37
|
+
if search_result2md:
|
38
|
+
global df
|
39
|
+
|
40
|
+
df = pd.DataFrame(data["search_result"])
|
41
|
+
|
42
|
+
df['title'] = [f"[{k}]({v})" for k, v in zip(df['title'], df['link'])]
|
43
|
+
df['media'] = [f"" for k, v in zip(df['media'], df['icon'])]
|
44
|
+
|
45
|
+
df = df[['title', 'media']]
|
46
|
+
df.index += 1
|
47
|
+
# {df_.to_markdown(index=False).replace('|:-', '|-').replace('-:|', '-|')}
|
48
|
+
data["search_result"] = df.to_markdown()
|
49
|
+
return data
|
50
|
+
|
51
|
+
async def query(self, q: str):
|
52
|
+
pass
|
53
|
+
|
54
|
+
# {
|
55
|
+
# "role": "user",
|
56
|
+
# "content": search_completion.model_dump_json(indent=4),
|
57
|
+
# }
|
58
|
+
|
59
|
+
|
60
|
+
if __name__ == '__main__':
|
61
|
+
model = "web-search-pro"
|
62
|
+
# model = "tencent-search"
|
63
|
+
|
64
|
+
request = ChatCompletionRequest(
|
65
|
+
# model="baichuan4-turbo",
|
66
|
+
# model="xx",
|
67
|
+
# model="deepseek-r1",
|
68
|
+
# model="deepseek-r1:1.5b",
|
69
|
+
model=model,
|
70
|
+
|
71
|
+
# model="moonshot-v1-8k",
|
72
|
+
# model="doubao",
|
73
|
+
|
74
|
+
messages=[
|
75
|
+
{"role": "user", "content": "《哪吒之魔童闹海》现在的票房是多少"}
|
76
|
+
],
|
77
|
+
|
78
|
+
stream=True
|
79
|
+
)
|
80
|
+
arun(Completions().create(request, search_result2md=True))
|
@@ -25,6 +25,7 @@ FEISHU_URL = "https://xchatllm.feishu.cn/sheets/Bmjtst2f6hfMqFttbhLcdfRJnNf?shee
|
|
25
25
|
FEISHU_URL_FREE = "https://xchatllm.feishu.cn/sheets/Bmjtst2f6hfMqFttbhLcdfRJnNf?sheet=xlvlrH"
|
26
26
|
|
27
27
|
BASE_URL = os.getenv("SILICONFLOW_BASE_URL")
|
28
|
+
# BASE_URL = "https://api.siliconflow.cn/v1"
|
28
29
|
|
29
30
|
DEFAULT_MODEL = "black-forest-labs/FLUX.1-schnell"
|
30
31
|
MODELS = {
|
@@ -79,7 +80,7 @@ async def generate(request: ImageRequest, api_key: Optional[str] = None):
|
|
79
80
|
).get("data", request.prompt)
|
80
81
|
|
81
82
|
request.model = MODELS.get(request.model, DEFAULT_MODEL)
|
82
|
-
logger.debug(request)
|
83
|
+
# logger.debug(request)
|
83
84
|
|
84
85
|
if any(i in request.model.lower() for i in {"pro-max", "pro"}):
|
85
86
|
request.num_inference_steps = 20
|
@@ -165,3 +166,5 @@ if __name__ == '__main__':
|
|
165
166
|
|
166
167
|
arun(generate(request))
|
167
168
|
|
169
|
+
# https://api.siliconflow.com/v1
|
170
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : suno_api
|
5
|
+
# @Time : 2025/2/25 14:16
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
|
13
|
+
# "https://api.chatfire.cn/suno/submit/music"
|
14
|
+
|
15
|
+
from openai import AsyncOpenAI
|
16
|
+
from meutils.schemas.suno_types import SunoAIRequest
|
17
|
+
from meutils.decorators.retry import retrying
|
18
|
+
|
19
|
+
|
20
|
+
@retrying() # 触发重试
|
21
|
+
async def get_task(task_id): # task_id 实际是 clip_ids, 必须指定token获取任务
|
22
|
+
client = AsyncOpenAI(base_url="https://api.chatfire.cn/suno")
|
23
|
+
response = await client.get(f"/fetch/{task_id}", cast_to=object)
|
24
|
+
return response
|
25
|
+
|
26
|
+
|
27
|
+
async def create_task(request: SunoAIRequest):
|
28
|
+
client = AsyncOpenAI(base_url="https://api.chatfire.cn/suno")
|
29
|
+
|
30
|
+
response = await client.post(
|
31
|
+
"/submit/music",
|
32
|
+
body=request.model_dump(exclude_none=True),
|
33
|
+
cast_to=object,
|
34
|
+
|
35
|
+
)
|
36
|
+
|
37
|
+
logger.debug(response)
|
38
|
+
return response.get("data")
|
39
|
+
|
40
|
+
|
41
|
+
if __name__ == '__main__':
|
42
|
+
pass
|