camel-ai 0.2.71a7__tar.gz → 0.2.71a9__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 (455) hide show
  1. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/PKG-INFO +1 -1
  2. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/single_agent_worker.py +53 -9
  4. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/task_channel.py +4 -1
  5. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/workforce.py +146 -14
  6. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/tasks/task.py +104 -4
  7. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/file_write_toolkit.py +19 -8
  8. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/actions.py +28 -18
  9. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/agent.py +7 -1
  10. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/browser_session.py +48 -18
  11. camel_ai-0.2.71a9/camel/toolkits/hybrid_browser_toolkit/config_loader.py +447 -0
  12. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +272 -85
  13. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/snapshot.py +5 -4
  14. camel_ai-0.2.71a9/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +1002 -0
  15. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/note_taking_toolkit.py +24 -9
  16. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/pptx_toolkit.py +21 -8
  17. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/search_toolkit.py +15 -5
  18. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/pyproject.toml +1 -1
  19. camel_ai-0.2.71a7/camel/toolkits/hybrid_browser_toolkit/stealth_config.py +0 -116
  20. camel_ai-0.2.71a7/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +0 -447
  21. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/.gitignore +0 -0
  22. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/LICENSE +0 -0
  23. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/README.md +0 -0
  24. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/__init__.py +0 -0
  25. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/_types.py +0 -0
  26. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/_utils.py +0 -0
  27. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/base.py +0 -0
  28. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/chat_agent.py +0 -0
  29. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/critic_agent.py +0 -0
  30. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/deductive_reasoner_agent.py +0 -0
  31. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/embodied_agent.py +0 -0
  32. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/knowledge_graph_agent.py +0 -0
  33. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/mcp_agent.py +0 -0
  34. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/multi_hop_generator_agent.py +0 -0
  35. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/programmed_agent_instruction.py +0 -0
  36. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/repo_agent.py +0 -0
  37. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/role_assignment_agent.py +0 -0
  38. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/search_agent.py +0 -0
  39. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/task_agent.py +0 -0
  40. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/tool_agents/__init__.py +0 -0
  41. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/tool_agents/base.py +0 -0
  42. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  43. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/__init__.py +0 -0
  44. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/apibank.py +0 -0
  45. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/apibench.py +0 -0
  46. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/base.py +0 -0
  47. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/browsecomp.py +0 -0
  48. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/gaia.py +0 -0
  49. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/mock_website/README.md +0 -0
  50. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/mock_website/mock_web.py +0 -0
  51. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/mock_website/requirements.txt +0 -0
  52. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  53. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/mock_website/task.json +0 -0
  54. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/nexus.py +0 -0
  55. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/benchmarks/ragbench.py +0 -0
  56. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/__init__.py +0 -0
  57. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/discord/__init__.py +0 -0
  58. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/discord/discord_app.py +0 -0
  59. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/discord/discord_installation.py +0 -0
  60. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/discord/discord_store.py +0 -0
  61. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/slack/__init__.py +0 -0
  62. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/slack/models.py +0 -0
  63. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/slack/slack_app.py +0 -0
  64. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/bots/telegram_bot.py +0 -0
  65. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/__init__.py +0 -0
  66. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/aiml_config.py +0 -0
  67. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/anthropic_config.py +0 -0
  68. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/base_config.py +0 -0
  69. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/bedrock_config.py +0 -0
  70. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/cohere_config.py +0 -0
  71. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/crynux_config.py +0 -0
  72. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/deepseek_config.py +0 -0
  73. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/gemini_config.py +0 -0
  74. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/groq_config.py +0 -0
  75. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/internlm_config.py +0 -0
  76. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/litellm_config.py +0 -0
  77. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/lmstudio_config.py +0 -0
  78. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/mistral_config.py +0 -0
  79. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/modelscope_config.py +0 -0
  80. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/moonshot_config.py +0 -0
  81. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/netmind_config.py +0 -0
  82. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/novita_config.py +0 -0
  83. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/nvidia_config.py +0 -0
  84. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/ollama_config.py +0 -0
  85. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/openai_config.py +0 -0
  86. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/openrouter_config.py +0 -0
  87. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/ppio_config.py +0 -0
  88. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/qianfan_config.py +0 -0
  89. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/qwen_config.py +0 -0
  90. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/reka_config.py +0 -0
  91. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/samba_config.py +0 -0
  92. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/sglang_config.py +0 -0
  93. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/siliconflow_config.py +0 -0
  94. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/togetherai_config.py +0 -0
  95. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/vllm_config.py +0 -0
  96. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/watsonx_config.py +0 -0
  97. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/yi_config.py +0 -0
  98. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/configs/zhipuai_config.py +0 -0
  99. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/data_collectors/__init__.py +0 -0
  100. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/data_collectors/alpaca_collector.py +0 -0
  101. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/data_collectors/base.py +0 -0
  102. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/data_collectors/sharegpt_collector.py +0 -0
  103. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/__init__.py +0 -0
  104. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/cot_datagen.py +0 -0
  105. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/evol_instruct/__init__.py +0 -0
  106. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  107. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/evol_instruct/scorer.py +0 -0
  108. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/evol_instruct/templates.py +0 -0
  109. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_improving_cot.py +0 -0
  110. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/__init__.py +0 -0
  111. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  112. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  113. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  114. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  115. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/self_instruct.py +0 -0
  116. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/self_instruct/templates.py +0 -0
  117. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/source2synth/__init__.py +0 -0
  118. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/source2synth/data_processor.py +0 -0
  119. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/source2synth/models.py +0 -0
  120. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  121. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datahubs/__init__.py +0 -0
  122. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datahubs/base.py +0 -0
  123. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datahubs/huggingface.py +0 -0
  124. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datahubs/models.py +0 -0
  125. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datasets/__init__.py +0 -0
  126. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datasets/base_generator.py +0 -0
  127. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datasets/few_shot_generator.py +0 -0
  128. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datasets/models.py +0 -0
  129. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datasets/self_instruct_generator.py +0 -0
  130. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/datasets/static_dataset.py +0 -0
  131. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/__init__.py +0 -0
  132. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/azure_embedding.py +0 -0
  133. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/base.py +0 -0
  134. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/gemini_embedding.py +0 -0
  135. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/jina_embedding.py +0 -0
  136. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/mistral_embedding.py +0 -0
  137. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/openai_compatible_embedding.py +0 -0
  138. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/openai_embedding.py +0 -0
  139. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  140. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/together_embedding.py +0 -0
  141. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/embeddings/vlm_embedding.py +0 -0
  142. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/environments/__init__.py +0 -0
  143. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/environments/models.py +0 -0
  144. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/environments/multi_step.py +0 -0
  145. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/environments/rlcards_env.py +0 -0
  146. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/environments/single_step.py +0 -0
  147. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/environments/tic_tac_toe.py +0 -0
  148. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/extractors/__init__.py +0 -0
  149. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/extractors/base.py +0 -0
  150. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/extractors/python_strategies.py +0 -0
  151. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/generators.py +0 -0
  152. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/human.py +0 -0
  153. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/__init__.py +0 -0
  154. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/base.py +0 -0
  155. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/docker/Dockerfile +0 -0
  156. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/docker_interpreter.py +0 -0
  157. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/e2b_interpreter.py +0 -0
  158. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/internal_python_interpreter.py +0 -0
  159. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/interpreter_error.py +0 -0
  160. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/ipython_interpreter.py +0 -0
  161. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/interpreters/subprocess_interpreter.py +0 -0
  162. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/__init__.py +0 -0
  163. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/apify_reader.py +0 -0
  164. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/base_io.py +0 -0
  165. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/base_loader.py +0 -0
  166. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/chunkr_reader.py +0 -0
  167. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/crawl4ai_reader.py +0 -0
  168. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/firecrawl_reader.py +0 -0
  169. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/jina_url_reader.py +0 -0
  170. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/markitdown.py +0 -0
  171. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/mineru_extractor.py +0 -0
  172. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/mistral_reader.py +0 -0
  173. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/pandas_reader.py +0 -0
  174. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/scrapegraph_reader.py +0 -0
  175. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/loaders/unstructured_io.py +0 -0
  176. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/logger.py +0 -0
  177. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/__init__.py +0 -0
  178. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/agent_memories.py +0 -0
  179. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/base.py +0 -0
  180. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/blocks/__init__.py +0 -0
  181. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/blocks/chat_history_block.py +0 -0
  182. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/blocks/vectordb_block.py +0 -0
  183. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/context_creators/__init__.py +0 -0
  184. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/context_creators/score_based.py +0 -0
  185. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/memories/records.py +0 -0
  186. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/__init__.py +0 -0
  187. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/base.py +0 -0
  188. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/__init__.py +0 -0
  189. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/alpaca.py +0 -0
  190. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/conversation_models.py +0 -0
  191. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  192. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  193. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  194. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  195. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/messages/func_message.py +0 -0
  196. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/__init__.py +0 -0
  197. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/_utils.py +0 -0
  198. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/aiml_model.py +0 -0
  199. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/anthropic_model.py +0 -0
  200. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/aws_bedrock_model.py +0 -0
  201. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/azure_openai_model.py +0 -0
  202. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/base_audio_model.py +0 -0
  203. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/base_model.py +0 -0
  204. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/cohere_model.py +0 -0
  205. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/crynux_model.py +0 -0
  206. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/deepseek_model.py +0 -0
  207. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/fish_audio_model.py +0 -0
  208. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/gemini_model.py +0 -0
  209. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/groq_model.py +0 -0
  210. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/internlm_model.py +0 -0
  211. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/litellm_model.py +0 -0
  212. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/lmstudio_model.py +0 -0
  213. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/mistral_model.py +0 -0
  214. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/model_factory.py +0 -0
  215. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/model_manager.py +0 -0
  216. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/modelscope_model.py +0 -0
  217. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/moonshot_model.py +0 -0
  218. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/nemotron_model.py +0 -0
  219. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/netmind_model.py +0 -0
  220. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/novita_model.py +0 -0
  221. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/nvidia_model.py +0 -0
  222. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/ollama_model.py +0 -0
  223. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/openai_audio_models.py +0 -0
  224. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/openai_compatible_model.py +0 -0
  225. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/openai_model.py +0 -0
  226. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/openrouter_model.py +0 -0
  227. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/ppio_model.py +0 -0
  228. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/qianfan_model.py +0 -0
  229. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/qwen_model.py +0 -0
  230. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/reka_model.py +0 -0
  231. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/reward/__init__.py +0 -0
  232. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/reward/base_reward_model.py +0 -0
  233. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/reward/evaluator.py +0 -0
  234. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/reward/nemotron_model.py +0 -0
  235. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/reward/skywork_model.py +0 -0
  236. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/samba_model.py +0 -0
  237. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/sglang_model.py +0 -0
  238. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/siliconflow_model.py +0 -0
  239. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/stub_model.py +0 -0
  240. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/togetherai_model.py +0 -0
  241. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/vllm_model.py +0 -0
  242. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/volcano_model.py +0 -0
  243. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/watsonx_model.py +0 -0
  244. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/yi_model.py +0 -0
  245. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/models/zhipuai_model.py +0 -0
  246. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/personas/__init__.py +0 -0
  247. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/personas/persona.py +0 -0
  248. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/personas/persona_hub.py +0 -0
  249. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/__init__.py +0 -0
  250. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/ai_society.py +0 -0
  251. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/base.py +0 -0
  252. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/code.py +0 -0
  253. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/evaluation.py +0 -0
  254. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/generate_text_embedding_data.py +0 -0
  255. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/image_craft.py +0 -0
  256. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/misalignment.py +0 -0
  257. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/multi_condition_image_craft.py +0 -0
  258. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/object_recognition.py +0 -0
  259. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/persona_hub.py +0 -0
  260. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/prompt_templates.py +0 -0
  261. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/role_description_prompt_template.py +0 -0
  262. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/solution_extraction.py +0 -0
  263. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/task_prompt_template.py +0 -0
  264. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/translation.py +0 -0
  265. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/prompts/video_description_prompt.py +0 -0
  266. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/py.typed +0 -0
  267. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/responses/__init__.py +0 -0
  268. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/responses/agent_responses.py +0 -0
  269. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/__init__.py +0 -0
  270. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/auto_retriever.py +0 -0
  271. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/base.py +0 -0
  272. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/bm25_retriever.py +0 -0
  273. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  274. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/hybrid_retrival.py +0 -0
  275. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/retrievers/vector_retriever.py +0 -0
  276. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/__init__.py +0 -0
  277. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/api.py +0 -0
  278. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/base.py +0 -0
  279. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/configs.py +0 -0
  280. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/daytona_runtime.py +0 -0
  281. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/docker_runtime.py +0 -0
  282. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/llm_guard_runtime.py +0 -0
  283. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/remote_http_runtime.py +0 -0
  284. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  285. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/utils/__init__.py +0 -0
  286. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  287. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  288. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/schemas/__init__.py +0 -0
  289. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/schemas/base.py +0 -0
  290. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/schemas/openai_converter.py +0 -0
  291. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/schemas/outlines_converter.py +0 -0
  292. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/services/agent_openapi_server.py +0 -0
  293. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/__init__.py +0 -0
  294. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/babyagi_playing.py +0 -0
  295. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/role_playing.py +0 -0
  296. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/__init__.py +0 -0
  297. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/base.py +0 -0
  298. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/prompts.py +0 -0
  299. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/role_playing_worker.py +0 -0
  300. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/structured_output_handler.py +0 -0
  301. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/utils.py +0 -0
  302. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/worker.py +0 -0
  303. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/societies/workforce/workforce_logger.py +0 -0
  304. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/__init__.py +0 -0
  305. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/graph_storages/__init__.py +0 -0
  306. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/graph_storages/base.py +0 -0
  307. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/graph_storages/graph_element.py +0 -0
  308. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/graph_storages/nebula_graph.py +0 -0
  309. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  310. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/key_value_storages/__init__.py +0 -0
  311. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/key_value_storages/base.py +0 -0
  312. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/key_value_storages/in_memory.py +0 -0
  313. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/key_value_storages/json.py +0 -0
  314. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  315. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/key_value_storages/redis.py +0 -0
  316. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/object_storages/__init__.py +0 -0
  317. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/object_storages/amazon_s3.py +0 -0
  318. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/object_storages/azure_blob.py +0 -0
  319. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/object_storages/base.py +0 -0
  320. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/object_storages/google_cloud.py +0 -0
  321. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/__init__.py +0 -0
  322. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/base.py +0 -0
  323. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/chroma.py +0 -0
  324. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/faiss.py +0 -0
  325. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/milvus.py +0 -0
  326. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  327. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/pgvector.py +0 -0
  328. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/qdrant.py +0 -0
  329. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/tidb.py +0 -0
  330. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/storages/vectordb_storages/weaviate.py +0 -0
  331. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/tasks/__init__.py +0 -0
  332. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/tasks/task_prompt.py +0 -0
  333. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/terminators/__init__.py +0 -0
  334. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/terminators/base.py +0 -0
  335. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/terminators/response_terminator.py +0 -0
  336. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/terminators/token_limit_terminator.py +0 -0
  337. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/__init__.py +0 -0
  338. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/aci_toolkit.py +0 -0
  339. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/arxiv_toolkit.py +0 -0
  340. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/ask_news_toolkit.py +0 -0
  341. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/async_browser_toolkit.py +0 -0
  342. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  343. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/base.py +0 -0
  344. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/bohrium_toolkit.py +0 -0
  345. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/browser_toolkit.py +0 -0
  346. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/browser_toolkit_commons.py +0 -0
  347. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/code_execution.py +0 -0
  348. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/craw4ai_toolkit.py +0 -0
  349. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/dappier_toolkit.py +0 -0
  350. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/data_commons_toolkit.py +0 -0
  351. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
  352. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/excel_toolkit.py +0 -0
  353. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/function_tool.py +0 -0
  354. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/github_toolkit.py +0 -0
  355. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/google_calendar_toolkit.py +0 -0
  356. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
  357. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/google_maps_toolkit.py +0 -0
  358. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/google_scholar_toolkit.py +0 -0
  359. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/human_toolkit.py +0 -0
  360. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
  361. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/hybrid_browser_toolkit/stealth_script.js +0 -0
  362. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/image_analysis_toolkit.py +0 -0
  363. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  364. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/klavis_toolkit.py +0 -0
  365. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/linkedin_toolkit.py +0 -0
  366. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/markitdown_toolkit.py +0 -0
  367. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/math_toolkit.py +0 -0
  368. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/mcp_toolkit.py +0 -0
  369. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/memory_toolkit.py +0 -0
  370. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/meshy_toolkit.py +0 -0
  371. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/message_agent_toolkit.py +0 -0
  372. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/mineru_toolkit.py +0 -0
  373. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/networkx_toolkit.py +0 -0
  374. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/notion_toolkit.py +0 -0
  375. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  376. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  377. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  378. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  379. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  380. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  381. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  382. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  383. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  384. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  385. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  386. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  387. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  388. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  389. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  390. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  391. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  392. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/security_config.py +0 -0
  393. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  394. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  395. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  396. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  397. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  398. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  399. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  400. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/open_api_toolkit.py +0 -0
  401. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/openai_agent_toolkit.py +0 -0
  402. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/openai_image_toolkit.py +0 -0
  403. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/openbb_toolkit.py +0 -0
  404. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/page_script.js +0 -0
  405. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  406. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/pubmed_toolkit.py +0 -0
  407. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  408. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/pyautogui_toolkit.py +0 -0
  409. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/reddit_toolkit.py +0 -0
  410. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/retrieval_toolkit.py +0 -0
  411. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/searxng_toolkit.py +0 -0
  412. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  413. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/slack_toolkit.py +0 -0
  414. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/stripe_toolkit.py +0 -0
  415. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/sympy_toolkit.py +0 -0
  416. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/task_planning_toolkit.py +0 -0
  417. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/terminal_toolkit.py +0 -0
  418. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/thinking_toolkit.py +0 -0
  419. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/twitter_toolkit.py +0 -0
  420. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/video_analysis_toolkit.py +0 -0
  421. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/video_download_toolkit.py +0 -0
  422. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/weather_toolkit.py +0 -0
  423. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/whatsapp_toolkit.py +0 -0
  424. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  425. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/toolkits/zapier_toolkit.py +0 -0
  426. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/__init__.py +0 -0
  427. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/agents/__init__.py +0 -0
  428. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/agents/tool_calling_record.py +0 -0
  429. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/enums.py +0 -0
  430. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/mcp_registries.py +0 -0
  431. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/openai_types.py +0 -0
  432. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/types/unified_model_type.py +0 -0
  433. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/__init__.py +0 -0
  434. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/async_func.py +0 -0
  435. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/chunker/__init__.py +0 -0
  436. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/chunker/base.py +0 -0
  437. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/chunker/code_chunker.py +0 -0
  438. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/chunker/uio_chunker.py +0 -0
  439. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/commons.py +0 -0
  440. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/constants.py +0 -0
  441. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/deduplication.py +0 -0
  442. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/filename.py +0 -0
  443. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/langfuse.py +0 -0
  444. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/mcp.py +0 -0
  445. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/mcp_client.py +0 -0
  446. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/message_summarizer.py +0 -0
  447. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/response_format.py +0 -0
  448. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/token_counting.py +0 -0
  449. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/utils/tool_result.py +0 -0
  450. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/verifiers/__init__.py +0 -0
  451. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/verifiers/base.py +0 -0
  452. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/verifiers/math_verifier.py +0 -0
  453. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/verifiers/models.py +0 -0
  454. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/camel/verifiers/physics_verifier.py +0 -0
  455. {camel_ai-0.2.71a7 → camel_ai-0.2.71a9}/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.71a7
