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
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : __init__.py
5
+ # @Time : 2024/5/30 11:20
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+
11
+ from meutils.llm.openai_utils.common import *
@@ -0,0 +1,284 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : commom
5
+ # @Time : 2024/5/30 11:20
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+
11
+ import tiktoken
12
+ from contextlib import asynccontextmanager
13
+ from openai import AsyncOpenAI, OpenAI, AsyncStream
14
+ from meutils.llm.clients import AsyncOpenAI, OpenAI, AsyncStream
15
+
16
+ from meutils.pipe import *
17
+ from meutils.async_utils import achain, async_to_sync
18
+ from meutils.notice.feishu import send_message
19
+
20
+ from meutils.apis.oneapi.user import get_user_money, get_api_key_log
21
+ from meutils.apis.oneapi.token import get_api_key_money
22
+
23
+ from meutils.schemas.oneapi import MODEL_PRICE
24
+ from meutils.schemas.openai_types import ChatCompletionRequest, TTSRequest, STTRequest
25
+ from meutils.schemas.openai_types import ChatCompletion, ChatCompletionChunk, CompletionUsage
26
+ from meutils.schemas.openai_types import chat_completion, chat_completion_chunk, chat_completion_chunk_stop # todo
27
+
28
+ from meutils.schemas.image_types import ImageRequest
29
+
30
+ token_encoder = tiktoken.get_encoding('cl100k_base')
31
+ token_encoder_with_cache = lru_cache(maxsize=1024)(token_encoder.encode)
32
+
33
+ CHAT_COMPLETION_PARAMS = get_function_params()
34
+ IMAGES_GENERATE_PARAMS = get_function_params(fn=OpenAI(api_key='').images.generate)
35
+ AUDIO_SPEECH_PARAMS = get_function_params(fn=OpenAI(api_key='').audio.speech.create)
36
+ AUDIO_TRANSCRIPTIONS_PARAMS = get_function_params(fn=OpenAI(api_key='').audio.transcriptions.create)
37
+
38
+
39
+ def to_openai_params(
40
+ request: Union[dict, ChatCompletionRequest, ImageRequest, TTSRequest, STTRequest],
41
+ redirect_model: Optional[str] = None,
42
+ ) -> dict:
43
+ data = copy.deepcopy(request)
44
+ if not isinstance(request, dict):
45
+ data = request.model_dump(exclude_none=True)
46
+
47
+ PARAMS = CHAT_COMPLETION_PARAMS
48
+ if isinstance(request, ChatCompletionRequest):
49
+ PARAMS = CHAT_COMPLETION_PARAMS
50
+ elif isinstance(request, ImageRequest):
51
+ PARAMS = IMAGES_GENERATE_PARAMS
52
+ elif isinstance(request, TTSRequest):
53
+ PARAMS = AUDIO_SPEECH_PARAMS
54
+ elif isinstance(request, STTRequest):
55
+ PARAMS = AUDIO_TRANSCRIPTIONS_PARAMS
56
+
57
+ extra_body = {}
58
+ for key in list(data):
59
+ if key not in PARAMS:
60
+ extra_body.setdefault(key, data.pop(key))
61
+
62
+ data['extra_body'] = extra_body # 拓展字段
63
+ data['model'] = redirect_model or data['model']
64
+
65
+ return data
66
+
67
+
68
+ def to_openai_completion_params(
69
+ request: Union[dict, ChatCompletionRequest],
70
+ redirect_model: Optional[str] = None,
71
+ ) -> dict:
72
+ data = copy.deepcopy(request)
73
+ if isinstance(request, ChatCompletionRequest):
74
+ data = request.model_dump(exclude_none=True)
75
+
76
+ extra_body = {}
77
+ for key in list(data):
78
+ if key not in CHAT_COMPLETION_PARAMS:
79
+ extra_body.setdefault(key, data.pop(key))
80
+
81
+ data['extra_body'] = extra_body # 拓展字段
82
+ data['model'] = redirect_model or data['model']
83
+
84
+ return data
85
+
86
+
87
+ def to_openai_images_params(
88
+ request: Union[dict, ImageRequest],
89
+ redirect_model: Optional[str] = None
90
+ ) -> dict:
91
+ data = copy.deepcopy(request)
92
+ if not isinstance(request, dict):
93
+ data = request.model_dump(exclude_none=True)
94
+
95
+ extra_body = {}
96
+ for key in list(data):
97
+ if key not in IMAGES_GENERATE_PARAMS:
98
+ extra_body.setdefault(key, data.pop(key))
99
+
100
+ data['extra_body'] = extra_body # 拓展字段
101
+ data['model'] = redirect_model or data.get('model')
102
+
103
+ return data
104
+
105
+
106
+ def ppu(model='ppu', api_key: Optional[str] = None):
107
+ client = OpenAI(api_key=api_key)
108
+ return client.chat.completions.create(messages=[{'role': 'user', 'content': 'hi'}], model=model)
109
+
110
+
111
+ async def appu(
112
+ model='ppu',
113
+ api_key: Optional[str] = None,
114
+ base_url: Optional[str] = None,
115
+ ):
116
+ if model not in MODEL_PRICE:
117
+ _ = f"模型未找到「{model}」,默认ppu-1"
118
+
119
+ logger.warning(_)
120
+ send_message(_, title=__name__)
121
+ model = "ppu-1"
122
+
123
+ client = AsyncOpenAI(api_key=api_key, base_url=base_url)
124
+ response = await client.chat.completions.create(messages=[{'role': 'user', 'content': 'hi'}], model=model)
125
+
126
+
127
+ @asynccontextmanager
128
+ async def ppu_flow(
129
+ api_key: str,
130
+ base_url: Optional[str] = None,
131
+
132
+ n: Optional[float] = 1, # 计费倍率
133
+ post: str = "ppu-1", # 后计费
134
+
135
+ pre: str = "ppu-0001", # 前置判断,废弃
136
+ **kwargs
137
+ ):
138
+ """
139
+ 查余额
140
+ 失败,先扣费
141
+ 成功,充足,后扣费
142
+ 成功,不足,报错
143
+ """
144
+ if n is not None and n > 0: # todo: 跳过某些用户
145
+ try:
146
+ user_money, api_key_money = await asyncio.gather(*[get_user_money(api_key), get_api_key_money(api_key)])
147
+ money = min(user_money or 1, api_key_money or 1)
148
+ logger.debug(f"PREPAY: api-key余额 {money}")
149
+ except Exception as e:
150
+ logger.error(e)
151
+ money = None
152
+
153
+ if money and money > MODEL_PRICE.get(post, 0.1): # 后扣费
154
+ yield
155
+
156
+ # 计费逻辑
157
+ n = int(np.round(n)) or 1 # np.ceil(n)
158
+ await asyncio.gather(*[appu(post, api_key=api_key, base_url=base_url) for _ in range(n)])
159
+
160
+ if money is None: # 先扣费
161
+ yield
162
+
163
+ else: # 不计费
164
+ yield
165
+
166
+
167
+ def create_chat_completion(
168
+ completion: Union[str, Iterable[str]],
169
+ redirect_model: str = '',
170
+ chat_id: Optional[str] = None
171
+ ):
172
+ if isinstance(completion, Iterable):
173
+ completion = ''.join(completion)
174
+
175
+ chat_completion.choices[0].message.content = completion
176
+
177
+ chat_completion.id = chat_id or shortuuid.random()
178
+ chat_completion.created = int(time.time())
179
+
180
+ chat_completion.model = redirect_model or chat_completion.model
181
+ return chat_completion
182
+
183
+
184
+ async def create_chat_completion_chunk(
185
+ completion_chunks: Union[
186
+ Coroutine,
187
+ AsyncStream[ChatCompletionChunk],
188
+ Iterator[Union[str, ChatCompletionChunk]],
189
+ AsyncIterator[Union[str, ChatCompletionChunk]]
190
+ ],
191
+ redirect_model: str = ' ',
192
+ chat_id: Optional[str] = None
193
+ ):
194
+ """
195
+ async def main():
196
+ data = {}
197
+ _ = AsyncOpenAI().chat.completions.create(**data)
198
+ async for i in create_chat_completion_chunk(_):
199
+ print(i)
200
+ """
201
+
202
+ # logger.debug(type(completion_chunks))
203
+ # logger.debug(isinstance(completion_chunks, Coroutine))
204
+
205
+ if isinstance(completion_chunks, Coroutine): # 咋处理
206
+ completion_chunks = await completion_chunks
207
+ # logger.debug(type(completion_chunks))
208
+
209
+ async for completion_chunk in achain(completion_chunks):
210
+
211
+ # logger.debug(completion_chunk)
212
+
213
+ chat_completion_chunk.id = chat_id or shortuuid.random()
214
+ chat_completion_chunk.created = int(time.time())
215
+ if isinstance(completion_chunk, str):
216
+ chat_completion_chunk.choices[0].delta.content = completion_chunk
217
+ chat_completion_chunk.model = redirect_model or chat_completion_chunk.model
218
+ yield chat_completion_chunk.model_dump_json()
219
+ else: # todo: AttributeError: 'tuple' object has no attribute 'model'
220
+ try:
221
+ completion_chunk.model = redirect_model or completion_chunk.model
222
+ chat_completion_chunk_stop.usage = completion_chunk.usage ############## 需要判断 usage?
223
+ yield completion_chunk.model_dump_json()
224
+ except Exception as e:
225
+ from meutils.notice.feishu import send_message
226
+ send_message(f"{type(completion_chunks)}\n\n{completion_chunks}\n\n{completion_chunk}", title=str(e))
227
+
228
+ yield chat_completion_chunk_stop.model_dump_json()
229
+ yield "[DONE]" # 兼容标准格式
230
+
231
+
232
+ if __name__ == '__main__':
233
+ # print(ppu())
234
+ # print(appu())
235
+ # print(arun(appu()))
236
+
237
+ # print(create_chat_completion('hi'))
238
+ # print(create_chat_completion('hi', redirect_model='@@'))
239
+ #
240
+ #
241
+ # async def main():
242
+ # async for i in create_chat_completion_chunk(['hi', 'hi'], redirect_model='@@'):
243
+ # print(i)
244
+ #
245
+ #
246
+ # arun(main())
247
+
248
+ # encode = lru_cache()(token_encoder.encode)
249
+ # # encode = token_encoder.encode
250
+ #
251
+ # with timer('xx'):
252
+ # encode("xxxxxxxxxxxxxxxxx" * 1000)
253
+ #
254
+ # with timer('xx'):
255
+ # encode("xxxxxxxxxxxxxxxxx" * 1000)
256
+ #
257
+ # with timer('xx'):
258
+ # encode("xxxxxxxxxxxxxxxxx" * 1000)
259
+
260
+ # print(CHAT_COMPLETION_PARAMS)
261
+ # print(IMAGES_GENERATE_PARAMS)
262
+ # from openai.types.chat import ChatCompletionToolParam
263
+ #
264
+ # print(ChatCompletionToolParam.__annotations__)
265
+ #
266
+ # ChatCompletionToolParam(**{'function': '', 'type': ''})
267
+
268
+ async def main():
269
+ with timer():
270
+ try:
271
+ async with ppu_flow(api_key="sk-OYK4YxtTlWauT2TdGR5FTAJpkRmSnDwPly4cve0cAvMcrBkZ", post="api-oss",
272
+ n=1):
273
+ logger.debug("消费了哦")
274
+
275
+ except Exception as e:
276
+ pass
277
+ logger.error(e)
278
+ # logger.debug(e.response.status_code)
279
+ # logger.debug(e.response.text)
280
+
281
+
282
+ arun(main())
283
+
284
+ # to_openai_params(ChatCompletionRequest())
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : tool_outputs
5
+ # @Time : 2024/7/25 18:48
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+ import mimetypes
11
+
12
+ import pandas as pd
13
+
14
+ from meutils.pipe import *
15
+
16
+
17
+ def web_browser_outputs_to_markdown(outputs): # json_format
18
+ yield pd.DataFrame(outputs).to_markdown()
19
+
20
+
21
+ def code_interpreter_outputs_to_markdown(outputs):
22
+ pass
23
+
24
+
25
+ def drawing_tool_outputs_to_markdown(outputs):
26
+ """
27
+ :param outputs: [{'image': 'https://sfile.chatglm.cn/testpath/b49a5472-59d2-5dad-8949-e53dea03b326_0.png'}]
28
+ :return:
29
+ """
30
+ for output in outputs:
31
+ yield f"![]({output['image']})"
32
+
33
+
34
+ def outputs_to_markdown(*outputs):
35
+ for output in outputs:
36
+ if isinstance(output, dict):
37
+ yield f"""```json\n{json.dumps(output, indent=4)}\n```"""
38
+
39
+ elif isinstance(output, str) and output.startswith("http"): # 链接
40
+ mimetype, _ = mimetypes.guess_type(output)
41
+ if mimetype:
42
+ if mimetype.startswith("image"):
43
+ yield f"![]({output})"
44
+ else:
45
+ yield f"[]({output})"
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : __init__.py
5
+ # @Time : 2024/4/24 13:35
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description : https://blog.csdn.net/qq_56591814/article/details/134774051
10
+
11
+ from meutils.pipe import *
12
+
13
+ from langchain.schema import BaseOutputParser
14
+ from langchain_core.output_parsers import PydanticOutputParser, JsonOutputParser, SimpleJsonOutputParser
15
+
16
+
17
+ if __name__ == '__main__':
18
+ # text = """
19
+ # ```json
20
+ # {
21
+ # "prompt": "中文标题:酒入愁肠\n英文标题:Wine and Sorrows\n\n歌词结构:\n[Intro]\n(独奏)\n\n[Verse 1]\n月光洒在破旧的篱笆,\n李白提壶独自彷徨。\n酒香飘逸入云端,\n笔下是豪迈的想象。\n\n[Chorus]\n一壶浊酒喜相逢,\n千载孤愁只杜甫懂。\n古道西风瘦马间,\n人间事,两行清泪长。\n\n[Verse 2]\n江水流淌带走忧伤,\n杜甫凝眉思国家。\n文章锋利剑如霜,\n心中苦,却言者无罪当。\n\n[Chorus]\n一壶浊酒喜相逢,\n千载孤愁只杜甫懂。\n古道西风瘦马间,\n人间事,两行清泪长。\n\n[Bridge]\n一千年来谁能懂,\n酒与愁是最深的重。\n历史长河波澜壮,\n诗人眼中看尽繁华空。\n\n[Chorus]\n一壶浊酒喜相逢,\n千载孤愁只杜甫懂。\n古道西风瘦马间,\n人间事,两行清泪长。\n\n[Outro]\n(独奏)",
22
+ # "tags": "传统民谣",
23
+ # "title": "酒入愁肠/Wine and Sorrows"
24
+ # }
25
+ # ```
26
+ # """
27
+ #
28
+ # # PydanticOutputParser.parse()
29
+ #
30
+ # print(JsonOutputParser().parse(text=text))
31
+ # print(PydanticOutputParser().parse_obj(text=text))
32
+ # this code example is complete and should run as it is
33
+
34
+
35
+ # @llm_prompt(output_parser='auto') # `auto` | `json` | `str` | `list`
36
+ # def write_name_suggestions(company_business: str, count: int):
37
+ # """ Write me {count} good name suggestions for company that {company_business}
38
+ # """
39
+ # pass
40
+
41
+ # print(write_name_suggestions(company_business="sells cookies", count=5))
42
+
43
+ from langchain_decorators import llm_prompt
44
+ from pydantic import BaseModel, Field
45
+
46
+ #
47
+ # class TheOutputStructureWeExpect(BaseModel):
48
+ # name: str = Field(description="The name of the company")
49
+ # headline: str = Field(description="The description of the company (for landing page)")
50
+ # employees: list[str] = Field(description="5-8 fake employee names with their positions")
51
+ #
52
+ #
53
+ # @llm_prompt()
54
+ # def fake_company_generator(company_business: str) -> TheOutputStructureWeExpect:
55
+ # """ Generate a fake company that {company_business}
56
+ # {FORMAT_INSTRUCTIONS}
57
+ # """
58
+ # return
59
+ #
60
+ #
61
+ # company = fake_company_generator(company_business="sells cookies")
62
+ #
63
+ # # print the result nicely formatted
64
+ # print("Company name: ", company.name)
65
+ # print("company headline: ", company.headline)
66
+ # print("company employees: ", company.employees)
67
+ #
68
+
69
+
70
+ @llm_prompt
71
+ def write_me_short_post(topic:str, platform:str="twitter", audience:str = "developers")->str:
72
+ """
73
+ Write me a short header for my post about {topic} for {platform} platform.
74
+ It should be for {audience} audience.
75
+ (Max 15 words)
76
+ """
77
+ return
78
+
79
+ # run it naturaly
80
+ print(write_me_short_post(topic="starwars"))
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : __init__.py
5
+ # @Time : 2024/9/11 15:18
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+ TEXT_CARD = """
11
+ # 角色
12
+ 你是一位新潮评论家,你年轻、批判,又深刻;
13
+ 你言辞犀利而幽默,擅长一针见血得表达隐喻,对现实的批判讽刺又不失文雅;
14
+ 你的行文风格和"Oscar Wilde" "鲁迅" "林语堂"等大师高度一致
15
+ # 任务
16
+ ## 金句诠释
17
+ 用特殊视角来全新得诠释给定的汉语词汇;
18
+ 敏锐得抓住给定的词汇的本质,用“辛辣的讽刺”“一针见血的评论”的风格构造包含隐喻又直达本质的「金句」
19
+ 例如:“委婉”: "刺向他人时, 决定在剑刃上撒上止痛药。"
20
+ ## 输出结果【词汇卡片】
21
+ - 输出 Html 代码
22
+ - 整体设计合理使用留白,整体排版要有呼吸感
23
+ - 设计原则:干净 简洁 纯色 典雅
24
+ - 配色:下面的色系中随机选择一个[
25
+ "柔和粉彩系",
26
+ "深邃宝石系",
27
+ "清新自然系",
28
+ "高雅灰度系",
29
+ "复古怀旧系",
30
+ "明亮活力系",
31
+ "冷淡极简系",
32
+ "海洋湖泊系",
33
+ "秋季丰收系",
34
+ "莫兰迪色系"
35
+ ]
36
+ - 卡片样式:
37
+ (字体 . ("KaiTi, SimKai" "Arial, sans-serif"))
38
+ (颜色 . ((背景 "#FAFAFA") (标题 "#333") (副标题 "#555") (正文 "#333")))
39
+ (尺寸 . ((卡片宽度 "auto") (卡片高度 "auto, >宽度") (内边距 "20px")))
40
+ (布局 . (竖版 弹性布局 居中对齐))))
41
+ - 卡片元素:
42
+ (标题 "汉语新解")
43
+ (分隔线)
44
+ (词语 用户输入)
45
+ (拼音)
46
+ (英文翻译)
47
+ (法语翻译)
48
+ (俄语翻译)
49
+ (朝鲜语翻译)
50
+ (emoji:(尝试用几个 emoji 表情表达词汇))
51
+ (解释:(按现代诗排版))
52
+ ### 结果示例:
53
+ ```
54
+ <!DOCTYPE html>
55
+ <html lang="zh">
56
+ <head>
57
+ <meta charset="UTF-8">
58
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
59
+ <title>汉语新解 - 金融杠杆</title>
60
+ <link href="https://fonts.lug.ustc.edu.cn/css2?family=Noto+Serif+SC:wght@400;700&family=Noto+Sans+SC:wght@300;400&display=swap" rel="stylesheet">
61
+ <style>
62
+ :root {
63
+ /* 莫兰迪色系:使用柔和、低饱和度的颜色 */
64
+ --primary-color: #B6B5A7; /* 莫兰迪灰褐色,用于背景文字 */
65
+ --secondary-color: #9A8F8F; /* 莫兰迪灰棕色,用于标题背景 */
66
+ --accent-color: #C5B4A0; /* 莫兰迪淡棕色,用于强调元素 */
67
+ --background-color: #E8E3DE; /* 莫兰迪米色,用于页面背景 */
68
+ --text-color: #5B5B5B; /* 莫兰迪深灰色,用于主要文字 */
69
+ --light-text-color: #8C8C8C; /* 莫兰迪中灰色,用于次要文字 */
70
+ --divider-color: #D1CBC3; /* 莫兰迪浅灰色,用于分隔线 */
71
+ }
72
+ body, html {
73
+ margin: 0;
74
+ padding: 0;
75
+ height: 100%;
76
+ display: flex;
77
+ justify-content: center;
78
+ align-items: center;
79
+ background-color: var(--background-color); /* 使用莫兰迪米色作为页面背景 */
80
+ font-family: 'Noto Sans SC', sans-serif;
81
+ color: var(--text-color); /* 使用莫兰迪深灰色作为主要文字颜色 */
82
+ }
83
+ .card {
84
+ width: 300px;
85
+ height: auto;
86
+ background-color: #F2EDE9; /* 莫兰迪浅米色,用于卡片背景 */
87
+ border-radius: 20px;
88
+ box-shadow: 0 20px 40px rgba(0,0,0,0.1);
89
+ overflow: hidden;
90
+ position: relative;
91
+ display: flex;
92
+ flex-direction: column;
93
+ }
94
+ .header {
95
+ background-color: var(--secondary-color); /* 使用莫兰迪灰棕色作为标题背景 */
96
+ color: #F2EDE9; /* 浅色文字与深色背景形成对比 */
97
+ padding: 20px;
98
+ text-align: left;
99
+ position: relative;
100
+ z-index: 1;
101
+ }
102
+ h1 {
103
+ font-family: 'Noto Serif SC', serif;
104
+ font-size: 20px;
105
+ margin: 0;
106
+ font-weight: 700;
107
+ }
108
+ .content {
109
+ padding: 30px 20px;
110
+ display: flex;
111
+ flex-direction: column;
112
+ flex-grow: 1;
113
+ }
114
+ .word {
115
+ text-align: left;
116
+ margin-bottom: 20px;
117
+ }
118
+ .word-main {
119
+ font-family: 'Noto Serif SC', serif;
120
+ font-size: 36px;
121
+ color: var(--text-color); /* 使用莫兰迪深灰色作为主要词汇颜色 */
122
+ margin-bottom: 10px;
123
+ position: relative;
124
+ }
125
+ .word-main::after {
126
+ content: '';
127
+ position: absolute;
128
+ left: 0;
129
+ bottom: -5px;
130
+ width: 50px;
131
+ height: 3px;
132
+ background-color: var(--accent-color); /* 使用莫兰迪淡棕色作为下划线 */
133
+ }
134
+ .word-sub {
135
+ font-size: 14px;
136
+ color: var(--light-text-color); /* 使用莫兰迪中灰色作为次要文字颜色 */
137
+ margin: 5px 0;
138
+ }
139
+ .divider {
140
+ width: 100%;
141
+ height: 1px;
142
+ background-color: var(--divider-color); /* 使用莫兰迪浅灰色作为分隔线 */
143
+ margin: 20px 0;
144
+ }
145
+ .explanation {
146
+ font-size: 18px;
147
+ line-height: 1.6;
148
+ text-align: left;
149
+ flex-grow: 1;
150
+ display: flex;
151
+ flex-direction: column;
152
+ justify-content: center;
153
+ }
154
+ .quote {
155
+ position: relative;
156
+ padding-left: 20px;
157
+ border-left: 3px solid var(--accent-color); /* 使用莫兰迪淡棕色作为引用边框 */
158
+ }
159
+ .background-text {
160
+ position: absolute;
161
+ font-size: 150px;
162
+ color: rgba(182, 181, 167, 0.15); /* 使用莫兰迪灰褐色的透明版本作为背景文字 */
163
+ z-index: 0;
164
+ top: 50%;
165
+ left: 50%;
166
+ transform: translate(-50%, -50%);
167
+ font-weight: bold;
168
+ }
169
+ </style>
170
+ </head>
171
+ <body>
172
+ <div class="card">
173
+ <div class="header">
174
+ <h1>汉语新解</h1>
175
+ </div>
176
+ <div class="content">
177
+ <div class="word">
178
+ <div class="word-main">金融杠杆</div>
179
+ <div class="word-sub">Jīn Róng Gàng Gǎn</div>
180
+ <div class="word-sub">Financial Leverage</div>
181
+ <div class="word-sub">levier financier</div>
182
+ <div class="word-sub">Финансовый рычаг</div>
183
+ <div class="word-sub">금융 레버리지</div>
184
+ <div class="word-sub">💰🏋️‍♂️💹</div>
185
+ </div>
186
+ <div class="divider"></div>
187
+ <div class="explanation">
188
+ <div class="quote">
189
+ <p>
190
+ 借鸡生蛋,<br>
191
+ 只不过这蛋要是金的,<br>
192
+ 鸡得赶紧卖了还债。
193
+ </p>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ <div class="background-text">杠杆</div>
198
+ </div>
199
+ </body>
200
+ </html>
201
+ ```
202
+ ### 注意:
203
+ 1. 分隔线与上下元素垂直间距相同,具有分割美学。
204
+ 2. 卡片(.card)不需要 padding ,允许子元素“汉语新解”的色块完全填充到边缘,具有设计感。
205
+ # 词汇
206
+ __WORD__"
207
+ """ # .replace("汉语新解", "🔥火宝新语")
208
+
209
+ if __name__ == '__main__':
210
+ from meutils.pipe import *
211
+
212
+ url = "https://xy.siliconflow.cn/api/chat"
213
+ base_url = "https://any2chat.chatfire.cn/xy/v1"
214
+
215
+ from openai import OpenAI
216
+
217
+ payload = {
218
+ "messages": [
219
+ {
220
+ "role": "user",
221
+ # "content": TEXT_CARD.replace("__WORD__", "火宝"),
222
+ "content": "996"
223
+
224
+ }
225
+ ],
226
+ # "chat_id": "eqI1A0z",
227
+ "model": "Pro/THUDM/glm-4-9b-chat",
228
+ # "temperature": 0.7,
229
+ # "top_k": 50,
230
+ # "top_p": 0.7,
231
+ # "max_tokens": 4096,
232
+ # "frequency_penalty": 0
233
+ # "stream": True,
234
+ # "model": "gpt-4o-mini",
235
+ # 'model': "claude-3-5-sonnet-20240620"
236
+
237
+ }
238
+ c = OpenAI(api_key='xx', base_url=base_url).chat.completions.create(**payload)
239
+ # response = requests.request("POST", url, json=payload)
240
+
241
+ # print(response.text)
242
+
243
+ for i in c:
244
+ print(i.choices[0].delta.content, end="", flush=True)