camel-ai 0.2.69a6__tar.gz → 0.2.69a7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of camel-ai might be problematic. Click here for more details.

Files changed (444) hide show
  1. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/PKG-INFO +4 -1
  2. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/chat_agent.py +220 -7
  4. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/context_creators/score_based.py +11 -6
  5. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/base.py +2 -2
  6. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/workforce.py +214 -22
  7. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/__init__.py +2 -0
  8. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/__init__.py +2 -0
  9. camel_ai-0.2.69a7/camel/storages/vectordb_storages/chroma.py +731 -0
  10. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/tasks/task.py +30 -2
  11. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/__init__.py +2 -1
  12. camel_ai-0.2.69a7/camel/toolkits/excel_toolkit.py +939 -0
  13. camel_ai-0.2.69a7/camel/toolkits/google_drive_mcp_toolkit.py +73 -0
  14. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/mcp_toolkit.py +31 -1
  15. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/enums.py +6 -6
  16. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/pyproject.toml +4 -1
  17. camel_ai-0.2.69a6/camel/toolkits/excel_toolkit.py +0 -194
  18. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/.gitignore +0 -0
  19. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/LICENSE +0 -0
  20. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/README.md +0 -0
  21. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/__init__.py +0 -0
  22. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/_types.py +0 -0
  23. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/_utils.py +0 -0
  24. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/base.py +0 -0
  25. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/critic_agent.py +0 -0
  26. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/deductive_reasoner_agent.py +0 -0
  27. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/embodied_agent.py +0 -0
  28. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/knowledge_graph_agent.py +0 -0
  29. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/mcp_agent.py +0 -0
  30. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/multi_hop_generator_agent.py +0 -0
  31. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/programmed_agent_instruction.py +0 -0
  32. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/repo_agent.py +0 -0
  33. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/role_assignment_agent.py +0 -0
  34. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/search_agent.py +0 -0
  35. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/task_agent.py +0 -0
  36. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/tool_agents/__init__.py +0 -0
  37. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/tool_agents/base.py +0 -0
  38. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  39. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/__init__.py +0 -0
  40. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/apibank.py +0 -0
  41. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/apibench.py +0 -0
  42. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/base.py +0 -0
  43. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/browsecomp.py +0 -0
  44. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/gaia.py +0 -0
  45. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/README.md +0 -0
  46. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/mock_web.py +0 -0
  47. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/requirements.txt +0 -0
  48. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  49. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/task.json +0 -0
  50. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/nexus.py +0 -0
  51. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/benchmarks/ragbench.py +0 -0
  52. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/__init__.py +0 -0
  53. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/discord/__init__.py +0 -0
  54. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/discord/discord_app.py +0 -0
  55. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/discord/discord_installation.py +0 -0
  56. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/discord/discord_store.py +0 -0
  57. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/slack/__init__.py +0 -0
  58. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/slack/models.py +0 -0
  59. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/slack/slack_app.py +0 -0
  60. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/bots/telegram_bot.py +0 -0
  61. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/__init__.py +0 -0
  62. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/aiml_config.py +0 -0
  63. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/anthropic_config.py +0 -0
  64. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/base_config.py +0 -0
  65. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/bedrock_config.py +0 -0
  66. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/cohere_config.py +0 -0
  67. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/crynux_config.py +0 -0
  68. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/deepseek_config.py +0 -0
  69. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/gemini_config.py +0 -0
  70. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/groq_config.py +0 -0
  71. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/internlm_config.py +0 -0
  72. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/litellm_config.py +0 -0
  73. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/lmstudio_config.py +0 -0
  74. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/mistral_config.py +0 -0
  75. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/modelscope_config.py +0 -0
  76. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/moonshot_config.py +0 -0
  77. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/netmind_config.py +0 -0
  78. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/novita_config.py +0 -0
  79. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/nvidia_config.py +0 -0
  80. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/ollama_config.py +0 -0
  81. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/openai_config.py +0 -0
  82. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/openrouter_config.py +0 -0
  83. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/ppio_config.py +0 -0
  84. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/qianfan_config.py +0 -0
  85. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/qwen_config.py +0 -0
  86. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/reka_config.py +0 -0
  87. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/samba_config.py +0 -0
  88. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/sglang_config.py +0 -0
  89. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/siliconflow_config.py +0 -0
  90. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/togetherai_config.py +0 -0
  91. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/vllm_config.py +0 -0
  92. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/watsonx_config.py +0 -0
  93. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/yi_config.py +0 -0
  94. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/configs/zhipuai_config.py +0 -0
  95. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/data_collectors/__init__.py +0 -0
  96. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/data_collectors/alpaca_collector.py +0 -0
  97. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/data_collectors/base.py +0 -0
  98. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/data_collectors/sharegpt_collector.py +0 -0
  99. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/__init__.py +0 -0
  100. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/cot_datagen.py +0 -0
  101. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/__init__.py +0 -0
  102. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  103. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/scorer.py +0 -0
  104. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/templates.py +0 -0
  105. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_improving_cot.py +0 -0
  106. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/__init__.py +0 -0
  107. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  108. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  109. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  110. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  111. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/self_instruct.py +0 -0
  112. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/templates.py +0 -0
  113. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/source2synth/__init__.py +0 -0
  114. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/source2synth/data_processor.py +0 -0
  115. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/source2synth/models.py +0 -0
  116. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  117. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datahubs/__init__.py +0 -0
  118. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datahubs/base.py +0 -0
  119. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datahubs/huggingface.py +0 -0
  120. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datahubs/models.py +0 -0
  121. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datasets/__init__.py +0 -0
  122. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datasets/base_generator.py +0 -0
  123. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datasets/few_shot_generator.py +0 -0
  124. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datasets/models.py +0 -0
  125. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datasets/self_instruct_generator.py +0 -0
  126. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/datasets/static_dataset.py +0 -0
  127. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/__init__.py +0 -0
  128. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/azure_embedding.py +0 -0
  129. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/base.py +0 -0
  130. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/gemini_embedding.py +0 -0
  131. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/jina_embedding.py +0 -0
  132. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/mistral_embedding.py +0 -0
  133. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/openai_compatible_embedding.py +0 -0
  134. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/openai_embedding.py +0 -0
  135. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  136. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/together_embedding.py +0 -0
  137. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/embeddings/vlm_embedding.py +0 -0
  138. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/environments/__init__.py +0 -0
  139. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/environments/models.py +0 -0
  140. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/environments/multi_step.py +0 -0
  141. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/environments/rlcards_env.py +0 -0
  142. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/environments/single_step.py +0 -0
  143. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/environments/tic_tac_toe.py +0 -0
  144. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/extractors/__init__.py +0 -0
  145. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/extractors/base.py +0 -0
  146. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/extractors/python_strategies.py +0 -0
  147. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/generators.py +0 -0
  148. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/human.py +0 -0
  149. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/__init__.py +0 -0
  150. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/base.py +0 -0
  151. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/docker/Dockerfile +0 -0
  152. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/docker_interpreter.py +0 -0
  153. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/e2b_interpreter.py +0 -0
  154. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/internal_python_interpreter.py +0 -0
  155. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/interpreter_error.py +0 -0
  156. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/ipython_interpreter.py +0 -0
  157. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/interpreters/subprocess_interpreter.py +0 -0
  158. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/__init__.py +0 -0
  159. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/apify_reader.py +0 -0
  160. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/base_io.py +0 -0
  161. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/chunkr_reader.py +0 -0
  162. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/crawl4ai_reader.py +0 -0
  163. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/firecrawl_reader.py +0 -0
  164. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/jina_url_reader.py +0 -0
  165. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/markitdown.py +0 -0
  166. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/mineru_extractor.py +0 -0
  167. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/mistral_reader.py +0 -0
  168. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/pandas_reader.py +0 -0
  169. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/scrapegraph_reader.py +0 -0
  170. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/loaders/unstructured_io.py +0 -0
  171. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/logger.py +0 -0
  172. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/__init__.py +0 -0
  173. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/agent_memories.py +0 -0
  174. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/base.py +0 -0
  175. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/blocks/__init__.py +0 -0
  176. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/blocks/chat_history_block.py +0 -0
  177. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/blocks/vectordb_block.py +0 -0
  178. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/context_creators/__init__.py +0 -0
  179. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/memories/records.py +0 -0
  180. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/__init__.py +0 -0
  181. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/__init__.py +0 -0
  182. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/alpaca.py +0 -0
  183. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/conversation_models.py +0 -0
  184. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  185. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  186. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  187. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  188. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/messages/func_message.py +0 -0
  189. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/__init__.py +0 -0
  190. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/_utils.py +0 -0
  191. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/aiml_model.py +0 -0
  192. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/anthropic_model.py +0 -0
  193. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/aws_bedrock_model.py +0 -0
  194. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/azure_openai_model.py +0 -0
  195. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/base_audio_model.py +0 -0
  196. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/base_model.py +0 -0
  197. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/cohere_model.py +0 -0
  198. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/crynux_model.py +0 -0
  199. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/deepseek_model.py +0 -0
  200. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/fish_audio_model.py +0 -0
  201. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/gemini_model.py +0 -0
  202. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/groq_model.py +0 -0
  203. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/internlm_model.py +0 -0
  204. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/litellm_model.py +0 -0
  205. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/lmstudio_model.py +0 -0
  206. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/mistral_model.py +0 -0
  207. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/model_factory.py +0 -0
  208. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/model_manager.py +0 -0
  209. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/modelscope_model.py +0 -0
  210. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/moonshot_model.py +0 -0
  211. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/nemotron_model.py +0 -0
  212. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/netmind_model.py +0 -0
  213. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/novita_model.py +0 -0
  214. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/nvidia_model.py +0 -0
  215. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/ollama_model.py +0 -0
  216. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/openai_audio_models.py +0 -0
  217. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/openai_compatible_model.py +0 -0
  218. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/openai_model.py +0 -0
  219. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/openrouter_model.py +0 -0
  220. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/ppio_model.py +0 -0
  221. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/qianfan_model.py +0 -0
  222. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/qwen_model.py +0 -0
  223. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/reka_model.py +0 -0
  224. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/reward/__init__.py +0 -0
  225. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/reward/base_reward_model.py +0 -0
  226. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/reward/evaluator.py +0 -0
  227. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/reward/nemotron_model.py +0 -0
  228. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/reward/skywork_model.py +0 -0
  229. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/samba_model.py +0 -0
  230. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/sglang_model.py +0 -0
  231. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/siliconflow_model.py +0 -0
  232. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/stub_model.py +0 -0
  233. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/togetherai_model.py +0 -0
  234. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/vllm_model.py +0 -0
  235. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/volcano_model.py +0 -0
  236. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/watsonx_model.py +0 -0
  237. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/yi_model.py +0 -0
  238. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/models/zhipuai_model.py +0 -0
  239. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/personas/__init__.py +0 -0
  240. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/personas/persona.py +0 -0
  241. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/personas/persona_hub.py +0 -0
  242. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/__init__.py +0 -0
  243. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/ai_society.py +0 -0
  244. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/base.py +0 -0
  245. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/code.py +0 -0
  246. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/evaluation.py +0 -0
  247. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/generate_text_embedding_data.py +0 -0
  248. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/image_craft.py +0 -0
  249. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/misalignment.py +0 -0
  250. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/multi_condition_image_craft.py +0 -0
  251. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/object_recognition.py +0 -0
  252. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/persona_hub.py +0 -0
  253. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/prompt_templates.py +0 -0
  254. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/role_description_prompt_template.py +0 -0
  255. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/solution_extraction.py +0 -0
  256. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/task_prompt_template.py +0 -0
  257. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/translation.py +0 -0
  258. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/prompts/video_description_prompt.py +0 -0
  259. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/py.typed +0 -0
  260. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/responses/__init__.py +0 -0
  261. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/responses/agent_responses.py +0 -0
  262. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/__init__.py +0 -0
  263. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/auto_retriever.py +0 -0
  264. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/base.py +0 -0
  265. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/bm25_retriever.py +0 -0
  266. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  267. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/hybrid_retrival.py +0 -0
  268. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/retrievers/vector_retriever.py +0 -0
  269. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/__init__.py +0 -0
  270. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/api.py +0 -0
  271. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/base.py +0 -0
  272. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/configs.py +0 -0
  273. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/daytona_runtime.py +0 -0
  274. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/docker_runtime.py +0 -0
  275. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/llm_guard_runtime.py +0 -0
  276. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/remote_http_runtime.py +0 -0
  277. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  278. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/utils/__init__.py +0 -0
  279. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  280. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  281. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/schemas/__init__.py +0 -0
  282. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/schemas/base.py +0 -0
  283. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/schemas/openai_converter.py +0 -0
  284. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/schemas/outlines_converter.py +0 -0
  285. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/__init__.py +0 -0
  286. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/babyagi_playing.py +0 -0
  287. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/role_playing.py +0 -0
  288. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/__init__.py +0 -0
  289. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/base.py +0 -0
  290. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/prompts.py +0 -0
  291. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/role_playing_worker.py +0 -0
  292. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/single_agent_worker.py +0 -0
  293. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/task_channel.py +0 -0
  294. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/utils.py +0 -0
  295. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/worker.py +0 -0
  296. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/societies/workforce/workforce_logger.py +0 -0
  297. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/graph_storages/__init__.py +0 -0
  298. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/graph_storages/base.py +0 -0
  299. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/graph_storages/graph_element.py +0 -0
  300. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/graph_storages/nebula_graph.py +0 -0
  301. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  302. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/__init__.py +0 -0
  303. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/base.py +0 -0
  304. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/in_memory.py +0 -0
  305. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/json.py +0 -0
  306. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  307. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/redis.py +0 -0
  308. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/object_storages/__init__.py +0 -0
  309. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/object_storages/amazon_s3.py +0 -0
  310. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/object_storages/azure_blob.py +0 -0
  311. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/object_storages/base.py +0 -0
  312. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/object_storages/google_cloud.py +0 -0
  313. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/base.py +0 -0
  314. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/faiss.py +0 -0
  315. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/milvus.py +0 -0
  316. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  317. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/qdrant.py +0 -0
  318. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/tidb.py +0 -0
  319. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/weaviate.py +0 -0
  320. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/tasks/__init__.py +0 -0
  321. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/tasks/task_prompt.py +0 -0
  322. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/terminators/__init__.py +0 -0
  323. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/terminators/base.py +0 -0
  324. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/terminators/response_terminator.py +0 -0
  325. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/terminators/token_limit_terminator.py +0 -0
  326. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/aci_toolkit.py +0 -0
  327. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/arxiv_toolkit.py +0 -0
  328. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/ask_news_toolkit.py +0 -0
  329. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/async_browser_toolkit.py +0 -0
  330. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  331. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/base.py +0 -0
  332. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/bohrium_toolkit.py +0 -0
  333. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/browser_toolkit.py +0 -0
  334. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/browser_toolkit_commons.py +0 -0
  335. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/code_execution.py +0 -0
  336. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/craw4ai_toolkit.py +0 -0
  337. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/dalle_toolkit.py +0 -0
  338. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/dappier_toolkit.py +0 -0
  339. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/data_commons_toolkit.py +0 -0
  340. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
  341. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/file_write_toolkit.py +0 -0
  342. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/function_tool.py +0 -0
  343. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/github_toolkit.py +0 -0
  344. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/google_calendar_toolkit.py +0 -0
  345. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/google_maps_toolkit.py +0 -0
  346. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/google_scholar_toolkit.py +0 -0
  347. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/human_toolkit.py +0 -0
  348. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/image_analysis_toolkit.py +0 -0
  349. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  350. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/klavis_toolkit.py +0 -0
  351. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/linkedin_toolkit.py +0 -0
  352. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/markitdown_toolkit.py +0 -0
  353. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/math_toolkit.py +0 -0
  354. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/memory_toolkit.py +0 -0
  355. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/meshy_toolkit.py +0 -0
  356. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/mineru_toolkit.py +0 -0
  357. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/networkx_toolkit.py +0 -0
  358. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/__init__.py +0 -0
  359. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/actions.py +0 -0
  360. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/agent.py +0 -0
  361. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/browser_non_visual_toolkit.py +0 -0
  362. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/nv_browser_session.py +0 -0
  363. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/snapshot.js +0 -0
  364. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/snapshot.py +0 -0
  365. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/notion_toolkit.py +0 -0
  366. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  367. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  368. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  369. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  370. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  371. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  372. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  373. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  374. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  375. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  376. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  377. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  378. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  379. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  380. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  381. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  382. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  383. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/security_config.py +0 -0
  384. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  385. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  386. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  387. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  388. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  389. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  390. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  391. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/open_api_toolkit.py +0 -0
  392. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/openai_agent_toolkit.py +0 -0
  393. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/openbb_toolkit.py +0 -0
  394. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/page_script.js +0 -0
  395. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  396. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/pptx_toolkit.py +0 -0
  397. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/pubmed_toolkit.py +0 -0
  398. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  399. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/pyautogui_toolkit.py +0 -0
  400. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/reddit_toolkit.py +0 -0
  401. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/retrieval_toolkit.py +0 -0
  402. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/search_toolkit.py +0 -0
  403. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/searxng_toolkit.py +0 -0
  404. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  405. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/slack_toolkit.py +0 -0
  406. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/stripe_toolkit.py +0 -0
  407. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/sympy_toolkit.py +0 -0
  408. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/task_planning_toolkit.py +0 -0
  409. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/terminal_toolkit.py +0 -0
  410. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/thinking_toolkit.py +0 -0
  411. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/twitter_toolkit.py +0 -0
  412. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/video_analysis_toolkit.py +0 -0
  413. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/video_download_toolkit.py +0 -0
  414. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/weather_toolkit.py +0 -0
  415. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/whatsapp_toolkit.py +0 -0
  416. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  417. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/toolkits/zapier_toolkit.py +0 -0
  418. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/__init__.py +0 -0
  419. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/agents/__init__.py +0 -0
  420. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/agents/tool_calling_record.py +0 -0
  421. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/mcp_registries.py +0 -0
  422. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/openai_types.py +0 -0
  423. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/types/unified_model_type.py +0 -0
  424. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/__init__.py +0 -0
  425. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/async_func.py +0 -0
  426. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/chunker/__init__.py +0 -0
  427. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/chunker/base.py +0 -0
  428. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/chunker/code_chunker.py +0 -0
  429. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/chunker/uio_chunker.py +0 -0
  430. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/commons.py +0 -0
  431. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/constants.py +0 -0
  432. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/deduplication.py +0 -0
  433. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/filename.py +0 -0
  434. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/langfuse.py +0 -0
  435. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/mcp.py +0 -0
  436. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/mcp_client.py +0 -0
  437. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/response_format.py +0 -0
  438. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/utils/token_counting.py +0 -0
  439. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/verifiers/__init__.py +0 -0
  440. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/verifiers/base.py +0 -0
  441. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/verifiers/math_verifier.py +0 -0
  442. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/verifiers/models.py +0 -0
  443. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/camel/verifiers/physics_verifier.py +0 -0
  444. {camel_ai-0.2.69a6 → camel_ai-0.2.69a7}/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.69a6
