minimalistic_talkbot.py 997 B

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