autobyteus 1.1.5__tar.gz → 1.1.7__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.
- autobyteus-1.1.7/PKG-INFO +204 -0
- autobyteus-1.1.7/README.md +134 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/context/agent_config.py +6 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/context/agent_runtime_state.py +7 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +30 -7
- autobyteus-1.1.7/autobyteus/agent/handlers/tool_result_event_handler.py +141 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/user_input_message_event_handler.py +22 -25
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +7 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/__init__.py +7 -5
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/agent_input_user_message.py +6 -16
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/context_file.py +24 -24
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/context_file_type.py +29 -8
- autobyteus-1.1.7/autobyteus/agent/message/multimodal_message_builder.py +47 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/streaming/stream_event_payloads.py +23 -4
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +6 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/tool_invocation.py +27 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/agent_team_builder.py +22 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +9 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/context/agent_team_config.py +1 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/context/agent_team_runtime_state.py +0 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/autobyteus_llm.py +33 -33
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/bedrock_llm.py +13 -5
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/claude_llm.py +13 -27
- autobyteus-1.1.7/autobyteus/llm/api/gemini_llm.py +151 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/groq_llm.py +4 -3
- autobyteus-1.1.7/autobyteus/llm/api/mistral_llm.py +171 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/nvidia_llm.py +6 -5
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/ollama_llm.py +37 -12
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/openai_compatible_llm.py +91 -91
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/autobyteus_provider.py +1 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/base_llm.py +42 -139
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/extensions/base_extension.py +6 -6
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/extensions/token_usage_tracking_extension.py +3 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/llm_factory.py +131 -61
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/ollama_provider_resolver.py +1 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/providers.py +1 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/token_counter_factory.py +3 -1
- autobyteus-1.1.7/autobyteus/llm/user_message.py +81 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/llm_config.py +34 -18
- autobyteus-1.1.7/autobyteus/llm/utils/media_payload_formatter.py +99 -0
- autobyteus-1.1.7/autobyteus/llm/utils/messages.py +47 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/response_types.py +9 -3
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/token_usage.py +6 -5
- autobyteus-1.1.7/autobyteus/multimedia/__init__.py +31 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/__init__.py +11 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/api/__init__.py +4 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/api/autobyteus_audio_client.py +59 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/api/gemini_audio_client.py +219 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/audio_client_factory.py +120 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/audio_model.py +97 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/autobyteus_audio_provider.py +108 -0
- autobyteus-1.1.7/autobyteus/multimedia/audio/base_audio_client.py +40 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/__init__.py +11 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/api/__init__.py +9 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/api/autobyteus_image_client.py +97 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/api/gemini_image_client.py +188 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/api/openai_image_client.py +142 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/autobyteus_image_provider.py +109 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/base_image_client.py +67 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/image_client_factory.py +118 -0
- autobyteus-1.1.7/autobyteus/multimedia/image/image_model.py +97 -0
- autobyteus-1.1.7/autobyteus/multimedia/providers.py +5 -0
- autobyteus-1.1.7/autobyteus/multimedia/runtimes.py +8 -0
- autobyteus-1.1.7/autobyteus/multimedia/utils/__init__.py +10 -0
- autobyteus-1.1.7/autobyteus/multimedia/utils/api_utils.py +19 -0
- autobyteus-1.1.7/autobyteus/multimedia/utils/multimedia_config.py +29 -0
- autobyteus-1.1.7/autobyteus/multimedia/utils/response_types.py +13 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/tools/publish_task_plan.py +4 -16
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/tools/update_task_status.py +4 -19
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/__init__.py +5 -4
- autobyteus-1.1.7/autobyteus/tools/base_tool.py +183 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/__init__.py +0 -1
- autobyteus-1.1.7/autobyteus/tools/google_search.py +149 -0
- autobyteus-1.1.7/autobyteus/tools/mcp/schema_mapper.py +89 -0
- autobyteus-1.1.7/autobyteus/tools/multimedia/__init__.py +8 -0
- autobyteus-1.1.7/autobyteus/tools/multimedia/audio_tools.py +116 -0
- autobyteus-1.1.7/autobyteus/tools/multimedia/image_tools.py +186 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/parameter_schema.py +82 -89
- autobyteus-1.1.7/autobyteus/tools/pydantic_schema_converter.py +81 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/tool_category.py +1 -0
- autobyteus-1.1.7/autobyteus/tools/usage/formatters/default_json_example_formatter.py +186 -0
- autobyteus-1.1.7/autobyteus/tools/usage/formatters/default_xml_example_formatter.py +149 -0
- autobyteus-1.1.7/autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +76 -0
- autobyteus-1.1.7/autobyteus/tools/usage/formatters/gemini_json_example_formatter.py +73 -0
- autobyteus-1.1.7/autobyteus/tools/usage/formatters/google_json_example_formatter.py +74 -0
- autobyteus-1.1.7/autobyteus/tools/usage/formatters/openai_json_example_formatter.py +81 -0
- autobyteus-1.1.7/autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +302 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +5 -2
- autobyteus-1.1.7/autobyteus/tools/usage/providers/tool_manifest_provider.py +102 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/registries/tool_formatting_registry.py +9 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/registries/tool_usage_parser_registry.py +9 -2
- autobyteus-1.1.7/autobyteus.egg-info/PKG-INFO +204 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus.egg-info/SOURCES.txt +31 -4
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus.egg-info/requires.txt +8 -8
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_browser_agent.py +1 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_google_slides_agent.py +2 -2
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_mcp_google_slides_client.py +1 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_sqlite_agent.py +1 -1
- {autobyteus-1.1.5 → autobyteus-1.1.7}/setup.py +9 -9
- autobyteus-1.1.5/PKG-INFO +0 -161
- autobyteus-1.1.5/README.md +0 -91
- autobyteus-1.1.5/autobyteus/agent/handlers/tool_result_event_handler.py +0 -129
- autobyteus-1.1.5/autobyteus/llm/api/gemini_llm.py +0 -85
- autobyteus-1.1.5/autobyteus/llm/api/mistral_llm.py +0 -125
- autobyteus-1.1.5/autobyteus/llm/user_message.py +0 -73
- autobyteus-1.1.5/autobyteus/llm/utils/image_payload_formatter.py +0 -89
- autobyteus-1.1.5/autobyteus/llm/utils/messages.py +0 -40
- autobyteus-1.1.5/autobyteus/tools/ask_user_input.py +0 -40
- autobyteus-1.1.5/autobyteus/tools/base_tool.py +0 -114
- autobyteus-1.1.5/autobyteus/tools/browser/standalone/factory/google_search_factory.py +0 -25
- autobyteus-1.1.5/autobyteus/tools/browser/standalone/google_search_ui.py +0 -126
- autobyteus-1.1.5/autobyteus/tools/mcp/schema_mapper.py +0 -131
- autobyteus-1.1.5/autobyteus/tools/usage/formatters/default_json_example_formatter.py +0 -117
- autobyteus-1.1.5/autobyteus/tools/usage/formatters/default_xml_example_formatter.py +0 -75
- autobyteus-1.1.5/autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +0 -46
- autobyteus-1.1.5/autobyteus/tools/usage/formatters/gemini_json_example_formatter.py +0 -40
- autobyteus-1.1.5/autobyteus/tools/usage/formatters/google_json_example_formatter.py +0 -41
- autobyteus-1.1.5/autobyteus/tools/usage/formatters/openai_json_example_formatter.py +0 -51
- autobyteus-1.1.5/autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -126
- autobyteus-1.1.5/autobyteus/tools/usage/providers/tool_manifest_provider.py +0 -75
- autobyteus-1.1.5/autobyteus.egg-info/PKG-INFO +0 -161
- {autobyteus-1.1.5 → autobyteus-1.1.7}/LICENSE +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/agent.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/context/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/context/agent_context.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/context/agent_context_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/events/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/events/agent_events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/events/agent_input_event_queue_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/events/notifiers.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/events/worker_event_dispatcher.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/exceptions.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/factory/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/factory/agent_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/base_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/event_handler_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/generic_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/inter_agent_message_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/lifecycle_event_logger.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/handlers/tool_invocation_request_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/hooks/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/hooks/base_phase_hook.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/hooks/hook_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/hooks/hook_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/hooks/hook_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/input_processor/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/input_processor/base_user_input_processor.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/input_processor/processor_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/input_processor/processor_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/input_processor/processor_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/llm_response_processor/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/llm_response_processor/base_processor.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/llm_response_processor/processor_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/llm_response_processor/processor_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/llm_response_processor/processor_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/inter_agent_message.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/inter_agent_message_type.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/message/send_message_to.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/phases/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/phases/discover.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/phases/manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/phases/phase_enum.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/phases/transition_decorator.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/phases/transition_info.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/remote_agent.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/runtime/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/runtime/agent_runtime.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/runtime/agent_thread_pool_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/runtime/agent_worker.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/sender_type.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/shutdown_steps/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/shutdown_steps/base_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/shutdown_steps/llm_instance_cleanup_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/shutdown_steps/mcp_server_cleanup_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/streaming/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/streaming/agent_event_stream.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/streaming/queue_streamer.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/streaming/stream_events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/system_prompt_processor/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/system_prompt_processor/base_processor.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/system_prompt_processor/processor_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/system_prompt_processor/processor_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/system_prompt_processor/processor_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/tool_execution_result_processor/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/tool_execution_result_processor/base_processor.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/tool_execution_result_processor/processor_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/tool_execution_result_processor/processor_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/tool_execution_result_processor/processor_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/utils/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/utils/wait_for_idle.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/workspace/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/workspace/base_workspace.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/workspace/workspace_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/workspace/workspace_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/workspace/workspace_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent/workspace/workspace_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/agent_team.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/base_agent_team.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/context/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/context/agent_team_context.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/context/team_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/context/team_node_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/events/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/events/agent_team_event_dispatcher.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/events/agent_team_events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/events/agent_team_input_event_queue_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/exceptions.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/factory/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/factory/agent_team_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/agent_team_event_handler_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/base_agent_team_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/process_user_message_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/phases/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/runtime/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/runtime/agent_team_runtime.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/runtime/agent_team_worker.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/shutdown_steps/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/shutdown_steps/agent_team_shutdown_orchestrator.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/shutdown_steps/agent_team_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/shutdown_steps/base_agent_team_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/shutdown_steps/bridge_cleanup_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/shutdown_steps/sub_team_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/agent_event_bridge.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/agent_event_multiplexer.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/agent_team_event_notifier.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/agent_team_event_stream.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/agent_team_stream_events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/streaming/team_event_bridge.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/task_notification/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/task_notification/system_event_driven_agent_task_notifier.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/task_notification/task_notification_mode.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/utils/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/agent_team/utils/wait_for_idle.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/check_requirements.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_cli.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/app.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/state.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/focus_pane.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/logo.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/renderables.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/shared.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/status_bar.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/agent_team_tui/widgets/task_board_panel.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/cli_display.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/app.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/state.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/focus_pane.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/logo.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/renderables.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/shared.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/cli/workflow_tui/widgets/status_bar.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/events/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/events/event_emitter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/events/event_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/events/event_types.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/deepseek_llm.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/grok_llm.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/kimi_llm.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/lmstudio_llm.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/api/openai_llm.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/extensions/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/extensions/extension_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/lmstudio_provider.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/models.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/ollama_provider.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/runtimes.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/base_token_counter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/claude_token_counter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/deepseek_token_counter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/kimi_token_counter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/mistral_token_counter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/token_counter/openai_token_counter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/rate_limiter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/token_pricing_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/llm/utils/token_usage_tracker.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/person/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/person/examples/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/person/examples/sample_persons.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/person/examples/sample_roles.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/person/person.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/person/role.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/prompt/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/prompt/prompt_builder.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/prompt/prompt_template.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/client/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/client/abstract_client_connection.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/client/client_connection_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/client/sse_client_connection.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/client/stdio_client_connection.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/config/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/config/agent_server_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/config/agent_server_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/hosting.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/protocol.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server/agent_server_endpoint.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server/base_method_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server/method_handlers.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server/sse_server_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server/stdio_server_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/server_main.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/rpc/transport_type.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/base_task_board.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/converters/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/converters/task_board_converter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/converters/task_plan_converter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/deliverable.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/deliverables/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/deliverables/file_deliverable.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/in_memory_task_board.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/schemas/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/schemas/deliverable_schema.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/schemas/plan_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/schemas/task_status_report.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/task_plan.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/tools/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/task_management/tools/get_task_board_status.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/bash/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/bash/bash_executor.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/factory/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/session_aware/web_element_action.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/navigate_to.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/webpage_reader.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/factory/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/factory/tool_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/file/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/file/file_reader.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/file/file_writer.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/functional_tool.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/handlers/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/handlers/shell_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/image_downloader.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/config_service.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/server/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/server/base_managed_mcp_server.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/server/http_managed_mcp_server.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/server/proxy.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/server/stdio_managed_mcp_server.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/server_instance_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/tool.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/tool_registrar.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/mcp/types.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/operation/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/operation/file_operation.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/operation/file_rename_operation.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/operation/operation.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/operation/shell_operation.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/pdf_downloader.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/registry/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/registry/tool_definition.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/registry/tool_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/timer.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/tool_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/tool_meta.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/tool_origin.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/tool_state.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/anthropic_json_example_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/anthropic_json_schema_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/base_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/default_json_schema_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/gemini_json_schema_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/google_json_schema_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/formatters/openai_json_schema_formatter.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/_json_extractor.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/base_parser.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/exceptions.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/providers/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/registries/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/usage/registries/tool_formatter_pair.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/tools/utils.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/utils/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/utils/dynamic_enum.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/utils/file_utils.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/utils/html_cleaner.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/utils/singleton.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/agentic_workflow.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/base_agentic_workflow.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/context/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/context/team_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/context/workflow_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/context/workflow_context.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/context/workflow_node_config.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/context/workflow_runtime_state.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/events/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/events/workflow_event_dispatcher.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/events/workflow_events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/events/workflow_input_event_queue_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/exceptions.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/factory/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/factory/workflow_factory.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/base_workflow_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/inter_agent_message_request_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/process_user_message_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/handlers/workflow_event_handler_registry.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/phases/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/phases/workflow_operational_phase.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/phases/workflow_phase_manager.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/runtime/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/runtime/workflow_runtime.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/runtime/workflow_worker.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/shutdown_steps/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/shutdown_steps/agent_team_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/shutdown_steps/base_workflow_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/shutdown_steps/bridge_cleanup_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/shutdown_steps/sub_workflow_shutdown_step.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/shutdown_steps/workflow_shutdown_orchestrator.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/agent_event_bridge.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/agent_event_multiplexer.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/workflow_event_bridge.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/workflow_event_notifier.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/workflow_event_stream.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/workflow_stream_event_payloads.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/streaming/workflow_stream_events.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/utils/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/utils/wait_for_idle.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus/workflow/workflow_builder.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus.egg-info/dependency_links.txt +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/autobyteus.egg-info/top_level.txt +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/agent_team/__init__.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/discover_phase_transitions.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_mcp_browser_client.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_mcp_list_tools.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/examples/run_poem_writer.py +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/pyproject.toml +0 -0
- {autobyteus-1.1.5 → autobyteus-1.1.7}/setup.cfg +0 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: autobyteus
|
|
3
|
+
Version: 1.1.7
|
|
4
|
+
Summary: Multi-Agent framework
|
|
5
|
+
Home-page: https://github.com/AutoByteus/autobyteus
|
|
6
|
+
Author: Ryan Zheng
|
|
7
|
+
Author-email: ryan.zheng.work@gmail.com
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Requires-Python: >=3.8
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: aiohttp
|
|
18
|
+
Requires-Dist: anthropic
|
|
19
|
+
Requires-Dist: autobyteus-llm-client==1.1.3
|
|
20
|
+
Requires-Dist: beautifulsoup4
|
|
21
|
+
Requires-Dist: boto3
|
|
22
|
+
Requires-Dist: botocore
|
|
23
|
+
Requires-Dist: brui-core==1.0.9
|
|
24
|
+
Requires-Dist: certifi==2025.4.26
|
|
25
|
+
Requires-Dist: google-api-python-client
|
|
26
|
+
Requires-Dist: google-generativeai
|
|
27
|
+
Requires-Dist: Jinja2
|
|
28
|
+
Requires-Dist: mcp[cli]
|
|
29
|
+
Requires-Dist: mistral_common
|
|
30
|
+
Requires-Dist: mistralai
|
|
31
|
+
Requires-Dist: numpy
|
|
32
|
+
Requires-Dist: ollama
|
|
33
|
+
Requires-Dist: openai
|
|
34
|
+
Requires-Dist: requests
|
|
35
|
+
Requires-Dist: rich
|
|
36
|
+
Requires-Dist: textual
|
|
37
|
+
Requires-Dist: tiktoken
|
|
38
|
+
Requires-Dist: tokenizers
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: coverage; extra == "dev"
|
|
41
|
+
Requires-Dist: flake8; extra == "dev"
|
|
42
|
+
Requires-Dist: numpy; extra == "dev"
|
|
43
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
44
|
+
Requires-Dist: black; extra == "dev"
|
|
45
|
+
Requires-Dist: isort; extra == "dev"
|
|
46
|
+
Requires-Dist: gitpython==3.1.31; extra == "dev"
|
|
47
|
+
Requires-Dist: auto-gpt-plugin-template; extra == "dev"
|
|
48
|
+
Requires-Dist: mkdocs; extra == "dev"
|
|
49
|
+
Requires-Dist: pytest; extra == "dev"
|
|
50
|
+
Requires-Dist: asynctest; extra == "dev"
|
|
51
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
52
|
+
Requires-Dist: pytest-benchmark; extra == "dev"
|
|
53
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
54
|
+
Requires-Dist: pytest-integration; extra == "dev"
|
|
55
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
56
|
+
Requires-Dist: vcrpy; extra == "dev"
|
|
57
|
+
Requires-Dist: pytest-vcr; extra == "dev"
|
|
58
|
+
Requires-Dist: load_dotenv; extra == "dev"
|
|
59
|
+
Dynamic: author
|
|
60
|
+
Dynamic: author-email
|
|
61
|
+
Dynamic: classifier
|
|
62
|
+
Dynamic: description
|
|
63
|
+
Dynamic: description-content-type
|
|
64
|
+
Dynamic: home-page
|
|
65
|
+
Dynamic: license-file
|
|
66
|
+
Dynamic: provides-extra
|
|
67
|
+
Dynamic: requires-dist
|
|
68
|
+
Dynamic: requires-python
|
|
69
|
+
Dynamic: summary
|
|
70
|
+
|
|
71
|
+
# Autobyteus
|
|
72
|
+
|
|
73
|
+
Autobyteus is an open-source, application-first agentic framework for Python. It is designed to help developers build, test, and deploy complex, stateful, and extensible AI agents by providing a robust architecture and a powerful set of tools.
|
|
74
|
+
|
|
75
|
+

