camel-ai 0.2.73a4__py3-none-any.whl → 0.2.80a2__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 (173) hide show
  1. camel/__init__.py +1 -1
  2. camel/agents/_utils.py +38 -0
  3. camel/agents/chat_agent.py +2217 -519
  4. camel/agents/mcp_agent.py +30 -27
  5. camel/configs/__init__.py +15 -0
  6. camel/configs/aihubmix_config.py +88 -0
  7. camel/configs/amd_config.py +70 -0
  8. camel/configs/cometapi_config.py +104 -0
  9. camel/configs/minimax_config.py +93 -0
  10. camel/configs/nebius_config.py +103 -0
  11. camel/data_collectors/alpaca_collector.py +15 -6
  12. camel/datasets/base_generator.py +39 -10
  13. camel/environments/single_step.py +28 -3
  14. camel/environments/tic_tac_toe.py +1 -1
  15. camel/interpreters/__init__.py +2 -0
  16. camel/interpreters/docker/Dockerfile +3 -12
  17. camel/interpreters/e2b_interpreter.py +34 -1
  18. camel/interpreters/microsandbox_interpreter.py +395 -0
  19. camel/loaders/__init__.py +11 -2
  20. camel/loaders/chunkr_reader.py +9 -0
  21. camel/memories/agent_memories.py +48 -4
  22. camel/memories/base.py +26 -0
  23. camel/memories/blocks/chat_history_block.py +122 -4
  24. camel/memories/context_creators/score_based.py +25 -384
  25. camel/memories/records.py +88 -8
  26. camel/messages/base.py +153 -34
  27. camel/models/__init__.py +10 -0
  28. camel/models/aihubmix_model.py +83 -0
  29. camel/models/aiml_model.py +1 -16
  30. camel/models/amd_model.py +101 -0
  31. camel/models/anthropic_model.py +6 -19
  32. camel/models/aws_bedrock_model.py +2 -33
  33. camel/models/azure_openai_model.py +114 -89
  34. camel/models/base_audio_model.py +3 -1
  35. camel/models/base_model.py +32 -14
  36. camel/models/cohere_model.py +1 -16
  37. camel/models/cometapi_model.py +83 -0
  38. camel/models/crynux_model.py +1 -16
  39. camel/models/deepseek_model.py +1 -16
  40. camel/models/fish_audio_model.py +6 -0
  41. camel/models/gemini_model.py +36 -18
  42. camel/models/groq_model.py +1 -17
  43. camel/models/internlm_model.py +1 -16
  44. camel/models/litellm_model.py +1 -16
  45. camel/models/lmstudio_model.py +1 -17
  46. camel/models/minimax_model.py +83 -0
  47. camel/models/mistral_model.py +1 -16
  48. camel/models/model_factory.py +27 -1
  49. camel/models/modelscope_model.py +1 -16
  50. camel/models/moonshot_model.py +105 -24
  51. camel/models/nebius_model.py +83 -0
  52. camel/models/nemotron_model.py +0 -5
  53. camel/models/netmind_model.py +1 -16
  54. camel/models/novita_model.py +1 -16
  55. camel/models/nvidia_model.py +1 -16
  56. camel/models/ollama_model.py +4 -19
  57. camel/models/openai_compatible_model.py +62 -41
  58. camel/models/openai_model.py +62 -57
  59. camel/models/openrouter_model.py +1 -17
  60. camel/models/ppio_model.py +1 -16
  61. camel/models/qianfan_model.py +1 -16
  62. camel/models/qwen_model.py +1 -16
  63. camel/models/reka_model.py +1 -16
  64. camel/models/samba_model.py +34 -47
  65. camel/models/sglang_model.py +64 -31
  66. camel/models/siliconflow_model.py +1 -16
  67. camel/models/stub_model.py +0 -4
  68. camel/models/togetherai_model.py +1 -16
  69. camel/models/vllm_model.py +1 -16
  70. camel/models/volcano_model.py +0 -17
  71. camel/models/watsonx_model.py +1 -16
  72. camel/models/yi_model.py +1 -16
  73. camel/models/zhipuai_model.py +60 -16
  74. camel/parsers/__init__.py +18 -0
  75. camel/parsers/mcp_tool_call_parser.py +176 -0
  76. camel/retrievers/auto_retriever.py +1 -0
  77. camel/runtimes/daytona_runtime.py +11 -12
  78. camel/societies/__init__.py +2 -0
  79. camel/societies/workforce/__init__.py +2 -0
  80. camel/societies/workforce/events.py +122 -0
  81. camel/societies/workforce/prompts.py +146 -66
  82. camel/societies/workforce/role_playing_worker.py +15 -11
  83. camel/societies/workforce/single_agent_worker.py +302 -65
  84. camel/societies/workforce/structured_output_handler.py +30 -18
  85. camel/societies/workforce/task_channel.py +163 -27
  86. camel/societies/workforce/utils.py +107 -13
  87. camel/societies/workforce/workflow_memory_manager.py +772 -0
  88. camel/societies/workforce/workforce.py +1949 -579
  89. camel/societies/workforce/workforce_callback.py +74 -0
  90. camel/societies/workforce/workforce_logger.py +168 -145
  91. camel/societies/workforce/workforce_metrics.py +33 -0
  92. camel/storages/key_value_storages/json.py +15 -2
  93. camel/storages/key_value_storages/mem0_cloud.py +48 -47
  94. camel/storages/object_storages/google_cloud.py +1 -1
  95. camel/storages/vectordb_storages/oceanbase.py +13 -13
  96. camel/storages/vectordb_storages/qdrant.py +3 -3
  97. camel/storages/vectordb_storages/tidb.py +8 -6
  98. camel/tasks/task.py +4 -3
  99. camel/toolkits/__init__.py +20 -7
  100. camel/toolkits/aci_toolkit.py +45 -0
  101. camel/toolkits/base.py +6 -4
  102. camel/toolkits/code_execution.py +28 -1
  103. camel/toolkits/context_summarizer_toolkit.py +684 -0
  104. camel/toolkits/dappier_toolkit.py +5 -1
  105. camel/toolkits/dingtalk.py +1135 -0
  106. camel/toolkits/edgeone_pages_mcp_toolkit.py +11 -31
  107. camel/toolkits/excel_toolkit.py +1 -1
  108. camel/toolkits/{file_write_toolkit.py → file_toolkit.py} +430 -36
  109. camel/toolkits/function_tool.py +13 -3
  110. camel/toolkits/github_toolkit.py +104 -17
  111. camel/toolkits/gmail_toolkit.py +1839 -0
  112. camel/toolkits/google_calendar_toolkit.py +38 -4
  113. camel/toolkits/google_drive_mcp_toolkit.py +12 -31
  114. camel/toolkits/hybrid_browser_toolkit/config_loader.py +15 -0
  115. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +77 -8
  116. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +884 -88
  117. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  118. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +5 -612
  119. camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -1
  120. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +959 -89
  121. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +9 -2
  122. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +281 -213
  123. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  124. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  125. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  126. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +23 -3
  127. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +72 -7
  128. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +582 -132
  129. camel/toolkits/hybrid_browser_toolkit_py/actions.py +158 -0
  130. camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +55 -8
  131. camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +43 -0
  132. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +321 -8
  133. camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +10 -4
  134. camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +45 -4
  135. camel/toolkits/{openai_image_toolkit.py → image_generation_toolkit.py} +151 -53
  136. camel/toolkits/klavis_toolkit.py +5 -1
  137. camel/toolkits/markitdown_toolkit.py +27 -1
  138. camel/toolkits/math_toolkit.py +64 -10
  139. camel/toolkits/mcp_toolkit.py +366 -71
  140. camel/toolkits/memory_toolkit.py +5 -1
  141. camel/toolkits/message_integration.py +18 -13
  142. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  143. camel/toolkits/note_taking_toolkit.py +19 -10
  144. camel/toolkits/notion_mcp_toolkit.py +16 -26
  145. camel/toolkits/openbb_toolkit.py +5 -1
  146. camel/toolkits/origene_mcp_toolkit.py +8 -49
  147. camel/toolkits/playwright_mcp_toolkit.py +12 -31
  148. camel/toolkits/resend_toolkit.py +168 -0
  149. camel/toolkits/search_toolkit.py +264 -91
  150. camel/toolkits/slack_toolkit.py +64 -10
  151. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  152. camel/toolkits/terminal_toolkit/terminal_toolkit.py +957 -0
  153. camel/toolkits/terminal_toolkit/utils.py +532 -0
  154. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  155. camel/toolkits/video_analysis_toolkit.py +17 -11
  156. camel/toolkits/wechat_official_toolkit.py +483 -0
  157. camel/toolkits/zapier_toolkit.py +5 -1
  158. camel/types/__init__.py +2 -2
  159. camel/types/enums.py +274 -7
  160. camel/types/openai_types.py +2 -2
  161. camel/types/unified_model_type.py +15 -0
  162. camel/utils/commons.py +36 -5
  163. camel/utils/constants.py +3 -0
  164. camel/utils/context_utils.py +1003 -0
  165. camel/utils/mcp.py +138 -4
  166. camel/utils/token_counting.py +43 -20
  167. {camel_ai-0.2.73a4.dist-info → camel_ai-0.2.80a2.dist-info}/METADATA +223 -83
  168. {camel_ai-0.2.73a4.dist-info → camel_ai-0.2.80a2.dist-info}/RECORD +170 -141
  169. camel/loaders/pandas_reader.py +0 -368
  170. camel/toolkits/openai_agent_toolkit.py +0 -135
  171. camel/toolkits/terminal_toolkit.py +0 -1550
  172. {camel_ai-0.2.73a4.dist-info → camel_ai-0.2.80a2.dist-info}/WHEEL +0 -0
  173. {camel_ai-0.2.73a4.dist-info → camel_ai-0.2.80a2.dist-info}/licenses/LICENSE +0 -0
