diff --git a/pkg/core/migrations/m022_lmstudio_config.py b/pkg/core/migrations/m022_lmstudio_config.py new file mode 100644 index 00000000..5506b37b --- /dev/null +++ b/pkg/core/migrations/m022_lmstudio_config.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from .. import migration + + +@migration.migration_class("lmstudio-config", 22) +class LmStudioConfigMigration(migration.Migration): + """迁移""" + + async def need_migrate(self) -> bool: + """判断当前环境是否需要运行此迁移""" + + return 'lmstudio-chat-completions' not in self.ap.provider_cfg.data['requester'] + + async def run(self): + """执行迁移""" + self.ap.provider_cfg.data['requester']['lmstudio-chat-completions'] = { + "base-url": "http://127.0.0.1:1234/v1", + "args": {}, + "timeout": 120 + } + + await self.ap.provider_cfg.dump_config() diff --git a/pkg/core/stages/migrate.py b/pkg/core/stages/migrate.py index 0b0d8c3c..819372e7 100644 --- a/pkg/core/stages/migrate.py +++ b/pkg/core/stages/migrate.py @@ -8,7 +8,7 @@ from ..migrations import m001_sensitive_word_migration, m002_openai_config_migra from ..migrations import m005_deepseek_cfg_completion, m006_vision_config, m007_qcg_center_url, m008_ad_fixwin_config_migrate, m009_msg_truncator_cfg from ..migrations import m010_ollama_requester_config, m011_command_prefix_config, m012_runner_config, m013_http_api_config, m014_force_delay_config from ..migrations import m015_gitee_ai_config, m016_dify_service_api, m017_dify_api_timeout_params, m018_xai_config, m019_zhipuai_config -from ..migrations import m020_wecom_config, m021_lark_config +from ..migrations import m020_wecom_config, m021_lark_config, m022_lmstudio_config @stage.stage_class("MigrationStage") diff --git a/pkg/provider/modelmgr/modelmgr.py b/pkg/provider/modelmgr/modelmgr.py index fcf5f4b6..f296ab0c 100644 --- a/pkg/provider/modelmgr/modelmgr.py +++ b/pkg/provider/modelmgr/modelmgr.py @@ -6,7 +6,7 @@ from . import entities, requester from ...core import app from . import token -from .requesters import chatcmpl, anthropicmsgs, moonshotchatcmpl, deepseekchatcmpl, ollamachat, giteeaichatcmpl, xaichatcmpl, zhipuaichatcmpl +from .requesters import chatcmpl, anthropicmsgs, moonshotchatcmpl, deepseekchatcmpl, ollamachat, giteeaichatcmpl, xaichatcmpl, zhipuaichatcmpl, lmstudiochatcmpl FETCH_MODEL_LIST_URL = "https://api.qchatgpt.rockchin.top/api/v2/fetch/model_list" @@ -109,4 +109,4 @@ class ModelManager: self.model_list.append(model_info) except Exception as e: - self.ap.logger.error(f"初始化模型 {model['name']} 失败: {e} ,请检查配置文件") + self.ap.logger.error(f"初始化模型 {model['name']} 失败: {type(e)} {e} ,请检查配置文件") diff --git a/pkg/provider/modelmgr/requesters/lmstudiochatcmpl.py b/pkg/provider/modelmgr/requesters/lmstudiochatcmpl.py new file mode 100644 index 00000000..7ec89b2e --- /dev/null +++ b/pkg/provider/modelmgr/requesters/lmstudiochatcmpl.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +import openai + +from . import chatcmpl +from .. import requester +from ....core import app + + +@requester.requester_class("lmstudio-chat-completions") +class LmStudioChatCompletions(chatcmpl.OpenAIChatCompletions): + """LMStudio ChatCompletion API 请求器""" + + client: openai.AsyncClient + + requester_cfg: dict + + def __init__(self, ap: app.Application): + self.ap = ap + + self.requester_cfg = self.ap.provider_cfg.data['requester']['lmstudio-chat-completions'] diff --git a/templates/provider.json b/templates/provider.json index 1aadbf88..f0759b03 100644 --- a/templates/provider.json +++ b/templates/provider.json @@ -66,6 +66,11 @@ "base-url": "https://open.bigmodel.cn/api/paas/v4", "args": {}, "timeout": 120 + }, + "lmstudio-chat-completions": { + "base-url": "http://127.0.0.1:1234/v1", + "args": {}, + "timeout": 120 } }, "model": "gpt-4o", diff --git a/templates/schema/provider.json b/templates/schema/provider.json index 9a69c53d..6d957de4 100644 --- a/templates/schema/provider.json +++ b/templates/schema/provider.json @@ -240,6 +240,26 @@ "default": 120 } } + }, + "lmstudio-chat-completions": { + "type": "object", + "title": "LMStudio API 请求配置", + "description": "仅可编辑 URL 和 超时时间,额外请求参数不支持可视化编辑,请到编辑器编辑", + "properties": { + "base-url": { + "type": "string", + "title": "API URL" + }, + "args": { + "type": "object", + "default": {} + }, + "timeout": { + "type": "number", + "title": "API 请求超时时间", + "default": 120 + } + } } } },