Skip to content

Taking over a voice agent project

I had taken over a project for a client, who wanted a voice agent in his application - as additional aid to the typical chat interface.

The application at that point consisted of a couple of agents (OpenAI Agents SDK). One agent led the conversation (text-only), while the other analysed users' input and via tool calls updated the frontend. It kept track of what was already discussed and what was left for the user to clarify.

Agents were using SQLite for session storage. It was completely sufficient for a fairly long period of time. However, due to client's requirements and feature requests, as well as a hope that the cooperation would grow, I reimplemented those in PostgreSQL. In hindsight - I should've just stuck with SQLite, mounted and secured the volume properly. Would've saved some time.


Starting off the work - I set up a split into production and development instances, mainly to allow our team to preview changes before rolling them out for the client. Trunk based development would've been completely fine for this kind of project.

Having a development instance was helpful at times though - application didn't have a significant test coverage and client requirements weren't that clear then.


At the time (August 2025) there was a dependency conflict between Pipecat and the OpenAI Agents SDK. Agent session storage required openai-agents>=0.2.0, which in turn needed openai>=1.93.1. Pipecat 0.0.76 used openai~=1.74.0 - meaning >=1.74.0, <1.75.0. The two couldn't coexist in the same environment.

Pace of delivery was important. I pulled the pipecat code into a separate container and service.

I liked the architecture in theory - the backend could potentially serve our other applications as well. In practice, it introduced complexity that wasn't justified yet: a more involved .gitlab-ci and docker-compose.yaml, when a single service would've been enough at that stage.

Within days of committing to the split, Pipecat 0.0.77 came out and loosened the constraint to openai>=1.74.0, <2 - which would have allowed both packages to coexist. Wiser to just wait. I bumped to 0.0.79 with [daily,cartesia,deepgram,silero,azure,runner] extras in the separate backend regardless.

S.D.G