Inspiration

I have always wanted to build something cool with GenAI, but I don't want to build yet another API wrapper app. I wanted to leverage GenAI's human-like responses, and being an introvert myself, I think that GenAI has huge potential to help people like me practice conversations in different settings. And for this project, I simulate a coding interview with the aid of Gemini to help socially anxious coders like me practice for the upcoming internship search.

What it does

The app simulates some basic functionality of LeetCode, including searching for problems and performing the test. It has a minimal interface, with only the problem description, code editor, and a test panel. The main feature is the Gemini-powered interviewer who will guide the user throughout the test and encourage the user to speak out their thinking process, a valuable skill in real interviews.

How we built it

I built the front end with jQuery and Bootstrap, and back end with Python Flask with some SocketIO functionality. The interviewer responses are facilitated with Gemini Pro 1.0, and the audio recognition and synthesis are done using OpenAI's audio APIs.

Challenges we ran into

There was a lot of trouble making the front end and back end communicate efficiently about code events and editor events, as well as recording and streaming audio both ways. Furthermore, Gemini 1.5 is heavily rate-limited and thus regularly breaks, while Gemini 1.0 is very prone to unexpected behavior. Also, there is concern about Flask and the way it handles concurrent requests, which might be a big problem in a real-world usage situation.

Accomplishments that we're proud of

What I am most proud of is getting the audio communication right. I had heavy doubts about the feature, which could make or break the project, but it turned out the way I wanted.

What we learned

Bidirectional communication on all sorts of data types is very complicated. But I gained more experience using it now.

What's next for LeetGud

There will definitely be more enhancements to the model prompting to make it more responsive and deliver higher quality responses, as well as more quality-of-life features for the platform, such as giving feedback after a test, or keeping track of your progress.

Note: I am using Gemini Pro 1.0, as the rate limit of 1.5 is much lower and is not suitable for this experience. The 1.0 model suffers from lower-quality responses and unexpected behavior, but for a proof of concept, it works quite decently.
Share this project:

Updates