MeUtils 2025.3.19.19.13.35__py3-none-any.whl → 2025.3.20.17.3.20__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.
@@ -92,7 +92,7 @@ examples/_openaisdk/kimi_qa.py,sha256=dNBIe01vK7p-8cFnbgVXJ5H3xPSW32-cc0rwZx3K_1
92
92
  examples/_openaisdk/minimax.py,sha256=zOshBkL1bHgRlj4z6k2FQRScNTr7ysZkfh2-OaAynkU,2116
93
93
  examples/_openaisdk/open_router.py,sha256=ky_tdPX9CZkq4rAnjaFrOY_bygZuy6V8jIQfh6bq9U0,1497
94
94
  examples/_openaisdk/openai_aiplus.py,sha256=7sT2t4jjZBABFiwKQwUjgdilO8s006NuPAPx7neHER8,1182
95
- examples/_openaisdk/openai_audio.py,sha256=Fcp-k4CzU0oB7vDKldRLwUCIRIwwVn_w9CmbEWacbOk,1002
95
+ examples/_openaisdk/openai_audio.py,sha256=KVJOmPdwD5_6Aa5nttRQLSa824-JKGGyuIyHh2IOl8E,1181
96
96
  examples/_openaisdk/openai_baichuan.py,sha256=-xhHovkFmWOTX25CJjIon0my-ocmwfAZJu1C0eS80Xs,1614
97
97
  examples/_openaisdk/openai_baidu.py,sha256=qnrxP66lY7Qf2jEbFEHrt0FrR5_Aji1AgwSI_46IabY,1969
98
98
  examples/_openaisdk/openai_cache.py,sha256=89GbJ1QlqQbVxlUeuFgEbwDYHOkum7BK0zB-CqmDAZU,726
@@ -327,7 +327,7 @@ meutils/apis/kuaidi.py,sha256=4KrtOkbGlsLpyvbY80UMSo03iFqFiBHnE0CiqAWWQ4Y,998
327
327
  meutils/apis/llm_qa.py,sha256=XM1VMkOTb4xKzgVk56dPC1e8lg7SbnfobBVgfLXiX9A,1207
328
328
  meutils/apis/niutrans.py,sha256=tWUyGH5SReLBQyVuB7kZvoFB35dsN6gXN-anbiHc_B4,2298
329
329
  meutils/apis/search_music.py,sha256=HBLtdterztrccnLAPZrWBlrYSx4WCRflCqz-V30fOA8,972
330
- meutils/apis/textin.py,sha256=vkl3VI3ox-m-0UA-DBTOCZURAlD9lA7nA-057gJLMoc,4880
330
+ meutils/apis/textin.py,sha256=Alodn8U5J1Pty_sv1in_-f3B_G5PDERQRaxOCtH7Xcc,4894
331
331
  meutils/apis/ts.py,sha256=Q13EOS9Q-Y2-KwOG_cFMVmGj9RUmDtxk5A3E27dxbN0,1511
332
332
  meutils/apis/utils.py,sha256=hwIj67IsuI3255l3rDDHmcwUIlRoK_xLnE6iCvqOi74,2045
333
333
  meutils/apis/web_search.py,sha256=6gS3leIB2iyeLtqhB0IbpL_mKzDgArRTqnR7odTWT3E,1035
@@ -337,9 +337,9 @@ meutils/apis/aitools/baidu/__init__.py,sha256=4fRDQV9EezQDG4bg-WDaB3jOCr_BcSVChH
337
337
  meutils/apis/aitools/baidu/sdk.py,sha256=5uA1bEqwNYpJirFnwoMTI6Jua3r3DlVNr90RffG9rcs,1132
338
338
  meutils/apis/audio/__init__.py,sha256=y7Rpn90LocHhA0ywrDP_fT4QAK7sr4JsIX5wLJgkNHA,241
339
339
  meutils/apis/audio/deepinfra.py,sha256=O-IpAnHfx25QCjhB5xaIYVBy5AbyPzmVz-Pr40gpnsM,1773
340
- meutils/apis/audio/fish.py,sha256=rTRaxXHKYfNNUU3DhXT-S9rTqJAQmww0DiA9ZqhgvO8,8378
340
+ meutils/apis/audio/fish.py,sha256=jPvTveRcDtvGDgRT6EA9WJitAQxftneHxvEJ63yY_cM,8392
341
341
  meutils/apis/baidu/__init__.py,sha256=XPkz3DHrDdxCneaZct3y7MaX0Aw9IIseOYOn1YuVBII,243
342
- meutils/apis/baidu/bdaitpzs.py,sha256=z6kIgAuHQJVn1fawPrUTNlA7oAHpWZSil8eyCuWonP4,12812
342
+ meutils/apis/baidu/bdaitpzs.py,sha256=JuBTTSm0AyD1I_N7xj-s0iOGOwCw-cUF2OthLR3rFGE,12826
343
343
  meutils/apis/baidu/test.py,sha256=nb9ivelHIw84-d1V-MNGRpGoTpLFsNXPk-TTKpjwOfQ,2058
344
344
  meutils/apis/chatglm/__init__.py,sha256=uFuc9qY-ZjGqbsfcdGZkcEkhjATojWpzk2WXTTujc70,271
345
345
  meutils/apis/chatglm/glm_video.py,sha256=9LA9pyeIcDDHXGhJbZSJfjxrLeNC3SIuCKJwDIXRKR8,14015
@@ -374,12 +374,12 @@ meutils/apis/hf/r.py,sha256=jvD0WBM5dEZGG4rfdGZnUIh2W9sv-fqTFo-8ouLea60,1272
374
374
  meutils/apis/hf/x.py,sha256=QYLiTlTZk1b0wczGHeJMjQABQUQmI_Wk45gbCcCAdIc,862
