camel-ai 0.2.69a7__tar.gz → 0.2.70__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 (444) hide show
  1. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/PKG-INFO +5 -1
  2. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/role_playing.py +26 -28
  4. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/workforce.py +226 -118
  5. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/workforce_logger.py +37 -23
  6. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/__init__.py +2 -0
  7. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/__init__.py +2 -0
  8. camel_ai-0.2.70/camel/storages/vectordb_storages/pgvector.py +349 -0
  9. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/file_write_toolkit.py +21 -7
  10. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/terminal_toolkit.py +11 -4
  11. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/enums.py +3 -0
  12. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/pyproject.toml +8 -1
  13. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/.gitignore +0 -0
  14. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/LICENSE +0 -0
  15. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/README.md +0 -0
  16. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/__init__.py +0 -0
  17. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/_types.py +0 -0
  18. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/_utils.py +0 -0
  19. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/base.py +0 -0
  20. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/chat_agent.py +0 -0
  21. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/critic_agent.py +0 -0
  22. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/deductive_reasoner_agent.py +0 -0
  23. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/embodied_agent.py +0 -0
  24. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/knowledge_graph_agent.py +0 -0
  25. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/mcp_agent.py +0 -0
  26. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/multi_hop_generator_agent.py +0 -0
  27. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/programmed_agent_instruction.py +0 -0
  28. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/repo_agent.py +0 -0
  29. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/role_assignment_agent.py +0 -0
  30. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/search_agent.py +0 -0
  31. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/task_agent.py +0 -0
  32. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/tool_agents/__init__.py +0 -0
  33. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/tool_agents/base.py +0 -0
  34. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  35. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/__init__.py +0 -0
  36. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/apibank.py +0 -0
  37. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/apibench.py +0 -0
  38. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/base.py +0 -0
  39. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/browsecomp.py +0 -0
  40. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/gaia.py +0 -0
  41. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/README.md +0 -0
  42. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/mock_web.py +0 -0
  43. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/requirements.txt +0 -0
  44. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  45. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/task.json +0 -0
  46. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/nexus.py +0 -0
  47. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/ragbench.py +0 -0
  48. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/__init__.py +0 -0
  49. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/__init__.py +0 -0
  50. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/discord_app.py +0 -0
  51. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/discord_installation.py +0 -0
  52. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/discord_store.py +0 -0
  53. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/slack/__init__.py +0 -0
  54. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/slack/models.py +0 -0
  55. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/slack/slack_app.py +0 -0
  56. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/telegram_bot.py +0 -0
  57. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/__init__.py +0 -0
  58. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/aiml_config.py +0 -0
  59. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/anthropic_config.py +0 -0
  60. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/base_config.py +0 -0
  61. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/bedrock_config.py +0 -0
  62. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/cohere_config.py +0 -0
  63. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/crynux_config.py +0 -0
  64. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/deepseek_config.py +0 -0
  65. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/gemini_config.py +0 -0
  66. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/groq_config.py +0 -0
  67. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/internlm_config.py +0 -0
  68. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/litellm_config.py +0 -0
  69. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/lmstudio_config.py +0 -0
  70. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/mistral_config.py +0 -0
  71. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/modelscope_config.py +0 -0
  72. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/moonshot_config.py +0 -0
  73. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/netmind_config.py +0 -0
  74. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/novita_config.py +0 -0
  75. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/nvidia_config.py +0 -0
  76. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/ollama_config.py +0 -0
  77. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/openai_config.py +0 -0
  78. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/openrouter_config.py +0 -0
  79. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/ppio_config.py +0 -0
  80. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/qianfan_config.py +0 -0
  81. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/qwen_config.py +0 -0
  82. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/reka_config.py +0 -0
  83. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/samba_config.py +0 -0
  84. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/sglang_config.py +0 -0
  85. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/siliconflow_config.py +0 -0
  86. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/togetherai_config.py +0 -0
  87. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/vllm_config.py +0 -0
  88. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/watsonx_config.py +0 -0
  89. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/yi_config.py +0 -0
  90. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/zhipuai_config.py +0 -0
  91. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/__init__.py +0 -0
  92. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/alpaca_collector.py +0 -0
  93. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/base.py +0 -0
  94. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/sharegpt_collector.py +0 -0
  95. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/__init__.py +0 -0
  96. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/cot_datagen.py +0 -0
  97. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/__init__.py +0 -0
  98. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  99. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/scorer.py +0 -0
  100. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/templates.py +0 -0
  101. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_improving_cot.py +0 -0
  102. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/__init__.py +0 -0
  103. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  104. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  105. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  106. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  107. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/self_instruct.py +0 -0
  108. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/templates.py +0 -0
  109. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/__init__.py +0 -0
  110. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/data_processor.py +0 -0
  111. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/models.py +0 -0
  112. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  113. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/__init__.py +0 -0
  114. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/base.py +0 -0
  115. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/huggingface.py +0 -0
  116. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/models.py +0 -0
  117. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/__init__.py +0 -0
  118. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/base_generator.py +0 -0
  119. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/few_shot_generator.py +0 -0
  120. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/models.py +0 -0
  121. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/self_instruct_generator.py +0 -0
  122. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/static_dataset.py +0 -0
  123. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/__init__.py +0 -0
  124. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/azure_embedding.py +0 -0
  125. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/base.py +0 -0
  126. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/gemini_embedding.py +0 -0
  127. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/jina_embedding.py +0 -0
  128. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/mistral_embedding.py +0 -0
  129. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/openai_compatible_embedding.py +0 -0
  130. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/openai_embedding.py +0 -0
  131. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  132. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/together_embedding.py +0 -0
  133. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/vlm_embedding.py +0 -0
  134. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/__init__.py +0 -0
  135. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/models.py +0 -0
  136. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/multi_step.py +0 -0
  137. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/rlcards_env.py +0 -0
  138. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/single_step.py +0 -0
  139. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/tic_tac_toe.py +0 -0
  140. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/extractors/__init__.py +0 -0
  141. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/extractors/base.py +0 -0
  142. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/extractors/python_strategies.py +0 -0
  143. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/generators.py +0 -0
  144. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/human.py +0 -0
  145. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/__init__.py +0 -0
  146. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/base.py +0 -0
  147. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/docker/Dockerfile +0 -0
  148. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/docker_interpreter.py +0 -0
  149. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/e2b_interpreter.py +0 -0
  150. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/internal_python_interpreter.py +0 -0
  151. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/interpreter_error.py +0 -0
  152. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/ipython_interpreter.py +0 -0
  153. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/subprocess_interpreter.py +0 -0
  154. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/__init__.py +0 -0
  155. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/apify_reader.py +0 -0
  156. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/base_io.py +0 -0
  157. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/chunkr_reader.py +0 -0
  158. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/crawl4ai_reader.py +0 -0
  159. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/firecrawl_reader.py +0 -0
  160. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/jina_url_reader.py +0 -0
  161. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/markitdown.py +0 -0
  162. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/mineru_extractor.py +0 -0
  163. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/mistral_reader.py +0 -0
  164. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/pandas_reader.py +0 -0
  165. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/scrapegraph_reader.py +0 -0
  166. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/unstructured_io.py +0 -0
  167. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/logger.py +0 -0
  168. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/__init__.py +0 -0
  169. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/agent_memories.py +0 -0
  170. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/base.py +0 -0
  171. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/blocks/__init__.py +0 -0
  172. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/blocks/chat_history_block.py +0 -0
  173. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/blocks/vectordb_block.py +0 -0
  174. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/context_creators/__init__.py +0 -0
  175. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/context_creators/score_based.py +0 -0
  176. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/records.py +0 -0
  177. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/__init__.py +0 -0
  178. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/base.py +0 -0
  179. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/__init__.py +0 -0
  180. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/alpaca.py +0 -0
  181. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/conversation_models.py +0 -0
  182. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  183. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  184. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  185. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  186. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/func_message.py +0 -0
  187. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/__init__.py +0 -0
  188. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/_utils.py +0 -0
  189. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/aiml_model.py +0 -0
  190. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/anthropic_model.py +0 -0
  191. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/aws_bedrock_model.py +0 -0
  192. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/azure_openai_model.py +0 -0
  193. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/base_audio_model.py +0 -0
  194. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/base_model.py +0 -0
  195. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/cohere_model.py +0 -0
  196. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/crynux_model.py +0 -0
  197. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/deepseek_model.py +0 -0
  198. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/fish_audio_model.py +0 -0
  199. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/gemini_model.py +0 -0
  200. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/groq_model.py +0 -0
  201. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/internlm_model.py +0 -0
  202. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/litellm_model.py +0 -0
  203. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/lmstudio_model.py +0 -0
  204. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/mistral_model.py +0 -0
  205. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/model_factory.py +0 -0
  206. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/model_manager.py +0 -0
  207. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/modelscope_model.py +0 -0
  208. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/moonshot_model.py +0 -0
  209. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/nemotron_model.py +0 -0
  210. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/netmind_model.py +0 -0
  211. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/novita_model.py +0 -0
  212. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/nvidia_model.py +0 -0
  213. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/ollama_model.py +0 -0
  214. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openai_audio_models.py +0 -0
  215. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openai_compatible_model.py +0 -0
  216. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openai_model.py +0 -0
  217. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openrouter_model.py +0 -0
  218. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/ppio_model.py +0 -0
  219. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/qianfan_model.py +0 -0
  220. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/qwen_model.py +0 -0
  221. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reka_model.py +0 -0
  222. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/__init__.py +0 -0
  223. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/base_reward_model.py +0 -0
  224. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/evaluator.py +0 -0
  225. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/nemotron_model.py +0 -0
  226. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/skywork_model.py +0 -0
  227. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/samba_model.py +0 -0
  228. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/sglang_model.py +0 -0
  229. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/siliconflow_model.py +0 -0
  230. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/stub_model.py +0 -0
  231. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/togetherai_model.py +0 -0
  232. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/vllm_model.py +0 -0
  233. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/volcano_model.py +0 -0
  234. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/watsonx_model.py +0 -0
  235. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/yi_model.py +0 -0
  236. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/zhipuai_model.py +0 -0
  237. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/personas/__init__.py +0 -0
  238. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/personas/persona.py +0 -0
  239. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/personas/persona_hub.py +0 -0
  240. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/__init__.py +0 -0
  241. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/ai_society.py +0 -0
  242. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/base.py +0 -0
  243. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/code.py +0 -0
  244. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/evaluation.py +0 -0
  245. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/generate_text_embedding_data.py +0 -0
  246. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/image_craft.py +0 -0
  247. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/misalignment.py +0 -0
  248. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/multi_condition_image_craft.py +0 -0
  249. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/object_recognition.py +0 -0
  250. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/persona_hub.py +0 -0
  251. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/prompt_templates.py +0 -0
  252. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/role_description_prompt_template.py +0 -0
  253. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/solution_extraction.py +0 -0
  254. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/task_prompt_template.py +0 -0
  255. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/translation.py +0 -0
  256. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/video_description_prompt.py +0 -0
  257. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/py.typed +0 -0
  258. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/responses/__init__.py +0 -0
  259. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/responses/agent_responses.py +0 -0
  260. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/__init__.py +0 -0
  261. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/auto_retriever.py +0 -0
  262. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/base.py +0 -0
  263. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/bm25_retriever.py +0 -0
  264. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  265. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/hybrid_retrival.py +0 -0
  266. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/vector_retriever.py +0 -0
  267. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/__init__.py +0 -0
  268. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/api.py +0 -0
  269. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/base.py +0 -0
  270. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/configs.py +0 -0
  271. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/daytona_runtime.py +0 -0
  272. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/docker_runtime.py +0 -0
  273. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/llm_guard_runtime.py +0 -0
  274. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/remote_http_runtime.py +0 -0
  275. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  276. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/utils/__init__.py +0 -0
  277. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  278. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  279. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/__init__.py +0 -0
  280. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/base.py +0 -0
  281. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/openai_converter.py +0 -0
  282. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/outlines_converter.py +0 -0
  283. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/__init__.py +0 -0
  284. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/babyagi_playing.py +0 -0
  285. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/__init__.py +0 -0
  286. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/base.py +0 -0
  287. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/prompts.py +0 -0
  288. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/role_playing_worker.py +0 -0
  289. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/single_agent_worker.py +0 -0
  290. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/task_channel.py +0 -0
  291. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/utils.py +0 -0
  292. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/worker.py +0 -0
  293. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/__init__.py +0 -0
  294. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/base.py +0 -0
  295. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/graph_element.py +0 -0
  296. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/nebula_graph.py +0 -0
  297. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  298. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/__init__.py +0 -0
  299. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/base.py +0 -0
  300. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/in_memory.py +0 -0
  301. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/json.py +0 -0
  302. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  303. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/redis.py +0 -0
  304. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/__init__.py +0 -0
  305. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/amazon_s3.py +0 -0
  306. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/azure_blob.py +0 -0
  307. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/base.py +0 -0
  308. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/google_cloud.py +0 -0
  309. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/base.py +0 -0
  310. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/chroma.py +0 -0
  311. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/faiss.py +0 -0
  312. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/milvus.py +0 -0
  313. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  314. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/qdrant.py +0 -0
  315. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/tidb.py +0 -0
  316. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/weaviate.py +0 -0
  317. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/tasks/__init__.py +0 -0
  318. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/tasks/task.py +0 -0
  319. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/tasks/task_prompt.py +0 -0
  320. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/__init__.py +0 -0
  321. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/base.py +0 -0
  322. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/response_terminator.py +0 -0
  323. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/token_limit_terminator.py +0 -0
  324. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/__init__.py +0 -0
  325. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/aci_toolkit.py +0 -0
  326. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/arxiv_toolkit.py +0 -0
  327. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/ask_news_toolkit.py +0 -0
  328. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/async_browser_toolkit.py +0 -0
  329. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  330. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/base.py +0 -0
  331. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/bohrium_toolkit.py +0 -0
  332. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/browser_toolkit.py +0 -0
  333. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/browser_toolkit_commons.py +0 -0
  334. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/code_execution.py +0 -0
  335. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/craw4ai_toolkit.py +0 -0
  336. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/dalle_toolkit.py +0 -0
  337. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/dappier_toolkit.py +0 -0
  338. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/data_commons_toolkit.py +0 -0
  339. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
  340. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/excel_toolkit.py +0 -0
  341. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/function_tool.py +0 -0
  342. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/github_toolkit.py +0 -0
  343. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_calendar_toolkit.py +0 -0
  344. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
  345. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_maps_toolkit.py +0 -0
  346. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_scholar_toolkit.py +0 -0
  347. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/human_toolkit.py +0 -0
  348. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/image_analysis_toolkit.py +0 -0
  349. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  350. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/klavis_toolkit.py +0 -0
  351. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/linkedin_toolkit.py +0 -0
  352. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/markitdown_toolkit.py +0 -0
  353. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/math_toolkit.py +0 -0
  354. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/mcp_toolkit.py +0 -0
  355. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/memory_toolkit.py +0 -0
  356. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/meshy_toolkit.py +0 -0
  357. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/mineru_toolkit.py +0 -0
  358. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/networkx_toolkit.py +0 -0
  359. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/__init__.py +0 -0
  360. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/actions.py +0 -0
  361. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/agent.py +0 -0
  362. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/browser_non_visual_toolkit.py +0 -0
  363. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/nv_browser_session.py +0 -0
  364. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/snapshot.js +0 -0
  365. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/snapshot.py +0 -0
  366. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/notion_toolkit.py +0 -0
  367. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  368. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  369. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  370. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  371. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  372. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  373. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  374. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  375. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  376. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  377. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  378. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  379. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  380. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  381. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  382. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  383. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  384. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/security_config.py +0 -0
  385. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  386. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  387. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  388. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  389. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  390. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  391. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  392. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_toolkit.py +0 -0
  393. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/openai_agent_toolkit.py +0 -0
  394. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/openbb_toolkit.py +0 -0
  395. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/page_script.js +0 -0
  396. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  397. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pptx_toolkit.py +0 -0
  398. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pubmed_toolkit.py +0 -0
  399. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  400. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pyautogui_toolkit.py +0 -0
  401. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/reddit_toolkit.py +0 -0
  402. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/retrieval_toolkit.py +0 -0
  403. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/search_toolkit.py +0 -0
  404. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/searxng_toolkit.py +0 -0
  405. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  406. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/slack_toolkit.py +0 -0
  407. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/stripe_toolkit.py +0 -0
  408. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/sympy_toolkit.py +0 -0
  409. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/task_planning_toolkit.py +0 -0
  410. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/thinking_toolkit.py +0 -0
  411. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/twitter_toolkit.py +0 -0
  412. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/video_analysis_toolkit.py +0 -0
  413. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/video_download_toolkit.py +0 -0
  414. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/weather_toolkit.py +0 -0
  415. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/whatsapp_toolkit.py +0 -0
  416. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  417. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/zapier_toolkit.py +0 -0
  418. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/__init__.py +0 -0
  419. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/agents/__init__.py +0 -0
  420. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/agents/tool_calling_record.py +0 -0
  421. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/mcp_registries.py +0 -0
  422. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/openai_types.py +0 -0
  423. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/unified_model_type.py +0 -0
  424. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/__init__.py +0 -0
  425. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/async_func.py +0 -0
  426. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/__init__.py +0 -0
  427. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/base.py +0 -0
  428. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/code_chunker.py +0 -0
  429. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/uio_chunker.py +0 -0
  430. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/commons.py +0 -0
  431. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/constants.py +0 -0
  432. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/deduplication.py +0 -0
  433. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/filename.py +0 -0
  434. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/langfuse.py +0 -0
  435. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/mcp.py +0 -0
  436. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/mcp_client.py +0 -0
  437. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/response_format.py +0 -0
  438. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/token_counting.py +0 -0
  439. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/__init__.py +0 -0
  440. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/base.py +0 -0
  441. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/math_verifier.py +0 -0
  442. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/models.py +0 -0
  443. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/physics_verifier.py +0 -0
  444. {camel_ai-0.2.69a7 → camel_ai-0.2.70}/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.69a7
