Skip to content

Commit 502b4ac

Browse files
author
a.dmitriev
committed
fix(mcp): match language model by provider+model, fall back when displayName absent
The MCP tool schema for ask_codebase omits displayName from the request shape (@sourcebot/mcp uses .omit({ displayName: true })). When an LLM agent selects a model it can only pass {provider, model}, so the previous getLanguageModelKey-based match (which includes displayName) always produced a key like 'anthropic-claude-opus-4-7-undefined' vs the configured 'anthropic-claude-opus-4-7-Claude Opus 4.7', causing a 400 for any explicit model selection. New logic: match on provider + model always; honour displayName only when the caller actually provides it, preserving disambiguation between two models that share the same provider/model but differ in displayName (e.g. two opus-4-7 entries with different reasoningEffort). Fixes #1137
1 parent 105ddf4 commit 502b4ac

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

packages/web/src/features/mcp/askCodebase.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { sew } from "@/middleware/sew";
22
import { getConfiguredLanguageModels, getAISDKLanguageModelAndOptions, generateChatNameFromMessage, updateChatMessages } from "@/features/chat/utils.server";
33
import { LanguageModelInfo, SBChatMessage, SearchScope } from "@/features/chat/types";
4-
import { convertLLMOutputToPortableMarkdown, getAnswerPartFromAssistantMessage, getLanguageModelKey } from "@/features/chat/utils";
4+
import { convertLLMOutputToPortableMarkdown, getAnswerPartFromAssistantMessage } from "@/features/chat/utils";
55
import { ErrorCode } from "@/lib/errorCodes";
66
import { ServiceError, ServiceErrorException } from "@/lib/serviceError";
77
import { withOptionalAuth } from "@/middleware/withAuth";
@@ -58,7 +58,10 @@ export const askCodebase = (params: AskCodebaseParams): Promise<AskCodebaseResul
5858
let languageModelConfig = configuredModels[0];
5959
if (requestedLanguageModel) {
6060
const matchingModel = configuredModels.find(
61-
(m) => getLanguageModelKey(m) === getLanguageModelKey(requestedLanguageModel)
61+
(m) => m.provider === requestedLanguageModel.provider &&
62+
m.model === requestedLanguageModel.model &&
63+
(requestedLanguageModel.displayName === undefined ||
64+
m.displayName === requestedLanguageModel.displayName)
6265
);
6366
if (!matchingModel) {
6467
return {

0 commit comments

Comments
 (0)