Skip to content

Commit 4a99506

Browse files
author
Bogdan Tsechoev
committed
change model on change chat
1 parent c74b0cd commit 4a99506

File tree

5 files changed

+62
-47
lines changed

5 files changed

+62
-47
lines changed

ui/packages/platform/src/pages/Bot/SettingsDialog/SettingsDialog.tsx

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type PublicChatDialogProps = {
4545
onClose: () => void
4646
onSaveChanges: SaveChangesFunction
4747
isLoading: boolean
48-
threadId: string
48+
threadId: string | null
4949
}
5050

5151
const useDialogTitleStyles = makeStyles(
@@ -241,6 +241,7 @@ export const SettingsDialog = (props: PublicChatDialogProps) => {
241241
aria-labelledby="customized-dialog-title"
242242
open={isOpen}
243243
className={classes.dialog}
244+
fullWidth
244245
>
245246
<DialogTitle
246247
id="customized-dialog-title"
@@ -249,37 +250,39 @@ export const SettingsDialog = (props: PublicChatDialogProps) => {
249250
Chat Settings
250251
</DialogTitle>
251252
<DialogContent>
252-
<FormLabel component="legend">Visibility</FormLabel>
253-
<RadioGroup
254-
aria-label="shareUrl"
255-
name="shareUrl"
256-
value={visibility}
257-
onChange={(event) => {
258-
setVisibility(event.target.value as Visibility)
259-
}}
260-
className={classes.radioLabel}
261-
>
262-
<FormControlLabel
263-
value="private"
264-
control={<Radio />}
265-
label="Only members of the organization can view"
266-
/>
253+
{threadId && <>
254+
<FormLabel component="legend">Visibility</FormLabel>
255+
<RadioGroup
256+
aria-label="shareUrl"
257+
name="shareUrl"
258+
value={visibility}
259+
onChange={(event) => {
260+
setVisibility(event.target.value as Visibility)
261+
}}
262+
className={classes.radioLabel}
263+
>
264+
<FormControlLabel
265+
value="private"
266+
control={<Radio />}
267+
label="Only members of the organization can view"
268+
/>
267269

268-
<FormControlLabel
269-
value="public"
270-
control={<Radio />}
271-
label="Anyone with a special link and members of the organization can view"
272-
/>
273-
</RadioGroup>
274-
{/*{shareUrl.remark && (
275-
<Typography className={classes.remark}>
276-
<span className={classes.remarkIcon}>{icons.warningIcon}</span>
277-
{shareUrl.remark}
278-
</Typography>
279-
)}*/}
280-
{visibility && (
281-
<div className={classes.urlContainer}>{urlField}</div>
282-
)}
270+
<FormControlLabel
271+
value="public"
272+
control={<Radio />}
273+
label="Anyone with a special link and members of the organization can view"
274+
/>
275+
</RadioGroup>
276+
{/*{shareUrl.remark && (
277+
<Typography className={classes.remark}>
278+
<span className={classes.remarkIcon}>{icons.warningIcon}</span>
279+
{shareUrl.remark}
280+
</Typography>
281+
)}*/}
282+
{visibility && (
283+
<div className={classes.urlContainer}>{urlField}</div>
284+
)}
285+
</>}
283286
<FormLabel component="legend">Model</FormLabel>
284287
<RadioGroup
285288
aria-label="model"

ui/packages/platform/src/pages/Bot/SettingsWithLabel/SettingsWithLabel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ export const SettingsWithLabel = (props: SettingsWithLabelProps) => {
5555
const matches = useMediaQuery(theme.breakpoints.down('sm'));
5656
return (
5757
<>
58-
<a
58+
{permalinkId && <a
5959
href={permalinkId && chatVisibility === 'public' ? permalinkLinkBuilder(permalinkId) : ''}
6060
className={cn(classes.label, {[classes.labelPrivate]: chatVisibility === 'private', [classes.disabled]: chatVisibility === 'private' || !permalinkId})}
6161
target="_blank"
6262
aria-disabled={chatVisibility === 'private' || !permalinkId}
6363
>
6464
This thread is {chatVisibility}
65-
</a>
65+
</a>}
6666
<Button
6767
variant="outlined"
6868
onClick={onSettingsClick}

ui/packages/platform/src/pages/Bot/hooks.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ import {getChats} from "api/bot/getChats";
1414
import {useAlertSnackbar} from "@postgres.ai/shared/components/AlertSnackbar/useAlertSnackbar";
1515
import {localStorage} from "../../helpers/localStorage";
1616
import { makeChatPublic } from "../../api/bot/makeChatPublic";
17+
import { aiModelBuilder } from "./utils";
1718

1819

1920
const WS_URL = process.env.REACT_APP_WS_URL || '';
2021

2122
export type Model = 'gpt' | 'gemini'
2223

24+
export const DEFAULT_MODEL: Model = 'gemini'
25+
2326
type ErrorType = {
2427
code?: number;
2528
message: string;
@@ -64,7 +67,7 @@ export const useAiBot = (args: UseAiBotArgs): UseAiBotReturnType => {
6467
const [error, setError] = useState<ErrorType | null>(null);
6568
const [wsLoading, setWsLoading] = useState<boolean>(false);
6669
const [isChangeVisibilityLoading, setIsChangeVisibilityLoading] = useState<boolean>(false);
67-
const [model, setModel] = useState<Model>('gemini');
70+
const [model, setModel] = useState<Model>(DEFAULT_MODEL);
6871

6972
const token = localStorage.getAuthToken()
7073

@@ -141,6 +144,7 @@ export const useAiBot = (args: UseAiBotArgs): UseAiBotReturnType => {
141144
subscribe(threadId)
142145
if (response && response.length > 0) {
143146
setMessages(response);
147+
setModel(aiModelBuilder(response?.[response.length - 1]?.ai_model || ''))
144148
} else {
145149
if (onChatLoadingError) onChatLoadingError();
146150
setError({
@@ -235,6 +239,7 @@ export const useAiBot = (args: UseAiBotArgs): UseAiBotReturnType => {
235239

236240
const clearChat = () => {
237241
setMessages(null);
242+
setModel(DEFAULT_MODEL);
238243
}
239244

240245
const changeChatVisibility = async (threadId: string, isPublic: boolean) => {

ui/packages/platform/src/pages/Bot/index.tsx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export const BotPage = (props: BotPageProps) => {
114114
const matches = useMediaQuery(theme.breakpoints.down('sm'));
115115

116116
const [isChatsListVisible, setChatsListVisible] = useState(window?.innerWidth > 640);
117-
const [isVisibilityDialogVisible, setVisibilityDialogVisible] = useState(false);
117+
const [isSettingsDialogVisible, setSettingsDialogVisible] = useState(false);
118118
const [chatVisibility, setChatVisibility] = useState<'public' | 'private'>('public');
119119

120120
const history = useHistory();
@@ -139,8 +139,8 @@ export const BotPage = (props: BotPageProps) => {
139139
setChatsListVisible((prevState) => !prevState)
140140
}
141141

142-
const toggleVisibilityDialog = () => {
143-
setVisibilityDialogVisible((prevState) => !prevState)
142+
const toggleSettingsDialog = () => {
143+
setSettingsDialogVisible((prevState) => !prevState)
144144
}
145145

146146
const handleSendMessage = async (message: string) => {
@@ -174,6 +174,7 @@ export const BotPage = (props: BotPageProps) => {
174174
if (_visibility !== chatVisibility) {
175175
handleSaveChatVisibility( _visibility === 'public')
176176
}
177+
toggleSettingsDialog();
177178
}
178179

179180
const handleChatListLinkClick = (targetThreadId: string) => {
@@ -217,15 +218,15 @@ export const BotPage = (props: BotPageProps) => {
217218

218219
return (
219220
<>
220-
{match.params.threadId && <SettingsDialog
221+
<SettingsDialog
221222
defaultVisibility={chatVisibility}
222223
defaultModel={model}
223-
isOpen={isVisibilityDialogVisible}
224+
isOpen={isSettingsDialogVisible}
224225
isLoading={isChangeVisibilityLoading}
225-
onClose={toggleVisibilityDialog}
226+
onClose={toggleSettingsDialog}
226227
onSaveChanges={handleSaveSettings}
227-
threadId={match.params.threadId}
228-
/>}
228+
threadId={match.params.threadId || null}
229+
/>
229230
<ChatsList
230231
isOpen={isChatsListVisible}
231232
onCreateNewChat={handleCreateNewChat}
@@ -234,16 +235,16 @@ export const BotPage = (props: BotPageProps) => {
234235
chatsList={chatsList}
235236
loading={chatsListLoading}
236237
withChatVisibilityButton={matches && Boolean(match.params.threadId)}
237-
onChatVisibilityClick={toggleVisibilityDialog}
238+
onChatVisibilityClick={toggleSettingsDialog}
238239
currentVisibility={chatVisibility}
239240
onLinkClick={handleChatListLinkClick}
240241
permalinkId={messages?.[0]?.id}
241242
/>
242243
<Box className={classes.actions}>
243-
{match.params.threadId && !matches &&
244+
{!matches &&
244245
<SettingsWithLabel
245246
chatVisibility={chatVisibility}
246-
onSettingsClick={toggleVisibilityDialog}
247+
onSettingsClick={toggleSettingsDialog}
247248
permalinkId={messages?.[0]?.id}
248249
/>}
249250
<Box className={classes.hiddenButtons}>
@@ -252,7 +253,7 @@ export const BotPage = (props: BotPageProps) => {
252253
onClose={toggleChatsList}
253254
onCreateNewChat={handleCreateNewChat}
254255
withChatVisibilityButton={matches && Boolean(match.params.threadId)}
255-
onChatVisibilityClick={toggleVisibilityDialog}
256+
onChatVisibilityClick={toggleSettingsDialog}
256257
currentVisibility={chatVisibility}
257258
permalinkId={messages?.[0]?.id}
258259
/>

ui/packages/platform/src/pages/Bot/utils.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
*/
77

88
import { API_URL_PREFIX } from "../../config/env";
9+
import { DEFAULT_MODEL, Model } from "./hooks";
910

1011
export const permalinkLinkBuilder = (id: string): string => {
1112
const apiUrl = process.env.REACT_APP_API_URL_PREFIX || API_URL_PREFIX;
1213
const isV2API = /https?:\/\/.*v2\.postgres\.ai\b/.test(apiUrl);
1314
return `https://${isV2API ? 'v2.' : ''}postgres.ai/chats/${id}`;
14-
};
15+
};
16+
17+
18+
export const aiModelBuilder = (model: string): Model => {
19+
return /oai|gpt/.test(model) ? "gpt" : /gemini|gcp/.test(model) ? "gemini" : DEFAULT_MODEL;
20+
}

0 commit comments

Comments
 (0)