<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Voice Assistant on Raspberry Pi on Gabriel Mongeon</title><link>https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/</link><description>Recent content in Voice Assistant on Raspberry Pi on Gabriel Mongeon</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 15 May 2026 00:07:00 -0400</lastBuildDate><atom:link href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/index.xml" rel="self" type="application/rss+xml"/><item><title>Retrospective, Lessons Learned, and v2 Roadmap</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-retrospective/</link><pubDate>Fri, 15 May 2026 00:07:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-retrospective/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>Six articles and two evenings later, we have a French-language voice assistant running entirely on two Raspberry Pi 4s.&lt;/p></description></item><item><title>Function Calling: Teaching Tools to the Assistant</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-function-calling/</link><pubDate>Fri, 15 May 2026 00:06:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-function-calling/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>In article #5, we injected weather data into every conversation, even for questions like &lt;em>&amp;ldquo;what&amp;rsquo;s your name?&amp;rdquo;&lt;/em>. That wastes tokens. Function calling fixes this: the LLM decides when it needs a tool and only calls it when the question actually warrants it.&lt;/p>
&lt;p>The complete code for this article is available on &lt;a href="https://github.com/mongeon/code-examples/tree/main/dotnet/ai/audio-assistant/06-function-calling">GitHub&lt;/a>.&lt;/p></description></item><item><title>Real-Time Weather and Swapping to the Claude API</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-weather-claude/</link><pubDate>Fri, 15 May 2026 00:05:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-weather-claude/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>The assistant responds well, but it has no idea what the weather is like outside. We wire up Open-Meteo, a free, key-less weather API. And while we&amp;rsquo;re at it, we swap Ollama for the Claude API: a single line in &lt;code>appsettings.json&lt;/code>.&lt;/p>
&lt;p>The complete code for this article is available on &lt;a href="https://github.com/mongeon/code-examples/tree/main/dotnet/ai/audio-assistant/05-weather-claude-api">GitHub&lt;/a>.&lt;/p></description></item><item><title>Memory, Silence Detection, and systemd</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-memory-systemd/</link><pubDate>Fri, 15 May 2026 00:04:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-memory-systemd/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>The assistant from article #3 works, but every exchange starts from scratch. We fix that in three steps: conversational memory, automatic silence detection, and auto-start at boot with systemd.&lt;/p>
&lt;p>The complete code for this article is available on &lt;a href="https://github.com/mongeon/code-examples/tree/main/dotnet/ai/audio-assistant/04-memory-silence-systemd">GitHub&lt;/a>.&lt;/p></description></item><item><title>Ollama Integration and Home Context</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-ollama/</link><pubDate>Fri, 15 May 2026 00:03:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-ollama/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>Article #2 ended with a hardcoded response, which was enough to confirm the audio pipeline works. Now we swap that line for a real HTTP call to Ollama on the pi-cerveau, and add a system prompt to give the assistant a personality and some knowledge about your home.&lt;/p>
&lt;p>The complete code for this article is available on &lt;a href="https://github.com/mongeon/code-examples/tree/main/dotnet/ai/audio-assistant/03-ollama-context">GitHub&lt;/a>.&lt;/p></description></item><item><title>Setting Up Both Raspberry Pis</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-setup/</link><pubDate>Fri, 15 May 2026 00:01:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-setup/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>Two Raspberry Pi 4s, a few hours of setup, and at the end you have a voice assistant running entirely on your local network. Before writing a single line of .NET code, here&amp;rsquo;s the setup for both Pis.&lt;/p></description></item><item><title>.NET 10 Worker Service and Audio Pipeline</title><link>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-worker-service/</link><pubDate>Fri, 01 May 2026 00:00:00 -0400</pubDate><guid>https://gabrielmongeon.ca/en/2026/05/raspberry-pi-voice-assistant-worker-service/</guid><description>&lt;p>&lt;em>This post is part of the &lt;a href="https://gabrielmongeon.ca/en/series/voice-assistant-on-raspberry-pi/">Voice Assistant on Raspberry Pi&lt;/a> series.&lt;/em>&lt;/p>
&lt;p>Both Pis are configured. Time to write some code. The goal: validate the full audio pipeline on the pi-client, from button press to spoken response, without a real LLM. We hardcode a reply for now. The LLM comes in article #3.&lt;/p>
&lt;p>The complete code for this article is available on &lt;a href="https://github.com/mongeon/code-examples/tree/main/dotnet/ai/audio-assistant/02-worker-service-pipeline">GitHub&lt;/a>.&lt;/p></description></item></channel></rss>