3
+ Version: 0.2.70
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
@@ -87,10 +87,12 @@ Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'all'
87
87
  Requires-Dist: openpyxl>=3.1.5; extra == 'all'
88
88
  Requires-Dist: pandas<2,>=1.5.3; extra == 'all'
89
89
  Requires-Dist: pandasai<3,>=2.3.0; extra == 'all'
90
+ Requires-Dist: pgvector<0.3,>=0.2.4; extra == 'all'
90
91
  Requires-Dist: playwright>=1.50.0; extra == 'all'
91
92
  Requires-Dist: prance<24,>=23.6.21.0; extra == 'all'
92
93
  Requires-Dist: praw<8,>=7.7.1; extra == 'all'
93
94
  Requires-Dist: pre-commit<4,>=3; extra == 'all'
95
+ Requires-Dist: psycopg[binary]<4,>=3.1.18; extra == 'all'
94
96
  Requires-Dist: pyautogui<0.10,>=0.9.54; extra == 'all'
95
97
  Requires-Dist: pydub<0.26,>=0.25.1; extra == 'all'
96
98
  Requires-Dist: pygithub<3,>=2.6.0; extra == 'all'
@@ -319,6 +321,8 @@ Requires-Dist: google-cloud-storage<3,>=2.18.0; extra == 'storage'
319
321
  Requires-Dist: mem0ai>=0.1.73; extra == 'storage'
