Skip to content

Commit d5610f8

Browse files
authored
Merge pull request #82 from import-ai/fix/message_status
Update message status when error
2 parents fb28e2e + 104841c commit d5610f8

File tree

4 files changed

+21
-28
lines changed

4 files changed

+21
-28
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
- name: Check if dependencies changed
3030
id: depcheck
3131
run: |
32-
if git diff --name-only origin/main | grep -E 'package.json|pnpm-lock.yaml|pnpm-workspace.yaml'; then
32+
if git diff --name-only origin/main | grep -E 'package.json|pnpm-lock.yaml|pnpm-workspace.yaml|runtime.Dockerfile'; then
3333
echo "changed=true" >> $GITHUB_OUTPUT
3434
else
3535
echo "changed=false" >> $GITHUB_OUTPUT

src/messages/messages.service.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
import { CreateMessageDto } from 'src/messages/dto/create-message.dto';
1010
import { User } from 'src/user/user.entity';
1111
import { SearchService } from 'src/search/search.service';
12+
import { ChatDeltaResponse } from '../wizard/dto/chat-response.dto';
1213

1314
@Injectable()
1415
export class MessagesService {
@@ -74,11 +75,9 @@ export class MessagesService {
7475
return delta ? (source || '') + delta : source;
7576
}
7677

77-
async updateOpenAIMessage(
78-
id: string,
79-
deltaMessage: Partial<OpenAIMessage>,
80-
attrs?: Record<string, any>,
81-
) {
78+
async updateDelta(id: string, delta: ChatDeltaResponse) {
79+
const deltaMessage: Partial<OpenAIMessage> = delta.message;
80+
8281
const message = await this.messageRepository.findOneOrFail({
8382
where: { id },
8483
});
@@ -100,9 +99,9 @@ export class MessagesService {
10099
}
101100
// <<< OpenAI Message
102101
message.status = MessageStatus.STREAMING;
103-
if (attrs) {
102+
if (delta.attrs) {
104103
message.attrs = message.attrs || {};
105-
Object.assign(message.attrs, attrs);
104+
Object.assign(message.attrs, delta.attrs);
106105
}
107106
return await this.messageRepository.save(message);
108107
}

src/wizard/stream.service.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,9 @@ export class StreamService {
109109
if (!context.messageId) {
110110
throw new Error('Message ID is not set in context');
111111
}
112-
const message: Message = await this.messagesService.updateOpenAIMessage(
112+
const message: Message = await this.messagesService.updateDelta(
113113
context.messageId,
114-
chunk.message,
115-
chunk.attrs,
114+
chunk,
116115
);
117116

118117
context.message = message.message;
@@ -133,6 +132,18 @@ export class StreamService {
133132
} else if (chunk.response_type === 'done') {
134133
// Do nothing, this is the end of the stream
135134
} else if (chunk.response_type === 'error') {
135+
if (context.messageId) {
136+
await this.messagesService.update(
137+
context.messageId,
138+
namespaceId,
139+
conversationId,
140+
{
141+
status: MessageStatus.FAILED,
142+
},
143+
true,
144+
);
145+
}
146+
136147
const err = new Error(chunk.message || 'Unknown error');
137148
err.name = 'AgentError';
138149
throw err;
@@ -145,17 +156,6 @@ export class StreamService {
145156
};
146157
}
147158

148-
chatStream(body: Record<string, any>): Observable<MessageEvent> {
149-
return new Observable<MessageEvent>((subscriber) => {
150-
this.stream('/api/v1/wizard/stream', body, (data) => {
151-
subscriber.next({ data });
152-
return Promise.resolve();
153-
})
154-
.then(() => subscriber.complete())
155-
.catch((err) => subscriber.error(err));
156-
});
157-
}
158-
159159
findOneOrFail(messages: Message[], messageId: string): Message {
160160
const message = messages.find((m) => m.id === messageId);
161161
if (!message) {

src/wizard/wizard.controller.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ export class WizardController {
1616
return await this.wizardService.collect(req.user, data);
1717
}
1818

19-
@Post('chat/stream')
20-
@Sse()
21-
chat(@Body() body: Record<string, any>) {
22-
return this.wizardService.streamService.chatStream(body);
23-
}
24-
2519
@Post('ask')
2620
@Sse()
2721
async ask(@Req() req, @Body() body: AgentRequestDto) {

0 commit comments

Comments
 (0)