it("only warms eagerly for real openclaw startup commands that need model metadata", async () => { const { shouldEagerWarmContextWindowCache } = await importContextModule();
it("returns the smaller window when the same bare model id is discovered under multiple providers", async () => {
mockDiscoveryDeps([
{ id: "gemini-3.1-pro-preview", contextWindow: 1_048_576 },
{ id: "gemini-3.1-pro-preview", contextWindow: 128_000 },
]);
// With provider specified and no config override, bare lookup finds the // provider-qualified discovery entry. const result = resolveContextTokensForModel({
provider: "google-gemini-cli",
model: "gemini-3.1-pro-preview",
});
expect(result).toBe(1_048_576);
});
it("resolveContextTokensForModel returns configured override via direct config scan (beats discovery)", async () => { // Config has an explicit contextWindow; resolveContextTokensForModel should // return it via direct config scan, preventing collisions with raw discovery // entries. Real callers (status.summary.ts etc.) always pass cfg.
mockDiscoveryDeps([
{ id: "google-gemini-cli/gemini-3.1-pro-preview", contextWindow: 1_048_576 },
]);
const result = resolveContextTokensForModel({
cfg: cfg as never,
provider: "openrouter",
model: "anthropic/claude-sonnet-4-5",
});
expect(result).toBe(200_000);
});
it("resolveContextTokensForModel: config direct scan prevents OpenRouter qualified key collision for Google provider", async () => { // When provider is explicitly "google" and cfg has a Google contextWindow // override, the config direct scan returns it before any cache lookup — // so the OpenRouter raw "google/gemini-2.5-pro" qualified entry is never hit. // Real callers (status.summary.ts) always pass cfg when provider is explicit.
mockDiscoveryDeps([{ id: "google/gemini-2.5-pro", contextWindow: 999_000 }]);
// Google with explicit cfg: config direct scan wins before any cache lookup. const googleResult = resolveContextTokensForModel({
cfg: cfg as never,
provider: "google",
model: "gemini-2.5-pro",
});
expect(googleResult).toBe(2_000_000);
// OpenRouter provider with slash model id: bare lookup finds the raw entry. const openrouterResult = resolveContextTokensForModel({
provider: "openrouter",
model: "google/gemini-2.5-pro",
});
expect(openrouterResult).toBe(999_000);
});
it("resolveContextTokensForModel prefers exact provider key over alias-normalized match", async () => { // When both "bedrock" and "amazon-bedrock" exist as config keys (alias pattern), // resolveConfiguredProviderContextWindow must return the exact-key match first, // not the first normalized hit — mirroring pi-embedded-runner/model.ts behaviour.
mockDiscoveryDeps([]);
// Exact key "bedrock" wins over the alias-normalized match "amazon-bedrock". const bedrockResult = resolveContextTokensForModel({
cfg: cfg as never,
provider: "bedrock",
model: "claude-alias-test",
});
expect(bedrockResult).toBe(128_000);
// Exact key "amazon-bedrock" wins (no alias lookup needed). const canonicalResult = resolveContextTokensForModel({
cfg: cfg as never,
provider: "amazon-bedrock",
model: "claude-alias-test",
});
expect(canonicalResult).toBe(32_000);
});
it("resolveContextTokensForModel(model-only) does not apply config scan for inferred provider", async () => { // status.ts log-usage fallback calls resolveContextTokensForModel({ model }) // with no provider. When model = "google/gemini-2.5-pro" (OpenRouter ID), // resolveProviderModelRef infers provider="google". Without the guard, // resolveConfiguredProviderContextWindow would return Google's configured // window and misreport context limits for the OpenRouter session.
mockDiscoveryDeps([{ id: "google/gemini-2.5-pro", contextWindow: 999_000 }]);
// model-only call (no explicit provider) must NOT apply config direct scan. // Falls through to bare cache lookup: "google/gemini-2.5-pro" → 999k ✓. const modelOnlyResult = resolveContextTokensForModel({
cfg: cfg as never,
model: "google/gemini-2.5-pro", // no provider
});
expect(modelOnlyResult).toBe(999_000);
it("resolveContextTokensForModel(model-only) does not force 1M for inferred anthropic opus 4.7 ids", async () => {
mockDiscoveryDeps([{ id: "anthropic/claude-opus-4.7-20260219", contextWindow: 200_000 }]);
const result = resolveContextTokensForModel({
model: "anthropic/claude-opus-4.7-20260219",
fallbackContextTokens: 200_000,
});
expect(result).toBe(200_000);
});
it("resolveContextTokensForModel: qualified key beats bare min when provider is explicit (original #35976 fix)", async () => { // Regression: when both "gemini-3.1-pro-preview" (bare, min=128k) AND // "google-gemini-cli/gemini-3.1-pro-preview" (qualified, 1M) are in cache, // an explicit-provider call must return the provider-specific qualified value, // not the collided bare minimum.
mockDiscoveryDeps([
{ id: "github-copilot/gemini-3.1-pro-preview", contextWindow: 128_000 },
{ id: "gemini-3.1-pro-preview", contextWindow: 128_000 },
{ id: "google-gemini-cli/gemini-3.1-pro-preview", contextWindow: 1_048_576 },
]);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.