pwenker commited on
Commit
2a67a0f
β€’
1 Parent(s): 8a8d8f4

chore: Minor improvements and fixes

Browse files
README.md CHANGED
@@ -12,6 +12,8 @@ app_file: src/pronunciation_trainer/app.py
12
  This repository/app showcases how a [phoneme-based pronunciation trainer](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
13
  (including personalized LLM-based feedback) overcomes the limitations of a [grapheme-based approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
14
 
 
 
15
  | Feature | Grapheme-Based Solution | Phoneme-Based Solution |
16
  |-----------------------------------|----------------------------------------------------------|---------------------------------------------------------|
17
  | **Input Type** | Text transcriptions of speech | Audio files and phoneme transcriptions |
@@ -30,13 +32,13 @@ This repository/app showcases how a [phoneme-based pronunciation trainer](https:
30
  ## Quickstart πŸš€
31
 
32
  ### πŸ‘‰ Click here to try out the app directly:
33
- [**Pronunciation Trainer App**](https://pwenker-pronunciation_trainer.hf.space/)
34
 
35
  ### πŸ” Inspect the code at:
36
- - **GitHub:** [pwenker/pronunciation_trainer](https://github.com/pwenker/pronounciation_trainer)
37
- - **Hugging Face Spaces:** [pwenker/pronunciation_trainer](https://huggingface.co/spaces/pwenker/pronounciation_trainer)
38
 
39
- ### πŸ“š Read about the pronounciation trainer:
40
 
41
  1. [Grapheme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
42
  2. [Phoneme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
 
12
  This repository/app showcases how a [phoneme-based pronunciation trainer](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
13
  (including personalized LLM-based feedback) overcomes the limitations of a [grapheme-based approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
14
 
15
+ For convenience, you find a feature comparison overview of the two solutions below:
16
+
17
  | Feature | Grapheme-Based Solution | Phoneme-Based Solution |
18
  |-----------------------------------|----------------------------------------------------------|---------------------------------------------------------|
19
  | **Input Type** | Text transcriptions of speech | Audio files and phoneme transcriptions |
 
32
  ## Quickstart πŸš€
33
 
34
  ### πŸ‘‰ Click here to try out the app directly:
35
+ [**Pronunciation Trainer App**](https://pwenker-pronunciation-trainer.hf.space/)
36
 
37
  ### πŸ” Inspect the code at:
38
+ - **GitHub:** [pwenker/pronunciation_trainer](https://github.com/pwenker/pronunciation_trainer)
39
+ - **Hugging Face Spaces:** [pwenker/pronunciation_trainer](https://huggingface.co/spaces/pwenker/pronunciation_trainer)
40
 
41
+ ### πŸ“š Read about the pronunciation trainer:
42
 
43
  1. [Grapheme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
44
  2. [Phoneme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
no_header_readme.md CHANGED
@@ -3,6 +3,8 @@
3
  This repository/app showcases how a [phoneme-based pronunciation trainer](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
4
  (including personalized LLM-based feedback) overcomes the limitations of a [grapheme-based approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
5
 
 
 
6
  | Feature | Grapheme-Based Solution | Phoneme-Based Solution |
7
  |-----------------------------------|----------------------------------------------------------|---------------------------------------------------------|
8
  | **Input Type** | Text transcriptions of speech | Audio files and phoneme transcriptions |
@@ -21,13 +23,13 @@ This repository/app showcases how a [phoneme-based pronunciation trainer](https:
21
  ## Quickstart πŸš€
22
 
23
  ### πŸ‘‰ Click here to try out the app directly:
24
- [**Pronunciation Trainer App**](https://pwenker-pronunciation_trainer.hf.space/)
25
 
26
  ### πŸ” Inspect the code at:
27
- - **GitHub:** [pwenker/pronunciation_trainer](https://github.com/pwenker/pronounciation_trainer)
28
- - **Hugging Face Spaces:** [pwenker/pronunciation_trainer](https://huggingface.co/spaces/pwenker/pronounciation_trainer)
29
 
30
- ### πŸ“š Read about the pronounciation trainer:
31
 
32
  1. [Grapheme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
33
  2. [Phoneme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
 
3
  This repository/app showcases how a [phoneme-based pronunciation trainer](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
4
  (including personalized LLM-based feedback) overcomes the limitations of a [grapheme-based approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
5
 
6
+ For convenience, you find a feature comparison overview of the two solutions below:
7
+
8
  | Feature | Grapheme-Based Solution | Phoneme-Based Solution |
9
  |-----------------------------------|----------------------------------------------------------|---------------------------------------------------------|
10
  | **Input Type** | Text transcriptions of speech | Audio files and phoneme transcriptions |
 
23
  ## Quickstart πŸš€
24
 
25
  ### πŸ‘‰ Click here to try out the app directly:
26
+ [**Pronunciation Trainer App**](https://pwenker-pronunciation-trainer.hf.space/)
27
 
28
  ### πŸ” Inspect the code at:
29
+ - **GitHub:** [pwenker/pronunciation_trainer](https://github.com/pwenker/pronunciation_trainer)
30
+ - **Hugging Face Spaces:** [pwenker/pronunciation_trainer](https://huggingface.co/spaces/pwenker/pronunciation_trainer)
31
 
32
+ ### πŸ“š Read about the pronunciation trainer:
33
 
34
  1. [Grapheme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/grapheme_based_solution.md)
35
  2. [Phoneme-based Approach](https://github.com/pwenker/pronunciation_trainer/blob/main/docs/phoneme_based_solution.md)
requirements-dev.lock CHANGED
@@ -5,143 +5,406 @@
5
  # pre: false
6
  # features: []
7
  # all-features: false
 
8
 
9
  -e file:.
10
  aiofiles==23.2.1
 
11
  aiohttp==3.9.5
 
 
12
  aiosignal==1.3.1
 
13
  altair==5.3.0
 
14
  annotated-types==0.6.0
 
15
  anyio==4.3.0
 
 
 
 
 
 
 
16
  attrs==23.2.0
 
 
 
 
 
 
17
  babel==2.15.0
 
18
  bibtexparser==2.0.0b7
 
19
  certifi==2024.2.2
 
 
 
20
  charset-normalizer==3.3.2
 
21
  click==8.1.7
 
 
22
  clldutils==3.22.2
 
23
  colorama==0.4.6
 
24
  colorlog==6.8.2
 
25
  contourpy==1.2.1
 
26
  csvw==3.3.0
 
27
  cycler==0.12.1
 
28
  dataclasses-json==0.6.5
 
 
29
  distro==1.9.0
 
30
  dlinfo==1.2.1
 
31
  dnspython==2.6.1
 
32
  email-validator==2.1.1
 
 
 
33
  fastapi==0.111.0
 
 
34
  fastapi-cli==0.0.3
 
35
  ffmpy==0.3.2
 
36
  filelock==3.14.0
 
 
 
 
37
  fonttools==4.51.0
 
38
  frozenlist==1.4.1
 
 
39
  fsspec==2024.3.1
 
 
 
40
  gradio==4.29.0
 
41
  gradio-client==0.16.1
 
42
  greenlet==3.0.3
 
43
  h11==0.14.0
 
 
44
  httpcore==1.0.5
 
45
  httptools==0.6.1
 
46
  httpx==0.27.0
 
 
 
 
47
  huggingface-hub==0.23.0
 
 
 
 
48
  idna==3.7
 
 
 
 
 
49
  importlib-resources==6.4.0
 
50
  isodate==0.6.1
 
 
51
  jinja2==3.1.4
 
 
 
 
52
  joblib==1.4.2
 
53
  jsonpatch==1.33
 
54
  jsonpointer==2.4
 
55
  jsonschema==4.22.0
 
 
56
  jsonschema-specifications==2023.12.1
 
57
  kiwisolver==1.4.5
 
58
  langchain==0.1.19
 
59
  langchain-community==0.0.38
 
60
  langchain-core==0.1.52
 
 
 
 
61
  langchain-openai==0.1.6
 
62
  langchain-text-splitters==0.0.1
 
63
  langsmith==0.1.56
 
 
 
64
  language-tags==1.2.0
 
65
  lxml==5.2.1
 
66
  markdown==3.6
 
67
  markdown-it-py==3.0.0
 
68
  markupsafe==2.1.5
 
 
 
69
  marshmallow==3.21.2
 
70
  matplotlib==3.8.4
 
71
  mdurl==0.1.2
 
72
  mpmath==1.3.0
 
73
  multidict==6.0.5
 
 
74
  mypy-extensions==1.0.0
 
75
  networkx==3.3
 
76
  numpy==1.26.4
 
 
 
 
 
 
 
 
77
  nvidia-cublas-cu12==12.1.3.1
 
 
 
78
  nvidia-cuda-cupti-cu12==12.1.105
 
79
  nvidia-cuda-nvrtc-cu12==12.1.105
 
80
  nvidia-cuda-runtime-cu12==12.1.105
 
81
  nvidia-cudnn-cu12==8.9.2.26
 
82
  nvidia-cufft-cu12==11.0.2.54
 
83
  nvidia-curand-cu12==10.3.2.106
 
84
  nvidia-cusolver-cu12==11.4.5.107
 
85
  nvidia-cusparse-cu12==12.1.0.106
 
 
86
  nvidia-nccl-cu12==2.20.5
 
87
  nvidia-nvjitlink-cu12==12.4.127
 
 
88
  nvidia-nvtx-cu12==12.1.105
 
89
  openai==1.28.0
 
90
  orjson==3.10.3
 
 
 
91
  packaging==23.2
 
 
 
 
 
 
 
 
92
  pandas==2.2.2
 
 
93
  phonemizer==3.2.1
 
94
  pillow==10.3.0
 
 
95
  pydantic==2.7.1
 
 
 
 
 
 
96
  pydantic-core==2.18.2
 
97
  pydub==0.25.1
 
98
  pygments==2.18.0
 
99
  pylatexenc==2.10
 
 
100
  pyparsing==3.1.2
 
 
101
  python-dateutil==2.9.0.post0
 
 
 
 
102
  python-dotenv==1.0.1
 
103
  python-multipart==0.0.9
 
 
104
  pytz==2024.1
 
105
  pyyaml==6.0.1
 
 
 
 
 
 
 
106
  rdflib==7.0.0
 
107
  referencing==0.35.1
 
 
108
  regex==2024.5.10
 
 
 
109
  requests==2.31.0
 
 
 
 
 
 
 
110
  rfc3986==1.5.0
 
111
  rich==13.7.1
 
112
  rpds-py==0.18.1
 
 
113
  ruff==0.4.4
 
114
  safetensors==0.4.3
 
115
  segments==2.2.1
 
116
  semantic-version==2.10.0
 
117
  shellingham==1.5.4
 
118
  six==1.16.0
 
 
119
  sniffio==1.3.1
 
 
 
120
  sqlalchemy==2.0.30
 
 
121
  starlette==0.37.2
 
122
  sympy==1.12
 
123
  tabulate==0.9.0
 
124
  tenacity==8.3.0
 
 
 
125
  tiktoken==0.6.0
 
126
  tokenizers==0.19.1
 
127
  tomlkit==0.12.0
 
128
  toolz==0.12.1
 
129
  torch==2.3.0
 
 
130
  torchaudio==2.3.0
 
131
  tqdm==4.66.4
 
 
 
132
  transformers==4.40.2
 
133
  triton==2.3.0
 
134
  typer==0.12.3
 
 
135
  typing-extensions==4.11.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  typing-inspect==0.9.0
 
137
  tzdata==2024.1
 
138
  ujson==5.9.0
 
139
  uritemplate==4.1.1
 
140
  urllib3==2.2.1
 
 
141
  uvicorn==0.29.0
 
 
 
142
  uvloop==0.19.0
 
143
  watchfiles==0.21.0
 
144
  websockets==11.0.3
 
 
145
  yarl==1.9.4
146
- # The following packages are considered to be unsafe in a requirements file:
147
  setuptools==69.5.1
 
 
5
  # pre: false
6
  # features: []
7
  # all-features: false
8
+ # with-sources: false
9
 
10
  -e file:.
11
  aiofiles==23.2.1
12
+ # via gradio
13
  aiohttp==3.9.5
14
+ # via langchain
15
+ # via langchain-community
16
  aiosignal==1.3.1
17
+ # via aiohttp
18
  altair==5.3.0
19
+ # via gradio
20
  annotated-types==0.6.0
21
+ # via pydantic
22
  anyio==4.3.0
23
+ # via httpx
24
+ # via openai
25
+ # via starlette
26
+ # via watchfiles
27
+ async-timeout==4.0.3
28
+ # via aiohttp
29
+ # via langchain
30
  attrs==23.2.0
31
+ # via aiohttp
32
+ # via clldutils
33
+ # via csvw
34
+ # via jsonschema
35
+ # via phonemizer
36
+ # via referencing
37
  babel==2.15.0
38
+ # via csvw
39
  bibtexparser==2.0.0b7
40
+ # via clldutils
41
  certifi==2024.2.2
42
+ # via httpcore
43
+ # via httpx
44
+ # via requests
45
  charset-normalizer==3.3.2
46
+ # via requests
47
  click==8.1.7
48
+ # via typer
49
+ # via uvicorn
50
  clldutils==3.22.2
51
+ # via segments
52
  colorama==0.4.6
53
+ # via csvw
54
  colorlog==6.8.2
55
+ # via clldutils
56
  contourpy==1.2.1
57
+ # via matplotlib
58
  csvw==3.3.0
59
+ # via segments
60
  cycler==0.12.1
61
+ # via matplotlib
62
  dataclasses-json==0.6.5
63
+ # via langchain
64
+ # via langchain-community
65
  distro==1.9.0
66
+ # via openai
67
  dlinfo==1.2.1
68
+ # via phonemizer
69
  dnspython==2.6.1
70
+ # via email-validator
71
  email-validator==2.1.1
72
+ # via fastapi
73
+ exceptiongroup==1.2.1
74
+ # via anyio
75
  fastapi==0.111.0
76
+ # via fastapi-cli
77
+ # via gradio
78
  fastapi-cli==0.0.3
79
+ # via fastapi
80
  ffmpy==0.3.2
81
+ # via gradio
82
  filelock==3.14.0
83
+ # via huggingface-hub
84
+ # via torch
85
+ # via transformers
86
+ # via triton
87
  fonttools==4.51.0
88
+ # via matplotlib
89
  frozenlist==1.4.1
90
+ # via aiohttp
91
+ # via aiosignal
92
  fsspec==2024.3.1
93
+ # via gradio-client
94
+ # via huggingface-hub
95
+ # via torch
96
  gradio==4.29.0
97
+ # via pronunciation-trainer
98
  gradio-client==0.16.1
99
+ # via gradio
100
  greenlet==3.0.3
101
+ # via sqlalchemy
102
  h11==0.14.0
103
+ # via httpcore
104
+ # via uvicorn
105
  httpcore==1.0.5
106
+ # via httpx
107
  httptools==0.6.1
108
+ # via uvicorn
109
  httpx==0.27.0
110
+ # via fastapi
111
+ # via gradio
112
+ # via gradio-client
113
+ # via openai
114
  huggingface-hub==0.23.0
115
+ # via gradio
116
+ # via gradio-client
117
+ # via tokenizers
118
+ # via transformers
119
  idna==3.7
120
+ # via anyio
121
+ # via email-validator
122
+ # via httpx
123
+ # via requests
124
+ # via yarl
125
  importlib-resources==6.4.0
126
+ # via gradio
127
  isodate==0.6.1
128
+ # via csvw
129
+ # via rdflib
130
  jinja2==3.1.4
131
+ # via altair
132
+ # via fastapi
133
+ # via gradio
134
+ # via torch
135
  joblib==1.4.2
136
+ # via phonemizer
137
  jsonpatch==1.33
138
+ # via langchain-core
139
  jsonpointer==2.4
140
+ # via jsonpatch
141
  jsonschema==4.22.0
142
+ # via altair
143
+ # via csvw
144
  jsonschema-specifications==2023.12.1
145
+ # via jsonschema
146
  kiwisolver==1.4.5
147
+ # via matplotlib
148
  langchain==0.1.19
149
+ # via pronunciation-trainer
150
  langchain-community==0.0.38
151
+ # via langchain
152
  langchain-core==0.1.52
153
+ # via langchain
154
+ # via langchain-community
155
+ # via langchain-openai
156
+ # via langchain-text-splitters
157
  langchain-openai==0.1.6
158
+ # via pronunciation-trainer
159
  langchain-text-splitters==0.0.1
160
+ # via langchain
161
  langsmith==0.1.56
162
+ # via langchain
163
+ # via langchain-community
164
+ # via langchain-core
165
  language-tags==1.2.0
166
+ # via csvw
167
  lxml==5.2.1
168
+ # via clldutils
169
  markdown==3.6
170
+ # via clldutils
171
  markdown-it-py==3.0.0
172
+ # via rich
173
  markupsafe==2.1.5
174
+ # via clldutils
175
+ # via gradio
176
+ # via jinja2
177
  marshmallow==3.21.2
178
+ # via dataclasses-json
179
  matplotlib==3.8.4
180
+ # via gradio
181
  mdurl==0.1.2
182
+ # via markdown-it-py
183
  mpmath==1.3.0
184
+ # via sympy
185
  multidict==6.0.5
186
+ # via aiohttp
187
+ # via yarl
188
  mypy-extensions==1.0.0
189
+ # via typing-inspect
190
  networkx==3.3
191
+ # via torch
192
  numpy==1.26.4
193
+ # via altair
194
+ # via contourpy
195
+ # via gradio
196
+ # via langchain
197
+ # via langchain-community
198
+ # via matplotlib
199
+ # via pandas
200
+ # via transformers
201
  nvidia-cublas-cu12==12.1.3.1
202
+ # via nvidia-cudnn-cu12
203
+ # via nvidia-cusolver-cu12
204
+ # via torch
205
  nvidia-cuda-cupti-cu12==12.1.105
206
+ # via torch
207
  nvidia-cuda-nvrtc-cu12==12.1.105
208
+ # via torch
209
  nvidia-cuda-runtime-cu12==12.1.105
210
+ # via torch
211
  nvidia-cudnn-cu12==8.9.2.26
212
+ # via torch
213
  nvidia-cufft-cu12==11.0.2.54
214
+ # via torch
215
  nvidia-curand-cu12==10.3.2.106
216
+ # via torch
217
  nvidia-cusolver-cu12==11.4.5.107
218
+ # via torch
219
  nvidia-cusparse-cu12==12.1.0.106
220
+ # via nvidia-cusolver-cu12
221
+ # via torch
222
  nvidia-nccl-cu12==2.20.5
223
+ # via torch
224
  nvidia-nvjitlink-cu12==12.4.127
225
+ # via nvidia-cusolver-cu12
226
+ # via nvidia-cusparse-cu12
227
  nvidia-nvtx-cu12==12.1.105
228
+ # via torch
229
  openai==1.28.0
230
+ # via langchain-openai
231
  orjson==3.10.3
232
+ # via fastapi
233
+ # via gradio
234
+ # via langsmith
235
  packaging==23.2
236
+ # via altair
237
+ # via gradio
238
+ # via gradio-client
239
+ # via huggingface-hub
240
+ # via langchain-core
241
+ # via marshmallow
242
+ # via matplotlib
243
+ # via transformers
244
  pandas==2.2.2
245
+ # via altair
246
+ # via gradio
247
  phonemizer==3.2.1
248
+ # via pronunciation-trainer
249
  pillow==10.3.0
250
+ # via gradio
251
+ # via matplotlib
252
  pydantic==2.7.1
253
+ # via fastapi
254
+ # via gradio
255
+ # via langchain
256
+ # via langchain-core
257
+ # via langsmith
258
+ # via openai
259
  pydantic-core==2.18.2
260
+ # via pydantic
261
  pydub==0.25.1
262
+ # via gradio
263
  pygments==2.18.0
264
+ # via rich
265
  pylatexenc==2.10
266
+ # via bibtexparser
267
+ # via clldutils
268
  pyparsing==3.1.2
269
+ # via matplotlib
270
+ # via rdflib
271
  python-dateutil==2.9.0.post0
272
+ # via clldutils
273
+ # via csvw
274
+ # via matplotlib
275
+ # via pandas
276
  python-dotenv==1.0.1
277
+ # via uvicorn
278
  python-multipart==0.0.9
279
+ # via fastapi
280
+ # via gradio
281
  pytz==2024.1
282
+ # via pandas
283
  pyyaml==6.0.1
284
+ # via gradio
285
+ # via huggingface-hub
286
+ # via langchain
287
+ # via langchain-community
288
+ # via langchain-core
289
+ # via transformers
290
+ # via uvicorn
291
  rdflib==7.0.0
292
+ # via csvw
293
  referencing==0.35.1
294
+ # via jsonschema
295
+ # via jsonschema-specifications
296
  regex==2024.5.10
297
+ # via segments
298
+ # via tiktoken
299
+ # via transformers
300
  requests==2.31.0
301
+ # via csvw
302
+ # via huggingface-hub
303
+ # via langchain
304
+ # via langchain-community
305
+ # via langsmith
306
+ # via tiktoken
307
+ # via transformers
308
  rfc3986==1.5.0
309
+ # via csvw
310
  rich==13.7.1
311
+ # via typer
312
  rpds-py==0.18.1
313
+ # via jsonschema
314
+ # via referencing
315
  ruff==0.4.4
316
+ # via gradio
317
  safetensors==0.4.3
318
+ # via transformers
319
  segments==2.2.1
320
+ # via phonemizer
321
  semantic-version==2.10.0
322
+ # via gradio
323
  shellingham==1.5.4
324
+ # via typer
325
  six==1.16.0
326
+ # via isodate
327
+ # via python-dateutil
328
  sniffio==1.3.1
329
+ # via anyio
330
+ # via httpx
331
+ # via openai
332
  sqlalchemy==2.0.30
333
+ # via langchain
334
+ # via langchain-community
335
  starlette==0.37.2
336
+ # via fastapi
337
  sympy==1.12
338
+ # via torch
339
  tabulate==0.9.0
340
+ # via clldutils
341
  tenacity==8.3.0
342
+ # via langchain
343
+ # via langchain-community
344
+ # via langchain-core
345
  tiktoken==0.6.0
346
+ # via langchain-openai
347
  tokenizers==0.19.1
348
+ # via transformers
349
  tomlkit==0.12.0
350
+ # via gradio
351
  toolz==0.12.1
352
+ # via altair
353
  torch==2.3.0
354
+ # via pronunciation-trainer
355
+ # via torchaudio
356
  torchaudio==2.3.0
357
+ # via pronunciation-trainer
358
  tqdm==4.66.4
359
+ # via huggingface-hub
360
+ # via openai
361
+ # via transformers
362
  transformers==4.40.2
363
+ # via pronunciation-trainer
364
  triton==2.3.0
365
+ # via torch
366
  typer==0.12.3
367
+ # via fastapi-cli
368
+ # via gradio
369
  typing-extensions==4.11.0
370
+ # via altair
371
+ # via anyio
372
+ # via fastapi
373
+ # via gradio
374
+ # via gradio-client
375
+ # via huggingface-hub
376
+ # via openai
377
+ # via phonemizer
378
+ # via pydantic
379
+ # via pydantic-core
380
+ # via sqlalchemy
381
+ # via torch
382
+ # via typer
383
+ # via typing-inspect
384
+ # via uvicorn
385
  typing-inspect==0.9.0
386
+ # via dataclasses-json
387
  tzdata==2024.1
388
+ # via pandas
389
  ujson==5.9.0
390
+ # via fastapi
391
  uritemplate==4.1.1
392
+ # via csvw
393
  urllib3==2.2.1
394
+ # via gradio
395
+ # via requests
396
  uvicorn==0.29.0
397
+ # via fastapi
398
+ # via fastapi-cli
399
+ # via gradio
400
  uvloop==0.19.0
401
+ # via uvicorn
402
  watchfiles==0.21.0
403
+ # via uvicorn
404
  websockets==11.0.3
405
+ # via gradio-client
406
+ # via uvicorn
407
  yarl==1.9.4
408
+ # via aiohttp
409
  setuptools==69.5.1
410
+ # via pronunciation-trainer
requirements.lock CHANGED
@@ -5,143 +5,406 @@
5
  # pre: false
6
  # features: []
7
  # all-features: false
 
8
 
9
  -e file:.
10
  aiofiles==23.2.1
 
11
  aiohttp==3.9.5
 
 
12
  aiosignal==1.3.1
 
13
  altair==5.3.0
 
14
  annotated-types==0.6.0
 
15
  anyio==4.3.0
 
 
 
 
 
 
 
16
  attrs==23.2.0
 
 
 
 
 
 
17
  babel==2.15.0
 
18
  bibtexparser==2.0.0b7
 
19
  certifi==2024.2.2
 
 
 
20
  charset-normalizer==3.3.2
 
21
  click==8.1.7
 
 
22
  clldutils==3.22.2
 
23
  colorama==0.4.6
 
24
  colorlog==6.8.2
 
25
  contourpy==1.2.1
 
26
  csvw==3.3.0
 
27
  cycler==0.12.1
 
28
  dataclasses-json==0.6.5
 
 
29
  distro==1.9.0
 
30
  dlinfo==1.2.1
 
31
  dnspython==2.6.1
 
32
  email-validator==2.1.1
 
 
 
33
  fastapi==0.111.0
 
 
34
  fastapi-cli==0.0.3
 
35
  ffmpy==0.3.2
 
36
  filelock==3.14.0
 
 
 
 
37
  fonttools==4.51.0
 
38
  frozenlist==1.4.1
 
 
39
  fsspec==2024.3.1
 
 
 
40
  gradio==4.29.0
 
41
  gradio-client==0.16.1
 
42
  greenlet==3.0.3
 
43
  h11==0.14.0
 
 
44
  httpcore==1.0.5
 
45
  httptools==0.6.1
 
46
  httpx==0.27.0
 
 
 
 
47
  huggingface-hub==0.23.0
 
 
 
 
48
  idna==3.7
 
 
 
 
 
49
  importlib-resources==6.4.0
 
50
  isodate==0.6.1
 
 
51
  jinja2==3.1.4
 
 
 
 
52
  joblib==1.4.2
 
53
  jsonpatch==1.33
 
54
  jsonpointer==2.4
 
55
  jsonschema==4.22.0
 
 
56
  jsonschema-specifications==2023.12.1
 
57
  kiwisolver==1.4.5
 
58
  langchain==0.1.19
 
59
  langchain-community==0.0.38
 
60
  langchain-core==0.1.52
 
 
 
 
61
  langchain-openai==0.1.6
 
62
  langchain-text-splitters==0.0.1
 
63
  langsmith==0.1.56
 
 
 
64
  language-tags==1.2.0
 
65
  lxml==5.2.1
 
66
  markdown==3.6
 
67
  markdown-it-py==3.0.0
 
68
  markupsafe==2.1.5
 
 
 
69
  marshmallow==3.21.2
 
70
  matplotlib==3.8.4
 
71
  mdurl==0.1.2
 
72
  mpmath==1.3.0
 
73
  multidict==6.0.5
 
 
74
  mypy-extensions==1.0.0
 
75
  networkx==3.3
 
76
  numpy==1.26.4
 
 
 
 
 
 
 
 
77
  nvidia-cublas-cu12==12.1.3.1
 
 
 
78
  nvidia-cuda-cupti-cu12==12.1.105
 
79
  nvidia-cuda-nvrtc-cu12==12.1.105
 
80
  nvidia-cuda-runtime-cu12==12.1.105
 
81
  nvidia-cudnn-cu12==8.9.2.26
 
82
  nvidia-cufft-cu12==11.0.2.54
 
83
  nvidia-curand-cu12==10.3.2.106
 
84
  nvidia-cusolver-cu12==11.4.5.107
 
85
  nvidia-cusparse-cu12==12.1.0.106
 
 
86
  nvidia-nccl-cu12==2.20.5
 
87
  nvidia-nvjitlink-cu12==12.4.127
 
 
88
  nvidia-nvtx-cu12==12.1.105
 
89
  openai==1.28.0
 
90
  orjson==3.10.3
 
 
 
91
  packaging==23.2
 
 
 
 
 
 
 
 
92
  pandas==2.2.2
 
 
93
  phonemizer==3.2.1
 
94
  pillow==10.3.0
 
 
95
  pydantic==2.7.1
 
 
 
 
 
 
96
  pydantic-core==2.18.2
 
97
  pydub==0.25.1
 
98
  pygments==2.18.0
 
99
  pylatexenc==2.10
 
 
100
  pyparsing==3.1.2
 
 
101
  python-dateutil==2.9.0.post0
 
 
 
 
102
  python-dotenv==1.0.1
 
103
  python-multipart==0.0.9
 
 
104
  pytz==2024.1
 
105
  pyyaml==6.0.1
 
 
 
 
 
 
 
106
  rdflib==7.0.0
 
107
  referencing==0.35.1
 
 
108
  regex==2024.5.10
 
 
 
109
  requests==2.31.0
 
 
 
 
 
 
 
110
  rfc3986==1.5.0
 
111
  rich==13.7.1
 
112
  rpds-py==0.18.1
 
 
113
  ruff==0.4.4
 
114
  safetensors==0.4.3
 
115
  segments==2.2.1
 
116
  semantic-version==2.10.0
 
117
  shellingham==1.5.4
 
118
  six==1.16.0
 
 
119
  sniffio==1.3.1
 
 
 
120
  sqlalchemy==2.0.30
 
 
121
  starlette==0.37.2
 
122
  sympy==1.12
 
123
  tabulate==0.9.0
 
124
  tenacity==8.3.0
 
 
 
125
  tiktoken==0.6.0
 
126
  tokenizers==0.19.1
 
127
  tomlkit==0.12.0
 
128
  toolz==0.12.1
 
129
  torch==2.3.0
 
 
130
  torchaudio==2.3.0
 
131
  tqdm==4.66.4
 
 
 
132
  transformers==4.40.2
 
133
  triton==2.3.0
 
134
  typer==0.12.3
 
 
135
  typing-extensions==4.11.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  typing-inspect==0.9.0
 
137
  tzdata==2024.1
 
138
  ujson==5.9.0
 
139
  uritemplate==4.1.1
 
140
  urllib3==2.2.1
 
 
141
  uvicorn==0.29.0
 
 
 
142
  uvloop==0.19.0
 
143
  watchfiles==0.21.0
 
144
  websockets==11.0.3
 
 
145
  yarl==1.9.4
146
- # The following packages are considered to be unsafe in a requirements file:
147
  setuptools==69.5.1
 
 
5
  # pre: false
6
  # features: []
7
  # all-features: false
8
+ # with-sources: false
9
 
10
  -e file:.
11
  aiofiles==23.2.1
12
+ # via gradio
13
  aiohttp==3.9.5
14
+ # via langchain
15
+ # via langchain-community
16
  aiosignal==1.3.1
17
+ # via aiohttp
18
  altair==5.3.0
19
+ # via gradio
20
  annotated-types==0.6.0
21
+ # via pydantic
22
  anyio==4.3.0
23
+ # via httpx
24
+ # via openai
25
+ # via starlette
26
+ # via watchfiles
27
+ async-timeout==4.0.3
28
+ # via aiohttp
29
+ # via langchain
30
  attrs==23.2.0
31
+ # via aiohttp
32
+ # via clldutils
33
+ # via csvw
34
+ # via jsonschema
35
+ # via phonemizer
36
+ # via referencing
37
  babel==2.15.0
38
+ # via csvw
39
  bibtexparser==2.0.0b7
40
+ # via clldutils
41
  certifi==2024.2.2
42
+ # via httpcore
43
+ # via httpx
44
+ # via requests
45
  charset-normalizer==3.3.2
46
+ # via requests
47
  click==8.1.7
48
+ # via typer
49
+ # via uvicorn
50
  clldutils==3.22.2
51
+ # via segments
52
  colorama==0.4.6
53
+ # via csvw
54
  colorlog==6.8.2
55
+ # via clldutils
56
  contourpy==1.2.1
57
+ # via matplotlib
58
  csvw==3.3.0
59
+ # via segments
60
  cycler==0.12.1
61
+ # via matplotlib
62
  dataclasses-json==0.6.5
63
+ # via langchain
64
+ # via langchain-community
65
  distro==1.9.0
66
+ # via openai
67
  dlinfo==1.2.1
68
+ # via phonemizer
69
  dnspython==2.6.1
70
+ # via email-validator
71
  email-validator==2.1.1
72
+ # via fastapi
73
+ exceptiongroup==1.2.1
74
+ # via anyio
75
  fastapi==0.111.0
76
+ # via fastapi-cli
77
+ # via gradio
78
  fastapi-cli==0.0.3
79
+ # via fastapi
80
  ffmpy==0.3.2
81
+ # via gradio
82
  filelock==3.14.0
83
+ # via huggingface-hub
84
+ # via torch
85
+ # via transformers
86
+ # via triton
87
  fonttools==4.51.0
88
+ # via matplotlib
89
  frozenlist==1.4.1
90
+ # via aiohttp
91
+ # via aiosignal
92
  fsspec==2024.3.1
93
+ # via gradio-client
94
+ # via huggingface-hub
95
+ # via torch
96
  gradio==4.29.0
97
+ # via pronunciation-trainer
98
  gradio-client==0.16.1
99
+ # via gradio
100
  greenlet==3.0.3
101
+ # via sqlalchemy
102
  h11==0.14.0
103
+ # via httpcore
104
+ # via uvicorn
105
  httpcore==1.0.5
106
+ # via httpx
107
  httptools==0.6.1
108
+ # via uvicorn
109
  httpx==0.27.0
110
+ # via fastapi
111
+ # via gradio
112
+ # via gradio-client
113
+ # via openai
114
  huggingface-hub==0.23.0
115
+ # via gradio
116
+ # via gradio-client
117
+ # via tokenizers
118
+ # via transformers
119
  idna==3.7
120
+ # via anyio
121
+ # via email-validator
122
+ # via httpx
123
+ # via requests
124
+ # via yarl
125
  importlib-resources==6.4.0
126
+ # via gradio
127
  isodate==0.6.1
128
+ # via csvw
129
+ # via rdflib
130
  jinja2==3.1.4
131
+ # via altair
132
+ # via fastapi
133
+ # via gradio
134
+ # via torch
135
  joblib==1.4.2
136
+ # via phonemizer
137
  jsonpatch==1.33
138
+ # via langchain-core
139
  jsonpointer==2.4
140
+ # via jsonpatch
141
  jsonschema==4.22.0
142
+ # via altair
143
+ # via csvw
144
  jsonschema-specifications==2023.12.1
145
+ # via jsonschema
146
  kiwisolver==1.4.5
147
+ # via matplotlib
148
  langchain==0.1.19
149
+ # via pronunciation-trainer
150
  langchain-community==0.0.38
151
+ # via langchain
152
  langchain-core==0.1.52
153
+ # via langchain
154
+ # via langchain-community
155
+ # via langchain-openai
156
+ # via langchain-text-splitters
157
  langchain-openai==0.1.6
158
+ # via pronunciation-trainer
159
  langchain-text-splitters==0.0.1
160
+ # via langchain
161
  langsmith==0.1.56
162
+ # via langchain
163
+ # via langchain-community
164
+ # via langchain-core
165
  language-tags==1.2.0
166
+ # via csvw
167
  lxml==5.2.1
168
+ # via clldutils
169
  markdown==3.6
170
+ # via clldutils
171
  markdown-it-py==3.0.0
172
+ # via rich
173
  markupsafe==2.1.5
174
+ # via clldutils
175
+ # via gradio
176
+ # via jinja2
177
  marshmallow==3.21.2
178
+ # via dataclasses-json
179
  matplotlib==3.8.4
180
+ # via gradio
181
  mdurl==0.1.2
182
+ # via markdown-it-py
183
  mpmath==1.3.0
184
+ # via sympy
185
  multidict==6.0.5
186
+ # via aiohttp
187
+ # via yarl
188
  mypy-extensions==1.0.0
189
+ # via typing-inspect
190
  networkx==3.3
191
+ # via torch
192
  numpy==1.26.4
193
+ # via altair
194
+ # via contourpy
195
+ # via gradio
196
+ # via langchain
197
+ # via langchain-community
198
+ # via matplotlib
199
+ # via pandas
200
+ # via transformers
201
  nvidia-cublas-cu12==12.1.3.1
202
+ # via nvidia-cudnn-cu12
203
+ # via nvidia-cusolver-cu12
204
+ # via torch
205
  nvidia-cuda-cupti-cu12==12.1.105
206
+ # via torch
207
  nvidia-cuda-nvrtc-cu12==12.1.105
208
+ # via torch
209
  nvidia-cuda-runtime-cu12==12.1.105
210
+ # via torch
211
  nvidia-cudnn-cu12==8.9.2.26
212
+ # via torch
213
  nvidia-cufft-cu12==11.0.2.54
214
+ # via torch
215
  nvidia-curand-cu12==10.3.2.106
216
+ # via torch
217
  nvidia-cusolver-cu12==11.4.5.107
218
+ # via torch
219
  nvidia-cusparse-cu12==12.1.0.106
220
+ # via nvidia-cusolver-cu12
221
+ # via torch
222
  nvidia-nccl-cu12==2.20.5
223
+ # via torch
224
  nvidia-nvjitlink-cu12==12.4.127
225
+ # via nvidia-cusolver-cu12
226
+ # via nvidia-cusparse-cu12
227
  nvidia-nvtx-cu12==12.1.105
228
+ # via torch
229
  openai==1.28.0
230
+ # via langchain-openai
231
  orjson==3.10.3
232
+ # via fastapi
233
+ # via gradio
234
+ # via langsmith
235
  packaging==23.2
236
+ # via altair
237
+ # via gradio
238
+ # via gradio-client
239
+ # via huggingface-hub
240
+ # via langchain-core
241
+ # via marshmallow
242
+ # via matplotlib
243
+ # via transformers
244
  pandas==2.2.2
245
+ # via altair
246
+ # via gradio
247
  phonemizer==3.2.1
248
+ # via pronunciation-trainer
249
  pillow==10.3.0
250
+ # via gradio
251
+ # via matplotlib
252
  pydantic==2.7.1
253
+ # via fastapi
254
+ # via gradio
255
+ # via langchain
256
+ # via langchain-core
257
+ # via langsmith
258
+ # via openai
259
  pydantic-core==2.18.2
260
+ # via pydantic
261
  pydub==0.25.1
262
+ # via gradio
263
  pygments==2.18.0
264
+ # via rich
265
  pylatexenc==2.10
266
+ # via bibtexparser
267
+ # via clldutils
268
  pyparsing==3.1.2
269
+ # via matplotlib
270
+ # via rdflib
271
  python-dateutil==2.9.0.post0
272
+ # via clldutils
273
+ # via csvw
274
+ # via matplotlib
275
+ # via pandas
276
  python-dotenv==1.0.1
277
+ # via uvicorn
278
  python-multipart==0.0.9
279
+ # via fastapi
280
+ # via gradio
281
  pytz==2024.1
282
+ # via pandas
283
  pyyaml==6.0.1
284
+ # via gradio
285
+ # via huggingface-hub
286
+ # via langchain
287
+ # via langchain-community
288
+ # via langchain-core
289
+ # via transformers
290
+ # via uvicorn
291
  rdflib==7.0.0
292
+ # via csvw
293
  referencing==0.35.1
294
+ # via jsonschema
295
+ # via jsonschema-specifications
296
  regex==2024.5.10
297
+ # via segments
298
+ # via tiktoken
299
+ # via transformers
300
  requests==2.31.0
301
+ # via csvw
302
+ # via huggingface-hub
303
+ # via langchain
304
+ # via langchain-community
305
+ # via langsmith
306
+ # via tiktoken
307
+ # via transformers
308
  rfc3986==1.5.0
309
+ # via csvw
310
  rich==13.7.1
311
+ # via typer
312
  rpds-py==0.18.1
313
+ # via jsonschema
314
+ # via referencing
315
  ruff==0.4.4
316
+ # via gradio
317
  safetensors==0.4.3
318
+ # via transformers
319
  segments==2.2.1
320
+ # via phonemizer
321
  semantic-version==2.10.0
322
+ # via gradio
323
  shellingham==1.5.4
324
+ # via typer
325
  six==1.16.0
326
+ # via isodate
327
+ # via python-dateutil
328
  sniffio==1.3.1
329
+ # via anyio
330
+ # via httpx
331
+ # via openai
332
  sqlalchemy==2.0.30
333
+ # via langchain
334
+ # via langchain-community
335
  starlette==0.37.2
336
+ # via fastapi
337
  sympy==1.12
338
+ # via torch
339
  tabulate==0.9.0
340
+ # via clldutils
341
  tenacity==8.3.0
342
+ # via langchain
343
+ # via langchain-community
344
+ # via langchain-core
345
  tiktoken==0.6.0
346
+ # via langchain-openai
347
  tokenizers==0.19.1
348
+ # via transformers
349
  tomlkit==0.12.0
350
+ # via gradio
351
  toolz==0.12.1
352
+ # via altair
353
  torch==2.3.0
354
+ # via pronunciation-trainer
355
+ # via torchaudio
356
  torchaudio==2.3.0
357
+ # via pronunciation-trainer
358
  tqdm==4.66.4
359
+ # via huggingface-hub
360
+ # via openai
361
+ # via transformers
362
  transformers==4.40.2
363
+ # via pronunciation-trainer
364
  triton==2.3.0
365
+ # via torch
366
  typer==0.12.3
367
+ # via fastapi-cli
368
+ # via gradio
369
  typing-extensions==4.11.0
370
+ # via altair
371
+ # via anyio
372
+ # via fastapi
373
+ # via gradio
374
+ # via gradio-client
375
+ # via huggingface-hub
376
+ # via openai
377
+ # via phonemizer
378
+ # via pydantic
379
+ # via pydantic-core
380
+ # via sqlalchemy
381
+ # via torch
382
+ # via typer
383
+ # via typing-inspect
384
+ # via uvicorn
385
  typing-inspect==0.9.0
386
+ # via dataclasses-json
387
  tzdata==2024.1
388
+ # via pandas
389
  ujson==5.9.0
390
+ # via fastapi
391
  uritemplate==4.1.1
392
+ # via csvw
393
  urllib3==2.2.1
394
+ # via gradio
395
+ # via requests
396
  uvicorn==0.29.0
397
+ # via fastapi
398
+ # via fastapi-cli
399
+ # via gradio
400
  uvloop==0.19.0
401
+ # via uvicorn
402
  watchfiles==0.21.0
403
+ # via uvicorn
404
  websockets==11.0.3
405
+ # via gradio-client
406
+ # via uvicorn
407
  yarl==1.9.4
408
+ # via aiohttp
409
  setuptools==69.5.1
410
+ # via pronunciation-trainer
src/pronunciation_trainer/evaluation.py CHANGED
@@ -19,6 +19,8 @@ The advanced evaluation function includes:
19
  from difflib import Differ, SequenceMatcher
20
  from typing import Optional, Tuple
21
 
 
 
22
  from pronunciation_trainer.llm import create_llm_chain
23
 
24
 
@@ -61,6 +63,18 @@ def basic_evaluation(
61
  expected: str, actual: str, autojunk: bool = True
62
  ) -> Tuple[float, str, list[Tuple[str, Optional[str]]]]:
63
  """Evaluate speaking attempts by comparing expected and actual phrases."""
 
 
 
 
 
 
 
 
 
 
 
 
64
  expected, actual = normalize_texts(expected, actual)
65
  similarity_ratio = compare_phrases(expected, actual)
66
  diff = diff_phrases(expected, actual)
@@ -76,11 +90,22 @@ def advanced_evaluation(
76
  openai_api_key,
77
  ) -> str:
78
  """Provide LLM-based feedback"""
79
- return create_llm_chain(openai_api_key=openai_api_key).invoke(
80
- {
81
- "learner_l1": learner_l1,
82
- "learner_l2": learner_l2,
83
- "learner_phoneme_transcription": learner_phoneme_transcription,
84
- "teacher_phoneme_transcription": teacher_phoneme_transcription,
85
- }
86
- )
 
 
 
 
 
 
 
 
 
 
 
 
19
  from difflib import Differ, SequenceMatcher
20
  from typing import Optional, Tuple
21
 
22
+ import gradio as gr
23
+
24
  from pronunciation_trainer.llm import create_llm_chain
25
 
26
 
 
63
  expected: str, actual: str, autojunk: bool = True
64
  ) -> Tuple[float, str, list[Tuple[str, Optional[str]]]]:
65
  """Evaluate speaking attempts by comparing expected and actual phrases."""
66
+
67
+ if expected == "" or actual == "": # If either input is empty, return 0
68
+ gr.Warning(
69
+ "To compute a similarity score, you need to supply both teacher and learner (phoneme) transcripts!"
70
+ )
71
+ return (
72
+ 0.0,
73
+ """**Info:** To compute a similarity score, you need to supply both teacher and learner (phoneme) transcripts. πŸ“
74
+ Simply select one of the examples on the bottom of the page or type in your own text in the textboxes above. πŸ–ŠοΈ""",
75
+ [],
76
+ )
77
+
78
  expected, actual = normalize_texts(expected, actual)
79
  similarity_ratio = compare_phrases(expected, actual)
80
  diff = diff_phrases(expected, actual)
 
90
  openai_api_key,
91
  ) -> str:
92
  """Provide LLM-based feedback"""
93
+ if "" in [
94
+ learner_l1,
95
+ learner_l2,
96
+ learner_phoneme_transcription,
97
+ teacher_phoneme_transcription,
98
+ ]:
99
+ gr.Warning(
100
+ "To compute LLM feedback, you need to supply all four inputs: learner L1, learner L2, learner phoneme transcription, and teacher phoneme transcription!"
101
+ )
102
+ return ""
103
+ else:
104
+ return create_llm_chain(openai_api_key=openai_api_key).invoke(
105
+ {
106
+ "learner_l1": learner_l1,
107
+ "learner_l2": learner_l2,
108
+ "learner_phoneme_transcription": learner_phoneme_transcription,
109
+ "teacher_phoneme_transcription": teacher_phoneme_transcription,
110
+ }
111
+ )