camel/types/enums.py CHANGED
@@ -24,6 +24,7 @@ logger = get_logger(__name__)
24
24
  class RoleType(Enum):
25
25
  ASSISTANT = "assistant"
26
26
  USER = "user"
27
+ SYSTEM = "system"
27
28
  CRITIC = "critic"
28
29
  EMBODIMENT = "embodiment"
29
30
  DEFAULT = "default"
@@ -48,6 +49,10 @@ class ModelType(UnifiedModelType, Enum):
48
49
  O4_MINI = "o4-mini"
49
50
  O3 = "o3"
50
51
  O3_PRO = "o3-pro"
52
+ GPT_5_1_Instant = "gpt-5.1"
53
+ GPT_5 = "gpt-5"
54
+ GPT_5_MINI = "gpt-5-mini"
55
+ GPT_5_NANO = "gpt-5-nano"
51
56
 
52
57
  AWS_CLAUDE_3_7_SONNET = "anthropic.claude-3-7-sonnet-20250219-v1:0"
53
58
  AWS_CLAUDE_3_5_SONNET = "anthropic.claude-3-5-sonnet-20241022-v2:0"
@@ -59,6 +64,9 @@ class ModelType(UnifiedModelType, Enum):
59
64
  AWS_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0"
60
65
  AWS_CLAUDE_SONNET_4 = "anthropic.claude-sonnet-4-20250514-v1:0"
61
66
  AWS_CLAUDE_OPUS_4 = "anthropic.claude-opus-4-20250514-v1:0"
67
+ AWS_CLAUDE_OPUS_4_1 = "anthropic.claude-opus-4-1-20250805-v1:0"
68
+
69
+ AMD_GPT4 = "dvue-aoai-001-gpt-4.1"
62
70
 
63
71
  GLM_4 = "glm-4"
64
72
  GLM_4V = "glm-4v"
@@ -83,6 +91,51 @@ class ModelType(UnifiedModelType, Enum):
83
91
  GROQ_MIXTRAL_8_7B = "mixtral-8x7b-32768"
84
92
  GROQ_GEMMA_2_9B_IT = "gemma2-9b-it"
85
93
 
