camel-ai 0.2.33__tar.gz → 0.2.35__tar.gz

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 (358) hide show
  1. {camel_ai-0.2.33 → camel_ai-0.2.35}/PKG-INFO +3 -3
  2. {camel_ai-0.2.33 → camel_ai-0.2.35}/README.md +2 -2
  3. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/__init__.py +1 -1
  4. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/_types.py +1 -1
  5. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/_utils.py +4 -4
  6. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/chat_agent.py +174 -29
  7. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/knowledge_graph_agent.py +5 -0
  8. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/openai_config.py +20 -16
  9. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datasets/__init__.py +2 -4
  10. camel_ai-0.2.35/camel/datasets/base_generator.py +279 -0
  11. camel_ai-0.2.33/camel/datasets/base_generator.py → camel_ai-0.2.35/camel/datasets/few_shot_generator.py +40 -114
  12. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datasets/static_dataset.py +54 -2
  13. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/agent_memories.py +47 -1
  14. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/base.py +23 -1
  15. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/records.py +5 -0
  16. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/openai_compatible_model.py +2 -4
  17. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/sglang_model.py +4 -1
  18. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/stub_model.py +25 -0
  19. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/vector_retriever.py +12 -7
  20. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/key_value_storages/__init__.py +2 -1
  21. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/key_value_storages/json.py +3 -7
  22. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/vectordb_storages/base.py +5 -1
  23. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/__init__.py +2 -1
  24. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/file_write_toolkit.py +24 -2
  25. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/github_toolkit.py +15 -3
  26. camel_ai-0.2.35/camel/toolkits/memory_toolkit.py +129 -0
  27. camel_ai-0.2.35/camel/utils/chunker/__init__.py +22 -0
  28. camel_ai-0.2.35/camel/utils/chunker/base.py +24 -0
  29. camel_ai-0.2.35/camel/utils/chunker/code_chunker.py +193 -0
  30. camel_ai-0.2.35/camel/utils/chunker/uio_chunker.py +66 -0
  31. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/token_counting.py +133 -0
  32. {camel_ai-0.2.33 → camel_ai-0.2.35}/pyproject.toml +2 -2
  33. {camel_ai-0.2.33 → camel_ai-0.2.35}/.gitignore +0 -0
  34. {camel_ai-0.2.33 → camel_ai-0.2.35}/LICENSE +0 -0
  35. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/__init__.py +0 -0
  36. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/base.py +0 -0
  37. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/critic_agent.py +0 -0
  38. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/deductive_reasoner_agent.py +0 -0
  39. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/embodied_agent.py +0 -0
  40. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/multi_hop_generator_agent.py +0 -0
  41. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/programmed_agent_instruction.py +0 -0
  42. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/role_assignment_agent.py +0 -0
  43. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/search_agent.py +0 -0
  44. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/task_agent.py +0 -0
  45. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/tool_agents/__init__.py +0 -0
  46. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/tool_agents/base.py +0 -0
  47. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  48. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/__init__.py +0 -0
  49. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/apibank.py +0 -0
  50. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/apibench.py +0 -0
  51. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/base.py +0 -0
  52. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/gaia.py +0 -0
  53. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/nexus.py +0 -0
  54. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/benchmarks/ragbench.py +0 -0
  55. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/__init__.py +0 -0
  56. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/discord/__init__.py +0 -0
  57. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/discord/discord_app.py +0 -0
  58. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/discord/discord_installation.py +0 -0
  59. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/discord/discord_store.py +0 -0
  60. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/slack/__init__.py +0 -0
  61. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/slack/models.py +0 -0
  62. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/slack/slack_app.py +0 -0
  63. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/bots/telegram_bot.py +0 -0
  64. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/__init__.py +0 -0
  65. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/aiml_config.py +0 -0
  66. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/anthropic_config.py +0 -0
  67. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/base_config.py +0 -0
  68. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/cohere_config.py +0 -0
  69. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/deepseek_config.py +0 -0
  70. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/gemini_config.py +0 -0
  71. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/groq_config.py +0 -0
  72. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/internlm_config.py +0 -0
  73. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/litellm_config.py +0 -0
  74. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/mistral_config.py +0 -0
  75. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/moonshot_config.py +0 -0
  76. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/nvidia_config.py +0 -0
  77. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/ollama_config.py +0 -0
  78. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/qwen_config.py +0 -0
  79. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/reka_config.py +0 -0
  80. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/samba_config.py +0 -0
  81. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/sglang_config.py +0 -0
  82. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/siliconflow_config.py +0 -0
  83. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/togetherai_config.py +0 -0
  84. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/vllm_config.py +0 -0
  85. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/yi_config.py +0 -0
  86. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/configs/zhipuai_config.py +0 -0
  87. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/data_collector/__init__.py +0 -0
  88. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/data_collector/alpaca_collector.py +0 -0
  89. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/data_collector/base.py +0 -0
  90. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/data_collector/sharegpt_collector.py +0 -0
  91. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/__init__.py +0 -0
  92. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/cot_datagen.py +0 -0
  93. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_improving_cot.py +0 -0
  94. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/__init__.py +0 -0
  95. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  96. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  97. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  98. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  99. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/self_instruct.py +0 -0
  100. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/self_instruct/templates.py +0 -0
  101. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/source2synth/__init__.py +0 -0
  102. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/source2synth/data_processor.py +0 -0
  103. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/source2synth/models.py +0 -0
  104. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  105. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datahubs/__init__.py +0 -0
  106. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datahubs/base.py +0 -0
  107. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datahubs/huggingface.py +0 -0
  108. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datahubs/models.py +0 -0
  109. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/datasets/models.py +0 -0
  110. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/__init__.py +0 -0
  111. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/base.py +0 -0
  112. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/jina_embedding.py +0 -0
  113. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/mistral_embedding.py +0 -0
  114. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/openai_compatible_embedding.py +0 -0
  115. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/openai_embedding.py +0 -0
  116. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  117. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/embeddings/vlm_embedding.py +0 -0
  118. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/environments/__init__.py +0 -0
  119. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/environments/models.py +0 -0
  120. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/environments/multi_step.py +0 -0
  121. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/environments/single_step.py +0 -0
  122. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/extractors/__init__.py +0 -0
  123. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/extractors/base.py +0 -0
  124. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/extractors/python_strategies.py +0 -0
  125. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/generators.py +0 -0
  126. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/human.py +0 -0
  127. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/__init__.py +0 -0
  128. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/base.py +0 -0
  129. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/docker/Dockerfile +0 -0
  130. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/docker_interpreter.py +0 -0
  131. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/e2b_interpreter.py +0 -0
  132. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/internal_python_interpreter.py +0 -0
  133. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/interpreter_error.py +0 -0
  134. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/ipython_interpreter.py +0 -0
  135. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/interpreters/subprocess_interpreter.py +0 -0
  136. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/__init__.py +0 -0
  137. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/apify_reader.py +0 -0
  138. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/base_io.py +0 -0
  139. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/chunkr_reader.py +0 -0
  140. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/firecrawl_reader.py +0 -0
  141. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/jina_url_reader.py +0 -0
  142. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/mineru_extractor.py +0 -0
  143. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/panda_reader.py +0 -0
  144. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/loaders/unstructured_io.py +0 -0
  145. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/logger.py +0 -0
  146. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/__init__.py +0 -0
  147. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/blocks/__init__.py +0 -0
  148. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/blocks/chat_history_block.py +0 -0
  149. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/blocks/vectordb_block.py +0 -0
  150. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/context_creators/__init__.py +0 -0
  151. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/memories/context_creators/score_based.py +0 -0
  152. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/__init__.py +0 -0
  153. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/base.py +0 -0
  154. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/__init__.py +0 -0
  155. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/alpaca.py +0 -0
  156. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/conversation_models.py +0 -0
  157. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  158. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  159. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  160. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  161. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/messages/func_message.py +0 -0
  162. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/__init__.py +0 -0
  163. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/_utils.py +0 -0
  164. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/aiml_model.py +0 -0
  165. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/anthropic_model.py +0 -0
  166. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/azure_openai_model.py +0 -0
  167. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/base_audio_model.py +0 -0
  168. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/base_model.py +0 -0
  169. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/cohere_model.py +0 -0
  170. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/deepseek_model.py +0 -0
  171. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/fish_audio_model.py +0 -0
  172. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/gemini_model.py +0 -0
  173. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/groq_model.py +0 -0
  174. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/internlm_model.py +0 -0
  175. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/litellm_model.py +0 -0
  176. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/mistral_model.py +0 -0
  177. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/model_factory.py +0 -0
  178. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/model_manager.py +0 -0
  179. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/moonshot_model.py +0 -0
  180. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/nemotron_model.py +0 -0
  181. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/nvidia_model.py +0 -0
  182. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/ollama_model.py +0 -0
  183. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/openai_audio_models.py +0 -0
  184. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/openai_model.py +0 -0
  185. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/qwen_model.py +0 -0
  186. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/reka_model.py +0 -0
  187. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/reward/__init__.py +0 -0
  188. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/reward/base_reward_model.py +0 -0
  189. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/reward/evaluator.py +0 -0
  190. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/reward/nemotron_model.py +0 -0
  191. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/reward/skywork_model.py +0 -0
  192. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/samba_model.py +0 -0
  193. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/siliconflow_model.py +0 -0
  194. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/togetherai_model.py +0 -0
  195. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/vllm_model.py +0 -0
  196. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/volcano_model.py +0 -0
  197. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/yi_model.py +0 -0
  198. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/models/zhipuai_model.py +0 -0
  199. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/personas/__init__.py +0 -0
  200. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/personas/persona.py +0 -0
  201. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/personas/persona_hub.py +0 -0
  202. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/__init__.py +0 -0
  203. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/ai_society.py +0 -0
  204. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/base.py +0 -0
  205. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/code.py +0 -0
  206. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/evaluation.py +0 -0
  207. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/generate_text_embedding_data.py +0 -0
  208. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/image_craft.py +0 -0
  209. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/misalignment.py +0 -0
  210. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/multi_condition_image_craft.py +0 -0
  211. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/object_recognition.py +0 -0
  212. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/persona_hub.py +0 -0
  213. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/prompt_templates.py +0 -0
  214. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/role_description_prompt_template.py +0 -0
  215. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/solution_extraction.py +0 -0
  216. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/task_prompt_template.py +0 -0
  217. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/translation.py +0 -0
  218. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/prompts/video_description_prompt.py +0 -0
  219. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/py.typed +0 -0
  220. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/responses/__init__.py +0 -0
  221. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/responses/agent_responses.py +0 -0
  222. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/__init__.py +0 -0
  223. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/auto_retriever.py +0 -0
  224. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/base.py +0 -0
  225. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/bm25_retriever.py +0 -0
  226. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  227. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/retrievers/hybrid_retrival.py +0 -0
  228. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/__init__.py +0 -0
  229. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/api.py +0 -0
  230. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/base.py +0 -0
  231. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/configs.py +0 -0
  232. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/docker_runtime.py +0 -0
  233. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/llm_guard_runtime.py +0 -0
  234. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/remote_http_runtime.py +0 -0
  235. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/utils/__init__.py +0 -0
  236. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/utils/function_risk_toolkit.py +0 -0
  237. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/runtime/utils/ignore_risk_toolkit.py +0 -0
  238. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/schemas/__init__.py +0 -0
  239. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/schemas/base.py +0 -0
  240. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/schemas/openai_converter.py +0 -0
  241. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/schemas/outlines_converter.py +0 -0
  242. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/__init__.py +0 -0
  243. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/babyagi_playing.py +0 -0
  244. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/role_playing.py +0 -0
  245. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/__init__.py +0 -0
  246. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/base.py +0 -0
  247. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/prompts.py +0 -0
  248. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/role_playing_worker.py +0 -0
  249. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/single_agent_worker.py +0 -0
  250. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/task_channel.py +0 -0
  251. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/utils.py +0 -0
  252. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/worker.py +0 -0
  253. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/societies/workforce/workforce.py +0 -0
  254. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/__init__.py +0 -0
  255. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/graph_storages/__init__.py +0 -0
  256. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/graph_storages/base.py +0 -0
  257. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/graph_storages/graph_element.py +0 -0
  258. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/graph_storages/nebula_graph.py +0 -0
  259. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  260. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/key_value_storages/base.py +0 -0
  261. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/key_value_storages/in_memory.py +0 -0
  262. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/key_value_storages/redis.py +0 -0
  263. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/object_storages/__init__.py +0 -0
  264. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/object_storages/amazon_s3.py +0 -0
  265. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/object_storages/azure_blob.py +0 -0
  266. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/object_storages/base.py +0 -0
  267. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/object_storages/google_cloud.py +0 -0
  268. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/vectordb_storages/__init__.py +0 -0
  269. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/vectordb_storages/milvus.py +0 -0
  270. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/storages/vectordb_storages/qdrant.py +0 -0
  271. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/tasks/__init__.py +0 -0
  272. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/tasks/task.py +0 -0
  273. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/tasks/task_prompt.py +0 -0
  274. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/terminators/__init__.py +0 -0
  275. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/terminators/base.py +0 -0
  276. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/terminators/response_terminator.py +0 -0
  277. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/terminators/token_limit_terminator.py +0 -0
  278. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/arxiv_toolkit.py +0 -0
  279. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/ask_news_toolkit.py +0 -0
  280. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  281. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/base.py +0 -0
  282. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/browser_toolkit.py +0 -0
  283. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/code_execution.py +0 -0
  284. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/dalle_toolkit.py +0 -0
  285. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/dappier_toolkit.py +0 -0
  286. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/data_commons_toolkit.py +0 -0
  287. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/excel_toolkit.py +0 -0
  288. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/function_tool.py +0 -0
  289. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/google_maps_toolkit.py +0 -0
  290. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/google_scholar_toolkit.py +0 -0
  291. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/human_toolkit.py +0 -0
  292. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/image_analysis_toolkit.py +0 -0
  293. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/linkedin_toolkit.py +0 -0
  294. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/math_toolkit.py +0 -0
  295. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/mcp_toolkit.py +0 -0
  296. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/meshy_toolkit.py +0 -0
  297. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/mineru_toolkit.py +0 -0
  298. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/networkx_toolkit.py +0 -0
  299. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/notion_toolkit.py +0 -0
  300. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  301. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  302. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  303. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  304. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  305. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  306. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  307. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  308. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  309. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  310. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  311. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  312. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  313. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  314. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  315. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  316. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  317. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/security_config.py +0 -0
  318. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  319. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  320. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  321. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  322. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  323. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  324. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  325. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/open_api_toolkit.py +0 -0
  326. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/openbb_toolkit.py +0 -0
  327. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/page_script.js +0 -0
  328. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/pubmed_toolkit.py +0 -0
  329. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/reddit_toolkit.py +0 -0
  330. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/retrieval_toolkit.py +0 -0
  331. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/search_toolkit.py +0 -0
  332. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  333. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/slack_toolkit.py +0 -0
  334. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/stripe_toolkit.py +0 -0
  335. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/sympy_toolkit.py +0 -0
  336. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/terminal_toolkit.py +0 -0
  337. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/twitter_toolkit.py +0 -0
  338. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/video_analysis_toolkit.py +0 -0
  339. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/video_download_toolkit.py +0 -0
  340. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/weather_toolkit.py +0 -0
  341. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/whatsapp_toolkit.py +0 -0
  342. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/toolkits/zapier_toolkit.py +0 -0
  343. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/types/__init__.py +0 -0
  344. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/types/agents/__init__.py +0 -0
  345. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/types/agents/tool_calling_record.py +0 -0
  346. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/types/enums.py +0 -0
  347. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/types/openai_types.py +0 -0
  348. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/types/unified_model_type.py +0 -0
  349. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/__init__.py +0 -0
  350. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/async_func.py +0 -0
  351. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/commons.py +0 -0
  352. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/constants.py +0 -0
  353. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/deduplication.py +0 -0
  354. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/utils/response_format.py +0 -0
  355. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/verifiers/__init__.py +0 -0
  356. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/verifiers/base.py +0 -0
  357. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/verifiers/models.py +0 -0
  358. {camel_ai-0.2.33 → camel_ai-0.2.35}/camel/verifiers/python_verifier.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.33
