camel-ai 0.2.37__py3-none-any.whl → 0.2.39__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 (122) hide show
  1. camel/__init__.py +1 -1
  2. camel/agents/chat_agent.py +4 -0
  3. camel/agents/repo_agent.py +2 -2
  4. camel/benchmarks/apibank.py +1 -1
  5. camel/benchmarks/apibench.py +1 -1
  6. camel/configs/__init__.py +3 -0
  7. camel/configs/modelscope_config.py +59 -0
  8. camel/datagen/evol_instruct/__init__.py +20 -0
  9. camel/datagen/evol_instruct/evol_instruct.py +424 -0
  10. camel/datagen/evol_instruct/scorer.py +166 -0
  11. camel/datagen/evol_instruct/templates.py +268 -0
  12. camel/datagen/self_improving_cot.py +1 -1
  13. camel/datasets/__init__.py +2 -0
  14. camel/datasets/base_generator.py +22 -9
  15. camel/datasets/few_shot_generator.py +2 -3
  16. camel/datasets/self_instruct_generator.py +415 -0
  17. camel/embeddings/openai_compatible_embedding.py +13 -5
  18. camel/environments/models.py +10 -4
  19. camel/environments/single_step.py +181 -41
  20. camel/interpreters/docker_interpreter.py +2 -2
  21. camel/interpreters/e2b_interpreter.py +1 -1
  22. camel/interpreters/internal_python_interpreter.py +1 -1
  23. camel/interpreters/subprocess_interpreter.py +1 -1
  24. camel/loaders/__init__.py +2 -2
  25. camel/loaders/{panda_reader.py → pandas_reader.py} +61 -30
  26. camel/loaders/unstructured_io.py +2 -1
  27. camel/memories/blocks/chat_history_block.py +1 -1
  28. camel/memories/context_creators/score_based.py +198 -67
  29. camel/models/__init__.py +2 -0
  30. camel/models/aiml_model.py +9 -3
  31. camel/models/anthropic_model.py +11 -3
  32. camel/models/azure_openai_model.py +9 -3
  33. camel/models/base_audio_model.py +6 -0
  34. camel/models/base_model.py +4 -0
  35. camel/models/deepseek_model.py +9 -3
  36. camel/models/gemini_model.py +9 -3
  37. camel/models/groq_model.py +9 -3
  38. camel/models/internlm_model.py +8 -2
  39. camel/models/model_factory.py +123 -0
  40. camel/models/modelscope_model.py +208 -0
  41. camel/models/moonshot_model.py +8 -2
  42. camel/models/nemotron_model.py +9 -3
  43. camel/models/nvidia_model.py +9 -3
  44. camel/models/ollama_model.py +9 -3
  45. camel/models/openai_audio_models.py +7 -5
  46. camel/models/openai_compatible_model.py +9 -3
  47. camel/models/openai_model.py +58 -5
  48. camel/models/openrouter_model.py +9 -3
  49. camel/models/qwen_model.py +9 -3
  50. camel/models/samba_model.py +9 -3
  51. camel/models/sglang_model.py +11 -4
  52. camel/models/siliconflow_model.py +8 -2
  53. camel/models/stub_model.py +2 -1
  54. camel/models/togetherai_model.py +11 -5
  55. camel/models/vllm_model.py +10 -4
  56. camel/models/yi_model.py +9 -3
  57. camel/models/zhipuai_model.py +11 -5
  58. camel/retrievers/auto_retriever.py +14 -0
  59. camel/retrievers/vector_retriever.py +1 -1
  60. camel/storages/__init__.py +2 -0
  61. camel/storages/graph_storages/neo4j_graph.py +1 -1
  62. camel/storages/vectordb_storages/__init__.py +2 -0
  63. camel/storages/vectordb_storages/base.py +2 -2
  64. camel/storages/vectordb_storages/milvus.py +2 -2
  65. camel/storages/vectordb_storages/qdrant.py +2 -2
  66. camel/storages/vectordb_storages/tidb.py +332 -0
  67. camel/tasks/task.py +2 -2
  68. camel/toolkits/__init__.py +9 -1
  69. camel/toolkits/arxiv_toolkit.py +2 -1
  70. camel/toolkits/ask_news_toolkit.py +11 -3
  71. camel/toolkits/audio_analysis_toolkit.py +2 -0
  72. camel/toolkits/base.py +3 -0
  73. camel/toolkits/browser_toolkit.py +84 -61
  74. camel/toolkits/code_execution.py +3 -1
  75. camel/toolkits/dappier_toolkit.py +2 -1
  76. camel/toolkits/data_commons_toolkit.py +2 -0
  77. camel/toolkits/excel_toolkit.py +2 -0
  78. camel/toolkits/file_write_toolkit.py +2 -0
  79. camel/toolkits/github_toolkit.py +6 -4
  80. camel/toolkits/google_scholar_toolkit.py +2 -0
  81. camel/toolkits/human_toolkit.py +17 -1
  82. camel/toolkits/image_analysis_toolkit.py +2 -0
  83. camel/toolkits/linkedin_toolkit.py +2 -1
  84. camel/toolkits/math_toolkit.py +2 -0
  85. camel/toolkits/mcp_toolkit.py +42 -52
  86. camel/toolkits/meshy_toolkit.py +20 -2
  87. camel/toolkits/networkx_toolkit.py +2 -0
  88. camel/toolkits/notion_toolkit.py +7 -0
  89. camel/toolkits/openai_agent_toolkit.py +131 -0
  90. camel/toolkits/openbb_toolkit.py +2 -1
  91. camel/toolkits/pubmed_toolkit.py +2 -0
  92. camel/toolkits/reddit_toolkit.py +2 -1
  93. camel/toolkits/retrieval_toolkit.py +2 -1
  94. camel/toolkits/search_toolkit.py +2 -1
  95. camel/toolkits/searxng_toolkit.py +207 -0
  96. camel/toolkits/semantic_scholar_toolkit.py +2 -0
  97. camel/toolkits/slack_toolkit.py +2 -0
  98. camel/toolkits/stripe_toolkit.py +2 -1
  99. camel/toolkits/sympy_toolkit.py +2 -0
  100. camel/toolkits/terminal_toolkit.py +2 -0
  101. camel/toolkits/thinking_toolkit.py +168 -12
  102. camel/toolkits/twitter_toolkit.py +2 -1
  103. camel/toolkits/video_analysis_toolkit.py +2 -1
  104. camel/toolkits/video_download_toolkit.py +2 -1
  105. camel/toolkits/weather_toolkit.py +2 -0
  106. camel/toolkits/whatsapp_toolkit.py +2 -1
  107. camel/toolkits/zapier_toolkit.py +2 -1
  108. camel/types/enums.py +66 -0
  109. camel/types/unified_model_type.py +5 -0
  110. camel/utils/__init__.py +2 -0
  111. camel/utils/chunker/code_chunker.py +9 -9
  112. camel/utils/commons.py +50 -30
  113. camel/utils/constants.py +2 -2
  114. camel/utils/mcp.py +79 -0
  115. camel/verifiers/__init__.py +2 -0
  116. camel/verifiers/base.py +15 -15
  117. camel/verifiers/math_verifier.py +182 -0
  118. camel/verifiers/python_verifier.py +28 -28
  119. {camel_ai-0.2.37.dist-info → camel_ai-0.2.39.dist-info}/METADATA +54 -4
  120. {camel_ai-0.2.37.dist-info → camel_ai-0.2.39.dist-info}/RECORD +122 -110
  121. {camel_ai-0.2.37.dist-info → camel_ai-0.2.39.dist-info}/WHEEL +0 -0
  122. {camel_ai-0.2.37.dist-info → camel_ai-0.2.39.dist-info}/licenses/LICENSE +0 -0
