From a5072f77bd6c4c9f66d2bf45fec094b5f710cac0 Mon Sep 17 00:00:00 2001 From: benjamin Date: Tue, 19 May 2026 22:04:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(channel-monitor):=20=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=8D=8F=E8=AE=AE=E5=BF=AB=E7=85=A7?= 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 --- backend/internal/repository/channel_monitor_repo.go | 10 ++++++++++ .../repository/channel_monitor_template_repo.go | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/backend/internal/repository/channel_monitor_repo.go b/backend/internal/repository/channel_monitor_repo.go index 800ee43b..6666a130 100644 --- a/backend/internal/repository/channel_monitor_repo.go +++ b/backend/internal/repository/channel_monitor_repo.go @@ -37,6 +37,7 @@ func (r *channelMonitorRepository) Create(ctx context.Context, m *service.Channe builder := client.ChannelMonitor.Create(). SetName(m.Name). SetProvider(channelmonitor.Provider(m.Provider)). + SetAPIMode(defaultAPIModeRepo(m.APIMode)). SetEndpoint(m.Endpoint). SetAPIKeyEncrypted(m.APIKey). // 调用方传入的已是密文 SetPrimaryModel(m.PrimaryModel). @@ -79,6 +80,7 @@ func (r *channelMonitorRepository) Update(ctx context.Context, m *service.Channe updater := client.ChannelMonitor.UpdateOneID(m.ID). SetName(m.Name). SetProvider(channelmonitor.Provider(m.Provider)). + SetAPIMode(defaultAPIModeRepo(m.APIMode)). SetEndpoint(m.Endpoint). SetAPIKeyEncrypted(m.APIKey). SetPrimaryModel(m.PrimaryModel). @@ -708,6 +710,7 @@ func entToServiceMonitor(row *dbent.ChannelMonitor) *service.ChannelMonitor { ID: row.ID, Name: row.Name, Provider: string(row.Provider), + APIMode: defaultAPIModeRepo(row.APIMode), Endpoint: row.Endpoint, APIKey: row.APIKeyEncrypted, // 仍为密文,service 层负责解密 PrimaryModel: row.PrimaryModel, @@ -747,6 +750,13 @@ func defaultBodyModeRepo(mode string) string { return mode } +func defaultAPIModeRepo(apiMode string) string { + if apiMode == "" { + return "chat_completions" + } + return apiMode +} + func emptySliceIfNil(in []string) []string { if in == nil { return []string{} diff --git a/backend/internal/repository/channel_monitor_template_repo.go b/backend/internal/repository/channel_monitor_template_repo.go index 845d186b..3a972360 100644 --- a/backend/internal/repository/channel_monitor_template_repo.go +++ b/backend/internal/repository/channel_monitor_template_repo.go @@ -30,6 +30,7 @@ func (r *channelMonitorRequestTemplateRepository) Create(ctx context.Context, t builder := client.ChannelMonitorRequestTemplate.Create(). SetName(t.Name). SetProvider(channelmonitorrequesttemplate.Provider(t.Provider)). + SetAPIMode(defaultAPIModeRepo(t.APIMode)). SetDescription(t.Description). SetExtraHeaders(emptyHeadersIfNilRepo(t.ExtraHeaders)). SetBodyOverrideMode(defaultBodyModeRepo(t.BodyOverrideMode)) @@ -61,6 +62,7 @@ func (r *channelMonitorRequestTemplateRepository) Update(ctx context.Context, t client := clientFromContext(ctx, r.client) updater := client.ChannelMonitorRequestTemplate.UpdateOneID(t.ID). SetName(t.Name). + SetAPIMode(defaultAPIModeRepo(t.APIMode)). SetDescription(t.Description). SetExtraHeaders(emptyHeadersIfNilRepo(t.ExtraHeaders)). SetBodyOverrideMode(defaultBodyModeRepo(t.BodyOverrideMode)) @@ -90,8 +92,11 @@ func (r *channelMonitorRequestTemplateRepository) List(ctx context.Context, para if params.Provider != "" { q = q.Where(channelmonitorrequesttemplate.ProviderEQ(channelmonitorrequesttemplate.Provider(params.Provider))) } + if params.APIMode != "" { + q = q.Where(channelmonitorrequesttemplate.APIModeEQ(defaultAPIModeRepo(params.APIMode))) + } rows, err := q. - Order(dbent.Asc(channelmonitorrequesttemplate.FieldProvider), dbent.Asc(channelmonitorrequesttemplate.FieldName)). + Order(dbent.Asc(channelmonitorrequesttemplate.FieldProvider), dbent.Asc(channelmonitorrequesttemplate.FieldAPIMode), dbent.Asc(channelmonitorrequesttemplate.FieldName)). All(ctx) if err != nil { return nil, fmt.Errorf("list monitor templates: %w", err) @@ -122,7 +127,10 @@ func (r *channelMonitorRequestTemplateRepository) ApplyToMonitors(ctx context.Co Where( channelmonitor.TemplateIDEQ(id), channelmonitor.IDIn(monitorIDs...), + channelmonitor.ProviderEQ(channelmonitor.Provider(tpl.Provider)), + channelmonitor.APIModeEQ(defaultAPIModeRepo(tpl.APIMode)), ). + SetAPIMode(defaultAPIModeRepo(tpl.APIMode)). SetExtraHeaders(emptyHeadersIfNilRepo(tpl.ExtraHeaders)). SetBodyOverrideMode(defaultBodyModeRepo(tpl.BodyOverrideMode)) if tpl.BodyOverride != nil { @@ -165,6 +173,7 @@ func (r *channelMonitorRequestTemplateRepository) ListAssociatedMonitors(ctx con ID: row.ID, Name: row.Name, Provider: string(row.Provider), + APIMode: defaultAPIModeRepo(row.APIMode), Enabled: row.Enabled, }) } @@ -185,6 +194,7 @@ func entToServiceTemplate(row *dbent.ChannelMonitorRequestTemplate) *service.Cha ID: row.ID, Name: row.Name, Provider: string(row.Provider), + APIMode: defaultAPIModeRepo(row.APIMode), Description: row.Description, ExtraHeaders: headers, BodyOverrideMode: row.BodyOverrideMode,