Skip to content
This repository has been archived by the owner on Jun 2, 2024. It is now read-only.

Commit

Permalink
[lib] Add conversation serialization (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxijonson committed May 1, 2023
1 parent 7018d78 commit 7cea741
Show file tree
Hide file tree
Showing 25 changed files with 410 additions and 489 deletions.
3 changes: 2 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

61 changes: 3 additions & 58 deletions packages/cli/src/contexts/providers/PersistenceProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import React from "react";
import fs from "fs";
import { Persistence, persistenceSchema } from "../../entities/persistence.js";
import { PersistenceMessage } from "../../entities/persistenceMessage.js";
import useConversationManager from "../../hooks/useConversationManager.js";
import {
PersistenceContext,
Expand All @@ -20,19 +18,7 @@ export default ({ children }: PersistenceProviderProps) => {

const save = React.useCallback(() => {
if (!conversation || !saveFile) return;
const persistedConversations: Persistence = {
conversation: {
...conversation.getConfig(),
messages: conversation.getMessages().map(
(message): PersistenceMessage => ({
content: message.content,
role: message.role,
})
),
},
};
const parsed = persistenceSchema.parse(persistedConversations);
const json = JSON.stringify(parsed);
const json = JSON.stringify(conversation.toJSON());
fs.writeFileSync(saveFile, json);
}, [conversation, saveFile]);

Expand All @@ -58,45 +44,7 @@ export default ({ children }: PersistenceProviderProps) => {
try {
const data = fs.readFileSync(loadFile, "utf8");
const json = JSON.parse(data);
const { conversation: persistedConversation } =
persistenceSchema.parse(json);
const { messages, disableModeration, ...config } =
persistedConversation;
const newConversation = new Conversation({
...config,
disableModeration: true,
});

for (const message of messages) {
try {
switch (message.role) {
case "user":
await newConversation.addUserMessage(
message.content
);
break;
case "assistant":
await newConversation.addAssistantMessage(
message.content
);
break;
case "system":
newConversation.setContext(message.content);
}
} catch (e) {
console.error(
"Error while loading message",
(e as Error).message
);
}
}

newConversation.setConfig(
{
disableModeration,
},
true
);
const newConversation = await Conversation.fromJSON(json);
setConversation(newConversation);
} catch (e) {
console.error(e);
Expand All @@ -117,10 +65,7 @@ export default ({ children }: PersistenceProviderProps) => {
messageOffs.push(
message.onMessageStreamingStop(() => {
save();
})
);

messageOffs.push(
}),
message.onMessageUpdate((_, m) => {
if (m.isStreaming) return;
save();
Expand Down
8 changes: 0 additions & 8 deletions packages/cli/src/entities/persistence.ts

This file was deleted.

26 changes: 0 additions & 26 deletions packages/cli/src/entities/persistenceConversation.ts

This file was deleted.

8 changes: 0 additions & 8 deletions packages/cli/src/entities/persistenceMessage.ts

This file was deleted.

4 changes: 3 additions & 1 deletion packages/cli/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,9 @@ const saveFile = (() => {
const savePath = path.normalize(
typeof save === "string"
? save
: `gptturbo-conversation-${new Date().toISOString()}`
: `gptturbo-conversation-${new Date()
.toISOString()
.replace(/:/g, "-")}`
);
return savePath.endsWith(".json") ? savePath : `${savePath}.json`;
})();
Expand Down
19 changes: 5 additions & 14 deletions packages/discord/src/managers/ConversationManager.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ChatCompletionRequestMessageRoleEnum, Conversation } from "gpt-turbo";
import { Conversation, MessageModel } from "gpt-turbo";
import getConversationConfig from "../utils/getConversationConfig.js";
import BotException from "../exceptions/BotException.js";
import QuotaManager from "./QuotaManager.js";
Expand All @@ -8,10 +8,7 @@ export default class ConversationManager {
constructor(private readonly quotaManager: QuotaManager) {}

public async getChatCompletion(
messages: (
| { content: string; role: ChatCompletionRequestMessageRoleEnum }
| string
)[],
messages: (MessageModel | string)[],
userId: string
) {
const user: ConversationUser = `discord-${userId}`;
Expand Down Expand Up @@ -52,15 +49,9 @@ export default class ConversationManager {
}

private getAlternatedMessages(
messages: (
| { content: string; role: ChatCompletionRequestMessageRoleEnum }
| string
)[]
): { content: string; role: ChatCompletionRequestMessageRoleEnum }[] {
const alternatedMessages: {
content: string;
role: ChatCompletionRequestMessageRoleEnum;
}[] = [];
messages: (MessageModel | string)[]
): MessageModel[] {
const alternatedMessages: MessageModel[] = [];

messages.forEach((message, index) => {
alternatedMessages.push({
Expand Down
9 changes: 2 additions & 7 deletions packages/discord/src/message-handlers/DMReplyHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import MessageHandler from "./MessageHandler.js";
import getPromptAndReplyMessages from "../utils/getPromptAndReplyMessages.js";
import BotException from "../exceptions/BotException.js";
import getCleanContent from "../utils/getCleanContent.js";
import { ChatCompletionRequestMessageRoleEnum } from "gpt-turbo";
import { MessageModel } from "gpt-turbo";

export default class DMReplyHandler extends MessageHandler {
public get name(): string {
Expand Down Expand Up @@ -41,12 +41,7 @@ export default class DMReplyHandler extends MessageHandler {
const [conversationMessages, prompt] = await Promise.all([
Promise.all(
messages.map(
async (
m
): Promise<{
content: string;
role: ChatCompletionRequestMessageRoleEnum;
}> => ({
async (m): Promise<MessageModel> => ({
content: (await getCleanContent(m)) || "Hello",
role:
m.author.id === message.author.id
Expand Down
3 changes: 2 additions & 1 deletion packages/lib/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@
},
"dependencies": {
"gpt-token-utils": "^1.2.0",
"uuid": "^9.0.0"
"uuid": "^9.0.0",
"zod": "^3.21.4"
},
"gitHead": "328d04dc73d86236dba158a181581a53caf37720"
}
Loading

0 comments on commit 7cea741

Please sign in to comment.