Pedro
add auto tester retry loop and annotate std input
c6231ab
Raw
History Blame Contribute Delete
3.47 kB
from multi_agent_sdlc.tools.coder.validation import StandardInput
from multi_agent_sdlc.tools.coder.descriptions import (
RUN_VERIFICATION_COMMAND_DESCRIPTION,
)
from multi_agent_sdlc.tools.coder.validation import PythonModuleName
from multi_agent_sdlc.tools.coder.validation import ExecutionTimeout
from multi_agent_sdlc.tools.coder.validation import ApplicationArguments
from multi_agent_sdlc.tools.coder.validation import EntryPoint
from multi_agent_sdlc.tools.coder.descriptions import (
RUN_SYNC_PROJECT,
RUN_PYTHON_MODULE_DESCRIPTION,
RUN_APPLICATION_DESCRIPTION,
)
from multi_agent_sdlc.runtime.process import execute_process
from multi_agent_sdlc.runtime.workspace import get_project_directory
from multi_agent_sdlc.state import DevState
from langchain.tools import ToolRuntime, tool
@tool(
"run_application",
description=RUN_APPLICATION_DESCRIPTION,
)
def coder_run_application(
entry_point: EntryPoint,
runtime: ToolRuntime[DevState],
arguments: ApplicationArguments | None = None,
stdin_text: StandardInput | None = None,
timeout_seconds: ExecutionTimeout = 15,
) -> dict[str, object]:
project_directory = get_project_directory(runtime)
return execute_process(
[
"uv",
"run",
entry_point,
*(arguments or []),
],
project_directory=project_directory,
timeout_seconds=timeout_seconds,
stdin_text=stdin_text,
)
@tool(
"run_python_module",
description=RUN_PYTHON_MODULE_DESCRIPTION,
)
def coder_run_python_module(
module: PythonModuleName,
runtime: ToolRuntime[DevState],
arguments: ApplicationArguments | None = None,
stdin_text: StandardInput | None = None,
timeout_seconds: ExecutionTimeout = 15,
) -> dict[str, object]:
project_directory = get_project_directory(runtime)
return execute_process(
[
"uv",
"run",
"python",
"-m",
module,
*(arguments or []),
],
project_directory=project_directory,
timeout_seconds=timeout_seconds,
stdin_text=stdin_text,
)
@tool(
"sync_project",
description=RUN_SYNC_PROJECT,
)
def coder_sync_project(
runtime: ToolRuntime[DevState],
timeout_seconds: ExecutionTimeout = 120,
) -> dict[str, object]:
project_directory = get_project_directory(runtime)
return execute_process(
["uv", "sync"],
project_directory=project_directory,
timeout_seconds=timeout_seconds,
)
from typing import Annotated, Literal
from pydantic import Field
VerificationCommand = Annotated[
Literal[
"ruff",
"mypy",
"coverage",
],
Field(
description=(
"Approved development or verification executable to run "
"inside the project's uv-managed environment."
)
),
]
@tool(
"run_verification_command",
description=RUN_VERIFICATION_COMMAND_DESCRIPTION,
)
def coder_run_verification_command(
command: VerificationCommand,
runtime: ToolRuntime[DevState],
arguments: ApplicationArguments | None = None,
timeout_seconds: ExecutionTimeout = 120,
) -> dict[str, object]:
project_directory = get_project_directory(runtime)
return execute_process(
["uv", "run", command, *(arguments or [])],
project_directory=project_directory,
timeout_seconds=timeout_seconds,
)