375
375
  meutils/apis/hf/证件照.py,sha256=NVfFp-wO1YCpvf7ClInK-jVJO9atZuk9VN93GrPohoc,1262
376
376
  meutils/apis/hunyuan/__init__.py,sha256=vJg28p4USaiGt3vAPKurjuxTPtk_LdmThw3cNc48vpI,272
377
- meutils/apis/hunyuan/image_tools.py,sha256=jJ652uKakJaFjqBN8oy---GEI_u5ttAob55rmirdl9Q,4678
377
+ meutils/apis/hunyuan/image_tools.py,sha256=SYovMKvv0QCPAYnIPqpDfXyVSOvyEuFlNNCA1nJ2RcU,4692
378
378
  meutils/apis/images/__init__.py,sha256=hs7HUJZvw_3DAtoapPnbZsEb4ng1p0a6fJGFFWwUcUk,272
379
379
  meutils/apis/images/deepinfra.py,sha256=lMqfU0LIXEzHiAS31dCcoTnPIE6tpoDJhq61H0TVJPg,3219
380
380
  meutils/apis/images/demo.py,sha256=Cjk-EKMKbp44czykW_44qR0TzElX8nNCALqXBBw5sJA,4405
381
381
  meutils/apis/images/edits.py,sha256=vyX5AEZcNvLHB4fXWo2PdviNv0jMMO34e1k-IbedjO0,9935
382
- meutils/apis/images/eidt.py,sha256=42dCdGPSLvr0zh8OZtwQxi-5B6Ln_o_FsL1gt2Ura_k,750
382
+ meutils/apis/images/eidt.py,sha256=s8IBbCjwwoogIUf-d2O7nkawUmly9n19nvLYPaLEeg4,1217
383
383
  meutils/apis/images/recraft.py,sha256=WG__BYqTaImMFQPxDHp_l90RkonOU2aI_paAO6bRtEc,64911
384
384
  meutils/apis/images/flux/__init__.py,sha256=W_PZabQm6EmtJYmzEiEpL_WCXTAW0AiJ-t_n5UTrE8c,271
385
385
  meutils/apis/images/flux/fluxpro.py,sha256=NFl9t9C3R3jsNJpez4o9tOz3r-fjRXj-vKMxCSTRDTU,4022
@@ -432,7 +432,7 @@ meutils/apis/oneapi/utils.py,sha256=p7zI7QYPqTaVHjk4jLJxb6EsLDNQQ6DVp_wZTgE8d2Y,
432
432
  meutils/apis/pixverse/__init__.py,sha256=WiboEUfJ_3Hs2WI3OymEspx8_ZSTgMglxTJd97Qk7qo,271
433
433
  meutils/apis/pixverse/pixverse.py,sha256=dvnyYVUXCEY_cLnmX9lvq9TesvplCMCuJmmP7ShchQk,5534
434
434
  meutils/apis/proxy/__init__.py,sha256=by7_6GT3xeDjAWLLqbw8uvGaZ3RdprEW-zJ2DFLOdwA,271
435
- meutils/apis/proxy/ips.py,sha256=jqiM7mZKFCvdMtu9BwnuAOfQZwYEHApmOkdKmsntGuw,5405
435
+ meutils/apis/proxy/ips.py,sha256=JqW7f2eWKmykfDYNBXUccw9QIloK91F4zfphERbYT2o,5090
436
436
  meutils/apis/remini/__init__.py,sha256=8TbAnbI_bDfH8g0Y9EHXHBum7C0rZt9MzgAAz_MbAeI,271
437
437
  meutils/apis/remini/remini.py,sha256=bJjvtqrCNlAu7No4gYGjoWAM0ch6dCsofYSy2jPZrXg,4239
438
438
  meutils/apis/replicateai/__init__.py,sha256=PK7e7-xhn5aj5WOyGHLzpsHQvpeM5uTOiMylvj40ZmU,272
@@ -526,12 +526,12 @@ meutils/cmds/subprocess_demo.py,sha256=oTeTIx8k6XwtOT6hZpmy9XNcRErzilqWcdoxcrVcH
526
526
  meutils/config_utils/__init__.py,sha256=GhgsStfGJDC8F_YgC6X5Jnj9HkgXJXxeYiJWTAkWKTo,271
527
527
  meutils/config_utils/manager.py,sha256=du-8e9Zdgnrn9e0b4GPR6FGtuQY7DLWNJqgkoU0TZ48,3147
528
528
  meutils/config_utils/lark_utils/__init__.py,sha256=Gf-5Y8uZiqY9jdbfiIboL92MQjOTOo0ZZ245PGxCbaY,297
529
- meutils/config_utils/lark_utils/common.py,sha256=2FM9IMfaSI1PijFK2fVh6wt2sN47FPKeEAFY3WHaXCU,14372
529
+ meutils/config_utils/lark_utils/common.py,sha256=ksNs7adou8rbL5AzI6dBbDLu3bnpF6pv-hPvNKyn7vg,14501
530
530
  meutils/config_utils/lark_utils/demo.py,sha256=3g0Fs7oLaeW75T60gYWMLgyNg1OnfOjfHOno5NxNAio,293
531
531
  meutils/config_utils/lark_utils/x.py,sha256=MlMQGhehP9xMEgetxVCX68XFaosfKoW1JA5cZ3JqN2w,1857
532
532
  meutils/crawlers/__init__.py,sha256=TBU4xA-IOsHV-0yIkW7YXxn_QT7TT8NncqxO7IykEfs,271
533
533
  meutils/data/SimHei.ttf,sha256=-XEnekS5yHP_URkT4XBI2w22ylV-KxudhkeIYFbrILA,10062565
