Spaces:
Sleeping
Sleeping
mj-new
commited on
Commit
•
c378394
1
Parent(s):
56bfb5d
Added generation of prompts alpha
Browse files- app.py +4 -4
- generate_asr_prompts.py +76 -0
- prompts.txt +12 -0
app.py
CHANGED
@@ -125,7 +125,7 @@ def whisper_model_change(radio_whisper_model):
|
|
125 |
whisper_model = whisper.load_model(radio_whisper_model)
|
126 |
return(whisper_model)
|
127 |
|
128 |
-
def
|
129 |
#, role, template_prompt, template_answer):
|
130 |
#TODO add option to specify instruction
|
131 |
openai.api_key = api_key
|
@@ -151,9 +151,9 @@ def prompt_gpt(input_text, api_key, temperature):
|
|
151 |
#TODO save chat completion for future reuse
|
152 |
return reply
|
153 |
|
154 |
-
def
|
155 |
asr_out = transcribe(audio)
|
156 |
-
gpt_out =
|
157 |
tts_out = synthesize_speech(gpt_out)
|
158 |
return(tts_out)
|
159 |
|
@@ -345,7 +345,7 @@ with block:
|
|
345 |
# Events actions
|
346 |
button_save_audio_and_trans.click(save_recording_and_meta, inputs=[project_name, mic_recording, out_asr, language_code, spk_age, spk_accent, spk_city, spk_gender, spk_nativity], outputs=[])
|
347 |
button_transcribe.click(transcribe, inputs=[mic_recording, language_code, whisper_model,whisper_model_type], outputs=out_asr)
|
348 |
-
button_prompt_gpt.click(
|
349 |
button_synth_speech.click(synthesize_speech, inputs=[out_gpt, language_code], outputs=synth_recording)
|
350 |
|
351 |
radio_lang.change(fn=change_language, inputs=radio_lang, outputs=language_code)
|
|
|
125 |
whisper_model = whisper.load_model(radio_whisper_model)
|
126 |
return(whisper_model)
|
127 |
|
128 |
+
def prompt_gpt_assistant(input_text, api_key, temperature):
|
129 |
#, role, template_prompt, template_answer):
|
130 |
#TODO add option to specify instruction
|
131 |
openai.api_key = api_key
|
|
|
151 |
#TODO save chat completion for future reuse
|
152 |
return reply
|
153 |
|
154 |
+
def voicebot_pipeline(audio):
|
155 |
asr_out = transcribe(audio)
|
156 |
+
gpt_out = prompt_gpt_assistant(asr_out)
|
157 |
tts_out = synthesize_speech(gpt_out)
|
158 |
return(tts_out)
|
159 |
|
|
|
345 |
# Events actions
|
346 |
button_save_audio_and_trans.click(save_recording_and_meta, inputs=[project_name, mic_recording, out_asr, language_code, spk_age, spk_accent, spk_city, spk_gender, spk_nativity], outputs=[])
|
347 |
button_transcribe.click(transcribe, inputs=[mic_recording, language_code, whisper_model,whisper_model_type], outputs=out_asr)
|
348 |
+
button_prompt_gpt.click(prompt_gpt_assistant, inputs=[out_asr, openai_api_key, slider_temp], outputs=out_gpt)
|
349 |
button_synth_speech.click(synthesize_speech, inputs=[out_gpt, language_code], outputs=synth_recording)
|
350 |
|
351 |
radio_lang.change(fn=change_language, inputs=radio_lang, outputs=language_code)
|
generate_asr_prompts.py
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import openai
|
2 |
+
import os
|
3 |
+
|
4 |
+
openai.api_key = os.getenv("OPENAI_API_KEY")
|
5 |
+
|
6 |
+
def prompt_gpt_completion(input):
|
7 |
+
print("TODO")
|
8 |
+
|
9 |
+
# temperature = 0-1 -> controls randomness. 0 -> repetitive, deterministic 1-> random
|
10 |
+
# max_tokens = up to 2048 (or 4k shared between prompt and completion). One token is around 4 characters in English.
|
11 |
+
# top_p = controls diversity by nucleus sampling. If set to 0.5 only half of all likelihood-weighted options are considered
|
12 |
+
# frequency_penalty = penalize using frequently used words in the text generated so far
|
13 |
+
# presence_penalty = penalize using words already used in generated text
|
14 |
+
|
15 |
+
def prompt_gpt_asr_prompts(lang_code, domain, nr_of_prompts):
|
16 |
+
print(f"Generating {nr_of_prompts} prompts for lang_code: {lang_code} and domain: {domain}")
|
17 |
+
if(lang_code == "pl"):
|
18 |
+
prompt = f"""Jesteś lingwistą tworzącym zdania do korpusu nagrań mowy. Zdania, które tworzysz są poprawne językowo, zróżnicowane semantycznie oraz zbilansowane fonetycznie.\n
|
19 |
+
Twoim zadaniem jest napisanie okreśłonej liczby zdań przez użytkownika.
|
20 |
+
Zdania dot. określonej domeny/zagadnienia przez użytkownika.
|
21 |
+
Zdania mają postać pytań i odpowiedzi o wzrastającym poziomie trudności.
|
22 |
+
Pierwsze zdania dotyczą ogólnych zagadnień, kolejne stopniowo coraz trudniejszych.
|
23 |
+
Przykład:
|
24 |
+
Input: Wygeneruj 7 zdań dla domeny "brydż sportowy".
|
25 |
+
Output:
|
26 |
+
Q1: Co to jest brydż sportowy?
|
27 |
+
A1: To logiczna gra karciana, w której bierze udział czterech graczy tworzących dwie rywalizujące ze sobą pary.
|
28 |
+
Q2: Czy brydż to sport?
|
29 |
+
A2: Tak, brydż został oficjalnie przyjęty do Międzynarodowego Komitetu Olimpijskiego jako pełnoprawna dyscyplina sportowa.
|
30 |
+
Q3: Czy warto grać w brydża?
|
31 |
+
A3: Tak, 20 lat temu prof. Marian Cleeves Diamond wykazała, że gra w brydża zmniejsza ryzyko zachorowania na chorobę Alzheimera aż o 75 proc. Inne badania naukowe wykazały, że gra w brydża przynosi wymierne korzyści dla sprawności umysłowej i zdrowia mózgu u seniorów.
|
32 |
+
Q4: Co decyduje o sukcesie w brydżu?
|
33 |
+
A4: Umiejętności oraz sprawność umysłowa, a nie przypadek czy psychologiczne rozegranie przeciwnika jak w pokerze.
|
34 |
+
Q5: Jakie znane osoby grają w brydża?
|
35 |
+
A5: Bill Gates, Warren Buffett, Witold Bielecki, Renata Dancewicz, Zbigniew Boniek, Katarzyna Grochola
|
36 |
+
Q6: Jaki jest cel gry?
|
37 |
+
A6: Wygranie jak największej liczby lew.
|
38 |
+
Q7: Co to jest lewa?
|
39 |
+
A7: To cztery karty, umieszczone na stoliku zgodnie z ruchem wskazówek zegara. Lewę wygrywa gracz, którego karta miała najwyższą wartość. Gracz, który zdobył lewę zaczyna następna turę, czyli rzuca kartę jako pierwszy.
|
40 |
+
|
41 |
+
Wygeneruj {nr_of_prompts} zdań dla \"{domain}\" wedle wskazanego wzorca"""
|
42 |
+
|
43 |
+
elif(lang_code == "en"):
|
44 |
+
prompt = ""
|
45 |
+
else:
|
46 |
+
print("unknown language!")
|
47 |
+
return
|
48 |
+
|
49 |
+
response = openai.Completion.create(
|
50 |
+
model="text-davinci-003",
|
51 |
+
prompt=prompt,
|
52 |
+
temperature=0.3,
|
53 |
+
max_tokens=2048,
|
54 |
+
top_p=1,
|
55 |
+
frequency_penalty=0.5,
|
56 |
+
presence_penalty=0,
|
57 |
+
stop=["You:"]
|
58 |
+
)
|
59 |
+
return(response)
|
60 |
+
|
61 |
+
def save_data_to_txt(data, file_path):
|
62 |
+
with open(file_path, 'w') as file:
|
63 |
+
file.write(data)
|
64 |
+
print(f"The data has been saved to {file_path} successfully.")
|
65 |
+
|
66 |
+
lang_code = "pl"
|
67 |
+
domain = "nauka gry w brydża sportowego dla początkujących"
|
68 |
+
nr_of_prompts = 5
|
69 |
+
response=prompt_gpt_asr_prompts(lang_code, domain, nr_of_prompts)
|
70 |
+
prompts = response.choices[0].text
|
71 |
+
|
72 |
+
# Example usage
|
73 |
+
save_data_to_txt(prompts, 'prompts.txt')
|
74 |
+
|
75 |
+
|
76 |
+
|
prompts.txt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
:
|
2 |
+
|
3 |
+
Q1: Czym jest brydż sportowy?
|
4 |
+
A1: To logiczna gra karciana, w której bierze udział czterech graczy tworzących dwie rywalizujące ze sobą pary.
|
5 |
+
Q2: Jakie są podstawowe zasady gry w brydża?
|
6 |
+
A2: Zasady gry w brydża są dość skomplikowane, ale dla początkujących najważniejsze to zrozumienie znaczenia poszczególnych kart oraz ich wartości punktowej.
|
7 |
+
Q3: Jakie są najważniejsze umiejętności do opanowania przy nauce gry w brydża?
|
8 |
+
A3: Najważniejsze umiejętności to odpowiednia strategia, planowanie i liczenie punktów.
|
9 |
+
Q4: Jak można ćwiczyć swoje umiejętności w grze w brydża?
|
10 |
+
A4: Można ćwiczyć poprzez granie z innymi ludźmi, oglądanie profesjonalnych meczów lub poprzez samodzielne rozgrywanie partii na komputerze.
|
11 |
+
Q5: Czy istnieje jakiś sposób na szybkie opanowanie gry w brydża?
|
12 |
+
A5: Tak, istnieje kilka technik i strategii, które można stosować podczas gry. Ważne jest również regularne ćwiczenie i obserwowanie innych graczy.
|