fix(ai): require explicit anthropic compat metadata
This commit is contained in:
@@ -170,16 +170,11 @@ const INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14";
|
|||||||
function getAnthropicCompat(
|
function getAnthropicCompat(
|
||||||
model: Model<"anthropic-messages">,
|
model: Model<"anthropic-messages">,
|
||||||
): Required<Omit<AnthropicMessagesCompat, "forceAdaptiveThinking">> {
|
): Required<Omit<AnthropicMessagesCompat, "forceAdaptiveThinking">> {
|
||||||
const isFireworks = model.provider === "fireworks";
|
|
||||||
const isCloudflareAiGatewayAnthropic =
|
|
||||||
model.provider === "cloudflare-ai-gateway" && model.baseUrl.includes("anthropic");
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
supportsEagerToolInputStreaming: model.compat?.supportsEagerToolInputStreaming ?? !isFireworks,
|
supportsEagerToolInputStreaming: model.compat?.supportsEagerToolInputStreaming ?? true,
|
||||||
supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? !isFireworks,
|
supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,
|
||||||
sendSessionAffinityHeaders:
|
sendSessionAffinityHeaders: model.compat?.sendSessionAffinityHeaders ?? false,
|
||||||
model.compat?.sendSessionAffinityHeaders ?? (isFireworks || isCloudflareAiGatewayAnthropic),
|
supportsCacheControlOnTools: model.compat?.supportsCacheControlOnTools ?? true,
|
||||||
supportsCacheControlOnTools: model.compat?.supportsCacheControlOnTools ?? !isFireworks,
|
|
||||||
supportsTemperature: model.compat?.supportsTemperature ?? true,
|
supportsTemperature: model.compat?.supportsTemperature ?? true,
|
||||||
allowEmptySignature: model.compat?.allowEmptySignature ?? false,
|
allowEmptySignature: model.compat?.allowEmptySignature ?? false,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -909,7 +909,7 @@ export const OPENROUTER_MODELS = {
|
|||||||
cacheRead: 0.2,
|
cacheRead: 0.2,
|
||||||
cacheWrite: 0.375,
|
cacheWrite: 0.375,
|
||||||
},
|
},
|
||||||
contextWindow: 131072,
|
contextWindow: 65536,
|
||||||
maxTokens: 32768,
|
maxTokens: 32768,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"google/gemini-3.1-flash-lite": {
|
"google/gemini-3.1-flash-lite": {
|
||||||
@@ -1108,7 +1108,7 @@ export const OPENROUTER_MODELS = {
|
|||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 262144,
|
contextWindow: 262144,
|
||||||
maxTokens: 32768,
|
maxTokens: 8192,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"ibm-granite/granite-4.1-8b": {
|
"ibm-granite/granite-4.1-8b": {
|
||||||
id: "ibm-granite/granite-4.1-8b",
|
id: "ibm-granite/granite-4.1-8b",
|
||||||
@@ -1216,8 +1216,8 @@ export const OPENROUTER_MODELS = {
|
|||||||
cacheRead: 0.06,
|
cacheRead: 0.06,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 262144,
|
contextWindow: 256000,
|
||||||
maxTokens: 144000,
|
maxTokens: 80000,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"liquid/lfm-2.5-1.2b-thinking:free": {
|
"liquid/lfm-2.5-1.2b-thinking:free": {
|
||||||
id: "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,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 1048576,
|
contextWindow: 1048576,
|
||||||
maxTokens: 4096,
|
maxTokens: 512000,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"mistralai/codestral-2508": {
|
"mistralai/codestral-2508": {
|
||||||
id: "mistralai/codestral-2508",
|
id: "mistralai/codestral-2508",
|
||||||
@@ -1807,7 +1807,7 @@ export const OPENROUTER_MODELS = {
|
|||||||
cost: {
|
cost: {
|
||||||
input: 0.6,
|
input: 0.6,
|
||||||
output: 2.5,
|
output: 2.5,
|
||||||
cacheRead: 0.6,
|
cacheRead: 0,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 262144,
|
contextWindow: 262144,
|
||||||
@@ -2189,7 +2189,7 @@ export const OPENROUTER_MODELS = {
|
|||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 1047576,
|
contextWindow: 1047576,
|
||||||
maxTokens: 4096,
|
maxTokens: 32768,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"openai/gpt-4.1-nano": {
|
"openai/gpt-4.1-nano": {
|
||||||
id: "openai/gpt-4.1-nano",
|
id: "openai/gpt-4.1-nano",
|
||||||
@@ -2221,7 +2221,7 @@ export const OPENROUTER_MODELS = {
|
|||||||
cost: {
|
cost: {
|
||||||
input: 2.5,
|
input: 2.5,
|
||||||
output: 10,
|
output: 10,
|
||||||
cacheRead: 1.25,
|
cacheRead: 0,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 128000,
|
contextWindow: 128000,
|
||||||
@@ -2365,11 +2365,11 @@ export const OPENROUTER_MODELS = {
|
|||||||
cost: {
|
cost: {
|
||||||
input: 0.25,
|
input: 0.25,
|
||||||
output: 2,
|
output: 2,
|
||||||
cacheRead: 0.03,
|
cacheRead: 0.025,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 400000,
|
contextWindow: 400000,
|
||||||
maxTokens: 4096,
|
maxTokens: 128000,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"openai/gpt-5-nano": {
|
"openai/gpt-5-nano": {
|
||||||
id: "openai/gpt-5-nano",
|
id: "openai/gpt-5-nano",
|
||||||
@@ -2437,11 +2437,11 @@ export const OPENROUTER_MODELS = {
|
|||||||
cost: {
|
cost: {
|
||||||
input: 1.25,
|
input: 1.25,
|
||||||
output: 10,
|
output: 10,
|
||||||
cacheRead: 0.125,
|
cacheRead: 0.13,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 128000,
|
contextWindow: 128000,
|
||||||
maxTokens: 16384,
|
maxTokens: 32000,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"openai/gpt-5.1-codex": {
|
"openai/gpt-5.1-codex": {
|
||||||
id: "openai/gpt-5.1-codex",
|
id: "openai/gpt-5.1-codex",
|
||||||
@@ -2533,7 +2533,7 @@ export const OPENROUTER_MODELS = {
|
|||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 128000,
|
contextWindow: 128000,
|
||||||
maxTokens: 32000,
|
maxTokens: 16384,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"openai/gpt-5.2-codex": {
|
"openai/gpt-5.2-codex": {
|
||||||
id: "openai/gpt-5.2-codex",
|
id: "openai/gpt-5.2-codex",
|
||||||
@@ -3799,11 +3799,11 @@ export const OPENROUTER_MODELS = {
|
|||||||
cost: {
|
cost: {
|
||||||
input: 0.14,
|
input: 0.14,
|
||||||
output: 1,
|
output: 1,
|
||||||
cacheRead: 0.05,
|
cacheRead: 0,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 262144,
|
contextWindow: 262144,
|
||||||
maxTokens: 81920,
|
maxTokens: 262144,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"qwen/qwen3.5-397b-a17b": {
|
"qwen/qwen3.5-397b-a17b": {
|
||||||
id: "qwen/qwen3.5-397b-a17b",
|
id: "qwen/qwen3.5-397b-a17b",
|
||||||
@@ -3838,8 +3838,8 @@ export const OPENROUTER_MODELS = {
|
|||||||
cacheRead: 0,
|
cacheRead: 0,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 256000,
|
contextWindow: 262144,
|
||||||
maxTokens: 32768,
|
maxTokens: 262144,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"qwen/qwen3.5-flash-02-23": {
|
"qwen/qwen3.5-flash-02-23": {
|
||||||
id: "qwen/qwen3.5-flash-02-23",
|
id: "qwen/qwen3.5-flash-02-23",
|
||||||
@@ -4429,11 +4429,11 @@ export const OPENROUTER_MODELS = {
|
|||||||
cost: {
|
cost: {
|
||||||
input: 0.98,
|
input: 0.98,
|
||||||
output: 3.08,
|
output: 3.08,
|
||||||
cacheRead: 0.182,
|
cacheRead: 0.49,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 202752,
|
contextWindow: 202752,
|
||||||
maxTokens: 4096,
|
maxTokens: 65535,
|
||||||
} satisfies Model<"openai-completions">,
|
} satisfies Model<"openai-completions">,
|
||||||
"z-ai/glm-5.2": {
|
"z-ai/glm-5.2": {
|
||||||
id: "z-ai/glm-5.2",
|
id: "z-ai/glm-5.2",
|
||||||
|
|||||||
@@ -79,7 +79,16 @@ const tool: Tool = {
|
|||||||
parameters: Type.Object({ value: Type.String() }),
|
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 {
|
return {
|
||||||
id: "accounts/fireworks/models/kimi-k2p6",
|
id: "accounts/fireworks/models/kimi-k2p6",
|
||||||
name: "Kimi K2.6",
|
name: "Kimi K2.6",
|
||||||
|
|||||||
Reference in New Issue
Block a user