3
+ Version: 0.2.69a7
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
@@ -31,6 +31,7 @@ Requires-Dist: arxiv<3,>=2.1.3; extra == 'all'
31
31
  Requires-Dist: azure-storage-blob<13,>=12.21.0; extra == 'all'
32
32
  Requires-Dist: beautifulsoup4<5,>=4; extra == 'all'
33
33
  Requires-Dist: botocore<2,>=1.35.3; extra == 'all'
34
+ Requires-Dist: chromadb<1.0.0,>=0.6.0; extra == 'all'
34
35
  Requires-Dist: chunkr-ai>=0.0.50; extra == 'all'
35
36
  Requires-Dist: cohere<6,>=5.11.0; extra == 'all'
36
37
  Requires-Dist: crawl4ai>=0.3.745; extra == 'all'
@@ -288,6 +289,7 @@ Requires-Dist: wikipedia<2,>=1; extra == 'owl'
288
289
  Requires-Dist: xls2xlsx>=0.2.0; extra == 'owl'
289
290
  Requires-Dist: yt-dlp<2025,>=2024.11.4; extra == 'owl'
290
291
  Provides-Extra: rag
292
+ Requires-Dist: chromadb<1.0.0,>=0.6.0; extra == 'rag'
291
293
  Requires-Dist: chunkr-ai>=0.0.50; extra == 'rag'