|
|
76
|
+
|
|
77
|
+
## Architecture
|
|
78
|
+
|
|
79
|
+
Autobyteus is built with a modular, event-driven architecture designed for extensibility and clear separation of concerns. The key components are:
|
|
80
|
+
|
|
81
|
+
- **Agent Core**: The heart of the system. Each agent is a stateful, autonomous entity that runs as a background process in its own thread, managed by a dedicated `AgentWorker`. This design makes every agent a truly independent entity capable of handling long-running tasks.
|
|
82
|
+
- **Agent Teams**: The framework provides powerful constructs for building hierarchical multi-agent systems. The `AgentTeam` module allows you to compose teams of individual agents and even nest teams within other teams, enabling sophisticated, real-world organizational structures and delegation patterns.
|
|
83
|
+
- **Context & Configuration**: Agent behavior is defined through a static configuration (`AgentConfig`) and its dynamic state is managed in `AgentRuntimeState`. These are bundled into a comprehensive `AgentContext` that is passed to all components, providing a single source of truth.
|
|
84
|
+
- **Event-Driven System**: Agents operate on an internal `asyncio` event loop. User messages, tool results, and internal signals are handled as events, which are processed by dedicated `EventHandlers`. This decouples logic and makes the system highly extensible.
|
|
85
|
+
- **Pluggable Processors & Hooks**: The framework provides a chain of extension points to inject custom logic at every major step of an agent's reasoning loop. This architecture powers features like flexible tool format parsing. You can customize behavior by implementing:
|
|
86
|
+
- **`InputProcessors`**: To modify or enrich user messages *before* they are sent to the LLM.
|
|
87
|
+
- **`LLMResponseProcessors`**: To parse the LLM's raw output and extract structured actions, such as tool calls.
|
|
88
|
+
- **`ToolExecutionResultProcessors`**: To modify the result from a tool *before* it is sent back to the LLM for the next step of reasoning.
|
|
89
|
+
- **`PhaseHooks`**: To run custom code on specific agent lifecycle transitions (e.g., when an agent becomes `IDLE`).
|
|
90
|
+
- **Context-Aware Tooling**: Tools are first-class citizens that receive the agent's full `AgentContext` during execution. This allows tools to be deeply integrated with the agent's state, configuration, and workspace, enabling more intelligent and powerful actions.
|
|
91
|
+
- **Tool Approval Flow**: The framework has native support for human-in-the-loop workflows. By setting `auto_execute_tools=False` in the agent's configuration, the agent will pause before executing a tool, emit an event requesting permission, and wait for external approval before proceeding.
|
|
92
|
+
- **MCP Integration**: The framework has native support for the Model Context Protocol (MCP). This allows agents to discover and use tools from external, language-agnostic tool servers, making the ecosystem extremely flexible and ready for enterprise integration.
|
|
93
|
+
|
|
94
|
+
## Key Features
|
|
95
|
+
|
|
96
|
+
#### 📊 Interactive TUI Dashboard
|
|
97
|
+
Launch and monitor your agent teams with our built-in Textual-based TUI.
|
|
98
|
+
- **Hierarchical View**: See the structure of your team, including sub-teams and their agents.
|
|
99
|
+
- **Real-Time Status**: Agent and team statuses are updated live, showing you who is idle, thinking, or executing a tool.
|
|
100
|
+
- **Detailed Logs**: Select any agent to view a detailed, streaming log of their thoughts, actions, and tool interactions.
|
|
101
|
+
- **Live Task Board**: Watch your team's `TaskBoard` update in real-time as the coordinator publishes a plan and agents complete their tasks.
|
|
102
|
+
|
|
103
|
+
| TUI - Detailed Agent Log | TUI - Task Board with Completed Task |
|
|
104
|
+
| :---: | :---: |
|
|
105
|
+
|  |  |
|
|
106
|
+
|
|
107
|
+
#### 🏗️ Fluent Team Building
|
|
108
|
+
Define complex agent and team structures with an intuitive, fluent API. The `AgentTeamBuilder` makes composing your team simple and readable.
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
# --- From the Multi-Researcher Team Example ---
|
|
112
|
+
research_team = (
|
|
113
|
+
AgentTeamBuilder(
|
|
114
|
+
name="MultiSpecialistResearchTeam",
|
|
115
|
+
description="A team for delegating to multiple specialists."
|
|
116
|
+
)
|
|
117
|
+
.set_coordinator(coordinator_config)
|
|
118
|
+
.add_agent_node(researcher_web_config)
|
|
119
|
+
.add_agent_node(researcher_db_config)
|
|
120
|
+
.build()
|
|
121
|
+
)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
#### 🔁 Flexible Tool Formatting (JSON & XML)
|
|
125
|
+
Autobyteus intelligently handles tool communication with LLMs while giving you full control.
|
|
126
|
+
- **Provider-Aware by Default**: The framework automatically generates tool manifests and parses responses in the optimal format for the selected LLM provider (e.g., JSON for OpenAI/Gemini, XML for Anthropic).
|
|
127
|
+
- **XML Override for Efficiency**: You can set `use_xml_tool_format=True` on an `AgentConfig` or `AgentTeamBuilder` to force the use of XML for tool calls, which can be more efficient and reliable than JSON for complex tool schemas.
|
|
128
|
+
|
|
129
|
+
#### 📈 Flexible Communication Protocols
|
|
130
|
+
Choose the collaboration pattern that best fits your use case with configurable `TaskNotificationMode`s.
|
|
131
|
+
- **`AGENT_MANUAL_NOTIFICATION` (Default)**: A traditional approach where a coordinator agent is responsible for creating a plan and then explicitly notifying other agents to begin their work via messages.
|
|
132
|
+
- **`SYSTEM_EVENT_DRIVEN`**: A more automated approach where the coordinator's only job is to publish a plan to the `TaskBoard`. The framework then monitors the board and automatically notifies agents when their tasks become unblocked, enabling parallel execution and reducing coordinator overhead.
|
|
133
|
+
|
|
134
|
+
## Requirements
|
|
135
|
+
|
|
136
|
+
- **Python Version**: Python 3.11 is the recommended and tested version for this project. Using newer versions of Python may result in dependency conflicts when installing the required packages. For a stable and tested environment, please use Python 3.11.
|
|
137
|
+
|
|
138
|
+
## Getting Started
|
|
139
|
+
|
|
140
|
+
### Installation
|
|
141
|
+
|
|
142
|
+
1. **Clone the repository:**
|
|
143
|
+
```bash
|
|
144
|
+
git clone https://github.com/your-username/autobyteus.git
|
|
145
|
+
cd autobyteus
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
2. **For users:**
|
|
149
|
+
To install Autobyteus and its core dependencies:
|
|
150
|
+
```bash
|
|
151
|
+
pip install .
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
3. **For developers:**
|
|
155
|
+
To install Autobyteus with all development and example dependencies (including the TUI):
|
|
156
|
+
```bash
|
|
157
|
+
pip install -r requirements-dev.txt
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
4. **Set up Environment Variables:**
|
|
161
|
+
Create a `.env` file in the root of the project and add your LLM provider API keys:
|
|
162
|
+
```
|
|
163
|
+
# .env
|
|
164
|
+
OPENAI_API_KEY="sk-..."
|
|
165
|
+
KIMI_API_KEY="your-kimi-api-key"
|
|
166
|
+
# etc.
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Running the Examples
|
|
170
|
+
|
|
171
|
+
The best way to experience Autobyteus is to run one of the included examples. The event-driven software engineering team is a great showcase of the framework's capabilities.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Run the event-driven software engineering team example
|
|
175
|
+
python autobyteus/examples/agent_team/event_driven/run_software_engineering_team.py --llm-model gpt-4o
|
|
176
|
+
|
|
177
|
+
# Run the hierarchical debate team example
|
|
178
|
+
python autobyteus/examples/agent_team/manual_notification/run_debate_team.py --llm-model gpt-4-turbo
|
|
179
|
+
```
|
|
180
|
+
You can see all available models and their identifiers by running an example with the `--help-models` flag.
|
|
181
|
+
|
|
182
|
+
### Building the Library
|
|
183
|
+
|
|
184
|
+
To build Autobyteus as a distributable package, follow these steps:
|
|
185
|
+
|
|
186
|
+
1. Ensure you have the latest version of `setuptools` and `wheel` installed:
|
|
187
|
+
```
|
|
188
|
+
pip install --upgrade setuptools wheel
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
2. Build the distribution packages:
|
|
192
|
+
```
|
|
193
|
+
python setup.py sdist bdist_wheel
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
This will create a `dist` directory containing the built `sdist` and `wheel` distributions.
|
|
197
|
+
|
|
198
|
+
## Contributing
|
|
199
|
+
|
|
200
|
+
(Add guidelines for contributing to the project)
|
|
201
|
+
|
|
202
|
+
## License
|
|
203
|
+
|
|
204
|
+
This project is licensed under the MIT License.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Autobyteus
|
|
2
|
+
|
|
3
|
+
Autobyteus is an open-source, application-first agentic framework for Python. It is designed to help developers build, test, and deploy complex, stateful, and extensible AI agents by providing a robust architecture and a powerful set of tools.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
Autobyteus is built with a modular, event-driven architecture designed for extensibility and clear separation of concerns. The key components are:
|
|
10
|
+
|
|
11
|
+
- **Agent Core**: The heart of the system. Each agent is a stateful, autonomous entity that runs as a background process in its own thread, managed by a dedicated `AgentWorker`. This design makes every agent a truly independent entity capable of handling long-running tasks.
|
|
12
|
+
- **Agent Teams**: The framework provides powerful constructs for building hierarchical multi-agent systems. The `AgentTeam` module allows you to compose teams of individual agents and even nest teams within other teams, enabling sophisticated, real-world organizational structures and delegation patterns.
|
|
13
|
+
- **Context & Configuration**: Agent behavior is defined through a static configuration (`AgentConfig`) and its dynamic state is managed in `AgentRuntimeState`. These are bundled into a comprehensive `AgentContext` that is passed to all components, providing a single source of truth.
|
|
14
|
+
- **Event-Driven System**: Agents operate on an internal `asyncio` event loop. User messages, tool results, and internal signals are handled as events, which are processed by dedicated `EventHandlers`. This decouples logic and makes the system highly extensible.
|
|
15
|
+
- **Pluggable Processors & Hooks**: The framework provides a chain of extension points to inject custom logic at every major step of an agent's reasoning loop. This architecture powers features like flexible tool format parsing. You can customize behavior by implementing:
|
|
16
|
+
- **`InputProcessors`**: To modify or enrich user messages *before* they are sent to the LLM.
|
|
17
|
+
- **`LLMResponseProcessors`**: To parse the LLM's raw output and extract structured actions, such as tool calls.
|
|
18
|
+
- **`ToolExecutionResultProcessors`**: To modify the result from a tool *before* it is sent back to the LLM for the next step of reasoning.
|
|
19
|
+
- **`PhaseHooks`**: To run custom code on specific agent lifecycle transitions (e.g., when an agent becomes `IDLE`).
|
|
20
|
+
- **Context-Aware Tooling**: Tools are first-class citizens that receive the agent's full `AgentContext` during execution. This allows tools to be deeply integrated with the agent's state, configuration, and workspace, enabling more intelligent and powerful actions.
|
|
21
|
+
- **Tool Approval Flow**: The framework has native support for human-in-the-loop workflows. By setting `auto_execute_tools=False` in the agent's configuration, the agent will pause before executing a tool, emit an event requesting permission, and wait for external approval before proceeding.
|
|
22
|
+
- **MCP Integration**: The framework has native support for the Model Context Protocol (MCP). This allows agents to discover and use tools from external, language-agnostic tool servers, making the ecosystem extremely flexible and ready for enterprise integration.
|
|
23
|
+
|
|
24
|
+
## Key Features
|
|
25
|
+
|
|
26
|
+
#### 📊 Interactive TUI Dashboard
|
|
27
|
+
Launch and monitor your agent teams with our built-in Textual-based TUI.
|
|
28
|
+
- **Hierarchical View**: See the structure of your team, including sub-teams and their agents.
|
|
29
|
+
- **Real-Time Status**: Agent and team statuses are updated live, showing you who is idle, thinking, or executing a tool.
|
|
30
|
+
- **Detailed Logs**: Select any agent to view a detailed, streaming log of their thoughts, actions, and tool interactions.
|
|
31
|
+
- **Live Task Board**: Watch your team's `TaskBoard` update in real-time as the coordinator publishes a plan and agents complete their tasks.
|
|
32
|
+
|
|
33
|
+
| TUI - Detailed Agent Log | TUI - Task Board with Completed Task |
|
|
34
|
+
| :---: | :---: |
|
|
35
|
+
|  |  |
|
|
36
|
+
|
|
37
|
+
#### 🏗️ Fluent Team Building
|
|
38
|
+
Define complex agent and team structures with an intuitive, fluent API. The `AgentTeamBuilder` makes composing your team simple and readable.
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
# --- From the Multi-Researcher Team Example ---
|
|
42
|
+
research_team = (
|
|
43
|
+
AgentTeamBuilder(
|
|
44
|
+
name="MultiSpecialistResearchTeam",
|
|
45
|
+
description="A team for delegating to multiple specialists."
|
|
46
|
+
)
|
|
47
|
+
.set_coordinator(coordinator_config)
|
|
48
|
+
.add_agent_node(researcher_web_config)
|
|
49
|
+
.add_agent_node(researcher_db_config)
|
|
50
|
+
.build()
|
|
51
|
+
)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### 🔁 Flexible Tool Formatting (JSON & XML)
|
|
55
|
+
Autobyteus intelligently handles tool communication with LLMs while giving you full control.
|
|
56
|
+
- **Provider-Aware by Default**: The framework automatically generates tool manifests and parses responses in the optimal format for the selected LLM provider (e.g., JSON for OpenAI/Gemini, XML for Anthropic).
|
|
57
|
+
- **XML Override for Efficiency**: You can set `use_xml_tool_format=True` on an `AgentConfig` or `AgentTeamBuilder` to force the use of XML for tool calls, which can be more efficient and reliable than JSON for complex tool schemas.
|
|
58
|
+
|
|
59
|
+
#### 📈 Flexible Communication Protocols
|
|
60
|
+
Choose the collaboration pattern that best fits your use case with configurable `TaskNotificationMode`s.
|
|
61
|
+
- **`AGENT_MANUAL_NOTIFICATION` (Default)**: A traditional approach where a coordinator agent is responsible for creating a plan and then explicitly notifying other agents to begin their work via messages.
|
|
62
|
+
- **`SYSTEM_EVENT_DRIVEN`**: A more automated approach where the coordinator's only job is to publish a plan to the `TaskBoard`. The framework then monitors the board and automatically notifies agents when their tasks become unblocked, enabling parallel execution and reducing coordinator overhead.
|
|
63
|
+
|
|
64
|
+
## Requirements
|
|
65
|
+
|
|
66
|
+
- **Python Version**: Python 3.11 is the recommended and tested version for this project. Using newer versions of Python may result in dependency conflicts when installing the required packages. For a stable and tested environment, please use Python 3.11.
|
|
67
|
+
|
|
68
|
+
## Getting Started
|
|
69
|
+
|
|
70
|
+
### Installation
|
|
71
|
+
|
|
72
|
+
1. **Clone the repository:**
|
|
73
|
+
```bash
|
|
74
|
+
git clone https://github.com/your-username/autobyteus.git
|
|
75
|
+
cd autobyteus
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
2. **For users:**
|
|
79
|
+
To install Autobyteus and its core dependencies:
|
|
80
|
+
```bash
|
|
81
|
+
pip install .
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
3. **For developers:**
|
|
85
|
+
To install Autobyteus with all development and example dependencies (including the TUI):
|
|
86
|
+
```bash
|
|
87
|
+
pip install -r requirements-dev.txt
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
4. **Set up Environment Variables:**
|
|
91
|
+
Create a `.env` file in the root of the project and add your LLM provider API keys:
|
|
92
|
+
```
|
|
93
|
+
# .env
|
|
94
|
+
OPENAI_API_KEY="sk-..."
|
|
95
|
+
KIMI_API_KEY="your-kimi-api-key"
|
|
96
|
+
# etc.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Running the Examples
|
|
100
|
+
|
|
101
|
+
The best way to experience Autobyteus is to run one of the included examples. The event-driven software engineering team is a great showcase of the framework's capabilities.
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Run the event-driven software engineering team example
|
|
105
|
+
python autobyteus/examples/agent_team/event_driven/run_software_engineering_team.py --llm-model gpt-4o
|
|
106
|
+
|
|
107
|
+
# Run the hierarchical debate team example
|
|
108
|
+
python autobyteus/examples/agent_team/manual_notification/run_debate_team.py --llm-model gpt-4-turbo
|
|
109
|
+
```
|
|
110
|
+
You can see all available models and their identifiers by running an example with the `--help-models` flag.
|
|
111
|
+
|
|
112
|
+
### Building the Library
|
|
113
|
+
|
|
114
|
+
To build Autobyteus as a distributable package, follow these steps:
|
|
115
|
+
|
|
116
|
+
1. Ensure you have the latest version of `setuptools` and `wheel` installed:
|
|
117
|
+
```
|
|
118
|
+
pip install --upgrade setuptools wheel
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
2. Build the distribution packages:
|
|
122
|
+
```
|
|
123
|
+
python setup.py sdist bdist_wheel
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
This will create a `dist` directory containing the built `sdist` and `wheel` distributions.
|
|
127
|
+
|
|
128
|
+
## Contributing
|
|
129
|
+
|
|
130
|
+
(Add guidelines for contributing to the project)
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
This project is licensed under the MIT License.
|
|
@@ -37,6 +37,7 @@ class AgentConfig:
|
|
|
37
37
|
system_prompt: Optional[str] = None,
|
|
38
38
|
tools: Optional[List['BaseTool']] = None,
|
|
39
39
|
auto_execute_tools: bool = True,
|
|
40
|
+
use_xml_tool_format: bool = False,
|
|
40
41
|
input_processors: Optional[List['BaseAgentUserInputMessageProcessor']] = None,
|
|
41
42
|
llm_response_processors: Optional[List['BaseLLMResponseProcessor']] = None,
|
|
42
43
|
system_prompt_processors: Optional[List['BaseSystemPromptProcessor']] = None,
|
|
@@ -57,6 +58,8 @@ class AgentConfig:
|
|
|
57
58
|
llm_instance's config will be used as the base.
|
|
58
59
|
tools: An optional list of pre-initialized tool instances (subclasses of BaseTool).
|
|
59
60
|
auto_execute_tools: If True, the agent will execute tools without approval.
|
|
61
|
+
use_xml_tool_format: If True, forces the agent to use XML format for tool
|
|
62
|
+
definitions and parsing, overriding provider defaults.
|
|
60
63
|
input_processors: A list of input processor instances.
|
|
61
64
|
llm_response_processors: A list of LLM response processor instances.
|
|
62
65
|
system_prompt_processors: A list of system prompt processor instances.
|
|
@@ -74,6 +77,7 @@ class AgentConfig:
|
|
|
74
77
|
self.tools = tools or []
|
|
75
78
|
self.workspace = workspace
|
|
76
79
|
self.auto_execute_tools = auto_execute_tools
|
|
80
|
+
self.use_xml_tool_format = use_xml_tool_format
|
|
77
81
|
self.input_processors = input_processors or []
|
|
78
82
|
self.llm_response_processors = llm_response_processors if llm_response_processors is not None else list(self.DEFAULT_LLM_RESPONSE_PROCESSORS)
|
|
79
83
|
self.system_prompt_processors = system_prompt_processors if system_prompt_processors is not None else list(self.DEFAULT_SYSTEM_PROMPT_PROCESSORS)
|
|
@@ -81,7 +85,7 @@ class AgentConfig:
|
|
|
81
85
|
self.phase_hooks = phase_hooks or []
|
|
82
86
|
self.initial_custom_data = initial_custom_data
|
|
83
87
|
|
|
84
|
-
logger.debug(f"AgentConfig created for name '{self.name}', role '{self.role}'.")
|
|
88
|
+
logger.debug(f"AgentConfig created for name '{self.name}', role '{self.role}'. XML tool format override: {self.use_xml_tool_format}")
|
|
85
89
|
|
|
86
90
|
def copy(self) -> 'AgentConfig':
|
|
87
91
|
"""
|
|
@@ -98,6 +102,7 @@ class AgentConfig:
|
|
|
98
102
|
system_prompt=self.system_prompt,
|
|
99
103
|
tools=self.tools.copy(), # Shallow copy the list, but reference the original tool instances
|
|
100
104
|
auto_execute_tools=self.auto_execute_tools,
|
|
105
|
+
use_xml_tool_format=self.use_xml_tool_format,
|
|
101
106
|
input_processors=self.input_processors.copy(), # Shallow copy the list
|
|
102
107
|
llm_response_processors=self.llm_response_processors.copy(), # Shallow copy the list
|
|
103
108
|
system_prompt_processors=self.system_prompt_processors.copy(), # Shallow copy the list
|
|
@@ -16,6 +16,7 @@ from autobyteus.agent.tool_invocation import ToolInvocation
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
17
|
from autobyteus.agent.phases import AgentPhaseManager
|
|
18
18
|
from autobyteus.tools.base_tool import BaseTool
|
|
19
|
+
from autobyteus.agent.tool_invocation import ToolInvocationTurn
|
|
19
20
|
|
|
20
21
|
logger = logging.getLogger(__name__)
|
|
21
22
|
|
|
@@ -48,6 +49,9 @@ class AgentRuntimeState:
|
|
|
48
49
|
self.pending_tool_approvals: Dict[str, ToolInvocation] = {}
|
|
49
50
|
self.custom_data: Dict[str, Any] = custom_data or {}
|
|
50
51
|
|
|
52
|
+
# NEW: State for multi-tool call invocation turns, with a very explicit name.
|
|
53
|
+
self.active_multi_tool_call_turn: Optional['ToolInvocationTurn'] = None
|
|
54
|
+
|
|
51
55
|
self.processed_system_prompt: Optional[str] = None
|
|
52
56
|
# self.final_llm_config_for_creation removed
|
|
53
57
|
|
|
@@ -83,7 +87,9 @@ class AgentRuntimeState:
|
|
|
83
87
|
tools_status = f"{len(self.tool_instances)} Initialized" if self.tool_instances is not None else "Not Initialized"
|
|
84
88
|
input_queues_status = "Initialized" if self.input_event_queues else "Not Initialized"
|
|
85
89
|
# REMOVED output_queues_status from repr
|
|
90
|
+
active_turn_status = "Active" if self.active_multi_tool_call_turn else "Inactive"
|
|
86
91
|
return (f"AgentRuntimeState(agent_id='{self.agent_id}', current_phase='{phase_repr}', "
|
|
87
92
|
f"llm_status='{llm_status}', tools_status='{tools_status}', "
|
|
88
93
|
f"input_queues_status='{input_queues_status}', "
|
|
89
|
-
f"pending_approvals={len(self.pending_tool_approvals)}, history_len={len(self.conversation_history)}
|
|
94
|
+
f"pending_approvals={len(self.pending_tool_approvals)}, history_len={len(self.conversation_history)}, "
|
|
95
|
+
f"multi_tool_call_turn='{active_turn_status}')")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# file: autobyteus/autobyteus/agent/handlers/llm_user_message_ready_event_handler.py
|
|
2
2
|
import logging
|
|
3
3
|
import traceback
|
|
4
|
-
from typing import TYPE_CHECKING, cast, Optional
|
|
4
|
+
from typing import TYPE_CHECKING, cast, Optional, List
|
|
5
5
|
|
|
6
6
|
from autobyteus.agent.handlers.base_event_handler import AgentEventHandler
|
|
7
7
|
from autobyteus.agent.events import LLMUserMessageReadyEvent, LLMCompleteResponseReceivedEvent
|
|
@@ -53,6 +53,9 @@ class LLMUserMessageReadyEventHandler(AgentEventHandler):
|
|
|
53
53
|
complete_response_text = ""
|
|
54
54
|
complete_reasoning_text = ""
|
|
55
55
|
token_usage: Optional[TokenUsage] = None
|
|
56
|
+
complete_image_urls: List[str] = []
|
|
57
|
+
complete_audio_urls: List[str] = []
|
|
58
|
+
complete_video_urls: List[str] = []
|
|
56
59
|
|
|
57
60
|
notifier: Optional['AgentExternalEventNotifier'] = None
|
|
58
61
|
if context.phase_manager:
|
|
@@ -72,9 +75,19 @@ class LLMUserMessageReadyEventHandler(AgentEventHandler):
|
|
|
72
75
|
if chunk_response.reasoning:
|
|
73
76
|
complete_reasoning_text += chunk_response.reasoning
|
|
74
77
|
|
|
75
|
-
if chunk_response.is_complete
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
if chunk_response.is_complete:
|
|
79
|
+
if chunk_response.usage:
|
|
80
|
+
token_usage = chunk_response.usage
|
|
81
|
+
logger.debug(f"Agent '{agent_id}' received final chunk with token usage: {token_usage}")
|
|
82
|
+
if chunk_response.image_urls:
|
|
83
|
+
complete_image_urls.extend(chunk_response.image_urls)
|
|
84
|
+
logger.debug(f"Agent '{agent_id}' received final chunk with {len(chunk_response.image_urls)} image URLs.")
|
|
85
|
+
if chunk_response.audio_urls:
|
|
86
|
+
complete_audio_urls.extend(chunk_response.audio_urls)
|
|
87
|
+
logger.debug(f"Agent '{agent_id}' received final chunk with {len(chunk_response.audio_urls)} audio URLs.")
|
|
88
|
+
if chunk_response.video_urls:
|
|
89
|
+
complete_video_urls.extend(chunk_response.video_urls)
|
|
90
|
+
logger.debug(f"Agent '{agent_id}' received final chunk with {len(chunk_response.video_urls)} video URLs.")
|
|
78
91
|
|
|
79
92
|
if notifier:
|
|
80
93
|
try:
|
|
@@ -121,20 +134,30 @@ class LLMUserMessageReadyEventHandler(AgentEventHandler):
|
|
|
121
134
|
logger.info(f"Agent '{agent_id}' enqueued LLMCompleteResponseReceivedEvent with error details from LLMUserMessageReadyEventHandler.")
|
|
122
135
|
return
|
|
123
136
|
|
|
124
|
-
# Add message to history with reasoning
|
|
137
|
+
# Add message to history with reasoning and multimodal data
|
|
125
138
|
history_entry = {"role": "assistant", "content": complete_response_text}
|
|
126
139
|
if complete_reasoning_text:
|
|
127
140
|
history_entry["reasoning"] = complete_reasoning_text
|
|
141
|
+
if complete_image_urls:
|
|
142
|
+
history_entry["image_urls"] = complete_image_urls
|
|
143
|
+
if complete_audio_urls:
|
|
144
|
+
history_entry["audio_urls"] = complete_audio_urls
|
|
145
|
+
if complete_video_urls:
|
|
146
|
+
history_entry["video_urls"] = complete_video_urls
|
|
128
147
|
context.state.add_message_to_history(history_entry)
|
|
129
148
|
|
|
130
|
-
# Create complete response with reasoning
|
|
149
|
+
# Create complete response with reasoning and multimodal data
|
|
131
150
|
complete_response_obj = CompleteResponse(
|
|
132
151
|
content=complete_response_text,
|
|
133
152
|
reasoning=complete_reasoning_text,
|
|
134
|
-
usage=token_usage
|
|
153
|
+
usage=token_usage,
|
|
154
|
+
image_urls=complete_image_urls,
|
|
155
|
+
audio_urls=complete_audio_urls,
|
|
156
|
+
video_urls=complete_video_urls
|
|
135
157
|
)
|
|
136
158
|
llm_complete_event = LLMCompleteResponseReceivedEvent(
|
|
137
159
|
complete_response=complete_response_obj
|
|
138
160
|
)
|
|
139
161
|
await context.input_event_queues.enqueue_internal_system_event(llm_complete_event)
|
|
140
162
|
logger.info(f"Agent '{agent_id}' enqueued LLMCompleteResponseReceivedEvent from LLMUserMessageReadyEventHandler.")
|
|
163
|
+
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/agent/handlers/tool_result_event_handler.py
|
|
2
|
+
import logging
|
|
3
|
+
import json
|
|
4
|
+
from typing import TYPE_CHECKING, Optional, List
|
|
5
|
+
|
|
6
|
+
from autobyteus.agent.handlers.base_event_handler import AgentEventHandler
|
|
7
|
+
from autobyteus.agent.events import ToolResultEvent, LLMUserMessageReadyEvent
|
|
8
|
+
from autobyteus.llm.user_message import LLMUserMessage
|
|
9
|
+
from autobyteus.agent.tool_execution_result_processor import BaseToolExecutionResultProcessor
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from autobyteus.agent.context import AgentContext
|
|
13
|
+
from autobyteus.agent.events.notifiers import AgentExternalEventNotifier
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
class ToolResultEventHandler(AgentEventHandler):
|
|
18
|
+
"""
|
|
19
|
+
Handles ToolResultEvents. It immediately processes and notifies for each
|
|
20
|
+
individual tool result. If a multi-tool call turn is active, it accumulates
|
|
21
|
+
these processed results until the turn is complete, then sends a single
|
|
22
|
+
aggregated message to the LLM.
|
|
23
|
+
"""
|
|
24
|
+
def __init__(self):
|
|
25
|
+
logger.info("ToolResultEventHandler initialized.")
|
|
26
|
+
|
|
27
|
+
async def _dispatch_aggregated_results_to_llm(self,
|
|
28
|
+
processed_events: List[ToolResultEvent],
|
|
29
|
+
context: 'AgentContext'):
|
|
30
|
+
"""
|
|
31
|
+
Aggregates a list of PRE-PROCESSED tool results into a single message and
|
|
32
|
+
dispatches it to the LLM.
|
|
33
|
+
"""
|
|
34
|
+
agent_id = context.agent_id
|
|
35
|
+
|
|
36
|
+
# --- Aggregate results into a single message ---
|
|
37
|
+
aggregated_content_parts = []
|
|
38
|
+
for p_event in processed_events:
|
|
39
|
+
tool_invocation_id = p_event.tool_invocation_id if p_event.tool_invocation_id else 'N/A'
|
|
40
|
+
content_part: str
|
|
41
|
+
if p_event.error:
|
|
42
|
+
content_part = (
|
|
43
|
+
f"Tool: {p_event.tool_name} (ID: {tool_invocation_id})\n"
|
|
44
|
+
f"Status: Error\n"
|
|
45
|
+
f"Details: {p_event.error}"
|
|
46
|
+
)
|
|
47
|
+
else:
|
|
48
|
+
try:
|
|
49
|
+
result_str = json.dumps(p_event.result, indent=2) if not isinstance(p_event.result, str) else p_event.result
|
|
50
|
+
except TypeError: # pragma: no cover
|
|
51
|
+
result_str = str(p_event.result)
|
|
52
|
+
content_part = (
|
|
53
|
+
f"Tool: {p_event.tool_name} (ID: {tool_invocation_id})\n"
|
|
54
|
+
f"Status: Success\n"
|
|
55
|
+
f"Result:\n{result_str}"
|
|
56
|
+
)
|
|
57
|
+
aggregated_content_parts.append(content_part)
|
|
58
|
+
|
|
59
|
+
final_content_for_llm = (
|
|
60
|
+
"The following tool executions have completed. Please analyze their results and decide the next course of action.\n\n"
|
|
61
|
+
+ "\n\n---\n\n".join(aggregated_content_parts)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
logger.debug(f"Agent '{agent_id}' preparing aggregated message for LLM:\n---\n{final_content_for_llm}\n---")
|
|
65
|
+
llm_user_message = LLMUserMessage(content=final_content_for_llm)
|
|
66
|
+
|
|
67
|
+
next_event = LLMUserMessageReadyEvent(llm_user_message=llm_user_message)
|
|
68
|
+
await context.input_event_queues.enqueue_internal_system_event(next_event)
|
|
69
|
+
|
|
70
|
+
logger.info(f"Agent '{agent_id}' enqueued LLMUserMessageReadyEvent with aggregated results from {len(processed_events)} tool(s).")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
async def handle(self,
|
|
74
|
+
event: ToolResultEvent,
|
|
75
|
+
context: 'AgentContext') -> None:
|
|
76
|
+
if not isinstance(event, ToolResultEvent):
|
|
77
|
+
logger.warning(f"ToolResultEventHandler received non-ToolResultEvent: {type(event)}. Skipping.")
|
|
78
|
+
return
|
|
79
|
+
|
|
80
|
+
agent_id = context.agent_id
|
|
81
|
+
notifier: Optional['AgentExternalEventNotifier'] = context.phase_manager.notifier if context.phase_manager else None
|
|
82
|
+
|
|
83
|
+
# --- Step 1: Immediately process the incoming event ---
|
|
84
|
+
processed_event = event
|
|
85
|
+
processor_instances = context.config.tool_execution_result_processors
|
|
86
|
+
if processor_instances:
|
|
87
|
+
for processor_instance in processor_instances:
|
|
88
|
+
if not isinstance(processor_instance, BaseToolExecutionResultProcessor):
|
|
89
|
+
logger.error(f"Agent '{agent_id}': Invalid tool result processor type: {type(processor_instance)}. Skipping.")
|
|
90
|
+
continue
|
|
91
|
+
try:
|
|
92
|
+
processed_event = await processor_instance.process(processed_event, context)
|
|
93
|
+
except Exception as e:
|
|
94
|
+
logger.error(f"Agent '{agent_id}': Error applying tool result processor '{processor_instance.get_name()}': {e}", exc_info=True)
|
|
95
|
+
|
|
96
|
+
# --- Step 2: Immediately notify the result of this single tool call ---
|
|
97
|
+
tool_invocation_id = processed_event.tool_invocation_id if processed_event.tool_invocation_id else 'N/A'
|
|
98
|
+
if notifier:
|
|
99
|
+
log_message = ""
|
|
100
|
+
if processed_event.error:
|
|
101
|
+
log_message = f"[TOOL_RESULT_ERROR_PROCESSED] Agent_ID: {agent_id}, Tool: {processed_event.tool_name}, Invocation_ID: {tool_invocation_id}, Error: {processed_event.error}"
|
|
102
|
+
else:
|
|
103
|
+
log_message = f"[TOOL_RESULT_SUCCESS_PROCESSED] Agent_ID: {agent_id}, Tool: {processed_event.tool_name}, Invocation_ID: {tool_invocation_id}, Result: {str(processed_event.result)}"
|
|
104
|
+
|
|
105
|
+
try:
|
|
106
|
+
log_data = {
|
|
107
|
+
"log_entry": log_message,
|
|
108
|
+
"tool_invocation_id": tool_invocation_id,
|
|
109
|
+
"tool_name": processed_event.tool_name,
|
|
110
|
+
}
|
|
111
|
+
notifier.notify_agent_data_tool_log(log_data)
|
|
112
|
+
logger.debug(f"Agent '{agent_id}': Notified individual tool result for '{processed_event.tool_name}'.")
|
|
113
|
+
except Exception as e_notify:
|
|
114
|
+
logger.error(f"Agent '{agent_id}': Error notifying tool result log: {e_notify}", exc_info=True)
|
|
115
|
+
|
|
116
|
+
# --- Step 3: Manage the multi-tool call turn state ---
|
|
117
|
+
active_turn = context.state.active_multi_tool_call_turn
|
|
118
|
+
|
|
119
|
+
# Case 1: Not a multi-tool call turn, dispatch to LLM immediately.
|
|
120
|
+
if not active_turn:
|
|
121
|
+
logger.info(f"Agent '{agent_id}' handling single ToolResultEvent from tool: '{processed_event.tool_name}'.")
|
|
122
|
+
await self._dispatch_aggregated_results_to_llm([processed_event], context)
|
|
123
|
+
return
|
|
124
|
+
|
|
125
|
+
# Case 2: Multi-tool call turn is active, accumulate results.
|
|
126
|
+
active_turn.results.append(processed_event)
|
|
127
|
+
num_results = len(active_turn.results)
|
|
128
|
+
num_expected = len(active_turn.invocations)
|
|
129
|
+
logger.info(f"Agent '{agent_id}' handling ToolResultEvent for multi-tool call turn. "
|
|
130
|
+
f"Collected {num_results}/{num_expected} results.")
|
|
131
|
+
|
|
132
|
+
# If not all results are in, just wait for the next ToolResultEvent.
|
|
133
|
+
if not active_turn.is_complete():
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
# If all results are in, dispatch them to the LLM and clean up the turn state.
|
|
137
|
+
logger.info(f"Agent '{agent_id}': All tool results for the turn collected. Aggregating for LLM.")
|
|
138
|
+
await self._dispatch_aggregated_results_to_llm(active_turn.results, context)
|
|
139
|
+
|
|
140
|
+
context.state.active_multi_tool_call_turn = None
|
|
141
|
+
logger.info(f"Agent '{agent_id}': Multi-tool call turn state has been cleared.")
|