public override suspend fun moderate()

in prompt/prompt-executor/prompt-executor-clients/prompt-executor-mistralai-client/src/commonMain/kotlin/ai/koog/prompt/executor/clients/mistralai/MistralAILLMClient.kt [222:280]


    public override suspend fun moderate(prompt: Prompt, model: LLModel): ModerationResult {
        logger.debug { "Moderating text and image content with model: $model" }

        model.requireCapability(LLMCapability.Moderation)
        require(prompt.messages.isNotEmpty()) { "Can't moderate an empty prompt" }

        val input = prompt.messages
            .map { message ->
                require(!message.hasAttachments()) {
                    "Only text input is supported for MistralAI moderation"
                }
                message.toMessageContent(model)
            }
            .let { contents ->
                when {
                    contents.all { it is Content.Text } -> {
                        val text = contents.joinToString(separator = "\n\n") { (it as Content.Text).value }
                        Content.Text(text)
                    }

                    else -> {
                        val parts = contents.flatMap { content ->
                            when (content) {
                                is Content.Parts -> content.value
                                is Content.Text -> listOf(OpenAIContentPart.Text(content.value))
                            }
                        }
                        Content.Parts(parts)
                    }
                }
            }

        val request = MistralAIModerationRequest(model = model.id, input = input)

        val response = try {
            httpClient.post(
                path = settings.moderationPath,
                request = request,
                requestBodyType = MistralAIModerationRequest::class,
                responseType = MistralAIModerationResponse::class
            )
        } catch (e: CancellationException) {
            throw e
        } catch (e: Exception) {
            throw LLMClientException(
                clientName = clientName,
                message = e.message,
                cause = e
            )
        }

        val result = response.results.firstOrNull() ?: run {
            val exception = LLMClientException(clientName, "Empty results in MistralAI moderation response")
            logger.error(exception) { exception.message }
            throw exception
        }

        return result.toModerationResult()
    }