camel-ai 0.2.75a5__tar.gz → 0.2.75a6__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 (476) hide show
  1. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/PKG-INFO +1 -9
  2. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/chat_agent.py +147 -93
  4. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/__init__.py +3 -0
  5. camel_ai-0.2.75a6/camel/configs/nebius_config.py +103 -0
  6. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/__init__.py +2 -0
  7. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/model_factory.py +2 -0
  8. camel_ai-0.2.75a6/camel/models/nebius_model.py +83 -0
  9. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/ollama_model.py +3 -3
  10. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/task_channel.py +120 -27
  11. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/workforce.py +35 -3
  12. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/github_toolkit.py +104 -17
  13. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +7 -2
  14. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/math_toolkit.py +64 -10
  15. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/search_toolkit.py +13 -2
  16. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/enums.py +31 -0
  17. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/unified_model_type.py +5 -0
  18. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/pyproject.toml +1 -9
  19. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/.gitignore +0 -0
  20. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/LICENSE +0 -0
  21. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/README.md +0 -0
  22. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/__init__.py +0 -0
  23. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/_types.py +0 -0
  24. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/_utils.py +0 -0
  25. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/base.py +0 -0
  26. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/critic_agent.py +0 -0
  27. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/deductive_reasoner_agent.py +0 -0
  28. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/embodied_agent.py +0 -0
  29. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/knowledge_graph_agent.py +0 -0
  30. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/mcp_agent.py +0 -0
  31. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/multi_hop_generator_agent.py +0 -0
  32. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/programmed_agent_instruction.py +0 -0
  33. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/repo_agent.py +0 -0
  34. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/role_assignment_agent.py +0 -0
  35. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/search_agent.py +0 -0
  36. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/task_agent.py +0 -0
  37. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/tool_agents/__init__.py +0 -0
  38. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/tool_agents/base.py +0 -0
  39. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  40. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/__init__.py +0 -0
  41. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/apibank.py +0 -0
  42. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/apibench.py +0 -0
  43. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/base.py +0 -0
  44. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/browsecomp.py +0 -0
  45. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/gaia.py +0 -0
  46. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/mock_website/README.md +0 -0
  47. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/mock_website/mock_web.py +0 -0
  48. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/mock_website/requirements.txt +0 -0
  49. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  50. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/mock_website/task.json +0 -0
  51. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/nexus.py +0 -0
  52. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/benchmarks/ragbench.py +0 -0
  53. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/__init__.py +0 -0
  54. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/discord/__init__.py +0 -0
  55. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/discord/discord_app.py +0 -0
  56. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/discord/discord_installation.py +0 -0
  57. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/discord/discord_store.py +0 -0
  58. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/slack/__init__.py +0 -0
  59. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/slack/models.py +0 -0
  60. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/slack/slack_app.py +0 -0
  61. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/bots/telegram_bot.py +0 -0
  62. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/aiml_config.py +0 -0
  63. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/anthropic_config.py +0 -0
  64. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/base_config.py +0 -0
  65. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/bedrock_config.py +0 -0
  66. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/cohere_config.py +0 -0
  67. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/crynux_config.py +0 -0
  68. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/deepseek_config.py +0 -0
  69. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/gemini_config.py +0 -0
  70. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/groq_config.py +0 -0
  71. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/internlm_config.py +0 -0
  72. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/litellm_config.py +0 -0
  73. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/lmstudio_config.py +0 -0
  74. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/mistral_config.py +0 -0
  75. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/modelscope_config.py +0 -0
  76. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/moonshot_config.py +0 -0
  77. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/netmind_config.py +0 -0
  78. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/novita_config.py +0 -0
  79. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/nvidia_config.py +0 -0
  80. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/ollama_config.py +0 -0
  81. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/openai_config.py +0 -0
  82. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/openrouter_config.py +0 -0
  83. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/ppio_config.py +0 -0
  84. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/qianfan_config.py +0 -0
  85. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/qwen_config.py +0 -0
  86. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/reka_config.py +0 -0
  87. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/samba_config.py +0 -0
  88. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/sglang_config.py +0 -0
  89. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/siliconflow_config.py +0 -0
  90. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/togetherai_config.py +0 -0
  91. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/vllm_config.py +0 -0
  92. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/watsonx_config.py +0 -0
  93. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/yi_config.py +0 -0
  94. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/configs/zhipuai_config.py +0 -0
  95. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/data_collectors/__init__.py +0 -0
  96. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/data_collectors/alpaca_collector.py +0 -0
  97. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/data_collectors/base.py +0 -0
  98. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/data_collectors/sharegpt_collector.py +0 -0
  99. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/__init__.py +0 -0
  100. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/cot_datagen.py +0 -0
  101. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/evol_instruct/__init__.py +0 -0
  102. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  103. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/evol_instruct/scorer.py +0 -0
  104. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/evol_instruct/templates.py +0 -0
  105. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_improving_cot.py +0 -0
  106. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/__init__.py +0 -0
  107. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  108. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  109. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  110. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  111. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/self_instruct.py +0 -0
  112. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/self_instruct/templates.py +0 -0
  113. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/source2synth/__init__.py +0 -0
  114. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/source2synth/data_processor.py +0 -0
  115. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/source2synth/models.py +0 -0
  116. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  117. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datahubs/__init__.py +0 -0
  118. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datahubs/base.py +0 -0
  119. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datahubs/huggingface.py +0 -0
  120. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datahubs/models.py +0 -0
  121. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datasets/__init__.py +0 -0
  122. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datasets/base_generator.py +0 -0
  123. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datasets/few_shot_generator.py +0 -0
  124. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datasets/models.py +0 -0
  125. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datasets/self_instruct_generator.py +0 -0
  126. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/datasets/static_dataset.py +0 -0
  127. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/__init__.py +0 -0
  128. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/azure_embedding.py +0 -0
  129. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/base.py +0 -0
  130. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/gemini_embedding.py +0 -0
  131. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/jina_embedding.py +0 -0
  132. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/mistral_embedding.py +0 -0
  133. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/openai_compatible_embedding.py +0 -0
  134. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/openai_embedding.py +0 -0
  135. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  136. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/together_embedding.py +0 -0
  137. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/embeddings/vlm_embedding.py +0 -0
  138. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/environments/__init__.py +0 -0
  139. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/environments/models.py +0 -0
  140. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/environments/multi_step.py +0 -0
  141. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/environments/rlcards_env.py +0 -0
  142. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/environments/single_step.py +0 -0
  143. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/environments/tic_tac_toe.py +0 -0
  144. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/extractors/__init__.py +0 -0
  145. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/extractors/base.py +0 -0
  146. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/extractors/python_strategies.py +0 -0
  147. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/generators.py +0 -0
  148. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/human.py +0 -0
  149. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/__init__.py +0 -0
  150. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/base.py +0 -0
  151. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/docker/Dockerfile +0 -0
  152. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/docker_interpreter.py +0 -0
  153. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/e2b_interpreter.py +0 -0
  154. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/internal_python_interpreter.py +0 -0
  155. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/interpreter_error.py +0 -0
  156. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/ipython_interpreter.py +0 -0
  157. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/interpreters/subprocess_interpreter.py +0 -0
  158. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/__init__.py +0 -0
  159. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/apify_reader.py +0 -0
  160. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/base_io.py +0 -0
  161. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/base_loader.py +0 -0
  162. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/chunkr_reader.py +0 -0
  163. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/crawl4ai_reader.py +0 -0
  164. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/firecrawl_reader.py +0 -0
  165. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/jina_url_reader.py +0 -0
  166. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/markitdown.py +0 -0
  167. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/mineru_extractor.py +0 -0
  168. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/mistral_reader.py +0 -0
  169. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/pandas_reader.py +0 -0
  170. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/scrapegraph_reader.py +0 -0
  171. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/loaders/unstructured_io.py +0 -0
  172. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/logger.py +0 -0
  173. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/__init__.py +0 -0
  174. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/agent_memories.py +0 -0
  175. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/base.py +0 -0
  176. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/blocks/__init__.py +0 -0
  177. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/blocks/chat_history_block.py +0 -0
  178. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/blocks/vectordb_block.py +0 -0
  179. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/context_creators/__init__.py +0 -0
  180. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/context_creators/score_based.py +0 -0
  181. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/memories/records.py +0 -0
  182. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/__init__.py +0 -0
  183. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/base.py +0 -0
  184. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/__init__.py +0 -0
  185. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/alpaca.py +0 -0
  186. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/conversation_models.py +0 -0
  187. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  188. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  189. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  190. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  191. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/messages/func_message.py +0 -0
  192. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/_utils.py +0 -0
  193. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/aiml_model.py +0 -0
  194. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/anthropic_model.py +0 -0
  195. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/aws_bedrock_model.py +0 -0
  196. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/azure_openai_model.py +0 -0
  197. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/base_audio_model.py +0 -0
  198. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/base_model.py +0 -0
  199. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/cohere_model.py +0 -0
  200. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/crynux_model.py +0 -0
  201. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/deepseek_model.py +0 -0
  202. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/fish_audio_model.py +0 -0
  203. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/gemini_model.py +0 -0
  204. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/groq_model.py +0 -0
  205. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/internlm_model.py +0 -0
  206. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/litellm_model.py +0 -0
  207. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/lmstudio_model.py +0 -0
  208. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/mistral_model.py +0 -0
  209. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/model_manager.py +0 -0
  210. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/modelscope_model.py +0 -0
  211. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/moonshot_model.py +0 -0
  212. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/nemotron_model.py +0 -0
  213. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/netmind_model.py +0 -0
  214. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/novita_model.py +0 -0
  215. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/nvidia_model.py +0 -0
  216. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/openai_audio_models.py +0 -0
  217. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/openai_compatible_model.py +0 -0
  218. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/openai_model.py +0 -0
  219. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/openrouter_model.py +0 -0
  220. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/ppio_model.py +0 -0
  221. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/qianfan_model.py +0 -0
  222. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/qwen_model.py +0 -0
  223. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/reka_model.py +0 -0
  224. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/reward/__init__.py +0 -0
  225. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/reward/base_reward_model.py +0 -0
  226. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/reward/evaluator.py +0 -0
  227. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/reward/nemotron_model.py +0 -0
  228. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/reward/skywork_model.py +0 -0
  229. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/samba_model.py +0 -0
  230. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/sglang_model.py +0 -0
  231. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/siliconflow_model.py +0 -0
  232. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/stub_model.py +0 -0
  233. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/togetherai_model.py +0 -0
  234. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/vllm_model.py +0 -0
  235. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/volcano_model.py +0 -0
  236. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/watsonx_model.py +0 -0
  237. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/yi_model.py +0 -0
  238. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/models/zhipuai_model.py +0 -0
  239. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/personas/__init__.py +0 -0
  240. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/personas/persona.py +0 -0
  241. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/personas/persona_hub.py +0 -0
  242. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/__init__.py +0 -0
  243. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/ai_society.py +0 -0
  244. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/base.py +0 -0
  245. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/code.py +0 -0
  246. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/evaluation.py +0 -0
  247. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/generate_text_embedding_data.py +0 -0
  248. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/image_craft.py +0 -0
  249. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/misalignment.py +0 -0
  250. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/multi_condition_image_craft.py +0 -0
  251. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/object_recognition.py +0 -0
  252. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/persona_hub.py +0 -0
  253. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/prompt_templates.py +0 -0
  254. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/role_description_prompt_template.py +0 -0
  255. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/solution_extraction.py +0 -0
  256. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/task_prompt_template.py +0 -0
  257. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/translation.py +0 -0
  258. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/prompts/video_description_prompt.py +0 -0
  259. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/py.typed +0 -0
  260. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/responses/__init__.py +0 -0
  261. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/responses/agent_responses.py +0 -0
  262. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/__init__.py +0 -0
  263. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/auto_retriever.py +0 -0
  264. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/base.py +0 -0
  265. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/bm25_retriever.py +0 -0
  266. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  267. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/hybrid_retrival.py +0 -0
  268. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/retrievers/vector_retriever.py +0 -0
  269. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/__init__.py +0 -0
  270. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/api.py +0 -0
  271. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/base.py +0 -0
  272. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/configs.py +0 -0
  273. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/daytona_runtime.py +0 -0
  274. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/docker_runtime.py +0 -0
  275. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/llm_guard_runtime.py +0 -0
  276. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/remote_http_runtime.py +0 -0
  277. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  278. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/utils/__init__.py +0 -0
  279. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  280. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  281. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/schemas/__init__.py +0 -0
  282. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/schemas/base.py +0 -0
  283. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/schemas/openai_converter.py +0 -0
  284. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/schemas/outlines_converter.py +0 -0
  285. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/services/agent_openapi_server.py +0 -0
  286. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/__init__.py +0 -0
  287. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/babyagi_playing.py +0 -0
  288. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/role_playing.py +0 -0
  289. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/__init__.py +0 -0
  290. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/base.py +0 -0
  291. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/prompts.py +0 -0
  292. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/role_playing_worker.py +0 -0
  293. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/single_agent_worker.py +0 -0
  294. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/structured_output_handler.py +0 -0
  295. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/utils.py +0 -0
  296. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/worker.py +0 -0
  297. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/societies/workforce/workforce_logger.py +0 -0
  298. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/__init__.py +0 -0
  299. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/graph_storages/__init__.py +0 -0
  300. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/graph_storages/base.py +0 -0
  301. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/graph_storages/graph_element.py +0 -0
  302. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/graph_storages/nebula_graph.py +0 -0
  303. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  304. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/key_value_storages/__init__.py +0 -0
  305. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/key_value_storages/base.py +0 -0
  306. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/key_value_storages/in_memory.py +0 -0
  307. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/key_value_storages/json.py +0 -0
  308. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  309. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/key_value_storages/redis.py +0 -0
  310. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/object_storages/__init__.py +0 -0
  311. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/object_storages/amazon_s3.py +0 -0
  312. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/object_storages/azure_blob.py +0 -0
  313. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/object_storages/base.py +0 -0
  314. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/object_storages/google_cloud.py +0 -0
  315. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/__init__.py +0 -0
  316. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/base.py +0 -0
  317. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/chroma.py +0 -0
  318. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/faiss.py +0 -0
  319. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/milvus.py +0 -0
  320. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  321. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/pgvector.py +0 -0
  322. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/qdrant.py +0 -0
  323. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/surreal.py +0 -0
  324. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/tidb.py +0 -0
  325. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/storages/vectordb_storages/weaviate.py +0 -0
  326. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/tasks/__init__.py +0 -0
  327. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/tasks/task.py +0 -0
  328. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/tasks/task_prompt.py +0 -0
  329. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/terminators/__init__.py +0 -0
  330. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/terminators/base.py +0 -0
  331. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/terminators/response_terminator.py +0 -0
  332. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/terminators/token_limit_terminator.py +0 -0
  333. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/__init__.py +0 -0
  334. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/aci_toolkit.py +0 -0
  335. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/arxiv_toolkit.py +0 -0
  336. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/ask_news_toolkit.py +0 -0
  337. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/async_browser_toolkit.py +0 -0
  338. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  339. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/base.py +0 -0
  340. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/bohrium_toolkit.py +0 -0
  341. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/browser_toolkit.py +0 -0
  342. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/browser_toolkit_commons.py +0 -0
  343. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/code_execution.py +0 -0
  344. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/craw4ai_toolkit.py +0 -0
  345. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/dappier_toolkit.py +0 -0
  346. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/data_commons_toolkit.py +0 -0
  347. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
  348. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/excel_toolkit.py +0 -0
  349. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/file_write_toolkit.py +0 -0
  350. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/function_tool.py +0 -0
  351. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/google_calendar_toolkit.py +0 -0
  352. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
  353. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/google_maps_toolkit.py +0 -0
  354. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/google_scholar_toolkit.py +0 -0
  355. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/human_toolkit.py +0 -0
  356. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
  357. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
  358. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +0 -0
  359. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +0 -0
  360. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +0 -0
  361. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -0
  362. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +0 -0
  363. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +0 -0
  364. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +0 -0
  365. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +0 -0
  366. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +0 -0
  367. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +0 -0
  368. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +0 -0
  369. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +0 -0
  370. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/__init__.py +0 -0
  371. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/actions.py +0 -0
  372. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/agent.py +0 -0
  373. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +0 -0
  374. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +0 -0
  375. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +0 -0
  376. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +0 -0
  377. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
  378. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +0 -0
  379. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/image_analysis_toolkit.py +0 -0
  380. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  381. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/klavis_toolkit.py +0 -0
  382. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/linkedin_toolkit.py +0 -0
  383. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/markitdown_toolkit.py +0 -0
  384. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/mcp_toolkit.py +0 -0
  385. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/memory_toolkit.py +0 -0
  386. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/meshy_toolkit.py +0 -0
  387. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/message_agent_toolkit.py +0 -0
  388. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/message_integration.py +0 -0
  389. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/mineru_toolkit.py +0 -0
  390. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/networkx_toolkit.py +0 -0
  391. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/note_taking_toolkit.py +0 -0
  392. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/notion_mcp_toolkit.py +0 -0
  393. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/notion_toolkit.py +0 -0
  394. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  395. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  396. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  397. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  398. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  399. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  400. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  401. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  402. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  403. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  404. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  405. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  406. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  407. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  408. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  409. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  410. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  411. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/security_config.py +0 -0
  412. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  413. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  414. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  415. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  416. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  417. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  418. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  419. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/open_api_toolkit.py +0 -0
  420. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/openai_image_toolkit.py +0 -0
  421. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/openbb_toolkit.py +0 -0
  422. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/origene_mcp_toolkit.py +0 -0
  423. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/page_script.js +0 -0
  424. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  425. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/pptx_toolkit.py +0 -0
  426. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/pubmed_toolkit.py +0 -0
  427. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  428. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/pyautogui_toolkit.py +0 -0
  429. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/reddit_toolkit.py +0 -0
  430. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/retrieval_toolkit.py +0 -0
  431. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/screenshot_toolkit.py +0 -0
  432. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/searxng_toolkit.py +0 -0
  433. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  434. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/slack_toolkit.py +0 -0
  435. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/stripe_toolkit.py +0 -0
  436. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/sympy_toolkit.py +0 -0
  437. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/task_planning_toolkit.py +0 -0
  438. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/terminal_toolkit.py +0 -0
  439. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/thinking_toolkit.py +0 -0
  440. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/twitter_toolkit.py +0 -0
  441. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/video_analysis_toolkit.py +0 -0
  442. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/video_download_toolkit.py +0 -0
  443. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/weather_toolkit.py +0 -0
  444. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/web_deploy_toolkit.py +0 -0
  445. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/whatsapp_toolkit.py +0 -0
  446. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  447. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/toolkits/zapier_toolkit.py +0 -0
  448. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/__init__.py +0 -0
  449. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/agents/__init__.py +0 -0
  450. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/agents/tool_calling_record.py +0 -0
  451. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/mcp_registries.py +0 -0
  452. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/types/openai_types.py +0 -0
  453. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/__init__.py +0 -0
  454. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/async_func.py +0 -0
  455. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/chunker/__init__.py +0 -0
  456. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/chunker/base.py +0 -0
  457. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/chunker/code_chunker.py +0 -0
  458. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/chunker/uio_chunker.py +0 -0
  459. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/commons.py +0 -0
  460. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/constants.py +0 -0
  461. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/deduplication.py +0 -0
  462. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/filename.py +0 -0
  463. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/langfuse.py +0 -0
  464. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/mcp.py +0 -0
  465. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/mcp_client.py +0 -0
  466. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/message_summarizer.py +0 -0
  467. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/response_format.py +0 -0
  468. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/token_counting.py +0 -0
  469. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/utils/tool_result.py +0 -0
  470. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/verifiers/__init__.py +0 -0
  471. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/verifiers/base.py +0 -0
  472. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/verifiers/math_verifier.py +0 -0
  473. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/verifiers/models.py +0 -0
  474. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/verifiers/physics_verifier.py +0 -0
  475. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/camel/verifiers/python_verifier.py +0 -0
  476. {camel_ai-0.2.75a5 → camel_ai-0.2.75a6}/hatch_build_npm.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.75a5
