MeUtils 2024.12.26.22.14.1__py3-none-any.whl → 2025.1.3.14.11.44__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 (30) hide show
  1. {MeUtils-2024.12.26.22.14.1.dist-info → MeUtils-2025.1.3.14.11.44.dist-info}/METADATA +26 -26
  2. {MeUtils-2024.12.26.22.14.1.dist-info → MeUtils-2025.1.3.14.11.44.dist-info}/RECORD +30 -23
  3. examples/_openaisdk/openai_aiplus.py +54 -0
  4. examples/_openaisdk/openai_chatfire.py +4 -1
  5. examples/_openaisdk/openai_deepinfra.py +55 -0
  6. examples/_openaisdk/openai_gitee.py +33 -0
  7. examples/_openaisdk/openai_qwen.py +58 -0
  8. examples/_openaisdk/openai_zhipu.py +2 -0
  9. examples/_openaisdk/zhipu_/346/231/272/350/203/275/344/275/223.py +46 -0
  10. meutils/_utils.py +15 -1
  11. meutils/apis/images/recraft.py +2 -3
  12. meutils/apis/jimeng/images.py +24 -4
  13. meutils/apis/vidu/vidu_video.py +1 -1
  14. meutils/data/VERSION +1 -1
  15. meutils/data/oneapi/NOTICE.md +77 -38
  16. meutils/init/evn.py +1 -1
  17. meutils/llm/completions/rag/fire.py +42 -12
  18. meutils/llm/openai_utils/common.py +1 -1
  19. meutils/request_utils/ark.py +47 -0
  20. meutils/{jwt_utils → request_utils/jwt_utils}/common.py +1 -0
  21. meutils/request_utils/volc.py +160 -0
  22. meutils/schemas/image_types.py +2 -0
  23. meutils/schemas/kuaishou_types.py +23 -6
  24. meutils/schemas/oneapi/common.py +40 -14
  25. meutils/schemas/openai_types.py +17 -6
  26. {MeUtils-2024.12.26.22.14.1.dist-info → MeUtils-2025.1.3.14.11.44.dist-info}/LICENSE +0 -0
  27. {MeUtils-2024.12.26.22.14.1.dist-info → MeUtils-2025.1.3.14.11.44.dist-info}/WHEEL +0 -0
  28. {MeUtils-2024.12.26.22.14.1.dist-info → MeUtils-2025.1.3.14.11.44.dist-info}/entry_points.txt +0 -0
  29. {MeUtils-2024.12.26.22.14.1.dist-info → MeUtils-2025.1.3.14.11.44.dist-info}/top_level.txt +0 -0
  30. /meutils/{jwt_utils → request_utils/jwt_utils}/__init__.py +0 -0
@@ -218,7 +218,7 @@ if __name__ == '__main__':
218
218
  # # token = "_ga=GA1.1.2058758439.1724312077; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjgzNTAzODAsImlhdCI6MTcyNzA1NDM4MCwiaXNzIjoiaWFtIiwic3ViIjoiMjQyMDA2NTAzNjA5MTgzOSJ9.PkjQqjYB56vYetYwmlagnWn_6bSCwoxCjI7BjfelBOU; Shunt=; sensorsdata2015jssdkcross=dfm-enc-%7B%22Va28a6y8_aV%22%3A%22sSsAAnHAInAGEtIG%22%2C%22gae28_aV%22%3A%22EGEuAnststSEirt-ARSAigSVHIiHVs-EtHsHnIR-sARInAA-EGEuAnststHsIti%22%2C%22OemO2%22%3A%7B%22%24ki8r28_8eiggay_2mbeyr_8cOr%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24ki8r28_2rieyz_lrcMmeV%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24ki8r28_ergreere%22%3A%22%22%7D%2C%22aVr68a8ar2%22%3A%22rc3liZ7ku67OV5kgPsGCiskkDskl3qmawFlJPq0swqfcpXNJPZKSBF0IQXLzWq7lQFQzQZNcBF1SQF3EQqwIBF3MQhwswX08wFlJPq0swqfcpXKcwhzz3aMax9klWZHAiD7HDsJCWskbDskl3qmawqNcwX0sQF0hQq0HwFfhp4xG%22%2C%22za28mec_kmfa6_aV%22%3A%7B%226ior%22%3A%22%24aVr68a8c_kmfa6_aV%22%2C%22Cikbr%22%3A%22sSsAAnHAInAGEtIG%22%7D%7D; _ga_ZJBV7VYP55=GS1.1.1727080335.38.1.1727080510.0.0.0"
