The whole design is about refusing to answer rather than answering well.
Fertility treatment is a subject where a chatbot that improvises is worse than no chatbot at all. A question passes an intent classifier, a domain check and a safety check before anything is retrieved, so an out-of-scope question is turned away before it ever reaches the model. Putting that in the prompt would have been a request; putting it in front is a gate.
Answers come from clinic-approved material retrieved out of Qdrant and fed to Gemini with a prompt constrained to IVF. The knowledge base is built from whatever the clinic already had — PDFs, pages on their website, a YouTube channel, spreadsheets — so there's a parser for each rather than a requirement that someone retype it all.
It also takes phone calls. The voice agent runs on LiveKit, and the part that took longest was barge-in: letting the caller interrupt mid-sentence and having the agent stop talking and listen. Without it you have an IVR menu; with it you have something closer to a conversation.
Role
I built the AI layer — retrieval, the voice agent and the service behind them. The mobile app and surrounding platform were built by fellow developers.
Built with
