diff --git a/litellm/llms/vertex_ai_and_google_ai_studio/common_utils.py b/litellm/llms/vertex_ai_and_google_ai_studio/common_utils.py index 71b2bbc0188..0f95b222c1b 100644 --- a/litellm/llms/vertex_ai_and_google_ai_studio/common_utils.py +++ b/litellm/llms/vertex_ai_and_google_ai_studio/common_utils.py @@ -164,7 +164,12 @@ def _build_vertex_schema(parameters: dict): # 4. Suppress unnecessary title generation: # * https://github.com/pydantic/pydantic/issues/1051 # * http://cl/586221780 - strip_titles(parameters) + strip_field(parameters, field_name="title") + + strip_field( + parameters, field_name="$schema" + ) # 5. Remove $schema - json schema value, not supported by OpenAPI - causes vertex errors. + return parameters @@ -245,14 +250,14 @@ def add_object_type(schema): add_object_type(items) -def strip_titles(schema): - schema.pop("title", None) +def strip_field(schema, field_name: str): + schema.pop(field_name, None) properties = schema.get("properties", None) if properties is not None: for name, value in properties.items(): - strip_titles(value) + strip_field(value, field_name) items = schema.get("items", None) if items is not None: - strip_titles(items) + strip_field(items, field_name) diff --git a/litellm/llms/vertex_ai_and_google_ai_studio/gemini/vertex_and_google_ai_studio_gemini.py b/litellm/llms/vertex_ai_and_google_ai_studio/gemini/vertex_and_google_ai_studio_gemini.py index a6e1d782a8d..914651f3dfe 100644 --- a/litellm/llms/vertex_ai_and_google_ai_studio/gemini/vertex_and_google_ai_studio_gemini.py +++ b/litellm/llms/vertex_ai_and_google_ai_studio/gemini/vertex_and_google_ai_studio_gemini.py @@ -400,14 +400,26 @@ class VertexGeminiConfig: value = _remove_additional_properties(value) # remove 'strict' from tools value = _remove_strict_from_schema(value) + for tool in value: openai_function_object: Optional[ChatCompletionToolParamFunctionChunk] = ( None ) if "function" in tool: # tools list - openai_function_object = ChatCompletionToolParamFunctionChunk( # type: ignore + _openai_function_object = ChatCompletionToolParamFunctionChunk( # type: ignore **tool["function"] ) + + if ( + "parameters" in _openai_function_object + and _openai_function_object["parameters"] is not None + ): # OPENAI accepts JSON Schema, Google accepts OpenAPI schema. + _openai_function_object["parameters"] = _build_vertex_schema( + _openai_function_object["parameters"] + ) + + openai_function_object = _openai_function_object + elif "name" in tool: # functions list openai_function_object = ChatCompletionToolParamFunctionChunk(**tool) # type: ignore