
























@@ -1,5 +1,5 @@
11import { writeSync } from "node:fs";
2-import { type Api, completeSimple, type Model } from "@mariozechner/pi-ai";
2+import { type Api, completeSimple, getModels, type Model } from "@mariozechner/pi-ai";
33import { Type } from "typebox";
44import { describe, expect, it } from "vitest";
55import { getRuntimeConfig } from "../config/config.js";
@@ -16,6 +16,7 @@ import { isModelNotFoundErrorMessage } from "./live-model-errors.js";
1616import {
1717isHighSignalLiveModelRef,
1818isPrioritizedHighSignalLiveModelRef,
19+listPrioritizedHighSignalLiveModelRefs,
1920resolveHighSignalLiveModelLimit,
2021selectHighSignalLiveItems,
2122shouldExcludeProviderFromDefaultHighSignalLiveSweep,
@@ -92,6 +93,36 @@ function logProgress(message: string): void {
9293writeSync(2, `[live] ${message}\n`);
9394}
949596+function loadPrioritizedHighSignalModels(): Model<Api>[] {
97+const idsByProvider = new Map<string, Set<string>>();
98+for (const ref of listPrioritizedHighSignalLiveModelRefs()) {
99+const bucket = idsByProvider.get(ref.provider);
100+if (bucket) {
101+bucket.add(ref.id);
102+} else {
103+idsByProvider.set(ref.provider, new Set([ref.id]));
104+}
105+}
106+107+const models: Model<Api>[] = [];
108+const seen = new Set<string>();
109+for (const [provider, ids] of idsByProvider) {
110+for (const model of getModels(provider)) {
111+const id = model.id.toLowerCase();
112+if (!ids.has(id)) {
113+continue;
114+}
115+const key = `${provider}/${id}`;
116+if (seen.has(key)) {
117+continue;
118+}
119+seen.add(key);
120+models.push(model);
121+}
122+}
123+return models;
124+}
125+95126function formatElapsedSeconds(ms: number): string {
96127return `${Math.max(1, Math.round(ms / 1_000))}s`;
97128}
@@ -751,37 +782,42 @@ describeLive("live models (profile keys)", () => {
751782const providerList = providers ? [...providers] : null;
752783logProgress("[live-models] resolving agent dir");
753784const agentDir = resolveDefaultAgentDir(cfg);
754-logProgress("[live-models] loading auth storage");
755-const authStorage = await withLiveStageTimeout(
756-Promise.resolve().then(() =>
757-discoverAuthStorage(agentDir, {
758-config: cfg,
759-env: process.env,
760-externalCli: externalCliDiscoveryForProviders({ cfg, providers: providerList ?? [] }),
761- ...(providerList
762- ? {
763-skipExternalAuthProfiles: true,
764-syntheticAuthProviderRefs: [],
765-}
766- : {}),
767-}),
768-),
769-"[live-models] load auth storage",
770-);
771-logProgress("[live-models] loading model registry");
772-const models = await withLiveStageTimeout(
773-Promise.resolve().then(() =>
774-discoverModels(authStorage, agentDir, { normalizeModels: false }).getAll(),
775-),
776-"[live-models] load model registry",
777-);
778-779785const rawModels = process.env.OPENCLAW_LIVE_MODELS?.trim();
780786const useModern = rawModels === "modern" || rawModels === "all";
781787const useExplicit = Boolean(rawModels) && !useModern;
782788const filter = useExplicit ? parseModelFilter(rawModels) : null;
783789const useDefaultPriorityOnly = !filter && useModern && !providers;
784790const allowNotFoundSkip = useModern;
791+const models = await (async () => {
792+if (useDefaultPriorityOnly) {
793+logProgress("[live-models] loading prioritized model refs");
794+return loadPrioritizedHighSignalModels();
795+}
796+logProgress("[live-models] loading auth storage");
797+const authStorage = await withLiveStageTimeout(
798+Promise.resolve().then(() =>
799+discoverAuthStorage(agentDir, {
800+config: cfg,
801+env: process.env,
802+externalCli: externalCliDiscoveryForProviders({ cfg, providers: providerList ?? [] }),
803+ ...(providerList
804+ ? {
805+skipExternalAuthProfiles: true,
806+syntheticAuthProviderRefs: [],
807+}
808+ : {}),
809+}),
810+),
811+"[live-models] load auth storage",
812+);
813+logProgress("[live-models] loading model registry");
814+return withLiveStageTimeout(
815+Promise.resolve().then(() =>
816+discoverModels(authStorage, agentDir, { normalizeModels: false }).getAll(),
817+),
818+"[live-models] load model registry",
819+);
820+})();
785821const perModelTimeoutMs = toInt(process.env.OPENCLAW_LIVE_MODEL_TIMEOUT_MS, 30_000);
786822const maxModels = resolveHighSignalLiveModelLimit({
787823rawMaxModels: process.env.OPENCLAW_LIVE_MAX_MODELS,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。