From 2157385ff62d3224c3aa78e730279e1df90e3074 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 18 Feb 2026 22:40:13 +0000 Subject: [PATCH] refactor(auto-reply): share unique model catalog insertion --- .../reply/directive-handling.model.ts | 63 ++++++++++++------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/src/auto-reply/reply/directive-handling.model.ts b/src/auto-reply/reply/directive-handling.model.ts index b69c4f2a7c..40be896e34 100644 --- a/src/auto-reply/reply/directive-handling.model.ts +++ b/src/auto-reply/reply/directive-handling.model.ts @@ -24,6 +24,31 @@ import { import type { InlineDirectives } from "./directive-handling.parse.js"; import { type ModelDirectiveSelection, resolveModelDirectiveSelection } from "./model-selection.js"; +function pushUniqueCatalogEntry(params: { + keys: Set; + out: ModelPickerCatalogEntry[]; + provider: string; + id: string; + name?: string; + fallbackNameToId: boolean; +}) { + const provider = normalizeProviderId(params.provider); + const id = String(params.id ?? "").trim(); + if (!provider || !id) { + return; + } + const key = modelKey(provider, id); + if (params.keys.has(key)) { + return; + } + params.keys.add(key); + params.out.push({ + provider, + id, + name: params.fallbackNameToId ? (params.name ?? id) : params.name, + }); +} + function buildModelPickerCatalog(params: { cfg: OpenClawConfig; defaultProvider: string; @@ -42,17 +67,14 @@ function buildModelPickerCatalog(params: { const keys = new Set(); const pushRef = (ref: { provider: string; model: string }, name?: string) => { - const provider = normalizeProviderId(ref.provider); - const id = String(ref.model ?? "").trim(); - if (!provider || !id) { - return; - } - const key = modelKey(provider, id); - if (keys.has(key)) { - return; - } - keys.add(key); - out.push({ provider, id, name: name ?? id }); + pushUniqueCatalogEntry({ + keys, + out, + provider: ref.provider, + id: ref.model, + name, + fallbackNameToId: true, + }); }; const pushRaw = (raw?: string) => { @@ -99,17 +121,14 @@ function buildModelPickerCatalog(params: { const out: ModelPickerCatalogEntry[] = []; const push = (entry: ModelPickerCatalogEntry) => { - const provider = normalizeProviderId(entry.provider); - const id = String(entry.id ?? "").trim(); - if (!provider || !id) { - return; - } - const key = modelKey(provider, id); - if (keys.has(key)) { - return; - } - keys.add(key); - out.push({ provider, id, name: entry.name }); + pushUniqueCatalogEntry({ + keys, + out, + provider: entry.provider, + id: String(entry.id ?? ""), + name: entry.name, + fallbackNameToId: false, + }); }; const hasAllowlist = Object.keys(params.cfg.agents?.defaults?.models ?? {}).length > 0;