abhinavyadav11's picture
Upload app.py
a87d1ae verified
raw
history blame
3.7 kB
import streamlit as st
import pandas as pd
import uuid
import chromadb
from langchain_groq import ChatGroq
from langchain_community.document_loaders import WebBaseLoader
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from dotenv import load_dotenv
import os
# Load environment variables from .env file // # Create .env file outside the (.venv) i.e in create in main files
load_dotenv()
# Initialize LLM
llm = ChatGroq(
temperature=0,
api_key = os.getenv("API_KEY"),
#api_key="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",
model_name="llama-3.1-70b-versatile"
)
# Streamlit App
st.title("Cold Email Generator with LangChain")
# Load CSV
uploaded_file = st.file_uploader("Upload your portfolio CSV file", type=["csv"])
if uploaded_file:
df = pd.read_csv(uploaded_file)
st.write("Portfolio Data:")
st.dataframe(df)
# Initialize ChromaDB
client = chromadb.PersistentClient('vectorstore')
collection = client.get_or_create_collection(name="my_portfolio.csv")
if not collection.count():
for _, row in df.iterrows():
collection.add(documents=row["Techstack"],
metadatas={"links": row["Links"]},
ids=[str(uuid.uuid4())])
st.success("Portfolio data added to the vectorstore!")
# Scrape Job Description
url = st.text_input("Enter the job posting URL:")
if url:
loader = WebBaseLoader(url)
page_data = loader.load().pop().page_content
st.write("Scraped Job Data:")
st.text(page_data)
# Extract Job Details
prompt_extract = PromptTemplate.from_template(
"""
### SCRAPED TEXT FROM WEBSITE:
{page_data}
### INSTRUCTION:
The scraped text is from the career's page of a website.
Your job is to extract the job postings and return them in JSON format containing the
following keys: `role`, `experience`, `skills` and `description`.
Only return the valid JSON.
### VALID JSON (NO PREAMBLE):
"""
)
chain_extract = prompt_extract | llm
res = chain_extract.invoke(input={'page_data': page_data})
json_parser = JsonOutputParser()
job = json_parser.parse(res.content)
st.write("Extracted Job Details:")
st.json(job)
# Query Portfolio Links
links = collection.query(query_texts=job['skills'], n_results=2).get('metadatas', [])
st.write("Relevant Portfolio Links:")
st.write(links)
# Generate Cold Email
prompt_email = PromptTemplate.from_template(
"""
### JOB DESCRIPTION:
{job_description}
### INSTRUCTION:
You are Mohan, a business development executive at AtliQ. AtliQ is an AI & Software Consulting company dedicated to facilitating
the seamless integration of business processes through automated tools.
Over our experience, we have empowered numerous enterprises with tailored solutions, fostering scalability,
process optimization, cost reduction, and heightened overall efficiency.
Your job is to write a cold email to the client regarding the job mentioned above describing the capability of AtliQ
in fulfilling their needs.
Also add the most relevant ones from the following links to showcase Atliq's portfolio: {link_list}
Remember you are Mohan, BDE at AtliQ.
Do not provide a preamble.
### EMAIL (NO PREAMBLE):
"""
)
chain_email = prompt_email | llm
email_res = chain_email.invoke({"job_description": str(job), "link_list": links})
st.write("Generated Cold Email:")
st.text(email_res.content)