Files
sci-gui-agent-benchmark/mm_agents/maestro/maestro/debug_system/main_debugger.py
Hiroid 3a4b67304f Add multiple new modules and tools to enhance the functionality and extensibility of the Maestro project (#333)
* Added a **pyproject.toml** file to define project metadata and dependencies.
* Added **run\_maestro.py** and **osworld\_run\_maestro.py** to provide the main execution logic.
* Introduced multiple new modules, including **Evaluator**, **Controller**, **Manager**, and **Sub-Worker**, supporting task planning, state management, and data analysis.
* Added a **tools module** containing utility functions and tool configurations to improve code reusability.
* Updated the **README** and documentation with usage examples and module descriptions.

These changes lay the foundation for expanding the Maestro project’s functionality and improving the user experience.

Co-authored-by: Hiroid <guoliangxuan@deepmatrix.com>
2025-09-08 16:07:21 +09:00

99 lines
3.9 KiB
Python

"""
Main Debugger - Integrate snapshot debugging and component debugging functionality
"""
import os
import shutil
import json
from datetime import datetime
from pathlib import Path
from typing import Optional, Dict, Any
from ..snapshot_restorer import restore_snapshot_and_create_globalstate
from .component_debugger import ComponentDebugger
from ..controller.state_handlers import NewWorker, Evaluator
from ..controller.main_controller import NewManager
class MainDebugger:
"""Main Debugger - Provide complete debugging functionality"""
def __init__(
self,
runtime_path: str = "runtime/20250826_141730",
snapshot_id: str = "snapshot_20250826_141736",
target_dir: Optional[str] = None,
):
target_runtime = ''
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
runtime_dir = Path(runtime_path)
target_runtime = runtime_dir.parent / f"{runtime_dir.name}_restored_from_{snapshot_id}_{timestamp}"
self.snapshot_id=snapshot_id
self.global_state, self.target_path, self.config_params = restore_snapshot_and_create_globalstate(
runtime_dir=runtime_path,
snapshot_id=snapshot_id,
target_dir=str(target_runtime),
)
def get_worker_params(self) -> Dict[str, Any]:
"""Get Worker parameters"""
config_params = self.config_params
# Extract Worker required parameters from snapshot
worker_params = {
"tools_dict": config_params.get('tools_dict', {}),
"global_state": self.global_state,
"platform": config_params.get('platform', 'default'),
"enable_search": config_params.get('enable_search', True),
"client_password": config_params.get('client_password', 'osworld-public-evaluation')
}
return worker_params
def get_evaluator_params(self) -> Dict[str, Any]:
"""Get Evaluator parameters"""
config_params = self.config_params
return {
"global_state": self.global_state,
"tools_dict": config_params.get('tools_dict', {}),
}
def get_manager_params(self) -> Dict[str, Any]:
"""Get Manager parameters"""
config_params = self.config_params
return {
"tools_dict": config_params.get('tools_dict', {}),
"global_state": self.global_state,
"local_kb_path": config_params.get('local_kb_path', ''),
"platform": config_params.get('platform', 'default'),
"enable_search": config_params.get('enable_search', True),
}
# === Minimal interface: create and execute directly ===
def debug_worker(self):
worker_params = self.get_worker_params()
current_worker = NewWorker(**worker_params)
current_worker.process_subtask_and_create_command()
print(f"Worker component created, ready to debug snapshot: {self.snapshot_id}")
def debug_evaluator(self):
evaluator_params = self.get_evaluator_params()
current_evaluator = Evaluator(**evaluator_params)
print(f"Evaluator component created, ready to debug snapshot: {self.snapshot_id}")
return current_evaluator
def debug_manager(self):
manager_params = self.get_manager_params()
current_manager = NewManager(**manager_params)
current_manager.plan_task("replan")
print(f"Manager component created, ready to debug snapshot: {self.snapshot_id}")
return current_manager
def create_debugger(snapshot_id: str = "snapshot_20250826_141736", runtime_path: str = "runtime/20250826_141730") -> MainDebugger:
"""Compatible with old interface: create MainDebugger instance with old parameter names
- snapshot_dir: compatible old name, actually snapshot_id
- state_dir: compatible old name, actually runtime_path
"""
return MainDebugger(runtime_path=runtime_path, snapshot_id=snapshot_id)