camel-ai 0.2.71a8__tar.gz → 0.2.71a10__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 (453) hide show
  1. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/PKG-INFO +1 -1
  2. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/prompts.py +17 -12
  4. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/single_agent_worker.py +53 -9
  5. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/worker.py +1 -7
  6. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/workforce.py +131 -13
  7. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/tasks/task.py +104 -4
  8. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/pyproject.toml +1 -1
  9. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/.gitignore +0 -0
  10. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/LICENSE +0 -0
  11. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/README.md +0 -0
  12. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/__init__.py +0 -0
  13. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/_types.py +0 -0
  14. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/_utils.py +0 -0
  15. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/base.py +0 -0
  16. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/chat_agent.py +0 -0
  17. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/critic_agent.py +0 -0
  18. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/deductive_reasoner_agent.py +0 -0
  19. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/embodied_agent.py +0 -0
  20. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/knowledge_graph_agent.py +0 -0
  21. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/mcp_agent.py +0 -0
  22. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/multi_hop_generator_agent.py +0 -0
  23. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/programmed_agent_instruction.py +0 -0
  24. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/repo_agent.py +0 -0
  25. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/role_assignment_agent.py +0 -0
  26. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/search_agent.py +0 -0
  27. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/task_agent.py +0 -0
  28. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/tool_agents/__init__.py +0 -0
  29. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/tool_agents/base.py +0 -0
  30. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  31. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/__init__.py +0 -0
  32. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/apibank.py +0 -0
  33. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/apibench.py +0 -0
  34. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/base.py +0 -0
  35. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/browsecomp.py +0 -0
  36. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/gaia.py +0 -0
  37. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/mock_website/README.md +0 -0
  38. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/mock_website/mock_web.py +0 -0
  39. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/mock_website/requirements.txt +0 -0
  40. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  41. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/mock_website/task.json +0 -0
  42. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/nexus.py +0 -0
  43. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/benchmarks/ragbench.py +0 -0
  44. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/__init__.py +0 -0
  45. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/discord/__init__.py +0 -0
  46. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/discord/discord_app.py +0 -0
  47. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/discord/discord_installation.py +0 -0
  48. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/discord/discord_store.py +0 -0
  49. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/slack/__init__.py +0 -0
  50. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/slack/models.py +0 -0
  51. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/slack/slack_app.py +0 -0
  52. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/bots/telegram_bot.py +0 -0
  53. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/__init__.py +0 -0
  54. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/aiml_config.py +0 -0
  55. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/anthropic_config.py +0 -0
  56. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/base_config.py +0 -0
  57. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/bedrock_config.py +0 -0
  58. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/cohere_config.py +0 -0
  59. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/crynux_config.py +0 -0
  60. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/deepseek_config.py +0 -0
  61. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/gemini_config.py +0 -0
  62. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/groq_config.py +0 -0
  63. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/internlm_config.py +0 -0
  64. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/litellm_config.py +0 -0
  65. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/lmstudio_config.py +0 -0
  66. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/mistral_config.py +0 -0
  67. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/modelscope_config.py +0 -0
  68. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/moonshot_config.py +0 -0
  69. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/netmind_config.py +0 -0
  70. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/novita_config.py +0 -0
  71. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/nvidia_config.py +0 -0
  72. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/ollama_config.py +0 -0
  73. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/openai_config.py +0 -0
  74. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/openrouter_config.py +0 -0
  75. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/ppio_config.py +0 -0
  76. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/qianfan_config.py +0 -0
  77. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/qwen_config.py +0 -0
  78. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/reka_config.py +0 -0
  79. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/samba_config.py +0 -0
  80. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/sglang_config.py +0 -0
  81. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/siliconflow_config.py +0 -0
  82. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/togetherai_config.py +0 -0
  83. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/vllm_config.py +0 -0
  84. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/watsonx_config.py +0 -0
  85. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/yi_config.py +0 -0
  86. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/configs/zhipuai_config.py +0 -0
  87. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/data_collectors/__init__.py +0 -0
  88. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/data_collectors/alpaca_collector.py +0 -0
  89. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/data_collectors/base.py +0 -0
  90. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/data_collectors/sharegpt_collector.py +0 -0
  91. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/__init__.py +0 -0
  92. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/cot_datagen.py +0 -0
  93. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/evol_instruct/__init__.py +0 -0
  94. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  95. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/evol_instruct/scorer.py +0 -0
  96. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/evol_instruct/templates.py +0 -0
  97. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_improving_cot.py +0 -0
  98. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/__init__.py +0 -0
  99. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  100. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  101. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  102. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  103. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/self_instruct.py +0 -0
  104. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/self_instruct/templates.py +0 -0
  105. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/source2synth/__init__.py +0 -0
  106. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/source2synth/data_processor.py +0 -0
  107. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/source2synth/models.py +0 -0
  108. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  109. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datahubs/__init__.py +0 -0
  110. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datahubs/base.py +0 -0
  111. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datahubs/huggingface.py +0 -0
  112. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datahubs/models.py +0 -0
  113. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datasets/__init__.py +0 -0
  114. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datasets/base_generator.py +0 -0
  115. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datasets/few_shot_generator.py +0 -0
  116. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datasets/models.py +0 -0
  117. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datasets/self_instruct_generator.py +0 -0
  118. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/datasets/static_dataset.py +0 -0
  119. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/__init__.py +0 -0
  120. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/azure_embedding.py +0 -0
  121. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/base.py +0 -0
  122. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/gemini_embedding.py +0 -0
  123. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/jina_embedding.py +0 -0
  124. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/mistral_embedding.py +0 -0
  125. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/openai_compatible_embedding.py +0 -0
  126. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/openai_embedding.py +0 -0
  127. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  128. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/together_embedding.py +0 -0
  129. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/embeddings/vlm_embedding.py +0 -0
  130. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/environments/__init__.py +0 -0
  131. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/environments/models.py +0 -0
  132. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/environments/multi_step.py +0 -0
  133. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/environments/rlcards_env.py +0 -0
  134. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/environments/single_step.py +0 -0
  135. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/environments/tic_tac_toe.py +0 -0
  136. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/extractors/__init__.py +0 -0
  137. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/extractors/base.py +0 -0
  138. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/extractors/python_strategies.py +0 -0
  139. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/generators.py +0 -0
  140. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/human.py +0 -0
  141. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/__init__.py +0 -0
  142. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/base.py +0 -0
  143. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/docker/Dockerfile +0 -0
  144. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/docker_interpreter.py +0 -0
  145. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/e2b_interpreter.py +0 -0
  146. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/internal_python_interpreter.py +0 -0
  147. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/interpreter_error.py +0 -0
  148. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/ipython_interpreter.py +0 -0
  149. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/interpreters/subprocess_interpreter.py +0 -0
  150. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/__init__.py +0 -0
  151. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/apify_reader.py +0 -0
  152. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/base_io.py +0 -0
  153. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/base_loader.py +0 -0
  154. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/chunkr_reader.py +0 -0
  155. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/crawl4ai_reader.py +0 -0
  156. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/firecrawl_reader.py +0 -0
  157. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/jina_url_reader.py +0 -0
  158. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/markitdown.py +0 -0
  159. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/mineru_extractor.py +0 -0
  160. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/mistral_reader.py +0 -0
  161. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/pandas_reader.py +0 -0
  162. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/scrapegraph_reader.py +0 -0
  163. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/loaders/unstructured_io.py +0 -0
  164. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/logger.py +0 -0
  165. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/__init__.py +0 -0
  166. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/agent_memories.py +0 -0
  167. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/base.py +0 -0
  168. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/blocks/__init__.py +0 -0
  169. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/blocks/chat_history_block.py +0 -0
  170. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/blocks/vectordb_block.py +0 -0
  171. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/context_creators/__init__.py +0 -0
  172. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/context_creators/score_based.py +0 -0
  173. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/memories/records.py +0 -0
  174. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/__init__.py +0 -0
  175. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/base.py +0 -0
  176. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/__init__.py +0 -0
  177. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/alpaca.py +0 -0
  178. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/conversation_models.py +0 -0
  179. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  180. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  181. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  182. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  183. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/messages/func_message.py +0 -0
  184. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/__init__.py +0 -0
  185. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/_utils.py +0 -0
  186. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/aiml_model.py +0 -0
  187. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/anthropic_model.py +0 -0
  188. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/aws_bedrock_model.py +0 -0
  189. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/azure_openai_model.py +0 -0
  190. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/base_audio_model.py +0 -0
  191. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/base_model.py +0 -0
  192. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/cohere_model.py +0 -0
  193. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/crynux_model.py +0 -0
  194. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/deepseek_model.py +0 -0
  195. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/fish_audio_model.py +0 -0
  196. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/gemini_model.py +0 -0
  197. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/groq_model.py +0 -0
  198. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/internlm_model.py +0 -0
  199. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/litellm_model.py +0 -0
  200. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/lmstudio_model.py +0 -0
  201. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/mistral_model.py +0 -0
  202. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/model_factory.py +0 -0
  203. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/model_manager.py +0 -0
  204. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/modelscope_model.py +0 -0
  205. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/moonshot_model.py +0 -0
  206. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/nemotron_model.py +0 -0
  207. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/netmind_model.py +0 -0
  208. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/novita_model.py +0 -0
  209. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/nvidia_model.py +0 -0
  210. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/ollama_model.py +0 -0
  211. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/openai_audio_models.py +0 -0
  212. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/openai_compatible_model.py +0 -0
  213. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/openai_model.py +0 -0
  214. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/openrouter_model.py +0 -0
  215. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/ppio_model.py +0 -0
  216. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/qianfan_model.py +0 -0
  217. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/qwen_model.py +0 -0
  218. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/reka_model.py +0 -0
  219. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/reward/__init__.py +0 -0
  220. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/reward/base_reward_model.py +0 -0
  221. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/reward/evaluator.py +0 -0
  222. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/reward/nemotron_model.py +0 -0
  223. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/reward/skywork_model.py +0 -0
  224. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/samba_model.py +0 -0
  225. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/sglang_model.py +0 -0
  226. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/siliconflow_model.py +0 -0
  227. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/stub_model.py +0 -0
  228. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/togetherai_model.py +0 -0
  229. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/vllm_model.py +0 -0
  230. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/volcano_model.py +0 -0
  231. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/watsonx_model.py +0 -0
  232. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/yi_model.py +0 -0
  233. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/models/zhipuai_model.py +0 -0
  234. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/personas/__init__.py +0 -0
  235. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/personas/persona.py +0 -0
  236. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/personas/persona_hub.py +0 -0
  237. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/__init__.py +0 -0
  238. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/ai_society.py +0 -0
  239. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/base.py +0 -0
  240. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/code.py +0 -0
  241. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/evaluation.py +0 -0
  242. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/generate_text_embedding_data.py +0 -0
  243. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/image_craft.py +0 -0
  244. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/misalignment.py +0 -0
  245. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/multi_condition_image_craft.py +0 -0
  246. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/object_recognition.py +0 -0
  247. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/persona_hub.py +0 -0
  248. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/prompt_templates.py +0 -0
  249. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/role_description_prompt_template.py +0 -0
  250. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/solution_extraction.py +0 -0
  251. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/task_prompt_template.py +0 -0
  252. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/translation.py +0 -0
  253. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/prompts/video_description_prompt.py +0 -0
  254. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/py.typed +0 -0
  255. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/responses/__init__.py +0 -0
  256. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/responses/agent_responses.py +0 -0
  257. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/__init__.py +0 -0
  258. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/auto_retriever.py +0 -0
  259. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/base.py +0 -0
  260. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/bm25_retriever.py +0 -0
  261. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  262. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/hybrid_retrival.py +0 -0
  263. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/retrievers/vector_retriever.py +0 -0
  264. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/__init__.py +0 -0
  265. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/api.py +0 -0
  266. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/base.py +0 -0
  267. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/configs.py +0 -0
  268. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/daytona_runtime.py +0 -0
  269. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/docker_runtime.py +0 -0
  270. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/llm_guard_runtime.py +0 -0
  271. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/remote_http_runtime.py +0 -0
  272. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  273. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/utils/__init__.py +0 -0
  274. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  275. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  276. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/schemas/__init__.py +0 -0
  277. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/schemas/base.py +0 -0
  278. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/schemas/openai_converter.py +0 -0
  279. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/schemas/outlines_converter.py +0 -0
  280. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/services/agent_openapi_server.py +0 -0
  281. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/__init__.py +0 -0
  282. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/babyagi_playing.py +0 -0
  283. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/role_playing.py +0 -0
  284. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/__init__.py +0 -0
  285. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/base.py +0 -0
  286. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/role_playing_worker.py +0 -0
  287. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/structured_output_handler.py +0 -0
  288. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/task_channel.py +0 -0
  289. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/utils.py +0 -0
  290. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/societies/workforce/workforce_logger.py +0 -0
  291. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/__init__.py +0 -0
  292. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/graph_storages/__init__.py +0 -0
  293. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/graph_storages/base.py +0 -0
  294. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/graph_storages/graph_element.py +0 -0
  295. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/graph_storages/nebula_graph.py +0 -0
  296. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  297. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/key_value_storages/__init__.py +0 -0
  298. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/key_value_storages/base.py +0 -0
  299. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/key_value_storages/in_memory.py +0 -0
  300. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/key_value_storages/json.py +0 -0
  301. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  302. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/key_value_storages/redis.py +0 -0
  303. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/object_storages/__init__.py +0 -0
  304. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/object_storages/amazon_s3.py +0 -0
  305. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/object_storages/azure_blob.py +0 -0
  306. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/object_storages/base.py +0 -0
  307. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/object_storages/google_cloud.py +0 -0
  308. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/__init__.py +0 -0
  309. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/base.py +0 -0
  310. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/chroma.py +0 -0
  311. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/faiss.py +0 -0
  312. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/milvus.py +0 -0
  313. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  314. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/pgvector.py +0 -0
  315. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/qdrant.py +0 -0
  316. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/tidb.py +0 -0
  317. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/storages/vectordb_storages/weaviate.py +0 -0
  318. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/tasks/__init__.py +0 -0
  319. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/tasks/task_prompt.py +0 -0
  320. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/terminators/__init__.py +0 -0
  321. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/terminators/base.py +0 -0
  322. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/terminators/response_terminator.py +0 -0
  323. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/terminators/token_limit_terminator.py +0 -0
  324. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/__init__.py +0 -0
  325. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/aci_toolkit.py +0 -0
  326. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/arxiv_toolkit.py +0 -0
  327. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/ask_news_toolkit.py +0 -0
  328. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/async_browser_toolkit.py +0 -0
  329. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  330. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/base.py +0 -0
  331. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/bohrium_toolkit.py +0 -0
  332. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/browser_toolkit.py +0 -0
  333. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/browser_toolkit_commons.py +0 -0
  334. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/code_execution.py +0 -0
  335. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/craw4ai_toolkit.py +0 -0
  336. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/dappier_toolkit.py +0 -0
  337. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/data_commons_toolkit.py +0 -0
  338. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
  339. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/excel_toolkit.py +0 -0
  340. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/file_write_toolkit.py +0 -0
  341. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/function_tool.py +0 -0
  342. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/github_toolkit.py +0 -0
  343. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/google_calendar_toolkit.py +0 -0
  344. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
  345. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/google_maps_toolkit.py +0 -0
  346. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/google_scholar_toolkit.py +0 -0
  347. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/human_toolkit.py +0 -0
  348. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
  349. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/actions.py +0 -0
  350. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/agent.py +0 -0
  351. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/browser_session.py +0 -0
  352. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
  353. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +0 -0
  354. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/snapshot.py +0 -0
  355. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/stealth_script.js +0 -0
  356. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +0 -0
  357. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/image_analysis_toolkit.py +0 -0
  358. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  359. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/klavis_toolkit.py +0 -0
  360. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/linkedin_toolkit.py +0 -0
  361. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/markitdown_toolkit.py +0 -0
  362. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/math_toolkit.py +0 -0
  363. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/mcp_toolkit.py +0 -0
  364. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/memory_toolkit.py +0 -0
  365. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/meshy_toolkit.py +0 -0
  366. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/message_agent_toolkit.py +0 -0
  367. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/mineru_toolkit.py +0 -0
  368. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/networkx_toolkit.py +0 -0
  369. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/note_taking_toolkit.py +0 -0
  370. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/notion_toolkit.py +0 -0
  371. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  372. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  373. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  374. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  375. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  376. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  377. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  378. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  379. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  380. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  381. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  382. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  383. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  384. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  385. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  386. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  387. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  388. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/security_config.py +0 -0
  389. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  390. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  391. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  392. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  393. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  394. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  395. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  396. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/open_api_toolkit.py +0 -0
  397. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/openai_agent_toolkit.py +0 -0
  398. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/openai_image_toolkit.py +0 -0
  399. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/openbb_toolkit.py +0 -0
  400. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/page_script.js +0 -0
  401. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  402. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/pptx_toolkit.py +0 -0
  403. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/pubmed_toolkit.py +0 -0
  404. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  405. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/pyautogui_toolkit.py +0 -0
  406. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/reddit_toolkit.py +0 -0
  407. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/retrieval_toolkit.py +0 -0
  408. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/search_toolkit.py +0 -0
  409. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/searxng_toolkit.py +0 -0
  410. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  411. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/slack_toolkit.py +0 -0
  412. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/stripe_toolkit.py +0 -0
  413. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/sympy_toolkit.py +0 -0
  414. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/task_planning_toolkit.py +0 -0
  415. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/terminal_toolkit.py +0 -0
  416. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/thinking_toolkit.py +0 -0
  417. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/twitter_toolkit.py +0 -0
  418. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/video_analysis_toolkit.py +0 -0
  419. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/video_download_toolkit.py +0 -0
  420. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/weather_toolkit.py +0 -0
  421. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/whatsapp_toolkit.py +0 -0
  422. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  423. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/toolkits/zapier_toolkit.py +0 -0
  424. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/__init__.py +0 -0
  425. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/agents/__init__.py +0 -0
  426. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/agents/tool_calling_record.py +0 -0
  427. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/enums.py +0 -0
  428. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/mcp_registries.py +0 -0
  429. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/openai_types.py +0 -0
  430. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/types/unified_model_type.py +0 -0
  431. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/__init__.py +0 -0
  432. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/async_func.py +0 -0
  433. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/chunker/__init__.py +0 -0
  434. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/chunker/base.py +0 -0
  435. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/chunker/code_chunker.py +0 -0
  436. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/chunker/uio_chunker.py +0 -0
  437. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/commons.py +0 -0
  438. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/constants.py +0 -0
  439. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/deduplication.py +0 -0
  440. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/filename.py +0 -0
  441. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/langfuse.py +0 -0
  442. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/mcp.py +0 -0
  443. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/mcp_client.py +0 -0
  444. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/message_summarizer.py +0 -0
  445. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/response_format.py +0 -0
  446. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/token_counting.py +0 -0
  447. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/utils/tool_result.py +0 -0
  448. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/verifiers/__init__.py +0 -0
  449. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/verifiers/base.py +0 -0
  450. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/verifiers/math_verifier.py +0 -0
  451. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/verifiers/models.py +0 -0
  452. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/camel/verifiers/physics_verifier.py +0 -0
  453. {camel_ai-0.2.71a8 → camel_ai-0.2.71a10}/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.71a8
