camel-ai 0.2.75a5__py3-none-any.whl → 0.2.76__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.

Potentially problematic release.


This version of camel-ai might be problematic. Click here for more details.

Files changed (103) hide show
  1. camel/__init__.py +1 -1
  2. camel/agents/chat_agent.py +1148 -298
  3. camel/agents/mcp_agent.py +30 -27
  4. camel/configs/__init__.py +9 -0
  5. camel/configs/amd_config.py +70 -0
  6. camel/configs/cometapi_config.py +104 -0
  7. camel/configs/nebius_config.py +103 -0
  8. camel/data_collectors/alpaca_collector.py +15 -6
  9. camel/environments/tic_tac_toe.py +1 -1
  10. camel/interpreters/__init__.py +2 -0
  11. camel/interpreters/docker/Dockerfile +3 -12
  12. camel/interpreters/microsandbox_interpreter.py +395 -0
  13. camel/loaders/__init__.py +11 -2
  14. camel/loaders/chunkr_reader.py +9 -0
  15. camel/memories/__init__.py +2 -1
  16. camel/memories/agent_memories.py +3 -1
  17. camel/memories/blocks/chat_history_block.py +21 -3
  18. camel/memories/records.py +88 -8
  19. camel/messages/base.py +127 -34
  20. camel/models/__init__.py +6 -0
  21. camel/models/amd_model.py +101 -0
  22. camel/models/azure_openai_model.py +0 -6
  23. camel/models/base_model.py +30 -0
  24. camel/models/cometapi_model.py +83 -0
  25. camel/models/model_factory.py +6 -0
  26. camel/models/nebius_model.py +83 -0
  27. camel/models/ollama_model.py +3 -3
  28. camel/models/openai_compatible_model.py +0 -6
  29. camel/models/openai_model.py +0 -6
  30. camel/models/zhipuai_model.py +61 -2
  31. camel/parsers/__init__.py +18 -0
  32. camel/parsers/mcp_tool_call_parser.py +176 -0
  33. camel/retrievers/auto_retriever.py +1 -0
  34. camel/runtimes/daytona_runtime.py +11 -12
  35. camel/societies/workforce/prompts.py +131 -50
  36. camel/societies/workforce/single_agent_worker.py +434 -49
  37. camel/societies/workforce/structured_output_handler.py +30 -18
  38. camel/societies/workforce/task_channel.py +163 -27
  39. camel/societies/workforce/utils.py +105 -12
  40. camel/societies/workforce/workforce.py +1357 -314
  41. camel/societies/workforce/workforce_logger.py +24 -5
  42. camel/storages/key_value_storages/json.py +15 -2
  43. camel/storages/object_storages/google_cloud.py +1 -1
  44. camel/storages/vectordb_storages/oceanbase.py +10 -11
  45. camel/storages/vectordb_storages/tidb.py +8 -6
  46. camel/tasks/task.py +4 -3
  47. camel/toolkits/__init__.py +18 -5
  48. camel/toolkits/aci_toolkit.py +45 -0
  49. camel/toolkits/code_execution.py +28 -1
  50. camel/toolkits/context_summarizer_toolkit.py +684 -0
  51. camel/toolkits/dingtalk.py +1135 -0
  52. camel/toolkits/edgeone_pages_mcp_toolkit.py +11 -31
  53. camel/toolkits/{file_write_toolkit.py → file_toolkit.py} +194 -34
  54. camel/toolkits/function_tool.py +6 -1
  55. camel/toolkits/github_toolkit.py +104 -17
  56. camel/toolkits/google_drive_mcp_toolkit.py +12 -31
  57. camel/toolkits/hybrid_browser_toolkit/config_loader.py +12 -0
  58. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +79 -2
  59. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +95 -59
  60. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  61. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +5 -612
  62. camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -1
  63. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +619 -95
  64. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +7 -2
  65. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +115 -219
  66. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  67. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  68. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  69. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +1 -0
  70. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +39 -6
  71. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +412 -133
  72. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +9 -5
  73. camel/toolkits/{openai_image_toolkit.py → image_generation_toolkit.py} +98 -31
  74. camel/toolkits/markitdown_toolkit.py +27 -1
  75. camel/toolkits/math_toolkit.py +64 -10
  76. camel/toolkits/mcp_toolkit.py +348 -348
  77. camel/toolkits/message_integration.py +3 -0
  78. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  79. camel/toolkits/note_taking_toolkit.py +18 -8
  80. camel/toolkits/notion_mcp_toolkit.py +16 -26
  81. camel/toolkits/origene_mcp_toolkit.py +8 -49
  82. camel/toolkits/playwright_mcp_toolkit.py +12 -31
  83. camel/toolkits/resend_toolkit.py +168 -0
  84. camel/toolkits/search_toolkit.py +13 -2
  85. camel/toolkits/slack_toolkit.py +50 -1
  86. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  87. camel/toolkits/terminal_toolkit/terminal_toolkit.py +924 -0
  88. camel/toolkits/terminal_toolkit/utils.py +532 -0
  89. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  90. camel/toolkits/video_analysis_toolkit.py +17 -11
  91. camel/toolkits/wechat_official_toolkit.py +483 -0
  92. camel/types/enums.py +155 -1
  93. camel/types/unified_model_type.py +10 -0
  94. camel/utils/commons.py +17 -0
  95. camel/utils/context_utils.py +804 -0
  96. camel/utils/mcp.py +136 -2
  97. camel/utils/token_counting.py +25 -17
  98. {camel_ai-0.2.75a5.dist-info → camel_ai-0.2.76.dist-info}/METADATA +158 -67
  99. {camel_ai-0.2.75a5.dist-info → camel_ai-0.2.76.dist-info}/RECORD +101 -80
  100. camel/loaders/pandas_reader.py +0 -368
  101. camel/toolkits/terminal_toolkit.py +0 -1788
  102. {camel_ai-0.2.75a5.dist-info → camel_ai-0.2.76.dist-info}/WHEEL +0 -0
  103. {camel_ai-0.2.75a5.dist-info → camel_ai-0.2.76.dist-info}/licenses/LICENSE +0 -0
