Files
adk-python/contributing/samples/langchain_structured_tool_agent/agent.py
T
Hangfei LinandCopybara-Service e2518dc371 fix: Ignore AsyncGenerator return types in function declarations
For Vertex model backend, we send response back. This doesn't work for streaming tools that the return type is AsyncGenerator. So the fix here is to ignore the return type when it's AsyncGenerator.

We can't distinguish streaming vs non-streaming tool with AsyncGenerator though as LiveRequestQueue is optional in streaming tool.

Adds an `ignore_response` option to `build_function_declaration` to skip including the return type in the function declaration. This is enabled for tools that return `AsyncGenerator`, as the model does not yet support understanding these return types, while streaming tools can still handle them. Also, removes redundant return statements in `_get_mandatory_params`.

PiperOrigin-RevId: 794392846
2025-08-12 21:45:52 -07:00

68 lines
1.7 KiB
Python

# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
This agent aims to test the Langchain tool with Langchain's StructuredTool
"""
from __future__ import annotations
from google.adk.agents.llm_agent import Agent
from google.adk.tools.langchain_tool import LangchainTool
from langchain.tools import tool
from langchain_core.tools.structured import StructuredTool
from pydantic import BaseModel
async def add(x, y) -> int:
"""Adds two numbers."""
return x + y
@tool
def minus(x, y) -> int:
"""Minus two numbers."""
return x - y
class AddSchema(BaseModel):
x: int
y: int
class MinusSchema(BaseModel):
x: int
y: int
test_langchain_add_tool = StructuredTool.from_function(
add,
name="add",
description="Adds two numbers",
args_schema=AddSchema,
)
root_agent = Agent(
model="gemini-2.0-flash-001",
name="test_app",
description="A helpful assistant for user questions.",
instruction=(
"You are a helpful assistant for user questions, you have access to a"
" tool that adds two numbers."
),
tools=[
LangchainTool(tool=test_langchain_add_tool),
LangchainTool(tool=minus),
],
)