Skip to content

Commit 3aacb04

Browse files
authored
feat(compass-assistant): handle assistant errors COMPASS-9695 (#7236)
* surface assistant errors * log assistant errors * depcheck
1 parent 72644f0 commit 3aacb04

File tree

5 files changed

+127
-37
lines changed

5 files changed

+127
-37
lines changed

package-lock.json

Lines changed: 94 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compass-assistant/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@
5454
"@mongodb-js/compass-app-registry": "^9.4.20",
5555
"@mongodb-js/compass-components": "^1.49.0",
5656
"@mongodb-js/connection-info": "^0.17.1",
57+
"@mongodb-js/compass-logging": "^1.7.12",
5758
"mongodb-connection-string-url": "^3.0.1",
58-
"ai": "^5.0.5",
59+
"ai": "^5.0.26",
5960
"compass-preferences-model": "^2.51.0",
6061
"react": "^17.0.2",
6162
"throttleit": "^2.1.0",

packages/compass-assistant/src/@ai-sdk/react/use-chat.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export type UseChatHelpers<UI_MESSAGE extends UIMessage> = {
4343
| 'addToolResult'
4444
| 'status'
4545
| 'messages'
46+
| 'clearError'
4647
>;
4748

4849
export type UseChatOptions<UI_MESSAGE extends UIMessage> =
@@ -116,6 +117,7 @@ export function useChat<UI_MESSAGE extends UIMessage = UIMessage>({
116117
setMessages,
117118
sendMessage: chatRef.current.sendMessage,
118119
regenerate: chatRef.current.regenerate,
120+
clearError: chatRef.current.clearError,
119121
stop: chatRef.current.stop,
120122
error,
121123
resumeStream: chatRef.current.resumeStream,

packages/compass-assistant/src/assistant-chat.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
LgChatInputBar,
1111
spacing,
1212
css,
13+
Banner,
1314
} from '@mongodb-js/compass-components';
1415

1516
const { ChatWindow } = LgChatChatWindow;
@@ -36,10 +37,19 @@ const chatWindowFixesStyles = css({
3637
height: '100%',
3738
});
3839

40+
function makeErrorMessage(message: string) {
41+
message = message || 'An error occurred';
42+
return `${message}. Try clearing the chat if the error persists.`;
43+
}
44+
45+
const errorBannerWrapperStyles = css({
46+
margin: spacing[400],
47+
});
48+
3949
export const AssistantChat: React.FunctionComponent<AssistantChatProps> = ({
4050
chat,
4151
}) => {
42-
const { messages, sendMessage, status } = useChat({
52+
const { messages, sendMessage, status, error, clearError } = useChat({
4353
chat,
4454
});
4555

@@ -94,6 +104,13 @@ export const AssistantChat: React.FunctionComponent<AssistantChatProps> = ({
94104
/>
95105
)}
96106
</MessageFeed>
107+
{error && (
108+
<div className={errorBannerWrapperStyles}>
109+
<Banner variant="danger" dismissible onClose={clearError}>
110+
{makeErrorMessage(error.message)}
111+
</Banner>
112+
</div>
113+
)}
97114
<InputBar
98115
data-testid="assistant-chat-input"
99116
onMessageSend={handleMessageSend}

packages/compass-assistant/src/compass-assistant-provider.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { DocsProviderTransport } from './docs-provider-transport';
1111
import { useDrawerActions } from '@mongodb-js/compass-components';
1212
import { buildConnectionErrorPrompt, buildExplainPlanPrompt } from './prompts';
1313
import { usePreference } from 'compass-preferences-model/provider';
14+
import { createLoggerLocator } from '@mongodb-js/compass-logging/provider';
1415
import type { ConnectionInfo } from '@mongodb-js/connection-info';
1516
import { redactConnectionString } from 'mongodb-connection-string-url';
1617

@@ -151,11 +152,19 @@ export const CompassAssistantProvider = registerCompassPlugin(
151152
}
152153
return <AssistantProvider chat={chat}>{children}</AssistantProvider>;
153154
},
154-
activate: (initialProps, { atlasService }) => {
155+
activate: (initialProps, { atlasService, logger }) => {
155156
const chat = new Chat({
156157
transport: new DocsProviderTransport({
157158
baseUrl: atlasService.assistantApiEndpoint(),
158159
}),
160+
onError: (err: any) => {
161+
logger.log.error(
162+
logger.mongoLogId(1_001_000_370),
163+
'Assistant',
164+
'Failed to send a message',
165+
{ err }
166+
);
167+
},
159168
});
160169
return {
161170
store: { state: { chat } },
@@ -165,5 +174,6 @@ export const CompassAssistantProvider = registerCompassPlugin(
165174
},
166175
{
167176
atlasService: atlasServiceLocator,
177+
logger: createLoggerLocator('COMPASS-ASSISTANT'),
168178
}
169179
);

0 commit comments

Comments
 (0)