534
- meutils/data/VERSION,sha256=VaaCArnHs_ntLwtx-VTZLNDg1uc6eTDNovKU_kIEG5A,19
534
+ meutils/data/VERSION,sha256=lyrjjsX_hhcujVr2zABVP2vhVdNayBQ2n2NpX14jq1c,19
535
535
  meutils/data/_FLAG,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
536
536
  meutils/data/_SUCCESS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
537
537
  meutils/data/__init__.py,sha256=Hfwkkxs4zHqKhxht0YrhS566a9P5axtmgNvM5wF8ceQ,243
@@ -578,7 +578,7 @@ meutils/init/evn.py,sha256=GPw9Un8YbgYJmjwd-uYWQ8JeVr6pRxwyYbDv3W8fb1s,1588
578
578
  meutils/init/oo.py,sha256=jXWaCWWFYVPGgTIas47Z3J7sIq-CD7DyK6fKDBsq8GA,12884
579
579
  meutils/io/__init__.py,sha256=uW43ZfdWu7adRvwvcTzUGtn4CseRmbzEJdlZV-oqHEA,2107
580
580
  meutils/io/_openai_files.py,sha256=UIiu6Zg7iSFIn1xIcpLznFlnfCxAJFGuvuPtxvTNHfI,1005
581
- meutils/io/files_utils.py,sha256=e3rFAyL23IWQn3_78UR9K8tT3B1YQvNH9ahp9XV30aE,7823
581
+ meutils/io/files_utils.py,sha256=WrLVGR0zFueyQKJs8dkPk6h4FoNvU0UfPs-2ujUFXGc,8030
582
582
  meutils/io/image.py,sha256=BJmYzx7o66X7C32gOfVmfr5tBRXOi0IYQY7BpGLsGrg,6926
583
583
  meutils/io/minio_utils.py,sha256=i1YuxwDJzLse0smMXuPqnD1wirBBb8psmB_kd1oPoVU,1274
584
584
  meutils/io/openai_files.py,sha256=wJ-N03Ip4QCyh10uwWEQuqnbvZEys9hEP4ABLybR_DI,5474
@@ -612,22 +612,25 @@ meutils/io/parsers/fileparser/filetype/types/video.py,sha256=DfkFd5ofnEK25r_n71L
612
612
  meutils/jwt_utils/__init__.py,sha256=hU1CYBK90Q9QKVrf1s6VFKZwWjHioHa6bO2AuDn7_eo,272
613
613
  meutils/jwt_utils/common.py,sha256=MlWDLtxiF-WeRl3oyK94KIa6BKFIXVeJtaQUnpa9ayo,814
614
614
  meutils/llm/__init__.py,sha256=mYv0QpACLd-wz4htIduPuTU3mX06_Y8ZprxDohtZGBM,244
615
- meutils/llm/check_api.py,sha256=Vlan35FGvjPLP-dZu_Gfgmki-G89YPV96-x1oXji79I,3566
616
- meutils/llm/check_utils.py,sha256=Y4icZslJF7rbh4IS6SHPrMWKiNoTsgidjglIfNTw5lI,4744
615
+ meutils/llm/check_api.py,sha256=Cu60Rvp7zLmmazuLXxpK4z-FCab4NrO4nH5LzfYjjoM,3591
616
+ meutils/llm/check_utils.py,sha256=OMRrUrPaIVuXODi-3TCaW5C-XFyq8sE0FDiLvCVpvcM,4917
617
617
  meutils/llm/clients.py,sha256=h-KHaHhzAjE1paW1tHX_LbCi9bfWmkub8NyV6ctsB08,2523
618
618
  meutils/llm/demo.py,sha256=gyGjTxuNFMOa1X4CXaChkq0lcjbKiRsnSRhkeMvsoQk,3822
619
619
  meutils/llm/mappers.py,sha256=ZQLl3OuD06kVMP8bwIpVgAB1UVzMJWUJiZ3vgk-ZjeI,303
620
620
  meutils/llm/utils.py,sha256=4u3b8VO3wX3xKny1AdV4579qXux1YA4k5gI-CYPtx0o,4279
621
621
  meutils/llm/x.py,sha256=ETvKKDTmDNrik0K2-_a_SEQxyV4X4-fy0JPrAOLNPv4,1732
622
622
  meutils/llm/completions/__init__.py,sha256=q5FEYPpo2f_P44Ghdh9fkrmqZLX2Asso8p-nf-ZTqks,244
623
- meutils/llm/completions/chat_gemini.py,sha256=tXqkISSi2EYum4cjo6AsgTS3074nlYZtEt5BZ2HRoiI,1820
624
- meutils/llm/completions/chat_plus.py,sha256=ZLR1OeXzCwBMpNs34wHNQZeJPKfoWIKIP9Eo67aGALc,6874
623
+ meutils/llm/completions/chat_gemini.py,sha256=AqNaoDRbfDVCv2Q8xyqJuuGCz6ndBKTueSzsnM4tEDs,3862
624
+ meutils/llm/completions/chat_plus.py,sha256=mZIAAZ0r_uJeOWRAcidVhuFFuWORB7J2D_BnX1GpKE0,7142
625
625
  meutils/llm/completions/chat_spark.py,sha256=WKXRSCj4Uive95pgPDXcJpQT0tTL0TgFIRY6AQZbYl0,9529
626
+ meutils/llm/completions/chat_videos.py,sha256=P3Yz34dkNlxCxzOuKHJ9pHIA4UXK3Y5RXPzVnQjb9rc,2915
626
627
  meutils/llm/completions/cp.py,sha256=tGf3umHKXDH0KuTfN7BLr8yAvN6MYWLYR5UVaJkJs0c,4172
628
+ meutils/llm/completions/deep2x.py,sha256=v3L5GJMsG0qY67W23o1sXo3N8lB8AetI3mzu_-pGuyI,3331
627
629
  meutils/llm/completions/delilegal.py,sha256=mr53ps7I33SC8Fjy4rma-xoNF-mLgwdZfHgdSOyLtQY,5131
