fix(ai): require explicit anthropic compat metadata

This commit is contained in:
Mario Zechner
2026-06-23 21:04:59 +02:00
parent e00074358d
commit 6184307c39
3 changed files with 33 additions and 29 deletions
+4 -9
View File
@@ -170,16 +170,11 @@ const INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14";
function getAnthropicCompat(
model: Model<"anthropic-messages">,
): Required<Omit<AnthropicMessagesCompat, "forceAdaptiveThinking">> {
const isFireworks = model.provider === "fireworks";
const isCloudflareAiGatewayAnthropic =
model.provider === "cloudflare-ai-gateway" && model.baseUrl.includes("anthropic");
return {
supportsEagerToolInputStreaming: model.compat?.supportsEagerToolInputStreaming ?? !isFireworks,
supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? !isFireworks,
sendSessionAffinityHeaders:
model.compat?.sendSessionAffinityHeaders ?? (isFireworks || isCloudflareAiGatewayAnthropic),
supportsCacheControlOnTools: model.compat?.supportsCacheControlOnTools ?? !isFireworks,
supportsEagerToolInputStreaming: model.compat?.supportsEagerToolInputStreaming ?? true,
supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,
sendSessionAffinityHeaders: model.compat?.sendSessionAffinityHeaders ?? false,
supportsCacheControlOnTools: model.compat?.supportsCacheControlOnTools ?? true,
supportsTemperature: model.compat?.supportsTemperature ?? true,
allowEmptySignature: model.compat?.allowEmptySignature ?? false,
};
+19 -19
View File
@@ -909,7 +909,7 @@ export const OPENROUTER_MODELS = {
cacheRead: 0.2,
cacheWrite: 0.375,
},
contextWindow: 131072,
contextWindow: 65536,
maxTokens: 32768,
} satisfies Model<"openai-completions">,
"google/gemini-3.1-flash-lite": {
@@ -1108,7 +1108,7 @@ export const OPENROUTER_MODELS = {
cacheWrite: 0,
},
contextWindow: 262144,
maxTokens: 32768,
maxTokens: 8192,
} satisfies Model<"openai-completions">,
"ibm-granite/granite-4.1-8b": {
id: "ibm-granite/granite-4.1-8b",
@@ -1216,8 +1216,8 @@ export const OPENROUTER_MODELS = {
cacheRead: 0.06,
cacheWrite: 0,
},
contextWindow: 262144,
maxTokens: 144000,
contextWindow: 256000,
maxTokens: 80000,
} satisfies Model<"openai-completions">,
"liquid/lfm-2.5-1.2b-thinking:free": {
id: "liquid/lfm-2.5-1.2b-thinking:free",
@@ -1451,7 +1451,7 @@ export const OPENROUTER_MODELS = {
cacheWrite: 0,
},
contextWindow: 1048576,
maxTokens: 4096,
maxTokens: 512000,
} satisfies Model<"openai-completions">,
"mistralai/codestral-2508": {
id: "mistralai/codestral-2508",
@@ -1807,7 +1807,7 @@ export const OPENROUTER_MODELS = {
cost: {
input: 0.6,
output: 2.5,
cacheRead: 0.6,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 262144,
@@ -2189,7 +2189,7 @@ export const OPENROUTER_MODELS = {
cacheWrite: 0,
},
contextWindow: 1047576,
maxTokens: 4096,
maxTokens: 32768,
} satisfies Model<"openai-completions">,
"openai/gpt-4.1-nano": {
id: "openai/gpt-4.1-nano",
@@ -2221,7 +2221,7 @@ export const OPENROUTER_MODELS = {
cost: {
input: 2.5,
output: 10,
cacheRead: 1.25,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 128000,
@@ -2365,11 +2365,11 @@ export const OPENROUTER_MODELS = {
cost: {
input: 0.25,
output: 2,
cacheRead: 0.03,
cacheRead: 0.025,
cacheWrite: 0,
},
contextWindow: 400000,
maxTokens: 4096,
maxTokens: 128000,
} satisfies Model<"openai-completions">,
"openai/gpt-5-nano": {
id: "openai/gpt-5-nano",
@@ -2437,11 +2437,11 @@ export const OPENROUTER_MODELS = {
cost: {
input: 1.25,
output: 10,
cacheRead: 0.125,
cacheRead: 0.13,
cacheWrite: 0,
},
contextWindow: 128000,
maxTokens: 16384,
maxTokens: 32000,
} satisfies Model<"openai-completions">,
"openai/gpt-5.1-codex": {
id: "openai/gpt-5.1-codex",
@@ -2533,7 +2533,7 @@ export const OPENROUTER_MODELS = {
cacheWrite: 0,
},
contextWindow: 128000,
maxTokens: 32000,
maxTokens: 16384,
} satisfies Model<"openai-completions">,
"openai/gpt-5.2-codex": {
id: "openai/gpt-5.2-codex",
@@ -3799,11 +3799,11 @@ export const OPENROUTER_MODELS = {
cost: {
input: 0.14,
output: 1,
cacheRead: 0.05,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 262144,
maxTokens: 81920,
maxTokens: 262144,
} satisfies Model<"openai-completions">,
"qwen/qwen3.5-397b-a17b": {
id: "qwen/qwen3.5-397b-a17b",
@@ -3838,8 +3838,8 @@ export const OPENROUTER_MODELS = {
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 256000,
maxTokens: 32768,
contextWindow: 262144,
maxTokens: 262144,
} satisfies Model<"openai-completions">,
"qwen/qwen3.5-flash-02-23": {
id: "qwen/qwen3.5-flash-02-23",
@@ -4429,11 +4429,11 @@ export const OPENROUTER_MODELS = {
cost: {
input: 0.98,
output: 3.08,
cacheRead: 0.182,
cacheRead: 0.49,
cacheWrite: 0,
},
contextWindow: 202752,
maxTokens: 4096,
maxTokens: 65535,
} satisfies Model<"openai-completions">,
"z-ai/glm-5.2": {
id: "z-ai/glm-5.2",
+10 -1
View File
@@ -79,7 +79,16 @@ const tool: Tool = {
parameters: Type.Object({ value: Type.String() }),
};
function createFireworksModel(compat?: Model<"anthropic-messages">["compat"]): Model<"anthropic-messages"> {
const FIREWORKS_ANTHROPIC_COMPAT = {
sendSessionAffinityHeaders: true,
supportsEagerToolInputStreaming: false,
supportsCacheControlOnTools: false,
supportsLongCacheRetention: false,
} satisfies NonNullable<Model<"anthropic-messages">["compat"]>;
function createFireworksModel(
compat: Model<"anthropic-messages">["compat"] = FIREWORKS_ANTHROPIC_COMPAT,
): Model<"anthropic-messages"> {
return {
id: "accounts/fireworks/models/kimi-k2p6",
name: "Kimi K2.6",