"""
LLM 工厂 - 创建不同提供商的 LLM 实例
"""
from typing import Optional
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic


class LLMFactory:
    """LLM 工厂类"""

    def __init__(
        self,
        provider: str = "openai",
        openai_api_key: Optional[str] = None,
        anthropic_api_key: Optional[str] = None,
        model: str = "gpt-3.5-turbo",
        temperature: float = 0.7,
        max_tokens: int = 2000
    ):
        self.provider = provider
        self.openai_api_key = openai_api_key
        self.anthropic_api_key = anthropic_api_key
        self.model = model
        self.temperature = temperature
        self.max_tokens = max_tokens

        self._llm = None

    def get_llm(self):
        """获取 LLM 实例"""
        if self._llm is not None:
            return self._llm

        if self.provider == "openai":
            self._llm = ChatOpenAI(
                model=self.model,
                temperature=self.temperature,
                max_tokens=self.max_tokens,
                api_key=self.openai_api_key
            )
        elif self.provider == "anthropic":
            self._llm = ChatAnthropic(
                model=self.model,
                temperature=self.temperature,
                max_tokens=self.max_tokens,
                anthropic_api_key=self.anthropic_api_key
            )
        else:
            raise ValueError(f"Unsupported provider: {self.provider}")

        return self._llm

    def set_model(self, model: str):
        """设置模型"""
        self.model = model
        self._llm = None  # 重置 LLM 实例

    def set_temperature(self, temperature: float):
        """设置温度"""
        self.temperature = temperature
        if self._llm:
            self._llm.temperature = temperature
