From 799f7e65c8f1de8c48a4b24252e197c045fb5418 Mon Sep 17 00:00:00 2001 From: benjamin Date: Tue, 19 May 2026 22:04:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(channel-monitor):=20=E6=A0=A1=E9=AA=8C=20A?= =?UTF-8?q?PI=20=E6=A8=A1=E5=BC=8F=E5=8F=96=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- .../service/channel_monitor_validate.go | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/internal/service/channel_monitor_validate.go b/backend/internal/service/channel_monitor_validate.go index 16bbec71..6ff22b9f 100644 --- a/backend/internal/service/channel_monitor_validate.go +++ b/backend/internal/service/channel_monitor_validate.go @@ -18,6 +18,23 @@ func validateProvider(p string) error { return nil } +// validateAPIMode 校验 provider 与 api_mode 的组合。 +// responses 只对 OpenAI 有意义;其它 provider 使用 chat_completions 作为默认占位。 +func validateAPIMode(provider, apiMode string) error { + apiMode = defaultAPIMode(apiMode) + switch apiMode { + case MonitorAPIModeChatCompletions: + return nil + case MonitorAPIModeResponses: + if provider == "" || provider == MonitorProviderOpenAI { + return nil + } + return ErrChannelMonitorInvalidAPIMode + default: + return ErrChannelMonitorInvalidAPIMode + } +} + // validateInterval 校验 interval_seconds 范围。 func validateInterval(sec int) error { if sec < monitorMinIntervalSeconds || sec > monitorMaxIntervalSeconds { @@ -97,3 +114,11 @@ func normalizeModels(in []string) []string { } return out } + +// defaultAPIMode 空串归一为 chat_completions,保证历史数据与旧客户端兼容。 +func defaultAPIMode(apiMode string) string { + if strings.TrimSpace(apiMode) == "" { + return MonitorAPIModeChatCompletions + } + return strings.TrimSpace(apiMode) +}