628
630
  meutils/llm/completions/dify.py,sha256=dqL_8uxAp2d8M00pkyh2I30tflwi4pUyX-V6pwe3_BA,3048
629
631
  meutils/llm/completions/kimi.py,sha256=TSkLObebIAb_oivOMq3aKx9qoXcMy611_g2yIKex9eo,1541
630
632
  meutils/llm/completions/modelscope.py,sha256=umPlJuHSL2RR0oNdTIAqts8iqEmGp_MR6Vh49g-UZuc,271
633
+ meutils/llm/completions/openai_gemini.py,sha256=5MwyXkWScE8tRKj6nU7YEhyRCT_ndA8cYjqDJUXfPBw,325
631
634
  meutils/llm/completions/qwenllm.py,sha256=9fTIqtdS4ahPcNqi61YQspVnV2AZlfNU9wiq65QaMpo,10421
632
635
  meutils/llm/completions/rag.py,sha256=cpQ1aZX2QI1QDfFpODTxWHPYglK6_3qrlUM_KHLBNhc,1112
633
636
  meutils/llm/completions/reasoner.py,sha256=rPIxW1iuvLuGhcOa6PkfcJmrTKtJV-8wRKfA09X09tg,6169
@@ -672,7 +675,7 @@ meutils/office_automation/pdf.py,sha256=B8ScuLpqLwVOm4iIaUWGkyQDtJtwEXdmxZHJrbIj
672
675
  meutils/office_automation/pdm.py,sha256=AFKdLd80v0XJThs6toigSdzaW1xT02VdqbDtUWBxdGo,11894
673
676
  meutils/office_automation/pdm_run.py,sha256=GF4VlAXDFQ6oGTrWsLqF4YvrbINhL9Ei8A59cYDeriE,13502
674
677
  meutils/office_automation/report/__init__.py,sha256=llPWtGZdUcsw__Eym2FLOVh4Bew5PgPUDfuKS2s1RMA,244
675
- meutils/oss/__init__.py,sha256=WUp1ZCdwYSN2OrqLlSgYI86vb7-FbqLR8Biu8484hwA,454
678
+ meutils/oss/__init__.py,sha256=CdZLxZtw_3aWFrajRu2D_PhVRvnwgtFyvbY4yAbTGuo,248
676
679
  meutils/oss/minio_oss.py,sha256=CqDbQzSp9zaQp_AAyRswof8_q9rybweZAPRlX53T-lg,6438
677
680
  meutils/oss/minio_utils.py,sha256=e0Vg7i4ncgB6PAs1rJt209jHWzrufkout_PUmb8UWlM,1298
678
681
  meutils/other/__demo.py,sha256=-cAInEF7G_JbOp3v8UHHwQpSrzPk0zqz4XoFnJ81Ixs,979
@@ -763,7 +766,7 @@ meutils/schemas/metaso_types.py,sha256=r_X0Exs_2S3rNS71RneemMpz7EvBIOLBfAMmWMQRn
763
766
  meutils/schemas/napkin_types.py,sha256=Kp0MbpRxzMBz4HWW4DrfcgOvHZVEF3N7P5yNeC1XGI4,2664
764
767
  meutils/schemas/ocr_types.py,sha256=fZWYQAKii7HaTlSU9DS0wHyiEoOHuLnhvgoiH4Cn498,1381
765
768
  meutils/schemas/openai_api_protocol.py,sha256=0GhmhUTEr54N_XCVuZI1MSxJldvwMNJjUAAAdWznw58,12716
766
- meutils/schemas/openai_types.py,sha256=QJZFMVg1mecj-pQa9REPeyOPs_UyTNe81LWEtnCBevo,20568
769
+ meutils/schemas/openai_types.py,sha256=v9Vk66A7Efco3_-yQimo1gSUecwjxD6Yr5zE09nCx8U,21383
767
770
  meutils/schemas/pixverse_types.py,sha256=3mHg2KxvszV1U8K3GdzsODZz4uocLVRjEeJgYhX0Xmw,2347
768
771
  meutils/schemas/playwright_types.py,sha256=zhZd53m1Wg4zlGtq2JM4z7Aon-u_eF6rzs-_TFYWvkU,1177
769
772
  meutils/schemas/prodia_types.py,sha256=knh_lzAxMfWMoqAPmvyMweay9PmQmsoQ1X6Mj17ohWg,476
@@ -840,7 +843,7 @@ meutils/settings/demo.py,sha256=Ht3t6LREQsKa5W2owNrOZNAoZfS-zItIFNwGhhPj-4k,484
840
843
  meutils/str_utils/Translator.py,sha256=tfvNQIeVCqmX9yW6jobeibDHG6X-XecSSAx9kJIFFyw,1258
841
844
  meutils/str_utils/__init__.py,sha256=BzTEbffNPWoJxEgjaRyGIWBxb9FxxlNesOUb7anJRGw,7215
842
845
  meutils/str_utils/json_utils.py,sha256=OXilMxLDtoFq5DAo3mHrIGx3GTOqHARgkcq8-gVYELM,1913
843
- meutils/str_utils/regular_expression.py,sha256=u73pti8KYXV5rhfjEtX0HvRB9_RJdqXvOiIA4Frr37Y,5073
846
+ meutils/str_utils/regular_expression.py,sha256=yDinNxZTicBdm8lcOlco3OsSkf4mDSKKDBMlCtjO0eo,5163
844
847
  meutils/str_utils/__translater/__init__.py,sha256=mtDbKL_Qdkeq5VPVO1M4ejf9H8PzKM5h7iepqkBG8N0,277
845
848
  meutils/str_utils/__translater/tencent.py,sha256=1E_56l6-A49Yuz2ZrMKxt-QJfcf0xDYN2X0dg58Dytk,1408