3
+ Version: 0.2.71a9
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.71a7'
17
+ __version__ = '0.2.71a9'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -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
 
@@ -91,11 +91,14 @@ class TaskChannel:
91
91
  """
92
92
  async with self._condition:
93
93
  while True:
94
- for packet in self._task_dict.values():
94
+ for task_id, packet in list(self._task_dict.items()):
95
95
  if packet.publisher_id != publisher_id:
96
96
  continue
97
97
  if packet.status != PacketStatus.RETURNED:
98
98
  continue
99
+ # Remove the task to prevent returning it again
100
+ del self._task_dict[task_id]
101
+ self._condition.notify_all()
99
102
  return packet.task
100
103
  await self._condition.wait()
101
104
 
@@ -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,
@@ -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
 
@@ -551,6 +593,10 @@ class Workforce(BaseNode):
551
593
  continue
552
594
 
553
595
  if not memory_records:
596
+ logger.warning(
597
+ "No valid memory records could be reconstructed "
598
+ "for sharing"
599
+ )
554
600
  return
555
601
 
556
602
  # Share with coordinator agent
@@ -668,12 +714,21 @@ class Workforce(BaseNode):
668
714
  if task_id in self._task_start_times:
669
715
  del self._task_start_times[task_id]
670
716
 
671
- def _decompose_task(self, task: Task) -> List[Task]:
717
+ if task_id in self._task_dependencies:
718
+ del self._task_dependencies[task_id]
719
+
720
+ if task_id in self._assignees:
721
+ del self._assignees[task_id]
722
+
723
+ def _decompose_task(
724
+ self, task: Task
725
+ ) -> Union[List[Task], Generator[List[Task], None, None]]:
672
726
  r"""Decompose the task into subtasks. This method will also set the
