Inspiration
As a group of junior computer science majors and electrical engineers, our days are often marked with hours spent at the Library creating study guides, following study guides, and doing seemingly more learning/studying than anything else. One day after using ChatGPT to create yet another study guide to aid in learning more about Parallelism and Concurrency outside of our coursework, the compliant arose about how tedious it is to need to always spoon feed data to different study tools. An idea was hatched about creating our own study tool, but it was pushed off until this opportunity through the Hackathon came around.
What it does
Our solution to this repetitive task was to create a service where a user can just upload a document (.docx, .pdf, .txt) and automatically generate study materials based off of the content of one or multiple of those documents. The web application can be accessed anywhere, caches your sessions, and lets you:
- Chat with your file(s) as if you're chatting with the author
- Automatically generate a set of flashcards based on the content in the documents
- Automatically generate a multi-choice quiz to test your knowledge on the content you're trying to learn
How we built it
Our day began at 18:00. Entering the STC with a monitor under each of our arms, and walmart bags full of sweets and beverages, we began to tackle the arduous 24 hour task which would save us at least 2 minutes whenever it came time to study. When we settled down, it was time to split into Frontend/Backend pairings and begin our work.
For the backend, we chose a .NET and Azure-based architecture. Our monolithic Azure app service hosts the API, taking on the heavy lifting of file management, authorization, OpenAI API interactions, and caching for performance optimization. The backend is organized into various functional areas:
Backend/Auth handles user authentication and authorization. Backend/Controllers manages API endpoints. Backend/Services is a hub for various services, with specialized subfolders like AiServices for AI functionalities and DataService for database interactions. Files are stored in Azure blob storage, while references and relations of these files are neatly cataloged in CosmosDB, Azure's Cloud Hosted NoSQL database.
We integrated the OpenAI API to perform text vector embeddings and text completion tasks, enabling the core features of our app like chatting with uploaded documents, generating flashcards, and creating quizzes.
On the frontend, the application is designed to be user-friendly and accessible. It's organized into:
frontend/public for static assets. frontend/src for the main codebase. frontend/src/components for reusable UI elements. The frontend communicates with our robust backend to deliver a seamless experience, whether you're chatting with your study materials or taking a quiz generated on-the-fly.
As it came to fruition, our product OctoLearn began to represent our own struggles but also become a beacon of hope for the future or studying. Built with cutting-edge technology to make study smarter, not harder.
Challenges we ran into
We ran into a few challenges, the largest of which being setting up a scalable and reusable architecture for our AI tools, and creating a cohesive connection between the data gathering/generation in the backend and the frontend. This was our most time-consuming task with a large proportion being devoted to debugging.
We also had 4 people working on the same Github Repo which naturally led to some merge conflicts, but having a dedicated merge-conflict reviewer helped curb those issues.
Accomplishments that we're proud of
We're proud of everything we've been able to accomplish. We started out with lofty goals, but knew this and made sure to define many of them as "stretch goals". We were able to hit some, but knew our limits given the time constraints and we're proud to say that we focused heavily on refining our code and making sure it as written cleanly and efficiently as possible rather than implementing every cool feature we could think of.
We were able to work well as a team and divided the tasks evenly so that no one person was doing more work than anyone else. That's what helped the most.
What we learned
We learned a lot about the importance of breaks and not overindulging in sugary foods. That along with a much better understanding of the DevOps process, full stack development, and the issues that come with running bleeding-edge software (there was a strong lack of support for some of our packages).
Even with a lack of support, we were able to create a viable working product that although would still be seen as a beta product, we have learned how much you can do in 24 hours.
What's next for Octo-Learn
Octo-Learn will continue to grow, and we hope to add more customizability to the features currently available. Another big step would be to pivot to a quicker Large Language Model, as the one we chose may be the best at thinking; it lacks in speed.
Built With
- .net
- api
- azure
- c#
- chatgpt
- cosmosdb
- javascript
- openai
- react
- semantic-kernel
- tailwind
Log in or sign up for Devpost to join the conversation.