MeUtils 2025.1.29.10.0.47__py3-none-any.whl → 2025.2.6.13.5.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.
Files changed (36) hide show
  1. {MeUtils-2025.1.29.10.0.47.dist-info → MeUtils-2025.2.6.13.5.49.dist-info}/METADATA +28 -28
  2. {MeUtils-2025.1.29.10.0.47.dist-info → MeUtils-2025.2.6.13.5.49.dist-info}/RECORD +36 -28
  3. examples/_openaisdk/openai_baichuan.py +2 -2
  4. examples/_openaisdk/openai_baidu.py +61 -0
  5. examples/_openaisdk/openai_chatfire.py +24 -13
  6. examples/_openaisdk/openai_dashscope.py +32 -0
  7. examples/_openaisdk/openai_deepseek.py +53 -3
  8. examples/_openaisdk/openai_ep.py +29 -0
  9. examples/_openaisdk/openai_gitee.py +23 -9
  10. examples/_openaisdk/openai_images.py +12 -9
  11. examples/_openaisdk/openai_luchentech.py +60 -0
  12. examples/_openaisdk/openai_moderations.py +56 -0
  13. examples/_openaisdk/openai_siliconflow.py +5 -4
  14. examples/xxx.py +0 -0
  15. meutils/apis/chatglm/glm_video_api.py +4 -2
  16. meutils/apis/hailuoai/videos.py +18 -37
  17. meutils/apis/images/recraft.py +10 -5
  18. meutils/apis/jimeng/images.py +21 -8
  19. meutils/apis/search/metaso.py +34 -3
  20. meutils/apis/vidu/vidu_video.py +1 -1
  21. meutils/caches/acache.py +32 -11
  22. meutils/caches/demo.py +28 -0
  23. meutils/data/VERSION +1 -1
  24. meutils/data/oneapi/NOTICE.md +3 -17
  25. meutils/llm/clients.py +3 -0
  26. meutils/llm/completions/agents/search.py +28 -6
  27. meutils/llm/completions/qwenllm.py +12 -3
  28. meutils/llm/completions/reasoner.py +87 -0
  29. meutils/llm/openai_utils/common.py +2 -0
  30. meutils/schemas/metaso_types.py +7 -1
  31. meutils/schemas/oneapi/common.py +38 -7
  32. meutils/schemas/vidu_types.py +1 -1
  33. {MeUtils-2025.1.29.10.0.47.dist-info → MeUtils-2025.2.6.13.5.49.dist-info}/LICENSE +0 -0
  34. {MeUtils-2025.1.29.10.0.47.dist-info → MeUtils-2025.2.6.13.5.49.dist-info}/WHEEL +0 -0
  35. {MeUtils-2025.1.29.10.0.47.dist-info → MeUtils-2025.2.6.13.5.49.dist-info}/entry_points.txt +0 -0
  36. {MeUtils-2025.1.29.10.0.47.dist-info → MeUtils-2025.2.6.13.5.49.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : openai_siliconflow
5
+ # @Time : 2024/6/26 10:42
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description : https://cloud.luchentech.com/maas/modelMarket/123e4567-e89b-12d3-a456-426614174000
10
+ import os
11
+
12
+ from meutils.pipe import *
13
+ from openai import OpenAI
14
+ from openai import OpenAI, APIStatusError
15
+ from fake_useragent import UserAgent
16
+
17
+ ua = UserAgent()
18
+ client = OpenAI(
19
+ # base_url="https://free.chatfire.cn/v1",
20
+ api_key="7b1c32c9-5bd9-4958-a8e4-4be68056038c",
21
+ base_url="https://cloud.luchentech.com/api/maas",
22
+ default_headers={'User-Agent': ua.random}
23
+ )
24
+
25
+ message = """
26
+ A Chinese beauty plays Catwoman. She is seductive. She wears a fitted black leather tights, decorated with neon blue lines flowing along the seams, pulsating like an electric current. There are many hollow designs for tights, showing big breasts, nipples and female genitals. She wears a pair of black cat ear headdresses. Her hands are covered with black leather gloves extending to her elbows, with retractable silver claws on her fingertips. She stood around the roof surrounded by towering skyscrapers, and countless neon signs flashed with various colors.
27
+ """
28
+
29
+ try:
30
+ completion = client.chat.completions.create(
31
+ model="deepseek_r1",
32
+ # model="xxxxxxxxxxxxx",
33
+ messages=[
34
+
35
+ {"role": "user", "content": "详细介绍下你是谁"}
36
+ ],
37
+ # top_p=0.7,
38
+ stream=False,
39
+ max_tokens=1000
40
+ )
41
+ except APIStatusError as e:
42
+ print(e.status_code)
43
+
44
+ print(e.response)
45
+ print(e.message)
46
+ print(e.code)
47
+
48
+ for chunk in completion:
49
+ # print(bjson(chunk))
50
+ print(chunk.choices[0].delta.content, flush=True)
51
+
52
+ # r = client.images.generate(
53
+ # model="cogview-3-plus",
54
+ # prompt="a white siamese cat",
55
+ # size="1024x1024",
56
+ # quality="hd",
57
+ # n=1,
58
+ # )
59
+
60
+
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : openai_moderations
5
+ # @Time : 2025/2/5 08:38
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+
11
+ from meutils.pipe import *
12
+ from meutils.io.image import image_to_base64
13
+
14
+ from openai import OpenAI
15
+
16
+ base64_image = image_to_base64('1.png', for_image_url=True)
17
+ client = OpenAI(
18
+ # base_url="https://ai.gitee.com/v1",
19
+ # api_key="AHKZ65ARNFH8QGMUUVCPECDTZVOLRPUXIKPGAC1Y",
20
+
21
+ # base_url="https://api-proxy.oaipro.com/v1",
22
+ base_url="https://api.openai.com/v1",
23
+
24
+ api_key="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"
25
+ )
26
+ #
27
+ response = client.moderations.create(
28
+ model="omni-moderation-latest",
29
+ input=[
30
+ {
31
+ "type": "text",
32
+ "text": "...text to classify goes here..."
33
+ },
34
+ {
35
+ "type": "image_url",
36
+ "image_url": {
37
+ "url": base64_image
38
+ }
39
+ }
40
+ ],
41
+ )
42
+
43
+ #
44
+ # response = client.moderations.create(
45
+ # model="omni-moderation-latest",
46
+ # input=[
47
+ # {
48
+ # "type": "image_url",
49
+ # "image_url": {
50
+ # "url": base64_image
51
+ # }
52
+ # }
53
+ # ],
54
+ # )
55
+ #
56
+ # print(response.model_dump_json(indent=2))
@@ -30,12 +30,13 @@ model = "01-ai/Yi-1.5-6B-Chat"
30
30
  # model = "meta-llama/Meta-Llama-3.1-8B-Instruct"
31
31
  # model = "meta-llama/Meta-Llama-3.1-70B-Instruct"
32
32
  # model = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
33
- model = "deepseek-ai/DeepSeek-V2.5"
33
+ # model = "deepseek-ai/DeepSeek-V2.5"
34
+ model = "deepseek-ai/DeepSeek-R1"
34
35
 
35
36
 
36
37
  # api black-forest-labs/FLUX.1-schnell
37
38
  messages = [
38
- {'role': 'user', 'content': '你是谁'}
39
+ {'role': 'user', 'content': '详细说明 9.8 9.11那个大'}
39
40
  ]
40
41
  response = client.chat.completions.create(
41
42
  # model='alibaba/Qwen1.5-110B-Chat',
@@ -44,8 +45,8 @@ response = client.chat.completions.create(
44
45
  # {'role': 'user', 'content': "抛砖引玉是什么意思呀"}
45
46
  # ],
46
47
  messages=messages,
47
- stream=True,
48
- max_tokens=2048,
48
+ stream=False,
49
+ max_tokens=1,
49
50
  )
50
51
  print(response)
51
52
  for chunk in response:
examples/xxx.py ADDED
File without changes
@@ -103,10 +103,12 @@ async def generate(request: ImageRequest, n: int = 30): # 兼容dalle3
103
103
  # VideoResult
104
104
  if __name__ == '__main__':
105
105
  api_key = "e21bd630f681c4d90b390cd609720483.WSFVgA3Kk1wNCX0mN"
106
- api_key = "7d10426c06afa81e8d7401d97781249c.DbqlSsicRtaUdKXI" # 新号
106
+ # api_key = "7d10426c06afa81e8d7401d97781249c.DbqlSsicRtaUdKXI" # 新号
107
107
 
108
108
  request = VideoRequest(
109
- model='cogvideox-flash'
109
+ # model='cogvideox-flash',
110
+ model='cogvideox'
111
+
110
112
  )
111
113
  # r = arun(create_task(request, api_key=api_key))
112
114
  pass
@@ -19,7 +19,8 @@ from meutils.pipe import *
19
19
  from meutils.hash_utils import md5
20
20
  from meutils.io.files_utils import to_bytes
21
21
  from meutils.schemas.hailuo_types import BASE_URL, FEISHU_URL, FEISHU_URL_OSS
22
- from meutils.schemas.hailuo_types import BASE_URL_ABROAD, FEISHU_URL_ABROAD
22
+ from meutils.schemas.hailuo_types import BASE_URL_ABROAD as BASE_URL, FEISHU_URL_ABROAD as FEISHU_URL
23
+
23
24
  from meutils.schemas.hailuo_types import VideoRequest, VideoResponse
24
25
  from meutils.llm.check_utils import check_tokens
25
26
  from meutils.config_utils.lark_utils import get_next_token_for_polling
@@ -48,12 +49,8 @@ MODEL_MAPPING = {
48
49
  # minimax_video-01,minimax_video-01-live2d,,minimax_t2v-01,minimax_i2v-01,minimax_i2v-01-live,minimax_s2v-01
49
50
 
50
51
 
51
- async def upload(file: bytes, token: Optional[str] = None, vip: Optional[bool] = True):
52
- global BASE_URL, FEISHU_URL
53
- if vip:
54
- BASE_URL, FEISHU_URL = BASE_URL_ABROAD, FEISHU_URL_ABROAD
55
-
56
- data = await get_request_policy(token, vip)
52
+ async def upload(file: bytes, token: str):
53
+ data = await get_request_policy(token)
57
54
 
58
55
  access_key_id = data["accessKeyId"]
59
56
  access_key_secret = data["accessKeySecret"]
@@ -116,13 +113,8 @@ async def upload(file: bytes, token: Optional[str] = None, vip: Optional[bool] =
116
113
 
117
114
  @alru_cache(ttl=1 * 24 * 60 * 60)
118
115
  @retrying()
119
- async def get_access_token(token: Optional[str] = None, vip: Optional[bool] = True):
120
- global BASE_URL, FEISHU_URL
121
- if vip:
122
- BASE_URL, FEISHU_URL = BASE_URL_ABROAD, FEISHU_URL_ABROAD
123
-
124
- token = token or await get_next_token_for_polling(FEISHU_URL, from_redis=True)
125
- # if vip: return token # 关闭自动刷新
116
+ async def get_access_token(token: str):
117
+ logger.debug(f"get_access_token:{token}")
126
118
 
127
119
  params = {
128
120
  'device_platform': 'web',
@@ -154,7 +146,7 @@ async def get_access_token(token: Optional[str] = None, vip: Optional[bool] = Tr
154
146
 
155
147
 
156
148
  @alru_cache(ttl=1 * 60)
157
- async def get_request_policy(token, vip: Optional[bool] = True):
149
+ async def get_request_policy(token):
158
150
  """
159
151
  {
160
152
  "data": {
@@ -169,11 +161,7 @@ async def get_request_policy(token, vip: Optional[bool] = True):
169
161
  }
170
162
  }
171
163
  """
172
- token = await get_access_token(token, vip)
173
-
174
- global BASE_URL, FEISHU_URL
175
- if vip:
176
- BASE_URL, FEISHU_URL = BASE_URL_ABROAD, FEISHU_URL_ABROAD
164
+ token = await get_access_token(token)
177
165
 
178
166
  headers = {
179
167
  'token': token,
@@ -196,14 +184,11 @@ async def get_request_policy(token, vip: Optional[bool] = True):
196
184
 
197
185
 
198
186
  @retrying(predicate=lambda r: r.base_resp.status_code in {1000061, 1500009}) # 限流
199
- async def create_task(request: VideoRequest, token: Optional[str] = None, vip: Optional[bool] = True):
200
- global BASE_URL, FEISHU_URL
201
- if vip:
202
- BASE_URL, FEISHU_URL = BASE_URL_ABROAD, FEISHU_URL_ABROAD
203
-
204
- refresh_token = token or await get_next_token_for_polling(FEISHU_URL, from_redis=True)
187
+ async def create_task(request: VideoRequest, token: Optional[str] = None):
188
+ refresh_token = token or await get_next_token_for_polling(FEISHU_URL, from_redis=True, check_token=check_token)
205
189
  # refresh_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDA0NzA4NzgsInVzZXIiOnsiaWQiOiIzMjg2MDg4ODkzNTA4MTU3NDQiLCJuYW1lIjoiUm9idXN0IEdlcnRydWRlIiwiYXZhdGFyIjoiaHR0cHM6Ly9jZG4uaGFpbHVvYWkudmlkZW8vbW9zcy9wcm9kLzIwMjQtMTItMjgtMTYvdXNlci91c2VyX2F2YXRhci8xNzM1Mzc1OTI0OTkyMTcxMDY3LWF2YXRhcl8zMjg2MDg4ODkzNTA4MTU3NDQiLCJkZXZpY2VJRCI6IjMwMjgzMzc1OTUxMjc2NDQxNyIsImlzQW5vbnltb3VzIjpmYWxzZX19.dLNBSHjqnKutGl3ralS2g8A-RodHjOdos11vdpbkPwc"
206
- token = await get_access_token(refresh_token, vip)
190
+
191
+ token = await get_access_token(refresh_token)
207
192
 
208
193
  payload = {
209
194
  "desc": request.prompt,
@@ -228,7 +213,7 @@ async def create_task(request: VideoRequest, token: Optional[str] = None, vip: O
228
213
  # "name": "duikoux.jpg", "type": "jpg"}],
229
214
  # "modelID": "23021", "quantity": "1"}
230
215
  else:
231
- data = await upload(file, token=refresh_token, vip=vip)
216
+ data = await upload(file, token=refresh_token)
232
217
  file_data = {
233
218
  "id": data['data']['fileID'],
234
219
  "name": "_.png",
@@ -291,7 +276,7 @@ async def create_task(request: VideoRequest, token: Optional[str] = None, vip: O
291
276
 
292
277
  task_id = (data.get('data') or {}).get('id', '')
293
278
  response = VideoResponse(
294
- task_id=f"hailuo-{task_id}" if not vip else f"hailuoai-{task_id}",
279
+ task_id=f"hailuoai-{task_id}",
295
280
  base_resp=data.get('statusInfo', {}),
296
281
  system_fingerprint=refresh_token
297
282
  )
@@ -331,9 +316,6 @@ async def create_task(request: VideoRequest, token: Optional[str] = None, vip: O
331
316
 
332
317
  # 307134660730421250
333
318
  async def get_task(task_id: str, token: str):
334
- global BASE_URL, FEISHU_URL
335
- if "hailuoai" in task_id:
336
- BASE_URL, FEISHU_URL = BASE_URL_ABROAD, FEISHU_URL_ABROAD
337
319
 
338
320
  task_id = task_id.rsplit('-', 1)[-1]
339
321
 
@@ -380,9 +362,8 @@ async def get_task(task_id: str, token: str):
380
362
 
381
363
 
382
364
  # https://hailuoai.video/v1/api/user/equity?device_platform=web&app_id=3001&version_code=22201&uuid=3de88ad0-8a38-48a9-8ed3-0d63f9c71296&lang=en&device_id=302833759512764417&os_name=Mac&browser_name=chrome&device_memory=8&cpu_core_num=10&browser_language=zh-CN&browser_platform=MacIntel&screen_width=1920&screen_height=1080&unix=1731571578000
365
+ @alru_cache(ttl=3600)
383
366
  async def check_token(token, threshold: int = 30, **kwargs):
384
- BASE_URL, FEISHU_URL = BASE_URL_ABROAD, FEISHU_URL_ABROAD
385
-
386
367
  if not isinstance(token, str):
387
368
  return await check_tokens(token, check_token)
388
369
 
@@ -426,9 +407,9 @@ if __name__ == '__main__': # 304752356930580482
426
407
  # p = "/Users/betterme/PycharmProjects/AI/MeUtils/meutils/data/cowboy-hat-face.webp"
427
408
  # arun(upload(Path(p).read_bytes(), token=token, vip=vip))
428
409
  # arun(upload(Path(p).read_bytes(), vip=False))
429
- access_token = arun(get_access_token())
410
+ # access_token = arun(get_access_token())
411
+ # arun(upload(Path("img.png").read_bytes(), token=access_token))
430
412
  # arun(upload(Path("img.png").read_bytes(), token=access_token))
431
- arun(upload(Path("img.png").read_bytes(), token=access_token))
432
413
 
433
414
  # arun(get_task(task_id="307137575113703427", token=token)) # 307173162217783304
434
415
  # arun(get_task(task_id="307148849188945924", token=token))
@@ -448,7 +429,7 @@ if __name__ == '__main__': # 304752356930580482
448
429
  first_frame_image="https://oss.ffire.cc/files/kling_watermark.png" # 307173162217783304
449
430
  )
450
431
 
451
- r = arun(create_task(request, token=token, vip=vip))
432
+ r = arun(create_task(request, token=token))
452
433
  arun(get_task(task_id=r.task_id, token=r.system_fingerprint))
453
434
  #
454
435
  #
@@ -62,6 +62,9 @@ async def generate(request: RecraftImageRequest, token: Optional[str] = None):
62
62
  logger.debug(params)
63
63
 
64
64
  response = await client.get("/poll_recraft", params=params)
65
+ logger.debug(response.text)
66
+ logger.debug(response.status_code)
67
+
65
68
  response.raise_for_status()
66
69
  metadata = response.json()
67
70
  logger.debug(metadata)
@@ -128,6 +131,7 @@ if __name__ == '__main__':
128
131
  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"
129
132
  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"
130
133
  token = "_gcl_au=1.1.906962865.1730362257; _ga=GA1.1.435165527.1730362257; _fbp=fb.1.1730362257600.714008794112161913; AMP_MKTG_7268c9db0f=JTdCJTdE; _tt_enable_cookie=1; _pin_unauth=dWlkPU0yWmxPR1JsWkRJdE5qZGlZeTAwTWpNeUxXRmpNVEV0TlRrd1l6RTNZelEwTldZMw; __zlcmid=1OVn8OoYVNvKEWM; __stripe_mid=d21b2291-edb8-4cb1-8fac-05c6a9493ca8d85a3c; _ga_ME15C3DGRL=deleted; _ttp=412qSInHGw3jjdyNR6K4tBIYmNZ.tt.1; __Host-next-auth.csrf-token=5a254fcd5cf01dbe6f4d38ff6653073673eb96145321a4aa4e032c1361db4067%7Cfcc1ced5fcc03aca73a9b3374bfaf0f518079e6802a706311c2428b8b12a5639; _clck=uflztg%7C2%7Cfsf%7C0%7C1765; __Secure-next-auth.callback-url=https%3A%2F%2Fwww.recraft.ai%2F; _ga_ME15C3DGRL=GS1.1.1736384021.94.1.1736384813.0.0.0; _uetsid=3bef14a0cd5c11ef8908d9361f23bf21; _uetvid=a8a766f0975f11ef9b7921e48a0cd258; AMP_7268c9db0f=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI2OTE1YzI1My1jMTJjLTQ5ODYtYjM3Ni0xMTI3Y2ZmMTFlMjglMjIlMkMlMjJ1c2VySWQlMjIlM0ElMjJjNDdkY2ZiYi0yOWE5LTQ1Y2EtYWRiZS1hM2ZhYWZiODhkNzQlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzM2Mzg0MDIxMjg4JTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTczNjM4NDgxNTMzMSUyQyUyMmxhc3RFdmVudElkJTIyJTNBMTQ3JTJDJTIycGFnZUNvdW50ZXIlMjIlM0E0MiU3RA==; _clsk=lpjwif%7C1736384816977%7C21%7C1%7Cq.clarity.ms%2Fcollect; __Secure-next-auth.session-token.0=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..i9IpV1p6GdtCwBJf.GhX0MZyY886Dpslr3HPr3QQrF4cLCeL14lby_VsLhOfc1VBDE5ZmRX6fYfPtHPJNfYIPlj8U83UVMZyNmiSeRCTLDKKht5oWGdbMS8Q6KCLYzpFtO3wgfROiWTy4Jaq2XdXvTJiFHpHtg4FNsDcKfD-zyCt6-ffuq7gTtKhWl3ie33vu2Y1dBksAadej9hGGsozwQZRju2GaNw2QpWdgbP-cYbojKSFxFkara0-_yZgXYtjlSNXpj-AXI6wmkDi701dyZPHS0i_eNRg4d36SMOLTWqPxtgk-0PjYKGAndHeLlrypt_4HS94WAy5_Ond46YIvFtY6MS5P0wQePXka_kj95uV7_Vj-aBNhcJhOjv7FP2TRvOqjx0aKIS6ilq6ljCIrAp4iC-P-uEpRWxQ7l4VwejsrM1_k8IzatOUFjNxhmTsGQG8t-CaN6zq0GI6SkSXlOj_X6jUIfu7aaT4nvzNM_yDz53P-H90mgl6-6KmHhldPRZPPwA6mOci1sZ2hQp4l4nZCSSXmrJ9KSEIhcqUM599xDL90bBmIyb0LMwa9smXavJFq0dlmjcqGGmfCWmriNf7eSw96ewhOT-bA-yNt7Igmsj0YAV59_FVBicRwPkMSZshfikl0Pxz_pmTQrSllF1WXeyCEflhqncXRXNnl1n23l3rC6XK72fyMX7Q4kB1G3stQpZ8BZ2jaoV4P9RmKWje_ruY30myXj4Kf8Hzh5YjzfxAdVv8aVCOceuAcQCaZzySFSAWV2R7XLONGCOiQqcRyHeP4KzEac-w_w_8AgOpn5Bt0vkzw_roK4WK13mNyrx-sLbAy-Pufuln_6V_hyJiYdPnC3kykTFveaeYNrSTrhOSMSTRWMwbO32apU-6a5l42FWZVQaVRTYw4IN7aOrhbqINzSN-yRlkze_4YfRUqIE6ip6r8OSjsu65WdmA2haUaTlPwSfsJh2zm-SlDRPUlZkUXO1rKlfWccdUarlAyX085fSxs3amQlg5SBe9ziyCH0-1FIY0fJN96dYrNcHXWxUYu01UKbR1IX27OhOj6gmgtUHeZZorJZ_Ce4fnuTfnK65Athovqjy0_U6JXwJoQ9T_we5IlYQ3Rv95ezdbA7HSY49F3PuCxpf_-QujriKIWTGRQ_KbJy3bOxv1dV7mmHvMBumNVOq3VIqyKS3NnjtD2fjGcGWh8sCViU6wOCTERI6lbxMsHL6oMKTvzQuIp80DgKyQOWO5LoIPKtpz4b0mf6A1Xncz0ProBBvL7ZIiFEpiiFztqQJigVTsRirTMOqViOqU4Eht6AIvIczsW6GyuOK7gCgty6RezCHQsSwXD0FfwpvxjCFZQZ4A4ZFatHCirBDv6djBdBJIOJoSVVkoN6_Q2E8U4C7J1J5UQYZZq1fm5xBjEwQBzdP18doD4q7KNsgQIjGU5ZMJsaZgUNAhjU-UyA3BwLXhtmpMGnx9G2Pxf11OgHOUUYKd-DsX4yFrelf0QFe6VI0TMz7V8xpJrW-BTYYmaCupxkyLmwRfTO_HDkbyKoZES2yiCFh-Vfkyxz2gLuBhhryczt4HogMh_CmuHcOWPv6TAuH4QDZpyBWzyThBx3ZKvLfxo87LwbQgRfoediXV2c9DEWTx-pBcMosr1L-GZQ1eTVDVhcmsVshVL9Nb-DYh7C7-d97aq1Wl06Ljsf74xzijQPTgQAMgqwdPOWBg_WvRZP_cxiiz2XsUbbjYW2uQeqFL8dhYmzr8t2ABPpP9_damETeR5bkYA2jOwF6sNwhe0uIXP4xjN2xqzJ4OnSE_zeh1L5bqRajroLnYbRsZ0QwBoqf7am51RFzcyZRvRPKxLbA3rRDqKun41AcC3usyrFw6wX1dBH9IBLfqwP4qVPlwMdpVkQuH6A0rawFDM7ulJ6uYWy5XuiSUGejnBt6LICYki0C3bgOV--932msjQlzwVcWPHGWP634teJ8do0UMDIlII9ogA307POi8j4Ab92QxWLt1DAe3bh-vBkuEvIzmiKvq3RjgP52ysvTlDZtqEi19RkVBJ55aBNAK84oddVNrYIv0-SZ736WxqtpqNQggOkwubG96a9IL2K0nM3lD-IweswFzhd5d2t2GIwDnkRWCn_3sMFblMFGsvof-dbcp2fKgB5BFFtel6DO8cKZiGrFTKNNaTUEIpQYFZueXZMDMhpGFmsbWcABXJAyQk4gl5DR0hY_-zRrEnaBQ5f_wquwpENKFl0tBzVKLi45F3jgrnMYAyyIR4GVrS4x2a3PIBFl2HPwDvPNfuP2lnICf6Bbeh84BhI_V2aCoaxur4OTuc4E1HUM_p0gLq0d3xVpVbmYlDSff7YyrnwP0FdaiTt0dcMKyoGL44W_WdvPete8U6hlNhGSySHp-srMFyl4eMliYAITeiRwwZuYjfnW95-kK1rTm6tiBlpBJcSLEaxe6iZTTJcEAm5MLO07jEny_C6thxrYPug_5Ih8SdM9DOEkqF0slCWne82S8x49dp0pMllCZJAvtdYQbEmtE2KjytyKU5ns6OiraQpFm16fQGpmu7HYQbBU0fwASerwXdMRa6e7lTVGLd2mdDoF9gBdQClA75LyaKdrPg7rkV4x2NOulsFsPSPxhyQl-r0jqc-7qMs0hCbKr8I7O04T5F8Jg0ZWvYvUCvbnfiW767XltnjN_hNy3zQDVjR-4XxlYWmq_wzj7a0U5r9MzISR_DsFEP-mI5qKXfNFUzatM0UmKs-m1YLxm3InlWaA0VH1W5pABHK-npbuHmUlQ5_HBvO0JK84P0iif9M2-KXIEOxzMPLOw9cjs0j98hETINMm2-_6AGcNVrqLAmxrgE9sREJ2YVSweVVxLzi0UvZnjPwOs4qAaM3O2IWy5UZ1cB6bFxAj2HvDBQZ3j04kPxT0Sl33MGQS0Td7J_9ap8r2IBQUof9bOGjjMZHV1YsIcHVC5vCT2EZCovmz1avFFW04o0B2DC-A1kTujPp4SWtxT33470WPSk1CMGK_tKv0w2ou6lTkdGdTWCTDA2uNMVZRGxYwGnGo1q0OkC_a60JlvzPTXbOVcfZu_lcATm-aLt60H9jHuCBmKEvg46B5Qc2TZW3Dwz2T7Tl125jkfPWYEBoVnqB7mNPzhZxaDY3sMd8I0O_FNeNRZ3BEqpJkNWIMOnf8aZ6nCoMw8DdpL1POGvAZ-XhedkAIICUkJ_SYbvho2lZ3oEIAFxl5arPmQPnIpW4Abry_PWYvZx7kVXA0frDjYZv89NlctrGKMBfyYZVKTRnoQkXf-K6JGCZcySJuuWOuADGQfNTarwuy6M9e7k83d-mFZTYHhllPQakN8xXZ2ExTBDIHH7D9y1qKoOwb22Lg8hjv7cD9uq21iZTmD2K45D4W76Yrz1rX3n8t1tv1l1HTSB3UeuoCGaT5LkCSDKsHhM5iTChuIfxVefYBZh9We-TiU8QyHOxud1zOpE8Op6Ky9dUaCnUl5YUxeDntgeceaqP20ZmjlwvADd6P8UOjvvq-uZAhSlJ9Q4rYmO4pP2lfaRuo-thyrowHwOETPC8kmsMcm43MqFCzNNqnyXDHuyggjexTrk8T0swpo-eeBpvElZcP9-U5bFbS5vyb5H4tOLspSo8JcxsRVT4b32plWTRT-EQpAosu5IQNO-MQAGKnwqgzwhiePc8_K-6QbfDaZ7UwvCxJBvp8Ql5NRgMAUiViLuxD4BkUaKXuouXp9UcvyW6qrJFHVzyDVjTKW7oG0lYLhRREePp3OLqLUH-upSEWFMnkOljpn_kE3W_F62fnyC-6YG25kGKhw8bMpIVaKLAfe0SXto8pKrQPb4cLKTTTPHXCz9PKtO1xE2qHIE2Ys1k7-JlkTK6AvoY6sI6t3EPL-1rXPmB8P; __Secure-next-auth.session-token.1=yFjlKz8Sy8-L5993eI09Y6KcuLf5lx4fC99u6YFtWp_BQLG0Mk0GI7RllqeDlxU-5QO9VYeBlTNh-sp8SJ7hkNv5hpMnWaCE-7sPMHLcJAFNA5Sx43a4aJglZFEkCI8RFe4HGAusm9qQG18PBByIKj_ZhLnsS9zXaGQ5YL7eX9QVWrpkowuA35WfksZp3mvwkGR_6LrmpR7kmmK2_C_X5e5SsXTXhUfrBT8r79I39P18D9E1S-hT31ETyajNNgw-u3BHbET4buRhT043W_c3x2RwIc6Fzs5DAeTUFR39e3_jT-ge_RIG5-1YRhvtEXHVUInRVeoYorqzN62JO-8RDeBNry6wUGR9O7QCLOH_a0w.976ySjYDq2pGONqc_zx8Ng"
134
+ token = None
131
135
 
132
136
  # arun(get_access_token())
133
137
  data = {
@@ -143,10 +147,11 @@ if __name__ == '__main__':
143
147
  **data
144
148
  )
145
149
 
146
- # with timer():
147
- # arun(generate(request, token=token))
148
- # tokens = [token]
150
+ with timer():
151
+ arun(generate(request, token=token))
149
152
 
150
- tokens = list(arun(aget_spreadsheet_values(feishu_url=FEISHU_URL, to_dataframe=True))[0]) | xfilter_
153
+ # tokens = [token]
151
154
 
152
- r = arun(check_token(tokens))
155
+ # tokens = list(arun(aget_spreadsheet_values(feishu_url=FEISHU_URL, to_dataframe=True))[0]) | xfilter_
156
+ #
157
+ # r = arun(check_token(tokens))
@@ -40,7 +40,7 @@ async def create_draft_content(request: ImageRequest, token: str):
40
40
 
41
41
  if urls := parse_url(request.prompt):
42
42
  url = urls[-1]
43
- image_uri = upload_for_image(url, token)
43
+ image_uri = await upload_for_image(url, token)
44
44
 
45
45
  request.prompt = request.prompt.replace(url, '')
46
46
  request.model = "high_aes_general_v20_L:general_v2.0_L" # 2.1不支持图片编辑
@@ -164,8 +164,8 @@ async def create_draft_content(request: ImageRequest, token: str):
164
164
  "main_component_id": main_component_id,
165
165
  "component_list": [component]
166
166
  }
167
-
168
- logger.debug(bjson(draft_content))
167
+ logger.debug(draft_content)
168
+ # logger.debug(bjson(draft_content))
169
169
 
170
170
  return draft_content
171
171
 
@@ -181,6 +181,9 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
181
181
  request.model = "high_aes_general_v20_L:general_v2.0_L"
182
182
 
183
183
  draft_content = await create_draft_content(request, token)
184
+
185
+ logger.debug(json.dumps(draft_content))
186
+
184
187
  payload = {
185
188
  "extend": {
186
189
  "root_model": request.model,
@@ -194,7 +197,6 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
194
197
  }
195
198
  }
196
199
 
197
- logger.debug(bjson(payload))
198
200
 
199
201
  async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=60) as client:
200
202
  response = await client.post(url, json=payload)
@@ -276,7 +278,10 @@ async def generate(request: ImageRequest):
276
278
  response = await get_task(task_response.task_id, task_response.system_fingerprint)
277
279
  logger.debug(response)
278
280
  if response.status.lower().startswith("fail"):
279
- raise Exception(response.message)
281
+ raise HTTPException(
282
+ status_code=status.HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS,
283
+ detail=response.message
284
+ )
280
285
 
281
286
  if data := response.data:
282
287
  return {"data": data}
@@ -312,10 +317,18 @@ if __name__ == '__main__':
312
317
  # t3 = ("10186352959490", "eb4d120829cfd3ee957943f63d6152ed")
313
318
  #
314
319
  # arun(get_task(*t3))
320
+ data = {
321
+ "model": "seededit",
322
+ "prompt": "https://oss.ffire.cc/files/kling_watermark.png 让这个女人带上墨镜,衣服换个颜色",
323
+ "size": "1024x1024"
324
+ }
325
+ # arun(generate(ImageRequest(**data)))
315
326
 
316
- arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
317
- # 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"
318
- # request = ImageRequest(prompt=prompt)
327
+ # arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
328
+ 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
+ request = ImageRequest(prompt=prompt)
319
330
  # task = arun(create_task(request))
320
331
 
321
332
  # arun(get_task(task.task_id, task.system_fingerprint))
333
+
334
+ arun(generate(request))
@@ -16,6 +16,8 @@ from meutils.apis.proxy.ips import FEISHU_URL_METASO, get_one_proxy, get_proxies
16
16
  from meutils.schemas.openai_types import ChatCompletionRequest
17
17
  from meutils.notice.feishu import send_message
18
18
 
19
+ from meutils.llm.clients import zhipuai_client
20
+
19
21
  token = "wr8+pHu3KYryzz0O2MaBSNUZbVLjLUYC1FR4sKqSW0p19vmcZAoEmHC72zPh/fHtOhYhCcR5GKXrxQs9QjN6dulxfOKfQkLdVkLMahMclPPjNVCPE8bLQut3zBABECLaSqpI0fVWBrdbJptnhASrSw=="
20
22
 
21
23
  MODELS = {
@@ -27,6 +29,8 @@ MODELS = {
27
29
  "ai-search-pro:scholar": "research"
28
30
  }
29
31
 
32
+ ""
33
+
30
34
 
31
35
  async def get_session_id(request: MetasoRequest, headers: Optional[dict] = None, proxy: Optional[str] = None):
32
36
  if proxy:
@@ -86,7 +90,13 @@ async def create(request: ChatCompletionRequest, response_format: Optional[str]
86
90
  if ":" in request.model:
87
91
  _, engine_type = request.model.split(':')
88
92
 
93
+ model = None
94
+ if request.model.startswith("deepseek"):
95
+ model = "ds-r1"
96
+ system_fingerprint = "deepseek-r1"
97
+
89
98
  request = MetasoRequest(
99
+ model=model,
90
100
  mode=MODELS.get(request.model, "concise"),
91
101
  engineType=engine_type,
92
102
  question=request.last_content,
@@ -139,14 +149,32 @@ async def create(request: ChatCompletionRequest, response_format: Optional[str]
139
149
 
140
150
  reference_mapping = {}
141
151
  async for chunk in response.aiter_lines():
152
+
142
153
  if (chunk := chunk.strip()) and chunk != "data:[DONE]":
143
154
  # logger.debug(chunk)
144
155
 
145
156
  try:
146
157
  response = MetasoResponse(chunk=chunk)
158
+ logger.debug(response)
159
+
160
+ if not response.content and response.data.get("infoType") == 'weather':
161
+ # yield response.data
162
+
163
+ ################################################################ todo: 外部搜索
164
+ chatcompletionchunks = await zhipuai_client.chat.completions.create(
165
+ model="glm-4-flash",
166
+ messages=[
167
+ {"role": "user", "content": response.data}
168
+ ],
169
+ stream=True
170
+ )
171
+ async for chatcompletionchunk in chatcompletionchunks:
172
+ yield chatcompletionchunk.choices[0].delta.content
173
+ ################################################################
174
+ break
147
175
 
148
176
  if len(response.content) == 1 and response.content.startswith('秘'): # 替换 模型水印
149
- response.content = f"{system_fingerprint}AI搜索,它是一款能够深入理解您的问题的AI搜索引擎。"
177
+ response.content = f"{system_fingerprint} AI搜索,它是一款能够深入理解您的问题的AI搜索引擎。"
150
178
  yield response.content
151
179
  break
152
180
 
@@ -199,13 +227,16 @@ if __name__ == '__main__':
199
227
  # arun(get_access_token(request))
200
228
 
201
229
  request = ChatCompletionRequest(
202
- # model="",
230
+ # model="deepseek-search",
231
+ model="deepseek-r1-search",
203
232
  # model="ai-search",
204
- model="ai-search:scholar",
233
+ # model="ai-search:scholar",
205
234
  # model="ai-search-pro:scholar",
206
235
 
207
236
  # model="search-pro",
208
237
 
238
+ messages=[{'role': 'user', 'content': '今天南京天气怎么样'}]
239
+
209
240
  )
210
241
 
211
242
  arun(create(request))
@@ -185,7 +185,7 @@ async def check_token(token, threshold: float = 0):
185
185
 
186
186
 
187
187
  if __name__ == '__main__':
188
- token = "sajssdk_2015_cross_new_user=1; _ga=GA1.1.338141957.1727086892; Shunt=; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjgzODMxMDYsImlhdCI6MTcyNzA4NzEwNiwiaXNzIjoiaWFtIiwic3ViIjoiMjQxNjY4MjA0OTYxNDUwNCJ9.Av3Uz9wG0L9ENvClhC9repoRthUm8wgspT5pWcmqaqs; _ga_ZJBV7VYP55=GS1.1.1727086892.1.1.1727087109.0.0.0; sensorsdata2015jssdkcross=dfm-enc-%7B%22Va28a6y8_aV%22%3A%22sSEnntsASGnESHAS%22%2C%22gae28_aV%22%3A%22EGsErnnGsGuGiH-AtVyGiIuniVIEg-snAAEEHE-EIsREAS-EGsErnnGsGyuyy%22%2C%22OemO2%22%3A%7B%22%24ki8r28_8eiggay_2mbeyr_8cOr%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24ki8r28_2rieyz_lrcMmeV%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24ki8r28_ergreere%22%3A%22%22%7D%2C%22aVr68a8ar2%22%3A%22rc3liZ7ku67OV5kgPsGCiskkDskl3qmawFlcwZKsQqlcpZ3HPFK8wXzlPhkzws3sPZNhwZP8wqPMwX1JQF18wFwcQh1MQvAJpF3JWFPspF3HPsxqPc323a7OW9dbV9kArdG2usVOukGOWv3n3q3AwFPspX3MQXlswFNEwXNagN%3D%3D%22%2C%22za28mec_kmfa6_aV%22%3A%7B%226ior%22%3A%22%24aVr68a8c_kmfa6_aV%22%2C%22Cikbr%22%3A%22sSEnntsASGnESHAS%22%7D%7D"
188
+ token = "io=Q07avSD7V1xT3PIAAZOO; HMACCOUNT_BFESS=5E705F99269C2211; Hm_lvt_a3c8711bce1795293b1793d35916c067=1737419786; Hm_lpvt_a3c8711bce1795293b1793d35916c067=1737419786; HMACCOUNT=5E705F99269C2211; NEXT_LOCALE=zh; _ga=GA1.1.1631944243.1737419791; sajssdk_2015_cross_new_user=1; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3Mzg3MTU4MDQsImlhdCI6MTczNzQxOTgwNCwiaXNzIjoiaWFtIiwic3ViIjoiMjYxNDYwNzk0OTg5NjgyNSJ9.KmEoctBweMPmqSH-gTK00wHIb1iOz-UoMCf55zvhLfE; Shunt=; sensorsdata2015jssdkcross=dfm-enc-%7B%22Va28a6y8_aV%22%3A%22snESnARGSGtGntsH%22%2C%22gae28_aV%22%3A%22EGStnSisEnunHS-AAVrGEiGrSrIVnst-EuHsHnIR-GsEnAA-EGStnSisEnyERyG%22%2C%22OemO2%22%3A%7B%22%24ki8r28_8eiggay_2mbeyr_8cOr%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24ki8r28_2rieyz_lrcMmeV%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24ki8r28_ergreere%22%3A%22%22%7D%2C%22aVr68a8ar2%22%3A%22rc3liZ7ku67OV5kgPsGCiskkDskl3qmawFlApXPAPF3JQo3sQFN8wXLlWFlJPFkkQ9KhWXPcpvAJPqKcQFPhQcAHwq1swX08wFlApXPAPF3JQowJQswH3aMax9klWZHAiD7HDsJCWskbDskl3qmawqPJQXPMQhlApFfHQqfcQ4xG%22%2C%22za28mec_kmfa6_aV%22%3A%7B%226ior%22%3A%22%24aVr68a8c_kmfa6_aV%22%2C%22Cikbr%22%3A%22snESnARGSGtGntsH%22%7D%7D; aws-waf-token=fb511419-d35f-4c57-a627-a0f362c1d04b:AAoAjVEDV+K9AAAA:ciqXmsweAEsZksfstr3LIrBKbKpvwnmWcdovZIcjh8DPtGXU4Fb5jxZMRBSIwrc7q9V0xJJZn9HW87Gkq9Y06CTKYUcExMKgu0RCm7Y+z7p6OERTrwY0+ACEWHW7B398/TTBTVW1+hjLkvO9DWrEJx4goQzZt+SFW/jZEITLszARozPYzeTEkvHJrIQkJLS0YbcxLRhaLtVQD+D0q++D8YFPsIbRgYRmeHpabAB9GbSV7vTKXREhdHyzj0QEkmmK6fyr; _ga_ZJBV7VYP55=GS1.1.1737419791.1.1.1737419806.45.0.0; SERVERCORSID=354f7c594b90555807f965c4af1d10d3|1737419812|1737419793"
189
189
  # FEISHU_URL = "https://xchatllm.feishu.cn/sheets/GYCHsvI4qhnDPNtI4VPcdw2knEd?sheet=Hcr2i8"
190
190
  # arun(get_next_token_for_polling(FEISHU_URL, check_token=check_token))
191
191
  # arun(get_next_token_for_polling(FEISHU_URL_VIP, check_token=check_token, max_size=10000))
meutils/caches/acache.py CHANGED
@@ -11,9 +11,28 @@ import os
11
11
 
12
12
  from meutils.pipe import *
13
13
 
14
- from aiocache import cached, Cache, RedisCache
14
+ from aiocache import cached
15
+
16
+ from aiocache import cached, Cache, RedisCache, caches
15
17
  from aiocache import multi_cached
16
18
 
19
+ rcache = RedisCache(
20
+ endpoint="127.0.0.1", port=6379, namespace="me" # 缓存键前缀
21
+ )
22
+
23
+
24
+ # @cached(ttl=60)
25
+ # async def cached_fc(user_id, **kwargs):
26
+ # logger.debug(user_id)
27
+ # return False
28
+
29
+
30
+ @cached(ttl=60, cache=rcache)
31
+ async def redis_fc(user_id, **kwargs):
32
+ logger.debug(user_id)
33
+ return False
34
+
35
+
17
36
  # @multi_cached(ttl=60, caches=[Cache.MEMORY, Cache.MEMORY])
18
37
  # async def complex_function(user_id, **kwargs):
19
38
  # logger.debug(user_id)
@@ -24,22 +43,24 @@ from aiocache import multi_cached
24
43
 
25
44
  # Cache.REDIS
26
45
  # mcache = cached(ttl=60, cache=Cache.REDIS)(cached)
27
-
28
-
29
- rcache = Cache.from_url("redis://:chatfirechatfire@110.42.51.201:6379/11")
30
- print(rcache)
46
+ # from aiocache import Cache
47
+ #
48
+ # Cache(Cache.REDIS)
49
+ #
50
+ # rcache = Cache.from_url("redis://:chatfirechatfire@110.42.51.201:6379/11")
51
+ # print(rcache)
31
52
 
32
53
 
33
54
  # @cached(ttl=60)
34
- @cached(ttl=15, cache=rcache)
35
- async def complex_function(user_id, **kwargs):
36
- logger.debug(user_id)
37
- return False
38
-
55
+ # @cached(ttl=15, cache=rcache)
56
+ # async def complex_function(user_id, **kwargs):
57
+ # logger.debug(user_id)
58
+ # return False
59
+ #
39
60
 
40
61
  class A(BaseModel):
41
62
  a: Any = 1
42
63
 
43
64
 
44
65
  if __name__ == '__main__':
45
- arun(complex_function(A(a={})))
66
+ arun(redis_fc(A()))
meutils/caches/demo.py ADDED
@@ -0,0 +1,28 @@
1
+ import asyncio
2
+
3
+ from collections import namedtuple
4
+
5
+ from aiocache import cached, Cache, RedisCache
6
+ from aiocache.serializers import PickleSerializer
7
+ # With this we can store python objects in backends like Redis!
8
+
9
+ Result = namedtuple('Result', "content, status")
10
+
11
+
12
+ @cached(
13
+ cache=RedisCache(), key="key", serializer=PickleSerializer(), port=6379, namespace="main")
14
+ async def cached_call():
15
+ print("Sleeping for three seconds zzzz.....")
16
+ await asyncio.sleep(3)
17
+ return Result("content", 200)
18
+
19
+
20
+ async def run():
21
+ await cached_call()
22
+ await cached_call()
23
+ await cached_call()
24
+ cache = Cache(Cache.REDIS, endpoint="127.0.0.1", port=6379, namespace="main")
25
+ await cache.delete("key")
26
+
27
+ if __name__ == "__main__":
28
+ asyncio.run(run())
meutils/data/VERSION CHANGED
@@ -1 +1 @@
1
- 2025.01.29.10.00.47
1
+ 2025.02.06.13.05.49
@@ -35,23 +35,9 @@
35
35
  <summary><b>大额对公,请联系客服</b></summary>
36
36
  </details>
37
37
 
38
- ## 2025-01-27(预祝大家新年快乐)
39
-
40
- ### 充值活动
41
-
42
- - 充值200增送 5%
43
-
44
- - 充值500增送 10%
45
- - 充值1000增送 20%
46
- - 充值2000增送 25%
47
-
48
- ### 新上线模型Deepseek系列
49
-
50
- - deepseek-v3
51
- - deepseek-r1
52
- - deepseek-r1:7b
53
-
54
-
38
+ ## 2025-02-06(预祝大家新年快乐)
39
+ - deepseek-ai/deepseek-v3
40
+ - 即日起至北京时间 2025-02-09 00:00 同步官网倍率
55
41
 
56
42
 
57
43
  ---