94
+ # Nebius AI Studio platform models
95
+ NEBIUS_GPT_OSS_120B = "gpt-oss-120b"
96
+ NEBIUS_GPT_OSS_20B = "gpt-oss-20b"
97
+ NEBIUS_GLM_4_5 = "GLM-4.5"
98
+ NEBIUS_DEEPSEEK_V3 = "deepseek-ai/DeepSeek-V3"
99
+ NEBIUS_DEEPSEEK_R1 = "deepseek-ai/DeepSeek-R1"
100
+ NEBIUS_LLAMA_3_1_70B = "meta-llama/Meta-Llama-3.1-70B-Instruct"
101
+ NEBIUS_MISTRAL_7B_INSTRUCT = "mistralai/Mistral-7B-Instruct-v0.3"
102
+
103
+ # CometAPI platform models
104
+ COMETAPI_GPT_5_CHAT_LATEST = "gpt-5-chat-latest"
105
+ COMETAPI_CHATGPT_4O_LATEST = "chatgpt-4o-latest"
106
+ COMETAPI_GPT_5_MINI = "gpt-5-mini"
107
+ COMETAPI_GPT_5_NANO = "gpt-5-nano"
108
+ COMETAPI_GPT_5 = "gpt-5"
109
+ COMETAPI_GPT_4_1 = "gpt-4.1"
110
+ COMETAPI_GPT_4O_MINI = "gpt-4o-mini"
111
+ COMETAPI_O4_MINI_2025_04_16 = "o4-mini-2025-04-16"
112
+ COMETAPI_O3_PRO_2025_06_10 = "o3-pro-2025-06-10"
113
+ COMETAPI_CLAUDE_OPUS_4_1_20250805 = "claude-opus-4-1-20250805"
114
+ COMETAPI_CLAUDE_OPUS_4_1_20250805_THINKING = (
115
+ "claude-opus-4-1-20250805-thinking"
116
+ )
117
+ COMETAPI_CLAUDE_SONNET_4_20250514 = "claude-sonnet-4-20250514"
118
+ COMETAPI_CLAUDE_SONNET_4_20250514_THINKING = (
119
+ "claude-sonnet-4-20250514-thinking"
120
+ )
121
+ COMETAPI_CLAUDE_3_7_SONNET_LATEST = "claude-3-7-sonnet-latest"
122
+ COMETAPI_CLAUDE_3_5_HAIKU_LATEST = "claude-3-5-haiku-latest"
123
+ COMETAPI_GEMINI_2_5_PRO = "gemini-2.5-pro"
124
+ COMETAPI_GEMINI_2_5_FLASH = "gemini-2.5-flash"
125
+ COMETAPI_GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite"
126
+ COMETAPI_GEMINI_2_0_FLASH = "gemini-2.0-flash"
127
+ COMETAPI_GROK_4_0709 = "grok-4-0709"
128
+ COMETAPI_GROK_3 = "grok-3"
129
+ COMETAPI_GROK_3_MINI = "grok-3-mini"
130
+ COMETAPI_GROK_2_IMAGE_1212 = "grok-2-image-1212"
131
+ COMETAPI_DEEPSEEK_V3_1 = "deepseek-v3.1"
132
+ COMETAPI_DEEPSEEK_V3 = "deepseek-v3"
133
+ COMETAPI_DEEPSEEK_R1_0528 = "deepseek-r1-0528"
134
+ COMETAPI_DEEPSEEK_CHAT = "deepseek-chat"
135
+ COMETAPI_DEEPSEEK_REASONER = "deepseek-reasoner"
136
+ COMETAPI_QWEN3_30B_A3B = "qwen3-30b-a3b"
137
+ COMETAPI_QWEN3_CODER_PLUS_2025_07_22 = "qwen3-coder-plus-2025-07-22"
138
+
86
139
  # OpenRouter models
87
140
  OPENROUTER_LLAMA_3_1_405B = "meta-llama/llama-3.1-405b-instruct"
88
141
  OPENROUTER_LLAMA_3_1_70B = "meta-llama/llama-3.1-70b-instruct"
@@ -91,6 +144,7 @@ class ModelType(UnifiedModelType, Enum):
91
144
  OPENROUTER_LLAMA_4_SCOUT = "meta-llama/llama-4-scout"
92
145
  OPENROUTER_LLAMA_4_SCOUT_FREE = "meta-llama/llama-4-scout:free"
93
146
  OPENROUTER_OLYMPICODER_7B = "open-r1/olympiccoder-7b:free"
147
+ OPENROUTER_HORIZON_ALPHA = "openrouter/horizon-alpha"
94
148
 
95
149
  # LMStudio models
96
150
  LMSTUDIO_GEMMA_3_1B = "gemma-3-1b"
@@ -155,8 +209,10 @@ class ModelType(UnifiedModelType, Enum):
155
209
  CLAUDE_3_5_SONNET = "claude-3-5-sonnet-latest"
156
210
  CLAUDE_3_5_HAIKU = "claude-3-5-haiku-latest"
157
211
  CLAUDE_3_7_SONNET = "claude-3-7-sonnet-latest"
212
+ CLAUDE_SONNET_4_5 = "claude-sonnet-4-5"
158
213
  CLAUDE_SONNET_4 = "claude-sonnet-4-20250514"
159
214
  CLAUDE_OPUS_4 = "claude-opus-4-20250514"
215
+ CLAUDE_OPUS_4_1 = "claude-opus-4-1-20250805"
160
216
 
161
217
  # Netmind models