@@ -76,15 +76,19 @@ class PythonVerifier(BaseVerifier):
76
76
 
77
77
  async def _setup(self, **kwargs) -> None:
78
78
  r"""Set up a virtual environment and install required packages."""
79
- uv = kwargs.get('uv', False)
80
- if uv or self._is_uv_environment():
79
+ # Check if we're in a uv environment and use uv if available
80
+ if kwargs.get("uv", False) or self._is_uv_environment():
81
81
  logger.info("[UV] Detected uv environment. Using uv for setup.")
82
82
  self._setup_with_uv()
83
83
  return
84
84
 
85
85
  self.venv_path = tempfile.mkdtemp()
86
86
  try:
87
- venv.create(self.venv_path, with_pip=True)
87
+ # Use system=True to ensure that the virtual environment uses the
88
+ # system Python libraries
89
+ venv.create(
90
+ self.venv_path, with_pip=True, system_site_packages=True
91
+ )
88
92
  logger.info(f"Virtual environment created at {self.venv_path}")
89
93
  except Exception as e:
90
94
  logger.error(f"Failed to create virtual environment: {e}")
@@ -138,7 +142,7 @@ class PythonVerifier(BaseVerifier):
138
142
  self.venv_path = tempfile.mkdtemp()
139
143
  try:
