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.
- {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/METADATA +38 -32
- MeUtils-2025.1.16.17.15.52.dist-info/RECORD +864 -0
- {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/WHEEL +1 -1
- {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/entry_points.txt +1 -0
- apps/spider.py +24 -8
- examples/_openaisdk/4v.py +110 -0
- examples/_openaisdk/__init__.py +11 -0
- examples/_openaisdk/baichuan.py +38 -0
- examples/_openaisdk/bpo.py +138 -0
- examples/_openaisdk/chat_latex.py +95 -0
- examples/_openaisdk/chattts.py +85 -0
- examples/_openaisdk/copilot.py +48 -0
- examples/_openaisdk/dalle3.py +48 -0
- examples/_openaisdk/deeplx.py +31 -0
- examples/_openaisdk/demo.py +77 -0
- examples/_openaisdk/embeddings.py +34 -0
- examples/_openaisdk/gpt4all.py +69 -0
- examples/_openaisdk/gpt_fc.py +23 -0
- examples/_openaisdk/gr_vl.py +46 -0
- examples/_openaisdk/json_mode.py +12 -0
- examples/_openaisdk/kimi.py +91 -0
- examples/_openaisdk/kimi_qa.py +57 -0
- examples/_openaisdk/minimax.py +75 -0
- examples/_openaisdk/open_router.py +48 -0
- examples/_openaisdk/openai_aiplus.py +54 -0
- examples/_openaisdk/openai_audio.py +20 -0
- examples/_openaisdk/openai_baichuan.py +59 -0
- examples/_openaisdk/openai_cache.py +37 -0
- examples/_openaisdk/openai_chatfire.py +228 -0
- examples/_openaisdk/openai_chatfire_all.py +166 -0
- examples/_openaisdk/openai_deepinfra.py +55 -0
- examples/_openaisdk/openai_deepseek.py +29 -0
- examples/_openaisdk/openai_doubao.py +43 -0
- examples/_openaisdk/openai_embeddings.py +36 -0
- examples/_openaisdk/openai_files.py +57 -0
- examples/_openaisdk/openai_gitee.py +33 -0
- examples/_openaisdk/openai_god.py +45 -0
- examples/_openaisdk/openai_groq.py +240 -0
- examples/_openaisdk/openai_images.py +203 -0
- examples/_openaisdk/openai_json.py +78 -0
- examples/_openaisdk/openai_lingyi.py +59 -0
- examples/_openaisdk/openai_modelscope.py +54 -0
- examples/_openaisdk/openai_moon.py +55 -0
- examples/_openaisdk/openai_oi.py +61 -0
- examples/_openaisdk/openai_ppu.py +47 -0
- examples/_openaisdk/openai_qwen.py +58 -0
- examples/_openaisdk/openai_search.py +42 -0
- examples/_openaisdk/openai_sensenova.py +81 -0
- examples/_openaisdk/openai_siliconflow.py +52 -0
- examples/_openaisdk/openai_step.py +45 -0
- examples/_openaisdk/openai_test.py +66 -0
- examples/_openaisdk/openai_together.py +57 -0
- examples/_openaisdk/openai_tune.py +38 -0
- examples/_openaisdk/openai_zhipu.py +59 -0
- examples/_openaisdk/ppu.py +28 -0
- examples/_openaisdk/rag.py +54 -0
- examples/_openaisdk/rag_.py +26 -0
- examples/_openaisdk/test.py +52 -0
- examples/_openaisdk/x.py +32 -0
- examples/_openaisdk/xx.py +29 -0
- examples/_openaisdk/zhipu_files.py +47 -0
- examples/_openaisdk/zhipu_/346/231/272/350/203/275/344/275/223.py +45 -0
- examples/_openaisdk//345/205/234/345/272/225/346/265/213/350/257/225.py +50 -0
- examples/_openaisdk//345/244/232/346/250/241/346/200/201/346/265/213/350/257/225.py +76 -0
- examples/_openaisdk//345/244/232/346/250/241/346/200/201/346/265/213/350/257/225_.py +56 -0
- examples/_openaisdk//346/226/207/344/273/266/351/227/256/347/255/224.py +36 -0
- examples/_openaisdk//346/226/207/346/241/243/350/247/243/346/236/220.py +34 -0
- examples/_openaisdk//346/250/241/345/236/213/346/265/213/350/257/225.py +53 -0
- examples/_openaisdk//351/230/277/351/207/214.py +80 -0
- {meutils/serving/jina/__demo → examples/ann}/__init__.py +1 -1
- examples/ann/main.py +31 -0
- examples/apis/kl.py +28 -0
- examples/apis/x.py +17 -0
- examples/apis/xx.py +17 -0
- examples/arq_demo/demo.py +3 -0
- examples/backgroundtasks.py +25 -0
- examples/bserver.py +513 -21
- examples/cache_demo/HermesCache_demo.py +81 -0
- examples/cache_demo/acacge.py +26 -0
- examples/cache_demo/x.py +31 -0
- {meutils/docarray_utils → examples/caches}/__init__.py +1 -1
- examples/caches/llmcache.py +18 -0
- examples/celery_demo/product_task.py +2 -0
- examples/demo.py +17 -1
- examples/fastapi_caching.py +59 -0
- {meutils/dependencies → examples/gr}/__init__.py +1 -1
- examples/gr/d.py +22 -0
- examples/gr/demo.py +30 -0
- examples/ip2/345/234/260/345/214/272.py +16 -0
- examples/jinja2_demo/j2_demo.py +20 -1
- examples/json/346/240/207/345/207/206/345/214/226.py +54 -0
- examples/md.py +29 -0
- {meutils/serving/jina → examples/nesc}/__init__.py +1 -1
- examples/nesc/main.py +76 -0
- examples/orm/mysql_orm.py +113 -0
- examples/orm/sql_creater.py +57 -0
- examples/orm/sqlm.py +134 -0
- examples/rq_demo/fns.py +18 -0
- examples/rq_demo/redis/351/230/237/345/210/227.py +14 -7
- examples/rq_demo/redis/351/230/237/345/210/227_add_chatfire.py +30 -0
- examples/size_map.py +43 -0
- examples/test.py +59 -0
- examples/webs/__init__.py +11 -0
- examples/webs/main.py +34 -0
- examples/x.py +13 -0
- examples//345/216/273/346/260/264/345/215/260.py +20 -0
- examples//346/226/207/346/241/243/346/231/272/350/203/275/__init__.py +11 -0
- meutils/_utils.py +15 -6
- meutils/ai_audio/asr/__init__.py +3 -2
- meutils/ai_audio/asr/cf_asr.py +53 -0
- meutils/ai_audio/asr/de.py +11 -0
- meutils/ai_audio/asr/fast_asr.py +15 -7
- meutils/ai_audio/asr/openai_asr.py +83 -6
- meutils/ai_audio/fast_asr.py +8 -4
- meutils/ai_audio/tts/EdgeTTS.py +33 -7
- meutils/ai_audio/tts/openai_tts.py +24 -20
- meutils/ai_audio/tts/tts_ui.py +1 -0
- meutils/ai_audio/utils.py +9 -0
- meutils/ai_cv/__init__.py +0 -1
- meutils/ai_cv/ocr.py +3 -2
- meutils/ai_cv/utils.py +154 -0
- meutils/ai_video/avmerge.py +6 -0
- meutils/ai_video/video.py +11 -2
- meutils/{api → apis}/__init__.py +1 -1
- meutils/apis/ali_apis.py +60 -0
- meutils/apis/audio/__init__.py +10 -0
- meutils/apis/audio/deepinfra.py +59 -0
- meutils/apis/audio/fish.py +248 -0
- meutils/apis/baidu/__init__.py +9 -0
- meutils/apis/baidu/bdaitpzs.py +229 -0
- meutils/apis/baidu/test.py +78 -0
- meutils/apis/chatglm/__init__.py +11 -0
- meutils/apis/chatglm/glm_video.py +273 -0
- meutils/apis/chatglm/glm_video_api.py +116 -0
- meutils/apis/chatglm/images.py +63 -0
- meutils/apis/chatglm/temp.py +259 -0
- meutils/apis/chatglm/x.py +31 -0
- meutils/{api → apis}/common.py +10 -6
- meutils/apis/fal/__init__.py +11 -0
- meutils/apis/fal/files.py +53 -0
- meutils/apis/fal/images.py +57 -0
- meutils/apis/fal/images_.py +72 -0
- meutils/apis/fal/videos.py +77 -0
- meutils/apis/firecrawl.py +45 -0
- meutils/apis/gitee/__init__.py +11 -0
- meutils/apis/gitee/images/__init__.py +9 -0
- meutils/apis/gitee/images/kolors.py +99 -0
- meutils/apis/hailuoai/__init__.py +11 -0
- meutils/apis/hailuoai/demo.py +34 -0
- meutils/apis/hailuoai/hasha_new.py +248 -0
- meutils/apis/hailuoai/music.py +11 -0
- meutils/apis/hailuoai/upload.py +116 -0
- meutils/apis/hailuoai/videos.py +460 -0
- meutils/apis/hailuoai/yy.py +242 -0
- meutils/apis/hf/__init__.py +11 -0
- meutils/apis/hf/got_ocr.py +64 -0
- meutils/apis/hf/gradio.py +34 -0
- meutils/apis/hf/hivisionidphotos.py +80 -0
- meutils/apis/hf/kolors.py +68 -0
- meutils/apis/hf/kolors_virtual_try_on.py +107 -0
- meutils/apis/hf/r.py +53 -0
- meutils/apis/hf/x.py +26 -0
- meutils/apis/hf//350/257/201/344/273/266/347/205/247.py +41 -0
- meutils/apis/hunyuan/__init__.py +11 -0
- meutils/apis/hunyuan/image_tools.py +84 -0
- meutils/apis/images/__init__.py +11 -0
- meutils/apis/images/deepinfra.py +92 -0
- meutils/apis/images/demo.py +150 -0
- meutils/apis/images/eidt.py +36 -0
- meutils/apis/images/flux/__init__.py +11 -0
- meutils/apis/images/flux/fluxpro.py +108 -0
- meutils/apis/images/flux/mystic.py +116 -0
- meutils/apis/images/ideogram/__init__.py +10 -0
- meutils/apis/images/ideogram/ideogram_images.py +193 -0
- meutils/apis/images/prodia/__init__.py +12 -0
- meutils/apis/images/prodia/faceswap.py +76 -0
- meutils/apis/images/recraft.py +152 -0
- meutils/apis/images/virtual_try_on/__init__.py +11 -0
- meutils/apis/images/virtual_try_on/images.py +65 -0
- meutils/apis/jiema/24mail.py +96 -0
- meutils/apis/jiema/__init__.py +11 -0
- meutils/apis/jiema/yezi.py +97 -0
- meutils/apis/jimeng/__init__.py +11 -0
- meutils/apis/jimeng/common.py +328 -0
- meutils/apis/jimeng/doubao.py +68 -0
- meutils/apis/jimeng/doubao_utils.py +175 -0
- meutils/apis/jimeng/files.py +263 -0
- meutils/apis/jimeng/images.py +140 -0
- meutils/apis/jimeng/lip_sync.py +11 -0
- meutils/apis/jina.py +55 -0
- meutils/apis/kling/__init__.py +11 -0
- meutils/apis/kling/api.py +60 -0
- meutils/apis/kling/images.py +174 -0
- meutils/apis/kling/kolors_virtual_try_on.py +111 -0
- meutils/apis/kling/kolors_virtual_try_on_web.py +126 -0
- meutils/apis/kling/videos.py +67 -0
- meutils/apis/kling//351/211/264/346/235/203.py +34 -0
- meutils/apis/kuaidi.py +32 -0
- meutils/apis/kuaishou/__init__.py +10 -0
- meutils/apis/kuaishou/klingai.py +523 -0
- meutils/apis/kuaishou/klingai_video.py +197 -0
- meutils/apis/kuaishou/kolors.py +189 -0
- meutils/apis/llm_qa.py +55 -0
- meutils/apis/luma/__init__.py +11 -0
- meutils/apis/luma/luma.py +123 -0
- meutils/apis/minicpm/__init__.py +9 -0
- meutils/apis/minicpm/luca.py +137 -0
- meutils/apis/monica/__init__.py +11 -0
- meutils/apis/monica/llm.py +11 -0
- meutils/apis/napkin/__init__.py +11 -0
- meutils/apis/napkin/icons.py +42 -0
- meutils/apis/niutrans.py +73 -0
- meutils/apis/oneapi/__init__.py +11 -0
- meutils/apis/oneapi/channel.py +68 -0
- meutils/apis/oneapi/common.py +135 -0
- meutils/apis/oneapi/log.py +47 -0
- meutils/apis/oneapi/token.py +48 -0
- meutils/apis/oneapi/token_.py +112 -0
- meutils/apis/oneapi/user.py +100 -0
- meutils/apis/oneapi/utils.py +47 -0
- meutils/apis/pixverse/__init__.py +11 -0
- meutils/apis/pixverse/pixverse.py +150 -0
- meutils/apis/proxy/__init__.py +11 -0
- meutils/apis/proxy/ips.py +178 -0
- meutils/apis/remini/__init__.py +11 -0
- meutils/apis/remini/remini.py +89 -0
- meutils/apis/replicateai/__init__.py +11 -0
- meutils/apis/replicateai/images.py +79 -0
- meutils/apis/replicateai/raw.py +53 -0
- meutils/apis/runwayml/__init__.py +10 -0
- meutils/apis/runwayml/gen.py +143 -0
- meutils/apis/search/__init__.py +11 -0
- meutils/apis/search/baichuan.py +11 -0
- meutils/apis/search/metaso.py +218 -0
- meutils/apis/search/metaso_.py +77 -0
- meutils/apis/search/n.py +99 -0
- meutils/apis/search/searxng.py +42 -0
- meutils/apis/search_music.py +39 -0
- meutils/apis/siliconflow/__init__.py +9 -0
- meutils/apis/siliconflow/audio.py +63 -0
- meutils/apis/siliconflow/image_to_image.py +116 -0
- meutils/apis/siliconflow/images.py +154 -0
- meutils/apis/siliconflow/rerankers.py +40 -0
- meutils/apis/siliconflow/text_to_image.py +132 -0
- meutils/apis/siliconflow/utils.py +66 -0
- meutils/apis/siliconflow/videos.py +102 -0
- meutils/apis/sunoai/__init__.py +10 -0
- meutils/apis/sunoai/haimian.py +135 -0
- meutils/apis/sunoai/suno.py +373 -0
- meutils/apis/textcard/__init__.py +11 -0
- meutils/apis/textcard/demo.py +25 -0
- meutils/apis/textcard/hanyuxinjie.py +81 -0
- meutils/apis/textin.py +159 -0
- meutils/apis/to_image/__init__.py +11 -0
- meutils/apis/to_image/html2image.py +29 -0
- meutils/apis/to_image/md.py +29 -0
- meutils/apis/to_image/url2image.py +41 -0
- meutils/apis/together/__init__.py +11 -0
- meutils/apis/together/images.py +80 -0
- meutils/apis/translator/__init__.py +9 -0
- meutils/apis/translator/deeplx.py +55 -0
- meutils/apis/tripo3d/__init__.py +11 -0
- meutils/apis/tripo3d/images.py +106 -0
- meutils/apis/ts.py +60 -0
- meutils/apis/uptime_kuma/__init__.py +11 -0
- meutils/apis/uptime_kuma/common.py +56 -0
- meutils/apis/uptime_kuma//345/233/275/344/272/247/345/210/206/347/273/204.py +68 -0
- meutils/apis/utils.py +47 -0
- meutils/apis/videos/__init__.py +11 -0
- meutils/apis/videos/sora.py +16 -0
- meutils/apis/vidu/__init__.py +9 -0
- meutils/apis/vidu/vidu_video.py +254 -0
- meutils/apis/vidu/x.py +14 -0
- meutils/apis/voice_clone/__init__.py +10 -0
- meutils/apis/voice_clone/fish.py +236 -0
- meutils/apis/voice_clone/fish_api.py +16 -0
- meutils/apis/web_search.py +31 -0
- meutils/apis/yezi.py +97 -0
- meutils/async_task/__init__.py +13 -0
- meutils/async_task/celery_config.py +106 -0
- meutils/async_task/common.py +37 -0
- meutils/async_task/demo_create_tasks.py +73 -0
- meutils/async_task/tasks/__init__.py +11 -0
- meutils/async_task/tasks/_all.py +20 -0
- meutils/async_task/tasks/hailuo.py +24 -0
- meutils/async_task/tasks/kling.py +30 -0
- meutils/async_task/tasks/replicateai.py +24 -0
- meutils/async_task/tasks/test.py +124 -0
- meutils/async_task/tasks/vidu.py +28 -0
- meutils/async_task/utils.py +191 -0
- meutils/async_task//351/200/232/347/224/250/350/256/276/350/256/241.py +119 -0
- meutils/async_utils/asyncer_.py +37 -0
- meutils/async_utils/background.py +68 -0
- meutils/async_utils/common.py +136 -16
- meutils/async_utils/test.py +47 -0
- meutils/cache_utils.py +29 -23
- meutils/caches/__init__.py +9 -0
- meutils/caches/acache.py +45 -0
- meutils/caches/redis_cache.py +63 -0
- meutils/clis/check_api.py +66 -0
- meutils/clis/cli.py +1 -1
- meutils/common.py +56 -17
- meutils/config_utils/__init__.py +11 -0
- meutils/config_utils/lark_utils/__init__.py +11 -0
- meutils/config_utils/lark_utils/common.py +385 -0
- meutils/config_utils/lark_utils/demo.py +13 -0
- meutils/config_utils/lark_utils/x.py +50 -0
- meutils/config_utils/manager.py +108 -0
- meutils/crawlers/__init__.py +11 -0
- meutils/data/VERSION +1 -1
- meutils/data/cowboy-hat-face.webp +0 -0
- meutils/data/oneapi/FOOTER.md +7 -0
- meutils/data/oneapi/NOTICE.md +138 -0
- meutils/data/oneapi/__init__.py +15 -0
- meutils/db/orm.py +179 -0
- meutils/db/redis_db.py +87 -0
- meutils/decorators/cache.py +1 -1
- meutils/decorators/common.py +84 -5
- meutils/decorators/contextmanagers.py +17 -6
- meutils/decorators/fastapi_decorator.py +77 -3
- meutils/decorators/polling.py +46 -0
- meutils/decorators/retry.py +150 -26
- meutils/fastapi_utils/__init__.py +11 -0
- meutils/fastapi_utils/exceptions/http_error.py +72 -0
- meutils/fastapi_utils/exceptions/validation_error.py +44 -0
- meutils/hash_utils.py +9 -4
- meutils/hooks/__init__.py +11 -0
- meutils/hooks/hook_test.py +174 -0
- meutils/hooks/wechat.py +162 -0
- meutils/hooks/wechat_channel.py +303 -0
- meutils/init/evn.py +1 -1
- meutils/io/files_utils.py +232 -0
- meutils/io/image.py +148 -10
- meutils/io/x.py +75 -0
- meutils/llm/__init__.py +10 -0
- meutils/llm/check_api.py +109 -0
- meutils/llm/check_utils.py +106 -0
- meutils/llm/clients.py +38 -0
- meutils/llm/completions/__init__.py +11 -0
- meutils/llm/completions/agents/__init__.py +11 -0
- meutils/llm/completions/agents/file.py +125 -0
- meutils/llm/completions/cp.py +112 -0
- meutils/llm/completions/delilegal.py +135 -0
- meutils/llm/completions/dify.py +81 -0
- meutils/llm/completions/kimi.py +47 -0
- meutils/llm/completions/modelscope.py +11 -0
- meutils/{fileparser/filetype.py → llm/completions/oi.py} +5 -3
- meutils/llm/completions/rag/__init__.py +11 -0
- meutils/llm/completions/rag/fire.py +157 -0
- meutils/llm/completions/rag/qwen.py +11 -0
- meutils/llm/completions/rag/rag.py +41 -0
- meutils/llm/completions/rag.py +38 -0
- meutils/llm/completions/tryblend.py +201 -0
- meutils/llm/completions/tune.py +284 -0
- meutils/llm/completions/x.py +26 -0
- meutils/llm/completions/xx.py +61 -0
- meutils/llm/completions/yuanbao.py +176 -0
- meutils/llm/demo.py +114 -0
- meutils/llm/functions/__init__.py +11 -0
- meutils/llm/mappers.py +15 -0
- meutils/llm/openai_utils/__init__.py +11 -0
- meutils/llm/openai_utils/common.py +284 -0
- meutils/llm/openai_utils/tool_outputs.py +45 -0
- meutils/llm/output_parsers/__init__.py +80 -0
- meutils/llm/prompts/__init__.py +244 -0
- meutils/llm/prompts/demo.py +155 -0
- meutils/llm/prompts/html2image_test.py +19 -0
- meutils/llm/utils.py +133 -0
- meutils/llm/x.py +75 -0
- meutils/notice/feishu.py +40 -9
- meutils/notice/wechat.py +23 -21
- meutils/np_utils.py +10 -1
- meutils/office_automation/pdf.py +6 -1
- meutils/oss/__init__.py +20 -0
- meutils/oss/minio_oss.py +184 -0
- meutils/oss/minio_utils.py +48 -0
- meutils/other/__demo.py +6 -4
- meutils/pandas_utils/__init__.py +1 -0
- meutils/pandas_utils/common.py +31 -0
- meutils/pandas_utils/pd_utils.py +10 -6
- meutils/parsers/__init__.py +10 -0
- meutils/parsers/file_parsers.py +110 -0
- meutils/parsers/fileparser/demo.py +41 -0
- meutils/parsers/fileparser/filetype.py +41 -0
- meutils/pay.py +37 -0
- meutils/pipe.py +37 -4
- meutils/playwright_utils/common.py +20 -12
- meutils/plots/common.py +35 -34
- meutils/queues/demo.py +56 -0
- meutils/queues/smooth_queue.py +120 -0
- meutils/queues/uniform_queue.py +3 -1
- meutils/request_utils/__init__.py +26 -2
- meutils/request_utils/ark.py +47 -0
- meutils/request_utils/crawler.py +34 -5
- meutils/request_utils/jwt_utils/__init__.py +11 -0
- meutils/request_utils/jwt_utils/common.py +42 -0
- meutils/request_utils/volc.py +160 -0
- meutils/schemas/__init__.py +0 -1
- meutils/schemas/baidu_types.py +70 -0
- meutils/schemas/batch_types.py +450 -0
- meutils/schemas/celery_types.py +64 -0
- meutils/schemas/chatfire_types.py +15 -0
- meutils/schemas/chatglm_types.py +197 -0
- meutils/schemas/db/__init__.py +11 -0
- meutils/schemas/db/oneapi_types.py +117 -0
- meutils/schemas/dify_types.py +40 -0
- meutils/schemas/embedding.py +31 -0
- meutils/schemas/fal_types.py +13 -0
- meutils/schemas/fish_types.py +11 -0
- meutils/schemas/hailuo_types.py +208 -0
- meutils/schemas/haimian_types.py +51 -0
- meutils/schemas/idphoto_types.py +43 -0
- meutils/schemas/image_types.py +476 -0
- meutils/schemas/jimeng_types.py +28 -0
- meutils/schemas/jina_types.py +67 -0
- meutils/schemas/kimi_types.py +86 -0
- meutils/schemas/kling_types.py +235 -0
- meutils/schemas/kuaishou_types.py +328 -0
- meutils/schemas/luma_types.py +59 -0
- meutils/schemas/message_types.py +165 -0
- meutils/schemas/message_types_.py +219 -0
- meutils/schemas/metaso_types.py +64 -0
- meutils/schemas/napkin_types.py +85 -0
- meutils/schemas/ocr_types.py +37 -0
- meutils/schemas/oneapi/__init__.py +11 -0
- meutils/schemas/oneapi/_types.py +49 -0
- meutils/schemas/oneapi/common.py +883 -0
- meutils/schemas/oneapi/icons.py +30 -0
- meutils/schemas/oneapi/model_group_info.py +48 -0
- meutils/schemas/oneapi/model_info.py +34 -0
- meutils/schemas/oneapi/models.py +26 -0
- meutils/schemas/oneapi/x.py +26 -0
- meutils/schemas/oneapi//351/207/215/345/256/232/345/220/221.py +132 -0
- meutils/schemas/openai_api_protocol.py +411 -0
- meutils/schemas/openai_types.py +366 -0
- meutils/schemas/pixverse_types.py +88 -0
- meutils/schemas/playwright_types.py +57 -0
- meutils/schemas/prodia_types.py +19 -0
- meutils/schemas/replicate_types.py +112 -0
- meutils/schemas/request_types.py +20 -0
- meutils/schemas/runwayml_types.py +190 -0
- meutils/schemas/siliconflow_types.py +80 -0
- meutils/schemas/step_types.py +19 -0
- meutils/schemas/suno_types.py +319 -0
- meutils/schemas/task_types.py +192 -0
- meutils/schemas/translator_types.py +29 -0
- meutils/schemas/tripo3d_types.py +57 -0
- meutils/schemas/tryblend_types.py +51 -0
- meutils/schemas/video_types.py +62 -0
- meutils/schemas/vidu_types.py +350 -0
- meutils/schemas/wechat_types.py +316 -0
- meutils/schemas/yuanbao_types.py +260 -0
- meutils/serving/celery/__init__.py +8 -0
- meutils/serving/celery/config.py +115 -0
- meutils/serving/celery/router.py +4 -6
- meutils/serving/celery/tasks.py +6 -4
- meutils/serving/celery//351/200/232/347/224/250/350/256/276/350/256/241.py +119 -0
- meutils/serving/fastapi/common.py +27 -31
- meutils/serving/fastapi/dependencies/__init__.py +0 -1
- meutils/serving/fastapi/dependencies/auth.py +55 -2
- meutils/serving/fastapi/exceptions/http_error.py +67 -2
- meutils/serving/fastapi/exceptions/validation_error.py +18 -2
- meutils/serving/fastapi/lifespans.py +73 -0
- meutils/serving/fastapi/routers/scheduler.py +12 -0
- meutils/serving/fastapi/routers/screenshot.py +47 -0
- meutils/serving/fastapi/routers/spider.py +8 -3
- meutils/serving/fastapi/routers/task.py +48 -0
- meutils/serving/fastapi/utils.py +48 -1
- meutils/serving/streamlit/common.py +1 -1
- meutils/smooth_utils.py +3 -0
- meutils/str_utils/__init__.py +22 -3
- meutils/str_utils/json_utils.py +7 -0
- meutils/str_utils/regular_expression.py +102 -10
- meutils/templates/xx.html +21 -0
- meutils/templates/xxx.html +117 -0
- meutils/todo.py +12 -0
- meutils/tools/token_monitor.py +33 -0
- MeUtils-2024.3.4.13.4.45.dist-info/RECORD +0 -540
- meutils/ai_audio/asr/subtitle.srt +0 -40
- meutils/ai_audio/demo.ipynb +0 -1215
- meutils/ai_audio/example.srt +0 -348
- meutils/ai_audio/new.srt +0 -179
- meutils/ai_audio/subtitles.srt +0 -696
- meutils/ai_audio/tts/new.srt +0 -179
- meutils/ai_audio//350/247/206/351/242/221/345/220/210/345/271/266.sh +0 -32
- meutils/ai_cv/1.jpg +0 -0
- meutils/ai_cv/197.jpg +0 -0
- meutils/ai_cv/2.jpg +0 -0
- meutils/ai_cv/img.png +0 -0
- meutils/ai_cv/invoice.jpg +0 -0
- meutils/ai_cv/tbl.png +0 -0
- meutils/ai_cv/test.png +0 -0
- meutils/ann/README.md +0 -33
- meutils/ann/README_gensim.md +0 -47
- meutils/ann/examples/client.py +0 -59
- meutils/ann/examples/demo.py +0 -24
- meutils/api/deeplx.py +0 -29
- meutils/api/qr.png +0 -0
- meutils/clis/README.md +0 -29
- meutils/clis/__test.sh +0 -17
- meutils/clis/deepseek.txt +0 -8
- meutils/clis/deepseek_13003330042.json +0 -1
- meutils/clis/deepseek_13003872192.json +0 -1
- meutils/clis/deepseek_13852263862.json +0 -1
- meutils/clis/deepseek_13913898681.json +0 -1
- meutils/clis/deepseek_13962978617.json +0 -1
- meutils/clis/deepseek_15251801790.json +0 -1
- meutils/clis/deepseek_15720826383.json +0 -1
- meutils/clis/deepseek_18395563611.json +0 -1
- meutils/clis/deepseek_313303303@qq.com.json +0 -1
- meutils/clis/kimi_state.json +0 -1
- meutils/cmds/README.md +0 -55
- meutils/coding/__init__.py +0 -11
- meutils/coding/find132.py +0 -40
- meutils/db/README.md +0 -51
- meutils/decorators/README.md +0 -17
- meutils/docarray_utils/demo_es.py +0 -34
- meutils/docarray_utils/demo_hnsw.py +0 -55
- meutils/docarray_utils/in_memory.py +0 -38
- meutils/docarray_utils//346/224/271/351/200/240/344/270/213hnsw.py +0 -43
- meutils/io/file.py +0 -20
- meutils/io/img.png +0 -0
- meutils/io/x.yml +0 -1
- meutils/notice/img.png +0 -0
- meutils/notice/todo.md +0 -10
- 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
- meutils/playwright_utils/__test.sh +0 -2
- meutils/playwright_utils/kimi1_cookies.json +0 -1
- meutils/playwright_utils/kimi2_cookies.json +0 -1
- meutils/playwright_utils/kimi_cookies.json +0 -93
- meutils/serving/README.md +0 -1
- meutils/serving/celery/_run.sh +0 -10
- meutils/serving/gui/run.sh +0 -9
- meutils/serving/jina/__demo/client.py +0 -42
- meutils/serving/jina/__demo/flow.svg +0 -1
- meutils/serving/jina/__demo/s.py +0 -34
- meutils/serving/jina/__demo/s2.py +0 -37
- meutils/serving/jina/__demo/server.py +0 -83
- meutils/serving/jina/__demo/test.py +0 -40
- meutils/serving/jina/executors/SentenceEncoder.py +0 -62
- meutils/serving/jina/executors/SentenceEncoder_.py +0 -63
- meutils/serving/jina/executors/__init__.py +0 -46
- meutils/serving/jina/executors/base.py +0 -40
- meutils/serving/jina/nlp_serving/__init__.py +0 -11
- meutils/serving/jina/nlp_serving/word_segmentation.py +0 -40
- meutils/serving/streamlit/conf.yaml +0 -5
- meutils/serving/streamlit/ocr.png +0 -0
- meutils/serving/streamlit/run.sh +0 -17
- meutils/serving/webui/.streamlit/_config.toml +0 -186
- meutils/serving/webui/.streamlit/config.toml +0 -26
- meutils/serving/webui/pages/_1_/345/210/206/350/257/215.py +0 -56
- 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
- meutils/serving/webui/pages/_3_/346/226/207/346/234/254/345/214/271/351/205/215.py +0 -64
- meutils/serving/webui/run.sh +0 -9
- meutils/spark/__init__.py +0 -26
- meutils/tools/monitor.yml +0 -29
- {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/LICENSE +0 -0
- {MeUtils-2024.3.4.13.4.45.dist-info → MeUtils-2025.1.16.17.15.52.dist-info}/top_level.txt +0 -0
- {meutils → examples}/comp_utils/__init__.py +0 -0
- {meutils → examples}/comp_utils/reverse_metric.py +0 -0
- /meutils/{fileparser/README.md → fastapi_utils/exceptions/__init__.py} +0 -0
- /meutils/{fileparser → parsers/fileparser}/PDF/346/212/275/345/217/226.py" +0 -0
- /meutils/{fileparser → parsers/fileparser}/__init__.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/common.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/__init__.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/__main__.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/filetype.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/helpers.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/match.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/__init__.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/application.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/archive.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/audio.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/base.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/document.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/font.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/image.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/isobmff.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/types/video.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/filetype/utils.py +0 -0
- /meutils/{fileparser → parsers/fileparser}/pdf.py +0 -0
- /meutils/{fileparser → parsers/fileparser}//350/241/250/346/240/274/346/212/275/345/217/226.py" +0 -0
@@ -0,0 +1,175 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : utils
|
5
|
+
# @Time : 2024/12/18 11:03
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
import random
|
13
|
+
import base64
|
14
|
+
import time
|
15
|
+
import uuid
|
16
|
+
import secrets
|
17
|
+
import string
|
18
|
+
|
19
|
+
# 常量定义
|
20
|
+
MODEL_NAME = "doubao"
|
21
|
+
DEFAULT_ASSISTANT_ID = "497858"
|
22
|
+
VERSION_CODE = "20800"
|
23
|
+
DEVICE_ID = random.random() * 999999999999999999 + 7000000000000000000
|
24
|
+
WEB_ID = random.random() * 999999999999999999 + 7000000000000000000
|
25
|
+
USER_ID = str(uuid.uuid4()).replace('-', '')
|
26
|
+
MAX_RETRY_COUNT = 3
|
27
|
+
RETRY_DELAY = 5000
|
28
|
+
FILE_MAX_SIZE = 100 * 1024 * 1024
|
29
|
+
|
30
|
+
# 伪装headers
|
31
|
+
FAKE_HEADERS = {
|
32
|
+
"Accept": "*/*",
|
33
|
+
"Accept-Encoding": "gzip, deflate, br, zstd",
|
34
|
+
"Accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
|
35
|
+
"Cache-control": "no-cache",
|
36
|
+
"Last-event-id": "undefined",
|
37
|
+
"Origin": "https://www.doubao.com",
|
38
|
+
"Pragma": "no-cache",
|
39
|
+
"Priority": "u=1, i",
|
40
|
+
"Referer": "https://www.doubao.com",
|
41
|
+
"Sec-Ch-Ua": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
|
42
|
+
"Sec-Ch-Ua-Mobile": "?0",
|
43
|
+
"Sec-Ch-Ua-Platform": '"Windows"',
|
44
|
+
"Sec-Fetch-Dest": "empty",
|
45
|
+
"Sec-Fetch-Mode": "cors",
|
46
|
+
"Sec-Fetch-Site": "same-origin",
|
47
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
async def acquire_token(refresh_token: str) -> str:
|
52
|
+
"""
|
53
|
+
获取缓存中的access_token
|
54
|
+
目前doubao的access_token是固定的,暂无刷新功能
|
55
|
+
|
56
|
+
Args:
|
57
|
+
refresh_token: 用于刷新access_token的refresh_token
|
58
|
+
|
59
|
+
Returns:
|
60
|
+
str: access_token
|
61
|
+
"""
|
62
|
+
return refresh_token
|
63
|
+
|
64
|
+
|
65
|
+
def generate_fake_ms_token() -> str:
|
66
|
+
"""
|
67
|
+
生成伪msToken
|
68
|
+
"""
|
69
|
+
# 生成96字节的随机数据
|
70
|
+
random_bytes = secrets.token_bytes(96)
|
71
|
+
# 转换为base64,并替换特殊字符
|
72
|
+
token = base64.b64encode(random_bytes).decode('utf-8')
|
73
|
+
return token.replace('+', '-').replace('/', '_').rstrip('=')
|
74
|
+
|
75
|
+
|
76
|
+
def generate_random_string(length: int) -> str:
|
77
|
+
"""
|
78
|
+
生成指定长度的随机字符串
|
79
|
+
"""
|
80
|
+
chars = string.ascii_letters + string.digits
|
81
|
+
return ''.join(random.choice(chars) for _ in range(length))
|
82
|
+
|
83
|
+
|
84
|
+
def generate_fake_a_bogus() -> str:
|
85
|
+
"""
|
86
|
+
生成伪a_bogus
|
87
|
+
"""
|
88
|
+
return f"mf-{generate_random_string(34)}-{generate_random_string(6)}"
|
89
|
+
|
90
|
+
|
91
|
+
def generate_params():
|
92
|
+
params = {
|
93
|
+
"aid": "497858",
|
94
|
+
"device_id": int(DEVICE_ID),
|
95
|
+
"device_platform": "web",
|
96
|
+
"language": "zh",
|
97
|
+
"pkg_type": "release_version",
|
98
|
+
"real_aid": "497858",
|
99
|
+
"region": "CN",
|
100
|
+
"samantha_web": "1",
|
101
|
+
"sys_region": "CN",
|
102
|
+
"tea_uuid": int(WEB_ID),
|
103
|
+
"use-olympus-account": "1",
|
104
|
+
"version_code": "20800",
|
105
|
+
"web_id": int(WEB_ID),
|
106
|
+
"msToken": generate_fake_ms_token(),
|
107
|
+
"a_bogus": generate_fake_a_bogus()
|
108
|
+
}
|
109
|
+
|
110
|
+
return params
|
111
|
+
|
112
|
+
|
113
|
+
def generate_cookie(refresh_token: str, ms_token: Optional[str] = None) -> str:
|
114
|
+
"""
|
115
|
+
生成cookie
|
116
|
+
"""
|
117
|
+
ms_token = ms_token or generate_fake_ms_token()
|
118
|
+
|
119
|
+
current_timestamp = int(time.time())
|
120
|
+
cookie_parts = [
|
121
|
+
f"is_staff_user=false",
|
122
|
+
f"store-region=cn-gd",
|
123
|
+
f"store-region-src=uid",
|
124
|
+
f"sid_guard={refresh_token}%7C{current_timestamp}%7C5184000%7CSun%2C+02-Feb-2025+04%3A17%3A20+GMT",
|
125
|
+
f"uid_tt={USER_ID}",
|
126
|
+
f"uid_tt_ss={USER_ID}",
|
127
|
+
f"sid_tt={refresh_token}",
|
128
|
+
f"sessionid={refresh_token}",
|
129
|
+
f"sessionid_ss={refresh_token}",
|
130
|
+
f"msToken={ms_token}",
|
131
|
+
]
|
132
|
+
return "; ".join(cookie_parts)
|
133
|
+
|
134
|
+
|
135
|
+
async def get_upload_token(): # 3600过期
|
136
|
+
"""
|
137
|
+
|
138
|
+
{'code': 0,
|
139
|
+
'data': {'auth': {'access_key_id': 'AKTPYzNkMjJlNTNjMWE1NDJiN2E5MWFkOTYxMWViYzQxYTM',
|
140
|
+
'current_time': '2024-12-18T11:17:22+08:00',
|
141
|
+
'expired_time': '2024-12-18T12:17:22+08:00',
|
142
|
+
'secret_access_key': 'HFFTkEFKf+0DVpUrYy2yMzvgnkxLMU6+qydnGUSaDmd0vSRedpIi0qmeWSVElyOU',
|
143
|
+
'session_token': 'STS2eyJMVEFjY2Vzc0tleUlkIjoiQUtMVFlUZGhPR0ptWVRNNFl6ZG1OR1JoWVRoaE0yWTJPVFl5TW1SbU0yRmhNREEiLCJBY2Nlc3NLZXlJZCI6IkFLVFBZek5rTWpKbE5UTmpNV0UxTkRKaU4yRTVNV0ZrT1RZeE1XVmlZelF4WVRNIiwiU2lnbmVkU2VjcmV0QWNjZXNzS2V5IjoiTC9WZTVSMmt4N3dsY1kvS0E5alp1WVlpSlVFM0ZjdHMzQ2Q5QjJZMVE3NlRnUDVONWViMmpKQkRQMUdyUEtqeXNYNXRKVkJPdExvVjVNOGFyY24wQ2ZtdUZRRWMxMG8xMSs3UHdKdGY0LzQ9IiwiRXhwaXJlZFRpbWUiOjE3MzQ0OTU0NDIsIlBvbGljeVN0cmluZyI6IntcIlN0YXRlbWVudFwiOlt7XCJFZmZlY3RcIjpcIkFsbG93XCIsXCJBY3Rpb25cIjpbXCJJbWFnZVg6QXBwbHlJbWFnZVVwbG9hZFwiLFwiSW1hZ2VYOkNvbW1pdEltYWdlVXBsb2FkXCJdLFwiUmVzb3VyY2VcIjpbXCJ0cm46SW1hZ2VYOio6KjpTZXJ2aWNlSWQvYTlybnMycmw5OFwiXX0se1wiRWZmZWN0XCI6XCJBbGxvd1wiLFwiQWN0aW9uXCI6W1wiUFNNXCJdLFwiUmVzb3VyY2VcIjpbXCJmbG93LmFsaWNlLnJlc291cmNlX2FwaVwiXX1dfSIsIlNpZ25hdHVyZSI6ImI2MGUxNDZkZTU0Njg2NTdlYzVlZmFjZjJlOWNlOWE5YTdhY2UwNTFlZTdkYTJjZTRmNjdiYmRiM2U4MDQ3N2IifQ=='},
|
144
|
+
'service_id': 'a9rns2rl98',
|
145
|
+
'upload_host': 'imagex.bytedanceapi.com',
|
146
|
+
'upload_path_prefix': 'bot-chat-image'},
|
147
|
+
'msg': ''}
|
148
|
+
|
149
|
+
:return:
|
150
|
+
"""
|
151
|
+
cookie = generate_cookie('de2215a7bb8e442774cf388f03fac84c')
|
152
|
+
url = "https://www.doubao.com/alice/upload/auth_token"
|
153
|
+
|
154
|
+
headers = {
|
155
|
+
'Cookie': cookie,
|
156
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
|
157
|
+
}
|
158
|
+
payload = {
|
159
|
+
"scene": "bot_chat",
|
160
|
+
"data_type": "image"
|
161
|
+
}
|
162
|
+
|
163
|
+
async with httpx.AsyncClient(timeout=60) as client:
|
164
|
+
response = await client.post(url, headers=headers, json=payload)
|
165
|
+
response.raise_for_status()
|
166
|
+
|
167
|
+
return response.json()
|
168
|
+
|
169
|
+
|
170
|
+
if __name__ == '__main__':
|
171
|
+
# generate_cookie("")
|
172
|
+
|
173
|
+
# arun(get_upload_token())
|
174
|
+
print(generate_params())
|
175
|
+
# print(get_signing_key('xW9YbDhTlWsXdaN7O2g1lfcyePxf5kJyg/r2mwSZG/iuSmbvVgToO6LVCLmUjVJ3'))
|
@@ -0,0 +1,263 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : kaiyuan
|
5
|
+
# @Time : 2024/12/18 16:03
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
import hmac
|
12
|
+
import zlib
|
13
|
+
import hashlib
|
14
|
+
|
15
|
+
from meutils.pipe import *
|
16
|
+
from meutils.caches.redis_cache import cache
|
17
|
+
|
18
|
+
|
19
|
+
def random_str(n):
|
20
|
+
return ''.join(random.sample('zyxwvutsrqponmlkjihgfedcba0123456789', n))
|
21
|
+
|
22
|
+
|
23
|
+
def hash256(msg):
|
24
|
+
return hashlib.sha256(msg.encode('utf-8')).hexdigest()
|
25
|
+
|
26
|
+
|
27
|
+
def hmac_hash256(key, msg):
|
28
|
+
if type(key) == str:
|
29
|
+
return hmac.new(key.encode('utf-8'), msg.encode('utf-8'), hashlib.sha256)
|
30
|
+
elif type(key) == hmac.HMAC:
|
31
|
+
return hmac.new(key.digest(), msg.encode('utf-8'), hashlib.sha256)
|
32
|
+
|
33
|
+
|
34
|
+
def fileCRC32(file_buffer):
|
35
|
+
return hex(zlib.crc32(file_buffer) & 0xFFFFFFFF)[2:]
|
36
|
+
|
37
|
+
|
38
|
+
def u(params):
|
39
|
+
new_params = sorted(params.items(), key=lambda x: x[0])
|
40
|
+
new_params = [f"{k}={v}" for k, v in new_params]
|
41
|
+
return "&".join(new_params)
|
42
|
+
|
43
|
+
|
44
|
+
class JJRequest:
|
45
|
+
def __init__(self, e, t, api, method="GET", params=None, data=None, serviceName="imagex"):
|
46
|
+
self.t = t
|
47
|
+
self.e = e
|
48
|
+
self.api = api
|
49
|
+
self.method = method
|
50
|
+
self.params = params
|
51
|
+
self.data = data
|
52
|
+
|
53
|
+
self.serviceName = serviceName
|
54
|
+
|
55
|
+
def getAuthorization(self):
|
56
|
+
return f"AWS4-HMAC-SHA256 Credential={self.e['access_key_id']}/{self.t[0:8]}/cn-north-1/{self.serviceName}/aws4_request, SignedHeaders=x-amz-date;x-amz-security-token, Signature={self.signature()}"
|
57
|
+
|
58
|
+
def signature(self):
|
59
|
+
r = self.getSigningKey()
|
60
|
+
return hmac_hash256(r, self.stringToSign()).hexdigest()
|
61
|
+
|
62
|
+
def getSigningKey(self, r="cn-north-1"):
|
63
|
+
n = self.serviceName
|
64
|
+
|
65
|
+
o = hmac_hash256("AWS4" + self.e['secret_access_key'], str(self.t[0:8]))
|
66
|
+
i = hmac_hash256(o, str(r))
|
67
|
+
s = hmac_hash256(i, str(n))
|
68
|
+
return hmac_hash256(s, "aws4_request")
|
69
|
+
|
70
|
+
def stringToSign(self):
|
71
|
+
t = []
|
72
|
+
t.append("AWS4-HMAC-SHA256")
|
73
|
+
t.append(self.t)
|
74
|
+
t.append(self.credentialString())
|
75
|
+
t.append(hash256(self.canonicalString()))
|
76
|
+
return "\n".join(t)
|
77
|
+
|
78
|
+
def credentialString(self, region="cn-north-1"):
|
79
|
+
return "/".join([self.t[0:8], region, self.serviceName, "aws4_request"])
|
80
|
+
|
81
|
+
def canonicalString(self):
|
82
|
+
e = []
|
83
|
+
e.append(self.method)
|
84
|
+
e.append("/")
|
85
|
+
e.append(u(self.params))
|
86
|
+
e.append(self.canonicalHeaders())
|
87
|
+
e.append(self.signedHeaders())
|
88
|
+
e.append(self.hexEncodedBodyHash())
|
89
|
+
return "\n".join(e)
|
90
|
+
|
91
|
+
def canonicalHeaders(self):
|
92
|
+
return f"x-amz-date:{self.t}\nx-amz-security-token:{self.e['session_token']}\n"
|
93
|
+
|
94
|
+
def signedHeaders(self):
|
95
|
+
return "x-amz-date;x-amz-security-token"
|
96
|
+
|
97
|
+
def hexEncodedBodyHash(self):
|
98
|
+
return hash256("")
|
99
|
+
|
100
|
+
|
101
|
+
@cache(ttl=15 * 60)
|
102
|
+
def upload(image: bytes, upload_token: dict): # oss 跨账号不知道是否可以使用
|
103
|
+
# e = auth = upload_token['data']['auth'] # 豆包
|
104
|
+
data = upload_token['data']
|
105
|
+
service_id = data.get('service_id', '3jr8j4ixpe') # 即梦 3jr8j4ixpe 豆包 a9rns2rl98
|
106
|
+
|
107
|
+
if 'auth' in data:
|
108
|
+
data = data['auth']
|
109
|
+
|
110
|
+
session_token = data['session_token']
|
111
|
+
|
112
|
+
t = time.strftime("%Y%m%dT%H%M%SZ", time.gmtime())
|
113
|
+
|
114
|
+
params = {
|
115
|
+
"Action": "ApplyImageUpload",
|
116
|
+
"Version": "2018-08-01",
|
117
|
+
"ServiceId": service_id,
|
118
|
+
"s": random_str(10),
|
119
|
+
|
120
|
+
"FileExtension": ".png", #####
|
121
|
+
"FileSize": len(image),
|
122
|
+
}
|
123
|
+
|
124
|
+
r = JJRequest(data, t, "https://imagex.bytedanceapi.com/", method="GET", params=params)
|
125
|
+
headers = {
|
126
|
+
'authorization': r.getAuthorization(),
|
127
|
+
'x-amz-date': t,
|
128
|
+
'x-amz-security-token': session_token,
|
129
|
+
}
|
130
|
+
# logger.debug(headers)
|
131
|
+
response = requests.get(r.api, params=params, headers=headers)
|
132
|
+
response.raise_for_status()
|
133
|
+
logger.debug(response.status_code)
|
134
|
+
response = response.json()
|
135
|
+
|
136
|
+
logger.debug(bjson(response))
|
137
|
+
if "Result" not in response:
|
138
|
+
return
|
139
|
+
|
140
|
+
store_info = response['Result']['UploadAddress']['StoreInfos'][0]
|
141
|
+
logger.debug(bjson(store_info))
|
142
|
+
|
143
|
+
oss_uri = store_info['StoreUri']
|
144
|
+
oss_token = store_info['Auth']
|
145
|
+
|
146
|
+
headers = {
|
147
|
+
"authorization": oss_token,
|
148
|
+
"content-length": str(len(image)),
|
149
|
+
"content-Type": "image/jpeg",
|
150
|
+
"content-crc32": fileCRC32(image),
|
151
|
+
}
|
152
|
+
|
153
|
+
# oss_url = f"https://{resp['Result']['UploadAddress']['UploadHosts'][0]}/{oss_uri}"
|
154
|
+
|
155
|
+
# image_resp = requests.put( # post
|
156
|
+
# oss_url,
|
157
|
+
# headers=headers,
|
158
|
+
# data=image,
|
159
|
+
# )
|
160
|
+
# logger.debug(image_resp.json())
|
161
|
+
|
162
|
+
# return get_url(StoreUri)
|
163
|
+
|
164
|
+
# upload_url = f"https://tos-hl-x.snssdk.com/upload/v1/{oss_uri}"
|
165
|
+
upload_url = f"https://{response['Result']['UploadAddress']['UploadHosts'][0]}/upload/v1/{oss_uri}"
|
166
|
+
|
167
|
+
response = requests.post(upload_url, headers=headers, data=image)
|
168
|
+
response.raise_for_status()
|
169
|
+
response = response.json()
|
170
|
+
|
171
|
+
logger.debug(response)
|
172
|
+
|
173
|
+
return oss_uri
|
174
|
+
|
175
|
+
|
176
|
+
@cache(ttl=15 * 60)
|
177
|
+
def upload_for_vod(image: bytes, upload_token: dict): # oss 跨账号不知道是否可以使用
|
178
|
+
# e = auth = upload_token['data']['auth'] # 豆包
|
179
|
+
data = upload_token['data']
|
180
|
+
service_id = data.get('service_id', '3jr8j4ixpe') # 即梦 3jr8j4ixpe 豆包 a9rns2rl98
|
181
|
+
|
182
|
+
if 'auth' in data:
|
183
|
+
data = data['auth']
|
184
|
+
|
185
|
+
session_token = data['session_token']
|
186
|
+
|
187
|
+
t = time.strftime("%Y%m%dT%H%M%SZ", time.gmtime())
|
188
|
+
|
189
|
+
params = {
|
190
|
+
"Action": "ApplyUploadInner",
|
191
|
+
"Version": "2020-11-19",
|
192
|
+
# "ServiceId": service_id,
|
193
|
+
"SpaceName": "artist_op",
|
194
|
+
|
195
|
+
"s": random_str(10),
|
196
|
+
|
197
|
+
"FileType": "video",
|
198
|
+
"FileSize": len(image),
|
199
|
+
|
200
|
+
}
|
201
|
+
|
202
|
+
r = JJRequest(data, t, "https://vod.bytedanceapi.com/", method="GET", params=params, serviceName="vod")
|
203
|
+
headers = {
|
204
|
+
'authorization': r.getAuthorization(),
|
205
|
+
'x-amz-date': t,
|
206
|
+
'x-amz-security-token': session_token,
|
207
|
+
}
|
208
|
+
# logger.debug(headers)
|
209
|
+
response = requests.get(r.api, params=params, headers=headers)
|
210
|
+
response.raise_for_status()
|
211
|
+
logger.debug(response.status_code)
|
212
|
+
response = response.json()
|
213
|
+
|
214
|
+
logger.debug(bjson(response))
|
215
|
+
if "Result" not in response:
|
216
|
+
return
|
217
|
+
|
218
|
+
upload_node = response['Result']['InnerUploadAddress']['UploadNodes'][0]
|
219
|
+
store_info = upload_node['StoreInfos'][0]
|
220
|
+
logger.debug(bjson(store_info))
|
221
|
+
|
222
|
+
vid = upload_node['Vid']
|
223
|
+
upload_host = upload_node['UploadHost']
|
224
|
+
|
225
|
+
oss_uri = store_info['StoreUri']
|
226
|
+
oss_token = store_info['Auth']
|
227
|
+
|
228
|
+
headers = {
|
229
|
+
"authorization": oss_token,
|
230
|
+
"content-length": str(len(image)),
|
231
|
+
"content-Type": "image/jpeg",
|
232
|
+
"content-crc32": fileCRC32(image),
|
233
|
+
}
|
234
|
+
|
235
|
+
# upload_url = f"https://tos-hl-x.snssdk.com/upload/v1/{oss_uri}"
|
236
|
+
upload_url = f"https://{upload_host}/upload/v1/{oss_uri}"
|
237
|
+
|
238
|
+
response = requests.post(upload_url, headers=headers, data=image)
|
239
|
+
response.raise_for_status()
|
240
|
+
response = response.json()
|
241
|
+
|
242
|
+
logger.debug(response)
|
243
|
+
|
244
|
+
return oss_uri
|
245
|
+
|
246
|
+
|
247
|
+
if __name__ == "__main__":
|
248
|
+
from meutils.apis.jimeng.common import get_upload_token
|
249
|
+
|
250
|
+
# 豆包
|
251
|
+
token = "de2215a7bb8e442774cf388f03fac84c"
|
252
|
+
|
253
|
+
# jimeng
|
254
|
+
token = "eb4d120829cfd3ee957943f63d6152ed"
|
255
|
+
#
|
256
|
+
upload_token = arun(get_upload_token(token))
|
257
|
+
|
258
|
+
#
|
259
|
+
with open("11.jpg", "rb") as f:
|
260
|
+
file = image = f.read()
|
261
|
+
|
262
|
+
# upload(image, upload_token)
|
263
|
+
print(upload_for_vod(image, upload_token))
|
@@ -0,0 +1,140 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : images
|
5
|
+
# @Time : 2024/12/16 17:46
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
|
13
|
+
from meutils.schemas.jimeng_types import BASE_URL, MODELS_MAP, FEISHU_URL
|
14
|
+
from meutils.schemas.image_types import ImageRequest
|
15
|
+
from meutils.schemas.task_types import TaskResponse
|
16
|
+
from meutils.apis.jimeng.common import create_draft_content, get_headers, check_token
|
17
|
+
from meutils.config_utils.lark_utils import get_next_token_for_polling
|
18
|
+
|
19
|
+
from fake_useragent import UserAgent
|
20
|
+
|
21
|
+
ua = UserAgent()
|
22
|
+
|
23
|
+
|
24
|
+
async def create_task(request: ImageRequest, token: Optional[str] = None):
|
25
|
+
token = token or await get_next_token_for_polling(FEISHU_URL, check_token)
|
26
|
+
|
27
|
+
url = "/mweb/v1/aigc_draft/generate"
|
28
|
+
|
29
|
+
headers = get_headers(url, token)
|
30
|
+
|
31
|
+
if "http" in request.prompt: # 图生
|
32
|
+
request.model = "high_aes_general_v20_L:general_v2.0_L"
|
33
|
+
|
34
|
+
draft_content = await create_draft_content(request, token)
|
35
|
+
payload = {
|
36
|
+
"extend": {
|
37
|
+
"root_model": request.model,
|
38
|
+
"template_id": ""
|
39
|
+
},
|
40
|
+
"submit_id": str(uuid.uuid4()),
|
41
|
+
"metrics_extra": "{\"templateId\":\"\",\"generateCount\":1,\"promptSource\":\"custom\",\"templateSource\":\"\",\"lastRequestId\":\"\",\"originRequestId\":\"\"}",
|
42
|
+
"draft_content": json.dumps(draft_content),
|
43
|
+
"http_common_info": {
|
44
|
+
"aid": 513695
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
logger.debug(bjson(payload))
|
49
|
+
|
50
|
+
async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=60) as client:
|
51
|
+
response = await client.post(url, json=payload)
|
52
|
+
response.raise_for_status()
|
53
|
+
data = response.json()
|
54
|
+
logger.debug(bjson(data))
|
55
|
+
|
56
|
+
task_id = data.get("data", {}).get("aigc_data", {}).get("history_record_id")
|
57
|
+
return TaskResponse(task_id=task_id, system_fingerprint=token)
|
58
|
+
|
59
|
+
|
60
|
+
async def get_task(task_id, token):
|
61
|
+
url = "/mweb/v1/get_history_by_ids"
|
62
|
+
headers = get_headers(url, token)
|
63
|
+
payload = {
|
64
|
+
"history_ids": [
|
65
|
+
task_id
|
66
|
+
]
|
67
|
+
}
|
68
|
+
|
69
|
+
async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=60) as client:
|
70
|
+
response = await client.post(url, json=payload)
|
71
|
+
response.raise_for_status()
|
72
|
+
data = response.json()
|
73
|
+
logger.debug(bjson(data))
|
74
|
+
# {'ret': '1015', 'errmsg': 'login error', 'systime': '1734524280', 'logid': '20241218201800AC3267447B287E9E6C46', 'data': None}
|
75
|
+
task_info = (data.get("data") or {}).get(task_id, {})
|
76
|
+
item_list = task_info.get("item_list") # "status": 30,
|
77
|
+
|
78
|
+
status_code = task_info.get("status")
|
79
|
+
logger.debug(f"status: {status_code}")
|
80
|
+
|
81
|
+
"""
|
82
|
+
"status": 30, # 内容审核
|
83
|
+
"status": 50,
|
84
|
+
"""
|
85
|
+
|
86
|
+
image_data = map(lambda x: x.get("image", {}).get("large_images"), item_list)
|
87
|
+
|
88
|
+
task_data = sum(image_data, []) | xmap_(lambda x: {"url": x.get("image_url")})
|
89
|
+
|
90
|
+
return TaskResponse(
|
91
|
+
task_id=task_id,
|
92
|
+
data=task_data,
|
93
|
+
message=data.get("errmsg") if status_code!=30 else "触发内容审核451",
|
94
|
+
status="success" if item_list else 'processing',
|
95
|
+
code=status_code,
|
96
|
+
)
|
97
|
+
|
98
|
+
|
99
|
+
async def generate(request: ImageRequest):
|
100
|
+
task_response = await create_task(request)
|
101
|
+
for i in range(1, 10):
|
102
|
+
await asyncio.sleep(max(10 / i, 1))
|
103
|
+
response = await get_task(task_response.task_id, task_response.system_fingerprint)
|
104
|
+
logger.debug(response)
|
105
|
+
if data := response.data:
|
106
|
+
return {"data": data}
|
107
|
+
|
108
|
+
|
109
|
+
if __name__ == '__main__':
|
110
|
+
token = "eb4d120829cfd3ee957943f63d6152ed"
|
111
|
+
|
112
|
+
# request = ImageRequest(prompt="做一个圣诞节的海报", size="1024x1024")
|
113
|
+
# request = ImageRequest(prompt="https://oss.ffire.cc/files/kling_watermark.png 让她带上墨镜", size="1024x1024")
|
114
|
+
|
115
|
+
# task = arun(create_task(request))
|
116
|
+
|
117
|
+
# task_id = "10040025470722"
|
118
|
+
|
119
|
+
# task_id = "10053536381698"
|
120
|
+
|
121
|
+
# task_id = "10079694738434"
|
122
|
+
|
123
|
+
# task_id = "10080831230210" # 图片编辑
|
124
|
+
|
125
|
+
# task_id = "10082971040514"
|
126
|
+
#
|
127
|
+
# arun(get_task(task_id, token))
|
128
|
+
|
129
|
+
# arun(get_task(task.task_id, task.system_fingerprint))
|
130
|
+
|
131
|
+
task_id = "10184295086338"
|
132
|
+
system_fingerprint = "eb4d120829cfd3ee957943f63d6152ed"
|
133
|
+
|
134
|
+
t1 = ("10184295086338", "eb4d120829cfd3ee957943f63d6152ed")
|
135
|
+
t2 = ("10184877310722", "dcf7bbc31faed9740b0bf748cd4d2c74")
|
136
|
+
t3 = ("10186352959490", "eb4d120829cfd3ee957943f63d6152ed")
|
137
|
+
|
138
|
+
arun(get_task(*t3))
|
139
|
+
|
140
|
+
# arun(generate(ImageRequest(prompt="做一个圣诞节的海报")))
|
meutils/apis/jina.py
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Project : AI. @by PyCharm
|
4
|
+
# @File : jina
|
5
|
+
# @Time : 2024/7/8 08:44
|
6
|
+
# @Author : betterme
|
7
|
+
# @WeChat : meutils
|
8
|
+
# @Software : PyCharm
|
9
|
+
# @Description :
|
10
|
+
|
11
|
+
from meutils.pipe import *
|
12
|
+
from meutils.schemas.jina_types import BASE_URL, RerankerRequest
|
13
|
+
|
14
|
+
|
15
|
+
@alru_cache()
|
16
|
+
async def rerank(request: RerankerRequest, api_key: Optional[str] = None):
|
17
|
+
# logger.debug("没走缓存")
|
18
|
+
|
19
|
+
payload = request.model_dump()
|
20
|
+
|
21
|
+
api_key = api_key or os.getenv("JINA_API_KEY")
|
22
|
+
headers = {
|
23
|
+
"authorization": f"Bearer {api_key}"
|
24
|
+
}
|
25
|
+
async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=100) as client:
|
26
|
+
response = await client.post("/rerank", json=payload)
|
27
|
+
# logger.debug(response.text)
|
28
|
+
|
29
|
+
return response.is_success and response.json()
|
30
|
+
|
31
|
+
|
32
|
+
if __name__ == '__main__':
|
33
|
+
payload = {
|
34
|
+
"model": "jina-reranker-v2-base-multilingual",
|
35
|
+
"query": "Organic skincare products for sensitive skin",
|
36
|
+
"top_n": 3,
|
37
|
+
"documents": [
|
38
|
+
"Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
|
39
|
+
"New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
|
40
|
+
"Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
|
41
|
+
"Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
|
42
|
+
"Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
|
43
|
+
"Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
|
44
|
+
"针对敏感肌专门设计的天然有机护肤产品:体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计,温和滋润,保护您的肌肤不受刺激。让您的肌肤告别不适,迎来健康光彩。",
|
45
|
+
"新的化妆趋势注重鲜艳的颜色和创新的技巧:进入化妆艺术的新纪元,本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光,每一款妆容都能让您脱颖而出,展现独特魅力。",
|
46
|
+
"敏感肌のために特別に設計された天然有機スキンケア製品: アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
|
47
|
+
"新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています: 今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
|
48
|
+
]
|
49
|
+
}
|
50
|
+
|
51
|
+
with timer():
|
52
|
+
print(arun(rerank(RerankerRequest(**payload))))
|
53
|
+
|
54
|
+
with timer():
|
55
|
+
print(arun(rerank(RerankerRequest(**payload))))
|