File size: 1,756 Bytes
59cd50e
8683458
d086a4b
 
95a9653
d62b28a
95a9653
905de4d
59cd50e
905de4d
17a1355
4e0ef54
d086a4b
c8796f6
 
 
 
10e7b48
b2daea4
95a9653
10e7b48
59cd50e
c8796f6
10e7b48
 
59cd50e
10e7b48
 
 
 
6f6ee84
c8796f6
7132773
10e7b48
d086a4b
10e7b48
7132773
10e7b48
d62b28a
59cd50e
9569a05
 
c8796f6
d62b28a
 
 
c8796f6
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import openai
import os
import azure.cognitiveservices.speech as speechsdk

LANGUAGE = "nl"
AUDIO_FILE_NAME = "audio_response.wav"

openai.api_key = os.environ['OPEN_AI_KEY']

speech_config = speechsdk.SpeechConfig(subscription=os.environ['AZURE_SPEECH_KEY'], region="westeurope")
speech_config.speech_synthesis_voice_name = "nl-NL-ColetteNeural"
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=None)

context = [{"role": "system", "content": 'Je bent een slimme en behulpzame gesprekspartner. \
                                          Antwoord beknopt en ter zake.\
                                          Vermeld niet dat je een AI of een soort service bent.'}]

def transcribe(model: str, audio: str):
    audio_file = open(audio, "rb")
    transcript = openai.Audio.transcribe(model, audio_file, language=LANGUAGE)
    return transcript

def gen_response(model: str):
    response = openai.ChatCompletion.create(model=model, messages=context)
    return response["choices"][0]["message"]

def gen_voice(response, response_filename):
    reponse_audio = speech_synthesizer.speak_text_async(response['content']).get()
    stream = speechsdk.AudioDataStream(reponse_audio)
    stream.save_to_wav_file(response_filename)
    
def respond(audio:str):
    transcript = transcribe("whisper-1", audio)
    context.append({"role": "user", "content": transcript['text']})

    response = gen_response("gpt-3.5-turbo", context)
    context.append(response)
    
    gen_voice(response, AUDIO_FILE_NAME)

    return AUDIO_FILE_NAME

def transcript():
    transcript = ""
    for m in context:
        if m["role"] != "system":
            transcript += m["role"] + " : " + m["content"] + "\n\n"

    return transcript