override fun executeStreaming()

in prompt/prompt-executor/prompt-executor-clients/prompt-executor-ollama-client/src/commonMain/kotlin/ai/koog/prompt/executor/ollama/client/OllamaClient.kt [272:317]


    override fun executeStreaming(
        prompt: Prompt,
        model: LLModel,
        tools: List<ToolDescriptor>
    ): Flow<StreamFrame> = streamFrameFlow {
        require(model.provider == LLMProvider.Ollama) { "Model not supported by Ollama" }

        val request = ollamaJson.encodeToString(
            OllamaChatRequestDTOSerializer,
            OllamaChatRequestDTO(
                model = model.id,
                messages = prompt.toOllamaChatMessages(model),
                options = extractOllamaOptions(prompt, model),
                stream = true,
                additionalProperties = prompt.params.additionalProperties,
            )
        )

        val response = client.post(DEFAULT_MESSAGE_PATH) {
            setBody(request)
        }

        val channel = response.bodyAsChannel()

        while (!channel.isClosedForRead) {
            val line = channel.readUTF8Line() ?: break
            if (line.isBlank()) continue

            try {
                val chunk = ollamaJson.decodeFromString<OllamaChatResponseDTO>(line)
                chunk.message?.let { message ->
                    emitAppend(message.content)
                    message.toolCalls?.forEach { toolCall ->
                        emitToolCall(
                            id = null,
                            name = toolCall.function.name,
                            content = toolCall.function.arguments.toString()
                        )
                    }
                }
            } catch (_: Exception) {
                // Skip malformed JSON lines
                continue
            }
        }
    }