diff --git a/src/cooperbench/agents/__init__.py b/src/cooperbench/agents/__init__.py index d837420..2a729e0 100644 --- a/src/cooperbench/agents/__init__.py +++ b/src/cooperbench/agents/__init__.py @@ -59,6 +59,7 @@ def run( messaging_enabled: bool = True, # Agent-specific config config: dict[str, Any] | None = None, + log_dir: str | None = None, ) -> AgentResult: """Run agent on a task. @@ -73,6 +74,7 @@ def run( git_enabled: Whether git collaboration is enabled messaging_enabled: Whether messaging is enabled config: Agent-specific configuration + log_dir: Directory path for agent output files (optional) Returns: AgentResult with status, patch, cost, steps, messages diff --git a/src/cooperbench/runner/coop.py b/src/cooperbench/runner/coop.py index 6206eed..eece0a8 100644 --- a/src/cooperbench/runner/coop.py +++ b/src/cooperbench/runner/coop.py @@ -101,6 +101,8 @@ def run_thread(agent_id: str, feature_id: int): quiet=quiet, backend=backend, agent_config=agent_config, + run_name=run_name, + features=features, ) except Exception as e: results[agent_id] = { @@ -233,6 +235,8 @@ def _spawn_agent( quiet: bool = False, backend: str = "modal", agent_config: str | None = None, + run_name: str | None = None, + features: list[int] | None = None, ) -> dict: """Spawn a single agent on a feature using the agent framework adapter. @@ -248,6 +252,12 @@ def _spawn_agent( task = feature_file.read_text() image = get_image_name(repo_name, task_id) + # Compute log directory path + log_dir_path = None + if run_name and features: + feature_str = "_".join(f"f{f}" for f in sorted(features)) + log_dir_path = str(Path("logs") / run_name / "coop" / repo_name / str(task_id) / feature_str) + if not quiet: console.print(f" [dim]{agent_id}[/dim] starting...") @@ -279,6 +289,8 @@ def _spawn_agent( git_enabled=git_enabled, messaging_enabled=messaging_enabled, config=config, + agent_config=agent_config, + log_dir=log_dir_path, ) return { diff --git a/src/cooperbench/runner/solo.py b/src/cooperbench/runner/solo.py index 6d35b74..ea76d66 100644 --- a/src/cooperbench/runner/solo.py +++ b/src/cooperbench/runner/solo.py @@ -52,6 +52,7 @@ def execute_solo( quiet=quiet, backend=backend, agent_config=agent_config, + run_name=run_name, ) except Exception as e: result = { @@ -141,6 +142,7 @@ def _spawn_solo_agent( quiet: bool = False, backend: str = "modal", agent_config: str | None = None, + run_name: str | None = None, ) -> dict: """Spawn a single agent on multiple features (solo mode). @@ -160,6 +162,12 @@ def _spawn_solo_agent( task = "\n\n---\n\n".join(combined_task) image = get_image_name(repo_name, task_id) + # Compute log directory path + log_dir_path = None + if run_name: + feature_str = "_".join(f"f{f}" for f in sorted(features)) + log_dir_path = str(Path("logs") / run_name / "solo" / repo_name / str(task_id) / feature_str) + if not quiet: console.print(" [dim]solo[/dim] starting...") @@ -189,6 +197,8 @@ def _spawn_solo_agent( git_enabled=False, messaging_enabled=False, config=config, + agent_config=agent_config, + log_dir=log_dir_path, ) return {