Source code for autogen_core.code_executor._base
# File based from: https://github.com/microsoft/autogen/blob/main/autogen/coding/base.py
# Credit to original authors
from __future__ import annotations
from abc import ABC, abstractmethod
from dataclasses import dataclass
from types import TracebackType
from typing import List, Optional, Type
from pydantic import BaseModel
from typing_extensions import Self
from .._cancellation_token import CancellationToken
from .._component_config import ComponentBase
[docs]
@dataclass
class CodeBlock:
"""A code block extracted fromm an agent message."""
code: str
language: str
[docs]
@dataclass
class CodeResult:
"""Result of a code execution."""
exit_code: int
output: str
[docs]
class CodeExecutor(ABC, ComponentBase[BaseModel]):
"""Executes code blocks and returns the result.
This is an abstract base class for code executors. It defines the interface
for executing code blocks and returning the result. A concrete implementation
of this class should be provided to execute code blocks in a specific
environment. For example, :class:`~autogen_ext.code_executors.docker.DockerCommandLineCodeExecutor` executes
code blocks in a command line environment in a Docker container.
It is recommended for subclass to be used as a context manager to ensure
that resources are cleaned up properly. To do this, implement the
:meth:`~autogen_core.code_executor.CodeExecutor.start` and
:meth:`~autogen_core.code_executor.CodeExecutor.stop` methods
that will be called when entering and exiting the context manager.
"""
component_type = "code_executor"
[docs]
@abstractmethod
async def execute_code_blocks(
self, code_blocks: List[CodeBlock], cancellation_token: CancellationToken
) -> CodeResult:
"""Execute code blocks and return the result.
This method should be implemented by the code executor.
Args:
code_blocks (List[CodeBlock]): The code blocks to execute.
Returns:
CodeResult: The result of the code execution.
Raises:
ValueError: Errors in user inputs
asyncio.TimeoutError: Code execution timeouts
asyncio.CancelledError: CancellationToken evoked during execution
"""
...
[docs]
@abstractmethod
async def start(self) -> None:
"""Start the code executor."""
...
[docs]
@abstractmethod
async def stop(self) -> None:
"""Stop the code executor and release any resources."""
...
[docs]
@abstractmethod
async def restart(self) -> None:
"""Restart the code executor.
This method should be implemented by the code executor.
This method is called when the agent is reset.
"""
...
async def __aenter__(self) -> Self:
await self.start()
return self
async def __aexit__(
self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
) -> Optional[bool]:
await self.stop()
return None