autobyteus 1.2.1__py3-none-any.whl → 1.2.3__py3-none-any.whl
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/agent/agent.py +15 -5
- autobyteus/agent/bootstrap_steps/__init__.py +1 -3
- autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +3 -59
- autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +1 -4
- autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +1 -3
- autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +16 -13
- autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
- autobyteus/agent/context/agent_config.py +43 -20
- autobyteus/agent/context/agent_context.py +23 -18
- autobyteus/agent/context/agent_runtime_state.py +19 -19
- autobyteus/agent/events/__init__.py +16 -1
- autobyteus/agent/events/agent_events.py +43 -3
- autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
- autobyteus/agent/events/event_store.py +57 -0
- autobyteus/agent/events/notifiers.py +69 -59
- autobyteus/agent/events/worker_event_dispatcher.py +21 -64
- autobyteus/agent/factory/agent_factory.py +52 -0
- autobyteus/agent/handlers/__init__.py +2 -0
- autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
- autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
- autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
- autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
- autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
- autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
- autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
- autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
- autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
- autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
- autobyteus/agent/input_processor/memory_ingest_input_processor.py +40 -0
- autobyteus/agent/lifecycle/__init__.py +12 -0
- autobyteus/agent/lifecycle/base_processor.py +109 -0
- autobyteus/agent/lifecycle/events.py +35 -0
- autobyteus/agent/lifecycle/processor_definition.py +36 -0
- autobyteus/agent/lifecycle/processor_registry.py +106 -0
- autobyteus/agent/llm_request_assembler.py +98 -0
- autobyteus/agent/llm_response_processor/__init__.py +1 -8
- autobyteus/agent/message/context_file_type.py +1 -1
- autobyteus/agent/runtime/agent_runtime.py +29 -21
- autobyteus/agent/runtime/agent_worker.py +98 -19
- autobyteus/agent/shutdown_steps/__init__.py +2 -0
- autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +2 -0
- autobyteus/agent/shutdown_steps/tool_cleanup_step.py +58 -0
- autobyteus/agent/status/__init__.py +14 -0
- autobyteus/agent/status/manager.py +93 -0
- autobyteus/agent/status/status_deriver.py +96 -0
- autobyteus/agent/{phases/phase_enum.py → status/status_enum.py} +16 -16
- autobyteus/agent/status/status_update_utils.py +73 -0
- autobyteus/agent/streaming/__init__.py +52 -5
- autobyteus/agent/streaming/adapters/__init__.py +18 -0
- autobyteus/agent/streaming/adapters/invocation_adapter.py +184 -0
- autobyteus/agent/streaming/adapters/tool_call_parsing.py +163 -0
- autobyteus/agent/streaming/adapters/tool_syntax_registry.py +67 -0
- autobyteus/agent/streaming/agent_event_stream.py +3 -183
- autobyteus/agent/streaming/api_tool_call/__init__.py +16 -0
- autobyteus/agent/streaming/api_tool_call/file_content_streamer.py +56 -0
- autobyteus/agent/streaming/api_tool_call/json_string_field_extractor.py +175 -0
- autobyteus/agent/streaming/api_tool_call_streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/events/__init__.py +6 -0
- autobyteus/agent/streaming/events/stream_event_payloads.py +284 -0
- autobyteus/agent/streaming/events/stream_events.py +141 -0
- autobyteus/agent/streaming/handlers/__init__.py +15 -0
- autobyteus/agent/streaming/handlers/api_tool_call_streaming_response_handler.py +303 -0
- autobyteus/agent/streaming/handlers/parsing_streaming_response_handler.py +107 -0
- autobyteus/agent/streaming/handlers/pass_through_streaming_response_handler.py +107 -0
- autobyteus/agent/streaming/handlers/streaming_handler_factory.py +177 -0
- autobyteus/agent/streaming/handlers/streaming_response_handler.py +58 -0
- autobyteus/agent/streaming/parser/__init__.py +61 -0
- autobyteus/agent/streaming/parser/event_emitter.py +181 -0
- autobyteus/agent/streaming/parser/events.py +4 -0
- autobyteus/agent/streaming/parser/invocation_adapter.py +4 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/__init__.py +19 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/base.py +32 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/default.py +34 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/gemini.py +31 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/openai.py +64 -0
- autobyteus/agent/streaming/parser/json_parsing_strategies/registry.py +75 -0
- autobyteus/agent/streaming/parser/parser_context.py +227 -0
- autobyteus/agent/streaming/parser/parser_factory.py +132 -0
- autobyteus/agent/streaming/parser/sentinel_format.py +7 -0
- autobyteus/agent/streaming/parser/state_factory.py +62 -0
- autobyteus/agent/streaming/parser/states/__init__.py +1 -0
- autobyteus/agent/streaming/parser/states/base_state.py +60 -0
- autobyteus/agent/streaming/parser/states/custom_xml_tag_run_bash_parsing_state.py +38 -0
- autobyteus/agent/streaming/parser/states/custom_xml_tag_write_file_parsing_state.py +55 -0
- autobyteus/agent/streaming/parser/states/delimited_content_state.py +146 -0
- autobyteus/agent/streaming/parser/states/json_initialization_state.py +144 -0
- autobyteus/agent/streaming/parser/states/json_tool_parsing_state.py +137 -0
- autobyteus/agent/streaming/parser/states/sentinel_content_state.py +30 -0
- autobyteus/agent/streaming/parser/states/sentinel_initialization_state.py +117 -0
- autobyteus/agent/streaming/parser/states/text_state.py +78 -0
- autobyteus/agent/streaming/parser/states/xml_patch_file_tool_parsing_state.py +328 -0
- autobyteus/agent/streaming/parser/states/xml_run_bash_tool_parsing_state.py +129 -0
- autobyteus/agent/streaming/parser/states/xml_tag_initialization_state.py +151 -0
- autobyteus/agent/streaming/parser/states/xml_tool_parsing_state.py +63 -0
- autobyteus/agent/streaming/parser/states/xml_write_file_tool_parsing_state.py +343 -0
- autobyteus/agent/streaming/parser/strategies/__init__.py +17 -0
- autobyteus/agent/streaming/parser/strategies/base.py +24 -0
- autobyteus/agent/streaming/parser/strategies/json_tool_strategy.py +26 -0
- autobyteus/agent/streaming/parser/strategies/registry.py +28 -0
- autobyteus/agent/streaming/parser/strategies/sentinel_strategy.py +23 -0
- autobyteus/agent/streaming/parser/strategies/xml_tag_strategy.py +21 -0
- autobyteus/agent/streaming/parser/stream_scanner.py +167 -0
- autobyteus/agent/streaming/parser/streaming_parser.py +212 -0
- autobyteus/agent/streaming/parser/tool_call_parsing.py +4 -0
- autobyteus/agent/streaming/parser/tool_constants.py +7 -0
- autobyteus/agent/streaming/parser/tool_syntax_registry.py +4 -0
- autobyteus/agent/streaming/parser/xml_tool_parsing_state_registry.py +55 -0
- autobyteus/agent/streaming/parsing_streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/pass_through_streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/queue_streamer.py +3 -57
- autobyteus/agent/streaming/segments/__init__.py +5 -0
- autobyteus/agent/streaming/segments/segment_events.py +81 -0
- autobyteus/agent/streaming/stream_event_payloads.py +2 -223
- autobyteus/agent/streaming/stream_events.py +3 -140
- autobyteus/agent/streaming/streaming_handler_factory.py +4 -0
- autobyteus/agent/streaming/streaming_response_handler.py +4 -0
- autobyteus/agent/streaming/streams/__init__.py +5 -0
- autobyteus/agent/streaming/streams/agent_event_stream.py +197 -0
- autobyteus/agent/streaming/utils/__init__.py +5 -0
- autobyteus/agent/streaming/utils/queue_streamer.py +59 -0
- autobyteus/agent/system_prompt_processor/__init__.py +2 -0
- autobyteus/agent/system_prompt_processor/available_skills_processor.py +96 -0
- autobyteus/agent/system_prompt_processor/base_processor.py +1 -1
- autobyteus/agent/system_prompt_processor/processor_meta.py +15 -2
- autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +39 -58
- autobyteus/agent/token_budget.py +56 -0
- autobyteus/agent/tool_execution_result_processor/memory_ingest_tool_result_processor.py +29 -0
- autobyteus/agent/tool_invocation.py +16 -40
- autobyteus/agent/tool_invocation_preprocessor/__init__.py +9 -0
- autobyteus/agent/tool_invocation_preprocessor/base_preprocessor.py +45 -0
- autobyteus/agent/tool_invocation_preprocessor/processor_definition.py +15 -0
- autobyteus/agent/tool_invocation_preprocessor/processor_meta.py +33 -0
- autobyteus/agent/tool_invocation_preprocessor/processor_registry.py +60 -0
- autobyteus/agent/utils/wait_for_idle.py +12 -14
- autobyteus/agent/workspace/base_workspace.py +6 -27
- autobyteus/agent_team/agent_team.py +3 -3
- autobyteus/agent_team/agent_team_builder.py +1 -41
- autobyteus/agent_team/bootstrap_steps/__init__.py +0 -4
- autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +8 -18
- autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +4 -16
- autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +1 -2
- autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +1 -2
- autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +1 -2
- autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +4 -4
- autobyteus/agent_team/context/agent_team_config.py +6 -3
- autobyteus/agent_team/context/agent_team_context.py +25 -3
- autobyteus/agent_team/context/agent_team_runtime_state.py +9 -6
- autobyteus/agent_team/events/__init__.py +11 -0
- autobyteus/agent_team/events/agent_team_event_dispatcher.py +22 -9
- autobyteus/agent_team/events/agent_team_events.py +16 -0
- autobyteus/agent_team/events/event_store.py +57 -0
- autobyteus/agent_team/factory/agent_team_factory.py +8 -0
- autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +18 -2
- autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +21 -5
- autobyteus/agent_team/handlers/process_user_message_event_handler.py +17 -8
- autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +19 -4
- autobyteus/agent_team/runtime/agent_team_runtime.py +41 -10
- autobyteus/agent_team/runtime/agent_team_worker.py +69 -5
- autobyteus/agent_team/status/__init__.py +14 -0
- autobyteus/agent_team/status/agent_team_status.py +18 -0
- autobyteus/agent_team/status/agent_team_status_manager.py +33 -0
- autobyteus/agent_team/status/status_deriver.py +62 -0
- autobyteus/agent_team/status/status_update_utils.py +42 -0
- autobyteus/agent_team/streaming/__init__.py +2 -2
- autobyteus/agent_team/streaming/agent_team_event_notifier.py +6 -6
- autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +4 -4
- autobyteus/agent_team/streaming/agent_team_stream_events.py +3 -3
- autobyteus/agent_team/system_prompt_processor/__init__.py +6 -0
- autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py +76 -0
- autobyteus/agent_team/task_notification/task_notification_mode.py +19 -0
- autobyteus/agent_team/utils/wait_for_idle.py +4 -4
- autobyteus/cli/agent_cli.py +18 -10
- autobyteus/cli/agent_team_tui/app.py +14 -11
- autobyteus/cli/agent_team_tui/state.py +13 -15
- autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
- autobyteus/cli/agent_team_tui/widgets/focus_pane.py +143 -36
- autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
- autobyteus/cli/agent_team_tui/widgets/shared.py +25 -25
- autobyteus/cli/cli_display.py +193 -44
- autobyteus/cli/workflow_tui/app.py +9 -10
- autobyteus/cli/workflow_tui/state.py +14 -16
- autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
- autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
- autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
- autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
- autobyteus/clients/autobyteus_client.py +94 -1
- autobyteus/events/event_types.py +11 -18
- autobyteus/llm/api/autobyteus_llm.py +33 -29
- autobyteus/llm/api/claude_llm.py +142 -36
- autobyteus/llm/api/gemini_llm.py +163 -59
- autobyteus/llm/api/grok_llm.py +1 -1
- autobyteus/llm/api/minimax_llm.py +26 -0
- autobyteus/llm/api/mistral_llm.py +113 -87
- autobyteus/llm/api/ollama_llm.py +9 -42
- autobyteus/llm/api/openai_compatible_llm.py +127 -91
- autobyteus/llm/api/openai_llm.py +3 -3
- autobyteus/llm/api/openai_responses_llm.py +324 -0
- autobyteus/llm/api/zhipu_llm.py +21 -2
- autobyteus/llm/autobyteus_provider.py +70 -60
- autobyteus/llm/base_llm.py +85 -81
- autobyteus/llm/converters/__init__.py +14 -0
- autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
- autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
- autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
- autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
- autobyteus/llm/extensions/base_extension.py +6 -12
- autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
- autobyteus/llm/llm_factory.py +282 -204
- autobyteus/llm/lmstudio_provider.py +60 -49
- autobyteus/llm/models.py +35 -2
- autobyteus/llm/ollama_provider.py +60 -49
- autobyteus/llm/ollama_provider_resolver.py +0 -1
- autobyteus/llm/prompt_renderers/__init__.py +19 -0
- autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
- autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
- autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
- autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
- autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
- autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
- autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
- autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
- autobyteus/llm/providers.py +1 -3
- autobyteus/llm/token_counter/claude_token_counter.py +56 -25
- autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
- autobyteus/llm/token_counter/openai_token_counter.py +24 -5
- autobyteus/llm/token_counter/token_counter_factory.py +12 -5
- autobyteus/llm/utils/llm_config.py +6 -12
- autobyteus/llm/utils/media_payload_formatter.py +27 -20
- autobyteus/llm/utils/messages.py +55 -3
- autobyteus/llm/utils/response_types.py +3 -0
- autobyteus/llm/utils/tool_call_delta.py +31 -0
- autobyteus/memory/__init__.py +32 -0
- autobyteus/memory/active_transcript.py +69 -0
- autobyteus/memory/compaction/__init__.py +9 -0
- autobyteus/memory/compaction/compaction_result.py +8 -0
- autobyteus/memory/compaction/compactor.py +89 -0
- autobyteus/memory/compaction/summarizer.py +11 -0
- autobyteus/memory/compaction_snapshot_builder.py +84 -0
- autobyteus/memory/memory_manager.py +183 -0
- autobyteus/memory/models/__init__.py +14 -0
- autobyteus/memory/models/episodic_item.py +41 -0
- autobyteus/memory/models/memory_types.py +7 -0
- autobyteus/memory/models/raw_trace_item.py +79 -0
- autobyteus/memory/models/semantic_item.py +41 -0
- autobyteus/memory/models/tool_interaction.py +20 -0
- autobyteus/memory/policies/__init__.py +5 -0
- autobyteus/memory/policies/compaction_policy.py +16 -0
- autobyteus/memory/retrieval/__init__.py +7 -0
- autobyteus/memory/retrieval/memory_bundle.py +11 -0
- autobyteus/memory/retrieval/retriever.py +13 -0
- autobyteus/memory/store/__init__.py +7 -0
- autobyteus/memory/store/base_store.py +14 -0
- autobyteus/memory/store/file_store.py +98 -0
- autobyteus/memory/tool_interaction_builder.py +46 -0
- autobyteus/memory/turn_tracker.py +9 -0
- autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
- autobyteus/multimedia/audio/api/gemini_audio_client.py +108 -16
- autobyteus/multimedia/audio/audio_client_factory.py +47 -9
- autobyteus/multimedia/audio/audio_model.py +2 -1
- autobyteus/multimedia/image/api/autobyteus_image_client.py +19 -5
- autobyteus/multimedia/image/api/gemini_image_client.py +38 -17
- autobyteus/multimedia/image/api/openai_image_client.py +125 -43
- autobyteus/multimedia/image/autobyteus_image_provider.py +2 -1
- autobyteus/multimedia/image/image_client_factory.py +47 -15
- autobyteus/multimedia/image/image_model.py +5 -2
- autobyteus/multimedia/providers.py +3 -2
- autobyteus/skills/loader.py +71 -0
- autobyteus/skills/model.py +11 -0
- autobyteus/skills/registry.py +70 -0
- autobyteus/task_management/tools/todo_tools/add_todo.py +2 -2
- autobyteus/task_management/tools/todo_tools/create_todo_list.py +2 -2
- autobyteus/task_management/tools/todo_tools/update_todo_status.py +2 -2
- autobyteus/tools/__init__.py +34 -47
- autobyteus/tools/base_tool.py +7 -0
- autobyteus/tools/file/__init__.py +2 -6
- autobyteus/tools/file/patch_file.py +149 -0
- autobyteus/tools/file/read_file.py +36 -5
- autobyteus/tools/file/write_file.py +4 -1
- autobyteus/tools/functional_tool.py +43 -6
- autobyteus/tools/mcp/__init__.py +2 -0
- autobyteus/tools/mcp/config_service.py +5 -1
- autobyteus/tools/mcp/server/__init__.py +2 -0
- autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
- autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
- autobyteus/tools/mcp/server_instance_manager.py +8 -1
- autobyteus/tools/mcp/types.py +61 -0
- autobyteus/tools/multimedia/audio_tools.py +70 -17
- autobyteus/tools/multimedia/download_media_tool.py +18 -4
- autobyteus/tools/multimedia/image_tools.py +246 -62
- autobyteus/tools/operation_executor/journal_manager.py +107 -0
- autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
- autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
- autobyteus/tools/operation_executor/operation_executor.py +58 -0
- autobyteus/tools/registry/tool_definition.py +43 -2
- autobyteus/tools/skill/load_skill.py +50 -0
- autobyteus/tools/terminal/__init__.py +45 -0
- autobyteus/tools/terminal/ansi_utils.py +32 -0
- autobyteus/tools/terminal/background_process_manager.py +233 -0
- autobyteus/tools/terminal/output_buffer.py +105 -0
- autobyteus/tools/terminal/prompt_detector.py +63 -0
- autobyteus/tools/terminal/pty_session.py +241 -0
- autobyteus/tools/terminal/session_factory.py +20 -0
- autobyteus/tools/terminal/terminal_session_manager.py +226 -0
- autobyteus/tools/terminal/tools/__init__.py +13 -0
- autobyteus/tools/terminal/tools/get_process_output.py +81 -0
- autobyteus/tools/terminal/tools/run_bash.py +109 -0
- autobyteus/tools/terminal/tools/start_background_process.py +104 -0
- autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
- autobyteus/tools/terminal/types.py +54 -0
- autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
- autobyteus/tools/terminal/wsl_utils.py +156 -0
- autobyteus/tools/transaction_management/backup_handler.py +48 -0
- autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
- autobyteus/tools/usage/__init__.py +1 -2
- autobyteus/tools/usage/formatters/__init__.py +17 -1
- autobyteus/tools/usage/formatters/base_formatter.py +8 -0
- autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
- autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
- autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
- autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
- autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
- autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
- autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
- autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
- autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
- autobyteus/tools/usage/registries/__init__.py +1 -3
- autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
- autobyteus/tools/usage/tool_schema_provider.py +51 -0
- autobyteus/tools/web/__init__.py +4 -0
- autobyteus/tools/web/read_url_tool.py +80 -0
- autobyteus/utils/diff_utils.py +271 -0
- autobyteus/utils/download_utils.py +109 -0
- autobyteus/utils/file_utils.py +57 -2
- autobyteus/utils/gemini_helper.py +56 -0
- autobyteus/utils/gemini_model_mapping.py +71 -0
- autobyteus/utils/llm_output_formatter.py +75 -0
- autobyteus/utils/tool_call_format.py +36 -0
- autobyteus/workflow/agentic_workflow.py +3 -3
- autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
- autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
- autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
- autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +3 -9
- autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
- autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
- autobyteus/workflow/context/workflow_context.py +3 -3
- autobyteus/workflow/context/workflow_runtime_state.py +5 -5
- autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
- autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
- autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
- autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
- autobyteus/workflow/runtime/workflow_runtime.py +8 -8
- autobyteus/workflow/runtime/workflow_worker.py +3 -3
- autobyteus/workflow/status/__init__.py +11 -0
- autobyteus/workflow/status/workflow_status.py +19 -0
- autobyteus/workflow/status/workflow_status_manager.py +48 -0
- autobyteus/workflow/streaming/__init__.py +2 -2
- autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
- autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
- autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
- autobyteus/workflow/utils/wait_for_idle.py +4 -4
- autobyteus-1.2.3.dist-info/METADATA +293 -0
- autobyteus-1.2.3.dist-info/RECORD +600 -0
- {autobyteus-1.2.1.dist-info → autobyteus-1.2.3.dist-info}/WHEEL +1 -1
- {autobyteus-1.2.1.dist-info → autobyteus-1.2.3.dist-info}/top_level.txt +0 -1
- autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
- autobyteus/agent/hooks/__init__.py +0 -16
- autobyteus/agent/hooks/base_phase_hook.py +0 -78
- autobyteus/agent/hooks/hook_definition.py +0 -36
- autobyteus/agent/hooks/hook_meta.py +0 -37
- autobyteus/agent/hooks/hook_registry.py +0 -106
- autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
- autobyteus/agent/phases/__init__.py +0 -18
- autobyteus/agent/phases/discover.py +0 -53
- autobyteus/agent/phases/manager.py +0 -265
- autobyteus/agent/phases/transition_decorator.py +0 -40
- autobyteus/agent/phases/transition_info.py +0 -33
- autobyteus/agent/remote_agent.py +0 -244
- autobyteus/agent/workspace/workspace_definition.py +0 -36
- autobyteus/agent/workspace/workspace_meta.py +0 -37
- autobyteus/agent/workspace/workspace_registry.py +0 -72
- autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
- autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
- autobyteus/agent_team/phases/__init__.py +0 -11
- autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
- autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
- autobyteus/llm/api/bedrock_llm.py +0 -92
- autobyteus/llm/api/groq_llm.py +0 -94
- autobyteus/llm/api/nvidia_llm.py +0 -108
- autobyteus/llm/utils/token_pricing_config.py +0 -87
- autobyteus/rpc/__init__.py +0 -73
- autobyteus/rpc/client/__init__.py +0 -17
- autobyteus/rpc/client/abstract_client_connection.py +0 -124
- autobyteus/rpc/client/client_connection_manager.py +0 -153
- autobyteus/rpc/client/sse_client_connection.py +0 -306
- autobyteus/rpc/client/stdio_client_connection.py +0 -280
- autobyteus/rpc/config/__init__.py +0 -13
- autobyteus/rpc/config/agent_server_config.py +0 -153
- autobyteus/rpc/config/agent_server_registry.py +0 -152
- autobyteus/rpc/hosting.py +0 -244
- autobyteus/rpc/protocol.py +0 -244
- autobyteus/rpc/server/__init__.py +0 -20
- autobyteus/rpc/server/agent_server_endpoint.py +0 -181
- autobyteus/rpc/server/base_method_handler.py +0 -40
- autobyteus/rpc/server/method_handlers.py +0 -259
- autobyteus/rpc/server/sse_server_handler.py +0 -182
- autobyteus/rpc/server/stdio_server_handler.py +0 -151
- autobyteus/rpc/server_main.py +0 -198
- autobyteus/rpc/transport_type.py +0 -13
- autobyteus/tools/bash/__init__.py +0 -2
- autobyteus/tools/bash/bash_executor.py +0 -100
- autobyteus/tools/browser/__init__.py +0 -2
- autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
- autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
- autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
- autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
- autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
- autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
- autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
- autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
- autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
- autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
- autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
- autobyteus/tools/browser/standalone/__init__.py +0 -6
- autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
- autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
- autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
- autobyteus/tools/browser/standalone/navigate_to.py +0 -84
- autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -101
- autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -169
- autobyteus/tools/browser/standalone/webpage_reader.py +0 -105
- autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -105
- autobyteus/tools/file/edit_file.py +0 -200
- autobyteus/tools/file/list_directory.py +0 -168
- autobyteus/tools/file/search_files.py +0 -188
- autobyteus/tools/timer.py +0 -175
- autobyteus/tools/usage/parsers/__init__.py +0 -22
- autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
- autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
- autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
- autobyteus/tools/usage/parsers/base_parser.py +0 -41
- autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
- autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
- autobyteus/tools/usage/parsers/exceptions.py +0 -13
- autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
- autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
- autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
- autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
- autobyteus/workflow/phases/__init__.py +0 -11
- autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
- autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
- autobyteus-1.2.1.dist-info/METADATA +0 -205
- autobyteus-1.2.1.dist-info/RECORD +0 -511
- examples/__init__.py +0 -1
- examples/agent_team/__init__.py +0 -1
- examples/discover_phase_transitions.py +0 -104
- examples/run_agentic_software_engineer.py +0 -239
- examples/run_browser_agent.py +0 -262
- examples/run_google_slides_agent.py +0 -287
- examples/run_mcp_browser_client.py +0 -174
- examples/run_mcp_google_slides_client.py +0 -270
- examples/run_mcp_list_tools.py +0 -189
- examples/run_poem_writer.py +0 -284
- examples/run_sqlite_agent.py +0 -295
- /autobyteus/{tools/browser/session_aware → skills}/__init__.py +0 -0
- /autobyteus/tools/{browser/session_aware/factory → skill}/__init__.py +0 -0
- {autobyteus-1.2.1.dist-info → autobyteus-1.2.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
tools/coordinator/operation_lifecycle_manager.py
|
|
3
|
+
|
|
4
|
+
This module contains the OperationLifecycleManager class which manages the
|
|
5
|
+
transaction lifecycle including starting, committing, and rolling back transactions.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import uuid
|
|
9
|
+
from autobyteus.tools.operation_executor.journal_manager import JournalManager
|
|
10
|
+
from autobyteus.tools.operation_executor.operation_event_producer import OperationEventProducer
|
|
11
|
+
from autobyteus.tools.transaction_management.backup_handler import BackupHandler
|
|
12
|
+
from tools.operation_executor.operation_executor import OperationExecutor
|
|
13
|
+
# Assuming the other required classes are located in their respective modules.
|
|
14
|
+
|
|
15
|
+
class OperationLifecycleManager:
|
|
16
|
+
def __init__(self,
|
|
17
|
+
journal_manager: JournalManager,
|
|
18
|
+
operation_executor: OperationExecutor,
|
|
19
|
+
backup_handler: BackupHandler,
|
|
20
|
+
event_producer: OperationEventProducer) -> None:
|
|
21
|
+
self.journal_manager = journal_manager
|
|
22
|
+
self.operation_executor = operation_executor
|
|
23
|
+
self.backup_handler = backup_handler
|
|
24
|
+
self.event_producer = event_producer
|
|
25
|
+
|
|
26
|
+
def start_transaction(self) -> str:
|
|
27
|
+
"""
|
|
28
|
+
Initializes a transaction and returns a unique transaction ID.
|
|
29
|
+
"""
|
|
30
|
+
transaction_id = str(uuid.uuid4())
|
|
31
|
+
self.journal_manager.initialize_journal(transaction_id)
|
|
32
|
+
return transaction_id
|
|
33
|
+
|
|
34
|
+
def commit(self, transaction_id: str) -> None:
|
|
35
|
+
"""
|
|
36
|
+
Commits all the operations, journals them, and emits an event indicating
|
|
37
|
+
a successful commit.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
transaction_id (str): The unique ID of the transaction to be committed.
|
|
41
|
+
"""
|
|
42
|
+
try:
|
|
43
|
+
self.journal_manager.finalize_journal(transaction_id, status="committed")
|
|
44
|
+
self.event_producer.emit_event(f"Transaction {transaction_id} committed.")
|
|
45
|
+
except Exception as e:
|
|
46
|
+
self.journal_manager.log_error(transaction_id, str(e))
|
|
47
|
+
raise
|
|
48
|
+
|
|
49
|
+
def rollback(self, transaction_id: str) -> None:
|
|
50
|
+
"""
|
|
51
|
+
Reverts all executed operations, restores files if necessary, and emits a rollback event.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
transaction_id (str): The unique ID of the transaction to be rolled back.
|
|
55
|
+
"""
|
|
56
|
+
try:
|
|
57
|
+
self.operation_executor.rollback_operations()
|
|
58
|
+
self.backup_handler.restore_backup(transaction_id)
|
|
59
|
+
self.event_producer.emit_event(f"Transaction {transaction_id} rolled back.")
|
|
60
|
+
except Exception as e:
|
|
61
|
+
self.journal_manager.log_error(transaction_id, str(e))
|
|
62
|
+
raise
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# file: autobyteus/autobyteus/tools/usage/__init__.py
|
|
2
2
|
"""
|
|
3
3
|
This package contains the framework for generating provider-specific
|
|
4
|
-
tool usage information (schemas and examples)
|
|
5
|
-
tool usage from LLM responses.
|
|
4
|
+
tool usage information (schemas and examples).
|
|
6
5
|
"""
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This package contains concrete formatter classes that translate a BaseTool's
|
|
4
4
|
metadata into a specific provider's format (e.g., OpenAI JSON, Anthropic JSON, XML).
|
|
5
5
|
"""
|
|
6
|
-
from .base_formatter import BaseSchemaFormatter, BaseExampleFormatter
|
|
6
|
+
from .base_formatter import BaseSchemaFormatter, BaseExampleFormatter, BaseXmlSchemaFormatter
|
|
7
7
|
from .default_xml_schema_formatter import DefaultXmlSchemaFormatter
|
|
8
8
|
from .default_json_schema_formatter import DefaultJsonSchemaFormatter
|
|
9
9
|
from .openai_json_schema_formatter import OpenAiJsonSchemaFormatter
|
|
@@ -15,9 +15,18 @@ from .openai_json_example_formatter import OpenAiJsonExampleFormatter
|
|
|
15
15
|
from .anthropic_json_example_formatter import AnthropicJsonExampleFormatter
|
|
16
16
|
from .gemini_json_example_formatter import GeminiJsonExampleFormatter
|
|
17
17
|
|
|
18
|
+
# Tool-specific formatters
|
|
19
|
+
from .write_file_xml_schema_formatter import WriteFileXmlSchemaFormatter
|
|
20
|
+
from .write_file_xml_example_formatter import WriteFileXmlExampleFormatter
|
|
21
|
+
from .patch_file_xml_schema_formatter import PatchFileXmlSchemaFormatter
|
|
22
|
+
from .patch_file_xml_example_formatter import PatchFileXmlExampleFormatter
|
|
23
|
+
from .run_bash_xml_schema_formatter import RunBashXmlSchemaFormatter
|
|
24
|
+
from .run_bash_xml_example_formatter import RunBashXmlExampleFormatter
|
|
25
|
+
|
|
18
26
|
__all__ = [
|
|
19
27
|
"BaseSchemaFormatter",
|
|
20
28
|
"BaseExampleFormatter",
|
|
29
|
+
"BaseXmlSchemaFormatter",
|
|
21
30
|
"DefaultXmlSchemaFormatter",
|
|
22
31
|
"DefaultJsonSchemaFormatter",
|
|
23
32
|
"OpenAiJsonSchemaFormatter",
|
|
@@ -28,4 +37,11 @@ __all__ = [
|
|
|
28
37
|
"OpenAiJsonExampleFormatter",
|
|
29
38
|
"AnthropicJsonExampleFormatter",
|
|
30
39
|
"GeminiJsonExampleFormatter",
|
|
40
|
+
# Tool-specific formatters
|
|
41
|
+
"WriteFileXmlSchemaFormatter",
|
|
42
|
+
"WriteFileXmlExampleFormatter",
|
|
43
|
+
"PatchFileXmlSchemaFormatter",
|
|
44
|
+
"PatchFileXmlExampleFormatter",
|
|
45
|
+
"RunBashXmlSchemaFormatter",
|
|
46
|
+
"RunBashXmlExampleFormatter",
|
|
31
47
|
]
|
|
@@ -23,6 +23,14 @@ class BaseSchemaFormatter(ABC):
|
|
|
23
23
|
"""
|
|
24
24
|
pass
|
|
25
25
|
|
|
26
|
+
class BaseXmlSchemaFormatter(BaseSchemaFormatter):
|
|
27
|
+
"""
|
|
28
|
+
Marker base class for all XML schema formatters.
|
|
29
|
+
Subclass this for any formatter that produces XML output.
|
|
30
|
+
"""
|
|
31
|
+
pass
|
|
32
|
+
|
|
33
|
+
|
|
26
34
|
class BaseExampleFormatter(ABC):
|
|
27
35
|
"""
|
|
28
36
|
Abstract base class for formatting a usage example of a single tool
|
|
@@ -3,12 +3,12 @@ import xml.sax.saxutils
|
|
|
3
3
|
from typing import TYPE_CHECKING, List, Dict
|
|
4
4
|
|
|
5
5
|
from autobyteus.utils.parameter_schema import ParameterType, ParameterDefinition, ParameterSchema
|
|
6
|
-
from .base_formatter import
|
|
6
|
+
from .base_formatter import BaseXmlSchemaFormatter
|
|
7
7
|
|
|
8
8
|
if TYPE_CHECKING:
|
|
9
9
|
from autobyteus.tools.registry import ToolDefinition
|
|
10
10
|
|
|
11
|
-
class DefaultXmlSchemaFormatter(
|
|
11
|
+
class DefaultXmlSchemaFormatter(BaseXmlSchemaFormatter):
|
|
12
12
|
"""Formats a tool's schema into a standardized, potentially nested, XML string."""
|
|
13
13
|
|
|
14
14
|
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Dict, TYPE_CHECKING
|
|
2
|
+
from .base_formatter import BaseSchemaFormatter
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
6
|
+
|
|
7
|
+
class MistralJsonSchemaFormatter(BaseSchemaFormatter):
|
|
8
|
+
"""Formats a tool's schema into the Mistral JSON format (standard JSON schema)."""
|
|
9
|
+
|
|
10
|
+
def provide(self, tool_definition: 'ToolDefinition') -> Dict:
|
|
11
|
+
return {
|
|
12
|
+
"type": "function",
|
|
13
|
+
"function": {
|
|
14
|
+
"name": tool_definition.name,
|
|
15
|
+
"description": tool_definition.description,
|
|
16
|
+
"parameters": tool_definition.argument_schema.to_json_schema_dict() if tool_definition.argument_schema else {"type": "object", "properties": {}}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py
|
|
2
|
+
"""
|
|
3
|
+
XML Example formatter for the patch_file tool using standard <tool name="patch_file"> syntax.
|
|
4
|
+
"""
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from .base_formatter import BaseExampleFormatter
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PatchFileXmlExampleFormatter(BaseExampleFormatter):
|
|
14
|
+
"""
|
|
15
|
+
Formats usage examples for patch_file using the standard <tool name="patch_file"> XML syntax.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
19
|
+
"""
|
|
20
|
+
Generates usage examples for patch_file.
|
|
21
|
+
"""
|
|
22
|
+
return '''### Example 1: Modify a function in a Python file
|
|
23
|
+
|
|
24
|
+
<tool name="patch_file">
|
|
25
|
+
<arguments>
|
|
26
|
+
<arg name="path">/path/to/utils.py</arg>
|
|
27
|
+
<arg name="patch">
|
|
28
|
+
__START_PATCH__
|
|
29
|
+
--- a/utils.py
|
|
30
|
+
+++ b/utils.py
|
|
31
|
+
@@ -10,7 +10,7 @@
|
|
32
|
+
def calculate_total(items):
|
|
33
|
+
"""Calculate the total price of items."""
|
|
34
|
+
total = 0
|
|
35
|
+
- for item in items:
|
|
36
|
+
+ for item in sorted(items, key=lambda x: x.price):
|
|
37
|
+
total += item.price
|
|
38
|
+
return total
|
|
39
|
+
__END_PATCH__
|
|
40
|
+
</arg>
|
|
41
|
+
</arguments>
|
|
42
|
+
</tool>
|
|
43
|
+
|
|
44
|
+
### Example 2: Add new lines to a configuration file
|
|
45
|
+
|
|
46
|
+
<tool name="patch_file">
|
|
47
|
+
<arguments>
|
|
48
|
+
<arg name="path">config/settings.yaml</arg>
|
|
49
|
+
<arg name="patch">
|
|
50
|
+
__START_PATCH__
|
|
51
|
+
--- a/settings.yaml
|
|
52
|
+
+++ b/settings.yaml
|
|
53
|
+
@@ -5,3 +5,6 @@
|
|
54
|
+
logging:
|
|
55
|
+
level: INFO
|
|
56
|
+
format: "%(asctime)s - %(message)s"
|
|
57
|
+
+
|
|
58
|
+
+cache:
|
|
59
|
+
+ enabled: true
|
|
60
|
+
+ ttl: 3600
|
|
61
|
+
__END_PATCH__
|
|
62
|
+
</arg>
|
|
63
|
+
</arguments>
|
|
64
|
+
</tool>'''
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py
|
|
2
|
+
"""
|
|
3
|
+
XML Schema formatter for the patch_file tool using standard <tool name="patch_file"> syntax.
|
|
4
|
+
"""
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from .base_formatter import BaseXmlSchemaFormatter
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PatchFileXmlSchemaFormatter(BaseXmlSchemaFormatter):
|
|
14
|
+
"""
|
|
15
|
+
Formats the patch_file tool schema using the standard <tool name="patch_file"> XML syntax.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
19
|
+
"""
|
|
20
|
+
Generates the schema description for patch_file using standard XML syntax
|
|
21
|
+
with specific instructions for sentinel tags to support robust streaming.
|
|
22
|
+
"""
|
|
23
|
+
return '''<tool name="patch_file">
|
|
24
|
+
<arguments>
|
|
25
|
+
<arg name="path" type="string" description="The absolute or relative path to the file to patch." required="true" />
|
|
26
|
+
<arg name="patch" type="string" description="The unified diff patch to apply to the file." required="true">
|
|
27
|
+
IMPORTANT: To ensure reliable streaming, you MUST enclose the patch content with the sentinel tags __START_PATCH__ and __END_PATCH__.
|
|
28
|
+
The parser will strip these tags, but they are critical for preventing XML parsing errors if the patch contains special characters.
|
|
29
|
+
</arg>
|
|
30
|
+
</arguments>
|
|
31
|
+
</tool>'''
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py
|
|
2
|
+
"""
|
|
3
|
+
XML Example formatter for the run_bash tool using shorthand <run_bash> syntax.
|
|
4
|
+
"""
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from .base_formatter import BaseExampleFormatter
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RunBashXmlExampleFormatter(BaseExampleFormatter):
|
|
14
|
+
"""
|
|
15
|
+
Formats usage examples for run_bash using the shorthand <run_bash> XML syntax.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
19
|
+
"""
|
|
20
|
+
Generates usage examples for run_bash.
|
|
21
|
+
"""
|
|
22
|
+
return '''### Example 1: List files
|
|
23
|
+
|
|
24
|
+
<run_bash>
|
|
25
|
+
ls -la
|
|
26
|
+
</run_bash>
|
|
27
|
+
|
|
28
|
+
### Example 2: Run tests
|
|
29
|
+
|
|
30
|
+
<run_bash>
|
|
31
|
+
python -m pytest tests/ -v
|
|
32
|
+
</run_bash>'''
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py
|
|
2
|
+
"""
|
|
3
|
+
XML Schema formatter for the run_bash tool using shorthand <run_bash> syntax.
|
|
4
|
+
"""
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from .base_formatter import BaseXmlSchemaFormatter
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RunBashXmlSchemaFormatter(BaseXmlSchemaFormatter):
|
|
14
|
+
"""
|
|
15
|
+
Formats the run_bash tool schema using the shorthand <run_bash> XML syntax.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
19
|
+
"""
|
|
20
|
+
Generates the schema description for run_bash using shorthand syntax.
|
|
21
|
+
"""
|
|
22
|
+
return '''## run_bash
|
|
23
|
+
|
|
24
|
+
Runs a command in the terminal.
|
|
25
|
+
|
|
26
|
+
**Syntax:**
|
|
27
|
+
```xml
|
|
28
|
+
<run_bash>
|
|
29
|
+
command_to_execute
|
|
30
|
+
</run_bash>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Parameters:**
|
|
34
|
+
- Content between tags: The shell command to execute.
|
|
35
|
+
|
|
36
|
+
The command runs in the agent's configured working directory.'''
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py
|
|
2
|
+
"""
|
|
3
|
+
XML Example formatter for the write_file tool using shorthand <write_file> syntax.
|
|
4
|
+
"""
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from .base_formatter import BaseExampleFormatter
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class WriteFileXmlExampleFormatter(BaseExampleFormatter):
|
|
14
|
+
"""
|
|
15
|
+
Formats usage examples for write_file using the shorthand <write_file> XML syntax.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
19
|
+
"""
|
|
20
|
+
Generates usage examples for write_file.
|
|
21
|
+
"""
|
|
22
|
+
return '''### Example 1: Create a Python file
|
|
23
|
+
|
|
24
|
+
<tool name="write_file">
|
|
25
|
+
<arguments>
|
|
26
|
+
<arg name="path">/path/to/hello.py</arg>
|
|
27
|
+
<arg name="content">
|
|
28
|
+
__START_CONTENT__
|
|
29
|
+
def hello():
|
|
30
|
+
print("Hello, World!")
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
hello()
|
|
34
|
+
__END_CONTENT__
|
|
35
|
+
</arg>
|
|
36
|
+
</arguments>
|
|
37
|
+
</tool>
|
|
38
|
+
|
|
39
|
+
### Example 2: Create a configuration file
|
|
40
|
+
|
|
41
|
+
<tool name="write_file">
|
|
42
|
+
<arguments>
|
|
43
|
+
<arg name="path">config/settings.json</arg>
|
|
44
|
+
<arg name="content">
|
|
45
|
+
__START_CONTENT__
|
|
46
|
+
{
|
|
47
|
+
"debug": true,
|
|
48
|
+
"log_level": "INFO"
|
|
49
|
+
}
|
|
50
|
+
__END_CONTENT__
|
|
51
|
+
</arg>
|
|
52
|
+
</arguments>
|
|
53
|
+
</tool>'''
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# file: autobyteus/autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py
|
|
2
|
+
"""
|
|
3
|
+
XML Schema formatter for the write_file tool using shorthand <write_file> syntax.
|
|
4
|
+
"""
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from .base_formatter import BaseXmlSchemaFormatter
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from autobyteus.tools.registry import ToolDefinition
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class WriteFileXmlSchemaFormatter(BaseXmlSchemaFormatter):
|
|
14
|
+
"""
|
|
15
|
+
Formats the write_file tool schema using the shorthand <write_file> XML syntax.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def provide(self, tool_definition: 'ToolDefinition') -> str:
|
|
19
|
+
"""
|
|
20
|
+
Generates the schema description for write_file using standard XML syntax
|
|
21
|
+
but with specific instructions for sentinel tags to support robust streaming.
|
|
22
|
+
"""
|
|
23
|
+
return '''<tool name="write_file">
|
|
24
|
+
<arguments>
|
|
25
|
+
<arg name="path" type="string" description="The absolute or relative path where the file will be written." required="true" />
|
|
26
|
+
<arg name="content" type="string" description="The content to write to the file." required="true">
|
|
27
|
+
IMPORTANT: To ensure reliable streaming, you MUST enclose the file content with the sentinel tags __START_CONTENT__ and __END_CONTENT__.
|
|
28
|
+
The parser will strip these tags, but they are critical for preventing XML parsing errors if the content contains special characters.
|
|
29
|
+
</arg>
|
|
30
|
+
</arguments>
|
|
31
|
+
</tool>'''
|
|
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, List, Optional
|
|
|
5
5
|
|
|
6
6
|
from autobyteus.llm.providers import LLMProvider
|
|
7
7
|
from autobyteus.tools.usage.registries.tool_formatting_registry import ToolFormattingRegistry
|
|
8
|
-
from autobyteus.tools.usage.formatters import
|
|
8
|
+
from autobyteus.tools.usage.formatters import BaseXmlSchemaFormatter
|
|
9
9
|
|
|
10
10
|
if TYPE_CHECKING:
|
|
11
11
|
from autobyteus.tools.registry import ToolDefinition
|
|
@@ -52,29 +52,29 @@ class ToolManifestProvider:
|
|
|
52
52
|
|
|
53
53
|
def provide(self,
|
|
54
54
|
tool_definitions: List['ToolDefinition'],
|
|
55
|
-
provider: Optional[LLMProvider] = None
|
|
56
|
-
use_xml_tool_format: bool = False) -> str:
|
|
55
|
+
provider: Optional[LLMProvider] = None) -> str:
|
|
57
56
|
"""
|
|
58
57
|
Generates the manifest string for a list of tools.
|
|
59
58
|
|
|
60
59
|
Args:
|
|
61
60
|
tool_definitions: A list of ToolDefinition objects.
|
|
62
61
|
provider: The LLM provider, for provider-specific formatting.
|
|
63
|
-
use_xml_tool_format: If True, forces the use of XML formatters.
|
|
64
62
|
|
|
65
63
|
Returns:
|
|
66
64
|
A single string containing the formatted manifest.
|
|
67
65
|
"""
|
|
68
66
|
tool_blocks = []
|
|
69
67
|
|
|
70
|
-
formatter_pair = self._formatting_registry.get_formatter_pair(provider, use_xml_tool_format=use_xml_tool_format)
|
|
71
|
-
schema_formatter = formatter_pair.schema_formatter
|
|
72
|
-
example_formatter = formatter_pair.example_formatter
|
|
73
|
-
|
|
74
|
-
is_xml_format = isinstance(schema_formatter, DefaultXmlSchemaFormatter)
|
|
75
|
-
|
|
76
68
|
for td in tool_definitions:
|
|
77
69
|
try:
|
|
70
|
+
# Get formatter pair per-tool (with fallback to provider)
|
|
71
|
+
formatter_pair = self._formatting_registry.get_formatter_pair_for_tool(
|
|
72
|
+
td.name, provider
|
|
73
|
+
)
|
|
74
|
+
schema_formatter = formatter_pair.schema_formatter
|
|
75
|
+
example_formatter = formatter_pair.example_formatter
|
|
76
|
+
is_xml_format = isinstance(schema_formatter, BaseXmlSchemaFormatter)
|
|
77
|
+
|
|
78
78
|
schema = schema_formatter.provide(td)
|
|
79
79
|
example = example_formatter.provide(td) # This is now a pre-formatted string for both XML and JSON
|
|
80
80
|
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
# file: autobyteus/autobyteus/tools/usage/registries/__init__.py
|
|
2
2
|
"""
|
|
3
|
-
This package contains registries for schema/example formatters
|
|
3
|
+
This package contains registries for schema/example formatters,
|
|
4
4
|
allowing for easy retrieval of the correct component based on the LLM provider.
|
|
5
5
|
"""
|
|
6
6
|
# Import the new consolidated components
|
|
7
7
|
from .tool_formatter_pair import ToolFormatterPair
|
|
8
8
|
from .tool_formatting_registry import ToolFormattingRegistry
|
|
9
|
-
from .tool_usage_parser_registry import ToolUsageParserRegistry
|
|
10
9
|
|
|
11
10
|
__all__ = [
|
|
12
11
|
"ToolFormatterPair",
|
|
13
12
|
"ToolFormattingRegistry",
|
|
14
|
-
"ToolUsageParserRegistry",
|
|
15
13
|
]
|
|
@@ -5,12 +5,18 @@ from typing import Dict, Optional
|
|
|
5
5
|
from autobyteus.llm.providers import LLMProvider
|
|
6
6
|
from autobyteus.utils.singleton import SingletonMeta
|
|
7
7
|
from .tool_formatter_pair import ToolFormatterPair
|
|
8
|
+
from autobyteus.utils.tool_call_format import resolve_tool_call_format
|
|
8
9
|
|
|
9
10
|
# Import all necessary formatters
|
|
10
11
|
from autobyteus.tools.usage.formatters import (
|
|
11
12
|
DefaultJsonSchemaFormatter, OpenAiJsonSchemaFormatter, AnthropicJsonSchemaFormatter, GeminiJsonSchemaFormatter,
|
|
12
13
|
DefaultJsonExampleFormatter, OpenAiJsonExampleFormatter, AnthropicJsonExampleFormatter, GeminiJsonExampleFormatter,
|
|
13
|
-
DefaultXmlSchemaFormatter, DefaultXmlExampleFormatter
|
|
14
|
+
DefaultXmlSchemaFormatter, DefaultXmlExampleFormatter,
|
|
15
|
+
BaseSchemaFormatter, BaseExampleFormatter,
|
|
16
|
+
# Tool-specific formatters
|
|
17
|
+
WriteFileXmlSchemaFormatter, WriteFileXmlExampleFormatter,
|
|
18
|
+
PatchFileXmlSchemaFormatter, PatchFileXmlExampleFormatter,
|
|
19
|
+
RunBashXmlSchemaFormatter, RunBashXmlExampleFormatter,
|
|
14
20
|
)
|
|
15
21
|
|
|
16
22
|
logger = logging.getLogger(__name__)
|
|
@@ -19,6 +25,9 @@ class ToolFormattingRegistry(metaclass=SingletonMeta):
|
|
|
19
25
|
"""
|
|
20
26
|
A consolidated registry that maps an LLMProvider directly to its required
|
|
21
27
|
ToolFormatterPair, which contains both schema and example formatters.
|
|
28
|
+
|
|
29
|
+
Also supports tool-specific formatter pairs that take priority over provider defaults.
|
|
30
|
+
Priority cascade: tool-specific → provider-specific → default
|
|
22
31
|
"""
|
|
23
32
|
|
|
24
33
|
def __init__(self):
|
|
@@ -38,28 +47,126 @@ class ToolFormattingRegistry(metaclass=SingletonMeta):
|
|
|
38
47
|
self._default_pair = ToolFormatterPair(DefaultJsonSchemaFormatter(), DefaultJsonExampleFormatter())
|
|
39
48
|
# A specific pair for the XML override
|
|
40
49
|
self._xml_override_pair = ToolFormatterPair(DefaultXmlSchemaFormatter(), DefaultXmlExampleFormatter())
|
|
50
|
+
# Tool-specific formatter pairs (tool_name -> ToolFormatterPair)
|
|
51
|
+
self._tool_pairs: Dict[str, ToolFormatterPair] = {}
|
|
52
|
+
|
|
53
|
+
# Register tool-specific formatters
|
|
54
|
+
self._register_tool_formatters()
|
|
41
55
|
|
|
42
56
|
logger.info("ToolFormattingRegistry initialized with direct provider-to-formatter mappings.")
|
|
43
57
|
|
|
44
|
-
def
|
|
58
|
+
def _register_tool_formatters(self) -> None:
|
|
59
|
+
"""Register built-in tool-specific formatters."""
|
|
60
|
+
# write_file uses standard <tool name="write_file"> syntax with custom sentinel instructions
|
|
61
|
+
self._tool_pairs["write_file"] = ToolFormatterPair(
|
|
62
|
+
WriteFileXmlSchemaFormatter(),
|
|
63
|
+
WriteFileXmlExampleFormatter()
|
|
64
|
+
)
|
|
65
|
+
# patch_file uses standard <tool name="patch_file"> syntax with custom sentinel instructions
|
|
66
|
+
self._tool_pairs["patch_file"] = ToolFormatterPair(
|
|
67
|
+
PatchFileXmlSchemaFormatter(),
|
|
68
|
+
PatchFileXmlExampleFormatter()
|
|
69
|
+
)
|
|
70
|
+
# run_bash uses shorthand <run_bash> syntax
|
|
71
|
+
#self._tool_pairs["run_bash"] = ToolFormatterPair(
|
|
72
|
+
# RunBashXmlSchemaFormatter(),
|
|
73
|
+
# RunBashXmlExampleFormatter()
|
|
74
|
+
#)
|
|
75
|
+
|
|
76
|
+
def register_tool_formatter(self, tool_name: str, formatter_pair: ToolFormatterPair) -> None:
|
|
77
|
+
"""
|
|
78
|
+
Register a tool-specific formatter pair.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
tool_name: The name of the tool (e.g., 'write_file').
|
|
82
|
+
formatter_pair: The formatter pair to use for this tool.
|
|
83
|
+
"""
|
|
84
|
+
self._tool_pairs[tool_name] = formatter_pair
|
|
85
|
+
logger.info(f"Registered tool-specific formatter for '{tool_name}'.")
|
|
86
|
+
|
|
87
|
+
def get_formatter_pair_for_tool(
|
|
88
|
+
self,
|
|
89
|
+
tool_name: str,
|
|
90
|
+
provider: Optional[LLMProvider]
|
|
91
|
+
) -> ToolFormatterPair:
|
|
92
|
+
"""
|
|
93
|
+
Get the formatter pair for a specific tool with priority cascade.
|
|
94
|
+
|
|
95
|
+
Priority:
|
|
96
|
+
1. Tool-specific pair (if registered)
|
|
97
|
+
2. Provider-specific pair (if provider known)
|
|
98
|
+
3. Default pair
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
tool_name: The name of the tool.
|
|
102
|
+
provider: The LLM provider.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
The appropriate ToolFormatterPair.
|
|
106
|
+
"""
|
|
107
|
+
if tool_name in self._tool_pairs:
|
|
108
|
+
logger.debug(f"Using tool-specific formatter for '{tool_name}'.")
|
|
109
|
+
return self._tool_pairs[tool_name]
|
|
110
|
+
return self.get_formatter_pair(provider)
|
|
111
|
+
|
|
112
|
+
def get_formatter_pair(self, provider: Optional[LLMProvider]) -> ToolFormatterPair:
|
|
45
113
|
"""
|
|
46
|
-
Retrieves the appropriate formatting pair for a given provider, honoring the
|
|
114
|
+
Retrieves the appropriate formatting pair for a given provider, honoring the env format override.
|
|
47
115
|
|
|
48
116
|
Args:
|
|
49
117
|
provider: The LLMProvider enum member.
|
|
50
|
-
use_xml_tool_format: If True, forces the use of XML formatters.
|
|
51
118
|
|
|
52
119
|
Returns:
|
|
53
120
|
The corresponding ToolFormatterPair instance.
|
|
54
121
|
"""
|
|
55
|
-
|
|
56
|
-
|
|
122
|
+
format_override = resolve_tool_call_format()
|
|
123
|
+
if format_override == "xml":
|
|
124
|
+
logger.info("Tool format resolved to XML (env override).")
|
|
57
125
|
return self._xml_override_pair
|
|
126
|
+
if format_override == "json":
|
|
127
|
+
logger.info("Tool format resolved to JSON (env override).")
|
|
128
|
+
return self._default_pair
|
|
129
|
+
if format_override in {"sentinel", "api_tool_call"}:
|
|
130
|
+
logger.info(
|
|
131
|
+
"Tool format '%s' is not supported by formatter registry. "
|
|
132
|
+
"Falling back to JSON formatters.",
|
|
133
|
+
format_override,
|
|
134
|
+
)
|
|
135
|
+
return self._default_pair
|
|
58
136
|
|
|
59
137
|
if provider and provider in self._pairs:
|
|
60
138
|
pair = self._pairs[provider]
|
|
61
|
-
logger.
|
|
139
|
+
logger.info(
|
|
140
|
+
"Tool format resolved by provider '%s' to %s.",
|
|
141
|
+
provider.name,
|
|
142
|
+
"XML" if pair is self._xml_override_pair else "JSON",
|
|
143
|
+
)
|
|
62
144
|
return pair
|
|
63
145
|
|
|
64
|
-
logger.
|
|
146
|
+
logger.info(
|
|
147
|
+
"Tool format resolved by default to JSON (provider=%s).",
|
|
148
|
+
provider.name if provider else "Unknown",
|
|
149
|
+
)
|
|
65
150
|
return self._default_pair
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def register_tool_formatter(
|
|
154
|
+
tool_name: str,
|
|
155
|
+
schema_formatter: BaseSchemaFormatter,
|
|
156
|
+
example_formatter: BaseExampleFormatter
|
|
157
|
+
) -> None:
|
|
158
|
+
"""
|
|
159
|
+
Registers a custom schema and example formatter for a specific tool.
|
|
160
|
+
|
|
161
|
+
This allows developers to define exactly how a tool's schema and usage example
|
|
162
|
+
should be presented to the LLM, overriding default provider-specific behavior.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
tool_name: The name of the tool (must match the @tool name).
|
|
166
|
+
schema_formatter: An instance of a class inheriting from BaseSchemaFormatter.
|
|
167
|
+
example_formatter: An instance of a class inheriting from BaseExampleFormatter.
|
|
168
|
+
"""
|
|
169
|
+
registry = ToolFormattingRegistry()
|
|
170
|
+
pair = ToolFormatterPair(schema_formatter, example_formatter)
|
|
171
|
+
registry.register_tool_formatter(tool_name, pair)
|
|
172
|
+
logger.info(f"Registered custom formatter pair for tool '{tool_name}' via facade.")
|