atomic-agents 2.7.4__tar.gz → 2.8.0__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 → atomic_agents-2.8.0}/.claude-plugin/marketplace.json +2 -2
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/PKG-INFO +19 -5
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/README.md +17 -3
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/agents.md +8 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/agents/atomic_agent.py +135 -9
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/connectors/mcp/mcp_factory.py +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/context/__init__.py +2 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/context/chat_history.py +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/context/system_prompt_generator.py +14 -2
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/agents/test_atomic_agent.py +329 -3
- atomic_agents-2.8.0/atomic-agents/tests/agents/test_minimax_integration.py +79 -0
- atomic_agents-2.8.0/atomic-agents/tests/agents/test_minimax_provider.py +197 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/context/test_chat_history.py +14 -14
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/context/test_system_prompt_generator.py +48 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-multimodal/pyproject.toml +1 -4
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-pdf-analysis/basic_pdf_analysis/main.py +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-pdf-analysis/pyproject.toml +1 -3
- atomic_agents-2.8.0/atomic-examples/deep-research/README.md +95 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/__main__.py +19 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/agents/decider_agent.py +73 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/agents/extractor_agent.py +75 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/agents/planner_agent.py +82 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/agents/qa_agent.py +77 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/agents/reflector_agent.py +85 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/agents/writer_agent.py +89 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/config.py +66 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/context_providers.py +63 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/main.py +396 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/deep_research/state.py +82 -0
- atomic_agents-2.8.0/atomic-examples/deep-research/mermaid.md +46 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/hooks-example/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/example_client/main_http.py +3 -3
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/example_client/main_sse.py +3 -3
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/example_client/main_stdio.py +3 -3
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/example_client/main_stdio_async.py +3 -3
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/nested-multimodal/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/orchestration-agent/orchestration_agent/orchestrator.py +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/orchestration-agent/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/orchestrator_agent.py +3 -3
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/pyproject.toml +1 -4
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py +25 -14
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/web-search-agent/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-summarizer/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-to-recipe/pyproject.toml +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/README.md +9 -1
- atomic_agents-2.8.0/atomic-forge/atomic_tools/tavily_search/pyproject.toml +16 -0
- atomic_agents-2.8.0/atomic-forge/atomic_tools/tavily_search/requirements.txt +2 -0
- atomic_agents-2.8.0/atomic-forge/atomic_tools/tavily_search/tests/test_tavily_search.py +136 -0
- atomic_agents-2.8.0/atomic-forge/atomic_tools/tavily_search/tool/__init__.py +13 -0
- atomic_agents-2.8.0/atomic-forge/atomic_tools/tavily_search/tool/tavily_search.py +183 -0
- atomic_agents-2.8.0/atomic-forge/tools/arxiv_search/README.md +50 -0
- atomic_agents-2.8.0/atomic-forge/tools/arxiv_search/pyproject.toml +32 -0
- atomic_agents-2.8.0/atomic-forge/tools/arxiv_search/requirements.txt +3 -0
- atomic_agents-2.8.0/atomic-forge/tools/arxiv_search/tests/test_arxiv_search.py +137 -0
- atomic_agents-2.8.0/atomic-forge/tools/arxiv_search/tool/arxiv_search.py +255 -0
- atomic_agents-2.8.0/atomic-forge/tools/datetime_tool/README.md +63 -0
- atomic_agents-2.8.0/atomic-forge/tools/datetime_tool/pyproject.toml +31 -0
- atomic_agents-2.8.0/atomic-forge/tools/datetime_tool/requirements.txt +3 -0
- atomic_agents-2.8.0/atomic-forge/tools/datetime_tool/tests/test_datetime_tool.py +135 -0
- atomic_agents-2.8.0/atomic-forge/tools/datetime_tool/tool/datetime_tool.py +257 -0
- atomic_agents-2.8.0/atomic-forge/tools/fia_signals/README.md +55 -0
- atomic_agents-2.8.0/atomic-forge/tools/fia_signals/pyproject.toml +35 -0
- atomic_agents-2.8.0/atomic-forge/tools/fia_signals/requirements.txt +3 -0
- atomic_agents-2.8.0/atomic-forge/tools/fia_signals/tests/__init__.py +1 -0
- atomic_agents-2.8.0/atomic-forge/tools/fia_signals/tests/test_fia_signals.py +136 -0
- atomic_agents-2.8.0/atomic-forge/tools/fia_signals/tool/fia_signals.py +225 -0
- atomic_agents-2.8.0/atomic-forge/tools/hackernews_search/.coveragerc +8 -0
- atomic_agents-2.8.0/atomic-forge/tools/hackernews_search/README.md +50 -0
- atomic_agents-2.8.0/atomic-forge/tools/hackernews_search/pyproject.toml +32 -0
- atomic_agents-2.8.0/atomic-forge/tools/hackernews_search/requirements.txt +3 -0
- atomic_agents-2.8.0/atomic-forge/tools/hackernews_search/tests/test_hackernews_search.py +116 -0
- atomic_agents-2.8.0/atomic-forge/tools/hackernews_search/tool/hackernews_search.py +208 -0
- atomic_agents-2.8.0/atomic-forge/tools/pdf_reader/.coveragerc +8 -0
- atomic_agents-2.8.0/atomic-forge/tools/pdf_reader/README.md +60 -0
- atomic_agents-2.8.0/atomic-forge/tools/pdf_reader/pyproject.toml +33 -0
- atomic_agents-2.8.0/atomic-forge/tools/pdf_reader/requirements.txt +4 -0
- atomic_agents-2.8.0/atomic-forge/tools/pdf_reader/tests/test_pdf_reader.py +164 -0
- atomic_agents-2.8.0/atomic-forge/tools/pdf_reader/tool/pdf_reader.py +258 -0
- atomic_agents-2.8.0/atomic-forge/tools/searxng_search/.coveragerc +8 -0
- atomic_agents-2.8.0/atomic-forge/tools/tavily_search/.coveragerc +8 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/tavily_search/tool/tavily_search.py +6 -4
- atomic_agents-2.8.0/atomic-forge/tools/weather/.coveragerc +8 -0
- atomic_agents-2.8.0/atomic-forge/tools/weather/README.md +57 -0
- atomic_agents-2.8.0/atomic-forge/tools/weather/pyproject.toml +31 -0
- atomic_agents-2.8.0/atomic-forge/tools/weather/requirements.txt +3 -0
- atomic_agents-2.8.0/atomic-forge/tools/weather/tests/test_weather.py +181 -0
- atomic_agents-2.8.0/atomic-forge/tools/weather/tool/weather.py +402 -0
- atomic_agents-2.8.0/atomic-forge/tools/wikipedia_search/.coveragerc +8 -0
- atomic_agents-2.8.0/atomic-forge/tools/wikipedia_search/README.md +48 -0
- atomic_agents-2.8.0/atomic-forge/tools/wikipedia_search/pyproject.toml +32 -0
- atomic_agents-2.8.0/atomic-forge/tools/wikipedia_search/requirements.txt +3 -0
- atomic_agents-2.8.0/atomic-forge/tools/wikipedia_search/tests/test_wikipedia_search.py +137 -0
- atomic_agents-2.8.0/atomic-forge/tools/wikipedia_search/tool/wikipedia_search.py +234 -0
- atomic_agents-2.8.0/atomic-forge/tools/youtube_transcript_scraper/.coveragerc +8 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/.claude-plugin/plugin.json +12 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/CHANGELOG.md +72 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/README.md +110 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/agents/atomic-explorer.md +134 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/agents/atomic-reviewer.md +171 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/create-atomic-agent/SKILL.md +160 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/create-atomic-context-provider/SKILL.md +207 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/create-atomic-schema/SKILL.md +137 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/create-atomic-tool/SKILL.md +200 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/SKILL.md +150 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/agents.md +138 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/context-providers.md +190 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/hooks.md +174 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/memory.md +163 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/orchestration.md +154 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/project-structure.md +188 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/prompts.md +82 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/providers.md +176 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/schemas.md +180 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/testing.md +150 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/framework/references/tools.md +205 -0
- atomic_agents-2.8.0/claude-plugin/atomic-agents/skills/new-app/SKILL.md +132 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/api/context.md +48 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/cookbook.md +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/faq.md +6 -6
- atomic_agents-2.8.0/docs/guides/tools.md +292 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/index.md +6 -2
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/pyproject.toml +2 -2
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/requirements.txt +1 -1
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/uv.lock +308 -101
- atomic_agents-2.7.4/atomic-examples/deep-research/README.md +0 -76
- atomic_agents-2.7.4/atomic-examples/deep-research/deep_research/agents/choice_agent.py +0 -58
- atomic_agents-2.7.4/atomic-examples/deep-research/deep_research/agents/qa_agent.py +0 -63
- atomic_agents-2.7.4/atomic-examples/deep-research/deep_research/agents/query_agent.py +0 -42
- atomic_agents-2.7.4/atomic-examples/deep-research/deep_research/config.py +0 -39
- atomic_agents-2.7.4/atomic-examples/deep-research/deep_research/context_providers.py +0 -33
- atomic_agents-2.7.4/atomic-examples/deep-research/deep_research/main.py +0 -211
- atomic_agents-2.7.4/atomic-examples/deep-research/mermaid.md +0 -68
- atomic_agents-2.7.4/claude-plugin/atomic-agents/.claude-plugin/plugin.json +0 -23
- atomic_agents-2.7.4/claude-plugin/atomic-agents/CHANGELOG.md +0 -48
- atomic_agents-2.7.4/claude-plugin/atomic-agents/README.md +0 -251
- atomic_agents-2.7.4/claude-plugin/atomic-agents/agents/atomic-architect.md +0 -275
- atomic_agents-2.7.4/claude-plugin/atomic-agents/agents/atomic-explorer.md +0 -175
- atomic_agents-2.7.4/claude-plugin/atomic-agents/agents/atomic-reviewer.md +0 -220
- atomic_agents-2.7.4/claude-plugin/atomic-agents/agents/schema-designer.md +0 -291
- atomic_agents-2.7.4/claude-plugin/atomic-agents/commands/atomic-agent.md +0 -136
- atomic_agents-2.7.4/claude-plugin/atomic-agents/commands/atomic-create.md +0 -264
- atomic_agents-2.7.4/claude-plugin/atomic-agents/commands/atomic-tool.md +0 -244
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-agents/SKILL.md +0 -227
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-agents/examples/basic-agent.py +0 -132
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-context/SKILL.md +0 -234
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-context/examples/rag-context.py +0 -212
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-prompts/SKILL.md +0 -315
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-schemas/SKILL.md +0 -189
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-schemas/examples/common-schemas.py +0 -232
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-structure/SKILL.md +0 -311
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-tools/SKILL.md +0 -221
- atomic_agents-2.7.4/claude-plugin/atomic-agents/skills/atomic-tools/examples/api-tool.py +0 -222
- atomic_agents-2.7.4/docs/guides/tools.md +0 -165
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/architecture_highlevel_overview.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/atomic-cli-tool-menu.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/atomic-cli.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/docs.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/logo.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/video-thumbnail-1.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/video-thumbnail-2.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/video-thumbnail.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/what_is_sent_in_prompt.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.assets/whats-new-v2-thumbnail.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.claude/skills/release/SKILL.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.coveragerc +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.flake8 +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.github/funding.yml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.github/workflows/code-quality.yml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.github/workflows/docs.yml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.gitignore +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/.pre-commit-config.yaml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/LICENSE +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/UPGRADE_DOC.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/LICENSE +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/MANIFEST.in +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/agents/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/base/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/base/base_io_schema.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/base/base_prompt.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/base/base_resource.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/base/base_tool.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/connectors/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/connectors/mcp/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/connectors/mcp/mcp_definition_service.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/connectors/mcp/schema_transformer.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/utils/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/utils/format_tool_message.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/utils/token_counter.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/base/test_base_tool.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/connectors/mcp/test_mcp_definition_service.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/connectors/mcp/test_mcp_factory.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/connectors/mcp/test_schema_transformer.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/files/audio_sample.mp3 +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/files/image_sample.jpg +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/files/pdf_sample.pdf +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/utils/test_format_tool_message.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/tests/utils/test_token_counter.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/app.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/color_utils.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/constants.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/screens/atomic_tool_explorer.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/screens/file_explorer.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/screens/main_menu.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/screens/tool_info_screen.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/utils.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/confirmation_modal.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/generic_list.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/gradient_title.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/icon_selection_list.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/menu.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/new_item_input.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-assembler/atomic_assembler/widgets/tool_info_display.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-multimodal/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-multimodal/basic_multimodal/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-multimodal/test_images/nutrition_label_1.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-multimodal/test_images/nutrition_label_2.jpg +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-pdf-analysis/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/basic-pdf-analysis/test_media/pdf_sample.pdf +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/deep-research/deep_research/tools/searxng_search.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/deep-research/deep_research/tools/webpage_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/deep-research/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/bridge.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/domain/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/domain/datasets.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/domain/evaluation.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/domain/models.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/presentation/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/presentation/console.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/schemas.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/stages/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/stages/stage1_dspy.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/stages/stage2_atomic.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/dspy_integration/stages/stage3_combined.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/dspy-integration/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/client.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/lib/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/lib/agents/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/lib/agents/chat_agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/lib/config.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/lib/schemas.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/fastapi_memory/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/fastapi-memory/test_api.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/hooks-example/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/hooks-example/hooks_example/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/example_client/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/example_client/main_fastapi.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-client/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/demo_tools.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/prompt.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/resource.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/interfaces/tool.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/prompts/sample_prompts.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/resources/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/resources/sample_resources.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server_http.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server_sse.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server_stdio.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/prompt_service.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/resource_service.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/services/tool_service.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/add_numbers.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/batch_operations.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/divide_numbers.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/multiply_numbers.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/tools/subtract_numbers.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/mcp-agent/example-mcp-server/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/nested-multimodal/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/nested-multimodal/nested_multimodal/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/nested-multimodal/test_images/nutrition_label_1.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/orchestration-agent/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/orchestration-agent/orchestration_agent/tools/calculator.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/orchestration-agent/orchestration_agent/tools/searxng_search.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/tool_finder_agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/registry/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/registry/tool_registry.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/tools/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/progressive_disclosure/tools/search_tools.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/data_server/data_server/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/data_server/data_server/server.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/data_server/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/math_server/math_server/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/math_server/math_server/server.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/math_server/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/text_server/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/text_server/text_server/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/progressive-disclosure/servers/text_server/text_server/server.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/1_0_basic_chatbot.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/1_1_basic_chatbot_streaming.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/1_2_basic_chatbot_async_streaming.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/2_basic_custom_chatbot.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/3_0_basic_custom_chatbot_with_custom_schema.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/3_1_basic_custom_chatbot_with_custom_schema_streaming.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/5_custom_system_role_for_reasoning_models.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/6_0_asynchronous_processing.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/quickstart/quickstart/6_1_asynchronous_processing_streaming.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/.gitignore +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/agents/qa_agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/agents/query_agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/config.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/context_providers.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/services/__init__.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/services/base.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/services/chroma_db.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/services/factory.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/rag-chatbot/rag_chatbot/services/qdrant_db.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/web-search-agent/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/web-search-agent/web_search_agent/agents/query_agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/web-search-agent/web_search_agent/agents/question_answering_agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/web-search-agent/web_search_agent/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/web-search-agent/web_search_agent/tools/searxng_search.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-summarizer/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-summarizer/youtube_summarizer/agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-summarizer/youtube_summarizer/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-summarizer/youtube_summarizer/tools/youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-to-recipe/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-to-recipe/youtube_to_recipe/agent.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-to-recipe/youtube_to_recipe/main.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-examples/youtube-to-recipe/youtube_to_recipe/tools/youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/guides/tool_structure.md +0 -0
- {atomic_agents-2.7.4/atomic-forge/tools/bocha_search → atomic_agents-2.8.0/atomic-forge/tools/arxiv_search}/.coveragerc +0 -0
- {atomic_agents-2.7.4/atomic-forge/tools/calculator → atomic_agents-2.8.0/atomic-forge/tools/bocha_search}/.coveragerc +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/bocha_search/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/bocha_search/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/bocha_search/requirements.txt +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/bocha_search/tests/test_bocha_search.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/bocha_search/tool/bocha_search.py +0 -0
- {atomic_agents-2.7.4/atomic-forge/tools/searxng_search → atomic_agents-2.8.0/atomic-forge/tools/calculator}/.coveragerc +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/calculator/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/calculator/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/calculator/requirements.txt +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/calculator/tests/test_calculator.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/calculator/tool/calculator.py +0 -0
- {atomic_agents-2.7.4/atomic-forge/tools/tavily_search → atomic_agents-2.8.0/atomic-forge/tools/datetime_tool}/.coveragerc +0 -0
- {atomic_agents-2.7.4/atomic-forge/tools/youtube_transcript_scraper → atomic_agents-2.8.0/atomic-forge/tools/fia_signals}/.coveragerc +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/searxng_search/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/searxng_search/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/searxng_search/pytest.ini +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/searxng_search/requirements.txt +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/searxng_search/tests/test_searxng_search.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/searxng_search/tool/searxng_search.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/tavily_search/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/tavily_search/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/tavily_search/requirements.txt +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/tavily_search/tests/test_tavily_seach.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/webpage_scraper/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/webpage_scraper/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/webpage_scraper/requirements.txt +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/webpage_scraper/tests/conftest.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/webpage_scraper/tests/test_webpage_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/webpage_scraper/tool/webpage_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/youtube_transcript_scraper/README.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/youtube_transcript_scraper/pyproject.toml +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/youtube_transcript_scraper/requirements.txt +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/youtube_transcript_scraper/tests/test_youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-forge/tools/youtube_transcript_scraper/tool/youtube_transcript_scraper.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/build_and_deploy.ps1 +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/claude-plugin/atomic-agents/LICENSE +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/.nojekyll +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/Makefile +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/_static/logo.png +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/api/agents.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/api/index.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/api/utils.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/conf.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/contributing.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/examples/index.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/examples/mcp_agent.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/deployment.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/error-handling.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/hooks.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/index.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/logging.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/memory.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/orchestration.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/performance.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/quickstart.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/security.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/guides/testing.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/docs/make.bat +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/greptile.json +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/guides/DEV_GUIDE.md +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/pytest.ini +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/scripts/generate_llms_files.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/scripts/sync_version.py +0 -0
- {atomic_agents-2.7.4 → atomic_agents-2.8.0}/setup.py +0 -0
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"plugins": [
|
|
10
10
|
{
|
|
11
11
|
"name": "atomic-agents",
|
|
12
|
-
"description": "
|
|
13
|
-
"version": "
|
|
12
|
+
"description": "Skills plus explorer and reviewer subagents for building, scaffolding, understanding, and auditing applications with the Atomic Agents Python framework. Progressive-disclosure references for schemas, agents, tools, context providers, prompts, orchestration, memory, hooks, providers, project structure, and testing — plus isolated-context subagents for codebase mapping and code review, and a new-app scaffolder.",
|
|
13
|
+
"version": "2.0.1",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "BrainBlend AI",
|
|
16
16
|
"email": "support@brainblend.ai"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomic-agents
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.8.0
|
|
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
|
|
@@ -18,7 +18,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
18
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
19
|
Requires-Python: >=3.12
|
|
20
20
|
Requires-Dist: gitpython<4.0.0,>=3.1.43
|
|
21
|
-
Requires-Dist: instructor==1.
|
|
21
|
+
Requires-Dist: instructor==1.14.5
|
|
22
22
|
Requires-Dist: litellm<2.0.0,>=1.50.0
|
|
23
23
|
Requires-Dist: mcp[cli]>=1.6.0
|
|
24
24
|
Requires-Dist: pydantic<3.0.0,>=2.11.0
|
|
@@ -96,12 +96,16 @@ To install Atomic Agents, you can use pip:
|
|
|
96
96
|
pip install atomic-agents
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
Make sure you also install the provider you want to use.
|
|
99
|
+
Make sure you also install the provider you want to use. Provider SDKs are available as instructor extras:
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
|
-
pip install
|
|
102
|
+
pip install instructor[groq] # for Groq
|
|
103
|
+
pip install instructor[anthropic] # for Anthropic
|
|
104
|
+
pip install instructor[google-genai] # for Gemini
|
|
103
105
|
```
|
|
104
106
|
|
|
107
|
+
OpenAI is included by default. For a full list of supported providers, see the [Instructor docs](https://python.useinstructor.com/integrations/).
|
|
108
|
+
|
|
105
109
|
This also installs the CLI *Atomic Assembler*, which can be used to download Tools (and soon also Agents and Pipelines).
|
|
106
110
|
|
|
107
111
|
### Quick Example
|
|
@@ -341,8 +345,18 @@ If you're upgrading from v1.x, please read our comprehensive [**Upgrade Guide**]
|
|
|
341
345
|
|
|
342
346
|
Atomic Forge is a collection of tools that can be used with Atomic Agents to extend its functionality. Current tools include:
|
|
343
347
|
|
|
348
|
+
- arXiv Search
|
|
349
|
+
- BoCha Search
|
|
344
350
|
- Calculator
|
|
351
|
+
- DateTime
|
|
352
|
+
- Fía Signals
|
|
353
|
+
- Hacker News Search
|
|
354
|
+
- PDF Reader
|
|
345
355
|
- SearXNG Search
|
|
356
|
+
- Tavily Search
|
|
357
|
+
- Webpage Scraper
|
|
358
|
+
- Weather
|
|
359
|
+
- Wikipedia Search
|
|
346
360
|
- YouTube Transcript Scraper
|
|
347
361
|
|
|
348
362
|
For more information on using and creating tools, see the [Atomic Forge README](/atomic-forge/README.md).
|
|
@@ -404,7 +418,7 @@ uv sync --all-packages
|
|
|
404
418
|
|
|
405
419
|
## Provider & Model Compatibility
|
|
406
420
|
|
|
407
|
-
Atomic Agents depends on the [Instructor](https://github.com/jxnl/instructor) package. This means that in all examples where OpenAI is used, any other API supported by Instructor can also be used—such as Ollama, Groq, Mistral, Cohere, Anthropic, Gemini, and more. For a complete list, please refer to the Instructor documentation on its [GitHub page](https://github.com/jxnl/instructor).
|
|
421
|
+
Atomic Agents depends on the [Instructor](https://github.com/jxnl/instructor) package. This means that in all examples where OpenAI is used, any other API supported by Instructor can also be used—such as Ollama, Groq, Mistral, Cohere, Anthropic, Gemini, [MiniMax](https://www.minimax.io/), and more. For a complete list, please refer to the Instructor documentation on its [GitHub page](https://github.com/jxnl/instructor).
|
|
408
422
|
|
|
409
423
|
## Contributing
|
|
410
424
|
|
|
@@ -65,12 +65,16 @@ To install Atomic Agents, you can use pip:
|
|
|
65
65
|
pip install atomic-agents
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
Make sure you also install the provider you want to use.
|
|
68
|
+
Make sure you also install the provider you want to use. Provider SDKs are available as instructor extras:
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
pip install
|
|
71
|
+
pip install instructor[groq] # for Groq
|
|
72
|
+
pip install instructor[anthropic] # for Anthropic
|
|
73
|
+
pip install instructor[google-genai] # for Gemini
|
|
72
74
|
```
|
|
73
75
|
|
|
76
|
+
OpenAI is included by default. For a full list of supported providers, see the [Instructor docs](https://python.useinstructor.com/integrations/).
|
|
77
|
+
|
|
74
78
|
This also installs the CLI *Atomic Assembler*, which can be used to download Tools (and soon also Agents and Pipelines).
|
|
75
79
|
|
|
76
80
|
### Quick Example
|
|
@@ -310,8 +314,18 @@ If you're upgrading from v1.x, please read our comprehensive [**Upgrade Guide**]
|
|
|
310
314
|
|
|
311
315
|
Atomic Forge is a collection of tools that can be used with Atomic Agents to extend its functionality. Current tools include:
|
|
312
316
|
|
|
317
|
+
- arXiv Search
|
|
318
|
+
- BoCha Search
|
|
313
319
|
- Calculator
|
|
320
|
+
- DateTime
|
|
321
|
+
- Fía Signals
|
|
322
|
+
- Hacker News Search
|
|
323
|
+
- PDF Reader
|
|
314
324
|
- SearXNG Search
|
|
325
|
+
- Tavily Search
|
|
326
|
+
- Webpage Scraper
|
|
327
|
+
- Weather
|
|
328
|
+
- Wikipedia Search
|
|
315
329
|
- YouTube Transcript Scraper
|
|
316
330
|
|
|
317
331
|
For more information on using and creating tools, see the [Atomic Forge README](/atomic-forge/README.md).
|
|
@@ -373,7 +387,7 @@ uv sync --all-packages
|
|
|
373
387
|
|
|
374
388
|
## Provider & Model Compatibility
|
|
375
389
|
|
|
376
|
-
Atomic Agents depends on the [Instructor](https://github.com/jxnl/instructor) package. This means that in all examples where OpenAI is used, any other API supported by Instructor can also be used—such as Ollama, Groq, Mistral, Cohere, Anthropic, Gemini, and more. For a complete list, please refer to the Instructor documentation on its [GitHub page](https://github.com/jxnl/instructor).
|
|
390
|
+
Atomic Agents depends on the [Instructor](https://github.com/jxnl/instructor) package. This means that in all examples where OpenAI is used, any other API supported by Instructor can also be used—such as Ollama, Groq, Mistral, Cohere, Anthropic, Gemini, [MiniMax](https://www.minimax.io/), and more. For a complete list, please refer to the Instructor documentation on its [GitHub page](https://github.com/jxnl/instructor).
|
|
377
391
|
|
|
378
392
|
## Contributing
|
|
379
393
|
|
|
@@ -99,10 +99,18 @@ Each example is self-contained and demonstrates specific patterns and capabiliti
|
|
|
99
99
|
**Philosophy:** Tools are NOT bundled with the framework. Instead, users download individual tools for full control and customization.
|
|
100
100
|
|
|
101
101
|
**Available Tools:**
|
|
102
|
+
- `arxiv_search/` - Academic paper search via the public arXiv API
|
|
103
|
+
- `bocha_search/` - BoCha web search
|
|
102
104
|
- `calculator/` - Mathematical computation tool
|
|
105
|
+
- `datetime_tool/` - Timezone-aware now / parse / convert / shift / diff
|
|
106
|
+
- `fia_signals/` - Crypto market intelligence (regime, signals, yields, gas, trending, wallet risk)
|
|
107
|
+
- `hackernews_search/` - Hacker News search via the free Algolia API
|
|
108
|
+
- `pdf_reader/` - PDF text + metadata extraction (local file or URL, page-range support)
|
|
103
109
|
- `searxng_search/` - Privacy-focused search integration
|
|
104
110
|
- `tavily_search/` - Tavily API search tool
|
|
111
|
+
- `weather/` - Current conditions and daily/hourly forecast via Open-Meteo (no key)
|
|
105
112
|
- `webpage_scraper/` - Web scraping capabilities
|
|
113
|
+
- `wikipedia_search/` - Wikipedia search in any language edition (no key)
|
|
106
114
|
- `youtube_transcript_scraper/` - YouTube transcript extraction
|
|
107
115
|
|
|
108
116
|
**Benefits:**
|
{atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/agents/atomic_agent.py
RENAMED
|
@@ -8,6 +8,7 @@ from atomic_agents.context.chat_history import ChatHistory
|
|
|
8
8
|
from atomic_agents.context.system_prompt_generator import (
|
|
9
9
|
BaseDynamicContextProvider,
|
|
10
10
|
SystemPromptGenerator,
|
|
11
|
+
BaseSystemPromptGenerator,
|
|
11
12
|
)
|
|
12
13
|
from atomic_agents.base.base_io_schema import BaseIOSchema
|
|
13
14
|
from atomic_agents.utils.token_counter import get_token_counter, TokenCountResult
|
|
@@ -63,11 +64,15 @@ class BasicChatOutputSchema(BaseIOSchema):
|
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
class AgentConfig(BaseModel):
|
|
66
|
-
client: instructor.client.Instructor = Field(..., description="Client for interacting with the language model.")
|
|
67
|
+
client: instructor.core.client.Instructor = Field(..., description="Client for interacting with the language model.")
|
|
67
68
|
model: str = Field(default="gpt-5-mini", description="The model to use for generating responses.")
|
|
68
69
|
history: Optional[ChatHistory] = Field(default=None, description="History component for storing chat history.")
|
|
69
|
-
system_prompt_generator: Optional[
|
|
70
|
-
default=None,
|
|
70
|
+
system_prompt_generator: Optional[BaseSystemPromptGenerator] = Field(
|
|
71
|
+
default=None,
|
|
72
|
+
description=(
|
|
73
|
+
"Component for generating system prompts. "
|
|
74
|
+
"Defaults to SystemPromptGenerator if no subclass of BaseSystemPromptGenerator is passed."
|
|
75
|
+
),
|
|
71
76
|
)
|
|
72
77
|
system_role: Optional[str] = Field(
|
|
73
78
|
default="system", description="The role of the system in the conversation. None means no system prompt."
|
|
@@ -76,9 +81,25 @@ class AgentConfig(BaseModel):
|
|
|
76
81
|
default="assistant",
|
|
77
82
|
description="The role of the assistant in the conversation. Use 'model' for Gemini, 'assistant' for OpenAI/Anthropic.",
|
|
78
83
|
)
|
|
84
|
+
tool_result_role: Optional[str] = Field(
|
|
85
|
+
default=None,
|
|
86
|
+
description=(
|
|
87
|
+
"The role to use for mid-conversation tool results and context injections. "
|
|
88
|
+
"Defaults to 'user' when assistant_role is 'model' (Gemini), otherwise 'system'. "
|
|
89
|
+
"Set explicitly to override auto-detection."
|
|
90
|
+
),
|
|
91
|
+
)
|
|
79
92
|
model_config = {"arbitrary_types_allowed": True}
|
|
80
93
|
mode: Mode = Field(default=Mode.TOOLS, description="The Instructor mode used for structured outputs (TOOLS, JSON, etc.).")
|
|
81
94
|
model_api_parameters: Optional[dict] = Field(None, description="Additional parameters passed to the API provider.")
|
|
95
|
+
max_context_tokens: Optional[int] = Field(
|
|
96
|
+
None,
|
|
97
|
+
description=(
|
|
98
|
+
"Maximum tokens for the full context (system prompt + history + tools). "
|
|
99
|
+
"When exceeded, oldest conversation turns are automatically trimmed to stay within limit. "
|
|
100
|
+
"Uses LiteLLM's provider-agnostic token counter — works with any supported model."
|
|
101
|
+
),
|
|
102
|
+
)
|
|
82
103
|
|
|
83
104
|
|
|
84
105
|
class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
@@ -97,13 +118,15 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
97
118
|
client: Client for interacting with the language model.
|
|
98
119
|
model (str): The model to use for generating responses.
|
|
99
120
|
history (ChatHistory): History component for storing chat history.
|
|
100
|
-
system_prompt_generator (
|
|
121
|
+
system_prompt_generator (BaseSystemPromptGenerator): Component for generating system prompts.
|
|
101
122
|
system_role (Optional[str]): The role of the system in the conversation. None means no system prompt.
|
|
102
123
|
assistant_role (str): The role of the assistant in the conversation. Use 'model' for Gemini, 'assistant' for OpenAI/Anthropic.
|
|
103
124
|
initial_history (ChatHistory): Initial state of the history.
|
|
104
125
|
current_user_input (Optional[InputSchema]): The current user input being processed.
|
|
105
126
|
model_api_parameters (dict): Additional parameters passed to the API provider.
|
|
106
127
|
- Use this for parameters like 'temperature', 'max_tokens', etc.
|
|
128
|
+
max_context_tokens (Optional[int]): Maximum tokens for the full context. When exceeded,
|
|
129
|
+
oldest conversation turns are automatically trimmed. Uses LiteLLM's token counter.
|
|
107
130
|
|
|
108
131
|
Hook System:
|
|
109
132
|
The AtomicAgent integrates with Instructor's hook system to provide comprehensive monitoring
|
|
@@ -170,10 +193,17 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
170
193
|
self.system_prompt_generator = config.system_prompt_generator or SystemPromptGenerator()
|
|
171
194
|
self.system_role = config.system_role
|
|
172
195
|
self.assistant_role = config.assistant_role
|
|
196
|
+
if config.tool_result_role is not None:
|
|
197
|
+
self.tool_result_role = config.tool_result_role
|
|
198
|
+
else:
|
|
199
|
+
# Auto-detect: Gemini drops mid-conversation "system" messages,
|
|
200
|
+
# so default to "user" for Gemini backends (identified by assistant_role="model")
|
|
201
|
+
self.tool_result_role = "user" if config.assistant_role == "model" else "system"
|
|
173
202
|
self.initial_history = self.history.copy()
|
|
174
203
|
self.current_user_input = None
|
|
175
204
|
self.mode = config.mode
|
|
176
205
|
self.model_api_parameters = config.model_api_parameters or {}
|
|
206
|
+
self.max_context_tokens = config.max_context_tokens
|
|
177
207
|
|
|
178
208
|
# Hook management attributes
|
|
179
209
|
self._hook_handlers: Dict[str, List[Callable]] = {}
|
|
@@ -185,6 +215,21 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
185
215
|
"""
|
|
186
216
|
self.history = self.initial_history.copy()
|
|
187
217
|
|
|
218
|
+
def add_tool_result(self, content: BaseIOSchema) -> None:
|
|
219
|
+
"""
|
|
220
|
+
Adds a tool result or context injection to the chat history using the
|
|
221
|
+
backend-appropriate role.
|
|
222
|
+
|
|
223
|
+
This method should be used instead of ``history.add_message("system", ...)``
|
|
224
|
+
when injecting tool execution results, resource contents, or other mid-conversation
|
|
225
|
+
context into the agent's history. It automatically uses the correct role for the
|
|
226
|
+
configured backend (e.g. ``"user"`` for Gemini, ``"system"`` for OpenAI/Anthropic).
|
|
227
|
+
|
|
228
|
+
Args:
|
|
229
|
+
content (BaseIOSchema): The tool result or context to inject.
|
|
230
|
+
"""
|
|
231
|
+
self.history.add_message(self.tool_result_role, content)
|
|
232
|
+
|
|
188
233
|
@property
|
|
189
234
|
def input_schema(self) -> Type[BaseIOSchema]:
|
|
190
235
|
"""
|
|
@@ -245,9 +290,79 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
245
290
|
}
|
|
246
291
|
]
|
|
247
292
|
|
|
293
|
+
def _trim_context(self) -> None:
|
|
294
|
+
"""
|
|
295
|
+
Trim oldest conversation turns to stay within max_context_tokens limit.
|
|
296
|
+
|
|
297
|
+
Called before building the messages list. Uses the full context token count
|
|
298
|
+
(system prompt + history + tools) via get_context_token_count().
|
|
299
|
+
Removes oldest turns one at a time until the context fits within the limit.
|
|
300
|
+
|
|
301
|
+
Turn-preserving: always removes complete turns, never individual messages.
|
|
302
|
+
|
|
303
|
+
Raises:
|
|
304
|
+
ValueError: If a single turn itself exceeds max_context_tokens.
|
|
305
|
+
"""
|
|
306
|
+
if self.max_context_tokens is None:
|
|
307
|
+
return
|
|
308
|
+
|
|
309
|
+
result = self.get_context_token_count()
|
|
310
|
+
total_tokens = result.total
|
|
311
|
+
|
|
312
|
+
if total_tokens <= self.max_context_tokens:
|
|
313
|
+
return
|
|
314
|
+
|
|
315
|
+
logger = logging.getLogger(__name__)
|
|
316
|
+
|
|
317
|
+
# Collect unique turn_ids in order (oldest first)
|
|
318
|
+
turn_ids_ordered = []
|
|
319
|
+
seen = set()
|
|
320
|
+
for msg in self.history.history:
|
|
321
|
+
if msg.turn_id and msg.turn_id not in seen:
|
|
322
|
+
turn_ids_ordered.append(msg.turn_id)
|
|
323
|
+
seen.add(msg.turn_id)
|
|
324
|
+
|
|
325
|
+
# Remove oldest turns until within limit
|
|
326
|
+
for turn_id in turn_ids_ordered:
|
|
327
|
+
if total_tokens <= self.max_context_tokens:
|
|
328
|
+
break
|
|
329
|
+
|
|
330
|
+
self.history.delete_turn_id(turn_id)
|
|
331
|
+
new_result = self.get_context_token_count()
|
|
332
|
+
removed = total_tokens - new_result.total
|
|
333
|
+
total_tokens = new_result.total
|
|
334
|
+
logger.warning(
|
|
335
|
+
"Context exceeded max_context_tokens (%d). " "Trimmed turn '%s' (%d tokens). New total: %d.",
|
|
336
|
+
self.max_context_tokens,
|
|
337
|
+
turn_id,
|
|
338
|
+
removed,
|
|
339
|
+
total_tokens,
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
if total_tokens > self.max_context_tokens:
|
|
343
|
+
raise ValueError(
|
|
344
|
+
f"max_context_tokens ({self.max_context_tokens}) is smaller than the "
|
|
345
|
+
f"minimum required for a single turn ({total_tokens} tokens). "
|
|
346
|
+
"Increase max_context_tokens or reduce system prompt size."
|
|
347
|
+
)
|
|
348
|
+
|
|
248
349
|
def _prepare_messages(self):
|
|
249
350
|
self.messages = self._build_system_messages()
|
|
250
|
-
|
|
351
|
+
history = self.history.get_history()
|
|
352
|
+
# Remap "system" role messages in history when the backend doesn't support
|
|
353
|
+
# mid-conversation system messages (e.g. Gemini). The initial system prompt
|
|
354
|
+
# is built separately via _build_system_messages() and is unaffected.
|
|
355
|
+
if self.tool_result_role != "system":
|
|
356
|
+
logger = logging.getLogger(__name__)
|
|
357
|
+
for msg in history:
|
|
358
|
+
if msg["role"] == "system":
|
|
359
|
+
logger.debug(
|
|
360
|
+
"Remapping mid-conversation 'system' message to '%s' "
|
|
361
|
+
"(backend does not support mid-conversation system messages).",
|
|
362
|
+
self.tool_result_role,
|
|
363
|
+
)
|
|
364
|
+
msg["role"] = self.tool_result_role
|
|
365
|
+
self.messages += history
|
|
251
366
|
|
|
252
367
|
def _get_completion_kwargs(self) -> Dict[str, Any]:
|
|
253
368
|
"""
|
|
@@ -444,8 +559,12 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
444
559
|
OutputSchema: The response from the chat agent.
|
|
445
560
|
"""
|
|
446
561
|
assert not isinstance(
|
|
447
|
-
self.client, instructor.client.AsyncInstructor
|
|
562
|
+
self.client, instructor.core.client.AsyncInstructor
|
|
448
563
|
), "The run method is not supported for async clients. Use run_async instead."
|
|
564
|
+
|
|
565
|
+
# Trim history BEFORE adding new user message to protect the new input
|
|
566
|
+
self._trim_context()
|
|
567
|
+
|
|
449
568
|
if user_input:
|
|
450
569
|
self.history.initialize_turn()
|
|
451
570
|
self.current_user_input = user_input
|
|
@@ -477,8 +596,11 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
477
596
|
OutputSchema: The final response from the chat agent.
|
|
478
597
|
"""
|
|
479
598
|
assert not isinstance(
|
|
480
|
-
self.client, instructor.client.AsyncInstructor
|
|
599
|
+
self.client, instructor.core.client.AsyncInstructor
|
|
481
600
|
), "The run_stream method is not supported for async clients. Use run_async instead."
|
|
601
|
+
|
|
602
|
+
self._trim_context()
|
|
603
|
+
|
|
482
604
|
if user_input:
|
|
483
605
|
self.history.initialize_turn()
|
|
484
606
|
self.current_user_input = user_input
|
|
@@ -519,7 +641,10 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
519
641
|
NotAsyncIterableError: If used as an async generator (in an async for loop).
|
|
520
642
|
Use run_async_stream() method instead for streaming responses.
|
|
521
643
|
"""
|
|
522
|
-
assert isinstance(self.client, instructor.client.AsyncInstructor), "The run_async method is for async clients."
|
|
644
|
+
assert isinstance(self.client, instructor.core.client.AsyncInstructor), "The run_async method is for async clients."
|
|
645
|
+
|
|
646
|
+
self._trim_context()
|
|
647
|
+
|
|
523
648
|
if user_input:
|
|
524
649
|
self.history.initialize_turn()
|
|
525
650
|
self.current_user_input = user_input
|
|
@@ -545,7 +670,8 @@ class AtomicAgent[InputSchema: BaseIOSchema, OutputSchema: BaseIOSchema]:
|
|
|
545
670
|
Yields:
|
|
546
671
|
OutputSchema: Partial responses from the chat agent.
|
|
547
672
|
"""
|
|
548
|
-
assert isinstance(self.client, instructor.client.AsyncInstructor), "The run_async method is for async clients."
|
|
673
|
+
assert isinstance(self.client, instructor.core.client.AsyncInstructor), "The run_async method is for async clients."
|
|
674
|
+
self._trim_context()
|
|
549
675
|
if user_input:
|
|
550
676
|
self.history.initialize_turn()
|
|
551
677
|
self.current_user_input = user_input
|
|
@@ -848,7 +848,7 @@ class MCPFactory:
|
|
|
848
848
|
if isinstance(content, str):
|
|
849
849
|
texts.append(content)
|
|
850
850
|
elif isinstance(content, dict):
|
|
851
|
-
texts.append(content.get("text"))
|
|
851
|
+
texts.append(content.get("text", ""))
|
|
852
852
|
elif getattr(content, "text", None):
|
|
853
853
|
texts.append(content.text) # type: ignore
|
|
854
854
|
else:
|
|
@@ -2,6 +2,7 @@ from .chat_history import Message, ChatHistory
|
|
|
2
2
|
from .system_prompt_generator import (
|
|
3
3
|
BaseDynamicContextProvider,
|
|
4
4
|
SystemPromptGenerator,
|
|
5
|
+
BaseSystemPromptGenerator,
|
|
5
6
|
)
|
|
6
7
|
|
|
7
8
|
__all__ = [
|
|
@@ -9,4 +10,5 @@ __all__ = [
|
|
|
9
10
|
"ChatHistory",
|
|
10
11
|
"SystemPromptGenerator",
|
|
11
12
|
"BaseDynamicContextProvider",
|
|
13
|
+
"BaseSystemPromptGenerator",
|
|
12
14
|
]
|
{atomic_agents-2.7.4 → atomic_agents-2.8.0}/atomic-agents/atomic_agents/context/chat_history.py
RENAMED
|
@@ -4,7 +4,7 @@ from enum import Enum
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Dict, List, Optional, Type
|
|
6
6
|
|
|
7
|
-
from instructor.multimodal import PDF, Image, Audio
|
|
7
|
+
from instructor.processing.multimodal import PDF, Image, Audio
|
|
8
8
|
from pydantic import BaseModel, Field
|
|
9
9
|
|
|
10
10
|
from atomic_agents.base.base_io_schema import BaseIOSchema
|
|
@@ -14,7 +14,19 @@ class BaseDynamicContextProvider(ABC):
|
|
|
14
14
|
return self.get_info()
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
class
|
|
17
|
+
class BaseSystemPromptGenerator(ABC):
|
|
18
|
+
def __init__(self, context_providers: Optional[Dict[str, BaseDynamicContextProvider]] = None):
|
|
19
|
+
self.context_providers = context_providers or {}
|
|
20
|
+
|
|
21
|
+
@abstractmethod
|
|
22
|
+
def generate_prompt(self) -> str:
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
def __repr__(self) -> str:
|
|
26
|
+
return f"{self.__class__.__name__} (providers={list(self.context_providers)})"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SystemPromptGenerator(BaseSystemPromptGenerator):
|
|
18
30
|
def __init__(
|
|
19
31
|
self,
|
|
20
32
|
background: Optional[List[str]] = None,
|
|
@@ -22,10 +34,10 @@ class SystemPromptGenerator:
|
|
|
22
34
|
output_instructions: Optional[List[str]] = None,
|
|
23
35
|
context_providers: Optional[Dict[str, BaseDynamicContextProvider]] = None,
|
|
24
36
|
):
|
|
37
|
+
super().__init__(context_providers=context_providers)
|
|
25
38
|
self.background = background or ["This is a conversation with a helpful and friendly AI assistant."]
|
|
26
39
|
self.steps = steps or []
|
|
27
40
|
self.output_instructions = output_instructions or []
|
|
28
|
-
self.context_providers = context_providers or {}
|
|
29
41
|
|
|
30
42
|
self.output_instructions.extend(
|
|
31
43
|
[
|