unknown commited on
Commit
429cddc
·
0 Parent(s):

first commit

Browse files
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ venv
2
+ .env
.idea/.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
.idea/AI_Tutor.iml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$">
5
+ <excludeFolder url="file://$MODULE_DIR$/venv" />
6
+ </content>
7
+ <orderEntry type="inheritedJdk" />
8
+ <orderEntry type="sourceFolder" forTests="false" />
9
+ </component>
10
+ </module>
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,475 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="ignoredPackages">
6
+ <value>
7
+ <list size="462">
8
+ <item index="0" class="java.lang.String" itemvalue="python" />
9
+ <item index="1" class="java.lang.String" itemvalue="csv" />
10
+ <item index="2" class="java.lang.String" itemvalue="rasa" />
11
+ <item index="3" class="java.lang.String" itemvalue="re" />
12
+ <item index="4" class="java.lang.String" itemvalue="transformers" />
13
+ <item index="5" class="java.lang.String" itemvalue="seqeval" />
14
+ <item index="6" class="java.lang.String" itemvalue="accelerate" />
15
+ <item index="7" class="java.lang.String" itemvalue="torch" />
16
+ <item index="8" class="java.lang.String" itemvalue="datasets" />
17
+ <item index="9" class="java.lang.String" itemvalue="torchvision" />
18
+ <item index="10" class="java.lang.String" itemvalue="torchaudio" />
19
+ <item index="11" class="java.lang.String" itemvalue="numba" />
20
+ <item index="12" class="java.lang.String" itemvalue="jupyterlab_widgets" />
21
+ <item index="13" class="java.lang.String" itemvalue="tensorflow-estimator" />
22
+ <item index="14" class="java.lang.String" itemvalue="Babel" />
23
+ <item index="15" class="java.lang.String" itemvalue="multitasking" />
24
+ <item index="16" class="java.lang.String" itemvalue="gspread-dataframe" />
25
+ <item index="17" class="java.lang.String" itemvalue="boltons" />
26
+ <item index="18" class="java.lang.String" itemvalue="python-slugify" />
27
+ <item index="19" class="java.lang.String" itemvalue="srsly" />
28
+ <item index="20" class="java.lang.String" itemvalue="patsy" />
29
+ <item index="21" class="java.lang.String" itemvalue="ipython-genutils" />
30
+ <item index="22" class="java.lang.String" itemvalue="python-louvain" />
31
+ <item index="23" class="java.lang.String" itemvalue="langchain" />
32
+ <item index="24" class="java.lang.String" itemvalue="bleach" />
33
+ <item index="25" class="java.lang.String" itemvalue="bqplot" />
34
+ <item index="26" class="java.lang.String" itemvalue="lxml" />
35
+ <item index="27" class="java.lang.String" itemvalue="prometheus_client" />
36
+ <item index="28" class="java.lang.String" itemvalue="llama-index-postprocessor-cohere-rerank" />
37
+ <item index="29" class="java.lang.String" itemvalue="jsonschema" />
38
+ <item index="30" class="java.lang.String" itemvalue="xlrd" />
39
+ <item index="31" class="java.lang.String" itemvalue="nbclassic" />
40
+ <item index="32" class="java.lang.String" itemvalue="scs" />
41
+ <item index="33" class="java.lang.String" itemvalue="torchtext" />
42
+ <item index="34" class="java.lang.String" itemvalue="Werkzeug" />
43
+ <item index="35" class="java.lang.String" itemvalue="proglog" />
44
+ <item index="36" class="java.lang.String" itemvalue="traittypes" />
45
+ <item index="37" class="java.lang.String" itemvalue="tensorboard-data-server" />
46
+ <item index="38" class="java.lang.String" itemvalue="colorlover" />
47
+ <item index="39" class="java.lang.String" itemvalue="wordcloud" />
48
+ <item index="40" class="java.lang.String" itemvalue="google" />
49
+ <item index="41" class="java.lang.String" itemvalue="community" />
50
+ <item index="42" class="java.lang.String" itemvalue="types-setuptools" />
51
+ <item index="43" class="java.lang.String" itemvalue="branca" />
52
+ <item index="44" class="java.lang.String" itemvalue="cymem" />
53
+ <item index="45" class="java.lang.String" itemvalue="google-ai-generativelanguage" />
54
+ <item index="46" class="java.lang.String" itemvalue="google-cloud-functions" />
55
+ <item index="47" class="java.lang.String" itemvalue="fastcore" />
56
+ <item index="48" class="java.lang.String" itemvalue="murmurhash" />
57
+ <item index="49" class="java.lang.String" itemvalue="jsonpatch" />
58
+ <item index="50" class="java.lang.String" itemvalue="google-cloud-bigquery" />
59
+ <item index="51" class="java.lang.String" itemvalue="wasabi" />
60
+ <item index="52" class="java.lang.String" itemvalue="cffi" />
61
+ <item index="53" class="java.lang.String" itemvalue="xyzservices" />
62
+ <item index="54" class="java.lang.String" itemvalue="nvidia-nccl-cu12" />
63
+ <item index="55" class="java.lang.String" itemvalue="pydot-ng" />
64
+ <item index="56" class="java.lang.String" itemvalue="holoviews" />
65
+ <item index="57" class="java.lang.String" itemvalue="gdown" />
66
+ <item index="58" class="java.lang.String" itemvalue="launchpadlib" />
67
+ <item index="59" class="java.lang.String" itemvalue="dopamine-rl" />
68
+ <item index="60" class="java.lang.String" itemvalue="google-search-results" />
69
+ <item index="61" class="java.lang.String" itemvalue="panel" />
70
+ <item index="62" class="java.lang.String" itemvalue="pymystem3" />
71
+ <item index="63" class="java.lang.String" itemvalue="PyOpenGL" />
72
+ <item index="64" class="java.lang.String" itemvalue="google-cloud-datastore" />
73
+ <item index="65" class="java.lang.String" itemvalue="glob2" />
74
+ <item index="66" class="java.lang.String" itemvalue="backoff" />
75
+ <item index="67" class="java.lang.String" itemvalue="jsonpointer" />
76
+ <item index="68" class="java.lang.String" itemvalue="imagesize" />
77
+ <item index="69" class="java.lang.String" itemvalue="nvidia-cudnn-cu12" />
78
+ <item index="70" class="java.lang.String" itemvalue="et-xmlfile" />
79
+ <item index="71" class="java.lang.String" itemvalue="fastdownload" />
80
+ <item index="72" class="java.lang.String" itemvalue="docker-pycreds" />
81
+ <item index="73" class="java.lang.String" itemvalue="pyshp" />
82
+ <item index="74" class="java.lang.String" itemvalue="gin-config" />
83
+ <item index="75" class="java.lang.String" itemvalue="vega-datasets" />
84
+ <item index="76" class="java.lang.String" itemvalue="debugpy" />
85
+ <item index="77" class="java.lang.String" itemvalue="statsmodels" />
86
+ <item index="78" class="java.lang.String" itemvalue="argon2-cffi" />
87
+ <item index="79" class="java.lang.String" itemvalue="google-api-python-client" />
88
+ <item index="80" class="java.lang.String" itemvalue="optax" />
89
+ <item index="81" class="java.lang.String" itemvalue="einops" />
90
+ <item index="82" class="java.lang.String" itemvalue="cmdstanpy" />
91
+ <item index="83" class="java.lang.String" itemvalue="pygame" />
92
+ <item index="84" class="java.lang.String" itemvalue="opt-einsum" />
93
+ <item index="85" class="java.lang.String" itemvalue="partd" />
94
+ <item index="86" class="java.lang.String" itemvalue="promise" />
95
+ <item index="87" class="java.lang.String" itemvalue="colorcet" />
96
+ <item index="88" class="java.lang.String" itemvalue="gast" />
97
+ <item index="89" class="java.lang.String" itemvalue="jupyter-server" />
98
+ <item index="90" class="java.lang.String" itemvalue="easydict" />
99
+ <item index="91" class="java.lang.String" itemvalue="pathlib" />
100
+ <item index="92" class="java.lang.String" itemvalue="sentencepiece" />
101
+ <item index="93" class="java.lang.String" itemvalue="oauthlib" />
102
+ <item index="94" class="java.lang.String" itemvalue="astropy" />
103
+ <item index="95" class="java.lang.String" itemvalue="peewee" />
104
+ <item index="96" class="java.lang.String" itemvalue="pyparsing" />
105
+ <item index="97" class="java.lang.String" itemvalue="parsy" />
106
+ <item index="98" class="java.lang.String" itemvalue="nvidia-cuda-nvrtc-cu12" />
107
+ <item index="99" class="java.lang.String" itemvalue="nibabel" />
108
+ <item index="100" class="java.lang.String" itemvalue="iniconfig" />
109
+ <item index="101" class="java.lang.String" itemvalue="pytensor" />
110
+ <item index="102" class="java.lang.String" itemvalue="cryptography" />
111
+ <item index="103" class="java.lang.String" itemvalue="bitsandbytes" />
112
+ <item index="104" class="java.lang.String" itemvalue="kaggle" />
113
+ <item index="105" class="java.lang.String" itemvalue="argon2-cffi-bindings" />
114
+ <item index="106" class="java.lang.String" itemvalue="librosa" />
115
+ <item index="107" class="java.lang.String" itemvalue="googledrivedownloader" />
116
+ <item index="108" class="java.lang.String" itemvalue="langsmith" />
117
+ <item index="109" class="java.lang.String" itemvalue="oauth2client" />
118
+ <item index="110" class="java.lang.String" itemvalue="geopy" />
119
+ <item index="111" class="java.lang.String" itemvalue="pydot" />
120
+ <item index="112" class="java.lang.String" itemvalue="matplotlib-inline" />
121
+ <item index="113" class="java.lang.String" itemvalue="wcwidth" />
122
+ <item index="114" class="java.lang.String" itemvalue="spacy-legacy" />
123
+ <item index="115" class="java.lang.String" itemvalue="jupyter_core" />
124
+ <item index="116" class="java.lang.String" itemvalue="wandb" />
125
+ <item index="117" class="java.lang.String" itemvalue="tomli" />
126
+ <item index="118" class="java.lang.String" itemvalue="importlib_resources" />
127
+ <item index="119" class="java.lang.String" itemvalue="parso" />
128
+ <item index="120" class="java.lang.String" itemvalue="progressbar2" />
129
+ <item index="121" class="java.lang.String" itemvalue="text-unidecode" />
130
+ <item index="122" class="java.lang.String" itemvalue="dill" />
131
+ <item index="123" class="java.lang.String" itemvalue="h5netcdf" />
132
+ <item index="124" class="java.lang.String" itemvalue="weasel" />
133
+ <item index="125" class="java.lang.String" itemvalue="pooch" />
134
+ <item index="126" class="java.lang.String" itemvalue="chardet" />
135
+ <item index="127" class="java.lang.String" itemvalue="soundfile" />
136
+ <item index="128" class="java.lang.String" itemvalue="miniKanren" />
137
+ <item index="129" class="java.lang.String" itemvalue="sphinxcontrib-jsmath" />
138
+ <item index="130" class="java.lang.String" itemvalue="inflect" />
139
+ <item index="131" class="java.lang.String" itemvalue="frozendict" />
140
+ <item index="132" class="java.lang.String" itemvalue="click-plugins" />
141
+ <item index="133" class="java.lang.String" itemvalue="dm-tree" />
142
+ <item index="134" class="java.lang.String" itemvalue="tabulate" />
143
+ <item index="135" class="java.lang.String" itemvalue="pickleshare" />
144
+ <item index="136" class="java.lang.String" itemvalue="defusedxml" />
145
+ <item index="137" class="java.lang.String" itemvalue="pycparser" />
146
+ <item index="138" class="java.lang.String" itemvalue="pyasn1-modules" />
147
+ <item index="139" class="java.lang.String" itemvalue="tables" />
148
+ <item index="140" class="java.lang.String" itemvalue="sentry-sdk" />
149
+ <item index="141" class="java.lang.String" itemvalue="astunparse" />
150
+ <item index="142" class="java.lang.String" itemvalue="imutils" />
151
+ <item index="143" class="java.lang.String" itemvalue="docutils" />
152
+ <item index="144" class="java.lang.String" itemvalue="multiprocess" />
153
+ <item index="145" class="java.lang.String" itemvalue="pyproj" />
154
+ <item index="146" class="java.lang.String" itemvalue="nvidia-cuda-runtime-cu12" />
155
+ <item index="147" class="java.lang.String" itemvalue="sklearn-pandas" />
156
+ <item index="148" class="java.lang.String" itemvalue="terminado" />
157
+ <item index="149" class="java.lang.String" itemvalue="pyperclip" />
158
+ <item index="150" class="java.lang.String" itemvalue="yellowbrick" />
159
+ <item index="151" class="java.lang.String" itemvalue="llama_cpp_python" />
160
+ <item index="152" class="java.lang.String" itemvalue="audioread" />
161
+ <item index="153" class="java.lang.String" itemvalue="distributed" />
162
+ <item index="154" class="java.lang.String" itemvalue="jupyter-client" />
163
+ <item index="155" class="java.lang.String" itemvalue="pandas-stubs" />
164
+ <item index="156" class="java.lang.String" itemvalue="ipykernel" />
165
+ <item index="157" class="java.lang.String" itemvalue="psutil" />
166
+ <item index="158" class="java.lang.String" itemvalue="flatbuffers" />
167
+ <item index="159" class="java.lang.String" itemvalue="natsort" />
168
+ <item index="160" class="java.lang.String" itemvalue="geemap" />
169
+ <item index="161" class="java.lang.String" itemvalue="platformdirs" />
170
+ <item index="162" class="java.lang.String" itemvalue="portpicker" />
171
+ <item index="163" class="java.lang.String" itemvalue="tensorstore" />
172
+ <item index="164" class="java.lang.String" itemvalue="humanize" />
173
+ <item index="165" class="java.lang.String" itemvalue="stanio" />
174
+ <item index="166" class="java.lang.String" itemvalue="blosc2" />
175
+ <item index="167" class="java.lang.String" itemvalue="etuples" />
176
+ <item index="168" class="java.lang.String" itemvalue="lightgbm" />
177
+ <item index="169" class="java.lang.String" itemvalue="msgpack" />
178
+ <item index="170" class="java.lang.String" itemvalue="PyJWT" />
179
+ <item index="171" class="java.lang.String" itemvalue="folium" />
180
+ <item index="172" class="java.lang.String" itemvalue="nvidia-nvjitlink-cu12" />
181
+ <item index="173" class="java.lang.String" itemvalue="prophet" />
182
+ <item index="174" class="java.lang.String" itemvalue="nvidia-cusparse-cu12" />
183
+ <item index="175" class="java.lang.String" itemvalue="pandocfilters" />
184
+ <item index="176" class="java.lang.String" itemvalue="bidict" />
185
+ <item index="177" class="java.lang.String" itemvalue="fastprogress" />
186
+ <item index="178" class="java.lang.String" itemvalue="imgaug" />
187
+ <item index="179" class="java.lang.String" itemvalue="seaborn" />
188
+ <item index="180" class="java.lang.String" itemvalue="tensorflow-hub" />
189
+ <item index="181" class="java.lang.String" itemvalue="zipp" />
190
+ <item index="182" class="java.lang.String" itemvalue="google-cloud-translate" />
191
+ <item index="183" class="java.lang.String" itemvalue="itsdangerous" />
192
+ <item index="184" class="java.lang.String" itemvalue="cohere" />
193
+ <item index="185" class="java.lang.String" itemvalue="scipy" />
194
+ <item index="186" class="java.lang.String" itemvalue="google-cloud-resource-manager" />
195
+ <item index="187" class="java.lang.String" itemvalue="scooby" />
196
+ <item index="188" class="java.lang.String" itemvalue="etils" />
197
+ <item index="189" class="java.lang.String" itemvalue="opencv-python" />
198
+ <item index="190" class="java.lang.String" itemvalue="qdldl" />
199
+ <item index="191" class="java.lang.String" itemvalue="pymc" />
200
+ <item index="192" class="java.lang.String" itemvalue="mistune" />
201
+ <item index="193" class="java.lang.String" itemvalue="pandas" />
202
+ <item index="194" class="java.lang.String" itemvalue="pydotplus" />
203
+ <item index="195" class="java.lang.String" itemvalue="Sphinx" />
204
+ <item index="196" class="java.lang.String" itemvalue="future" />
205
+ <item index="197" class="java.lang.String" itemvalue="cmake" />
206
+ <item index="198" class="java.lang.String" itemvalue="malloy" />
207
+ <item index="199" class="java.lang.String" itemvalue="dbus-python" />
208
+ <item index="200" class="java.lang.String" itemvalue="setproctitle" />
209
+ <item index="201" class="java.lang.String" itemvalue="imbalanced-learn" />
210
+ <item index="202" class="java.lang.String" itemvalue="notebook_shim" />
211
+ <item index="203" class="java.lang.String" itemvalue="googleapis-common-protos" />
212
+ <item index="204" class="java.lang.String" itemvalue="python-dateutil" />
213
+ <item index="205" class="java.lang.String" itemvalue="cvxopt" />
214
+ <item index="206" class="java.lang.String" itemvalue="locket" />
215
+ <item index="207" class="java.lang.String" itemvalue="tf_keras" />
216
+ <item index="208" class="java.lang.String" itemvalue="snowballstemmer" />
217
+ <item index="209" class="java.lang.String" itemvalue="prefetch-generator" />
218
+ <item index="210" class="java.lang.String" itemvalue="contextlib2" />
219
+ <item index="211" class="java.lang.String" itemvalue="anyio" />
220
+ <item index="212" class="java.lang.String" itemvalue="polars" />
221
+ <item index="213" class="java.lang.String" itemvalue="rpy2" />
222
+ <item index="214" class="java.lang.String" itemvalue="ipyevents" />
223
+ <item index="215" class="java.lang.String" itemvalue="kiwisolver" />
224
+ <item index="216" class="java.lang.String" itemvalue="datascience" />
225
+ <item index="217" class="java.lang.String" itemvalue="mdit-py-plugins" />
226
+ <item index="218" class="java.lang.String" itemvalue="autograd" />
227
+ <item index="219" class="java.lang.String" itemvalue="backcall" />
228
+ <item index="220" class="java.lang.String" itemvalue="peft" />
229
+ <item index="221" class="java.lang.String" itemvalue="gym" />
230
+ <item index="222" class="java.lang.String" itemvalue="CacheControl" />
231
+ <item index="223" class="java.lang.String" itemvalue="requirements-parser" />
232
+ <item index="224" class="java.lang.String" itemvalue="diskcache" />
233
+ <item index="225" class="java.lang.String" itemvalue="scikit-image" />
234
+ <item index="226" class="java.lang.String" itemvalue="earthengine-api" />
235
+ <item index="227" class="java.lang.String" itemvalue="more-itertools" />
236
+ <item index="228" class="java.lang.String" itemvalue="imageio-ffmpeg" />
237
+ <item index="229" class="java.lang.String" itemvalue="cloudpickle" />
238
+ <item index="230" class="java.lang.String" itemvalue="importlib-metadata" />
239
+ <item index="231" class="java.lang.String" itemvalue="jeepney" />
240
+ <item index="232" class="java.lang.String" itemvalue="requests-oauthlib" />
241
+ <item index="233" class="java.lang.String" itemvalue="google-generativeai" />
242
+ <item index="234" class="java.lang.String" itemvalue="google-auth-httplib2" />
243
+ <item index="235" class="java.lang.String" itemvalue="urllib3" />
244
+ <item index="236" class="java.lang.String" itemvalue="Cython" />
245
+ <item index="237" class="java.lang.String" itemvalue="tensorflow-metadata" />
246
+ <item index="238" class="java.lang.String" itemvalue="hyperopt" />
247
+ <item index="239" class="java.lang.String" itemvalue="nbformat" />
248
+ <item index="240" class="java.lang.String" itemvalue="GDAL" />
249
+ <item index="241" class="java.lang.String" itemvalue="ipyleaflet" />
250
+ <item index="242" class="java.lang.String" itemvalue="langchain-text-splitters" />
251
+ <item index="243" class="java.lang.String" itemvalue="google-cloud-firestore" />
252
+ <item index="244" class="java.lang.String" itemvalue="google-auth" />
253
+ <item index="245" class="java.lang.String" itemvalue="openpyxl" />
254
+ <item index="246" class="java.lang.String" itemvalue="gensim" />
255
+ <item index="247" class="java.lang.String" itemvalue="google-pasta" />
256
+ <item index="248" class="java.lang.String" itemvalue="tzlocal" />
257
+ <item index="249" class="java.lang.String" itemvalue="scikit-learn" />
258
+ <item index="250" class="java.lang.String" itemvalue="psycopg2" />
259
+ <item index="251" class="java.lang.String" itemvalue="cufflinks" />
260
+ <item index="252" class="java.lang.String" itemvalue="eerepr" />
261
+ <item index="253" class="java.lang.String" itemvalue="geocoder" />
262
+ <item index="254" class="java.lang.String" itemvalue="langchain-community" />
263
+ <item index="255" class="java.lang.String" itemvalue="graphviz" />
264
+ <item index="256" class="java.lang.String" itemvalue="pyarrow-hotfix" />
265
+ <item index="257" class="java.lang.String" itemvalue="fastai" />
266
+ <item index="258" class="java.lang.String" itemvalue="jax" />
267
+ <item index="259" class="java.lang.String" itemvalue="contourpy" />
268
+ <item index="260" class="java.lang.String" itemvalue="prettytable" />
269
+ <item index="261" class="java.lang.String" itemvalue="jupyterlab_pygments" />
270
+ <item index="262" class="java.lang.String" itemvalue="tensorboard" />
271
+ <item index="263" class="java.lang.String" itemvalue="imageio" />
272
+ <item index="264" class="java.lang.String" itemvalue="matplotlib" />
273
+ <item index="265" class="java.lang.String" itemvalue="sqlglot" />
274
+ <item index="266" class="java.lang.String" itemvalue="atpublic" />
275
+ <item index="267" class="java.lang.String" itemvalue="referencing" />
276
+ <item index="268" class="java.lang.String" itemvalue="rsa" />
277
+ <item index="269" class="java.lang.String" itemvalue="langchain-openai" />
278
+ <item index="270" class="java.lang.String" itemvalue="confection" />
279
+ <item index="271" class="java.lang.String" itemvalue="pyerfa" />
280
+ <item index="272" class="java.lang.String" itemvalue="pluggy" />
281
+ <item index="273" class="java.lang.String" itemvalue="numpy" />
282
+ <item index="274" class="java.lang.String" itemvalue="py4j" />
283
+ <item index="275" class="java.lang.String" itemvalue="fastavro" />
284
+ <item index="276" class="java.lang.String" itemvalue="wadllib" />
285
+ <item index="277" class="java.lang.String" itemvalue="pyOpenSSL" />
286
+ <item index="278" class="java.lang.String" itemvalue="PyWavelets" />
287
+ <item index="279" class="java.lang.String" itemvalue="smart-open" />
288
+ <item index="280" class="java.lang.String" itemvalue="grpcio-status" />
289
+ <item index="281" class="java.lang.String" itemvalue="prompt-toolkit" />
290
+ <item index="282" class="java.lang.String" itemvalue="linkify-it-py" />
291
+ <item index="283" class="java.lang.String" itemvalue="orbax-checkpoint" />
292
+ <item index="284" class="java.lang.String" itemvalue="db-dtypes" />
293
+ <item index="285" class="java.lang.String" itemvalue="soxr" />
294
+ <item index="286" class="java.lang.String" itemvalue="Send2Trash" />
295
+ <item index="287" class="java.lang.String" itemvalue="google-cloud-bigquery-connection" />
296
+ <item index="288" class="java.lang.String" itemvalue="cupy-cuda12x" />
297
+ <item index="289" class="java.lang.String" itemvalue="thinc" />
298
+ <item index="290" class="java.lang.String" itemvalue="google-cloud-iam" />
299
+ <item index="291" class="java.lang.String" itemvalue="pytz" />
300
+ <item index="292" class="java.lang.String" itemvalue="cloudpathlib" />
301
+ <item index="293" class="java.lang.String" itemvalue="keyring" />
302
+ <item index="294" class="java.lang.String" itemvalue="textblob" />
303
+ <item index="295" class="java.lang.String" itemvalue="traitlets" />
304
+ <item index="296" class="java.lang.String" itemvalue="protobuf" />
305
+ <item index="297" class="java.lang.String" itemvalue="PyDrive" />
306
+ <item index="298" class="java.lang.String" itemvalue="shapely" />
307
+ <item index="299" class="java.lang.String" itemvalue="cvxpy" />
308
+ <item index="300" class="java.lang.String" itemvalue="ibis-framework" />
309
+ <item index="301" class="java.lang.String" itemvalue="tinycss2" />
310
+ <item index="302" class="java.lang.String" itemvalue="mkl" />
311
+ <item index="303" class="java.lang.String" itemvalue="fsspec" />
312
+ <item index="304" class="java.lang.String" itemvalue="nvidia-curand-cu12" />
313
+ <item index="305" class="java.lang.String" itemvalue="holidays" />
314
+ <item index="306" class="java.lang.String" itemvalue="kagglehub" />
315
+ <item index="307" class="java.lang.String" itemvalue="tensorflow-probability" />
316
+ <item index="308" class="java.lang.String" itemvalue="pyzmq" />
317
+ <item index="309" class="java.lang.String" itemvalue="keras" />
318
+ <item index="310" class="java.lang.String" itemvalue="google-api-core" />
319
+ <item index="311" class="java.lang.String" itemvalue="tokenizers" />
320
+ <item index="312" class="java.lang.String" itemvalue="lazr.restfulclient" />
321
+ <item index="313" class="java.lang.String" itemvalue="torchdata" />
322
+ <item index="314" class="java.lang.String" itemvalue="orjson" />
323
+ <item index="315" class="java.lang.String" itemvalue="tf-slim" />
324
+ <item index="316" class="java.lang.String" itemvalue="catalogue" />
325
+ <item index="317" class="java.lang.String" itemvalue="fastrlock" />
326
+ <item index="318" class="java.lang.String" itemvalue="xarray" />
327
+ <item index="319" class="java.lang.String" itemvalue="array-record" />
328
+ <item index="320" class="java.lang.String" itemvalue="widgetsnbextension" />
329
+ <item index="321" class="java.lang.String" itemvalue="plotnine" />
330
+ <item index="322" class="java.lang.String" itemvalue="multipledispatch" />
331
+ <item index="323" class="java.lang.String" itemvalue="ipytree" />
332
+ <item index="324" class="java.lang.String" itemvalue="langchain-experimental" />
333
+ <item index="325" class="java.lang.String" itemvalue="mizani" />
334
+ <item index="326" class="java.lang.String" itemvalue="numexpr" />
335
+ <item index="327" class="java.lang.String" itemvalue="PyDrive2" />
336
+ <item index="328" class="java.lang.String" itemvalue="distro" />
337
+ <item index="329" class="java.lang.String" itemvalue="python-box" />
338
+ <item index="330" class="java.lang.String" itemvalue="firebase-admin" />
339
+ <item index="331" class="java.lang.String" itemvalue="webcolors" />
340
+ <item index="332" class="java.lang.String" itemvalue="types-pytz" />
341
+ <item index="333" class="java.lang.String" itemvalue="httplib2" />
342
+ <item index="334" class="java.lang.String" itemvalue="llvmlite" />
343
+ <item index="335" class="java.lang.String" itemvalue="grpc-google-iam-v1" />
344
+ <item index="336" class="java.lang.String" itemvalue="google-resumable-media" />
345
+ <item index="337" class="java.lang.String" itemvalue="param" />
346
+ <item index="338" class="java.lang.String" itemvalue="httpimport" />
347
+ <item index="339" class="java.lang.String" itemvalue="blis" />
348
+ <item index="340" class="java.lang.String" itemvalue="typer" />
349
+ <item index="341" class="java.lang.String" itemvalue="pyproject_hooks" />
350
+ <item index="342" class="java.lang.String" itemvalue="ipython" />
351
+ <item index="343" class="java.lang.String" itemvalue="fastjsonschema" />
352
+ <item index="344" class="java.lang.String" itemvalue="colour" />
353
+ <item index="345" class="java.lang.String" itemvalue="tweepy" />
354
+ <item index="346" class="java.lang.String" itemvalue="mlxtend" />
355
+ <item index="347" class="java.lang.String" itemvalue="matplotlib-venn" />
356
+ <item index="348" class="java.lang.String" itemvalue="nvidia-cuda-cupti-cu12" />
357
+ <item index="349" class="java.lang.String" itemvalue="nvidia-cufft-cu12" />
358
+ <item index="350" class="java.lang.String" itemvalue="PyGObject" />
359
+ <item index="351" class="java.lang.String" itemvalue="bigframes" />
360
+ <item index="352" class="java.lang.String" itemvalue="Pygments" />
361
+ <item index="353" class="java.lang.String" itemvalue="music21" />
362
+ <item index="354" class="java.lang.String" itemvalue="moviepy" />
363
+ <item index="355" class="java.lang.String" itemvalue="sphinxcontrib-qthelp" />
364
+ <item index="356" class="java.lang.String" itemvalue="cons" />
365
+ <item index="357" class="java.lang.String" itemvalue="libclang" />
366
+ <item index="358" class="java.lang.String" itemvalue="pexpect" />
367
+ <item index="359" class="java.lang.String" itemvalue="SecretStorage" />
368
+ <item index="360" class="java.lang.String" itemvalue="ecos" />
369
+ <item index="361" class="java.lang.String" itemvalue="nbconvert" />
370
+ <item index="362" class="java.lang.String" itemvalue="pandas-datareader" />
371
+ <item index="363" class="java.lang.String" itemvalue="ratelim" />
372
+ <item index="364" class="java.lang.String" itemvalue="nvidia-cublas-cu12" />
373
+ <item index="365" class="java.lang.String" itemvalue="google-cloud-language" />
374
+ <item index="366" class="java.lang.String" itemvalue="osqp" />
375
+ <item index="367" class="java.lang.String" itemvalue="editdistance" />
376
+ <item index="368" class="java.lang.String" itemvalue="decorator" />
377
+ <item index="369" class="java.lang.String" itemvalue="pip-tools" />
378
+ <item index="370" class="java.lang.String" itemvalue="xarray-einstats" />
379
+ <item index="371" class="java.lang.String" itemvalue="google-cloud-storage" />
380
+ <item index="372" class="java.lang.String" itemvalue="py-cpuinfo" />
381
+ <item index="373" class="java.lang.String" itemvalue="pyasn1" />
382
+ <item index="374" class="java.lang.String" itemvalue="websocket-client" />
383
+ <item index="375" class="java.lang.String" itemvalue="sphinxcontrib-devhelp" />
384
+ <item index="376" class="java.lang.String" itemvalue="flax" />
385
+ <item index="377" class="java.lang.String" itemvalue="tensorflow" />
386
+ <item index="378" class="java.lang.String" itemvalue="tensorflow-datasets" />
387
+ <item index="379" class="java.lang.String" itemvalue="ml-dtypes" />
388
+ <item index="380" class="java.lang.String" itemvalue="logical-unification" />
389
+ <item index="381" class="java.lang.String" itemvalue="xgboost" />
390
+ <item index="382" class="java.lang.String" itemvalue="ipywidgets" />
391
+ <item index="383" class="java.lang.String" itemvalue="blinker" />
392
+ <item index="384" class="java.lang.String" itemvalue="pyarrow" />
393
+ <item index="385" class="java.lang.String" itemvalue="uritemplate" />
394
+ <item index="386" class="java.lang.String" itemvalue="tornado" />
395
+ <item index="387" class="java.lang.String" itemvalue="google-auth-oauthlib" />
396
+ <item index="388" class="java.lang.String" itemvalue="python-utils" />
397
+ <item index="389" class="java.lang.String" itemvalue="plotly" />
398
+ <item index="390" class="java.lang.String" itemvalue="tensorflow-io-gcs-filesystem" />
399
+ <item index="391" class="java.lang.String" itemvalue="sortedcontainers" />
400
+ <item index="392" class="java.lang.String" itemvalue="langcodes" />
401
+ <item index="393" class="java.lang.String" itemvalue="fiona" />
402
+ <item index="394" class="java.lang.String" itemvalue="termcolor" />
403
+ <item index="395" class="java.lang.String" itemvalue="jupyter-console" />
404
+ <item index="396" class="java.lang.String" itemvalue="bokeh" />
405
+ <item index="397" class="java.lang.String" itemvalue="langchain-core" />
406
+ <item index="398" class="java.lang.String" itemvalue="webencodings" />
407
+ <item index="399" class="java.lang.String" itemvalue="Pillow" />
408
+ <item index="400" class="java.lang.String" itemvalue="sphinxcontrib-applehelp" />
409
+ <item index="401" class="java.lang.String" itemvalue="angle-emb" />
410
+ <item index="402" class="java.lang.String" itemvalue="html5lib" />
411
+ <item index="403" class="java.lang.String" itemvalue="missingno" />
412
+ <item index="404" class="java.lang.String" itemvalue="jsonpickle" />
413
+ <item index="405" class="java.lang.String" itemvalue="nbclient" />
414
+ <item index="406" class="java.lang.String" itemvalue="cycler" />
415
+ <item index="407" class="java.lang.String" itemvalue="dlib" />
416
+ <item index="408" class="java.lang.String" itemvalue="nvidia-cusolver-cu12" />
417
+ <item index="409" class="java.lang.String" itemvalue="spacy" />
418
+ <item index="410" class="java.lang.String" itemvalue="appdirs" />
419
+ <item index="411" class="java.lang.String" itemvalue="Markdown" />
420
+ <item index="412" class="java.lang.String" itemvalue="notebook" />
421
+ <item index="413" class="java.lang.String" itemvalue="xxhash" />
422
+ <item index="414" class="java.lang.String" itemvalue="opencv-contrib-python" />
423
+ <item index="415" class="java.lang.String" itemvalue="google-crc32c" />
424
+ <item index="416" class="java.lang.String" itemvalue="triton" />
425
+ <item index="417" class="java.lang.String" itemvalue="gspread" />
426
+ <item index="418" class="java.lang.String" itemvalue="cligj" />
427
+ <item index="419" class="java.lang.String" itemvalue="h5py" />
428
+ <item index="420" class="java.lang.String" itemvalue="wrapt" />
429
+ <item index="421" class="java.lang.String" itemvalue="google-cloud-aiplatform" />
430
+ <item index="422" class="java.lang.String" itemvalue="sphinxcontrib-htmlhelp" />
431
+ <item index="423" class="java.lang.String" itemvalue="lazr.uri" />
432
+ <item index="424" class="java.lang.String" itemvalue="fonttools" />
433
+ <item index="425" class="java.lang.String" itemvalue="pandas-gbq" />
434
+ <item index="426" class="java.lang.String" itemvalue="duckdb" />
435
+ <item index="427" class="java.lang.String" itemvalue="PySocks" />
436
+ <item index="428" class="java.lang.String" itemvalue="nvidia-nvtx-cu12" />
437
+ <item index="429" class="java.lang.String" itemvalue="tbb" />
438
+ <item index="430" class="java.lang.String" itemvalue="geopandas" />
439
+ <item index="431" class="java.lang.String" itemvalue="uc-micro-py" />
440
+ <item index="432" class="java.lang.String" itemvalue="dask" />
441
+ <item index="433" class="java.lang.String" itemvalue="google-cloud-core" />
442
+ <item index="434" class="java.lang.String" itemvalue="torchsummary" />
443
+ <item index="435" class="java.lang.String" itemvalue="pyviz_comms" />
444
+ <item index="436" class="java.lang.String" itemvalue="jieba" />
445
+ <item index="437" class="java.lang.String" itemvalue="tensorflow-gcs-config" />
446
+ <item index="438" class="java.lang.String" itemvalue="ptyprocess" />
447
+ <item index="439" class="java.lang.String" itemvalue="spacy-loggers" />
448
+ <item index="440" class="java.lang.String" itemvalue="tblib" />
449
+ <item index="441" class="java.lang.String" itemvalue="ipyfilechooser" />
450
+ <item index="442" class="java.lang.String" itemvalue="sqlparse" />
451
+ <item index="443" class="java.lang.String" itemvalue="preshed" />
452
+ <item index="444" class="java.lang.String" itemvalue="yfinance" />
453
+ <item index="445" class="java.lang.String" itemvalue="gym-notices" />
454
+ <item index="446" class="java.lang.String" itemvalue="geographiclib" />
455
+ <item index="447" class="java.lang.String" itemvalue="zict" />
456
+ <item index="448" class="java.lang.String" itemvalue="arviz" />
457
+ <item index="449" class="java.lang.String" itemvalue="Flask" />
458
+ <item index="450" class="java.lang.String" itemvalue="ipython-sql" />
459
+ <item index="451" class="java.lang.String" itemvalue="pytest" />
460
+ <item index="452" class="java.lang.String" itemvalue="sphinxcontrib-serializinghtml" />
461
+ <item index="453" class="java.lang.String" itemvalue="intel-openmp" />
462
+ <item index="454" class="java.lang.String" itemvalue="build" />
463
+ <item index="455" class="java.lang.String" itemvalue="chex" />
464
+ <item index="456" class="java.lang.String" itemvalue="proto-plus" />
465
+ <item index="457" class="java.lang.String" itemvalue="grpcio" />
466
+ <item index="458" class="java.lang.String" itemvalue="google-cloud-bigquery-storage" />
467
+ <item index="459" class="java.lang.String" itemvalue="pycocotools" />
468
+ <item index="460" class="java.lang.String" itemvalue="gcsfs" />
469
+ <item index="461" class="java.lang.String" itemvalue="pydata-google-auth" />
470
+ </list>
471
+ </value>
472
+ </option>
473
+ </inspection_tool>
474
+ </profile>
475
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="Python 3.10 (AI_Tutor)" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (AI_Tutor)" project-jdk-type="Python SDK" />
7
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/AI_Tutor.iml" filepath="$PROJECT_DIR$/.idea/AI_Tutor.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
README.md ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Towards AI 🤖: An AI Question-Answering Bot
2
+
3
+ ## Overview
4
+
5
+ **Towards AI 🤖** is a question-answering bot designed to assist students with queries related to Artificial Intelligence (AI), Machine Learning (ML), and Deep Learning (DL). It leverages Large Language Models (LLMs) and Retrieval-Augmented Generation (RAG) techniques to provide insightful answers, utilizing a vector database for efficient retrieval of knowledge.
6
+
7
+ ## Features
8
+
9
+ - AI, ML, and DL question-answering capabilities.
10
+ - Integration with ChromaDB for persistent storage.
11
+ - Utilizes OpenAI's models for generating responses.
12
+ - Gradio interface for easy interaction.
13
+ - Memory management for maintaining conversation context.
14
+
15
+ ## Requirements
16
+
17
+ Make sure you have installed the dependencies from requirements.txt file.
18
+
19
+ ```bash
20
+ pip install -r requirements.txt
21
+ ```
22
+
23
+ ## Setup
24
+
25
+ 1. **Clone the Repository**
26
+
27
+ ```bash
28
+ git clone https://huggingface.co/yourusername/towards-ai
29
+ cd towards-ai
30
+ ```
31
+
32
+ 2. **Environment Variables**
33
+ Create a .env file in the project root and set the following variables:
34
+ ```bash
35
+ OPENAI_API_KEY=
36
+ LOGFIRE_TOKEN=
37
+ COHERE_API_KEY=
38
+ MONGODB_URI=
39
+ DB_NAME=ai_tutor_knowledge
40
+ ```
41
+ 3. **Download the Vector Database**
42
+
43
+ The bot requires a pre-trained vector database. If it doesn't exist locally, it will automatically download it from Hugging Face Hub when you run the code.
44
+ 4. **Usage**
45
+
46
+ To start the chatbot, run the following command:
47
+ ```bash
48
+ python app.py
49
+ ```
50
+ 5. **Gradio Interface**
51
+
52
+ Once the application is running, you can access the chatbot interface at http://localhost:7860.
53
+
54
+ 6. **Interacting with the Bot**
55
+
56
+ You can ask the bot any question related to AI, ML, or DL. The bot is designed to provide clear, complete answers based on its knowledge base.
app.py ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Standard Library Imports
2
+ import logging
3
+ import os
4
+
5
+ # Third-party Imports
6
+ from dotenv import load_dotenv
7
+ from pymongo.mongo_client import MongoClient
8
+ from pymongo.server_api import ServerApi
9
+ import chromadb
10
+ import gradio as gr
11
+ import logfire
12
+
13
+ # LlamaIndex (Formerly GPT Index) Imports
14
+ from llama_index.core import VectorStoreIndex
15
+ from llama_index.core.node_parser import SentenceSplitter
16
+ from llama_index.core.retrievers import VectorIndexRetriever
17
+ from llama_index.vector_stores.chroma import ChromaVectorStore
18
+ from llama_index.postprocessor.cohere_rerank import CohereRerank
19
+ from llama_index.core.llms import MessageRole
20
+ from llama_index.core.memory import ChatSummaryMemoryBuffer
21
+ from llama_index.core.tools import RetrieverTool, ToolMetadata,QueryEngineTool
22
+ from llama_index.agent.openai import OpenAIAgent
23
+ from llama_index.embeddings.openai import OpenAIEmbedding
24
+ from llama_index.llms.openai import OpenAI
25
+ from llama_index.core import Settings
26
+
27
+ load_dotenv()
28
+
29
+ logger = logging.getLogger(__name__)
30
+ logging.basicConfig(level=logging.INFO)
31
+ logging.getLogger("httpx").setLevel(logging.WARNING)
32
+ logfire.configure()
33
+
34
+ system_message_openai_agent = """You are an AI teacher, answering questions from students of an applied AI course on Large Language Models (LLMs or llm) and Retrieval Augmented Generation (RAG) for LLMs.
35
+ Topics covered include training models, fine-tuning models, giving memory to LLMs, prompting tips, hallucinations and bias, vector databases, transformer architectures, embeddings, RAG frameworks such as
36
+ Langchain and LlamaIndex, making LLMs interact with tools, AI agents, reinforcement learning with human feedback (RLHF). Questions should be understood in this context. Your answers are aimed to teach
37
+ students, so they should be complete, clear, and easy to understand. Use the available tools to gather insights pertinent to the field of AI. To answer student questions, always use the all_sources_info
38
+ tool plus another one simultaneously. Decompose the user question into TWO sub questions (you are limited to two sub-questions) one for each tool. Meaning that should be using two tools in total for each user question.
39
+
40
+ These are the guidelines to consider if you decide to create sub questions:
41
+ * Be as specific as possible
42
+ * The two sub questions should be relevant to the user question
43
+ * The two sub questions should be answerable by the tools provided
44
+
45
+ Only some information returned by the tools might be relevant to the question, so ignore the irrelevant part and answer the question with what you have. Your responses are exclusively based on the output provided
46
+ by the tools. Refrain from incorporating information not directly obtained from the tool's responses. When the conversation deepens or shifts focus within a topic, adapt your input to the tools to reflect these nuances.
47
+ This means if a user requests further elaboration on a specific aspect of a previously discussed topic, you should reformulate your input to the tool to capture this new angle or more profound layer of inquiry. Provide
48
+ comprehensive answers, ideally structured in multiple paragraphs, drawing from the tool's variety of relevant details. The depth and breadth of your responses should align with the scope and specificity of the information retrieved.
49
+ Should the tools repository lack information on the queried topic, politely inform the user that the question transcends the bounds of your current knowledge base, citing the absence of relevant content in the tool's documentation.
50
+ At the end of your answers, always invite the students to ask deeper questions about the topic if they have any. Make sure reformulate the question to the tool to capture this new angle or more profound layer of inquiry.
51
+ Do not refer to the documentation directly, but use the information provided within it to answer questions. If code is provided in the information, share it with the students. It's important to provide complete code blocks so
52
+ they can execute the code when they copy and paste them. Make sure to format your answers in Markdown format, including code blocks and snippets.
53
+ """
54
+ TEXT_QA_TEMPLATE = """
55
+ You must answer only related to AI, ML, Deep Learning and related concept queries. You should not
56
+ answer on your own, Should answer from the retrieved chunks. If the query is not relevant to AI, you don't know the answer.
57
+ """
58
+
59
+
60
+ if not os.path.exists("data/ai_tutor_knowledge"):
61
+ os.makedirs("data/ai_tutor_knowledge")
62
+ # Download the vector database from the Hugging Face Hub if it doesn't exist locally
63
+ # https://huggingface.co/datasets/jaiganesan/ai_tutor_knowledge_vector_Store/tree/main
64
+ logfire.warn(
65
+ f"Vector database does not exist at 'data/ai_tutor_knowledge', downloading from Hugging Face Hub"
66
+ )
67
+ from huggingface_hub import snapshot_download
68
+
69
+ snapshot_download(
70
+ repo_id="jaiganesan/ai_tutor_knowledge_vector_Store",
71
+ local_dir="data",
72
+ repo_type="dataset",
73
+ )
74
+ logfire.info(f"Downloaded vector database to 'data/ai_tutor_knowledge'")
75
+
76
+
77
+ def setup_database(db_collection):
78
+ db = chromadb.PersistentClient(path=f"data/{db_collection}")
79
+ chroma_collection = db.get_or_create_collection(db_collection)
80
+ vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
81
+
82
+ index = VectorStoreIndex.from_vector_store(
83
+ vector_store=vector_store,
84
+ show_progress=True,
85
+ use_async=True,
86
+ embed_model=Settings.embed_model
87
+ )
88
+ vector_retriever = VectorIndexRetriever(
89
+ index=index,
90
+ similarity_top_k=15,
91
+ embed_model=Settings.embed_model,
92
+ use_async=True,
93
+ )
94
+
95
+ cohere_reranker = CohereRerank(top_n=7, model="embed-english-v3.0")
96
+
97
+ index_query_engine = index.as_query_engine(
98
+ llm=Settings.llm,
99
+ text_qa_template=TEXT_QA_TEMPLATE,
100
+ streaming=True,
101
+ # node_postprocessors=[cohere_reranker],
102
+ )
103
+ return index_query_engine, vector_retriever
104
+
105
+
106
+ DB_NAME = os.getenv("DB_NAME", "ai_tutor_knowledge")
107
+ DB_PATH = os.getenv("DB_PATH", f"scripts/{DB_NAME}")
108
+
109
+ query_engine, vector_retriever = setup_database(DB_NAME)
110
+
111
+ # Constants
112
+ CONCURRENCY_COUNT = int(os.getenv("CONCURRENCY_COUNT", 64))
113
+
114
+
115
+ __all__ = [
116
+ "CONCURRENCY_COUNT",
117
+ ]
118
+
119
+
120
+ def update_query_engine_tools(query_engine_, vector_retriever_):
121
+
122
+ tools = [
123
+ # QueryEngineTool(
124
+ # query_engine=query_engine_,
125
+ # metadata=ToolMetadata(
126
+ # name="AI_information",
127
+ # description="""The 'AI_information' tool serves as a comprehensive repository for insights into
128
+ # the field of artificial intelligence.""",
129
+ # ),
130
+ # ),
131
+ RetrieverTool(
132
+ retriever=vector_retriever_,
133
+ metadata=ToolMetadata(
134
+ name="AI_Information_related_resources",
135
+ description="Retriever retrieves AI, ML, DL related information from Vector store collection.",
136
+ ),
137
+ )
138
+ ]
139
+ return tools
140
+
141
+
142
+ def generate_completion(query, history, memory):
143
+ with logfire.span("Running query"):
144
+ logfire.info(f"User query: {query}")
145
+
146
+ chat_list = memory.get()
147
+
148
+ if len(chat_list) != 0:
149
+ user_index = [i for i, msg in enumerate(chat_list) if msg.role == MessageRole.USER]
150
+ if len(user_index) > len(history):
151
+ user_index_to_remove = user_index[len(history)]
152
+ chat_list = chat_list[:user_index_to_remove]
153
+ memory.set(chat_list)
154
+
155
+ logfire.info(f"chat_history: {len(memory.get())} {memory.get()}")
156
+ logfire.info(f"gradio_history: {len(history)} {history}")
157
+
158
+ llm = OpenAI(temperature=1, model="gpt-4o-mini", max_tokens=None)
159
+
160
+ client = llm._get_client()
161
+ logfire.instrument_openai(client)
162
+
163
+ agent_tools = update_query_engine_tools(query_engine, vector_retriever)
164
+
165
+ agent = OpenAIAgent.from_tools(
166
+ llm=Settings.llm,
167
+ memory=memory,
168
+ tools=agent_tools,
169
+ system_prompt=system_message_openai_agent,
170
+ )
171
+
172
+ completion = agent.stream_chat(query)
173
+
174
+ answer_str = ""
175
+ for token in completion.response_gen:
176
+ answer_str += token
177
+ yield answer_str
178
+
179
+ def vote(data: gr.LikeData):
180
+ pass
181
+ def save_completion(completion, history):
182
+ pass
183
+
184
+ with gr.Blocks(
185
+ fill_height=True,
186
+ title="Towards AI 🤖",
187
+ analytics_enabled=True,
188
+ ) as demo:
189
+
190
+ memory_state = gr.State(
191
+ lambda: ChatSummaryMemoryBuffer.from_defaults(
192
+ token_limit=120000,
193
+ )
194
+ )
195
+ chatbot = gr.Chatbot(
196
+ scale=1,
197
+ placeholder="<strong>Towards AI 🤖: A Question-Answering Bot for anything AI-related</strong><br>",
198
+ show_label=False,
199
+ likeable=True,
200
+ show_copy_button=True,
201
+ )
202
+ chatbot.like(vote, None, None)
203
+
204
+ gr.ChatInterface(
205
+ fn=generate_completion,
206
+ chatbot=chatbot,
207
+ additional_inputs=[memory_state],
208
+ )
209
+
210
+ if __name__ == "__main__":
211
+ Settings.llm = OpenAI(temperature=0, model="gpt-4o-mini")
212
+ Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
213
+ demo.queue(default_concurrency_limit=CONCURRENCY_COUNT)
214
+ demo.launch(debug=True, share=True)
data/.gitattributes ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.lz4 filter=lfs diff=lfs merge=lfs -text
12
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
13
+ *.model filter=lfs diff=lfs merge=lfs -text
14
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
15
+ *.npy filter=lfs diff=lfs merge=lfs -text
16
+ *.npz filter=lfs diff=lfs merge=lfs -text
17
+ *.onnx filter=lfs diff=lfs merge=lfs -text
18
+ *.ot filter=lfs diff=lfs merge=lfs -text
19
+ *.parquet filter=lfs diff=lfs merge=lfs -text
20
+ *.pb filter=lfs diff=lfs merge=lfs -text
21
+ *.pickle filter=lfs diff=lfs merge=lfs -text
22
+ *.pkl filter=lfs diff=lfs merge=lfs -text
23
+ *.pt filter=lfs diff=lfs merge=lfs -text
24
+ *.pth filter=lfs diff=lfs merge=lfs -text
25
+ *.rar filter=lfs diff=lfs merge=lfs -text
26
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
27
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
29
+ *.tar filter=lfs diff=lfs merge=lfs -text
30
+ *.tflite filter=lfs diff=lfs merge=lfs -text
31
+ *.tgz filter=lfs diff=lfs merge=lfs -text
32
+ *.wasm filter=lfs diff=lfs merge=lfs -text
33
+ *.xz filter=lfs diff=lfs merge=lfs -text
34
+ *.zip filter=lfs diff=lfs merge=lfs -text
35
+ *.zst filter=lfs diff=lfs merge=lfs -text
36
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
37
+ # Audio files - uncompressed
38
+ *.pcm filter=lfs diff=lfs merge=lfs -text
39
+ *.sam filter=lfs diff=lfs merge=lfs -text
40
+ *.raw filter=lfs diff=lfs merge=lfs -text
41
+ # Audio files - compressed
42
+ *.aac filter=lfs diff=lfs merge=lfs -text
43
+ *.flac filter=lfs diff=lfs merge=lfs -text
44
+ *.mp3 filter=lfs diff=lfs merge=lfs -text
45
+ *.ogg filter=lfs diff=lfs merge=lfs -text
46
+ *.wav filter=lfs diff=lfs merge=lfs -text
47
+ # Image files - uncompressed
48
+ *.bmp filter=lfs diff=lfs merge=lfs -text
49
+ *.gif filter=lfs diff=lfs merge=lfs -text
50
+ *.png filter=lfs diff=lfs merge=lfs -text
51
+ *.tiff filter=lfs diff=lfs merge=lfs -text
52
+ # Image files - compressed
53
+ *.jpg filter=lfs diff=lfs merge=lfs -text
54
+ *.jpeg filter=lfs diff=lfs merge=lfs -text
55
+ *.webp filter=lfs diff=lfs merge=lfs -text
56
+ # Video files - compressed
57
+ *.mp4 filter=lfs diff=lfs merge=lfs -text
58
+ *.webm filter=lfs diff=lfs merge=lfs -text
59
+ chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text
data/684af133-f877-4230-bde4-575cf53b6688/data_level0.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e66a2be815a9815c5001b2d192b43ab95f26e52be2a875b8150f41b9e9749aa7
3
+ size 31420000
data/684af133-f877-4230-bde4-575cf53b6688/header.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cf0a407cebb85ef24bab6c77779e5b999d288acbf1b0970ff4f0c976545a5692
3
+ size 100
data/684af133-f877-4230-bde4-575cf53b6688/index_metadata.pickle ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d19074db51dee4fd3ef1dc379225f876fd35403ce83d82d35b3e11bcc37c3561
3
+ size 288034
data/684af133-f877-4230-bde4-575cf53b6688/length.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:68c45e0f337dc80d92ba0e5627da92ed9f7f0f95ca03cb1720d2026764e48e88
3
+ size 20000
data/684af133-f877-4230-bde4-575cf53b6688/link_lists.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:58cdbed7639b76f40c563f4ec2e37e092e83827e702b187a8e770a6cc493ccb1
3
+ size 42780
data/ai_tutor_knowledge/chroma.sqlite3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:80ab2b40d651e47a8f09e36720f7379ae7983ee56ec842c9cb0cf4318b637948
3
+ size 147456
data/chroma.sqlite3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:37aadd5ba8e98a4f5ac8a1e099702ad6ff6bd1d3418e1b0c788db147561a7afa
3
+ size 204226560
requirements.txt ADDED
Binary file (8.23 kB). View file