camel-ai 0.2.78__tar.gz → 0.2.79a0__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.
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/PKG-INFO +14 -13
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/__init__.py +1 -1
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/chat_agent.py +304 -12
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datasets/base_generator.py +39 -10
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/environments/single_step.py +28 -3
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/__init__.py +1 -2
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/blocks/chat_history_block.py +2 -17
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/aws_bedrock_model.py +1 -17
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/moonshot_model.py +102 -5
- camel_ai-0.2.79a0/camel/societies/workforce/events.py +122 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/single_agent_worker.py +164 -34
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/workforce.py +417 -156
- camel_ai-0.2.79a0/camel/societies/workforce/workforce_callback.py +74 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/workforce_logger.py +144 -140
- camel_ai-0.2.79a0/camel/societies/workforce/workforce_metrics.py +33 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/context_utils.py +53 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/pyproject.toml +16 -14
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/.gitignore +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/LICENSE +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/README.md +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/amd_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/cometapi_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/nebius_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/environments/models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/generators.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/human.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/microsandbox_interpreter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/base_loader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/logger.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/agent_memories.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/memories/records.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/amd_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/cometapi_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/nebius_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/parsers/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/parsers/mcp_tool_call_parser.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/py.typed +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/services/agent_openapi_server.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/structured_output_handler.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/pgvector.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/surreal.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/context_summarizer_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/dingtalk.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/file_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/human_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/installer.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/actions.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/agent.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/image_generation_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/markitdown_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/message_agent_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/message_integration.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/minimax_mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/note_taking_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/notion_mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/origene_mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/resend_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/screenshot_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/terminal_toolkit/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/terminal_toolkit/terminal_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/terminal_toolkit/utils.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/vertex_ai_veo_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/web_deploy_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/wechat_official_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/enums.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/message_summarizer.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/utils/tool_result.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.78 → camel_ai-0.2.79a0}/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.
|
|
3
|
+
Version: 0.2.79a0
|
|
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
|
|
@@ -9,7 +9,7 @@ Author: CAMEL-AI.org
|
|
|
9
9
|
License-Expression: Apache-2.0
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Keywords: ai-societies,artificial-intelligence,communicative-ai,cooperative-ai,deep-learning,large-language-models,multi-agent-systems,natural-language-processing
|
|
12
|
-
Requires-Python: <3.
|
|
12
|
+
Requires-Python: <3.15,>=3.10
|
|
13
13
|
Requires-Dist: astor>=0.8.1
|
|
14
14
|
Requires-Dist: colorama<0.5,>=0.4.6
|
|
15
15
|
Requires-Dist: docstring-parser<0.18,>=0.17.0
|
|
@@ -72,7 +72,7 @@ Requires-Dist: jupyter-client<9,>=8.6.2; extra == 'all'
|
|
|
72
72
|
Requires-Dist: langfuse>=2.60.5; extra == 'all'
|
|
73
73
|
Requires-Dist: linkup-sdk<0.3,>=0.2.1; extra == 'all'
|
|
74
74
|
Requires-Dist: litellm<2,>=1.38.1; extra == 'all'
|
|
75
|
-
Requires-Dist: markitdown>=0.1.1; extra == 'all'
|
|
75
|
+
Requires-Dist: markitdown>=0.1.1; (python_version >= '3.13') and extra == 'all'
|
|
76
76
|
Requires-Dist: math-verify<0.8,>=0.7.0; extra == 'all'
|
|
77
77
|
Requires-Dist: mcp>=1.3.0; extra == 'all'
|
|
78
78
|
Requires-Dist: mem0ai>=0.1.67; extra == 'all'
|
|
@@ -102,7 +102,7 @@ Requires-Dist: pygithub<3,>=2.6.0; extra == 'all'
|
|
|
102
102
|
Requires-Dist: pylatex>=1.4.2; extra == 'all'
|
|
103
103
|
Requires-Dist: pymilvus<3,>=2.4.0; extra == 'all'
|
|
104
104
|
Requires-Dist: pymupdf<2,>=1.22.5; extra == 'all'
|
|
105
|
-
Requires-Dist: pyobvector>=0.1.18; extra == 'all'
|
|
105
|
+
Requires-Dist: pyobvector>=0.1.18; (python_version < '3.13') and extra == 'all'
|
|
106
106
|
Requires-Dist: pyowm<4,>=3.3.0; extra == 'all'
|
|
107
107
|
Requires-Dist: pytelegrambotapi<5,>=4.18.0; extra == 'all'
|
|
108
108
|
Requires-Dist: pytesseract>=0.3.13; extra == 'all'
|
|
@@ -143,7 +143,7 @@ Requires-Dist: types-pyyaml<7,>=6.0.12; extra == 'all'
|
|
|
143
143
|
Requires-Dist: types-requests<3,>=2.31.0; extra == 'all'
|
|
144
144
|
Requires-Dist: types-setuptools<70,>=69.2.0; extra == 'all'
|
|
145
145
|
Requires-Dist: types-tqdm<5,>=4.66.0; extra == 'all'
|
|
146
|
-
Requires-Dist: unstructured==0.16.20; extra == 'all'
|
|
146
|
+
Requires-Dist: unstructured==0.16.20; (python_version < '3.13') and extra == 'all'
|
|
147
147
|
Requires-Dist: weaviate-client>=4.15.0; extra == 'all'
|
|
148
148
|
Requires-Dist: websockets<15.1,>=13.0; extra == 'all'
|
|
149
149
|
Requires-Dist: wikipedia<2,>=1; extra == 'all'
|
|
@@ -215,7 +215,7 @@ Requires-Dist: chunkr-ai<0.1.0,>=0.0.50; extra == 'document-tools'
|
|
|
215
215
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'document-tools'
|
|
216
216
|
Requires-Dist: docx2txt<0.9,>=0.8; extra == 'document-tools'
|
|
217
217
|
Requires-Dist: docx>=0.2.4; extra == 'document-tools'
|
|
218
|
-
Requires-Dist: markitdown>=0.1.1; extra == 'document-tools'
|
|
218
|
+
Requires-Dist: markitdown>=0.1.1; (python_version >= '3.13') and extra == 'document-tools'
|
|
219
219
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'document-tools'
|
|
220
220
|
Requires-Dist: onnxruntime<=1.19.2; extra == 'document-tools'
|
|
221
221
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'document-tools'
|
|
@@ -226,7 +226,7 @@ Requires-Dist: pymupdf<2,>=1.22.5; extra == 'document-tools'
|
|
|
226
226
|
Requires-Dist: python-pptx>=1.0.2; extra == 'document-tools'
|
|
227
227
|
Requires-Dist: reportlab>=4.4.2; extra == 'document-tools'
|
|
228
228
|
Requires-Dist: tabulate>=0.9.0; extra == 'document-tools'
|
|
229
|
-
Requires-Dist: unstructured==0.16.20; extra == 'document-tools'
|
|
229
|
+
Requires-Dist: unstructured==0.16.20; (python_version < '3.13') and extra == 'document-tools'
|
|
230
230
|
Requires-Dist: xls2xlsx>=0.2.0; extra == 'document-tools'
|
|
231
231
|
Provides-Extra: eigent
|
|
232
232
|
Requires-Dist: anthropic<0.50.0,>=0.47.0; extra == 'eigent'
|
|
@@ -238,7 +238,8 @@ Requires-Dist: google-api-python-client==2.166.0; extra == 'eigent'
|
|
|
238
238
|
Requires-Dist: google-auth-httplib2==0.2.0; extra == 'eigent'
|
|
239
239
|
Requires-Dist: google-auth-oauthlib==1.2.1; extra == 'eigent'
|
|
240
240
|
Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'eigent'
|
|
241
|
-
Requires-Dist: markitdown
|
|
241
|
+
Requires-Dist: markitdown>=0.1.1; (python_version >= '3.13') and extra == 'eigent'
|
|
242
|
+
Requires-Dist: markitdown[all]>=0.1.1; (python_version < '3.13') and extra == 'eigent'
|
|
242
243
|
Requires-Dist: mcp-server-fetch==2025.1.17; extra == 'eigent'
|
|
243
244
|
Requires-Dist: mcp-simple-arxiv==0.2.2; extra == 'eigent'
|
|
244
245
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'eigent'
|
|
@@ -297,7 +298,7 @@ Requires-Dist: exa-py<2,>=1.10.0; extra == 'owl'
|
|
|
297
298
|
Requires-Dist: ffmpeg-python<0.3,>=0.2.0; extra == 'owl'
|
|
298
299
|
Requires-Dist: html2text>=2024.2.26; extra == 'owl'
|
|
299
300
|
Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'owl'
|
|
300
|
-
Requires-Dist: markitdown>=0.1.1; extra == 'owl'
|
|
301
|
+
Requires-Dist: markitdown>=0.1.1; (python_version >= '3.13') and extra == 'owl'
|
|
301
302
|
Requires-Dist: mcp-server-fetch==2025.1.17; extra == 'owl'
|
|
302
303
|
Requires-Dist: mcp-simple-arxiv==0.2.2; extra == 'owl'
|
|
303
304
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'owl'
|
|
@@ -326,7 +327,7 @@ Requires-Dist: transformers<5,>=4; extra == 'owl'
|
|
|
326
327
|
Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'owl'
|
|
327
328
|
Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'owl'
|
|
328
329
|
Requires-Dist: typer>=0.15.2; extra == 'owl'
|
|
329
|
-
Requires-Dist: unstructured==0.16.20; extra == 'owl'
|
|
330
|
+
Requires-Dist: unstructured==0.16.20; (python_version < '3.13') and extra == 'owl'
|
|
330
331
|
Requires-Dist: websockets<15.1,>=13.0; extra == 'owl'
|
|
331
332
|
Requires-Dist: wikipedia<2,>=1; extra == 'owl'
|
|
332
333
|
Requires-Dist: xls2xlsx>=0.2.0; extra == 'owl'
|
|
@@ -343,11 +344,11 @@ Requires-Dist: neo4j<6,>=5.18.0; extra == 'rag'
|
|
|
343
344
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'rag'
|
|
344
345
|
Requires-Dist: protobuf>=6.0.0; extra == 'rag'
|
|
345
346
|
Requires-Dist: pymilvus<3,>=2.4.0; extra == 'rag'
|
|
346
|
-
Requires-Dist: pyobvector>=0.1.18; extra == 'rag'
|
|
347
|
+
Requires-Dist: pyobvector>=0.1.18; (python_version < '3.13') and extra == 'rag'
|
|
347
348
|
Requires-Dist: pytidb>=0.0.13; extra == 'rag'
|
|
348
349
|
Requires-Dist: qdrant-client<2,>=1.9.0; extra == 'rag'
|
|
349
350
|
Requires-Dist: rank-bm25<0.3,>=0.2.2; extra == 'rag'
|
|
350
|
-
Requires-Dist: unstructured==0.16.20; extra == 'rag'
|
|
351
|
+
Requires-Dist: unstructured==0.16.20; (python_version < '3.13') and extra == 'rag'
|
|
351
352
|
Requires-Dist: weaviate-client>=4.15.0; extra == 'rag'
|
|
352
353
|
Provides-Extra: research-tools
|
|
353
354
|
Requires-Dist: arxiv2text<0.2,>=0.1.14; extra == 'research-tools'
|
|
@@ -366,7 +367,7 @@ Requires-Dist: pgvector<0.3,>=0.2.4; extra == 'storage'
|
|
|
366
367
|
Requires-Dist: protobuf>=6.0.0; extra == 'storage'
|
|
367
368
|
Requires-Dist: psycopg[binary]<4,>=3.1.18; extra == 'storage'
|
|
368
369
|
Requires-Dist: pymilvus<3,>=2.4.0; extra == 'storage'
|
|
369
|
-
Requires-Dist: pyobvector>=0.1.18; extra == 'storage'
|
|
370
|
+
Requires-Dist: pyobvector>=0.1.18; (python_version < '3.13') and extra == 'storage'
|
|
370
371
|
Requires-Dist: pytidb>=0.0.13; extra == 'storage'
|
|
371
372
|
Requires-Dist: qdrant-client<2,>=1.9.0; extra == 'storage'
|
|
372
373
|
Requires-Dist: redis<6,>=5.0.6; extra == 'storage'
|
|
@@ -71,7 +71,6 @@ from camel.memories import (
|
|
|
71
71
|
MemoryRecord,
|
|
72
72
|
ScoreBasedContextCreator,
|
|
73
73
|
)
|
|
74
|
-
from camel.memories.blocks.chat_history_block import EmptyMemoryWarning
|
|
75
74
|
from camel.messages import (
|
|
76
75
|
BaseMessage,
|
|
77
76
|
FunctionCallingMessage,
|
|
@@ -877,9 +876,7 @@ class ChatAgent(BaseAgent):
|
|
|
877
876
|
[message.to_openai_message(role)]
|
|
878
877
|
)
|
|
879
878
|
|
|
880
|
-
|
|
881
|
-
warnings.filterwarnings("ignore", category=EmptyMemoryWarning)
|
|
882
|
-
_, ctx_tokens = self.memory.get_context()
|
|
879
|
+
_, ctx_tokens = self.memory.get_context()
|
|
883
880
|
|
|
884
881
|
remaining_budget = max(0, token_limit - ctx_tokens)
|
|
885
882
|
|
|
@@ -1077,6 +1074,10 @@ class ChatAgent(BaseAgent):
|
|
|
1077
1074
|
r"""Summarize the agent's current conversation context and persist it
|
|
1078
1075
|
to a markdown file.
|
|
1079
1076
|
|
|
1077
|
+
.. deprecated:: 0.2.80
|
|
1078
|
+
Use :meth:`asummarize` for async/await support and better
|
|
1079
|
+
performance in parallel summarization workflows.
|
|
1080
|
+
|
|
1080
1081
|
Args:
|
|
1081
1082
|
filename (Optional[str]): The base filename (without extension) to
|
|
1082
1083
|
use for the markdown file. Defaults to a timestamped name when
|
|
@@ -1096,8 +1097,18 @@ class ChatAgent(BaseAgent):
|
|
|
1096
1097
|
Dict[str, Any]: A dictionary containing the summary text, file
|
|
1097
1098
|
path, status message, and optionally structured_summary if
|
|
1098
1099
|
response_format was provided.
|
|
1100
|
+
|
|
1101
|
+
See Also:
|
|
1102
|
+
:meth:`asummarize`: Async version for non-blocking LLM calls.
|
|
1099
1103
|
"""
|
|
1100
1104
|
|
|
1105
|
+
warnings.warn(
|
|
1106
|
+
"summarize() is synchronous. Consider using asummarize() "
|
|
1107
|
+
"for async/await support and better performance.",
|
|
1108
|
+
DeprecationWarning,
|
|
1109
|
+
stacklevel=2,
|
|
1110
|
+
)
|
|
1111
|
+
|
|
1101
1112
|
result: Dict[str, Any] = {
|
|
1102
1113
|
"summary": "",
|
|
1103
1114
|
"file_path": None,
|
|
@@ -1247,11 +1258,29 @@ class ChatAgent(BaseAgent):
|
|
|
1247
1258
|
result["status"] = status_message
|
|
1248
1259
|
return result
|
|
1249
1260
|
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1261
|
+
# handle structured output if response_format was provided
|
|
1262
|
+
structured_output = None
|
|
1263
|
+
if response_format and response.msgs[-1].parsed:
|
|
1264
|
+
structured_output = response.msgs[-1].parsed
|
|
1265
|
+
|
|
1266
|
+
# determine filename: use provided filename, or extract from
|
|
1267
|
+
# structured output, or generate timestamp
|
|
1268
|
+
if filename:
|
|
1269
|
+
base_filename = filename
|
|
1270
|
+
elif structured_output and hasattr(
|
|
1271
|
+
structured_output, 'task_title'
|
|
1272
|
+
):
|
|
1273
|
+
# use task_title from structured output for filename
|
|
1274
|
+
task_title = structured_output.task_title
|
|
1275
|
+
clean_title = ContextUtility.sanitize_workflow_filename(
|
|
1276
|
+
task_title
|
|
1277
|
+
)
|
|
1278
|
+
base_filename = (
|
|
1279
|
+
f"{clean_title}_workflow" if clean_title else "workflow"
|
|
1280
|
+
)
|
|
1281
|
+
else:
|
|
1282
|
+
base_filename = f"context_summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}" # noqa: E501
|
|
1283
|
+
|
|
1255
1284
|
base_filename = Path(base_filename).with_suffix("").name
|
|
1256
1285
|
|
|
1257
1286
|
metadata = context_util.get_session_metadata()
|
|
@@ -1262,11 +1291,274 @@ class ChatAgent(BaseAgent):
|
|
|
1262
1291
|
}
|
|
1263
1292
|
)
|
|
1264
1293
|
|
|
1265
|
-
#
|
|
1294
|
+
# convert structured output to custom markdown if present
|
|
1295
|
+
if structured_output:
|
|
1296
|
+
# convert structured output to custom markdown
|
|
1297
|
+
summary_content = context_util.structured_output_to_markdown(
|
|
1298
|
+
structured_data=structured_output, metadata=metadata
|
|
1299
|
+
)
|
|
1300
|
+
|
|
1301
|
+
# Save the markdown (either custom structured or default)
|
|
1302
|
+
save_status = context_util.save_markdown_file(
|
|
1303
|
+
base_filename,
|
|
1304
|
+
summary_content,
|
|
1305
|
+
title="Conversation Summary"
|
|
1306
|
+
if not structured_output
|
|
1307
|
+
else None,
|
|
1308
|
+
metadata=metadata if not structured_output else None,
|
|
1309
|
+
)
|
|
1310
|
+
|
|
1311
|
+
file_path = (
|
|
1312
|
+
context_util.get_working_directory() / f"{base_filename}.md"
|
|
1313
|
+
)
|
|
1314
|
+
|
|
1315
|
+
# Prepare result dictionary
|
|
1316
|
+
result_dict = {
|
|
1317
|
+
"summary": summary_content,
|
|
1318
|
+
"file_path": str(file_path),
|
|
1319
|
+
"status": save_status,
|
|
1320
|
+
"structured_summary": structured_output,
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
result.update(result_dict)
|
|
1324
|
+
logger.info("Conversation summary saved to %s", file_path)
|
|
1325
|
+
return result
|
|
1326
|
+
|
|
1327
|
+
except Exception as exc:
|
|
1328
|
+
error_message = f"Failed to summarize conversation context: {exc}"
|
|
1329
|
+
logger.error(error_message)
|
|
1330
|
+
result["status"] = error_message
|
|
1331
|
+
return result
|
|
1332
|
+
|
|
1333
|
+
async def asummarize(
|
|
1334
|
+
self,
|
|
1335
|
+
filename: Optional[str] = None,
|
|
1336
|
+
summary_prompt: Optional[str] = None,
|
|
1337
|
+
response_format: Optional[Type[BaseModel]] = None,
|
|
1338
|
+
working_directory: Optional[Union[str, Path]] = None,
|
|
1339
|
+
) -> Dict[str, Any]:
|
|
1340
|
+
r"""Asynchronously summarize the agent's current conversation context
|
|
1341
|
+
and persist it to a markdown file.
|
|
1342
|
+
|
|
1343
|
+
This is the async version of summarize() that uses astep() for
|
|
1344
|
+
non-blocking LLM calls, enabling parallel summarization of multiple
|
|
1345
|
+
agents.
|
|
1346
|
+
|
|
1347
|
+
Args:
|
|
1348
|
+
filename (Optional[str]): The base filename (without extension) to
|
|
1349
|
+
use for the markdown file. Defaults to a timestamped name when
|
|
1350
|
+
not provided.
|
|
1351
|
+
summary_prompt (Optional[str]): Custom prompt for the summarizer.
|
|
1352
|
+
When omitted, a default prompt highlighting key decisions,
|
|
1353
|
+
action items, and open questions is used.
|
|
1354
|
+
response_format (Optional[Type[BaseModel]]): A Pydantic model
|
|
1355
|
+
defining the expected structure of the response. If provided,
|
|
1356
|
+
the summary will be generated as structured output and included
|
|
1357
|
+
in the result.
|
|
1358
|
+
working_directory (Optional[str|Path]): Optional directory to save
|
|
1359
|
+
the markdown summary file. If provided, overrides the default
|
|
1360
|
+
directory used by ContextUtility.
|
|
1361
|
+
|
|
1362
|
+
Returns:
|
|
1363
|
+
Dict[str, Any]: A dictionary containing the summary text, file
|
|
1364
|
+
path, status message, and optionally structured_summary if
|
|
1365
|
+
response_format was provided.
|
|
1366
|
+
"""
|
|
1367
|
+
|
|
1368
|
+
result: Dict[str, Any] = {
|
|
1369
|
+
"summary": "",
|
|
1370
|
+
"file_path": None,
|
|
1371
|
+
"status": "",
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
try:
|
|
1375
|
+
# Use external context if set, otherwise create local one
|
|
1376
|
+
if self._context_utility is None:
|
|
1377
|
+
if working_directory is not None:
|
|
1378
|
+
self._context_utility = ContextUtility(
|
|
1379
|
+
working_directory=str(working_directory)
|
|
1380
|
+
)
|
|
1381
|
+
else:
|
|
1382
|
+
self._context_utility = ContextUtility()
|
|
1383
|
+
context_util = self._context_utility
|
|
1384
|
+
|
|
1385
|
+
# Get conversation directly from agent's memory
|
|
1386
|
+
messages, _ = self.memory.get_context()
|
|
1387
|
+
|
|
1388
|
+
if not messages:
|
|
1389
|
+
status_message = (
|
|
1390
|
+
"No conversation context available to summarize."
|
|
1391
|
+
)
|
|
1392
|
+
result["status"] = status_message
|
|
1393
|
+
return result
|
|
1394
|
+
|
|
1395
|
+
# Convert messages to conversation text
|
|
1396
|
+
conversation_lines = []
|
|
1397
|
+
for message in messages:
|
|
1398
|
+
role = message.get('role', 'unknown')
|
|
1399
|
+
content = message.get('content', '')
|
|
1400
|
+
|
|
1401
|
+
# Handle tool call messages (assistant calling tools)
|
|
1402
|
+
tool_calls = message.get('tool_calls')
|
|
1403
|
+
if tool_calls and isinstance(tool_calls, (list, tuple)):
|
|
1404
|
+
for tool_call in tool_calls:
|
|
1405
|
+
# Handle both dict and object formats
|
|
1406
|
+
if isinstance(tool_call, dict):
|
|
1407
|
+
func_name = tool_call.get('function', {}).get(
|
|
1408
|
+
'name', 'unknown_tool'
|
|
1409
|
+
)
|
|
1410
|
+
func_args_str = tool_call.get('function', {}).get(
|
|
1411
|
+
'arguments', '{}'
|
|
1412
|
+
)
|
|
1413
|
+
else:
|
|
1414
|
+
# Handle object format (Pydantic or similar)
|
|
1415
|
+
func_name = getattr(
|
|
1416
|
+
getattr(tool_call, 'function', None),
|
|
1417
|
+
'name',
|
|
1418
|
+
'unknown_tool',
|
|
1419
|
+
)
|
|
1420
|
+
func_args_str = getattr(
|
|
1421
|
+
getattr(tool_call, 'function', None),
|
|
1422
|
+
'arguments',
|
|
1423
|
+
'{}',
|
|
1424
|
+
)
|
|
1425
|
+
|
|
1426
|
+
# Parse and format arguments for readability
|
|
1427
|
+
try:
|
|
1428
|
+
import json
|
|
1429
|
+
|
|
1430
|
+
args_dict = json.loads(func_args_str)
|
|
1431
|
+
args_formatted = ', '.join(
|
|
1432
|
+
f"{k}={v}" for k, v in args_dict.items()
|
|
1433
|
+
)
|
|
1434
|
+
except (json.JSONDecodeError, ValueError, TypeError):
|
|
1435
|
+
args_formatted = func_args_str
|
|
1436
|
+
|
|
1437
|
+
conversation_lines.append(
|
|
1438
|
+
f"[TOOL CALL] {func_name}({args_formatted})"
|
|
1439
|
+
)
|
|
1440
|
+
|
|
1441
|
+
# Handle tool response messages
|
|
1442
|
+
elif role == 'tool':
|
|
1443
|
+
tool_name = message.get('name', 'unknown_tool')
|
|
1444
|
+
if not content:
|
|
1445
|
+
content = str(message.get('content', ''))
|
|
1446
|
+
conversation_lines.append(
|
|
1447
|
+
f"[TOOL RESULT] {tool_name} → {content}"
|
|
1448
|
+
)
|
|
1449
|
+
|
|
1450
|
+
# Handle regular content messages (user/assistant/system)
|
|
1451
|
+
elif content:
|
|
1452
|
+
conversation_lines.append(f"{role}: {content}")
|
|
1453
|
+
|
|
1454
|
+
conversation_text = "\n".join(conversation_lines).strip()
|
|
1455
|
+
|
|
1456
|
+
if not conversation_text:
|
|
1457
|
+
status_message = (
|
|
1458
|
+
"Conversation context is empty; skipping summary."
|
|
1459
|
+
)
|
|
1460
|
+
result["status"] = status_message
|
|
1461
|
+
return result
|
|
1462
|
+
|
|
1463
|
+
if self._context_summary_agent is None:
|
|
1464
|
+
self._context_summary_agent = ChatAgent(
|
|
1465
|
+
system_message=(
|
|
1466
|
+
"You are a helpful assistant that summarizes "
|
|
1467
|
+
"conversations"
|
|
1468
|
+
),
|
|
1469
|
+
model=self.model_backend,
|
|
1470
|
+
agent_id=f"{self.agent_id}_context_summarizer",
|
|
1471
|
+
)
|
|
1472
|
+
else:
|
|
1473
|
+
self._context_summary_agent.reset()
|
|
1474
|
+
|
|
1475
|
+
if summary_prompt:
|
|
1476
|
+
prompt_text = (
|
|
1477
|
+
f"{summary_prompt.rstrip()}\n\n"
|
|
1478
|
+
f"AGENT CONVERSATION TO BE SUMMARIZED:\n"
|
|
1479
|
+
f"{conversation_text}"
|
|
1480
|
+
)
|
|
1481
|
+
else:
|
|
1482
|
+
prompt_text = (
|
|
1483
|
+
"Summarize the context information in concise markdown "
|
|
1484
|
+
"bullet points highlighting key decisions, action items.\n"
|
|
1485
|
+
f"Context information:\n{conversation_text}"
|
|
1486
|
+
)
|
|
1487
|
+
|
|
1488
|
+
try:
|
|
1489
|
+
# Use structured output if response_format is provided
|
|
1490
|
+
if response_format:
|
|
1491
|
+
response = await self._context_summary_agent.astep(
|
|
1492
|
+
prompt_text, response_format=response_format
|
|
1493
|
+
)
|
|
1494
|
+
else:
|
|
1495
|
+
response = await self._context_summary_agent.astep(
|
|
1496
|
+
prompt_text
|
|
1497
|
+
)
|
|
1498
|
+
|
|
1499
|
+
# Handle streaming response
|
|
1500
|
+
if isinstance(response, AsyncStreamingChatAgentResponse):
|
|
1501
|
+
# Collect final response
|
|
1502
|
+
final_response = await response
|
|
1503
|
+
response = final_response
|
|
1504
|
+
|
|
1505
|
+
except Exception as step_exc:
|
|
1506
|
+
error_message = (
|
|
1507
|
+
f"Failed to generate summary using model: {step_exc}"
|
|
1508
|
+
)
|
|
1509
|
+
logger.error(error_message)
|
|
1510
|
+
result["status"] = error_message
|
|
1511
|
+
return result
|
|
1512
|
+
|
|
1513
|
+
if not response.msgs:
|
|
1514
|
+
status_message = (
|
|
1515
|
+
"Failed to generate summary from model response."
|
|
1516
|
+
)
|
|
1517
|
+
result["status"] = status_message
|
|
1518
|
+
return result
|
|
1519
|
+
|
|
1520
|
+
summary_content = response.msgs[-1].content.strip()
|
|
1521
|
+
if not summary_content:
|
|
1522
|
+
status_message = "Generated summary is empty."
|
|
1523
|
+
result["status"] = status_message
|
|
1524
|
+
return result
|
|
1525
|
+
|
|
1526
|
+
# handle structured output if response_format was provided
|
|
1266
1527
|
structured_output = None
|
|
1267
1528
|
if response_format and response.msgs[-1].parsed:
|
|
1268
1529
|
structured_output = response.msgs[-1].parsed
|
|
1269
|
-
|
|
1530
|
+
|
|
1531
|
+
# determine filename: use provided filename, or extract from
|
|
1532
|
+
# structured output, or generate timestamp
|
|
1533
|
+
if filename:
|
|
1534
|
+
base_filename = filename
|
|
1535
|
+
elif structured_output and hasattr(
|
|
1536
|
+
structured_output, 'task_title'
|
|
1537
|
+
):
|
|
1538
|
+
# use task_title from structured output for filename
|
|
1539
|
+
task_title = structured_output.task_title
|
|
1540
|
+
clean_title = ContextUtility.sanitize_workflow_filename(
|
|
1541
|
+
task_title
|
|
1542
|
+
)
|
|
1543
|
+
base_filename = (
|
|
1544
|
+
f"{clean_title}_workflow" if clean_title else "workflow"
|
|
1545
|
+
)
|
|
1546
|
+
else:
|
|
1547
|
+
base_filename = f"context_summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}" # noqa: E501
|
|
1548
|
+
|
|
1549
|
+
base_filename = Path(base_filename).with_suffix("").name
|
|
1550
|
+
|
|
1551
|
+
metadata = context_util.get_session_metadata()
|
|
1552
|
+
metadata.update(
|
|
1553
|
+
{
|
|
1554
|
+
"agent_id": self.agent_id,
|
|
1555
|
+
"message_count": len(messages),
|
|
1556
|
+
}
|
|
1557
|
+
)
|
|
1558
|
+
|
|
1559
|
+
# convert structured output to custom markdown if present
|
|
1560
|
+
if structured_output:
|
|
1561
|
+
# convert structured output to custom markdown
|
|
1270
1562
|
summary_content = context_util.structured_output_to_markdown(
|
|
1271
1563
|
structured_data=structured_output, metadata=metadata
|
|
1272
1564
|
)
|
|
@@ -1347,7 +1639,7 @@ class ChatAgent(BaseAgent):
|
|
|
1347
1639
|
message.
|
|
1348
1640
|
"""
|
|
1349
1641
|
self.memory.clear()
|
|
1350
|
-
#
|
|
1642
|
+
# Write system message to memory if provided
|
|
1351
1643
|
if self.system_message is not None:
|
|
1352
1644
|
self.memory.write_record(
|
|
1353
1645
|
MemoryRecord(
|
|
@@ -62,6 +62,7 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
62
62
|
self._buffer = buffer
|
|
63
63
|
self._data: List[DataPoint] = []
|
|
64
64
|
self._batch_to_save: List[DataPoint] = []
|
|
65
|
+
self._iter_position: int = 0
|
|
65
66
|
|
|
66
67
|
if data_path:
|
|
67
68
|
file_path = Path(data_path)
|
|
@@ -103,9 +104,9 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
103
104
|
r"""Async iterator that yields datapoints dynamically.
|
|
104
105
|
|
|
105
106
|
If a `data_path` was provided during initialization, those datapoints
|
|
106
|
-
are yielded first. When self.
|
|
107
|
-
are generated. Every 100 yields, the batch is appended
|
|
108
|
-
JSONL file or discarded if `cache` is None.
|
|
107
|
+
are yielded first. When self._iter_position reaches the end of _data,
|
|
108
|
+
new datapoints are generated. Every 100 yields, the batch is appended
|
|
109
|
+
to the JSONL file or discarded if `cache` is None.
|
|
109
110
|
|
|
110
111
|
Yields:
|
|
111
112
|
DataPoint: A single datapoint.
|
|
@@ -113,9 +114,10 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
113
114
|
|
|
114
115
|
async def generator():
|
|
115
116
|
while True:
|
|
116
|
-
if
|
|
117
|
+
if self._iter_position >= len(self._data):
|
|
117
118
|
await self.generate_new(self._buffer)
|
|
118
|
-
datapoint = self._data.
|
|
119
|
+
datapoint = self._data[self._iter_position]
|
|
120
|
+
self._iter_position += 1
|
|
119
121
|
yield datapoint
|
|
120
122
|
self._batch_to_save.append(datapoint)
|
|
121
123
|
if len(self._batch_to_save) == 100:
|
|
@@ -132,9 +134,9 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
132
134
|
r"""Synchronous iterator for PyTorch IterableDataset compatibility.
|
|
133
135
|
|
|
134
136
|
If a `data_path` was provided during initialization, those datapoints
|
|
135
|
-
are yielded first. When self.
|
|
136
|
-
are generated. Every 100 yields, the batch is appended
|
|
137
|
-
JSONL file or discarded if `cache` is None.
|
|
137
|
+
are yielded first. When self._iter_position reaches the end of _data,
|
|
138
|
+
new datapoints are generated. Every 100 yields, the batch is appended
|
|
139
|
+
to the JSONL file or discarded if `cache` is None.
|
|
138
140
|
|
|
139
141
|
Yields:
|
|
140
142
|
DataPoint: A single datapoint.
|
|
@@ -150,9 +152,10 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
150
152
|
raise
|
|
151
153
|
|
|
152
154
|
while True:
|
|
153
|
-
if
|
|
155
|
+
if self._iter_position >= len(self._data):
|
|
154
156
|
asyncio.run(self.generate_new(self._buffer))
|
|
155
|
-
datapoint = self._data.
|
|
157
|
+
datapoint = self._data[self._iter_position]
|
|
158
|
+
self._iter_position += 1
|
|
156
159
|
yield datapoint
|
|
157
160
|
self._batch_to_save.append(datapoint)
|
|
158
161
|
if len(self._batch_to_save) == 100:
|
|
@@ -248,6 +251,7 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
248
251
|
|
|
249
252
|
self.save_to_jsonl(file_path)
|
|
250
253
|
self._data = []
|
|
254
|
+
self._iter_position = 0
|
|
251
255
|
logger.info(f"Data flushed to {file_path} and cleared from the memory")
|
|
252
256
|
|
|
253
257
|
def _init_from_jsonl(self, file_path: Path) -> List[Dict[str, Any]]:
|
|
@@ -290,3 +294,28 @@ class BaseGenerator(abc.ABC, IterableDataset):
|
|
|
290
294
|
f"Successfully loaded {len(raw_data)} items from {file_path}"
|
|
291
295
|
)
|
|
292
296
|
return raw_data
|
|
297
|
+
|
|
298
|
+
def __getitem__(self, index: int) -> DataPoint:
|
|
299
|
+
r"""Get a datapoint by index without removing the datapoint from _data.
|
|
300
|
+
|
|
301
|
+
Args:
|
|
302
|
+
index (int): Index of the datapoint to retrieve.
|
|
303
|
+
|
|
304
|
+
Returns:
|
|
305
|
+
DataPoint: The datapoint at the specified index.
|
|
306
|
+
|
|
307
|
+
Raises:
|
|
308
|
+
IndexError: If the index is out of range.
|
|
309
|
+
"""
|
|
310
|
+
if index < 0 or index >= len(self._data):
|
|
311
|
+
raise IndexError(f"Index {index} is out of range")
|
|
312
|
+
|
|
313
|
+
return self._data[index]
|
|
314
|
+
|
|
315
|
+
def __len__(self) -> int:
|
|
316
|
+
r"""Get the number of datapoints in the dataset.
|
|
317
|
+
|
|
318
|
+
Returns:
|
|
319
|
+
int: The number of datapoints.
|
|
320
|
+
"""
|
|
321
|
+
return len(self._data)
|
|
@@ -218,9 +218,34 @@ class SingleStepEnv:
|
|
|
218
218
|
return observations[0] if batch_size == 1 else observations
|
|
219
219
|
|
|
220
220
|
elif isinstance(self.dataset, BaseGenerator):
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
221
|
+
# Generate more data if needed
|
|
222
|
+
if batch_size > len(self.dataset):
|
|
223
|
+
new_datapoints_needed = batch_size - len(self.dataset)
|
|
224
|
+
await self.dataset.generate_new(n=new_datapoints_needed)
|
|
225
|
+
|
|
226
|
+
# Verify that enough data was generated
|
|
227
|
+
if len(self.dataset) < batch_size:
|
|
228
|
+
raise RuntimeError(
|
|
229
|
+
f"Failed to generate enough datapoints. "
|
|
230
|
+
f"Requested {batch_size}, but only "
|
|
231
|
+
f"{len(self.dataset)} available after generation."
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
# Choose sampling strategy based on whether seed is provided
|
|
235
|
+
if seed is not None:
|
|
236
|
+
# Deterministic random sampling when seed is provided
|
|
237
|
+
random_indices = rng.sample(
|
|
238
|
+
range(len(self.dataset)), batch_size
|
|
239
|
+
)
|
|
240
|
+
self._states = [self.dataset[ind] for ind in random_indices]
|
|
241
|
+
else:
|
|
242
|
+
# Sequential sampling when no seed (backward compatible)
|
|
243
|
+
# Use async_sample to maintain sequential behavior
|
|
244
|
+
self._states = [
|
|
245
|
+
await self.dataset.async_sample()
|
|
246
|
+
for _ in range(batch_size)
|
|
247
|
+
]
|
|
248
|
+
|
|
224
249
|
self.current_batch_size = batch_size
|
|
225
250
|
self._states_done = [False] * batch_size
|
|
226
251
|
|
|
@@ -18,7 +18,7 @@ from .agent_memories import (
|
|
|
18
18
|
VectorDBMemory,
|
|
19
19
|
)
|
|
20
20
|
from .base import AgentMemory, BaseContextCreator, MemoryBlock
|
|
21
|
-
from .blocks.chat_history_block import ChatHistoryBlock
|
|
21
|
+
from .blocks.chat_history_block import ChatHistoryBlock
|
|
22
22
|
from .blocks.vectordb_block import VectorDBBlock
|
|
23
23
|
from .context_creators.score_based import ScoreBasedContextCreator
|
|
24
24
|
from .records import ContextRecord, MemoryRecord
|
|
@@ -35,5 +35,4 @@ __all__ = [
|
|
|
35
35
|
'ChatHistoryBlock',
|
|
36
36
|
'VectorDBBlock',
|
|
37
37
|
'LongtermAgentMemory',
|
|
38
|
-
'EmptyMemoryWarning',
|
|
39
38
|
]
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
-
import warnings
|
|
15
14
|
from typing import List, Optional
|
|
16
15
|
|
|
17
16
|
from camel.memories.base import MemoryBlock
|
|
@@ -21,17 +20,6 @@ from camel.storages.key_value_storages.in_memory import InMemoryKeyValueStorage
|
|
|
21
20
|
from camel.types import OpenAIBackendRole
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
class EmptyMemoryWarning(UserWarning):
|
|
25
|
-
"""Warning raised when attempting to access an empty memory.
|
|
26
|
-
|
|
27
|
-
This warning is raised when operations are performed on memory
|
|
28
|
-
that contains no records. It can be safely caught and suppressed
|
|
29
|
-
in contexts where empty memory is expected.
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
pass
|
|
33
|
-
|
|
34
|
-
|
|
35
23
|
class ChatHistoryBlock(MemoryBlock):
|
|
36
24
|
r"""An implementation of the :obj:`MemoryBlock` abstract base class for
|
|
37
25
|
maintaining a record of chat histories.
|
|
@@ -81,11 +69,8 @@ class ChatHistoryBlock(MemoryBlock):
|
|
|
81
69
|
"""
|
|
82
70
|
record_dicts = self.storage.load()
|
|
83
71
|
if len(record_dicts) == 0:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
EmptyMemoryWarning,
|
|
87
|
-
stacklevel=1,
|
|
88
|
-
)
|
|
72
|
+
# Empty memory is a valid state (e.g., during initialization).
|
|
73
|
+
# Users can check if memory is empty by checking the returned list.
|
|
89
74
|
return list()
|
|
90
75
|
|
|
91
76
|
if window_size is not None and window_size >= 0:
|