{"repo": "byrzhm/arxiv-scraper", "files": {"llm_clients.py": {"bb200bedd22444cb44feccf062405a59421ed446": {"t": 1785746720.8871117, "n": 3578, "h": "b2b6d98e0b800b51", "c": "\"\"\"\nLLM client implementations for various providers.\nThis module provides a unified interface for making requests to different LLM services.\n\"\"\"\n\nimport os\nfrom abc import ABC, abstractmethod\n\n\nclass LLMClient(ABC):\n \"\"\"Base abstract class for all LLM clients.\"\"\"\n\n @abstractmethod\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n \"\"\"Generate a completion for the given prompt.\"\"\"\n pass\n\n\nclass OpenAIClient(LLMClient):\n \"\"\"Client for OpenAI API.\"\"\"\n\n def __init__(self, api_key, model=\"gpt-4\"):\n import openai\n\n self.client = openai.OpenAI(api_key=api_key)\n self.model = model\n\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n response = self.client.chat.completions.create(\n model=self.model,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n return response.choices[0].message.content\n\n\nclass DeepSeekClient(LLMClient):\n \"\"\"Client for DeepSeek API.\"\"\"\n\n def __init__(self, api_key, model=\"deepseek-chat\"):\n import openai\n\n self.client = openai.OpenAI(\n api_key=api_key, base_url=\"https://api.deepseek.com\"\n )\n self.model = model\n\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n response = self.client.chat.completions.create(\n model=self.model,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n stream=False,\n )\n\n return response.choices[0].message.content\n\n\nclass QwenClient(LLMClient):\n \"\"\"Client for Alibaba Qwen API.\"\"\"\n\n def __init__(self, api_key, model=\"qwen-max\"):\n import openai\n\n self.client = openai.OpenAI(\n api_key=api_key,\n base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n )\n self.model = model\n\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n response = self.client.chat.completions.create(\n model=self.model,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n # Qwen3模型通过enable_thinking参数控制思考过程(开源版默认True,商业版默认False)\n # 使用Qwen3开源版模型时,若未启用流式输出,请将下行取消注释,否则会报错\n # extra_body={\"enable_thinking\": False},\n )\n\n return response.choices[0].message.content\n\n\ndef get_llm_client(provider=\"openai\"):\n \"\"\"Factory function to get a LLM client based on the provider name.\"\"\"\n from dotenv import load_dotenv\n\n load_dotenv(override=True)\n\n provider = provider.lower()\n\n if provider == \"openai\":\n api_key = os.getenv(\"OPENAI_API_KEY\")\n model = os.getenv(\"OPENAI_MODEL\", \"gpt-4\")\n if not api_key:\n raise ValueError(\"OPENAI_API_KEY not found in environment or .env file\")\n return OpenAIClient(api_key, model)\n\n elif provider == \"deepseek\":\n api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n model = os.getenv(\"DEEPSEEK_MODEL\", \"deepseek-chat\")\n if not api_key:\n raise ValueError(\"DEEPSEEK_API_KEY not found in environment or .env file\")\n return DeepSeekClient(api_key, model)\n\n elif provider == \"qwen\":\n api_key = os.getenv(\"QWEN_API_KEY\")\n model = os.getenv(\"QWEN_MODEL\", \"qwen-max\")\n if not api_key:\n raise ValueError(\"QWEN_API_KEY not found in environment or .env file\")\n return QwenClient(api_key, model)\n\n else:\n raise ValueError(\n f\"Unknown LLM provider: {provider}. Supported providers: openai, deepseek, qwen\"\n )\n"}, "a3e11aff0137a85c5a2464131678a21976166818": {"t": 1785767288.014461, "n": 3565, "h": "bf540fb29cd76fb6", "c": "\"\"\"\nLLM client implementations for various providers.\nThis module provides a unified interface for making requests to different LLM services.\n\"\"\"\n\nimport os\nfrom abc import ABC, abstractmethod\n\n\nclass LLMClient(ABC):\n \"\"\"Base abstract class for all LLM clients.\"\"\"\n\n @abstractmethod\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n \"\"\"Generate a completion for the given prompt.\"\"\"\n pass\n\n\nclass OpenAIClient(LLMClient):\n \"\"\"Client for OpenAI API.\"\"\"\n\n def __init__(self, api_key, model=\"gpt-4\"):\n import openai\n\n self.client = openai.OpenAI(api_key=api_key)\n self.model = model\n\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n response = self.client.chat.completions.create(\n model=self.model,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n return response.choices[0].message.content\n\n\nclass DeepSeekClient(LLMClient):\n \"\"\"Client for DeepSeek API.\"\"\"\n\n def __init__(self, api_key, model=\"deepseek-chat\"):\n import openai\n\n self.client = openai.OpenAI(\n api_key=api_key, base_url=\"https://api.deepseek.com\"\n )\n self.model = model\n\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n response = self.client.chat.completions.create(\n model=self.model,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n stream=False,\n )\n\n return response.choices[0].message.content\n\n\nclass QwenClient(LLMClient):\n \"\"\"Client for Alibaba Qwen API.\"\"\"\n\n def __init__(self, api_key, model=\"qwen-max\"):\n import openai\n\n self.client = openai.OpenAI(\n api_key=api_key,\n base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n )\n self.model = model\n\n def generate_completion(self, prompt, max_tokens=None, temperature=None, **kwargs):\n response = self.client.chat.completions.create(\n model=self.model,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n # Qwen3模型通过enable_thinking参数控制思考过程(开源版默认True,商业版默认False)\n # 使用Qwen3开源版模型时,若未启用流式输出,请将下行取消注释,否则会报错\n # extra_body={\"enable_thinking\": False},\n )\n\n return response.choices[0].message.content\n\n\ndef get_llm_client(provider=\"openai\"):\n \"\"\"Factory function to get a LLM client based on the provider name.\"\"\"\n from dotenv import load_dotenv\n\n load_dotenv()\n\n provider = provider.lower()\n\n if provider == \"openai\":\n api_key = os.getenv(\"OPENAI_API_KEY\")\n model = os.getenv(\"OPENAI_MODEL\", \"gpt-4\")\n if not api_key:\n raise ValueError(\"OPENAI_API_KEY not found in environment or .env file\")\n return OpenAIClient(api_key, model)\n\n elif provider == \"deepseek\":\n api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n model = os.getenv(\"DEEPSEEK_MODEL\", \"deepseek-chat\")\n if not api_key:\n raise ValueError(\"DEEPSEEK_API_KEY not found in environment or .env file\")\n return DeepSeekClient(api_key, model)\n\n elif provider == \"qwen\":\n api_key = os.getenv(\"QWEN_API_KEY\")\n model = os.getenv(\"QWEN_MODEL\", \"qwen-max\")\n if not api_key:\n raise ValueError(\"QWEN_API_KEY not found in environment or .env file\")\n return QwenClient(api_key, model)\n\n else:\n raise ValueError(\n f\"Unknown LLM provider: {provider}. Supported providers: openai, deepseek, qwen\"\n )\n"}}}}