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.
Files changed (325) hide show
  1. atomic_agents-2.7.4/.assets/whats-new-v2-thumbnail.png +0 -0
  2. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/PKG-INFO +5 -1
  3. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/README.md +4 -0
  4. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/__init__.py +4 -2
  5. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/agents/atomic_agent.py +24 -9
  6. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/chat_history.py +2 -2
  7. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/token_counter.py +5 -2
  8. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/agents/test_atomic_agent.py +69 -0
  9. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/utils/test_token_counter.py +63 -25
  10. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/pyproject.toml +1 -1
  11. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/uv.lock +1 -1
  12. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/architecture_highlevel_overview.png +0 -0
  13. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/atomic-cli-tool-menu.png +0 -0
  14. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/atomic-cli.png +0 -0
  15. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/docs.png +0 -0
  16. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/logo.png +0 -0
  17. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/video-thumbnail-1.png +0 -0
  18. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/video-thumbnail-2.png +0 -0
  19. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/video-thumbnail.png +0 -0
  20. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.assets/what_is_sent_in_prompt.png +0 -0
  21. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.claude/skills/release/SKILL.md +0 -0
  22. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.claude-plugin/marketplace.json +0 -0
  23. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.coveragerc +0 -0
  24. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.flake8 +0 -0
  25. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.github/funding.yml +0 -0
  26. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.github/workflows/code-quality.yml +0 -0
  27. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.github/workflows/docs.yml +0 -0
  28. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.gitignore +0 -0
  29. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/.pre-commit-config.yaml +0 -0
  30. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/LICENSE +0 -0
  31. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/UPGRADE_DOC.md +0 -0
  32. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/agents.md +0 -0
  33. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/LICENSE +0 -0
  34. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/MANIFEST.in +0 -0
  35. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/agents/__init__.py +0 -0
  36. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/__init__.py +0 -0
  37. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_io_schema.py +0 -0
  38. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_prompt.py +0 -0
  39. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_resource.py +0 -0
  40. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/base/base_tool.py +0 -0
  41. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/__init__.py +0 -0
  42. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/__init__.py +0 -0
  43. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/mcp_definition_service.py +0 -0
  44. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/mcp_factory.py +0 -0
  45. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/connectors/mcp/schema_transformer.py +0 -0
  46. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/__init__.py +0 -0
  47. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/context/system_prompt_generator.py +0 -0
  48. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/__init__.py +0 -0
  49. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/atomic_agents/utils/format_tool_message.py +0 -0
  50. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/base/test_base_tool.py +0 -0
  51. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_mcp_definition_service.py +0 -0
  52. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_mcp_factory.py +0 -0
  53. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/connectors/mcp/test_schema_transformer.py +0 -0
  54. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/context/test_chat_history.py +0 -0
  55. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/context/test_system_prompt_generator.py +0 -0
  56. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/files/audio_sample.mp3 +0 -0
  57. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/files/image_sample.jpg +0 -0
  58. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/files/pdf_sample.pdf +0 -0
  59. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-agents/tests/utils/test_format_tool_message.py +0 -0
  60. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/README.md +0 -0
  61. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/__init__.py +0 -0
  62. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/app.py +0 -0
  63. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/color_utils.py +0 -0
  64. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/constants.py +0 -0
  65. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/main.py +0 -0
  66. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/atomic_tool_explorer.py +0 -0
  67. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/file_explorer.py +0 -0
  68. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/main_menu.py +0 -0
  69. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/screens/tool_info_screen.py +0 -0
  70. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/utils.py +0 -0
  71. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/confirmation_modal.py +0 -0
  72. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/generic_list.py +0 -0
  73. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/gradient_title.py +0 -0
  74. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/icon_selection_list.py +0 -0
  75. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/menu.py +0 -0
  76. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/new_item_input.py +0 -0
  77. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-assembler/atomic_assembler/widgets/tool_info_display.py +0 -0
  78. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/README.md +0 -0
  79. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/basic_multimodal/main.py +0 -0
  80. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/pyproject.toml +0 -0
  81. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/test_images/nutrition_label_1.png +0 -0
  82. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-multimodal/test_images/nutrition_label_2.jpg +0 -0
  83. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/README.md +0 -0
  84. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/basic_pdf_analysis/main.py +0 -0
  85. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/pyproject.toml +0 -0
  86. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/basic-pdf-analysis/test_media/pdf_sample.pdf +0 -0
  87. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/README.md +0 -0
  88. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/agents/choice_agent.py +0 -0
  89. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/agents/qa_agent.py +0 -0
  90. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/agents/query_agent.py +0 -0
  91. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/config.py +0 -0
  92. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/context_providers.py +0 -0
  93. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/main.py +0 -0
  94. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/tools/searxng_search.py +0 -0
  95. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/deep_research/tools/webpage_scraper.py +0 -0
  96. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/mermaid.md +0 -0
  97. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/deep-research/pyproject.toml +0 -0
  98. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/README.md +0 -0
  99. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/__init__.py +0 -0
  100. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/bridge.py +0 -0
  101. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/__init__.py +0 -0
  102. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/datasets.py +0 -0
  103. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/evaluation.py +0 -0
  104. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/domain/models.py +0 -0
  105. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/main.py +0 -0
  106. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/presentation/__init__.py +0 -0
  107. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/presentation/console.py +0 -0
  108. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/schemas.py +0 -0
  109. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/__init__.py +0 -0
  110. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/stage1_dspy.py +0 -0
  111. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/stage2_atomic.py +0 -0
  112. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/dspy_integration/stages/stage3_combined.py +0 -0
  113. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/dspy-integration/pyproject.toml +0 -0
  114. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/README.md +0 -0
  115. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/__init__.py +0 -0
  116. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/client.py +0 -0
  117. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/__init__.py +0 -0
  118. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/agents/__init__.py +0 -0
  119. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/agents/chat_agent.py +0 -0
  120. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/config.py +0 -0
  121. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/lib/schemas.py +0 -0
  122. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/fastapi_memory/main.py +0 -0
  123. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/pyproject.toml +0 -0
  124. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/fastapi-memory/test_api.py +0 -0
  125. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/hooks-example/README.md +0 -0
  126. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/hooks-example/hooks_example/main.py +0 -0
  127. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/hooks-example/pyproject.toml +0 -0
  128. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/README.md +0 -0
  129. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main.py +0 -0
  130. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_fastapi.py +0 -0
  131. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_http.py +0 -0
  132. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_sse.py +0 -0
  133. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_stdio.py +0 -0
  134. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/example_client/main_stdio_async.py +0 -0
  135. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-client/pyproject.toml +0 -0
  136. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/README.md +0 -0
  137. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/demo_tools.py +0 -0
  138. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/__init__.py +0 -0
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. {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
  146. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/example_mcp_server/server.py +0 -0
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {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
  160. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/mcp-agent/example-mcp-server/pyproject.toml +0 -0
  161. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/README.md +0 -0
  162. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/nested_multimodal/main.py +0 -0
  163. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/pyproject.toml +0 -0
  164. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/nested-multimodal/test_images/nutrition_label_1.png +0 -0
  165. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/README.md +0 -0
  166. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/orchestration_agent/orchestrator.py +0 -0
  167. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/orchestration_agent/tools/calculator.py +0 -0
  168. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/orchestration_agent/tools/searxng_search.py +0 -0
  169. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/orchestration-agent/pyproject.toml +0 -0
  170. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/README.md +0 -0
  171. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/__init__.py +0 -0
  172. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/__init__.py +0 -0
  173. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/orchestrator_agent.py +0 -0
  174. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/agents/tool_finder_agent.py +0 -0
  175. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/main.py +0 -0
  176. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/registry/__init__.py +0 -0
  177. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/registry/tool_registry.py +0 -0
  178. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/tools/__init__.py +0 -0
  179. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/progressive_disclosure/tools/search_tools.py +0 -0
  180. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/pyproject.toml +0 -0
  181. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/data_server/data_server/__init__.py +0 -0
  182. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/data_server/data_server/server.py +0 -0
  183. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/data_server/pyproject.toml +0 -0
  184. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/math_server/math_server/__init__.py +0 -0
  185. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/math_server/math_server/server.py +0 -0
  186. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/math_server/pyproject.toml +0 -0
  187. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/text_server/pyproject.toml +0 -0
  188. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/text_server/text_server/__init__.py +0 -0
  189. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/progressive-disclosure/servers/text_server/text_server/server.py +0 -0
  190. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/README.md +0 -0
  191. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/pyproject.toml +0 -0
  192. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/1_0_basic_chatbot.py +0 -0
  193. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/1_1_basic_chatbot_streaming.py +0 -0
  194. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/1_2_basic_chatbot_async_streaming.py +0 -0
  195. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/2_basic_custom_chatbot.py +0 -0
  196. {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
  197. {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
  198. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py +0 -0
  199. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/5_custom_system_role_for_reasoning_models.py +0 -0
  200. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/6_0_asynchronous_processing.py +0 -0
  201. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/quickstart/quickstart/6_1_asynchronous_processing_streaming.py +0 -0
  202. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/.gitignore +0 -0
  203. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/README.md +0 -0
  204. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/pyproject.toml +0 -0
  205. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/agents/qa_agent.py +0 -0
  206. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/agents/query_agent.py +0 -0
  207. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/config.py +0 -0
  208. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/context_providers.py +0 -0
  209. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/main.py +0 -0
  210. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/__init__.py +0 -0
  211. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/base.py +0 -0
  212. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/chroma_db.py +0 -0
  213. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/factory.py +0 -0
  214. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/rag-chatbot/rag_chatbot/services/qdrant_db.py +0 -0
  215. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/README.md +0 -0
  216. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/pyproject.toml +0 -0
  217. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/agents/query_agent.py +0 -0
  218. {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
  219. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/main.py +0 -0
  220. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/web-search-agent/web_search_agent/tools/searxng_search.py +0 -0
  221. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/README.md +0 -0
  222. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/pyproject.toml +0 -0
  223. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/youtube_summarizer/agent.py +0 -0
  224. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/youtube_summarizer/main.py +0 -0
  225. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-summarizer/youtube_summarizer/tools/youtube_transcript_scraper.py +0 -0
  226. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/README.md +0 -0
  227. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/pyproject.toml +0 -0
  228. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/youtube_to_recipe/agent.py +0 -0
  229. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-examples/youtube-to-recipe/youtube_to_recipe/main.py +0 -0
  230. {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
  231. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/README.md +0 -0
  232. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/guides/tool_structure.md +0 -0
  233. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/.coveragerc +0 -0
  234. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/README.md +0 -0
  235. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/pyproject.toml +0 -0
  236. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/requirements.txt +0 -0
  237. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/tests/test_bocha_search.py +0 -0
  238. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/bocha_search/tool/bocha_search.py +0 -0
  239. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/.coveragerc +0 -0
  240. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/README.md +0 -0
  241. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/pyproject.toml +0 -0
  242. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/requirements.txt +0 -0
  243. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/tests/test_calculator.py +0 -0
  244. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/calculator/tool/calculator.py +0 -0
  245. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/.coveragerc +0 -0
  246. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/README.md +0 -0
  247. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/pyproject.toml +0 -0
  248. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/pytest.ini +0 -0
  249. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/requirements.txt +0 -0
  250. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/tests/test_searxng_search.py +0 -0
  251. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/searxng_search/tool/searxng_search.py +0 -0
  252. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/.coveragerc +0 -0
  253. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/README.md +0 -0
  254. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/pyproject.toml +0 -0
  255. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/requirements.txt +0 -0
  256. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/tests/test_tavily_seach.py +0 -0
  257. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/tavily_search/tool/tavily_search.py +0 -0
  258. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/README.md +0 -0
  259. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/pyproject.toml +0 -0
  260. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/requirements.txt +0 -0
  261. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/tests/conftest.py +0 -0
  262. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/tests/test_webpage_scraper.py +0 -0
  263. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/webpage_scraper/tool/webpage_scraper.py +0 -0
  264. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/.coveragerc +0 -0
  265. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/README.md +0 -0
  266. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/pyproject.toml +0 -0
  267. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/requirements.txt +0 -0
  268. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/tests/test_youtube_transcript_scraper.py +0 -0
  269. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/atomic-forge/tools/youtube_transcript_scraper/tool/youtube_transcript_scraper.py +0 -0
  270. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/build_and_deploy.ps1 +0 -0
  271. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/.claude-plugin/plugin.json +0 -0
  272. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/CHANGELOG.md +0 -0
  273. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/LICENSE +0 -0
  274. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/README.md +0 -0
  275. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/atomic-architect.md +0 -0
  276. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/atomic-explorer.md +0 -0
  277. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/atomic-reviewer.md +0 -0
  278. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/agents/schema-designer.md +0 -0
  279. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/commands/atomic-agent.md +0 -0
  280. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/commands/atomic-create.md +0 -0
  281. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/commands/atomic-tool.md +0 -0
  282. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-agents/SKILL.md +0 -0
  283. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-agents/examples/basic-agent.py +0 -0
  284. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-context/SKILL.md +0 -0
  285. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-context/examples/rag-context.py +0 -0
  286. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-prompts/SKILL.md +0 -0
  287. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-schemas/SKILL.md +0 -0
  288. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-schemas/examples/common-schemas.py +0 -0
  289. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-structure/SKILL.md +0 -0
  290. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-tools/SKILL.md +0 -0
  291. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/claude-plugin/atomic-agents/skills/atomic-tools/examples/api-tool.py +0 -0
  292. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/.nojekyll +0 -0
  293. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/Makefile +0 -0
  294. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/_static/logo.png +0 -0
  295. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/agents.md +0 -0
  296. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/context.md +0 -0
  297. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/index.md +0 -0
  298. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/api/utils.md +0 -0
  299. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/conf.py +0 -0
  300. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/contributing.md +0 -0
  301. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/examples/index.md +0 -0
  302. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/examples/mcp_agent.md +0 -0
  303. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/cookbook.md +0 -0
  304. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/deployment.md +0 -0
  305. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/error-handling.md +0 -0
  306. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/faq.md +0 -0
  307. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/hooks.md +0 -0
  308. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/index.md +0 -0
  309. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/logging.md +0 -0
  310. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/memory.md +0 -0
  311. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/orchestration.md +0 -0
  312. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/performance.md +0 -0
  313. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/quickstart.md +0 -0
  314. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/security.md +0 -0
  315. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/testing.md +0 -0
  316. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/guides/tools.md +0 -0
  317. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/index.md +0 -0
  318. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/docs/make.bat +0 -0
  319. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/greptile.json +0 -0
  320. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/guides/DEV_GUIDE.md +0 -0
  321. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/pytest.ini +0 -0
  322. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/requirements.txt +0 -0
  323. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/scripts/generate_llms_files.py +0 -0
  324. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/scripts/sync_version.py +0 -0
  325. {atomic_agents-2.7.1 → atomic_agents-2.7.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomic-agents
3
- Version: 2.7.1
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
+ [![What's New in V2.0](./.assets/whats-new-v2-thumbnail.png)](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
+ [![What's New in V2.0](./.assets/whats-new-v2-thumbnail.png)](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
- __version__ = "2.0.0"
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",
@@ -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.model_api_parameters,
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.model_api_parameters,
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
- full_response_content = self.output_schema(**partial_response.model_dump())
488
- self.history.add_message(self.assistant_role, full_response_content)
489
- self._prepare_messages()
490
-
491
- return full_response_content
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.model_api_parameters
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.model_api_parameters,
560
+ **self._get_completion_kwargs(),
546
561
  stream=True,
547
562
  )
548
563
 
@@ -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: int):
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 (int): The turn ID of the message to delete.
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.
@@ -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 get_max_tokens
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
- return get_max_tokens(model)
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.get_max_tokens")
118
- def test_get_max_tokens(self, mock_get_max_tokens):
119
- mock_get_max_tokens.return_value = 8192
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.get_max_tokens")
128
- def test_get_max_tokens_unknown_model(self, mock_get_max_tokens):
129
- mock_get_max_tokens.side_effect = Exception("Unknown model")
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.get_max_tokens")
203
+ @patch("litellm.get_model_info")
166
204
  @patch("litellm.token_counter")
167
- def test_count_context(self, mock_token_counter, mock_get_max_tokens):
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
- mock_get_max_tokens.return_value = 8192
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.get_max_tokens")
224
+ @patch("litellm.get_model_info")
187
225
  @patch("litellm.token_counter")
188
- def test_count_context_with_tools(self, mock_token_counter, mock_get_max_tokens):
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
- mock_get_max_tokens.return_value = 8192
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.get_max_tokens")
246
+ @patch("litellm.get_model_info")
209
247
  @patch("litellm.token_counter")
210
- def test_count_context_empty_system(self, mock_token_counter, mock_get_max_tokens):
248
+ def test_count_context_empty_system(self, mock_token_counter, mock_get_model_info):
211
249
  mock_token_counter.return_value = 50
212
- mock_get_max_tokens.return_value = 4096
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.get_max_tokens")
265
+ @patch("litellm.get_model_info")
228
266
  @patch("litellm.token_counter")
229
- def test_count_context_no_max_tokens(self, mock_token_counter, mock_get_max_tokens):
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
- mock_get_max_tokens.return_value = None # Unknown model
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.get_max_tokens")
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, mock_get_max_tokens):
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
- mock_get_max_tokens.return_value = 0 # Edge case: max_tokens = 0
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.get_max_tokens")
322
+ @patch("litellm.get_model_info")
285
323
  @patch("litellm.token_counter")
286
- def test_count_context_empty_history(self, mock_token_counter, mock_get_max_tokens):
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
- mock_get_max_tokens.return_value = 4096
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(
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "atomic-agents"
7
- version = "2.7.1"
7
+ version = "2.7.4"
8
8
  description = "A versatile framework for creating and managing intelligent agents."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -194,7 +194,7 @@ wheels = [
194
194
 
195
195
  [[package]]
196
196
  name = "atomic-agents"
197
- version = "2.7.1"
197
+ version = "2.7.4"
198
198
  source = { editable = "." }
199
199
  dependencies = [
200
200
  { name = "gitpython" },
File without changes
File without changes
File without changes
File without changes
File without changes