camel/types/enums.py CHANGED
@@ -30,7 +30,7 @@ class RoleType(Enum):
30
30
 
31
31
 
32
32
  class ModelType(UnifiedModelType, Enum):
33
- DEFAULT = os.getenv("DEFAULT_MODEL_TYPE", "gpt-5-mini")
33
+ DEFAULT = os.getenv("DEFAULT_MODEL_TYPE", "gpt-4.1-mini-2025-04-14")
34
34
 
35
35
  GPT_3_5_TURBO = "gpt-3.5-turbo"
36
36
  GPT_4 = "gpt-4"
@@ -64,6 +64,8 @@ class ModelType(UnifiedModelType, Enum):
64
64
  AWS_CLAUDE_OPUS_4 = "anthropic.claude-opus-4-20250514-v1:0"
65
65
  AWS_CLAUDE_OPUS_4_1 = "anthropic.claude-opus-4-1-20250805-v1:0"
66
66
 
67
+ AMD_GPT4 = "dvue-aoai-001-gpt-4.1"
68
+
67
69
  GLM_4 = "glm-4"
68
70
  GLM_4V = "glm-4v"
69
71
  GLM_4V_FLASH = "glm-4v-flash"
@@ -87,6 +89,51 @@ class ModelType(UnifiedModelType, Enum):
87
89
  GROQ_MIXTRAL_8_7B = "mixtral-8x7b-32768"
88
90
  GROQ_GEMMA_2_9B_IT = "gemma2-9b-it"
89
91
 
