From ed5351f790e3f7281fcaa44fab1c5fc30c1d1402 Mon Sep 17 00:00:00 2001 From: Kristian _server Date: Fri, 17 Nov 2023 17:08:09 +0100 Subject: [PATCH] working with 3 times same context added --- bot/chat.go | 61 +++++++++++++++++++++++++++--------------------- pb_data/logs.db | Bin 53248 -> 53248 bytes 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/bot/chat.go b/bot/chat.go index cdd78bc..e1c1002 100644 --- a/bot/chat.go +++ b/bot/chat.go @@ -13,7 +13,7 @@ const ( maxTokens = 2000 maxContextTokens = 4000 maxMessageTokens = 2000 - systemMessageText = "0. your name is !bit you are a discord bot 1. Identify the key points or main ideas of the original answers.\n2. Summarize each answer using concise and informative language.\n3. Prioritize clarity and brevity, capturing the essence of the information provided.\n4. Trim down unnecessary details and avoid elaboration.\n5. Make sure the summarized answers still convey accurate and meaningful information." + systemMessageText = "your name is !bit you are a discord bot" ) func populateConversationHistory(session *discordgo.Session, channelID string, conversationHistory []openai.ChatCompletionMessage) []openai.ChatCompletionMessage { @@ -33,19 +33,35 @@ func populateConversationHistory(session *discordgo.Session, channelID string, c maxHistoryTokens = 0 } + // Iterate from the beginning of conversationHistory (oldest messages) + for i := 0; i < len(conversationHistory); i++ { + msg := conversationHistory[i] + tokens := len(msg.Content) + len(msg.Role) + 2 // Account for role and content tokens + + if totalTokens-tokens >= maxHistoryTokens { + // Remove the oldest message + conversationHistory = conversationHistory[i+1:] + totalTokens -= tokens + break + } + } + + // Add new messages from the channel + addedTokens := 0 for _, message := range messages { - if message.Author.ID == session.State.User.ID { + if message.Author.ID == session.State.User.ID || message.Author.Bot { continue // Skip the bot's own messages } if len(message.Content) > 0 { tokens := len(message.Content) + 2 // Account for role and content tokens - if totalTokens+tokens <= maxContextTokens && len(conversationHistory) < maxHistoryTokens { + if totalTokens+tokens <= maxContextTokens && addedTokens+tokens <= maxContextTokens { conversationHistory = append(conversationHistory, openai.ChatCompletionMessage{ Role: openai.ChatMessageRoleUser, Content: message.Content, }) totalTokens += tokens + addedTokens += tokens } else { if totalTokens+tokens > maxContextTokens { log.Warn("Message token count exceeds maxContextTokens:", len(message.Content), len(message.Content)+2) @@ -60,8 +76,6 @@ func populateConversationHistory(session *discordgo.Session, channelID string, c return conversationHistory } -// ... - func chatGPT(session *discordgo.Session, channelID string, message string, conversationHistory []openai.ChatCompletionMessage) { client := openai.NewClient(OpenAIToken) @@ -80,41 +94,34 @@ func chatGPT(session *discordgo.Session, channelID string, message string, conve }) } } - - // Combine messages from conversation history - messages := []openai.ChatCompletionMessage{} - - // Add conversation history to messages - messages = append(messages, conversationHistory...) - - // Add user message to conversation history - userMessage := openai.ChatCompletionMessage{ - Role: openai.ChatMessageRoleUser, - Content: message, - } - messages = append(messages, userMessage) - // Trim conversation history if it exceeds maxContextTokens totalTokens := 0 trimmedMessages := []openai.ChatCompletionMessage{} - for i := 0; i < len(messages); i++ { - msg := messages[i] + for i := len(conversationHistory) - 1; i >= 0; i-- { + msg := conversationHistory[i] tokens := len(msg.Content) + len(msg.Role) + 2 // Account for role and content tokens if totalTokens+tokens <= maxContextTokens { - trimmedMessages = append(trimmedMessages, msg) + trimmedMessages = append([]openai.ChatCompletionMessage{msg}, trimmedMessages...) totalTokens += tokens } else { break } } - // Update messages with trimmed conversation history - messages = trimmedMessages + // Update conversationHistory with trimmed conversation history + conversationHistory = trimmedMessages + + // Add user message to conversation history + userMessage := openai.ChatCompletionMessage{ + Role: openai.ChatMessageRoleUser, + Content: message, + } + conversationHistory = append(conversationHistory, userMessage) // Perform GPT-4 completion - log.Info("Starting completion...") + log.Info("Starting completion...", conversationHistory) resp, err := client.CreateChatCompletion( context.Background(), openai.ChatCompletionRequest{ @@ -122,11 +129,13 @@ func chatGPT(session *discordgo.Session, channelID string, message string, conve FrequencyPenalty: 0.3, PresencePenalty: 0.6, Model: openai.GPT3Dot5Turbo, - Messages: messages, + Messages: conversationHistory, // Use trimmed conversation history }, ) log.Info("completion done.") + // ... + // Handle API errors if err != nil { log.Error("Error connecting to the OpenAI API:", err) diff --git a/pb_data/logs.db b/pb_data/logs.db index 94cef5688ccd549ffedbf8c7d39765220d988e42..38440e0b6806db499e1b65c5c21359066daee261 100644 GIT binary patch literal 53248 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 GNdE(2qa?im literal 53248 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 mrBOpYy}7gA90@TZi_Njw>(h>o82&Gpr#{dC