846
849
  meutils/str_utils/__translater/translater.py,sha256=A_9NLVvkjzPd9omIcJGhux21D-gcCxemyrZ7o6uGx_Q,1238
@@ -914,9 +917,9 @@ meutils/tools/seize.py,sha256=nOKAS63w-Lbi48I0m2MPhdsokUTwxco0laPxYVmW4Mw,1064
914
917
  meutils/tools/service_monitor.py,sha256=ibsLtBN2g2DL7ZnLJ8vhiZOiOcqTAyx711djDdBK-3M,1255
915
918
  meutils/tools/sys_monitor.py,sha256=6MoyzrItqDUOSjfHcMJmMofQkEPTW36CT_aKui0rg84,429
916
919
  meutils/tools/token_monitor.py,sha256=Np-YK-R4P4IPAXyZvMxwvXI4sFmNJQAQK1lSegNaYpA,997
917
- MeUtils-2025.3.19.19.13.35.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
918
- MeUtils-2025.3.19.19.13.35.dist-info/METADATA,sha256=LsYmxjeYKDLqBZRybLtre_R4UiLJOf406tZq4ZkTcRs,32834
919
- MeUtils-2025.3.19.19.13.35.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
920
- MeUtils-2025.3.19.19.13.35.dist-info/entry_points.txt,sha256=lufZlBHRqqZKdY-ZQJ4CSZb0qhV5hQC37egZna9M7ug,357
921
- MeUtils-2025.3.19.19.13.35.dist-info/top_level.txt,sha256=cInfxMmkgNOskurdjwP5unau4rA7Uw48nu07tYhS7KY,22
922
- MeUtils-2025.3.19.19.13.35.dist-info/RECORD,,
920
+ MeUtils-2025.3.20.17.3.20.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
921
+ MeUtils-2025.3.20.17.3.20.dist-info/METADATA,sha256=UpKGInStBbGW9Uh8cb1uHxfGCHd1wNn4NoGMk5qMNXI,32833
922
+ MeUtils-2025.3.20.17.3.20.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
923
+ MeUtils-2025.3.20.17.3.20.dist-info/entry_points.txt,sha256=lufZlBHRqqZKdY-ZQJ4CSZb0qhV5hQC37egZna9M7ug,357
924
+ MeUtils-2025.3.20.17.3.20.dist-info/top_level.txt,sha256=cInfxMmkgNOskurdjwP5unau4rA7Uw48nu07tYhS7KY,22
925
+ MeUtils-2025.3.20.17.3.20.dist-info/RECORD,,
@@ -7,6 +7,8 @@
7
7
  # @WeChat : meutils
8
8
  # @Software : PyCharm
9
9
  # @Description :
10
+ import os
11
+
10
12
  from openai import OpenAI
11
13
  from meutils.pipe import *
12
14
 
@@ -28,12 +30,15 @@ text = """
28
30
  “至简”:简约简朴、脚踏实地、知行合一
29
31
  """
30
32
  r = OpenAI(
31
- # base_url=base_url
33
+ # base_url="https://go.sbgpt.site/v1",
34
+ # api_key="sk-PyICIMVRnckfQFjCTvnWjiFxpwYQvQmlwgw4EktV73tSkvXG",
35
+
36
+ api_key=os.getenv("OPENAI_API_KEY_OPENAI") + "-2738"
32
37
  ).audio.speech.create(input=text,
33
38
  model='tts-1',
34
39
  # model=model,
35
40
  # voice="1"
36
- voice="alloy"
41
+ voice="alloy"
37
42
  )
38
43
 
39
44
  r.stream_to_file('nesc.mp3')
@@ -15,7 +15,7 @@ import shortuuid
15
15
  from fish_audio_sdk import Session, TTSRequest, ASRRequest
16
16
 
17
17
  from meutils.pipe import *
18
- from meutils.io.files_utils import to_url
18
+ from meutils.io.files_utils import to_url_fal as to_url
19
19
 
20
20
  from meutils.config_utils.lark_utils import get_next_token_for_polling
21
21
  from meutils.notice.feishu import send_message as _send_message
@@ -20,7 +20,7 @@ from meutils.decorators.contextmanagers import try_catcher
20
20
  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
- from meutils.io.files_utils import to_url, to_bytes, to_base64, to_url_fal
23
+ from meutils.io.files_utils import to_bytes, to_base64, to_url_fal as to_url, to_url_fal
24
24
  from meutils.apis.proxy.ips import get_one_proxy
25
25
  from fake_useragent import UserAgent
26
26
 
@@ -15,7 +15,7 @@ from meutils.schemas.yuanbao_types import FEISHU_URL, YUANBAO_BASE_URL
15
15
  from meutils.schemas.image_types import HunyuanImageProcessRequest
16
16
 
17
17
  from meutils.config_utils.lark_utils import get_next_token_for_polling
18
- from meutils.io.files_utils import to_url
18
+ from meutils.io.files_utils import to_url_fal as to_url
19
19
  from meutils.notice.feishu import send_message
20
20
 
21
21
 
@@ -10,27 +10,37 @@
10
10
 
11
11
  from meutils.pipe import *
12
12
 
13
-
14
13
  from meutils.pipe import *
14
+ from meutils.io.files_utils import to_url_fal
15
15
 
16
16
  from openai import OpenAI
17
17
 
18
18
  client = OpenAI(
19
- base_url="https://ai.gitee.com/v1",
20
- api_key="WPCSA3ZYD8KBQQ2ZKTAPVUA059J2Q47TLWGB2ZMQ",
21
- default_headers={"X-Failover-Enabled": "true", "X-Package": "1910"},
19
+ # base_url="https://ai.gitee.com/v1",
20
+ # api_key="WPCSA3ZYD8KBQQ2ZKTAPVUA059J2Q47TLWGB2ZMQ",
21
+ # default_headers={"X-Failover-Enabled": "true", "X-Package": "1910"},
22
+
22
23
  )