219
219
  # token = "JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjgzNDkyNzQsImlhdCI6MTcyNzA1MzI3NCwiaXNzIjoiaWFtIiwic3ViIjoiMjQyMDg5NjA4MTIwNTkwNyJ9.MRXmSr48PifQgRN1-yTTu8d7Sq1An4OS7G5WoYpJ_PU"
220
220
 
221
- token = "_ga=GA1.1.2058758439.1724312077; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyMjA4MzgsImlhdCI6MTczNDkyNDgzOCwiaXNzIjoiaWFtIiwic3ViIjoiMjQxODMzMTI4MjA0NTcyOCJ9.ecQl8lcH5mjueG48aZxmqUgxzffHx6l5L3QEve6Z_u0; Shunt=; sensorsdata2015jssdkcross=dfm-enc-%7B%22Va28a6y8_aV%22%3A%22sSEtIIEstsASHRst%22%2C%22gae28_aV%22%3A%22EGEuAnststSEirt-ARSAigSVHIiHVs-EtHsHnIR-sARInAA-EGEuAnststHsIti%22%2C%22OemO2%22%3A%7B%22%24ki8r28_8eiggay_2mbeyr_8cOr%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24ki8r28_2rieyz_lrcMmeV%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24ki8r28_ergreere%22%3A%22%22%7D%2C%22aVr68a8ar2%22%3A%22rc3liZ7ku67OV5kgPsGCiskkDskl3qmawFlJPq0swqfcpXNJPZKSBF0IQXLzWq7lQFQzQZNcBF1SQF3EQqwIBF3MQhwswX08wFlJPq0swqfcpXKcwhzz3aMax9klWZHAiD7HDsJCWskbDskl3qmawqNJpXwhwF3Swq0AQFycpvxG%22%2C%22za28mec_kmfa6_aV%22%3A%7B%226ior%22%3A%22%24aVr68a8c_kmfa6_aV%22%2C%22Cikbr%22%3A%22sSEtIIEstsASHRst%22%7D%7D; _ga_ZJBV7VYP55=GS1.1.1734923743.137.1.1734924845.54.0.0"
221
+ token = "_ga=GA1.1.1191408146.1725443726; Shunt=; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzY0NzgzODIsImlhdCI6MTczNTE4MjM4MiwiaXNzIjoiaWFtIiwic3ViIjoiMjU3NTg1MzI5MDUyNzYwNiJ9.AJBuQH0B9aQ2znnczYoqBw9YvHkLh0uZF0QQx5xdxrc; sensorsdata2015jssdkcross=dfm-enc-%7B%22Va28a6y8_aV%22%3A%22sHRHtHIsGAHsRnAn%22%2C%22gae28_aV%22%3A%22EGEuyRHVigIEtAG-AGRuSsHrVAGRuS-EtHsHnIR-sARInAA-EGEuyRHVigSEuIR%22%2C%22OemO2%22%3A%7B%22%24ki8r28_8eiggay_2mbeyr_8cOr%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24ki8r28_2rieyz_lrcMmeV%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24ki8r28_ergreere%22%3A%22z88O2%3A%2F%2Fiyymb682.fmmfkr.ymo%2F%22%7D%2C%22aVr68a8ar2%22%3A%22rc3liZ7ku67OV5kgPsGCiskkDskl3qmawFlJPowIQZ7zWqwJpX0HBF0HQs3AwqdkWX0HQs3ABF1SQF3EQqwIBF3MQhwswX08wFlJPowIQZ7zWqNJPqwI3aMax9klWZHAiD7HDsJCWskbDskl3qmawqKIQFfEwh3HwXKcQhPMQaxG%22%2C%22za28mec_kmfa6_aV%22%3A%7B%226ior%22%3A%22%24aVr68a8c_kmfa6_aV%22%2C%22Cikbr%22%3A%22sHRHtHIsGAHsRnAn%22%7D%7D; _ga_ZJBV7VYP55=GS1.1.1735182278.4.1.1735182405.26.0.0"
222
222
  arun(check_token(token))
223
223
  #
224
224
  # FEISHU_URL = "https://xchatllm.feishu.cn/sheets/GYCHsvI4qhnDPNtI4VPcdw2knEd?sheet=rxldsA"
meutils/data/VERSION CHANGED
@@ -1 +1 @@
1
- 2024.12.26.22.14.01
1
+ 2025.01.03.14.11.44
@@ -15,52 +15,79 @@
15
15
  - 提供图片编辑服务,变清晰、去水印、抠图等等
16
16
  - 提供文档智能服务,ocr/pdf-to-markdown/url-to-markdown等等
17
17
  - 提供对象存储服务