162
218
  NETMIND_LLAMA_4_MAVERICK_17B_128E_INSTRUCT = (
@@ -185,6 +241,7 @@ class ModelType(UnifiedModelType, Enum):
185
241
  NVIDIA_LLAMA3_3_70B_INSTRUCT = "meta/llama-3.3-70b-instruct"
186
242
 
187
243
  # Gemini models
244
+ GEMINI_3_PRO = "gemini-3-pro-preview"
188
245
  GEMINI_2_5_FLASH = "gemini-2.5-flash"
189
246
  GEMINI_2_5_PRO = "gemini-2.5-pro"
190
247
  GEMINI_2_0_FLASH = "gemini-2.0-flash"
@@ -207,9 +264,10 @@ class ModelType(UnifiedModelType, Enum):
207
264
  MISTRAL_MIXTRAL_8x22B = "open-mixtral-8x22b"
208
265
  MISTRAL_NEMO = "open-mistral-nemo"
209
266
  MISTRAL_PIXTRAL_12B = "pixtral-12b-2409"
210
- MISTRAL_MEDIUM_3 = "mistral-medium-latest"
211
- MAGISTRAL_MEDIUM = "magistral-medium-2506"
267
+ MISTRAL_MEDIUM_3_1 = "mistral-medium-2508"
212
268
  MISTRAL_SMALL_3_2 = "mistral-small-2506"
269
+ MAGISTRAL_SMALL_1_2 = "magistral-small-1.2"
270
+ MAGISTRAL_MEDIUM_1_2 = "magistral-medium-1.2"
213
271
 
214
272
  # Reka models
215
273
  REKA_CORE = "reka-core"
@@ -245,6 +303,7 @@ class ModelType(UnifiedModelType, Enum):
245
303
  QWEN_QWQ_32B = "qwq-32b-preview"
246
304
  QWEN_QVQ_72B = "qvq-72b-preview"
247
305
  QWEN_QWQ_PLUS = "qwq-plus"
306
+ QWEN_3_CODER_PLUS = "qwen3-coder-plus"
248
307
 
249
308
  # Yi models (01-ai)
250
309
  YI_LIGHTNING = "yi-lightning"
@@ -275,9 +334,31 @@ class ModelType(UnifiedModelType, Enum):
275
334
  # SiliconFlow models support tool calling
276
335
  SILICONFLOW_DEEPSEEK_V2_5 = "deepseek-ai/DeepSeek-V2.5"
277
336
  SILICONFLOW_DEEPSEEK_V3 = "deepseek-ai/DeepSeek-V3"
337
+ SILICONFLOW_PRO_DEEPSEEK_V3 = "Pro/deepseek-ai/DeepSeek-V3"
338
+ SILICONFLOW_DEEPSEEK_R1 = "deepseek-ai/DeepSeek-R1"
339
+ SILICONFLOW_PRO_DEEPSEEK_R1 = "Pro/deepseek-ai/DeepSeek-R1"
340
+ SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_32B = (
341
+ "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B"
342
+ )
343
+ SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_14B = (
344
+ "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B"
345
+ )
346
+ SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_7B = (
347
+ "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"
348
+ )
349
+ SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_1_5B = (
350
+ "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
351
+ )
352
+ SILICONFLOW_PRO_DEEPSEEK_R1_DISTILL_QWEN_7B = (
353
+ "Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"
354
+ )
355
+ SILICONFLOW_PRO_DEEPSEEK_R1_DISTILL_QWEN_1_5B = (
356
+ "Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
357
+ )
278
358
  SILICONFLOW_INTERN_LM2_5_20B_CHAT = "internlm/internlm2_5-20b-chat"
279
359
  SILICONFLOW_INTERN_LM2_5_7B_CHAT = "internlm/internlm2_5-7b-chat"
280
360
  SILICONFLOW_PRO_INTERN_LM2_5_7B_CHAT = "Pro/internlm/internlm2_5-7b-chat"
361
+ SILICONFLOW_QWQ_32B = "Qwen/QwQ-32B"
281
362
  SILICONFLOW_QWEN2_5_72B_INSTRUCT = "Qwen/Qwen2.5-72B-Instruct"
282
363
  SILICONFLOW_QWEN2_5_32B_INSTRUCT = "Qwen/Qwen2.5-32B-Instruct"
283
364
  SILICONFLOW_QWEN2_5_14B_INSTRUCT = "Qwen/Qwen2.5-14B-Instruct"
@@ -285,6 +366,12 @@ class ModelType(UnifiedModelType, Enum):
285
366
  SILICONFLOW_PRO_QWEN2_5_7B_INSTRUCT = "Pro/Qwen/Qwen2.5-7B-Instruct"
286
367
  SILICONFLOW_THUDM_GLM_4_9B_CHAT = "THUDM/glm-4-9b-chat"
287
368
  SILICONFLOW_PRO_THUDM_GLM_4_9B_CHAT = "Pro/THUDM/glm-4-9b-chat"
369
+ SILICONFLOW_THUDM_GLM_Z1_32B_0414 = "THUDM/GLM-Z1-32B-0414"
370
+ SILICONFLOW_THUDM_GLM_4_32B_0414 = "THUDM/GLM-4-32B-0414"
371
+ SILICONFLOW_THUDM_GLM_Z1_RUMINATION_32B_0414 = (
372
+ "THUDM/GLM-Z1-Rumination-32B-0414"
373
+ )
374
+ SILICONFLOW_THUDM_GLM_4_9B_0414 = "THUDM/GLM-4-9B-0414"
288
375
 
289
376
  # AIML models support tool calling
290
377
  AIML_MIXTRAL_8X7B = "mistralai/Mixtral-8x7B-Instruct-v0.1"
@@ -417,6 +504,10 @@ class ModelType(UnifiedModelType, Enum):
417
504
  CRYNUX_NOUS_HERMES_3_LLAMA_3_1_8B = "NousResearch/Hermes-3-Llama-3.1-8B"
418
505
  CRYNUX_NOUS_HERMES_3_LLAMA_3_2_3B = "NousResearch/Hermes-3-Llama-3.2-3B"
419
506
 
507
+ # Minimax M2 models
508
+ MINIMAX_M2 = "MiniMax-M2"
509
+ MINIMAX_M2_STABLE = "MiniMax-M2-Stable"
510
+
420
511
  def __str__(self):
421
512
  return self.value
422
513
 
@@ -494,10 +585,20 @@ class ModelType(UnifiedModelType, Enum):
494
585
  ModelType.GPT_4_1,
495
586
  ModelType.GPT_4_1_MINI,
496
587
  ModelType.GPT_4_1_NANO,
588
+ ModelType.GPT_5,
589
+ ModelType.GPT_5_MINI,
590
+ ModelType.GPT_5_NANO,
497
591
  ModelType.O4_MINI,
498
592
  ModelType.O3,
499
593
  }
500
594
 
595
+ @property
596
+ def is_amd(self) -> bool:
597
+ r"""Returns whether this type of models is a AMD model."""
598
+ return self in {
599
+ ModelType.AMD_GPT4,
600
+ }
601
+
501
602
  @property
502
603
  def is_aws_bedrock(self) -> bool:
503
604
  r"""Returns whether this type of models is an AWS Bedrock model."""
@@ -512,6 +613,7 @@ class ModelType(UnifiedModelType, Enum):
512
613
  ModelType.AWS_LLAMA_3_2_11B_INSTRUCT,
513
614
  ModelType.AWS_CLAUDE_SONNET_4,
514
615
  ModelType.AWS_CLAUDE_OPUS_4,
616
+ ModelType.AWS_CLAUDE_OPUS_4_1,
515
617
  }
516
618
 
517
619
  @property
@@ -534,6 +636,7 @@ class ModelType(UnifiedModelType, Enum):
534
636
  ModelType.GPT_4_1,
535
637
  ModelType.GPT_4_1_MINI,
536
638
  ModelType.GPT_4_1_NANO,
639
+ ModelType.GPT_5,
537
640
  ModelType.O4_MINI,
538
641
  ModelType.O3,
539
642
  }
@@ -574,8 +677,10 @@ class ModelType(UnifiedModelType, Enum):
574
677
  ModelType.CLAUDE_3_5_SONNET,
575
678
  ModelType.CLAUDE_3_5_HAIKU,
576
679
  ModelType.CLAUDE_3_7_SONNET,
680
+ ModelType.CLAUDE_SONNET_4_5,
577
681
  ModelType.CLAUDE_SONNET_4,
578
682
  ModelType.CLAUDE_OPUS_4,
683
+ ModelType.CLAUDE_OPUS_4_1,
579
684
  }
580
685
 
581
686
  @property
@@ -591,6 +696,56 @@ class ModelType(UnifiedModelType, Enum):
591
696
  ModelType.GROQ_GEMMA_2_9B_IT,
592
697
  }
593
698
 