3
+ Version: 0.2.75a6
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
@@ -224,18 +224,12 @@ Requires-Dist: tabulate>=0.9.0; extra == 'document-tools'
224
224
  Requires-Dist: unstructured==0.16.20; extra == 'document-tools'
225
225
  Requires-Dist: xls2xlsx>=0.2.0; extra == 'document-tools'
226
226
  Provides-Extra: eigent
227
- Requires-Dist: aci-sdk>=1.0.0b1; extra == 'eigent'
228
227
  Requires-Dist: anthropic<0.50.0,>=0.47.0; extra == 'eigent'
229
- Requires-Dist: chunkr-ai<0.1.0,>=0.0.50; extra == 'eigent'
230
- Requires-Dist: chunkr-ai>=0.0.41; extra == 'eigent'
231
- Requires-Dist: crawl4ai>=0.3.745; extra == 'eigent'
232
228
  Requires-Dist: datasets<4,>=3; extra == 'eigent'
233
229
  Requires-Dist: docx>=0.2.4; extra == 'eigent'
234
- Requires-Dist: duckduckgo-search<7,>=6.3.5; extra == 'eigent'
235
230
  Requires-Dist: exa-py<2,>=1.10.0; extra == 'eigent'
236
231
  Requires-Dist: ffmpeg-python<0.3,>=0.2.0; extra == 'eigent'
