MeUtils 2024.11.29.11.8.36__py3-none-any.whl → 2024.11.29.18.21.1__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-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/METADATA +28 -28
- {MeUtils-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/RECORD +21 -20
- examples/_openaisdk/openai_tune.py +5 -23
- meutils/async_task/__init__.py +3 -1
- meutils/async_task/common.py +3 -15
- meutils/async_task/demo_create_tasks.py +13 -3
- meutils/async_task/tasks/__init__.py +2 -0
- meutils/async_task/tasks/kling.py +11 -12
- meutils/async_task/tasks/test.py +17 -4
- meutils/async_task/utils.py +97 -0
- meutils/data/VERSION +1 -1
- meutils/db/orm.py +7 -7
- meutils/schemas/db/oneapi_types.py +1 -33
- meutils/schemas/oneapi/common.py +2 -2
- meutils/schemas/task_types.py +66 -3
- meutils/serving/fastapi/dependencies/auth.py +25 -1
- meutils/serving/fastapi/utils.py +1 -1
- {MeUtils-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/LICENSE +0 -0
- {MeUtils-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/WHEEL +0 -0
- {MeUtils-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/entry_points.txt +0 -0
- {MeUtils-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: MeUtils
|
3
|
-
Version: 2024.11.29.
|
3
|
+
Version: 2024.11.29.18.21.1
|
4
4
|
Summary: description
|
5
5
|
Home-page: https://github.com/yuanjie-ai/MeUtils
|
6
6
|
Author: yuanjie
|
@@ -61,42 +61,42 @@ Requires-Dist: sse-starlette ; extra == 'ai'
|
|
61
61
|
Requires-Dist: openai ; extra == 'ai'
|
62
62
|
Requires-Dist: langchain ; extra == 'ai'
|
63
63
|
Provides-Extra: all
|
64
|
+
Requires-Dist: thriftpy2 ; extra == 'all'
|
65
|
+
Requires-Dist: seaborn ; extra == 'all'
|
64
66
|
Requires-Dist: faiss-cpu ; extra == 'all'
|
65
|
-
Requires-Dist:
|
67
|
+
Requires-Dist: pymupd ; extra == 'all'
|
68
|
+
Requires-Dist: pymongo ; extra == 'all'
|
66
69
|
Requires-Dist: openai ; extra == 'all'
|
67
|
-
Requires-Dist:
|
68
|
-
Requires-Dist: asyncmy ; extra == 'all'
|
69
|
-
Requires-Dist: jmespath ; extra == 'all'
|
70
|
-
Requires-Dist: uvicorn ; extra == 'all'
|
71
|
-
Requires-Dist: pymilvus ; extra == 'all'
|
72
|
-
Requires-Dist: pretty-errors ; extra == 'all'
|
73
|
-
Requires-Dist: gunicorn ; extra == 'all'
|
74
|
-
Requires-Dist: schedule ; extra == 'all'
|
75
|
-
Requires-Dist: jieba ; extra == 'all'
|
70
|
+
Requires-Dist: thefuck ; extra == 'all'
|
76
71
|
Requires-Dist: fastapi[all] ; extra == 'all'
|
77
|
-
Requires-Dist:
|
78
|
-
Requires-Dist: streamlit ; extra == 'all'
|
79
|
-
Requires-Dist: pandas-profiling[notebook] ; extra == 'all'
|
80
|
-
Requires-Dist: seaborn ; extra == 'all'
|
81
|
-
Requires-Dist: pyarrow ; extra == 'all'
|
82
|
-
Requires-Dist: redis-py-cluster ; extra == 'all'
|
83
|
-
Requires-Dist: langchain ; extra == 'all'
|
84
|
-
Requires-Dist: simplejson ; extra == 'all'
|
85
|
-
Requires-Dist: missingno ; extra == 'all'
|
72
|
+
Requires-Dist: sse-starlette ; extra == 'all'
|
86
73
|
Requires-Dist: filetype ; extra == 'all'
|
87
|
-
Requires-Dist:
|
74
|
+
Requires-Dist: cachetools ; extra == 'all'
|
75
|
+
Requires-Dist: gunicorn ; extra == 'all'
|
88
76
|
Requires-Dist: fastapi ; extra == 'all'
|
89
|
-
Requires-Dist:
|
90
|
-
Requires-Dist:
|
77
|
+
Requires-Dist: pymilvus ; extra == 'all'
|
78
|
+
Requires-Dist: iteration-utilities ; extra == 'all'
|
79
|
+
Requires-Dist: geopy ; extra == 'all'
|
91
80
|
Requires-Dist: pymysql ; extra == 'all'
|
92
|
-
Requires-Dist:
|
93
|
-
Requires-Dist:
|
81
|
+
Requires-Dist: missingno ; extra == 'all'
|
82
|
+
Requires-Dist: jieba ; extra == 'all'
|
83
|
+
Requires-Dist: schedule ; extra == 'all'
|
84
|
+
Requires-Dist: asyncmy ; extra == 'all'
|
94
85
|
Requires-Dist: reportlab ; extra == 'all'
|
95
|
-
Requires-Dist:
|
96
|
-
Requires-Dist:
|
86
|
+
Requires-Dist: redis-py-cluster ; extra == 'all'
|
87
|
+
Requires-Dist: pretty-errors ; extra == 'all'
|
88
|
+
Requires-Dist: jmespath ; extra == 'all'
|
89
|
+
Requires-Dist: polars ; extra == 'all'
|
97
90
|
Requires-Dist: sqlalchemy ; extra == 'all'
|
98
|
-
Requires-Dist: jinja2 ; extra == 'all'
|
99
91
|
Requires-Dist: pandas-summary ; extra == 'all'
|
92
|
+
Requires-Dist: langchain ; extra == 'all'
|
93
|
+
Requires-Dist: jinja2 ; extra == 'all'
|
94
|
+
Requires-Dist: simplejson ; extra == 'all'
|
95
|
+
Requires-Dist: pandas-profiling[notebook] ; extra == 'all'
|
96
|
+
Requires-Dist: dataframe-image ; extra == 'all'
|
97
|
+
Requires-Dist: pyarrow ; extra == 'all'
|
98
|
+
Requires-Dist: uvicorn ; extra == 'all'
|
99
|
+
Requires-Dist: streamlit ; extra == 'all'
|
100
100
|
Provides-Extra: ann
|
101
101
|
Requires-Dist: pymilvus ; extra == 'ann'
|
102
102
|
Requires-Dist: faiss-cpu ; extra == 'ann'
|
@@ -105,7 +105,7 @@ examples/_openaisdk/openai_search.py,sha256=HKRTU6y9j_nUfZgrJt2eZ84d7TVT39WN-dcA
|
|
105
105
|
examples/_openaisdk/openai_sensenova.py,sha256=TnJpHcD1tG5w_x5DsgFgBRWrU8XUkww0uCebgNFfZDM,3216
|
106
106
|
examples/_openaisdk/openai_siliconflow.py,sha256=SuOwW7XmoBpKtLRbi7MFovjfeI2sFWhgOYh11O0vBR4,1349
|
107
107
|
examples/_openaisdk/openai_step.py,sha256=KSSnBwJZbjpPuevqBXGiEBHQidHedePsr4Jfj6ruVO0,943
|
108
|
-
examples/_openaisdk/openai_tune.py,sha256=
|
108
|
+
examples/_openaisdk/openai_tune.py,sha256=rDmX_EMsAhD0gKJPQ8P0-icZQAjV6OMkMLX67uwJtvU,674
|
109
109
|
examples/_openaisdk/openai_zhipu.py,sha256=K13ogb2IZO0-_ItLqHIAFWaN6FH2vd72PdieIXMZNx8,1626
|
110
110
|
examples/_openaisdk/ppu.py,sha256=jPBufoYt2ZrqNKjgbHr49YZI5vBM-32eBYbhbYduhnY,602
|
111
111
|
examples/_openaisdk/rag.py,sha256=NwNHhfi5FZ2XKCmsScjmM5cxCSfJuqx2jV-69ZXh244,1372
|
@@ -415,15 +415,16 @@ meutils/apis/vidu/x.py,sha256=UD1QlAQTtLgFiDfWYVxM-1ppfrX_LaVYASk2yNviMuk,322
|
|
415
415
|
meutils/apis/voice_clone/__init__.py,sha256=y7Rpn90LocHhA0ywrDP_fT4QAK7sr4JsIX5wLJgkNHA,241
|
416
416
|
meutils/apis/voice_clone/fish.py,sha256=6m8zcS2KEqmalKy2ArnOaNovyxsQp_sw4d_O1kVZR2s,7146
|
417
417
|
meutils/apis/voice_clone/fish_api.py,sha256=pDpE-B8HFiGIOV3NVd1HmFrCC2GQc3wH-81oNbTS0mY,307
|
418
|
-
meutils/async_task/__init__.py,sha256=
|
418
|
+
meutils/async_task/__init__.py,sha256=45cUr-GWvQ1JFYGOYPOIkHLyTR3JbfP_PEYrmktpMLo,367
|
419
419
|
meutils/async_task/celery_config.py,sha256=Mv8YjLQlHsWbVHw3wkauMw2H1g46KNnJa4EPehFj6dw,3308
|
420
|
-
meutils/async_task/common.py,sha256=
|
421
|
-
meutils/async_task/demo_create_tasks.py,sha256=
|
420
|
+
meutils/async_task/common.py,sha256=ZJ4e0CsEJf1ppPmGSwPCwhZBAkUL5xsi_t1ny-bJuko,845
|
421
|
+
meutils/async_task/demo_create_tasks.py,sha256=DBUxi8lp4iJZrubn6XztRHB4DuZDEXpohSxCH6NMKuc,2219
|
422
|
+
meutils/async_task/utils.py,sha256=IgGcKkD6yut_CagnRanRPY180kM6FpYO0dFyJKJ50zQ,2933
|
422
423
|
meutils/async_task/通用设计.py,sha256=kGdrJHJu9VoOkyGHREn0KUtBTibAaLIcG0O6hEJNhLA,3232
|
423
|
-
meutils/async_task/tasks/__init__.py,sha256=
|
424
|
+
meutils/async_task/tasks/__init__.py,sha256=flHRXJMdts_9az9T9V1c5l3Y-gaDD88COWrARr4WAKU,246
|
424
425
|
meutils/async_task/tasks/_all.py,sha256=Vz63k9yvgj-IBGjekm0u2t571TTT0nMRMqcPvPqJAbY,533
|
425
|
-
meutils/async_task/tasks/kling.py,sha256=
|
426
|
-
meutils/async_task/tasks/test.py,sha256=
|
426
|
+
meutils/async_task/tasks/kling.py,sha256=DwOUHyNDBpM1olCpow_cVct8iPpg2PEqY180wpTt07o,904
|
427
|
+
meutils/async_task/tasks/test.py,sha256=f-QY-k81ixe4x-rRO7yqStZ1w8MdVoq-ooq9bDzXOeI,2148
|
427
428
|
meutils/async_task/tasks/vidu.py,sha256=obBG4_bf1oPIlLxeca1s1dGOnlyam2xYRy-8TrH3ZTk,620
|
428
429
|
meutils/async_utils/__init__.py,sha256=IiJLRm258jkM4xAjUKOD7tVwHIemj7_1CuzXCu3TuQU,284
|
429
430
|
meutils/async_utils/asyncer_.py,sha256=S1Sp5WZx_uKM7kJyRVYU8QhmbjOh61JmfN2IN_PJNX4,736
|
@@ -458,7 +459,7 @@ meutils/config_utils/lark_utils/demo.py,sha256=3g0Fs7oLaeW75T60gYWMLgyNg1OnfOjfH
|
|
458
459
|
meutils/config_utils/lark_utils/x.py,sha256=MlMQGhehP9xMEgetxVCX68XFaosfKoW1JA5cZ3JqN2w,1857
|
459
460
|
meutils/crawlers/__init__.py,sha256=TBU4xA-IOsHV-0yIkW7YXxn_QT7TT8NncqxO7IykEfs,271
|
460
461
|
meutils/data/SimHei.ttf,sha256=-XEnekS5yHP_URkT4XBI2w22ylV-KxudhkeIYFbrILA,10062565
|
461
|
-
meutils/data/VERSION,sha256=
|
462
|
+
meutils/data/VERSION,sha256=DLrVpDq7LFcQTu5Bosj924g93X879qfc52nPn1RrbTo,19
|
462
463
|
meutils/data/_FLAG,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
463
464
|
meutils/data/_SUCCESS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
464
465
|
meutils/data/__init__.py,sha256=Hfwkkxs4zHqKhxht0YrhS566a9P5axtmgNvM5wF8ceQ,243
|
@@ -470,7 +471,7 @@ meutils/data/oneapi/__init__.py,sha256=cm2Kq2RDXPfdVMWcoBB77bu00zJpTDd21Rgc6bTlh
|
|
470
471
|
meutils/db/__init__.py,sha256=HR99rqxoFTWXUHDhLVl33tzIn8M86gigHLmEzOKH1Ec,7637
|
471
472
|
meutils/db/mongo.py,sha256=B-B_t939rxtnNGt0PxhivjIUwinmHPzLUpXsjUIaTkQ,2337
|
472
473
|
meutils/db/neo4j.py,sha256=eYd3jP3COWlOFBaF20UXphW67-HwlZ1t0Q34Cp-j6o0,2168
|
473
|
-
meutils/db/orm.py,sha256=
|
474
|
+
meutils/db/orm.py,sha256=dyV8tlVDUw_8tS6uiz_nyPzpNg8UX-ob7zarLVfvvqE,4060
|
474
475
|
meutils/db/redis_db.py,sha256=vBe-Yj2JxZS8-G7bmMB4oxxMrV1xUwy22kGaETMb0DE,2085
|
475
476
|
meutils/decorators/__ai.py,sha256=QAz005-Wa-sp0YUUoelaR1pMbt6hPSBML5j0My6TbEI,1681
|
476
477
|
meutils/decorators/__init__.py,sha256=hgpHo40pfFWYXEnrW74o8W7SIfCD0GHr3gnujBw1hIQ,3284
|
@@ -653,7 +654,7 @@ meutils/schemas/runwayml_types.py,sha256=q6g00kg1PYCDjpw-notgbcUGwRAlIa8kAmU52Zu
|
|
653
654
|
meutils/schemas/siliconflow_types.py,sha256=amOygjMqbSss4021sCNX1p5d-k1wa2tNLr0gnke1Vrc,8429
|
654
655
|
meutils/schemas/step_types.py,sha256=nGTPXZ7RwOF2RTsPBQguLLcIaBxHs4bsZkYa_LalcJ0,648
|
655
656
|
meutils/schemas/suno_types.py,sha256=KTdcwaJNDUFiY8izVJSZdGZgEMb0OhdiRR_dJVN-Cz0,14967
|
656
|
-
meutils/schemas/task_types.py,sha256=
|
657
|
+
meutils/schemas/task_types.py,sha256=G2qzqdNfYKzeJwps_QNiqV4_Qo0MSdxwqqITD8dtajo,4317
|
657
658
|
meutils/schemas/translator_types.py,sha256=xufNQeyim7RhkzAK_J5_JchZfqaUBDXFwMtrPUu1xzI,627
|
658
659
|
meutils/schemas/tripo3d_types.py,sha256=mQF65HwHYmczRgAIuXK5hGxWDWNYDq-Xu9pja7Dwy4o,1452
|
659
660
|
meutils/schemas/tryblend_types.py,sha256=glZ0diRJvZmfQotcCWYBA832inihy8TvVWxWZ64CzWA,27793
|
@@ -662,10 +663,10 @@ meutils/schemas/vidu_types.py,sha256=Wa947mT5pL9yR4utM-A9oQvNvgaJorr9YRccryHnHH4
|
|
662
663
|
meutils/schemas/wechat_types.py,sha256=XtIJpMNBzkqBcU68Qno8bnUfHzDOXwFNCIL-6VYQKOA,9260
|
663
664
|
meutils/schemas/yuanbao_types.py,sha256=ZmB-7_eAuTU3QDonNgy0vcVP4YQNwA5yJ8G4mvfOmUE,11966
|
664
665
|
meutils/schemas/db/__init__.py,sha256=m1maURVoM6dIW0yt6ELZrZTzULtkHybVOSXtHNJRVIU,272
|
665
|
-
meutils/schemas/db/oneapi_types.py,sha256=
|
666
|
+
meutils/schemas/db/oneapi_types.py,sha256=1QEcIkT5dp1SnjEj2cwiZXPjjh6StGf0_gpGFDbGrNI,2806
|
666
667
|
meutils/schemas/oneapi/__init__.py,sha256=uevbi3QAvFzN9WPbx9bYKTDyKt7P2ueZO6W0nSiD0sk,289
|
667
668
|
meutils/schemas/oneapi/_types.py,sha256=ClvAaNy3SahEN8lL8KEErHTD6HANelXUeKc_3iLfosQ,1488
|
668
|
-
meutils/schemas/oneapi/common.py,sha256=
|
669
|
+
meutils/schemas/oneapi/common.py,sha256=DPo8jsY0ytKFTILKi3-Apz6VK6cM_lBJ1xKqDNRjT88,22573
|
669
670
|
meutils/schemas/oneapi/icons.py,sha256=T7W5gInBJoHe62wzMimbG_UI-wn3_-rmQ1O4O2z-CQY,1089
|
670
671
|
meutils/schemas/oneapi/model_group_info.py,sha256=rGtflYJuFIjk5MsVEvK9JUR4IciX8jfErqeLqf8DIlQ,1586
|
671
672
|
meutils/schemas/oneapi/model_info.py,sha256=_uwKEPIIqm7ZYfhmpxtXB2QNsS83SpJY-OaBzvogC9w,772
|
@@ -684,11 +685,11 @@ meutils/serving/celery/通用设计.py,sha256=kGdrJHJu9VoOkyGHREn0KUtBTibAaLIcG0
|
|
684
685
|
meutils/serving/fastapi/__init__.py,sha256=_NvGfai2sMzsywCQk-hYRm-nTz0O6op2ln5kEUiqGqM,290
|
685
686
|
meutils/serving/fastapi/common.py,sha256=xuVlnF_U4s9LQnwhUK3cbH5OcfEM0M6NqJ3gZm9enic,4681
|
686
687
|
meutils/serving/fastapi/gunicorn.conf.py,sha256=1ylGijXbW8bVQoJu9TUCvkurVUGk0ZGHL2GYKtm2DfY,7791
|
687
|
-
meutils/serving/fastapi/utils.py,sha256=
|
688
|
+
meutils/serving/fastapi/utils.py,sha256=H5lQSU7-IfJ2w9FWbaJ34LCbQSaNTFSU7z1pG5wZlRo,2965
|
688
689
|
meutils/serving/fastapi/__demo/__init__.py,sha256=TxXjqy2ZxAkadPxqN92Xq3ixCUYkQ-4X6UxsReRpHhc,271
|
689
690
|
meutils/serving/fastapi/__demo/异步任务.py,sha256=60_ruA4ljlTLIP5zxcejmm9WJ0SDuqpsO49SZK9vA_s,1444
|
690
691
|
meutils/serving/fastapi/dependencies/__init__.py,sha256=shI1EgfH4gFuajmHGlzt_ArdDrFq8DqnUg7ycpFuYl0,245
|
691
|
-
meutils/serving/fastapi/dependencies/auth.py,sha256=
|
692
|
+
meutils/serving/fastapi/dependencies/auth.py,sha256=WDdFPRApBJrL8-APHAnQyMFrT7OnfeHg0oABwLVKm6Q,822
|
692
693
|
meutils/serving/fastapi/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
693
694
|
meutils/serving/fastapi/exceptions/http_error.py,sha256=6NW48Iadu-LyDBtp_P7YHWhBfwkz3OKTerz585FSGUk,2064
|
694
695
|
meutils/serving/fastapi/exceptions/validation_error.py,sha256=Q71wYfzGsVjLA-SQ3R5a8iT0kDG01mwriVUXHhvsTv0,1234
|
@@ -791,9 +792,9 @@ meutils/tools/seize.py,sha256=nOKAS63w-Lbi48I0m2MPhdsokUTwxco0laPxYVmW4Mw,1064
|
|
791
792
|
meutils/tools/service_monitor.py,sha256=ibsLtBN2g2DL7ZnLJ8vhiZOiOcqTAyx711djDdBK-3M,1255
|
792
793
|
meutils/tools/sys_monitor.py,sha256=6MoyzrItqDUOSjfHcMJmMofQkEPTW36CT_aKui0rg84,429
|
793
794
|
meutils/tools/token_monitor.py,sha256=Np-YK-R4P4IPAXyZvMxwvXI4sFmNJQAQK1lSegNaYpA,997
|
794
|
-
MeUtils-2024.11.29.
|
795
|
-
MeUtils-2024.11.29.
|
796
|
-
MeUtils-2024.11.29.
|
797
|
-
MeUtils-2024.11.29.
|
798
|
-
MeUtils-2024.11.29.
|
799
|
-
MeUtils-2024.11.29.
|
795
|
+
MeUtils-2024.11.29.18.21.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
796
|
+
MeUtils-2024.11.29.18.21.1.dist-info/METADATA,sha256=wWYffD75OIT0ZB6bzHGhCLoE9jhXH1kv5rein1bU1v0,6143
|
797
|
+
MeUtils-2024.11.29.18.21.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
798
|
+
MeUtils-2024.11.29.18.21.1.dist-info/entry_points.txt,sha256=lufZlBHRqqZKdY-ZQJ4CSZb0qhV5hQC37egZna9M7ug,357
|
799
|
+
MeUtils-2024.11.29.18.21.1.dist-info/top_level.txt,sha256=cInfxMmkgNOskurdjwP5unau4rA7Uw48nu07tYhS7KY,22
|
800
|
+
MeUtils-2024.11.29.18.21.1.dist-info/RECORD,,
|
@@ -8,33 +8,14 @@
|
|
8
8
|
# @Software : PyCharm
|
9
9
|
# @Description :
|
10
10
|
|
11
|
-
|
12
|
-
# curl -X POST "https://any2chat.chatfire.cn/tune/v1/chat/completions" \
|
13
|
-
# -H "Authorization: Bearer sk-tune-0UkSny4Fe7ouhF3GPI0lIAKIAj7B2kkJmOV" \
|
14
|
-
# -H "Content-Type: application/json" \
|
15
|
-
# -d '{
|
16
|
-
# "temperature": 0.8,
|
17
|
-
# "messages": [
|
18
|
-
# {
|
19
|
-
# "role": "user",
|
20
|
-
# "content": "1+1"
|
21
|
-
# }
|
22
|
-
# ],
|
23
|
-
# "model": "anthropic/claude-3.5-sonnet",
|
24
|
-
# "stream": true,
|
25
|
-
# "frequency_penalty": 0,
|
26
|
-
# "max_tokens": 900
|
27
|
-
# }'
|
11
|
+
|
28
12
|
|
29
13
|
|
30
14
|
from meutils.pipe import *
|
31
15
|
from openai import OpenAI
|
32
16
|
|
33
|
-
base_url = "http://154.40.54.76:3000/v1"
|
34
|
-
api_key = "sk-tune-0UkSny4Fe7ouhF3GPI0lIAKIAj7B2kkJmOV"
|
35
17
|
client = OpenAI(
|
36
|
-
|
37
|
-
base_url=base_url,
|
18
|
+
|
38
19
|
)
|
39
20
|
|
40
21
|
completion = client.chat.completions.create(
|
@@ -42,12 +23,13 @@ completion = client.chat.completions.create(
|
|
42
23
|
# model="openai/gpt-4o-mini",
|
43
24
|
# model="openai/gpt-4o",
|
44
25
|
# model="anthropic/claude-3.5-sonnet",
|
45
|
-
model="gpt-4o-mini",
|
26
|
+
# model="gpt-4o-mini",
|
27
|
+
model="gpt-4-turbo",
|
46
28
|
|
47
29
|
messages=[
|
48
30
|
{"role": "user", "content": "1+1"},
|
49
31
|
],
|
50
|
-
|
32
|
+
max_tokens=10000
|
51
33
|
)
|
52
34
|
|
53
35
|
print(completion)
|
meutils/async_task/__init__.py
CHANGED
meutils/async_task/common.py
CHANGED
@@ -10,25 +10,12 @@
|
|
10
10
|
|
11
11
|
from meutils.pipe import *
|
12
12
|
from meutils.decorators.retry import retrying
|
13
|
+
|
13
14
|
from meutils.async_task import celery_config
|
14
15
|
|
15
16
|
from celery import Celery, Task, shared_task, states
|
16
17
|
|
17
18
|
|
18
|
-
class RetryableTask(Task): # 实际上 在具体任务支持 执行重试就行
|
19
|
-
"""shared_task(base=RetryableTask)"""
|
20
|
-
|
21
|
-
# 使用 tenacity 进行更灵活的重试控制
|
22
|
-
@retrying(
|
23
|
-
max_retries=6,
|
24
|
-
title="Celery 任务重试"
|
25
|
-
)
|
26
|
-
def run_with_retry(self, *args, **kwargs):
|
27
|
-
return self.run(*args, **kwargs)
|
28
|
-
|
29
|
-
def __call__(self, *args, **kwargs):
|
30
|
-
return self.run_with_retry(*args, **kwargs)
|
31
|
-
|
32
19
|
|
33
20
|
worker = Celery()
|
34
21
|
|
@@ -41,9 +28,10 @@ worker.conf.update(
|
|
41
28
|
task_track_started=True,
|
42
29
|
)
|
43
30
|
|
44
|
-
|
45
31
|
if __name__ == '__main__':
|
46
32
|
print(worker.conf.humanize(with_defaults=False))
|
47
33
|
|
48
34
|
print(worker.conf.broker_url)
|
49
35
|
print(worker.conf.result_backend)
|
36
|
+
|
37
|
+
print(arun(get_task("59ddf636-3f27-4110-948e-5977c8cbe1b3")))
|
@@ -44,12 +44,22 @@ if __name__ == '__main__':
|
|
44
44
|
# test.ado_sync_task.apply_async(kwargs={'a': 1, 'b': 3})
|
45
45
|
# print(AsyncResult("42e191a0-6099-419e-b61d-07bf7e2df2fc").result)
|
46
46
|
# result.backend
|
47
|
-
|
47
|
+
# AsyncResult("42e191a0-6099-419e-b61d-07bf7e2df2fc").get()
|
48
48
|
# AsyncResult(r.id).result
|
49
49
|
|
50
50
|
|
51
51
|
# test.do_pydantic_task.apply_async(kwargs={'request': test.Request()})
|
52
52
|
|
53
53
|
test.do_pydantic_task.apply_async(kwargs={"request": {"method": "POST", "url": "测试"}})
|
54
|
-
|
55
|
-
test.do_pydantic_task
|
54
|
+
|
55
|
+
print(type(test.do_pydantic_task))
|
56
|
+
|
57
|
+
|
58
|
+
# test.do_pydantic_task.apply_async(kwargs={"request": {"method": "POST", "url": "测试"}})
|
59
|
+
# test.do_pydantic_task.apply_async(kwargs={"request": {"method": "xx"}})
|
60
|
+
# test.do_pydantic_task.apply_async(args=({"method": "xxxxxxx"},))
|
61
|
+
|
62
|
+
#
|
63
|
+
# test.do_task_retrying.apply_async(kwargs={'name': "###do_task_retrying"})
|
64
|
+
# test.do_task_retry.apply_async(kwargs={'name': "###do_task_retry"})
|
65
|
+
# test.do_task_retry_backoff.apply_async(kwargs={'name': "###do_task_retry_backoff"})
|
@@ -6,28 +6,27 @@
|
|
6
6
|
# @Author : betterme
|
7
7
|
# @WeChat : meutils
|
8
8
|
# @Software : PyCharm
|
9
|
-
# @Description :
|
9
|
+
# @Description : 注册任务
|
10
10
|
|
11
11
|
from meutils.pipe import *
|
12
|
+
from meutils.async_utils import async_to_sync_pro
|
12
13
|
from meutils.decorators.retry import retrying
|
13
14
|
from meutils.async_task import worker, shared_task
|
14
15
|
|
15
16
|
from meutils.apis.kling import kolors_virtual_try_on
|
16
17
|
|
17
18
|
|
18
|
-
@shared_task
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
@shared_task
|
24
|
-
@retrying(3)
|
25
|
-
async def proxy_task(**kwargs):
|
26
|
-
pass
|
27
|
-
|
19
|
+
@shared_task(pydantic=True, retry_kwargs={'max_retries': 5, 'countdown': 10})
|
20
|
+
@async_to_sync_pro
|
21
|
+
async def create_task(request: kolors_virtual_try_on.TryOnRequest, **kwargs):
|
22
|
+
response = await kolors_virtual_try_on.create_task(request)
|
28
23
|
return response
|
29
24
|
|
30
25
|
|
26
|
+
# celery_task
|
31
27
|
|
32
28
|
|
33
|
-
|
29
|
+
if __name__ == '__main__':
|
30
|
+
pass
|
31
|
+
# create_task.apply_async()
|
32
|
+
# kling.create_task.apply_async(kwargs={"request": request.model_dump()})
|
meutils/async_task/tasks/test.py
CHANGED
@@ -45,23 +45,36 @@ def do_pydantic_task(request: Request):
|
|
45
45
|
|
46
46
|
|
47
47
|
@shared_task(retry_kwargs={'max_retries': 10})
|
48
|
-
def do_task_retry(args, kwargs):
|
48
|
+
def do_task_retry(*args, **kwargs):
|
49
|
+
logger.debug("do_task_retry")
|
50
|
+
|
49
51
|
return 1 / 0
|
50
52
|
|
53
|
+
@shared_task(
|
54
|
+
default_retry_delay=3,
|
55
|
+
retry_backoff=True,
|
56
|
+
retry_kwargs={'max_retries': 10}
|
57
|
+
)
|
58
|
+
def do_task_retry_backoff_noautoretry(*args, **kwargs):
|
59
|
+
logger.debug("do_task_retry_backoff")
|
51
60
|
|
61
|
+
return 1 / 0
|
52
62
|
@shared_task(
|
53
|
-
|
63
|
+
autoretry_for=(Exception,),
|
54
64
|
default_retry_delay=3,
|
55
65
|
retry_backoff=True,
|
56
66
|
retry_kwargs={'max_retries': 10}
|
57
67
|
)
|
58
|
-
def do_task_retry_backoff(args, kwargs):
|
68
|
+
def do_task_retry_backoff(*args, **kwargs):
|
69
|
+
logger.debug("do_task_retry_backoff autoretry")
|
70
|
+
|
59
71
|
return 1 / 0
|
60
72
|
|
61
73
|
|
62
74
|
@shared_task(retry_kwargs={'max_retries': 3})
|
63
75
|
@retrying(10)
|
64
|
-
def do_task_retrying(args, kwargs):
|
76
|
+
def do_task_retrying(*args, **kwargs):
|
77
|
+
logger.debug("do_task_retrying")
|
65
78
|
return 1 / 0
|
66
79
|
|
67
80
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : utils
|
5
|
+
# @Time : 2024/11/29 16:22
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description : 通用异步设计,兼容oneapi监控
|
10
|
+
|
11
|
+
from celery.result import AsyncResult
|
12
|
+
|
13
|
+
from meutils.pipe import *
|
14
|
+
from meutils.schemas.task_types import TaskResponse
|
15
|
+
|
16
|
+
from meutils.db.orm import update_or_insert
|
17
|
+
from meutils.schemas.db.oneapi_types import OneapiTask
|
18
|
+
|
19
|
+
|
20
|
+
async def create_task(async_task, request: Union[BaseModel, dict]):
|
21
|
+
if not isinstance(request, dict):
|
22
|
+
request = request.model_dump()
|
23
|
+
|
24
|
+
result = async_task.apply_async(kwargs={"request": request})
|
25
|
+
task_id = result.id
|
26
|
+
return TaskResponse(task_id=task_id)
|
27
|
+
|
28
|
+
|
29
|
+
async def get_task(
|
30
|
+
task_id: str,
|
31
|
+
remote_get_task: Optional[Callable] = None,
|
32
|
+
filter_kwargs: Optional[dict] = None
|
33
|
+
):
|
34
|
+
result = AsyncResult(id=task_id)
|
35
|
+
|
36
|
+
if result.ready():
|
37
|
+
if result.successful():
|
38
|
+
data = result.get() # system_fingerprint
|
39
|
+
token = data.pop("system_fingerprint", None) # 远程任务 token/apikey
|
40
|
+
|
41
|
+
response = TaskResponse(
|
42
|
+
task_id=task_id,
|
43
|
+
|
44
|
+
message="Task completed successfully",
|
45
|
+
status=result.status,
|
46
|
+
data=data
|
47
|
+
)
|
48
|
+
|
49
|
+
if remote_get_task: # 获取远程任务
|
50
|
+
response: TaskResponse = await remote_get_task(task_id, token) # todo: 缓存一份
|
51
|
+
|
52
|
+
if not isinstance(data, dict):
|
53
|
+
data = data.model_dump()
|
54
|
+
response.__dict__.update(data)
|
55
|
+
|
56
|
+
else:
|
57
|
+
response = TaskResponse(
|
58
|
+
task_id=task_id,
|
59
|
+
|
60
|
+
code=1,
|
61
|
+
message=str(result.result),
|
62
|
+
status=result.status,
|
63
|
+
)
|
64
|
+
else:
|
65
|
+
response = TaskResponse(
|
66
|
+
task_id=task_id,
|
67
|
+
|
68
|
+
message="Task is still running",
|
69
|
+
status=result.status,
|
70
|
+
)
|
71
|
+
|
72
|
+
# 更新到数据库:异步任务
|
73
|
+
update_fn = partial(update_oneapi_from_response, task_response=response)
|
74
|
+
asyncio.create_task(update_or_insert(OneapiTask, filter_kwargs, update_fn)) # 测试是否会执行
|
75
|
+
|
76
|
+
return response
|
77
|
+
|
78
|
+
|
79
|
+
# todo: 可以设计更通用的
|
80
|
+
async def update_oneapi_from_response(task: OneapiTask, task_response: TaskResponse):
|
81
|
+
if task.status in {"SUCCESS", "FAILURE"}: return False # 跳出轮询,不再更新
|
82
|
+
|
83
|
+
task.data = task_response.model_dump(exclude_none=True, exclude={"system_fingerprint"})
|
84
|
+
task.status = task_response.status
|
85
|
+
task.progress = time.time() // 10 % 100
|
86
|
+
|
87
|
+
if task.status == "SUCCESS":
|
88
|
+
task.progress = "100%"
|
89
|
+
elif task.status == "FAILURE":
|
90
|
+
task.fail_reason = "查看详情"
|
91
|
+
|
92
|
+
task.updated_at = int(time.time())
|
93
|
+
task.finish_time = int(time.time()) # 不是实际时间
|
94
|
+
|
95
|
+
|
96
|
+
if __name__ == '__main__':
|
97
|
+
pass
|
meutils/data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2024.11.29.
|
1
|
+
2024.11.29.18.21.01
|
meutils/db/orm.py
CHANGED
@@ -42,12 +42,12 @@ async def get_db():
|
|
42
42
|
yield session
|
43
43
|
|
44
44
|
|
45
|
-
async def update_or_insert(entity,
|
45
|
+
async def update_or_insert(entity, filter_kwargs: Optional[dict] = None, update_fn: Optional[Callable] = None,
|
46
46
|
n: int = 1):
|
47
47
|
"""
|
48
48
|
|
49
49
|
:param entity: TASK 类
|
50
|
-
:param
|
50
|
+
:param filter_kwargs: 查询条件 字典 元组 第一个值是id
|
51
51
|
:param update_fn:
|
52
52
|
|
53
53
|
def update_fn(data):
|
@@ -61,14 +61,14 @@ async def update_or_insert(entity, kwargs: Optional[dict] = None, update_fn: Opt
|
|
61
61
|
await asyncio.sleep(n / i, 1)
|
62
62
|
|
63
63
|
logger.debug(f"UPDATE_OR_INSERT: {entity.__name__}-{i}")
|
64
|
-
update_flag = await update_or_insert(entity,
|
64
|
+
update_flag = await update_or_insert(entity, filter_kwargs, update_fn)
|
65
65
|
if update_flag is False:
|
66
66
|
logger.debug("提前跳出轮询")
|
67
67
|
break
|
68
68
|
|
69
|
-
|
69
|
+
filter_kwargs = filter_kwargs or {}
|
70
70
|
async with AsyncSession(engine) as session:
|
71
|
-
statement = select(entity).filter_by(**
|
71
|
+
statement = select(entity).filter_by(**filter_kwargs)
|
72
72
|
result = await session.exec(statement)
|
73
73
|
data = result.first() # result.all()
|
74
74
|
|
@@ -87,7 +87,7 @@ async def update_or_insert(entity, kwargs: Optional[dict] = None, update_fn: Opt
|
|
87
87
|
await session.refresh(data)
|
88
88
|
return data
|
89
89
|
else:
|
90
|
-
data = entity(**
|
90
|
+
data = entity(**filter_kwargs)
|
91
91
|
logger.debug(f"INSERT: {data}")
|
92
92
|
|
93
93
|
session.add(data)
|
@@ -124,7 +124,7 @@ if __name__ == '__main__':
|
|
124
124
|
#
|
125
125
|
# arun(create_db_and_tables())
|
126
126
|
|
127
|
-
from meutils.schemas.db.oneapi_types import
|
127
|
+
from meutils.schemas.db.oneapi_types import OneapiTask
|
128
128
|
|
129
129
|
filter_kwargs = {
|
130
130
|
"task_id": "888",
|
@@ -13,38 +13,6 @@ from meutils.pipe import *
|
|
13
13
|
from sqlalchemy import JSON
|
14
14
|
from sqlmodel import Field, Session, SQLModel, create_engine, select, insert, update, Column, DateTime, func
|
15
15
|
|
16
|
-
# "NOT_START", "SUBMITTED", "QUEUED", "IN_PROGRESS", "FAILURE", "SUCCESS", "UNKNOWN"
|
17
|
-
|
18
|
-
STATUSES = {
|
19
|
-
"not_start": "NOT_START",
|
20
|
-
|
21
|
-
"submitted": "SUBMITTED",
|
22
|
-
|
23
|
-
"starting": "QUEUED",
|
24
|
-
"queued": "QUEUED",
|
25
|
-
"STARTED": "QUEUED",
|
26
|
-
"started": "QUEUED",
|
27
|
-
"pending": "QUEUED",
|
28
|
-
"PENDING": "QUEUED",
|
29
|
-
|
30
|
-
"processing": "IN_PROGRESS",
|
31
|
-
"in_progress": "IN_PROGRESS",
|
32
|
-
"received": "IN_PROGRESS",
|
33
|
-
"RECEIVED": "IN_PROGRESS",
|
34
|
-
|
35
|
-
"succeed": "SUCCESS",
|
36
|
-
"success": "SUCCESS",
|
37
|
-
"succeeded": "SUCCESS",
|
38
|
-
|
39
|
-
"failed": "FAILURE",
|
40
|
-
"canceled": "FAILURE",
|
41
|
-
"FAILURE": "FAILURE",
|
42
|
-
"failure": "FAILURE",
|
43
|
-
|
44
|
-
"unknown": "UNKNOWN",
|
45
|
-
|
46
|
-
}
|
47
|
-
|
48
16
|
|
49
17
|
def get_default_name():
|
50
18
|
return "xx"
|
@@ -63,7 +31,7 @@ class Hero(SQLModel, table=True):
|
|
63
31
|
)
|
64
32
|
|
65
33
|
|
66
|
-
class
|
34
|
+
class OneapiTask(SQLModel, table=True):
|
67
35
|
"""https://github.com/Calcium-Ion/new-api/blob/main/model/task.go"""
|
68
36
|
id: Optional[int] = Field(default=None, primary_key=True)
|
69
37
|
|
meutils/schemas/oneapi/common.py
CHANGED
@@ -294,7 +294,7 @@ MODEL_RATIO = {
|
|
294
294
|
"qwen2.5-math-72b-instruct": 4.13 / 2,
|
295
295
|
"qwen2.5-coder-32b-instruct": 0.5,
|
296
296
|
"qwen/qwq-32b-preview": 1,
|
297
|
-
"
|
297
|
+
"Qwen/QwQ-32B-Preview": 1,
|
298
298
|
|
299
299
|
"qwen1.5-7b-chat": 0.05, # 特价
|
300
300
|
"qwen1.5-14b-chat": 0.7,
|
@@ -606,7 +606,7 @@ COMPLETION_RATIO = {
|
|
606
606
|
|
607
607
|
"qwen-turbo-2024-11-01": 3,
|
608
608
|
"qwen/qwq-32b-preview": 2,
|
609
|
-
"
|
609
|
+
"Qwen/QwQ-32B-Preview": 2,
|
610
610
|
|
611
611
|
}
|
612
612
|
|
meutils/schemas/task_types.py
CHANGED
@@ -11,6 +11,60 @@ from enum import Enum
|
|
11
11
|
|
12
12
|
from meutils.pipe import *
|
13
13
|
|
14
|
+
# "NOT_START", "SUBMITTED", "QUEUED", "IN_PROGRESS", "FAILURE", "SUCCESS", "UNKNOWN"
|
15
|
+
|
16
|
+
STATUSES = {
|
17
|
+
"not_start": "NOT_START",
|
18
|
+
|
19
|
+
"submitted": "SUBMITTED",
|
20
|
+
|
21
|
+
"starting": "QUEUED",
|
22
|
+
"queued": "QUEUED",
|
23
|
+
"STARTED": "QUEUED",
|
24
|
+
"started": "QUEUED",
|
25
|
+
"pending": "QUEUED",
|
26
|
+
"PENDING": "QUEUED",
|
27
|
+
|
28
|
+
"processing": "IN_PROGRESS",
|
29
|
+
"in_progress": "IN_PROGRESS",
|
30
|
+
"received": "IN_PROGRESS",
|
31
|
+
"RECEIVED": "IN_PROGRESS",
|
32
|
+
|
33
|
+
"succeed": "SUCCESS",
|
34
|
+
"success": "SUCCESS",
|
35
|
+
"succeeded": "SUCCESS",
|
36
|
+
|
37
|
+
"failed": "FAILURE",
|
38
|
+
"canceled": "FAILURE",
|
39
|
+
"FAILURE": "FAILURE",
|
40
|
+
"failure": "FAILURE",
|
41
|
+
|
42
|
+
"unknown": "UNKNOWN",
|
43
|
+
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
class TaskResponse(BaseModel):
|
48
|
+
"""异步任务 通用响应体"""
|
49
|
+
task_id: Optional[str] = None
|
50
|
+
|
51
|
+
code: Optional[int] = 0
|
52
|
+
message: Optional[str] = None
|
53
|
+
status: Optional[str] = "submitted"
|
54
|
+
data: Optional[Any] = None
|
55
|
+
|
56
|
+
# 系统水印:可以存token
|
57
|
+
# user_id: Optional[str] = None
|
58
|
+
system_fingerprint: Optional[str] = None
|
59
|
+
|
60
|
+
def __init__(self, /, **data: Any):
|
61
|
+
super().__init__(**data)
|
62
|
+
self.status = STATUSES.get(self.status, "UNKNOWN")
|
63
|
+
|
64
|
+
class Config:
|
65
|
+
# 允许额外字段,增加灵活性
|
66
|
+
extra = 'allow'
|
67
|
+
|
14
68
|
|
15
69
|
class TaskType(str, Enum):
|
16
70
|
# 存储
|
@@ -115,7 +169,16 @@ if __name__ == '__main__':
|
|
115
169
|
|
116
170
|
# print('kling_vip'.startswith(TaskType.kling))
|
117
171
|
|
118
|
-
print(Purpose.__members__)
|
119
|
-
print(list(Purpose))
|
172
|
+
# print(Purpose.__members__)
|
173
|
+
# print(list(Purpose))
|
174
|
+
#
|
175
|
+
# print(Purpose.oss in Purpose.__members__)
|
176
|
+
|
177
|
+
# , ** {"a": 1, "system_fingerprint": 1}
|
178
|
+
response = TaskResponse(system_fingerprint="121")
|
179
|
+
|
180
|
+
print(response.model_dump())
|
181
|
+
|
182
|
+
response.__dict__.update({"a": 1, "system_fingerprint": 1})
|
120
183
|
|
121
|
-
print(
|
184
|
+
print(response.model_dump())
|
@@ -8,7 +8,31 @@
|
|
8
8
|
# @Software : PyCharm
|
9
9
|
# @Description :
|
10
10
|
|
11
|
+
from typing import Optional, Union
|
11
12
|
|
12
13
|
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
14
|
+
from fastapi import Depends, HTTPException, status
|
13
15
|
|
14
|
-
|
16
|
+
http_bearer = HTTPBearer()
|
17
|
+
|
18
|
+
|
19
|
+
# get_bearer_token = http_bearer
|
20
|
+
|
21
|
+
|
22
|
+
# 定义获取token的函数
|
23
|
+
async def get_bearer_token(
|
24
|
+
auth: Optional[HTTPAuthorizationCredentials] = Depends(http_bearer)
|
25
|
+
) -> Optional[str]:
|
26
|
+
"""
|
27
|
+
获取Bearer token
|
28
|
+
:param auth: HTTP认证凭证
|
29
|
+
:return: token字符串
|
30
|
+
"""
|
31
|
+
if auth is None:
|
32
|
+
return None
|
33
|
+
|
34
|
+
return auth.credentials
|
35
|
+
|
36
|
+
|
37
|
+
if __name__ == '__main__':
|
38
|
+
pass
|
meutils/serving/fastapi/utils.py
CHANGED
@@ -78,7 +78,7 @@ def limit(limit_value='3/second', error_message: Optional[str] = None, **kwargs)
|
|
78
78
|
|
79
79
|
|
80
80
|
def check_api_key(auth: HTTPAuthorizationCredentials):
|
81
|
-
api_key = auth
|
81
|
+
api_key = auth
|
82
82
|
if api_key is None:
|
83
83
|
detail = {
|
84
84
|
"error": {
|
File without changes
|
File without changes
|
{MeUtils-2024.11.29.11.8.36.dist-info → MeUtils-2024.11.29.18.21.1.dist-info}/entry_points.txt
RENAMED
File without changes
|
File without changes
|