18
-
18
+
19
19
  - 账号服务(市面上有的都可以)
20
- - gpt-plus/claude-pro
21
- - api-key
20
+ - gpt-plus/claude-pro
21
+ - api-key
22
22
 
23
23
  - 个性化服务
24
- - 定制同款api聚合站点,一键对接货源
25
- - 定制企业智能体,类似gpt-4-all/kimi
26
- - 定制知识库智能问答(RAG)
27
- - 定制AI类网站/小程序等等
28
- - 承接数据标注/数据跑批任务
29
- - 承接大模型微调,定制化大模型(可端到端)
30
- - 承接其他项目,算法模型等等
24
+ - 定制同款api聚合站点,一键对接货源
25
+ - 定制企业智能体,类似gpt-4-all/kimi
26
+ - 定制知识库智能问答(RAG)
27
+ - 定制AI类网站/小程序等等
28
+ - 承接数据标注/数据跑批任务
29
+ - 承接大模型微调,定制化大模型(可端到端)
30
+ - 承接其他项目,算法模型等等
31
31
 
32
32
  </details>
33
33
 
34
+ <details markdown="1">
35
+ <summary><b>预祝大家新年快乐🎁元旦礼物☺</b></summary>
36
+
37
+ - 联系企微客服
38
+ - 充值100-200 增送5%
39
+ - 充值200-500 增送10%
40
+ - 充值500-1000 增送15%
41
+ - 充值1000-2000 增送20%
42
+
43
+ </details>
44
+
45
+ ## 2024-12-31
46
+
47
+ - 上线新模型
48
+ - `glm-zero/glm-zero-preview`:GLM-Zero-Preview 专注于增强模型推理能力,擅长处理数理逻辑、代码和需要深度推理的复杂问题。同基座模型相比,GLM-Zero-Preview
49
+ 在不显著降低通用任务能力的情况下,在专家任务能力方面表现大幅提升。其在 AIME 2024、MATH500 和 LiveCodeBench 评测中,效果与
50
+ OpenAI-o1-Preview 相当。
51
+ - 兼容SparkAI客户端,文件问答&图片问答:baseurl改为`https://api.chatfire.cn/sparkai/v1`
52
+ ![](https://sfile.chatglm.cn/chatglm4/e5b99a34-f859-4880-a0ea-a9c6dbc8a60f.png)
53
+
54
+ ## 2024-12-27
55
+
56
+ - 上线新模型
57
+ - deepseek-v3
58
+ - deepseek-r1:deepseek-v3的思考模型
59
+ - deepseek-search:deepseek-v3的联网模型
60
+
34
61
  ## 2024-12-24
62
+
35
63
  - 上线新模型
36
- - doubao-pro-256k:相比Doubao-pro-128k/240628,长文任务效果显著提升10%以上,要点提取、字数遵循、多轮对话上文记忆等能力大幅提升
37
- - [qvq-72b-preview](https://mp.weixin.qq.com/s/WzL7tbFUZOgE2IFMeHT-sQ):Qwen开源视觉推理模型QVQ,更睿智地看世界!
64
+ - doubao-pro-256k:相比Doubao-pro-128k/240628,长文任务效果显著提升10%以上,要点提取、字数遵循、多轮对话上文记忆等能力大幅提升
65
+ - [qvq-72b-preview](https://mp.weixin.qq.com/s/WzL7tbFUZOgE2IFMeHT-sQ):Qwen开源视觉推理模型QVQ,更睿智地看世界!
38
66
 
39
67
  - 增加gemini-2.0配额,支持多模型,默认分组可用
40
68
  - "gemini-2.0-flash"
41
69
  - "gemini-2.0-flash-exp"
42
70
 
43
-
44
71
  ## 2024-12-20
72
+
45
73
  - 修复SunoV4无水印版本
46
- - [异步任务接口文档](https://api.chatfire.cn/docs/api-246593467)
74
+ - [异步任务接口文档](https://api.chatfire.cn/docs/api-246593467)
47
75
  - [增加视频解析模型](https://api.chatfire.cn/docs/api-246688638)
48
76
  - 增加高并发mj-fast
49
77
 
50
78
  ## 2024-12-19
79
+
51
80
  - 新增生图模型 SeedEdit(文生图&图生图/图片编辑): 一句话编辑你的世界:字节跳动推出革命性图片编辑工具SeedEdit
52
- - [Chat模式接口文档](https://api.chatfire.cn/docs/api-214415540)
53
- - [Images接口文档](https://api.chatfire.cn/docs/api-246137616)
54
- - [异步任务接口文档](https://api.chatfire.cn/docs/api-246120232)
81
+ - [Chat模式接口文档](https://api.chatfire.cn/docs/api-214415540)
82
+ - [Images接口文档](https://api.chatfire.cn/docs/api-246137616)
83
+ - [异步任务接口文档](https://api.chatfire.cn/docs/api-246120232)
55
84
  - 新增视觉模型
56
- - deepseek-ai/deepseek-vl2
57
- - doubao-vision-pro-32k
58
- - doubao-vision-lite-32k
85
+ - deepseek-ai/deepseek-vl2
86
+ - doubao-vision-pro-32k
87
+ - doubao-vision-lite-32k
59
88
  - 新增视频模型 Sora
60
- - Chat模式:`sora-1:1-480p-5s`
61
- - 异步任务接口在路上
62
-
63
-
89
+ - Chat模式:`sora-1:1-480p-5s`
90
+ - 异步任务接口在路上
64
91
 
65
92
  ---
66
93
 
@@ -68,34 +95,46 @@
68
95
  <summary><b>历史更新</b></summary>
69
96
 
70
97
  ## 2024-12-13
98
+
71
99
  - 新增模型 混元视频(支持高并发,非逆向可商用,限时特价1毛)[接口文档](https://api.chatfire.cn/docs/api-244309840)
72
- HunyuanVideo 是腾讯推出的开源视频生成基础模型,拥有超过 130 亿参数,是目前最大的开源视频生成模型。该模型采用统一的图像和视频生成架构,集成了数据整理、图像-视频联合模型训练和高效基础设施等关键技术。模型使用多模态大语言模型作为文本编码器,通过 3D VAE 进行空间-时间压缩,并提供提示词重写功能。根据专业人工评估结果,HunyuanVideo 在文本对齐、运动质量和视觉质量等方面的表现优于现有最先进的模型
100
+ HunyuanVideo 是腾讯推出的开源视频生成基础模型,拥有超过 130
101
+ 亿参数,是目前最大的开源视频生成模型。该模型采用统一的图像和视频生成架构,集成了数据整理、图像-视频联合模型训练和高效基础设施等关键技术。模型使用多模态大语言模型作为文本编码器,通过
102
+ 3D VAE 进行空间-时间压缩,并提供提示词重写功能。根据专业人工评估结果,HunyuanVideo 在文本对齐、运动质量和视觉质量等方面的表现优于现有最先进的模型
73
103
 
74
104
  ## 2024-12-09
105
+
75
106
  - 新增模型
76
- - meta-llama/Llama-3.3-70B-Instruct: Llama 3.3 是 Llama 系列最先进的多语言开源大型语言模型,以极低成本体验媲美 405B 模型的性能。基于 Transformer 结构,并通过监督微调(SFT)和人类反馈强化学习(RLHF)提升有用性和安全性。其指令调优版本专为多语言对话优化,在多项行业基准上表现优于众多开源和封闭聊天模型。知识截止日期为 2023 年 12 月。
77
- - jimeng-v2.1:豆包画图,支持即梦超强图像生成能力,兼容chat/dalle-image调用方式。
78
- - 海螺最新的I2V-01-live图生视频模型:特别针对二次元图生视频效果,进行了优化,动作流畅又生动,让2D二次元角色像复活一样。
107
+ - meta-llama/Llama-3.3-70B-Instruct: Llama 3.3 是 Llama 系列最先进的多语言开源大型语言模型,以极低成本体验媲美 405B
108
+ 模型的性能。基于 Transformer
109
+ 结构,并通过监督微调(SFT)和人类反馈强化学习(RLHF)提升有用性和安全性。其指令调优版本专为多语言对话优化,在多项行业基准上表现优于众多开源和封闭聊天模型。知识截止日期为
110
+ 2023 年 12 月。
111
+ - jimeng-v2.1:豆包画图,支持即梦超强图像生成能力,兼容chat/dalle-image调用方式。
112
+ - 海螺最新的I2V-01-live图生视频模型:特别针对二次元图生视频效果,进行了优化,动作流畅又生动,让2D二次元角色像复活一样。
79
113
 
80
114
  ## 2024-12-06
115
+
81
116
  - 新增模型
82
- - o1-plus: (官网 plus 版本 `逆向工程`,有思考过程显示)o1 是OpenAI针对复杂任务的新推理模型,该任务需要广泛的常识。该模型具有 200k 上下文,目前全球最强模型,支持图片识别
83
- - o1-pro: (官网 200刀 plus 版本 `逆向工程`,有思考过程显示)o1-pro 是OpenAI针对复杂任务的新推理模型,该任务需要广泛的常识。该模型具有 200k 上下文,目前全球最强模型,支持图片识别
117
+ - o1-plus: (官网 plus 版本 `逆向工程`,有思考过程显示)o1 是OpenAI针对复杂任务的新推理模型,该任务需要广泛的常识。该模型具有
118
+ 200k 上下文,目前全球最强模型,支持图片识别
119
+ - o1-pro: (官网 200刀 plus 版本 `逆向工程`,有思考过程显示)o1-pro 是OpenAI针对复杂任务的新推理模型,该任务需要广泛的常识。该模型具有
120
+ 200k 上下文,目前全球最强模型,支持图片识别
84
121
 
85
122
  ## 2024-12-05
123
+
86
124
  - 新增模型gpt-4-plus/gpt-4o-plus按倍率计算
87
125
  > OpenAI-plus会员 逆向工程
88
-
126
+
89
127
  ## 2024-11-29
90
- - 新增推理模型
91
- - Qwen/QwQ-32B-Preview
92
- > 强大的数学问题解决能力,在AIME、MATH-500数学评测上,超过了OpenAI o1-preview优秀的编码能力,LiveCodeBench接近OpenAI o1-preview
93
128
 
94
- ## 2024-11-25
95
- - 新增虚拟换衣接口
96
- - [可灵官方api格式](https://api.chatfire.cn/docs/api-237182295) 0.8/次
97
- - [老接口格式](https://api.chatfire.cn/docs/api-226983436) 0.1/次
129
+ - 新增推理模型
130
+ - Qwen/QwQ-32B-Preview
131
+ > 强大的数学问题解决能力,在AIME、MATH-500数学评测上,超过了OpenAI o1-preview优秀的编码能力,LiveCodeBench接近OpenAI
132
+ o1-preview
98
133
 
134
+ ## 2024-11-25
99
135
 
136
+ - 新增虚拟换衣接口
137
+ - [可灵官方api格式](https://api.chatfire.cn/docs/api-237182295) 0.8/次
138
+ - [老接口格式](https://api.chatfire.cn/docs/api-226983436) 0.1/次
100
139
 
101
140
  </details>
meutils/init/evn.py CHANGED
@@ -35,7 +35,7 @@ os.environ['PROMPT_TEMPLATE'] = """
35
35
  # 如果无法从中得到答案,请回答“根据已知信息无法回答该问题”或“没有提供足够的信息”。请使用中文回答,不允许添加编造内容。
36
36
  # """
37
37
 
38
- # MODELSCOPE_CACHE
38
+ # modelscope_cache
39
39
  # PPNLP
40
40
  if __name__ == '__main__':
41
41
  from pprint import pprint
@@ -12,6 +12,7 @@ import mimetypes
12
12
  from meutils.pipe import *
13
13
  from meutils.io.files_utils import to_bytes
14
14
  from meutils.llm.openai_utils import to_openai_params
15
+ from meutils.str_utils.regular_expression import parse_url
15
16
 
16
17
  from openai import OpenAI, AsyncOpenAI
17
18
  from meutils.schemas.openai_types import chat_completion, chat_completion_chunk, ChatCompletionRequest, CompletionUsage
@@ -66,6 +67,22 @@ class Completions(object):
66
67
 
67
68
  request.messages = request.system_messages + [{'role': 'user', 'content': request.last_content}]
68
69
 
70
+ elif isinstance(request.last_content, str) and (urls := parse_url(request.last_content)):
71
+ logger.debug(urls)
72
+
73
+ url = urls[-1]
74
+ request.last_content = request.last_content.replace(url, '')
75
+
76
+ files = await asyncio.gather(*map(self.file_extract, urls))
77
+
78
+ for file_content in files:
79
+ request.system_messages.append({
80
+ "role": "system",
81
+ "content": file_content,
82
+ })
83
+
84
+ request.messages = request.system_messages + [{'role': 'user', 'content': request.last_content}]
85
+
69
86
  logger.debug(request)
70
87
 
71
88
  data = to_openai_params(request)
@@ -78,30 +95,43 @@ if __name__ == '__main__':
78
95
 
79
96
  request = ChatCompletionRequest(
80
97
  # model="qwen-turbo-2024-11-01",
81
- model="claude-3-5-sonnet-20241022",
98
+ # model="claude-3-5-sonnet-20241022",
99
+ model="gpt-4o-mini",
100
+
82
101
  messages=[
83
102
  {
84
103
  'role': 'system',
85
104
  'content': '你是一个文件问答助手'
86
105
  },
106
+ # {
107
+ # 'role': 'user',
108
+ # # 'content': {
109
+ # # "type": "file_url",
110
+ # # "file_url": {"url": "https://oss.ffire.cc/files/招标文件备案表(第二次).pdf", "detai": "auto"}
111
+ # # },
112
+ # 'content': [
113
+ # {
114
+ # "type": "text",
115
+ # "text": "这个文件讲了什么?"
116
+ # },
117
+ # # 多轮的时候要剔除
118
+ # {
119
+ # "type": "file_url",
120
+ # "file_url": {"url": "https://oss.ffire.cc/files/招标文件备案表(第二次).pdf", "detai": "auto"}
121
+ # }
122
+ # ]
123
+ # },
124
+
87
125
  {
88
126
  'role': 'user',
89
127
  # 'content': {
90
128
  # "type": "file_url",
91
129
  # "file_url": {"url": "https://oss.ffire.cc/files/招标文件备案表(第二次).pdf", "detai": "auto"}
92
130
  # },
93
- 'content': [
94
- {
95
- "type": "text",
96
- "text": "这个文件讲了什么?"
97
- },
98
- # 多轮的时候要剔除
99
- {
100
- "type": "file_url",
101
- "file_url": {"url": "https://oss.ffire.cc/files/招标文件备案表(第二次).pdf", "detai": "auto"}
102
- }
103
- ]
131
+ 'content': "https://oss.ffire.cc/files/%E6%8B%9B%E6%A0%87%E6%96%87%E4%BB%B6%E5%A4%87%E6%A1%88%E8%A1%A8%EF%BC%88%E7%AC%AC%E4%BA%8C%E6%AC%A1%EF%BC%89.pdf 这个文件讲了什么?",
132
+
104
133
  },
134
+
105
135
  # {'role': 'assistant', 'content': "好的"},
106
136
  # {
107
137
  # 'role': 'user',
@@ -266,7 +266,7 @@ if __name__ == '__main__':
266
266
  with timer():
267
267
  try:
268
268
  async with ppu_flow(api_key="sk-OYK4YxtTlWauT2TdGR5FTAJpkRmSnDwPly4cve0cAvMcrBkZ", post="api-oss",
269
- n=10000):
269
+ n=100):
270
270
  logger.debug("消费了哦")
271
271
 
272
272
  except Exception as e:
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : ark
5
+ # @Time : 2024/12/31 13:44
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+ import json
11
+ import os
12
+
13
+ from meutils.pipe import *
14
+ import volcenginesdkcore
15
+ from volcenginesdkcore.signv4 import SignerV4
16
+ import volcenginesdkark
17
+
18
+ # sign(path, method, headers, body, query, ak, sk, region, service)
19
+
20
+ headers = {}
21
+ payload = {
22
+ "Prompt": "关于星空的歌",
23
+ "Genre": "R&B/Soul",
24
+ "Mood": "Dynamic/Energetic",
25
+ "Gender": "Male",
26
+ "ModelVersion": "v4.0"
27
+ }
28
+ params = {"Action": "GenLyrics", "Version": "2024-08-12"}
29
+ SignerV4.sign(
30
+ path="/",
31
+ method="POST",
32
+ query=params,
33
+ body=json.dumps(payload),
34
+ headers=headers,
35
+ ak=os.getenv("ARK_ACCESS_KEY"),
36
+ sk=os.getenv("ARK_SECRET_ACCESS_KEY"),
37
+ region="cn-beijing",
38
+ service="imagination"
39
+ )
40
+
41
+ print(headers)
42
+
43
+ s = ''
44
+ for k, v in headers.items():
45
+ s += f"{k}:{v}\n"
46
+
47
+ print(s)
@@ -33,6 +33,7 @@ payload = {
33
33
  # Your secret key
34
34
  secret = ""
35
35
 
36
+
36
37
  # Create the JWT
37
38
  token = jwt.encode(payload, secret, algorithm="HS256", headers=header)
38
39
 
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # @Project : AI. @by PyCharm
4
+ # @File : volc
5
+ # @Time : 2024/12/31 13:20
6
+ # @Author : betterme
7
+ # @WeChat : meutils
8
+ # @Software : PyCharm
9
+ # @Description :
10
+
11
+
12
+ import hashlib
13
+ import hmac
14
+ import os
15
+ from urllib.parse import quote
16
+
17
+ from meutils.pipe import *
18
+
19
+ # 以下参数视服务不同而不同,一个服务内通常是一致的
20
+ Service = "iam"
21
+ Version = "2018-01-01"
22
+ Region = "cn-beijing"
23
+ Host = "iam.volcengineapi.com"
24
+ ContentType = "application/x-www-form-urlencoded"
25
+
26
+ # 请求的凭证,从IAM或者STS服务中获取
27
+ AK = os.getenv("ARK_ACCESS_KEY")
28
+ SK = os.getenv("ARK_SECRET_ACCESS_KEY")
29
+ # 当使用临时凭证时,需要使用到SessionToken传入Header,并计算进SignedHeader中,请自行在header参数中添加X-Security-Token头
30
+ # SessionToken = ""
31
+
32
+
33
+ def norm_query(params):
34
+ query = ""
35
+ for key in sorted(params.keys()):
36
+ if type(params[key]) == list:
37
+ for k in params[key]:
38
+ query = (
39
+ query + quote(key, safe="-_.~") + "=" + quote(k, safe="-_.~") + "&"
40
+ )
41
+ else:
42
+ query = (query + quote(key, safe="-_.~") + "=" + quote(params[key], safe="-_.~") + "&")
43
+ query = query[:-1]
44
+ return query.replace("+", "%20")
45
+
46
+
47
+ # 第一步:准备辅助函数。
48
+ # sha256 非对称加密
49
+ def hmac_sha256(key: bytes, content: str):
50
+ return hmac.new(key, content.encode("utf-8"), hashlib.sha256).digest()
51
+
52
+
53
+ # sha256 hash算法
54
+ def hash_sha256(content: str):
55
+ return hashlib.sha256(content.encode("utf-8")).hexdigest()
56
+
57
+
58
+ # 第二步:签名请求函数
59
+ def request(method, date, query, header, ak, sk, action, body):
60
+ # 第三步:创建身份证明。其中的 Service 和 Region 字段是固定的。ak 和 sk 分别代表
61
+ # AccessKeyID 和 SecretAccessKey。同时需要初始化签名结构体。一些签名计算时需要的属性也在这里处理。
62
+ # 初始化身份证明结构体
63
+ credential = {
64
+ "access_key_id": ak,
65
+ "secret_access_key": sk,
66
+ "service": Service,
67
+ "region": Region,
68
+ }
69
+ # 初始化签名结构体
70
+ request_param = {
71
+ "body": body,
72
+ "host": Host,
73
+ "path": "/",
74
+ "method": method,
75
+ "content_type": ContentType,
76
+ "date": date,
77
+ "query": {"Action": action, "Version": Version, **query},
78
+ }
79
+ if body is None:
80
+ request_param["body"] = ""
81
+ # 第四步:接下来开始计算签名。在计算签名前,先准备好用于接收签算结果的 signResult 变量,并设置一些参数。
82
+ # 初始化签名结果的结构体
83
+ x_date = request_param["date"].strftime("%Y%m%dT%H%M%SZ")
84
+ short_x_date = x_date[:8]
85
+ x_content_sha256 = hash_sha256(request_param["body"])
86
+ sign_result = {
87
+ "Host": request_param["host"],
88
+ "X-Content-Sha256": x_content_sha256,
89
+ "X-Date": x_date,
90
+ "Content-Type": request_param["content_type"],
91
+ }
92
+ # 第五步:计算 Signature 签名。
93
+ signed_headers_str = ";".join(
94
+ ["content-type", "host", "x-content-sha256", "x-date"]
95
+ )
96
+ # signed_headers_str = signed_headers_str + ";x-security-token"
97
+ canonical_request_str = "\n".join(
98
+ [request_param["method"].upper(),
99
+ request_param["path"],
100
+ norm_query(request_param["query"]),
101
+ "\n".join(
102
+ [
103
+ "content-type:" + request_param["content_type"],
104
+ "host:" + request_param["host"],
105
+ "x-content-sha256:" + x_content_sha256,
106
+ "x-date:" + x_date,
107
+ ]
108
+ ),
109
+ "",
110
+ signed_headers_str,
111
+ x_content_sha256,
112
+ ]
113
+ )
114
+
115
+ # 打印正规化的请求用于调试比对
116
+ print(canonical_request_str)
117
+ hashed_canonical_request = hash_sha256(canonical_request_str)
118
+
119
+ # 打印hash值用于调试比对
120
+ print(hashed_canonical_request)
121
+ credential_scope = "/".join([short_x_date, credential["region"], credential["service"], "request"])
122
+ string_to_sign = "\n".join(["HMAC-SHA256", x_date, credential_scope, hashed_canonical_request])
123
+
124
+ # 打印最终计算的签名字符串用于调试比对
125
+ print(string_to_sign)
126
+ k_date = hmac_sha256(credential["secret_access_key"].encode("utf-8"), short_x_date)
127
+ k_region = hmac_sha256(k_date, credential["region"])
128
+ k_service = hmac_sha256(k_region, credential["service"])
129
+ k_signing = hmac_sha256(k_service, "request")
130
+ signature = hmac_sha256(k_signing, string_to_sign).hex()
131
+
132
+ sign_result["Authorization"] = "HMAC-SHA256 Credential={}, SignedHeaders={}, Signature={}".format(
133
+ credential["access_key_id"] + "/" + credential_scope,
134
+ signed_headers_str,
135
+ signature,
136
+ )
137
+ header = {**header, **sign_result}
138
+ # header = {**header, **{"X-Security-Token": SessionToken}}
139
+ # 第六步:将 Signature 签名写入 HTTP Header 中,并发送 HTTP 请求。
140
+ r = requests.request(method=method,
141
+ url="https://{}{}".format(request_param["host"], request_param["path"]),
142
+ headers=header,
143
+ params=request_param["query"],
144
+ data=request_param["body"],
145
+ )
146
+ return r.json()
147
+
148
+
149
+ if __name__ == "__main__":
150
+ # response_body = request("Get", datetime.datetime.utcnow(), {}, {}, AK, SK, "ListUsers", None)
151
+ # print(response_body)
152
+
153
+ now = datetime.datetime.utcnow()
154
+
155
+ # Body的格式需要配合Content-Type,API使用的类型请阅读具体的官方文档,如:json格式需要json.dumps(obj)
156
+ # response_body = request("GET", now, {"Limit": "2"}, {}, AK, SK, "ListUsers", None)
157
+ # print(response_body)
158
+
159
+ response_body = request("POST", now, {"Limit": "10"}, {}, AK, SK, "ListUsers", "UnUseParam=ASDF")
160
+ print(response_body)
@@ -82,6 +82,8 @@ class ImageRequest(BaseModel): # openai
82
82
  self.size = self.size if 'x' in self.size else '512x512'
83
83
 
84
84
  class Config:
85
+ extra = "allow"
86
+
85
87
  # frozen = True
86
88
  # populate_by_name = True
87
89
 
@@ -112,7 +112,8 @@ class KlingaiImageRequest(BaseModel):
112
112
  {'name': 'aspect_ratio', 'value': self.aspect_ratio or "1:1"},
113
113
  {'name': 'imageCount', 'value': self.n},
114
114
  {"name": "fidelity", "value": self.image_fidelity or 0.5},
115
- {'name': 'biz', 'value': 'klingai'}
115
+ {'name': 'biz', 'value': 'klingai'},
116
+ {"name": "kolors_version", "value": "1.5"}
116
117
  ]
117
118
  self.payload = {
118
119
  'arguments': arguments,
@@ -162,13 +163,29 @@ class Camera(BaseModel):
162
163
 
163
164
 
164
165
  class KlingaiVideoRequest(BaseModel):
165
- model: str = 'kling-v1'
166
+ """增加计费模式,支持高质量模式
167
+ kling-v1.0-std-5s
168
+
169
+ kling-v1.5-std-5s 20积分
170
+ kling-v1.5-std-10s
171
+
172
+ kling-v1.5-pro-5s 35积分
173
+ kling-v1.5-pro-10s
174
+
175
+ kling-v1.6-std-5s 20积分
176
+ kling-v1.6-std-10s
177
+
178
+ kling-v1.6-pro-5s 35积分
179
+ kling-v1.6-pro-10s
180
+
181
+ """
182
+ model: str = 'kling-v1.6'
166
183
  mode: Literal["mini", "std", "pro"] = "std"
167
184
 
168
185
  prompt: str = ''
169
186
  negative_prompt: Optional[str] = '' # 不希望出现的内容
170
187
 
171
- n: int = 1
188
+ n: Literal[1, 2, 3, 4] = 1
172
189
 
173
190
  duration: Optional[int] = 5
174
191
  aspect_ratio: Literal["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9"] = "16:9"
@@ -205,9 +222,9 @@ class KlingaiVideoRequest(BaseModel):
205
222
  {'name': 'biz', 'value': 'klingai'},
206
223
  ]
207
224
 
208
- kling_version = '1.0'
209
- if self.model == 'kling-v1.5':
210
- kling_version = "1.5"
225
+ kling_version = '1.5'
226
+ if self.model == 'kling-v1.6':
227
+ kling_version = "1.6"
211
228
  self.mode = 'pro'
212
229
  arguments.append({"name": "camera_control_enabled", "value": "false"}) # 暂不支持
213
230
  else: