Merge branch 'main' b0c6f6d 20230616 into pro

This commit is contained in:
2023-06-22 13:20:21 +08:00
31 changed files with 794 additions and 735 deletions
+12 -3
View File
@@ -1,9 +1,10 @@
import { create } from "zustand";
import { persist } from "zustand/middleware";
import { StoreKey } from "../constant";
import { DEFAULT_API_HOST, StoreKey } from "../constant";
import { getHeaders } from "../client/api";
import { BOT_HELLO } from "./chat";
import { ALL_MODELS } from "./config";
import { getClientConfig } from "../config/client";
export interface AccessControlStore {
accessCode: string;
@@ -15,6 +16,7 @@ export interface AccessControlStore {
updateToken: (_: string) => void;
updateCode: (_: string) => void;
updateOpenAiUrl: (_: string) => void;
enabledAccessControl: () => boolean;
isAuthorized: () => boolean;
fetch: () => void;
@@ -22,6 +24,10 @@ export interface AccessControlStore {
let fetchState = 0; // 0 not fetch, 1 fetching, 2 done
const DEFAULT_OPENAI_URL =
getClientConfig()?.buildMode === "export" ? DEFAULT_API_HOST : "/api/openai/";
console.log("[API] default openai url", DEFAULT_OPENAI_URL);
export const useAccessStore = create<AccessControlStore>()(
persist(
(set, get) => ({
@@ -29,7 +35,7 @@ export const useAccessStore = create<AccessControlStore>()(
accessCode: "",
needCode: true,
hideUserApiKey: false,
openaiUrl: "/api/openai/",
openaiUrl: DEFAULT_OPENAI_URL,
enabledAccessControl() {
get().fetch();
@@ -42,6 +48,9 @@ export const useAccessStore = create<AccessControlStore>()(
updateToken(token: string) {
set(() => ({ token }));
},
updateOpenAiUrl(url: string) {
set(() => ({ openaiUrl: url }));
},
isAuthorized() {
get().fetch();
@@ -51,7 +60,7 @@ export const useAccessStore = create<AccessControlStore>()(
);
},
fetch() {
if (fetchState > 0) return;
if (fetchState > 0 || getClientConfig()?.buildMode === "export") return;
fetchState = 1;
fetch("/api/config", {
method: "post",
+10 -7
View File
@@ -11,6 +11,7 @@ import { StoreKey } from "../constant";
import { api, RequestMessage } from "../client/api";
import { ChatControllerPool } from "../client/controller";
import { prettyObject } from "../utils/format";
import { estimateTokenLength } from "../utils/token";
export type ChatMessage = RequestMessage & {
date: string;
@@ -102,7 +103,7 @@ interface ChatStore {
}
function countMessages(msgs: ChatMessage[]) {
return msgs.reduce((pre, cur) => pre + cur.content.length, 0);
return msgs.reduce((pre, cur) => pre + estimateTokenLength(cur.content), 0);
}
export const useChatStore = create<ChatStore>()(
@@ -226,6 +227,7 @@ export const useChatStore = create<ChatStore>()(
onNewMessage(message) {
get().updateCurrentSession((session) => {
session.messages = session.messages.concat();
session.lastUpdate = Date.now();
});
get().updateStat(message);
@@ -272,8 +274,7 @@ export const useChatStore = create<ChatStore>()(
// save user's and bot's message
get().updateCurrentSession((session) => {
session.messages.push(userMessage);
session.messages.push(botMessage);
session.messages = session.messages.concat([userMessage, botMessage]);
});
// make request
@@ -286,7 +287,9 @@ export const useChatStore = create<ChatStore>()(
if (message) {
botMessage.content = message;
}
set(() => ({}));
get().updateCurrentSession((session) => {
session.messages = session.messages.concat();
});
},
onFinish(message) {
botMessage.streaming = false;
@@ -298,7 +301,6 @@ export const useChatStore = create<ChatStore>()(
sessionIndex,
botMessage.id ?? messageIndex,
);
set(() => ({}));
},
onError(error) {
const isAborted = error.message.includes("aborted");
@@ -311,8 +313,9 @@ export const useChatStore = create<ChatStore>()(
botMessage.streaming = false;
userMessage.isError = !isAborted;
botMessage.isError = !isAborted;
set(() => ({}));
get().updateCurrentSession((session) => {
session.messages = session.messages.concat();
});
ChatControllerPool.remove(
sessionIndex,
botMessage.id ?? messageIndex,
+23 -2
View File
@@ -1,5 +1,6 @@
import { create } from "zustand";
import { persist } from "zustand/middleware";
import { getClientConfig } from "../config/client";
import { StoreKey } from "../constant";
export enum SubmitKey {
@@ -22,7 +23,7 @@ export const DEFAULT_CONFIG = {
avatar: "1f603",
fontSize: 14,
theme: Theme.Auto as Theme,
tightBorder: false,
tightBorder: !!getClientConfig()?.isApp,
sendPreviewBubble: true,
sidebarWidth: 300,
@@ -61,6 +62,10 @@ export const ALL_MODELS = [
name: "gpt-4-0314",
available: ENABLE_GPT4,
},
{
name: "gpt-4-0613",
available: ENABLE_GPT4,
},
{
name: "gpt-4-32k",
available: ENABLE_GPT4,
@@ -69,6 +74,10 @@ export const ALL_MODELS = [
name: "gpt-4-32k-0314",
available: ENABLE_GPT4,
},
{
name: "gpt-4-32k-0613",
available: ENABLE_GPT4,
},
{
name: "gpt-3.5-turbo",
available: true,
@@ -77,6 +86,18 @@ export const ALL_MODELS = [
name: "gpt-3.5-turbo-0301",
available: true,
},
{
name: "gpt-3.5-turbo-0613",
available: true,
},
{
name: "gpt-3.5-turbo-16k",
available: true,
},
{
name: "gpt-3.5-turbo-16k-0613",
available: true,
},
{
name: "qwen-v1", // 通义千问
available: false,
@@ -117,7 +138,7 @@ export function limitNumber(
export function limitModel(name: string) {
return ALL_MODELS.some((m) => m.name === name && m.available)
? name
: ALL_MODELS[4].name;
: "gpt-3.5-turbo";
}
export const ModalConfigValidator = {
+2 -16
View File
@@ -3,7 +3,7 @@ export {};
// import { persist } from "zustand/middleware";
// import { FETCH_COMMIT_URL, StoreKey } from "../constant";
// import { api } from "../client/api";
// import { showToast } from "../components/ui-lib";
// import { getClientConfig } from "../config/client";
// export interface UpdateStore {
// lastUpdate: number;
@@ -18,20 +18,6 @@ export {};
// updateUsage: (force?: boolean) => Promise<void>;
// }
// function queryMeta(key: string, defaultValue?: string): string {
// let ret: string;
// if (document) {
// const meta = document.head.querySelector(
// `meta[name='${key}']`,
// ) as HTMLMetaElement;
// ret = meta?.content ?? "";
// } else {
// ret = defaultValue ?? "";
// }
// return ret;
// }
// const ONE_MINUTE = 60 * 1000;
// export const useUpdateStore = create<UpdateStore>()(
@@ -45,7 +31,7 @@ export {};
// version: "unknown",
// async getLatestVersion(force = false) {
// set(() => ({ version: queryMeta("version") ?? "unknown" }));
// set(() => ({ version: getClientConfig()?.commitId ?? "unknown" }));
// const overTenMins = Date.now() - get().lastUpdate > 10 * ONE_MINUTE;
// if (!force && !overTenMins) return;