Migrate remaining components (#4626)

This commit is contained in:
Jack Gerrits
2024-12-09 21:39:07 -05:00
committed by GitHub
parent 51d4a10774
commit 218e84fd8e
44 changed files with 262 additions and 83 deletions

View File

@@ -29,8 +29,8 @@ python/autogen_core
python/autogen_core.code_executor
python/autogen_core.models
python/autogen_core.model_context
python/autogen_core.components.tools
python/autogen_core.components.tool_agent
python/autogen_core.tools
python/autogen_core.tool_agent
python/autogen_core.exceptions
python/autogen_core.logging
```

View File

@@ -1,8 +1,8 @@
autogen\_core.components.tool\_agent
autogen\_core.tool\_agent
====================================
.. automodule:: autogen_core.components.tool_agent
.. automodule:: autogen_core.tool_agent
:members:
:undoc-members:
:show-inheritance:

View File

@@ -1,8 +1,8 @@
autogen\_core.components.tools
autogen\_core.tools
==============================
.. automodule:: autogen_core.components.tools
.. automodule:: autogen_core.tools
:members:
:undoc-members:
:show-inheritance:

View File

@@ -25,7 +25,7 @@
"from autogen_agentchat.agents import CodingAssistantAgent, ToolUseAssistantAgent\n",
"from autogen_agentchat.conditions import TextMentionTermination\n",
"from autogen_agentchat.teams import RoundRobinGroupChat\n",
"from autogen_core.components.tools import FunctionTool\n",
"from autogen_core.tools import FunctionTool\n",
"from autogen_ext.models import OpenAIChatCompletionClient"
]
},

View File

@@ -25,7 +25,7 @@
"from autogen_agentchat.agents import CodingAssistantAgent, ToolUseAssistantAgent\n",
"from autogen_agentchat.conditions import TextMentionTermination\n",
"from autogen_agentchat.teams import RoundRobinGroupChat\n",
"from autogen_core.components.tools import FunctionTool\n",
"from autogen_core.tools import FunctionTool\n",
"from autogen_ext.models import OpenAIChatCompletionClient"
]
},

View File

@@ -29,7 +29,6 @@
" message_handler,\n",
")\n",
"from autogen_core.base.intervention import DefaultInterventionHandler, DropMessage\n",
"from autogen_core.components.tools import PythonCodeExecutionTool, ToolSchema\n",
"from autogen_core.models import (\n",
" ChatCompletionClient,\n",
" LLMMessage,\n",
@@ -37,6 +36,7 @@
" UserMessage,\n",
")\n",
"from autogen_core.tool_agent import ToolAgent, ToolException, tool_agent_caller_loop\n",
"from autogen_core.tools import PythonCodeExecutionTool, ToolSchema\n",
"from autogen_ext.code_executors.docker import DockerCommandLineCodeExecutor\n",
"from autogen_ext.models import OpenAIChatCompletionClient"
]
@@ -64,7 +64,7 @@
"metadata": {},
"source": [
"Let's create a simple tool use agent that is capable of using tools through a\n",
"{py:class}`~autogen_core.components.tool_agent.ToolAgent`."
"{py:class}`~autogen_core.tool_agent.ToolAgent`."
]
},
{
@@ -165,7 +165,7 @@
"First, we create a Docker-based command-line code executor\n",
"using {py:class}`~autogen_ext.code_executors.docker.DockerCommandLineCodeExecutor`,\n",
"and then use it to instantiate a built-in Python code execution tool\n",
"{py:class}`~autogen_core.components.tools.PythonCodeExecutionTool`\n",
"{py:class}`~autogen_core.tools.PythonCodeExecutionTool`\n",
"that runs code in a Docker container."
]
},

View File

@@ -83,7 +83,6 @@
" TypeSubscription,\n",
" message_handler,\n",
")\n",
"from autogen_core.components.tools import FunctionTool\n",
"from autogen_core.models import (\n",
" AssistantMessage,\n",
" ChatCompletionClient,\n",
@@ -91,6 +90,7 @@
" SystemMessage,\n",
" UserMessage,\n",
")\n",
"from autogen_core.tools import FunctionTool\n",
"from autogen_ext.models import OpenAIChatCompletionClient\n",
"from IPython.display import display # type: ignore\n",
"from pydantic import BaseModel\n",
@@ -233,7 +233,7 @@
"\n",
"Now let's define the `IllustratorAgent` which uses a DALL-E model to generate\n",
"an illustration based on the description provided.\n",
"We set up the image generator as a tool using {py:class}`~autogen_core.components.tools.FunctionTool`\n",
"We set up the image generator as a tool using {py:class}`~autogen_core.tools.FunctionTool`\n",
"wrapper, and use a model client to make the tool call."
]
},

View File

@@ -65,7 +65,6 @@
" TypeSubscription,\n",
" message_handler,\n",
")\n",
"from autogen_core.components.tools import FunctionTool, Tool\n",
"from autogen_core.models import (\n",
" AssistantMessage,\n",
" ChatCompletionClient,\n",
@@ -75,6 +74,7 @@
" SystemMessage,\n",
" UserMessage,\n",
")\n",
"from autogen_core.tools import FunctionTool, Tool\n",
"from autogen_ext.models import OpenAIChatCompletionClient\n",
"from pydantic import BaseModel"
]
@@ -339,7 +339,7 @@
"\n",
"The AI agents can use regular tools to complete tasks if they don't need to hand off the task to other agents.\n",
"We define the tools using simple functions and create the tools using the\n",
"{py:class}`~autogen_core.components.tools.FunctionTool` wrapper."
"{py:class}`~autogen_core.tools.FunctionTool` wrapper."
]
},
{

View File

@@ -368,7 +368,7 @@
"recipient are tightly coupled -- they are created together and the sender\n",
"is linked to a specific instance of the recipient.\n",
"For example, an agent executes tool calls by sending direct messages to\n",
"an instance of {py:class}`~autogen_core.components.tool_agent.ToolAgent`,\n",
"an instance of {py:class}`~autogen_core.tool_agent.ToolAgent`,\n",
"and uses the responses to form an action-observation loop."
]
},

View File

@@ -12,7 +12,7 @@
"In the context of AI agents, tools are designed to be executed by agents in\n",
"response to model-generated function calls.\n",
"\n",
"AutoGen provides the {py:mod}`autogen_core.components.tools` module with a suite of built-in\n",
"AutoGen provides the {py:mod}`autogen_core.tools` module with a suite of built-in\n",
"tools and utilities for creating and running custom tools."
]
},
@@ -22,7 +22,7 @@
"source": [
"## Built-in Tools\n",
"\n",
"One of the built-in tools is the {py:class}`~autogen_core.components.tools.PythonCodeExecutionTool`,\n",
"One of the built-in tools is the {py:class}`~autogen_core.tools.PythonCodeExecutionTool`,\n",
"which allows agents to execute Python code snippets.\n",
"\n",
"Here is how you create the tool and use it."
@@ -44,7 +44,7 @@
],
"source": [
"from autogen_core import CancellationToken\n",
"from autogen_core.components.tools import PythonCodeExecutionTool\n",
"from autogen_core.tools import PythonCodeExecutionTool\n",
"from autogen_ext.code_executors.docker import DockerCommandLineCodeExecutor\n",
"\n",
"# Create the tool.\n",
@@ -73,7 +73,7 @@
"The {py:class}`~autogen_ext.code_executors.docker.DockerCommandLineCodeExecutor`\n",
"class is a built-in code executor that runs Python code snippets in a subprocess\n",
"in the command line environment of a docker container.\n",
"The {py:class}`~autogen_core.components.tools.PythonCodeExecutionTool` class wraps the code executor\n",
"The {py:class}`~autogen_core.tools.PythonCodeExecutionTool` class wraps the code executor\n",
"and provides a simple interface to execute Python code snippets.\n",
"\n",
"Other built-in tools will be added in the future."
@@ -87,9 +87,9 @@
"\n",
"A tool can also be a simple Python function that performs a specific action.\n",
"To create a custom function tool, you just need to create a Python function\n",
"and use the {py:class}`~autogen_core.components.tools.FunctionTool` class to wrap it.\n",
"and use the {py:class}`~autogen_core.tools.FunctionTool` class to wrap it.\n",
"\n",
"The {py:class}`~autogen_core.components.tools.FunctionTool` class uses descriptions and type annotations\n",
"The {py:class}`~autogen_core.tools.FunctionTool` class uses descriptions and type annotations\n",
"to inform the LLM when and how to use a given function. The description provides context\n",
"about the functions purpose and intended use cases, while type annotations inform the LLM about\n",
"the expected parameters and return type.\n",
@@ -114,7 +114,7 @@
"import random\n",
"\n",
"from autogen_core import CancellationToken\n",
"from autogen_core.components.tools import FunctionTool\n",
"from autogen_core.tools import FunctionTool\n",
"from typing_extensions import Annotated\n",
"\n",
"\n",
@@ -140,9 +140,9 @@
"source": [
"## Tool-Equipped Agent\n",
"\n",
"To use tools with an agent, you can use {py:class}`~autogen_core.components.tool_agent.ToolAgent`,\n",
"To use tools with an agent, you can use {py:class}`~autogen_core.tool_agent.ToolAgent`,\n",
"by using it in a composition pattern.\n",
"Here is an example tool-use agent that uses {py:class}`~autogen_core.components.tool_agent.ToolAgent`\n",
"Here is an example tool-use agent that uses {py:class}`~autogen_core.tool_agent.ToolAgent`\n",
"as an inner agent for executing tools."
]
},
@@ -163,7 +163,6 @@
" SingleThreadedAgentRuntime,\n",
" message_handler,\n",
")\n",
"from autogen_core.components.tools import FunctionTool, Tool, ToolSchema\n",
"from autogen_core.models import (\n",
" ChatCompletionClient,\n",
" LLMMessage,\n",
@@ -171,6 +170,7 @@
" UserMessage,\n",
")\n",
"from autogen_core.tool_agent import ToolAgent, tool_agent_caller_loop\n",
"from autogen_core.tools import FunctionTool, Tool, ToolSchema\n",
"from autogen_ext.models import OpenAIChatCompletionClient\n",
"\n",
"\n",
@@ -209,7 +209,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The `ToolUseAgent` class uses a convenience function {py:meth}`~autogen_core.components.tool_agent.tool_agent_caller_loop`, \n",
"The `ToolUseAgent` class uses a convenience function {py:meth}`~autogen_core.tool_agent.tool_agent_caller_loop`, \n",
"to handle the interaction between the model and the tool agent.\n",
"The core idea can be described using a simple control flow graph:\n",
"\n",
@@ -218,7 +218,7 @@
"The `ToolUseAgent`'s `handle_user_message` handler handles messages from the user,\n",
"and determines whether the model has generated a tool call.\n",
"If the model has generated tool calls, then the handler sends a function call\n",
"message to the {py:class}`~autogen_core.components.tool_agent.ToolAgent` agent\n",
"message to the {py:class}`~autogen_core.tool_agent.ToolAgent` agent\n",
"to execute the tools,\n",
"and then queries the model again with the results of the tool calls.\n",
"This process continues until the model stops generating tool calls,\n",

View File

@@ -15,9 +15,9 @@ from autogen_core import (
DefaultTopicId,
SingleThreadedAgentRuntime,
)
from autogen_core.components.tools import FunctionTool
from autogen_core.model_context import BufferedChatCompletionContext
from autogen_core.models import SystemMessage
from autogen_core.tools import FunctionTool
from chess import BLACK, SQUARE_NAMES, WHITE, Board, Move
from chess import piece_name as get_piece_name
from common.agents._chat_completion_agent import ChatCompletionAgent

View File

@@ -11,7 +11,6 @@ from autogen_core import (
RoutedAgent,
message_handler,
)
from autogen_core.components.tools import Tool
from autogen_core.model_context import ChatCompletionContext
from autogen_core.models import (
AssistantMessage,
@@ -21,6 +20,7 @@ from autogen_core.models import (
SystemMessage,
UserMessage,
)
from autogen_core.tools import Tool
from ..types import (
FunctionCallMessage,

View File

@@ -42,7 +42,6 @@ from autogen_core import (
type_subscription,
)
from autogen_core.base.intervention import DefaultInterventionHandler
from autogen_core.components.tools import BaseTool
from autogen_core.model_context import BufferedChatCompletionContext
from autogen_core.models import (
AssistantMessage,
@@ -50,6 +49,7 @@ from autogen_core.models import (
SystemMessage,
UserMessage,
)
from autogen_core.tools import BaseTool
from common.types import TextMessage
from common.utils import get_chat_completion_client_from_envs
from pydantic import BaseModel, Field

View File

@@ -1,11 +1,23 @@
from ._caller_loop import tool_agent_caller_loop
from ._tool_agent import (
InvalidToolArgumentsException,
ToolAgent,
ToolException,
ToolExecutionException,
ToolNotFoundException,
from typing import Any
from typing_extensions import deprecated
from ...tool_agent import (
InvalidToolArgumentsException as InvalidToolArgumentsExceptionAlias,
)
from ...tool_agent import (
ToolAgent as ToolAgentAlias,
)
from ...tool_agent import (
ToolException as ToolExceptionAlias,
)
from ...tool_agent import (
ToolExecutionException as ToolExecutionExceptionAlias,
)
from ...tool_agent import (
ToolNotFoundException as ToolNotFoundExceptionAlias,
)
from ...tool_agent import tool_agent_caller_loop as tool_agent_caller_loop_alias
__all__ = [
"ToolAgent",
@@ -15,3 +27,45 @@ __all__ = [
"ToolExecutionException",
"tool_agent_caller_loop",
]
@deprecated(
"autogen_core.tool_agent.ToolAgentAlias moved to autogen_core.tool_agent.ToolAgentAlias. This alias will be removed in 0.4.0."
)
class ToolAgent(ToolAgentAlias):
pass
@deprecated(
"autogen_core.tool_agent.ToolExceptionAlias moved to autogen_core.tool_agent.ToolExceptionAlias. This alias will be removed in 0.4.0."
)
class ToolException(ToolExceptionAlias):
pass
@deprecated(
"autogen_core.tool_agent.ToolNotFoundExceptionAlias moved to autogen_core.tool_agent.ToolNotFoundExceptionAlias. This alias will be removed in 0.4.0."
)
class ToolNotFoundException(ToolNotFoundExceptionAlias):
pass
@deprecated(
"autogen_core.tool_agent.InvalidToolArgumentsExceptionAlias moved to autogen_core.tool_agent.InvalidToolArgumentsExceptionAlias. This alias will be removed in 0.4.0."
)
class InvalidToolArgumentsException(InvalidToolArgumentsExceptionAlias):
pass
@deprecated(
"autogen_core.tool_agent.ToolExecutionExceptionAlias moved to autogen_core.tool_agent.ToolExecutionExceptionAlias. This alias will be removed in 0.4.0."
)
class ToolExecutionException(ToolExecutionExceptionAlias):
pass
@deprecated(
"autogen_core.tool_agent.tool_agent_caller_loop moved to autogen_core.tool_agent.tool_agent_caller_loop. This alias will be removed in 0.4.0."
)
def tool_agent_caller_loop(*args: Any, **kwargs: Any) -> Any:
return tool_agent_caller_loop_alias(*args, **kwargs) # type: ignore

View File

@@ -1,6 +1,33 @@
from ._base import BaseTool, BaseToolWithState, ParametersSchema, Tool, ToolSchema
from ._code_execution import CodeExecutionInput, CodeExecutionResult, PythonCodeExecutionTool
from ._function_tool import FunctionTool
from typing import TypeVar
from pydantic import BaseModel
from typing_extensions import deprecated
from ...tools import (
BaseTool as BaseToolAlias,
)
from ...tools import (
BaseToolWithState as BaseToolWithStateAlias,
)
from ...tools import (
CodeExecutionInput as CodeExecutionInputAlias,
)
from ...tools import (
CodeExecutionResult as CodeExecutionResultAlias,
)
from ...tools import FunctionTool as FunctionToolAlias
from ...tools import (
ParametersSchema as ParametersSchemaAlias,
)
from ...tools import (
PythonCodeExecutionTool as PythonCodeExecutionToolAlias,
)
from ...tools import (
Tool as ToolAlias,
)
from ...tools import (
ToolSchema as ToolSchemaAlias,
)
__all__ = [
"Tool",
@@ -13,3 +40,69 @@ __all__ = [
"CodeExecutionResult",
"FunctionTool",
]
ArgsT = TypeVar("ArgsT", bound=BaseModel, contravariant=True)
ReturnT = TypeVar("ReturnT", bound=BaseModel, covariant=True)
StateT = TypeVar("StateT", bound=BaseModel)
@deprecated(
"autogen_core.tools.BaseToolAlias moved to autogen_core.tools.BaseToolAlias. This alias will be removed in 0.4.0."
)
class BaseTool(BaseToolAlias[ArgsT, ReturnT]):
pass
@deprecated("autogen_core.tools.ToolAlias moved to autogen_core.tools.ToolAlias. This alias will be removed in 0.4.0.")
class Tool(ToolAlias):
pass
@deprecated(
"autogen_core.tools.ToolSchemaAlias moved to autogen_core.tools.ToolSchemaAlias. This alias will be removed in 0.4.0."
)
class ToolSchema(ToolSchemaAlias):
pass
@deprecated(
"autogen_core.tools.ParametersSchemaAlias moved to autogen_core.tools.ParametersSchemaAlias. This alias will be removed in 0.4.0."
)
class ParametersSchema(ParametersSchemaAlias):
pass
@deprecated(
"autogen_core.tools.BaseToolWithStateAlias moved to autogen_core.tools.BaseToolWithStateAlias. This alias will be removed in 0.4.0."
)
class BaseToolWithState(BaseToolWithStateAlias[ArgsT, ReturnT, StateT]):
pass
@deprecated(
"autogen_core.tools.PythonCodeExecutionToolAlias moved to autogen_core.tools.PythonCodeExecutionToolAlias. This alias will be removed in 0.4.0."
)
class PythonCodeExecutionTool(PythonCodeExecutionToolAlias):
pass
@deprecated(
"autogen_core.tools.CodeExecutionInputAlias moved to autogen_core.tools.CodeExecutionInputAlias. This alias will be removed in 0.4.0."
)
class CodeExecutionInput(CodeExecutionInputAlias):
pass
@deprecated(
"autogen_core.tools.CodeExecutionResultAlias moved to autogen_core.tools.CodeExecutionResultAlias. This alias will be removed in 0.4.0."
)
class CodeExecutionResult(CodeExecutionResultAlias):
pass
@deprecated(
"autogen_core.tools.FunctionToolAlias moved to autogen_core.tools.FunctionToolAlias. This alias will be removed in 0.4.0."
)
class FunctionTool(FunctionToolAlias):
pass

View File

@@ -12,7 +12,7 @@ from typing_extensions import (
)
from .. import CancellationToken
from ..components.tools import Tool, ToolSchema
from ..tools import Tool, ToolSchema
from ._types import CreateResult, LLMMessage, RequestUsage

View File

@@ -0,0 +1,17 @@
from ._caller_loop import tool_agent_caller_loop
from ._tool_agent import (
InvalidToolArgumentsException,
ToolAgent,
ToolException,
ToolExecutionException,
ToolNotFoundException,
)
__all__ = [
"ToolAgent",
"ToolException",
"ToolNotFoundException",
"InvalidToolArgumentsException",
"ToolExecutionException",
"tool_agent_caller_loop",
]

View File

@@ -1,8 +1,8 @@
import asyncio
from typing import List
from ... import AgentId, AgentRuntime, BaseAgent, CancellationToken, FunctionCall
from ...models import (
from .. import AgentId, AgentRuntime, BaseAgent, CancellationToken, FunctionCall
from ..models import (
AssistantMessage,
ChatCompletionClient,
FunctionExecutionResult,

View File

@@ -2,8 +2,8 @@ import json
from dataclasses import dataclass
from typing import List
from ... import FunctionCall, MessageContext, RoutedAgent, message_handler
from ...models import FunctionExecutionResult
from .. import FunctionCall, MessageContext, RoutedAgent, message_handler
from ..models import FunctionExecutionResult
from ..tools import Tool
__all__ = [

View File

@@ -0,0 +1,15 @@
from ._base import BaseTool, BaseToolWithState, ParametersSchema, Tool, ToolSchema
from ._code_execution import CodeExecutionInput, CodeExecutionResult, PythonCodeExecutionTool
from ._function_tool import FunctionTool
__all__ = [
"Tool",
"ToolSchema",
"ParametersSchema",
"BaseTool",
"BaseToolWithState",
"PythonCodeExecutionTool",
"CodeExecutionInput",
"CodeExecutionResult",
"FunctionTool",
]

View File

@@ -7,8 +7,8 @@ import jsonref
from pydantic import BaseModel
from typing_extensions import NotRequired
from ... import CancellationToken
from ..._function_utils import normalize_annotated_type
from .. import CancellationToken
from .._function_utils import normalize_annotated_type
T = TypeVar("T", bound=BaseModel, contravariant=True)

View File

@@ -1,7 +1,7 @@
from pydantic import BaseModel, Field, model_serializer
from ... import CancellationToken
from ...code_executor import CodeBlock, CodeExecutor
from .. import CancellationToken
from ..code_executor import CodeBlock, CodeExecutor
from ._base import BaseTool

View File

@@ -4,8 +4,8 @@ from typing import Any, Callable
from pydantic import BaseModel
from ... import CancellationToken
from ..._function_utils import (
from .. import CancellationToken
from .._function_utils import (
args_base_model_from_signature,
get_typed_signature,
)
@@ -39,7 +39,7 @@ class FunctionTool(BaseTool[BaseModel, BaseModel]):
import random
from autogen_core import CancellationToken
from autogen_core.components.tools import FunctionTool
from autogen_core.tools import FunctionTool
from typing_extensions import Annotated
import asyncio

View File

@@ -4,14 +4,6 @@ from typing import Any, AsyncGenerator, List, Mapping, Optional, Sequence, Union
import pytest
from autogen_core import AgentId, CancellationToken, FunctionCall, SingleThreadedAgentRuntime
from autogen_core.components.tool_agent import (
InvalidToolArgumentsException,
ToolAgent,
ToolExecutionException,
ToolNotFoundException,
tool_agent_caller_loop,
)
from autogen_core.components.tools import FunctionTool, Tool, ToolSchema
from autogen_core.models import (
AssistantMessage,
ChatCompletionClient,
@@ -23,6 +15,14 @@ from autogen_core.models import (
RequestUsage,
UserMessage,
)
from autogen_core.tool_agent import (
InvalidToolArgumentsException,
ToolAgent,
ToolExecutionException,
ToolNotFoundException,
tool_agent_caller_loop,
)
from autogen_core.tools import FunctionTool, Tool, ToolSchema
def _pass_function(input: str) -> str:

View File

@@ -4,8 +4,8 @@ from typing import Annotated, List
import pytest
from autogen_core import CancellationToken
from autogen_core._function_utils import get_typed_signature
from autogen_core.components.tools import BaseTool, FunctionTool
from autogen_core.components.tools._base import ToolSchema
from autogen_core.tools import BaseTool, FunctionTool
from autogen_core.tools._base import ToolSchema
from pydantic import BaseModel, Field, model_serializer
from pydantic_core import PydanticUndefined