AIEnthusiast369 commited on
Commit
9418b36
Β·
1 Parent(s): e31434f
README.md CHANGED
@@ -27,24 +27,16 @@ pip install -r requirements.txt
27
  2. Set up environment variables:
28
  Create a `.env` file with the following:
29
  ```
30
- GOOGLE_API_KEY=your_google_api_key
 
31
  ```
 
32
 
33
  3. Run the application:
34
  ```bash
35
  streamlit run streamlit_app/main.py
36
  ```
37
 
38
- ## Project Structure
39
-
40
- ```
41
- streamlit_app/
42
- β”œβ”€β”€ graph/ # LangGraph implementation
43
- β”œβ”€β”€ state/ # Application state management
44
- β”œβ”€β”€ components/ # Streamlit components
45
- └── utils/ # Utility functions
46
- ```
47
-
48
  ## Contributing
49
 
50
  Feel free to submit issues and enhancement requests!
 
27
  2. Set up environment variables:
28
  Create a `.env` file with the following:
29
  ```
30
+ GROQ_API_KEY = your_groq_api_key
31
+
32
  ```
33
+ if not .env file is provided user will be prompted to enter their API key.
34
 
35
  3. Run the application:
36
  ```bash
37
  streamlit run streamlit_app/main.py
38
  ```
39
 
 
 
 
 
 
 
 
 
 
 
40
  ## Contributing
41
 
42
  Feel free to submit issues and enhancement requests!
requirements.txt DELETED
@@ -1,9 +0,0 @@
1
- streamlit>=1.30.0
2
- langgraph>=0.0.15
3
- langchain>=0.1.0
4
- langchain-google-genai>=0.0.6
5
- openai-whisper>=20231117
6
- TTS>=0.22.0 # Coqui TTS
7
- google-cloud-texttospeech>=2.14.1
8
- python-dotenv>=1.0.0
9
- requests>=2.31.0
 
 
 
 
 
 
 
 
 
 
streamlit_app/dictionary/dictionary_manager.py DELETED
@@ -1,50 +0,0 @@
1
- import json
2
- from pathlib import Path
3
- from typing import Dict, List, Optional
4
-
5
- class DictionaryManager:
6
- def __init__(self, storage_path: Optional[str] = None):
7
- self.storage_path = Path(storage_path or "data/dictionary.json")
8
- self.storage_path.parent.mkdir(parents=True, exist_ok=True)
9
- self.dictionary: Dict[str, Dict[str, List[str]]] = self._load_dictionary()
10
-
11
- def _load_dictionary(self) -> Dict[str, Dict[str, List[str]]]:
12
- """Load dictionary from file or create new if doesn't exist"""
13
- if self.storage_path.exists():
14
- with open(self.storage_path, 'r', encoding='utf-8') as f:
15
- return json.load(f)
16
- return {}
17
-
18
- def _save_dictionary(self):
19
- """Save dictionary to file"""
20
- with open(self.storage_path, 'w', encoding='utf-8') as f:
21
- json.dump(self.dictionary, f, ensure_ascii=False, indent=2)
22
-
23
- def add_entry(self, source_lang: str, target_lang: str, word: str, translation: str):
24
- """Add a word and its translation to the dictionary"""
25
- if source_lang not in self.dictionary:
26
- self.dictionary[source_lang] = {}
27
-
28
- if target_lang not in self.dictionary[source_lang]:
29
- self.dictionary[source_lang][target_lang] = []
30
-
31
- entry = f"{word} β†’ {translation}"
32
- if entry not in self.dictionary[source_lang][target_lang]:
33
- self.dictionary[source_lang][target_lang].append(entry)
34
- self._save_dictionary()
35
-
36
- def get_entries(self, source_lang: str, target_lang: str) -> List[str]:
37
- """Get all entries for a language pair"""
38
- return self.dictionary.get(source_lang, {}).get(target_lang, [])
39
-
40
- def export_dictionary(self) -> str:
41
- """Export dictionary as formatted string"""
42
- output = []
43
- for source_lang, translations in self.dictionary.items():
44
- output.append(f"# {source_lang.upper()} Dictionary")
45
- for target_lang, entries in translations.items():
46
- output.append(f"\n## Translations to {target_lang.upper()}")
47
- for entry in entries:
48
- output.append(f"- {entry}")
49
- output.append("\n")
50
- return "\n".join(output)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
streamlit_app/env/.env.example CHANGED
@@ -1,9 +1,8 @@
1
- # Google API Key for Gemini
2
- GOOGLE_API_KEY=your_google_api_key
3
- AUDIO_BACKEND=sox_io
 
4
  WHISPER_MODEL=small
 
5
  TTS_MODEL=tts_models/en/jenny/jenny
6
 
7
- # Optional: Coqui TTS model settings
8
- COQUI_MODEL_NAME=tts_models/en/ljspeech/tacotron2-DDC
9
- COQUI_VOCODER_NAME=vocoder_models/en/ljspeech/hifigan_v2
 
1
+ GROQ_API_KEY_API_KEY=your_google_api_key
2
+ # Audio backend for coqui tts model
3
+ AUDIO_BACKEND=sox_io # or "soundfile" or "ffmpeg"
4
+ # Whisper model
5
  WHISPER_MODEL=small
6
+ # Coqui TTS model
7
  TTS_MODEL=tts_models/en/jenny/jenny
8
 
 
 
 
streamlit_app/graph/chains.py CHANGED
@@ -244,7 +244,7 @@ if __name__ == "__main__":
244
 
245
  def test_translate_chain(llm):
246
  translate_chain = create_translate_chain(llm)
247
- result = translate_chain.invoke({"user_request": "Translate 'hello' to Spanish"})
248
  print(f"result: {result}")
249
  # parser = JsonOutputParser(pydantic_object=TranslationResponse)
250
  # translation = parser.parse(result)
 
244
 
245
  def test_translate_chain(llm):
246
  translate_chain = create_translate_chain(llm)
247
+ result = translate_chain.invoke({"user_request": "Translate 'how to get to train station' to Spanish"})
248
  print(f"result: {result}")
249
  # parser = JsonOutputParser(pydantic_object=TranslationResponse)
250
  # translation = parser.parse(result)
streamlit_app/requirements.txt ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -i https://pypi.org/simple
2
+ absl-py==2.1.0; python_version >= '3.7'
3
+ aiohappyeyeballs==2.4.6; python_version >= '3.9'
4
+ aiohttp==3.11.12; python_version >= '3.9'
5
+ aiosignal==1.3.2; python_version >= '3.9'
6
+ altair==5.5.0; python_version >= '3.9'
7
+ annotated-types==0.7.0; python_version >= '3.8'
8
+ anyascii==0.3.2; python_version >= '3.3'
9
+ anyio==4.8.0; python_version >= '3.9'
10
+ attrs==25.1.0; python_version >= '3.8'
11
+ audioread==3.0.1; python_version >= '3.6'
12
+ babel==2.17.0; python_version >= '3.8'
13
+ bangla==0.0.2
14
+ beautifulsoup4==4.13.3; python_full_version >= '3.7.0'
15
+ blinker==1.9.0; python_version >= '3.9'
16
+ blis==1.2.0; python_version < '3.13' and python_version >= '3.6'
17
+ bnnumerizer==0.0.2
18
+ bnunicodenormalizer==0.1.7
19
+ cachetools==5.5.2; python_version >= '3.7'
20
+ catalogue==2.0.10; python_version >= '3.6'
21
+ certifi==2025.1.31; python_version >= '3.6'
22
+ cffi==1.17.1; python_version >= '3.8'
23
+ charset-normalizer==3.4.1; python_version >= '3.7'
24
+ click==8.1.8; python_version >= '3.7'
25
+ cloudpathlib==0.20.0; python_version >= '3.8'
26
+ confection==0.1.5; python_version >= '3.6'
27
+ contourpy==1.3.1; python_version >= '3.10'
28
+ coqpit==0.0.17; python_full_version >= '3.7.0'
29
+ cycler==0.12.1; python_version >= '3.8'
30
+ cymem==2.0.11
31
+ cython==3.0.12; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
32
+ dateparser==1.1.8; python_version >= '3.7'
33
+ decorator==5.1.1; python_version >= '3.5'
34
+ distro==1.9.0; python_version >= '3.6'
35
+ docopt==0.6.2
36
+ docstring-parser==0.16; python_version >= '3.6' and python_version < '4.0'
37
+ einops==0.8.1; python_version >= '3.8'
38
+ encodec==0.1.1; python_full_version >= '3.8.0'
39
+ entrypoints==0.4; python_version >= '3.6'
40
+ faker==36.1.1; python_version >= '3.9'
41
+ favicon==0.7.0
42
+ filelock==3.17.0; python_version >= '3.9'
43
+ filetype==1.2.0
44
+ flask==3.1.0; python_version >= '3.9'
45
+ fonttools==4.56.0; python_version >= '3.8'
46
+ frozenlist==1.5.0; python_version >= '3.8'
47
+ fsspec==2025.2.0; python_version >= '3.8'
48
+ g2pkk==0.1.2; python_version >= '3.6'
49
+ gitdb==4.0.12; python_version >= '3.7'
50
+ gitpython==3.1.44; python_version >= '3.7'
51
+ google-ai-generativelanguage==0.6.15; python_version >= '3.7'
52
+ google-api-core[grpc]==2.24.1; python_version >= '3.7'
53
+ google-api-python-client==2.161.0; python_version >= '3.7'
54
+ google-auth==2.38.0; python_version >= '3.7'
55
+ google-auth-httplib2==0.2.0
56
+ google-cloud-aiplatform==1.81.0; python_version >= '3.8'
57
+ google-cloud-bigquery==3.29.0; python_version >= '3.7'
58
+ google-cloud-core==2.4.2; python_version >= '3.7'
59
+ google-cloud-resource-manager==1.14.1; python_version >= '3.7'
60
+ google-cloud-storage==2.19.0; python_version >= '3.7'
61
+ google-crc32c==1.6.0; python_version >= '3.9'
62
+ google-generativeai==0.8.4; python_version >= '3.9'
63
+ google-resumable-media==2.7.2; python_version >= '3.7'
64
+ googleapis-common-protos[grpc]==1.68.0; python_version >= '3.7'
65
+ greenlet==3.1.1; python_version < '3.14' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))
66
+ groq==0.18.0; python_version >= '3.8'
67
+ grpc-google-iam-v1==0.14.0; python_version >= '3.7'
68
+ grpcio==1.70.0; python_version >= '3.8'
69
+ grpcio-status==1.70.0
70
+ gruut[de,es,fr]==2.2.3; python_version >= '3.6'
71
+ gruut-ipa==0.13.0; python_version >= '3.6'
72
+ gruut-lang-de==2.0.1
73
+ gruut-lang-en==2.0.1
74
+ gruut-lang-es==2.0.1
75
+ gruut-lang-fr==2.0.2
76
+ h11==0.14.0; python_version >= '3.7'
77
+ hangul-romanize==0.1.0
78
+ htbuilder==0.9.0; python_version >= '3.7'
79
+ httpcore==1.0.7; python_version >= '3.8'
80
+ httplib2==0.22.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
81
+ httpx==0.28.1; python_version >= '3.8'
82
+ httpx-sse==0.4.0; python_version >= '3.8'
83
+ huggingface-hub==0.29.1; python_full_version >= '3.8.0'
84
+ idna==3.10; python_version >= '3.6'
85
+ inflect==7.5.0; python_version >= '3.9'
86
+ itsdangerous==2.2.0; python_version >= '3.8'
87
+ jamo==0.4.1
88
+ jieba==0.42.1
89
+ jinja2==3.1.5; python_version >= '3.7'
90
+ jiter==0.8.2; python_version >= '3.8'
91
+ joblib==1.4.2; python_version >= '3.8'
92
+ jsonlines==1.2.0
93
+ jsonpatch==1.33; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'
94
+ jsonpointer==3.0.0; python_version >= '3.7'
95
+ jsonschema==4.23.0; python_version >= '3.8'
96
+ jsonschema-specifications==2024.10.1; python_version >= '3.9'
97
+ kiwisolver==1.4.8; python_version >= '3.10'
98
+ langchain==0.3.19; python_version >= '3.9' and python_version < '4.0'
99
+ langchain-core==0.3.37; python_version >= '3.9' and python_version < '4.0'
100
+ langchain-google-genai==2.0.9; python_version >= '3.9' and python_version < '4.0'
101
+ langchain-google-vertexai==2.0.13; python_version >= '3.9' and python_version < '4.0'
102
+ langchain-groq==0.2.4; python_version >= '3.9' and python_version < '4.0'
103
+ langchain-mistralai==0.2.7; python_version >= '3.9' and python_version < '4.0'
104
+ langchain-openai==0.3.6; python_version >= '3.9' and python_version < '4.0'
105
+ langchain-text-splitters==0.3.6; python_version >= '3.9' and python_version < '4.0'
106
+ langcodes==3.5.0; python_version >= '3.9'
107
+ langgraph==0.2.74; python_version < '4.0' and python_full_version >= '3.9.0'
108
+ langgraph-checkpoint==2.0.16; python_full_version >= '3.9.0' and python_full_version < '4.0.0'
109
+ langgraph-sdk==0.1.53; python_full_version >= '3.9.0' and python_full_version < '4.0.0'
110
+ langsmith==0.3.9; python_version >= '3.9' and python_version < '4.0'
111
+ language-data==1.3.0
112
+ lazy-loader==0.4; python_version >= '3.7'
113
+ librosa==0.10.2.post1; python_version >= '3.7'
114
+ llvmlite==0.44.0; python_version >= '3.10'
115
+ lxml==5.3.1; python_version >= '3.6'
116
+ marisa-trie==1.2.1; python_version >= '3.7'
117
+ markdown==3.7; python_version >= '3.8'
118
+ markdown-it-py==3.0.0; python_version >= '3.8'
119
+ markdownlit==0.0.7; python_version >= '3.6'
120
+ markupsafe==3.0.2; python_version >= '3.9'
121
+ matplotlib==3.10.0; python_version >= '3.10'
122
+ mdurl==0.1.2; python_version >= '3.7'
123
+ more-itertools==10.6.0; python_version >= '3.9'
124
+ mpmath==1.3.0
125
+ msgpack==1.1.0; python_version >= '3.8'
126
+ multidict==6.1.0; python_version >= '3.8'
127
+ murmurhash==1.0.12; python_version >= '3.6'
128
+ narwhals==1.27.1; python_version >= '3.8'
129
+ networkx==2.8.8; python_version >= '3.8'
130
+ nltk==3.9.1; python_version >= '3.8'
131
+ num2words==0.5.14
132
+ numba==0.61.0; python_version >= '3.10'
133
+ numpy==1.26.4; python_version >= '3.9'
134
+ nvidia-cublas-cu12==12.4.5.8; platform_system == 'Linux' and platform_machine == 'x86_64'
135
+ nvidia-cuda-cupti-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64'
136
+ nvidia-cuda-nvrtc-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64'
137
+ nvidia-cuda-runtime-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64'
138
+ nvidia-cudnn-cu12==9.1.0.70; platform_system == 'Linux' and platform_machine == 'x86_64'
139
+ nvidia-cufft-cu12==11.2.1.3; platform_system == 'Linux' and platform_machine == 'x86_64'
140
+ nvidia-curand-cu12==10.3.5.147; platform_system == 'Linux' and platform_machine == 'x86_64'
141
+ nvidia-cusolver-cu12==11.6.1.9; platform_system == 'Linux' and platform_machine == 'x86_64'
142
+ nvidia-cusparse-cu12==12.3.1.170; platform_system == 'Linux' and platform_machine == 'x86_64'
143
+ nvidia-cusparselt-cu12==0.6.2; platform_system == 'Linux' and platform_machine == 'x86_64'
144
+ nvidia-nccl-cu12==2.21.5; platform_system == 'Linux' and platform_machine == 'x86_64'
145
+ nvidia-nvjitlink-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64'
146
+ nvidia-nvtx-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64'
147
+ openai==1.63.2; python_version >= '3.8'
148
+ openai-whisper==20240930; python_version >= '3.8'
149
+ orjson==3.10.15; python_version >= '3.8'
150
+ packaging==24.2; python_version >= '3.8'
151
+ pandas==1.5.3; python_version >= '3.8'
152
+ pillow==11.1.0; python_version >= '3.9'
153
+ platformdirs==4.3.6; python_version >= '3.8'
154
+ plotly==6.0.0; python_version >= '3.8'
155
+ pooch==1.8.2; python_version >= '3.7'
156
+ preshed==3.0.9; python_version >= '3.6'
157
+ prometheus-client==0.21.1; python_version >= '3.8'
158
+ propcache==0.3.0; python_version >= '3.9'
159
+ proto-plus==1.26.0; python_version >= '3.7'
160
+ protobuf==5.29.3; python_version >= '3.8'
161
+ psutil==7.0.0; python_version >= '3.6'
162
+ pyarrow==19.0.1; python_version >= '3.9'
163
+ pyasn1==0.6.1; python_version >= '3.8'
164
+ pyasn1-modules==0.4.1; python_version >= '3.8'
165
+ pycparser==2.22; python_version >= '3.8'
166
+ pydantic==2.10.6; python_version >= '3.8'
167
+ pydantic-core==2.27.2; python_version >= '3.8'
168
+ pydeck==0.9.1; python_version >= '3.8'
169
+ pygments==2.19.1; python_version >= '3.8'
170
+ pymdown-extensions==10.14.3; python_version >= '3.8'
171
+ pynndescent==0.5.13
172
+ pyparsing==3.2.1; python_version >= '3.9'
173
+ pypinyin==0.53.0; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'
174
+ pysbd==0.3.4; python_version >= '3'
175
+ python-crfsuite==0.9.11; python_version >= '3.8'
176
+ python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
177
+ python-dotenv==1.0.1; python_version >= '3.8'
178
+ pytz==2025.1
179
+ pyyaml==6.0.2; python_version >= '3.8'
180
+ referencing==0.36.2; python_version >= '3.9'
181
+ regex==2024.11.6; python_version >= '3.8'
182
+ requests==2.32.3; python_version >= '3.8'
183
+ requests-toolbelt==1.0.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
184
+ rich==13.9.4; python_full_version >= '3.8.0'
185
+ rpds-py==0.23.0; python_version >= '3.9'
186
+ rsa==4.9; python_version >= '3.6' and python_version < '4'
187
+ safetensors==0.5.2; python_version >= '3.7'
188
+ scikit-learn==1.6.1; python_version >= '3.9'
189
+ scipy==1.15.2; python_version >= '3.10'
190
+ setuptools==75.8.0; python_version >= '3.9'
191
+ shapely==2.0.7; python_version >= '3.7'
192
+ shellingham==1.5.4; python_version >= '3.7'
193
+ six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
194
+ smart-open==7.1.0; python_version >= '3.7' and python_version < '4.0'
195
+ smmap==5.0.2; python_version >= '3.7'
196
+ sniffio==1.3.1; python_version >= '3.7'
197
+ soundfile==0.13.1
198
+ soupsieve==2.6; python_version >= '3.8'
199
+ sox==1.5.0
200
+ soxr==0.5.0.post1; python_version >= '3.9'
201
+ spacy[ja]==3.8.4; python_version < '3.13' and python_version >= '3.9'
202
+ spacy-legacy==3.0.12; python_version >= '3.6'
203
+ spacy-loggers==1.0.5; python_version >= '3.6'
204
+ sqlalchemy==2.0.38; python_version >= '3.7'
205
+ srsly==2.5.1; python_version < '3.14' and python_version >= '3.9'
206
+ st-annotated-text==4.0.2; python_version >= '3.5'
207
+ st-theme==1.2.3; python_version >= '3.8'
208
+ streamlit==1.42.2; python_version >= '3.9' and python_full_version != '3.9.7'
209
+ streamlit-camera-input-live==0.2.0; python_version >= '3.7'
210
+ streamlit-card==1.0.2; python_version >= '3.8'
211
+ streamlit-chat-widget==0.2.0; python_version >= '3.6'
212
+ streamlit-dynamic-filters==0.1.9
213
+ streamlit-embedcode==0.1.2; python_version >= '3.6'
214
+ streamlit-extras==0.5.5; python_version not in '2.7, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7' and python_version >= '3.8'
215
+ streamlit-faker==0.0.3; python_version >= '3.6'
216
+ streamlit-image-coordinates==0.1.9; python_version >= '3.7'
217
+ streamlit-keyup==0.3.0; python_version >= '3.7'
218
+ streamlit-toggle-switch==1.0.2; python_version >= '3.6'
219
+ streamlit-vertical-slider==2.5.5; python_version >= '3.8'
220
+ sudachidict-core==20250129
221
+ sudachipy==0.6.10
222
+ sympy==1.13.1; python_version >= '3.9'
223
+ tenacity==9.0.0; python_version >= '3.8'
224
+ tensorboard==2.19.0; python_version >= '3.9'
225
+ tensorboard-data-server==0.7.2; python_version >= '3.7'
226
+ thinc==8.3.4; python_version < '3.13' and python_version >= '3.9'
227
+ threadpoolctl==3.5.0; python_version >= '3.8'
228
+ tiktoken==0.9.0; python_version >= '3.9'
229
+ tokenizers==0.21.0; python_version >= '3.7'
230
+ toml==0.10.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'
231
+ torch==2.6.0; python_full_version >= '3.9.0'
232
+ torchaudio==2.6.0
233
+ tornado==6.4.2; python_version >= '3.8'
234
+ tqdm==4.67.1; python_version >= '3.7'
235
+ trainer==0.0.36; python_version < '3.12' and python_full_version >= '3.6.0'
236
+ transformers==4.49.0; python_full_version >= '3.9.0'
237
+ triton==3.2.0; platform_system == 'Linux' and platform_machine == 'x86_64'
238
+ tts==0.22.0; python_version < '3.12' and python_full_version >= '3.9.0'
239
+ typeguard==4.4.2; python_version >= '3.9'
240
+ typer==0.15.1; python_version >= '3.7'
241
+ typing-extensions==4.12.2; python_version >= '3.8'
242
+ tzdata==2025.1; python_version >= '2'
243
+ tzlocal==5.3; python_version >= '3.9'
244
+ umap-learn==0.5.7
245
+ unidecode==1.3.8; python_version >= '3.5'
246
+ uritemplate==4.1.1; python_version >= '3.6'
247
+ urllib3==2.3.0; python_version >= '3.9'
248
+ validators==0.34.0; python_version >= '3.8'
249
+ wasabi==1.1.3; python_version >= '3.6'
250
+ watchdog==6.0.0; platform_system != 'Darwin'
251
+ weasel==0.4.1; python_version >= '3.7'
252
+ werkzeug==3.1.3; python_version >= '3.9'
253
+ wrapt==1.17.2; python_version >= '3.8'
254
+ yarl==1.18.3; python_version >= '3.9'
255
+ zstandard==0.23.0; python_version >= '3.8'