1 line
6.5 KiB
JSON
1 line
6.5 KiB
JSON
{"repo": "cgzzzzzz/agri-app", "files": {"backend/app/llm/deepseek_provider.py": {"a1ffb2cad206ccc6a973cb5fe19f8dabb0440dfa": {"t": 1785745983.3417156, "n": 3021, "h": "208f0a250a1f63ad", "c": "import json\nimport logging\n\nfrom app.llm.provider import LLMProvider\n\nlogger = logging.getLogger(__name__)\n\n\nclass DeepSeekProvider(LLMProvider):\n def __init__(self, api_key: str, model: str = \"deepseek-chat\"):\n self._api_key = api_key\n self._model = model\n self._client = None\n\n def _get_client(self):\n if self._client is None:\n from openai import OpenAI\n\n self._client = OpenAI(\n api_key=self._api_key,\n base_url=\"https://api.deepseek.com/v1\",\n )\n return self._client\n\n @property\n def provider_name(self) -> str:\n return \"deepseek\"\n\n @property\n def is_available(self) -> bool:\n return bool(self._api_key)\n\n def complete(\n self,\n system_prompt: str,\n user_prompt: str,\n messages: list[dict] | None = None,\n temperature: float = 0.7,\n max_tokens: int = 1024,\n ) -> str:\n try:\n client = self._get_client()\n if messages:\n msg_list = messages\n else:\n msg_list = [\n {\"role\": \"system\", \"content\": system_prompt},\n {\"role\": \"user\", \"content\": user_prompt},\n ]\n response = client.chat.completions.create(\n model=self._model,\n messages=msg_list,\n temperature=temperature,\n max_tokens=max_tokens,\n )\n return response.choices[0].message.content or \"\"\n except Exception as e:\n if hasattr(e, \"status_code\") and e.status_code == 429:\n logger.warning(\"DeepSeek 429 rate limit hit\")\n else:\n logger.error(\"DeepSeek completion failed\", exc_info=True)\n return \"\"\n\n def complete_structured(\n self,\n system_prompt: str,\n user_prompt: str,\n schema: dict,\n temperature: float = 0.3,\n max_tokens: int = 1024,\n ) -> dict:\n try:\n client = self._get_client()\n structured_prompt = (\n f\"{system_prompt}\\n\\n\"\n f\"Respond ONLY with valid JSON matching this schema:\\n{json.dumps(schema, indent=2)}\"\n )\n response = client.chat.completions.create(\n model=self._model,\n messages=[\n {\"role\": \"system\", \"content\": structured_prompt},\n {\"role\": \"user\", \"content\": \"Generate JSON\"},\n ],\n temperature=temperature,\n max_tokens=max_tokens,\n )\n content = response.choices[0].message.content or \"{}\"\n return json.loads(content)\n except Exception as e:\n if hasattr(e, \"status_code\") and e.status_code == 429:\n logger.warning(\"DeepSeek 429 rate limit hit (structured)\")\n else:\n logger.error(\"DeepSeek structured completion failed\", exc_info=True)\n return {}\n"}, "b93d43a04462dee171bf31aa2320635dd9fa2178": {"t": 1785758509.3469834, "n": 3021, "h": "208f0a250a1f63ad", "c": "import json\nimport logging\n\nfrom app.llm.provider import LLMProvider\n\nlogger = logging.getLogger(__name__)\n\n\nclass DeepSeekProvider(LLMProvider):\n def __init__(self, api_key: str, model: str = \"deepseek-chat\"):\n self._api_key = api_key\n self._model = model\n self._client = None\n\n def _get_client(self):\n if self._client is None:\n from openai import OpenAI\n\n self._client = OpenAI(\n api_key=self._api_key,\n base_url=\"https://api.deepseek.com/v1\",\n )\n return self._client\n\n @property\n def provider_name(self) -> str:\n return \"deepseek\"\n\n @property\n def is_available(self) -> bool:\n return bool(self._api_key)\n\n def complete(\n self,\n system_prompt: str,\n user_prompt: str,\n messages: list[dict] | None = None,\n temperature: float = 0.7,\n max_tokens: int = 1024,\n ) -> str:\n try:\n client = self._get_client()\n if messages:\n msg_list = messages\n else:\n msg_list = [\n {\"role\": \"system\", \"content\": system_prompt},\n {\"role\": \"user\", \"content\": user_prompt},\n ]\n response = client.chat.completions.create(\n model=self._model,\n messages=msg_list,\n temperature=temperature,\n max_tokens=max_tokens,\n )\n return response.choices[0].message.content or \"\"\n except Exception as e:\n if hasattr(e, \"status_code\") and e.status_code == 429:\n logger.warning(\"DeepSeek 429 rate limit hit\")\n else:\n logger.error(\"DeepSeek completion failed\", exc_info=True)\n return \"\"\n\n def complete_structured(\n self,\n system_prompt: str,\n user_prompt: str,\n schema: dict,\n temperature: float = 0.3,\n max_tokens: int = 1024,\n ) -> dict:\n try:\n client = self._get_client()\n structured_prompt = (\n f\"{system_prompt}\\n\\n\"\n f\"Respond ONLY with valid JSON matching this schema:\\n{json.dumps(schema, indent=2)}\"\n )\n response = client.chat.completions.create(\n model=self._model,\n messages=[\n {\"role\": \"system\", \"content\": structured_prompt},\n {\"role\": \"user\", \"content\": \"Generate JSON\"},\n ],\n temperature=temperature,\n max_tokens=max_tokens,\n )\n content = response.choices[0].message.content or \"{}\"\n return json.loads(content)\n except Exception as e:\n if hasattr(e, \"status_code\") and e.status_code == 429:\n logger.warning(\"DeepSeek 429 rate limit hit (structured)\")\n else:\n logger.error(\"DeepSeek structured completion failed\", exc_info=True)\n return {}\n"}}}} |