Merge pull request #23 from Priler/test

GPT Fixes
This commit is contained in:
Abraham Tugalov 2023-04-19 23:20:00 +05:00 committed by GitHub
commit 64cb29be0e

39
main.py
View file

@ -10,6 +10,7 @@ import time
from ctypes import POINTER, cast from ctypes import POINTER, cast
import openai import openai
from openai import error
import pvporcupine import pvporcupine
import simpleaudio as sa import simpleaudio as sa
import vosk import vosk
@ -33,11 +34,8 @@ VA_CMD_LIST = yaml.safe_load(
) )
# ChatGPT vars # ChatGPT vars
message_log = [ system_message = {"role": "system", "content": "Ты голосовой ассистент из железного человека."}
{"role": "system", "content": "Ты голосовой ассистент из железного человека."} message_log = [system_message]
]
# Set a flag to keep track of whether this is the first request in the conversation
first_request = True
# init openai # init openai
openai.api_key = config.OPENAI_TOKEN openai.api_key = config.OPENAI_TOKEN
@ -63,14 +61,24 @@ def gpt_answer():
model_engine = "gpt-3.5-turbo" model_engine = "gpt-3.5-turbo"
max_tokens = 256 # default 1024 max_tokens = 256 # default 1024
response = openai.ChatCompletion.create( try:
model=model_engine, response = openai.ChatCompletion.create(
messages=message_log, model=model_engine,
max_tokens=max_tokens, messages=message_log,
temperature=0.7, max_tokens=max_tokens,
top_p=1, temperature=0.7,
stop=None top_p=1,
) stop=None
)
except (error.TryAgain, error.ServiceUnavailableError):
return "ChatGPT перегружен!"
except openai.OpenAIError as ex:
# если ошибка - это макс длина контекста, то возвращаем ответ с очищенным контекстом
if ex.code == "context_length_exceeded":
message_log = [system_message, message_log[-1]]
return gpt_answer()
else:
return "OpenAI токен не рабочий."
# Find the first response from the chatbot that has text in it (some responses may not have text) # Find the first response from the chatbot that has text in it (some responses may not have text)
for choice in response.choices: for choice in response.choices:
@ -138,10 +146,7 @@ def va_respond(voice: str):
# tts.va_speak("Что?") # tts.va_speak("Что?")
if fuzz.ratio(voice.join(voice.split()[:1]).strip(), "скажи") > 75: if fuzz.ratio(voice.join(voice.split()[:1]).strip(), "скажи") > 75:
if first_request: message_log.append({"role": "user", "content": voice})
message_log.append({"role": "user", "content": voice})
first_request = False
response = gpt_answer() response = gpt_answer()
message_log.append({"role": "assistant", "content": response}) message_log.append({"role": "assistant", "content": response})