23
24
 
25
+ "https://api.aiguoguo199.com/v1/images/generations"
26
+ # client = OpenAI(
27
+ # base_url="https://ai.gitee.com/v1",
28
+ # api_key="WPCSA3ZYD8KBQQ2ZKTAPVUA059J2Q47TLWGB2ZMQ",
29
+ # default_headers={"X-Failover-Enabled": "true", "X-Package": "1910"},
30
+ # )
24
31
  response = client.images.edit(
25
- model="Kolors",
32
+ # model="Kolors",
33
+ model="gemini-2.0-flash-exp-image-generation",
26
34
  prompt="笑起来",
27
35
  size="1024x1024",
28
- extra_body={
29
- "steps": 25,
30
- "guidance_scale": 6,
31
- },
32
-
33
- mask=open("test.png", "rb"),
36
+ # extra_body={
37
+ # "steps": 25,
38
+ # "guidance_scale": 6,
39
+ # },
34
40
 
41
+ # mask=open("test.png", "rb"),
35
42
  image=open("test.png", "rb"),
36
- )
43
+ )
44
+
45
+ if __name__ == '__main__':
46
+ arun(to_url_fal(response.data[0].b64_json, content_type="image/png"))
meutils/apis/proxy/ips.py CHANGED
@@ -118,25 +118,9 @@ async def get_proxies(request_type: str = "httpx", **kwargs):
118
118
  return proxies
119
119
 
120
120
 
121
- async def check_proxy(proxies):
122
- """
123
- {
124
- "origin": "125.106.86.83"
125
- }
126
-
127
- :param proxies:
128
- :return:
129
- """
130
- _proxies = proxies.copy()
131
-
132
- if 'http://' not in _proxies:
133
- _proxies = {
134
- "http://": proxies['http://'],
135
- "https://": proxies['https://'],
136
- }
137
-
121
+ async def check_proxy(proxy):
138
122
  try:
139
- async with httpx.AsyncClient(proxies=_proxies) as client:
123
+ async with httpx.AsyncClient(proxy=proxy) as client:
140
124
  response = await client.get("http://icanhazip.com", timeout=5) # http://httpbin.org/ip
141
125
  logger.debug(response.status_code)
142
126
  logger.debug(response.text)
@@ -164,12 +148,9 @@ if __name__ == '__main__':
164
148
  ip = "http://154.9.252.28:38443"
165
149
  ip = "http://110.42.51.223:38443"
166
150
  ip = "http://154.40.54.76:38443"
151
+ proxy = "http://120.26.134.112:22443"
167
152
 
168
- proxies = {'http://': ip, 'https://': ip}
169
-
170
- # print(proxies)
171
-
172
- # arun(check_proxy(proxies))
153
+ # arun(check_proxy(proxy))
173
154
 
174
155
  arun(get_one_proxy())
175
156
 
meutils/apis/textin.py CHANGED
@@ -14,7 +14,7 @@
14
14
  from meutils.pipe import *
15
15
  from meutils.decorators.retry import retrying
16
16
  from meutils.notice.feishu import send_message
17
- from meutils.io.files_utils import to_url
17
+ from meutils.io.files_utils import to_url_fal as to_url
18
18
  from meutils.apis.proxy.ips import get_one_proxy
19
19
 
20
20
  from fake_useragent import UserAgent
@@ -48,7 +48,11 @@ async def aget_app_access_token():
48
48
  "app_id": os.getenv("FEISHU_APP_ID"),
49
49
  "app_secret": os.getenv("FEISHU_APP_SECRET")
50
50
  }
51
- async with httpx.AsyncClient(base_url=FEISHU_BASE_URL, timeout=30) as client:
51
+ logger.debug(payload)
52
+ kwargs = {
53
+ "proxy": np.random.choice(["http://110.42.51.223:38443", None])
54
+ }
55
+ async with httpx.AsyncClient(base_url=FEISHU_BASE_URL, timeout=30, **kwargs) as client:
52
56
  response = await client.post("/auth/v3/app_access_token/internal", json=payload)
53
57
 
54
58
  return response.is_success and response.json().get("app_access_token") # False / None
meutils/data/VERSION CHANGED
@@ -1 +1 @@
1
- 2025.03.19.19.13.35
1
+ 2025.03.20.17.03.20
meutils/io/files_utils.py CHANGED
@@ -9,6 +9,9 @@
9
9
  # @Description :
10
10
 
11
11
  import mimetypes
12
+
13
+ import shortuuid
14
+
12
15
  from meutils.pipe import *
13
16
  from meutils.decorators.retry import retrying
14
17
  from meutils.caches.redis_cache import cache
@@ -111,7 +114,7 @@ async def to_url_fal(
111
114
  headers: Optional[dict] = None,
112
115
  content_type: str = "application/octet-stream",
113
116
  ):
114
- """对象存储"""
117
+ """对象存储 todo: minio"""
115
118
  if isinstance(file, list):
116
119
  tasks = [to_url_fal(_, filename, headers, content_type) for _ in file]
117
120
  urls = await asyncio.gather(*tasks)
@@ -139,22 +142,14 @@ async def to_url(
139
142
  file: Union[UploadFile, str, bytes],
140
143
  filename: Optional[str] = None,
141
144
  headers: Optional[dict] = None,
142
- content_type: Optional[str] = "image/*" # todo: 适配 mime_type = "application/octet-stream"
145
+ content_type: Optional[str] = "image/png" # todo: 适配 mime_type = "application/octet-stream"
143
146
  ):
144
147
  """对象存储"""
145
148
  if not file: return
146
149
 
147
150
  from openai.types.file_object import FileObject
