Skip to content

Commit

Permalink
Update Chat Model Serializtion
Browse files Browse the repository at this point in the history
  • Loading branch information
vowelparrot committed May 11, 2023
1 parent ac991b2 commit bffc5d4
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 21 deletions.
15 changes: 9 additions & 6 deletions langchain/src/stores/message/dynamodb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,14 @@ export class DynamoDBChatMessageHistory extends BaseListChatMessageHistory {
const messages = items
.map((item) => ({
type: item.M?.type.S,
role: item.M?.role?.S,
text: item.M?.text.S,
data: {
role: item.M?.role?.S,
content: item.M?.text.S,
},
}))
.filter(
(x): x is StoredMessage => x.type !== undefined && x.text !== undefined
(x): x is StoredMessage =>
x.type !== undefined && x.data.content !== undefined
);
return mapStoredMessagesToChatMessages(messages);
}
Expand Down Expand Up @@ -133,12 +136,12 @@ export class DynamoDBChatMessageHistory extends BaseListChatMessageHistory {
S: message.type,
},
text: {
S: message.text,
S: message.data.content,
},
},
};
if (message.role) {
dynamoSerializedMessage.M.role = { S: message.role };
if (message.data.role) {
dynamoSerializedMessage.M.role = { S: message.data.role };
}
return dynamoSerializedMessage;
}),
Expand Down
9 changes: 6 additions & 3 deletions langchain/src/stores/message/redis.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,14 @@ export class RedisChatMessageHistory extends BaseListChatMessageHistory {
const previousMessages = orderedMessages
.map((item) => ({
type: item.type,
role: item.role,
text: item.text,
data: {
role: item.role,
content: item.text,
},
}))
.filter(
(x): x is StoredMessage => x.type !== undefined && x.text !== undefined
(x): x is StoredMessage =>
x.type !== undefined && x.data.content !== undefined
);
return mapStoredMessagesToChatMessages(previousMessages);
}
Expand Down
37 changes: 25 additions & 12 deletions langchain/src/stores/message/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,17 @@ import {
SystemChatMessage,
} from "../../schema/index.js";

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type AdditionalKwargs = Record<string, any>;
export interface StoredMessageData {
content: string;
role: string | undefined;
additional_kwargs?: AdditionalKwargs;
}

export interface StoredMessage {
type: string;
role: string | undefined;
text: string;
data: StoredMessageData;
}

export function mapStoredMessagesToChatMessages(
Expand All @@ -18,17 +25,21 @@ export function mapStoredMessagesToChatMessages(
return messages.map((message) => {
switch (message.type) {
case "human":
return new HumanChatMessage(message.text);
return new HumanChatMessage(message.data.content);
case "ai":
return new AIChatMessage(message.text);
return new AIChatMessage(message.data.content);
case "system":
return new SystemChatMessage(message.text);
default: {
if (message.role === undefined) {
throw new Error("Role must be defined for generic messages");
return new SystemChatMessage(message.data.content);
case "chat":
if (message.data?.additional_kwargs?.role === undefined) {
throw new Error("Role must be defined for chat messages");
}
return new ChatMessage(message.text, message.role);
}
return new ChatMessage(
message.data.content,
message.data.additional_kwargs.role
);
default:
throw new Error(`Got unexpected type: ${message.type}`);
}
});
}
Expand All @@ -38,7 +49,9 @@ export function mapChatMessagesToStoredMessages(
): StoredMessage[] {
return messages.map((message) => ({
type: message._getType(),
role: "role" in message ? (message.role as string) : undefined,
text: message.text,
data: {
content: message.text,
role: "role" in message ? (message.role as string) : undefined,
},
}));
}

0 comments on commit bffc5d4

Please sign in to comment.