Spaces:
No application file
No application file
Pavankumar03
commited on
Upload 14 files
Browse files- app/.env +3 -0
- app/__pycache__/chains.cpython-312.pyc +0 -0
- app/__pycache__/portfolio.cpython-312.pyc +0 -0
- app/__pycache__/utils.cpython-312.pyc +0 -0
- app/chains.py +80 -0
- app/main_app.py +219 -0
- app/portfolio.py +47 -0
- app/resource/my_portfolio.csv +21 -0
- app/utils.py +16 -0
- chromadb.ipynb +220 -0
- email_generator.ipynb +551 -0
- groq.ipynb +78 -0
- my_portfolio.csv +21 -0
- requirements.txt +17 -0
app/.env
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
GROQ_API_KEY=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
|
2 |
+
|
3 |
+
GOOGLE_API_KEY=AIzaSyCwBwrAL1zGb9DlT8CL93n91id3gd09M84
|
app/__pycache__/chains.cpython-312.pyc
ADDED
Binary file (4.93 kB). View file
|
|
app/__pycache__/portfolio.cpython-312.pyc
ADDED
Binary file (2.69 kB). View file
|
|
app/__pycache__/utils.cpython-312.pyc
ADDED
Binary file (804 Bytes). View file
|
|
app/chains.py
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
from langchain_groq import ChatGroq
|
3 |
+
from langchain_core.prompts import PromptTemplate
|
4 |
+
from langchain_core.output_parsers import JsonOutputParser
|
5 |
+
from langchain_core.exceptions import OutputParserException
|
6 |
+
from dotenv import load_dotenv
|
7 |
+
|
8 |
+
load_dotenv()
|
9 |
+
|
10 |
+
class Chain:
|
11 |
+
def __init__(self):
|
12 |
+
self.llm = ChatGroq(temperature=0, groq_api_key=os.getenv("GROQ_API_KEY"), model_name="llama-3.1-70b-versatile")
|
13 |
+
|
14 |
+
def extract_jobs(self, cleaned_text):
|
15 |
+
prompt_extract = PromptTemplate.from_template(
|
16 |
+
"""
|
17 |
+
### SCRAPED TEXT FROM WEBSITE:
|
18 |
+
{page_data}
|
19 |
+
### INSTRUCTION:
|
20 |
+
The scraped text is from the career's page of a website.
|
21 |
+
Your job is to extract the job postings and return them in JSON format containing the following keys: `role`, `experience`, `skills` and `description`.
|
22 |
+
Only return the valid JSON.
|
23 |
+
### VALID JSON (NO PREAMBLE):
|
24 |
+
"""
|
25 |
+
)
|
26 |
+
chain_extract = prompt_extract | self.llm
|
27 |
+
res = chain_extract.invoke(input={"page_data": cleaned_text})
|
28 |
+
try:
|
29 |
+
json_parser = JsonOutputParser()
|
30 |
+
res = json_parser.parse(res.content)
|
31 |
+
except OutputParserException:
|
32 |
+
raise OutputParserException("Context too big. Unable to parse jobs.")
|
33 |
+
return res if isinstance(res, list) else [res]
|
34 |
+
|
35 |
+
def write_mail(self, job, links):
|
36 |
+
prompt_email = PromptTemplate.from_template(
|
37 |
+
"""
|
38 |
+
### JOB DESCRIPTION:
|
39 |
+
{job_description}
|
40 |
+
|
41 |
+
### INSTRUCTION:
|
42 |
+
You are writing this email on behalf of Kurapati Pavankumar, who is currently pursuing his final year of B.Tech in Artificial Intelligence and Data Science. He has completed internships in the fields of ML, AI, Generative AI, Data Science, and Data Analytics, and has worked on several projects in these domains.
|
43 |
+
|
44 |
+
Write a professional cold email introducing Kurapati's skills, experience, and interest in the job described above. Make sure to highlight his **relevant project work, internships, and skills based on the job description** (only the skills that are relevant to the JD should be mentioned). The email should also include his contact information, LinkedIn, and GitHub profile for further reference. Keep the tone formal and concise.
|
45 |
+
|
46 |
+
At the end of the email, include:
|
47 |
+
|
48 |
+
- Best regards,
|
49 |
+
- Kurapati Pavankumar
|
50 |
+
- Email: [email protected]
|
51 |
+
- Mobile: 720****326
|
52 |
+
- LinkedIn: https://www.linkedin.com/in/pavankumar-kurapati/
|
53 |
+
- GitHub: https://github.com/Pavankurapati03
|
54 |
+
|
55 |
+
Additionally, mention that Kurapati has attached his resume to the email.
|
56 |
+
|
57 |
+
### SKILL SET:
|
58 |
+
Kurapati has a broad skill set in the following areas:
|
59 |
+
- Languages: Python, HTML, CSS
|
60 |
+
- Databases: SQL, Vector Databases
|
61 |
+
- Tools & Libraries: Scikit-Learn, NLTK, Pandas, Numpy, Matplotlib, Seaborn, LangChain, Flask, Power BI, MS-Excel, Power Query, BeautifulSoup, Selenium, Streamlit, Dialogflow, Git, OpenCV
|
62 |
+
- Frameworks: Tensorflow, Keras, Pytorch, Bootstrap, Transformers
|
63 |
+
- Cloud Platforms: AWS
|
64 |
+
- Areas: Model Building and Optimization, Fine-tuning, Generative AI, Large Language Models (LLMs), Retrieval-Augmented Generation (RAG), Research, Machine Learning, Deep Learning, Predictive Analytics, Data Analytics, Statistical Analysis, NLP, Web Scraping, GAN, ETL
|
65 |
+
- Soft Skills: Time management, teamwork, Problem-solving, Attention to detail, Communication, Adaptability, Collaboration
|
66 |
+
|
67 |
+
Make sure to mention only the most relevant skills for the job based on the job description.
|
68 |
+
|
69 |
+
### EMAIL (NO PREAMBLE):
|
70 |
+
"""
|
71 |
+
)
|
72 |
+
|
73 |
+
chain_email = prompt_email | self.llm
|
74 |
+
res = chain_email.invoke({"job_description": str(job), "link_list": links})
|
75 |
+
return res.content
|
76 |
+
|
77 |
+
if __name__ == "__main__":
|
78 |
+
print(os.getenv("GROQ_API_KEY"))
|
79 |
+
|
80 |
+
|
app/main_app.py
ADDED
@@ -0,0 +1,219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import io
|
2 |
+
from dotenv import load_dotenv
|
3 |
+
import streamlit as st
|
4 |
+
import os
|
5 |
+
from langchain_community.document_loaders import WebBaseLoader
|
6 |
+
from chains import Chain
|
7 |
+
from portfolio import Portfolio
|
8 |
+
from utils import clean_text
|
9 |
+
import pdfplumber
|
10 |
+
import google.generativeai as genai
|
11 |
+
import base64
|
12 |
+
|
13 |
+
# Load environment variables
|
14 |
+
load_dotenv()
|
15 |
+
|
16 |
+
# Set up the Streamlit App
|
17 |
+
st.set_page_config(page_title="ATS Optimization & Cold Email Assistant")
|
18 |
+
|
19 |
+
# Initialize session state to manage first-time access
|
20 |
+
if 'page' not in st.session_state:
|
21 |
+
st.session_state.page = 'landing'
|
22 |
+
|
23 |
+
# Landing page content
|
24 |
+
if st.session_state.page == 'landing':
|
25 |
+
st.title("Welcome to the ATS Optimization & Cold Email Assistant")
|
26 |
+
st.markdown("""
|
27 |
+
This app provides two key features:
|
28 |
+
1. **ATS Analyzer** - Optimize your resume for job applications using Google Gemini.
|
29 |
+
2. **Cold Email Generator** - Automate cold email generation using Groq's LLaMA 3.1.
|
30 |
+
|
31 |
+
Please click below to get started.
|
32 |
+
""")
|
33 |
+
|
34 |
+
# Button to move to task selection
|
35 |
+
if st.button("Get Started"):
|
36 |
+
st.session_state.page = 'task_selection'
|
37 |
+
|
38 |
+
# Task selection page
|
39 |
+
if st.session_state.page == 'task_selection':
|
40 |
+
# Sidebar for navigation
|
41 |
+
st.sidebar.title("Choose the Task")
|
42 |
+
task = st.sidebar.radio("Select the task you would like to perform:", ("ATS Analyzer", "Cold Email Generator"))
|
43 |
+
|
44 |
+
# Function to configure Google Gemini for ATS Analyzer
|
45 |
+
def configure_gemini():
|
46 |
+
api_key = os.getenv("GOOGLE_API_KEY")
|
47 |
+
if not api_key:
|
48 |
+
raise ValueError("API key not found. Please set the GOOGLE_API_KEY environment variable.")
|
49 |
+
genai.configure(api_key=api_key)
|
50 |
+
|
51 |
+
def get_gemini_response(input_text, pdf_content, prompt):
|
52 |
+
model = genai.GenerativeModel('models/gemini-1.5-pro-latest')
|
53 |
+
response = model.generate_content([input_text, pdf_content, prompt])
|
54 |
+
return response.text
|
55 |
+
|
56 |
+
# Function to parse resume
|
57 |
+
def parse_resume(uploaded_file):
|
58 |
+
if uploaded_file is not None:
|
59 |
+
with pdfplumber.open(uploaded_file) as pdf:
|
60 |
+
text = ""
|
61 |
+
for page in pdf.pages:
|
62 |
+
text += page.extract_text()
|
63 |
+
return text
|
64 |
+
else:
|
65 |
+
raise FileNotFoundError("No file uploaded")
|
66 |
+
|
67 |
+
# ATS Analyzer section with Google Gemini
|
68 |
+
if task == "ATS Analyzer":
|
69 |
+
configure_gemini()
|
70 |
+
|
71 |
+
st.markdown("""
|
72 |
+
<style>
|
73 |
+
.header {
|
74 |
+
text-align: center;
|
75 |
+
font-size: 46px;
|
76 |
+
font-weight: bold;
|
77 |
+
margin-bottom: 20px;
|
78 |
+
}
|
79 |
+
</style>
|
80 |
+
<div class="header">ATS System</div>
|
81 |
+
""", unsafe_allow_html=True)
|
82 |
+
|
83 |
+
input_text = st.text_area("Job Description: ", key="input")
|
84 |
+
uploaded_file = st.file_uploader("Upload your resume (PDF)...", type=["pdf"])
|
85 |
+
|
86 |
+
if uploaded_file:
|
87 |
+
st.markdown(
|
88 |
+
'<p style="color: green; font-size: 18px;">PDF Uploaded Successfully ✓</p>',
|
89 |
+
unsafe_allow_html=True
|
90 |
+
)
|
91 |
+
|
92 |
+
submit1 = st.button("Tell Me About the Resume")
|
93 |
+
submit2 = st.button("How Can I Improvise my Skills")
|
94 |
+
submit3 = st.button("What are the Keywords That are Missing")
|
95 |
+
submit4 = st.button("Percentage match")
|
96 |
+
input_promp = st.text_input("Queries: Feel Free to Ask here")
|
97 |
+
submit5 = st.button("Answer My Query")
|
98 |
+
|
99 |
+
input_prompt1 = """
|
100 |
+
You are an experienced Technical Human Resource Manager, your task is to review the provided resume against the job description.
|
101 |
+
Please share your professional evaluation on whether the candidate's profile aligns with the role.
|
102 |
+
Highlight the strengths, weaknesses, and missing keywords of the applicant in relation to the specified job requirements.
|
103 |
+
"""
|
104 |
+
|
105 |
+
input_prompt2 = """
|
106 |
+
You are a Technical Human Resource Manager with expertise in data science.
|
107 |
+
Share your insights on the candidate's suitability for the role from an HR perspective and offer advice on enhancing their skills.
|
108 |
+
"""
|
109 |
+
|
110 |
+
input_prompt3 = """
|
111 |
+
You are an ATS scanner with a deep understanding of data science and ATS functionality.
|
112 |
+
Evaluate the resume against the provided job description. List the missing keywords and suggest skill improvement areas.
|
113 |
+
"""
|
114 |
+
|
115 |
+
input_prompt4 = """
|
116 |
+
Evaluate the resume against the job description. Give a percentage match, missing keywords, and your final evaluation.
|
117 |
+
"""
|
118 |
+
|
119 |
+
if submit1:
|
120 |
+
if uploaded_file is not None:
|
121 |
+
pdf_content = parse_resume(uploaded_file)
|
122 |
+
response = get_gemini_response(input_text, pdf_content, input_prompt1)
|
123 |
+
st.subheader("The Response is")
|
124 |
+
st.write(response)
|
125 |
+
else:
|
126 |
+
st.write("Please upload a PDF file to proceed.")
|
127 |
+
|
128 |
+
elif submit2:
|
129 |
+
if uploaded_file is not None:
|
130 |
+
pdf_content = parse_resume(uploaded_file)
|
131 |
+
response = get_gemini_response(input_text, pdf_content, input_prompt2)
|
132 |
+
st.subheader("The Response is")
|
133 |
+
st.write(response)
|
134 |
+
else:
|
135 |
+
st.write("Please upload a PDF file to proceed.")
|
136 |
+
|
137 |
+
elif submit3:
|
138 |
+
if uploaded_file is not None:
|
139 |
+
pdf_content = parse_resume(uploaded_file)
|
140 |
+
response = get_gemini_response(input_text, pdf_content, input_prompt3)
|
141 |
+
st.subheader("The Response is")
|
142 |
+
st.write(response)
|
143 |
+
else:
|
144 |
+
st.write("Please upload a PDF file to proceed.")
|
145 |
+
|
146 |
+
elif submit4:
|
147 |
+
if uploaded_file is not None:
|
148 |
+
pdf_content = parse_resume(uploaded_file)
|
149 |
+
response = get_gemini_response(input_text, pdf_content, input_prompt4)
|
150 |
+
st.subheader("The Response is")
|
151 |
+
st.write(response)
|
152 |
+
else:
|
153 |
+
st.write("Please upload a PDF file to proceed.")
|
154 |
+
|
155 |
+
elif submit5:
|
156 |
+
if uploaded_file is not None:
|
157 |
+
pdf_content = parse_resume(uploaded_file)
|
158 |
+
response = get_gemini_response(input_promp, pdf_content, input_text)
|
159 |
+
st.subheader("The Response is")
|
160 |
+
st.write(response)
|
161 |
+
else:
|
162 |
+
st.write("Please upload a PDF file to proceed.")
|
163 |
+
|
164 |
+
footer = """
|
165 |
+
---
|
166 |
+
#### Made By [Pavankumar](https://www.linkedin.com/in/pavankumar-kurapati/)
|
167 |
+
For Queries, Reach out on [LinkedIn](https://www.linkedin.com/in/pavankumar-kurapati/)
|
168 |
+
Resume Analyzer - Making Job Applications Easier
|
169 |
+
"""
|
170 |
+
st.markdown(footer, unsafe_allow_html=True)
|
171 |
+
|
172 |
+
|
173 |
+
# Cold Email Generator using Groq's LLaMA 3.1 model
|
174 |
+
elif task == "Cold Email Generator":
|
175 |
+
chain = Chain()
|
176 |
+
portfolio = Portfolio() # Create an instance of the Portfolio class
|
177 |
+
|
178 |
+
def create_streamlit_app(llm, portfolio, clean_text):
|
179 |
+
st.title("📧 Cold Email Generator")
|
180 |
+
|
181 |
+
input_type = st.radio("Select Input Type:", ("Enter a URL", "Enter Job Description"))
|
182 |
+
|
183 |
+
if input_type == "Enter a URL":
|
184 |
+
url_input = st.text_input("Enter a URL:")
|
185 |
+
submit_button = st.button("Submit URL")
|
186 |
+
|
187 |
+
if submit_button:
|
188 |
+
try:
|
189 |
+
loader = WebBaseLoader([url_input])
|
190 |
+
data = clean_text(loader.load().pop().page_content)
|
191 |
+
portfolio.load_portfolio() # Call the method on the instance
|
192 |
+
jobs = chain.extract_jobs(data)
|
193 |
+
generate_emails(jobs, portfolio, chain) # Call the generate_emails function
|
194 |
+
except Exception as e:
|
195 |
+
st.error(f"An error occurred: {e}")
|
196 |
+
|
197 |
+
elif input_type == "Enter Job Description":
|
198 |
+
jd_input = st.text_area("Enter Job Description:")
|
199 |
+
submit_button = st.button("Submit JD")
|
200 |
+
|
201 |
+
if submit_button:
|
202 |
+
try:
|
203 |
+
data = clean_text(jd_input)
|
204 |
+
portfolio.load_portfolio() # Call the method on the instance
|
205 |
+
jobs = chain.extract_jobs(data)
|
206 |
+
generate_emails(jobs, portfolio, chain) # Call the generate_emails function
|
207 |
+
except Exception as e:
|
208 |
+
st.error(f"An error occurred: {e}")
|
209 |
+
|
210 |
+
# Define the generate_emails function before it's called
|
211 |
+
def generate_emails(jobs, portfolio, llm):
|
212 |
+
for job in jobs:
|
213 |
+
skills = job.get('skills', [])
|
214 |
+
links = portfolio.query_links(skills)
|
215 |
+
email = llm.write_mail(job, links)
|
216 |
+
st.code(email, language='markdown')
|
217 |
+
|
218 |
+
# Call the create_streamlit_app function
|
219 |
+
create_streamlit_app(chain, portfolio, clean_text)
|
app/portfolio.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
import chromadb
|
3 |
+
import uuid
|
4 |
+
import streamlit as st
|
5 |
+
|
6 |
+
class Portfolio:
|
7 |
+
def __init__(self, file_path="app/resource/my_portfolio.csv"):
|
8 |
+
self.file_path = file_path
|
9 |
+
self.data = pd.read_csv(file_path)
|
10 |
+
self.chroma_client = chromadb.PersistentClient('vectorstore')
|
11 |
+
self.collection = self.chroma_client.get_or_create_collection(name="portfolio")
|
12 |
+
|
13 |
+
def load_portfolio(self):
|
14 |
+
if not self.collection.count():
|
15 |
+
st.write("Loading portfolio into ChromaDB...")
|
16 |
+
for _, row in self.data.iterrows():
|
17 |
+
st.write(f"Adding Techstack: {row['Techstack']}, Links: {row['Links']}")
|
18 |
+
self.collection.add(
|
19 |
+
documents=row["Techstack"],
|
20 |
+
metadatas={"links": row["Links"]},
|
21 |
+
ids=[str(uuid.uuid4())]
|
22 |
+
)
|
23 |
+
#st.write("Portfolio loaded successfully!")
|
24 |
+
else:
|
25 |
+
#st.write(f"Portfolio already loaded with {self.collection.count()} items.")
|
26 |
+
st.write("Your mail is ready...")
|
27 |
+
|
28 |
+
def query_links(self, skills):
|
29 |
+
# Ensure skills is a list and not empty
|
30 |
+
if not skills:
|
31 |
+
st.error("No skills provided for query.")
|
32 |
+
return []
|
33 |
+
if isinstance(skills, str):
|
34 |
+
skills = [skills] # Convert to list if it's a string
|
35 |
+
|
36 |
+
# Debug: check the skills and portfolio size before querying
|
37 |
+
st.write(f"Querying skills: {skills}")
|
38 |
+
#st.write(f"Number of documents in the collection: {self.collection.count()}")
|
39 |
+
|
40 |
+
try:
|
41 |
+
# Perform the query
|
42 |
+
result = self.collection.query(query_texts=skills, n_results=2)
|
43 |
+
#st.write(f"Query result: {result}")
|
44 |
+
return result.get('metadatas', [])
|
45 |
+
except Exception as e:
|
46 |
+
st.error(f"Error during query: {e}")
|
47 |
+
return []
|
app/resource/my_portfolio.csv
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Techstack","Links"
|
2 |
+
"React, Node.js, MongoDB","https://example.com/react-portfolio"
|
3 |
+
"Angular,.NET, SQL Server","https://example.com/angular-portfolio"
|
4 |
+
"Vue.js, Ruby on Rails, PostgreSQL","https://example.com/vue-portfolio"
|
5 |
+
"Python, Django, MySQL","https://example.com/python-portfolio"
|
6 |
+
"Java, Spring Boot, Oracle","https://example.com/java-portfolio"
|
7 |
+
"Flutter, Firebase, GraphQL","https://example.com/flutter-portfolio"
|
8 |
+
"WordPress, PHP, MySQL","https://example.com/wordpress-portfolio"
|
9 |
+
"Magento, PHP, MySQL","https://example.com/magento-portfolio"
|
10 |
+
"React Native, Node.js, MongoDB","https://example.com/react-native-portfolio"
|
11 |
+
"iOS, Swift, Core Data","https://example.com/ios-portfolio"
|
12 |
+
"Android, Java, Room Persistence","https://example.com/android-portfolio"
|
13 |
+
"Kotlin, Android, Firebase","https://example.com/kotlin-android-portfolio"
|
14 |
+
"Android TV, Kotlin, Android NDK","https://example.com/android-tv-portfolio"
|
15 |
+
"iOS, Swift, ARKit","https://example.com/ios-ar-portfolio"
|
16 |
+
"Cross-platform, Xamarin, Azure","https://example.com/xamarin-portfolio"
|
17 |
+
"Backend, Kotlin, Spring Boot","https://example.com/kotlin-backend-portfolio"
|
18 |
+
"Frontend, TypeScript, Angular","https://example.com/typescript-frontend-portfolio"
|
19 |
+
"Full-stack, JavaScript, Express.js","https://example.com/full-stack-js-portfolio"
|
20 |
+
"Machine Learning, Python, TensorFlow","https://example.com/ml-python-portfolio"
|
21 |
+
"DevOps, Jenkins, Docker","https://example.com/devops-portfolio"
|
app/utils.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import re
|
2 |
+
|
3 |
+
def clean_text(text):
|
4 |
+
# Remove HTML tags
|
5 |
+
text = re.sub(r'<[^>]*?>', '', text)
|
6 |
+
# Remove URLs
|
7 |
+
text = re.sub(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', '', text)
|
8 |
+
# Remove special characters
|
9 |
+
text = re.sub(r'[^a-zA-Z0-9 ]', '', text)
|
10 |
+
# Replace multiple spaces with a single space
|
11 |
+
text = re.sub(r'\s{2,}', ' ', text)
|
12 |
+
# Trim leading and trailing whitespace
|
13 |
+
text = text.strip()
|
14 |
+
# Remove extra whitespace
|
15 |
+
text = ' '.join(text.split())
|
16 |
+
return text
|
chromadb.ipynb
ADDED
@@ -0,0 +1,220 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import chromadb\n",
|
10 |
+
"\n",
|
11 |
+
"client = chromadb.Client()\n",
|
12 |
+
"collection = client.create_collection(name=\"my_collection\")"
|
13 |
+
]
|
14 |
+
},
|
15 |
+
{
|
16 |
+
"cell_type": "code",
|
17 |
+
"execution_count": 2,
|
18 |
+
"metadata": {},
|
19 |
+
"outputs": [],
|
20 |
+
"source": [
|
21 |
+
"collection.add(\n",
|
22 |
+
" documents=[\n",
|
23 |
+
" \"This document is about New York\",\n",
|
24 |
+
" \"This document is about Delhi\"\n",
|
25 |
+
" ],\n",
|
26 |
+
" ids = ['id1', 'id2']\n",
|
27 |
+
")"
|
28 |
+
]
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"cell_type": "code",
|
32 |
+
"execution_count": 3,
|
33 |
+
"metadata": {},
|
34 |
+
"outputs": [
|
35 |
+
{
|
36 |
+
"data": {
|
37 |
+
"text/plain": [
|
38 |
+
"{'ids': ['id1', 'id2'],\n",
|
39 |
+
" 'embeddings': None,\n",
|
40 |
+
" 'metadatas': [None, None],\n",
|
41 |
+
" 'documents': ['This document is about New York',\n",
|
42 |
+
" 'This document is about Delhi'],\n",
|
43 |
+
" 'uris': None,\n",
|
44 |
+
" 'data': None}"
|
45 |
+
]
|
46 |
+
},
|
47 |
+
"execution_count": 3,
|
48 |
+
"metadata": {},
|
49 |
+
"output_type": "execute_result"
|
50 |
+
}
|
51 |
+
],
|
52 |
+
"source": [
|
53 |
+
"all_docs = collection.get()\n",
|
54 |
+
"all_docs"
|
55 |
+
]
|
56 |
+
},
|
57 |
+
{
|
58 |
+
"cell_type": "code",
|
59 |
+
"execution_count": 4,
|
60 |
+
"metadata": {},
|
61 |
+
"outputs": [
|
62 |
+
{
|
63 |
+
"data": {
|
64 |
+
"text/plain": [
|
65 |
+
"{'ids': ['id1'],\n",
|
66 |
+
" 'embeddings': None,\n",
|
67 |
+
" 'metadatas': [None],\n",
|
68 |
+
" 'documents': ['This document is about New York'],\n",
|
69 |
+
" 'uris': None,\n",
|
70 |
+
" 'data': None}"
|
71 |
+
]
|
72 |
+
},
|
73 |
+
"execution_count": 4,
|
74 |
+
"metadata": {},
|
75 |
+
"output_type": "execute_result"
|
76 |
+
}
|
77 |
+
],
|
78 |
+
"source": [
|
79 |
+
"documents = collection.get(ids=[\"id1\"])\n",
|
80 |
+
"documents"
|
81 |
+
]
|
82 |
+
},
|
83 |
+
{
|
84 |
+
"cell_type": "code",
|
85 |
+
"execution_count": 5,
|
86 |
+
"metadata": {},
|
87 |
+
"outputs": [
|
88 |
+
{
|
89 |
+
"data": {
|
90 |
+
"text/plain": [
|
91 |
+
"{'ids': [['id1', 'id2']],\n",
|
92 |
+
" 'distances': [[1.6312181949615479, 1.867558479309082]],\n",
|
93 |
+
" 'metadatas': [[None, None]],\n",
|
94 |
+
" 'embeddings': None,\n",
|
95 |
+
" 'documents': [['This document is about New York',\n",
|
96 |
+
" 'This document is about Delhi']],\n",
|
97 |
+
" 'uris': None,\n",
|
98 |
+
" 'data': None}"
|
99 |
+
]
|
100 |
+
},
|
101 |
+
"execution_count": 5,
|
102 |
+
"metadata": {},
|
103 |
+
"output_type": "execute_result"
|
104 |
+
}
|
105 |
+
],
|
106 |
+
"source": [
|
107 |
+
"results = collection.query(\n",
|
108 |
+
" query_texts=['Query is about big apple'],\n",
|
109 |
+
" n_results=2\n",
|
110 |
+
")\n",
|
111 |
+
"results"
|
112 |
+
]
|
113 |
+
},
|
114 |
+
{
|
115 |
+
"cell_type": "code",
|
116 |
+
"execution_count": 6,
|
117 |
+
"metadata": {},
|
118 |
+
"outputs": [
|
119 |
+
{
|
120 |
+
"data": {
|
121 |
+
"text/plain": [
|
122 |
+
"{'ids': [],\n",
|
123 |
+
" 'embeddings': None,\n",
|
124 |
+
" 'metadatas': [],\n",
|
125 |
+
" 'documents': [],\n",
|
126 |
+
" 'uris': None,\n",
|
127 |
+
" 'data': None}"
|
128 |
+
]
|
129 |
+
},
|
130 |
+
"execution_count": 6,
|
131 |
+
"metadata": {},
|
132 |
+
"output_type": "execute_result"
|
133 |
+
}
|
134 |
+
],
|
135 |
+
"source": [
|
136 |
+
"collection.delete(ids=all_docs['ids'])\n",
|
137 |
+
"collection.get()"
|
138 |
+
]
|
139 |
+
},
|
140 |
+
{
|
141 |
+
"cell_type": "code",
|
142 |
+
"execution_count": 7,
|
143 |
+
"metadata": {},
|
144 |
+
"outputs": [],
|
145 |
+
"source": [
|
146 |
+
"collection.add(\n",
|
147 |
+
" documents=[\n",
|
148 |
+
" \"This document is about New York\",\n",
|
149 |
+
" \"This document is about Delhi\"\n",
|
150 |
+
" ],\n",
|
151 |
+
" ids=[\"id3\", \"id4\"],\n",
|
152 |
+
" metadatas=[\n",
|
153 |
+
" {\"url\": \"https://en.wikipedia.org/wiki/New_York_City\"},\n",
|
154 |
+
" {\"url\": \"https://en.wikipedia.org/wiki/New_Delhi\"}\n",
|
155 |
+
" ]\n",
|
156 |
+
")"
|
157 |
+
]
|
158 |
+
},
|
159 |
+
{
|
160 |
+
"cell_type": "code",
|
161 |
+
"execution_count": 8,
|
162 |
+
"metadata": {},
|
163 |
+
"outputs": [
|
164 |
+
{
|
165 |
+
"data": {
|
166 |
+
"text/plain": [
|
167 |
+
"{'ids': [['id4', 'id3']],\n",
|
168 |
+
" 'distances': [[1.5588479042053223, 1.8114912509918213]],\n",
|
169 |
+
" 'metadatas': [[{'url': 'https://en.wikipedia.org/wiki/New_Delhi'},\n",
|
170 |
+
" {'url': 'https://en.wikipedia.org/wiki/New_York_City'}]],\n",
|
171 |
+
" 'embeddings': None,\n",
|
172 |
+
" 'documents': [['This document is about Delhi',\n",
|
173 |
+
" 'This document is about New York']],\n",
|
174 |
+
" 'uris': None,\n",
|
175 |
+
" 'data': None}"
|
176 |
+
]
|
177 |
+
},
|
178 |
+
"execution_count": 8,
|
179 |
+
"metadata": {},
|
180 |
+
"output_type": "execute_result"
|
181 |
+
}
|
182 |
+
],
|
183 |
+
"source": [
|
184 |
+
"results = collection.query(\n",
|
185 |
+
" query_texts=[\"Query is about Chhole Bhature\"],\n",
|
186 |
+
" n_results=2\n",
|
187 |
+
")\n",
|
188 |
+
"results"
|
189 |
+
]
|
190 |
+
},
|
191 |
+
{
|
192 |
+
"cell_type": "code",
|
193 |
+
"execution_count": null,
|
194 |
+
"metadata": {},
|
195 |
+
"outputs": [],
|
196 |
+
"source": []
|
197 |
+
}
|
198 |
+
],
|
199 |
+
"metadata": {
|
200 |
+
"kernelspec": {
|
201 |
+
"display_name": "venv",
|
202 |
+
"language": "python",
|
203 |
+
"name": "python3"
|
204 |
+
},
|
205 |
+
"language_info": {
|
206 |
+
"codemirror_mode": {
|
207 |
+
"name": "ipython",
|
208 |
+
"version": 3
|
209 |
+
},
|
210 |
+
"file_extension": ".py",
|
211 |
+
"mimetype": "text/x-python",
|
212 |
+
"name": "python",
|
213 |
+
"nbconvert_exporter": "python",
|
214 |
+
"pygments_lexer": "ipython3",
|
215 |
+
"version": "3.12.3"
|
216 |
+
}
|
217 |
+
},
|
218 |
+
"nbformat": 4,
|
219 |
+
"nbformat_minor": 2
|
220 |
+
}
|
email_generator.ipynb
ADDED
@@ -0,0 +1,551 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"from langchain_groq import ChatGroq"
|
10 |
+
]
|
11 |
+
},
|
12 |
+
{
|
13 |
+
"cell_type": "code",
|
14 |
+
"execution_count": 2,
|
15 |
+
"metadata": {},
|
16 |
+
"outputs": [
|
17 |
+
{
|
18 |
+
"name": "stdout",
|
19 |
+
"output_type": "stream",
|
20 |
+
"text": [
|
21 |
+
"Virat Kohli is a renowned Indian international cricketer who has been one of the most successful batsmen in the world. Born on November 5, 1988, in Delhi, India, Kohli is widely regarded as one of the greatest batsmen of all time.\n",
|
22 |
+
"\n",
|
23 |
+
"Kohli made his international debut in 2008 and has since become a key player for the Indian national team. He has played in all formats of the game, including Test matches, One-Day Internationals (ODIs), and Twenty20 Internationals (T20Is).\n",
|
24 |
+
"\n",
|
25 |
+
"Some of Kohli's notable achievements include:\n",
|
26 |
+
"\n",
|
27 |
+
"1. **Highest run-scorer in ODIs**: Kohli is the fastest batsman to reach 12,000 runs in ODIs and has the highest number of centuries in the format.\n",
|
28 |
+
"2. **Test captaincy**: Kohli has been the captain of the Indian Test team and has led the team to several victories, including a historic series win in Australia in 2018-19.\n",
|
29 |
+
"3. **IPL success**: Kohli has been a successful captain of the Royal Challengers Bangalore (RCB) team in the Indian Premier League (IPL) and has led the team to several playoff appearances.\n",
|
30 |
+
"4. **Awards and accolades**: Kohli has won numerous awards, including the ICC ODI Player of the Year award, the BCCI's International Cricketer of the Year award, and the Padma Shri, India's fourth-highest civilian honor.\n",
|
31 |
+
"\n",
|
32 |
+
"Kohli is known for his aggressive batting style, his ability to score runs in all conditions, and his leadership qualities. He is widely regarded as one of the greatest cricketers of all time, and his on-field success has made him a beloved figure in India and around the world.\n"
|
33 |
+
]
|
34 |
+
}
|
35 |
+
],
|
36 |
+
"source": [
|
37 |
+
"from langchain_groq import ChatGroq\n",
|
38 |
+
"\n",
|
39 |
+
"llm = ChatGroq(\n",
|
40 |
+
" temperature=0, \n",
|
41 |
+
" groq_api_key='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', \n",
|
42 |
+
" model_name=\"llama-3.1-70b-versatile\"\n",
|
43 |
+
")\n",
|
44 |
+
"\n",
|
45 |
+
"response = llm.invoke(\"Who is Virat kohli?\")\n",
|
46 |
+
"print(response.content)"
|
47 |
+
]
|
48 |
+
},
|
49 |
+
{
|
50 |
+
"cell_type": "code",
|
51 |
+
"execution_count": 10,
|
52 |
+
"metadata": {},
|
53 |
+
"outputs": [
|
54 |
+
{
|
55 |
+
"name": "stdout",
|
56 |
+
"output_type": "stream",
|
57 |
+
"text": [
|
58 |
+
"Apply for Auszubildende/r 2024 im Einzelhandel - 37.5H - Metzingen (w/m/d)\n",
|
59 |
+
"\n",
|
60 |
+
"Search JobsSkip navigationSearch JobsNIKE, INC. JOBSContract JobsJoin The Talent CommunityLife @ NikeOverviewBenefitsBrandsOverviewJordanConverseTeamsOverviewAdministrative SupportAdvanced InnovationAir Manufacturing InnovationAviationCommunicationsCustomer ServiceDesignDigitalFacilitiesFinance & AccountingGovernment & Public AffairsHuman ResourcesInsights & AnalyticsLegalManufacturing & EngineeringMarketingMerchandisingPlanningPrivacyProcurementProduct Creation, Development & ManagementRetail CorporateRetail StoresSalesSocial & Community ImpactSports MarketingStrategic PlanningSupply Chain, Distribution & LogisticsSustainabilityTechnologyLocationsOverviewNike WHQNike New York HQEHQ: Hilversum, The NetherlandsELC: Laakdal, BelgiumGreater China HQDiversity, Equity & InclusionOverviewMilitary InclusionDisability InclusionIndigenous InclusionInternshipsInternshipsAuszubildende/r 2024 im Einzelhandel - 37.5H - Metzingen (w/m/d)Metzingen, Baden-WurttembergBecome a Part of the NIKE, Inc. Team\n",
|
61 |
+
"NIKE, Inc. does more than outfit the world’s best athletes. It is a place to explore potential, obliterate boundaries and push out the edges of what can be. The company looks for people who can grow, think, dream and create. Its culture thrives by embracing diversity and rewarding imagination. The brand seeks achievers, leaders and visionaries. At NIKE, Inc. it’s about each person bringing skills and passion to a challenging and constantly evolving game.NIKE Auszubildende/r (Athlete) - Startdatum im SeptemberKarriere bei Nike Retail NIKE, Inc. stattet nicht nur die besten Sportler der Welt aus – wir entdecken Potenziale, überwinden Grenzen und pushen bis ans Limit und darüber hinaus. Wir suchen nach Leuten, die lernen und denken, träumen und gestalten. Unsere Unternehmenskultur lebt von Diversität und Imagination. Wir brauchen talentierte Kollegen, Leader und Visionäre. Bei Nike, Inc. trägt jeder mit seinen Skills und purer Passion zu einer sich stetig verändernden und wachsenden Herausforderung bei.In Stores zu arbeiten bedeutet, das Gesicht von NIKE, Inc. zu sein. Mit einem konstanten Fokus auf Produktwissen und Kundenservice sorgen unsere Store Teams täglich für wertvolle Einkauferlebnisse. Von London bis nach Istanbul, jeder Store ist einzigartig und hat seine eigene, spannende Community von Sport und Style Enthusiasten. Für eine Karriere im Einzelhandel bei NIKE benötigst du Kreativität und Ambitionen, während wir dir die Möglichkeit geben, dich mit den besten Athleten und Teammitgliedern weiterzuentwickeln und über dich hinauszuwachsen. Weißt du, was wir brauchen, um das beste Retail Team der Welt zu erschaffen? Jemanden wie DICH!Komm ins NIKE, Inc. Team!Deine Aufgaben als Auszubildene/r: Deine Expertise im Bereich des exklusiven Kundenservices und Produktwissens nutzen, um eine besondere Brand Experience für unsere Käufer zu schaffen.Du unterstützt die verschiedensten Bereiche des Stores (z. B. Kasse, Warenein- und -ausgang, Auffüllen von Waren auf der Verkaufsfläche, Aufstellen von Displays) und empfiehlst Kund:innen geeignete Produkte, um die Umsatzziele zu erreichen.Du nutzt dein Wissen über digitale Geräte, um Online- und Offlineverkauf sowie Services im Store nahtlos miteinander zu verknüpfen.Du informierst Kund:innen und neue Mitarbeiter:innen über NIKE Produkte und Services.Du lernst Nike’s Lieferketten und Einzelhandelsprozesse kennen und wirst qualitätssichernde Massnahmen entwickeln und durchführen.Ein Brand Ambassador für NIKE Initiativen sein. Was du bekommst:Attraktive Mitarbeiterrabatte im Store und im OnlineshopSpannende Entwicklungs- und KarrieremöglichkeitenRegelmäßige Verkaufs- und ProduktschulungenEin dynamisches und motivierendes Arbeitsumfeld mit flachen Hierarchien, in welchem die Werte Diversity, Equity & Inclusion (DE&I) gelebt werdenMitarbeiterkleidung, womit du NIKE repräsentierst und den Teamspirit förderstZugang zu exklusiven TrainingsinhaltenDie Möglichkeit, an einzigartigen NIKE Events teilzunehmen Was du mitbringst:Die Passion für NIKE und/oder die Liebe zum SportKompetenz für hervorragenden Kundenservice / Begeisterung für den Umgang mit Kund:innenGute Deutsch- und EnglischkentnisseGute Kommunikations- und TeamfähigkeitProaktivität, Offenheit sowie Motivation und die Leidenschaft, unsere Kunden immer an die erste Stelle zu setzenBereitschaft, an Wochenenden und in Schichten zu arbeiten Schaue dir dieses Video an, um mehr über die Atmosphäre in unseren Stores zu entdecken und über unsere Store Traditionen zu lernen.Haben wir dein Interesse geweckt und möchtest du uns bei unserer Mission �To bring inspiration and innovation to every athlete in the world“ unterstützen? Bewirb dich jetzt, ganz einfach online. Wir freuen uns auf dich!NIKE, Inc. is a growth company that looks for team members to grow with it. Nike offers a generous total rewards package, casual work environment, a diverse and inclusive culture, and an electric atmosphere for professional development. No matter the location, or the role, every Nike employee shares one galvanizing mission: To bring inspiration and innovation to every athlete* in the world.NIKE, Inc. is committed to employing a diverse workforce. Qualified applicants will receive consideration without regard to race, color, religion, sex, national origin, age, sexual orientation, gender identity, gender expression, veteran status, or disability.How We HireAt NIKE, Inc. we promise to provide a premium, inclusive, compelling and authentic candidate experience. Delivering on this promise means we allow you to be at your best — and to do that, you need to understand how the hiring process works. Transparency is key.\n",
|
62 |
+
"\n",
|
63 |
+
"* This overview explains our hiring process for corporate roles. Note there may be different hiring steps involved for non-corporate roles.Start nowBenefitsWhether it’s transportation or financial health, we continually invest in our employees to help them achieve greatness — inside and outside of work. All who work here should be able to realize their full potential.Employee Assistance ProgramHolidaysMedical PlanPaid Time Off (PTO)Product DiscountsLearn moreFIND A STOREBECOME A MEMBERSIGN UP FOR EMAILSEND US FEEDBACKSTUDENT DISCOUNTSGET HELPGET HELPOrder StatusDeliveryReturnsPayment OptionsContact Us On Nike.com InquiriesContact Us On All Other InquiriesABOUT NIKEABOUT NIKENewsCareersInvestorsSustainabilityIndia© 2024 Nike, Inc. All Rights ReservedGuidesNike AdaptNike Air MaxNike FlyleatherNike PegasusNike Zoom FlyNike AirNike FlyEaseNike FreeNike ReactNike ZoomXNike Air Force 1Nike FlyknitNike JoyrideNike VaporflyTerms of SaleTerms of UseNike Privacy Policy\n"
|
64 |
+
]
|
65 |
+
}
|
66 |
+
],
|
67 |
+
"source": [
|
68 |
+
"from langchain_community.document_loaders import WebBaseLoader\n",
|
69 |
+
"\n",
|
70 |
+
"loader = WebBaseLoader(\"https://jobs.nike.com/job/R-20370?\")\n",
|
71 |
+
"page_data = loader.load().pop().page_content\n",
|
72 |
+
"print(page_data)"
|
73 |
+
]
|
74 |
+
},
|
75 |
+
{
|
76 |
+
"cell_type": "code",
|
77 |
+
"execution_count": 11,
|
78 |
+
"metadata": {},
|
79 |
+
"outputs": [
|
80 |
+
{
|
81 |
+
"data": {
|
82 |
+
"text/plain": [
|
83 |
+
"str"
|
84 |
+
]
|
85 |
+
},
|
86 |
+
"execution_count": 11,
|
87 |
+
"metadata": {},
|
88 |
+
"output_type": "execute_result"
|
89 |
+
}
|
90 |
+
],
|
91 |
+
"source": [
|
92 |
+
"from langchain_core.prompts import PromptTemplate\n",
|
93 |
+
"\n",
|
94 |
+
"prompt_extract = PromptTemplate.from_template(\n",
|
95 |
+
" \"\"\"\n",
|
96 |
+
" ### SCRAPED TEXT FROM WEBSITE:\n",
|
97 |
+
" {page_data}\n",
|
98 |
+
" ### INSTRUCTION:\n",
|
99 |
+
" The scraped text is from the career's page of a website.\n",
|
100 |
+
" Your job is to extract the job postings and return them in JSON format containing the \n",
|
101 |
+
" following keys: `role`, `experience`, `skills` and `description`.\n",
|
102 |
+
" Only return the valid JSON.\n",
|
103 |
+
" ### VALID JSON (NO PREAMBLE): \n",
|
104 |
+
" \"\"\"\n",
|
105 |
+
")\n",
|
106 |
+
"\n",
|
107 |
+
"chain_extract = prompt_extract | llm \n",
|
108 |
+
"res = chain_extract.invoke(input={'page_data':page_data})\n",
|
109 |
+
"type(res.content)"
|
110 |
+
]
|
111 |
+
},
|
112 |
+
{
|
113 |
+
"cell_type": "code",
|
114 |
+
"execution_count": 12,
|
115 |
+
"metadata": {},
|
116 |
+
"outputs": [
|
117 |
+
{
|
118 |
+
"data": {
|
119 |
+
"text/plain": [
|
120 |
+
"{'role': 'Auszubildende/r 2024 im Einzelhandel',\n",
|
121 |
+
" 'experience': 'No specific experience required',\n",
|
122 |
+
" 'skills': ['Passion for NIKE and/or love for sports',\n",
|
123 |
+
" 'Competence for excellent customer service',\n",
|
124 |
+
" 'Good German and English skills',\n",
|
125 |
+
" 'Good communication and teamwork skills',\n",
|
126 |
+
" 'Proactivity, openness, motivation, and passion for putting customers first'],\n",
|
127 |
+
" 'description': \"As an Auszubildende/r, you will be responsible for creating a unique brand experience for our customers through excellent customer service and product knowledge. You will support various areas of the store, recommend products to customers, and use your knowledge of digital devices to connect online and offline sales and services. You will also learn about Nike's supply chain and retail processes, develop quality assurance measures, and be a brand ambassador for NIKE initiatives.\"}"
|
128 |
+
]
|
129 |
+
},
|
130 |
+
"execution_count": 12,
|
131 |
+
"metadata": {},
|
132 |
+
"output_type": "execute_result"
|
133 |
+
}
|
134 |
+
],
|
135 |
+
"source": [
|
136 |
+
"from langchain_core.output_parsers import JsonOutputParser\n",
|
137 |
+
"\n",
|
138 |
+
"json_parser = JsonOutputParser()\n",
|
139 |
+
"json_res = json_parser.parse(res.content)\n",
|
140 |
+
"json_res"
|
141 |
+
]
|
142 |
+
},
|
143 |
+
{
|
144 |
+
"cell_type": "code",
|
145 |
+
"execution_count": 13,
|
146 |
+
"metadata": {},
|
147 |
+
"outputs": [
|
148 |
+
{
|
149 |
+
"data": {
|
150 |
+
"text/plain": [
|
151 |
+
"dict"
|
152 |
+
]
|
153 |
+
},
|
154 |
+
"execution_count": 13,
|
155 |
+
"metadata": {},
|
156 |
+
"output_type": "execute_result"
|
157 |
+
}
|
158 |
+
],
|
159 |
+
"source": [
|
160 |
+
"type(json_res)"
|
161 |
+
]
|
162 |
+
},
|
163 |
+
{
|
164 |
+
"cell_type": "code",
|
165 |
+
"execution_count": 14,
|
166 |
+
"metadata": {},
|
167 |
+
"outputs": [
|
168 |
+
{
|
169 |
+
"data": {
|
170 |
+
"text/html": [
|
171 |
+
"<div>\n",
|
172 |
+
"<style scoped>\n",
|
173 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
174 |
+
" vertical-align: middle;\n",
|
175 |
+
" }\n",
|
176 |
+
"\n",
|
177 |
+
" .dataframe tbody tr th {\n",
|
178 |
+
" vertical-align: top;\n",
|
179 |
+
" }\n",
|
180 |
+
"\n",
|
181 |
+
" .dataframe thead th {\n",
|
182 |
+
" text-align: right;\n",
|
183 |
+
" }\n",
|
184 |
+
"</style>\n",
|
185 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
186 |
+
" <thead>\n",
|
187 |
+
" <tr style=\"text-align: right;\">\n",
|
188 |
+
" <th></th>\n",
|
189 |
+
" <th>Techstack</th>\n",
|
190 |
+
" <th>Links</th>\n",
|
191 |
+
" </tr>\n",
|
192 |
+
" </thead>\n",
|
193 |
+
" <tbody>\n",
|
194 |
+
" <tr>\n",
|
195 |
+
" <th>0</th>\n",
|
196 |
+
" <td>React, Node.js, MongoDB</td>\n",
|
197 |
+
" <td>https://example.com/react-portfolio</td>\n",
|
198 |
+
" </tr>\n",
|
199 |
+
" <tr>\n",
|
200 |
+
" <th>1</th>\n",
|
201 |
+
" <td>Angular,.NET, SQL Server</td>\n",
|
202 |
+
" <td>https://example.com/angular-portfolio</td>\n",
|
203 |
+
" </tr>\n",
|
204 |
+
" <tr>\n",
|
205 |
+
" <th>2</th>\n",
|
206 |
+
" <td>Vue.js, Ruby on Rails, PostgreSQL</td>\n",
|
207 |
+
" <td>https://example.com/vue-portfolio</td>\n",
|
208 |
+
" </tr>\n",
|
209 |
+
" <tr>\n",
|
210 |
+
" <th>3</th>\n",
|
211 |
+
" <td>Python, Django, MySQL</td>\n",
|
212 |
+
" <td>https://example.com/python-portfolio</td>\n",
|
213 |
+
" </tr>\n",
|
214 |
+
" <tr>\n",
|
215 |
+
" <th>4</th>\n",
|
216 |
+
" <td>Java, Spring Boot, Oracle</td>\n",
|
217 |
+
" <td>https://example.com/java-portfolio</td>\n",
|
218 |
+
" </tr>\n",
|
219 |
+
" <tr>\n",
|
220 |
+
" <th>5</th>\n",
|
221 |
+
" <td>Flutter, Firebase, GraphQL</td>\n",
|
222 |
+
" <td>https://example.com/flutter-portfolio</td>\n",
|
223 |
+
" </tr>\n",
|
224 |
+
" <tr>\n",
|
225 |
+
" <th>6</th>\n",
|
226 |
+
" <td>WordPress, PHP, MySQL</td>\n",
|
227 |
+
" <td>https://example.com/wordpress-portfolio</td>\n",
|
228 |
+
" </tr>\n",
|
229 |
+
" <tr>\n",
|
230 |
+
" <th>7</th>\n",
|
231 |
+
" <td>Magento, PHP, MySQL</td>\n",
|
232 |
+
" <td>https://example.com/magento-portfolio</td>\n",
|
233 |
+
" </tr>\n",
|
234 |
+
" <tr>\n",
|
235 |
+
" <th>8</th>\n",
|
236 |
+
" <td>React Native, Node.js, MongoDB</td>\n",
|
237 |
+
" <td>https://example.com/react-native-portfolio</td>\n",
|
238 |
+
" </tr>\n",
|
239 |
+
" <tr>\n",
|
240 |
+
" <th>9</th>\n",
|
241 |
+
" <td>iOS, Swift, Core Data</td>\n",
|
242 |
+
" <td>https://example.com/ios-portfolio</td>\n",
|
243 |
+
" </tr>\n",
|
244 |
+
" <tr>\n",
|
245 |
+
" <th>10</th>\n",
|
246 |
+
" <td>Android, Java, Room Persistence</td>\n",
|
247 |
+
" <td>https://example.com/android-portfolio</td>\n",
|
248 |
+
" </tr>\n",
|
249 |
+
" <tr>\n",
|
250 |
+
" <th>11</th>\n",
|
251 |
+
" <td>Kotlin, Android, Firebase</td>\n",
|
252 |
+
" <td>https://example.com/kotlin-android-portfolio</td>\n",
|
253 |
+
" </tr>\n",
|
254 |
+
" <tr>\n",
|
255 |
+
" <th>12</th>\n",
|
256 |
+
" <td>Android TV, Kotlin, Android NDK</td>\n",
|
257 |
+
" <td>https://example.com/android-tv-portfolio</td>\n",
|
258 |
+
" </tr>\n",
|
259 |
+
" <tr>\n",
|
260 |
+
" <th>13</th>\n",
|
261 |
+
" <td>iOS, Swift, ARKit</td>\n",
|
262 |
+
" <td>https://example.com/ios-ar-portfolio</td>\n",
|
263 |
+
" </tr>\n",
|
264 |
+
" <tr>\n",
|
265 |
+
" <th>14</th>\n",
|
266 |
+
" <td>Cross-platform, Xamarin, Azure</td>\n",
|
267 |
+
" <td>https://example.com/xamarin-portfolio</td>\n",
|
268 |
+
" </tr>\n",
|
269 |
+
" <tr>\n",
|
270 |
+
" <th>15</th>\n",
|
271 |
+
" <td>Backend, Kotlin, Spring Boot</td>\n",
|
272 |
+
" <td>https://example.com/kotlin-backend-portfolio</td>\n",
|
273 |
+
" </tr>\n",
|
274 |
+
" <tr>\n",
|
275 |
+
" <th>16</th>\n",
|
276 |
+
" <td>Frontend, TypeScript, Angular</td>\n",
|
277 |
+
" <td>https://example.com/typescript-frontend-portfolio</td>\n",
|
278 |
+
" </tr>\n",
|
279 |
+
" <tr>\n",
|
280 |
+
" <th>17</th>\n",
|
281 |
+
" <td>Full-stack, JavaScript, Express.js</td>\n",
|
282 |
+
" <td>https://example.com/full-stack-js-portfolio</td>\n",
|
283 |
+
" </tr>\n",
|
284 |
+
" <tr>\n",
|
285 |
+
" <th>18</th>\n",
|
286 |
+
" <td>Machine Learning, Python, TensorFlow</td>\n",
|
287 |
+
" <td>https://example.com/ml-python-portfolio</td>\n",
|
288 |
+
" </tr>\n",
|
289 |
+
" <tr>\n",
|
290 |
+
" <th>19</th>\n",
|
291 |
+
" <td>DevOps, Jenkins, Docker</td>\n",
|
292 |
+
" <td>https://example.com/devops-portfolio</td>\n",
|
293 |
+
" </tr>\n",
|
294 |
+
" </tbody>\n",
|
295 |
+
"</table>\n",
|
296 |
+
"</div>"
|
297 |
+
],
|
298 |
+
"text/plain": [
|
299 |
+
" Techstack \\\n",
|
300 |
+
"0 React, Node.js, MongoDB \n",
|
301 |
+
"1 Angular,.NET, SQL Server \n",
|
302 |
+
"2 Vue.js, Ruby on Rails, PostgreSQL \n",
|
303 |
+
"3 Python, Django, MySQL \n",
|
304 |
+
"4 Java, Spring Boot, Oracle \n",
|
305 |
+
"5 Flutter, Firebase, GraphQL \n",
|
306 |
+
"6 WordPress, PHP, MySQL \n",
|
307 |
+
"7 Magento, PHP, MySQL \n",
|
308 |
+
"8 React Native, Node.js, MongoDB \n",
|
309 |
+
"9 iOS, Swift, Core Data \n",
|
310 |
+
"10 Android, Java, Room Persistence \n",
|
311 |
+
"11 Kotlin, Android, Firebase \n",
|
312 |
+
"12 Android TV, Kotlin, Android NDK \n",
|
313 |
+
"13 iOS, Swift, ARKit \n",
|
314 |
+
"14 Cross-platform, Xamarin, Azure \n",
|
315 |
+
"15 Backend, Kotlin, Spring Boot \n",
|
316 |
+
"16 Frontend, TypeScript, Angular \n",
|
317 |
+
"17 Full-stack, JavaScript, Express.js \n",
|
318 |
+
"18 Machine Learning, Python, TensorFlow \n",
|
319 |
+
"19 DevOps, Jenkins, Docker \n",
|
320 |
+
"\n",
|
321 |
+
" Links \n",
|
322 |
+
"0 https://example.com/react-portfolio \n",
|
323 |
+
"1 https://example.com/angular-portfolio \n",
|
324 |
+
"2 https://example.com/vue-portfolio \n",
|
325 |
+
"3 https://example.com/python-portfolio \n",
|
326 |
+
"4 https://example.com/java-portfolio \n",
|
327 |
+
"5 https://example.com/flutter-portfolio \n",
|
328 |
+
"6 https://example.com/wordpress-portfolio \n",
|
329 |
+
"7 https://example.com/magento-portfolio \n",
|
330 |
+
"8 https://example.com/react-native-portfolio \n",
|
331 |
+
"9 https://example.com/ios-portfolio \n",
|
332 |
+
"10 https://example.com/android-portfolio \n",
|
333 |
+
"11 https://example.com/kotlin-android-portfolio \n",
|
334 |
+
"12 https://example.com/android-tv-portfolio \n",
|
335 |
+
"13 https://example.com/ios-ar-portfolio \n",
|
336 |
+
"14 https://example.com/xamarin-portfolio \n",
|
337 |
+
"15 https://example.com/kotlin-backend-portfolio \n",
|
338 |
+
"16 https://example.com/typescript-frontend-portfolio \n",
|
339 |
+
"17 https://example.com/full-stack-js-portfolio \n",
|
340 |
+
"18 https://example.com/ml-python-portfolio \n",
|
341 |
+
"19 https://example.com/devops-portfolio "
|
342 |
+
]
|
343 |
+
},
|
344 |
+
"execution_count": 14,
|
345 |
+
"metadata": {},
|
346 |
+
"output_type": "execute_result"
|
347 |
+
}
|
348 |
+
],
|
349 |
+
"source": [
|
350 |
+
"import pandas as pd\n",
|
351 |
+
"\n",
|
352 |
+
"df = pd.read_csv(\"my_portfolio.csv\")\n",
|
353 |
+
"df"
|
354 |
+
]
|
355 |
+
},
|
356 |
+
{
|
357 |
+
"cell_type": "code",
|
358 |
+
"execution_count": 15,
|
359 |
+
"metadata": {},
|
360 |
+
"outputs": [],
|
361 |
+
"source": [
|
362 |
+
"import uuid\n",
|
363 |
+
"import chromadb\n",
|
364 |
+
"\n",
|
365 |
+
"client = chromadb.PersistentClient('vectorstore')\n",
|
366 |
+
"collection = client.get_or_create_collection(name=\"portfolio\")\n",
|
367 |
+
"\n",
|
368 |
+
"if not collection.count():\n",
|
369 |
+
" for _, row in df.iterrows():\n",
|
370 |
+
" collection.add(documents=row[\"Techstack\"],\n",
|
371 |
+
" metadatas={\"links\": row[\"Links\"]},\n",
|
372 |
+
" ids=[str(uuid.uuid4())])"
|
373 |
+
]
|
374 |
+
},
|
375 |
+
{
|
376 |
+
"cell_type": "code",
|
377 |
+
"execution_count": 16,
|
378 |
+
"metadata": {},
|
379 |
+
"outputs": [
|
380 |
+
{
|
381 |
+
"data": {
|
382 |
+
"text/plain": [
|
383 |
+
"['Passion for NIKE and/or love for sports',\n",
|
384 |
+
" 'Competence for excellent customer service',\n",
|
385 |
+
" 'Good German and English skills',\n",
|
386 |
+
" 'Good communication and teamwork skills',\n",
|
387 |
+
" 'Proactivity, openness, motivation, and passion for putting customers first']"
|
388 |
+
]
|
389 |
+
},
|
390 |
+
"execution_count": 16,
|
391 |
+
"metadata": {},
|
392 |
+
"output_type": "execute_result"
|
393 |
+
}
|
394 |
+
],
|
395 |
+
"source": [
|
396 |
+
"job = json_res\n",
|
397 |
+
"job['skills']"
|
398 |
+
]
|
399 |
+
},
|
400 |
+
{
|
401 |
+
"cell_type": "code",
|
402 |
+
"execution_count": 17,
|
403 |
+
"metadata": {},
|
404 |
+
"outputs": [
|
405 |
+
{
|
406 |
+
"data": {
|
407 |
+
"text/plain": [
|
408 |
+
"[[{'links': 'https://example.com/java-portfolio'},\n",
|
409 |
+
" {'links': 'https://example.com/magento-portfolio'}],\n",
|
410 |
+
" [{'links': 'https://example.com/magento-portfolio'},\n",
|
411 |
+
" {'links': 'https://example.com/ml-python-portfolio'}],\n",
|
412 |
+
" [{'links': 'https://example.com/ml-python-portfolio'},\n",
|
413 |
+
" {'links': 'https://example.com/ios-ar-portfolio'}],\n",
|
414 |
+
" [{'links': 'https://example.com/ml-python-portfolio'},\n",
|
415 |
+
" {'links': 'https://example.com/python-portfolio'}],\n",
|
416 |
+
" [{'links': 'https://example.com/magento-portfolio'},\n",
|
417 |
+
" {'links': 'https://example.com/android-portfolio'}]]"
|
418 |
+
]
|
419 |
+
},
|
420 |
+
"execution_count": 17,
|
421 |
+
"metadata": {},
|
422 |
+
"output_type": "execute_result"
|
423 |
+
}
|
424 |
+
],
|
425 |
+
"source": [
|
426 |
+
"links = collection.query(query_texts=job['skills'], n_results=2).get('metadatas', [])\n",
|
427 |
+
"links"
|
428 |
+
]
|
429 |
+
},
|
430 |
+
{
|
431 |
+
"cell_type": "code",
|
432 |
+
"execution_count": 18,
|
433 |
+
"metadata": {},
|
434 |
+
"outputs": [
|
435 |
+
{
|
436 |
+
"data": {
|
437 |
+
"text/plain": [
|
438 |
+
"{'role': 'Auszubildende/r 2024 im Einzelhandel',\n",
|
439 |
+
" 'experience': 'No specific experience required',\n",
|
440 |
+
" 'skills': ['Passion for NIKE and/or love for sports',\n",
|
441 |
+
" 'Competence for excellent customer service',\n",
|
442 |
+
" 'Good German and English skills',\n",
|
443 |
+
" 'Good communication and teamwork skills',\n",
|
444 |
+
" 'Proactivity, openness, motivation, and passion for putting customers first'],\n",
|
445 |
+
" 'description': \"As an Auszubildende/r, you will be responsible for creating a unique brand experience for our customers through excellent customer service and product knowledge. You will support various areas of the store, recommend products to customers, and use your knowledge of digital devices to connect online and offline sales and services. You will also learn about Nike's supply chain and retail processes, develop quality assurance measures, and be a brand ambassador for NIKE initiatives.\"}"
|
446 |
+
]
|
447 |
+
},
|
448 |
+
"execution_count": 18,
|
449 |
+
"metadata": {},
|
450 |
+
"output_type": "execute_result"
|
451 |
+
}
|
452 |
+
],
|
453 |
+
"source": [
|
454 |
+
"job"
|
455 |
+
]
|
456 |
+
},
|
457 |
+
{
|
458 |
+
"cell_type": "code",
|
459 |
+
"execution_count": 19,
|
460 |
+
"metadata": {},
|
461 |
+
"outputs": [
|
462 |
+
{
|
463 |
+
"name": "stdout",
|
464 |
+
"output_type": "stream",
|
465 |
+
"text": [
|
466 |
+
"Subject: Enhance Your Retail Experience with AtliQ's Automation Solutions\n",
|
467 |
+
"\n",
|
468 |
+
"Dear Hiring Manager,\n",
|
469 |
+
"\n",
|
470 |
+
"I came across the job description for Auszubildende/r 2024 im Einzelhandel at NIKE, and I was impressed by the emphasis on creating a unique brand experience through excellent customer service and product knowledge. As a Business Development Executive at AtliQ, I believe our company can help NIKE achieve this goal by streamlining retail processes and enhancing the overall customer experience.\n",
|
471 |
+
"\n",
|
472 |
+
"At AtliQ, we specialize in developing tailored automation solutions that facilitate the seamless integration of business processes. Our expertise in Java, Magento, and Python can help optimize supply chain management, improve quality assurance measures, and enhance the brand's online and offline presence.\n",
|
473 |
+
"\n",
|
474 |
+
"Our portfolio showcases our capabilities in developing scalable and efficient solutions for various industries, including retail. Some of our notable projects include:\n",
|
475 |
+
"\n",
|
476 |
+
"* Magento-based e-commerce solutions for seamless online shopping experiences (https://example.com/magento-portfolio)\n",
|
477 |
+
"* Machine Learning and Python-based solutions for predictive analytics and process optimization (https://example.com/ml-python-portfolio)\n",
|
478 |
+
"\n",
|
479 |
+
"By partnering with AtliQ, NIKE can leverage our expertise to:\n",
|
480 |
+
"\n",
|
481 |
+
"* Develop customized automation solutions for retail processes\n",
|
482 |
+
"* Enhance customer experience through data-driven insights\n",
|
483 |
+
"* Improve supply chain management and quality assurance measures\n",
|
484 |
+
"* Increase efficiency and reduce costs through process optimization\n",
|
485 |
+
"\n",
|
486 |
+
"I would be delighted to discuss how AtliQ can help NIKE achieve its goals and enhance the retail experience for its customers. Please feel free to contact me to schedule a call.\n",
|
487 |
+
"\n",
|
488 |
+
"Best regards,\n",
|
489 |
+
"\n",
|
490 |
+
"Mohan\n",
|
491 |
+
"Business Development Executive\n",
|
492 |
+
"AtliQ\n"
|
493 |
+
]
|
494 |
+
}
|
495 |
+
],
|
496 |
+
"source": [
|
497 |
+
"prompt_email = PromptTemplate.from_template(\n",
|
498 |
+
" \"\"\"\n",
|
499 |
+
" ### JOB DESCRIPTION:\n",
|
500 |
+
" {job_description}\n",
|
501 |
+
" \n",
|
502 |
+
" ### INSTRUCTION:\n",
|
503 |
+
" You are Mohan, a business development executive at AtliQ. AtliQ is an AI & Software Consulting company dedicated to facilitating\n",
|
504 |
+
" the seamless integration of business processes through automated tools. \n",
|
505 |
+
" Over our experience, we have empowered numerous enterprises with tailored solutions, fostering scalability, \n",
|
506 |
+
" process optimization, cost reduction, and heightened overall efficiency. \n",
|
507 |
+
" Your job is to write a cold email to the client regarding the job mentioned above describing the capability of AtliQ \n",
|
508 |
+
" in fulfilling their needs.\n",
|
509 |
+
" Also add the most relevant ones from the following links to showcase Atliq's portfolio: {link_list}\n",
|
510 |
+
" Remember you are Mohan, BDE at AtliQ. \n",
|
511 |
+
" Do not provide a preamble.\n",
|
512 |
+
" ### EMAIL (NO PREAMBLE):\n",
|
513 |
+
" \n",
|
514 |
+
" \"\"\"\n",
|
515 |
+
" )\n",
|
516 |
+
"\n",
|
517 |
+
"chain_email = prompt_email | llm\n",
|
518 |
+
"res = chain_email.invoke({\"job_description\": str(job), \"link_list\": links})\n",
|
519 |
+
"print(res.content)"
|
520 |
+
]
|
521 |
+
},
|
522 |
+
{
|
523 |
+
"cell_type": "code",
|
524 |
+
"execution_count": null,
|
525 |
+
"metadata": {},
|
526 |
+
"outputs": [],
|
527 |
+
"source": []
|
528 |
+
}
|
529 |
+
],
|
530 |
+
"metadata": {
|
531 |
+
"kernelspec": {
|
532 |
+
"display_name": "venv",
|
533 |
+
"language": "python",
|
534 |
+
"name": "python3"
|
535 |
+
},
|
536 |
+
"language_info": {
|
537 |
+
"codemirror_mode": {
|
538 |
+
"name": "ipython",
|
539 |
+
"version": 3
|
540 |
+
},
|
541 |
+
"file_extension": ".py",
|
542 |
+
"mimetype": "text/x-python",
|
543 |
+
"name": "python",
|
544 |
+
"nbconvert_exporter": "python",
|
545 |
+
"pygments_lexer": "ipython3",
|
546 |
+
"version": "3.12.3"
|
547 |
+
}
|
548 |
+
},
|
549 |
+
"nbformat": 4,
|
550 |
+
"nbformat_minor": 2
|
551 |
+
}
|
groq.ipynb
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"from langchain_groq import ChatGroq"
|
10 |
+
]
|
11 |
+
},
|
12 |
+
{
|
13 |
+
"cell_type": "code",
|
14 |
+
"execution_count": 12,
|
15 |
+
"metadata": {},
|
16 |
+
"outputs": [
|
17 |
+
{
|
18 |
+
"name": "stdout",
|
19 |
+
"output_type": "stream",
|
20 |
+
"text": [
|
21 |
+
"Virat Kohli is a renowned Indian international cricketer who has been one of the most successful batsmen in the world. Born on November 5, 1988, in Delhi, India, Kohli is widely regarded as one of the greatest batsmen of all time.\n",
|
22 |
+
"\n",
|
23 |
+
"Kohli made his international debut in 2008 and has since become a key player for the Indian national team. He has played in all formats of the game, including Test matches, One-Day Internationals (ODIs), and Twenty20 Internationals (T20Is).\n",
|
24 |
+
"\n",
|
25 |
+
"Some of Kohli's notable achievements include:\n",
|
26 |
+
"\n",
|
27 |
+
"1. **Highest run-scorer in ODIs**: Kohli is the fastest batsman to reach 12,000 runs in ODIs and has the most centuries in the format.\n",
|
28 |
+
"2. **Test captaincy**: Kohli led the Indian Test team from 2014 to 2022 and is one of the most successful Test captains in Indian cricket history.\n",
|
29 |
+
"3. **T20I records**: Kohli has the most runs in T20Is among Indian players and has been a key player in the Indian Premier League (IPL) for the Royal Challengers Bangalore (RCB) team.\n",
|
30 |
+
"4. **Awards and accolades**: Kohli has won numerous awards, including the ICC ODI Player of the Year award, the BCCI's International Cricketer of the Year award, and the Padma Shri, India's fourth-highest civilian honor.\n",
|
31 |
+
"\n",
|
32 |
+
"Kohli is known for his exceptional batting skills, including his ability to score runs quickly and consistently, as well as his leadership qualities. He is widely regarded as one of the greatest cricketers of all time, and his on-field performances have made him a beloved figure in Indian cricket.\n"
|
33 |
+
]
|
34 |
+
}
|
35 |
+
],
|
36 |
+
"source": [
|
37 |
+
"from langchain_groq import ChatGroq\n",
|
38 |
+
"\n",
|
39 |
+
"llm = ChatGroq(\n",
|
40 |
+
" temperature=0, \n",
|
41 |
+
" groq_api_key='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', \n",
|
42 |
+
" model_name=\"llama-3.1-70b-versatile\"\n",
|
43 |
+
")\n",
|
44 |
+
"\n",
|
45 |
+
"response = llm.invoke(\"Who is Virat kohli?\")\n",
|
46 |
+
"print(response.content)"
|
47 |
+
]
|
48 |
+
},
|
49 |
+
{
|
50 |
+
"cell_type": "code",
|
51 |
+
"execution_count": null,
|
52 |
+
"metadata": {},
|
53 |
+
"outputs": [],
|
54 |
+
"source": []
|
55 |
+
}
|
56 |
+
],
|
57 |
+
"metadata": {
|
58 |
+
"kernelspec": {
|
59 |
+
"display_name": "venv",
|
60 |
+
"language": "python",
|
61 |
+
"name": "python3"
|
62 |
+
},
|
63 |
+
"language_info": {
|
64 |
+
"codemirror_mode": {
|
65 |
+
"name": "ipython",
|
66 |
+
"version": 3
|
67 |
+
},
|
68 |
+
"file_extension": ".py",
|
69 |
+
"mimetype": "text/x-python",
|
70 |
+
"name": "python",
|
71 |
+
"nbconvert_exporter": "python",
|
72 |
+
"pygments_lexer": "ipython3",
|
73 |
+
"version": "3.12.3"
|
74 |
+
}
|
75 |
+
},
|
76 |
+
"nbformat": 4,
|
77 |
+
"nbformat_minor": 2
|
78 |
+
}
|
my_portfolio.csv
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Techstack","Links"
|
2 |
+
"React, Node.js, MongoDB","https://example.com/react-portfolio"
|
3 |
+
"Angular,.NET, SQL Server","https://example.com/angular-portfolio"
|
4 |
+
"Vue.js, Ruby on Rails, PostgreSQL","https://example.com/vue-portfolio"
|
5 |
+
"Python, Django, MySQL","https://example.com/python-portfolio"
|
6 |
+
"Java, Spring Boot, Oracle","https://example.com/java-portfolio"
|
7 |
+
"Flutter, Firebase, GraphQL","https://example.com/flutter-portfolio"
|
8 |
+
"WordPress, PHP, MySQL","https://example.com/wordpress-portfolio"
|
9 |
+
"Magento, PHP, MySQL","https://example.com/magento-portfolio"
|
10 |
+
"React Native, Node.js, MongoDB","https://example.com/react-native-portfolio"
|
11 |
+
"iOS, Swift, Core Data","https://example.com/ios-portfolio"
|
12 |
+
"Android, Java, Room Persistence","https://example.com/android-portfolio"
|
13 |
+
"Kotlin, Android, Firebase","https://example.com/kotlin-android-portfolio"
|
14 |
+
"Android TV, Kotlin, Android NDK","https://example.com/android-tv-portfolio"
|
15 |
+
"iOS, Swift, ARKit","https://example.com/ios-ar-portfolio"
|
16 |
+
"Cross-platform, Xamarin, Azure","https://example.com/xamarin-portfolio"
|
17 |
+
"Backend, Kotlin, Spring Boot","https://example.com/kotlin-backend-portfolio"
|
18 |
+
"Frontend, TypeScript, Angular","https://example.com/typescript-frontend-portfolio"
|
19 |
+
"Full-stack, JavaScript, Express.js","https://example.com/full-stack-js-portfolio"
|
20 |
+
"Machine Learning, Python, TensorFlow","https://example.com/ml-python-portfolio"
|
21 |
+
"DevOps, Jenkins, Docker","https://example.com/devops-portfolio"
|
requirements.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
langchain==0.2.14
|
2 |
+
langchain-community==0.2.12
|
3 |
+
langchain-groq===0.1.9
|
4 |
+
unstructured==0.14.6
|
5 |
+
selenium==4.21.0
|
6 |
+
chromadb==0.5.0
|
7 |
+
streamlit==1.35.0
|
8 |
+
pandas==2.0.2
|
9 |
+
python-dotenv==1.0.0
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
+
google-generativeai
|
14 |
+
python-dotenv
|
15 |
+
pdfplumber
|
16 |
+
Pillow
|
17 |
+
pdf2image
|