kaisarhossain commited on
Commit
8220955
·
0 Parent(s):

Initial commit: Email classifier project

Browse files
.gitignore ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Environment variables
10
+ .env
11
+
12
+ # Virtual environments
13
+ .venv
.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
.idea/Smart-Email-Classification-App.iml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
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
+ <orderEntry type="jdk" jdkName="Python 3.10 (Smart-Email-Classification-App)" jdkType="Python SDK" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
5
+ <Languages>
6
+ <language minSize="125" name="Python" />
7
+ </Languages>
8
+ </inspection_tool>
9
+ <inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
10
+ <option name="myValues">
11
+ <value>
12
+ <list size="7">
13
+ <item index="0" class="java.lang.String" itemvalue="nobr" />
14
+ <item index="1" class="java.lang.String" itemvalue="noembed" />
15
+ <item index="2" class="java.lang.String" itemvalue="comment" />
16
+ <item index="3" class="java.lang.String" itemvalue="noscript" />
17
+ <item index="4" class="java.lang.String" itemvalue="embed" />
18
+ <item index="5" class="java.lang.String" itemvalue="script" />
19
+ <item index="6" class="java.lang.String" itemvalue="id" />
20
+ </list>
21
+ </value>
22
+ </option>
23
+ <option name="myCustomValuesEnabled" value="true" />
24
+ </inspection_tool>
25
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
26
+ <option name="ignoredPackages">
27
+ <value>
28
+ <list size="222">
29
+ <item index="0" class="java.lang.String" itemvalue="chromadb" />
30
+ <item index="1" class="java.lang.String" itemvalue="pandas" />
31
+ <item index="2" class="java.lang.String" itemvalue="langchain-community" />
32
+ <item index="3" class="java.lang.String" itemvalue="langchain-groq" />
33
+ <item index="4" class="java.lang.String" itemvalue="selenium" />
34
+ <item index="5" class="java.lang.String" itemvalue="langchain" />
35
+ <item index="6" class="java.lang.String" itemvalue="unstructured" />
36
+ <item index="7" class="java.lang.String" itemvalue="streamlit" />
37
+ <item index="8" class="java.lang.String" itemvalue="python-dotenv" />
38
+ <item index="9" class="java.lang.String" itemvalue="pydub" />
39
+ <item index="10" class="java.lang.String" itemvalue="pytz" />
40
+ <item index="11" class="java.lang.String" itemvalue="PIL" />
41
+ <item index="12" class="java.lang.String" itemvalue="langgraph" />
42
+ <item index="13" class="java.lang.String" itemvalue="langchain_google_community" />
43
+ <item index="14" class="java.lang.String" itemvalue="langchain-google-community" />
44
+ <item index="15" class="java.lang.String" itemvalue="langchain_tavily" />
45
+ <item index="16" class="java.lang.String" itemvalue="langchain-experimental" />
46
+ <item index="17" class="java.lang.String" itemvalue="starlette" />
47
+ <item index="18" class="java.lang.String" itemvalue="yaml" />
48
+ <item index="19" class="java.lang.String" itemvalue="google-pasta" />
49
+ <item index="20" class="java.lang.String" itemvalue="tzlocal" />
50
+ <item index="21" class="java.lang.String" itemvalue="greenlet" />
51
+ <item index="22" class="java.lang.String" itemvalue="validators" />
52
+ <item index="23" class="java.lang.String" itemvalue="marshmallow" />
53
+ <item index="24" class="java.lang.String" itemvalue="python-magic" />
54
+ <item index="25" class="java.lang.String" itemvalue="trio" />
55
+ <item index="26" class="java.lang.String" itemvalue="gradio_client" />
56
+ <item index="27" class="java.lang.String" itemvalue="monotonic" />
57
+ <item index="28" class="java.lang.String" itemvalue="prometheus_client" />
58
+ <item index="29" class="java.lang.String" itemvalue="PyPDF2" />
59
+ <item index="30" class="java.lang.String" itemvalue="st-annotated-text" />
60
+ <item index="31" class="java.lang.String" itemvalue="split-folders" />
61
+ <item index="32" class="java.lang.String" itemvalue="SpeechRecognition" />
62
+ <item index="33" class="java.lang.String" itemvalue="tensorboard-data-server" />
63
+ <item index="34" class="java.lang.String" itemvalue="asgiref" />
64
+ <item index="35" class="java.lang.String" itemvalue="pypdf" />
65
+ <item index="36" class="java.lang.String" itemvalue="click" />
66
+ <item index="37" class="java.lang.String" itemvalue="opentelemetry-util-http" />
67
+ <item index="38" class="java.lang.String" itemvalue="openai" />
68
+ <item index="39" class="java.lang.String" itemvalue="streamlit-embedcode" />
69
+ <item index="40" class="java.lang.String" itemvalue="boto3" />
70
+ <item index="41" class="java.lang.String" itemvalue="groovy" />
71
+ <item index="42" class="java.lang.String" itemvalue="pydantic_core" />
72
+ <item index="43" class="java.lang.String" itemvalue="tensorboard" />
73
+ <item index="44" class="java.lang.String" itemvalue="branca" />
74
+ <item index="45" class="java.lang.String" itemvalue="narwhals" />
75
+ <item index="46" class="java.lang.String" itemvalue="gTTS" />
76
+ <item index="47" class="java.lang.String" itemvalue="groq" />
77
+ <item index="48" class="java.lang.String" itemvalue="rsa" />
78
+ <item index="49" class="java.lang.String" itemvalue="langchain-openai" />
79
+ <item index="50" class="java.lang.String" itemvalue="trio-websocket" />
80
+ <item index="51" class="java.lang.String" itemvalue="snowflake-connector-python" />
81
+ <item index="52" class="java.lang.String" itemvalue="httpx-sse" />
82
+ <item index="53" class="java.lang.String" itemvalue="langgraph-checkpoint" />
83
+ <item index="54" class="java.lang.String" itemvalue="jupyter" />
84
+ <item index="55" class="java.lang.String" itemvalue="streamlit-card" />
85
+ <item index="56" class="java.lang.String" itemvalue="Deprecated" />
86
+ <item index="57" class="java.lang.String" itemvalue="pyogrio" />
87
+ <item index="58" class="java.lang.String" itemvalue="mmh3" />
88
+ <item index="59" class="java.lang.String" itemvalue="streamlit_mic_recorder" />
89
+ <item index="60" class="java.lang.String" itemvalue="pyee" />
90
+ <item index="61" class="java.lang.String" itemvalue="websockets" />
91
+ <item index="62" class="java.lang.String" itemvalue="soxr" />
92
+ <item index="63" class="java.lang.String" itemvalue="backoff" />
93
+ <item index="64" class="java.lang.String" itemvalue="pyppeteer" />
94
+ <item index="65" class="java.lang.String" itemvalue="aiofiles" />
95
+ <item index="66" class="java.lang.String" itemvalue="jsonpointer" />
96
+ <item index="67" class="java.lang.String" itemvalue="langgraph-sdk" />
97
+ <item index="68" class="java.lang.String" itemvalue="opentelemetry-semantic-conventions" />
98
+ <item index="69" class="java.lang.String" itemvalue="streamlit-image-coordinates" />
99
+ <item index="70" class="java.lang.String" itemvalue="ruff" />
100
+ <item index="71" class="java.lang.String" itemvalue="google-api-python-client" />
101
+ <item index="72" class="java.lang.String" itemvalue="tiktoken" />
102
+ <item index="73" class="java.lang.String" itemvalue="absl-py" />
103
+ <item index="74" class="java.lang.String" itemvalue="filetype" />
104
+ <item index="75" class="java.lang.String" itemvalue="kubernetes" />
105
+ <item index="76" class="java.lang.String" itemvalue="protobuf" />
106
+ <item index="77" class="java.lang.String" itemvalue="shapely" />
107
+ <item index="78" class="java.lang.String" itemvalue="streamlit-vertical-slider" />
108
+ <item index="79" class="java.lang.String" itemvalue="jiter" />
109
+ <item index="80" class="java.lang.String" itemvalue="atomicwrites" />
110
+ <item index="81" class="java.lang.String" itemvalue="st-theme" />
111
+ <item index="82" class="java.lang.String" itemvalue="gast" />
112
+ <item index="83" class="java.lang.String" itemvalue="RapidFuzz" />
113
+ <item index="84" class="java.lang.String" itemvalue="semantic-version" />
114
+ <item index="85" class="java.lang.String" itemvalue="htbuilder" />
115
+ <item index="86" class="java.lang.String" itemvalue="oauthlib" />
116
+ <item index="87" class="java.lang.String" itemvalue="safehttpx" />
117
+ <item index="88" class="java.lang.String" itemvalue="keras" />
118
+ <item index="89" class="java.lang.String" itemvalue="uvloop" />
119
+ <item index="90" class="java.lang.String" itemvalue="google-api-core" />
120
+ <item index="91" class="java.lang.String" itemvalue="tokenizers" />
121
+ <item index="92" class="java.lang.String" itemvalue="uv" />
122
+ <item index="93" class="java.lang.String" itemvalue="isoduration" />
123
+ <item index="94" class="java.lang.String" itemvalue="unstructured-client" />
124
+ <item index="95" class="java.lang.String" itemvalue="fqdn" />
125
+ <item index="96" class="java.lang.String" itemvalue="langdetect" />
126
+ <item index="97" class="java.lang.String" itemvalue="opentelemetry-exporter-otlp-proto-grpc" />
127
+ <item index="98" class="java.lang.String" itemvalue="orjson" />
128
+ <item index="99" class="java.lang.String" itemvalue="py_rust_stemmers" />
129
+ <item index="100" class="java.lang.String" itemvalue="bcrypt" />
130
+ <item index="101" class="java.lang.String" itemvalue="opentelemetry-instrumentation-fastapi" />
131
+ <item index="102" class="java.lang.String" itemvalue="anaconda-cloud-auth" />
132
+ <item index="103" class="java.lang.String" itemvalue="librosa" />
133
+ <item index="104" class="java.lang.String" itemvalue="langsmith" />
134
+ <item index="105" class="java.lang.String" itemvalue="webcolors" />
135
+ <item index="106" class="java.lang.String" itemvalue="opentelemetry-sdk" />
136
+ <item index="107" class="java.lang.String" itemvalue="httplib2" />
137
+ <item index="108" class="java.lang.String" itemvalue="uri-template" />
138
+ <item index="109" class="java.lang.String" itemvalue="python-iso639" />
139
+ <item index="110" class="java.lang.String" itemvalue="sounddevice" />
140
+ <item index="111" class="java.lang.String" itemvalue="tomlkit" />
141
+ <item index="112" class="java.lang.String" itemvalue="snowflake-snowpark-python" />
142
+ <item index="113" class="java.lang.String" itemvalue="typer" />
143
+ <item index="114" class="java.lang.String" itemvalue="importlib_resources" />
144
+ <item index="115" class="java.lang.String" itemvalue="asn1crypto" />
145
+ <item index="116" class="java.lang.String" itemvalue="pyproject_hooks" />
146
+ <item index="117" class="java.lang.String" itemvalue="pooch" />
147
+ <item index="118" class="java.lang.String" itemvalue="s3transfer" />
148
+ <item index="119" class="java.lang.String" itemvalue="soundfile" />
149
+ <item index="120" class="java.lang.String" itemvalue="fpdf" />
150
+ <item index="121" class="java.lang.String" itemvalue="opentelemetry-exporter-otlp-proto-common" />
151
+ <item index="122" class="java.lang.String" itemvalue="opentelemetry-proto" />
152
+ <item index="123" class="java.lang.String" itemvalue="streamlit-extras" />
153
+ <item index="124" class="java.lang.String" itemvalue="streamlit-faker" />
154
+ <item index="125" class="java.lang.String" itemvalue="posthog" />
155
+ <item index="126" class="java.lang.String" itemvalue="pyasn1-modules" />
156
+ <item index="127" class="java.lang.String" itemvalue="pyls-spyder" />
157
+ <item index="128" class="java.lang.String" itemvalue="PyQt5" />
158
+ <item index="129" class="java.lang.String" itemvalue="streamlit-avatar" />
159
+ <item index="130" class="java.lang.String" itemvalue="astunparse" />
160
+ <item index="131" class="java.lang.String" itemvalue="PyAudio" />
161
+ <item index="132" class="java.lang.String" itemvalue="pyproj" />
162
+ <item index="133" class="java.lang.String" itemvalue="streamlit-toggle-switch" />
163
+ <item index="134" class="java.lang.String" itemvalue="libclang" />
164
+ <item index="135" class="java.lang.String" itemvalue="pydantic" />
165
+ <item index="136" class="java.lang.String" itemvalue="opentelemetry-api" />
166
+ <item index="137" class="java.lang.String" itemvalue="audioread" />
167
+ <item index="138" class="java.lang.String" itemvalue="reportlab" />
168
+ <item index="139" class="java.lang.String" itemvalue="loguru" />
169
+ <item index="140" class="java.lang.String" itemvalue="streamlit-cropper" />
170
+ <item index="141" class="java.lang.String" itemvalue="wsproto" />
171
+ <item index="142" class="java.lang.String" itemvalue="attrs" />
172
+ <item index="143" class="java.lang.String" itemvalue="PyQtWebEngine" />
173
+ <item index="144" class="java.lang.String" itemvalue="dataclasses-json" />
174
+ <item index="145" class="java.lang.String" itemvalue="flatbuffers" />
175
+ <item index="146" class="java.lang.String" itemvalue="optree" />
176
+ <item index="147" class="java.lang.String" itemvalue="folium" />
177
+ <item index="148" class="java.lang.String" itemvalue="fastembed" />
178
+ <item index="149" class="java.lang.String" itemvalue="tensorflow" />
179
+ <item index="150" class="java.lang.String" itemvalue="tenacity" />
180
+ <item index="151" class="java.lang.String" itemvalue="opt_einsum" />
181
+ <item index="152" class="java.lang.String" itemvalue="ml-dtypes" />
182
+ <item index="153" class="java.lang.String" itemvalue="xgboost" />
183
+ <item index="154" class="java.lang.String" itemvalue="outcome" />
184
+ <item index="155" class="java.lang.String" itemvalue="uritemplate" />
185
+ <item index="156" class="java.lang.String" itemvalue="watchfiles" />
186
+ <item index="157" class="java.lang.String" itemvalue="botocore" />
187
+ <item index="158" class="java.lang.String" itemvalue="langgraph-prebuilt" />
188
+ <item index="159" class="java.lang.String" itemvalue="plotly" />
189
+ <item index="160" class="java.lang.String" itemvalue="python-multipart" />
190
+ <item index="161" class="java.lang.String" itemvalue="termcolor" />
191
+ <item index="162" class="java.lang.String" itemvalue="namex" />
192
+ <item index="163" class="java.lang.String" itemvalue="notebook-as-pdf" />
193
+ <item index="164" class="java.lang.String" itemvalue="typing_extensions" />
194
+ <item index="165" class="java.lang.String" itemvalue="langchain-core" />
195
+ <item index="166" class="java.lang.String" itemvalue="opentelemetry-instrumentation" />
196
+ <item index="167" class="java.lang.String" itemvalue="emoji" />
197
+ <item index="168" class="java.lang.String" itemvalue="googleapis-common-protos" />
198
+ <item index="169" class="java.lang.String" itemvalue="huggingface-hub" />
199
+ <item index="170" class="java.lang.String" itemvalue="PyPika" />
200
+ <item index="171" class="java.lang.String" itemvalue="setuptools" />
201
+ <item index="172" class="java.lang.String" itemvalue="sse-starlette" />
202
+ <item index="173" class="java.lang.String" itemvalue="httptools" />
203
+ <item index="174" class="java.lang.String" itemvalue="appdirs" />
204
+ <item index="175" class="java.lang.String" itemvalue="Faker" />
205
+ <item index="176" class="java.lang.String" itemvalue="playwright" />
206
+ <item index="177" class="java.lang.String" itemvalue="anyio" />
207
+ <item index="178" class="java.lang.String" itemvalue="mcp" />
208
+ <item index="179" class="java.lang.String" itemvalue="Markdown" />
209
+ <item index="180" class="java.lang.String" itemvalue="opentelemetry-instrumentation-asgi" />
210
+ <item index="181" class="java.lang.String" itemvalue="notebook" />
211
+ <item index="182" class="java.lang.String" itemvalue="xxhash" />
212
+ <item index="183" class="java.lang.String" itemvalue="streamlit-camera-input-live" />
213
+ <item index="184" class="java.lang.String" itemvalue="markdownlit" />
214
+ <item index="185" class="java.lang.String" itemvalue="jupyterlab_server" />
215
+ <item index="186" class="java.lang.String" itemvalue="coloredlogs" />
216
+ <item index="187" class="java.lang.String" itemvalue="pymdown-extensions" />
217
+ <item index="188" class="java.lang.String" itemvalue="geopandas" />
218
+ <item index="189" class="java.lang.String" itemvalue="langchain-chroma" />
219
+ <item index="190" class="java.lang.String" itemvalue="ffmpy" />
220
+ <item index="191" class="java.lang.String" itemvalue="streamlit_folium" />
221
+ <item index="192" class="java.lang.String" itemvalue="google-cloud-core" />
222
+ <item index="193" class="java.lang.String" itemvalue="ormsgpack" />
223
+ <item index="194" class="java.lang.String" itemvalue="gradio" />
224
+ <item index="195" class="java.lang.String" itemvalue="overpy" />
225
+ <item index="196" class="java.lang.String" itemvalue="plumbum" />
226
+ <item index="197" class="java.lang.String" itemvalue="typing-inspection" />
227
+ <item index="198" class="java.lang.String" itemvalue="requests-oauthlib" />
228
+ <item index="199" class="java.lang.String" itemvalue="onnxruntime" />
229
+ <item index="200" class="java.lang.String" itemvalue="chroma-hnswlib" />
230
+ <item index="201" class="java.lang.String" itemvalue="pandoc" />
231
+ <item index="202" class="java.lang.String" itemvalue="streamlit-keyup" />
232
+ <item index="203" class="java.lang.String" itemvalue="eval_type_backport" />
233
+ <item index="204" class="java.lang.String" itemvalue="google-auth-httplib2" />
234
+ <item index="205" class="java.lang.String" itemvalue="urllib3" />
235
+ <item index="206" class="java.lang.String" itemvalue="jupyterlab" />
236
+ <item index="207" class="java.lang.String" itemvalue="favicon" />
237
+ <item index="208" class="java.lang.String" itemvalue="wheel" />
238
+ <item index="209" class="java.lang.String" itemvalue="humanfriendly" />
239
+ <item index="210" class="java.lang.String" itemvalue="zstandard" />
240
+ <item index="211" class="java.lang.String" itemvalue="fastapi" />
241
+ <item index="212" class="java.lang.String" itemvalue="build" />
242
+ <item index="213" class="java.lang.String" itemvalue="typing-inspect" />
243
+ <item index="214" class="java.lang.String" itemvalue="proto-plus" />
244
+ <item index="215" class="java.lang.String" itemvalue="durationpy" />
245
+ <item index="216" class="java.lang.String" itemvalue="grpcio" />
246
+ <item index="217" class="java.lang.String" itemvalue="langchain-text-splitters" />
247
+ <item index="218" class="java.lang.String" itemvalue="google-auth" />
248
+ <item index="219" class="java.lang.String" itemvalue="fsspec" />
249
+ <item index="220" class="java.lang.String" itemvalue="tzdata" />
250
+ <item index="221" class="java.lang.String" itemvalue="numpy" />
251
+ </list>
252
+ </value>
253
+ </option>
254
+ </inspection_tool>
255
+ <inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
256
+ <option name="ignoredErrors">
257
+ <list>
258
+ <option value="E402" />
259
+ </list>
260
+ </option>
261
+ </inspection_tool>
262
+ <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
263
+ <option name="ignoredErrors">
264
+ <list>
265
+ <option value="N803" />
266
+ </list>
267
+ </option>
268
+ </inspection_tool>
269
+ <inspection_tool class="PyRedeclarationInspection" enabled="false" level="WARNING" enabled_by_default="false" />
270
+ <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
271
+ <option name="ignoredIdentifiers">
272
+ <list>
273
+ <option value="brain_of_the_doctor.*" />
274
+ </list>
275
+ </option>
276
+ </inspection_tool>
277
+ <inspection_tool class="VulnerableLibrariesLocal" enabled="true" level="WARNING" enabled_by_default="true">
278
+ <option name="isIgnoringEnabled" value="true" />
279
+ <option name="ignoredModules">
280
+ <list>
281
+ <option value="TrippieAI" />
282
+ </list>
283
+ </option>
284
+ <option name="ignoredPackages">
285
+ <list>
286
+ <option value="null:requests:2.32.2" />
287
+ </list>
288
+ </option>
289
+ <option name="ignoredReasons">
290
+ <list>
291
+ <option value="Fixed in branch" />
292
+ </list>
293
+ </option>
294
+ </inspection_tool>
295
+ </profile>
296
+ </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="/opt/anaconda3" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (Smart-Email-Classification-App)" 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/Smart-Email-Classification-App.iml" filepath="$PROJECT_DIR$/.idea/Smart-Email-Classification-App.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>
.python-version ADDED
@@ -0,0 +1 @@
 
 
1
+ 3.10
README.md ADDED
File without changes
app.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
4
+ from dotenv import load_dotenv
5
+ import os
6
+ from huggingface_hub import login
7
+ import numpy as np
8
+
9
+ # 1. Load Environment Variables
10
+ load_dotenv()
11
+ HF_TOKEN = os.getenv("HF_TOKEN")
12
+ MODEL_REPO = os.getenv("MODEL_REPO", "kaisarhossain/email_classifier_model") # default fallback
13
+
14
+ # Login to Hugging Face (optional if model is public)
15
+ if HF_TOKEN:
16
+ login(token=HF_TOKEN)
17
+
18
+ # 2. Load Model & Tokenizer
19
+ @st.cache_resource(show_spinner=True)
20
+ def load_model():
21
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO)
22
+ model = AutoModelForSequenceClassification.from_pretrained(MODEL_REPO)
23
+ return tokenizer, model
24
+
25
+ tokenizer, model = load_model()
26
+
27
+ # Define the label schema
28
+ LABELS = [
29
+ "Promotions",
30
+ "Spam",
31
+ "Social Media Updates",
32
+ "Forum Updates",
33
+ "Code Verification",
34
+ "Work Updates"
35
+ ]
36
+
37
+ # 3. Streamlit App Configuration
38
+ st.set_page_config(
39
+ page_title="Email Classifier using NLP",
40
+ page_icon="📧",
41
+ layout="wide",
42
+ initial_sidebar_state="collapsed"
43
+ )
44
+
45
+ st.markdown("""
46
+ <style>
47
+ body {
48
+ background: linear-gradient(to right, #eef2f3, #8e9eab);
49
+ }
50
+ .main-title {
51
+ text-align: center;
52
+ color: #222;
53
+ font-size: 2.3rem;
54
+ font-weight: 700;
55
+ }
56
+ .sub-title {
57
+ text-align: center;
58
+ color: #444;
59
+ font-size: 1.1rem;
60
+ }
61
+ .prediction-card {
62
+ background-color: white;
63
+ border-radius: 12px;
64
+ padding: 20px;
65
+ box-shadow: 0 4px 20px rgba(0,0,0,0.1);
66
+ margin-top: 20px;
67
+ }
68
+ </style>
69
+ """, unsafe_allow_html=True)
70
+
71
+ st.markdown("<h1 class='main-title'>📧 Smart Email Classifier</h1>", unsafe_allow_html=True)
72
+ st.markdown("<p class='sub-title'>The Smart Email Classifier application is capable of classifying emails of different types based on email subject or body using advanced Natural Language Processing (NLP) techniques and using a fine-tuned NLP model.</p>", unsafe_allow_html=True)
73
+
74
+ # 4. User Input Section
75
+ with st.container():
76
+ st.subheader("✉️ Enter email text (subject/body) for classification:")
77
+ email_text = st.text_area(
78
+ "Enter Email Text Below:",
79
+ placeholder="Example: Your code for verification is 123456 or Meeting scheduled for 3 PM today.",
80
+ height=150
81
+ )
82
+
83
+ # 5. Prediction Logic
84
+ def classify_email(text):
85
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=256)
86
+ with torch.no_grad():
87
+ outputs = model(**inputs)
88
+ probs = torch.nn.functional.softmax(outputs.logits, dim=1)
89
+ predicted_idx = torch.argmax(probs, dim=1).item()
90
+ confidence = probs[0][predicted_idx].item()
91
+ return LABELS[predicted_idx], confidence, probs[0].numpy()
92
+
93
+ # 6. Predict Button
94
+ if st.button("🔍 Classify Email"):
95
+ if not email_text.strip():
96
+ st.warning("⚠️ Please enter email text before classifying.")
97
+ else:
98
+ with st.spinner("Classifying..."):
99
+ predicted_label, confidence, all_probs = classify_email(email_text)
100
+
101
+ st.markdown("<div class='prediction-card'>", unsafe_allow_html=True)
102
+ st.markdown(f"### 🧠 Predicted Category: **{predicted_label}**")
103
+ st.markdown(f"**Confidence:** {confidence * 100:.2f}%")
104
+ st.progress(confidence)
105
+
106
+ # Display class probabilities in a bar chart
107
+ st.markdown("#### 📊 Category Probabilities:")
108
+ prob_dict = {LABELS[i]: float(all_probs[i]) for i in range(len(LABELS))}
109
+ st.bar_chart(prob_dict)
110
+ st.markdown("</div>", unsafe_allow_html=True)
111
+
112
+ # 7. Footer
113
+ st.markdown("---")
114
+ st.markdown("""
115
+ <p style='text-align: left; color: gray; font-size: 0.9rem'>
116
+ Built for CSC-546: Natural Language Processing (Smart Email Classification Project) |
117
+ Built by: Mohammed Golam Kaisar Hossain Bhuyan (hossainbhuyan@cua.edu)
118
+ </p>
119
+
120
+ """, unsafe_allow_html=True)
pyproject.toml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "smart-email-classification-app"
3
+ version = "0.1.0"
4
+ description = "Add your description here"
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ dependencies = [
8
+ "huggingface-hub>=0.35.3",
9
+ "python-dotenv>=1.1.1",
10
+ "streamlit>=1.50.0",
11
+ "torch>=2.9.0",
12
+ "transformers>=4.57.1",
13
+ ]
requirements.txt ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv pip compile pyproject.toml -o requirements.txt
3
+ altair==5.5.0
4
+ # via streamlit
5
+ attrs==25.4.0
6
+ # via
7
+ # jsonschema
8
+ # referencing
9
+ blinker==1.9.0
10
+ # via streamlit
11
+ cachetools==6.2.1
12
+ # via streamlit
13
+ certifi==2025.10.5
14
+ # via requests
15
+ charset-normalizer==3.4.4
16
+ # via requests
17
+ click==8.3.0
18
+ # via streamlit
19
+ filelock==3.20.0
20
+ # via
21
+ # huggingface-hub
22
+ # torch
23
+ # transformers
24
+ fsspec==2025.9.0
25
+ # via
26
+ # huggingface-hub
27
+ # torch
28
+ gitdb==4.0.12
29
+ # via gitpython
30
+ gitpython==3.1.45
31
+ # via streamlit
32
+ hf-xet==1.1.10
33
+ # via huggingface-hub
34
+ huggingface-hub==0.35.3
35
+ # via
36
+ # smart-email-classification-app (pyproject.toml)
37
+ # tokenizers
38
+ # transformers
39
+ idna==3.11
40
+ # via requests
41
+ jinja2==3.1.6
42
+ # via
43
+ # altair
44
+ # pydeck
45
+ # torch
46
+ jsonschema==4.25.1
47
+ # via altair
48
+ jsonschema-specifications==2025.9.1
49
+ # via jsonschema
50
+ markupsafe==3.0.3
51
+ # via jinja2
52
+ mpmath==1.3.0
53
+ # via sympy
54
+ narwhals==2.8.0
55
+ # via altair
56
+ networkx==3.4.2
57
+ # via torch
58
+ numpy==2.2.6
59
+ # via
60
+ # pandas
61
+ # pydeck
62
+ # streamlit
63
+ # transformers
64
+ packaging==25.0
65
+ # via
66
+ # altair
67
+ # huggingface-hub
68
+ # streamlit
69
+ # transformers
70
+ pandas==2.3.3
71
+ # via streamlit
72
+ pillow==11.3.0
73
+ # via streamlit
74
+ protobuf==6.33.0
75
+ # via streamlit
76
+ pyarrow==21.0.0
77
+ # via streamlit
78
+ pydeck==0.9.1
79
+ # via streamlit
80
+ python-dateutil==2.9.0.post0
81
+ # via pandas
82
+ python-dotenv==1.1.1
83
+ # via smart-email-classification-app (pyproject.toml)
84
+ pytz==2025.2
85
+ # via pandas
86
+ pyyaml==6.0.3
87
+ # via
88
+ # huggingface-hub
89
+ # transformers
90
+ referencing==0.37.0
91
+ # via
92
+ # jsonschema
93
+ # jsonschema-specifications
94
+ regex==2025.9.18
95
+ # via transformers
96
+ requests==2.32.5
97
+ # via
98
+ # huggingface-hub
99
+ # streamlit
100
+ # transformers
101
+ rpds-py==0.27.1
102
+ # via
103
+ # jsonschema
104
+ # referencing
105
+ safetensors==0.6.2
106
+ # via transformers
107
+ six==1.17.0
108
+ # via python-dateutil
109
+ smmap==5.0.2
110
+ # via gitdb
111
+ streamlit==1.50.0
112
+ # via smart-email-classification-app (pyproject.toml)
113
+ sympy==1.14.0
114
+ # via torch
115
+ tenacity==9.1.2
116
+ # via streamlit
117
+ tokenizers==0.22.1
118
+ # via transformers
119
+ toml==0.10.2
120
+ # via streamlit
121
+ torch==2.9.0
122
+ # via smart-email-classification-app (pyproject.toml)
123
+ tornado==6.5.2
124
+ # via streamlit
125
+ tqdm==4.67.1
126
+ # via
127
+ # huggingface-hub
128
+ # transformers
129
+ transformers==4.57.1
130
+ # via smart-email-classification-app (pyproject.toml)
131
+ typing-extensions==4.15.0
132
+ # via
133
+ # altair
134
+ # huggingface-hub
135
+ # referencing
136
+ # streamlit
137
+ # torch
138
+ tzdata==2025.2
139
+ # via pandas
140
+ urllib3==2.5.0
141
+ # via requests
uv.lock ADDED
The diff for this file is too large to render. See raw diff