From 306ed9f1e338bf5dcaa5a3dbf50307f7b5e287c6 Mon Sep 17 00:00:00 2001 From: Dallin Romney Date: Thu, 25 Sep 2025 14:12:17 -0700 Subject: [PATCH] fix: llm-info preferred provider (#7962) * fix: llm-info preferred provider * fix: cubic feedback --- core/llm/index.ts | 2 +- packages/llm-info/src/index.ts | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/llm/index.ts b/core/llm/index.ts index a634fc5d6..ecb43bfca 100644 --- a/core/llm/index.ts +++ b/core/llm/index.ts @@ -213,7 +213,7 @@ export abstract class BaseLLM implements ILLM { this.providerName === "continue-proxy" ? this.model?.split("/").pop() || this.model : this.model; - const llmInfo = findLlmInfo(modelSearchString); + const llmInfo = findLlmInfo(modelSearchString, this.underlyingProviderName); const templateType = options.template ?? autodetectTemplateType(options.model); diff --git a/packages/llm-info/src/index.ts b/packages/llm-info/src/index.ts index 35b88abf6..c1aaa6643 100644 --- a/packages/llm-info/src/index.ts +++ b/packages/llm-info/src/index.ts @@ -10,7 +10,7 @@ import { OpenAi } from "./providers/openai.js"; import { Vllm } from "./providers/vllm.js"; import { Voyage } from "./providers/voyage.js"; import { xAI } from "./providers/xAI.js"; -import { LlmInfo, ModelProvider, UseCase } from "./types.js"; +import { LlmInfoWithProvider, ModelProvider, UseCase } from "./types.js"; export const allModelProviders: ModelProvider[] = [ OpenAi, @@ -27,16 +27,32 @@ export const allModelProviders: ModelProvider[] = [ xAI, ]; -export const allLlms: LlmInfo[] = allModelProviders.flatMap((provider) => - provider.models.map((model) => ({ ...model, provider: provider.id })), +export const allLlms: LlmInfoWithProvider[] = allModelProviders.flatMap( + (provider) => + provider.models.map((model) => ({ ...model, provider: provider.id })), ); -export function findLlmInfo(model: string): LlmInfo | undefined { +export function findLlmInfo( + model: string, + preferProviderId?: string, +): LlmInfoWithProvider | undefined { + if (preferProviderId) { + const provider = allModelProviders.find((p) => p.id === preferProviderId); + const info = provider?.models.find((llm) => + llm.regex ? llm.regex.test(model) : llm.model === model, + ); + if (info) { + return { + ...info, + provider: preferProviderId, + }; + } + } return allLlms.find((llm) => llm.regex ? llm.regex.test(model) : llm.model === model, ); } -export function getAllRecommendedFor(useCase: UseCase): LlmInfo[] { +export function getAllRecommendedFor(useCase: UseCase): LlmInfoWithProvider[] { return allLlms.filter((llm) => llm.recommendedFor?.includes(useCase)); }