92
+ # Nebius AI Studio platform models
93
+ NEBIUS_GPT_OSS_120B = "gpt-oss-120b"
94
+ NEBIUS_GPT_OSS_20B = "gpt-oss-20b"
95
+ NEBIUS_GLM_4_5 = "GLM-4.5"
96
+ NEBIUS_DEEPSEEK_V3 = "deepseek-ai/DeepSeek-V3"
97
+ NEBIUS_DEEPSEEK_R1 = "deepseek-ai/DeepSeek-R1"
98
+ NEBIUS_LLAMA_3_1_70B = "meta-llama/Meta-Llama-3.1-70B-Instruct"
99
+ NEBIUS_MISTRAL_7B_INSTRUCT = "mistralai/Mistral-7B-Instruct-v0.3"
100
+
101
+ # CometAPI platform models
102
+ COMETAPI_GPT_5_CHAT_LATEST = "gpt-5-chat-latest"
103
+ COMETAPI_CHATGPT_4O_LATEST = "chatgpt-4o-latest"
104
+ COMETAPI_GPT_5_MINI = "gpt-5-mini"
105
+ COMETAPI_GPT_5_NANO = "gpt-5-nano"
106
+ COMETAPI_GPT_5 = "gpt-5"
107
+ COMETAPI_GPT_4_1 = "gpt-4.1"
108
+ COMETAPI_GPT_4O_MINI = "gpt-4o-mini"
109
+ COMETAPI_O4_MINI_2025_04_16 = "o4-mini-2025-04-16"
110
+ COMETAPI_O3_PRO_2025_06_10 = "o3-pro-2025-06-10"
111
+ COMETAPI_CLAUDE_OPUS_4_1_20250805 = "claude-opus-4-1-20250805"
112
+ COMETAPI_CLAUDE_OPUS_4_1_20250805_THINKING = (
113
+ "claude-opus-4-1-20250805-thinking"
114
+ )
115
+ COMETAPI_CLAUDE_SONNET_4_20250514 = "claude-sonnet-4-20250514"
116
+ COMETAPI_CLAUDE_SONNET_4_20250514_THINKING = (
117
+ "claude-sonnet-4-20250514-thinking"
118
+ )
119
+ COMETAPI_CLAUDE_3_7_SONNET_LATEST = "claude-3-7-sonnet-latest"
120
+ COMETAPI_CLAUDE_3_5_HAIKU_LATEST = "claude-3-5-haiku-latest"
121
+ COMETAPI_GEMINI_2_5_PRO = "gemini-2.5-pro"
122
+ COMETAPI_GEMINI_2_5_FLASH = "gemini-2.5-flash"
123
+ COMETAPI_GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite"
124
+ COMETAPI_GEMINI_2_0_FLASH = "gemini-2.0-flash"
125
+ COMETAPI_GROK_4_0709 = "grok-4-0709"
126
+ COMETAPI_GROK_3 = "grok-3"
127
+ COMETAPI_GROK_3_MINI = "grok-3-mini"
128
+ COMETAPI_GROK_2_IMAGE_1212 = "grok-2-image-1212"
129
+ COMETAPI_DEEPSEEK_V3_1 = "deepseek-v3.1"
130
+ COMETAPI_DEEPSEEK_V3 = "deepseek-v3"
131
+ COMETAPI_DEEPSEEK_R1_0528 = "deepseek-r1-0528"
132
+ COMETAPI_DEEPSEEK_CHAT = "deepseek-chat"
133
+ COMETAPI_DEEPSEEK_REASONER = "deepseek-reasoner"
134
+ COMETAPI_QWEN3_30B_A3B = "qwen3-30b-a3b"
135
+ COMETAPI_QWEN3_CODER_PLUS_2025_07_22 = "qwen3-coder-plus-2025-07-22"
136
+
90
137
  # OpenRouter models
91
138
  OPENROUTER_LLAMA_3_1_405B = "meta-llama/llama-3.1-405b-instruct"
92
139
  OPENROUTER_LLAMA_3_1_70B = "meta-llama/llama-3.1-70b-instruct"
@@ -160,6 +207,7 @@ class ModelType(UnifiedModelType, Enum):
160
207
  CLAUDE_3_5_SONNET = "claude-3-5-sonnet-latest"
161
208
  CLAUDE_3_5_HAIKU = "claude-3-5-haiku-latest"
162
209
  CLAUDE_3_7_SONNET = "claude-3-7-sonnet-latest"
210
+ CLAUDE_SONNET_4_5 = "claude-sonnet-4-5"
163
211
  CLAUDE_SONNET_4 = "claude-sonnet-4-20250514"
164
212
  CLAUDE_OPUS_4 = "claude-opus-4-20250514"
165
213
  CLAUDE_OPUS_4_1 = "claude-opus-4-1-20250805"
@@ -215,6 +263,8 @@ class ModelType(UnifiedModelType, Enum):
215
263
  MISTRAL_PIXTRAL_12B = "pixtral-12b-2409"
