You are browsing as a guest. Sign up (or log in) to start making projects!

Xavier

@Xavier

Joined June 2nd, 2026

  • 5Devlogs
  • 4Projects
  • 1Ships
  • 15Votes
Ship

Hey everyone! I really enjoyed developing this personal assistant. While it has its limitations, its cool to have a group of programmers sharing ideas and cool concepts.

This first part will give a small peek into the errors i ran into during development.

Development Environment and Python 3.13

Using Python 3 as the foundation for the backend was the simplest part of the project, but certainly not the easiest. Because Python 3.13 is so new, several critical packages lacked prebuilt wheels. I had to manually check GitHub releases and pull pre-release wheels directly from CI artifacts. I pinned these specific versions to maintain stability. When that became unsustainable, I fell back to Python 3.12, utilizing virtual environment isolation for those specific packages.

FastAPI and SSE Streaming

Streaming LLM tokens over Server-Sent Events (SSE) is not well-documented, and it caused significant friction. The primary challenge was that the LLM returns a standard generator, while FastAPI’s StreamingResponse requires compatibility with async generators; they do not compose cleanly with synchronous LLM clients.

My solution was to wrap the DeepSeek client in an async adapter using asyncio.to_thread(). This ensured the blocking API calls did not stall the event loop, allowing me to yield each token as an SSE-formatted string.

Stability and Error Handling

Under heavy load, I found that DeepSeek could occasionally return 503 errors. To manage this, I implemented an exponential backoff strategy with a maximum of three retries to maintain stability without overloading the service. A major challenge was ensuring that errors were caught before the SSE stream began, preventing the user from receiving a "half-finished" response. Consequently, I only initialize the stream once the connection is confirmed as alive.

Voice Integration and Reliability

I chose to integrate ElevenLabs for the voice component to provide a more human-like touch. However, API-based voice services introduce their own reliability constraints. To ensure the assistant remains functional even when hitting the ElevenLabs free-tier limits, I implemented a fallback mechanism. If the API fails, the system reverts to basic browser-based Text-to-Speech (TTS)—a less polished experience, but necessary for overall system reliability.

Deployment and Connectivity

The backend is currently running locally on my PC and exposed via a Cloudflare Tunnel. I ran into a limitation where every restart of the tunnel generates a new URL. I have had to accept this for now, but I am currently looking for a permanent workaround to ensure a consistent connection point.

Now - if you have read this far, you probably want to know what i enjoyed about this project. Building up this backend architecture was certainly not an easy task. For some people this would have been a complete bore, and would've been a dreaded chore, but I enjoyed the challenge, and learning opportunity of dealing with Python 3.13 challenges. After I ship this project, I will be working more with python backend, potentially with another webapp.

Thanks for reading (:

  • 3 devlogs
  • 69h
  • 7.79x multiplier
  • 234 Stardust
Try project → See source code →
Open comments for this post

32h 51m 45s logged

Final Devlog 🤖

Hey everyone!

This is my final devlog for this project.

I’ve been working on JARVIS every day, and it’s pretty much been all I’ve been doing. It’s been a challenging but rewarding project, and I’ve learned a ton along the way. Here’s a quick summary of some of the biggest technical challenges I ran into.

Dual Database Architecture

One of the hardest parts was managing two databases at the same time. Every message gets saved twice: SQLite stores the raw chat history, while ChromaDB stores vector embeddings for semantic memory. Every write has to handle the possibility of ChromaDB being unavailable, and every read has to combine recent chat history with similarity based memory retrieval. If either system breaks, JARVIS still works, but it loses its long term memory.

Replacing PyTorch with ONNX

PyTorch turned out to be a huge problem for deployment. The sentence-transformers package pulls in roughly 1.5GB of CUDA libraries, while most free hosting platforms only provide 512MB of RAM. I switched to ChromaDB’s ONNX embedding runtime instead, which reduced the model to around 30MB. Getting ChromaDB to consistently use ONNX instead of falling back to PyTorch took a lot of configuration, and if the embedding function changes between deployments, the entire vector database has to be rebuilt.

Authentication

Even though JARVIS is a personal assistant, I still wanted authentication to be done properly. User accounts use bcrypt password hashing, username validation, password validation, duplicate username checks, and identical login error messages to prevent username enumeration. It’s definitely overkill for a project like this, but it was a great learning experience.

Overall, this project taught me a lot about AI systems, deployment, databases, authentication, and building software that actually has to work reliably. I’m really happy with how JARVIS turned out, and I’m excited to keep improving it even after this project is over.

The boring stuff is all done now.

0
0
2
Open comments for this post

11h 44m 32s logged

Hey everyone!
From my last dev-log I have a lot to showcase before the final shipment that is impending.
I have used Render - a website used for putting live complicated webapps on the internet as a sort of backbone for everyone to access. This will be the main point of access of this project, and the last milestone I hit. I still have a lot to work on past this such as implementing real note taking, as well as a full AI verbal based communication network.
After this is finished, I will be moving on to my next project, a game.

0
0
4
Open comments for this post

24h 48m 44s logged

Hey everyone!

This is my first official dev-log for my project.
This project has so-far since been very fruitful,
and i have been able to complete many of the milestones i wanted to reach.

Keystone goals:
Long term data storage (SQLite)
SentenceTransformers (local) For language processing
Ai retrieval system (retrieving memory for usage) 
Vector database (for ai retrievall AI reasoning layer(LLM)
User layer(web app)
System orchistration(Python backend with fastAPI)

I have completed all of the integral parts of the project so far, and will continue to optimize and improve the assistant until it is the best it can be.

Now that the original milestones have been reached, i wanted to share the next moving of the goal posts:

Full account creation which facilitates the storage of all chat history.

Full memory acquisition to store previous chats as well as the ability to use google maps, and google business for deep research

Research tab to show active research and knowledge acquisition.

3
0
21

Followers

Loading…