Untitled Document
a
# para instalar todos os modulos
# pip install -r requirements.txt
import openai # pip install openai
import speech_recognition as sr # pip install SpeechRecognition
import whisper # pip install whisper-openai
import pyttsx3 # pip install pyttsx3
import os
# Initialize the API key
openai.api_key = "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"
# caso nao queira falar "assistente" ou "Chat GPT"
sem_palavra_ativadora = False
# printa o total de tokens por interacao
debug_custo = False
# print de algumas informacoes para debug
debugar = False
# define qual gerador de texto
# escolher_stt = "whisper"
escolher_stt = "google"
# escolhe entrada por texto ou voz
entrada_por_texto = False
# falar ou nao
falar = True
if entrada_por_texto:
sem_palavra_ativadora = True
def generate_answer(messages):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", ##
# model="gpt-3.5-turbo-0301", ## ateh 1 junho 2023
messages=messages,
max_tokens=1000,
temperature=0.5
)
return [response.choices[0].message.content, response.usage]
def talk(texto):
# falando
engine.say(texto)
engine.runAndWait()
engine.stop()
def save_file(dados):
with open(path + filename, "wb") as f:
f.write(dados)
f.flush()
# reconhecer
r = sr.Recognizer()
mic = sr.Microphone()
model = whisper.load_model("base")
# falar
engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('rate', 180) # velocidade 120 = lento
for indice, vozes in enumerate(voices): # listar vozes
print(indice, vozes.name)
voz = 1 # "IVONA_2_Ricardo_OEM"
engine.setProperty('voice', voices[voz].id)
mensagens = [{"role": "system", "content": "Você é um assistente gente boa. E meu nome é Bob!"}]
path = os.getcwd()
filename = "audio.wav"
print("Speak to Text", escolher_stt)
ajustar_ambiente_noise = True
while True:
text = ""
question = ""
if entrada_por_texto:
question = input("Perguntar pro ChatGPT (\"sair\"): ")
else:
# Ask a question
with mic as fonte:
if ajustar_ambiente_noise:
r.adjust_for_ambient_noise(fonte)
ajustar_ambiente_noise = False
print("Fale alguma coisa")
audio = r.listen(fonte)
print("Enviando para reconhecimento")
if escolher_stt == "google":
question = r.recognize_google(audio, language="pt-BR")
elif escolher_stt == "whisper":
save_file(audio.get_wav_data())
if escolher_stt == "whisper":
text = model.transcribe(path + filename, language='pt', fp16=False)
question = text["text"]
if ("esligar" in question and "assistente" in question) or question.startswith("sair"):
print(question, "Saindo.")
if falar:
talk("Desligando")
break
elif question == "":
print("No sound")
continue
elif question.startswith("Assistente") or question.startswith("assistente") or question.startswith(
"chat GPT") or sem_palavra_ativadora:
print("Me:", question)
mensagens.append({"role": "user", "content": str(question)})
answer = generate_answer(mensagens)
print("ChatGPT:", answer[0])
if debug_custo:
print("Cost:\n", answer[1])
mensagens.append({"role": "assistant", "content": answer[0]})
if falar:
talk(answer[0])
else:
print("No message")
continue
if debugar:
print("Mensages", mensagens, type(mensagens))
print("See ya!")