216
264
  MISTRAL_MEDIUM_3_1 = "mistral-medium-2508"
217
265
  MISTRAL_SMALL_3_2 = "mistral-small-2506"
266
+ MAGISTRAL_SMALL_1_2 = "magistral-small-1.2"
267
+ MAGISTRAL_MEDIUM_1_2 = "magistral-medium-1.2"
218
268
 
219
269
  # Reka models
220
270
  REKA_CORE = "reka-core"
@@ -507,6 +557,13 @@ class ModelType(UnifiedModelType, Enum):
507
557
  ModelType.O3,
508
558
  }
509
559
 
560
+ @property
561
+ def is_amd(self) -> bool:
562
+ r"""Returns whether this type of models is a AMD model."""
563
+ return self in {
564
+ ModelType.AMD_GPT4,
565
+ }
566
+
510
567
  @property
511
568
  def is_aws_bedrock(self) -> bool:
512
569
  r"""Returns whether this type of models is an AWS Bedrock model."""
@@ -585,6 +642,7 @@ class ModelType(UnifiedModelType, Enum):
585
642
  ModelType.CLAUDE_3_5_SONNET,
586
643
  ModelType.CLAUDE_3_5_HAIKU,
587
644
  ModelType.CLAUDE_3_7_SONNET,
645
+ ModelType.CLAUDE_SONNET_4_5,
588
646
  ModelType.CLAUDE_SONNET_4,
589
647
  ModelType.CLAUDE_OPUS_4,
590
648
  ModelType.CLAUDE_OPUS_4_1,
@@ -603,6 +661,56 @@ class ModelType(UnifiedModelType, Enum):
603
661
  ModelType.GROQ_GEMMA_2_9B_IT,
604
662
  }
605
663
 
664
+ @property
665
+ def is_nebius(self) -> bool:
666
+ r"""Returns whether this type of models is served by Nebius AI
667
+ Studio."""
668
+ return self in {
669
+ ModelType.NEBIUS_GPT_OSS_120B,
670
+ ModelType.NEBIUS_GPT_OSS_20B,
671
+ ModelType.NEBIUS_GLM_4_5,
672
+ ModelType.NEBIUS_DEEPSEEK_V3,
673
+ ModelType.NEBIUS_DEEPSEEK_R1,
674
+ ModelType.NEBIUS_LLAMA_3_1_70B,
675
+ ModelType.NEBIUS_MISTRAL_7B_INSTRUCT,
676
+ }
677
+
678
+ @property
679
+ def is_cometapi(self) -> bool:
680
+ r"""Returns whether this type of models is served by CometAPI."""
681
+ return self in {
682
+ ModelType.COMETAPI_GPT_5_CHAT_LATEST,
683
+ ModelType.COMETAPI_CHATGPT_4O_LATEST,
684
+ ModelType.COMETAPI_GPT_5_MINI,
685
+ ModelType.COMETAPI_GPT_5_NANO,
686
+ ModelType.COMETAPI_GPT_5,
687
+ ModelType.COMETAPI_GPT_4_1,
688
+ ModelType.COMETAPI_GPT_4O_MINI,
689
+ ModelType.COMETAPI_O4_MINI_2025_04_16,
690
+ ModelType.COMETAPI_O3_PRO_2025_06_10,
691
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805,
692
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805_THINKING,
693
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514,
694
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514_THINKING,
695
+ ModelType.COMETAPI_CLAUDE_3_7_SONNET_LATEST,
696
+ ModelType.COMETAPI_CLAUDE_3_5_HAIKU_LATEST,
697
+ ModelType.COMETAPI_GEMINI_2_5_PRO,
698
+ ModelType.COMETAPI_GEMINI_2_5_FLASH,
699
+ ModelType.COMETAPI_GEMINI_2_5_FLASH_LITE,
700
+ ModelType.COMETAPI_GEMINI_2_0_FLASH,
701
+ ModelType.COMETAPI_GROK_4_0709,
702
+ ModelType.COMETAPI_GROK_3,
703
+ ModelType.COMETAPI_GROK_3_MINI,
704
+ ModelType.COMETAPI_GROK_2_IMAGE_1212,
705
+ ModelType.COMETAPI_DEEPSEEK_V3_1,
706
+ ModelType.COMETAPI_DEEPSEEK_V3,
707
+ ModelType.COMETAPI_DEEPSEEK_R1_0528,
708
+ ModelType.COMETAPI_DEEPSEEK_CHAT,
709
+ ModelType.COMETAPI_DEEPSEEK_REASONER,
710
+ ModelType.COMETAPI_QWEN3_30B_A3B,
711
+ ModelType.COMETAPI_QWEN3_CODER_PLUS_2025_07_22,
712
+ }
713
+
606
714
  @property