320
322
  Requires-Dist: nebula3-python==3.8.2; extra == 'storage'
321
323
  Requires-Dist: neo4j<6,>=5.18.0; extra == 'storage'
324
+ Requires-Dist: pgvector<0.3,>=0.2.4; extra == 'storage'
325
+ Requires-Dist: psycopg[binary]<4,>=3.1.18; extra == 'storage'
322
326
  Requires-Dist: pymilvus<3,>=2.4.0; extra == 'storage'
323
327
  Requires-Dist: pyobvector>=0.1.18; extra == 'storage'
324
328
  Requires-Dist: pytidb-experimental==0.0.1.dev4; extra == 'storage'
@@ -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.69a7'
17
+ __version__ = '0.2.70'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -556,13 +556,12 @@ class RolePlaying:
556
556
  )
557
557
  user_msg = self._reduce_message_options(user_response.msgs)
558
558
 
559
- # To prevent recording the same memory more than once (once in chat
560
- # step and once in role play), and the model generates only one
561
- # response when multi-response support is enabled.
562
- if (
563
- 'n' in self.user_agent.model_backend.model_config_dict.keys()
564
- and self.user_agent.model_backend.model_config_dict['n'] > 1
565
- ):
559
+ # To prevent recording missing messages: ChatAgent.step automatically
560
+ # saves the response to memory only when a single message is returned.
561
+ # When multi-response support is enabled (n > 1), it is the caller's
562
+ # responsibility to record the selected message. Therefore, we record
563
+ # it here after choosing one message via `_reduce_message_options()`.
564
+ if self._is_multi_response(self.user_agent):
566
565
  self.user_agent.record_message(user_msg)
