camel-ai 0.2.25__tar.gz → 0.2.27__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 (348) hide show
  1. {camel_ai-0.2.25 → camel_ai-0.2.27}/PKG-INFO +2 -1
  2. {camel_ai-0.2.25 → camel_ai-0.2.27}/README.md +1 -0
  3. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/__init__.py +1 -1
  4. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/chat_agent.py +4 -4
  5. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/knowledge_graph_agent.py +15 -3
  6. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/anthropic_config.py +0 -1
  7. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datasets/base.py +219 -17
  8. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/environments/base.py +16 -8
  9. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/extractors/__init__.py +2 -2
  10. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/extractors/base.py +86 -64
  11. camel_ai-0.2.27/camel/extractors/python_strategies.py +226 -0
  12. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/__init__.py +4 -0
  13. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/anthropic_model.py +19 -55
  14. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/azure_openai_model.py +88 -8
  15. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/model_factory.py +3 -0
  16. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/openai_compatible_model.py +88 -8
  17. camel_ai-0.2.27/camel/models/volcano_model.py +100 -0
  18. camel_ai-0.2.27/camel/py.typed +0 -0
  19. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/graph_storages/graph_element.py +3 -1
  20. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/graph_storages/neo4j_graph.py +78 -4
  21. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/__init__.py +4 -2
  22. camel_ai-0.2.25/camel/toolkits/web_toolkit.py → camel_ai-0.2.27/camel/toolkits/browser_toolkit.py +143 -76
  23. camel_ai-0.2.27/camel/toolkits/pubmed_toolkit.py +346 -0
  24. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/search_toolkit.py +63 -0
  25. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/terminal_toolkit.py +2 -2
  26. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/types/enums.py +7 -0
  27. {camel_ai-0.2.25 → camel_ai-0.2.27}/pyproject.toml +2 -1
  28. {camel_ai-0.2.25 → camel_ai-0.2.27}/.gitignore +0 -0
  29. {camel_ai-0.2.25 → camel_ai-0.2.27}/LICENSE +0 -0
  30. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/__init__.py +0 -0
  31. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/_types.py +0 -0
  32. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/_utils.py +0 -0
  33. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/base.py +0 -0
  34. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/critic_agent.py +0 -0
  35. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/deductive_reasoner_agent.py +0 -0
  36. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/embodied_agent.py +0 -0
  37. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/multi_hop_generator_agent.py +0 -0
  38. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/programmed_agent_instruction.py +0 -0
  39. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/role_assignment_agent.py +0 -0
  40. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/search_agent.py +0 -0
  41. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/task_agent.py +0 -0
  42. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/tool_agents/__init__.py +0 -0
  43. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/tool_agents/base.py +0 -0
  44. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  45. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/__init__.py +0 -0
  46. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/apibank.py +0 -0
  47. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/apibench.py +0 -0
  48. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/base.py +0 -0
  49. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/gaia.py +0 -0
  50. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/nexus.py +0 -0
  51. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/benchmarks/ragbench.py +0 -0
  52. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/__init__.py +0 -0
  53. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/discord/__init__.py +0 -0
  54. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/discord/discord_app.py +0 -0
  55. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/discord/discord_installation.py +0 -0
  56. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/discord/discord_store.py +0 -0
  57. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/slack/__init__.py +0 -0
  58. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/slack/models.py +0 -0
  59. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/slack/slack_app.py +0 -0
  60. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/bots/telegram_bot.py +0 -0
  61. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/__init__.py +0 -0
  62. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/aiml_config.py +0 -0
  63. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/base_config.py +0 -0
  64. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/cohere_config.py +0 -0
  65. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/deepseek_config.py +0 -0
  66. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/gemini_config.py +0 -0
  67. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/groq_config.py +0 -0
  68. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/internlm_config.py +0 -0
  69. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/litellm_config.py +0 -0
  70. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/mistral_config.py +0 -0
  71. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/moonshot_config.py +0 -0
  72. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/nvidia_config.py +0 -0
  73. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/ollama_config.py +0 -0
  74. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/openai_config.py +0 -0
  75. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/qwen_config.py +0 -0
  76. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/reka_config.py +0 -0
  77. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/samba_config.py +0 -0
  78. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/sglang_config.py +0 -0
  79. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/siliconflow_config.py +0 -0
  80. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/togetherai_config.py +0 -0
  81. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/vllm_config.py +0 -0
  82. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/yi_config.py +0 -0
  83. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/configs/zhipuai_config.py +0 -0
  84. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/data_collector/__init__.py +0 -0
  85. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/data_collector/alpaca_collector.py +0 -0
  86. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/data_collector/base.py +0 -0
  87. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/data_collector/sharegpt_collector.py +0 -0
  88. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/__init__.py +0 -0
  89. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/cot_datagen.py +0 -0
  90. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_improving_cot.py +0 -0
  91. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/__init__.py +0 -0
  92. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  93. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  94. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  95. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  96. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/self_instruct.py +0 -0
  97. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/self_instruct/templates.py +0 -0
  98. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/source2synth/__init__.py +0 -0
  99. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/source2synth/data_processor.py +0 -0
  100. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/source2synth/models.py +0 -0
  101. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  102. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datahubs/__init__.py +0 -0
  103. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datahubs/base.py +0 -0
  104. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datahubs/huggingface.py +0 -0
  105. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datahubs/models.py +0 -0
  106. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/datasets/__init__.py +0 -0
  107. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/__init__.py +0 -0
  108. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/base.py +0 -0
  109. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/jina_embedding.py +0 -0
  110. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/mistral_embedding.py +0 -0
  111. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/openai_compatible_embedding.py +0 -0
  112. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/openai_embedding.py +0 -0
  113. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  114. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/embeddings/vlm_embedding.py +0 -0
  115. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/environments/__init__.py +0 -0
  116. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/generators.py +0 -0
  117. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/human.py +0 -0
  118. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/__init__.py +0 -0
  119. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/base.py +0 -0
  120. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/docker/Dockerfile +0 -0
  121. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/docker_interpreter.py +0 -0
  122. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/e2b_interpreter.py +0 -0
  123. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/internal_python_interpreter.py +0 -0
  124. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/interpreter_error.py +0 -0
  125. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/ipython_interpreter.py +0 -0
  126. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/interpreters/subprocess_interpreter.py +0 -0
  127. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/__init__.py +0 -0
  128. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/apify_reader.py +0 -0
  129. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/base_io.py +0 -0
  130. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/chunkr_reader.py +0 -0
  131. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/firecrawl_reader.py +0 -0
  132. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/jina_url_reader.py +0 -0
  133. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/mineru_extractor.py +0 -0
  134. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/panda_reader.py +0 -0
  135. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/loaders/unstructured_io.py +0 -0
  136. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/logger.py +0 -0
  137. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/__init__.py +0 -0
  138. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/agent_memories.py +0 -0
  139. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/base.py +0 -0
  140. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/blocks/__init__.py +0 -0
  141. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/blocks/chat_history_block.py +0 -0
  142. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/blocks/vectordb_block.py +0 -0
  143. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/context_creators/__init__.py +0 -0
  144. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/context_creators/score_based.py +0 -0
  145. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/memories/records.py +0 -0
  146. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/__init__.py +0 -0
  147. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/base.py +0 -0
  148. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/__init__.py +0 -0
  149. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/alpaca.py +0 -0
  150. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/conversation_models.py +0 -0
  151. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  152. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  153. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  154. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  155. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/messages/func_message.py +0 -0
  156. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/_utils.py +0 -0
  157. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/aiml_model.py +0 -0
  158. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/base_audio_model.py +0 -0
  159. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/base_model.py +0 -0
  160. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/cohere_model.py +0 -0
  161. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/deepseek_model.py +0 -0
  162. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/fish_audio_model.py +0 -0
  163. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/gemini_model.py +0 -0
  164. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/groq_model.py +0 -0
  165. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/internlm_model.py +0 -0
  166. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/litellm_model.py +0 -0
  167. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/mistral_model.py +0 -0
  168. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/model_manager.py +0 -0
  169. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/moonshot_model.py +0 -0
  170. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/nemotron_model.py +0 -0
  171. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/nvidia_model.py +0 -0
  172. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/ollama_model.py +0 -0
  173. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/openai_audio_models.py +0 -0
  174. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/openai_model.py +0 -0
  175. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/qwen_model.py +0 -0
  176. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/reka_model.py +0 -0
  177. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/reward/__init__.py +0 -0
  178. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/reward/base_reward_model.py +0 -0
  179. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/reward/evaluator.py +0 -0
  180. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/reward/nemotron_model.py +0 -0
  181. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/reward/skywork_model.py +0 -0
  182. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/samba_model.py +0 -0
  183. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/sglang_model.py +0 -0
  184. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/siliconflow_model.py +0 -0
  185. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/stub_model.py +0 -0
  186. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/togetherai_model.py +0 -0
  187. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/vllm_model.py +0 -0
  188. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/yi_model.py +0 -0
  189. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/models/zhipuai_model.py +0 -0
  190. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/personas/__init__.py +0 -0
  191. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/personas/persona.py +0 -0
  192. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/personas/persona_hub.py +0 -0
  193. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/__init__.py +0 -0
  194. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/ai_society.py +0 -0
  195. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/base.py +0 -0
  196. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/code.py +0 -0
  197. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/evaluation.py +0 -0
  198. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/generate_text_embedding_data.py +0 -0
  199. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/image_craft.py +0 -0
  200. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/misalignment.py +0 -0
  201. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/multi_condition_image_craft.py +0 -0
  202. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/object_recognition.py +0 -0
  203. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/persona_hub.py +0 -0
  204. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/prompt_templates.py +0 -0
  205. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/role_description_prompt_template.py +0 -0
  206. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/solution_extraction.py +0 -0
  207. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/task_prompt_template.py +0 -0
  208. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/translation.py +0 -0
  209. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/prompts/video_description_prompt.py +0 -0
  210. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/responses/__init__.py +0 -0
  211. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/responses/agent_responses.py +0 -0
  212. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/__init__.py +0 -0
  213. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/auto_retriever.py +0 -0
  214. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/base.py +0 -0
  215. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/bm25_retriever.py +0 -0
  216. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  217. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/hybrid_retrival.py +0 -0
  218. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/retrievers/vector_retriever.py +0 -0
  219. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/__init__.py +0 -0
  220. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/api.py +0 -0
  221. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/base.py +0 -0
  222. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/configs.py +0 -0
  223. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/docker_runtime.py +0 -0
  224. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/llm_guard_runtime.py +0 -0
  225. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/remote_http_runtime.py +0 -0
  226. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/utils/__init__.py +0 -0
  227. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/utils/function_risk_toolkit.py +0 -0
  228. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/runtime/utils/ignore_risk_toolkit.py +0 -0
  229. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/schemas/__init__.py +0 -0
  230. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/schemas/base.py +0 -0
  231. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/schemas/openai_converter.py +0 -0
  232. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/schemas/outlines_converter.py +0 -0
  233. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/__init__.py +0 -0
  234. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/babyagi_playing.py +0 -0
  235. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/role_playing.py +0 -0
  236. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/__init__.py +0 -0
  237. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/base.py +0 -0
  238. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/prompts.py +0 -0
  239. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/role_playing_worker.py +0 -0
  240. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/single_agent_worker.py +0 -0
  241. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/task_channel.py +0 -0
  242. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/utils.py +0 -0
  243. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/worker.py +0 -0
  244. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/societies/workforce/workforce.py +0 -0
  245. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/__init__.py +0 -0
  246. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/graph_storages/__init__.py +0 -0
  247. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/graph_storages/base.py +0 -0
  248. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/graph_storages/nebula_graph.py +0 -0
  249. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/key_value_storages/__init__.py +0 -0
  250. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/key_value_storages/base.py +0 -0
  251. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/key_value_storages/in_memory.py +0 -0
  252. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/key_value_storages/json.py +0 -0
  253. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/key_value_storages/redis.py +0 -0
  254. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/object_storages/__init__.py +0 -0
  255. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/object_storages/amazon_s3.py +0 -0
  256. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/object_storages/azure_blob.py +0 -0
  257. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/object_storages/base.py +0 -0
  258. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/object_storages/google_cloud.py +0 -0
  259. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/vectordb_storages/__init__.py +0 -0
  260. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/vectordb_storages/base.py +0 -0
  261. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/vectordb_storages/milvus.py +0 -0
  262. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/storages/vectordb_storages/qdrant.py +0 -0
  263. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/tasks/__init__.py +0 -0
  264. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/tasks/task.py +0 -0
  265. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/tasks/task_prompt.py +0 -0
  266. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/terminators/__init__.py +0 -0
  267. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/terminators/base.py +0 -0
  268. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/terminators/response_terminator.py +0 -0
  269. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/terminators/token_limit_terminator.py +0 -0
  270. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/arxiv_toolkit.py +0 -0
  271. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/ask_news_toolkit.py +0 -0
  272. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  273. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/base.py +0 -0
  274. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/code_execution.py +0 -0
  275. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/dalle_toolkit.py +0 -0
  276. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/dappier_toolkit.py +0 -0
  277. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/data_commons_toolkit.py +0 -0
  278. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/excel_toolkit.py +0 -0
  279. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/file_write_toolkit.py +0 -0
  280. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/function_tool.py +0 -0
  281. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/github_toolkit.py +0 -0
  282. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/google_maps_toolkit.py +0 -0
  283. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/google_scholar_toolkit.py +0 -0
  284. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/human_toolkit.py +0 -0
  285. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/image_analysis_toolkit.py +0 -0
  286. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/linkedin_toolkit.py +0 -0
  287. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/math_toolkit.py +0 -0
  288. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/mcp_toolkit.py +0 -0
  289. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/meshy_toolkit.py +0 -0
  290. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/mineru_toolkit.py +0 -0
  291. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/networkx_toolkit.py +0 -0
  292. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/notion_toolkit.py +0 -0
  293. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  294. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  295. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  296. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  297. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  298. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  299. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  300. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  301. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  302. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  303. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  304. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  305. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  306. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  307. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  308. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  309. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  310. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/security_config.py +0 -0
  311. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  312. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  313. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  314. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  315. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  316. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  317. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  318. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/open_api_toolkit.py +0 -0
  319. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/openbb_toolkit.py +0 -0
  320. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/page_script.js +0 -0
  321. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/reddit_toolkit.py +0 -0
  322. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/retrieval_toolkit.py +0 -0
  323. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  324. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/slack_toolkit.py +0 -0
  325. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/stripe_toolkit.py +0 -0
  326. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/sympy_toolkit.py +0 -0
  327. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/twitter_toolkit.py +0 -0
  328. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/video_analysis_toolkit.py +0 -0
  329. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/video_download_toolkit.py +0 -0
  330. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/weather_toolkit.py +0 -0
  331. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/whatsapp_toolkit.py +0 -0
  332. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/toolkits/zapier_toolkit.py +0 -0
  333. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/types/__init__.py +0 -0
  334. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/types/agents/__init__.py +0 -0
  335. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/types/agents/tool_calling_record.py +0 -0
  336. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/types/openai_types.py +0 -0
  337. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/types/unified_model_type.py +0 -0
  338. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/__init__.py +0 -0
  339. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/async_func.py +0 -0
  340. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/commons.py +0 -0
  341. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/constants.py +0 -0
  342. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/deduplication.py +0 -0
  343. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/response_format.py +0 -0
  344. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/utils/token_counting.py +0 -0
  345. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/verifiers/__init__.py +0 -0
  346. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/verifiers/base.py +0 -0
  347. {camel_ai-0.2.25 → camel_ai-0.2.27}/camel/verifiers/models.py +0 -0
  348. {camel_ai-0.2.25 → camel_ai-0.2.27}/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.25
