From 91c7ef68019482e9308b8a7118a1ec47e4c92b6d Mon Sep 17 00:00:00 2001 From: madrays <87717138@qq.com> Date: Thu, 20 Nov 2025 19:01:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E6=8B=89?= =?UTF-8?q?=E5=8F=96=E5=8F=AF=E7=94=A8ai=E6=A8=A1=E5=9E=8B=E7=9A=84?= =?UTF-8?q?=E6=98=93=E7=94=A8=E6=80=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/system.py | 13 ++++++ app/helper/llm.py | 42 ++++++++++++++++++ .../p115strmhelper/p115strmhelper_file.db | Bin 0 -> 20480 bytes package-lock.json | 6 +++ 4 files changed, 61 insertions(+) create mode 100644 app/helper/llm.py create mode 100644 config/plugins/p115strmhelper/p115strmhelper_file.db create mode 100644 package-lock.json diff --git a/app/api/endpoints/system.py b/app/api/endpoints/system.py index 25de81c9..bfde8706 100644 --- a/app/api/endpoints/system.py +++ b/app/api/endpoints/system.py @@ -44,6 +44,7 @@ from app.utils.http import RequestUtils, AsyncRequestUtils from app.utils.security import SecurityUtils from app.utils.url import UrlUtils from version import APP_VERSION +from app.helper.llm import LLMHelper router = APIRouter() @@ -338,6 +339,18 @@ async def set_setting( return schemas.Response(success=False, message=f"配置项 '{key}' 不存在") +@router.get("/llm-models", summary="获取LLM模型列表", response_model=schemas.Response) +async def get_llm_models(provider: str, api_key: str, base_url: Optional[str] = None, _: User = Depends(get_current_active_user_async)): + """ + 获取LLM模型列表 + """ + try: + models = LLMHelper().get_models(provider, api_key, base_url) + return schemas.Response(success=True, data=models) + except Exception as e: + return schemas.Response(success=False, message=str(e)) + + @router.get("/message", summary="实时消息") async def get_message(request: Request, role: Optional[str] = "system", _: schemas.TokenPayload = Depends(verify_resource_token)): diff --git a/app/helper/llm.py b/app/helper/llm.py new file mode 100644 index 00000000..ca446917 --- /dev/null +++ b/app/helper/llm.py @@ -0,0 +1,42 @@ +"""LLM模型相关辅助功能""" +from typing import List + +from app.log import logger + + +class LLMHelper: + """LLM模型相关辅助功能""" + + def get_models(self, provider: str, api_key: str, base_url: str = None) -> List[str]: + """获取模型列表""" + logger.info(f"获取 {provider} 模型列表...") + if provider == "google": + return self._get_google_models(api_key) + else: + return self._get_openai_compatible_models(provider, api_key, base_url) + + def _get_google_models(self, api_key: str) -> List[str]: + """获取Google模型列表""" + try: + import google.generativeai as genai + genai.configure(api_key=api_key) + models = genai.list_models() + return [m.name for m in models if 'generateContent' in m.supported_generation_methods] + except Exception as e: + logger.error(f"获取Google模型列表失败:{e}") + raise e + + def _get_openai_compatible_models(self, provider: str, api_key: str, base_url: str = None) -> List[str]: + """获取OpenAI兼容模型列表""" + try: + from openai import OpenAI + + if provider == "deepseek": + base_url = base_url or "https://api.deepseek.com" + + client = OpenAI(api_key=api_key, base_url=base_url) + models = client.models.list() + return [model.id for model in models.data] + except Exception as e: + logger.error(f"获取 {provider} 模型列表失败:{e}") + raise e diff --git a/config/plugins/p115strmhelper/p115strmhelper_file.db b/config/plugins/p115strmhelper/p115strmhelper_file.db new file mode 100644 index 0000000000000000000000000000000000000000..5df2b80e48f4a466beb650f4fef171909f372e0b GIT binary patch literal 20480 zcmeI#%WB&|7zN;wt;V&%N_JXgGn;^gOK|L%kVT-15vi%;G>Tf9KoPPuCPQ>_ZKZ^6 zic{$G_6bU79N(nUth%W=gLRpU#hhX@fJi{>V2tx}%<&5iFP`oXk2Z%n(^ zY8teE;n4p3UhfsHlsgywE5|mweJB3~cXa2|cXs#Ow6Ez~>zdZqzGqa76Lm|!tSf}a z0ehHy4n;}mdiQBE>$|z_xCglbStP!cCp6tJl=R(Q<*_x3JWRqsq@6#CnTYd28I1>2 zY}q=q>`a=GH)e6_{$)1yBDRERw%b{Wk(b_5$NDI2)_gJmJP^63-;|QB>&o{}PaEbT zn+)Zxklm~t`gdEEXEnL?4wm~rY#6gK{*}?w?wQb#-4XZi{3KY#Y(FjYQ!cWv)rk*TvK>z{} zfB*y_009U<00Izz00dS7vi?`Le-iOSg8&2|009U<00Izz00bZa0SG`~Lj*LXu-803 w95fn7$F24etB72v|2O1t5d#7cfB*y_009U<00Izz00bZ~7uYWDmDlV4-vQj&1^@s6 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..96db831a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "MoviePilot", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}