Srivatsa commited on
Commit
4025ad0
·
0 Parent(s):

Initial commit

Browse files
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ GROQ_API_KEY="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"
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ portfolio
.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/Portfolio.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.13 (Portfolio)" jdkType="Python SDK" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
+ <inspection_tool class="JupyterPackageInspection" enabled="false" level="WARNING" enabled_by_default="false" />
6
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
7
+ <option name="ignoredPackages">
8
+ <value>
9
+ <list size="200">
10
+ <item index="0" class="java.lang.String" itemvalue="tangled-up-in-unicode" />
11
+ <item index="1" class="java.lang.String" itemvalue="numba" />
12
+ <item index="2" class="java.lang.String" itemvalue="py" />
13
+ <item index="3" class="java.lang.String" itemvalue="coreschema" />
14
+ <item index="4" class="java.lang.String" itemvalue="patsy" />
15
+ <item index="5" class="java.lang.String" itemvalue="credential" />
16
+ <item index="6" class="java.lang.String" itemvalue="comm" />
17
+ <item index="7" class="java.lang.String" itemvalue="pydantic" />
18
+ <item index="8" class="java.lang.String" itemvalue="Werkzeug" />
19
+ <item index="9" class="java.lang.String" itemvalue="asgiref" />
20
+ <item index="10" class="java.lang.String" itemvalue="wordcloud" />
21
+ <item index="11" class="java.lang.String" itemvalue="click" />
22
+ <item index="12" class="java.lang.String" itemvalue="ipykernel" />
23
+ <item index="13" class="java.lang.String" itemvalue="phik" />
24
+ <item index="14" class="java.lang.String" itemvalue="contourpy" />
25
+ <item index="15" class="java.lang.String" itemvalue="psutil" />
26
+ <item index="16" class="java.lang.String" itemvalue="pdoc3" />
27
+ <item index="17" class="java.lang.String" itemvalue="regex" />
28
+ <item index="18" class="java.lang.String" itemvalue="pydantic_core" />
29
+ <item index="19" class="java.lang.String" itemvalue="platformdirs" />
30
+ <item index="20" class="java.lang.String" itemvalue="cytoolz" />
31
+ <item index="21" class="java.lang.String" itemvalue="matplotlib" />
32
+ <item index="22" class="java.lang.String" itemvalue="Mako" />
33
+ <item index="23" class="java.lang.String" itemvalue="PyJWT" />
34
+ <item index="24" class="java.lang.String" itemvalue="networkx" />
35
+ <item index="25" class="java.lang.String" itemvalue="pluggy" />
36
+ <item index="26" class="java.lang.String" itemvalue="numpy" />
37
+ <item index="27" class="java.lang.String" itemvalue="requests" />
38
+ <item index="28" class="java.lang.String" itemvalue="bitarray" />
39
+ <item index="29" class="java.lang.String" itemvalue="drf-yasg" />
40
+ <item index="30" class="java.lang.String" itemvalue="eth-account" />
41
+ <item index="31" class="java.lang.String" itemvalue="celery" />
42
+ <item index="32" class="java.lang.String" itemvalue="seaborn" />
43
+ <item index="33" class="java.lang.String" itemvalue="stack-data" />
44
+ <item index="34" class="java.lang.String" itemvalue="multimethod" />
45
+ <item index="35" class="java.lang.String" itemvalue="PyWavelets" />
46
+ <item index="36" class="java.lang.String" itemvalue="ruamel.yaml.clib" />
47
+ <item index="37" class="java.lang.String" itemvalue="nest-asyncio" />
48
+ <item index="38" class="java.lang.String" itemvalue="prompt-toolkit" />
49
+ <item index="39" class="java.lang.String" itemvalue="visions" />
50
+ <item index="40" class="java.lang.String" itemvalue="itsdangerous" />
51
+ <item index="41" class="java.lang.String" itemvalue="websockets" />
52
+ <item index="42" class="java.lang.String" itemvalue="blinker" />
53
+ <item index="43" class="java.lang.String" itemvalue="ovh" />
54
+ <item index="44" class="java.lang.String" itemvalue="uritemplate" />
55
+ <item index="45" class="java.lang.String" itemvalue="annotated-types" />
56
+ <item index="46" class="java.lang.String" itemvalue="scipy" />
57
+ <item index="47" class="java.lang.String" itemvalue="ydata-profiling" />
58
+ <item index="48" class="java.lang.String" itemvalue="amqp" />
59
+ <item index="49" class="java.lang.String" itemvalue="parsimonious" />
60
+ <item index="50" class="java.lang.String" itemvalue="web3" />
61
+ <item index="51" class="java.lang.String" itemvalue="hpack" />
62
+ <item index="52" class="java.lang.String" itemvalue="toml" />
63
+ <item index="53" class="java.lang.String" itemvalue="toolz" />
64
+ <item index="54" class="java.lang.String" itemvalue="eth-keyfile" />
65
+ <item index="55" class="java.lang.String" itemvalue="rlp" />
66
+ <item index="56" class="java.lang.String" itemvalue="typing_extensions" />
67
+ <item index="57" class="java.lang.String" itemvalue="debugpy" />
68
+ <item index="58" class="java.lang.String" itemvalue="itypes" />
69
+ <item index="59" class="java.lang.String" itemvalue="statsmodels" />
70
+ <item index="60" class="java.lang.String" itemvalue="multidict" />
71
+ <item index="61" class="java.lang.String" itemvalue="yarl" />
72
+ <item index="62" class="java.lang.String" itemvalue="click-repl" />
73
+ <item index="63" class="java.lang.String" itemvalue="pycryptodome" />
74
+ <item index="64" class="java.lang.String" itemvalue="eth-utils" />
75
+ <item index="65" class="java.lang.String" itemvalue="dacite" />
76
+ <item index="66" class="java.lang.String" itemvalue="inflection" />
77
+ <item index="67" class="java.lang.String" itemvalue="Pillow" />
78
+ <item index="68" class="java.lang.String" itemvalue="traitlets" />
79
+ <item index="69" class="java.lang.String" itemvalue="varint" />
80
+ <item index="70" class="java.lang.String" itemvalue="protobuf" />
81
+ <item index="71" class="java.lang.String" itemvalue="hexbytes" />
82
+ <item index="72" class="java.lang.String" itemvalue="panda" />
83
+ <item index="73" class="java.lang.String" itemvalue="python-dotenv" />
84
+ <item index="74" class="java.lang.String" itemvalue="cycler" />
85
+ <item index="75" class="java.lang.String" itemvalue="kombu" />
86
+ <item index="76" class="java.lang.String" itemvalue="eth-hash" />
87
+ <item index="77" class="java.lang.String" itemvalue="frozenlist" />
88
+ <item index="78" class="java.lang.String" itemvalue="fsspec" />
89
+ <item index="79" class="java.lang.String" itemvalue="filelock" />
90
+ <item index="80" class="java.lang.String" itemvalue="eth-typing" />
91
+ <item index="81" class="java.lang.String" itemvalue="safetensors" />
92
+ <item index="82" class="java.lang.String" itemvalue="pyparsing" />
93
+ <item index="83" class="java.lang.String" itemvalue="Markdown" />
94
+ <item index="84" class="java.lang.String" itemvalue="vine" />
95
+ <item index="85" class="java.lang.String" itemvalue="memory-profiler" />
96
+ <item index="86" class="java.lang.String" itemvalue="tokenizers" />
97
+ <item index="87" class="java.lang.String" itemvalue="email-validator" />
98
+ <item index="88" class="java.lang.String" itemvalue="dnspython" />
99
+ <item index="89" class="java.lang.String" itemvalue="eth-abi" />
100
+ <item index="90" class="java.lang.String" itemvalue="iniconfig" />
101
+ <item index="91" class="java.lang.String" itemvalue="cryptography" />
102
+ <item index="92" class="java.lang.String" itemvalue="kiwisolver" />
103
+ <item index="93" class="java.lang.String" itemvalue="appnope" />
104
+ <item index="94" class="java.lang.String" itemvalue="alastria-identity" />
105
+ <item index="95" class="java.lang.String" itemvalue="fonttools" />
106
+ <item index="96" class="java.lang.String" itemvalue="mock" />
107
+ <item index="97" class="java.lang.String" itemvalue="multiaddr" />
108
+ <item index="98" class="java.lang.String" itemvalue="lru-dict" />
109
+ <item index="99" class="java.lang.String" itemvalue="credentials" />
110
+ <item index="100" class="java.lang.String" itemvalue="wcwidth" />
111
+ <item index="101" class="java.lang.String" itemvalue="llvmlite" />
112
+ <item index="102" class="java.lang.String" itemvalue="click-didyoumean" />
113
+ <item index="103" class="java.lang.String" itemvalue="typeguard" />
114
+ <item index="104" class="java.lang.String" itemvalue="sqlparse" />
115
+ <item index="105" class="java.lang.String" itemvalue="eth-rlp" />
116
+ <item index="106" class="java.lang.String" itemvalue="netaddr" />
117
+ <item index="107" class="java.lang.String" itemvalue="billiard" />
118
+ <item index="108" class="java.lang.String" itemvalue="Flask" />
119
+ <item index="109" class="java.lang.String" itemvalue="eth-keys" />
120
+ <item index="110" class="java.lang.String" itemvalue="pytest" />
121
+ <item index="111" class="java.lang.String" itemvalue="ruamel.yaml" />
122
+ <item index="112" class="java.lang.String" itemvalue="tzdata" />
123
+ <item index="113" class="java.lang.String" itemvalue="ecdsa" />
124
+ <item index="114" class="java.lang.String" itemvalue="ipython" />
125
+ <item index="115" class="java.lang.String" itemvalue="pipdeptree" />
126
+ <item index="116" class="java.lang.String" itemvalue="tqdm" />
127
+ <item index="117" class="java.lang.String" itemvalue="base58" />
128
+ <item index="118" class="java.lang.String" itemvalue="coreapi" />
129
+ <item index="119" class="java.lang.String" itemvalue="aiohttp" />
130
+ <item index="120" class="java.lang.String" itemvalue="ipfshttpclient" />
131
+ <item index="121" class="java.lang.String" itemvalue="click-plugins" />
132
+ <item index="122" class="java.lang.String" itemvalue="aiosignal" />
133
+ <item index="123" class="java.lang.String" itemvalue="ImageHash" />
134
+ <item index="124" class="java.lang.String" itemvalue="jwcrypto" />
135
+ <item index="125" class="java.lang.String" itemvalue="pbr" />
136
+ <item index="126" class="java.lang.String" itemvalue="netifaces" />
137
+ <item index="127" class="java.lang.String" itemvalue="cliff" />
138
+ <item index="128" class="java.lang.String" itemvalue="debtcollector" />
139
+ <item index="129" class="java.lang.String" itemvalue="keystoneauth1" />
140
+ <item index="130" class="java.lang.String" itemvalue="rfc3986" />
141
+ <item index="131" class="java.lang.String" itemvalue="python-cinderclient" />
142
+ <item index="132" class="java.lang.String" itemvalue="oslo.i18n" />
143
+ <item index="133" class="java.lang.String" itemvalue="cmd2" />
144
+ <item index="134" class="java.lang.String" itemvalue="certifi" />
145
+ <item index="135" class="java.lang.String" itemvalue="pyreadline3" />
146
+ <item index="136" class="java.lang.String" itemvalue="flask-os" />
147
+ <item index="137" class="java.lang.String" itemvalue="python-openstackclient" />
148
+ <item index="138" class="java.lang.String" itemvalue="urllib3" />
149
+ <item index="139" class="java.lang.String" itemvalue="dogpile.cache" />
150
+ <item index="140" class="java.lang.String" itemvalue="pyperclip" />
151
+ <item index="141" class="java.lang.String" itemvalue="oslo.utils" />
152
+ <item index="142" class="java.lang.String" itemvalue="stevedore" />
153
+ <item index="143" class="java.lang.String" itemvalue="iso8601" />
154
+ <item index="144" class="java.lang.String" itemvalue="openstacksdk" />
155
+ <item index="145" class="java.lang.String" itemvalue="os-service-types" />
156
+ <item index="146" class="java.lang.String" itemvalue="wrapt" />
157
+ <item index="147" class="java.lang.String" itemvalue="jsonpointer" />
158
+ <item index="148" class="java.lang.String" itemvalue="packaging" />
159
+ <item index="149" class="java.lang.String" itemvalue="osc-lib" />
160
+ <item index="150" class="java.lang.String" itemvalue="oslo.config" />
161
+ <item index="151" class="java.lang.String" itemvalue="requestsexceptions" />
162
+ <item index="152" class="java.lang.String" itemvalue="simplejson" />
163
+ <item index="153" class="java.lang.String" itemvalue="jmespath" />
164
+ <item index="154" class="java.lang.String" itemvalue="prettytable" />
165
+ <item index="155" class="java.lang.String" itemvalue="autopage" />
166
+ <item index="156" class="java.lang.String" itemvalue="colorama" />
167
+ <item index="157" class="java.lang.String" itemvalue="jsonpatch" />
168
+ <item index="158" class="java.lang.String" itemvalue="msgpack" />
169
+ <item index="159" class="java.lang.String" itemvalue="oslo.serialization" />
170
+ <item index="160" class="java.lang.String" itemvalue="python-novaclient" />
171
+ <item index="161" class="java.lang.String" itemvalue="python-keystoneclient" />
172
+ <item index="162" class="java.lang.String" itemvalue="flask-swagger-ui" />
173
+ <item index="163" class="java.lang.String" itemvalue="psycopg2-binary" />
174
+ <item index="164" class="java.lang.String" itemvalue="pyspark" />
175
+ <item index="165" class="java.lang.String" itemvalue="dill" />
176
+ <item index="166" class="java.lang.String" itemvalue="swagger-ui-py" />
177
+ <item index="167" class="java.lang.String" itemvalue="astroid" />
178
+ <item index="168" class="java.lang.String" itemvalue="htmlmin" />
179
+ <item index="169" class="java.lang.String" itemvalue="py4j" />
180
+ <item index="170" class="java.lang.String" itemvalue="fhir.resources" />
181
+ <item index="171" class="java.lang.String" itemvalue="pandas" />
182
+ <item index="172" class="java.lang.String" itemvalue="ipython-genutils" />
183
+ <item index="173" class="java.lang.String" itemvalue="hl7apy" />
184
+ <item index="174" class="java.lang.String" itemvalue="tomlkit" />
185
+ <item index="175" class="java.lang.String" itemvalue="munkres" />
186
+ <item index="176" class="java.lang.String" itemvalue="mccabe" />
187
+ <item index="177" class="java.lang.String" itemvalue="pylint" />
188
+ <item index="178" class="java.lang.String" itemvalue="isort" />
189
+ <item index="179" class="java.lang.String" itemvalue="flask" />
190
+ <item index="180" class="java.lang.String" itemvalue="hl7parser" />
191
+ <item index="181" class="java.lang.String" itemvalue="scikit-learn" />
192
+ <item index="182" class="java.lang.String" itemvalue="sentence_transformers" />
193
+ <item index="183" class="java.lang.String" itemvalue="unstructured" />
194
+ <item index="184" class="java.lang.String" itemvalue="fastapi" />
195
+ <item index="185" class="java.lang.String" itemvalue="uvicorn" />
196
+ <item index="186" class="java.lang.String" itemvalue="chromadb" />
197
+ <item index="187" class="java.lang.String" itemvalue="transformers" />
198
+ <item index="188" class="java.lang.String" itemvalue="langchain" />
199
+ <item index="189" class="java.lang.String" itemvalue="accelerate" />
200
+ <item index="190" class="java.lang.String" itemvalue="sentence-transformers" />
201
+ <item index="191" class="java.lang.String" itemvalue="langchain_community" />
202
+ <item index="192" class="java.lang.String" itemvalue="bitsandbytes" />
203
+ <item index="193" class="java.lang.String" itemvalue="faiss-cpu" />
204
+ <item index="194" class="java.lang.String" itemvalue="starlette" />
205
+ <item index="195" class="java.lang.String" itemvalue="typing" />
206
+ <item index="196" class="java.lang.String" itemvalue="jupyter" />
207
+ <item index="197" class="java.lang.String" itemvalue="tensorflow" />
208
+ <item index="198" class="java.lang.String" itemvalue="pillow" />
209
+ <item index="199" class="java.lang.String" itemvalue="PyPDF2" />
210
+ </list>
211
+ </value>
212
+ </option>
213
+ </inspection_tool>
214
+ <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
215
+ <option name="ignoredErrors">
216
+ <list>
217
+ <option value="N802" />
218
+ <option value="N806" />
219
+ <option value="N801" />
220
+ </list>
221
+ </option>
222
+ </inspection_tool>
223
+ <inspection_tool class="PyTypeCheckerInspection" enabled="false" level="WARNING" enabled_by_default="false" />
224
+ <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
225
+ <option name="ignoredIdentifiers">
226
+ <list>
227
+ <option value="path" />
228
+ </list>
229
+ </option>
230
+ </inspection_tool>
231
+ </profile>
232
+ </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.12 (Thesis_project_1)" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (Portfolio)" 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/Portfolio.iml" filepath="$PROJECT_DIR$/.idea/Portfolio.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>
main.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain_groq import ChatGroq
2
+ from langchain_community.document_loaders import PyPDFLoader, UnstructuredWordDocumentLoader, TextLoader
3
+ from langchain_text_splitters import RecursiveCharacterTextSplitter
4
+ from langchain_community.embeddings import HuggingFaceEmbeddings
5
+ from langchain_community.vectorstores import FAISS
6
+ from langchain_core.prompts import ChatPromptTemplate
7
+ from langchain_core.output_parsers import StrOutputParser
8
+ from langchain_core.runnables import RunnablePassthrough
9
+ import os
10
+ from dotenv import load_dotenv
11
+
12
+ load_dotenv()
13
+
14
+
15
+ def load_resume(file_path):
16
+ """Load resume from PDF, DOCX, or TXT"""
17
+ if file_path.endswith('.pdf'):
18
+ loader = PyPDFLoader(file_path)
19
+ elif file_path.endswith('.docx'):
20
+ loader = UnstructuredWordDocumentLoader(file_path)
21
+ elif file_path.endswith('.txt'):
22
+ loader = TextLoader(file_path)
23
+ else:
24
+ raise ValueError("Supported formats: PDF, DOCX, TXT")
25
+
26
+ return loader.load()
27
+
28
+
29
+ def create_resume_qa_system(resume_file_path):
30
+ """Create complete resume Q&A system"""
31
+
32
+ # 1. Load and split resume
33
+ docs = load_resume(resume_file_path)
34
+ text_splitter = RecursiveCharacterTextSplitter(
35
+ chunk_size=800,
36
+ chunk_overlap=100
37
+ )
38
+ splits = text_splitter.split_documents(docs)
39
+
40
+ # 2. Create embeddings and vector store
41
+ embeddings = HuggingFaceEmbeddings(
42
+ model_name="sentence-transformers/all-MiniLM-L6-v2"
43
+ )
44
+ vectorstore = FAISS.from_documents(splits, embeddings)
45
+
46
+ # 3. Setup LLM
47
+ llm = ChatGroq(
48
+ api_key=os.getenv('GROQ_API_KEY'),
49
+ model=os.getenv('GROQ_MODEL', 'llama-3.1-8b-instant'),
50
+ temperature=0.1
51
+ )
52
+
53
+ # 4. Retrieval chain
54
+ retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
55
+
56
+ template = """Use the following resume context to answer the question.
57
+ If you don't know the answer, say so. Answer concisely and accurately.
58
+
59
+ Context: {context}
60
+
61
+ Question: {question}
62
+
63
+ Answer:"""
64
+
65
+ prompt = ChatPromptTemplate.from_template(template)
66
+
67
+ def format_docs(docs):
68
+ return "\n\n".join(doc.page_content for doc in docs)
69
+
70
+ chain = (
71
+ {"context": retriever | format_docs, "question": RunnablePassthrough()}
72
+ | prompt
73
+ | llm
74
+ | StrOutputParser()
75
+ )
76
+
77
+ return chain
78
+
79
+
80
+ # Usage
81
+ if __name__ == "__main__":
82
+ # Replace with your resume path
83
+ qa_chain = create_resume_qa_system("path/to/your/resume.pdf")
84
+
85
+ # Ask questions
86
+ questions = [
87
+ "What is my experience with Microsoft Fabric?",
88
+ "List my technical skills",
89
+ "What certifications do I have?",
90
+ "Describe my Databricks projects"
91
+ ]
92
+
93
+ for question in questions:
94
+ answer = qa_chain.invoke(question)
95
+ print(f"Q: {question}\nA: {answer}\n{'-' * 50}")
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ langchain-groq
4
+ langchain-community
5
+ langchain-text-splitters
6
+ langchain-core
7
+ sentence-transformers
8
+ faiss-cpu
9
+ pypdf
10
+ python-dotenv
11
+ python-multipart