699
+ @property
700
+ def is_nebius(self) -> bool:
701
+ r"""Returns whether this type of models is served by Nebius AI
702
+ Studio."""
703
+ return self in {
704
+ ModelType.NEBIUS_GPT_OSS_120B,
705
+ ModelType.NEBIUS_GPT_OSS_20B,
706
+ ModelType.NEBIUS_GLM_4_5,
707
+ ModelType.NEBIUS_DEEPSEEK_V3,
708
+ ModelType.NEBIUS_DEEPSEEK_R1,
709
+ ModelType.NEBIUS_LLAMA_3_1_70B,
710
+ ModelType.NEBIUS_MISTRAL_7B_INSTRUCT,
711
+ }
712
+
713
+ @property
714
+ def is_cometapi(self) -> bool:
715
+ r"""Returns whether this type of models is served by CometAPI."""
716
+ return self in {
717
+ ModelType.COMETAPI_GPT_5_CHAT_LATEST,
718
+ ModelType.COMETAPI_CHATGPT_4O_LATEST,
719
+ ModelType.COMETAPI_GPT_5_MINI,
720
+ ModelType.COMETAPI_GPT_5_NANO,
721
+ ModelType.COMETAPI_GPT_5,
722
+ ModelType.COMETAPI_GPT_4_1,
723
+ ModelType.COMETAPI_GPT_4O_MINI,
724
+ ModelType.COMETAPI_O4_MINI_2025_04_16,
725
+ ModelType.COMETAPI_O3_PRO_2025_06_10,
726
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805,
727
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805_THINKING,
728
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514,
729
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514_THINKING,
730
+ ModelType.COMETAPI_CLAUDE_3_7_SONNET_LATEST,
731
+ ModelType.COMETAPI_CLAUDE_3_5_HAIKU_LATEST,
732
+ ModelType.COMETAPI_GEMINI_2_5_PRO,
733
+ ModelType.COMETAPI_GEMINI_2_5_FLASH,
734
+ ModelType.COMETAPI_GEMINI_2_5_FLASH_LITE,
735
+ ModelType.COMETAPI_GEMINI_2_0_FLASH,
736
+ ModelType.COMETAPI_GROK_4_0709,
737
+ ModelType.COMETAPI_GROK_3,
738
+ ModelType.COMETAPI_GROK_3_MINI,
739
+ ModelType.COMETAPI_GROK_2_IMAGE_1212,
740
+ ModelType.COMETAPI_DEEPSEEK_V3_1,
741
+ ModelType.COMETAPI_DEEPSEEK_V3,
742
+ ModelType.COMETAPI_DEEPSEEK_R1_0528,
743
+ ModelType.COMETAPI_DEEPSEEK_CHAT,
744
+ ModelType.COMETAPI_DEEPSEEK_REASONER,
745
+ ModelType.COMETAPI_QWEN3_30B_A3B,
746
+ ModelType.COMETAPI_QWEN3_CODER_PLUS_2025_07_22,
747
+ }
748
+
594
749
  @property
595
750
  def is_openrouter(self) -> bool:
596
751
  r"""Returns whether this type of models is served by OpenRouter."""
@@ -602,6 +757,7 @@ class ModelType(UnifiedModelType, Enum):
602
757
  ModelType.OPENROUTER_LLAMA_4_SCOUT,
603
758
  ModelType.OPENROUTER_LLAMA_4_SCOUT_FREE,
604
759
  ModelType.OPENROUTER_OLYMPICODER_7B,
760
+ ModelType.OPENROUTER_HORIZON_ALPHA,
605
761
  }
606
762
 
607
763
  @property
@@ -649,9 +805,10 @@ class ModelType(UnifiedModelType, Enum):
649
805
  ModelType.MISTRAL_PIXTRAL_12B,
650
806
  ModelType.MISTRAL_8B,
651
807
  ModelType.MISTRAL_3B,
652
- ModelType.MISTRAL_MEDIUM_3,
653
- ModelType.MAGISTRAL_MEDIUM,
808
+ ModelType.MISTRAL_MEDIUM_3_1,
654
809
  ModelType.MISTRAL_SMALL_3_2,
810
+ ModelType.MAGISTRAL_SMALL_1_2,
811
+ ModelType.MAGISTRAL_MEDIUM_1_2,
655
812
  }
656
813
 
657
814
  @property
@@ -680,6 +837,7 @@ class ModelType(UnifiedModelType, Enum):
680
837
  bool: Whether this type of models is gemini.
