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

@@ -1,8 +1,10 @@
import {
ApiPath,
DEFAULT_API_HOST,
DEFAULT_MODELS,
OpenaiPath,
REQUEST_TIMEOUT_MS,
ServiceProvider,
} from "@/app/constant";
import { useAccessStore, useAppConfig, useChatStore } from "@/app/store";
@@ -14,6 +16,7 @@ import {
} from "@fortaine/fetch-event-source";
import { prettyObject } from "@/app/utils/format";
import { getClientConfig } from "@/app/config/client";
import { makeAzurePath } from "@/app/azure";
export interface OpenAIListModelResponse {
object: string;
@@ -28,20 +31,35 @@ export class ChatGPTApi implements LLMApi {
private disableListModels = true;
path(path: string): string {
let openaiUrl = useAccessStore.getState().openaiUrl;
const apiPath = "/api/openai";
const accessStore = useAccessStore.getState();
if (openaiUrl.length === 0) {
const isAzure = accessStore.provider === ServiceProvider.Azure;
if (isAzure && !accessStore.isValidAzure()) {
throw Error(
"incomplete azure config, please check it in your settings page",
);
}
let baseUrl = isAzure ? accessStore.azureUrl : accessStore.openaiUrl;
if (baseUrl.length === 0) {
const isApp = !!getClientConfig()?.isApp;
openaiUrl = isApp ? DEFAULT_API_HOST : apiPath;
baseUrl = isApp ? DEFAULT_API_HOST : ApiPath.OpenAI;
}
if (openaiUrl.endsWith("/")) {
openaiUrl = openaiUrl.slice(0, openaiUrl.length - 1);
if (baseUrl.endsWith("/")) {
baseUrl = baseUrl.slice(0, baseUrl.length - 1);
}
if (!openaiUrl.startsWith("http") && !openaiUrl.startsWith(apiPath)) {
openaiUrl = "https://" + openaiUrl;
if (!baseUrl.startsWith("http") && !baseUrl.startsWith(ApiPath.OpenAI)) {
baseUrl = "https://" + baseUrl;
}
return [openaiUrl, path].join("/");
if (isAzure) {
path = makeAzurePath(path, accessStore.azureApiVersion);
}
return [baseUrl, path].join("/");
}
extractMessage(res: any) {
@@ -70,7 +88,8 @@ export class ChatGPTApi implements LLMApi {
presence_penalty: modelConfig.presence_penalty,
frequency_penalty: modelConfig.frequency_penalty,
top_p: modelConfig.top_p,
max_tokens: Math.max(modelConfig.max_tokens, 1024),
// max_tokens: Math.max(modelConfig.max_tokens, 1024),
// Please do not ask me why not send max_tokens, no reason, this param is just shit, I dont want to explain anymore.
};
console.log("[Request] openai payload: ", requestPayload);
@@ -155,14 +174,20 @@ export class ChatGPTApi implements LLMApi {
}
const text = msg.data;
try {
const json = JSON.parse(text);
const delta = json.choices[0].delta.content;
const json = JSON.parse(text) as {
choices: Array<{
delta: {
content: string;
};
}>;
};
const delta = json.choices[0]?.delta?.content;
if (delta) {
responseText += delta;
options.onUpdate?.(responseText, delta);
}
} catch (e) {
console.error("[Request] parse error", text, msg);
console.error("[Request] parse error", text);
}
},
onclose() {