3
+ Version: 0.2.71a10
4
4
  Summary: Communicative Agents for AI Society Study
5
5
  Project-URL: Homepage, https://www.camel-ai.org/
6
6
  Project-URL: Repository, https://github.com/camel-ai/camel
@@ -14,7 +14,7 @@
14
14
 
15
15
  from camel.logger import disable_logging, enable_logging, set_log_level
16
16
 
17
- __version__ = '0.2.71a8'
17
+ __version__ = '0.2.71a10'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -196,7 +196,11 @@ Now you should summarize the scenario and return the result of the task.
196
196
  """
197
197
  )
198
198
 
199
- WF_TASK_DECOMPOSE_PROMPT = r"""You need to decompose the given task into subtasks according to the workers available in the group, following these important principles to maximize efficiency and parallelism:
199
+ TASK_DECOMPOSE_PROMPT = r"""You need to decompose the given task into subtasks according to the workers available in the group, following these important principles to maximize efficiency, parallelism, and clarity for the executing agents:
200
+
201
+ 1. **Self-Contained Subtasks**: This is the most critical principle. Each subtask's description **must be fully self-sufficient and independently understandable**. The agent executing the subtask has **no knowledge** of the parent task, other subtasks, or the overall workflow.
202
+ * **DO NOT** use relative references like "the first task," "the paper mentioned above," or "the result from the previous step."
203
+ * **DO** write explicit instructions. For example, instead of "Analyze the document," write "Analyze the document titled 'The Future of AI'." The system will automatically provide the necessary inputs (like the document itself) from previous steps.
200
204
 
201
205
  1. **Strategic Grouping for Sequential Work**:
202
206
  * If a series of steps must be done in order *and* can be handled by the same worker type, group them into a single subtask to maintain flow and minimize handoffs.
@@ -218,17 +222,17 @@ These principles aim to reduce overall completion time by maximizing concurrent
218
222
 
219
223
  If given a hypothetical task requiring research, analysis, and reporting with multiple items to process, you should decompose it to maximize parallelism:
220
224
 
221
- * Poor decomposition (monolithic):
225
+ * Poor decomposition (monolithic and vague):
222
226
  `<tasks><task>Do all research, analysis, and write final report.</task></tasks>`
223
227
 
224
- * Better decomposition (parallel structure):
228
+ * **Excellent decomposition (self-contained and parallel)**:
225
229
  ```
226
230
  <tasks>
227
- <task>Subtask 1 (ResearchAgent): Gather initial data and resources.</task>
228
- <task>Subtask 2.1 (AnalysisAgent): Analyze Item A from Subtask 1 results.</task>
229
- <task>Subtask 2.2 (AnalysisAgent): Analyze Item B from Subtask 1 results.</task>
230
- <task>Subtask 2.N (AnalysisAgent): Analyze Item N from Subtask 1 results.</task>
231
- <task>Subtask 3 (ReportAgent): Compile all analyses into final report.</task>
231
+ <task>(ResearchAgent): Gather data and resources on topic X, producing a list of relevant items.</task>
232
+ <task>(AnalysisAgent): Analyze the provided document 'Item A'.</task>
233
+ <task>(AnalysisAgent): Analyze the provided document 'Item B'.</task>
234
+ <task>(AnalysisAgent): Analyze the provided document 'Item N'.</task>
235
+ <task>(ReportAgent): Compile the provided analyses of items A, B, and N into a final report.</task>
232
236
  </tasks>
233
237
  ```
234
238
 
@@ -261,10 +265,11 @@ You must return the subtasks as a list of individual subtasks within <tasks> tag
261
265
  </tasks>
262
266
 
263
267
  Each subtask should be:
264
- - Clear and concise
265
- - Achievable by a single worker
266
- - Contain all sequential steps that should be performed by the same worker type
267
- - Only separated from other subtasks when parallel execution by different worker types is beneficial
268
+ - **Self-contained and independently understandable.**
269
+ - Clear and concise.
270
+ - Achievable by a single worker.
271
+ - Containing all sequential steps that should be performed by the same worker type.
272
+ - Written without any relative references (e.g., "the previous task").
268
273
  """