3
+ Version: 0.2.27
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
@@ -593,6 +593,7 @@ Practical guides and tutorials for implementing specific functionalities in CAME
593
593
  |:---|:---|
594
594
  | **[Role-Playing Scraper for Report & Knowledge Graph Generation](https://docs.camel-ai.org/cookbooks/applications/roleplaying_scraper.html)** | Create role-playing agents for data scraping and reporting. |
595
595
  | **[Create A Hackathon Judge Committee with Workforce](https://docs.camel-ai.org/cookbooks/multi_agent_society/workforce_judge_committee.html)** | Building a team of agents for collaborative judging. |
596
+ | **[Dynamic Knowledge Graph Role-Playing: Multi-Agent System with dynamic, temporally-aware knowledge graphs](https://docs.camel-ai.org/cookbooks/applications/dyamic_knowledge_graph.html)** | Builds dynamic, temporally-aware knowledge graphs for financial applications using a multi-agent system. It processes financial reports, news articles, and research papers to help traders analyze data, identify relationships, and uncover market insights. The system also utilizes diverse and optional element node deduplication techniques to ensure data integrity and optimize graph structure for financial decision-making. |
596
597
  | **[Customer Service Discord Bot with Agentic RAG](https://docs.camel-ai.org/cookbooks/applications/customer_service_Discord_bot_using_SambaNova_with_agentic_RAG.html)** | Learn how to build a robust customer service bot for Discord using Agentic RAG. |
597
598
  | **[Customer Service Discord Bot with Local Model](https://docs.camel-ai.org/cookbooks/applications/customer_service_Discord_bot_using_local_model_with_agentic_RAG.html)** | Learn how to build a robust customer service bot for Discord using Agentic RAG which supports local deployment. |
598
599
 
@@ -335,6 +335,7 @@ Practical guides and tutorials for implementing specific functionalities in CAME
335
335
  |:---|:---|
336
336
  | **[Role-Playing Scraper for Report & Knowledge Graph Generation](https://docs.camel-ai.org/cookbooks/applications/roleplaying_scraper.html)** | Create role-playing agents for data scraping and reporting. |
337
337
  | **[Create A Hackathon Judge Committee with Workforce](https://docs.camel-ai.org/cookbooks/multi_agent_society/workforce_judge_committee.html)** | Building a team of agents for collaborative judging. |
338
+ | **[Dynamic Knowledge Graph Role-Playing: Multi-Agent System with dynamic, temporally-aware knowledge graphs](https://docs.camel-ai.org/cookbooks/applications/dyamic_knowledge_graph.html)** | Builds dynamic, temporally-aware knowledge graphs for financial applications using a multi-agent system. It processes financial reports, news articles, and research papers to help traders analyze data, identify relationships, and uncover market insights. The system also utilizes diverse and optional element node deduplication techniques to ensure data integrity and optimize graph structure for financial decision-making. |
338
339
  | **[Customer Service Discord Bot with Agentic RAG](https://docs.camel-ai.org/cookbooks/applications/customer_service_Discord_bot_using_SambaNova_with_agentic_RAG.html)** | Learn how to build a robust customer service bot for Discord using Agentic RAG. |
339
340
  | **[Customer Service Discord Bot with Local Model](https://docs.camel-ai.org/cookbooks/applications/customer_service_Discord_bot_using_local_model_with_agentic_RAG.html)** | Learn how to build a robust customer service bot for Discord using Agentic RAG which supports local deployment. |
340
341
 
@@ -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.25'
17
+ __version__ = '0.2.27'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -699,12 +699,12 @@ class ChatAgent(BaseAgent):
699
699
  if not response and self.model_backend.num_models > 1:
700
700
  raise ModelProcessingError(
701
701
  "Unable to process messages: none of the provided models "
702
- "run succesfully."
702
+ "run successfully."
703
703
  )
704
704
  elif not response:
705
705
  raise ModelProcessingError(
706
706
  f"Unable to process messages: the only provided model "
707
- f"did not run succesfully. Error: {error_info}"
707
+ f"did not run successfully. Error: {error_info}"
708
708
  )
709
709
 
710
710
  logger.info(
@@ -744,12 +744,12 @@ class ChatAgent(BaseAgent):
744
744
  if not response and self.model_backend.num_models > 1:
745
745
  raise ModelProcessingError(
746
746
  "Unable to process messages: none of the provided models "
747
- "run succesfully."
747
+ "run successfully."
748
748
  )
749
749
  elif not response:
750
750
  raise ModelProcessingError(
751
751
  f"Unable to process messages: the only provided model "
752
- f"did not run succesfully. Error: {error_info}"
752
+ f"did not run successfully. Error: {error_info}"
753
753
  )
754
754
 
755
755
  logger.info(
@@ -226,7 +226,8 @@ class KnowledgeGraphAgent(ChatAgent):
226
226
  node_pattern = r"Node\(id='(.*?)', type='(.*?)'\)"
227
227
  rel_pattern = (
228
228
  r"Relationship\(subj=Node\(id='(.*?)', type='(.*?)'\), "
229
- r"obj=Node\(id='(.*?)', type='(.*?)'\), type='(.*?)'\)"
229
+ r"obj=Node\(id='(.*?)', type='(.*?)'\), "
230
+ r"type='(.*?)'(?:, timestamp='(.*?)')?\)"
230
231
  )
231
232
 
232
233
  nodes = {}
@@ -243,13 +244,24 @@ class KnowledgeGraphAgent(ChatAgent):
243
244
 
244
245
  # Extract relationships
245
246
  for match in re.finditer(rel_pattern, input_string):
246
- subj_id, subj_type, obj_id, obj_type, rel_type = match.groups()
247
+ groups = match.groups()
248
+ if len(groups) == 6:
249
+ subj_id, subj_type, obj_id, obj_type, rel_type, timestamp = (
250
+ groups
251
+ )
252
+ else:
253
+ subj_id, subj_type, obj_id, obj_type, rel_type = groups
254
+ timestamp = None
247
255
  properties = {'source': 'agent_created'}
248
256
  if subj_id in nodes and obj_id in nodes:
249
257
  subj = nodes[subj_id]
250
258
  obj = nodes[obj_id]
251
259
  relationship = Relationship(
252
- subj=subj, obj=obj, type=rel_type, properties=properties
260
+ subj=subj,
261
+ obj=obj,
262
+ type=rel_type,
263
+ timestamp=timestamp,
264
+ properties=properties,
253
265
  )
254
266
  if self._validate_relationship(relationship):
255
267
  relationships.append(relationship)
@@ -70,7 +70,6 @@ class AnthropicConfig(BaseConfig):
70
70
  stop_sequences: ClassVar[Union[List[str], NotGiven]] = []
71
71
  temperature: float = 1
72
72
  top_p: Union[float, NotGiven] = 0.7
73
- top_k: Union[int, NotGiven] = 5
74
73
  stream: bool = False
75
74
  metadata: Union[dict, NotGiven] = NotGiven()
76
75
  thinking: Union[dict, NotGiven] = NotGiven()
@@ -12,14 +12,17 @@
12
12
  # limitations under the License.
13
13
  # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
 
15
+ import json
15
16
  import os
16
17
  import random
18
+ from pathlib import Path
17
19
  from typing import (
18
20
  Any,
19
21
  Callable,
20
22
  Dict,
21
23
  List,
22
24
  Optional,
25
+ Sized,
23
26
  TypeVar,
24
27
  Union,
25
28
  )
@@ -326,42 +329,241 @@ class SeedDataset(BaseDataset):
326
329
  r"""A dataset containing validated seed examples for data generation.
327
330
  Ensures that all items adhere to the DataPoint schema.
328
331
 
329
- This class is used to initialize a dataset from a list of dictionary items,
330
- validating each against the DataPoint schema.
332
+ This class can initialize from Hugging Face Datasets,
333
+ PyTorch Datasets, JSON file paths, or lists of dictionaries,
334
+ converting them into a consistent internal format.
331
335
  """
332
336
 
333
337
  def __init__(
334
338
  self,
335
- data: List[Dict[str, str]],
339
+ data: Union[HFDataset, Dataset, Path, List[Dict[str, Any]]],
336
340
  cache_dir: Optional[str] = None,
341
+ seed: Optional[int] = None,
337
342
  min_samples: int = 1,
343
+ strict: bool = False,
338
344
  **kwargs,
339
345
  ):
340
- r"""Initialize the seed dataset.
346
+ r"""Initialize the seed dataset and validate integrity.
341
347
 
342
348
  Args:
343
- data (List[Dict[str, str]]): List of dictionary items to create the
344
- dataset from.
345
- cache_dir (Optional[str]): Directory to cache dataset files.
346
- (default: :obj:`None`)
349
+ data (Union[HFDataset, Dataset, Path, List[Dict[str, Any]]]):
350
+ Input data, which can be:
351
+ - A Hugging Face Dataset (HFDataset)
352
+ - A PyTorch Dataset (torch.utils.data.Dataset)
353
+ - A Path object representing the path to a JSON file
354
+ - A list of dictionaries with DataPoint-compatible fields
355
+ seed (Optional[int]): Seed for reproducibility.
356
+ (default: :obj:`1`)
347
357
  min_samples (int): Minimum number of samples required.
348
358
  (default: :obj:`1`)
359
+ strict (bool): Whether to raise an error on invalid datapoints
360
+ (True) or skip/filter them (False). (default: False)
349
361
  **kwargs: Additional dataset parameters.
350
362
 
351
363
  Raises:
352
- ValueError: If dataset size is less than min_samples or if sample
353
- validation fails.
364
+ TypeError: If the data type is not supported.
365
+ ValueError: If dataset size is less than min_samples or
366
+ if sample validation fails.
367
+ FileNotFoundError: If the JSON file path doesn't exist.
368
+ json.JSONDecodeError: If the JSON file is invalid.
354
369
  """
355
- if len(data) < min_samples:
370
+ # Initialize BaseDataset with empty data, we'll populate it ourselves
371
+ super().__init__(data=[], cache_dir=cache_dir, **kwargs)
372
+
373
+ self._rng = random.Random(seed)
374
+ self._strict = strict
375
+
376
+ # Type checking and conversion into list of dicts to have a
377
+ # consistent internal format. Since Seed Dataset should be
378
+ # small, we can load it entirely into memory
379
+
380
+ self.data: List[DataPoint] = self._init_data(data)
381
+ self._length = len(self.data)
382
+
383
+ if self._length < min_samples:
356
384
  raise ValueError(
357
- f"Seed dataset must contain at least {min_samples} samples."
385
+ "The dataset does not contain enough samples. "
386
+ f"Need {max(0, min_samples)}, got {self._length}"
358
387
  )
359
388
 
360
- super().__init__(
361
- data=data,
362
- cache_dir=cache_dir,
363
- **kwargs,
364
- )
389
+ def _init_data(
390
+ self, data: Union[HFDataset, Dataset, Path, List[Dict[str, Any]]]
391
+ ) -> List[DataPoint]:
392
+ if isinstance(data, HFDataset):
393
+ raw_data = self._init_from_hf_dataset(data)
394
+ elif isinstance(data, Dataset):
395
+ raw_data = self._init_from_pytorch_dataset(data)
396
+ elif isinstance(data, Path):
397
+ raw_data = self._init_from_json_path(data)
398
+ elif isinstance(data, list):
399
+ raw_data = self._init_from_list(data)
400
+ else:
401
+ raise TypeError("Unsupported data type")
402
+
403
+ def create_datapoint(
404
+ item: Dict[str, Any], idx: int
405
+ ) -> Optional[DataPoint]:
406
+ # Add type checks for required fields to make mypy happy
407
+ question = item.get('question')
408
+ if not isinstance(question, str):
409
+ if self._strict:
410
+ raise ValueError(
411
+ f"Sample at index {idx} has invalid 'question': "
412
+ f"expected str, got {type(question)}"
413
+ )
414
+ else:
415
+ logger.warning(
416
+ f"Skipping sample at index {idx}: invalid 'question'"
417
+ )
418
+ return None
419
+
420
+ rationale = item.get('rationale')
421
+ if not isinstance(rationale, str):
422
+ if self._strict:
423
+ raise ValueError(
424
+ f"Sample at index {idx} has invalid 'rationale': "
425
+ f"expected str, got {type(rationale)}"
426
+ )
427
+ else:
428
+ logger.warning(
429
+ f"Skipping sample at index {idx}: invalid 'rationale'"
430
+ )
431
+ return None
432
+
433
+ final_answer = item.get('final_answer')
434
+ if not isinstance(final_answer, str):
435
+ if self._strict:
436
+ raise ValueError(
437
+ f"Sample at index {idx} has invalid 'final_answer': "
438
+ f"expected str, got {type(final_answer)}"
439
+ )
440
+ else:
441
+ logger.warning(
442
+ f"Skipping sample at index {idx}: "
443
+ "invalid 'final_answer'"
444
+ )
445
+ return None
446
+
447
+ try:
448
+ return DataPoint(
449
+ question=question,
450
+ rationale=rationale,
451
+ final_answer=final_answer,
452
+ metadata=item.get('metadata'),
453
+ difficulty=item.get('difficulty'),
454
+ )
455
+ except ValidationError as e:
456
+ if self._strict:
457
+ raise ValueError(
458
+ f"Sample at index {idx} validation error: {e}"
459
+ )
460
+ else:
461
+ logger.warning(
462
+ f"Skipping invalid sample at index {idx} "
463
+ f"due to validation error: {e}"
464
+ )
465
+ return None
466
+
467
+ unfiltered_data = [
468
+ create_datapoint(item, i) for i, item in enumerate(raw_data)
469
+ ]
470
+ return [dp for dp in unfiltered_data if dp is not None]
471
+
472
+ def __len__(self) -> int:
473
+ r"""Return the size of the dataset."""
474
+ return self._length
475
+
476
+ def __getitem__(self, idx: int) -> DataPoint:
477
+ r"""Get an item from the dataset.
478
+
479
+ Args:
480
+ idx (int): Index of the item to get.
481
+
482
+ Returns:
483
+ DataPoint: DataPoint from the dataset with the given index.
484
+
485
+ Raises:
486
+ IndexError: If idx is out of bounds.
487
+ """
488
+ if idx < 0 or idx >= self._length:
489
+ raise IndexError(
490
+ f"Index {idx} out of bounds for dataset of size {self._length}"
491
+ )
492
+ return self.data[idx]
493
+
494
+ def sample(self) -> DataPoint:
495
+ r"""Sample a random datapoint from the dataset.
496
+
497
+ Returns:
498
+ DataPoint: A randomly sampled DataPoint.
499
+
500
+ Raises:
501
+ RuntimeError: If the dataset is empty.
502
+ """
503
+ if self._length == 0:
504
+ raise RuntimeError("Dataset is empty, cannot sample.")
505
+ idx = self._rng.randint(0, self._length - 1)
506
+ return self[idx]
507
+
508
+ @property
509
+ def metadata(self) -> Dict[str, Any]:
510
+ r"""Get dataset metadata."""
511
+ return self._metadata.copy()
512
+
513
+ def _init_from_hf_dataset(self, data: HFDataset) -> List[Dict[str, Any]]:
514
+ return [dict(item) for item in data]
515
+
516
+ def _init_from_pytorch_dataset(
517
+ self, data: Dataset
518
+ ) -> List[Dict[str, Any]]:
519
+ if not isinstance(data, Sized):
520
+ raise TypeError(
521
+ f"{type(data).__name__} does not implement `__len__()`."
522
+ )
523
+ raw_data = []
524
+
525
+ for i in range(len(data)):
526
+ item = data[i]
527
+ if not isinstance(item, dict):
528
+ raise TypeError(
529
+ f"Item at index {i} is not a dict: "
530
+ f"got {type(item).__name__}"
531
+ )
532
+ raw_data.append(dict(item))
533
+ return raw_data
534
+
535
+ def _init_from_json_path(self, data: Path) -> List[Dict[str, Any]]:
536
+ if not data.exists():
537
+ raise FileNotFoundError(f"JSON file not found: {data}")
538
+ try:
539
+ logger.debug(f"Loading JSON from {data}")
540
+ with data.open('r', encoding='utf-8') as f:
541
+ loaded_data = json.load(f)
542
+ logger.info(
543
+ f"Successfully loaded {len(loaded_data)} items from {data}"
544
+ )
545
+ except json.JSONDecodeError as e:
546
+ raise ValueError(f"Invalid JSON in file {data}: {e}")
547
+ if not isinstance(loaded_data, list):
548
+ raise ValueError("JSON file must contain a list of dictionaries")
549
+ for i, item in enumerate(loaded_data):
550
+ if not isinstance(item, dict):
551
+ raise ValueError(
552
+ f"Expected a dictionary at index {i}, "
553
+ f"got {type(item).__name__}"
554
+ )
555
+ return loaded_data
556
+
557
+ def _init_from_list(
558
+ self, data: List[Dict[str, Any]]
559
+ ) -> List[Dict[str, Any]]:
560
+ for i, item in enumerate(data):
561
+ if not isinstance(item, dict):
562
+ raise ValueError(
563
+ f"Expected a dictionary at index {i}, "
564
+ f"got {type(item).__name__}"
565
+ )
566
+ return data
365
567
 
366
568
 
367
569
  class SyntheticDataset(BaseDataset):
@@ -151,20 +151,26 @@ class BaseEnvironment(ABC):
151
151
  r"""Initialize the environment.
152
152
 
153
153
  Args:
154
- dataset: Dataset to sample questions from.
155
- verifier: Verifier to check responses.
156
- extractor: Extractor to process LLM responses.
157
- max_steps: Maximum steps per episode.
158
- teacher_agent: Optional agent for reward shaping and hints
159
- curriculum_config: Configuration for curriculum learning including:
154
+ dataset (BaseDataset): Dataset to sample questions from.
155
+ verifier (BaseVerifier): Verifier to check responses.
156
+ extractor (BaseExtractor): Extractor to process LLM responses.
157
+ max_steps (Optional[int]): Maximum steps per episode. (default:
158
+ :obj:`None`)
159
+ teacher_agent (Optional[ChatAgent]): Optional agent for reward
160
+ shaping and hints. (default: :obj:`None`)
161
+ curriculum_config (Optional[Dict[str, Any]]): Configuration for
162
+ curriculum learning including:
160
163
  - difficulty_levels: List of available difficulty levels
161
164
  - promotion_threshold: Score needed to advance
162
165
  - demotion_threshold: Score triggering level decrease
163
166
  - min_questions_per_level: Questions before promotion
164
- practice_env_config: Configuration for practice environments:
167
+ (default: :obj:`None`)
168
+ practice_env_config (Optional[Dict[str, Any]]): Configuration for
169
+ practice environments:
165
170
  - max_practice_envs: Maximum concurrent environments
166
171
  - difficulty_range: Allowed difficulty variation
167
172
  - focus_areas: Specific skills to practice
173
+ (default: :obj:`None`)
168
174
  **kwargs: Additional environment parameters.
169
175
  """
170
176
  self.dataset = dataset
@@ -289,7 +295,9 @@ class BaseEnvironment(ABC):
289
295
  # extract verifiable part from llm response
290
296
  extraction_result = await self.extractor.extract(action.llm_response)
291
297
 
292
- # TODO: extract executable llm response specifically
298
+ # Ensure extraction_result is a string
299
+ if extraction_result is None:
300
+ extraction_result = ""
293
301
 
294
302
  # verify the extracted
295
303
  verification_result = await self.verifier.verify(
@@ -11,6 +11,6 @@
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 import BaseExtractor
14
+ from .base import BaseExtractor, BaseExtractorStrategy
15
15
 
16
- __all__ = ["BaseExtractor"]
16
+ __all__ = ["BaseExtractor", "BaseExtractorStrategy"]