diff --git a/src/proxy/anthropic.ts b/src/proxy/anthropic.ts index 668b99f..5b9c4be 100644 --- a/src/proxy/anthropic.ts +++ b/src/proxy/anthropic.ts @@ -206,8 +206,10 @@ function setAnthropicBetaHeader(req: Request) { */ function addWebSearchTool(req: Request) { // Check if this is a Claude model that supports web search and if web search is enabled - const supportsWebSearch = /^claude-3-(5|7)/.test(req.body.model); - const useWebSearch = supportsWebSearch && Boolean(req.body.enable_web_search); + const isClaude35 = req.body.model?.includes("claude-3-5") || req.body.model?.includes("claude-3.5"); + const isClaude37 = req.body.model?.includes("claude-3-7") || req.body.model?.includes("claude-3.7"); + const isClaude4 = req.body.model?.includes("claude-4"); + const useWebSearch = (isClaude35 || isClaude37 || isClaude4) && Boolean(req.body.enable_web_search); if (useWebSearch) { // Create the base web search tool @@ -305,7 +307,7 @@ const textToChatPreprocessor = createPreprocessorMiddleware( * (claude-3 based models do not support the old text completion endpoint). */ const preprocessAnthropicTextRequest: RequestHandler = (req, res, next) => { - if (req.body.model?.startsWith("claude-3")) { + if (req.body.model?.startsWith("claude-3") || req.body.model?.startsWith("claude-4")) { textToChatPreprocessor(req, res, next); } else { nativeTextPreprocessor(req, res, next); @@ -336,7 +338,9 @@ const oaiToChatPreprocessor = createPreprocessorMiddleware( */ const preprocessOpenAICompatRequest: RequestHandler = (req, res, next) => { maybeReassignModel(req); - if (req.body.model?.includes("claude-3")) { + const model = req.body.model; + const isClaude4 = model?.includes("claude-4"); + if (model?.includes("claude-3") || isClaude4) { oaiToChatPreprocessor(req, res, next); } else { oaiToTextPreprocessor(req, res, next);