Inspiration
What it does
How we built it# OjaSuper Business Agent: Empowering the African Market
What Inspired Me
With a deep passion for artificial intelligence and building systems using Machine Learning, I was immediately drawn to the Africa Deep Tech Challenge and decided to take on the project. I informed my friend, Nelson, who came up with the core idea for the app. He provided a breakdown of what it should do, inspired by a massive bottleneck for local businesses: the daily struggle of manual bookkeeping. Most shopkeepers carry out manual entries at the end of a long, stressful day. This process is exhausting, and midday transactions are frequently forgotten or lost.
We called the project OjaSuper because it is built to help the everyday market people, and the word "Oja" means "market" in Yoruba. Then, the real work started.
How It Was Built (Architecture & Execution)
Nelson, my partner, worked on setting up the initial architecture. He did the groundwork of building the skeleton for me by defining what should be included, suggesting how we could approach it efficiently, creating most of the file structures, and mapping out the backend architecture.
I then received those files and took over the core implementation. I populated the architecture with the actual machine learning logic, distributed the tasks, and updated the codebase based on the structure he laid out.
Technology Stack & Optimization
To meet the strict hardware constraints of building an offline, on-device AI, I had to make highly strategic technical choices:
- Interpreter: We chose
uvas our package manager and interpreter because of how fast and robust it is. - Speech-to-Text (STT): I used
faster-whisperbecause it is significantly lighter than the standard Whisper model, allowing it to run smoothly on local hardware. - Large Language Model (LLM): I integrated Qwen-2.5-3B-Instruct. I chose Qwen not just because it is lightweight, but because it is exceptionally fast. Using it as an offline model keeps the device from overheating, though improving the model's absolute response time is still a goal I am actively working towards.
- Frontend Interface: With the aid of artificial intelligence, I built the frontend files. Using my backend knowledge, I connected the frontend directly to our FastAPI endpoints and routes to create a seamless dashboard.
Challenges Faced & Lessons Learned
1. The "Bees vs. Beans" STT Problem
Because faster-whisper is a lightweight model, it sometimes gave us transcription problems—such as not being able to differentiate between "bees" and "beans." I fixed this by writing custom Python code precisely in the executor, where I laid down specific rules and safeguard algorithms to intercept and correct these phonetic mischecks.
2. The Challenge of Conversational Memory One main challenge I faced was making the system remember previous conversations. Initially, the LLM treated every new entry as an isolated transaction, but that isn't how it works in the real world—an AI needs to be interactive. I solved this by creating a JSON file that temporarily holds conversations. It acts as a short-term memory that allows for follow-up questions, and it refreshes after some time or when the system is reloaded.
3. Multimodal Accessibility I also realized that relying solely on voice wasn't enough. I worked on making sure it wasn't only a voice-input system, adding a text-input feature so that transactions and transcriptions can be easily corrected by the user.
What's Next
Building OjaSuper taught me how to bridge the gap between raw AI models and structured business logic. Hopefully, in the future, these temporary conversations can be stored persistently as chat logs to give business owners an even richer, long-term AI assistant experience.
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for OjaSuper Business Agent
Built With
- css3
- fastapi
- faster-whisper
- gguf
- git
- github
- html5
- javascript
- llama-cpp-python
- python
- qwen
- sql
- sqlalchemy
- sqlite
- uv
- vercel
- whisper
Log in or sign up for Devpost to join the conversation.