269
274
 
270
275
  FAILURE_ANALYSIS_PROMPT = TextPrompt(
@@ -22,6 +22,7 @@ from typing import Any, List, Optional
22
22
  from colorama import Fore
23
23
 
24
24
  from camel.agents import ChatAgent
25
+ from camel.agents.chat_agent import AsyncStreamingChatAgentResponse
25
26
  from camel.societies.workforce.prompts import PROCESS_TASK_PROMPT
26
27
  from camel.societies.workforce.structured_output_handler import (
27
28
  StructuredOutputHandler,
@@ -285,6 +286,7 @@ class SingleAgentWorker(Worker):
285
286
  """
286
287
  # Get agent efficiently (from pool or by cloning)
287
288
  worker_agent = await self._get_worker_agent()
289
+ response_content = ""
288
290
 
289
291
  try:
290
292
  dependency_tasks_info = self._get_dep_tasks_info(dependencies)
@@ -314,11 +316,23 @@ class SingleAgentWorker(Worker):
314
316
  )
315
317
  )
316
318
  response = await worker_agent.astep(enhanced_prompt)
319
+
320
+ # Handle streaming response
321
+ if isinstance(response, AsyncStreamingChatAgentResponse):
322
+ content = ""
323
+ async for chunk in response:
324
+ if chunk.msg:
325
+ content = chunk.msg.content
326
+ response_content = content
327
+ else:
328
+ # Regular ChatAgentResponse
329
+ response_content = (
330
+ response.msg.content if response.msg else ""
331
+ )
332
+
317
333
  task_result = (
318
334
  self.structured_handler.parse_structured_response(
319
- response_text=response.msg.content
320
- if response.msg
321
- else "",
335
+ response_text=response_content,
322
336
  schema=TaskResult,
323
337
  fallback_values={
324
338
  "content": "Task processing failed",
@@ -331,13 +345,41 @@ class SingleAgentWorker(Worker):
331
345
  response = await worker_agent.astep(
332
346
  prompt, response_format=TaskResult
333
347
  )
334
- task_result = response.msg.parsed
348
+
349
+ # Handle streaming response for native output
350
+ if isinstance(response, AsyncStreamingChatAgentResponse):
351
+ task_result = None
352
+ async for chunk in response:
353
+ if chunk.msg and chunk.msg.parsed:
354
+ task_result = chunk.msg.parsed
355
+ response_content = chunk.msg.content
356
+ # If no parsed result found in streaming, create fallback
357
+ if task_result is None:
358
+ task_result = TaskResult(
359
+ content="Failed to parse streaming response",
360
+ failed=True,
361
+ )
362
+ else:
363
+ # Regular ChatAgentResponse
364
+ task_result = response.msg.parsed
365
+ response_content = (
366
+ response.msg.content if response.msg else ""
367
+ )
335
368
 
336
369
  # Get token usage from the response
337
- usage_info = response.info.get("usage") or response.info.get(
338
- "token_usage"
370
+ if isinstance(response, AsyncStreamingChatAgentResponse):
371
+ # For streaming responses, get the final response info
372
+ final_response = await response
373
+ usage_info = final_response.info.get(
374
+ "usage"
375
+ ) or final_response.info.get("token_usage")
376
+ else:
377
+ usage_info = response.info.get("usage") or response.info.get(
378
+ "token_usage"
379
+ )
380
+ total_tokens = (
381
+ usage_info.get("total_tokens", 0) if usage_info else 0
339
382
  )
340
- total_tokens = usage_info.get("total_tokens", 0)
341
383
 
342
384
  except Exception as e:
343
385
  print(
@@ -369,8 +411,10 @@ class SingleAgentWorker(Worker):
369
411
  f"(from pool/clone of "
370
412
  f"{getattr(self.worker, 'agent_id', self.worker.role_name)}) "
371
413
  f"to process task {task.content}",
372
- "response_content": response.msg.content,
373
- "tool_calls": response.info.get("tool_calls"),
414
+ "response_content": response_content,
415
+ "tool_calls": final_response.info.get("tool_calls")
416
+ if isinstance(response, AsyncStreamingChatAgentResponse)
417
+ else response.info.get("tool_calls"),
374
418
  "total_tokens": total_tokens,
375
419
  }
376
420
 
@@ -87,15 +87,9 @@ class Worker(BaseNode, ABC):
87
87
  f"{Fore.YELLOW}{self} get task {task.id}: {task.content}"
88
88
  f"{Fore.RESET}"
89
89
  )
90
- # Get the Task instance of dependencies
91
- dependency_ids = await self._channel.get_dependency_ids()
92
- task_dependencies = [
93
- await self._channel.get_task_by_id(dep_id)
94
- for dep_id in dependency_ids
95
- ]
96
90
 
97
91
  # Process the task
98
- task_state = await self._process_task(task, task_dependencies)
92
+ task_state = await self._process_task(task, [])
99
93
 
100
94
  # Update the result and status of the task
101
95
  task.set_state(task_state)
@@ -25,6 +25,7 @@ from typing import (
25
25
  Coroutine,
26
26
  Deque,
27
27
  Dict,
28
+ Generator,
28
29
  List,
29
30
  Optional,
30
31
  Set,
@@ -43,7 +44,7 @@ from camel.societies.workforce.prompts import (
43
44
  ASSIGN_TASK_PROMPT,
44
45
  CREATE_NODE_PROMPT,
45
46
  FAILURE_ANALYSIS_PROMPT,
46
- WF_TASK_DECOMPOSE_PROMPT,
47
+ TASK_DECOMPOSE_PROMPT,
47
48
  )
48
49
  from camel.societies.workforce.role_playing_worker import RolePlayingWorker
49
50
  from camel.societies.workforce.single_agent_worker import SingleAgentWorker
@@ -420,6 +421,11 @@ class Workforce(BaseNode):
420
421
  "CodeExecutionToolkit, and ThinkingToolkit. To customize "
421
422
  "runtime worker creation, pass a ChatAgent instance."
422
423
  )
424
+ else:
425
+ # Validate new_worker_agent if provided
426
+ self._validate_agent_compatibility(
427
+ new_worker_agent, "new_worker_agent"
428
+ )
423
429
 
424
430
  if self.share_memory:
425
431
  logger.info(
@@ -432,6 +438,42 @@ class Workforce(BaseNode):
432
438
  # Helper for propagating pause control to externally supplied agents
433
439
  # ------------------------------------------------------------------
434
440
 
441
+ def _validate_agent_compatibility(
442
+ self, agent: ChatAgent, agent_context: str = "agent"
443
+ ) -> None:
444
+ r"""Validate that agent configuration is compatible with workforce
445
+ settings.
446
+
447
+ Args:
448
+ agent (ChatAgent): The agent to validate.
449
+ agent_context (str): Context description for error messages.
450
+
451
+ Raises:
452
+ ValueError: If agent has tools and stream mode enabled but
453
+ use_structured_output_handler is False.
454
+ """
455
+ agent_has_tools = (
456
+ bool(agent.tool_dict) if hasattr(agent, 'tool_dict') else False
457
+ )
458
+ agent_stream_mode = (
459
+ getattr(agent.model_backend, 'stream', False)
460
+ if hasattr(agent, 'model_backend')
461
+ else False
462
+ )
463
+
464
+ if (
465
+ agent_has_tools
466
+ and agent_stream_mode
467
+ and not self.use_structured_output_handler
468
+ ):
469
+ raise ValueError(
470
+ f"{agent_context} has tools and stream mode enabled, but "
471
+ "use_structured_output_handler is False. Native structured "
472
+ "output doesn't work with tool calls in stream mode. "
473
+ "Please set use_structured_output_handler=True when creating "
474
+ "the Workforce."
475
+ )
476
+
435
477
  def _attach_pause_event_to_agent(self, agent: ChatAgent) -> None:
436
478
  r"""Ensure the given ChatAgent shares this workforce's pause_event.
437
479
 
@@ -678,26 +720,46 @@ class Workforce(BaseNode):
678
720
  if task_id in self._assignees:
679
721
  del self._assignees[task_id]
680
722
 
681
- def _decompose_task(self, task: Task) -> List[Task]:
723
+ def _decompose_task(
724
+ self, task: Task
725
+ ) -> Union[List[Task], Generator[List[Task], None, None]]:
682
726
  r"""Decompose the task into subtasks. This method will also set the
683
727
  relationship between the task and its subtasks.
684
728
 
685
729
  Returns:
686
- List[Task]: The subtasks.
730
+ Union[List[Task], Generator[List[Task], None, None]]:
731
+ The subtasks or generator of subtasks.
687
732
  """
688
- decompose_prompt = WF_TASK_DECOMPOSE_PROMPT.format(
733
+ decompose_prompt = TASK_DECOMPOSE_PROMPT.format(
689
734
  content=task.content,
690
735
  child_nodes_info=self._get_child_nodes_info(),
691
736
  additional_info=task.additional_info,
692
737
  )
693
738
  self.task_agent.reset()
694
- subtasks = task.decompose(self.task_agent, decompose_prompt)
695
-
696
- # Update dependency tracking for decomposed task
697
- if subtasks:
698
- self._update_dependencies_for_decomposition(task, subtasks)
739
+ result = task.decompose(self.task_agent, decompose_prompt)
740
+
741
+ # Handle both streaming and non-streaming results
742
+ if isinstance(result, Generator):
743
+ # This is a generator (streaming mode)
744
+ def streaming_with_dependencies():
745
+ all_subtasks = []
746
+ for new_tasks in result:
747
+ all_subtasks.extend(new_tasks)
748
+ # Update dependency tracking for each batch of new tasks
749
+ if new_tasks:
750
+ self._update_dependencies_for_decomposition(
751
+ task, all_subtasks
752
+ )
753
+ yield new_tasks
699
754
 
700
- return subtasks
755
+ return streaming_with_dependencies()
756
+ else:
757
+ # This is a regular list (non-streaming mode)
758
+ subtasks = result
759
+ # Update dependency tracking for decomposed task
760
+ if subtasks:
761
+ self._update_dependencies_for_decomposition(task, subtasks)
762
+ return subtasks
701
763
 
702
764
  def _analyze_failure(
703
765
  self, task: Task, error_message: str
@@ -1148,7 +1210,17 @@ class Workforce(BaseNode):
1148
1210
  task.state = TaskState.FAILED
1149
1211
  # The agent tend to be overconfident on the whole task, so we
1150
1212
  # decompose the task into subtasks first
1151
- subtasks = self._decompose_task(task)
1213
+ subtasks_result = self._decompose_task(task)
1214
+
1215
+ # Handle both streaming and non-streaming results
1216
+ if isinstance(subtasks_result, Generator):
1217
+ # This is a generator (streaming mode)
1218
+ subtasks = []
1219
+ for new_tasks in subtasks_result:
1220
+ subtasks.extend(new_tasks)
1221
+ else:
1222
+ # This is a regular list (non-streaming mode)
1223
+ subtasks = subtasks_result
1152
1224
  if self.metrics_logger and subtasks:
1153
1225
  self.metrics_logger.log_task_decomposed(
1154
1226
  parent_task_id=task.id, subtask_ids=[st.id for st in subtasks]
@@ -1265,7 +1337,17 @@ class Workforce(BaseNode):
1265
1337
  task.state = TaskState.FAILED # TODO: Add logic for OPEN
1266
1338
 
1267
1339
  # Decompose the task into subtasks first
1268
- subtasks = self._decompose_task(task)
1340
+ subtasks_result = self._decompose_task(task)
1341
+
1342
+ # Handle both streaming and non-streaming results
1343
+ if isinstance(subtasks_result, Generator):
1344
+ # This is a generator (streaming mode)
1345
+ subtasks = []
1346
+ for new_tasks in subtasks_result:
1347
+ subtasks.extend(new_tasks)
1348
+ else:
1349
+ # This is a regular list (non-streaming mode)
1350
+ subtasks = subtasks_result
1269
1351
  if subtasks:
1270
1352
  # If decomposition happened, the original task becomes a container.
1271
1353
  # We only execute its subtasks.
@@ -1435,12 +1517,18 @@ class Workforce(BaseNode):
1435
1517
 
1436
1518
  Raises:
1437
1519
  RuntimeError: If called while workforce is running (not paused).
1520
+ ValueError: If worker has tools and stream mode enabled but
1521
+ use_structured_output_handler is False.
1438
1522
  """
1439
1523
  if self._state == WorkforceState.RUNNING:
1440
1524
  raise RuntimeError(
1441
1525
  "Cannot add workers while workforce is running. "
1442
1526
  "Pause the workforce first."
1443
1527
  )
1528
+
1529
+ # Validate worker agent compatibility
1530
+ self._validate_agent_compatibility(worker, "Worker agent")
1531
+
1444
1532
  # Ensure the worker agent shares this workforce's pause control
1445
1533
  self._attach_pause_event_to_agent(worker)
1446
1534
 
@@ -2084,6 +2172,14 @@ class Workforce(BaseNode):
2084
2172
  new_node_conf.sys_msg,
2085
2173
  )
2086
2174
 
2175
+ # Validate the new agent compatibility before creating worker
2176
+ try:
2177
+ self._validate_agent_compatibility(
2178
+ new_agent, f"Agent for task {task.id}"
2179
+ )
2180
+ except ValueError as e:
2181
+ raise ValueError(f"Cannot create worker for task {task.id}: {e!s}")
2182
+
2087
2183
  new_node = SingleAgentWorker(
2088
2184
  description=new_node_conf.description,
2089
2185
  worker=new_agent,
@@ -2349,7 +2445,17 @@ class Workforce(BaseNode):
2349
2445
 
2350
2446
  elif recovery_decision.strategy == RecoveryStrategy.DECOMPOSE:
2351
2447
  # Decompose the task into subtasks
2352
- subtasks = self._decompose_task(task)
2448
+ subtasks_result = self._decompose_task(task)
2449
+
2450
+ # Handle both streaming and non-streaming results
2451
+ if isinstance(subtasks_result, Generator):
2452
+ # This is a generator (streaming mode)
2453
+ subtasks = []
2454
+ for new_tasks in subtasks_result:
2455
+ subtasks.extend(new_tasks)
2456
+ else:
2457
+ # This is a regular list (non-streaming mode)
2458
+ subtasks = subtasks_result
2353
2459
  if self.metrics_logger and subtasks:
2354
2460
  self.metrics_logger.log_task_decomposed(
2355
2461
  parent_task_id=task.id,
@@ -3203,6 +3309,18 @@ class Workforce(BaseNode):
3203
3309
  )
3204
3310
 
3205
3311
  agent = ChatAgent(sys_msg, **(agent_kwargs or {}))
3312
+
3313
+ # Validate agent compatibility
3314
+ try:
3315
+ workforce_instance._validate_agent_compatibility(
3316
+ agent, "Worker agent"
3317
+ )
3318
+ except ValueError as e:
3319
+ return {
3320
+ "status": "error",
3321
+ "message": str(e),
3322
+ }
3323
+
3206
3324
  workforce_instance.add_single_agent_worker(description, agent)
3207
3325
 
3208
3326
  return {
@@ -19,6 +19,7 @@ from typing import (
19
19
  Any,
20
20
  Callable,
21
21
  Dict,
22
+ Generator,
22
23
  List,
23
24
  Literal,
24
25
  Optional,
@@ -30,6 +31,7 @@ from pydantic import BaseModel, ConfigDict, Field
30
31
 
31
32
  if TYPE_CHECKING:
32
33
  from camel.agents import ChatAgent
34
+ from camel.agents.chat_agent import StreamingChatAgentResponse
33
35
  import uuid
34
36
 
35
37
  from camel.logger import get_logger
@@ -402,9 +404,9 @@ class Task(BaseModel):
402
404
  agent: "ChatAgent",
403
405
  prompt: Optional[str] = None,
404
406
  task_parser: Callable[[str, str], List["Task"]] = parse_response,
405
- ) -> List["Task"]:
406
- r"""Decompose a task to a list of sub-tasks. It can be used for data
407
- generation and planner of agent.
407
+ ) -> Union[List["Task"], Generator[List["Task"], None, None]]:
408
+ r"""Decompose a task to a list of sub-tasks. Automatically detects
409
+ streaming or non-streaming based on agent configuration.
408
410
 
409
411
  Args:
410
412
  agent (ChatAgent): An agent that used to decompose the task.
@@ -415,7 +417,10 @@ class Task(BaseModel):
415
417
  the default parse_response will be used.
416
418
 
417
419
  Returns:
418
- List[Task]: A list of tasks which are :obj:`Task` instances.
420
+ Union[List[Task], Generator[List[Task], None, None]]: If agent is
421
+ configured for streaming, returns a generator that yields lists
422
+ of new tasks as they are parsed. Otherwise returns a list of
423
+ all tasks.
419
424
  """
420
425
 
421
426
  role_name = agent.role_name
@@ -427,6 +432,72 @@ class Task(BaseModel):
427
432
  role_name=role_name, content=content
428
433
  )
429
434
  response = agent.step(msg)
435
+
436
+ # Auto-detect streaming based on response type
437
+ from camel.agents.chat_agent import StreamingChatAgentResponse
438
+
439
+ if isinstance(response, StreamingChatAgentResponse):
440
+ return self._decompose_streaming(response, task_parser)
441
+ else:
442
+ return self._decompose_non_streaming(response, task_parser)
443
+
444
+ def _decompose_streaming(
445
+ self,
446
+ response: "StreamingChatAgentResponse",
447
+ task_parser: Callable[[str, str], List["Task"]],
448
+ ) -> Generator[List["Task"], None, None]:
449
+ r"""Handle streaming response for task decomposition.
450
+
451
+ Args:
452
+ response: Streaming response from agent
453
+ task_parser: Function to parse tasks from response
454
+
455
+ Yields:
456
+ List[Task]: New tasks as they are parsed from streaming response
457
+ """
458
+ accumulated_content = ""
459
+ yielded_count = 0
460
+
461
+ # Process streaming response
462
+ for chunk in response:
463
+ accumulated_content = chunk.msg.content
464
+
465
+ # Try to parse partial tasks from accumulated content
466
+ try:
467
+ current_tasks = self._parse_partial_tasks(accumulated_content)
468
+
469
+ # Yield new tasks if we have more than previously yielded
470
+ if len(current_tasks) > yielded_count:
471
+ new_tasks = current_tasks[yielded_count:]
472
+ for task in new_tasks:
473
+ task.additional_info = self.additional_info
474
+ task.parent = self
475
+ yield new_tasks
476
+ yielded_count = len(current_tasks)
477
+
478
+ except Exception:
479
+ # If parsing fails, continue accumulating
480
+ continue
481
+
482
+ # Final complete parsing
483
+ final_tasks = task_parser(accumulated_content, self.id)
484
+ for task in final_tasks:
485
+ task.additional_info = self.additional_info
486
+ task.parent = self
487
+ self.subtasks = final_tasks
488
+
489
+ def _decompose_non_streaming(
490
+ self, response, task_parser: Callable[[str, str], List["Task"]]
491
+ ) -> List["Task"]:
492
+ r"""Handle non-streaming response for task decomposition.
493
+
494
+ Args:
495
+ response: Regular response from agent
496
+ task_parser: Function to parse tasks from response
497
+
498
+ Returns:
499
+ List[Task]: All parsed tasks
500
+ """
430
501
  tasks = task_parser(response.msg.content, self.id)
431
502
  for task in tasks:
432
503
  task.additional_info = self.additional_info
@@ -434,6 +505,35 @@ class Task(BaseModel):
434
505
  self.subtasks = tasks
435
506
  return tasks
436
507
 
508
+ def _parse_partial_tasks(self, response: str) -> List["Task"]:
509
+ r"""Parse tasks from potentially incomplete response.
510
+
511
+ Args:
512
+ response: Partial response content
513
+
514
+ Returns:
515
+ List[Task]: Tasks parsed from complete <task></task> blocks
516
+ """
517
+ pattern = r"<task>(.*?)</task>"
518
+ tasks_content = re.findall(pattern, response, re.DOTALL)
519
+
520
+ tasks = []
521
+ task_id = self.id or "0"
522
+
523
+ for i, content in enumerate(tasks_content, 1):
524
+ stripped_content = content.strip()
525
+ if validate_task_content(stripped_content, f"{task_id}.{i}"):
526
+ tasks.append(
527
+ Task(content=stripped_content, id=f"{task_id}.{i}")
528
+ )
529
+ else:
530
+ logger.warning(
531
+ f"Skipping invalid subtask {task_id}.{i} "
532
+ f"during streaming decomposition: "
533
+ f"Content '{stripped_content[:50]}...' failed validation"
534
+ )
535
+ return tasks
536
+
437
537
  def compose(
438
538
  self,
439
539
  agent: "ChatAgent",
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "camel-ai"
7
- version = "0.2.71a8"
7
+ version = "0.2.71a10"
8
8
  description = "Communicative Agents for AI Society Study"
9
9
  authors = [{ name = "CAMEL-AI.org" }]
10
10
  requires-python = ">=3.10,<3.13"
File without changes
File without changes
File without changes