3
+ Version: 0.2.35
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
@@ -458,7 +458,7 @@ Explore different types of agents, their roles, and their applications.
458
458
 
459
459
  ### Seeking Help
460
460
 
461
- Please reachout to us on [CAMEL discord](https://discord.camel-ai.org/) if you encounter any issue set up CAMEL.
461
+ Please reach out to us on [CAMEL discord](https://discord.camel-ai.org/) if you encounter any issue set up CAMEL.
462
462
 
463
463
  <br>
464
464
 
@@ -532,7 +532,7 @@ We believe that studying these agents on a large scale offers valuable insights
532
532
 
533
533
  <br>
534
534
 
535
- ## Syenthetic Datasets
535
+ ## Synthetic Datasets
536
536
 
537
537
  ### 1. Utilize Various LLMs as Backends
538
538
 
@@ -202,7 +202,7 @@ Explore different types of agents, their roles, and their applications.
202
202
 
203
203
  ### Seeking Help
204
204
 
205
- Please reachout to us on [CAMEL discord](https://discord.camel-ai.org/) if you encounter any issue set up CAMEL.
205
+ Please reach out to us on [CAMEL discord](https://discord.camel-ai.org/) if you encounter any issue set up CAMEL.
206
206
 
207
207
  <br>
208
208
 
@@ -276,7 +276,7 @@ We believe that studying these agents on a large scale offers valuable insights
276
276
 
277
277
  <br>
278
278
 
279
- ## Syenthetic Datasets
279
+ ## Synthetic Datasets
280
280
 
281
281
  ### 1. Utilize Various LLMs as Backends
282
282
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  from camel.logger import disable_logging, enable_logging, set_log_level
16
16
 
17
- __version__ = '0.2.33'
17
+ __version__ = '0.2.35'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -34,7 +34,7 @@ class ModelResponse(BaseModel):
34
34
  model_config = ConfigDict(arbitrary_types_allowed=True)
35
35
 
36
36
  response: Union[ChatCompletion, Stream, AsyncStream]
37
- tool_call_request: Optional[ToolCallRequest]
37
+ tool_call_requests: Optional[List[ToolCallRequest]]
38
38
  output_messages: List[BaseMessage]
39
39
  finish_reasons: List[str]
40
40
  usage_dict: Dict[str, Any]
@@ -136,7 +136,7 @@ def get_info_dict(
136
136
  termination_reasons: List[str],
137
137
  num_tokens: int,
138
138
  tool_calls: List[ToolCallingRecord],
139
- external_tool_call_request: Optional[ToolCallRequest] = None,
139
+ external_tool_call_requests: Optional[List[ToolCallRequest]] = None,
140
140
  ) -> Dict[str, Any]:
141
141
  r"""Returns a dictionary containing information about the chat session.
142
142
 
@@ -149,8 +149,8 @@ def get_info_dict(
149
149
  num_tokens (int): The number of tokens used in the chat session.
150
150
  tool_calls (List[ToolCallingRecord]): The list of function
151
151
  calling records, containing the information of called tools.
152
- external_tool_call_request (Optional[ToolCallRequest]): The
153
- request for external tool call.
152
+ external_tool_call_requests (Optional[List[ToolCallRequest]]): The
153
+ requests for external tool calls.
154
154
 
155
155
 
156
156
  Returns:
@@ -162,7 +162,7 @@ def get_info_dict(
162
162
  "termination_reasons": termination_reasons,
163
163
  "num_tokens": num_tokens,
164
164
  "tool_calls": tool_calls,
165
- "external_tool_call_request": external_tool_call_request,
165
+ "external_tool_call_requests": external_tool_call_requests,
166
166
  }
167
167
 
168
168
 
@@ -16,7 +16,10 @@ from __future__ import annotations
16
16
  import json
17
17
  import logging
18
18
  import textwrap
19
+ import uuid
19
20
  from collections import defaultdict
21
+ from datetime import datetime
22
+ from pathlib import Path
20
23
  from typing import (
21
24
  TYPE_CHECKING,
22
25
  Any,
@@ -59,6 +62,7 @@ from camel.models import (
59
62
  )
60
63
  from camel.prompts import TextPrompt
61
64
  from camel.responses import ChatAgentResponse
65
+ from camel.storages import JsonStorage
62
66
  from camel.toolkits import FunctionTool
63
67
  from camel.types import (
64
68
  ChatCompletion,
@@ -138,6 +142,8 @@ class ChatAgent(BaseAgent):
138
142
  the next model in ModelManager. (default: :str:`round_robin`)
139
143
  single_iteration (bool): Whether to let the agent perform only one
140
144
  model calling at each step. (default: :obj:`False`)
145
+ agent_id (str, optional): The ID of the agent. If not provided, a
146
+ random UUID will be generated. (default: :obj:`None`)
141
147
  """
142
148
 
143
149
  def __init__(
@@ -157,6 +163,7 @@ class ChatAgent(BaseAgent):
157
163
  response_terminators: Optional[List[ResponseTerminator]] = None,
158
164
  scheduling_strategy: str = "round_robin",
159
165
  single_iteration: bool = False,
166
+ agent_id: Optional[str] = None,
160
167
  ) -> None:
161
168
  # Set up model backend
162
169
  self.model_backend = ModelManager(
@@ -171,16 +178,25 @@ class ChatAgent(BaseAgent):
171
178
  scheduling_strategy=scheduling_strategy,
172
179
  )
173
180
  self.model_type = self.model_backend.model_type
181
+ # Assign unique ID
182
+ self.agent_id = agent_id if agent_id else str(uuid.uuid4())
174
183
 
175
184
  # Set up memory
176
185
  context_creator = ScoreBasedContextCreator(
177
186
  self.model_backend.token_counter,
178
187
  token_limit or self.model_backend.token_limit,
179
188
  )
189
+
180
190
  self.memory: AgentMemory = memory or ChatHistoryMemory(
181
- context_creator, window_size=message_window_size
191
+ context_creator,
192
+ window_size=message_window_size,
193
+ agent_id=self.agent_id,
182
194
  )
183
195
 
196
+ # So we don't have to pass agent_id when we define memory
197
+ if memory is not None:
198
+ memory.agent_id = self.agent_id
199
+
184
200
  # Set up system message and initialize messages
185
201
  self._original_system_message = (
186
202
  BaseMessage.make_assistant_message(
@@ -321,9 +337,101 @@ class ChatAgent(BaseAgent):
321
337
  role (OpenAIBackendRole): The backend role type.
322
338
  """
323
339
  self.memory.write_record(
324
- MemoryRecord(message=message, role_at_backend=role)
340
+ MemoryRecord(
341
+ message=message,
342
+ role_at_backend=role,
343
+ timestamp=datetime.now().timestamp(),
344
+ agent_id=self.agent_id,
345
+ )
325
346
  )
326
347
 
348
+ def load_memory(self, memory: AgentMemory) -> None:
349
+ r"""Load the provided memory into the agent.
350
+
351
+ Args:
352
+ memory (AgentMemory): The memory to load into the agent.
353
+
354
+ Returns:
355
+ None
356
+ """
357
+
358
+ for context_record in memory.retrieve():
359
+ self.memory.write_record(context_record.memory_record)
360
+ logger.info(f"Memory loaded from {memory}")
361
+
362
+ def load_memory_from_path(self, path: str) -> None:
363
+ r"""Loads memory records from a JSON file filtered by this agent's ID.
364
+
365
+ Args:
366
+ path (str): The file path to a JSON memory file that uses
367
+ JsonStorage.
368
+
369
+ Raises:
370
+ ValueError: If no matching records for the agent_id are found
371
+ (optional check; commented out below).
372
+ """
373
+ json_store = JsonStorage(Path(path))
374
+ all_records = json_store.load()
375
+
376
+ if not all_records:
377
+ raise ValueError(
378
+ f"No records found for agent_id={self.agent_id} in {path}"
379
+ )
380
+
381
+ for record_dict in all_records:
382
+ # Validate the record dictionary before conversion
383
+ required_keys = ['message', 'role_at_backend', 'agent_id']
384
+ if not all(key in record_dict for key in required_keys):
385
+ logger.warning(
386
+ f"Skipping invalid record: missing required "
387
+ f"keys in {record_dict}"
388
+ )
389
+ continue
390
+
391
+ # Validate message structure in the record
392
+ if (
393
+ not isinstance(record_dict['message'], dict)
394
+ or '__class__' not in record_dict['message']
395
+ ):
396
+ logger.warning(
397
+ f"Skipping invalid record: malformed message "
398
+ f"structure in {record_dict}"
399
+ )
400
+ continue
401
+
402
+ try:
403
+ record = MemoryRecord.from_dict(record_dict)
404
+ self.memory.write_records([record])
405
+ except Exception as e:
406
+ logger.warning(
407
+ f"Error converting record to MemoryRecord: {e}. "
408
+ f"Record: {record_dict}"
409
+ )
410
+ logger.info(f"Memory loaded from {path}")
411
+
412
+ def save_memory(self, path: str) -> None:
413
+ r"""Retrieves the current conversation data from memory and writes it
414
+ into a JSON file using JsonStorage.
415
+
416
+ Args:
417
+ path (str): Target file path to store JSON data.
418
+ """
419
+ json_store = JsonStorage(Path(path))
420
+ context_records = self.memory.retrieve()
421
+ to_save = [cr.memory_record.to_dict() for cr in context_records]
422
+ json_store.save(to_save)
423
+ logger.info(f"Memory saved to {path}")
424
+
425
+ def clear_memory(self) -> None:
426
+ r"""Clear the agent's memory and reset to initial state.
427
+
428
+ Returns:
429
+ None
430
+ """
431
+ self.memory.clear()
432
+ if self.system_message is not None:
433
+ self.update_memory(self.system_message, OpenAIBackendRole.SYSTEM)
434
+
327
435
  def _generate_system_message_for_output_language(
328
436
  self,
329
437
  ) -> Optional[BaseMessage]:
@@ -474,7 +582,7 @@ class ChatAgent(BaseAgent):
474
582
  self.update_memory(input_message, OpenAIBackendRole.USER)
475
583
 
476
584
  tool_call_records: List[ToolCallingRecord] = []
477
- external_tool_call_request: Optional[ToolCallRequest] = None
585
+ external_tool_call_requests: Optional[List[ToolCallRequest]] = None
478
586
 
479
587
  while True:
480
588
  try:
@@ -494,12 +602,26 @@ class ChatAgent(BaseAgent):
494
602
  if self.single_iteration:
495
603
  break
496
604
 
497
- if tool_call_request := response.tool_call_request:
498
- if tool_call_request.tool_name in self._external_tool_schemas:
499
- external_tool_call_request = tool_call_request
605
+ if tool_call_requests := response.tool_call_requests:
606
+ # Process all tool calls
607
+ for tool_call_request in tool_call_requests:
608
+ if (
609
+ tool_call_request.tool_name
610
+ in self._external_tool_schemas
611
+ ):
612
+ if external_tool_call_requests is None:
613
+ external_tool_call_requests = []
614
+ external_tool_call_requests.append(tool_call_request)
615
+ else:
616
+ tool_call_records.append(
617
+ self._execute_tool(tool_call_request)
618
+ )
619
+
620
+ # If we found external tool calls, break the loop
621
+ if external_tool_call_requests:
500
622
  break
501
623
 
502
- tool_call_records.append(self._execute_tool(tool_call_request))
624
+ # If we're still here, continue the loop
503
625
  continue
504
626
 
505
627
  break
@@ -508,7 +630,10 @@ class ChatAgent(BaseAgent):
508
630
  self._record_final_output(response.output_messages)
509
631
 
510
632
  return self._convert_to_chatagent_response(
511
- response, tool_call_records, num_tokens, external_tool_call_request
633
+ response,
634
+ tool_call_records,
635
+ num_tokens,
636
+ external_tool_call_requests,
512
637
  )
513
638
 
514
639
  @property
@@ -550,7 +675,7 @@ class ChatAgent(BaseAgent):
550
675
  self.update_memory(input_message, OpenAIBackendRole.USER)
551
676
 
552
677
  tool_call_records: List[ToolCallingRecord] = []
553
- external_tool_call_request: Optional[ToolCallRequest] = None
678
+ external_tool_call_requests: Optional[List[ToolCallRequest]] = None
554
679
  while True:
555
680
  try:
556
681
  openai_messages, num_tokens = self.memory.get_context()
@@ -569,13 +694,27 @@ class ChatAgent(BaseAgent):
569
694
  if self.single_iteration:
570
695
  break
571
696
 
572
- if tool_call_request := response.tool_call_request:
573
- if tool_call_request.tool_name in self._external_tool_schemas:
574
- external_tool_call_request = tool_call_request
697
+ if tool_call_requests := response.tool_call_requests:
698
+ # Process all tool calls
699
+ for tool_call_request in tool_call_requests:
700
+ if (
701
+ tool_call_request.tool_name
702
+ in self._external_tool_schemas
703
+ ):
704
+ if external_tool_call_requests is None:
705
+ external_tool_call_requests = []
706
+ external_tool_call_requests.append(tool_call_request)
707
+
708
+ tool_call_record = await self._aexecute_tool(
709
+ tool_call_request
710
+ )
711
+ tool_call_records.append(tool_call_record)
712
+
713
+ # If we found an external tool call, break the loop
714
+ if external_tool_call_requests:
575
715
  break
576
716
 
577
- tool_call_record = await self._aexecute_tool(tool_call_request)
578
- tool_call_records.append(tool_call_record)
717
+ # If we're still here, continue the loop
579
718
  continue
580
719
 
581
720
  break
@@ -584,7 +723,10 @@ class ChatAgent(BaseAgent):
584
723
  self._record_final_output(response.output_messages)
585
724
 
586
725
  return self._convert_to_chatagent_response(
587
- response, tool_call_records, num_tokens, external_tool_call_request
726
+ response,
727
+ tool_call_records,
728
+ num_tokens,
729
+ external_tool_call_requests,
588
730
  )
589
731
 
590
732
  def _convert_to_chatagent_response(
@@ -592,7 +734,7 @@ class ChatAgent(BaseAgent):
592
734
  response: ModelResponse,
593
735
  tool_call_records: List[ToolCallingRecord],
594
736
  num_tokens: int,
595
- external_tool_call_request: Optional[ToolCallRequest],
737
+ external_tool_call_requests: Optional[List[ToolCallRequest]],
596
738
  ) -> ChatAgentResponse:
597
739
  r"""Parse the final model response into the chat agent response."""
598
740
  info = self._step_get_info(
@@ -602,7 +744,7 @@ class ChatAgent(BaseAgent):
602
744
  response.response_id,
603
745
  tool_call_records,
604
746
  num_tokens,
605
- external_tool_call_request,
747
+ external_tool_call_requests,
606
748
  )
607
749
 
608
750
  return ChatAgentResponse(
@@ -853,7 +995,7 @@ class ChatAgent(BaseAgent):
853
995
  response_id: str,
854
996
  tool_calls: List[ToolCallingRecord],
855
997
  num_tokens: int,
856
- external_tool_call_request: Optional[ToolCallRequest] = None,
998
+ external_tool_call_requests: Optional[List[ToolCallRequest]] = None,
857
999
  ) -> Dict[str, Any]:
858
1000
  r"""Process the output of a chat step and gather information about the
859
1001
  step.
@@ -910,7 +1052,7 @@ class ChatAgent(BaseAgent):
910
1052
  finish_reasons,
911
1053
  num_tokens,
912
1054
  tool_calls,
913
- external_tool_call_request,
1055
+ external_tool_call_requests,
914
1056
  )
915
1057
 
916
1058
  def _handle_batch_response(
@@ -949,18 +1091,21 @@ class ChatAgent(BaseAgent):
949
1091
  if response.usage is not None:
950
1092
  usage = safe_model_dump(response.usage)
951
1093
 
952
- tool_call_request: Optional[ToolCallRequest] = None
1094
+ tool_call_requests: Optional[List[ToolCallRequest]] = None
953
1095
  if tool_calls := response.choices[0].message.tool_calls:
954
- tool_name = tool_calls[0].function.name
955
- tool_call_id = tool_calls[0].id
956
- args = json.loads(tool_calls[0].function.arguments)
957
- tool_call_request = ToolCallRequest(
958
- tool_name=tool_name, args=args, tool_call_id=tool_call_id
959
- )
1096
+ tool_call_requests = []
1097
+ for tool_call in tool_calls:
1098
+ tool_name = tool_call.function.name
1099
+ tool_call_id = tool_call.id
1100
+ args = json.loads(tool_call.function.arguments)
1101
+ tool_call_request = ToolCallRequest(
1102
+ tool_name=tool_name, args=args, tool_call_id=tool_call_id
1103
+ )
1104
+ tool_call_requests.append(tool_call_request)
960
1105
 
961
1106
  return ModelResponse(
962
1107
  response=response,
963
- tool_call_request=tool_call_request,
1108
+ tool_call_requests=tool_call_requests,
964
1109
  output_messages=output_messages,
965
1110
  finish_reasons=finish_reasons,
966
1111
  usage_dict=usage,
@@ -1000,7 +1145,7 @@ class ChatAgent(BaseAgent):
1000
1145
  # TODO: Handle tool calls
1001
1146
  return ModelResponse(
1002
1147
  response=response,
1003
- tool_call_request=None,
1148
+ tool_call_requests=None,
1004
1149
  output_messages=output_messages,
1005
1150
  finish_reasons=finish_reasons,
1006
1151
  usage_dict=usage_dict,
@@ -1040,7 +1185,7 @@ class ChatAgent(BaseAgent):
1040
1185
  # TODO: Handle tool calls
1041
1186
  return ModelResponse(
1042
1187
  response=response,
1043
- tool_call_request=None,
1188
+ tool_call_requests=None,
1044
1189
  output_messages=output_messages,
1045
1190
  finish_reasons=finish_reasons,
1046
1191
  usage_dict=usage_dict,
@@ -70,6 +70,11 @@ provided Node and Relationship classes.
70
70
  Ensure that the extracted data adheres to the structure defined by the classes.
71
71
  Output the structured data in a format that can be easily validated against
72
72
  the provided code.
73
+ Do not wrap the output in lists or dictionaries, provide the Node and
74
+ Relationship with unique identifiers.
75
+ Strictly follow the format provided in the example output, do not add any
76
+ additional information.
77
+
73
78
 
74
79
  Instructions for you:
75
80
  Read the provided content thoroughly.
@@ -15,7 +15,7 @@ from __future__ import annotations
15
15
 
16
16
  from typing import Dict, Optional, Sequence, Type, Union
17
17
 
18
- from pydantic import BaseModel, Field
18
+ from pydantic import BaseModel
19
19
 
20
20
  from camel.configs.base_config import BaseConfig
21
21
 
@@ -28,14 +28,14 @@ class ChatGPTConfig(BaseConfig):
28
28
  temperature (float, optional): Sampling temperature to use, between
29
29
  :obj:`0` and :obj:`2`. Higher values make the output more random,
30
30
  while lower values make it more focused and deterministic.
31
- (default: :obj:`0.2`)
31
+ (default: :obj:`None`)
32
32
  top_p (float, optional): An alternative to sampling with temperature,
33
33
  called nucleus sampling, where the model considers the results of
34
34
  the tokens with top_p probability mass. So :obj:`0.1` means only
35
35
  the tokens comprising the top 10% probability mass are considered.
36
- (default: :obj:`1.0`)
36
+ (default: :obj:`None`)
37
37
  n (int, optional): How many chat completion choices to generate for
38
- each input message. (default: :obj:`1`)
38
+ each input message. (default: :obj:`None`)
39
39
  response_format (object, optional): An object specifying the format
40
40
  that the model must output. Compatible with GPT-4 Turbo and all
41
41
  GPT-3.5 Turbo models newer than gpt-3.5-turbo-1106. Setting to
@@ -51,7 +51,7 @@ class ChatGPTConfig(BaseConfig):
51
51
  max context length.
52
52
  stream (bool, optional): If True, partial message deltas will be sent
53
53
  as data-only server-sent events as they become available.
54
- (default: :obj:`False`)
54
+ (default: :obj:`None`)
55
55
  stop (str or list, optional): Up to :obj:`4` sequences where the API
56
56
  will stop generating further tokens. (default: :obj:`None`)
57
57
  max_tokens (int, optional): The maximum number of tokens to generate
@@ -62,12 +62,12 @@ class ChatGPTConfig(BaseConfig):
62
62
  :obj:`2.0`. Positive values penalize new tokens based on whether
63
63
  they appear in the text so far, increasing the model's likelihood
64
64
  to talk about new topics. See more information about frequency and
65
- presence penalties. (default: :obj:`0.0`)
65
+ presence penalties. (default: :obj:`None`)
66
66
  frequency_penalty (float, optional): Number between :obj:`-2.0` and
67
67
  :obj:`2.0`. Positive values penalize new tokens based on their
68
68
  existing frequency in the text so far, decreasing the model's
69
69
  likelihood to repeat the same line verbatim. See more information
70
- about frequency and presence penalties. (default: :obj:`0.0`)
70
+ about frequency and presence penalties. (default: :obj:`None`)
71
71
  logit_bias (dict, optional): Modify the likelihood of specified tokens
72
72
  appearing in the completion. Accepts a json object that maps tokens
73
73
  (specified by their token ID in the tokenizer) to an associated
@@ -76,7 +76,7 @@ class ChatGPTConfig(BaseConfig):
76
76
  The exact effect will vary per model, but values between:obj:` -1`
77
77
  and :obj:`1` should decrease or increase likelihood of selection;
78
78
  values like :obj:`-100` or :obj:`100` should result in a ban or
79
- exclusive selection of the relevant token. (default: :obj:`{}`)
79
+ exclusive selection of the relevant token. (default: :obj:`None`)
80
80
  user (str, optional): A unique identifier representing your end-user,
81
81
  which can help OpenAI to monitor and detect abuse.
82
82
  (default: :obj:`""`)
@@ -101,21 +101,25 @@ class ChatGPTConfig(BaseConfig):
101
101
  :obj:`o1mini`, :obj:`o1preview`, :obj:`o3mini`). If not provided
102
102
  or if the model type does not support it, this parameter is
103
103
  ignored. (default: :obj:`None`)
104
+ parallel_tool_calls (bool, optional): A parameter specifying whether
105
+ the model should call tools in parallel or not. (default:
106
+ :obj:`None`)
104
107
  """
105
108
 
106
- temperature: float = 0.2 # openai default: 1.0
107
- top_p: float = 1.0
108
- n: int = 1
109
- stream: bool = False
109
+ temperature: Optional[float] = None
110
+ top_p: Optional[float] = None
111
+ n: Optional[int] = None
112
+ stream: Optional[bool] = None
110
113
  stop: Optional[Union[str, Sequence[str]]] = None
111
114
  max_tokens: Optional[int] = None
112
- presence_penalty: float = 0.0
115
+ presence_penalty: Optional[float] = None
113
116
  response_format: Optional[Union[Type[BaseModel], Dict]] = None
114
- frequency_penalty: float = 0.0
115
- logit_bias: Dict = Field(default_factory=dict)
116
- user: str = ""
117
+ frequency_penalty: Optional[float] = None
118
+ logit_bias: Optional[Dict] = None
119
+ user: Optional[str] = None
117
120
  tool_choice: Optional[Union[Dict[str, str], str]] = None
118
121
  reasoning_effort: Optional[str] = None
122
+ parallel_tool_calls: Optional[bool] = None
119
123
 
120
124
 
121
125
  OPENAI_API_PARAMS = {param for param in ChatGPTConfig.model_fields.keys()}
@@ -11,10 +11,8 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
  # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
- from .base_generator import (
15
- BaseGenerator,
16
- FewShotGenerator,
17
- )
14
+ from .base_generator import BaseGenerator
15
+ from .few_shot_generator import FewShotGenerator
18
16
  from .models import DataPoint
19
17
  from .static_dataset import StaticDataset
20
18