681
838
  """
682
839
  return self in {
840
+ ModelType.GEMINI_3_PRO,
683
841
  ModelType.GEMINI_2_5_FLASH,
684
842
  ModelType.GEMINI_2_5_PRO,
685
843
  ModelType.GEMINI_2_0_FLASH,
@@ -763,6 +921,7 @@ class ModelType(UnifiedModelType, Enum):
763
921
  ModelType.QWEN_PLUS_2025_04_28,
764
922
  ModelType.QWEN_TURBO_LATEST,
765
923
  ModelType.QWEN_TURBO_2025_04_28,
924
+ ModelType.QWEN_3_CODER_PLUS,
766
925
  }
767
926
 
768
927
  @property
@@ -859,9 +1018,19 @@ class ModelType(UnifiedModelType, Enum):
859
1018
  return self in {
860
1019
  ModelType.SILICONFLOW_DEEPSEEK_V2_5,
861
1020
  ModelType.SILICONFLOW_DEEPSEEK_V3,
1021
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_V3,
1022
+ ModelType.SILICONFLOW_DEEPSEEK_R1,
1023
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_R1,
1024
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_32B,
1025
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_14B,
1026
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_7B,
1027
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_1_5B,
1028
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_R1_DISTILL_QWEN_7B,
1029
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_R1_DISTILL_QWEN_1_5B,
862
1030
  ModelType.SILICONFLOW_INTERN_LM2_5_20B_CHAT,
863
1031
  ModelType.SILICONFLOW_INTERN_LM2_5_7B_CHAT,
864
1032
  ModelType.SILICONFLOW_PRO_INTERN_LM2_5_7B_CHAT,
1033
+ ModelType.SILICONFLOW_QWQ_32B,
865
1034
  ModelType.SILICONFLOW_QWEN2_5_72B_INSTRUCT,
866
1035
  ModelType.SILICONFLOW_QWEN2_5_32B_INSTRUCT,
867
1036
  ModelType.SILICONFLOW_QWEN2_5_14B_INSTRUCT,
@@ -869,6 +1038,10 @@ class ModelType(UnifiedModelType, Enum):
869
1038
  ModelType.SILICONFLOW_PRO_QWEN2_5_7B_INSTRUCT,
870
1039
  ModelType.SILICONFLOW_THUDM_GLM_4_9B_CHAT,
871
1040
  ModelType.SILICONFLOW_PRO_THUDM_GLM_4_9B_CHAT,
1041
+ ModelType.SILICONFLOW_THUDM_GLM_Z1_32B_0414,
1042
+ ModelType.SILICONFLOW_THUDM_GLM_4_32B_0414,
1043
+ ModelType.SILICONFLOW_THUDM_GLM_Z1_RUMINATION_32B_0414,
1044
+ ModelType.SILICONFLOW_THUDM_GLM_4_9B_0414,
872
1045
  }
873
1046
 
874
1047
  @property
@@ -1125,6 +1298,16 @@ class ModelType(UnifiedModelType, Enum):
1125
1298
  ModelType.NOVITA_MISTRAL_7B,
1126
1299
  ModelType.NOVITA_LLAMA_3_2_11B_VISION,
1127
1300
  ModelType.NOVITA_LLAMA_3_2_3B,
1301
+ ModelType.NEBIUS_MISTRAL_7B_INSTRUCT,
1302
+ ModelType.SILICONFLOW_INTERN_LM2_5_20B_CHAT,
1303
+ ModelType.SILICONFLOW_INTERN_LM2_5_7B_CHAT,
1304
+ ModelType.SILICONFLOW_PRO_INTERN_LM2_5_7B_CHAT,
1305
+ ModelType.SILICONFLOW_QWQ_32B,
1306
+ ModelType.SILICONFLOW_QWEN2_5_72B_INSTRUCT,
1307
+ ModelType.SILICONFLOW_QWEN2_5_32B_INSTRUCT,
1308
+ ModelType.SILICONFLOW_QWEN2_5_14B_INSTRUCT,
1309
+ ModelType.SILICONFLOW_QWEN2_5_7B_INSTRUCT,
1310
+ ModelType.SILICONFLOW_PRO_QWEN2_5_7B_INSTRUCT,
1128
1311
  }:
1129
1312
  return 32_768
1130
1313
  elif self in {
@@ -1145,6 +1328,17 @@ class ModelType(UnifiedModelType, Enum):
1145
1328
  ModelType.NOVITA_DEEPSEEK_R1_DISTILL_QWEN_14B,
1146
1329
  ModelType.NOVITA_DEEPSEEK_R1_DISTILL_QWEN_32B,
1147
1330
  ModelType.NOVITA_DEEPSEEK_R1,
1331
+ ModelType.SILICONFLOW_DEEPSEEK_V2_5,
1332
+ ModelType.SILICONFLOW_DEEPSEEK_V3,
1333
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_V3,
1334
+ ModelType.SILICONFLOW_DEEPSEEK_R1,
1335
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_R1,
1336
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_32B,
1337
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_14B,
1338
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_7B,
1339
+ ModelType.SILICONFLOW_DEEPSEEK_R1_DISTILL_QWEN_1_5B,
1340
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_R1_DISTILL_QWEN_7B,
1341
+ ModelType.SILICONFLOW_PRO_DEEPSEEK_R1_DISTILL_QWEN_1_5B,
1148
1342
  }:
1149
1343
  return 64_000
1150
1344
  elif self in {
@@ -1168,12 +1362,16 @@ class ModelType(UnifiedModelType, Enum):
1168
1362
  ModelType.O1_PREVIEW,
1169
1363
  ModelType.O1_MINI,
1170
1364
  ModelType.GPT_4_5_PREVIEW,
1365
+ ModelType.GPT_5,
1366
+ ModelType.GPT_5_NANO,
1367
+ ModelType.GPT_5_MINI,
1171
1368
  ModelType.MISTRAL_LARGE,
1172
1369
  ModelType.MISTRAL_NEMO,
1173
1370
  ModelType.MISTRAL_PIXTRAL_12B,
1174
1371
  ModelType.MISTRAL_8B,
1175
1372
  ModelType.MISTRAL_3B,
1176
1373
  ModelType.MISTRAL_SMALL_3_2,
1374
+ ModelType.MAGISTRAL_SMALL_1_2,
1177
1375
  ModelType.QWEN_2_5_CODER_32B,
1178
1376
  ModelType.QWEN_2_5_VL_72B,
1179
1377
  ModelType.QWEN_2_5_72B,
@@ -1207,10 +1405,52 @@ class ModelType(UnifiedModelType, Enum):
1207
1405
  ModelType.NETMIND_DEEPSEEK_R1,
1208
1406
  ModelType.NETMIND_DEEPSEEK_V3,
1209
1407
  ModelType.NOVITA_DEEPSEEK_V3_0324,
1210
- ModelType.MISTRAL_MEDIUM_3,
1408
+ ModelType.MISTRAL_MEDIUM_3_1,
1409
+ ModelType.MAGISTRAL_MEDIUM_1_2,
1211
1410
  ModelType.ERNIE_4_5_TURBO_128K,
1212
1411
  ModelType.DEEPSEEK_V3,
1213
1412
  ModelType.MOONSHOT_KIMI_K2,
1413
+ ModelType.NEBIUS_GLM_4_5,
1414
+ ModelType.NEBIUS_DEEPSEEK_V3,
1415
+ ModelType.NEBIUS_DEEPSEEK_R1,
1416
+ ModelType.NEBIUS_GPT_OSS_120B,
1417
+ ModelType.NEBIUS_GPT_OSS_20B,
1418
+ ModelType.COMETAPI_GPT_5_CHAT_LATEST,
1419
+ ModelType.COMETAPI_CHATGPT_4O_LATEST,
1420
+ ModelType.COMETAPI_GPT_5_MINI,
1421
+ ModelType.COMETAPI_GPT_5_NANO,
1422
+ ModelType.COMETAPI_GPT_5,
1423
+ ModelType.COMETAPI_GPT_4_1,
1424
+ ModelType.COMETAPI_GPT_4O_MINI,
1425
+ ModelType.COMETAPI_O4_MINI_2025_04_16,
1426
+ ModelType.COMETAPI_O3_PRO_2025_06_10,
1427
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805,
1428
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805_THINKING,
1429
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514,
1430
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514_THINKING,
1431
+ ModelType.COMETAPI_CLAUDE_3_7_SONNET_LATEST,
1432
+ ModelType.COMETAPI_CLAUDE_3_5_HAIKU_LATEST,
1433
+ ModelType.COMETAPI_GEMINI_2_5_PRO,
1434
+ ModelType.COMETAPI_GEMINI_2_5_FLASH,
1435
+ ModelType.COMETAPI_GEMINI_2_5_FLASH_LITE,
1436
+ ModelType.COMETAPI_GEMINI_2_0_FLASH,
1437
+ ModelType.COMETAPI_GROK_4_0709,
1438
+ ModelType.COMETAPI_GROK_3,
1439
+ ModelType.COMETAPI_GROK_3_MINI,
1440
+ ModelType.COMETAPI_GROK_2_IMAGE_1212,
1441
+ ModelType.COMETAPI_DEEPSEEK_V3_1,
1442
+ ModelType.COMETAPI_DEEPSEEK_V3,
1443
+ ModelType.COMETAPI_DEEPSEEK_R1_0528,
1444
+ ModelType.COMETAPI_DEEPSEEK_CHAT,
1445
+ ModelType.COMETAPI_DEEPSEEK_REASONER,
1446
+ ModelType.COMETAPI_QWEN3_30B_A3B,
1447
+ ModelType.COMETAPI_QWEN3_CODER_PLUS_2025_07_22,
1448
+ ModelType.SILICONFLOW_THUDM_GLM_4_9B_CHAT,
1449
+ ModelType.SILICONFLOW_PRO_THUDM_GLM_4_9B_CHAT,
1450
+ ModelType.SILICONFLOW_THUDM_GLM_Z1_32B_0414,
1451
+ ModelType.SILICONFLOW_THUDM_GLM_4_32B_0414,
1452
+ ModelType.SILICONFLOW_THUDM_GLM_Z1_RUMINATION_32B_0414,
1453
+ ModelType.SILICONFLOW_THUDM_GLM_4_9B_0414,
1214
1454
  }:
1215
1455
  return 128_000
1216
1456
  elif self in {
@@ -1245,6 +1485,7 @@ class ModelType(UnifiedModelType, Enum):
1245
1485
  ModelType.NOVITA_LLAMA_4_SCOUT_17B,
1246
1486
  ModelType.NOVITA_LLAMA_3_3_70B,
1247
1487
  ModelType.NOVITA_MISTRAL_NEMO,
1488
+ ModelType.NEBIUS_LLAMA_3_1_70B,
1248
1489
  }:
1249
1490
  return 131_072
1250
1491
  elif self in {
@@ -1258,8 +1499,10 @@ class ModelType(UnifiedModelType, Enum):
1258
1499
  ModelType.CLAUDE_3_5_SONNET,
1259
1500
  ModelType.CLAUDE_3_5_HAIKU,
1260
1501
  ModelType.CLAUDE_3_7_SONNET,
1502
+ ModelType.CLAUDE_SONNET_4_5,
1261
1503
  ModelType.CLAUDE_SONNET_4,
1262
1504
  ModelType.CLAUDE_OPUS_4,
1505
+ ModelType.CLAUDE_OPUS_4_1,
1263
1506
  ModelType.YI_MEDIUM_200K,
1264
1507
  ModelType.AWS_CLAUDE_3_5_SONNET,
1265
1508
  ModelType.AWS_CLAUDE_3_HAIKU,
@@ -1267,6 +1510,7 @@ class ModelType(UnifiedModelType, Enum):
1267
1510
  ModelType.AWS_CLAUDE_3_7_SONNET,
1268
1511
  ModelType.AWS_CLAUDE_SONNET_4,
1269
1512
  ModelType.AWS_CLAUDE_OPUS_4,
1513
+ ModelType.AWS_CLAUDE_OPUS_4_1,
1270
1514
  ModelType.O4_MINI,
1271
1515
  ModelType.O3,
1272
1516
  }:
@@ -1274,6 +1518,7 @@ class ModelType(UnifiedModelType, Enum):
1274
1518
  elif self in {
1275
1519
  ModelType.MISTRAL_CODESTRAL_MAMBA,
1276
1520
  ModelType.OPENROUTER_LLAMA_4_MAVERICK_FREE,
1521
+ ModelType.OPENROUTER_HORIZON_ALPHA,
1277
1522
  }:
1278
1523
  return 256_000
1279
1524
 
@@ -1287,6 +1532,7 @@ class ModelType(UnifiedModelType, Enum):
1287
1532
  }:
1288
1533
  return 512_000
1289
1534
  elif self in {
1535
+ ModelType.GEMINI_3_PRO,
1290
1536
  ModelType.GEMINI_2_5_FLASH,
1291
1537
  ModelType.GEMINI_2_5_PRO,
1292
1538
  ModelType.GEMINI_2_0_FLASH,
@@ -1300,21 +1546,27 @@ class ModelType(UnifiedModelType, Enum):
1300
1546
  ModelType.GLM_4_LONG,
1301
1547
  ModelType.TOGETHER_LLAMA_4_MAVERICK,
1302
1548
  ModelType.OPENROUTER_LLAMA_4_MAVERICK,
1549
+ ModelType.AMD_GPT4,
1303
1550
  ModelType.GPT_4_1,
1304
1551
  ModelType.GPT_4_1_MINI,
1305
1552
  ModelType.GPT_4_1_NANO,
1306
1553
  ModelType.NOVITA_LLAMA_4_MAVERICK_17B,
1307
1554
  }:
1308
1555
  return 1_048_576
1556
+ elif self in {
1557
+ ModelType.QWEN_3_CODER_PLUS,
1558
+ }:
1559
+ return 1_000_000
1309
1560
  elif self in {
1310
1561
  ModelType.QWEN_LONG,
1311
1562
  ModelType.TOGETHER_LLAMA_4_SCOUT,
1312
1563
  }:
1313
1564
  return 10_000_000
1314
1565
  elif self in {
1315
- ModelType.MAGISTRAL_MEDIUM,
1566
+ ModelType.MINIMAX_M2,
1567
+ ModelType.MINIMAX_M2_STABLE,
1316
1568
  }:
1317
- return 40_000
1569
+ return 32_000
1318
1570
 
1319
1571
  else:
1320
1572
  logger.warning(
@@ -1513,6 +1765,8 @@ class ModelPlatformType(Enum):
1513
1765
  AZURE = "azure"
1514
1766
  ANTHROPIC = "anthropic"
1515
1767
  GROQ = "groq"
1768
+ NEBIUS = "nebius"
1769
+ COMETAPI = "cometapi"
1516
1770
  OPENROUTER = "openrouter"
1517
1771
  OLLAMA = "ollama"
1518
1772
  LITELLM = "litellm"
@@ -1529,6 +1783,7 @@ class ModelPlatformType(Enum):
1529
1783
  COHERE = "cohere"
1530
1784
  YI = "lingyiwanwu"
1531
1785
  QWEN = "tongyi-qianwen"
1786
+ AMD = "amd"
1532
1787
  NVIDIA = "nvidia"
1533
1788
  DEEPSEEK = "deepseek"
1534
1789
  PPIO = "ppio"
@@ -1544,6 +1799,8 @@ class ModelPlatformType(Enum):
1544
1799
  WATSONX = "watsonx"
1545
1800
  QIANFAN = "qianfan"
1546
1801
  CRYNUX = "crynux"
1802
+ AIHUBMIX = "aihubmix"
1803
+ MINIMAX = "minimax"
1547
1804
 
1548
1805
  @classmethod
1549
1806
  def from_name(cls, name):
@@ -1724,6 +1981,16 @@ class ModelPlatformType(Enum):
1724
1981
  r"""Returns whether this platform is Crynux."""
1725
1982
  return self is ModelPlatformType.CRYNUX
1726
1983
 
1984
+ @property
1985
+ def is_aihubmix(self) -> bool:
1986
+ r"""Returns whether this platform is AihubMix."""
1987
+ return self is ModelPlatformType.AIHUBMIX
1988
+
1989
+ @property
1990
+ def is_minimax(self) -> bool:
1991
+ r"""Returns whether this platform is Minimax M2."""
1992
+ return self is ModelPlatformType.MINIMAX
1993
+
1727
1994
 
1728
1995
  class AudioModelType(Enum):
1729
1996
  TTS_1 = "tts-1"
@@ -33,7 +33,7 @@ from openai.types.chat.chat_completion_user_message_param import (
33
33
  from openai.types.completion_usage import CompletionUsage
34
34
  from openai.types.chat import ParsedChatCompletion
35
35
  from openai._types import NOT_GIVEN, NotGiven
36
- from openai.types.chat import ChatCompletionMessageToolCall
36
+ from openai.types.chat import ChatCompletionMessageFunctionToolCall
37
37
 
38
38
  __all__ = [
39
39
  "Choice",
@@ -45,7 +45,7 @@ __all__ = [
45
45
  "ChatCompletionUserMessageParam",
46
46
  "ChatCompletionAssistantMessageParam",
47
47
  "ChatCompletionToolMessageParam",
48
- "ChatCompletionMessageToolCall",
48
+ "ChatCompletionMessageFunctionToolCall",
49
49
  "CompletionUsage",
50
50
  "ParsedChatCompletion",
51
51
  "NOT_GIVEN",
@@ -95,6 +95,11 @@ class UnifiedModelType(str):
95
95
  r"""Returns whether the model is a Groq served model."""
96
96
  return True
97
97
 
98
+ @property
99
+ def is_nebius(self) -> bool:
100
+ r"""Returns whether the model is a Nebius AI Studio served model."""
101
+ return True
102
+
98
103
  @property
99
104
  def is_openrouter(self) -> bool:
100
105
  r"""Returns whether the model is a OpenRouter served model."""
@@ -140,6 +145,11 @@ class UnifiedModelType(str):
140
145
  r"""Returns whether the model is a Cohere model."""
141
146
  return True
142
147
 
148
+ @property
149
+ def is_cometapi(self) -> bool:
150
+ r"""Returns whether the model is a CometAPI served model."""
151
+ return True
152
+
143
153
  @property
144
154
  def is_yi(self) -> bool:
145
155
  r"""Returns whether the model is a Yi model."""
@@ -185,6 +195,11 @@ class UnifiedModelType(str):
185
195
  r"""Returns whether the model is a Crynux served model."""
186
196
  return True
187
197
 
198
+ @property
199
+ def is_minimax(self) -> bool:
200
+ r"""Returns whether the model is a Minimax served model."""
201
+ return True
202
+
188
203
  @property
189
204
  def support_native_structured_output(self) -> bool:
190
205
  r"""Returns whether the model supports native structured output."""
camel/utils/commons.py CHANGED
@@ -318,6 +318,8 @@ def api_keys_required(
318
318
  key_way = "https://aimlapi.com/"
319
319
  elif env_var_name == 'COHERE_API_KEY':
320
320
  key_way = "https://cohere.com/"
321
+ elif env_var_name == 'COMETAPI_KEY':
322
+ key_way = "https://api.cometapi.com/console/token"
321
323
  elif env_var_name == 'DEEPSEEK_API_KEY':
322
324
  key_way = "https://www.deepseek.com/"
323
325
  elif env_var_name == 'AZURE_OPENAI_API_KEY':
@@ -354,6 +356,8 @@ def api_keys_required(
354
356
  key_way = "https://www.zhipuai.cn/"
355
357
  elif env_var_name == 'KLAVIS_API_KEY':
356
358
  key_way = "https://www.klavis.ai/docs"
359
+ elif env_var_name == 'XAI_API_KEY':
360
+ key_way = "https://api.x.ai/v1"
357
361
 
358
362
  if missing_keys:
359
363
  raise ValueError(
@@ -1011,14 +1015,32 @@ def with_timeout(timeout=None):
1011
1015
  if effective_timeout is None:
1012
1016
  return func(*args, **kwargs)
1013
1017
 
1014
- # Container to hold the result of the function call
1018
+ # If current thread has a running asyncio event loop, avoid
1019
+ # switching threads to preserve asyncio context (e.g., for
1020
+ # asyncio.create_task). Execute inline without enforcing a
1021
+ # sync timeout to keep event loop semantics intact.
1022
+ try:
1023
+ asyncio.get_running_loop()
1024
+ loop_running = True
1025
+ except RuntimeError:
1026
+ loop_running = False
1027
+
1028
+ if loop_running:
1029
+ return func(*args, **kwargs)
1030
+
1031
+ # Container to hold the result or exception from the function
1032
+ # call
1015
1033
  result_container = []
1034
+ exception_container = []
1016
1035
 
1017
1036
  def target():
1018
- result_container.append(func(*args, **kwargs))
1037
+ try:
1038
+ result_container.append(func(*args, **kwargs))
1039
+ except Exception as e:
1040
+ exception_container.append(e)
1019
1041
 
1020
- # Start the function in a new thread
1021
- thread = threading.Thread(target=target)
1042
+ # Start the function in a new daemon thread
1043
+ thread = threading.Thread(target=target, daemon=True)
1022
1044
  thread.start()
1023
1045
  thread.join(effective_timeout)
1024
1046
 
@@ -1029,7 +1051,16 @@ def with_timeout(timeout=None):
1029
1051
  f"exceeded {effective_timeout} seconds."
1030
1052
  )
1031
1053
  else:
1032
- return result_container[0]
1054
+ # If an exception occurred, re-raise it
1055
+ if exception_container:
1056
+ raise exception_container[0]
1057
+ # Return result if available
1058
+ if result_container:
1059
+ return result_container[0]
1060
+ raise RuntimeError(
1061
+ f"Function `{func.__name__}` completed but produced "
1062
+ "no result or exception."
1063
+ )
1033
1064
 
1034
1065
  return wrapper
1035
1066