mirror of
https://github.com/encounter/adk-python.git
synced 2026-07-09 18:19:28 -07:00
PiperOrigin-RevId: 804222317
This commit is contained in:
committed by
Copybara-Service
parent
1979dcf496
commit
1e23652968
@@ -392,7 +392,10 @@ def _function_declaration_to_tool_param(
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if function_declaration.parameters.required:
|
if (
|
||||||
|
function_declaration.parameters
|
||||||
|
and function_declaration.parameters.required
|
||||||
|
):
|
||||||
tool_params["function"]["parameters"][
|
tool_params["function"]["parameters"][
|
||||||
"required"
|
"required"
|
||||||
] = function_declaration.parameters.required
|
] = function_declaration.parameters.required
|
||||||
@@ -596,8 +599,8 @@ def _get_completion_inputs(
|
|||||||
mapped_key = param_mapping.get(key, key)
|
mapped_key = param_mapping.get(key, key)
|
||||||
generation_params[mapped_key] = config_dict[key]
|
generation_params[mapped_key] = config_dict[key]
|
||||||
|
|
||||||
if not generation_params:
|
if not generation_params:
|
||||||
generation_params = None
|
generation_params = None
|
||||||
|
|
||||||
return messages, tools, response_format, generation_params
|
return messages, tools, response_format, generation_params
|
||||||
|
|
||||||
|
|||||||
@@ -731,6 +731,52 @@ function_declaration_test_cases = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"no_parameters",
|
||||||
|
types.FunctionDeclaration(
|
||||||
|
name="test_function_no_params",
|
||||||
|
description="Test function with no parameters",
|
||||||
|
),
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"function": {
|
||||||
|
"name": "test_function_no_params",
|
||||||
|
"description": "Test function with no parameters",
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"parameters_without_required",
|
||||||
|
types.FunctionDeclaration(
|
||||||
|
name="test_function_no_required",
|
||||||
|
description="Test function with parameters but no required field",
|
||||||
|
parameters=types.Schema(
|
||||||
|
type=types.Type.OBJECT,
|
||||||
|
properties={
|
||||||
|
"optional_arg": types.Schema(type=types.Type.STRING),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"function": {
|
||||||
|
"name": "test_function_no_required",
|
||||||
|
"description": (
|
||||||
|
"Test function with parameters but no required field"
|
||||||
|
),
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"optional_arg": {"type": "string"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -1577,6 +1623,87 @@ def test_get_completion_inputs_generation_params():
|
|||||||
assert "stop_sequences" not in generation_params
|
assert "stop_sequences" not in generation_params
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
def test_get_completion_inputs_empty_generation_params():
|
||||||
|
# Test that generation_params is None when no generation parameters are set
|
||||||
|
req = LlmRequest(
|
||||||
|
contents=[
|
||||||
|
types.Content(role="user", parts=[types.Part.from_text(text="hi")]),
|
||||||
|
],
|
||||||
|
config=types.GenerateContentConfig(),
|
||||||
|
)
|
||||||
|
from google.adk.models.lite_llm import _get_completion_inputs
|
||||||
|
|
||||||
|
_, _, _, generation_params = _get_completion_inputs(req)
|
||||||
|
assert generation_params is None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
def test_get_completion_inputs_minimal_config():
|
||||||
|
# Test that generation_params is None when config has no generation parameters
|
||||||
|
req = LlmRequest(
|
||||||
|
contents=[
|
||||||
|
types.Content(role="user", parts=[types.Part.from_text(text="hi")]),
|
||||||
|
],
|
||||||
|
config=types.GenerateContentConfig(
|
||||||
|
system_instruction="test instruction" # Non-generation parameter
|
||||||
|
),
|
||||||
|
)
|
||||||
|
from google.adk.models.lite_llm import _get_completion_inputs
|
||||||
|
|
||||||
|
_, _, _, generation_params = _get_completion_inputs(req)
|
||||||
|
assert generation_params is None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
def test_get_completion_inputs_partial_generation_params():
|
||||||
|
# Test that generation_params is correctly built even with only some parameters
|
||||||
|
req = LlmRequest(
|
||||||
|
contents=[
|
||||||
|
types.Content(role="user", parts=[types.Part.from_text(text="hi")]),
|
||||||
|
],
|
||||||
|
config=types.GenerateContentConfig(
|
||||||
|
temperature=0.7,
|
||||||
|
# Only temperature is set, others are None/default
|
||||||
|
),
|
||||||
|
)
|
||||||
|
from google.adk.models.lite_llm import _get_completion_inputs
|
||||||
|
|
||||||
|
_, _, _, generation_params = _get_completion_inputs(req)
|
||||||
|
assert generation_params is not None
|
||||||
|
assert generation_params["temperature"] == 0.7
|
||||||
|
# Should only contain the temperature parameter
|
||||||
|
assert len(generation_params) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_function_declaration_to_tool_param_edge_cases():
|
||||||
|
"""Test edge cases for function declaration conversion that caused the original bug."""
|
||||||
|
from google.adk.models.lite_llm import _function_declaration_to_tool_param
|
||||||
|
|
||||||
|
# Test function with None parameters (the original bug scenario)
|
||||||
|
func_decl = types.FunctionDeclaration(
|
||||||
|
name="test_function_none_params",
|
||||||
|
description="Function with None parameters",
|
||||||
|
parameters=None,
|
||||||
|
)
|
||||||
|
result = _function_declaration_to_tool_param(func_decl)
|
||||||
|
expected = {
|
||||||
|
"type": "function",
|
||||||
|
"function": {
|
||||||
|
"name": "test_function_none_params",
|
||||||
|
"description": "Function with None parameters",
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
# Verify no 'required' field is added when parameters is None
|
||||||
|
assert "required" not in result["function"]["parameters"]
|
||||||
|
|
||||||
|
|
||||||
def test_gemini_via_litellm_warning(monkeypatch):
|
def test_gemini_via_litellm_warning(monkeypatch):
|
||||||
"""Test that Gemini via LiteLLM shows warning."""
|
"""Test that Gemini via LiteLLM shows warning."""
|
||||||
# Ensure environment variable is not set
|
# Ensure environment variable is not set
|
||||||
|
|||||||
Reference in New Issue
Block a user