File size: 1,785 Bytes
37bd4dd
e7c1910
37bd4dd
 
7d0c63c
37bd4dd
 
 
e7c1910
0ff15a5
7d0c63c
1dda07c
0ff15a5
 
 
 
37bd4dd
0ff15a5
 
37bd4dd
0ff15a5
7d0c63c
 
37bd4dd
0ff15a5
da9f335
e7c1910
 
 
 
 
 
 
 
 
0ff15a5
 
37bd4dd
 
7d0c63c
 
 
 
 
 
 
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
import re
from persistStorage import saveLog

class ChatgptManager:
  def __init__(self, openAIClient, model="gpt-3.5-turbo-1106", tokenLimit=8000, throwError=False, contextHistoryLen=3):
    self.client = openAIClient
    self.tokenLimit = tokenLimit
    self.model = model
    self.throwError = throwError
    self.messages = []
    self.contextHistoryLen = contextHistoryLen #sending previous n user inputs and their assistant messages. 
  
  def setSystemPrompt(self, systemPrompt):
    systemMessage = {"role":"system", "content":systemPrompt}
    if len(self.messages)==0:
      self.messages = [systemMessage]
    else:
      del self.messages[0]
      self.messages.insert(0, systemMessage)

  def getResponseForUserInput(self, userInput):
    #send only recent history to gpt.
    self.messages = self.getRecentContextOnly()
    userMessage = {"role":"user", "content":userInput}
    self.messages.append(userMessage)
    print(self.messages, "messages being sent to gpt for completion.")
    try:
      completion = self.client.chat.completions.create(
        model=self.model,
        messages=self.messages,
        temperature=0,
      )
      gptResponse = completion.choices[0].message.content
    except Exception as e:
      if not self.throwError:
        errorText = "Error while connecting with gpt " + str(e)[:100] + "..."
        return errorText    

    self.messages.append({"role": "assistant", "content": gptResponse})
    return gptResponse

  def getRecentContextOnly(self):
    #take only systemp prompt and recent self.contextHistoryLen user input and self.contextHistoryLen assistant messages
    if len(self.messages)<2*self.contextHistoryLen+1:
        return self.messages[:]
    return [self.messages[0]] + self.messages[-2*self.contextHistoryLen:]