fun testPromptSerialization()

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)
                }
            }
        }
    }