Skip to content

Fix: Handled AgentCardBuilder field inconsistencies #2099

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/google/adk/a2a/utils/agent_card_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def __init__(
agent: BaseAgent,
rpc_url: Optional[str] = None,
capabilities: Optional[AgentCapabilities] = None,
doc_url: Optional[str] = None,
documentation_url: Optional[str] = None,
provider: Optional[AgentProvider] = None,
agent_version: Optional[str] = None,
security_schemes: Optional[Dict[str, SecurityScheme]] = None,
Expand All @@ -70,7 +70,7 @@ def __init__(
self._agent = agent
self._rpc_url = rpc_url or 'http://localhost:80/a2a'
self._capabilities = capabilities or AgentCapabilities()
self._doc_url = doc_url
self._documentation_url = documentation_url or ""
self._provider = provider
self._security_schemes = security_schemes
self._agent_version = agent_version or '0.0.1'
Expand All @@ -85,10 +85,10 @@ async def build(self) -> AgentCard:
return AgentCard(
name=self._agent.name,
description=self._agent.description or 'An ADK Agent',
doc_url=self._doc_url,
url=f"{self._rpc_url.rstrip('/')}",
version=self._agent_version,
capabilities=self._capabilities,
documentation_url=self._documentation_url,
skills=all_skills,
default_input_modes=['text/plain'],
default_output_modes=['text/plain'],
Expand Down
13 changes: 7 additions & 6 deletions tests/unittests/a2a/utils/test_agent_card_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def test_init_with_valid_agent(self):
assert builder._agent == mock_agent
assert builder._rpc_url == "http://localhost:80/a2a"
assert isinstance(builder._capabilities, AgentCapabilities)
assert builder._doc_url is None
assert builder._documentation_url == ""
assert builder._provider is None
assert builder._security_schemes is None
assert builder._agent_version == "0.0.1"
Expand All @@ -126,7 +126,7 @@ def test_init_with_custom_parameters(self):
agent=mock_agent,
rpc_url="https://example.com/a2a",
capabilities=mock_capabilities,
doc_url="https://docs.example.com",
documentation_url="https://docs.example.com",
provider=mock_provider,
agent_version="1.2.3",
security_schemes=mock_security_schemes,
Expand All @@ -136,7 +136,7 @@ def test_init_with_custom_parameters(self):
assert builder._agent == mock_agent
assert builder._rpc_url == "https://example.com/a2a"
assert builder._capabilities == mock_capabilities
assert builder._doc_url == "https://docs.example.com"
assert builder._documentation_url == "https://docs.example.com"
assert builder._provider == mock_provider
assert builder._security_schemes == mock_security_schemes
assert builder._agent_version == "1.2.3"
Expand Down Expand Up @@ -181,7 +181,7 @@ async def test_build_success(
assert isinstance(result, AgentCard)
assert result.name == "test_agent"
assert result.description == "Test agent description"
assert result.documentation_url is None
assert result.documentation_url == ""
assert result.url == "http://localhost:80/a2a"
assert result.version == "0.0.1"
assert result.skills == [mock_primary_skill, mock_sub_skill]
Expand Down Expand Up @@ -213,8 +213,8 @@ async def test_build_with_custom_parameters(
builder = AgentCardBuilder(
agent=mock_agent,
rpc_url="https://example.com/a2a/",
doc_url="https://docs.example.com",
provider=mock_provider,
documentation_url="https://docs.example.com",
agent_version="2.0.0",
security_schemes=mock_security_schemes,
)
Expand All @@ -227,10 +227,11 @@ async def test_build_with_custom_parameters(
assert result.description == "An ADK Agent" # Default description
# The source code uses doc_url parameter but AgentCard expects documentation_url
# Since the source code doesn't map doc_url to documentation_url, it will be None
assert result.documentation_url is None
assert result.documentation_url == "https://docs.example.com"
assert (
result.url == "https://example.com/a2a"
) # Should strip trailing slash
assert result.documentation_url == "https://docs.example.com"
assert result.version == "2.0.0"
assert result.provider == mock_provider
assert result.security_schemes == mock_security_schemes
Expand Down