Python: [BREAKING] changed AIFunction to FunctionTool and @ai_function to @tool (#3413)

* changed AIFunction to FunctionTool and @ai_function to @tool

* test and mypy fixes

* mypy fix

* switch function tool to always_require

* fix noop

* fix github copilot imports

* test fixes

* fix ollama test

* fixes for tests

* fix tests

* reverted change to always_require and extended timeout

* fix test
This commit is contained in:
Eduard van Valkenburg
2026-01-28 15:53:53 +01:00
committed by GitHub
Unverified
parent 15b43f2abe
commit a7d924a7d2
255 changed files with 1202 additions and 1290 deletions
@@ -7,7 +7,14 @@ from unittest.mock import AsyncMock, MagicMock, patch
from uuid import uuid4
import pytest
from agent_framework import AgentResponse, AgentResponseUpdate, AgentThread, ChatMessage, Content, Role
from agent_framework import (
AgentResponse,
AgentResponseUpdate,
AgentThread,
ChatMessage,
Content,
Role,
)
from agent_framework.exceptions import ServiceException
from copilot.generated.session_events import Data, SessionEvent, SessionEventType
@@ -733,10 +740,10 @@ class TestGithubCopilotAgentToolConversion:
mock_client: MagicMock,
) -> None:
"""Test that mixed tool types are handled correctly."""
from agent_framework._tools import ai_function
from agent_framework import tool
from copilot.types import Tool as CopilotTool
@ai_function
@tool(approval_mode="never_require")
def my_function(arg: str) -> str:
"""A function tool."""
return arg
@@ -754,7 +761,7 @@ class TestGithubCopilotAgentToolConversion:
result = agent._prepare_tools([my_function, copilot_tool]) # type: ignore
assert len(result) == 2
# First tool is converted AIFunction
# First tool is converted FunctionTool
assert result[0].name == "my_function"
# Second tool is CopilotTool passthrough
assert result[1] == copilot_tool