+
ME
)}
@@ -196,6 +212,7 @@ function ChatSession(props: { session: ChatSessionProps }) {
}
const ChatPage: React.FC = () => {
+ const { models } = useContext(GlobalConfigContext);
const chatStore = useChatStore();
const configStore = useConfigStore();
const { sessions } = chatStore;
@@ -210,7 +227,7 @@ const ChatPage: React.FC = () => {
return null;
}
// If this session belongs to a non-exist model, remove this session
- if (configStore.mode === PARALLEL_MODE && !ALL_MODELS.find((model) => model.model === session.name)) {
+ if (configStore.mode === PARALLEL_MODE && !models[session.name]) {
chatStore.removeSession(session.name);
return null;
}
diff --git a/openaoe/frontend/src/pages/chat/components/model-list/model-list.tsx b/openaoe/frontend/src/pages/chat/components/model-list/model-list.tsx
index 09a69ec..3fea9c8 100644
--- a/openaoe/frontend/src/pages/chat/components/model-list/model-list.tsx
+++ b/openaoe/frontend/src/pages/chat/components/model-list/model-list.tsx
@@ -1,10 +1,10 @@
import {
- NON_BOT, PARALLEL_MODE, PARALLEL_MODEL_MAX, SERIAL_MODE
+ PARALLEL_MODE, PARALLEL_MODEL_MAX, SERIAL_MODE
} from '@constants/models.ts';
-import { ALL_MODELS } from '@config/model-config.ts';
-import { useRef, useState } from 'react';
+import { useContext, useRef, useState } from 'react';
import { getNeedEventCallback } from '@utils/utils.ts';
import { message } from 'sea-lion-ui';
+import { GlobalConfigContext } from '@components/global-config/global-config-context.tsx';
import styles from './model-list.module.less';
import { BotState, useBotStore } from '@/store/bot.ts';
import { useChatStore } from '@/store/chat.ts';
@@ -90,7 +90,7 @@ function ModelAvatar(props: {
onFocus={() => setShowName(true)}
>

@@ -105,15 +105,17 @@ function ModelAvatar(props: {
}
const ModelList = () => {
+ const { models } = useContext(GlobalConfigContext);
return (
- {ALL_MODELS
- .filter((model) => (!NON_BOT.includes(model.provider)))
- .map((model) => {
- return (
-
- );
- })}
+ {models && Object.keys(models).map((modelName) => {
+ return (
+
+ );
+ })}
);
};
diff --git a/openaoe/frontend/src/pages/chat/components/prompt-input/prompt-input.tsx b/openaoe/frontend/src/pages/chat/components/prompt-input/prompt-input.tsx
index 31d390c..48fcf54 100644
--- a/openaoe/frontend/src/pages/chat/components/prompt-input/prompt-input.tsx
+++ b/openaoe/frontend/src/pages/chat/components/prompt-input/prompt-input.tsx
@@ -1,9 +1,9 @@
import {
PARALLEL_MODE, SERIAL_MODE, SERIAL_SESSION
} from '@constants/models.ts';
-import { ALL_MODELS } from '@config/model-config.ts';
import { message } from 'sea-lion-ui';
import React, {
+ useContext,
useEffect, useLayoutEffect, useState
} from 'react';
import {
@@ -13,6 +13,7 @@ import { Configs, ConfigState } from '@constants/configs.ts';
import classNames from 'classnames';
import send from '@assets/imgs/send.png';
import sanitizeHtml from 'sanitize-html';
+import { GlobalConfigContext } from '@components/global-config/global-config-context.tsx';
import { useChatStore } from '@/store/chat.ts';
import { useBotStore } from '@/store/bot.ts';
import { useConfigStore } from '@/store/config.ts';
@@ -24,6 +25,7 @@ const BOT_PLACEHOLDER = {
};
const PromptInput = () => {
+ const { models } = useContext(GlobalConfigContext);
const chatStore = useChatStore();
const botStore = useBotStore();
const configStore = useConfigStore();
@@ -105,11 +107,11 @@ const PromptInput = () => {
setCurrPrompt('');
handleContentChange('');
if (configStore.mode === SERIAL_MODE) {
- const provider = ALL_MODELS.find((model) => model.model === botStore.currentBot).provider;
+ const provider = models[botStore.currentBot]?.provider;
chatStore.onUserInput(currPrompt, provider, botStore.currentBot, SERIAL_SESSION);
} else {
botStore.chosenBotNames.forEach((botName) => {
- const provider = ALL_MODELS.find((model) => model.model === botName).provider;
+ const provider = models[botName]?.provider;
chatStore.onUserInput(currPrompt, provider, botName, botName);
});
}
diff --git a/openaoe/frontend/src/services/fetch.ts b/openaoe/frontend/src/services/fetch.ts
index 6b51d2b..0a52245 100644
--- a/openaoe/frontend/src/services/fetch.ts
+++ b/openaoe/frontend/src/services/fetch.ts
@@ -1,5 +1,5 @@
import API from '@config/api-config';
-import { DEFAULT_BOT } from '@constants/models';
+import { DEFAULT_PROVIDER } from '@constants/models';
export const getHeaders = () => {
return {
@@ -7,7 +7,7 @@ export const getHeaders = () => {
};
};
export const getUrl = (provider) => {
- return API.get(provider)?.url || API.get(DEFAULT_BOT).url;
+ return API.get(provider)?.url || API.get(DEFAULT_PROVIDER).url;
};
/** Build your own api payload here
* @param provider service provider, each provider has its own payload format and may have more than one model
@@ -16,7 +16,7 @@ export const getUrl = (provider) => {
* @param messages
*/
export const getPayload = (provider: string, model: string, prompt: string, messages: { text: string; sender_type: string; }[]) => {
- const payload = { ...API.get(provider) || API.get(DEFAULT_BOT) };
+ const payload = { ...API.get(provider) || API.get(DEFAULT_PROVIDER) };
delete payload.url;
payload.model = model;
if (['openai', 'internlm', 'gpt-4'].includes(provider)) {
diff --git a/openaoe/frontend/src/store/bot.ts b/openaoe/frontend/src/store/bot.ts
index 52c442b..adc0d15 100644
--- a/openaoe/frontend/src/store/bot.ts
+++ b/openaoe/frontend/src/store/bot.ts
@@ -4,10 +4,12 @@ import { DEFAULT_BOT } from '@constants/models.ts';
export interface BotState {
provider: string;
- avatar: string;
model: string;
- background: string;
- border?: string;
+ webui: {
+ avatar: string;
+ background: string;
+ border?: string;
+ },
description?: string;
url?: string;
}
diff --git a/openaoe/frontend/src/store/chat.ts b/openaoe/frontend/src/store/chat.ts
index 9e6510d..3322644 100644
--- a/openaoe/frontend/src/store/chat.ts
+++ b/openaoe/frontend/src/store/chat.ts
@@ -5,7 +5,6 @@ import { scrollToBottom } from '@utils/utils.ts';
import { getHeaders, getPayload, getUrl } from '@services/fetch.ts';
import { fetchBotAnswer } from '@services/home.ts';
import { DEFAULT_BOT, SERIAL_SESSION, STREAM_BOT } from '@constants/models.ts';
-import { ALL_MODELS } from '@config/model-config.ts';
export interface ChatMessage {
text: string;
@@ -69,7 +68,7 @@ interface ChatStore {
lastBotMessage: (sessionName: string) => ChatMessage;
lastUserMessage: (sessionName: string) => ChatMessage;
closeController: (sessionName: string) => void;
- retry: (sessionName: string, model?: string) => void;
+ retry: (sessionName: string, provider: string, model: string,) => void;
clearAllData: () => void;
}
@@ -127,9 +126,7 @@ export const useChatStore = create
()(
set(() => ({ sessions: get().sessions }));
}
},
- retry(bot: '', model: '') {
- const modelName = model || get().lastBotMessage(bot).model || '';
- const provider = ALL_MODELS.find((bot) => bot.model === modelName).provider;
+ retry(bot: '', provider: '', model: '') {
const text = get().lastUserMessage(bot).text;
if ((get().lastMessage(bot).id === get().lastBotMessage(bot).id) && get().getSession(bot).clearContextIndex !== get().getSession(bot).messages.length) {
// If the last message is a reply from the bot and the context is not cleared yet, replace the last two messages,
@@ -137,7 +134,7 @@ export const useChatStore = create()(
get().deleteMessage(bot, get().getSession(bot).messages.length - 1);
get().deleteMessage(bot, get().getSession(bot).messages.length - 1);
}
- get().onUserInput(text, provider, modelName, bot);
+ get().onUserInput(text, provider, model, bot);
},
async onUserInput(text, provider, model, sessionName) {
const sessionIndex = get().sessions.findIndex((session) => session.name === sessionName);
@@ -279,7 +276,7 @@ export const useChatStore = create()(
}
},
onerror(e) {
- console.log('[BOT] request error: ', e);
+ console.log(`[BOT] request error from ${model}: \n`, e);
botMessage.stream = false;
get().updateMessage(sessionIndex, messageIndex, (message) => {
message.stream = botMessage.stream;
diff --git a/openaoe/main.py b/openaoe/main.py
index 71d2b10..59f4319 100644
--- a/openaoe/main.py
+++ b/openaoe/main.py
@@ -16,6 +16,7 @@
from openaoe.backend.util.log import log
from openaoe.backend.util.str_util import safe_join
+
logger = log(__name__)
# define global variable
API_VER = 'v1'
@@ -26,11 +27,16 @@
path = img_out_path()
# init configuration content
-init_config()
+biz_config = init_config()
app = FastAPI()
+@app.get("/config/json")
+async def get_config_json():
+ return biz_config.json
+
+
@app.get("/", response_class=HTMLResponse)
@app.get("/home", response_class=HTMLResponse)
async def server():