atomic-agents 2.7.1__tar.gz → 2.7.4__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.
- atomic_agents-2.7.4/.assets/whats-new-v2-thumbnail.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/PKG-INFO +5 -1
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/README.md +4 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/__init__.py +4 -2
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/agents/atomic_agent.py +24 -9
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/chat_history.py +2 -2
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/token_counter.py +5 -2
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/agents/test_atomic_agent.py +69 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/utils/test_token_counter.py +63 -25
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/pyproject.toml +1 -1
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/uv.lock +1 -1
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/architecture_highlevel_overview.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/atomic-cli-tool-menu.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/atomic-cli.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/docs.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/logo.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/video-thumbnail-1.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/video-thumbnail-2.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/video-thumbnail.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/what_is_sent_in_prompt.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.claude/skills/release/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.claude-plugin/marketplace.json +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.coveragerc +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.flake8 +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.github/funding.yml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.github/workflows/code-quality.yml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.github/workflows/docs.yml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.gitignore +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.pre-commit-config.yaml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/LICENSE +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/UPGRADE_DOC.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/agents.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/LICENSE +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/MANIFEST.in +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/agents/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_io_schema.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_prompt.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_resource.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_tool.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/mcp_definition_service.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/mcp_factory.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/schema_transformer.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/system_prompt_generator.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/format_tool_message.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/base/test_base_tool.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_mcp_definition_service.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_mcp_factory.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_schema_transformer.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/context/test_chat_history.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/context/test_system_prompt_generator.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/files/audio_sample.mp3 +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/files/image_sample.jpg +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/files/pdf_sample.pdf +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/utils/test_format_tool_message.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/app.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/color_utils.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/constants.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/atomic_tool_explorer.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/file_explorer.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/main_menu.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/tool_info_screen.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/utils.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/confirmation_modal.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/generic_list.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/gradient_title.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/icon_selection_list.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/menu.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/new_item_input.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/tool_info_display.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/basic_multimodal/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/test_images/nutrition_label_1.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/test_images/nutrition_label_2.jpg +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/basic_pdf_analysis/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/test_media/pdf_sample.pdf +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/agents/choice_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/agents/qa_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/agents/query_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/config.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/context_providers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/tools/searxng_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/tools/webpage_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/mermaid.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/bridge.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/datasets.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/evaluation.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/models.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/presentation/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/presentation/console.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/schemas.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/stage1_dspy.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/stage2_atomic.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/stage3_combined.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/client.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/agents/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/agents/chat_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/config.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/schemas.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/test_api.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/hooks-example/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/hooks-example/hooks_example/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/hooks-example/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_fastapi.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_http.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_sse.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_stdio.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_stdio_async.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/demo_tools.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/prompt.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/resource.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/tool.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/prompts/sample_prompts.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/resources/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/resources/sample_resources.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server_http.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server_sse.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server_stdio.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/prompt_service.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/resource_service.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/tool_service.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/add_numbers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/batch_operations.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/divide_numbers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/multiply_numbers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/subtract_numbers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/nested_multimodal/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/test_images/nutrition_label_1.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/orchestration_agent/orchestrator.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/orchestration_agent/tools/calculator.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/orchestration_agent/tools/searxng_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/orchestrator_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/tool_finder_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/registry/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/registry/tool_registry.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/tools/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/tools/search_tools.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/data_server/data_server/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/data_server/data_server/server.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/data_server/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/math_server/math_server/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/math_server/math_server/server.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/math_server/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/text_server/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/text_server/text_server/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/text_server/text_server/server.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/1_0_basic_chatbot.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/1_1_basic_chatbot_streaming.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/1_2_basic_chatbot_async_streaming.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/2_basic_custom_chatbot.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/3_0_basic_custom_chatbot_with_custom_schema.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/3_1_basic_custom_chatbot_with_custom_schema_streaming.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/5_custom_system_role_for_reasoning_models.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/6_0_asynchronous_processing.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/6_1_asynchronous_processing_streaming.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/.gitignore +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/agents/qa_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/agents/query_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/config.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/context_providers.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/__init__.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/base.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/chroma_db.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/factory.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/qdrant_db.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/agents/query_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/agents/question_answering_agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/tools/searxng_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/youtube_summarizer/agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/youtube_summarizer/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/youtube_summarizer/tools/youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/youtube_to_recipe/agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/youtube_to_recipe/main.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/youtube_to_recipe/tools/youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/guides/tool_structure.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/.coveragerc +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/tests/test_bocha_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/tool/bocha_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/.coveragerc +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/tests/test_calculator.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/tool/calculator.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/.coveragerc +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/pytest.ini +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/tests/test_searxng_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/tool/searxng_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/.coveragerc +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/tests/test_tavily_seach.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/tool/tavily_search.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/tests/conftest.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/tests/test_webpage_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/tool/webpage_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/.coveragerc +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/pyproject.toml +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/tests/test_youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/tool/youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/build_and_deploy.ps1 +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/.claude-plugin/plugin.json +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/CHANGELOG.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/LICENSE +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/README.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/atomic-architect.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/atomic-explorer.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/atomic-reviewer.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/schema-designer.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/commands/atomic-agent.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/commands/atomic-create.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/commands/atomic-tool.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-agents/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-agents/examples/basic-agent.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-context/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-context/examples/rag-context.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-prompts/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-schemas/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-schemas/examples/common-schemas.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-structure/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-tools/SKILL.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-tools/examples/api-tool.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/.nojekyll +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/Makefile +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/_static/logo.png +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/agents.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/context.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/index.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/utils.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/conf.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/contributing.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/examples/index.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/examples/mcp_agent.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/cookbook.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/deployment.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/error-handling.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/faq.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/hooks.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/index.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/logging.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/memory.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/orchestration.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/performance.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/quickstart.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/security.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/testing.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/tools.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/index.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/make.bat +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/greptile.json +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/guides/DEV_GUIDE.md +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/pytest.ini +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/requirements.txt +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/scripts/generate_llms_files.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/scripts/sync_version.py +0 -0
- {atomic_agents-2.7.1 → atomic_agents-2.7.4}/setup.py +0 -0
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomic-agents
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.4
|
|
4
4
|
Summary: A versatile framework for creating and managing intelligent agents.
|
|
5
5
|
Project-URL: Homepage, https://github.com/BrainBlend-AI/atomic-agents
|
|
6
6
|
Project-URL: Repository, https://github.com/BrainBlend-AI/atomic-agents
|
|
@@ -321,6 +321,10 @@ For a complete list of examples, see the [examples directory](/atomic-examples/)
|
|
|
321
321
|
|
|
322
322
|
## 🚀 Version 2.0 Released!
|
|
323
323
|
|
|
324
|
+
[](https://www.youtube.com/watch?v=ro-pM2bPmr0)
|
|
325
|
+
|
|
326
|
+
[**Watch: What's New in Atomic Agents V2.0**](https://www.youtube.com/watch?v=ro-pM2bPmr0)
|
|
327
|
+
|
|
324
328
|
**Atomic Agents v2.0 is here with major improvements!** This release includes breaking changes that significantly improve the developer experience:
|
|
325
329
|
|
|
326
330
|
### Key Changes in v2.0:
|
|
@@ -290,6 +290,10 @@ For a complete list of examples, see the [examples directory](/atomic-examples/)
|
|
|
290
290
|
|
|
291
291
|
## 🚀 Version 2.0 Released!
|
|
292
292
|
|
|
293
|
+
[](https://www.youtube.com/watch?v=ro-pM2bPmr0)
|
|
294
|
+
|
|
295
|
+
[**Watch: What's New in Atomic Agents V2.0**](https://www.youtube.com/watch?v=ro-pM2bPmr0)
|
|
296
|
+
|
|
293
297
|
**Atomic Agents v2.0 is here with major improvements!** This release includes breaking changes that significantly improve the developer experience:
|
|
294
298
|
|
|
295
299
|
### Key Changes in v2.0:
|
|
@@ -6,8 +6,10 @@ Atomic Agents - A modular framework for building AI agents.
|
|
|
6
6
|
from .agents.atomic_agent import AtomicAgent, AgentConfig, BasicChatInputSchema, BasicChatOutputSchema
|
|
7
7
|
from .base import BaseIOSchema, BaseTool, BaseToolConfig
|
|
8
8
|
|
|
9
|
-
# Version info
|
|
10
|
-
|
|
9
|
+
# Version info - read from pyproject.toml via package metadata
|
|
10
|
+
from importlib.metadata import version as _version
|
|
11
|
+
|
|
12
|
+
__version__ = _version("atomic-agents")
|
|
11
13
|
|
|
12
14
|
__all__ = [
|
|
13
15
|
"AtomicAgent",
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/agents/atomic_agent.py
RENAMED
|
@@ -249,6 +249,19 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
249
249
|
self.messages = self._build_system_messages()
|
|
250
250
|
self.messages += self.history.get_history()
|
|
251
251
|
|
|
252
|
+
def _get_completion_kwargs(self) -> Dict[str, Any]:
|
|
253
|
+
"""
|
|
254
|
+
Build kwargs for Instructor completion calls.
|
|
255
|
+
|
|
256
|
+
Instructor defaults `strict=True`, which forces enum fields to receive enum
|
|
257
|
+
instances instead of allowing Pydantic's normal coercion from strings. We
|
|
258
|
+
default to `strict=None` here so the output schema's own Pydantic behavior
|
|
259
|
+
applies unless callers explicitly override it via `model_api_parameters`.
|
|
260
|
+
"""
|
|
261
|
+
completion_kwargs = dict(self.model_api_parameters)
|
|
262
|
+
completion_kwargs.setdefault("strict", None)
|
|
263
|
+
return completion_kwargs
|
|
264
|
+
|
|
252
265
|
def _build_tools_definition(self) -> Optional[List[Dict[str, Any]]]:
|
|
253
266
|
"""
|
|
254
267
|
Build the tools definition that Instructor sends for TOOLS mode.
|
|
@@ -443,7 +456,7 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
443
456
|
messages=self.messages,
|
|
444
457
|
model=self.model,
|
|
445
458
|
response_model=self.output_schema,
|
|
446
|
-
**self.
|
|
459
|
+
**self._get_completion_kwargs(),
|
|
447
460
|
)
|
|
448
461
|
self.history.add_message(self.assistant_role, response)
|
|
449
462
|
self._prepare_messages()
|
|
@@ -477,18 +490,20 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
477
490
|
model=self.model,
|
|
478
491
|
messages=self.messages,
|
|
479
492
|
response_model=self.output_schema,
|
|
480
|
-
**self.
|
|
493
|
+
**self._get_completion_kwargs(),
|
|
481
494
|
stream=True,
|
|
482
495
|
)
|
|
483
496
|
|
|
497
|
+
last_response = None
|
|
484
498
|
for partial_response in response_stream:
|
|
499
|
+
last_response = partial_response
|
|
485
500
|
yield partial_response
|
|
486
501
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
502
|
+
if last_response:
|
|
503
|
+
full_response_content = self.output_schema(**last_response.model_dump())
|
|
504
|
+
self.history.add_message(self.assistant_role, full_response_content)
|
|
505
|
+
self._prepare_messages()
|
|
506
|
+
return full_response_content
|
|
492
507
|
|
|
493
508
|
async def run_async(self, user_input: Optional[InputSchema] = None) -> OutputSchema:
|
|
494
509
|
"""
|
|
@@ -513,7 +528,7 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
513
528
|
self._prepare_messages()
|
|
514
529
|
|
|
515
530
|
response = await self.client.chat.completions.create(
|
|
516
|
-
model=self.model, messages=self.messages, response_model=self.output_schema, **self.
|
|
531
|
+
model=self.model, messages=self.messages, response_model=self.output_schema, **self._get_completion_kwargs()
|
|
517
532
|
)
|
|
518
533
|
|
|
519
534
|
self.history.add_message(self.assistant_role, response)
|
|
@@ -542,7 +557,7 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
542
557
|
model=self.model,
|
|
543
558
|
messages=self.messages,
|
|
544
559
|
response_model=self.output_schema,
|
|
545
|
-
**self.
|
|
560
|
+
**self._get_completion_kwargs(),
|
|
546
561
|
stream=True,
|
|
547
562
|
)
|
|
548
563
|
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/chat_history.py
RENAMED
|
@@ -204,12 +204,12 @@ class ChatHistory:
|
|
|
204
204
|
"""
|
|
205
205
|
return self.current_turn_id
|
|
206
206
|
|
|
207
|
-
def delete_turn_id(self, turn_id:
|
|
207
|
+
def delete_turn_id(self, turn_id: str):
|
|
208
208
|
"""
|
|
209
209
|
Delete messages from the history by its turn ID.
|
|
210
210
|
|
|
211
211
|
Args:
|
|
212
|
-
turn_id (
|
|
212
|
+
turn_id (str): The turn ID of the message to delete.
|
|
213
213
|
|
|
214
214
|
Returns:
|
|
215
215
|
str: A success message with the deleted turn ID.
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/token_counter.py
RENAMED
|
@@ -147,12 +147,15 @@ class TokenCounter:
|
|
|
147
147
|
raise TypeError(f"model must be a string, got {type(model).__name__}")
|
|
148
148
|
|
|
149
149
|
try:
|
|
150
|
-
from litellm import
|
|
150
|
+
from litellm import get_model_info
|
|
151
151
|
except ImportError as e:
|
|
152
152
|
raise ImportError("litellm is required for token counting. " "Install it with: pip install litellm") from e
|
|
153
153
|
|
|
154
154
|
try:
|
|
155
|
-
|
|
155
|
+
info = get_model_info(model)
|
|
156
|
+
# Use max_input_tokens (context window) not max_tokens (output limit)
|
|
157
|
+
max_input = info.get("max_input_tokens")
|
|
158
|
+
return max_input if max_input is not None else info.get("max_tokens")
|
|
156
159
|
except Exception as e:
|
|
157
160
|
logger.warning(f"Could not determine max tokens for model '{model}': {e}")
|
|
158
161
|
return None
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from unittest.mock import Mock, call, patch
|
|
3
|
+
from enum import Enum
|
|
3
4
|
from pydantic import BaseModel, Field
|
|
5
|
+
from pydantic import ValidationError
|
|
4
6
|
import instructor
|
|
5
7
|
from atomic_agents import (
|
|
6
8
|
BaseIOSchema,
|
|
@@ -148,6 +150,73 @@ def test_initialization_without_max_tokens(mock_instructor, mock_history, mock_s
|
|
|
148
150
|
assert agent.model_api_parameters["max_tokens"] == 1024
|
|
149
151
|
|
|
150
152
|
|
|
153
|
+
def test_run_uses_pydantic_default_strictness_for_enum_output(mock_history, mock_system_prompt_generator):
|
|
154
|
+
class Topic(Enum):
|
|
155
|
+
FOOD = "food"
|
|
156
|
+
OTHER = "other"
|
|
157
|
+
|
|
158
|
+
class EnumOutputSchema(BaseIOSchema):
|
|
159
|
+
"""Output schema with an enum field for validation tests."""
|
|
160
|
+
|
|
161
|
+
topic: Topic = Field(...)
|
|
162
|
+
|
|
163
|
+
enum_instructor = Mock(spec=instructor.Instructor)
|
|
164
|
+
enum_instructor.chat = Mock()
|
|
165
|
+
enum_instructor.chat.completions = Mock()
|
|
166
|
+
|
|
167
|
+
def mock_create(*args, **kwargs):
|
|
168
|
+
return kwargs["response_model"].model_validate({"topic": "food"}, strict=kwargs["strict"])
|
|
169
|
+
|
|
170
|
+
enum_instructor.chat.completions.create.side_effect = mock_create
|
|
171
|
+
|
|
172
|
+
config = AgentConfig(
|
|
173
|
+
client=enum_instructor,
|
|
174
|
+
model="gpt-5-mini",
|
|
175
|
+
history=mock_history,
|
|
176
|
+
system_prompt_generator=mock_system_prompt_generator,
|
|
177
|
+
)
|
|
178
|
+
agent = AtomicAgent[BasicChatInputSchema, EnumOutputSchema](config)
|
|
179
|
+
|
|
180
|
+
result = agent.run()
|
|
181
|
+
|
|
182
|
+
assert result.topic is Topic.FOOD
|
|
183
|
+
assert enum_instructor.chat.completions.create.call_args.kwargs["strict"] is None
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def test_run_respects_explicit_strict_override_for_enum_output(mock_history, mock_system_prompt_generator):
|
|
187
|
+
class Topic(Enum):
|
|
188
|
+
FOOD = "food"
|
|
189
|
+
OTHER = "other"
|
|
190
|
+
|
|
191
|
+
class EnumOutputSchema(BaseIOSchema):
|
|
192
|
+
"""Output schema with an enum field for validation tests."""
|
|
193
|
+
|
|
194
|
+
topic: Topic = Field(...)
|
|
195
|
+
|
|
196
|
+
enum_instructor = Mock(spec=instructor.Instructor)
|
|
197
|
+
enum_instructor.chat = Mock()
|
|
198
|
+
enum_instructor.chat.completions = Mock()
|
|
199
|
+
|
|
200
|
+
def mock_create(*args, **kwargs):
|
|
201
|
+
return kwargs["response_model"].model_validate({"topic": "food"}, strict=kwargs["strict"])
|
|
202
|
+
|
|
203
|
+
enum_instructor.chat.completions.create.side_effect = mock_create
|
|
204
|
+
|
|
205
|
+
config = AgentConfig(
|
|
206
|
+
client=enum_instructor,
|
|
207
|
+
model="gpt-5-mini",
|
|
208
|
+
history=mock_history,
|
|
209
|
+
system_prompt_generator=mock_system_prompt_generator,
|
|
210
|
+
model_api_parameters={"strict": True},
|
|
211
|
+
)
|
|
212
|
+
agent = AtomicAgent[BasicChatInputSchema, EnumOutputSchema](config)
|
|
213
|
+
|
|
214
|
+
with pytest.raises(ValidationError):
|
|
215
|
+
agent.run()
|
|
216
|
+
|
|
217
|
+
assert enum_instructor.chat.completions.create.call_args.kwargs["strict"] is True
|
|
218
|
+
|
|
219
|
+
|
|
151
220
|
def test_initialization_system_role_equals_developer(mock_instructor, mock_history, mock_system_prompt_generator):
|
|
152
221
|
config = AgentConfig(
|
|
153
222
|
client=mock_instructor,
|
|
@@ -114,19 +114,57 @@ class TestTokenCounter:
|
|
|
114
114
|
# Should wrap text in a message
|
|
115
115
|
mock_token_counter.assert_called_once_with(model="gpt-4", messages=[{"role": "user", "content": "Hello world"}])
|
|
116
116
|
|
|
117
|
-
@patch("litellm.
|
|
118
|
-
def test_get_max_tokens(self,
|
|
119
|
-
|
|
117
|
+
@patch("litellm.get_model_info")
|
|
118
|
+
def test_get_max_tokens(self, mock_get_model_info):
|
|
119
|
+
mock_get_model_info.return_value = {"max_input_tokens": 128000, "max_tokens": 16384}
|
|
120
|
+
|
|
121
|
+
counter = TokenCounter()
|
|
122
|
+
result = counter.get_max_tokens("gpt-4")
|
|
123
|
+
|
|
124
|
+
assert result == 128000
|
|
125
|
+
mock_get_model_info.assert_called_once_with("gpt-4")
|
|
126
|
+
|
|
127
|
+
@patch("litellm.get_model_info")
|
|
128
|
+
def test_get_max_tokens_falls_back_to_max_tokens(self, mock_get_model_info):
|
|
129
|
+
mock_get_model_info.return_value = {"max_tokens": 8192}
|
|
130
|
+
|
|
131
|
+
counter = TokenCounter()
|
|
132
|
+
result = counter.get_max_tokens("gpt-4")
|
|
133
|
+
|
|
134
|
+
assert result == 8192
|
|
135
|
+
mock_get_model_info.assert_called_once_with("gpt-4")
|
|
136
|
+
|
|
137
|
+
@patch("litellm.get_model_info")
|
|
138
|
+
def test_get_max_tokens_falls_back_when_max_input_tokens_is_none(self, mock_get_model_info):
|
|
139
|
+
mock_get_model_info.return_value = {"max_input_tokens": None, "max_tokens": 8192}
|
|
120
140
|
|
|
121
141
|
counter = TokenCounter()
|
|
122
142
|
result = counter.get_max_tokens("gpt-4")
|
|
123
143
|
|
|
124
144
|
assert result == 8192
|
|
125
|
-
mock_get_max_tokens.assert_called_once_with("gpt-4")
|
|
126
145
|
|
|
127
|
-
@patch("litellm.
|
|
128
|
-
def
|
|
129
|
-
|
|
146
|
+
@patch("litellm.get_model_info")
|
|
147
|
+
def test_get_max_tokens_zero_input_tokens_returns_zero(self, mock_get_model_info):
|
|
148
|
+
"""Ensure max_input_tokens=0 is not confused with 'missing'."""
|
|
149
|
+
mock_get_model_info.return_value = {"max_input_tokens": 0, "max_tokens": 4096}
|
|
150
|
+
|
|
151
|
+
counter = TokenCounter()
|
|
152
|
+
result = counter.get_max_tokens("custom-model")
|
|
153
|
+
|
|
154
|
+
assert result == 0
|
|
155
|
+
|
|
156
|
+
@patch("litellm.get_model_info")
|
|
157
|
+
def test_get_max_tokens_both_keys_missing(self, mock_get_model_info):
|
|
158
|
+
mock_get_model_info.return_value = {"model_name": "some-model"}
|
|
159
|
+
|
|
160
|
+
counter = TokenCounter()
|
|
161
|
+
result = counter.get_max_tokens("some-model")
|
|
162
|
+
|
|
163
|
+
assert result is None
|
|
164
|
+
|
|
165
|
+
@patch("litellm.get_model_info")
|
|
166
|
+
def test_get_max_tokens_unknown_model(self, mock_get_model_info):
|
|
167
|
+
mock_get_model_info.side_effect = Exception("Unknown model")
|
|
130
168
|
|
|
131
169
|
counter = TokenCounter()
|
|
132
170
|
result = counter.get_max_tokens("unknown-model")
|
|
@@ -162,11 +200,11 @@ class TestTokenCounter:
|
|
|
162
200
|
|
|
163
201
|
assert "model is required" in str(exc_info.value)
|
|
164
202
|
|
|
165
|
-
@patch("litellm.
|
|
203
|
+
@patch("litellm.get_model_info")
|
|
166
204
|
@patch("litellm.token_counter")
|
|
167
|
-
def test_count_context(self, mock_token_counter,
|
|
205
|
+
def test_count_context(self, mock_token_counter, mock_get_model_info):
|
|
168
206
|
mock_token_counter.side_effect = [30, 70] # system, then history
|
|
169
|
-
|
|
207
|
+
mock_get_model_info.return_value = {"max_input_tokens": 8192, "max_tokens": 4096}
|
|
170
208
|
|
|
171
209
|
counter = TokenCounter()
|
|
172
210
|
result = counter.count_context(
|
|
@@ -183,12 +221,12 @@ class TestTokenCounter:
|
|
|
183
221
|
assert result.max_tokens == 8192
|
|
184
222
|
assert result.utilization == pytest.approx(100 / 8192)
|
|
185
223
|
|
|
186
|
-
@patch("litellm.
|
|
224
|
+
@patch("litellm.get_model_info")
|
|
187
225
|
@patch("litellm.token_counter")
|
|
188
|
-
def test_count_context_with_tools(self, mock_token_counter,
|
|
226
|
+
def test_count_context_with_tools(self, mock_token_counter, mock_get_model_info):
|
|
189
227
|
# system=30, history=70, empty_with_tools=60, empty_without_tools=10 -> tools=50
|
|
190
228
|
mock_token_counter.side_effect = [30, 70, 60, 10]
|
|
191
|
-
|
|
229
|
+
mock_get_model_info.return_value = {"max_input_tokens": 8192, "max_tokens": 4096}
|
|
192
230
|
|
|
193
231
|
counter = TokenCounter()
|
|
194
232
|
tools = [{"type": "function", "function": {"name": "test_fn"}}]
|
|
@@ -205,11 +243,11 @@ class TestTokenCounter:
|
|
|
205
243
|
assert result.total == 150 # 30 + 70 + 50
|
|
206
244
|
assert result.model == "gpt-4"
|
|
207
245
|
|
|
208
|
-
@patch("litellm.
|
|
246
|
+
@patch("litellm.get_model_info")
|
|
209
247
|
@patch("litellm.token_counter")
|
|
210
|
-
def test_count_context_empty_system(self, mock_token_counter,
|
|
248
|
+
def test_count_context_empty_system(self, mock_token_counter, mock_get_model_info):
|
|
211
249
|
mock_token_counter.return_value = 50
|
|
212
|
-
|
|
250
|
+
mock_get_model_info.return_value = {"max_input_tokens": 4096, "max_tokens": 2048}
|
|
213
251
|
|
|
214
252
|
counter = TokenCounter()
|
|
215
253
|
result = counter.count_context(
|
|
@@ -224,11 +262,11 @@ class TestTokenCounter:
|
|
|
224
262
|
assert result.model == "gpt-3.5-turbo"
|
|
225
263
|
assert result.max_tokens == 4096
|
|
226
264
|
|
|
227
|
-
@patch("litellm.
|
|
265
|
+
@patch("litellm.get_model_info")
|
|
228
266
|
@patch("litellm.token_counter")
|
|
229
|
-
def test_count_context_no_max_tokens(self, mock_token_counter,
|
|
267
|
+
def test_count_context_no_max_tokens(self, mock_token_counter, mock_get_model_info):
|
|
230
268
|
mock_token_counter.side_effect = [20, 30]
|
|
231
|
-
|
|
269
|
+
mock_get_model_info.side_effect = Exception("Unknown model")
|
|
232
270
|
|
|
233
271
|
counter = TokenCounter()
|
|
234
272
|
result = counter.count_context(
|
|
@@ -263,12 +301,12 @@ class TestTokenCounter:
|
|
|
263
301
|
# Verify all models were called
|
|
264
302
|
assert mock_token_counter.call_count == len(models)
|
|
265
303
|
|
|
266
|
-
@patch("litellm.
|
|
304
|
+
@patch("litellm.get_model_info")
|
|
267
305
|
@patch("litellm.token_counter")
|
|
268
|
-
def test_count_context_division_by_zero_prevention(self, mock_token_counter,
|
|
306
|
+
def test_count_context_division_by_zero_prevention(self, mock_token_counter, mock_get_model_info):
|
|
269
307
|
"""Test that division by zero is prevented when max_tokens is 0."""
|
|
270
308
|
mock_token_counter.side_effect = [20, 30]
|
|
271
|
-
|
|
309
|
+
mock_get_model_info.return_value = {"max_input_tokens": 0, "max_tokens": 0} # Edge case
|
|
272
310
|
|
|
273
311
|
counter = TokenCounter()
|
|
274
312
|
result = counter.count_context(
|
|
@@ -281,12 +319,12 @@ class TestTokenCounter:
|
|
|
281
319
|
assert result.max_tokens == 0
|
|
282
320
|
assert result.utilization is None # Should be None, not raise ZeroDivisionError
|
|
283
321
|
|
|
284
|
-
@patch("litellm.
|
|
322
|
+
@patch("litellm.get_model_info")
|
|
285
323
|
@patch("litellm.token_counter")
|
|
286
|
-
def test_count_context_empty_history(self, mock_token_counter,
|
|
324
|
+
def test_count_context_empty_history(self, mock_token_counter, mock_get_model_info):
|
|
287
325
|
"""Test counting context with empty history messages."""
|
|
288
326
|
mock_token_counter.return_value = 30 # Only system
|
|
289
|
-
|
|
327
|
+
mock_get_model_info.return_value = {"max_input_tokens": 4096, "max_tokens": 2048}
|
|
290
328
|
|
|
291
329
|
counter = TokenCounter()
|
|
292
330
|
result = counter.count_context(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_io_schema.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_resource.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/__init__.py
RENAMED
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/format_tool_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_mcp_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/context/test_chat_history.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/utils/test_format_tool_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/color_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/main_menu.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/menu.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/main.py
RENAMED
|
File without changes
|