140
144
  subprocess.run(
141
- ["uv", "venv", self.venv_path],
145
+ ["uv", "venv", "--python", sys.executable, self.venv_path],
142
146
  check=True,
143
147
  capture_output=True,
144
148
  timeout=self._timeout,
@@ -167,7 +171,11 @@ class PythonVerifier(BaseVerifier):
167
171
  raise
168
172
 
169
173
  if self.required_packages:
170
- venv_python = os.path.join(self.venv_path, self.bin_dir, "python")
174
+ venv_python = os.path.join(
175
+ self.venv_path,
176
+ self.bin_dir,
177
+ "python.exe" if os.name == 'nt' else "python",
178
+ )
171
179
  try:
172
180
  subprocess.run(
173
181
  [
@@ -214,7 +222,7 @@ class PythonVerifier(BaseVerifier):
214
222
  self.venv_path = None
215
223
 
216
224
  async def _verify_implementation(
217
- self, solution: str, ground_truth: Optional[str]
225
+ self, solution: str, reference_answer: Optional[str]
218
226
  ) -> VerificationResult:
219
227
  r"""Executes the provided Python solution in an isolated environment
220
228
  and verifies its output against an expected ground truth expression.
@@ -230,7 +238,7 @@ class PythonVerifier(BaseVerifier):
230
238
  Args:
231
239
  solution (str): The Python code or expression to execute and
232
240
  verify.
233
- ground_truth (Optional[str]): The expected value as a Python
241
+ reference_answer (Optional[str]): The expected value as a Python
234
242
  expression. If None, only execution success is verified.
235
243
 
236
244
  Returns:
@@ -255,9 +263,9 @@ class PythonVerifier(BaseVerifier):
255
263
  error_message=f"Expression evaluation error: {e}",
256
264
  )
257
265
 
258
- if ground_truth is not None:
266
+ if reference_answer is not None:
259
267
  try:
260
- gt_val = ast.literal_eval(ground_truth)
268
+ gt_val = ast.literal_eval(reference_answer)
261
269
  except Exception as e:
262
270
  return VerificationResult(
263
271
  status=VerificationOutcome.ERROR,
@@ -284,7 +292,11 @@ class PythonVerifier(BaseVerifier):
284
292
 
285
293
  # Otherwise, run the code block,
286
294
  # which should already include a print(...) in the end
287
- venv_python = os.path.join(self.venv_path, self.bin_dir, "python")
295
+ venv_python = os.path.join(
296
+ self.venv_path,
297
+ self.bin_dir,
298
+ "python.exe" if os.name == 'nt' else "python",
299
+ )
288
300
  if not os.path.exists(venv_python):
289
301
  return VerificationResult(
290
302
  status=VerificationOutcome.ERROR,
@@ -303,29 +315,17 @@ class PythonVerifier(BaseVerifier):
303
315
  error_message=f"Solution code error:\n{sol_err}",
304
316
  )
305
317
 
306
- if ground_truth is not None:
318
+ if reference_answer is not None:
307
319
  try:
308
320
  # First, try to evaluate the output as-is.
309
321
  sol_val = ast.literal_eval(sol_out)
310
322
  except Exception as e:
311
- logger.warning(
312
- f"Direct eval failed: {e}. Trying repr on output."
313
- )
314
- try:
315
- # Try to convert sol_out to a literal
316
- # by wrapping it with repr.
317
- # FIXME: may be unnecessary
318
- sol_val = ast.literal_eval(repr(sol_out))
319
- except Exception as e2:
320
- logger.warning(
321
- f"repr eval also failed: {e2}."
322
- "Falling back to string comparison."
323
- )
324
- sol_val = None
323
+ logger.warning(f"Direct eval failed: {e}.")
324
+ sol_val = None
325
325
 
326
326
  if sol_val is not None:
327
327
  try:
328
- gt_val = ast.literal_eval(ground_truth)
328
+ gt_val = ast.literal_eval(reference_answer)
329
329
  except Exception as e:
330
330
  return VerificationResult(
331
331
  status=VerificationOutcome.ERROR,
@@ -347,7 +347,7 @@ class PythonVerifier(BaseVerifier):
347
347
  )
348
348
  else:
349
349
  # Fallback: string comparison
350
- if sol_out.strip() == ground_truth.strip():
350
+ if sol_out.strip() == reference_answer.strip():
351
351
  return VerificationResult(
352
352
  status=VerificationOutcome.SUCCESS,
353
353
  result=sol_out,
@@ -357,7 +357,7 @@ class PythonVerifier(BaseVerifier):
357
357
  status=VerificationOutcome.FAILURE,
358
358
  result=sol_out,
359
359
  error_message="Fallback string mismatch: "
360
- f"'{sol_out}' != '{ground_truth}'",
360
+ f"'{sol_out}' != '{reference_answer}'",
361
361
  )
362
362
  else:
363
363
  return VerificationResult(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.37
3
+ Version: 0.2.39
4
4
  Summary: Communicative Agents for AI Society Study
5
5
  Project-URL: Homepage, https://www.camel-ai.org/
6
6
  Project-URL: Repository, https://github.com/camel-ai/camel
@@ -14,11 +14,9 @@ Requires-Dist: colorama<0.5,>=0.4.6
14
14
  Requires-Dist: docstring-parser<0.16,>=0.15
15
15
  Requires-Dist: httpx<1.0.0dev,>=0.28.0
16
16
  Requires-Dist: jsonschema<5,>=4
17
- Requires-Dist: numpy~=1.26
18
- Requires-Dist: openai<2,>=1.59.7
17
+ Requires-Dist: openai<2,>=1.68.0
19
18
  Requires-Dist: psutil<6,>=5.9.8
20
19
  Requires-Dist: pydantic<2.10,>=1.9
21
- Requires-Dist: pyyaml<7,>=6.0.2
22
20
  Requires-Dist: tiktoken<0.8,>=0.7.0
23
21
  Provides-Extra: all
24
22
  Requires-Dist: accelerate<0.27,>=0.26.0; extra == 'all'
@@ -57,6 +55,7 @@ Requires-Dist: ipykernel<7,>=6.0.0; extra == 'all'
57
55
  Requires-Dist: jupyter-client<9,>=8.6.2; extra == 'all'
58
56
  Requires-Dist: linkup-sdk<0.3,>=0.2.1; extra == 'all'
59
57
  Requires-Dist: litellm<2,>=1.38.1; extra == 'all'
58
+ Requires-Dist: math-verify<0.8,>=0.7.0; extra == 'all'
60
59
  Requires-Dist: mcp>=1.3.0; extra == 'all'
61
60
  Requires-Dist: mem0ai>=0.1.67; extra == 'all'
62
61
  Requires-Dist: mistralai<2,>=1.1.0; extra == 'all'
@@ -67,6 +66,7 @@ Requires-Dist: neo4j<6,>=5.18.0; extra == 'all'
67
66
  Requires-Dist: networkx<4,>=3.4.2; extra == 'all'
68
67
  Requires-Dist: newspaper3k<0.3,>=0.2.8; extra == 'all'
69
68
  Requires-Dist: notion-client<3,>=2.2.1; extra == 'all'
69
+ Requires-Dist: numpy~=1.26; extra == 'all'
70
70
  Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'all'
71
71
  Requires-Dist: opencv-python<5,>=4; extra == 'all'
72
72
  Requires-Dist: openpyxl>=3.1.5; extra == 'all'
@@ -87,6 +87,7 @@ Requires-Dist: pytelegrambotapi<5,>=4.18.0; extra == 'all'
87
87
  Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'all'
88
88
  Requires-Dist: pytest-cov<5,>=4; extra == 'all'
89
89
  Requires-Dist: pytest<8,>=7; extra == 'all'
90
+ Requires-Dist: pytidb-experimental==0.0.1.dev4; extra == 'all'
90
91
  Requires-Dist: qdrant-client<2,>=1.9.0; extra == 'all'
91
92
  Requires-Dist: rank-bm25<0.3,>=0.2.2; extra == 'all'
92
93
  Requires-Dist: redis<6,>=5.0.6; extra == 'all'
@@ -133,7 +134,9 @@ Provides-Extra: data-tools
133
134
  Requires-Dist: aiosqlite<0.21,>=0.20.0; extra == 'data-tools'
134
135
  Requires-Dist: datacommons-pandas<0.0.4,>=0.0.3; extra == 'data-tools'
135
136
  Requires-Dist: datacommons<2,>=1.4.3; extra == 'data-tools'
137
+ Requires-Dist: math-verify<0.8,>=0.7.0; extra == 'data-tools'
136
138
  Requires-Dist: networkx<4,>=3.4.2; extra == 'data-tools'
139
+ Requires-Dist: numpy~=1.26; extra == 'data-tools'
137
140
  Requires-Dist: pandas<2,>=1.5.3; extra == 'data-tools'
138
141
  Requires-Dist: rouge<2,>=1.0.1; extra == 'data-tools'
139
142
  Requires-Dist: stripe<12,>=11.3.0; extra == 'data-tools'
@@ -177,6 +180,7 @@ Requires-Dist: beautifulsoup4<5,>=4; extra == 'document-tools'
177
180
  Requires-Dist: docx2txt<0.9,>=0.8; extra == 'document-tools'
178
181
  Requires-Dist: docx>=0.2.4; extra == 'document-tools'
179
182
  Requires-Dist: fpdf>=1.7.2; extra == 'document-tools'
183
+ Requires-Dist: numpy~=1.26; extra == 'document-tools'
180
184
  Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'document-tools'
181
185
  Requires-Dist: openpyxl>=3.1.5; extra == 'document-tools'
182
186
  Requires-Dist: pandasai<3,>=2.3.0; extra == 'document-tools'
@@ -208,12 +212,57 @@ Requires-Dist: fish-audio-sdk<2025,>=2024.12.5; extra == 'model-platforms'
208
212
  Requires-Dist: litellm<2,>=1.38.1; extra == 'model-platforms'
209
213
  Requires-Dist: mistralai<2,>=1.1.0; extra == 'model-platforms'
210
214
  Requires-Dist: reka-api<4,>=3.0.8; extra == 'model-platforms'
215
+ Provides-Extra: owl
216
+ Requires-Dist: anthropic<0.50.0,>=0.47.0; extra == 'owl'
217
+ Requires-Dist: beautifulsoup4<5,>=4; extra == 'owl'
218
+ Requires-Dist: chunkr-ai>=0.0.41; extra == 'owl'
219
+ Requires-Dist: datasets<4,>=3; extra == 'owl'
220
+ Requires-Dist: docx2txt<0.9,>=0.8; extra == 'owl'
221
+ Requires-Dist: docx>=0.2.4; extra == 'owl'
222
+ Requires-Dist: duckduckgo-search<7,>=6.3.5; extra == 'owl'
223
+ Requires-Dist: e2b-code-interpreter<2,>=1.0.3; extra == 'owl'
224
+ Requires-Dist: ffmpeg-python<0.3,>=0.2.0; extra == 'owl'
225
+ Requires-Dist: fpdf>=1.7.2; extra == 'owl'
226
+ Requires-Dist: html2text>=2024.2.26; extra == 'owl'
227
+ Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'owl'
228
+ Requires-Dist: mcp-server-fetch==2025.1.17; extra == 'owl'
229
+ Requires-Dist: mcp-simple-arxiv==0.2.2; extra == 'owl'
230
+ Requires-Dist: newspaper3k<0.3,>=0.2.8; extra == 'owl'
231
+ Requires-Dist: numpy~=1.26; extra == 'owl'
232
+ Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'owl'
233
+ Requires-Dist: opencv-python<5,>=4; extra == 'owl'
234
+ Requires-Dist: openpyxl>=3.1.5; extra == 'owl'
235
+ Requires-Dist: outlines<0.2,>=0.1.7; extra == 'owl'
236
+ Requires-Dist: pandas<2,>=1.5.3; extra == 'owl'
237
+ Requires-Dist: pandasai<3,>=2.3.0; extra == 'owl'
238
+ Requires-Dist: pillow<11.0.0,>=10.1.0; extra == 'owl'
239
+ Requires-Dist: playwright>=1.50.0; extra == 'owl'
240
+ Requires-Dist: prance<24,>=23.6.21.0; extra == 'owl'
241
+ Requires-Dist: pydub<0.26,>=0.25.1; extra == 'owl'
242
+ Requires-Dist: pymupdf<2,>=1.22.5; extra == 'owl'
243
+ Requires-Dist: python-dotenv<2,>=1.0.0; extra == 'owl'
244
+ Requires-Dist: requests-oauthlib<2,>=1.3.1; extra == 'owl'
245
+ Requires-Dist: rouge<2,>=1.0.1; extra == 'owl'
246
+ Requires-Dist: scenedetect>=0.6.5.2; extra == 'owl'
247
+ Requires-Dist: sentencepiece<0.3,>=0.2; extra == 'owl'
248
+ Requires-Dist: soundfile<0.14,>=0.13; extra == 'owl'
249
+ Requires-Dist: tabulate>=0.9.0; extra == 'owl'
250
+ Requires-Dist: transformers<5,>=4; extra == 'owl'
251
+ Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'owl'
252
+ Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'owl'
253
+ Requires-Dist: typer>=0.15.2; extra == 'owl'
254
+ Requires-Dist: unstructured==0.16.20; extra == 'owl'
255
+ Requires-Dist: wikipedia<2,>=1; extra == 'owl'
256
+ Requires-Dist: xls2xlsx>=0.2.0; extra == 'owl'
257
+ Requires-Dist: yt-dlp<2025,>=2024.11.4; extra == 'owl'
211
258
  Provides-Extra: rag
212
259
  Requires-Dist: cohere<6,>=5.11.0; extra == 'rag'
213
260
  Requires-Dist: nebula3-python==3.8.2; extra == 'rag'
214
261
  Requires-Dist: neo4j<6,>=5.18.0; extra == 'rag'
262
+ Requires-Dist: numpy~=1.26; extra == 'rag'
215
263
  Requires-Dist: pandasai<3,>=2.3.0; extra == 'rag'
216
264
  Requires-Dist: pymilvus<3,>=2.4.0; extra == 'rag'
265
+ Requires-Dist: pytidb-experimental==0.0.1.dev4; extra == 'rag'
217
266
  Requires-Dist: qdrant-client<2,>=1.9.0; extra == 'rag'
218
267
  Requires-Dist: rank-bm25<0.3,>=0.2.2; extra == 'rag'
219
268
  Requires-Dist: sentence-transformers<4,>=3.0.1; extra == 'rag'
@@ -230,6 +279,7 @@ Requires-Dist: mem0ai>=0.1.73; extra == 'storage'
230
279
  Requires-Dist: nebula3-python==3.8.2; extra == 'storage'
231
280
  Requires-Dist: neo4j<6,>=5.18.0; extra == 'storage'
232
281
  Requires-Dist: pymilvus<3,>=2.4.0; extra == 'storage'
282
+ Requires-Dist: pytidb-experimental==0.0.1.dev4; extra == 'storage'
233
283
  Requires-Dist: qdrant-client<2,>=1.9.0; extra == 'storage'
234
284
  Requires-Dist: redis<6,>=5.0.6; extra == 'storage'
235
285
  Provides-Extra: test