|
|
@@ -88,6 +88,7 @@ import {
|
|
|
Path,
|
|
|
REQUEST_TIMEOUT_MS,
|
|
|
UNFINISHED_INPUT,
|
|
|
+ ServiceProvider,
|
|
|
} from "../constant";
|
|
|
import { Avatar } from "./emoji";
|
|
|
import { ContextPrompts, MaskAvatar, MaskConfig } from "./mask";
|
|
|
@@ -448,6 +449,9 @@ export function ChatActions(props: {
|
|
|
|
|
|
// switch model
|
|
|
const currentModel = chatStore.currentSession().mask.modelConfig.model;
|
|
|
+ const currentProviderName =
|
|
|
+ chatStore.currentSession().mask.modelConfig?.providerName ||
|
|
|
+ ServiceProvider.OpenAI;
|
|
|
const allModels = useAllModels();
|
|
|
const models = useMemo(() => {
|
|
|
const filteredModels = allModels.filter((m) => m.available);
|
|
|
@@ -479,13 +483,13 @@ export function ChatActions(props: {
|
|
|
const isUnavaliableModel = !models.some((m) => m.name === currentModel);
|
|
|
if (isUnavaliableModel && models.length > 0) {
|
|
|
// show next model to default model if exist
|
|
|
- let nextModel: ModelType = (
|
|
|
- models.find((model) => model.isDefault) || models[0]
|
|
|
- ).name;
|
|
|
- chatStore.updateCurrentSession(
|
|
|
- (session) => (session.mask.modelConfig.model = nextModel),
|
|
|
- );
|
|
|
- showToast(nextModel);
|
|
|
+ let nextModel = models.find((model) => model.isDefault) || models[0];
|
|
|
+ chatStore.updateCurrentSession((session) => {
|
|
|
+ session.mask.modelConfig.model = nextModel.name;
|
|
|
+ session.mask.modelConfig.providerName = nextModel?.provider
|
|
|
+ ?.providerName as ServiceProvider;
|
|
|
+ });
|
|
|
+ showToast(nextModel.name);
|
|
|
}
|
|
|
}, [chatStore, currentModel, models]);
|
|
|
|
|
|
@@ -573,19 +577,26 @@ export function ChatActions(props: {
|
|
|
|
|
|
{showModelSelector && (
|
|
|
<Selector
|
|
|
- defaultSelectedValue={currentModel}
|
|
|
+ defaultSelectedValue={`${currentModel}@${currentProviderName}`}
|
|
|
items={models.map((m) => ({
|
|
|
- title: m.displayName,
|
|
|
- value: m.name,
|
|
|
+ title: `${m.displayName}${
|
|
|
+ m?.provider?.providerName
|
|
|
+ ? "(" + m?.provider?.providerName + ")"
|
|
|
+ : ""
|
|
|
+ }`,
|
|
|
+ value: `${m.name}@${m?.provider?.providerName}`,
|
|
|
}))}
|
|
|
onClose={() => setShowModelSelector(false)}
|
|
|
onSelection={(s) => {
|
|
|
if (s.length === 0) return;
|
|
|
+ const [model, providerName] = s[0].split("@");
|
|
|
chatStore.updateCurrentSession((session) => {
|
|
|
- session.mask.modelConfig.model = s[0] as ModelType;
|
|
|
+ session.mask.modelConfig.model = model as ModelType;
|
|
|
+ session.mask.modelConfig.providerName =
|
|
|
+ providerName as ServiceProvider;
|
|
|
session.mask.syncGlobalConfig = false;
|
|
|
});
|
|
|
- showToast(s[0]);
|
|
|
+ showToast(model);
|
|
|
}}
|
|
|
/>
|
|
|
)}
|