123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- import { create } from "zustand";
- import { persist } from "zustand/middleware";
- import { StoreKey } from "../constant";
- export enum SubmitKey {
- Enter = "Enter",
- CtrlEnter = "Ctrl + Enter",
- ShiftEnter = "Shift + Enter",
- AltEnter = "Alt + Enter",
- MetaEnter = "Meta + Enter",
- }
- export enum Theme {
- Auto = "auto",
- Dark = "dark",
- Light = "light",
- }
- export const DEFAULT_CONFIG = {
- submitKey: SubmitKey.CtrlEnter as SubmitKey,
- avatar: "1f603",
- fontSize: 14,
- theme: Theme.Auto as Theme,
- tightBorder: false,
- sendPreviewBubble: true,
- sidebarWidth: 300,
- disablePromptHint: false,
- dontShowMaskSplashScreen: false, // dont show splash screen when create chat
- modelConfig: {
- model: "gpt-3.5-turbo" as ModelType,
- temperature: 0.5,
- max_tokens: 2000,
- presence_penalty: 0,
- sendMemory: true,
- historyMessageCount: 4,
- compressMessageLengthThreshold: 1000,
- },
- };
- export type ChatConfig = typeof DEFAULT_CONFIG;
- export type ChatConfigStore = ChatConfig & {
- reset: () => void;
- update: (updater: (config: ChatConfig) => void) => void;
- };
- export type ModelConfig = ChatConfig["modelConfig"];
- const ENABLE_GPT4 = true;
- export const ALL_MODELS = [
- {
- name: "gpt-4",
- available: ENABLE_GPT4,
- },
- {
- name: "gpt-4-0314",
- available: ENABLE_GPT4,
- },
- {
- name: "gpt-4-32k",
- available: ENABLE_GPT4,
- },
- {
- name: "gpt-4-32k-0314",
- available: ENABLE_GPT4,
- },
- {
- name: "gpt-3.5-turbo",
- available: true,
- },
- {
- name: "gpt-3.5-turbo-0301",
- available: true,
- },
- {
- name: "qwen-v1", // 通义千问
- available: false,
- },
- {
- name: "ernie", // 文心一言
- available: false,
- },
- {
- name: "spark", // 讯飞星火
- available: false,
- },
- {
- name: "llama", // llama
- available: false,
- },
- {
- name: "chatglm", // chatglm-6b
- available: false,
- },
- ] as const;
- export type ModelType = (typeof ALL_MODELS)[number]["name"];
- export function limitNumber(
- x: number,
- min: number,
- max: number,
- defaultValue: number,
- ) {
- if (typeof x !== "number" || isNaN(x)) {
- return defaultValue;
- }
- return Math.min(max, Math.max(min, x));
- }
- export function limitModel(name: string) {
- return ALL_MODELS.some((m) => m.name === name && m.available)
- ? name
- : ALL_MODELS[4].name;
- }
- export const ModalConfigValidator = {
- model(x: string) {
- return limitModel(x) as ModelType;
- },
- max_tokens(x: number) {
- return limitNumber(x, 0, 32000, 2000);
- },
- presence_penalty(x: number) {
- return limitNumber(x, -2, 2, 0);
- },
- temperature(x: number) {
- return limitNumber(x, 0, 1, 1);
- },
- };
- export const useAppConfig = create<ChatConfigStore>()(
- persist(
- (set, get) => ({
- ...DEFAULT_CONFIG,
- reset() {
- set(() => ({ ...DEFAULT_CONFIG }));
- },
- update(updater) {
- const config = { ...get() };
- updater(config);
- set(() => config);
- },
- }),
- {
- name: StoreKey.Config,
- version: 2,
- migrate(persistedState, version) {
- if (version === 2) return persistedState as any;
- const state = persistedState as ChatConfig;
- state.modelConfig.sendMemory = true;
- state.modelConfig.historyMessageCount = 4;
- state.modelConfig.compressMessageLengthThreshold = 1000;
- state.dontShowMaskSplashScreen = false;
- return state;
- },
- },
- ),
- );
|