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