237
232
  Requires-Dist: google-api-python-client==2.166.0; extra == 'eigent'
238
- Requires-Dist: html2text>=2024.2.26; extra == 'eigent'
239
233
  Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'eigent'
240
234
  Requires-Dist: markitdown[all]>=0.1.1; extra == 'eigent'
241
235
  Requires-Dist: mcp-server-fetch==2025.1.17; extra == 'eigent'
@@ -244,8 +238,6 @@ Requires-Dist: numpy<=2.2,>=1.2; extra == 'eigent'
244
238
  Requires-Dist: onnxruntime<=1.19.2; extra == 'eigent'
245
239
  Requires-Dist: openpyxl>=3.1.5; extra == 'eigent'
246
240
  Requires-Dist: pandas<2,>=1.5.3; extra == 'eigent'
247
- Requires-Dist: playwright>=1.50.0; extra == 'eigent'
248
- Requires-Dist: pyautogui<0.10,>=0.9.54; extra == 'eigent'
249
241
  Requires-Dist: pydub<0.26,>=0.25.1; extra == 'eigent'
250
242
  Requires-Dist: pylatex>=1.4.2; extra == 'eigent'
251
243
  Requires-Dist: pytesseract>=0.3.13; extra == 'eigent'
@@ -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.75a5'
17
+ __version__ = '0.2.75a6'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -14,9 +14,11 @@
14
14
  from __future__ import annotations
