diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/internal/util/conversions.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/internal/util/conversions.kt index 506570d96e1..4c30459a6c4 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/internal/util/conversions.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/internal/util/conversions.kt @@ -153,16 +153,7 @@ internal fun Tool.toInternal() = com.google.firebase.vertexai.common.client.Tool(functionDeclarations.map { it.toInternal() }) internal fun FunctionDeclaration.toInternal() = - com.google.firebase.vertexai.common.client.FunctionDeclaration( - name, - description, - Schema( - properties = parameters.mapValues { it.value.toInternal() }, - required = parameters.keys.minus(optionalParameters.toSet()).toList(), - type = "OBJECT", - nullable = false, - ), - ) + com.google.firebase.vertexai.common.client.FunctionDeclaration(name, "", schema.toInternal()) internal fun com.google.firebase.vertexai.type.Schema.toInternal(): Schema = Schema( diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/FunctionDeclaration.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/FunctionDeclaration.kt index e8949a4a6ba..f1c0bbd0090 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/FunctionDeclaration.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/FunctionDeclaration.kt @@ -41,4 +41,7 @@ class FunctionDeclaration( val description: String, val parameters: Map, val optionalParameters: List = emptyList(), -) +) { + internal val schema: Schema = + Schema.obj(properties = parameters, optionalProperties = optionalParameters, nullable = false) +} diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Schema.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Schema.kt index 4a3383e5c79..4d041c917d2 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Schema.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Schema.kt @@ -130,14 +130,20 @@ internal constructor( optionalProperties: List = emptyList(), description: String? = null, nullable: Boolean = false, - ) = - Schema( + ): Schema { + if (!properties.keys.containsAll(optionalProperties)) { + throw IllegalArgumentException( + "All optional properties must be present in properties. Missing: ${optionalProperties.minus(properties.keys)}" + ) + } + return Schema( description = description, nullable = nullable, properties = properties, required = properties.keys.minus(optionalProperties.toSet()).toList(), type = "OBJECT", ) + } /** * Returns a schema for an array.