



























@@ -15,7 +15,12 @@ import { normalizeProviderId } from "./model-selection.js";
15151616export { resetContextWindowCacheForTest } from "./context-runtime-state.js";
171718-type ModelEntry = { id: string; contextWindow?: number; contextTokens?: number };
18+type ModelEntry = {
19+id: string;
20+provider?: string;
21+contextWindow?: number;
22+contextTokens?: number;
23+};
1924type ModelRegistryLike = {
2025getAvailable?: () => ModelEntry[];
2126getAll: () => ModelEntry[];
@@ -53,7 +58,7 @@ export function applyDiscoveredContextWindows(params: {
5358 : typeof model.contextWindow === "number"
5459 ? Math.trunc(model.contextWindow)
5560 : undefined;
56-const contextTokens = shouldUseDiscoveredAnthropicOpus47ContextWindow(model.id)
61+const contextTokens = shouldUseDiscoveredAnthropicOpus47ContextWindow(model)
5762 ? ANTHROPIC_CONTEXT_1M_TOKENS
5863 : discoveredContextTokens;
5964if (!contextTokens || contextTokens <= 0) {
@@ -236,7 +241,9 @@ function ensureContextWindowCacheLoaded(): Promise<void> {
236241await import("./pi-model-discovery-runtime.js");
237242const agentDir = resolveOpenClawAgentDir();
238243const authStorage = discoverAuthStorage(agentDir);
239-const modelRegistry = discoverModels(authStorage, agentDir) as unknown as ModelRegistryLike;
244+const modelRegistry = discoverModels(authStorage, agentDir, {
245+normalizeModels: false,
246+}) as unknown as ModelRegistryLike;
240247const models =
241248typeof modelRegistry.getAvailable === "function"
242249 ? modelRegistry.getAvailable()
@@ -418,17 +425,23 @@ function shouldUseAnthropicOpus47ContextWindow(params: {
418425);
419426}
420427421-function shouldUseDiscoveredAnthropicOpus47ContextWindow(modelId: string): boolean {
428+function shouldUseDiscoveredAnthropicOpus47ContextWindow(model: ModelEntry): boolean {
429+const provider =
430+typeof model.provider === "string" ? normalizeProviderId(model.provider) : undefined;
431+const modelId = model.id;
422432if (!isClaudeOpus47Model(modelId)) {
423433return false;
424434}
435+if (provider) {
436+return provider === "anthropic" || provider === "claude-cli";
437+}
425438const normalized = normalizeLowercaseStringOrEmpty(modelId);
426439const slash = normalized.indexOf("/");
427440if (slash < 0) {
428441return false;
429442}
430-const provider = normalizeProviderId(normalized.slice(0, slash));
431-return provider === "claude-cli";
443+const inferredProvider = normalizeProviderId(normalized.slice(0, slash));
444+return inferredProvider === "claude-cli";
432445}
433446434447function resolveModelFamilyId(modelId: string): string {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。