567
566
 
568
567
  assistant_response = self.assistant_agent.step(user_msg)
@@ -579,13 +578,7 @@ class RolePlaying:
579
578
  )
580
579
  assistant_msg = self._reduce_message_options(assistant_response.msgs)
581
580
 
582
- # To prevent recording the same memory more than once (once in chat
583
- # step and once in role play), and the model generates only one
584
- # response when multi-response support is enabled.
585
- if (
586
- 'n' in self.assistant_agent.model_backend.model_config_dict.keys()
587
- and self.assistant_agent.model_backend.model_config_dict['n'] > 1
588
- ):
581
+ if self._is_multi_response(self.assistant_agent):
589
582
  self.assistant_agent.record_message(assistant_msg)
590
583
 
591
584
  return (
@@ -639,13 +632,7 @@ class RolePlaying:
639
632
  )
640
633
  user_msg = self._reduce_message_options(user_response.msgs)
641
634
 
642
- # To prevent recording the same memory more than once (once in chat
643
- # step and once in role play), and the model generates only one
644
- # response when multi-response support is enabled.
645
- if (
646
- 'n' in self.user_agent.model_backend.model_config_dict.keys()
647
- and self.user_agent.model_backend.model_config_dict['n'] > 1
648
- ):
635
+ if self._is_multi_response(self.user_agent):
649
636
  self.user_agent.record_message(user_msg)
650
637
 
651
638
  assistant_response = await self.assistant_agent.astep(user_msg)
@@ -662,13 +649,7 @@ class RolePlaying:
662
649
  )
663
650
  assistant_msg = self._reduce_message_options(assistant_response.msgs)
664
651
 
665
- # To prevent recording the same memory more than once (once in chat
666
- # step and once in role play), and the model generates only one
667
- # response when multi-response support is enabled.
668
- if (
669
- 'n' in self.assistant_agent.model_backend.model_config_dict.keys()
670
- and self.assistant_agent.model_backend.model_config_dict['n'] > 1
671
- ):
652
+ if self._is_multi_response(self.assistant_agent):
672
653
  self.assistant_agent.record_message(assistant_msg)
673
654
 
