camel-ai 0.2.75a6__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 (97) hide show
  1. camel/__init__.py +1 -1
  2. camel/agents/chat_agent.py +1001 -205
  3. camel/agents/mcp_agent.py +30 -27
  4. camel/configs/__init__.py +6 -0
  5. camel/configs/amd_config.py +70 -0
  6. camel/configs/cometapi_config.py +104 -0
  7. camel/data_collectors/alpaca_collector.py +15 -6
  8. camel/environments/tic_tac_toe.py +1 -1
  9. camel/interpreters/__init__.py +2 -0
  10. camel/interpreters/docker/Dockerfile +3 -12
  11. camel/interpreters/microsandbox_interpreter.py +395 -0
  12. camel/loaders/__init__.py +11 -2
  13. camel/loaders/chunkr_reader.py +9 -0
  14. camel/memories/__init__.py +2 -1
  15. camel/memories/agent_memories.py +3 -1
  16. camel/memories/blocks/chat_history_block.py +21 -3
  17. camel/memories/records.py +88 -8
  18. camel/messages/base.py +127 -34
  19. camel/models/__init__.py +4 -0
  20. camel/models/amd_model.py +101 -0
  21. camel/models/azure_openai_model.py +0 -6
  22. camel/models/base_model.py +30 -0
  23. camel/models/cometapi_model.py +83 -0
  24. camel/models/model_factory.py +4 -0
  25. camel/models/openai_compatible_model.py +0 -6
  26. camel/models/openai_model.py +0 -6
  27. camel/models/zhipuai_model.py +61 -2
  28. camel/parsers/__init__.py +18 -0
  29. camel/parsers/mcp_tool_call_parser.py +176 -0
  30. camel/retrievers/auto_retriever.py +1 -0
  31. camel/runtimes/daytona_runtime.py +11 -12
  32. camel/societies/workforce/prompts.py +131 -50
  33. camel/societies/workforce/single_agent_worker.py +434 -49
  34. camel/societies/workforce/structured_output_handler.py +30 -18
  35. camel/societies/workforce/task_channel.py +43 -0
  36. camel/societies/workforce/utils.py +105 -12
  37. camel/societies/workforce/workforce.py +1322 -311
  38. camel/societies/workforce/workforce_logger.py +24 -5
  39. camel/storages/key_value_storages/json.py +15 -2
  40. camel/storages/object_storages/google_cloud.py +1 -1
  41. camel/storages/vectordb_storages/oceanbase.py +10 -11
  42. camel/storages/vectordb_storages/tidb.py +8 -6
  43. camel/tasks/task.py +4 -3
  44. camel/toolkits/__init__.py +18 -5
  45. camel/toolkits/aci_toolkit.py +45 -0
  46. camel/toolkits/code_execution.py +28 -1
  47. camel/toolkits/context_summarizer_toolkit.py +684 -0
  48. camel/toolkits/dingtalk.py +1135 -0
  49. camel/toolkits/edgeone_pages_mcp_toolkit.py +11 -31
  50. camel/toolkits/{file_write_toolkit.py → file_toolkit.py} +194 -34
  51. camel/toolkits/function_tool.py +6 -1
  52. camel/toolkits/google_drive_mcp_toolkit.py +12 -31
  53. camel/toolkits/hybrid_browser_toolkit/config_loader.py +12 -0
  54. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +79 -2
  55. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +95 -59
  56. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  57. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +5 -612
  58. camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -1
  59. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +619 -95
  60. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +7 -2
  61. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +115 -219
  62. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  63. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  64. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  65. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +1 -0
  66. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +39 -6
  67. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +405 -131
  68. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +9 -5
  69. camel/toolkits/{openai_image_toolkit.py → image_generation_toolkit.py} +98 -31
  70. camel/toolkits/markitdown_toolkit.py +27 -1
  71. camel/toolkits/mcp_toolkit.py +348 -348
  72. camel/toolkits/message_integration.py +3 -0
  73. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  74. camel/toolkits/note_taking_toolkit.py +18 -8
  75. camel/toolkits/notion_mcp_toolkit.py +16 -26
  76. camel/toolkits/origene_mcp_toolkit.py +8 -49
  77. camel/toolkits/playwright_mcp_toolkit.py +12 -31
  78. camel/toolkits/resend_toolkit.py +168 -0
  79. camel/toolkits/slack_toolkit.py +50 -1
  80. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  81. camel/toolkits/terminal_toolkit/terminal_toolkit.py +924 -0
  82. camel/toolkits/terminal_toolkit/utils.py +532 -0
  83. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  84. camel/toolkits/video_analysis_toolkit.py +17 -11
  85. camel/toolkits/wechat_official_toolkit.py +483 -0
  86. camel/types/enums.py +124 -1
  87. camel/types/unified_model_type.py +5 -0
  88. camel/utils/commons.py +17 -0
  89. camel/utils/context_utils.py +804 -0
  90. camel/utils/mcp.py +136 -2
  91. camel/utils/token_counting.py +25 -17
  92. {camel_ai-0.2.75a6.dist-info → camel_ai-0.2.76.dist-info}/METADATA +158 -59
  93. {camel_ai-0.2.75a6.dist-info → camel_ai-0.2.76.dist-info}/RECORD +95 -76
  94. camel/loaders/pandas_reader.py +0 -368
  95. camel/toolkits/terminal_toolkit.py +0 -1788
  96. {camel_ai-0.2.75a6.dist-info → camel_ai-0.2.76.dist-info}/WHEEL +0 -0
  97. {camel_ai-0.2.75a6.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"
@@ -96,6 +98,42 @@ class ModelType(UnifiedModelType, Enum):
96
98
  NEBIUS_LLAMA_3_1_70B = "meta-llama/Meta-Llama-3.1-70B-Instruct"
97
99
  NEBIUS_MISTRAL_7B_INSTRUCT = "mistralai/Mistral-7B-Instruct-v0.3"
98
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
+
99
137
  # OpenRouter models
100
138
  OPENROUTER_LLAMA_3_1_405B = "meta-llama/llama-3.1-405b-instruct"
101
139
  OPENROUTER_LLAMA_3_1_70B = "meta-llama/llama-3.1-70b-instruct"
@@ -169,6 +207,7 @@ class ModelType(UnifiedModelType, Enum):
169
207
  CLAUDE_3_5_SONNET = "claude-3-5-sonnet-latest"
170
208
  CLAUDE_3_5_HAIKU = "claude-3-5-haiku-latest"
171
209
  CLAUDE_3_7_SONNET = "claude-3-7-sonnet-latest"
210
+ CLAUDE_SONNET_4_5 = "claude-sonnet-4-5"
172
211
  CLAUDE_SONNET_4 = "claude-sonnet-4-20250514"
173
212
  CLAUDE_OPUS_4 = "claude-opus-4-20250514"
174
213
  CLAUDE_OPUS_4_1 = "claude-opus-4-1-20250805"
@@ -224,6 +263,8 @@ class ModelType(UnifiedModelType, Enum):
224
263
  MISTRAL_PIXTRAL_12B = "pixtral-12b-2409"
225
264
  MISTRAL_MEDIUM_3_1 = "mistral-medium-2508"
226
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"
227
268
 
228
269
  # Reka models
229
270
  REKA_CORE = "reka-core"
@@ -516,6 +557,13 @@ class ModelType(UnifiedModelType, Enum):
516
557
  ModelType.O3,
517
558
  }
