MeUtils 2024.3.4.13.4.45__py3-none-any.whl → 2025.1.16.17.15.52__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/METADATA +38 -32
  2. MeUtils-2025.1.16.17.15.52.dist-info/RECORD +864 -0
  3. {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/WHEEL +1 -1
  4. {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/entry_points.txt +1 -0
  5. apps/spider.py +24 -8
  6. examples/_openaisdk/4v.py +110 -0
  7. examples/_openaisdk/__init__.py +11 -0
  8. examples/_openaisdk/baichuan.py +38 -0
  9. examples/_openaisdk/bpo.py +138 -0
  10. examples/_openaisdk/chat_latex.py +95 -0
  11. examples/_openaisdk/chattts.py +85 -0
  12. examples/_openaisdk/copilot.py +48 -0
  13. examples/_openaisdk/dalle3.py +48 -0
  14. examples/_openaisdk/deeplx.py +31 -0
  15. examples/_openaisdk/demo.py +77 -0
  16. examples/_openaisdk/embeddings.py +34 -0
  17. examples/_openaisdk/gpt4all.py +69 -0
  18. examples/_openaisdk/gpt_fc.py +23 -0
  19. examples/_openaisdk/gr_vl.py +46 -0
  20. examples/_openaisdk/json_mode.py +12 -0
  21. examples/_openaisdk/kimi.py +91 -0
  22. examples/_openaisdk/kimi_qa.py +57 -0
  23. examples/_openaisdk/minimax.py +75 -0
  24. examples/_openaisdk/open_router.py +48 -0
  25. examples/_openaisdk/openai_aiplus.py +54 -0
  26. examples/_openaisdk/openai_audio.py +20 -0
  27. examples/_openaisdk/openai_baichuan.py +59 -0
  28. examples/_openaisdk/openai_cache.py +37 -0
  29. examples/_openaisdk/openai_chatfire.py +228 -0
  30. examples/_openaisdk/openai_chatfire_all.py +166 -0
  31. examples/_openaisdk/openai_deepinfra.py +55 -0
  32. examples/_openaisdk/openai_deepseek.py +29 -0
  33. examples/_openaisdk/openai_doubao.py +43 -0
  34. examples/_openaisdk/openai_embeddings.py +36 -0
  35. examples/_openaisdk/openai_files.py +57 -0
  36. examples/_openaisdk/openai_gitee.py +33 -0
  37. examples/_openaisdk/openai_god.py +45 -0
  38. examples/_openaisdk/openai_groq.py +240 -0
  39. examples/_openaisdk/openai_images.py +203 -0
  40. examples/_openaisdk/openai_json.py +78 -0
  41. examples/_openaisdk/openai_lingyi.py +59 -0
  42. examples/_openaisdk/openai_modelscope.py +54 -0
  43. examples/_openaisdk/openai_moon.py +55 -0
  44. examples/_openaisdk/openai_oi.py +61 -0
  45. examples/_openaisdk/openai_ppu.py +47 -0
  46. examples/_openaisdk/openai_qwen.py +58 -0
  47. examples/_openaisdk/openai_search.py +42 -0
  48. examples/_openaisdk/openai_sensenova.py +81 -0
  49. examples/_openaisdk/openai_siliconflow.py +52 -0
  50. examples/_openaisdk/openai_step.py +45 -0
  51. examples/_openaisdk/openai_test.py +66 -0
  52. examples/_openaisdk/openai_together.py +57 -0
  53. examples/_openaisdk/openai_tune.py +38 -0
  54. examples/_openaisdk/openai_zhipu.py +59 -0
  55. examples/_openaisdk/ppu.py +28 -0
  56. examples/_openaisdk/rag.py +54 -0
  57. examples/_openaisdk/rag_.py +26 -0
  58. examples/_openaisdk/test.py +52 -0
  59. examples/_openaisdk/x.py +32 -0
  60. examples/_openaisdk/xx.py +29 -0
  61. examples/_openaisdk/zhipu_files.py +47 -0
  62. examples/_openaisdk/zhipu_/346/231/272/350/203/275/344/275/223.py +45 -0
  63. examples/_openaisdk//345/205/234/345/272/225/346/265/213/350/257/225.py +50 -0
  64. examples/_openaisdk//345/244/232/346/250/241/346/200/201/346/265/213/350/257/225.py +76 -0
  65. examples/_openaisdk//345/244/232/346/250/241/346/200/201/346/265/213/350/257/225_.py +56 -0
  66. examples/_openaisdk//346/226/207/344/273/266/351/227/256/347/255/224.py +36 -0
  67. examples/_openaisdk//346/226/207/346/241/243/350/247/243/346/236/220.py +34 -0
  68. examples/_openaisdk//346/250/241/345/236/213/346/265/213/350/257/225.py +53 -0
  69. examples/_openaisdk//351/230/277/351/207/214.py +80 -0
  70. {meutils/serving/jina/__demo → examples/ann}/__init__.py +1 -1
  71. examples/ann/main.py +31 -0
  72. examples/apis/kl.py +28 -0
  73. examples/apis/x.py +17 -0
  74. examples/apis/xx.py +17 -0
  75. examples/arq_demo/demo.py +3 -0
  76. examples/backgroundtasks.py +25 -0
  77. examples/bserver.py +513 -21
  78. examples/cache_demo/HermesCache_demo.py +81 -0
  79. examples/cache_demo/acacge.py +26 -0
  80. examples/cache_demo/x.py +31 -0
  81. {meutils/docarray_utils → examples/caches}/__init__.py +1 -1
  82. examples/caches/llmcache.py +18 -0
  83. examples/celery_demo/product_task.py +2 -0
  84. examples/demo.py +17 -1
  85. examples/fastapi_caching.py +59 -0
  86. {meutils/dependencies → examples/gr}/__init__.py +1 -1
  87. examples/gr/d.py +22 -0
  88. examples/gr/demo.py +30 -0
  89. examples/ip2/345/234/260/345/214/272.py +16 -0
  90. examples/jinja2_demo/j2_demo.py +20 -1
  91. examples/json/346/240/207/345/207/206/345/214/226.py +54 -0
  92. examples/md.py +29 -0
  93. {meutils/serving/jina → examples/nesc}/__init__.py +1 -1
  94. examples/nesc/main.py +76 -0
  95. examples/orm/mysql_orm.py +113 -0
  96. examples/orm/sql_creater.py +57 -0
  97. examples/orm/sqlm.py +134 -0
  98. examples/rq_demo/fns.py +18 -0
  99. examples/rq_demo/redis/351/230/237/345/210/227.py +14 -7
  100. examples/rq_demo/redis/351/230/237/345/210/227_add_chatfire.py +30 -0
  101. examples/size_map.py +43 -0
  102. examples/test.py +59 -0
  103. examples/webs/__init__.py +11 -0
  104. examples/webs/main.py +34 -0
  105. examples/x.py +13 -0
  106. examples//345/216/273/346/260/264/345/215/260.py +20 -0
  107. examples//346/226/207/346/241/243/346/231/272/350/203/275/__init__.py +11 -0
  108. meutils/_utils.py +15 -6
  109. meutils/ai_audio/asr/__init__.py +3 -2
  110. meutils/ai_audio/asr/cf_asr.py +53 -0
  111. meutils/ai_audio/asr/de.py +11 -0
  112. meutils/ai_audio/asr/fast_asr.py +15 -7
  113. meutils/ai_audio/asr/openai_asr.py +83 -6
  114. meutils/ai_audio/fast_asr.py +8 -4
  115. meutils/ai_audio/tts/EdgeTTS.py +33 -7
  116. meutils/ai_audio/tts/openai_tts.py +24 -20
  117. meutils/ai_audio/tts/tts_ui.py +1 -0
  118. meutils/ai_audio/utils.py +9 -0
  119. meutils/ai_cv/__init__.py +0 -1
  120. meutils/ai_cv/ocr.py +3 -2
  121. meutils/ai_cv/utils.py +154 -0
  122. meutils/ai_video/avmerge.py +6 -0
  123. meutils/ai_video/video.py +11 -2
  124. meutils/{api → apis}/__init__.py +1 -1
  125. meutils/apis/ali_apis.py +60 -0
  126. meutils/apis/audio/__init__.py +10 -0
  127. meutils/apis/audio/deepinfra.py +59 -0
  128. meutils/apis/audio/fish.py +248 -0
  129. meutils/apis/baidu/__init__.py +9 -0
  130. meutils/apis/baidu/bdaitpzs.py +229 -0
  131. meutils/apis/baidu/test.py +78 -0
  132. meutils/apis/chatglm/__init__.py +11 -0
  133. meutils/apis/chatglm/glm_video.py +273 -0
  134. meutils/apis/chatglm/glm_video_api.py +116 -0
  135. meutils/apis/chatglm/images.py +63 -0
  136. meutils/apis/chatglm/temp.py +259 -0
  137. meutils/apis/chatglm/x.py +31 -0
  138. meutils/{api → apis}/common.py +10 -6
  139. meutils/apis/fal/__init__.py +11 -0
  140. meutils/apis/fal/files.py +53 -0
  141. meutils/apis/fal/images.py +57 -0
  142. meutils/apis/fal/images_.py +72 -0
  143. meutils/apis/fal/videos.py +77 -0
  144. meutils/apis/firecrawl.py +45 -0
  145. meutils/apis/gitee/__init__.py +11 -0
  146. meutils/apis/gitee/images/__init__.py +9 -0
  147. meutils/apis/gitee/images/kolors.py +99 -0
  148. meutils/apis/hailuoai/__init__.py +11 -0
  149. meutils/apis/hailuoai/demo.py +34 -0
  150. meutils/apis/hailuoai/hasha_new.py +248 -0
  151. meutils/apis/hailuoai/music.py +11 -0
  152. meutils/apis/hailuoai/upload.py +116 -0
  153. meutils/apis/hailuoai/videos.py +460 -0
  154. meutils/apis/hailuoai/yy.py +242 -0
  155. meutils/apis/hf/__init__.py +11 -0
  156. meutils/apis/hf/got_ocr.py +64 -0
  157. meutils/apis/hf/gradio.py +34 -0
  158. meutils/apis/hf/hivisionidphotos.py +80 -0
  159. meutils/apis/hf/kolors.py +68 -0
  160. meutils/apis/hf/kolors_virtual_try_on.py +107 -0
  161. meutils/apis/hf/r.py +53 -0
  162. meutils/apis/hf/x.py +26 -0
  163. meutils/apis/hf//350/257/201/344/273/266/347/205/247.py +41 -0
  164. meutils/apis/hunyuan/__init__.py +11 -0
  165. meutils/apis/hunyuan/image_tools.py +84 -0
  166. meutils/apis/images/__init__.py +11 -0
  167. meutils/apis/images/deepinfra.py +92 -0
  168. meutils/apis/images/demo.py +150 -0
  169. meutils/apis/images/eidt.py +36 -0
  170. meutils/apis/images/flux/__init__.py +11 -0
  171. meutils/apis/images/flux/fluxpro.py +108 -0
  172. meutils/apis/images/flux/mystic.py +116 -0
  173. meutils/apis/images/ideogram/__init__.py +10 -0
  174. meutils/apis/images/ideogram/ideogram_images.py +193 -0
  175. meutils/apis/images/prodia/__init__.py +12 -0
  176. meutils/apis/images/prodia/faceswap.py +76 -0
  177. meutils/apis/images/recraft.py +152 -0
  178. meutils/apis/images/virtual_try_on/__init__.py +11 -0
  179. meutils/apis/images/virtual_try_on/images.py +65 -0
  180. meutils/apis/jiema/24mail.py +96 -0
  181. meutils/apis/jiema/__init__.py +11 -0
  182. meutils/apis/jiema/yezi.py +97 -0
  183. meutils/apis/jimeng/__init__.py +11 -0
  184. meutils/apis/jimeng/common.py +328 -0
  185. meutils/apis/jimeng/doubao.py +68 -0
  186. meutils/apis/jimeng/doubao_utils.py +175 -0
  187. meutils/apis/jimeng/files.py +263 -0
  188. meutils/apis/jimeng/images.py +140 -0
  189. meutils/apis/jimeng/lip_sync.py +11 -0
  190. meutils/apis/jina.py +55 -0
  191. meutils/apis/kling/__init__.py +11 -0
  192. meutils/apis/kling/api.py +60 -0
  193. meutils/apis/kling/images.py +174 -0
  194. meutils/apis/kling/kolors_virtual_try_on.py +111 -0
  195. meutils/apis/kling/kolors_virtual_try_on_web.py +126 -0
  196. meutils/apis/kling/videos.py +67 -0
  197. meutils/apis/kling//351/211/264/346/235/203.py +34 -0
  198. meutils/apis/kuaidi.py +32 -0
  199. meutils/apis/kuaishou/__init__.py +10 -0
  200. meutils/apis/kuaishou/klingai.py +523 -0
  201. meutils/apis/kuaishou/klingai_video.py +197 -0
  202. meutils/apis/kuaishou/kolors.py +189 -0
  203. meutils/apis/llm_qa.py +55 -0
  204. meutils/apis/luma/__init__.py +11 -0
  205. meutils/apis/luma/luma.py +123 -0
  206. meutils/apis/minicpm/__init__.py +9 -0
  207. meutils/apis/minicpm/luca.py +137 -0
  208. meutils/apis/monica/__init__.py +11 -0
  209. meutils/apis/monica/llm.py +11 -0
  210. meutils/apis/napkin/__init__.py +11 -0
  211. meutils/apis/napkin/icons.py +42 -0
  212. meutils/apis/niutrans.py +73 -0
  213. meutils/apis/oneapi/__init__.py +11 -0
  214. meutils/apis/oneapi/channel.py +68 -0
  215. meutils/apis/oneapi/common.py +135 -0
  216. meutils/apis/oneapi/log.py +47 -0
  217. meutils/apis/oneapi/token.py +48 -0
  218. meutils/apis/oneapi/token_.py +112 -0
  219. meutils/apis/oneapi/user.py +100 -0
  220. meutils/apis/oneapi/utils.py +47 -0
  221. meutils/apis/pixverse/__init__.py +11 -0
  222. meutils/apis/pixverse/pixverse.py +150 -0
  223. meutils/apis/proxy/__init__.py +11 -0
  224. meutils/apis/proxy/ips.py +178 -0
  225. meutils/apis/remini/__init__.py +11 -0
  226. meutils/apis/remini/remini.py +89 -0
  227. meutils/apis/replicateai/__init__.py +11 -0
  228. meutils/apis/replicateai/images.py +79 -0
  229. meutils/apis/replicateai/raw.py +53 -0
  230. meutils/apis/runwayml/__init__.py +10 -0
  231. meutils/apis/runwayml/gen.py +143 -0
  232. meutils/apis/search/__init__.py +11 -0
  233. meutils/apis/search/baichuan.py +11 -0
  234. meutils/apis/search/metaso.py +218 -0
  235. meutils/apis/search/metaso_.py +77 -0
  236. meutils/apis/search/n.py +99 -0
  237. meutils/apis/search/searxng.py +42 -0
  238. meutils/apis/search_music.py +39 -0
  239. meutils/apis/siliconflow/__init__.py +9 -0
  240. meutils/apis/siliconflow/audio.py +63 -0
  241. meutils/apis/siliconflow/image_to_image.py +116 -0
  242. meutils/apis/siliconflow/images.py +154 -0
  243. meutils/apis/siliconflow/rerankers.py +40 -0
  244. meutils/apis/siliconflow/text_to_image.py +132 -0
  245. meutils/apis/siliconflow/utils.py +66 -0
  246. meutils/apis/siliconflow/videos.py +102 -0
  247. meutils/apis/sunoai/__init__.py +10 -0
  248. meutils/apis/sunoai/haimian.py +135 -0
  249. meutils/apis/sunoai/suno.py +373 -0
  250. meutils/apis/textcard/__init__.py +11 -0
  251. meutils/apis/textcard/demo.py +25 -0
  252. meutils/apis/textcard/hanyuxinjie.py +81 -0
  253. meutils/apis/textin.py +159 -0
  254. meutils/apis/to_image/__init__.py +11 -0
  255. meutils/apis/to_image/html2image.py +29 -0
  256. meutils/apis/to_image/md.py +29 -0
  257. meutils/apis/to_image/url2image.py +41 -0
  258. meutils/apis/together/__init__.py +11 -0
  259. meutils/apis/together/images.py +80 -0
  260. meutils/apis/translator/__init__.py +9 -0
  261. meutils/apis/translator/deeplx.py +55 -0
  262. meutils/apis/tripo3d/__init__.py +11 -0
  263. meutils/apis/tripo3d/images.py +106 -0
  264. meutils/apis/ts.py +60 -0
  265. meutils/apis/uptime_kuma/__init__.py +11 -0
  266. meutils/apis/uptime_kuma/common.py +56 -0
  267. meutils/apis/uptime_kuma//345/233/275/344/272/247/345/210/206/347/273/204.py +68 -0
  268. meutils/apis/utils.py +47 -0
  269. meutils/apis/videos/__init__.py +11 -0
  270. meutils/apis/videos/sora.py +16 -0
  271. meutils/apis/vidu/__init__.py +9 -0
  272. meutils/apis/vidu/vidu_video.py +254 -0
  273. meutils/apis/vidu/x.py +14 -0
  274. meutils/apis/voice_clone/__init__.py +10 -0
  275. meutils/apis/voice_clone/fish.py +236 -0
  276. meutils/apis/voice_clone/fish_api.py +16 -0
  277. meutils/apis/web_search.py +31 -0
  278. meutils/apis/yezi.py +97 -0
  279. meutils/async_task/__init__.py +13 -0
  280. meutils/async_task/celery_config.py +106 -0
  281. meutils/async_task/common.py +37 -0
  282. meutils/async_task/demo_create_tasks.py +73 -0
  283. meutils/async_task/tasks/__init__.py +11 -0
  284. meutils/async_task/tasks/_all.py +20 -0
  285. meutils/async_task/tasks/hailuo.py +24 -0
  286. meutils/async_task/tasks/kling.py +30 -0
  287. meutils/async_task/tasks/replicateai.py +24 -0
  288. meutils/async_task/tasks/test.py +124 -0
  289. meutils/async_task/tasks/vidu.py +28 -0
  290. meutils/async_task/utils.py +191 -0
  291. meutils/async_task//351/200/232/347/224/250/350/256/276/350/256/241.py +119 -0
  292. meutils/async_utils/asyncer_.py +37 -0
  293. meutils/async_utils/background.py +68 -0
  294. meutils/async_utils/common.py +136 -16
  295. meutils/async_utils/test.py +47 -0
  296. meutils/cache_utils.py +29 -23
  297. meutils/caches/__init__.py +9 -0
  298. meutils/caches/acache.py +45 -0
  299. meutils/caches/redis_cache.py +63 -0
  300. meutils/clis/check_api.py +66 -0
  301. meutils/clis/cli.py +1 -1
  302. meutils/common.py +56 -17
  303. meutils/config_utils/__init__.py +11 -0
  304. meutils/config_utils/lark_utils/__init__.py +11 -0
  305. meutils/config_utils/lark_utils/common.py +385 -0
  306. meutils/config_utils/lark_utils/demo.py +13 -0
  307. meutils/config_utils/lark_utils/x.py +50 -0
  308. meutils/config_utils/manager.py +108 -0
  309. meutils/crawlers/__init__.py +11 -0
  310. meutils/data/VERSION +1 -1
  311. meutils/data/cowboy-hat-face.webp +0 -0
  312. meutils/data/oneapi/FOOTER.md +7 -0
  313. meutils/data/oneapi/NOTICE.md +138 -0
  314. meutils/data/oneapi/__init__.py +15 -0
  315. meutils/db/orm.py +179 -0
  316. meutils/db/redis_db.py +87 -0
  317. meutils/decorators/cache.py +1 -1
  318. meutils/decorators/common.py +84 -5
  319. meutils/decorators/contextmanagers.py +17 -6
  320. meutils/decorators/fastapi_decorator.py +77 -3
  321. meutils/decorators/polling.py +46 -0
  322. meutils/decorators/retry.py +150 -26
  323. meutils/fastapi_utils/__init__.py +11 -0
  324. meutils/fastapi_utils/exceptions/http_error.py +72 -0
  325. meutils/fastapi_utils/exceptions/validation_error.py +44 -0
  326. meutils/hash_utils.py +9 -4
  327. meutils/hooks/__init__.py +11 -0
  328. meutils/hooks/hook_test.py +174 -0
  329. meutils/hooks/wechat.py +162 -0
  330. meutils/hooks/wechat_channel.py +303 -0
  331. meutils/init/evn.py +1 -1
  332. meutils/io/files_utils.py +232 -0
  333. meutils/io/image.py +148 -10
  334. meutils/io/x.py +75 -0
  335. meutils/llm/__init__.py +10 -0
  336. meutils/llm/check_api.py +109 -0
  337. meutils/llm/check_utils.py +106 -0
  338. meutils/llm/clients.py +38 -0
  339. meutils/llm/completions/__init__.py +11 -0
  340. meutils/llm/completions/agents/__init__.py +11 -0
  341. meutils/llm/completions/agents/file.py +125 -0
  342. meutils/llm/completions/cp.py +112 -0
  343. meutils/llm/completions/delilegal.py +135 -0
  344. meutils/llm/completions/dify.py +81 -0
  345. meutils/llm/completions/kimi.py +47 -0
  346. meutils/llm/completions/modelscope.py +11 -0
  347. meutils/{fileparser/filetype.py → llm/completions/oi.py} +5 -3
  348. meutils/llm/completions/rag/__init__.py +11 -0
  349. meutils/llm/completions/rag/fire.py +157 -0
  350. meutils/llm/completions/rag/qwen.py +11 -0
  351. meutils/llm/completions/rag/rag.py +41 -0
  352. meutils/llm/completions/rag.py +38 -0
  353. meutils/llm/completions/tryblend.py +201 -0
  354. meutils/llm/completions/tune.py +284 -0
  355. meutils/llm/completions/x.py +26 -0
  356. meutils/llm/completions/xx.py +61 -0
  357. meutils/llm/completions/yuanbao.py +176 -0
  358. meutils/llm/demo.py +114 -0
  359. meutils/llm/functions/__init__.py +11 -0
  360. meutils/llm/mappers.py +15 -0
  361. meutils/llm/openai_utils/__init__.py +11 -0
  362. meutils/llm/openai_utils/common.py +284 -0
  363. meutils/llm/openai_utils/tool_outputs.py +45 -0
  364. meutils/llm/output_parsers/__init__.py +80 -0
  365. meutils/llm/prompts/__init__.py +244 -0
  366. meutils/llm/prompts/demo.py +155 -0
  367. meutils/llm/prompts/html2image_test.py +19 -0
  368. meutils/llm/utils.py +133 -0
  369. meutils/llm/x.py +75 -0
  370. meutils/notice/feishu.py +40 -9
  371. meutils/notice/wechat.py +23 -21
  372. meutils/np_utils.py +10 -1
  373. meutils/office_automation/pdf.py +6 -1
  374. meutils/oss/__init__.py +20 -0
  375. meutils/oss/minio_oss.py +184 -0
  376. meutils/oss/minio_utils.py +48 -0
  377. meutils/other/__demo.py +6 -4
  378. meutils/pandas_utils/__init__.py +1 -0
  379. meutils/pandas_utils/common.py +31 -0
  380. meutils/pandas_utils/pd_utils.py +10 -6
  381. meutils/parsers/__init__.py +10 -0
  382. meutils/parsers/file_parsers.py +110 -0
  383. meutils/parsers/fileparser/demo.py +41 -0
  384. meutils/parsers/fileparser/filetype.py +41 -0
  385. meutils/pay.py +37 -0
  386. meutils/pipe.py +37 -4
  387. meutils/playwright_utils/common.py +20 -12
  388. meutils/plots/common.py +35 -34
  389. meutils/queues/demo.py +56 -0
  390. meutils/queues/smooth_queue.py +120 -0
  391. meutils/queues/uniform_queue.py +3 -1
  392. meutils/request_utils/__init__.py +26 -2
  393. meutils/request_utils/ark.py +47 -0
  394. meutils/request_utils/crawler.py +34 -5
  395. meutils/request_utils/jwt_utils/__init__.py +11 -0
  396. meutils/request_utils/jwt_utils/common.py +42 -0
  397. meutils/request_utils/volc.py +160 -0
  398. meutils/schemas/__init__.py +0 -1
  399. meutils/schemas/baidu_types.py +70 -0
  400. meutils/schemas/batch_types.py +450 -0
  401. meutils/schemas/celery_types.py +64 -0
  402. meutils/schemas/chatfire_types.py +15 -0
  403. meutils/schemas/chatglm_types.py +197 -0
  404. meutils/schemas/db/__init__.py +11 -0
  405. meutils/schemas/db/oneapi_types.py +117 -0
  406. meutils/schemas/dify_types.py +40 -0
  407. meutils/schemas/embedding.py +31 -0
  408. meutils/schemas/fal_types.py +13 -0
  409. meutils/schemas/fish_types.py +11 -0
  410. meutils/schemas/hailuo_types.py +208 -0
  411. meutils/schemas/haimian_types.py +51 -0
  412. meutils/schemas/idphoto_types.py +43 -0
  413. meutils/schemas/image_types.py +476 -0
  414. meutils/schemas/jimeng_types.py +28 -0
  415. meutils/schemas/jina_types.py +67 -0
  416. meutils/schemas/kimi_types.py +86 -0
  417. meutils/schemas/kling_types.py +235 -0
  418. meutils/schemas/kuaishou_types.py +328 -0
  419. meutils/schemas/luma_types.py +59 -0
  420. meutils/schemas/message_types.py +165 -0
  421. meutils/schemas/message_types_.py +219 -0
  422. meutils/schemas/metaso_types.py +64 -0
  423. meutils/schemas/napkin_types.py +85 -0
  424. meutils/schemas/ocr_types.py +37 -0
  425. meutils/schemas/oneapi/__init__.py +11 -0
  426. meutils/schemas/oneapi/_types.py +49 -0
  427. meutils/schemas/oneapi/common.py +883 -0
  428. meutils/schemas/oneapi/icons.py +30 -0
  429. meutils/schemas/oneapi/model_group_info.py +48 -0
  430. meutils/schemas/oneapi/model_info.py +34 -0
  431. meutils/schemas/oneapi/models.py +26 -0
  432. meutils/schemas/oneapi/x.py +26 -0
  433. meutils/schemas/oneapi//351/207/215/345/256/232/345/220/221.py +132 -0
  434. meutils/schemas/openai_api_protocol.py +411 -0
  435. meutils/schemas/openai_types.py +366 -0
  436. meutils/schemas/pixverse_types.py +88 -0
  437. meutils/schemas/playwright_types.py +57 -0
  438. meutils/schemas/prodia_types.py +19 -0
  439. meutils/schemas/replicate_types.py +112 -0
  440. meutils/schemas/request_types.py +20 -0
  441. meutils/schemas/runwayml_types.py +190 -0
  442. meutils/schemas/siliconflow_types.py +80 -0
  443. meutils/schemas/step_types.py +19 -0
  444. meutils/schemas/suno_types.py +319 -0
  445. meutils/schemas/task_types.py +192 -0
  446. meutils/schemas/translator_types.py +29 -0
  447. meutils/schemas/tripo3d_types.py +57 -0
  448. meutils/schemas/tryblend_types.py +51 -0
  449. meutils/schemas/video_types.py +62 -0
  450. meutils/schemas/vidu_types.py +350 -0
  451. meutils/schemas/wechat_types.py +316 -0
  452. meutils/schemas/yuanbao_types.py +260 -0
  453. meutils/serving/celery/__init__.py +8 -0
  454. meutils/serving/celery/config.py +115 -0
  455. meutils/serving/celery/router.py +4 -6
  456. meutils/serving/celery/tasks.py +6 -4
  457. meutils/serving/celery//351/200/232/347/224/250/350/256/276/350/256/241.py +119 -0
  458. meutils/serving/fastapi/common.py +27 -31
  459. meutils/serving/fastapi/dependencies/__init__.py +0 -1
  460. meutils/serving/fastapi/dependencies/auth.py +55 -2
  461. meutils/serving/fastapi/exceptions/http_error.py +67 -2
  462. meutils/serving/fastapi/exceptions/validation_error.py +18 -2
  463. meutils/serving/fastapi/lifespans.py +73 -0
  464. meutils/serving/fastapi/routers/scheduler.py +12 -0
  465. meutils/serving/fastapi/routers/screenshot.py +47 -0
  466. meutils/serving/fastapi/routers/spider.py +8 -3
  467. meutils/serving/fastapi/routers/task.py +48 -0
  468. meutils/serving/fastapi/utils.py +48 -1
  469. meutils/serving/streamlit/common.py +1 -1
  470. meutils/smooth_utils.py +3 -0
  471. meutils/str_utils/__init__.py +22 -3
  472. meutils/str_utils/json_utils.py +7 -0
  473. meutils/str_utils/regular_expression.py +102 -10
  474. meutils/templates/xx.html +21 -0
  475. meutils/templates/xxx.html +117 -0
  476. meutils/todo.py +12 -0
  477. meutils/tools/token_monitor.py +33 -0
  478. MeUtils-2024.3.4.13.4.45.dist-info/RECORD +0 -540
  479. meutils/ai_audio/asr/subtitle.srt +0 -40
  480. meutils/ai_audio/demo.ipynb +0 -1215
  481. meutils/ai_audio/example.srt +0 -348
  482. meutils/ai_audio/new.srt +0 -179
  483. meutils/ai_audio/subtitles.srt +0 -696
  484. meutils/ai_audio/tts/new.srt +0 -179
  485. meutils/ai_audio//350/247/206/351/242/221/345/220/210/345/271/266.sh +0 -32
  486. meutils/ai_cv/1.jpg +0 -0
  487. meutils/ai_cv/197.jpg +0 -0
  488. meutils/ai_cv/2.jpg +0 -0
  489. meutils/ai_cv/img.png +0 -0
  490. meutils/ai_cv/invoice.jpg +0 -0
  491. meutils/ai_cv/tbl.png +0 -0
  492. meutils/ai_cv/test.png +0 -0
  493. meutils/ann/README.md +0 -33
  494. meutils/ann/README_gensim.md +0 -47
  495. meutils/ann/examples/client.py +0 -59
  496. meutils/ann/examples/demo.py +0 -24
  497. meutils/api/deeplx.py +0 -29
  498. meutils/api/qr.png +0 -0
  499. meutils/clis/README.md +0 -29
  500. meutils/clis/__test.sh +0 -17
  501. meutils/clis/deepseek.txt +0 -8
  502. meutils/clis/deepseek_13003330042.json +0 -1
  503. meutils/clis/deepseek_13003872192.json +0 -1
  504. meutils/clis/deepseek_13852263862.json +0 -1
  505. meutils/clis/deepseek_13913898681.json +0 -1
  506. meutils/clis/deepseek_13962978617.json +0 -1
  507. meutils/clis/deepseek_15251801790.json +0 -1
  508. meutils/clis/deepseek_15720826383.json +0 -1
  509. meutils/clis/deepseek_18395563611.json +0 -1
  510. meutils/clis/deepseek_313303303@qq.com.json +0 -1
  511. meutils/clis/kimi_state.json +0 -1
  512. meutils/cmds/README.md +0 -55
  513. meutils/coding/__init__.py +0 -11
  514. meutils/coding/find132.py +0 -40
  515. meutils/db/README.md +0 -51
  516. meutils/decorators/README.md +0 -17
  517. meutils/docarray_utils/demo_es.py +0 -34
  518. meutils/docarray_utils/demo_hnsw.py +0 -55
  519. meutils/docarray_utils/in_memory.py +0 -38
  520. meutils/docarray_utils//346/224/271/351/200/240/344/270/213hnsw.py +0 -43
  521. meutils/io/file.py +0 -20
  522. meutils/io/img.png +0 -0
  523. meutils/io/x.yml +0 -1
  524. meutils/notice/img.png +0 -0
  525. meutils/notice/todo.md +0 -10
  526. meutils/office_automation//346/212/225/350/265/204/347/256/241/347/220/206/347/263/273/347/273/237O3.2_/344/272/244/346/230/223/347/273/204.pdm +0 -22469
  527. meutils/playwright_utils/__test.sh +0 -2
  528. meutils/playwright_utils/kimi1_cookies.json +0 -1
  529. meutils/playwright_utils/kimi2_cookies.json +0 -1
  530. meutils/playwright_utils/kimi_cookies.json +0 -93
  531. meutils/serving/README.md +0 -1
  532. meutils/serving/celery/_run.sh +0 -10
  533. meutils/serving/gui/run.sh +0 -9
  534. meutils/serving/jina/__demo/client.py +0 -42
  535. meutils/serving/jina/__demo/flow.svg +0 -1
  536. meutils/serving/jina/__demo/s.py +0 -34
  537. meutils/serving/jina/__demo/s2.py +0 -37
  538. meutils/serving/jina/__demo/server.py +0 -83
  539. meutils/serving/jina/__demo/test.py +0 -40
  540. meutils/serving/jina/executors/SentenceEncoder.py +0 -62
  541. meutils/serving/jina/executors/SentenceEncoder_.py +0 -63
  542. meutils/serving/jina/executors/__init__.py +0 -46
  543. meutils/serving/jina/executors/base.py +0 -40
  544. meutils/serving/jina/nlp_serving/__init__.py +0 -11
  545. meutils/serving/jina/nlp_serving/word_segmentation.py +0 -40
  546. meutils/serving/streamlit/conf.yaml +0 -5
  547. meutils/serving/streamlit/ocr.png +0 -0
  548. meutils/serving/streamlit/run.sh +0 -17
  549. meutils/serving/webui/.streamlit/_config.toml +0 -186
  550. meutils/serving/webui/.streamlit/config.toml +0 -26
  551. meutils/serving/webui/pages/_1_/345/210/206/350/257/215.py +0 -56
  552. meutils/serving/webui/pages/_2_/350/257/215/346/200/247/346/240/207/346/263/250/344/270/216/345/256/236/344/275/223/350/257/206/345/210/253.py +0 -54
  553. meutils/serving/webui/pages/_3_/346/226/207/346/234/254/345/214/271/351/205/215.py +0 -64
  554. meutils/serving/webui/run.sh +0 -9
  555. meutils/spark/__init__.py +0 -26
  556. meutils/tools/monitor.yml +0 -29
  557. {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/LICENSE +0 -0
  558. {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/top_level.txt +0 -0
  559. {meutils → examples}/comp_utils/__init__.py +0 -0
  560. {meutils → examples}/comp_utils/reverse_metric.py +0 -0
  561. /meutils/{fileparser/README.md → fastapi_utils/exceptions/__init__.py} +0 -0
  562. /meutils/{fileparser → parsers/fileparser}/PDF/346/212/275/345/217/226.py" +0 -0
  563. /meutils/{fileparser → parsers/fileparser}/__init__.py +0 -0
  564. /meutils/{fileparser → parsers/fileparser}/common.py +0 -0
  565. /meutils/{fileparser → parsers/fileparser}/filetype/__init__.py +0 -0
  566. /meutils/{fileparser → parsers/fileparser}/filetype/__main__.py +0 -0
  567. /meutils/{fileparser → parsers/fileparser}/filetype/filetype.py +0 -0
  568. /meutils/{fileparser → parsers/fileparser}/filetype/helpers.py +0 -0
  569. /meutils/{fileparser → parsers/fileparser}/filetype/match.py +0 -0
  570. /meutils/{fileparser → parsers/fileparser}/filetype/types/__init__.py +0 -0
  571. /meutils/{fileparser → parsers/fileparser}/filetype/types/application.py +0 -0
  572. /meutils/{fileparser → parsers/fileparser}/filetype/types/archive.py +0 -0
  573. /meutils/{fileparser → parsers/fileparser}/filetype/types/audio.py +0 -0
  574. /meutils/{fileparser → parsers/fileparser}/filetype/types/base.py +0 -0
  575. /meutils/{fileparser → parsers/fileparser}/filetype/types/document.py +0 -0
  576. /meutils/{fileparser → parsers/fileparser}/filetype/types/font.py +0 -0
  577. /meutils/{fileparser → parsers/fileparser}/filetype/types/image.py +0 -0
  578. /meutils/{fileparser → parsers/fileparser}/filetype/types/isobmff.py +0 -0
  579. /meutils/{fileparser → parsers/fileparser}/filetype/types/video.py +0 -0
  580. /meutils/{fileparser → parsers/fileparser}/filetype/utils.py +0 -0
  581. /meutils/{fileparser → parsers/fileparser}/pdf.py +0 -0
  582. /meutils/{fileparser → parsers/fileparser}//350/241/250/346/240/274/346/212/275/345/217/226.py" +0 -0
@@ -8,8 +8,61 @@
8
8
  # @Software : PyCharm
9
9
  # @Description :
10
10
 
11
- from meutils.pipe import *
11
+ import numpy as np
12
+ from typing import Optional, Union
12
13
 
13
14
  from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
15
+ from fastapi import Depends, HTTPException, status
14
16
 
15
- get_bearer_token = HTTPBearer()
17
+ http_bearer = HTTPBearer()
18
+
19
+
20
+ # 定义获取token的函数
21
+
22
+ async def get_bearer_token(
23
+ auth: Optional[HTTPAuthorizationCredentials] = Depends(http_bearer)
24
+ ) -> Optional[str]:
25
+ """
26
+ 获取Bearer token
27
+ :param auth: HTTP认证凭证
28
+ :return: token字符串
29
+ """
30
+ if auth is None:
31
+ return None
32
+
33
+ token = auth.credentials
34
+ if token.startswith('redis:'): # 初始化吧,太长?
35
+ pass
36
+ if ',' in token: # 初始化redis
37
+ pass
38
+ elif ',' in token: # 分隔符
39
+ token = np.random.choice(token.split(','))
40
+
41
+ return token
42
+
43
+
44
+ # async def get_next_token(redis_key):
45
+ # """轮询"""
46
+ # if api_key := await redis_aclient.lpop(redis_key):
47
+ # await redis_aclient.rpush(redis_key, api_key)
48
+ # return api_key
49
+
50
+
51
+ async def get_bearer_token_for_oneapi(
52
+ auth: Optional[HTTPAuthorizationCredentials] = Depends(http_bearer)
53
+ ) -> Optional[str]:
54
+ """
55
+ # todo: oneapi userinfo apikey info
56
+ """
57
+ if auth is None:
58
+ return None
59
+
60
+ token = auth.credentials
61
+
62
+ return token
63
+
64
+
65
+ if __name__ == '__main__':
66
+ from meutils.pipe import *
67
+
68
+ arun(get_bearer_token(HTTPAuthorizationCredentials(scheme="Bearer", credentials="123")))
@@ -1,11 +1,35 @@
1
- from fastapi import HTTPException, status
1
+ import json
2
+ import traceback
3
+ from functools import partial
4
+ from httpx import HTTPStatusError
5
+ from openai import APIStatusError
6
+
7
+ from fastapi import status
2
8
  from starlette.requests import Request
3
9
  from starlette.responses import JSONResponse
4
10
 
11
+ from fastapi.exceptions import RequestValidationError, HTTPException
12
+
13
+ from meutils.notice.feishu import send_message as _send_message
14
+
15
+ send_message = partial(
16
+ _send_message,
17
+ title=__name__,
18
+ url="https://open.feishu.cn/open-apis/bot/v2/hook/d1c7b67d-b0f8-4067-a2f5-109f20eeb696"
19
+ )
20
+
5
21
 
6
22
  async def http_error_handler(_: Request, exc: HTTPException) -> JSONResponse:
23
+ # print(exc)
24
+ content = {
25
+ "error":
26
+ {
27
+ "message": f"{exc.detail}",
28
+ "type": "http-error",
29
+ }
30
+ }
7
31
  return JSONResponse(
8
- {"errors": [exc.detail]},
32
+ content=content,
9
33
  status_code=exc.status_code
10
34
  )
11
35
 
@@ -14,5 +38,46 @@ async def general_exception_handler(request: Request, exc: Exception):
14
38
  return JSONResponse(
15
39
  content={"message": str(exc)},
16
40
  status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
41
+ )
42
+
43
+
44
+ async def chatfire_api_exception_handler(request: Request, exc: Exception):
45
+ content = {
46
+ "error":
47
+ {
48
+ "message": f"{exc}",
49
+ "type": "cf-api-error",
50
+ },
51
+
52
+ "code": status.HTTP_500_INTERNAL_SERVER_ERROR
53
+ }
17
54
 
55
+ # 默认值
56
+ reps = None
57
+ request_json = {"body": await request.body()}
58
+ if isinstance(exc, (HTTPStatusError, APIStatusError)):
59
+ status_code = exc.response.status_code or 500
60
+
61
+ content['code'] = status_code
62
+ content['error']['message'] = f"{exc.response.text}"
63
+
64
+ reps = JSONResponse(
65
+ content=content,
66
+ status_code=status_code,
67
+ )
68
+
69
+ # send_message
70
+ content_detail = f"{traceback.format_exc()}"
71
+ if any(code in content_detail for code in {'451', }):
72
+ content_detail = ""
73
+
74
+ send_message([request_json, content, content_detail])
75
+
76
+ return reps or JSONResponse(
77
+ content=content,
78
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
18
79
  )
80
+
81
+
82
+ if __name__ == '__main__':
83
+ pass
@@ -1,5 +1,6 @@
1
1
  from typing import Union
2
2
 
3
+ from fastapi import status
3
4
  from fastapi.exceptions import RequestValidationError
4
5
  from fastapi.openapi.constants import REF_PREFIX
5
6
  from fastapi.openapi.utils import validation_error_response_definition
@@ -10,8 +11,8 @@ from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY
10
11
 
11
12
 
12
13
  async def http422_error_handler(
13
- _: Request,
14
- exc: Union[RequestValidationError, ValidationError],
14
+ _: Request,
15
+ exc: Union[RequestValidationError, ValidationError],
15
16
  ) -> JSONResponse:
16
17
  return JSONResponse(
17
18
  {"errors": exc.errors()},
@@ -26,3 +27,18 @@ validation_error_response_definition["properties"] = {
26
27
  "items": {"$ref": "{0}ValidationError".format(REF_PREFIX)},
27
28
  },
28
29
  }
30
+
31
+
32
+ async def validation_exception_handler(_: Request, exc: RequestValidationError) -> JSONResponse:
33
+ # print(exc)
34
+ content = {
35
+ "error":
36
+ {
37
+ "message": f"{exc}",
38
+ "type": "RequestValidationError",
39
+ }
40
+ }
41
+ return JSONResponse(
42
+ content=content,
43
+ status_code=status.HTTP_400_BAD_REQUEST
44
+ )
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : lifespans
5
+ # @Time : 2024/12/13 10:50
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+ from contextlib import asynccontextmanager
11
+
12
+ from meutils.pipe import *
13
+ from meutils.config_utils.manager import ConfigManager
14
+
15
+
16
+ class Resources(BaseModel):
17
+ config_manager: Optional[ConfigManager] = None
18
+
19
+ class Config:
20
+ # 允许额外字段,增加灵活性
21
+ extra = 'allow'
22
+ arbitrary_types_allowed = True
23
+
24
+
25
+ # def fake_answer_to_everything_ml_model(x: float):
26
+ # return x * 42
27
+ #
28
+ #
29
+ # ml_models = {}
30
+ #
31
+ #
32
+ # @asynccontextmanager
33
+ # async def lifespan(app):
34
+ # # Load the ML model
35
+ # ml_models["answer_to_everything"] = fake_answer_to_everything_ml_model
36
+ # yield
37
+ # # Clean up the ML models and release the resources
38
+ # ml_models.clear()
39
+
40
+
41
+ resources = Resources()
42
+
43
+
44
+ @asynccontextmanager
45
+ async def nacos_lifespan(app):
46
+ import gc
47
+
48
+ logger.debug("Init lifespans")
49
+
50
+ config_manager = ConfigManager("test", "testdata")
51
+
52
+ resources.config_manager = config_manager
53
+
54
+ yield
55
+
56
+ # release the resources
57
+ logger.debug("Release the resources")
58
+ del config_manager
59
+ gc.collect()
60
+
61
+
62
+ if __name__ == '__main__':
63
+ from fastapi import FastAPI
64
+
65
+ app = FastAPI(lifespan=lifespan)
66
+
67
+ app.state.config_manager = ConfigManager("test", "testdata")
68
+
69
+
70
+ @app.get("/predict")
71
+ async def predict(x: float):
72
+ result = ml_models["answer_to_everything"](x)
73
+ return {"result": result}
@@ -49,3 +49,15 @@ async def start_scheduler():
49
49
  # scheduler = Scheduler(timezone="Asia/Shanghai")
50
50
  # scheduler.add_job(tick, 'interval', seconds=3)
51
51
  # scheduler.start()
52
+
53
+
54
+ # from meutils.pipe import *
55
+ # from meutils.serving.fastapi import App
56
+ # from meutils.serving.fastapi.routers import scheduler
57
+ #
58
+ # if __name__ == '__main__':
59
+ # app = App()
60
+ # scheduler.scheduler.add_job(lambda: print("hello"), 'interval', seconds=3)
61
+ #
62
+ # app.include_router(scheduler.router)
63
+ # app.run(port=8899)
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : screenshot
5
+ # @Time : 2024/9/18 16:02
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+
11
+ from meutils.pipe import *
12
+ from meutils.io.files_utils import to_url
13
+ from meutils.playwright_utils import get_new_page
14
+ from meutils.schemas.playwright_types import ScreenshotRequest
15
+
16
+ from fastapi import APIRouter, File, UploadFile, Query, Form, Response, Request
17
+
18
+ router = APIRouter()
19
+
20
+ HTML_PARSER = re.compile(r'```html(.*?)```', re.DOTALL)
21
+
22
+
23
+ @router.post("/screenshot") # todo: 多个url
24
+ async def capture_screenshot(
25
+ request: ScreenshotRequest,
26
+ ):
27
+ htmls = HTML_PARSER.findall(request.html)
28
+ if htmls:
29
+ request.html = htmls[0]
30
+
31
+ page = await get_new_page()
32
+ await page.set_content(request.html)
33
+ await page.set_viewport_size({"width": request.width, "height": request.height})
34
+
35
+ with tempfile.NamedTemporaryFile(suffix='.png') as file:
36
+ await page.screenshot(path=file.name)
37
+ url = await to_url(file.name)
38
+ page.close()
39
+ return {"url": url}
40
+
41
+
42
+ if __name__ == '__main__':
43
+ from meutils.serving.fastapi import App
44
+
45
+ app = App()
46
+ app.include_router(router)
47
+ app.run(port=39666)
@@ -17,7 +17,7 @@ router = APIRouter()
17
17
 
18
18
 
19
19
  @router.get("/playwright") # todo: 多个url
20
- @alru_cache(maxsize=10240)
20
+ @alru_cache(maxsize=10240, ttl=3 * 24 * 3600)
21
21
  async def get_content(
22
22
  url: str,
23
23
  # page=Depends(get_new_page) # Depends get_new_page 里面的参数也会暴露出来
@@ -31,8 +31,13 @@ async def get_content(
31
31
  content = await page.inner_text('//*[@id="page-content"]') # 使用page.query_selector_all获取a节点列表
32
32
  else:
33
33
  # todo: xpath
34
+ # wait
35
+ await page.wait_for_load_state(state='load')
36
+ await page.wait_for_load_state(state='networkidle')
37
+ await page.wait_for_load_state(state='domcontentloaded')
38
+ await page.wait_for_selector('body')
39
+
34
40
  content = await page.inner_text('body')
35
- # page.wait_for_load_state("networkidle")
36
41
 
37
42
  return {"content": content}
38
43
 
@@ -42,4 +47,4 @@ if __name__ == '__main__':
42
47
 
43
48
  app = App()
44
49
  app.include_router(router)
45
- app.run()
50
+ app.run(port=39666)
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : task
5
+ # @Time : 2024/5/9 15:41
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+
11
+ from meutils.pipe import *
12
+ from meutils.db.redis_db import redis_aclient
13
+ from fastapi import status
14
+ from fastapi import APIRouter, File, UploadFile, Query, Form, Response, Request, FastAPI
15
+ from fastapi.responses import JSONResponse
16
+
17
+ router = APIRouter()
18
+
19
+
20
+ @router.get("/redis/{task_id}")
21
+ @alru_cache(ttl=60) # 缓存
22
+ async def get_task_from_redis(task_id: str):
23
+ task_info = await redis_aclient.get(task_id)
24
+ return task_info
25
+
26
+
27
+ class RedisRequest(BaseModel):
28
+ task_id: str
29
+ task_info: str
30
+ ttl: Optional[int] = None
31
+
32
+
33
+ @router.post("/redis")
34
+ async def set_task_for_redis(requst: RedisRequest):
35
+ await redis_aclient.set(requst.task_id, requst.task_info, ex=requst.ttl)
36
+ # return JSONResponse(content="", status_code=status.HTTP_200_OK)
37
+
38
+
39
+
40
+ redis_aclient.response_callbacks
41
+
42
+
43
+ if __name__ == '__main__':
44
+ from meutils.serving.fastapi import App
45
+
46
+ app = App()
47
+ app.include_router(router)
48
+ app.run()
@@ -8,9 +8,33 @@
8
8
  # @Software : PyCharm
9
9
  # @Description :
10
10
 
11
- from starlette.requests import Request
12
11
  from meutils.pipe import *
13
12
 
13
+ from starlette.requests import Request
14
+ from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
15
+
16
+ from fastapi import APIRouter, File, UploadFile, Query, Form, BackgroundTasks, Depends, HTTPException as _HTTPException, \
17
+ Request, status
18
+
19
+
20
+ class HTTPException(_HTTPException):
21
+ message: str = ""
22
+ type: str = "error"
23
+ param: Optional[Any] = None
24
+ code: Optional[Any] = None
25
+
26
+ def __init__(self, **kwargs):
27
+ super().__init__(**kwargs)
28
+
29
+ self.detail = self.detail or {
30
+ "error": {
31
+ "message": self.message,
32
+ "type": self.type,
33
+ "param": self.param,
34
+ "code": self.code or self.status_code,
35
+ }
36
+ }
37
+
14
38
 
15
39
  def get_ipaddr(request: Request) -> str:
16
40
  """
@@ -51,3 +75,26 @@ def limit(limit_value='3/second', error_message: Optional[str] = None, **kwargs)
51
75
 
52
76
  limiter = Limiter(key_func=get_remote_address)
53
77
  return limiter.limit(limit_value=limit_value, error_message=error_message, **kwargs)
78
+
79
+
80
+ def check_api_key(auth: HTTPAuthorizationCredentials):
81
+ api_key = auth
82
+ if api_key is None:
83
+ detail = {
84
+ "error": {
85
+ "message": "invalid_api_key",
86
+ "type": "invalid_request_error",
87
+ "param": None,
88
+ "code": None,
89
+ }
90
+ }
91
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=detail)
92
+
93
+
94
+ if __name__ == '__main__':
95
+ d = {
96
+ "error": {
97
+ "message": "当前分组 chatfire 下对于模型 ERNIE-Bot 无可用渠道 (request id: 20240314180638675032749TVFiqyF1)",
98
+ "type": "new_api_error"
99
+ }
100
+ }
@@ -232,7 +232,7 @@ def st_chat_message(
232
232
 
233
233
  with st.chat_message(name=message.name, avatar=message.avatar):
234
234
  written_content = write(message.generator, unsafe_allow_html=unsafe_allow_html, **kwargs)
235
- message.generator = written_content | xfilter | xjoin('')
235
+ message.generator = written_content | xfilter(lambda x: x is None) | xjoin('')
236
236
 
237
237
  if bhook: bhook()
238
238
 
meutils/smooth_utils.py CHANGED
@@ -59,3 +59,6 @@ def walson_ctr(num_click, num_pv, z=1.96):
59
59
  return ctr
60
60
 
61
61
 
62
+ if __name__ == '__main__':
63
+ for i in range(10): # SLEEP
64
+ print(exponential_decay(i, 10, 10, 3))
@@ -33,6 +33,9 @@ def remove_punctuation(sentence: str, punctuation='!"#$%&\'()*+,-./:;<=>?@[\\]^_
33
33
 
34
34
  def chinese_convert(s, config='t2s'):
35
35
  """https://github.com/BYVoid/OpenCC
36
+ pip install opencc
37
+ pip install opencc-python-reimplemented
38
+
36
39
  s2t.json Simplified Chinese to Traditional Chinese 簡體到繁體
37
40
  t2s.json Traditional Chinese to Simplified Chinese 繁體到簡體
38
41
  s2tw.json Simplified Chinese to Traditional Chinese (Taiwan Standard) 簡體到臺灣正體
@@ -49,7 +52,7 @@ def chinese_convert(s, config='t2s'):
49
52
  tw2t.json Traditional Chinese (Taiwan standard) to Traditional Chinese 臺灣正體到繁體(OpenCC 標準)
50
53
  @return:
51
54
  """
52
- import opencc # pip install opencc opencc-python-reimplemented
55
+ opencc = try_import("opencc", pip_name="opencc-python-reimplemented")
53
56
  converter = opencc.OpenCC(config)
54
57
  return converter.convert(s)
55
58
 
@@ -89,7 +92,7 @@ def half2all(ustring):
89
92
 
90
93
  def all2half(all_string):
91
94
  """全角转半角"""
92
- from idna import unichr
95
+ from idna import chr
93
96
 
94
97
  half_string = ""
95
98
  for char in all_string:
@@ -179,6 +182,11 @@ class Encrypt(object):
179
182
  return b.decode("utf-8")
180
183
 
181
184
 
185
+ def unicode_normalize(s):
186
+ import unicodedata
187
+ return unicodedata.normalize('NFKC', s)
188
+
189
+
182
190
  if __name__ == '__main__':
183
191
  # print(str_replace('abcd', {'a': '8', 'd': '88'}))
184
192
  # print(unquote())
@@ -188,4 +196,15 @@ if __name__ == '__main__':
188
196
 
189
197
  # print(json_loads("{1: 1}"))
190
198
 
191
- print(Encrypt().encrypt('123'*100))
199
+ # print(Encrypt().encrypt('123' * 100))
200
+
201
+ # print(query_params2json("act=get&uid=134597&vkey=07A1D82FDDE1E96DB5CEF4EF12C8125F&num=1&time=30&plat=1&re=1&type=0&so=1&ow=1&spl=1&addr=&db=1"))
202
+
203
+ print(half2all('⽉月'))
204
+ print(all2half('⽉月'))
205
+
206
+ # import chardet
207
+ #
208
+ # def detect_encoding(byte_content):
209
+ # result = chardet.detect(byte_content)
210
+ # return result['encoding']
@@ -7,6 +7,9 @@
7
7
  # @WeChat : 313303303
8
8
  # @Software : PyCharm
9
9
  # @Description : pd.io.json.json_normalize
10
+ import jsonpath
11
+
12
+ # json https://blog.csdn.net/freeking101/article/details/103048514
10
13
  # https://github.com/ijl/orjson#quickstart
11
14
  # https://jmespath.org/tutorial.html
12
15
  # https://goessner.net/articles/JsonPath/
@@ -41,3 +44,7 @@ def json_loads(s):
41
44
  logger.warning(e)
42
45
 
43
46
  return eval(s)
47
+
48
+
49
+ if __name__ == '__main__':
50
+ print(jsonpath.jsonpath({"a": 1}, expr='$.a'))