673
727
  relationship between the task and its subtasks.
674
728
 
675
729
  Returns:
676
- List[Task]: The subtasks.
730
+ Union[List[Task], Generator[List[Task], None, None]]:
731
+ The subtasks or generator of subtasks.
677
732
  """
678
733
  decompose_prompt = WF_TASK_DECOMPOSE_PROMPT.format(
679
734
  content=task.content,
@@ -681,13 +736,30 @@ class Workforce(BaseNode):
681
736
  additional_info=task.additional_info,
682
737
  )
683
738
  self.task_agent.reset()
684
- subtasks = task.decompose(self.task_agent, decompose_prompt)
685
-
686
- # Update dependency tracking for decomposed task
687
- if subtasks:
688
- 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
689
754
 
690
- 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
691
763
 
692
764
  def _analyze_failure(
693
765
  self, task: Task, error_message: str
@@ -991,8 +1063,13 @@ class Workforce(BaseNode):
991
1063
  tasks_dict = {task.id: task for task in self._pending_tasks}
992
1064
 
993
1065
  # Check if all provided IDs exist
994
- if not all(task_id in tasks_dict for task_id in task_ids):
995
- logger.warning("Some task IDs not found in pending tasks.")
1066
+ invalid_ids = [
1067
+ task_id for task_id in task_ids if task_id not in tasks_dict
1068
+ ]
1069
+ if invalid_ids:
1070
+ logger.warning(
1071
+ f"Task IDs not found in pending tasks: {invalid_ids}"
1072
+ )
996
1073
  return False
997
1074
 
998
1075
  # Check if we have the same number of tasks
@@ -1133,7 +1210,17 @@ class Workforce(BaseNode):
1133
1210
  task.state = TaskState.FAILED
1134
1211
  # The agent tend to be overconfident on the whole task, so we
1135
1212
  # decompose the task into subtasks first
1136
- 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
1137
1224
  if self.metrics_logger and subtasks:
1138
1225
  self.metrics_logger.log_task_decomposed(
1139
1226
  parent_task_id=task.id, subtask_ids=[st.id for st in subtasks]
@@ -1250,7 +1337,17 @@ class Workforce(BaseNode):
1250
1337
  task.state = TaskState.FAILED # TODO: Add logic for OPEN
1251
1338
 
1252
1339
  # Decompose the task into subtasks first
1253
- 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
1254
1351
  if subtasks:
1255
1352
  # If decomposition happened, the original task becomes a container.
1256
1353
  # We only execute its subtasks.
@@ -1420,12 +1517,18 @@ class Workforce(BaseNode):
1420
1517
 
1421
1518
  Raises:
1422
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.
1423
1522
  """
