From 24ff78e1c57754ab8785000ec72fab0a264b7e15 Mon Sep 17 00:00:00 2001 From: "Q.A.zh" <40236765+QAbot-zh@users.noreply.github.com> Date: Sun, 29 Dec 2024 06:45:58 +0000 Subject: [PATCH 1/3] fix custom models setting --- app/api/common.ts | 2 +- app/utils/model.ts | 6 +++--- test/model-available.test.ts | 16 ++++++++++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/api/common.ts b/app/api/common.ts index b7e41fa26..dbbebe744 100644 --- a/app/api/common.ts +++ b/app/api/common.ts @@ -124,7 +124,7 @@ export async function requestOpenai(req: NextRequest) { [ ServiceProvider.OpenAI, ServiceProvider.Azure, - jsonBody?.model as string, // support provider-unspecified model + "custom" as string, // support provider-unspecified model ], ) ) { diff --git a/app/utils/model.ts b/app/utils/model.ts index a1a38a2f8..83bc51f02 100644 --- a/app/utils/model.ts +++ b/app/utils/model.ts @@ -66,8 +66,8 @@ export function collectModelTable( // default models models.forEach((m) => { - // using @ as fullName - modelTable[`${m.name}@${m?.provider?.id}`] = { + // using @ as fullName + modelTable[`${m.name}@${m?.provider?.providerType}`] = { ...m, displayName: m.name, // 'provider' is copied over if it exists }; @@ -126,7 +126,7 @@ export function collectModelTable( displayName: displayName || customModelName, available, provider, // Use optional chaining - sorted: CustomSeq.next(`${customModelName}@${provider?.id}`), + sorted: CustomSeq.next(`${customModelName}@${provider?.providerType}`), }; } } diff --git a/test/model-available.test.ts b/test/model-available.test.ts index 5c9fa9977..c338faa86 100644 --- a/test/model-available.test.ts +++ b/test/model-available.test.ts @@ -53,7 +53,7 @@ describe("isModelNotavailableInServer", () => { expect(result).toBe(true); }); - // FIXME: 这个测试用例有问题,需要修复 + // FIXME: 这个测试用例有问题,需要修复 ??? // test("support passing multiple providers, model available on one of the providers will return false", () => { // const customModels = "-all,gpt-4@google"; // const modelName = "gpt-4"; @@ -69,7 +69,19 @@ describe("isModelNotavailableInServer", () => { test("test custom model without setting provider", () => { const customModels = "-all,mistral-large"; const modelName = "mistral-large"; - const providerNames = modelName; + const providerNames = "custom"; + const result = isModelNotavailableInServer( + customModels, + modelName, + providerNames, + ); + expect(result).toBe(false); + }); + + test("test custom model with non-standard provider", () => { + const customModels = "-all,deepseek-chat@DeepSeek"; + const modelName = "deepseek-chat"; + const providerNames = "custom"; const result = isModelNotavailableInServer( customModels, modelName, From da9963d4eee9be855279d427ba3b751472bbea23 Mon Sep 17 00:00:00 2001 From: "Q.A.zh" <40236765+QAbot-zh@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:10:37 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BB=85=E5=AF=B9chat=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=A8=A1=E5=9E=8B=E5=8F=AF=E7=94=A8=E6=80=A7?= =?UTF-8?q?=E6=A3=80=E9=AA=8C=EF=BC=8C=E9=81=BF=E5=85=8Dtts=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=8F=97=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/common.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/api/common.ts b/app/api/common.ts index dbbebe744..fe2f24a76 100644 --- a/app/api/common.ts +++ b/app/api/common.ts @@ -1,6 +1,6 @@ import { NextRequest, NextResponse } from "next/server"; import { getServerSideConfig } from "../config/server"; -import { OPENAI_BASE_URL, ServiceProvider } from "../constant"; +import { OPENAI_BASE_URL, ServiceProvider, OpenaiPath } from "../constant"; import { cloudflareAIGatewayUrl } from "../utils/cloudflare"; import { getModelProvider, isModelNotavailableInServer } from "../utils/model"; @@ -26,8 +26,8 @@ export async function requestOpenai(req: NextRequest) { authValue = req.headers.get("Authorization") ?? ""; authHeaderName = "Authorization"; } - let path = `${req.nextUrl.pathname}`.replaceAll("/api/openai/", ""); + let isChatRequest = path.includes(OpenaiPath.ChatPath); let baseUrl = (isAzure ? serverConfig.azureUrl : serverConfig.baseUrl) || OPENAI_BASE_URL; @@ -117,7 +117,7 @@ export async function requestOpenai(req: NextRequest) { const jsonBody = JSON.parse(clonedBody) as { model?: string }; // not undefined and is false - if ( + if ( isChatRequest && isModelNotavailableInServer( serverConfig.customModels, jsonBody?.model as string, From ecc65fa7753db6f4d0da5d82a0b4c55687541872 Mon Sep 17 00:00:00 2001 From: "Q.A.zh" <40236765+QAbot-zh@users.noreply.github.com> Date: Mon, 30 Dec 2024 02:31:25 +0000 Subject: [PATCH 3/3] fixbug --- app/utils/model.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/utils/model.ts b/app/utils/model.ts index 83bc51f02..480120b76 100644 --- a/app/utils/model.ts +++ b/app/utils/model.ts @@ -121,12 +121,14 @@ export function collectModelTable( if (displayName && provider.providerName == "ByteDance") { [customModelName, displayName] = [displayName, customModelName]; } - modelTable[`${customModelName}@${provider?.id}`] = { + modelTable[`${customModelName}@${provider?.providerType}`] = { name: customModelName, displayName: displayName || customModelName, available, provider, // Use optional chaining - sorted: CustomSeq.next(`${customModelName}@${provider?.providerType}`), + sorted: CustomSeq.next( + `${customModelName}@${provider?.providerType}`, + ), }; } }