MeUtils 2025.2.14.14.14.57__py3-none-any.whl → 2025.2.20.17.30.7__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.20.17.30.7.dist-info/METADATA +707 -0
- {MeUtils-2025.2.14.14.14.57.dist-info → MeUtils-2025.2.20.17.30.7.dist-info}/RECORD +34 -29
- examples/_openaisdk/_openai_chatfire.py +42 -0
- examples/_openaisdk/openai_chatfire.py +8 -3
- examples/_openaisdk/openai_gitee.py +7 -4
- examples/_openaisdk/openai_images.py +5 -2
- meutils/apis/fal/images.py +83 -19
- meutils/apis/fal/pd.py +13 -0
- meutils/apis/fal/videos.py +31 -12
- meutils/apis/images/edits.py +4 -2
- meutils/apis/images/recraft.py +9 -6
- meutils/apis/jimeng/common.py +14 -3
- meutils/apis/jimeng/images.py +16 -6
- meutils/apis/kling/api.py +7 -5
- meutils/apis/search/zhipu.py +80 -0
- meutils/apis/siliconflow/images.py +17 -15
- meutils/apis/vidu/vidu_video.py +2 -1
- meutils/caches/acache.py +1 -1
- meutils/data/VERSION +1 -1
- meutils/decorators/contextmanagers.py +47 -4
- meutils/io/files_utils.py +1 -1
- meutils/llm/check_utils.py +4 -2
- meutils/llm/completions/agents/search.py +1 -0
- meutils/llm/completions/gemini.py +69 -0
- meutils/llm/prompts/search_prompts.py +18 -0
- meutils/schemas/image_types.py +4 -1
- meutils/schemas/oneapi/common.py +14 -11
- meutils/schemas/vidu_types.py +16 -2
- meutils/str_utils/json_utils.py +1 -0
- meutils/str_utils/regular_expression.py +7 -2
- MeUtils-2025.2.14.14.14.57.dist-info/METADATA +0 -203
- {MeUtils-2025.2.14.14.14.57.dist-info → MeUtils-2025.2.20.17.30.7.dist-info}/LICENSE +0 -0
- {MeUtils-2025.2.14.14.14.57.dist-info → MeUtils-2025.2.20.17.30.7.dist-info}/WHEEL +0 -0
- {MeUtils-2025.2.14.14.14.57.dist-info → MeUtils-2025.2.20.17.30.7.dist-info}/entry_points.txt +0 -0
- {MeUtils-2025.2.14.14.14.57.dist-info → MeUtils-2025.2.20.17.30.7.dist-info}/top_level.txt +0 -0
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)
|
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
@@ -13,7 +13,7 @@ from meutils.pipe import *
|
|
13
13
|
from meutils.hash_utils import md5
|
14
14
|
from meutils.schemas.openai_types import TTSRequest
|
15
15
|
|
16
|
-
from meutils.schemas.jimeng_types import BASE_URL, MODELS_MAP
|
16
|
+
from meutils.schemas.jimeng_types import BASE_URL, MODELS_MAP, FEISHU_URL
|
17
17
|
from meutils.caches.redis_cache import cache
|
18
18
|
|
19
19
|
from fake_useragent import UserAgent
|
@@ -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:
|
@@ -168,16 +170,25 @@ def create_photo_lip_sync(request: TTSRequest):
|
|
168
170
|
|
169
171
|
|
170
172
|
if __name__ == '__main__':
|
173
|
+
from meutils.config_utils.lark_utils import aget_spreadsheet_values, get_series
|
171
174
|
token = "693701c43e477b7c405cc7e2fef0ddbd"
|
172
175
|
token = "eb4d120829cfd3ee957943f63d6152ed"
|
173
176
|
token = "dcf7bbc31faed9740b0bf748cd4d2c74"
|
174
177
|
token = "38d7d300b5e0a803431ef88d8d2acfef"
|
175
178
|
token = "916fed81175f5186a2c05375699ea40d"
|
176
179
|
token = "7c5e148d9fa858e3180c42f843c20454"
|
180
|
+
token = "eb4d120829cfd3ee957943f63d6152ed"
|
181
|
+
# arun(check_token(token))
|
182
|
+
|
183
|
+
# print(arun(aget_spreadsheet_values(feishu_url=FEISHU_URL, to_dataframe=True))[0].tolist())
|
184
|
+
tokens = arun(get_series(FEISHU_URL))
|
177
185
|
# arun(get_credit(token))
|
178
|
-
arun(check_token(token))
|
186
|
+
# arun(check_token(token))
|
187
|
+
for token in tokens:
|
188
|
+
if not arun(check_token(token)):
|
189
|
+
logger.debug(f"无效 {token}")
|
179
190
|
|
180
|
-
|
191
|
+
# arun(get_upload_token(token))
|
181
192
|
#
|
182
193
|
# request = ImageRequest(prompt='https://oss.ffire.cc/files/kling_watermark.png笑起来')
|
183
194
|
# arun(create_draft_content(request, token))
|
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
|
|
@@ -221,6 +227,7 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
|
|
221
227
|
)
|
222
228
|
|
223
229
|
|
230
|
+
@retrying()
|
224
231
|
async def get_task(task_id, token):
|
225
232
|
url = "/mweb/v1/get_history_by_ids"
|
226
233
|
headers = get_headers(url, token)
|
@@ -270,11 +277,14 @@ async def get_task(task_id, token):
|
|
270
277
|
# @cache: todo: cache 积分异常消耗
|
271
278
|
# @cache(ttl=3600)
|
272
279
|
async def generate(request: ImageRequest):
|
280
|
+
# logger.debug(request)
|
281
|
+
|
273
282
|
task_response = await create_task(request)
|
274
283
|
|
275
|
-
for i in range(1,
|
276
|
-
await asyncio.sleep(max(
|
284
|
+
for i in range(1, 15):
|
285
|
+
await asyncio.sleep(max(15 / i, 5))
|
277
286
|
response = await get_task(task_response.task_id, task_response.system_fingerprint)
|
287
|
+
logger.debug(f"{task_response.task_id, task_response.system_fingerprint}")
|
278
288
|
logger.debug(response)
|
279
289
|
if response.status.lower().startswith("fail"):
|
280
290
|
raise HTTPException(
|
@@ -320,11 +330,11 @@ if __name__ == '__main__':
|
|
320
330
|
data = {
|
321
331
|
"model": "seededit",
|
322
332
|
"prompt": "https://oss.ffire.cc/files/kling_watermark.png 让这个女人带上墨镜,衣服换个颜色",
|
323
|
-
"size": "1024x1024"
|
333
|
+
"size": "1024x1024",
|
324
334
|
}
|
325
|
-
|
335
|
+
arun(generate(ImageRequest(**data)))
|
326
336
|
|
327
|
-
arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
|
337
|
+
# arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
|
328
338
|
# 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
339
|
# request = ImageRequest(prompt=prompt)
|
330
340
|
# task = arun(create_task(request))
|
meutils/apis/kling/api.py
CHANGED
@@ -32,9 +32,9 @@ def encode_jwt_token(ak, sk):
|
|
32
32
|
return token
|
33
33
|
|
34
34
|
|
35
|
-
async def create_task(request:
|
36
|
-
token = token or await get_next_token_for_polling(API_FEISHU_URL)
|
37
|
-
token = "
|
35
|
+
async def create_task(request: BaseModel, token: Optional[str] = None):
|
36
|
+
# token = token or await get_next_token_for_polling(API_FEISHU_URL)
|
37
|
+
token = "f042ce272aa7423d93dda0599bc5f332|e272cf7fe95145ec90ca947b8e29ef4c"
|
38
38
|
ak, sk = token.split("|")
|
39
39
|
|
40
40
|
headers = {
|
@@ -43,7 +43,8 @@ async def create_task(request: VideoRequest, token: Optional[str] = None):
|
|
43
43
|
}
|
44
44
|
payload = request.model_dump(exclude_none=True)
|
45
45
|
async with httpx.AsyncClient(base_url=API_BASE_URL, headers=headers, timeout=60) as client:
|
46
|
-
response = await client.post("/v1/videos/text2video", json=payload)
|
46
|
+
# response = await client.post("/v1/videos/text2video", json=payload)
|
47
|
+
response = await client.post("/v1/images/generations", json=payload)
|
47
48
|
response.raise_for_status()
|
48
49
|
return response.json()
|
49
50
|
#
|
@@ -57,4 +58,5 @@ async def create_task(request: VideoRequest, token: Optional[str] = None):
|
|
57
58
|
if __name__ == '__main__':
|
58
59
|
# api_token = encode_jwt_token(ak, sk)
|
59
60
|
# print(api_token) # 打印生成的API_TOKEN
|
60
|
-
arun(create_task(VideoRequest(prompt="可爱的小姐姐")))
|
61
|
+
# arun(create_task(VideoRequest(prompt="可爱的小姐姐")))
|
62
|
+
arun(create_task(ImageRequest(prompt="可爱的小姐姐")))
|
@@ -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))
|
@@ -112,6 +112,7 @@ async def generate(request: ImageRequest, api_key: Optional[str] = None):
|
|
112
112
|
|
113
113
|
client = AsyncOpenAI(base_url=BASE_URL, api_key=api_key)
|
114
114
|
response = await client.images.generate(**data)
|
115
|
+
logger.debug(response)
|
115
116
|
response.model = ""
|
116
117
|
|
117
118
|
return response
|
@@ -131,21 +132,21 @@ if __name__ == '__main__':
|
|
131
132
|
"seed": None
|
132
133
|
}
|
133
134
|
|
134
|
-
data = {'model': 'flux1.1-pro',
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
data = {
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
}
|
135
|
+
# data = {'model': 'flux1.1-pro',
|
136
|
+
# 'prompt': 'Surrealism, Chinese art, fairy, close-up of the upper body, hazy, glowing, dreamy, light pink and light blue gradient long hair, beautiful and charming, dressed in cashmere-like clothing, streamlined design, elegant, fair-skinned and beautiful, delicate features, comfortable, lying on an ice blue bed, background of a crescent moon and starry sky, with a touch of romantic gifts, virtual engine rendering, 3D model, OC rendering, perfect composition, ultra-detailed details, 3D rendering close-up shot. (flux1.1-pro)',
|
137
|
+
# 'negative_prompt': '', 'n': 1, 'response_format': 'url', 'size': '1152x2048', 'num_inference_steps': 20,
|
138
|
+
# 'seed': None}
|
139
|
+
#
|
140
|
+
# data = {
|
141
|
+
# "model": "flux-dev",
|
142
|
+
# "prompt": "(Chinese dragon soaring through the clouds).(majestic, colorful, mythical, powerful, ancient).(DSLR camera).(wide-angle lens).(dawn)(fantasy photography).(Kodak Ektar 100)",
|
143
|
+
# "negative_prompt": "",
|
144
|
+
# "n": 1,
|
145
|
+
# "response_format": "url",
|
146
|
+
# "size":"1366x768",
|
147
|
+
# "num_inference_steps": 20,
|
148
|
+
# "seed": None
|
149
|
+
# }
|
149
150
|
|
150
151
|
# request = FluxImageRequest(model="flux", prompt="a dog", size="1024x1024", num_inference_steps=1)
|
151
152
|
# request = FluxImageRequest(model="flux-pro", prompt="a dog", size="10x10", num_inference_steps=1)
|
@@ -163,3 +164,4 @@ if __name__ == '__main__':
|
|
163
164
|
# )
|
164
165
|
|
165
166
|
arun(generate(request))
|
167
|
+
|
meutils/apis/vidu/vidu_video.py
CHANGED
@@ -208,7 +208,8 @@ if __name__ == '__main__':
|
|
208
208
|
d = {
|
209
209
|
"model": 'vidu-2.0',
|
210
210
|
"prompt": "这个女人笑起来",
|
211
|
-
"url": "https://oss.ffire.cc/files/kling_watermark.png" # failed to save uploads
|
211
|
+
"url": "https://oss.ffire.cc/files/kling_watermark.png", # failed to save uploads
|
212
|
+
"tail_image_url": "https://oss.ffire.cc/files/kling_watermark.png",
|
212
213
|
}
|
213
214
|
token = None
|
214
215
|
# print(bjson(ViduRequest(**d).payload))
|
meutils/caches/acache.py
CHANGED
@@ -27,7 +27,7 @@ async def cached_fc(user_id, **kwargs):
|
|
27
27
|
rcache = RedisCache(
|
28
28
|
endpoint="127.0.0.1", port=6379, namespace="me" # 缓存键前缀
|
29
29
|
)
|
30
|
-
@cached(
|
30
|
+
@cached(cache=rcache)
|
31
31
|
async def redis_fc(user_id, **kwargs):
|
32
32
|
logger.debug(user_id)
|
33
33
|
return False
|
meutils/data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2025.02.
|
1
|
+
2025.02.20.17.30.07
|
@@ -11,6 +11,7 @@
|
|
11
11
|
from meutils.pipe import *
|
12
12
|
|
13
13
|
from contextlib import contextmanager, asynccontextmanager
|
14
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed, TimeoutError
|
14
15
|
|
15
16
|
|
16
17
|
@contextmanager
|
@@ -56,10 +57,52 @@ async def atry_catcher(task="Task", fallback: Callable = None, is_trace: bool =
|
|
56
57
|
yield await fallback()
|
57
58
|
|
58
59
|
|
60
|
+
@contextmanager
|
61
|
+
def timeout_task_executor(timeout: float=3, max_workers: int = None):
|
62
|
+
"""
|
63
|
+
一个上下文管理器,用于执行任务并设置超时时间。
|
64
|
+
:param timeout: 超时时间(秒)。
|
65
|
+
:param max_workers: 线程池的最大工作线程数,默认为 None(由系统决定)。
|
66
|
+
"""
|
67
|
+
executor = ThreadPoolExecutor(max_workers=max_workers)
|
68
|
+
|
69
|
+
def execute_task(task: Callable[[], Any]) -> Any:
|
70
|
+
"""
|
71
|
+
在上下文中执行任务,并设置超时时间。
|
72
|
+
:param task: 要执行的任务函数。
|
73
|
+
:return: 任务的结果。如果超时,抛出 TimeoutError。
|
74
|
+
"""
|
75
|
+
future = executor.submit(task)
|
76
|
+
try:
|
77
|
+
return future.result(timeout=timeout)
|
78
|
+
except TimeoutError:
|
79
|
+
logger.error(f"Task was terminated due to timeout after {timeout} seconds.")
|
80
|
+
return None
|
81
|
+
|
82
|
+
try:
|
83
|
+
yield execute_task # 返回一个可调用对象,用于执行任务
|
84
|
+
finally:
|
85
|
+
executor.shutdown(wait=False) # 不等待未完成的任务,直接关闭
|
86
|
+
|
87
|
+
|
59
88
|
if __name__ == '__main__':
|
60
|
-
async def f():
|
61
|
-
|
89
|
+
# async def f():
|
90
|
+
# return 1/0
|
91
|
+
#
|
92
|
+
#
|
93
|
+
# with try_catcher("test"):
|
94
|
+
# arun(f())
|
95
|
+
|
96
|
+
def example_task():
|
97
|
+
print("Starting task...")
|
98
|
+
time.sleep(4) # 模拟耗时任务
|
99
|
+
print("Task completed!")
|
100
|
+
return "Done"
|
62
101
|
|
63
102
|
|
64
|
-
with
|
65
|
-
|
103
|
+
with timeout_task_executor(timeout=3) as execute:
|
104
|
+
try:
|
105
|
+
result = execute(example_task)
|
106
|
+
print(f"Task result: {result}")
|
107
|
+
except TimeoutError:
|
108
|
+
print("Task did not complete in time.")
|
meutils/io/files_utils.py
CHANGED
@@ -45,6 +45,7 @@ def base64_to_bytes(base64_image_string):
|
|
45
45
|
return base64.b64decode(base64_image_string.split(",", 1)[-1])
|
46
46
|
|
47
47
|
|
48
|
+
@retrying()
|
48
49
|
async def to_bytes(
|
49
50
|
file: Union[UploadFile, str, bytes],
|
50
51
|
headers: Optional[dict] = None
|
@@ -104,7 +105,6 @@ async def to_tempfile(file: Union[UploadFile, str]):
|
|
104
105
|
yield temp.name
|
105
106
|
|
106
107
|
|
107
|
-
@cache(ttl=7 * 24 * 3600)
|
108
108
|
async def to_url_fal(
|
109
109
|
file: Union[str, bytes, List],
|
110
110
|
filename: Optional[str] = None,
|
meutils/llm/check_utils.py
CHANGED
@@ -94,8 +94,10 @@ async def check_token_for_jina(api_key, threshold=1000):
|
|
94
94
|
if __name__ == '__main__':
|
95
95
|
from meutils.config_utils.lark_utils import get_next_token_for_polling
|
96
96
|
|
97
|
+
check_valid_token = partial(check_token_for_siliconflow, threshold=-1)
|
98
|
+
|
97
99
|
pass
|
98
|
-
arun(
|
100
|
+
arun(check_valid_token("sk-geevdizajhngehlkrjlgwcugcunrircpezhqijrscmtiafxj", threshold=0.1))
|
99
101
|
|
100
102
|
FEISHU_URL = "https://xchatllm.feishu.cn/sheets/Bmjtst2f6hfMqFttbhLcdfRJnNf?sheet=KVClcs"
|
101
103
|
|
@@ -103,4 +105,4 @@ if __name__ == '__main__':
|
|
103
105
|
|
104
106
|
# arun(get_next_token_for_polling(check_token=check_token_for_openai, feishu_url=FEISHU_URL))
|
105
107
|
|
106
|
-
arun(check_token_for_jina(["jina_c8da77fed9704d558c8def39837960edplTLkNYrsPTJHBF1HcYg_RkRVh0X"]*10))
|
108
|
+
# arun(check_token_for_jina(["jina_c8da77fed9704d558c8def39837960edplTLkNYrsPTJHBF1HcYg_RkRVh0X"]*10))
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : gemini
|
5
|
+
# @Time : 2025/2/14 17:36
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
|
12
|
+
from meutils.pipe import *
|
13
|
+
from meutils.llm.openai_utils import to_openai_params
|
14
|
+
from meutils.llm.clients import chatfire_client
|
15
|
+
|
16
|
+
from meutils.schemas.openai_types import chat_completion, chat_completion_chunk, ChatCompletionRequest, CompletionUsage
|
17
|
+
|
18
|
+
"""
|
19
|
+
image => file
|
20
|
+
|
21
|
+
"type": "image_url",
|
22
|
+
"image_url": {
|
23
|
+
|
24
|
+
|
25
|
+
"""
|
26
|
+
|
27
|
+
|
28
|
+
async def create(request: ChatCompletionRequest):
|
29
|
+
data = to_openai_params(request)
|
30
|
+
|
31
|
+
if request.stream:
|
32
|
+
_chunk = ""
|
33
|
+
async for chunk in await chatfire_client.chat.completions.create(**data):
|
34
|
+
chunk = chunk.choices[0].delta.content or ""
|
35
|
+
yield chunk.removeprefix(_chunk)
|
36
|
+
_chunk = chunk
|
37
|
+
|
38
|
+
else:
|
39
|
+
response = await client.chat.completions.create(**data)
|
40
|
+
# logger.info(response)
|
41
|
+
yield response.choices[0].message.content
|
42
|
+
|
43
|
+
|
44
|
+
if __name__ == '__main__':
|
45
|
+
# [
|
46
|
+
# "qwen-plus-latest",
|
47
|
+
# "qvq-72b-preview",
|
48
|
+
# "qwq-32b-preview",
|
49
|
+
# "qwen2.5-coder-32b-instruct",
|
50
|
+
# "qwen-vl-max-latest",
|
51
|
+
# "qwen-turbo-latest",
|
52
|
+
# "qwen2.5-72b-instruct",
|
53
|
+
# "qwen2.5-32b-instruct"
|
54
|
+
# ]
|
55
|
+
request = ChatCompletionRequest(
|
56
|
+
# model="qwen-turbo-2024-11-01",
|
57
|
+
model="qwen-max-latest",
|
58
|
+
# model="qwen-plus-latest",
|
59
|
+
|
60
|
+
messages=[
|
61
|
+
{
|
62
|
+
'role': 'user',
|
63
|
+
'content': 'hi'
|
64
|
+
},
|
65
|
+
|
66
|
+
],
|
67
|
+
stream=False,
|
68
|
+
)
|
69
|
+
arun(create(request))
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : search_prompt
|
5
|
+
# @Time : 2025/2/19 10:37
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description : 提示词模板
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
|
13
|
+
current_date = datetime.datetime.now().strftime("%Y-%m-%d")
|
14
|
+
|
15
|
+
system_prompt = f"""你是一个具备网络访问能力的智能助手,在适当情况下,优先使用网络信息(参考信息)来回答,
|
16
|
+
以确保用户得到最新、准确的帮助。当前日期是 {current_date}。"""
|
17
|
+
|
18
|
+
# deepseek_prompt
|
meutils/schemas/image_types.py
CHANGED
@@ -83,7 +83,7 @@ class ImageRequest(BaseModel): # openai
|
|
83
83
|
|
84
84
|
# oneapi
|
85
85
|
negative_prompt: Optional[str] = None
|
86
|
-
guidance: Optional[
|
86
|
+
guidance: Optional[float] = None
|
87
87
|
steps: Optional[int] = None
|
88
88
|
|
89
89
|
controls: Optional[dict] = {} # 额外参数
|
@@ -479,6 +479,9 @@ class ImageProcess(BaseModel):
|
|
479
479
|
|
480
480
|
response_format: Literal["url", "b64_json"] = "url"
|
481
481
|
|
482
|
+
# class Config:
|
483
|
+
# extra = "allow"
|
484
|
+
|
482
485
|
|
483
486
|
if __name__ == '__main__':
|
484
487
|
# print(ASPECT_RATIOS.items())
|