react, flask & AI App

iCims ChatATS

My Role
Back-end developer.
Timeline
July 2023.

Job Description Generator app built with a react front end and flask back end which calls the openAI api.

I was the back-end engineer and worked with four other brilliant back-end engineers from iCims. Namely, Matthew Kaiser, Michael Calarco, Gary Brendle and Bradley Jensen.

Project Context

This project was a submission to the 2023 Vista Global Hackathon with a focus on generative AI. The hackathon consisted of multiple companies who were tasked with solving a problem specific to their company's operations, and this solution had to include an element of generative AI. I was paired with a team of four iCims engineers. Our problem statement was to leverage generative AI, to help recruiters save time and develop a fair, inclusive, and effective hiring strategy by improving the job posting experience. Our solution and use case for generative AI was to create a job description generator. This solution if brought to life would make talent acquisition professionals more productive by helping them focus on more strategic parts of the hiring process. Our solution simplifies the job creation process by replacing standard templating with smart templating. Users can enter a brief description of the job they want to post, and we will find recent, similar jobs that were successful.​ Thus, templates no longer need to be maintained and updated. Successful jobs, as determined by our metrics, become your templates. This takes advantage of the best descriptions written across the company.​Users start with a recently successful job posting and can refine with help from Generative AI.

Technologies implemented

The app is built with a React frontend and Python backend. We constructed a Flask REST API, which took a job title when called, and in turn called the OpenAI API to generate an ideal job description for that position. We had free access to the OpenAI API through the use of the Microsoft azure service. Specifically, to generate the initial job description options from which the user can select we call the OpenAI text-embedding-ada-002 for embeddings. At this stage, we take our job data from our database and for each of them we send it to the embedding model, and get back a vector which is a list of numbers for a given embedding model. We index them into a vector database, this allows us to query our job database with this vector and find similar job postings: these are the closest vectors to the one we queried with. Then, these job postings are displayed as options for the user to chose from and when the user selects a specific job description, the user has the option to further refine their chosen job-description by typing instruction into a chat-bot assistant: for this we call the Open AI gpt-3.5-turbo to generate further edits to improve the chosen job description. Edits are shown in green and red ; users have the ability to accept or reject changes. Once they are done, the job description is ready to be used.

Challenges faced

Being a team made up of backend engineers, the frontend was slightly difficult to build as most of us hadn't built a react app in a long time. Notably, at the refinement stage the edits and difference display which showed changes to the user was difficult to implement.

Solution

We solved this by reading lots of documentation and spending time doing research on how to implement the functionality we desired. We solved the edit and difference display by implementing the React Quill library.

Reflections

Building this app gave me deep insight into generative AI as I had little to no knowledge prior to the hackathon. I also gained experience and learnt how to make applications more efficiently from the iCims engineers I worked with. They gave me both technical and non-technical knowledge which I will be applying for the rest of my life. In addition, I also learnt a lot from the other companies at the hackathon as they all had unique solutions and interesting use cases for generative AI. I plan to dive deeper into the interesting field of AI/ML and learn the technology in order to implement it in future apps I would build. Lastly, I also plan on expanding this iCims app submission to make it more robust and use my creativity to add more useful functionality to the app.