607
715
  def is_openrouter(self) -> bool:
608
716
  r"""Returns whether this type of models is served by OpenRouter."""
@@ -664,6 +772,8 @@ class ModelType(UnifiedModelType, Enum):
664
772
  ModelType.MISTRAL_3B,
665
773
  ModelType.MISTRAL_MEDIUM_3_1,
666
774
  ModelType.MISTRAL_SMALL_3_2,
775
+ ModelType.MAGISTRAL_SMALL_1_2,
776
+ ModelType.MAGISTRAL_MEDIUM_1_2,
667
777
  }
668
778
 
669
779
  @property
@@ -1138,6 +1248,7 @@ class ModelType(UnifiedModelType, Enum):
1138
1248
  ModelType.NOVITA_MISTRAL_7B,
1139
1249
  ModelType.NOVITA_LLAMA_3_2_11B_VISION,
1140
1250
  ModelType.NOVITA_LLAMA_3_2_3B,
1251
+ ModelType.NEBIUS_MISTRAL_7B_INSTRUCT,
1141
1252
  }:
1142
1253
  return 32_768
1143
1254
  elif self in {
@@ -1190,6 +1301,7 @@ class ModelType(UnifiedModelType, Enum):
1190
1301
  ModelType.MISTRAL_8B,
1191
1302
  ModelType.MISTRAL_3B,
1192
1303
  ModelType.MISTRAL_SMALL_3_2,
1304
+ ModelType.MAGISTRAL_SMALL_1_2,
1193
1305
  ModelType.QWEN_2_5_CODER_32B,
1194
1306
  ModelType.QWEN_2_5_VL_72B,
1195
1307
  ModelType.QWEN_2_5_72B,
@@ -1224,9 +1336,45 @@ class ModelType(UnifiedModelType, Enum):
1224
1336
  ModelType.NETMIND_DEEPSEEK_V3,
1225
1337
  ModelType.NOVITA_DEEPSEEK_V3_0324,
1226
1338
  ModelType.MISTRAL_MEDIUM_3_1,
1339
+ ModelType.MAGISTRAL_MEDIUM_1_2,
1227
1340
  ModelType.ERNIE_4_5_TURBO_128K,
1228
1341
  ModelType.DEEPSEEK_V3,
1229
1342
  ModelType.MOONSHOT_KIMI_K2,
1343
+ ModelType.NEBIUS_GLM_4_5,
1344
+ ModelType.NEBIUS_DEEPSEEK_V3,
1345
+ ModelType.NEBIUS_DEEPSEEK_R1,
1346
+ ModelType.NEBIUS_GPT_OSS_120B,
1347
+ ModelType.NEBIUS_GPT_OSS_20B,
1348
+ ModelType.COMETAPI_GPT_5_CHAT_LATEST,
1349
+ ModelType.COMETAPI_CHATGPT_4O_LATEST,
1350
+ ModelType.COMETAPI_GPT_5_MINI,
1351
+ ModelType.COMETAPI_GPT_5_NANO,
1352
+ ModelType.COMETAPI_GPT_5,
1353
+ ModelType.COMETAPI_GPT_4_1,
1354
+ ModelType.COMETAPI_GPT_4O_MINI,
1355
+ ModelType.COMETAPI_O4_MINI_2025_04_16,
1356
+ ModelType.COMETAPI_O3_PRO_2025_06_10,
1357
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805,
1358
+ ModelType.COMETAPI_CLAUDE_OPUS_4_1_20250805_THINKING,
1359
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514,
1360
+ ModelType.COMETAPI_CLAUDE_SONNET_4_20250514_THINKING,
1361
+ ModelType.COMETAPI_CLAUDE_3_7_SONNET_LATEST,
1362
+ ModelType.COMETAPI_CLAUDE_3_5_HAIKU_LATEST,
1363
+ ModelType.COMETAPI_GEMINI_2_5_PRO,
1364
+ ModelType.COMETAPI_GEMINI_2_5_FLASH,
1365
+ ModelType.COMETAPI_GEMINI_2_5_FLASH_LITE,
1366
+ ModelType.COMETAPI_GEMINI_2_0_FLASH,
1367
+ ModelType.COMETAPI_GROK_4_0709,
1368
+ ModelType.COMETAPI_GROK_3,
1369
+ ModelType.COMETAPI_GROK_3_MINI,
1370
+ ModelType.COMETAPI_GROK_2_IMAGE_1212,
1371
+ ModelType.COMETAPI_DEEPSEEK_V3_1,
1372
+ ModelType.COMETAPI_DEEPSEEK_V3,
1373
+ ModelType.COMETAPI_DEEPSEEK_R1_0528,
1374
+ ModelType.COMETAPI_DEEPSEEK_CHAT,
1375
+ ModelType.COMETAPI_DEEPSEEK_REASONER,
1376
+ ModelType.COMETAPI_QWEN3_30B_A3B,
1377
+ ModelType.COMETAPI_QWEN3_CODER_PLUS_2025_07_22,
1230
1378
  }:
1231
1379
  return 128_000
1232
1380
  elif self in {
@@ -1261,6 +1409,7 @@ class ModelType(UnifiedModelType, Enum):
1261
1409
  ModelType.NOVITA_LLAMA_4_SCOUT_17B,
1262
1410
  ModelType.NOVITA_LLAMA_3_3_70B,
1263
1411
  ModelType.NOVITA_MISTRAL_NEMO,
1412
+ ModelType.NEBIUS_LLAMA_3_1_70B,
1264
1413
  }:
1265
1414
  return 131_072
1266
1415
  elif self in {
@@ -1274,6 +1423,7 @@ class ModelType(UnifiedModelType, Enum):
1274
1423
  ModelType.CLAUDE_3_5_SONNET,
1275
1424
  ModelType.CLAUDE_3_5_HAIKU,
1276
1425
  ModelType.CLAUDE_3_7_SONNET,
1426
+ ModelType.CLAUDE_SONNET_4_5,
1277
1427
  ModelType.CLAUDE_SONNET_4,
1278
1428
  ModelType.CLAUDE_OPUS_4,
1279
1429
  ModelType.CLAUDE_OPUS_4_1,
@@ -1319,6 +1469,7 @@ class ModelType(UnifiedModelType, Enum):
1319
1469
  ModelType.GLM_4_LONG,
1320
1470
  ModelType.TOGETHER_LLAMA_4_MAVERICK,
1321
1471
  ModelType.OPENROUTER_LLAMA_4_MAVERICK,
1472
+ ModelType.AMD_GPT4,
1322
1473
  ModelType.GPT_4_1,
1323
1474
  ModelType.GPT_4_1_MINI,
1324
1475
  ModelType.GPT_4_1_NANO,
@@ -1532,6 +1683,8 @@ class ModelPlatformType(Enum):
1532
1683
  AZURE = "azure"
1533
1684
  ANTHROPIC = "anthropic"
1534
1685
  GROQ = "groq"
1686
+ NEBIUS = "nebius"
1687
+ COMETAPI = "cometapi"
1535
1688
  OPENROUTER = "openrouter"
1536
1689
  OLLAMA = "ollama"
1537
1690
  LITELLM = "litellm"
@@ -1548,6 +1701,7 @@ class ModelPlatformType(Enum):
1548
1701
  COHERE = "cohere"
1549
1702
  YI = "lingyiwanwu"
1550
1703
  QWEN = "tongyi-qianwen"
1704
+ AMD = "amd"
1551
1705
  NVIDIA = "nvidia"
1552
1706
  DEEPSEEK = "deepseek"
1553
1707
  PPIO = "ppio"
@@ -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."""
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,6 +1015,19 @@ def with_timeout(timeout=None):
1011
1015
  if effective_timeout is None:
1012
1016
  return func(*args, **kwargs)
1013
1017
 
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
+
1014
1031
  # Container to hold the result of the function call
1015
1032
  result_container = []
1016
1033