674
655
  return (
@@ -730,3 +711,20 @@ class RolePlaying:
730
711
  new_instance.critic = self.critic.clone(with_memory)
731
712
 
732
713
  return new_instance
714
+
715
+ def _is_multi_response(self, agent: ChatAgent) -> bool:
716
+ r"""Checks if the given agent supports multi-response.
717
+
718
+ Args:
719
+ agent (ChatAgent): The agent to check for multi-response support.
720
+
721
+ Returns:
722
+ bool: True if the agent supports multi-response, False otherwise.
723
+ """
724
+ if (
725
+ 'n' in agent.model_backend.model_config_dict.keys()
726
+ and agent.model_backend.model_config_dict['n'] is not None
727
+ and agent.model_backend.model_config_dict['n'] > 1
728
+ ):
729
+ return True
730
+ return False
@@ -111,27 +111,24 @@ class Workforce(BaseNode):
111
111
  children (Optional[List[BaseNode]], optional): List of child nodes
112
112
  under this node. Each child node can be a worker node or
113
113
  another workforce node. (default: :obj:`None`)
114
- coordinator_agent_kwargs (Optional[Dict], optional): Keyword
115
- arguments passed directly to the coordinator :obj:`ChatAgent`
116
- constructor. The coordinator manages task assignment and failure
117
- handling strategies. See :obj:`ChatAgent` documentation
118
- for all available parameters.
119
- (default: :obj:`None` - uses ModelPlatformType.DEFAULT,
120
- ModelType.DEFAULT)
121
- task_agent_kwargs (Optional[Dict], optional): Keyword arguments
122
- passed directly to the task planning :obj:`ChatAgent` constructor.
123
- The task agent handles task decomposition into subtasks and result
124
- composition. See :obj:`ChatAgent` documentation for all
125
- available parameters.
126
- (default: :obj:`None` - uses ModelPlatformType.DEFAULT,
127
- ModelType.DEFAULT)
128
- new_worker_agent_kwargs (Optional[Dict], optional): Default keyword
129
- arguments passed to :obj:`ChatAgent` constructor for workers
130
- created dynamically at runtime when existing workers cannot handle
131
- failed tasks. See :obj:`ChatAgent` documentation for all
132
- available parameters.
133
- (default: :obj:`None` - creates workers with SearchToolkit,
134
- CodeExecutionToolkit, and ThinkingToolkit)
114
+ coordinator_agent (Optional[ChatAgent], optional): A custom coordinator
115
+ agent instance for task assignment and worker creation. If
116
+ provided, the workforce will create a new agent using this agent's
117
+ model configuration but with the required system message and
118
+ functionality.
119
+ If None, a default agent will be created using DEFAULT model
120
+ settings. (default: :obj:`None`)
121
+ task_agent (Optional[ChatAgent], optional): A custom task planning
122
+ agent instance for task decomposition and composition. If
123
+ provided, the workforce will create a new agent using this agent's
124
+ model configuration but with the required system message and tools
125
+ (TaskPlanningToolkit). If None, a default agent will be created
126
+ using DEFAULT model settings. (default: :obj:`None`)
127
+ new_worker_agent (Optional[ChatAgent], optional): A template agent for
128
+ workers created dynamically at runtime when existing workers cannot
129
+ handle failed tasks. If None, workers will be created with default
130
+ settings including SearchToolkit, CodeExecutionToolkit, and
131
+ ThinkingToolkit. (default: :obj:`None`)
135
132
  graceful_shutdown_timeout (float, optional): The timeout in seconds
136
133
  for graceful shutdown when a task fails 3 times. During this
137
134
  period, the workforce remains active for debugging.
@@ -147,40 +144,59 @@ class Workforce(BaseNode):
147
144
  (default: :obj:`False`)
148
145
 
149
146
  Example:
150
- >>> # Configure with custom model and shared memory
151
147
  >>> import asyncio
148
+ >>> from camel.agents import ChatAgent
149
+ >>> from camel.models import ModelFactory
150
+ >>> from camel.types import ModelPlatformType, ModelType
151
+ >>> from camel.tasks import Task
152
+ >>>
153
+ >>> # Simple workforce with default agents
154
+ >>> workforce = Workforce("Research Team")
155
+ >>>
156
+ >>> # Workforce with custom model configuration
152
157
  >>> model = ModelFactory.create(
153
- ... ModelPlatformType.OPENAI, ModelType.GPT_4O
158
+ ... ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O
154
159
  ... )
160
+ >>> coordinator_agent = ChatAgent(model=model)
161
+ >>> task_agent = ChatAgent(model=model)
162
+ >>>
155
163
  >>> workforce = Workforce(
156
164
  ... "Research Team",
157
- ... coordinator_agent_kwargs={"model": model, "token_limit": 4000},
158
- ... task_agent_kwargs={"model": model, "token_limit": 8000},
159
- ... share_memory=True # Enable shared memory
165
+ ... coordinator_agent=coordinator_agent,
166
+ ... task_agent=task_agent,
160
167
  ... )
161
168
  >>>
162
169
  >>> # Process a task
163
170
  >>> async def main():
164
171
  ... task = Task(content="Research AI trends", id="1")
165
- ... result = workforce.process_task(task)
172
+ ... result = await workforce.process_task_async(task)
166
173
  ... return result
167
- >>> asyncio.run(main())
174
+ >>>
175
+ >>> result_task = asyncio.run(main())
176
+
177
+ Note:
178
+ When custom coordinator_agent or task_agent are provided, the workforce
179
+ will preserve the user's system message and append the required
180
+ workforce coordination or task planning instructions to it. This
181
+ ensures both the user's intent is preserved and proper workforce
182
+ functionality is maintained. All other agent configurations (model,
183
+ memory, tools, etc.) will also be preserved.
168
184
  """
169
185
 
170
186
  def __init__(
171
187
  self,
172
188
  description: str,
173
189
  children: Optional[List[BaseNode]] = None,
174
- coordinator_agent_kwargs: Optional[Dict] = None,
175
- task_agent_kwargs: Optional[Dict] = None,
176
- new_worker_agent_kwargs: Optional[Dict] = None,
190
+ coordinator_agent: Optional[ChatAgent] = None,
191
+ task_agent: Optional[ChatAgent] = None,
192
+ new_worker_agent: Optional[ChatAgent] = None, # TODO: use MCP Agent
177
193
  graceful_shutdown_timeout: float = 15.0,
178
194
  share_memory: bool = False,
179
195
  ) -> None:
180
196
  super().__init__(description)
181
197
  self._child_listening_tasks: Deque[asyncio.Task] = deque()
182
198
  self._children = children or []
183
- self.new_worker_agent_kwargs = new_worker_agent_kwargs
199
+ self.new_worker_agent = new_worker_agent
184
200
  self.graceful_shutdown_timeout = graceful_shutdown_timeout
185
201
  self.share_memory = share_memory
186
202
  self.metrics_logger = WorkforceLogger(workforce_id=self.node_id)
@@ -214,58 +230,72 @@ class Workforce(BaseNode):
214
230
  role=role_or_desc,
215
231
  )
216
232
 
217
- # Warning messages for default model usage
218
- if coordinator_agent_kwargs is None:
219
- logger.warning(
220
- "No coordinator_agent_kwargs provided. Using default "
221
- "ChatAgent settings (ModelPlatformType.DEFAULT, "
222
- "ModelType.DEFAULT). To customize the coordinator agent "
223
- "that assigns tasks and handles failures, pass a dictionary "
224
- "with ChatAgent parameters, e.g.: {'model': your_model, "
225
- "'tools': your_tools, 'token_limit': 8000}. See ChatAgent "
226
- "documentation for all available options."
227
- )
228
- if task_agent_kwargs is None:
229
- logger.warning(
230
- "No task_agent_kwargs provided. Using default ChatAgent "
231
- "settings (ModelPlatformType.DEFAULT, ModelType.DEFAULT). "
232
- "To customize the task planning agent that "
233
- "decomposes/composes tasks, pass a dictionary with "
234
- "ChatAgent parameters, e.g.: {'model': your_model, "
235
- "'token_limit': 16000}. See ChatAgent documentation for "
236
- "all available options."
237
- )
238
- if new_worker_agent_kwargs is None:
239
- logger.warning(
240
- "No new_worker_agent_kwargs provided. Workers created at "
241
- "runtime will use default ChatAgent settings with "
242
- "SearchToolkit, CodeExecutionToolkit, and ThinkingToolkit. "
243
- "To customize runtime worker creation, pass a dictionary "
244
- "with ChatAgent parameters, e.g.: {'model': your_model, "
245
- "'tools': your_tools}. See ChatAgent documentation for all "
246
- "available options."
247
- )
248
-
249
- if self.share_memory:
250
- logger.info(
251
- "Shared memory enabled. All agents will share their complete "
252
- "conversation history and function-calling trajectory for "
253
- "better context continuity during task handoffs."
254
- )
255
-
233
+ # Set up coordinator agent with default system message
256
234
  coord_agent_sys_msg = BaseMessage.make_assistant_message(
257
235
  role_name="Workforce Manager",
258
- content="You are coordinating a group of workers. A worker can be "
259
- "a group of agents or a single agent. Each worker is "
236
+ content="You are coordinating a group of workers. A worker "
237
+ "can be a group of agents or a single agent. Each worker is "
260
238
  "created to solve a specific kind of task. Your job "
261
239
  "includes assigning tasks to a existing worker, creating "
262
240
  "a new worker for a task, etc.",
263
241
  )
264
- self.coordinator_agent = ChatAgent(
265
- coord_agent_sys_msg,
266
- **(coordinator_agent_kwargs or {}),
267
- )
268
242
 
243
+ if coordinator_agent is None:
244
+ logger.warning(
245
+ "No coordinator_agent provided. Using default "
246
+ "ChatAgent settings (ModelPlatformType.DEFAULT, "
247
+ "ModelType.DEFAULT) with default system message."
248
+ )
249
+ self.coordinator_agent = ChatAgent(coord_agent_sys_msg)
250
+ else:
251
+ logger.info(
252
+ "Custom coordinator_agent provided. Preserving user's "
253
+ "system message and appending workforce coordination "
254
+ "instructions to ensure proper functionality."
255
+ )
256
+
257
+ if coordinator_agent.system_message is not None:
258
+ user_sys_msg_content = coordinator_agent.system_message.content
259
+ combined_content = (
260
+ f"{user_sys_msg_content}\n\n"
261
+ f"{coord_agent_sys_msg.content}"
262
+ )
263
+ combined_sys_msg = BaseMessage.make_assistant_message(
264
+ role_name=coordinator_agent.system_message.role_name,
265
+ content=combined_content,
266
+ )
267
+ else:
268
+ combined_sys_msg = coord_agent_sys_msg
269
+
270
+ # Create a new agent with the provided agent's configuration
271
+ # but with the combined system message
272
+ self.coordinator_agent = ChatAgent(
273
+ system_message=combined_sys_msg,
274
+ model=coordinator_agent.model_backend,
275
+ memory=coordinator_agent.memory,
276
+ message_window_size=getattr(
277
+ coordinator_agent.memory, "window_size", None
278
+ ),
279
+ token_limit=getattr(
280
+ coordinator_agent.memory.get_context_creator(),
281
+ "token_limit",
282
+ None,
283
+ ),
284
+ output_language=coordinator_agent.output_language,
285
+ tools=[
286
+ tool.func
287
+ for tool in coordinator_agent._internal_tools.values()
288
+ ],
289
+ external_tools=[
290
+ schema
291
+ for schema in coordinator_agent._external_tool_schemas.values() # noqa: E501
292
+ ],
293
+ response_terminators=coordinator_agent.response_terminators,
294
+ max_iteration=coordinator_agent.max_iteration,
295
+ stop_event=coordinator_agent.stop_event,
296
+ )
297
+
298
+ # Set up task agent with default system message and required tools
269
299
  task_sys_msg = BaseMessage.make_assistant_message(
270
300
  role_name="Task Planner",
271
301
  content="You are going to compose and decompose tasks. Keep "
@@ -275,13 +305,83 @@ class Workforce(BaseNode):
275
305
  "of agents. This ensures efficient execution by minimizing "
276
306
  "context switching between agents.",
277
307
  )
278
- _task_agent_kwargs = dict(task_agent_kwargs or {})
279
- extra_tools = TaskPlanningToolkit().get_tools()
280
- _task_agent_kwargs["tools"] = [
281
- *_task_agent_kwargs.get("tools", []),
282
- *extra_tools,
283
- ]
284
- self.task_agent = ChatAgent(task_sys_msg, **_task_agent_kwargs)
308
+ task_planning_tools = TaskPlanningToolkit().get_tools()
309
+
310
+ if task_agent is None:
311
+ logger.warning(
312
+ "No task_agent provided. Using default ChatAgent "
313
+ "settings (ModelPlatformType.DEFAULT, ModelType.DEFAULT) "
314
+ "with default system message and TaskPlanningToolkit."
315
+ )
316
+ self.task_agent = ChatAgent(
317
+ task_sys_msg,
318
+ tools=TaskPlanningToolkit().get_tools(), # type: ignore[arg-type]
319
+ )
320
+ else:
321
+ logger.info(
322
+ "Custom task_agent provided. Preserving user's "
323
+ "system message and appending task planning "
324
+ "instructions to ensure proper functionality."
325
+ )
326
+
327
+ if task_agent.system_message is not None:
328
+ user_task_sys_msg_content = task_agent.system_message.content
329
+ combined_task_content = (
330
+ f"{user_task_sys_msg_content}\n\n"
331
+ f"{task_sys_msg.content}"
332
+ )
333
+ combined_task_sys_msg = BaseMessage.make_assistant_message(
334
+ role_name=task_agent.system_message.role_name,
335
+ content=combined_task_content,
336
+ )
337
+ else:
338
+ combined_task_sys_msg = task_sys_msg
339
+
340
+ # Since ChatAgent constructor uses a dictionary with
341
+ # function names as keys, we don't need to manually deduplicate.
342
+ combined_tools = [
343
+ tool.func for tool in task_agent._internal_tools.values()
344
+ ] + [tool.func for tool in task_planning_tools]
345
+
346
+ # Create a new agent with the provided agent's configuration
347
+ # but with the combined system message and tools
348
+ self.task_agent = ChatAgent(
349
+ system_message=combined_task_sys_msg,
350
+ model=task_agent.model_backend,
351
+ memory=task_agent.memory,
352
+ message_window_size=getattr(
353
+ task_agent.memory, "window_size", None
354
+ ),
355
+ token_limit=getattr(
356
+ task_agent.memory.get_context_creator(),
357
+ "token_limit",
358
+ None,
359
+ ),
360
+ output_language=task_agent.output_language,
361
+ tools=combined_tools,
362
+ external_tools=[
363
+ schema
364
+ for schema in task_agent._external_tool_schemas.values()
365
+ ],
366
+ response_terminators=task_agent.response_terminators,
367
+ max_iteration=task_agent.max_iteration,
368
+ stop_event=task_agent.stop_event,
369
+ )
370
+
371
+ if new_worker_agent is None:
372
+ logger.info(
373
+ "No new_worker_agent provided. Workers created at runtime "
374
+ "will use default ChatAgent settings with SearchToolkit, "
375
+ "CodeExecutionToolkit, and ThinkingToolkit. To customize "
376
+ "runtime worker creation, pass a ChatAgent instance."
377
+ )
378
+
379
+ if self.share_memory:
380
+ logger.info(
381
+ "Shared memory enabled. All agents will share their complete "
382
+ "conversation history and function-calling trajectory for "
383
+ "better context continuity during task handoffs."
384
+ )
285
385
 
286
386
  def __repr__(self):
287
387
  return (
@@ -1225,8 +1325,16 @@ class Workforce(BaseNode):
1225
1325
  )
1226
1326
  return TaskAssignResult(assignments=[])
1227
1327
 
1228
- result_dict = json.loads(response.msg.content, parse_int=str)
1229
- return TaskAssignResult(**result_dict)
1328
+ try:
1329
+ result_dict = json.loads(response.msg.content, parse_int=str)
1330
+ return TaskAssignResult(**result_dict)
1331
+ except json.JSONDecodeError as e:
1332
+ logger.error(
1333
+ f"JSON parsing error in task assignment: Invalid response "
1334
+ f"format - {e}. Response content: "
1335
+ f"{response.msg.content[:50]}..."
1336
+ )
1337
+ return TaskAssignResult(assignments=[])
1230
1338
 
1231
1339
  def _validate_assignments(
1232
1340
  self, assignments: List[TaskAssignment], valid_ids: Set[str]
@@ -1450,8 +1558,19 @@ class Workforce(BaseNode):
1450
1558
  "with various tasks.",
1451
1559
  )
1452
1560
  else:
1453
- result_dict = json.loads(response.msg.content)
1454
- new_node_conf = WorkerConf(**result_dict)
1561
+ try:
1562
+ result_dict = json.loads(response.msg.content)
1563
+ new_node_conf = WorkerConf(**result_dict)
1564
+ except json.JSONDecodeError as e:
1565
+ logger.error(
1566
+ f"JSON parsing error in worker creation: Invalid response "
1567
+ f"format - {e}. Response content: "
1568
+ f"{response.msg.content[:100]}..."
1569
+ )
1570
+ raise RuntimeError(
1571
+ f"Failed to create worker for task {task.id}: "
1572
+ f"Coordinator agent returned malformed JSON response. "
1573
+ )
1455
1574
 
1456
1575
  new_agent = self._create_new_agent(
1457
1576
  new_node_conf.role,
@@ -1486,23 +1605,23 @@ class Workforce(BaseNode):
1486
1605
  content=sys_msg,
1487
1606
  )
1488
1607
 
1489
- if self.new_worker_agent_kwargs is not None:
1490
- return ChatAgent(worker_sys_msg, **self.new_worker_agent_kwargs)
1491
-
1492
- # Default tools for a new agent
1493
- function_list = [
1494
- SearchToolkit().search_duckduckgo,
1495
- *CodeExecutionToolkit().get_tools(),
1496
- *ThinkingToolkit().get_tools(),
1497
- ]
1608
+ if self.new_worker_agent is not None:
1609
+ return self.new_worker_agent
1610
+ else:
1611
+ # Default tools for a new agent
1612
+ function_list = [
1613
+ SearchToolkit().search_duckduckgo,
1614
+ *CodeExecutionToolkit().get_tools(),
1615
+ *ThinkingToolkit().get_tools(),
1616
+ ]
1498
1617
 
1499
- model = ModelFactory.create(
1500
- model_platform=ModelPlatformType.DEFAULT,
1501
- model_type=ModelType.DEFAULT,
1502
- model_config_dict={"temperature": 0},
1503
- )
1618
+ model = ModelFactory.create(
1619
+ model_platform=ModelPlatformType.DEFAULT,
1620
+ model_type=ModelType.DEFAULT,
1621
+ model_config_dict={"temperature": 0},
1622
+ )
1504
1623
 
1505
- return ChatAgent(worker_sys_msg, model=model, tools=function_list) # type: ignore[arg-type]
1624
+ return ChatAgent(worker_sys_msg, model=model, tools=function_list) # type: ignore[arg-type]
1506
1625
 
1507
1626
  async def _get_returned_task(self) -> Task:
1508
1627
  r"""Get the task that's published by this node and just get returned
@@ -1988,28 +2107,17 @@ class Workforce(BaseNode):
1988
2107
  """
1989
2108
 
1990
2109
  # Create a new instance with the same configuration
1991
- # Extract the original kwargs from the agents to properly clone them
1992
- coordinator_kwargs = (
1993
- getattr(self.coordinator_agent, 'init_kwargs', {}) or {}
1994
- )
1995
- task_kwargs = getattr(self.task_agent, 'init_kwargs', {}) or {}
1996
-
1997
2110
  new_instance = Workforce(
1998
2111
  description=self.description,
1999
- coordinator_agent_kwargs=coordinator_kwargs.copy(),
2000
- task_agent_kwargs=task_kwargs.copy(),
2001
- new_worker_agent_kwargs=self.new_worker_agent_kwargs.copy()
2002
- if self.new_worker_agent_kwargs
2112
+ coordinator_agent=self.coordinator_agent.clone(with_memory),
2113
+ task_agent=self.task_agent.clone(with_memory),
2114
+ new_worker_agent=self.new_worker_agent.clone(with_memory)
2115
+ if self.new_worker_agent
2003
2116
  else None,
2004
2117
  graceful_shutdown_timeout=self.graceful_shutdown_timeout,
2005
2118
  share_memory=self.share_memory,
2006
2119
  )
2007
2120
 
2008
- new_instance.task_agent = self.task_agent.clone(with_memory)
2009
- new_instance.coordinator_agent = self.coordinator_agent.clone(
2010
- with_memory
2011
- )
2012
-
2013
2121
  for child in self._children:
2014
2122
  if isinstance(child, SingleAgentWorker):
2015
2123
  cloned_worker = child.worker.clone(with_memory)
@@ -499,54 +499,68 @@ class WorkforceLogger:
499
499
 
500
500
  tasks_handled_by_worker: Dict[str, int] = {}
501
501
 
502
+ # Helper function to check if a task is the main task (has no parent)
503
+ def is_main_task(task_id: str) -> bool:
504
+ return (
505
+ task_id in self._task_hierarchy
506
+ and self._task_hierarchy[task_id].get('parent') is None
507
+ )
508
+
502
509
  for entry in self.log_entries:
503
510
  event_type = entry['event_type']
504
511
  timestamp = datetime.fromisoformat(entry['timestamp'])
512
+ task_id = entry.get('task_id', '')
513
+
505
514
  if first_timestamp is None or timestamp < first_timestamp:
506
515
  first_timestamp = timestamp
507
516
  if last_timestamp is None or timestamp > last_timestamp:
508
517
  last_timestamp = timestamp
509
518
 
510
519
  if event_type == 'task_created':
511
- kpis['total_tasks_created'] += 1
512
- task_creation_timestamps[entry['task_id']] = timestamp
520
+ # Exclude main task from total count
521
+ if not is_main_task(task_id):
522
+ kpis['total_tasks_created'] += 1
523
+ task_creation_timestamps[task_id] = timestamp
513
524
  elif event_type == 'task_assigned':
514
- task_assignment_timestamps[entry['task_id']] = timestamp
525
+ task_assignment_timestamps[task_id] = timestamp
515
526
  # Queue time tracking has been removed
516
527
 
517
528
  elif event_type == 'task_started':
518
529
  # Store start time for processing time calculation
519
- task_start_times[entry['task_id']] = timestamp.timestamp()
530
+ task_start_times[task_id] = timestamp.timestamp()
520
531
 
521
532
  elif event_type == 'task_completed':
522
- kpis['total_tasks_completed'] += 1
523
- # Count tasks handled by worker
524
- if 'worker_id' in entry and entry['worker_id'] is not None:
525
- worker_id = entry['worker_id']
526
- tasks_handled_by_worker[worker_id] = (
527
- tasks_handled_by_worker.get(worker_id, 0) + 1
528
- )
533
+ # Exclude main task from total count
534
+ if not is_main_task(task_id):
535
+ kpis['total_tasks_completed'] += 1
536
+ # Count tasks handled by worker (only for non-main tasks)
537
+ if 'worker_id' in entry and entry['worker_id'] is not None:
538
+ worker_id = entry['worker_id']
539
+ tasks_handled_by_worker[worker_id] = (
540
+ tasks_handled_by_worker.get(worker_id, 0) + 1
541
+ )
529
542
 
530
- if entry['task_id'] in task_assignment_timestamps:
543
+ if task_id in task_assignment_timestamps:
531
544
  completion_time = (
532
- timestamp
533
- - task_assignment_timestamps[entry['task_id']]
545
+ timestamp - task_assignment_timestamps[task_id]
534
546
  ).total_seconds()
535
547
  # Store completion time in task hierarchy instead of KPIs
536
548
  # array
537
- if entry['task_id'] in self._task_hierarchy:
538
- self._task_hierarchy[entry['task_id']][
549
+ if task_id in self._task_hierarchy:
550
+ self._task_hierarchy[task_id][
539
551
  'completion_time_seconds'
540
552
  ] = completion_time
541
553
 
542
554
  elif event_type == 'task_failed':
543
- kpis['total_tasks_failed'] += 1
544
- # Count tasks handled by worker (also for failed tasks)
545
- if 'worker_id' in entry and entry['worker_id'] is not None:
546
- worker_id = entry['worker_id']
547
- tasks_handled_by_worker[worker_id] = (
548
- tasks_handled_by_worker.get(worker_id, 0) + 1
549
- )
555
+ # Exclude main task from total count
556
+ if not is_main_task(task_id):
557
+ kpis['total_tasks_failed'] += 1
558
+ # Count tasks handled by worker (only for non-main tasks)
559
+ if 'worker_id' in entry and entry['worker_id'] is not None:
560
+ worker_id = entry['worker_id']
561
+ tasks_handled_by_worker[worker_id] = (
562
+ tasks_handled_by_worker.get(worker_id, 0) + 1
563
+ )
550
564
  error_type = entry['error_type']
551
565
  kpis['error_types_count'][error_type] = (
552
566
  kpis['error_types_count'].get(error_type, 0) + 1