Commit ·
8220955
0
Parent(s):
Initial commit: Email classifier project
Browse files- .gitignore +13 -0
- .idea/.gitignore +8 -0
- .idea/Smart-Email-Classification-App.iml +8 -0
- .idea/inspectionProfiles/Project_Default.xml +296 -0
- .idea/inspectionProfiles/profiles_settings.xml +6 -0
- .idea/misc.xml +7 -0
- .idea/modules.xml +8 -0
- .idea/vcs.xml +6 -0
- .python-version +1 -0
- README.md +0 -0
- app.py +120 -0
- pyproject.toml +13 -0
- requirements.txt +141 -0
- uv.lock +0 -0
.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
|
|
|