
























@@ -1,6 +1,5 @@
11import type { ModelRegistry } from "@mariozechner/pi-coding-agent";
22import { parseModelRef } from "../../agents/model-selection.js";
3-import type { NormalizedModelCatalogRow } from "../../model-catalog/index.js";
43import type { RuntimeEnv } from "../../runtime.js";
54import { normalizeLowercaseStringOrEmpty } from "../../shared/string-coerce.js";
65import { resolveConfiguredEntries } from "./list.configured.js";
@@ -14,11 +13,11 @@ const DISPLAY_MODEL_PARSE_OPTIONS = { allowPluginNormalization: false } as const
14131514type RegistryLoadModule = typeof import("./list.registry-load.js");
1615type RowSourcesModule = typeof import("./list.row-sources.js");
17-type ProviderCatalogModule = typeof import("./list.provider-catalog.js");
16+type SourcePlanModule = typeof import("./list.source-plan.js");
18171918let registryLoadModulePromise: Promise<RegistryLoadModule> | undefined;
2019let rowSourcesModulePromise: Promise<RowSourcesModule> | undefined;
21-let providerCatalogModulePromise: Promise<ProviderCatalogModule> | undefined;
20+let sourcePlanModulePromise: Promise<SourcePlanModule> | undefined;
22212322function loadRegistryLoadModule(): Promise<RegistryLoadModule> {
2423registryLoadModulePromise ??= import("./list.registry-load.js");
@@ -30,25 +29,9 @@ function loadRowSourcesModule(): Promise<RowSourcesModule> {
3029return rowSourcesModulePromise;
3130}
323133-function loadProviderCatalogModule(): Promise<ProviderCatalogModule> {
34-providerCatalogModulePromise ??= import("./list.provider-catalog.js");
35-return providerCatalogModulePromise;
36-}
37-38-function modelRowSourcesRequireRegistry(params: {
39-all?: boolean;
40-providerFilter?: string;
41-useManifestCatalogFastPath: boolean;
42-useProviderCatalogFastPath: boolean;
43-useProviderIndexCatalogFastPath: boolean;
44-}): boolean {
45-if (!params.all) {
46-return false;
47-}
48-if (params.providerFilter) {
49-return false;
50-}
51-return true;
32+function loadSourcePlanModule(): Promise<SourcePlanModule> {
33+sourcePlanModulePromise ??= import("./list.source-plan.js");
34+return sourcePlanModulePromise;
5235}
53365437export async function modelsListCommand(
@@ -98,38 +81,15 @@ export async function modelsListCommand(
9881let availabilityErrorMessage: string | undefined;
9982const { entries } = resolveConfiguredEntries(cfg);
10083const configuredByKey = new Map(entries.map((entry) => [entry.key, entry]));
101-let manifestCatalogRows: readonly NormalizedModelCatalogRow[] = [];
102-let providerIndexCatalogRows: readonly NormalizedModelCatalogRow[] = [];
103-if (opts.all && providerFilter) {
104-const { loadStaticManifestCatalogRowsForList } = await import("./list.manifest-catalog.js");
105-manifestCatalogRows = loadStaticManifestCatalogRowsForList({ cfg, providerFilter });
106-}
107-const useManifestCatalogFastPath = manifestCatalogRows.length > 0;
108-if (!useManifestCatalogFastPath && opts.all && providerFilter) {
109-const { loadProviderIndexCatalogRowsForList } =
110-await import("./list.provider-index-catalog.js");
111-providerIndexCatalogRows = loadProviderIndexCatalogRowsForList({ cfg, providerFilter });
112-}
113-const useProviderIndexCatalogFastPath = providerIndexCatalogRows.length > 0;
114-const useProviderCatalogFastPath = await (async () => {
115-if (
116-useManifestCatalogFastPath ||
117-useProviderIndexCatalogFastPath ||
118-!opts.all ||
119-!providerFilter
120-) {
121-return false;
122-}
123-const { hasProviderStaticCatalogForFilter } = await loadProviderCatalogModule();
124-return hasProviderStaticCatalogForFilter({ cfg, providerFilter });
125-})();
126-const shouldLoadRegistry = modelRowSourcesRequireRegistry({
127-all: opts.all,
128- providerFilter,
129- useManifestCatalogFastPath,
130- useProviderCatalogFastPath,
131- useProviderIndexCatalogFastPath,
132-});
84+const sourcePlanModule = opts.all ? await loadSourcePlanModule() : undefined;
85+const sourcePlan = sourcePlanModule
86+ ? await sourcePlanModule.planAllModelListSources({
87+all: opts.all,
88+ providerFilter,
89+ cfg,
90+})
91+ : undefined;
92+const shouldLoadRegistry = sourcePlan?.requiresInitialRegistry ?? false;
13393const loadRegistryState = async () => {
13494const { loadListModelRegistry } = await loadRegistryLoadModule();
13595const loaded = await loadListModelRegistry(cfg, { providerFilter });
@@ -170,18 +130,15 @@ export async function modelsListCommand(
170130171131if (opts.all) {
172132const { appendAllModelRowSources } = await loadRowSourcesModule();
173-let rowContext = buildRowContext(
174-useManifestCatalogFastPath || useProviderCatalogFastPath || useProviderIndexCatalogFastPath,
175-);
133+if (!sourcePlan || !sourcePlanModule) {
134+throw new Error("models list source plan was not initialized");
135+}
136+let rowContext = buildRowContext(sourcePlan.skipRuntimeModelSuppression);
176137const initialAppend = await appendAllModelRowSources({
177138 rows,
178139context: rowContext,
179140 modelRegistry,
180- manifestCatalogRows,
181- providerIndexCatalogRows,
182- useManifestCatalogFastPath,
183- useProviderCatalogFastPath,
184- useProviderIndexCatalogFastPath,
141+ sourcePlan,
185142});
186143if (initialAppend.requiresRegistryFallback) {
187144try {
@@ -197,11 +154,7 @@ export async function modelsListCommand(
197154 rows,
198155context: rowContext,
199156 modelRegistry,
200-manifestCatalogRows: [],
201-providerIndexCatalogRows: [],
202-useManifestCatalogFastPath: false,
203-useProviderCatalogFastPath: false,
204-useProviderIndexCatalogFastPath: false,
157+sourcePlan: sourcePlanModule.createRegistryModelListSourcePlan(),
205158});
206159}
207160} else {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。