15
15
 
16
16
  import asyncio
17
+ import concurrent.futures
17
18
  import json
18
19
  import logging
19
20
  import queue
21
+ import random
20
22
  import textwrap
21
23
  import threading
22
24
  import time
@@ -40,6 +42,7 @@ from typing import (
40
42
 
41
43
  from openai import (
42
44
  AsyncStream,
45
+ RateLimitError,
43
46
  Stream,
44
47
  )
45
48
  from pydantic import BaseModel, ValidationError
@@ -386,6 +389,13 @@ class ChatAgent(BaseAgent):
386
389
  usage. When enabled, removes FUNCTION/TOOL role messages and
387
390
  ASSISTANT messages with tool_calls after each step.
388
391
  (default: :obj:`False`)
392
+ retry_attempts (int, optional): Maximum number of retry attempts for
393
+ rate limit errors. (default: :obj:`3`)
394
+ retry_delay (float, optional): Initial delay in seconds between
395
+ retries. Uses exponential backoff. (default: :obj:`1.0`)
396
+ step_timeout (Optional[float], optional): Timeout in seconds for the
397
+ entire step operation. If None, no timeout is applied.
398
+ (default: :obj:`None`)
389
399
  """
390
400
 
391
401
  def __init__(
@@ -426,6 +436,9 @@ class ChatAgent(BaseAgent):
426
436
  mask_tool_output: bool = False,
427
437
  pause_event: Optional[asyncio.Event] = None,
428
438
  prune_tool_calls_from_memory: bool = False,
439
+ retry_attempts: int = 3,
440
+ retry_delay: float = 1.0,
441
+ step_timeout: Optional[float] = None,
429
442
  ) -> None:
430
443
  if isinstance(model, ModelManager):
431
444
  self.model_backend = model
@@ -511,6 +524,9 @@ class ChatAgent(BaseAgent):
511
524
  self._secure_result_store: Dict[str, Any] = {}
512
525
  self.pause_event = pause_event
513
526
  self.prune_tool_calls_from_memory = prune_tool_calls_from_memory
527
+ self.retry_attempts = max(1, retry_attempts)
528
+ self.retry_delay = max(0.0, retry_delay)
529
+ self.step_timeout = step_timeout
514
530
 
515
531
  def reset(self):
516
532
  r"""Resets the :obj:`ChatAgent` to its initial state."""
@@ -1365,6 +1381,9 @@ class ChatAgent(BaseAgent):
1365
1381
  a StreamingChatAgentResponse that behaves like
1366
1382
  ChatAgentResponse but can also be iterated for
1367
1383
  streaming updates.
1384
+
1385
+ Raises:
1386
+ TimeoutError: If the step operation exceeds the configured timeout.
1368
1387
  """
1369
1388
 
1370
1389
  stream = self.model_backend.model_config_dict.get("stream", False)
@@ -1374,6 +1393,30 @@ class ChatAgent(BaseAgent):
1374
1393
  generator = self._stream(input_message, response_format)
1375
1394
  return StreamingChatAgentResponse(generator)
1376
1395
 
1396
+ # Execute with timeout if configured
1397
+ if self.step_timeout is not None:
1398
+ with concurrent.futures.ThreadPoolExecutor(
1399
+ max_workers=1
1400
+ ) as executor:
1401
+ future = executor.submit(
1402
+ self._step_impl, input_message, response_format
1403
+ )
1404
+ try:
1405
+ return future.result(timeout=self.step_timeout)
1406
+ except concurrent.futures.TimeoutError:
1407
+ future.cancel()
1408
+ raise TimeoutError(
1409
+ f"Step timed out after {self.step_timeout}s"
1410
+ )
1411
+ else:
1412
+ return self._step_impl(input_message, response_format)
1413
+
1414
+ def _step_impl(
1415
+ self,
1416
+ input_message: Union[BaseMessage, str],
1417
+ response_format: Optional[Type[BaseModel]] = None,
1418
+ ) -> ChatAgentResponse:
1419
+ r"""Implementation of non-streaming step logic."""
1377
1420
  # Set Langfuse session_id using agent_id for trace grouping
1378
1421
  try:
1379
1422
  from camel.utils.langfuse import set_current_agent_session_id
@@ -1544,6 +1587,10 @@ class ChatAgent(BaseAgent):
1544
1587
  True, returns an AsyncStreamingChatAgentResponse that can be
1545
1588
  awaited for the final result or async iterated for streaming
1546
1589
  updates.
1590
+
1591
+ Raises:
1592
+ asyncio.TimeoutError: If the step operation exceeds the configured
1593
+ timeout.
1547
1594
  """
1548
1595
 
1549
1596
  try:
@@ -1559,9 +1606,22 @@ class ChatAgent(BaseAgent):
1559
1606
  async_generator = self._astream(input_message, response_format)
1560
1607
  return AsyncStreamingChatAgentResponse(async_generator)
1561
1608
  else:
1562
- return await self._astep_non_streaming_task(
1563
- input_message, response_format
1564
- )
1609
+ if self.step_timeout is not None:
1610
+ try:
1611
+ return await asyncio.wait_for(
1612
+ self._astep_non_streaming_task(
1613
+ input_message, response_format
1614
+ ),
1615
+ timeout=self.step_timeout,
1616
+ )
1617
+ except asyncio.TimeoutError:
1618
+ raise asyncio.TimeoutError(
1619
+ f"Async step timed out after {self.step_timeout}s"
1620
+ )
1621
+ else:
1622
+ return await self._astep_non_streaming_task(
1623
+ input_message, response_format
1624
+ )
1565
1625
 
1566
1626
  async def _astep_non_streaming_task(
1567
1627
  self,
@@ -1776,64 +1836,61 @@ class ChatAgent(BaseAgent):
1776
1836
  tool_schemas: Optional[List[Dict[str, Any]]] = None,
1777
1837
  prev_num_openai_messages: int = 0,
1778
1838
  ) -> ModelResponse:
1779
- r"""Internal function for agent step model response.
1780
- Args:
1781
- openai_messages (List[OpenAIMessage]): The OpenAI
1782
- messages to process.
1783
- num_tokens (int): The number of tokens in the context.
1784
- current_iteration (int): The current iteration of the step.
1785
- response_format (Optional[Type[BaseModel]]): The response
1786
- format to use.
1787
- tool_schemas (Optional[List[Dict[str, Any]]]): The tool
1788
- schemas to use.
1789
- prev_num_openai_messages (int): The number of openai messages
1790
- logged in the previous iteration.
1791
-
1792
- Returns:
1793
- ModelResponse: The model response.
1794
- """
1839
+ r"""Internal function for agent step model response."""
1840
+ last_error = None
1795
1841
 
1796
- response = None
1797
- try:
1798
- response = self.model_backend.run(
1799
- openai_messages, response_format, tool_schemas or None
1800
- )
1801
- except Exception as exc:
1802
- logger.error(
1803
- f"An error occurred while running model "
1804
- f"{self.model_backend.model_type}, "
1805
- f"index: {self.model_backend.current_model_index}",
1806
- exc_info=exc,
1807
- )
1808
- error_info = str(exc)
1809
-
1810
- if not response and self.model_backend.num_models > 1:
1811
- raise ModelProcessingError(
1812
- "Unable to process messages: none of the provided models "
1813
- "run successfully."
1814
- )
1815
- elif not response:
1842
+ for attempt in range(self.retry_attempts):
1843
+ try:
1844
+ response = self.model_backend.run(
1845
+ openai_messages, response_format, tool_schemas or None
1846
+ )
1847
+ if response:
1848
+ break
1849
+ except RateLimitError as e:
1850
+ last_error = e
1851
+ if attempt < self.retry_attempts - 1:
1852
+ delay = min(self.retry_delay * (2**attempt), 60.0)
1853
+ delay = random.uniform(0, delay) # Add jitter
1854
+ logger.warning(
1855
+ f"Rate limit hit (attempt {attempt + 1}"
1856
+ f"/{self.retry_attempts}). Retrying in {delay:.1f}s"
1857
+ )
1858
+ time.sleep(delay)
1859
+ else:
1860
+ logger.error(
1861
+ f"Rate limit exhausted after "
1862
+ f"{self.retry_attempts} attempts"
1863
+ )
1864
+ except Exception:
1865
+ logger.error(
1866
+ f"Model error: {self.model_backend.model_type}",
1867
+ exc_info=True,
1868
+ )
1869
+ raise
1870
+ else:
1871
+ # Loop completed without success
1816
1872
  raise ModelProcessingError(
1817
- f"Unable to process messages: the only provided model "
1818
- f"did not run successfully. Error: {error_info}"
1873
+ f"Unable to process messages: "
1874
+ f"{str(last_error) if last_error else 'Unknown error'}"
1819
1875
  )
1820
1876
 
1821
- sanitized_messages = self._sanitize_messages_for_logging(
1877
+ # Log success
1878
+ sanitized = self._sanitize_messages_for_logging(
1822
1879
  openai_messages, prev_num_openai_messages
1823
1880
  )
1824
1881
  logger.info(
1825
- f"Model {self.model_backend.model_type}, "
1826
- f"index {self.model_backend.current_model_index}, "
1827
- f"iteration {current_iteration}, "
1828
- f"processed these messages: {sanitized_messages}"
1882
+ f"Model {self.model_backend.model_type} "
1883
+ f"[{current_iteration}]: {sanitized}"
1829
1884
  )
1885
+
1830
1886
  if not isinstance(response, ChatCompletion):
1831
1887
  raise TypeError(
1832
- f"Expected response to be a `ChatCompletion` object, but "
1833
- f"got {type(response).__name__} instead."
1888
+ f"Expected ChatCompletion, got {type(response).__name__}"
1834
1889
  )
1890
+
1835
1891
  return self._handle_batch_response(response)
1836
1892
 
1893
+ @observe()
1837
1894
  async def _aget_model_response(
1838
1895
  self,
1839
1896
  openai_messages: List[OpenAIMessage],
@@ -1843,62 +1900,59 @@ class ChatAgent(BaseAgent):
1843
1900
  tool_schemas: Optional[List[Dict[str, Any]]] = None,
1844
1901
  prev_num_openai_messages: int = 0,
1845
1902
  ) -> ModelResponse:
1846
- r"""Internal function for agent async step model response.
1847
- Args:
1848
- openai_messages (List[OpenAIMessage]): The OpenAI messages
1849
- to process.
1850
- num_tokens (int): The number of tokens in the context.
1851
- current_iteration (int): The current iteration of the step.
1852
- response_format (Optional[Type[BaseModel]]): The response
1853
- format to use.
1854
- tool_schemas (Optional[List[Dict[str, Any]]]): The tool schemas
1855
- to use.
1856
- prev_num_openai_messages (int): The number of openai messages
1857
- logged in the previous iteration.
1903
+ r"""Internal function for agent async step model response."""
1904
+ last_error = None
1858
1905
 
1859
- Returns:
1860
- ModelResponse: The model response.
1861
- """
1862
-
1863
- response = None
1864
- try:
1865
- response = await self.model_backend.arun(
1866
- openai_messages, response_format, tool_schemas or None
1867
- )
1868
- except Exception as exc:
1869
- logger.error(
1870
- f"An error occurred while running model "
1871
- f"{self.model_backend.model_type}, "
1872
- f"index: {self.model_backend.current_model_index}",
1873
- exc_info=exc,
1874
- )
1875
- error_info = str(exc)
1876
-
1877
- if not response and self.model_backend.num_models > 1:
1878
- raise ModelProcessingError(
1879
- "Unable to process messages: none of the provided models "
1880
- "run successfully."
1881
- )
1882
- elif not response:
1906
+ for attempt in range(self.retry_attempts):
1907
+ try:
1908
+ response = await self.model_backend.arun(
1909
+ openai_messages, response_format, tool_schemas or None
1910
+ )
1911
+ if response:
1912
+ break
1913
+ except RateLimitError as e:
1914
+ last_error = e
1915
+ if attempt < self.retry_attempts - 1:
1916
+ delay = min(self.retry_delay * (2**attempt), 60.0)
1917
+ delay = random.uniform(0, delay) # Add jitter
1918
+ logger.warning(
1919
+ f"Rate limit hit (attempt {attempt + 1}"
1920
+ f"/{self.retry_attempts}). "
1921
+ f"Retrying in {delay:.1f}s"
1922
+ )
1923
+ await asyncio.sleep(delay)
1924
+ else:
1925
+ logger.error(
1926
+ f"Rate limit exhausted after "
1927
+ f"{self.retry_attempts} attempts"
1928
+ )
1929
+ except Exception:
1930
+ logger.error(
1931
+ f"Model error: {self.model_backend.model_type}",
1932
+ exc_info=True,
1933
+ )
1934
+ raise
1935
+ else:
1936
+ # Loop completed without success
1883
1937
  raise ModelProcessingError(
1884
- f"Unable to process messages: the only provided model "
1885
- f"did not run successfully. Error: {error_info}"
1938
+ f"Unable to process messages: "
1939
+ f"{str(last_error) if last_error else 'Unknown error'}"
1886
1940
  )
1887
1941
 
1888
- sanitized_messages = self._sanitize_messages_for_logging(
1942
+ # Log success
1943
+ sanitized = self._sanitize_messages_for_logging(
1889
1944
  openai_messages, prev_num_openai_messages
1890
1945
  )
1891
1946
  logger.info(
1892
- f"Model {self.model_backend.model_type}, "
1893
- f"index {self.model_backend.current_model_index}, "
1894
- f"iteration {current_iteration}, "
1895
- f"processed these messages: {sanitized_messages}"
1947
+ f"Model {self.model_backend.model_type} "
1948
+ f"[{current_iteration}]: {sanitized}"
1896
1949
  )
1950
+
1897
1951
  if not isinstance(response, ChatCompletion):
1898
1952
  raise TypeError(
1899
- f"Expected response to be a `ChatCompletion` object, but "
1900
- f"got {type(response).__name__} instead."
1953
+ f"Expected ChatCompletion, got {type(response).__name__}"
1901
1954
  )
1955
+
1902
1956
  return self._handle_batch_response(response)
1903
1957
 
1904
1958
  def _sanitize_messages_for_logging(
@@ -26,6 +26,7 @@ from .lmstudio_config import LMSTUDIO_API_PARAMS, LMStudioConfig
26
26
  from .mistral_config import MISTRAL_API_PARAMS, MistralConfig
27
27
  from .modelscope_config import MODELSCOPE_API_PARAMS, ModelScopeConfig
28
28
  from .moonshot_config import MOONSHOT_API_PARAMS, MoonshotConfig
29
+ from .nebius_config import NEBIUS_API_PARAMS, NebiusConfig
29
30
  from .netmind_config import NETMIND_API_PARAMS, NetmindConfig
30
31
  from .novita_config import NOVITA_API_PARAMS, NovitaConfig
31
32
  from .nvidia_config import NVIDIA_API_PARAMS, NvidiaConfig
@@ -58,6 +59,8 @@ __all__ = [
58
59
  'ANTHROPIC_API_PARAMS',
59
60
  'GROQ_API_PARAMS',
60
61
  'GroqConfig',
62
+ 'NEBIUS_API_PARAMS',
63
+ 'NebiusConfig',
61
64
  'LiteLLMConfig',
62
65
  'LITELLM_API_PARAMS',
63
66
  'NetmindConfig',
@@ -0,0 +1,103 @@
1
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ from __future__ import annotations
15
+
16
+ from typing import Optional, Sequence, Union
17
+
18
+ from camel.configs.base_config import BaseConfig
19
+
20
+
21
+ class NebiusConfig(BaseConfig):
22
+ r"""Defines the parameters for generating chat completions using OpenAI
23
+ compatibility with Nebius AI Studio.
24
+
25
+ Reference: https://nebius.com/docs/ai-studio/api
26
+
27
+ Args:
28
+ temperature (float, optional): Sampling temperature to use, between
29
+ :obj:`0` and :obj:`2`. Higher values make the output more random,
30
+ while lower values make it more focused and deterministic.
31
+ (default: :obj:`None`)
32
+ top_p (float, optional): An alternative to sampling with temperature,
33
+ called nucleus sampling, where the model considers the results of
34
+ the tokens with top_p probability mass. So :obj:`0.1` means only
35
+ the tokens comprising the top 10% probability mass are considered.
36
+ (default: :obj:`None`)
37
+ n (int, optional): How many chat completion choices to generate for
38
+ each input message. (default: :obj:`None`)
39
+ response_format (object, optional): An object specifying the format
40
+ that the model must output. Compatible with GPT-4 Turbo and all
41
+ GPT-3.5 Turbo models newer than gpt-3.5-turbo-1106. Setting to
42
+ {"type": "json_object"} enables JSON mode, which guarantees the
43
+ message the model generates is valid JSON. Important: when using
44
+ JSON mode, you must also instruct the model to produce JSON
45
+ yourself via a system or user message. Without this, the model
46
+ may generate an unending stream of whitespace until the generation
47
+ reaches the token limit, resulting in a long-running and seemingly
48
+ "stuck" request. Also note that the message content may be
49
+ partially cut off if finish_reason="length", which indicates the
50
+ generation exceeded max_tokens or the conversation exceeded the
51
+ max context length.
52
+ stream (bool, optional): If True, partial message deltas will be sent
53
+ as data-only server-sent events as they become available.
54
+ (default: :obj:`None`)
55
+ stop (str or list, optional): Up to :obj:`4` sequences where the API
56
+ will stop generating further tokens. (default: :obj:`None`)
57
+ max_tokens (int, optional): The maximum number of tokens to generate
58
+ in the chat completion. The total length of input tokens and
59
+ generated tokens is limited by the model's context length.
60
+ (default: :obj:`None`)
61
+ presence_penalty (float, optional): Number between :obj:`-2.0` and
62
+ :obj:`2.0`. Positive values penalize new tokens based on whether
63
+ they appear in the text so far, increasing the model's likelihood
64
+ to talk about new topics. See more information about frequency and
65
+ presence penalties. (default: :obj:`None`)
66
+ frequency_penalty (float, optional): Number between :obj:`-2.0` and
67
+ :obj:`2.0`. Positive values penalize new tokens based on their
68
+ existing frequency in the text so far, decreasing the model's
69
+ likelihood to repeat the same line verbatim. See more information
70
+ about frequency and presence penalties. (default: :obj:`None`)
71
+ user (str, optional): A unique identifier representing your end-user,
72
+ which can help OpenAI to monitor and detect abuse.
73
+ (default: :obj:`None`)
74
+ tools (list[FunctionTool], optional): A list of tools the model may
75
+ call. Currently, only functions are supported as a tool. Use this
76
+ to provide a list of functions the model may generate JSON inputs
77
+ for. A max of 128 functions are supported.
78
+ tool_choice (Union[dict[str, str], str], optional): Controls which (if
79
+ any) tool is called by the model. :obj:`"none"` means the model
80
+ will not call any tool and instead generates a message.
81
+ :obj:`"auto"` means the model can pick between generating a
82
+ message or calling one or more tools. :obj:`"required"` means the
83
+ model must call one or more tools. Specifying a particular tool
84
+ via {"type": "function", "function": {"name": "my_function"}}
85
+ forces the model to call that tool. :obj:`"none"` is the default
86
+ when no tools are present. :obj:`"auto"` is the default if tools
87
+ are present.
88
+ """
89
+
90
+ temperature: Optional[float] = None
91
+ top_p: Optional[float] = None
92
+ n: Optional[int] = None
93
+ stream: Optional[bool] = None
94
+ stop: Optional[Union[str, Sequence[str]]] = None
95
+ max_tokens: Optional[int] = None
96
+ presence_penalty: Optional[float] = None
97
+ response_format: Optional[dict] = None
98
+ frequency_penalty: Optional[float] = None
99
+ user: Optional[str] = None
100
+ tool_choice: Optional[Union[dict[str, str], str]] = None
101
+
102
+
103
+ NEBIUS_API_PARAMS = {param for param in NebiusConfig.model_fields.keys()}
@@ -31,6 +31,7 @@ from .model_factory import ModelFactory
31
31
  from .model_manager import ModelManager, ModelProcessingError
32
32
  from .modelscope_model import ModelScopeModel
33
33
  from .moonshot_model import MoonshotModel
34
+ from .nebius_model import NebiusModel
34
35
  from .nemotron_model import NemotronModel
35
36
  from .netmind_model import NetmindModel
36
37
  from .novita_model import NovitaModel
@@ -87,6 +88,7 @@ __all__ = [
87
88
  'QwenModel',
88
89
  'AWSBedrockModel',
89
90
  'ModelProcessingError',
91
+ 'NebiusModel',
90
92
  'DeepSeekModel',
91
93
  'FishAudioModel',
92
94
  'InternLMModel',
@@ -31,6 +31,7 @@ from camel.models.lmstudio_model import LMStudioModel
31
31
  from camel.models.mistral_model import MistralModel
32
32
  from camel.models.modelscope_model import ModelScopeModel
33
33
  from camel.models.moonshot_model import MoonshotModel
34
+ from camel.models.nebius_model import NebiusModel
34
35
  from camel.models.netmind_model import NetmindModel
35
36
  from camel.models.novita_model import NovitaModel
36
37
  from camel.models.nvidia_model import NvidiaModel
@@ -83,6 +84,7 @@ class ModelFactory:
83
84
  ModelPlatformType.AZURE: AzureOpenAIModel,
84
85
  ModelPlatformType.ANTHROPIC: AnthropicModel,
85
86
  ModelPlatformType.GROQ: GroqModel,
87
+ ModelPlatformType.NEBIUS: NebiusModel,
86
88
  ModelPlatformType.LMSTUDIO: LMStudioModel,
87
89
  ModelPlatformType.OPENROUTER: OpenRouterModel,
88
90
  ModelPlatformType.ZHIPU: ZhipuAIModel,
@@ -0,0 +1,83 @@
1
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import os
15
+ from typing import Any, Dict, Optional, Union
16
+
17
+ from camel.configs import NebiusConfig
18
+ from camel.models.openai_compatible_model import OpenAICompatibleModel
19
+ from camel.types import ModelType
20
+ from camel.utils import (
21
+ BaseTokenCounter,
22
+ api_keys_required,
23
+ )
24
+
25
+
26
+ class NebiusModel(OpenAICompatibleModel):
27
+ r"""LLM API served by Nebius AI Studio in a unified OpenAICompatibleModel
28
+ interface.
29
+
30
+ Args:
31
+ model_type (Union[ModelType, str]): Model for which a backend is
32
+ created.
33
+ model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
34
+ that will be fed into:obj:`openai.ChatCompletion.create()`.
35
+ If:obj:`None`, :obj:`NebiusConfig().as_dict()` will be used.
36
+ (default: :obj:`None`)
37
+ api_key (Optional[str], optional): The API key for authenticating
38
+ with the Nebius AI Studio service. (default: :obj:`None`).
39
+ url (Optional[str], optional): The url to the Nebius AI Studio service.
40
+ (default: :obj:`None`)
41
+ token_counter (Optional[BaseTokenCounter], optional): Token counter to
42
+ use for the model. If not provided, :obj:`OpenAITokenCounter(
43
+ ModelType.GPT_4O_MINI)` will be used.
44
+ (default: :obj:`None`)
45
+ timeout (Optional[float], optional): The timeout value in seconds for
46
+ API calls. If not provided, will fall back to the MODEL_TIMEOUT
47
+ environment variable or default to 180 seconds.
48
+ (default: :obj:`None`)
49
+ max_retries (int, optional): Maximum number of retries for API calls.
50
+ (default: :obj:`3`)
51
+ **kwargs (Any): Additional arguments to pass to the client
52
+ initialization.
53
+ """
54
+
55
+ @api_keys_required([("api_key", "NEBIUS_API_KEY")])
56
+ def __init__(
57
+ self,
58
+ model_type: Union[ModelType, str],
59
+ model_config_dict: Optional[Dict[str, Any]] = None,
60
+ api_key: Optional[str] = None,
61
+ url: Optional[str] = None,
62
+ token_counter: Optional[BaseTokenCounter] = None,
63
+ timeout: Optional[float] = None,
64
+ max_retries: int = 3,
65
+ **kwargs: Any,
66
+ ) -> None:
67
+ if model_config_dict is None:
68
+ model_config_dict = NebiusConfig().as_dict()
69
+ api_key = api_key or os.environ.get("NEBIUS_API_KEY")
70
+ url = url or os.environ.get(
71
+ "NEBIUS_API_BASE_URL", "https://api.studio.nebius.com/v1"
72
+ )
73
+ timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
74
+ super().__init__(
75
+ model_type=model_type,
76
+ model_config_dict=model_config_dict,
77
+ api_key=api_key,
78
+ url=url,
79
+ token_counter=token_counter,
80
+ timeout=timeout,
81
+ max_retries=max_retries,
82
+ **kwargs,
83
+ )
@@ -35,8 +35,8 @@ class OllamaModel(OpenAICompatibleModel):
35
35
  If:obj:`None`, :obj:`OllamaConfig().as_dict()` will be used.
36
36
  (default: :obj:`None`)
37
37
  api_key (Optional[str], optional): The API key for authenticating with
38
- the model service. Ollama doesn't need API key, it would be
39
- ignored if set. (default: :obj:`None`)
38
+ the model service. Required for Ollama cloud services. If not
39
+ provided, defaults to "Not_Provided". (default: :obj:`None`)
40
40
  url (Optional[str], optional): The url to the model service.
41
41
  (default: :obj:`None`)
42
42
  token_counter (Optional[BaseTokenCounter], optional): Token counter to
@@ -79,7 +79,7 @@ class OllamaModel(OpenAICompatibleModel):
79
79
  super().__init__(
80
80
  model_type=self._model_type,
81
81
  model_config_dict=model_config_dict,
82
- api_key="Not_Used",
82
+ api_key=api_key or "Not_Provided",
83
83
  url=self._url,
84
84
  token_counter=token_counter,
85
85
  timeout=timeout,