Squashed commit of the following:

commit e6b72ac1ff
Author: Yifei Zhang <yidadaa@qq.com>
Date:   Fri Nov 10 02:59:47 2023 +0800

    Update README.md

commit 8032e6d68d
Author: Yifei Zhang <yidadaa@qq.com>
Date:   Fri Nov 10 02:59:30 2023 +0800

    Update README.md

commit c7e0a6f37f
Author: Yidadaa <yidadaa@qq.com>
Date:   Fri Nov 10 02:57:40 2023 +0800

    doc: update azure env vars

commit 1141cd2e6e
Merge: fd2f441 c9dd953
Author: Yifei Zhang <yidadaa@qq.com>
Date:   Fri Nov 10 02:55:12 2023 +0800

    Merge pull request #3206 from Yidadaa/azure

commit c9dd953817
Author: Yidadaa <yidadaa@qq.com>
Date:   Fri Nov 10 02:50:50 2023 +0800

    fixup

commit b7ffca031e
Author: Yidadaa <yidadaa@qq.com>
Date:   Fri Nov 10 02:43:30 2023 +0800

    feat: close #935 add azure support

commit fd2f441e02
Author: Yifei Zhang <yidadaa@qq.com>
Date:   Thu Nov 9 20:45:25 2023 +0800

    feat: wont send max_tokens
This commit is contained in:
DirkSchlossmacher
2023-11-10 03:06:59 +01:00
parent 459d86b90b
commit 6e7cede1a0
34 changed files with 552 additions and 322 deletions

View File

@@ -28,7 +28,7 @@ export function auth(req: NextRequest) {
const authToken = req.headers.get("Authorization") ?? "";
// check if it is openai api key or user token
const { accessCode, apiKey: token } = parseApiKey(authToken);
const { accessCode, apiKey } = parseApiKey(authToken);
const hashedCode = md5.hash(accessCode ?? "").trim();
@@ -39,7 +39,7 @@ export function auth(req: NextRequest) {
console.log("[User IP] ", getIP(req));
console.log("[Time] ", new Date().toLocaleString());
if (serverConfig.needCode && !serverConfig.codes.has(hashedCode) && !token) {
if (serverConfig.needCode && !serverConfig.codes.has(hashedCode) && !apiKey) {
return {
error: true,
msg: !accessCode ? "empty access code" : "wrong access code",
@@ -47,11 +47,17 @@ export function auth(req: NextRequest) {
}
// if user does not provide an api key, inject system api key
if (!token) {
const apiKey = serverConfig.apiKey;
if (apiKey) {
if (!apiKey) {
const serverApiKey = serverConfig.isAzure
? serverConfig.azureApiKey
: serverConfig.apiKey;
if (serverApiKey) {
console.log("[Auth] use system api key");
req.headers.set("Authorization", `Bearer ${apiKey}`);
req.headers.set(
"Authorization",
`${serverConfig.isAzure ? "" : "Bearer "}${serverApiKey}`,
);
} else {
console.log("[Auth] admin did not provide an api key");
}

View File

@@ -1,19 +1,24 @@
import { NextRequest, NextResponse } from "next/server";
import { getServerSideConfig } from "../config/server";
import { DEFAULT_MODELS, OPENAI_BASE_URL } from "../constant";
import { collectModelTable, collectModels } from "../utils/model";
import { collectModelTable } from "../utils/model";
import { makeAzurePath } from "../azure";
const serverConfig = getServerSideConfig();
export async function requestOpenai(req: NextRequest) {
const controller = new AbortController();
const authValue = req.headers.get("Authorization") ?? "";
const openaiPath = `${req.nextUrl.pathname}${req.nextUrl.search}`.replaceAll(
const authHeaderName = serverConfig.isAzure ? "api-key" : "Authorization";
let path = `${req.nextUrl.pathname}${req.nextUrl.search}`.replaceAll(
"/api/openai/",
"",
);
let baseUrl = serverConfig.baseUrl ?? OPENAI_BASE_URL;
let baseUrl =
serverConfig.azureUrl ?? serverConfig.baseUrl ?? OPENAI_BASE_URL;
if (!baseUrl.startsWith("http")) {
baseUrl = `https://${baseUrl}`;
@@ -23,7 +28,7 @@ export async function requestOpenai(req: NextRequest) {
baseUrl = baseUrl.slice(0, -1);
}
console.log("[Proxy] ", openaiPath);
console.log("[Proxy] ", path);
console.log("[Base Url]", baseUrl);
console.log("[Org ID]", serverConfig.openaiOrgId);
@@ -34,14 +39,24 @@ export async function requestOpenai(req: NextRequest) {
10 * 60 * 1000,
);
const fetchUrl = `${baseUrl}/${openaiPath}`;
if (serverConfig.isAzure) {
if (!serverConfig.azureApiVersion) {
return NextResponse.json({
error: true,
message: `missing AZURE_API_VERSION in server env vars`,
});
}
path = makeAzurePath(path, serverConfig.azureApiVersion);
}
const fetchUrl = `${baseUrl}/${path}`;
const fetchOptions: RequestInit = {
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-store",
Authorization: authValue,
...(process.env.OPENAI_ORG_ID && {
"OpenAI-Organization": process.env.OPENAI_ORG_ID,
[authHeaderName]: authValue,
...(serverConfig.openaiOrgId && {
"OpenAI-Organization": serverConfig.openaiOrgId,
}),
},
method: req.method,