518
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
+
519
567
  @property
520
568
  def is_aws_bedrock(self) -> bool:
521
569
  r"""Returns whether this type of models is an AWS Bedrock model."""
@@ -594,6 +642,7 @@ class ModelType(UnifiedModelType, Enum):
594
642
  ModelType.CLAUDE_3_5_SONNET,
595
643
  ModelType.CLAUDE_3_5_HAIKU,
596
644
  ModelType.CLAUDE_3_7_SONNET,
645
+ ModelType.CLAUDE_SONNET_4_5,
597
646
  ModelType.CLAUDE_SONNET_4,
598
647
  ModelType.CLAUDE_OPUS_4,
599
648
  ModelType.CLAUDE_OPUS_4_1,
@@ -626,6 +675,42 @@ class ModelType(UnifiedModelType, Enum):
626
675
  ModelType.NEBIUS_MISTRAL_7B_INSTRUCT,
627
676
  }
628
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
+
629
714
  @property
630
715
  def is_openrouter(self) -> bool:
631
716
  r"""Returns whether this type of models is served by OpenRouter."""
@@ -687,6 +772,8 @@ class ModelType(UnifiedModelType, Enum):
687
772
  ModelType.MISTRAL_3B,
688
773
  ModelType.MISTRAL_MEDIUM_3_1,
