in prompt/prompt-model/src/jvmTest/kotlin/ai/koog/prompt/PromptTest.kt [142:189]
fun testPromptSerialization() {
val prompt = basicPrompt.withUpdatedParams {
temperature = 0.7
speculation = speculationMessage
schema = LLMParams.Schema.JSON.Basic(simpleSchemaName, simpleSchema)
toolChoice = LLMParams.ToolChoice.Auto
user = "test_user"
}
val encodedPrompt = Json.encodeToString(prompt)
val decodedPrompt = Json.decodeFromString<Prompt>(encodedPrompt)
assertEquals(prompt, decodedPrompt)
assertEquals(prompt.messages.size, decodedPrompt.messages.size)
assertEquals(0.7, decodedPrompt.params.temperature)
assertEquals(speculationMessage, decodedPrompt.params.speculation)
assertTrue(decodedPrompt.params.schema is LLMParams.Schema.JSON)
assertEquals(simpleSchemaName, decodedPrompt.params.schema?.name)
assertTrue(decodedPrompt.params.toolChoice is LLMParams.ToolChoice.Auto)
assertEquals("test_user", decodedPrompt.params.user)
decodedPrompt.messages.forEachIndexed { index, decodedMessage ->
assertTrue(decodedMessage.role == prompt.messages[index].role)
assertTrue(decodedMessage.content == prompt.messages[index].content)
if (decodedMessage.role == Message.Role.Assistant) {
assertTrue(
(decodedMessage as Message.Assistant).finishReason ==
(prompt.messages[index] as Message.Assistant).finishReason
)
}
if (decodedMessage.role == Message.Role.Tool) {
if (decodedMessage is Message.Tool.Call) {
val originalToolMessage = prompt.messages[index] as Message.Tool.Call
val decodedToolMessage = decodedMessage
assertTrue(decodedToolMessage.id == originalToolMessage.id)
assertTrue(decodedToolMessage.tool == originalToolMessage.tool)
assertTrue(decodedToolMessage.content == originalToolMessage.content)
} else if (decodedMessage is Message.Tool.Result) {
val originalToolMessage = prompt.messages[index] as Message.Tool.Result
val decodedToolMessage = decodedMessage
assertTrue(decodedToolMessage.id == originalToolMessage.id)
assertTrue(decodedToolMessage.tool == originalToolMessage.tool)
assertTrue(decodedToolMessage.content == originalToolMessage.content)
}
}
}
}