-
Notifications
You must be signed in to change notification settings - Fork 2k
/
chat.ts
95 lines (79 loc) · 2.16 KB
/
chat.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import {
BaseMessage,
BaseMessageChunk,
type BaseMessageFields,
mergeContent,
_mergeDicts,
type MessageType,
} from "./base.js";
export interface ChatMessageFieldsWithRole extends BaseMessageFields {
role: string;
}
/**
* Represents a chat message in a conversation.
*/
export class ChatMessage
extends BaseMessage
implements ChatMessageFieldsWithRole
{
static lc_name() {
return "ChatMessage";
}
role: string;
static _chatMessageClass(): typeof ChatMessage {
return ChatMessage;
}
constructor(content: string, role: string);
constructor(fields: ChatMessageFieldsWithRole);
constructor(fields: string | ChatMessageFieldsWithRole, role?: string) {
if (typeof fields === "string") {
// eslint-disable-next-line no-param-reassign, @typescript-eslint/no-non-null-assertion
fields = { content: fields, role: role! };
}
super(fields);
this.role = fields.role;
}
_getType(): MessageType {
return "generic";
}
static isInstance(message: BaseMessage): message is ChatMessage {
return message._getType() === "generic";
}
}
/**
* Represents a chunk of a chat message, which can be concatenated with
* other chat message chunks.
*/
export class ChatMessageChunk extends BaseMessageChunk {
static lc_name() {
return "ChatMessageChunk";
}
role: string;
constructor(content: string, role: string);
constructor(fields: ChatMessageFieldsWithRole);
constructor(fields: string | ChatMessageFieldsWithRole, role?: string) {
if (typeof fields === "string") {
// eslint-disable-next-line no-param-reassign, @typescript-eslint/no-non-null-assertion
fields = { content: fields, role: role! };
}
super(fields);
this.role = fields.role;
}
_getType(): MessageType {
return "generic";
}
concat(chunk: ChatMessageChunk) {
return new ChatMessageChunk({
content: mergeContent(this.content, chunk.content),
additional_kwargs: _mergeDicts(
this.additional_kwargs,
chunk.additional_kwargs
),
response_metadata: _mergeDicts(
this.response_metadata,
chunk.response_metadata
),
role: this.role,
});
}
}