689
774
  ModelType.MISTRAL_SMALL_3_2,
775
+ ModelType.MAGISTRAL_SMALL_1_2,
776
+ ModelType.MAGISTRAL_MEDIUM_1_2,
690
777
  }
691
778
 
692
779
  @property
@@ -1214,6 +1301,7 @@ class ModelType(UnifiedModelType, Enum):
1214
1301
  ModelType.MISTRAL_8B,
1215
1302
  ModelType.MISTRAL_3B,
1216
1303
  ModelType.MISTRAL_SMALL_3_2,
1304
+ ModelType.MAGISTRAL_SMALL_1_2,
1217
1305
  ModelType.QWEN_2_5_CODER_32B,
1218
1306
  ModelType.QWEN_2_5_VL_72B,
1219
1307
  ModelType.QWEN_2_5_72B,
@@ -1248,6 +1336,7 @@ class ModelType(UnifiedModelType, Enum):
1248
1336
  ModelType.NETMIND_DEEPSEEK_V3,
1249
1337
  ModelType.NOVITA_DEEPSEEK_V3_0324,
1250
1338
  ModelType.MISTRAL_MEDIUM_3_1,
1339
+ ModelType.MAGISTRAL_MEDIUM_1_2,
1251
1340
  ModelType.ERNIE_4_5_TURBO_128K,
1252
1341
  ModelType.DEEPSEEK_V3,
1253
1342
  ModelType.MOONSHOT_KIMI_K2,
@@ -1256,6 +1345,36 @@ class ModelType(UnifiedModelType, Enum):
1256
1345
  ModelType.NEBIUS_DEEPSEEK_R1,
1257
1346
  ModelType.NEBIUS_GPT_OSS_120B,
1258
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,
1259
1378
  }:
1260
1379
  return 128_000
1261
1380
  elif self in {
@@ -1304,6 +1423,7 @@ class ModelType(UnifiedModelType, Enum):
1304
1423
  ModelType.CLAUDE_3_5_SONNET,
1305
1424
  ModelType.CLAUDE_3_5_HAIKU,
1306
1425
  ModelType.CLAUDE_3_7_SONNET,
1426
+ ModelType.CLAUDE_SONNET_4_5,
1307
1427
  ModelType.CLAUDE_SONNET_4,
1308
1428
  ModelType.CLAUDE_OPUS_4,
1309
1429
  ModelType.CLAUDE_OPUS_4_1,
@@ -1349,6 +1469,7 @@ class ModelType(UnifiedModelType, Enum):
1349
1469
  ModelType.GLM_4_LONG,
1350
1470
  ModelType.TOGETHER_LLAMA_4_MAVERICK,
1351
1471
  ModelType.OPENROUTER_LLAMA_4_MAVERICK,
1472
+ ModelType.AMD_GPT4,
1352
1473
  ModelType.GPT_4_1,
1353
1474
  ModelType.GPT_4_1_MINI,
1354
1475
  ModelType.GPT_4_1_NANO,
@@ -1563,6 +1684,7 @@ class ModelPlatformType(Enum):
1563
1684
  ANTHROPIC = "anthropic"
1564
1685
  GROQ = "groq"
1565
1686
  NEBIUS = "nebius"
1687
+ COMETAPI = "cometapi"
1566
1688
  OPENROUTER = "openrouter"
1567
1689
  OLLAMA = "ollama"
1568
1690
  LITELLM = "litellm"
@@ -1579,6 +1701,7 @@ class ModelPlatformType(Enum):
1579
1701
  COHERE = "cohere"
1580
1702
  YI = "lingyiwanwu"
1581
1703
  QWEN = "tongyi-qianwen"
1704
+ AMD = "amd"
1582
1705
  NVIDIA = "nvidia"
1583
1706
  DEEPSEEK = "deepseek"
1584
1707
  PPIO = "ppio"
@@ -145,6 +145,11 @@ class UnifiedModelType(str):
145
145
  r"""Returns whether the model is a Cohere model."""
146
146
  return True
147
147
 
148
+ @property
149
+ def is_cometapi(self) -> bool:
150
+ r"""Returns whether the model is a CometAPI served model."""
151
+ return True
152
+
148
153
  @property
149
154
  def is_yi(self) -> bool:
150
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