This commit is contained in:
Q.A.zh 2025-04-19 21:29:19 +08:00 committed by GitHub
commit adb0dd3159
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 10 deletions

View File

@ -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,14 +117,14 @@ 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,
[
ServiceProvider.OpenAI,
ServiceProvider.Azure,
jsonBody?.model as string, // support provider-unspecified model
"custom" as string, // support provider-unspecified model
],
)
) {

View File

@ -66,8 +66,8 @@ export function collectModelTable(
// default models
models.forEach((m) => {
// using <modelName>@<providerId> as fullName
modelTable[`${m.name}@${m?.provider?.id}`] = {
// using <modelName>@<providerType> as fullName
modelTable[`${m.name}@${m?.provider?.providerType}`] = {
...m,
displayName: m.name, // 'provider' is copied over if it exists
};
@ -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?.id}`),
sorted: CustomSeq.next(
`${customModelName}@${provider?.providerType}`,
),
};
}
}

View File

@ -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,