in prompt/prompt-executor/prompt-executor-clients/prompt-executor-bedrock-client/src/jvmTest/kotlin/ai/koog/prompt/executor/clients/bedrock/modelfamilies/BedrockToolSerializationTest.kt [19:220]
fun toolParameterTestCases(): Stream<Arguments> {
val stringParamDesc = "Search query"
val intParamDesc = "Number of results"
val floatParamDesc = "Temperature value"
val boolParamDesc = "Feature toggle"
val enumValues = listOf("json", "xml", "text")
val listParamDesc = "List of users"
val listIntParamDesc = "List of IDs"
val objectParamDesc = "User information"
val namePropertyName = "name"
val namePropertyDesc = "User name"
val agePropertyName = "age"
val agePropertyDesc = "User age"
val streetPropertyName = "street"
val streetPropertyDesc = "Street address"
val cityPropertyName = "city"
val cityPropertyDesc = "City name"
val addressPropertyName = "address"
val addressPropertyDesc = "User address"
return Stream.of(
// String
Arguments.of(
ToolParameterDescriptor(
name = "query",
description = stringParamDesc,
type = ToolParameterType.String
),
mapOf(
"description" to stringParamDesc,
"type" to "string"
)
),
// Integer
Arguments.of(
ToolParameterDescriptor(
name = "count",
description = intParamDesc,
type = ToolParameterType.Integer
),
mapOf(
"description" to intParamDesc,
"type" to "integer"
)
),
// Float
Arguments.of(
ToolParameterDescriptor(
name = "temperature",
description = floatParamDesc,
type = ToolParameterType.Float
),
mapOf(
"description" to floatParamDesc,
"type" to "number"
)
),
// Boolean
Arguments.of(
ToolParameterDescriptor(
name = "enabled",
description = boolParamDesc,
type = ToolParameterType.Boolean
),
mapOf(
"description" to boolParamDesc,
"type" to "boolean"
)
),
// Null
Arguments.of(
ToolParameterDescriptor(
name = "nullValue",
description = "Null parameter",
type = ToolParameterType.Null
),
mapOf(
"description" to "Null parameter",
"type" to "null"
)
),
// Enum
Arguments.of(
ToolParameterDescriptor(
name = "format",
description = "Output format",
type = ToolParameterType.Enum(enumValues.toTypedArray())
),
mapOf(
"description" to "Output format",
"type" to "string",
"enum" to enumValues
)
),
// List of String
Arguments.of(
ToolParameterDescriptor(
name = "user",
description = listParamDesc,
type = ToolParameterType.List(ToolParameterType.String)
),
mapOf(
"description" to listParamDesc,
"type" to "array",
"items" to mapOf("type" to "string")
)
),
// List of Integer
Arguments.of(
ToolParameterDescriptor(
name = "List",
description = listIntParamDesc,
type = ToolParameterType.List(ToolParameterType.Integer)
),
mapOf(
"description" to listIntParamDesc,
"type" to "array",
"items" to mapOf("type" to "integer")
)
),
// Object
Arguments.of(
{
val objectType = ToolParameterType.Object(
properties = listOf(
ToolParameterDescriptor(namePropertyName, namePropertyDesc, ToolParameterType.String),
ToolParameterDescriptor(agePropertyName, agePropertyDesc, ToolParameterType.Integer)
)
)
ToolParameterDescriptor(
name = "user",
description = objectParamDesc,
type = objectType
)
}(),
mapOf(
"description" to objectParamDesc,
"type" to "object"
)
),
// Nested Object
Arguments.of(
{
val addressType = ToolParameterType.Object(
properties = listOf(
ToolParameterDescriptor(
streetPropertyName,
streetPropertyDesc,
ToolParameterType.String
),
ToolParameterDescriptor(cityPropertyName, cityPropertyDesc, ToolParameterType.String)
)
)
val userType = ToolParameterType.Object(
properties = listOf(
ToolParameterDescriptor(namePropertyName, namePropertyDesc, ToolParameterType.String),
ToolParameterDescriptor(addressPropertyName, addressPropertyDesc, addressType)
)
)
ToolParameterDescriptor(
name = "user",
description = objectParamDesc,
type = userType
)
}(),
mapOf(
"description" to objectParamDesc,
"type" to "object"
)
),
// AnyOf (String or Number)
Arguments.of(
ToolParameterDescriptor(
name = "anyOfValue",
description = "String or number value",
type = ToolParameterType.AnyOf(
types = arrayOf(
ToolParameterDescriptor(name = "", description = "String option", type = ToolParameterType.String),
ToolParameterDescriptor(name = "", description = "Number option", type = ToolParameterType.Float)
)
)
),
mapOf(
"description" to "String or number value",
"anyOf" to "expected" // We'll verify anyOf array exists in test
)
)
)
}