package com.gzzm.lobster.llm;

/**
 * ModelProtocol —— 模型调用协议方言 / Model wire-protocol dialect.
 *
 * <p>同一个 provider 有时支持多种 HTTP body 形态（比如 OpenAI 兼容端点既有
 * {@code chat-completions} 也可能被包装成 {@code messages}），所以与
 * {@link ModelProvider} 正交存储。
 *
 * <p>连字符形式（{@code chat-completions}）与枚举常量（{@code chat_completions}）
 * 通过 {@link #fromString(String)} 互通。
 */
public enum ModelProtocol {
    /** OpenAI Chat Completions 风格 body / OpenAI Chat Completions body. */
    chat_completions,
    /** Ollama {@code /api/chat} 风格 body / Ollama /api/chat body. */
    ollama_chat,
    /** vLLM {@code /generate} 风格 body / vLLM /generate body. */
    vllm_generate,
    /** Anthropic {@code /messages} 风格 body / Anthropic /messages body. */
    messages;

    /**
     * 容错解析：同时接受下划线与连字符形式，大小写不敏感。
     * <br>Lenient parse: underscore or dash, case-insensitive.
     */
    public static ModelProtocol fromString(String s) {
        if (s == null) return null;
        String norm = s.trim().toLowerCase().replace('-', '_');
        if (norm.isEmpty()) return null;
        return ModelProtocol.valueOf(norm);
    }
}
