fix(agents): extend cache-ttl eligibility for moonshot and zai

Co-authored-by: lailoo <lailoo@users.noreply.github.com>
This commit is contained in:
Peter Steinberger
2026-02-23 18:16:07 +00:00
parent 2fa6aa6ea6
commit f93ca93498
3 changed files with 45 additions and 2 deletions

View File

@@ -0,0 +1,30 @@
import { describe, expect, it } from "vitest";
import { isCacheTtlEligibleProvider } from "./cache-ttl.js";
describe("isCacheTtlEligibleProvider", () => {
it("allows anthropic", () => {
expect(isCacheTtlEligibleProvider("anthropic", "claude-sonnet-4-20250514")).toBe(true);
});
it("allows moonshot and zai providers", () => {
expect(isCacheTtlEligibleProvider("moonshot", "kimi-k2.5")).toBe(true);
expect(isCacheTtlEligibleProvider("zai", "glm-5")).toBe(true);
});
it("is case-insensitive for native providers", () => {
expect(isCacheTtlEligibleProvider("Moonshot", "Kimi-K2.5")).toBe(true);
expect(isCacheTtlEligibleProvider("ZAI", "GLM-5")).toBe(true);
});
it("allows openrouter cache-ttl models", () => {
expect(isCacheTtlEligibleProvider("openrouter", "anthropic/claude-sonnet-4")).toBe(true);
expect(isCacheTtlEligibleProvider("openrouter", "moonshotai/kimi-k2.5")).toBe(true);
expect(isCacheTtlEligibleProvider("openrouter", "moonshot/kimi-k2.5")).toBe(true);
expect(isCacheTtlEligibleProvider("openrouter", "zai/glm-5")).toBe(true);
});
it("rejects unsupported providers and models", () => {
expect(isCacheTtlEligibleProvider("openai", "gpt-4o")).toBe(false);
expect(isCacheTtlEligibleProvider("openrouter", "openai/gpt-4o")).toBe(false);
});
});

View File

@@ -8,13 +8,25 @@ export type CacheTtlEntryData = {
modelId?: string;
};
const CACHE_TTL_NATIVE_PROVIDERS = new Set(["anthropic", "moonshot", "zai"]);
const OPENROUTER_CACHE_TTL_MODEL_PREFIXES = [
"anthropic/",
"moonshot/",
"moonshotai/",
"zai/",
] as const;
function isOpenRouterCacheTtlModel(modelId: string): boolean {
return OPENROUTER_CACHE_TTL_MODEL_PREFIXES.some((prefix) => modelId.startsWith(prefix));
}
export function isCacheTtlEligibleProvider(provider: string, modelId: string): boolean {
const normalizedProvider = provider.toLowerCase();
const normalizedModelId = modelId.toLowerCase();
if (normalizedProvider === "anthropic") {
if (CACHE_TTL_NATIVE_PROVIDERS.has(normalizedProvider)) {
return true;
}
if (normalizedProvider === "openrouter" && normalizedModelId.startsWith("anthropic/")) {
if (normalizedProvider === "openrouter" && isOpenRouterCacheTtlModel(normalizedModelId)) {
return true;
}
return false;