独立依赖
This commit is contained in:
+4
-22
@@ -1,7 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from typing import Optional
|
||||
from collections import deque
|
||||
@@ -21,23 +20,6 @@ class LLMService:
|
||||
self._history: deque[dict] = deque(maxlen=12) # 6 turns (user+assistant)
|
||||
self._system_prompt = (settings.llm_system_prompt or "").strip() or "请用中文口语化简短回复,1-2句。"
|
||||
|
||||
if not settings.llm_api_key:
|
||||
self._error = "missing LLM api key: set LLM_API_KEY or DEEPSEEK_API_KEY"
|
||||
return
|
||||
|
||||
# If DeepSeek key is provided but no explicit base URL override,
|
||||
# route to DeepSeek-compatible OpenAI endpoint by default.
|
||||
if (
|
||||
os.getenv("DEEPSEEK_API_KEY")
|
||||
and not os.getenv("LLM_BASE_URL")
|
||||
and not os.getenv("DEEPSEEK_BASE_URL")
|
||||
and (self._base_url.lower() == "https://api.openai.com/v1" or not self._base_url)
|
||||
):
|
||||
self._base_url = "https://api.deepseek.com/v1"
|
||||
|
||||
if not self._model:
|
||||
base = self._base_url.lower()
|
||||
self._model = "deepseek-chat" if "deepseek" in base else "gpt-4o-mini"
|
||||
try:
|
||||
from openai import AsyncOpenAI
|
||||
|
||||
@@ -50,7 +32,7 @@ class LLMService:
|
||||
self._error = None
|
||||
except Exception as exc: # pragma: no cover
|
||||
self._error = str(exc)
|
||||
logger.warning("LLM online mode unavailable: %s", exc)
|
||||
logger.warning("LLM client init failed: %s", exc)
|
||||
|
||||
@staticmethod
|
||||
def _normalize_reply_text(text: str) -> str:
|
||||
@@ -70,7 +52,7 @@ class LLMService:
|
||||
|
||||
async def reply_with_meta(self, text: str) -> tuple[str, str]:
|
||||
if not self._ready or self._client is None:
|
||||
return f"收到:{text}。这是本地兜底回复。", "fallback"
|
||||
return "", "unavailable"
|
||||
|
||||
try:
|
||||
resp = await self._client.chat.completions.create(
|
||||
@@ -86,9 +68,9 @@ class LLMService:
|
||||
return content, "online"
|
||||
except Exception as exc: # pragma: no cover
|
||||
self._error = str(exc)
|
||||
logger.warning("LLM request failed, fallback used: %s", exc)
|
||||
logger.warning("LLM request failed: %s", exc)
|
||||
|
||||
return f"收到:{text}。这是本地兜底回复。", "fallback"
|
||||
return "", "error"
|
||||
|
||||
async def reply(self, text: str) -> str:
|
||||
content, _ = await self.reply_with_meta(text)
|
||||
|
||||
Reference in New Issue
Block a user