package com.sonic.cow.client;

import com.byteplus.ark.runtime.model.completion.chat.ChatCompletionChunk;
import com.byteplus.ark.runtime.model.completion.chat.ChatMessage;
import com.byteplus.ark.runtime.model.completion.chat.ChatTool;
import com.sonic.cow.client.request.ChatCompletionMessage;
import com.sonic.cow.domain.bo.AiGen4Bo;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 上下文聊天
 */
public interface ContextChatClient {

    /**
     * 创建上下文缓存
     * @param messages 消息列表
     * @param ttl   有效时间
     * @return 上下文缓存ID
     */
    String createContextCaching(List<ChatMessage> messages, Integer ttl);

    /**
     * 上下文文本聊天
     * @param message
     * @return
     */
    String contextChat(String contextId, String message);

    /**
     * 上下文文本聊天
     * @param contextId
     * @param message
     * @param tools
     * @return
     */
    String contextChat(String contextId, String message, List<ChatTool> tools);

    /**
     * 多模态 上下文文本聊天
     * @param contextId
     * @param message
     * @param tools
     * @return
     */
    String contextToolsChat(String contextId, String message, List<ChatTool> tools);

    /**
     * 多模态 上下文文本聊天
     * @param contextId
     * @param message
     * @param imageUrl
     * @return
     */
    String contextChat(String contextId, String message, String imageUrl);

    /**
     * 聊天
     * @param messages
     * @return
     */
    String chat(List<ChatMessage>  messages);

    /**
     * 流式上下文文本聊天
     * @param message
     * @return
     */
    Flux<ChatCompletionChunk> streamContextChat(String contextId, String message);

    /**
     * AI一键生成
     * @param systemPrompt 系统提示词
     * @param temperature 温度
     * @return
     */
    String aiGen(String systemPrompt, Double temperature);

    /**
     * AI一键生成
     * @param systemPrompt
     * @param temperature
     * @return
     */
    String aiGen2(String systemPrompt, Double temperature);

    /**
     * AI一键生成
     * @param systemPrompt
     * @param temperature
     * @param topp
     * @return
     */
    String aiGen3(String systemPrompt, String model, Double temperature, Double topp);

    /**
     * AI一键生成
     * @param systemPrompt
     * @param temperature
     * @param topp
     * @return
     */
    AiGen4Bo aiGen4(String systemPrompt, String model, Double temperature, Double topp);

    /**
     * AI一键生成
     * @param chatMessageList
     * @param temperature
     * @return
     */
    String aiGen4(List<ChatCompletionMessage> chatMessageList, Double temperature);


    /**
     * 敏感词校验
     * @param content
     * @return
     */
    void nsfwCheck(String content);

    /**
     * 敏感词校验
     * @param userContent
     * @return
     */
    String nsfwCheckV2(String userContent);
}
