Inspiration
Milla is the name of my late black cat, and is the embodiment of what Milla would be if she were an AI. She had a neurological disease and was always walking lopsided and as if she were a little drunk, however she loved to follow me around doing yardwork and chores. I imagined what she would be if I could take her with me and interact with me.
What it does
Milla is a Clojure based server that interfaces to Ollama has a SQLite backend for Retrieval Augmented Generation (RAG). She is a proof of concept to show what is possible in a personal AI assistant. Specifically:
- She runs locally, there are no worries that she might be involved in a data breach.
- She runs on a small footprint, on ARM, running fine on a Raspberry Pi. There are no shortage of devices that are ARM based that she could run on
- She uses Clojures unique REPL code rewrite code as data model to rewrite herself (on a limited basis) to be more useful to the user.
- She has a unique "merge" functionality so in theory she could sync up copies of herself. This might be a hand off between Milla in the car and your work "kitten", or you just go through an area with no cell service.
How we built it
I was interested to see how good AI Code Agents like Codex actually were, so I created a Functional Specifications Document as if I were a business analyst for the Milla Product. I intentionally picked an obscure language like Clojure because it was a test of Codex's ability as well as its unique use in Machine Learning.
I installed Ubuntu Server on my Pi, and then got a first draft from Codex. Once I had that, I had to squash a lot of bugs and rewrite a good bit of code. While I spent more time debugging than writing code, I do think I saved time.
Challenges we ran into
First off, I didnt know Clojure before I started so that was certainly a challenge (although the book Living Clojure by Carin Meier was very helpful).
Second, Parentheses were a problem. I have heard it said that the acronym LISP stands for Lisp Is Stupid Parentheses, and Codex certainly thought so. I found and interesting tendency of ChatGPT to consider the following erroneous combination as "matched":
(]
So a lot of debugging ended up being unwinding parentheses, brackets, etc.
Lastly while I am grateful to have my family, trying to find time in the evening with a four year old demanding attention certainly made this more challenging.
Accomplishments that we're proud of
I'm happy to complete her at all. I'm absolutely thrilled that she actually does something. The fact that she seems somehow polished floors me.
What we learned
Clojure for one. Additionally I got to dive deep into AI which was a great experience.
What's next for Milla
The big thing I wanted to do but didn't get to was to integrate audio with standard speech recognition and creation libraries. Ideally, I imagine Milla as living in a car attached to a dash cam and able to yell "Speed Trap!" or able to talk to me about my schedule for the day. Her merge function has a lot of uses...
Log in or sign up for Devpost to join the conversation.