馃敶Required Information
Describe the Bug:
Annotated is the standard way to provide metadata about input parameters and output in a tool, most importantly descriptions and constraints. However, these today are stripped by the current logic before calling the Gemini API, so the underlying model never sees them. This is fixed in PR: #6879
But when using Annotated, parameter and response descriptions are missing.
Steps to Reproduce:
- Enable the
JSON_SCHEMA_FOR_FUNC_DECL feature (where we expect a complete tool schema to be made out of the parameter list)
- Define a tool like the below
from typing import Annotated
from uuid import UUID
from pydantic import Field
def get_forecast(
city_id: Annotated[
UUID, Field(description="The city UUID as from the Google Places API")
],
days: Annotated[
int, Field(description="Number of days to forecast", ge=1, le=14)
],
) -> str:
"""Use when you want a multi-day weather forecast for a US city."""
return ...
- Set a breakpoint in src/google/adk/flows/llm_flows/base_llm_flow.py, in _call_llm_async (inside _call_llm_with_tracing, just before llm.generate_content_async(llm_request=llm_request, ...)) and inspect llm_request.config.tools[0].function_declarations[0].parameters_json_schema
Expected Behavior:
Observe that the Gemini API call tool schema is:
{
"type": "object",
"title": "get_forecastParams",
"properties": {
"city_id": {
"type": "string",
"format": "uuid",
"title": "City Id",
"description": "The city UUID as from the Google Places API"
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 14,
"title": "Days",
"description": "Number of days to forecast"
}
},
"required": ["city_id", "days"]
}
Where we see the tool description included.
Observed Behavior:
{
"type": "object",
"title": "get_forecastParams",
"properties": {
"city_id": {
"type": "string",
"format": "uuid",
"title": "City Id"
},
"days": {
"type": "integer",
"title": "Days"
}
},
"required": ["city_id", "days"]
}
Where we can see the tool description omitted.
Environment Details:
- ADK Library Version: 2.7.1
- Desktop OS: MacOS
- Python Version: 3.13
Model Information:
- Are you using LiteLLM: No
- Which model is being used: gemini-3.7-flash
馃煛 Optional Information
Regression:
Not a regression.
How often has this issue occurred?:
馃敶Required Information
Describe the Bug:
Annotated is the standard way to provide metadata about input parameters and output in a tool, most importantly descriptions and constraints. However, these today are stripped by the current logic before calling the Gemini API, so the underlying model never sees them. This is fixed in PR: #6879
But when using Annotated, parameter and response descriptions are missing.
Steps to Reproduce:
JSON_SCHEMA_FOR_FUNC_DECLfeature (where we expect a complete tool schema to be made out of the parameter list)Expected Behavior:
Observe that the Gemini API call tool schema is:
{ "type": "object", "title": "get_forecastParams", "properties": { "city_id": { "type": "string", "format": "uuid", "title": "City Id", "description": "The city UUID as from the Google Places API" }, "days": { "type": "integer", "minimum": 1, "maximum": 14, "title": "Days", "description": "Number of days to forecast" } }, "required": ["city_id", "days"] }Where we see the tool description included.
Observed Behavior:
{ "type": "object", "title": "get_forecastParams", "properties": { "city_id": { "type": "string", "format": "uuid", "title": "City Id" }, "days": { "type": "integer", "title": "Days" } }, "required": ["city_id", "days"] }Where we can see the tool description omitted.
Environment Details:
Model Information:
馃煛 Optional Information
Regression:
Not a regression.
How often has this issue occurred?: