New features
- Multi-provider support expanded to seven providers. You can now run Freesona on Gemini, OpenAI, Ollama, NVIDIA NIM, Azure AI Foundry, Groq, or OpenRouter, and switch between them at runtime with
/model. Bring your own key for whichever provider you prefer. See AI Providers. - GitHub Models provider. Authenticate with a
GITHUB_TOKENto route generations through the GitHub Models catalog using the same OpenAI-compatible flow as other providers. See Environment Variables. - Knowledge base commands. Manage a local ChromaDB knowledge base directly from Discord with
/kbadd,/kblist,/kbsearch, and/kbdelete. Ingestion now accepts.txt,.json, and.pdffiles, and the retrieval flow is provider-neutral so it works on every provider. See Knowledge Base. - Multimodal on non-Gemini providers. Image attachments are now forwarded as base64 payloads to compatible non-Gemini providers (starting with NVIDIA NIM), so vision prompts are no longer Gemini-only. See AI Providers.
- Anniversary tracking. Freesona can track and announce member anniversaries per guild, backed by a new
anniversaries.dbstore. - Warning system. A first-class warning workflow with a configurable auto-action threshold. See Moderation.
Updates
- Server-side memory continuity. Conversation continuity now uses the Interactions API with
previous_interaction_idon supported providers, replacing the old rolling-window approach. Long-term facts are scoped to a stableguild_id + user_idkey so memories follow the right user across channels. See Memory. - Per-user, per-channel debouncing. Response debouncing is now scoped per user and per channel instead of globally, so parallel conversations feel more responsive.
- Per-user autonomy cooldown. Autonomous replies now enforce a cooldown per user, preventing the bot from over-engaging with any single member. See Autonomy.
- Typing indicators. Freesona now shows a typing indicator while generating a response, so users know a reply is on the way.
- Runtime RSS channel controls. New
/rss setchanneland/rss clearchannelcommands let you change the announcement target without restarting. See RSS Feeds. - Configurable port and debounce. The web port and debounce interval are no longer hardcoded — set them via environment variables. See Environment Variables.
- Sample config file. The shipped config is now
config.sample.jsonso your local settings won’t get overwritten on update. See Configuration. - Reply threading. The bot once again replies directly to the triggering message where appropriate, keeping conversations easier to follow.
Bug fixes
- Fixed multi-user identity confusion where the model could conflate messages from different users in the same channel.
- Fixed vision hallucinations and enabled reliable base64 image payloads on NVIDIA NIM.
- Fixed a rate limiter error on the Gemini provider.
- Fixed a memory extraction exception when the model returned non-dict JSON for user facts.
- Fixed autonomy crashes when the bot attempted to post in a blocked channel.
- Fixed the math cog so it degrades gracefully when optional plotting dependencies are missing.
- Corrected
~randommemberpermission requirements and clarified/clearmemorybehavior in the Command Reference.