working with 3 times same context added
This commit is contained in:
parent
81e39f058a
commit
ed5351f790
61
bot/chat.go
61
bot/chat.go
@ -13,7 +13,7 @@ const (
|
|||||||
maxTokens = 2000
|
maxTokens = 2000
|
||||||
maxContextTokens = 4000
|
maxContextTokens = 4000
|
||||||
maxMessageTokens = 2000
|
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 {
|
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
|
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 {
|
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
|
continue // Skip the bot's own messages
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(message.Content) > 0 {
|
if len(message.Content) > 0 {
|
||||||
tokens := len(message.Content) + 2 // Account for role and content tokens
|
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{
|
conversationHistory = append(conversationHistory, openai.ChatCompletionMessage{
|
||||||
Role: openai.ChatMessageRoleUser,
|
Role: openai.ChatMessageRoleUser,
|
||||||
Content: message.Content,
|
Content: message.Content,
|
||||||
})
|
})
|
||||||
totalTokens += tokens
|
totalTokens += tokens
|
||||||
|
addedTokens += tokens
|
||||||
} else {
|
} else {
|
||||||
if totalTokens+tokens > maxContextTokens {
|
if totalTokens+tokens > maxContextTokens {
|
||||||
log.Warn("Message token count exceeds maxContextTokens:", len(message.Content), len(message.Content)+2)
|
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
|
return conversationHistory
|
||||||
}
|
}
|
||||||
|
|
||||||
// ...
|
|
||||||
|
|
||||||
func chatGPT(session *discordgo.Session, channelID string, message string, conversationHistory []openai.ChatCompletionMessage) {
|
func chatGPT(session *discordgo.Session, channelID string, message string, conversationHistory []openai.ChatCompletionMessage) {
|
||||||
client := openai.NewClient(OpenAIToken)
|
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
|
// Trim conversation history if it exceeds maxContextTokens
|
||||||
totalTokens := 0
|
totalTokens := 0
|
||||||
trimmedMessages := []openai.ChatCompletionMessage{}
|
trimmedMessages := []openai.ChatCompletionMessage{}
|
||||||
|
|
||||||
for i := 0; i < len(messages); i++ {
|
for i := len(conversationHistory) - 1; i >= 0; i-- {
|
||||||
msg := messages[i]
|
msg := conversationHistory[i]
|
||||||
tokens := len(msg.Content) + len(msg.Role) + 2 // Account for role and content tokens
|
tokens := len(msg.Content) + len(msg.Role) + 2 // Account for role and content tokens
|
||||||
|
|
||||||
if totalTokens+tokens <= maxContextTokens {
|
if totalTokens+tokens <= maxContextTokens {
|
||||||
trimmedMessages = append(trimmedMessages, msg)
|
trimmedMessages = append([]openai.ChatCompletionMessage{msg}, trimmedMessages...)
|
||||||
totalTokens += tokens
|
totalTokens += tokens
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update messages with trimmed conversation history
|
// Update conversationHistory with trimmed conversation history
|
||||||
messages = trimmedMessages
|
conversationHistory = trimmedMessages
|
||||||
|
|
||||||
|
// Add user message to conversation history
|
||||||
|
userMessage := openai.ChatCompletionMessage{
|
||||||
|
Role: openai.ChatMessageRoleUser,
|
||||||
|
Content: message,
|
||||||
|
}
|
||||||
|
conversationHistory = append(conversationHistory, userMessage)
|
||||||
|
|
||||||
// Perform GPT-4 completion
|
// Perform GPT-4 completion
|
||||||
log.Info("Starting completion...")
|
log.Info("Starting completion...", conversationHistory)
|
||||||
resp, err := client.CreateChatCompletion(
|
resp, err := client.CreateChatCompletion(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
openai.ChatCompletionRequest{
|
openai.ChatCompletionRequest{
|
||||||
@ -122,11 +129,13 @@ func chatGPT(session *discordgo.Session, channelID string, message string, conve
|
|||||||
FrequencyPenalty: 0.3,
|
FrequencyPenalty: 0.3,
|
||||||
PresencePenalty: 0.6,
|
PresencePenalty: 0.6,
|
||||||
Model: openai.GPT3Dot5Turbo,
|
Model: openai.GPT3Dot5Turbo,
|
||||||
Messages: messages,
|
Messages: conversationHistory, // Use trimmed conversation history
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
log.Info("completion done.")
|
log.Info("completion done.")
|
||||||
|
|
||||||
|
// ...
|
||||||
|
|
||||||
// Handle API errors
|
// Handle API errors
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Error connecting to the OpenAI API:", err)
|
log.Error("Error connecting to the OpenAI API:", err)
|
||||||
|
|||||||
BIN
pb_data/logs.db
BIN
pb_data/logs.db
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user