minimalistic_talkbot.py 1.1 KB

123456789101112131415161718192021
  1. import RealtimeSTT, RealtimeTTS
  2. import openai, os
  3. if __name__ == '__main__':
  4. openai.api_key = os.environ.get("OPENAI_API_KEY")
  5. character_prompt = 'Answer precise and short with the polite sarcasm of a butler.'
  6. stream = RealtimeTTS.TextToAudioStream(RealtimeTTS.AzureEngine(os.environ.get("AZURE_SPEECH_KEY"), os.environ.get("AZURE_SPEECH_REGION")), log_characters=True)
  7. recorder = RealtimeSTT.AudioToTextRecorder(model="medium")
  8. def generate(messages):
  9. for chunk in openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages, stream=True):
  10. if (text_chunk := chunk["choices"][0]["delta"].get("content")): yield text_chunk
  11. history = []
  12. while True:
  13. print("\n\nSpeak when ready")
  14. print(f'>>> {(user_text := recorder.text())}\n<<< ', end="", flush=True)
  15. history.append({'role': 'user', 'content': user_text})
  16. assistant_response = generate([{ 'role': 'system', 'content': character_prompt}] + history[-10:])
  17. stream.feed(assistant_response).play()
  18. history.append({'role': 'assistant', 'content': stream.text()})