148
151
  from meutils.oss.minio_oss import Minio
149
- uploads = [partial(Minio().put_object_for_openai, filename=filename)]
150
-
151
- if len(file) < 1024 and isinstance(file, str) or filename: # 不指定就自行判断 url
152
- content_type = mimetypes.guess_type(filename)[0] or mimetypes.guess_type(file)[0] or content_type
153
-
154
- if content_type and content_type.startswith("image"):
155
- from meutils.apis.chatglm.glm_video import upload_task as glm_upload
156
-
157
- uploads = [glm_upload, ] + uploads
152
+ uploads = [partial(Minio().put_object_for_openai, filename=filename, content_type=content_type)]
158
153
 
159
154
  for upload in uploads:
160
155
  try:
@@ -199,6 +194,17 @@ async def to_file(file: Union[UploadFile, str, bytes], filename: Optional[str] =
199
194
  return Path(filename).resolve()
200
195
 
201
196
 
197
+ async def markdown_base64_to_url(text, pattern=r'!\[Image_\d+\]\((.+?)\)'):
198
+ base64_strings = re.findall(pattern, text)
199
+
200
+ tasks = [to_url(base64_string, filename=f"{shortuuid.random()}.png") for base64_string in base64_strings]
201
+ urls = await asyncio.gather(*tasks)
202
+
203
+ for base64_string, url in zip(base64_strings, urls):
204
+ text = text.replace(base64_string, url)
205
+ return text
206
+
207
+
202
208
  if __name__ == '__main__':
203
209
  # import tempfile
204
210
  #
@@ -226,14 +232,14 @@ if __name__ == '__main__':
226
232
 
227
233
  # arun(to_url_fal([file] * 1))
228
234
 
229
- print(mimetypes.guess_type("http://url"))
230
- print(mimetypes.guess_type("http://url.pdf"))
231
- print(mimetypes.guess_type("http://url.php"))
232
-
233
- print(mimetypes.guess_type("xx.txt"))
234
- print(mimetypes.guess_type("xx.html"))
235
- print(mimetypes.guess_type("xx.mp3"))
236
- print(mimetypes.guess_type("xx.mp4"))
235
+ # print(mimetypes.guess_type("http://url"))
236
+ # print(mimetypes.guess_type("http://url.pdf"))
237
+ # print(mimetypes.guess_type("http://url.php"))
238
+ #
239
+ # print(mimetypes.guess_type("xx.txt"))
240
+ # print(mimetypes.guess_type("xx.html"))
241
+ # print(mimetypes.guess_type("xx.mp3"))
242
+ # print(mimetypes.guess_type("xx.mp4"))
237
243
 
238
244
  # print(guess_mime_type("http://url")) # application # msword
239
245
 
@@ -251,3 +257,7 @@ if __name__ == '__main__':
251
257
 
252
258
  # arun(to_url_fal(url))
253
259
  # print(guess_mime_type("base64xxxxxxxxxxxxxxxxxx.png"))
260
+
261
+ # arun(to_url(Path('img_1.png').read_bytes()))
262
+
263
+ arun(markdown_base64_to_url("![Image_0](data:image)"))
meutils/llm/check_api.py CHANGED
@@ -106,4 +106,6 @@ if __name__ == '__main__':
106
106
  for api_key in api_keys:
107
107
  if api_key:
108
108
  if arun(check(api_key, "https://all.chatfire.cn/kimi/token/check")):
109
- l.append(api_key)
109
+ l.append(api_key)
110
+
111
+ print('\n'.join(l))
@@ -146,4 +146,7 @@ if __name__ == '__main__':
146
146
 
147
147
  # arun(check_token_for_jina(["jina_c8da77fed9704d558c8def39837960edplTLkNYrsPTJHBF1HcYg_RkRVh0X"]*10))
148
148
 
149
- arun(check_token_for_siliconflow("sk-zdsfykbjrdzobopoienanvlpqdsttbbmgpayctqokkrwqazg"))
149
+ # arun(check_token_for_siliconflow("sk-zdsfykbjrdzobopoienanvlpqdsttbbmgpayctqokkrwqazg"))
150
+ "https://xchatllm.feishu.cn/sheets/Bmjtst2f6hfMqFttbhLcdfRJnNf?sheet=79272d"
151
+
152
+ arun(check_token_for_moonshot("sk-Qnr87vtf2Q6MEfc2mVNkVZ4qaoZg3smH9527I25QgcFe7HrT"))
@@ -6,12 +6,16 @@
6
6
  # @Author : betterme
7
7
  # @WeChat : meutils
8
8
  # @Software : PyCharm
9
- # @Description :
9
+ # @Description :
10
+ import asyncio
10
11
 
12
+ import shortuuid
11
13
 
12
14
  from meutils.pipe import *
13
15
  from meutils.llm.openai_utils import to_openai_params
14
16
  from meutils.llm.clients import AsyncOpenAI
17
+ from meutils.str_utils.regular_expression import parse_url
18
+ from meutils.io.files_utils import to_url, markdown_base64_to_url
15
19
 
16
20
  from meutils.schemas.openai_types import chat_completion, chat_completion_chunk, CompletionRequest, CompletionUsage
17
21
 
@@ -31,12 +35,18 @@ class Completions(object):
31
35
  base_url: Optional[str] = None,
32
36
  api_key: Optional[str] = None
33
37
  ):
38
+
39
+ base_url = "https://api.aiguoguo199.com/v1"
40
+
34
41
  self.client = AsyncOpenAI(
35
42
  base_url=base_url,
36
43
  api_key=api_key,
37
44
  )
38
45
 
39
46
  async def create(self, request: CompletionRequest):
47
+ if request.model == "gemini-2.0-flash-exp-image-generation":
48
+ return await self.images_create(request)
49
+
40
50
  urls = sum(request.last_urls.values(), [])
