MeUtils 2025.3.1.12.23.38__py3-none-any.whl → 2025.3.3.18.25.21__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.3.1.12.23.38.dist-info → MeUtils-2025.3.3.18.25.21.dist-info}/METADATA +265 -265
- {MeUtils-2025.3.1.12.23.38.dist-info → MeUtils-2025.3.3.18.25.21.dist-info}/RECORD +24 -24
- examples/_openaisdk/openai_images.py +2 -2
- meutils/apis/baidu/bdaitpzs.py +6 -1
- meutils/apis/fal/images.py +9 -9
- meutils/apis/images/edits.py +7 -1
- meutils/apis/images/recraft.py +2 -2
- meutils/apis/jimeng/common.py +1 -0
- meutils/apis/jimeng/images.py +23 -4
- meutils/apis/oneapi/user.py +18 -4
- meutils/apis/siliconflow/images.py +14 -5
- meutils/caches/__init__.py +2 -0
- meutils/caches/acache.py +22 -14
- meutils/caches/common.py +69 -0
- meutils/data/VERSION +1 -1
- meutils/db/redis_db.py +12 -1
- meutils/llm/completions/qwenllm.py +4 -4
- meutils/llm/completions/reasoner.py +1 -1
- meutils/llm/completions/yuanbao.py +0 -1
- meutils/schemas/oneapi/common.py +13 -4
- meutils/apis/jimeng/checks.py +0 -11
- {MeUtils-2025.3.1.12.23.38.dist-info → MeUtils-2025.3.3.18.25.21.dist-info}/LICENSE +0 -0
- {MeUtils-2025.3.1.12.23.38.dist-info → MeUtils-2025.3.3.18.25.21.dist-info}/WHEEL +0 -0
- {MeUtils-2025.3.1.12.23.38.dist-info → MeUtils-2025.3.3.18.25.21.dist-info}/entry_points.txt +0 -0
- {MeUtils-2025.3.1.12.23.38.dist-info → MeUtils-2025.3.3.18.25.21.dist-info}/top_level.txt +0 -0
@@ -107,7 +107,7 @@ examples/_openaisdk/openai_files.py,sha256=c4XhYupmaWvUDnxYBoSfyJIyDg9enHagxPrZJ
|
|
107
107
|
examples/_openaisdk/openai_gitee.py,sha256=UQEJMQMQDhgqYzo_aYetYXnBmVtqRwIweJDDK3NlSMw,1205
|
108
108
|
examples/_openaisdk/openai_god.py,sha256=O8fbhyxiIlVR7pTvBTXgQ2QTwfcZ2MkEIyDe_jp797A,1056
|
109
109
|
examples/_openaisdk/openai_groq.py,sha256=_5Ue1yEx0Gp6theFioB_D8kepR0UlqMU96PVGH-LkVY,7363
|
110
|
-
examples/_openaisdk/openai_images.py,sha256=
|
110
|
+
examples/_openaisdk/openai_images.py,sha256=56tz5AiKMuyAX_npSvieZfJmOEUH9oYrk2sV5eXvjoM,5967
|
111
111
|
examples/_openaisdk/openai_jina.py,sha256=QeGRXMQmkJyg8Cz4Vfx4pP39a5TcO7pQQfPAPbBA8bs,1628
|
112
112
|
examples/_openaisdk/openai_json.py,sha256=M4tq_IkzYbmtgbFilGQHmRdJhH0OltiwGk7cK7uc-sQ,1850
|
113
113
|
examples/_openaisdk/openai_kindo.py,sha256=dRQd8BOUDlWo4xp2l1s3BeP7qv19i7CUjx14NRv1fxM,741
|
@@ -338,7 +338,7 @@ meutils/apis/audio/__init__.py,sha256=y7Rpn90LocHhA0ywrDP_fT4QAK7sr4JsIX5wLJgkNH
|
|
338
338
|
meutils/apis/audio/deepinfra.py,sha256=O-IpAnHfx25QCjhB5xaIYVBy5AbyPzmVz-Pr40gpnsM,1773
|
339
339
|
meutils/apis/audio/fish.py,sha256=rTRaxXHKYfNNUU3DhXT-S9rTqJAQmww0DiA9ZqhgvO8,8378
|
340
340
|
meutils/apis/baidu/__init__.py,sha256=XPkz3DHrDdxCneaZct3y7MaX0Aw9IIseOYOn1YuVBII,243
|
341
|
-
meutils/apis/baidu/bdaitpzs.py,sha256=
|
341
|
+
meutils/apis/baidu/bdaitpzs.py,sha256=gUvw_6LADhq8ZOy2y30nR2zBxXE1vyL24H-kHVDcp0A,13456
|
342
342
|
meutils/apis/baidu/test.py,sha256=nb9ivelHIw84-d1V-MNGRpGoTpLFsNXPk-TTKpjwOfQ,2058
|
343
343
|
meutils/apis/chatglm/__init__.py,sha256=uFuc9qY-ZjGqbsfcdGZkcEkhjATojWpzk2WXTTujc70,271
|
344
344
|
meutils/apis/chatglm/glm_video.py,sha256=9LA9pyeIcDDHXGhJbZSJfjxrLeNC3SIuCKJwDIXRKR8,14015
|
@@ -348,7 +348,7 @@ meutils/apis/chatglm/temp.py,sha256=zYe6JGUHVfb77T_TdNsdmpTs2D9OyqDTUEkblDAIoYY,
|
|
348
348
|
meutils/apis/chatglm/x.py,sha256=lI86Cd6SN4noCN5HM9gRugcVmjHDtxDTV4m-7Bj61N0,24312
|
349
349
|
meutils/apis/fal/__init__.py,sha256=A7w3ZAS7Tv20N4X4Em6NshDxKSCPAzaPxHJTbM3BbyM,272
|
350
350
|
meutils/apis/fal/files.py,sha256=Gppdo96uw8-TCDr8P691jV7dK9Si-E-kJXFJR5BVt-Q,1373
|
351
|
-
meutils/apis/fal/images.py,sha256=
|
351
|
+
meutils/apis/fal/images.py,sha256=GGYQMKf9aNXLQ_x0VtSmn6chRti_YWzuDDy2qha7qN4,8546
|
352
352
|
meutils/apis/fal/images_.py,sha256=C-C1TTQtMJ6RRcd-4FeYPn0R5IpPRPUFmBbrTVs_ypA,1446
|
353
353
|
meutils/apis/fal/pd.py,sha256=oPrMK_FJqohl2Kf0U0it8SqgvIlSEYFcSX8sfVkD8bU,311
|
354
354
|
meutils/apis/fal/videos.py,sha256=GzMyS-nBMGAXHaCLKxgCdzowB3jpJDXLb6-y1v0zKNo,3387
|
@@ -377,9 +377,9 @@ meutils/apis/hunyuan/image_tools.py,sha256=jJ652uKakJaFjqBN8oy---GEI_u5ttAob55rm
|
|
377
377
|
meutils/apis/images/__init__.py,sha256=hs7HUJZvw_3DAtoapPnbZsEb4ng1p0a6fJGFFWwUcUk,272
|
378
378
|
meutils/apis/images/deepinfra.py,sha256=lMqfU0LIXEzHiAS31dCcoTnPIE6tpoDJhq61H0TVJPg,3219
|
379
379
|
meutils/apis/images/demo.py,sha256=Cjk-EKMKbp44czykW_44qR0TzElX8nNCALqXBBw5sJA,4405
|
380
|
-
meutils/apis/images/edits.py,sha256=
|
380
|
+
meutils/apis/images/edits.py,sha256=rKXWJjQMQbhEntmKuOnESNyxAxtknSA1WPAgw4CEcls,9955
|
381
381
|
meutils/apis/images/eidt.py,sha256=42dCdGPSLvr0zh8OZtwQxi-5B6Ln_o_FsL1gt2Ura_k,750
|
382
|
-
meutils/apis/images/recraft.py,sha256=
|
382
|
+
meutils/apis/images/recraft.py,sha256=WG__BYqTaImMFQPxDHp_l90RkonOU2aI_paAO6bRtEc,64911
|
383
383
|
meutils/apis/images/flux/__init__.py,sha256=W_PZabQm6EmtJYmzEiEpL_WCXTAW0AiJ-t_n5UTrE8c,271
|
384
384
|
meutils/apis/images/flux/fluxpro.py,sha256=NFl9t9C3R3jsNJpez4o9tOz3r-fjRXj-vKMxCSTRDTU,4022
|
385
385
|
meutils/apis/images/flux/mystic.py,sha256=cUkqaMAbd3dSBCvFEoNBBoEoWCGzvBJWPEkEq1Q8xzw,3616
|
@@ -393,12 +393,11 @@ meutils/apis/jiema/24mail.py,sha256=GUszRtoDe3T9q-X4embwT5YhcjgQ3XnkTJMKX93sCF4,
|
|
393
393
|
meutils/apis/jiema/__init__.py,sha256=YBybggoDRYCNYcwJOypxR7MzfTjIhqO7BkGlTt7NDo4,271
|
394
394
|
meutils/apis/jiema/yezi.py,sha256=26vhnA3lC5049Rqx-CHO-wyGKbdZAfvjEOG90W38cr0,3675
|
395
395
|
meutils/apis/jimeng/__init__.py,sha256=a8CE_cOl9jqal0hycwaLm4Mnga8jmZlz9nCze_9bBqA,272
|
396
|
-
meutils/apis/jimeng/
|
397
|
-
meutils/apis/jimeng/common.py,sha256=G65w_oduTTZbxwq0HcQazlZdfU0KUbUboYb1jQtv2FI,6706
|
396
|
+
meutils/apis/jimeng/common.py,sha256=FafUCActshdG0N3D9w2lkaJx9gG-tI2a-s8wHUryAgk,6753
|
398
397
|
meutils/apis/jimeng/doubao.py,sha256=5OdnBpmZQOCLIb6lnN8YrL7J7E0XF47q0UF-z6asSuI,4295
|
399
398
|
meutils/apis/jimeng/doubao_utils.py,sha256=XCHnvwfCOtJmPQuzDOCfKDMP_Pcqh-Y4w2h5f7Y2gzM,5999
|
400
399
|
meutils/apis/jimeng/files.py,sha256=afwWvN6gSRjBGVMjV3CMpMwnuJ1cAVYBiFc6wamc570,9547
|
401
|
-
meutils/apis/jimeng/images.py,sha256=
|
400
|
+
meutils/apis/jimeng/images.py,sha256=iG0-MuW_Oh4rl4o9Gxdge8pXuB7DFfvL0pDdMMCD7xo,12660
|
402
401
|
meutils/apis/jimeng/videos.py,sha256=x-PDOYNBN-yTmNvMbyDbwm_E2LXZ6A4hcVzEahV_Hvc,10813
|
403
402
|
meutils/apis/kling/__init__.py,sha256=pKz40SEjui1dhHBD-icyNTJOYhzLvxLxJCwszuH4vio,271
|
404
403
|
meutils/apis/kling/api.py,sha256=8NEWunWX3pVWhZzDnzw6rd07nPfOuY2T-XkgL86ZWYg,2328
|
@@ -425,7 +424,7 @@ meutils/apis/oneapi/common.py,sha256=xFGep9Lp1yylS_--o5e3vllnSgbuf1NpEDFM6Ui9k50
|
|
425
424
|
meutils/apis/oneapi/log.py,sha256=dOmyldX5DyJO7mMw4EzYorTIsdLKqZ3AZiV0z0tEpWE,1377
|
426
425
|
meutils/apis/oneapi/token.py,sha256=LaKwkHXNvF46wXEVtbSNwfi0ujuQo7oRyln39MOPKX0,1638
|
427
426
|
meutils/apis/oneapi/token_.py,sha256=3NPU1jbjiRbcXIkw8bANcnby3rXq4U2LjU_8W3PaE_4,2560
|
428
|
-
meutils/apis/oneapi/user.py,sha256=
|
427
|
+
meutils/apis/oneapi/user.py,sha256=NRcqfBwMbCBncykJj7RsVQxTAeRCmDMEF08uiEcI4l8,4030
|
429
428
|
meutils/apis/oneapi/utils.py,sha256=p7zI7QYPqTaVHjk4jLJxb6EsLDNQQ6DVp_wZTgE8d2Y,1411
|
430
429
|
meutils/apis/pixverse/__init__.py,sha256=WiboEUfJ_3Hs2WI3OymEspx8_ZSTgMglxTJd97Qk7qo,271
|
431
430
|
meutils/apis/pixverse/pixverse.py,sha256=dvnyYVUXCEY_cLnmX9lvq9TesvplCMCuJmmP7ShchQk,5534
|
@@ -448,7 +447,7 @@ meutils/apis/search/zhipu.py,sha256=9Y7oS0G-mptyFifd8HjCPx3I5ZX1jhtiQb6b611oBRg,
|
|
448
447
|
meutils/apis/siliconflow/__init__.py,sha256=DQ-A6wAWGna49pmyGhcIWgc2zx6TN9DfQmSUdAW7qjk,241
|
449
448
|
meutils/apis/siliconflow/audio.py,sha256=pk1OROATtAURPQ6VkswmR5gJFOFYJJPnjp-boDAf8X0,2017
|
450
449
|
meutils/apis/siliconflow/image_to_image.py,sha256=EnoT8p2IS35XGZ0ivFKTBII3b_iIG9NR_Ae2nOA-orc,89442
|
451
|
-
meutils/apis/siliconflow/images.py,sha256=
|
450
|
+
meutils/apis/siliconflow/images.py,sha256=aMZ_bmU1ONuFCDIcoLmHBkiNCZ1edCtunvZXjjWuozU,7019
|
452
451
|
meutils/apis/siliconflow/rerankers.py,sha256=GuKT33MmAiVULqNaAO9IIy1Zp570-kYJ6xP03eLCp5Y,1259
|
453
452
|
meutils/apis/siliconflow/text_to_image.py,sha256=ZSyvCF_CfH6pV4BXM4TJjmQiu2x4nF197GliDddWI8Q,4458
|
454
453
|
meutils/apis/siliconflow/utils.py,sha256=uPpJVgqVmTzTN0LuHWliTWaf1rzneNyA-mELwwrUbdQ,2092
|
@@ -498,9 +497,10 @@ meutils/async_utils/asyncer_.py,sha256=S1Sp5WZx_uKM7kJyRVYU8QhmbjOh61JmfN2IN_PJN
|
|
498
497
|
meutils/async_utils/background.py,sha256=dl6UaMIFBZDB1uxSZzGFJdSnpt3Xo0flK7gwsokVy78,1464
|
499
498
|
meutils/async_utils/common.py,sha256=bfZkUlQz21WHAh2W7SDxFtrvUYNBnRfVxIUgMmT7o1Q,5212
|
500
499
|
meutils/async_utils/test.py,sha256=lkZdgSzzgVg8hYVcaBNEJ3KBvFTEfjbXZVvtknQZsRQ,1155
|
501
|
-
meutils/caches/__init__.py,sha256=
|
502
|
-
meutils/caches/acache.py,sha256=
|
500
|
+
meutils/caches/__init__.py,sha256=hIUEqNnmhukkbKK2F39bXe-MGDwzeUoTOf_sYly53xo,291
|
501
|
+
meutils/caches/acache.py,sha256=sNpnX89oDjrB14CVusddJWxo2Jp5GB4h2lVSkJvXBv8,2791
|
503
502
|
meutils/caches/c.py,sha256=9hm9x_xMRGtqG51SirOS3Pzi2L9zxU_nov4muE5iJ48,699
|
503
|
+
meutils/caches/common.py,sha256=_3bXS5WgtCoRO4z_VuyMzV3WH-5Dx1-mdf4_RzVqH_Q,1578
|
504
504
|
meutils/caches/demo.py,sha256=tY3mJUe4D2gbBVMd8gny40nK2BwqBGsaWDjDJsL7ObE,758
|
505
505
|
meutils/caches/redis_.py,sha256=5Oxq_XT5BJ7C9emzsXWDkiY4p8dVG7XFn0WxB14-z5E,600
|
506
506
|
meutils/caches/redis_cache.py,sha256=oXGk_CZhjp9P_z1TG_zhmma4iGepK-iIWY_ZYQWSkFg,1395
|
@@ -530,7 +530,7 @@ meutils/config_utils/lark_utils/demo.py,sha256=3g0Fs7oLaeW75T60gYWMLgyNg1OnfOjfH
|
|
530
530
|
meutils/config_utils/lark_utils/x.py,sha256=MlMQGhehP9xMEgetxVCX68XFaosfKoW1JA5cZ3JqN2w,1857
|
531
531
|
meutils/crawlers/__init__.py,sha256=TBU4xA-IOsHV-0yIkW7YXxn_QT7TT8NncqxO7IykEfs,271
|
532
532
|
meutils/data/SimHei.ttf,sha256=-XEnekS5yHP_URkT4XBI2w22ylV-KxudhkeIYFbrILA,10062565
|
533
|
-
meutils/data/VERSION,sha256=
|
533
|
+
meutils/data/VERSION,sha256=BT-1nK6maMu-0khcmoJkEf859rWtvOEtozAAlakWhE8,19
|
534
534
|
meutils/data/_FLAG,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
535
535
|
meutils/data/_SUCCESS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
536
536
|
meutils/data/__init__.py,sha256=Hfwkkxs4zHqKhxht0YrhS566a9P5axtmgNvM5wF8ceQ,243
|
@@ -544,7 +544,7 @@ meutils/db/__init__.py,sha256=HR99rqxoFTWXUHDhLVl33tzIn8M86gigHLmEzOKH1Ec,7637
|
|
544
544
|
meutils/db/mongo.py,sha256=B-B_t939rxtnNGt0PxhivjIUwinmHPzLUpXsjUIaTkQ,2337
|
545
545
|
meutils/db/neo4j.py,sha256=eYd3jP3COWlOFBaF20UXphW67-HwlZ1t0Q34Cp-j6o0,2168
|
546
546
|
meutils/db/orm.py,sha256=MFT2_Cruao_vvVLKC68Pu2PC6vgEnvH4vJhivNhlGoA,5094
|
547
|
-
meutils/db/redis_db.py,sha256=
|
547
|
+
meutils/db/redis_db.py,sha256=U-7CakaokgT_1iYMomU-ObiH_xaeavhtrt8wPMgdPiU,2756
|
548
548
|
meutils/decorators/__ai.py,sha256=QAz005-Wa-sp0YUUoelaR1pMbt6hPSBML5j0My6TbEI,1681
|
549
549
|
meutils/decorators/__init__.py,sha256=hgpHo40pfFWYXEnrW74o8W7SIfCD0GHr3gnujBw1hIQ,3284
|
550
550
|
meutils/decorators/cache.py,sha256=-sqhCuiSYZK1UtsRw7bBog19G65O9N27DVTAp_nlBk4,2972
|
@@ -599,14 +599,14 @@ meutils/llm/completions/gemini.py,sha256=mpxQZy4x1RxLOwA0CKZacQDDW_zyQVypfPz5TDx
|
|
599
599
|
meutils/llm/completions/kimi.py,sha256=TSkLObebIAb_oivOMq3aKx9qoXcMy611_g2yIKex9eo,1541
|
600
600
|
meutils/llm/completions/modelscope.py,sha256=umPlJuHSL2RR0oNdTIAqts8iqEmGp_MR6Vh49g-UZuc,271
|
601
601
|
meutils/llm/completions/oi.py,sha256=DmvzxJfdLA_I3MWcULhFtiUdo90j7V2dLvYvmZ-Tm9U,293
|
602
|
-
meutils/llm/completions/qwenllm.py,sha256=
|
602
|
+
meutils/llm/completions/qwenllm.py,sha256=a_U3tkNshiefuUHQi79N5zdAh4GUIMlTkqZAO92DiNc,6428
|
603
603
|
meutils/llm/completions/rag.py,sha256=cpQ1aZX2QI1QDfFpODTxWHPYglK6_3qrlUM_KHLBNhc,1112
|
604
|
-
meutils/llm/completions/reasoner.py,sha256=
|
604
|
+
meutils/llm/completions/reasoner.py,sha256=rPIxW1iuvLuGhcOa6PkfcJmrTKtJV-8wRKfA09X09tg,6169
|
605
605
|
meutils/llm/completions/tryblend.py,sha256=NfVRktn1QiE2k60PzEI-LmKuxZCc7mtL_KlsrVcZg4k,8957
|
606
606
|
meutils/llm/completions/tune.py,sha256=FypfUgsB34t-E9xI6WydJYEk_-phscrLOX1iUCeKb_E,10138
|
607
607
|
meutils/llm/completions/x.py,sha256=XE8aCyuhkpYq0nho1mq9lAdRU1yOPc8BpvCpNYYMYqM,630
|
608
608
|
meutils/llm/completions/xx.py,sha256=pPfVRczvXZFUvAUOAFr0MMHMb5kVPNfKVhOLKugq52M,1646
|
609
|
-
meutils/llm/completions/yuanbao.py,sha256=
|
609
|
+
meutils/llm/completions/yuanbao.py,sha256=oqYagCchV10oodns_DMKHtgmTz6dciDFKR_Gn1xXYy4,5760
|
610
610
|
meutils/llm/completions/agents/__init__.py,sha256=Wklnf7FTHm43hyVwfT8FXX44nqdOTykPb_HORIqDuuw,270
|
611
611
|
meutils/llm/completions/agents/file.py,sha256=4SGCkHSBEdAB6NbxPaViXYUJq5giGtEF9FEgq2WxyBY,4934
|
612
612
|
meutils/llm/completions/agents/search.py,sha256=GKsk0NRy6jsbSu8E9mdBWObJzroGE-L7Iuo5W2MK_u0,5057
|
@@ -761,7 +761,7 @@ meutils/schemas/db/__init__.py,sha256=m1maURVoM6dIW0yt6ELZrZTzULtkHybVOSXtHNJRVI
|
|
761
761
|
meutils/schemas/db/oneapi_types.py,sha256=YanT0q9pU7dva2ZBPWjCpwGNUuifnJh0zUJJCQ9070c,3848
|
762
762
|
meutils/schemas/oneapi/__init__.py,sha256=uevbi3QAvFzN9WPbx9bYKTDyKt7P2ueZO6W0nSiD0sk,289
|
763
763
|
meutils/schemas/oneapi/_types.py,sha256=ClvAaNy3SahEN8lL8KEErHTD6HANelXUeKc_3iLfosQ,1488
|
764
|
-
meutils/schemas/oneapi/common.py,sha256=
|
764
|
+
meutils/schemas/oneapi/common.py,sha256=_tmuGvNKPhvt3r5tG6jUWSy36s9vr9iXp1yRmG5Qty0,30635
|
765
765
|
meutils/schemas/oneapi/icons.py,sha256=T7W5gInBJoHe62wzMimbG_UI-wn3_-rmQ1O4O2z-CQY,1089
|
766
766
|
meutils/schemas/oneapi/model_group_info.py,sha256=rGtflYJuFIjk5MsVEvK9JUR4IciX8jfErqeLqf8DIlQ,1586
|
767
767
|
meutils/schemas/oneapi/model_info.py,sha256=_uwKEPIIqm7ZYfhmpxtXB2QNsS83SpJY-OaBzvogC9w,772
|
@@ -890,9 +890,9 @@ meutils/tools/seize.py,sha256=nOKAS63w-Lbi48I0m2MPhdsokUTwxco0laPxYVmW4Mw,1064
|
|
890
890
|
meutils/tools/service_monitor.py,sha256=ibsLtBN2g2DL7ZnLJ8vhiZOiOcqTAyx711djDdBK-3M,1255
|
891
891
|
meutils/tools/sys_monitor.py,sha256=6MoyzrItqDUOSjfHcMJmMofQkEPTW36CT_aKui0rg84,429
|
892
892
|
meutils/tools/token_monitor.py,sha256=Np-YK-R4P4IPAXyZvMxwvXI4sFmNJQAQK1lSegNaYpA,997
|
893
|
-
MeUtils-2025.3.
|
894
|
-
MeUtils-2025.3.
|
895
|
-
MeUtils-2025.3.
|
896
|
-
MeUtils-2025.3.
|
897
|
-
MeUtils-2025.3.
|
898
|
-
MeUtils-2025.3.
|
893
|
+
MeUtils-2025.3.3.18.25.21.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
894
|
+
MeUtils-2025.3.3.18.25.21.dist-info/METADATA,sha256=2lM1s8-7yHLydeARfH1GU7g5ivT_qQHzY69uI3yrpVk,32833
|
895
|
+
MeUtils-2025.3.3.18.25.21.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
896
|
+
MeUtils-2025.3.3.18.25.21.dist-info/entry_points.txt,sha256=lufZlBHRqqZKdY-ZQJ4CSZb0qhV5hQC37egZna9M7ug,357
|
897
|
+
MeUtils-2025.3.3.18.25.21.dist-info/top_level.txt,sha256=cInfxMmkgNOskurdjwP5unau4rA7Uw48nu07tYhS7KY,22
|
898
|
+
MeUtils-2025.3.3.18.25.21.dist-info/RECORD,,
|
@@ -162,7 +162,7 @@ with timer('image'):
|
|
162
162
|
# model = 'hunyuan'
|
163
163
|
# model = 'cogview-3'
|
164
164
|
# model = 'stable-diffusion'
|
165
|
-
|
165
|
+
model = 'flux.1.1-pro'
|
166
166
|
# model = 'flux'
|
167
167
|
# model = 'stable-diffusion-3-5-large'
|
168
168
|
# model = 'flux-schnell'
|
@@ -188,7 +188,7 @@ with timer('image'):
|
|
188
188
|
# # size="1700x1275"
|
189
189
|
# )
|
190
190
|
|
191
|
-
model = "recraft-v3"
|
191
|
+
# model = "recraft-v3"
|
192
192
|
# model = "fal-ai/recraft-v3"
|
193
193
|
prompt = '一只可爱的边牧在坐公交车,卡通贴纸。动漫3D风格,超写实油画,超高分辨率,最好的质量,8k'
|
194
194
|
# prompt = "一个小女孩举着横幅,上面写着“新年快乐”"
|
meutils/apis/baidu/bdaitpzs.py
CHANGED
@@ -21,6 +21,7 @@ from meutils.schemas.baidu_types import BDAITPZSRequest
|
|
21
21
|
from meutils.schemas.task_types import Task, TaskType
|
22
22
|
from meutils.io.image import image_to_base64, crop_polygon
|
23
23
|
from meutils.io.files_utils import to_url, to_bytes
|
24
|
+
from meutils.apis.proxy.ips import get_one_proxy
|
24
25
|
|
25
26
|
from meutils.notice.feishu import send_message as _send_message
|
26
27
|
|
@@ -55,7 +56,11 @@ async def create_task(
|
|
55
56
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
56
57
|
}
|
57
58
|
|
58
|
-
|
59
|
+
request_kwargs = {
|
60
|
+
"proxy": await get_one_proxy(from_redis=True),
|
61
|
+
}
|
62
|
+
|
63
|
+
async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=100, **request_kwargs) as client:
|
59
64
|
|
60
65
|
response = await client.post('/aigc/pccreate', data=payload)
|
61
66
|
|
meutils/apis/fal/images.py
CHANGED
@@ -26,7 +26,7 @@ llms = "anthropic/claude-3.5-sonnet, anthropic/claude-3-5-haiku, anthropic/claud
|
|
26
26
|
|
27
27
|
|
28
28
|
@alru_cache(ttl=600)
|
29
|
-
async def check(token, threshold=0):
|
29
|
+
async def check(token, threshold: float = 0):
|
30
30
|
try:
|
31
31
|
# data = await AsyncClient(key=token).upload(b'', '', '')
|
32
32
|
|
@@ -156,14 +156,14 @@ if __name__ == '__main__':
|
|
156
156
|
# token = "77fcfad2-aadc-4158-8e11-b30a5668dfad:ea5f38d864bde6707561d348436d2cea"
|
157
157
|
# token = "5116af3f-1aa5-4c1b-b505-fd49f701dccc:7f4278d69d069cec4794fe658a09bd9d"
|
158
158
|
|
159
|
-
arun(generate(request))
|
159
|
+
# arun(generate(request))
|
160
160
|
|
161
161
|
# arun(AsyncClient(key=token).key)
|
162
162
|
|
163
|
-
|
164
|
-
#
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
163
|
+
tokens = arun(get_series(FEISHU_URL))
|
164
|
+
# tokens = [token]
|
165
|
+
|
166
|
+
r = []
|
167
|
+
for t in tokens:
|
168
|
+
if arun(check(t)):
|
169
|
+
r.append(t)
|
meutils/apis/images/edits.py
CHANGED
@@ -114,7 +114,13 @@ async def make_request_for_baidu(payload, token: Optional[str] = None, response_
|
|
114
114
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
|
115
115
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
116
116
|
}
|
117
|
-
|
117
|
+
|
118
|
+
from meutils.apis.proxy.ips import get_one_proxy
|
119
|
+
|
120
|
+
request_kwargs = {
|
121
|
+
"proxy": await get_one_proxy(from_redis=True),
|
122
|
+
}
|
123
|
+
async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=60, **request_kwargs) as client:
|
118
124
|
response = await client.post("/aigc/pccreate", data=payload) # pcEditTaskid
|
119
125
|
response.raise_for_status()
|
120
126
|
data = response.json()
|
meutils/apis/images/recraft.py
CHANGED
meutils/apis/jimeng/common.py
CHANGED
@@ -177,6 +177,7 @@ if __name__ == '__main__':
|
|
177
177
|
token = "916fed81175f5186a2c05375699ea40d"
|
178
178
|
token = "7c5e148d9fa858e3180c42f843c20454"
|
179
179
|
token = "1c21a9fe6a4230609d7ff13e5cec41ec"
|
180
|
+
token = "34438eb03d165737122180caf62a8058"
|
180
181
|
# token = "38d7d300b5e0a803431ef88d8d2acfef"
|
181
182
|
arun(check_token(token))
|
182
183
|
|
meutils/apis/jimeng/images.py
CHANGED
@@ -11,17 +11,19 @@
|
|
11
11
|
guidance 控制精细度 => sample_strength 0-1 数值越大生成的效果质量越好,耗时会更久
|
12
12
|
|
13
13
|
"""
|
14
|
+
import json
|
14
15
|
|
15
16
|
from meutils.pipe import *
|
16
|
-
from meutils.
|
17
|
+
from meutils.db.redis_db import redis_aclient
|
18
|
+
|
17
19
|
from meutils.decorators.retry import retrying
|
18
20
|
|
19
21
|
from meutils.schemas.jimeng_types import BASE_URL, MODELS_MAP, FEISHU_URL
|
20
22
|
from meutils.schemas.image_types import ImageRequest
|
21
23
|
from meutils.schemas.task_types import TaskResponse
|
22
24
|
from meutils.apis.jimeng.common import get_headers, check_token
|
23
|
-
from meutils.str_utils.regular_expression import parse_url
|
24
25
|
from meutils.apis.jimeng.files import upload_for_image
|
26
|
+
from meutils.str_utils.regular_expression import parse_url
|
25
27
|
|
26
28
|
from meutils.config_utils.lark_utils import get_next_token_for_polling
|
27
29
|
from fastapi import status, HTTPException
|
@@ -177,6 +179,12 @@ async def create_draft_content(request: ImageRequest, token: str):
|
|
177
179
|
|
178
180
|
@retrying(max_retries=3)
|
179
181
|
async def create_task(request: ImageRequest, token: Optional[str] = None):
|
182
|
+
if await redis_aclient.sismember("tasks:jimeng:prompt", request.prompt): # 敏感内容过滤
|
183
|
+
raise HTTPException(
|
184
|
+
status_code=status.HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS,
|
185
|
+
detail=f"可能触发内容审核,请联系管理员:\n{request.prompt}"
|
186
|
+
)
|
187
|
+
|
180
188
|
token = token or await get_next_token_for_polling(FEISHU_URL, check_token)
|
181
189
|
|
182
190
|
url = "/mweb/v1/aigc_draft/generate"
|
@@ -210,7 +218,10 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
|
|
210
218
|
data = response.json()
|
211
219
|
logger.debug(bjson(data))
|
212
220
|
|
213
|
-
if task_id := (data.get("data") or {}).get("aigc_data", {}).get("history_record_id"):
|
221
|
+
if task_id := (data.get("data") or {}).get("aigc_data", {}).get("history_record_id"): # bug
|
222
|
+
# 映射提示词:方便管理敏感输入
|
223
|
+
await redis_aclient.set(f"tasks:jimeng:{task_id}", request.prompt, ex=3600)
|
224
|
+
|
214
225
|
return TaskResponse(task_id=task_id, system_fingerprint=token)
|
215
226
|
else:
|
216
227
|
|
@@ -228,7 +239,7 @@ async def create_task(request: ImageRequest, token: Optional[str] = None):
|
|
228
239
|
)
|
229
240
|
|
230
241
|
|
231
|
-
@retrying()
|
242
|
+
@retrying(max_retries=3, min=3)
|
232
243
|
async def get_task(task_id, token):
|
233
244
|
url = "/mweb/v1/get_history_by_ids"
|
234
245
|
headers = get_headers(url, token)
|
@@ -249,8 +260,16 @@ async def get_task(task_id, token):
|
|
249
260
|
|
250
261
|
status_code = task_info.get("status")
|
251
262
|
fail_msg = f"""{task_info.get("fail_msg")}"""
|
263
|
+
|
252
264
|
logger.debug(f"status: {status_code}")
|
253
265
|
|
266
|
+
# 敏感词存储
|
267
|
+
if status_code != 50:
|
268
|
+
prompt = await redis_aclient.get(f"tasks:jimeng:{task_id}")
|
269
|
+
if prompt:
|
270
|
+
logger.debug(f"敏感内容: {prompt}")
|
271
|
+
await redis_aclient.sadd('tasks:jimeng:prompt', prompt)
|
272
|
+
|
254
273
|
"""
|
255
274
|
"status": 30, # 内容审核
|
256
275
|
"status": 50,
|
meutils/apis/oneapi/user.py
CHANGED
@@ -13,6 +13,7 @@ from meutils.pipe import *
|
|
13
13
|
from meutils.schemas.oneapi import BASE_URL
|
14
14
|
from meutils.notice.feishu import send_message
|
15
15
|
from meutils.db.redis_db import redis_aclient
|
16
|
+
from meutils.caches import cache, rcache
|
16
17
|
|
17
18
|
# https://api.chatfire.cn/api/user/814
|
18
19
|
|
@@ -34,7 +35,7 @@ headers = {
|
|
34
35
|
# if response.is_success:
|
35
36
|
# data = response.json()
|
36
37
|
# return data
|
37
|
-
@alru_cache(ttl=3 * 60 * 60)
|
38
|
+
@alru_cache(ttl=3 * 60 * 60) # todo cache
|
38
39
|
async def get_api_key_log(api_key: str) -> Optional[list]: # 日志查询会超时:为了获取 user_id, todo缓存 永久缓存 sk => user
|
39
40
|
try:
|
40
41
|
if onelog := await redis_aclient.get(f"user:{api_key}"):
|
@@ -56,7 +57,6 @@ async def get_api_key_log(api_key: str) -> Optional[list]: # 日志查询会超
|
|
56
57
|
|
57
58
|
@alru_cache(ttl=60)
|
58
59
|
async def get_user(user_id):
|
59
|
-
|
60
60
|
async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=30) as client:
|
61
61
|
response = await client.get(f"/api/user/{user_id}")
|
62
62
|
# logger.debug(response.text)
|
@@ -91,12 +91,26 @@ async def put_user(payload, add_money: float = 0):
|
|
91
91
|
return response.json()
|
92
92
|
|
93
93
|
|
94
|
+
@cache()
|
95
|
+
@rcache()
|
96
|
+
async def get_user_from_api_key(api_key):
|
97
|
+
async with httpx.AsyncClient(base_url=BASE_URL) as client:
|
98
|
+
response = await client.get("/api/log/token", params={"key": api_key})
|
99
|
+
response.raise_for_status()
|
100
|
+
data = response.json()
|
101
|
+
# logger.debug(data)
|
102
|
+
|
103
|
+
if data['data'] and (onelog := data['data'][0]):
|
104
|
+
return onelog
|
105
|
+
|
106
|
+
|
94
107
|
if __name__ == '__main__':
|
95
108
|
# api-key => get_one_log => get_user => put_user
|
96
|
-
arun(get_user(814))
|
109
|
+
# arun(get_user(814))
|
97
110
|
# payload = arun(get_user(924))
|
98
111
|
# print(payload)
|
99
112
|
# arun(put_user(payload, -1))
|
100
113
|
|
101
114
|
# arun(get_api_key_log('sk-gpoH1z3G6nHovD8MY40i6xx5tsC1vbh7B3Aao2jmejYNoKhv'))
|
102
|
-
arun(get_user_money("sk-LlB4W38z9kv5Wy1c3ceeu4PHeIWs6bbWsjr8Om31jYvsucRv"))
|
115
|
+
# arun(get_user_money("sk-LlB4W38z9kv5Wy1c3ceeu4PHeIWs6bbWsjr8Om31jYvsucRv"))
|
116
|
+
arun(get_user_from_api_key('sk-gpoH1z3G6nHovD8MY40i6xx5tsC1vbh7B3Aao2jmejYNoKhv'))
|
@@ -11,6 +11,7 @@
|
|
11
11
|
from openai import AsyncOpenAI
|
12
12
|
|
13
13
|
from meutils.pipe import *
|
14
|
+
from meutils.io.files_utils import to_base64
|
14
15
|
from meutils.config_utils.lark_utils import get_next_token_for_polling
|
15
16
|
from meutils.llm.openai_utils import to_openai_images_params
|
16
17
|
from meutils.llm.check_utils import check_token_for_siliconflow
|
@@ -109,12 +110,17 @@ async def generate(request: ImageRequest, api_key: Optional[str] = None):
|
|
109
110
|
api_key = api_key or await get_next_token_for_polling(FEISHU_URL_FREE, check_valid_token, from_redis=True)
|
110
111
|
|
111
112
|
data = to_openai_images_params(request)
|
112
|
-
logger.debug(data)
|
113
|
+
# logger.debug(data)
|
113
114
|
|
114
115
|
client = AsyncOpenAI(base_url=BASE_URL, api_key=api_key)
|
115
116
|
response = await client.images.generate(**data)
|
116
|
-
logger.debug(response)
|
117
117
|
response.model = ""
|
118
|
+
logger.debug(response)
|
119
|
+
if request.response_format == "b64_json":
|
120
|
+
b64_json = await to_base64(response.data[0].url)
|
121
|
+
|
122
|
+
response.data[0].url = None
|
123
|
+
response.data[0].b64_json = b64_json
|
118
124
|
|
119
125
|
return response
|
120
126
|
|
@@ -123,11 +129,15 @@ if __name__ == '__main__':
|
|
123
129
|
from meutils.pipe import *
|
124
130
|
|
125
131
|
data = {
|
126
|
-
"model": "flux-schnell",
|
132
|
+
# "model": "flux-schnell",
|
133
|
+
"model": "stable-diffusion-3-5-large",
|
134
|
+
|
127
135
|
"prompt": "(Chinese dragon soaring through the clouds).(majestic, colorful, mythical, powerful, ancient).(DSLR camera).(wide-angle lens).(dawn)(fantasy photography).(Kodak Ektar 100)",
|
128
136
|
"negative_prompt": "",
|
129
137
|
"n": 1,
|
130
|
-
"response_format": "url",
|
138
|
+
# "response_format": "url",
|
139
|
+
# "response_format": "b64_json",
|
140
|
+
|
131
141
|
# "size": "16x9",
|
132
142
|
"num_inference_steps": 20,
|
133
143
|
"seed": None
|
@@ -167,4 +177,3 @@ if __name__ == '__main__':
|
|
167
177
|
arun(generate(request))
|
168
178
|
|
169
179
|
# https://api.siliconflow.com/v1
|
170
|
-
|
meutils/caches/__init__.py
CHANGED
meutils/caches/acache.py
CHANGED
@@ -18,23 +18,35 @@ from aiocache import cached, Cache, RedisCache, caches
|
|
18
18
|
from aiocache import multi_cached
|
19
19
|
|
20
20
|
logger.debug(async_pool.connection_kwargs)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
|
22
|
+
REDIS_URL = "redis://:chatfirechatfire@110.42.51.143:6379"
|
23
|
+
|
24
|
+
|
25
|
+
def rcache(**kwargs): # todo
|
26
|
+
"""
|
27
|
+
:param endpoint: str with the endpoint to connect to. Default is "127.0.0.1".
|
28
|
+
:param port: int with the port to connect to. Default is 6379.
|
29
|
+
:param db: int indicating database to use. Default is 0.
|
30
|
+
:param password: str indicating password to use. Default is None.
|
31
|
+
"""
|
32
|
+
|
33
|
+
connection_kwargs = {}
|
34
|
+
if REDIS_URL := os.getenv("REDIS_URL"):
|
35
|
+
user_password, base_url = REDIS_URL.split("@")
|
36
|
+
endpoint, port = base_url.split(':')
|
37
|
+
password = user_password.split(":")[-1]
|
38
|
+
|
39
|
+
connection_kwargs['endpoint'] = endpoint
|
40
|
+
connection_kwargs['port'] = port
|
41
|
+
connection_kwargs['password'] = password
|
27
42
|
|
28
43
|
return cached(
|
29
44
|
cache=RedisCache,
|
30
|
-
|
31
|
-
# connection_pool_kwargs=1,
|
32
|
-
**async_pool.connection_kwargs,
|
45
|
+
**connection_kwargs,
|
33
46
|
**kwargs
|
34
47
|
)
|
35
48
|
|
36
49
|
|
37
|
-
|
38
50
|
@cached(ttl=60)
|
39
51
|
@cached(ttl=60)
|
40
52
|
async def cached_fc(user_id, **kwargs):
|
@@ -42,9 +54,6 @@ async def cached_fc(user_id, **kwargs):
|
|
42
54
|
return False
|
43
55
|
|
44
56
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
57
|
@rcache(ttl=3)
|
49
58
|
async def redis_fc(user_id, **kwargs):
|
50
59
|
logger.debug(user_id)
|
@@ -96,7 +105,6 @@ async def expensive_operation():
|
|
96
105
|
return {"result": "data"}
|
97
106
|
|
98
107
|
|
99
|
-
|
100
108
|
if __name__ == '__main__':
|
101
109
|
|
102
110
|
async def main():
|
meutils/caches/common.py
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : common
|
5
|
+
# @Time : 2025/3/3 16:54
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
import os
|
12
|
+
from aiocache import cached, Cache, RedisCache, caches
|
13
|
+
|
14
|
+
cache = memory_cache = cached
|
15
|
+
|
16
|
+
|
17
|
+
def rcache(**kwargs):
|
18
|
+
"""
|
19
|
+
:param endpoint: str with the endpoint to connect to. Default is "127.0.0.1".
|
20
|
+
:param port: int with the port to connect to. Default is 6379.
|
21
|
+
:param db: int indicating database to use. Default is 0.
|
22
|
+
:param password: str indicating password to use. Default is None.
|
23
|
+
"""
|
24
|
+
|
25
|
+
connection_kwargs = {}
|
26
|
+
if REDIS_URL := os.getenv("REDIS_URL"):
|
27
|
+
user_password, base_url = REDIS_URL.split("@")
|
28
|
+
endpoint, port = base_url.split(':')
|
29
|
+
password = user_password.split(":")[-1]
|
30
|
+
|
31
|
+
connection_kwargs['endpoint'] = endpoint
|
32
|
+
connection_kwargs['port'] = port
|
33
|
+
connection_kwargs['password'] = password
|
34
|
+
|
35
|
+
# logger.debug(f"redis: {connection_kwargs}")
|
36
|
+
|
37
|
+
return cached(
|
38
|
+
cache=RedisCache,
|
39
|
+
**connection_kwargs,
|
40
|
+
**kwargs
|
41
|
+
)
|
42
|
+
|
43
|
+
|
44
|
+
if __name__ == '__main__':
|
45
|
+
from meutils.pipe import *
|
46
|
+
|
47
|
+
|
48
|
+
@cache(ttl=10)
|
49
|
+
async def fn(a):
|
50
|
+
logger.debug(a)
|
51
|
+
return a
|
52
|
+
|
53
|
+
|
54
|
+
@cache(ttl=3)
|
55
|
+
@rcache(ttl=2)
|
56
|
+
async def mfn(a):
|
57
|
+
logger.debug(a)
|
58
|
+
return a
|
59
|
+
|
60
|
+
|
61
|
+
async def main():
|
62
|
+
for i in range(10):
|
63
|
+
# await fn(11111)
|
64
|
+
await mfn(11111)
|
65
|
+
|
66
|
+
await asyncio.sleep(1)
|
67
|
+
|
68
|
+
|
69
|
+
arun(main())
|
meutils/data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2025.03.
|
1
|
+
2025.03.03.18.25.21
|
meutils/db/redis_db.py
CHANGED
@@ -32,6 +32,14 @@ else:
|
|
32
32
|
redis_client = Redis(**kwargs) # decode_responses=True
|
33
33
|
redis_aclient = AsyncRedis(**kwargs)
|
34
34
|
|
35
|
+
|
36
|
+
async def sadd(name, *values, ttl: int = 0):
|
37
|
+
await redis_aclient.sadd(name, *values)
|
38
|
+
|
39
|
+
if ttl:
|
40
|
+
await redis_aclient.expire(name, ttl)
|
41
|
+
|
42
|
+
|
35
43
|
if __name__ == '__main__':
|
36
44
|
from meutils.pipe import *
|
37
45
|
|
@@ -84,4 +92,7 @@ if __name__ == '__main__':
|
|
84
92
|
return await redis_aclient.lpop("redis_key")
|
85
93
|
|
86
94
|
|
87
|
-
arun(main())
|
95
|
+
# arun(main())
|
96
|
+
|
97
|
+
r = redis_client.sadd('set1', 'a', 'b', 'c')
|
98
|
+
r = redis_client.sadd('set1', 'd')
|
@@ -141,9 +141,9 @@ if __name__ == '__main__':
|
|
141
141
|
|
142
142
|
request = ChatCompletionRequest(
|
143
143
|
# model="qwen-turbo-2024-11-01",
|
144
|
-
model="qwen-max-latest",
|
144
|
+
# model="qwen-max-latest",
|
145
145
|
# model="qwen-max-latest-search",
|
146
|
-
|
146
|
+
model="qwq-max",
|
147
147
|
# model="qwen2.5-vl-72b-instruct",
|
148
148
|
|
149
149
|
# model="qwen-plus-latest",
|
@@ -152,12 +152,12 @@ if __name__ == '__main__':
|
|
152
152
|
{
|
153
153
|
'role': 'user',
|
154
154
|
# 'content': '今天南京天气',
|
155
|
-
|
155
|
+
'content': "9.8 9.11哪个大",
|
156
156
|
# 'content': '总结下',
|
157
157
|
|
158
158
|
# "chat_type": "search",
|
159
159
|
|
160
|
-
'content': user_content,
|
160
|
+
# 'content': user_content,
|
161
161
|
|
162
162
|
# "content": [
|
163
163
|
# {
|
@@ -76,7 +76,7 @@ class Completions(object):
|
|
76
76
|
message.content = message.content or "" ########## 损失了?message chunk #########应该是很多值未带进chunk 中转站自定义渠道bug 参数放请求头吧
|
77
77
|
|
78
78
|
# logger.debug(message)
|
79
|
-
if not hasattr(message, 'reasoning_content'): # 标准化
|
79
|
+
if not hasattr(message, 'reasoning_content'): # 标准化 reasoning_content
|
80
80
|
message.reasoning_content = ""
|
81
81
|
if is_reasoning_content:
|
82
82
|
message.reasoning_content = (
|