wg-job-analyser / app.py
mbosse99's picture
initial commit
460cde1
import streamlit as st
from azure.storage.blob import BlobServiceClient
from azure.cosmos import CosmosClient, exceptions
import os
st.set_page_config(layout="wide")
st.markdown(
"""
<style>
[data-testid=column]{
text-align: left;
display: flex;
align-items: center;
justify-content: center;
}
</style>
""",
unsafe_allow_html=True,
)
col1, col2 = st.columns([2, 1])
col1.title("Interview chatbot evaluations")
col2.image("https://www.workgenius.com/wp-content/uploads/2023/03/WorkGenius_navy-1.svg")
if "selected_item" not in st.session_state:
st.session_state["selected_item"] = None
if "top_number" not in st.session_state:
st.session_state["top_number"] = 10
endpoint = "https://wg-candidate-data.documents.azure.com:443/"
key = os.getenv("CONNECTION_DB")
client = CosmosClient(endpoint, key)
database = client.get_database_client("ToDoList")
container = database.get_container_client("JobData")
candidate_container = database.get_container_client("Items")
def get_candidates(id, candidate_container):
candidate_query = f"""
SELECT *
FROM c
WHERE c.job_description_id = '{id}'
"""
query_result = list(candidate_container.query_items(query=candidate_query, enable_cross_partition_query=True))
return query_result
def get_open_and_closed_candidates(id, nr_of_candidates, candidate_container):
candidate_query = f"""
SELECT *
FROM c
WHERE c.job_description_id = '{id}' AND c.interview_conducted = true
"""
query_result = list(candidate_container.query_items(query=candidate_query, enable_cross_partition_query=True))
return nr_of_candidates-len(query_result),len(query_result)
# endpoint = "https://wg-candidate-data.documents.azure.com:443/"
# key = os.getenv("CONNECTION_DB")
# client = CosmosClient(endpoint, key)
# database = client.get_database_client("ToDoList")
# container = database.get_container_client("JobData")
# candidate_container = database.get_container_client("Items")
if not st.session_state["selected_item"]:
txt_input_cols = st.columns(3)
with txt_input_cols[0]:
st.text_input("Search for job titles", key="title_search")
query = f"""
SELECT TOP {st.session_state["top_number"]} *
FROM c
WHERE CONTAINS(c.title, '{st.session_state["title_search"]}')
ORDER BY c.timestamp DESC
"""
items = list(container.query_items(query=query, enable_cross_partition_query=True))
with st.container():
col1, col2, col3, col4, col5 = st.columns([2,1,1,1,1])
col1.subheader("Job title")
col2.subheader("Applicants")
col3.subheader("Open")
col4.subheader("Completed")
col5.subheader("Overview")
for i, item in enumerate(items):
cols = st.columns([2,1,1,1,1])
open, closed = get_open_and_closed_candidates(item["id"], item["number_of_applicants"], candidate_container)
with st.container():
for j in range(5):
with cols[j]:
if(j == 0):
st.text(item["title"])
elif(j == 1):
st.text(item["number_of_applicants"])
elif(j == 2):
st.text(open)
elif(j == 3):
st.text(closed)
elif(j == 4):
if st.button("Go to overview",use_container_width=True,key="btn_row_"+str(i)):
st.session_state["selected_item"] = item
st.rerun()
if st.button("Load more"):
st.session_state["top_number"] = len(items)+10
st.rerun()
else:
job_detail_cols_title = st.columns([1,1,1])
with job_detail_cols_title[0]:
if st.button("Go back to list view"):
st.session_state["selected_item"] = None
st.session_state["top_number"] = 10
st.rerun()
with job_detail_cols_title[1]:
st.subheader("Job: " + st.session_state["selected_item"]["title"])
candidate_db_items = get_candidates(st.session_state["selected_item"]["id"], candidate_container)
job_detail_cols_content = st.columns([1,5,1])
with job_detail_cols_content[1]:
st.subheader("Recruiter Email: " + st.session_state["selected_item"]["evaluation_email"])
if len(st.session_state["selected_item"]["question_one"])>0:
st.subheader("First question: " + st.session_state["selected_item"]["question_one"])
if len(st.session_state["selected_item"]["question_two"])>0:
st.subheader("Second question: " + st.session_state["selected_item"]["question_two"])
if len(st.session_state["selected_item"]["question_three"])>0:
st.subheader("Thrid question: " + st.session_state["selected_item"]["question_three"])
for i, can_item in enumerate(candidate_db_items):
st.subheader("Candidate: "+can_item["name"])
if can_item["interview_conducted"]:
st.text("The candidate "+can_item["name"]+ " has already completed the interview and this is the AI summary:")
st.text(can_item["ai_summary"])
else:
st.text("The candidate "+can_item["name"]+ " has not yet completed the interview.")
st.text("Link for the interview chatbot:")
st.text("https://tensora.ai/workgenius/cv-evaluation2/?job="+can_item["id"])