41
51
  for url in urls:
42
52
  request.messages[-1]["content"].append({"type": "image_url", "image_url": {"url": url}})
@@ -44,6 +54,46 @@ class Completions(object):
44
54
  data = to_openai_params(request)
45
55
  return await self.client.chat.completions.create(**data)
46
56
 
57
+ async def images_create(self, request: CompletionRequest):
58
+
59
+ if request.last_assistant_content and (urls := parse_url(request.last_assistant_content)):
60
+ for message in request.messages[::-1]:
61
+ if message.get("role") == "assistant":
62
+ message["content"] = [
63
+ {"type": "image_url", "image_url": {"url": url.removesuffix(")")}} for url in urls
64
+ ]
65
+
66
+ if urls := parse_url(request.last_user_content): # 修正提问格式, 兼容 url
67
+ for message in request.messages[::-1]:
68
+ if message.get("role") == "user":
69
+ message["content"] = [
70
+ {"type": "image_url", "image_url": {"url": url.removesuffix(")")}} for url in urls
71
+ ]
72
+ message["content"] += [{"type": "text", "text": request.last_user_content}]
73
+
74
+ # 调用模型
75
+ logger.debug(request.model_dump_json(indent=4))
76
+
77
+ data = to_openai_params(request)
78
+ response = await self.client.chat.completions.create(**data)
79
+
80
+ if request.stream:
81
+ return self.stream_create(response)
82
+
83
+ else:
84
+ content = response.choices[0].message.content
85
+ response.choices[0].message.content = await markdown_base64_to_url(content) # base64 转 url
86
+
87
+ return response
88
+
89
+ async def stream_create(self, chunks):
90
+ async for chunk in chunks:
91
+ if (content := chunk.choices[0].delta.content) and content.startswith("!["):
92
+ chunk.choices[0].delta.content = await markdown_base64_to_url(content)
93
+ yield chunk
94
+ else:
95
+ yield chunk
96
+
47
97
 
48
98
  if __name__ == '__main__':
49
99
  url = "https://oss.ffire.cc/files/lipsync.mp3"
@@ -76,7 +76,7 @@ class Completions(object):
76
76
  }
77
77
  ]
78
78
  data = to_openai_params(request)
79
- return self.client.chat.completions.create(**data)
79
+ return await self.client.chat.completions.create(**data)
80
80
 
81
81
  elif guess_mime_type(file_url).startswith(("video", "audio")): # 音频 视频
82
82
  request.model = "gemini" # 果果
@@ -98,7 +98,7 @@ class Completions(object):
98
98
  }
99
99
  ]
100
100
  data = to_openai_params(request)
101
- return self.client.chat.completions.create(**data)
101
+ return await self.client.chat.completions.create(**data)
102
102
 
103
103
  else:
104
104
 
@@ -111,18 +111,18 @@ class Completions(object):
111
111
  }
112
112
  ]
113
113
  data = to_openai_params(request)
114
- return self.client.chat.completions.create(**data)
114
+ return await self.client.chat.completions.create(**data)
115
115
 
116
116
  if image_urls := request.last_urls.get("image_url"): # 识图
117
117
  request.model = "glm-4v-flash"
118
118
  data = to_openai_params(request)
119
- return self.client.chat.completions.create(**data)
119
+ return await self.client.chat.completions.create(**data)
120
120
 
121
121
  elif file_urls := request.last_urls.get("file_url"):
122
- return self.chat_files(request)
122
+ return await self.chat_files(request)
123
123
 
124
124
  data = to_openai_params(request)
125
- return self.client.chat.completions.create(**data)
125
+ return await self.client.chat.completions.create(**data)
126
126
 
127
127
  async def chat_files(self, request: CompletionRequest): # 多轮
128
128
  for i, message in enumerate(request.messages[::-1], 1):
@@ -142,7 +142,7 @@ class Completions(object):
142
142
  break # 截断:从最新的文件开始
143
143
 
144
144
  data = to_openai_params(request)
145
- return self.client.chat.completions.create(**data)
145
+ return await self.client.chat.completions.create(**data)
146
146
 
147
147
  async def create_images(self, request: CompletionRequest):
148
148
 
@@ -153,7 +153,13 @@ class Completions(object):
153
153
  )
154
154
  image_url = response.data[0].url
155
155
  tool_desc = """> images.generate\n\n"""
156
- return tool_desc + f"![{request.last_user_content}]({image_url})"
156
+ tool_desc += f"![{request.last_user_content}]({image_url})"
157
+ if not request.stream:
158
+ chat_completion.choices[0].message.content = tool_desc
159
+ return chat_completion
160
+ return tool_desc
161
+
162
+ # chat_completion_chunk
157
163
 
158
164
  # async def create_videos(self, request: CompletionRequest):
159
165
  #
@@ -169,9 +175,9 @@ if __name__ == '__main__':
169
175
  c = Completions()
170
176
 
171
177
  request = CompletionRequest(
172
- model="qwen-turbo-2024-11-01",
178
+ # model="qwen-turbo-2024-11-01",
173
179
  # model="claude-3-5-sonnet-20241022",
174
- # model="gpt-4o-mini",
180
+ model="gpt-4o-mini",
175
181
 
176
182
  messages=[{
177
183
  'role': 'user',
@@ -181,10 +187,12 @@ if __name__ == '__main__':
181
187
  "text": "总结下"
182
188
  },
183
189
 
184
- # {
185
- # "type": "image_url",
186
- # "image_url": "https://oss.ffire.cc/files/招标文件备案表(第二次).pdf"
187
- # }
190
+ {
191
+ "type": "file_url",
192
+ "file_url": {
193
+ "url": "https://oss.ffire.cc/files/招标文件备案表(第二次).pdf"
194
+ }
195
+ }
188
196
  ]
189
197
  }])
190
198