diff --git a/src/google/adk/tools/_gemini_schema_util.py b/src/google/adk/tools/_gemini_schema_util.py index 08e8d4e6c1..df8bb97e98 100644 --- a/src/google/adk/tools/_gemini_schema_util.py +++ b/src/google/adk/tools/_gemini_schema_util.py @@ -26,6 +26,10 @@ class _ExtendedJSONSchema(JSONSchema): + const: Optional[Any] = Field( + default=None, + description="""Optional. Restricts the value to a single constant.""", + ) property_ordering: Optional[list[str]] = Field( default=None, description="""Optional. The order of the properties. Not a standard field in open api spec. Only used to support the order of the properties.""", @@ -183,6 +187,8 @@ def _sanitize_schema_formats_for_gemini( "any_of", # 'one_of', 'all_of', 'not' to come } snake_case_schema: dict[str, Any] = {} + has_const = False + const_value = None dict_schema_field_names: tuple[str, ...] = ( "properties", "defs", @@ -218,9 +224,15 @@ def _sanitize_schema_formats_for_gemini( (current_type == "string" and field_value in ("date-time", "enum")) ): snake_case_schema[field_name] = field_value + elif field_name == "const": + has_const = True + const_value = field_value elif field_name in supported_fields and field_value is not None: snake_case_schema[field_name] = field_value + if has_const and const_value is not None: + snake_case_schema["enum"] = [str(const_value)] + return _sanitize_schema_type(snake_case_schema, preserve_null_type) diff --git a/tests/unittests/tools/test_gemini_schema_util.py b/tests/unittests/tools/test_gemini_schema_util.py index d919172527..178158aa71 100644 --- a/tests/unittests/tools/test_gemini_schema_util.py +++ b/tests/unittests/tools/test_gemini_schema_util.py @@ -217,6 +217,11 @@ def test_to_gemini_schema_enum(self): gemini_schema = _to_gemini_schema(openapi_schema) assert gemini_schema.enum == ["a", "b", "c"] + def test_to_gemini_schema_const(self): + openapi_schema = {"type": "string", "const": "BaseAgent"} + gemini_schema = _to_gemini_schema(openapi_schema) + assert gemini_schema.enum == ["BaseAgent"] + def test_to_gemini_schema_required(self): openapi_schema = { "type": "object",