292
294
  Requires-Dist: cohere<6,>=5.11.0; extra == 'rag'
293
295
  Requires-Dist: crawl4ai>=0.3.745; extra == 'rag'
@@ -311,6 +313,7 @@ Requires-Dist: scholarly[tor]==1.7.11; extra == 'research-tools'
311
313
  Provides-Extra: storage
312
314
  Requires-Dist: azure-storage-blob<13,>=12.21.0; extra == 'storage'
313
315
  Requires-Dist: botocore<2,>=1.35.3; extra == 'storage'
316
+ Requires-Dist: chromadb<1.0.0,>=0.6.0; extra == 'storage'
314
317
  Requires-Dist: faiss-cpu<2,>=1.7.2; extra == 'storage'
315
318
  Requires-Dist: google-cloud-storage<3,>=2.18.0; extra == 'storage'
316
319
  Requires-Dist: mem0ai>=0.1.73; extra == 'storage'
@@ -14,7 +14,7 @@
14
14
 
15
15
  from camel.logger import disable_logging, enable_logging, set_log_level
16
16
 
17
- __version__ = '0.2.69a6'
17
+ __version__ = '0.2.69a7'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -406,7 +406,10 @@ class ChatAgent(BaseAgent):
406
406
  # List of tuples (platform, type)
407
407
  resolved_models_list = []
408
408
  for model_spec in model_list:
409
- platform, type_ = model_spec[0], model_spec[1] # type: ignore[index]
409
+ platform, type_ = ( # type: ignore[index]
410
+ model_spec[0],
411
+ model_spec[1],
412
+ )
410
413
  resolved_models_list.append(
411
414
  ModelFactory.create(
412
415
  model_platform=platform, model_type=type_
@@ -846,6 +849,185 @@ class ChatAgent(BaseAgent):
846
849
  except ValidationError:
847
850
  return False
848
851
 
852
+ def _check_tools_strict_compatibility(self) -> bool:
853
+ r"""Check if all tools are compatible with OpenAI strict mode.
854
+
855
+ Returns:
856
+ bool: True if all tools are strict mode compatible,
857
+ False otherwise.
858
+ """
859
+ tool_schemas = self._get_full_tool_schemas()
860
+ for schema in tool_schemas:
861
+ if not schema.get("function", {}).get("strict", True):
862
+ return False
863
+ return True
864
+
865
+ def _convert_response_format_to_prompt(
866
+ self, response_format: Type[BaseModel]
867
+ ) -> str:
868
+ r"""Convert a Pydantic response format to a prompt instruction.
869
+
870
+ Args:
871
+ response_format (Type[BaseModel]): The Pydantic model class.
872
+
873
+ Returns:
874
+ str: A prompt instruction requesting the specific format.
875
+ """
876
+ try:
877
+ # Get the JSON schema from the Pydantic model
878
+ schema = response_format.model_json_schema()
879
+
880
+ # Create a prompt based on the schema
881
+ format_instruction = (
882
+ "\n\nPlease respond in the following JSON format:\n" "{\n"
883
+ )
884
+
885
+ properties = schema.get("properties", {})
886
+ for field_name, field_info in properties.items():
887
+ field_type = field_info.get("type", "string")
888
+ description = field_info.get("description", "")
889
+
890
+ if field_type == "array":
891
+ format_instruction += (
892
+ f' "{field_name}": ["array of values"]'
893
+ )
894
+ elif field_type == "object":
895
+ format_instruction += f' "{field_name}": {{"object"}}'
896
+ elif field_type == "boolean":
897
+ format_instruction += f' "{field_name}": true'
898
+ elif field_type == "number":
899
+ format_instruction += f' "{field_name}": 0'
900
+ else:
901
+ format_instruction += f' "{field_name}": "string value"'
902
+
903
+ if description:
904
+ format_instruction += f' // {description}'
905
+
906
+ # Add comma if not the last item
907
+ if field_name != list(properties.keys())[-1]:
908
+ format_instruction += ","
909
+ format_instruction += "\n"
910
+
911
+ format_instruction += "}"
912
+ return format_instruction
913
+
914
+ except Exception as e:
915
+ logger.warning(
916
+ f"Failed to convert response_format to prompt: {e}. "
917
+ f"Using generic format instruction."
918
+ )
919
+ return (
920
+ "\n\nPlease respond in a structured JSON format "
921
+ "that matches the requested schema."
922
+ )
923
+
924
+ def _handle_response_format_with_non_strict_tools(
925
+ self,
926
+ input_message: Union[BaseMessage, str],
927
+ response_format: Optional[Type[BaseModel]] = None,
928
+ ) -> Tuple[Union[BaseMessage, str], Optional[Type[BaseModel]], bool]:
929
+ r"""Handle response format when tools are not strict mode compatible.
930
+
931
+ Args:
932
+ input_message: The original input message.
933
+ response_format: The requested response format.
934
+
935
+ Returns:
936
+ Tuple: (modified_message, modified_response_format,
937
+ used_prompt_formatting)
938
+ """
939
+ if response_format is None:
940
+ return input_message, response_format, False
941
+
942
+ # Check if tools are strict mode compatible
943
+ if self._check_tools_strict_compatibility():
944
+ return input_message, response_format, False
945
+
946
+ # Tools are not strict compatible, convert to prompt
947
+ logger.info(
948
+ "Non-strict tools detected. Converting response_format to "
949
+ "prompt-based formatting."
950
+ )
951
+
952
+ format_prompt = self._convert_response_format_to_prompt(
953
+ response_format
954
+ )
955
+
956
+ # Modify the message to include format instruction
957
+ modified_message: Union[BaseMessage, str]
958
+ if isinstance(input_message, str):
959
+ modified_message = input_message + format_prompt
960
+ else:
961
+ modified_message = input_message.create_new_instance(
962
+ input_message.content + format_prompt
963
+ )
964
+
965
+ # Return None for response_format to avoid strict mode conflicts
966
+ # and True to indicate we used prompt formatting
967
+ return modified_message, None, True
968
+
969
+ def _apply_prompt_based_parsing(
970
+ self,
971
+ response: ModelResponse,
972
+ original_response_format: Type[BaseModel],
973
+ ) -> None:
974
+ r"""Apply manual parsing when using prompt-based formatting.
975
+
976
+ Args:
977
+ response: The model response to parse.
978
+ original_response_format: The original response format class.
979
+ """
980
+ for message in response.output_messages:
981
+ if message.content:
982
+ try:
983
+ # Try to extract JSON from the response content
984
+ import json
985
+ import re
986
+
987
+ from pydantic import ValidationError
988
+
989
+ # Try to find JSON in the content
990
+ content = message.content.strip()
991
+
992
+ # Try direct parsing first
993
+ try:
994
+ parsed_json = json.loads(content)
995
+ message.parsed = (
996
+ original_response_format.model_validate(
997
+ parsed_json
998
+ )
999
+ )
1000
+ continue
1001
+ except (json.JSONDecodeError, ValidationError):
1002
+ pass
1003
+
1004
+ # Try to extract JSON from text
1005
+ json_pattern = r'\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}'
1006
+ json_matches = re.findall(json_pattern, content, re.DOTALL)
1007
+
1008
+ for json_str in json_matches:
1009
+ try:
1010
+ parsed_json = json.loads(json_str)
1011
+ message.parsed = (
1012
+ original_response_format.model_validate(
1013
+ parsed_json
1014
+ )
1015
+ )
1016
+ # Update content to just the JSON for consistency
1017
+ message.content = json.dumps(parsed_json)
1018
+ break
1019
+ except (json.JSONDecodeError, ValidationError):
1020
+ continue
1021
+
1022
+ if not message.parsed:
1023
+ logger.warning(
1024
+ f"Failed to parse JSON from response: "
1025
+ f"{content[:100]}..."
1026
+ )
1027
+
1028
+ except Exception as e:
1029
+ logger.warning(f"Error during prompt-based parsing: {e}")
1030
+
849
1031
  def _format_response_if_needed(
850
1032
  self,
851
1033
  response: ModelResponse,
@@ -932,6 +1114,14 @@ class ChatAgent(BaseAgent):
932
1114
  except ImportError:
933
1115
  pass # Langfuse not available
934
1116
 
1117
+ # Handle response format compatibility with non-strict tools
1118
+ original_response_format = response_format
1119
+ input_message, response_format, used_prompt_formatting = (
1120
+ self._handle_response_format_with_non_strict_tools(
1121
+ input_message, response_format
1122
+ )
1123
+ )
1124
+
935
1125
  # Convert input message to BaseMessage if necessary
936
1126
  if isinstance(input_message, str):
937
1127
  input_message = BaseMessage.make_user_message(
@@ -1014,6 +1204,13 @@ class ChatAgent(BaseAgent):
1014
1204
  break
1015
1205
 
1016
1206
  self._format_response_if_needed(response, response_format)
1207
+
1208
+ # Apply manual parsing if we used prompt-based formatting
1209
+ if used_prompt_formatting and original_response_format:
1210
+ self._apply_prompt_based_parsing(
1211
+ response, original_response_format
1212
+ )
1213
+
1017
1214
  self._record_final_output(response.output_messages)
1018
1215
 
1019
1216
  return self._convert_to_chatagent_response(
@@ -1065,6 +1262,14 @@ class ChatAgent(BaseAgent):
1065
1262
  except ImportError:
1066
1263
  pass # Langfuse not available
1067
1264
 
1265
+ # Handle response format compatibility with non-strict tools
1266
+ original_response_format = response_format
1267
+ input_message, response_format, used_prompt_formatting = (
1268
+ self._handle_response_format_with_non_strict_tools(
1269
+ input_message, response_format
1270
+ )
1271
+ )
1272
+
1068
1273
  if isinstance(input_message, str):
1069
1274
  input_message = BaseMessage.make_user_message(
1070
1275
  role_name="User", content=input_message
@@ -1098,6 +1303,11 @@ class ChatAgent(BaseAgent):
1098
1303
  )
1099
1304
  iteration_count += 1
1100
1305
 
1306
+ # Accumulate API token usage
1307
+ self._update_token_usage_tracker(
1308
+ step_token_usage, response.usage_dict
1309
+ )
1310
+
1101
1311
  # Terminate Agent if stop_event is set
1102
1312
  if self.stop_event and self.stop_event.is_set():
1103
1313
  # Use the _step_terminate to terminate the agent with reason
@@ -1139,13 +1349,14 @@ class ChatAgent(BaseAgent):
1139
1349
  break
1140
1350
 
1141
1351
  await self._aformat_response_if_needed(response, response_format)
1142
- self._record_final_output(response.output_messages)
1143
1352
 
1144
- # Create token usage tracker for this step
1145
- step_token_usage = self._create_token_usage_tracker()
1353
+ # Apply manual parsing if we used prompt-based formatting
1354
+ if used_prompt_formatting and original_response_format:
1355
+ self._apply_prompt_based_parsing(
1356
+ response, original_response_format
1357
+ )
1146
1358
 
1147
- # Update with response usage
1148
- self._update_token_usage_tracker(step_token_usage, response.usage_dict)
1359
+ self._record_final_output(response.output_messages)
1149
1360
 
1150
1361
  return self._convert_to_chatagent_response(
1151
1362
  response,
@@ -1924,7 +2135,9 @@ class ChatAgent(BaseAgent):
1924
2135
  schema for schema in self._external_tool_schemas.values()
1925
2136
  ],
1926
2137
  response_terminators=self.response_terminators,
1927
- scheduling_strategy=self.model_backend.scheduling_strategy.__name__,
2138
+ scheduling_strategy=(
2139
+ self.model_backend.scheduling_strategy.__name__
2140
+ ),
1928
2141
  max_iteration=self.max_iteration,
1929
2142
  stop_event=self.stop_event,
1930
2143
  )
@@ -155,16 +155,21 @@ class ScoreBasedContextCreator(BaseContextCreator):
155
155
  # ======================
156
156
  # 6. Truncation Logic with Tool Call Awareness
157
157
  # ======================
158
- logger.warning(
159
- f"Context truncation required "
160
- f"({total_tokens} > {self.token_limit}), "
161
- f"pruning low-score messages."
162
- )
163
-
164
158
  remaining_units = self._truncate_with_tool_call_awareness(
165
159
  regular_units, tool_call_groups, system_tokens
166
160
  )
167
161
 
162
+ # Log only after truncation is actually performed so that both
163
+ # the original and the final token counts are visible.
164
+ tokens_after = system_tokens + sum(
165
+ u.num_tokens for u in remaining_units
166
+ )
167
+ logger.warning(
168
+ "Context truncation performed: "
169
+ f"before={total_tokens}, after={tokens_after}, "
170
+ f"limit={self.token_limit}"
171
+ )
172
+
168
173
  # ======================
169
174
  # 7. Output Assembly
170
175
  # ======================
@@ -69,7 +69,7 @@ class BaseMessage:
69
69
  image_detail (Literal["auto", "low", "high"]): Detail level of the
70
70
  images associated with the message. (default: :obj:`auto`)
71
71
  video_detail (Literal["auto", "low", "high"]): Detail level of the
72
- videos associated with the message. (default: :obj:`low`)
72
+ videos associated with the message. (default: :obj:`auto`)
73
73
  parsed: Optional[Union[Type[BaseModel], dict]]: Optional object which
74
74
  is parsed from the content. (default: :obj:`None`)
75
75
  """
@@ -82,7 +82,7 @@ class BaseMessage:
82
82
  video_bytes: Optional[bytes] = None
83
83
  image_list: Optional[List[Image.Image]] = None
84
84
  image_detail: Literal["auto", "low", "high"] = "auto"
85
- video_detail: Literal["auto", "low", "high"] = "low"
85
+ video_detail: Literal["auto", "low", "high"] = "auto"
86
86
  parsed: Optional[Union[BaseModel, dict]] = None
87
87
 
88
88
  @classmethod
@@ -19,7 +19,7 @@ import time
19
19
  import uuid
20
20
  from collections import deque
21
21
  from enum import Enum
22
- from typing import Any, Coroutine, Deque, Dict, List, Optional
22
+ from typing import Any, Coroutine, Deque, Dict, List, Optional, Set, Tuple
23
23
 
24
24
  from colorama import Fore
25
25
 
@@ -37,6 +37,7 @@ from camel.societies.workforce.role_playing_worker import RolePlayingWorker
37
37
  from camel.societies.workforce.single_agent_worker import SingleAgentWorker
38
38
  from camel.societies.workforce.task_channel import TaskChannel
39
39
  from camel.societies.workforce.utils import (
40
+ TaskAssignment,
40
41
  TaskAssignResult,
41
42
  WorkerConf,
42
43
  check_if_running,
@@ -1164,22 +1165,30 @@ class Workforce(BaseNode):
1164
1165
  )
1165
1166
  return info
1166
1167
 
1167
- def _find_assignee(
1168
- self,
1169
- tasks: List[Task],
1168
+ def _get_valid_worker_ids(self) -> set:
1169
+ r"""Get all valid worker IDs from child nodes.
1170
+
1171
+ Returns:
1172
+ set: Set of valid worker IDs that can be assigned tasks.
1173
+ """
1174
+ valid_worker_ids = {child.node_id for child in self._children}
1175
+ return valid_worker_ids
1176
+
1177
+ def _call_coordinator_for_assignment(
1178
+ self, tasks: List[Task], invalid_ids: Optional[List[str]] = None
1170
1179
  ) -> TaskAssignResult:
1171
- r"""Assigns multiple tasks to worker nodes with the best capabilities.
1180
+ r"""Call coordinator agent to assign tasks with optional validation
1181
+ feedback in the case of invalid worker IDs.
1172
1182
 
1173
- Parameters:
1174
- tasks (List[Task]): The tasks to be assigned.
1183
+ Args:
1184
+ tasks (List[Task]): Tasks to assign.
1185
+ invalid_ids (List[str], optional): Invalid worker IDs from previous
1186
+ attempt (if any).
1175
1187
 
1176
1188
  Returns:
1177
- TaskAssignResult: Assignment result containing task assignments
1178
- with their dependencies.
1189
+ TaskAssignResult: Assignment result from coordinator.
1179
1190
  """
1180
- self.coordinator_agent.reset()
1181
-
1182
- # Format tasks information for the prompt
1191
+ # format tasks information for the prompt
1183
1192
  tasks_info = ""
1184
1193
  for task in tasks:
1185
1194
  tasks_info += f"Task ID: {task.id}\n"
@@ -1188,29 +1197,212 @@ class Workforce(BaseNode):
1188
1197
  tasks_info += f"Additional Info: {task.additional_info}\n"
1189
1198
  tasks_info += "---\n"
1190
1199
 
1191
- prompt = ASSIGN_TASK_PROMPT.format(
1192
- tasks_info=tasks_info,
1193
- child_nodes_info=self._get_child_nodes_info(),
1200
+ prompt = str(
1201
+ ASSIGN_TASK_PROMPT.format(
1202
+ tasks_info=tasks_info,
1203
+ child_nodes_info=self._get_child_nodes_info(),
1204
+ )
1194
1205
  )
1195
1206
 
1196
- logger.debug(
1197
- f"Sending batch assignment request to coordinator "
1198
- f"for {len(tasks)} tasks."
1199
- )
1207
+ # add feedback if this is a retry
1208
+ if invalid_ids:
1209
+ valid_worker_ids = list(self._get_valid_worker_ids())
1210
+ feedback = (
1211
+ f"VALIDATION ERROR: The following worker IDs are invalid: "
1212
+ f"{invalid_ids}. "
1213
+ f"VALID WORKER IDS: {valid_worker_ids}. "
1214
+ f"Please reassign ONLY the above tasks using these valid IDs."
1215
+ )
1216
+ prompt = prompt + f"\n\n{feedback}"
1200
1217
 
1201
1218
  response = self.coordinator_agent.step(
1202
1219
  prompt, response_format=TaskAssignResult
1203
1220
  )
1221
+
1204
1222
  if response.msg is None or response.msg.content is None:
1205
1223
  logger.error(
1206
1224
  "Coordinator agent returned empty response for task assignment"
1207
1225
  )
1208
- # Return empty result as fallback
1209
1226
  return TaskAssignResult(assignments=[])
1210
1227
 
1211
1228
  result_dict = json.loads(response.msg.content, parse_int=str)
1212
- task_assign_result = TaskAssignResult(**result_dict)
1213
- return task_assign_result
1229
+ return TaskAssignResult(**result_dict)
1230
+
1231
+ def _validate_assignments(
1232
+ self, assignments: List[TaskAssignment], valid_ids: Set[str]
1233
+ ) -> Tuple[List[TaskAssignment], List[TaskAssignment]]:
1234
+ r"""Validate task assignments against valid worker IDs.
1235
+
1236
+ Args:
1237
+ assignments (List[TaskAssignment]): Assignments to validate.
1238
+ valid_ids (Set[str]): Set of valid worker IDs.
1239
+
1240
+ Returns:
1241
+ Tuple[List[TaskAssignment], List[TaskAssignment]]:
1242
+ (valid_assignments, invalid_assignments)
1243
+ """
1244
+ valid_assignments: List[TaskAssignment] = []
1245
+ invalid_assignments: List[TaskAssignment] = []
1246
+
1247
+ for assignment in assignments:
1248
+ if assignment.assignee_id in valid_ids:
1249
+ valid_assignments.append(assignment)
1250
+ else:
1251
+ invalid_assignments.append(assignment)
1252
+
1253
+ return valid_assignments, invalid_assignments
1254
+
1255
+ def _handle_task_assignment_fallbacks(self, tasks: List[Task]) -> List:
1256
+ r"""Create new workers for unassigned tasks as fallback.
1257
+
1258
+ Args:
1259
+ tasks (List[Task]): Tasks that need new workers.
1260
+
1261
+ Returns:
1262
+ List[TaskAssignment]: Assignments for newly created workers.
1263
+ """
1264
+ fallback_assignments = []
1265
+
1266
+ for task in tasks:
1267
+ logger.info(f"Creating new worker for unassigned task {task.id}")
1268
+ new_worker = self._create_worker_node_for_task(task)
1269
+
1270
+ assignment = TaskAssignment(
1271
+ task_id=task.id,
1272
+ assignee_id=new_worker.node_id,
1273
+ dependencies=[],
1274
+ )
1275
+ fallback_assignments.append(assignment)
1276
+
1277
+ return fallback_assignments
1278
+
1279
+ def _handle_assignment_retry_and_fallback(
1280
+ self,
1281
+ invalid_assignments: List[TaskAssignment],
1282
+ tasks: List[Task],
1283
+ valid_worker_ids: Set[str],
1284
+ ) -> List[TaskAssignment]:
1285
+ r"""Called if Coordinator agent fails to assign tasks to valid worker
1286
+ IDs. Handles retry assignment and fallback worker creation for invalid
1287
+ assignments.
1288
+
1289
+ Args:
1290
+ invalid_assignments (List[TaskAssignment]): Invalid assignments to
1291
+ retry.
1292
+ tasks (List[Task]): Original tasks list for task lookup.
1293
+ valid_worker_ids (set): Set of valid worker IDs.
1294
+
1295
+ Returns:
1296
+ List[TaskAssignment]: Final assignments for the invalid tasks.
1297
+ """
1298
+ invalid_ids = [a.assignee_id for a in invalid_assignments]
1299
+ invalid_tasks = [
1300
+ task
1301
+ for task in tasks
1302
+ if any(a.task_id == task.id for a in invalid_assignments)
1303
+ ]
1304
+
1305
+ # handle cases where coordinator returned no assignments at all
1306
+ if not invalid_assignments:
1307
+ invalid_tasks = tasks # all tasks need assignment
1308
+ logger.warning(
1309
+ f"Coordinator returned no assignments. "
1310
+ f"Retrying assignment for all {len(invalid_tasks)} tasks."
1311
+ )
1312
+ else:
1313
+ logger.warning(
1314
+ f"Invalid worker IDs detected: {invalid_ids}. "
1315
+ f"Retrying assignment for {len(invalid_tasks)} tasks."
1316
+ )
1317
+
1318
+ # retry assignment with feedback
1319
+ retry_result = self._call_coordinator_for_assignment(
1320
+ invalid_tasks, invalid_ids
1321
+ )
1322
+ final_assignments = []
1323
+
1324
+ if retry_result.assignments:
1325
+ retry_valid, retry_invalid = self._validate_assignments(
1326
+ retry_result.assignments, valid_worker_ids
1327
+ )
1328
+ final_assignments.extend(retry_valid)
1329
+
1330
+ # collect tasks that are still unassigned for fallback
1331
+ if retry_invalid:
1332
+ unassigned_tasks = [
1333
+ task
1334
+ for task in invalid_tasks
1335
+ if any(a.task_id == task.id for a in retry_invalid)
1336
+ ]
1337
+ else:
1338
+ unassigned_tasks = []
1339
+ else:
1340
+ # retry failed completely, all invalid tasks need fallback
1341
+ logger.warning("Retry assignment failed")
1342
+ unassigned_tasks = invalid_tasks
1343
+
1344
+ # handle fallback for any remaining unassigned tasks
1345
+ if unassigned_tasks:
1346
+ logger.warning(
1347
+ f"Creating fallback workers for {len(unassigned_tasks)} "
1348
+ f"unassigned tasks"
1349
+ )
1350
+ fallback_assignments = self._handle_task_assignment_fallbacks(
1351
+ unassigned_tasks
1352
+ )
1353
+ final_assignments.extend(fallback_assignments)
1354
+
1355
+ return final_assignments
1356
+
1357
+ def _find_assignee(
1358
+ self,
1359
+ tasks: List[Task],
1360
+ ) -> TaskAssignResult:
1361
+ r"""Assigns multiple tasks to worker nodes with the best capabilities.
1362
+
1363
+ Parameters:
1364
+ tasks (List[Task]): The tasks to be assigned.
1365
+
1366
+ Returns:
1367
+ TaskAssignResult: Assignment result containing task assignments
1368
+ with their dependencies.
1369
+ """
1370
+ self.coordinator_agent.reset()
1371
+ valid_worker_ids = self._get_valid_worker_ids()
1372
+
1373
+ logger.debug(
1374
+ f"Sending batch assignment request to coordinator "
1375
+ f"for {len(tasks)} tasks."
1376
+ )
1377
+
1378
+ assignment_result = self._call_coordinator_for_assignment(tasks)
1379
+
1380
+ # validate assignments
1381
+ valid_assignments, invalid_assignments = self._validate_assignments(
1382
+ assignment_result.assignments, valid_worker_ids
1383
+ )
1384
+
1385
+ # check if we have assignments for all tasks
1386
+ assigned_task_ids = {
1387
+ a.task_id for a in valid_assignments + invalid_assignments
1388
+ }
1389
+ unassigned_tasks = [t for t in tasks if t.id not in assigned_task_ids]
1390
+
1391
+ # if all assignments are valid and all tasks are assigned, return early
1392
+ if not invalid_assignments and not unassigned_tasks:
1393
+ return TaskAssignResult(assignments=valid_assignments)
1394
+
1395
+ # handle retry and fallback for
1396
+ # invalid assignments and unassigned tasks
1397
+ all_problem_assignments = invalid_assignments
1398
+ retry_and_fallback_assignments = (
1399
+ self._handle_assignment_retry_and_fallback(
1400
+ all_problem_assignments, tasks, valid_worker_ids
1401
+ )
1402
+ )
1403
+ valid_assignments.extend(retry_and_fallback_assignments)
1404
+
1405
+ return TaskAssignResult(assignments=valid_assignments)
1214
1406
 
1215
1407
  async def _post_task(self, task: Task, assignee_id: str) -> None:
1216
1408
  # Record the start time when a task is posted
@@ -26,6 +26,7 @@ from .vectordb_storages.base import (
26
26
  VectorDBQueryResult,
27
27
  VectorRecord,
28
28
  )
29
+ from .vectordb_storages.chroma import ChromaStorage
29
30
  from .vectordb_storages.faiss import FaissStorage
30
31
  from .vectordb_storages.milvus import MilvusStorage
31
32
  from .vectordb_storages.oceanbase import OceanBaseStorage
@@ -52,4 +53,5 @@ __all__ = [
52
53
  'Mem0Storage',
53
54
  'OceanBaseStorage',
54
55
  'WeaviateStorage',
56
+ 'ChromaStorage',
55
57
  ]
@@ -19,6 +19,7 @@ from .base import (
19
19
  VectorDBStatus,
20
20
  VectorRecord,
21
21
  )
22
+ from .chroma import ChromaStorage
22
23
  from .faiss import FaissStorage
23
24
  from .milvus import MilvusStorage
24
25
  from .oceanbase import OceanBaseStorage
@@ -30,6 +31,7 @@ __all__ = [
30
31
  'BaseVectorStorage',
31
32
  'VectorDBQuery',
32
33
  'VectorDBQueryResult',
34
+ 'ChromaStorage',
33
35
  'QdrantStorage',
34
36
  'MilvusStorage',
35
37
  "TiDBStorage",