1424
1523
  if self._state == WorkforceState.RUNNING:
1425
1524
  raise RuntimeError(
1426
1525
  "Cannot add workers while workforce is running. "
1427
1526
  "Pause the workforce first."
1428
1527
  )
1528
+
1529
+ # Validate worker agent compatibility
1530
+ self._validate_agent_compatibility(worker, "Worker agent")
1531
+
1429
1532
  # Ensure the worker agent shares this workforce's pause control
1430
1533
  self._attach_pause_event_to_agent(worker)
1431
1534
 
@@ -2057,7 +2160,6 @@ class Workforce(BaseNode):
2057
2160
  logger.error(
2058
2161
  f"JSON parsing error in worker creation: Invalid "
2059
2162
  f"response format - {e}. Response content: "
2060
- f"format - {e}. Response content: "
2061
2163
  f"{response.msg.content[:100]}..."
2062
2164
  )
2063
2165
  raise RuntimeError(
@@ -2070,6 +2172,14 @@ class Workforce(BaseNode):
2070
2172
  new_node_conf.sys_msg,
2071
2173
  )
2072
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
+
2073
2183
  new_node = SingleAgentWorker(
2074
2184
  description=new_node_conf.description,
2075
2185
  worker=new_agent,
@@ -2335,7 +2445,17 @@ class Workforce(BaseNode):
2335
2445
 
2336
2446
  elif recovery_decision.strategy == RecoveryStrategy.DECOMPOSE:
2337
2447
  # Decompose the task into subtasks
2338
- 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
2339
2459
  if self.metrics_logger and subtasks:
2340
2460
  self.metrics_logger.log_task_decomposed(
2341
2461
  parent_task_id=task.id,
@@ -3189,6 +3309,18 @@ class Workforce(BaseNode):
3189
3309
  )
3190
3310
 
3191
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
+
3192
3324
  workforce_instance.add_single_agent_worker(description, agent)
3193
3325
 
3194
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",
@@ -11,6 +11,7 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
  # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import os
14
15
  import re
15
16
  from datetime import datetime
16
17
  from pathlib import Path
@@ -37,7 +38,7 @@ class FileWriteToolkit(BaseToolkit):
37
38
 
38
39
  def __init__(
39
40
  self,
40
- output_dir: str = "./",
41
+ working_directory: Optional[str] = None,
41
42
  timeout: Optional[float] = None,
42
43
  default_encoding: str = "utf-8",
43
44
  backup_enabled: bool = True,
@@ -45,8 +46,11 @@ class FileWriteToolkit(BaseToolkit):
45
46
  r"""Initialize the FileWriteToolkit.
46
47
 
47
48
  Args:
48
- output_dir (str): The default directory for output files.
49
- Defaults to the current working directory.
49
+ working_directory (str, optional): The default directory for
50
+ output files. If not provided, it will be determined by the
51
+ `CAMEL_WORKDIR` environment variable (if set). If the
52
+ environment variable is not set, it defaults to
53
+ `camel_working_dir`.
50
54
  timeout (Optional[float]): The timeout for the toolkit.
51
55
  (default: :obj:`None`)
52
56
  default_encoding (str): Default character encoding for text
@@ -55,13 +59,20 @@ class FileWriteToolkit(BaseToolkit):
55
59
  before overwriting. (default: :obj:`True`)
56
60
  """
57
61
  super().__init__(timeout=timeout)
58
- self.output_dir = Path(output_dir).resolve()
59
- self.output_dir.mkdir(parents=True, exist_ok=True)
62
+ if working_directory:
63
+ self.working_directory = Path(working_directory).resolve()
64
+ else:
65
+ camel_workdir = os.environ.get("CAMEL_WORKDIR")
66
+ if camel_workdir:
67
+ self.working_directory = Path(camel_workdir).resolve()
68
+ else:
69
+ self.working_directory = Path("./camel_working_dir").resolve()
70
+ self.working_directory.mkdir(parents=True, exist_ok=True)
60
71
  self.default_encoding = default_encoding
61
72
  self.backup_enabled = backup_enabled
62
73
  logger.info(
63
74
  f"FileWriteToolkit initialized with output directory"
64
- f": {self.output_dir}, encoding: {default_encoding}"
75
+ f": {self.working_directory}, encoding: {default_encoding}"
65
76
  )
66
77
 
67
78
  def _resolve_filepath(self, file_path: str) -> Path:
@@ -80,7 +91,7 @@ class FileWriteToolkit(BaseToolkit):
80
91
  """
81
92
  path_obj = Path(file_path)
82
93
  if not path_obj.is_absolute():
83
- path_obj = self.output_dir / path_obj
94
+ path_obj = self.working_directory / path_obj
84
95
 
85
96
  sanitized_filename = self._sanitize_filename(path_obj.name)
86
97
  path_obj = path_obj.parent / sanitized_filename
@@ -916,7 +927,7 @@ class FileWriteToolkit(BaseToolkit):
916
927
  - CSV: string or list of lists
917
928
  - JSON: string or serializable object
918
929
  filename (str): The name or path of the file. If a relative path is
919
- supplied, it is resolved to self.output_dir.
930
+ supplied, it is resolved to self.working_directory.
920
931
  encoding (Optional[str]): The character encoding to use. (default:
921
932
  :obj: `None`)
922
933
  use_latex (bool): Whether to use LaTeX for math rendering.