mj-new commited on
Commit
c378394
1 Parent(s): 56bfb5d

Added generation of prompts alpha

Browse files
Files changed (3) hide show
  1. app.py +4 -4
  2. generate_asr_prompts.py +76 -0
  3. 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 prompt_gpt(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,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 process_pipeline(audio):
155
  asr_out = transcribe(audio)
156
- gpt_out = prompt_gpt(asr_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(prompt_gpt, 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)
 
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.