From 1f08082a58773f91679a287cc7a51d154d79c721 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Sun, 23 Feb 2025 22:42:20 +0800 Subject: [PATCH] feat: add supports for `volcengine` (#1114) --- pkg/core/migrations/m032_volcengine_config.py | 27 ++++++++++++++++++ pkg/core/stages/migrate.py | 2 +- pkg/provider/modelmgr/modelmgr.py | 2 +- .../modelmgr/requesters/volcenginechatcmpl.py | 21 ++++++++++++++ templates/provider.json | 8 ++++++ templates/schema/provider.json | 28 +++++++++++++++++++ 6 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 pkg/core/migrations/m032_volcengine_config.py create mode 100644 pkg/provider/modelmgr/requesters/volcenginechatcmpl.py diff --git a/pkg/core/migrations/m032_volcengine_config.py b/pkg/core/migrations/m032_volcengine_config.py new file mode 100644 index 00000000..cb641f7c --- /dev/null +++ b/pkg/core/migrations/m032_volcengine_config.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from .. import migration + + +@migration.migration_class("volcengine-requester-config", 32) +class VolcengineRequesterConfigMigration(migration.Migration): + """迁移""" + + async def need_migrate(self) -> bool: + """判断当前环境是否需要运行此迁移""" + + return 'volcengine-chat-completions' not in self.ap.provider_cfg.data['requester'] + + async def run(self): + """执行迁移""" + self.ap.provider_cfg.data['keys']['volcengine'] = [ + "xxxxxxxx" + ] + + self.ap.provider_cfg.data['requester']['volcengine-chat-completions'] = { + "base-url": "https://ark.cn-beijing.volces.com/api/v3", + "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 5fab90c1..aade7755 100644 --- a/pkg/core/stages/migrate.py +++ b/pkg/core/stages/migrate.py @@ -10,7 +10,7 @@ from ..migrations import m010_ollama_requester_config, m011_command_prefix_confi 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, m022_lmstudio_config, m023_siliconflow_config, m024_discord_config, m025_gewechat_config from ..migrations import m026_qqofficial_config, m027_wx_official_account_config, m028_aliyun_requester_config -from ..migrations import m029_dashscope_app_api_config, m030_lark_config_cmpl, m031_dingtalk_config +from ..migrations import m029_dashscope_app_api_config, m030_lark_config_cmpl, m031_dingtalk_config, m032_volcengine_config @stage.stage_class("MigrationStage") diff --git a/pkg/provider/modelmgr/modelmgr.py b/pkg/provider/modelmgr/modelmgr.py index 489a322f..2b4c651e 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 bailianchatcmpl, chatcmpl, anthropicmsgs, moonshotchatcmpl, deepseekchatcmpl, ollamachat, giteeaichatcmpl, xaichatcmpl, zhipuaichatcmpl, lmstudiochatcmpl, siliconflowchatcmpl +from .requesters import bailianchatcmpl, chatcmpl, anthropicmsgs, moonshotchatcmpl, deepseekchatcmpl, ollamachat, giteeaichatcmpl, xaichatcmpl, zhipuaichatcmpl, lmstudiochatcmpl, siliconflowchatcmpl, volcenginechatcmpl FETCH_MODEL_LIST_URL = "https://api.qchatgpt.rockchin.top/api/v2/fetch/model_list" diff --git a/pkg/provider/modelmgr/requesters/volcenginechatcmpl.py b/pkg/provider/modelmgr/requesters/volcenginechatcmpl.py new file mode 100644 index 00000000..a0b8c807 --- /dev/null +++ b/pkg/provider/modelmgr/requesters/volcenginechatcmpl.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +import openai + +from . import chatcmpl +from .. import requester +from ....core import app + + +@requester.requester_class("volcengine-chat-completions") +class VolcengineChatCompletions(chatcmpl.OpenAIChatCompletions): + """火山方舟大模型平台 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']['volcengine-chat-completions'] diff --git a/templates/provider.json b/templates/provider.json index 3072a5de..34a7884d 100644 --- a/templates/provider.json +++ b/templates/provider.json @@ -28,6 +28,9 @@ ], "bailian": [ "sk-xxxxxxx" + ], + "volcengine": [ + "xxxxxxxx" ] }, "requester": { @@ -87,6 +90,11 @@ "args": {}, "base-url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "timeout": 120 + }, + "volcengine-chat-completions": { + "args": {}, + "base-url": "https://ark.cn-beijing.volces.com/api/v3", + "timeout": 120 } }, "model": "gpt-4o", diff --git a/templates/schema/provider.json b/templates/schema/provider.json index 30905c95..9a9e2822 100644 --- a/templates/schema/provider.json +++ b/templates/schema/provider.json @@ -90,6 +90,14 @@ "type": "string" }, "default": [] + }, + "volcengine": { + "type": "array", + "title": "火山引擎大模型平台 API 密钥", + "items": { + "type": "string" + }, + "default": [] } } }, @@ -316,6 +324,26 @@ "default": 120 } } + }, + "volcengine-chat-completions": { + "type": "object", + "title": "火山方舟大模型平台 API 请求配置", + "description": "仅可编辑 URL 和 超时时间,额外请求参数不支持可视化编辑,请到编辑器编辑", + "properties": { + "base-url": { + "type": "string", + "title": "API URL" + }, + "args": { + "type": "object", + "default": {} + }, + "timeout": { + "type": "number", + "title": "API 请求超时时间", + "default": 120 + } + } } } },