from langchain.chat_models import init_chat_model
from langchain_openai import ChatOpenAI


def model_deepseek_chat(temperature: float = 1.3):
    """
    初始化并返回一个基于deepseek-chat模型的聊天模型实例。
    DEEPSEEK_API_KEY: 从环境变量中获取的Deepseek API密钥。
    DEEPSEEK_BASE_URL: 从环境变量中获取的Deepseek API基础URL。

    定价：
        输入token：$0.55/1M
        输出token：$1.70/1M
    返回:
        ChatDeepseek: 一个初始化的ChatDeepseek模型实例，用于与deepseek-chat模型进行交互。
    """
    llm = init_chat_model("deepseek-chat", temperature=temperature)
    return llm


def model_deepseek_reasoner(temperature: float = 1.3):
    """
    初始化并返回一个基于deepseek-reasoner模型的聊天模型实例。

    定价：
        输入token：$0.55/1M
        输出token：$1.70/1M
    返回:
        ChatDeepseek: 一个初始化的ChatDeepseek模型实例，用于与deepseek-reasoner模型进行交互。
    """
    llm = init_chat_model("deepseek-reasoner", temperature=temperature)
    return llm


def model_gpt_4o_mini(temperature: float = 0.7):
    """
    初始化并返回一个基于gpt-4o-mini模型的聊天模型实例。

    定价：
        输入token：$0.15/1M
        输出token：$0.60/1M
    返回:
        ChatOpenAI: 一个初始化的ChatOpenAI模型实例，用于与gpt-4o-mini模型进行交互。
    """
    # 初始化并返回gpt-4o-mini模型的聊天模型实例
    llm = init_chat_model("gpt-4o-mini", temperature=temperature)
    return llm


def model_local_deepseek_r1_1dot5b(temperature: float = 0.7, max_tokens: int = 2000):
    """
    初始化并返回一个基于deepseek-r1:1.5b模型的聊天模型实例。

    定价：免费
    返回:
        ChatOllama: 一个初始化的ChatOllama模型实例，用于与本地deepseek-r1:1.5b模型进行交互。
    """
    # 初始化并返回deepseek-r1:1.5b模型的聊天模型实例
    llm = init_chat_model(
        "ollama:deepseek-r1:1.5b",
        base_url="http://localhost:11434",
        temperature=temperature,
        max_tokens=max_tokens,
    )
    return llm

def model_local_llama3_2dot3b(temperature: float = 0.7, max_tokens: int = 2000):
    """
    初始化并返回一个基于llama3.2:3b模型的聊天模型实例。

    定价：免费
    返回:
        ChatOllama: 一个初始化的ChatOllama模型实例，用于与本地llama3.2:3b模型进行交互。
    """
    # 初始化并返回llama3.2:3b模型的聊天模型实例
    llm = init_chat_model(
        "ollama:llama3.2:3b",
        base_url="http://localhost:11434",
        temperature=temperature,
        max_tokens=max_tokens,
    )
    return llm


def model_local_nomic_embed_text_latest(
    temperature: float = 0.7, max_tokens: int = 2000
):
    """
    初始化并返回一个基于nomic-embed-text:latest模型的聊天模型实例。

    定价：免费
    返回:
        ChatOllama: 一个初始化的ChatOllama模型实例，用于与本地nomic-embed-text:latest嵌入模型进行交互。
    """
    # 初始化并返回nomic-embed-text:latest模型的聊天模型实例
    llm = init_chat_model(
        "ollama:nomic-embed-text:latest",
        base_url="http://localhost:11434",
        temperature=temperature,
        max_tokens=max_tokens,
    )
    return llm


def model_local_Qwen3_0dot6B_GGUF_latest(
    temperature: float = 0.7, max_tokens: int = 2000
):
    """
    初始化并返回一个基于OxW/Qwen3-0.6B-GGUF:latest模型的聊天模型实例。

    返回:
        ChatOllama: 一个初始化的ChatOllama模型实例，用于与本地OxW/Qwen3-0.6B-GGUF:latest模型进行交互。
    """
    # 初始化并返回OxW/Qwen3-0.6B-GGUF:latest模型的聊天模型实例
    llm = init_chat_model(
        "ollama:OxW/Qwen3-0.6B-GGUF:latest",
        base_url="http://localhost:11434",
        temperature=temperature,
        max_tokens=max_tokens,
    )
    return llm

def model_lan_vllm_qwen2_7b_instruct(
    temperature: float = 0.7, max_tokens: int = 2000
):
    llm = ChatOpenAI(
        openai_api_base="http://192.168.10.11:8000/v1",  # vLLM 服务器地址
        model_name="qwen2-7b-instruct",  # 模型名称（与 --served-model-name 一致）
        openai_api_key="none",  # vLLM 默认不需要 key
        max_tokens=512,
        temperature=temperature,
        streaming=False,  # 是否流式输出
    )
    return llm
