Repository navigation
v0.92.0
What's Changed
- docs(changelog): promote Unreleased to 0.92.0
- fix(voice): a pipeline speaker result counts for the audio since the stage's previous one, not one frame (RMK-254)
- feat(examples): voice_pipeline_speakers logs each enrollment's level and how alike the voices score (RMK-254)
- fix(vision): a withheld vision answer raises refusal, and a Gemini description keeps its parts whole (RMK-250)
- fix(channels): a constrained AIChannel turn reaches the room only once its answer is checked (RMK-249)
- feat(vision): a vision provider answers a frame in a JSON Schema, and click_element locates through it (RMK-250)
- feat(channels): an AIChannel turn answers in a JSON Schema set per channel, per turn or per room (RMK-249)
- fix(voice): speech held during playback keeps its pipeline speaker when replayed, per review (RMK-254)
- feat(voice): VoiceChannel names a transcript's speaker from the pipeline's diarization stage with pipeline_speakers (RMK-254)
- feat(stt): Gemini speaker turns join the shared SpeakerSegment contract with speaker_segments (RMK-253)
- docs(providers): MetaConfig no longer lists a temperature field, and the test holds it (RMK-243)
- docs(providers): no config docstring or page lists a temperature field any more, per review (RMK-243)
- refactor(orchestration): export ResultTool, type its missing-result builder, and log a verdict whose approval is not a boolean, per review (RMK-246)
- fix(orchestration): a delegation captures its result in its own room, so two at once on one agent never cross (RMK-246)
- feat(ai): a response schema shares a turn with tools where the provider can combine them, checked on the final answer (RMK-248)
- feat(ai): a constrained answer streams, checked before its done event (RMK-247)
- feat(orchestration): the supervisor hands its verdict back through a forced submit_verdict tool, not scraped JSON (RMK-246)
- refactor(providers): an AI provider config no longer carries a temperature nothing read (RMK-243)
- feat(ai): MetaAIProvider converses on Meta Muse Spark, whose reasoning cannot be turned off (RMK-252)
- feat(image): MetaImageProvider draws and edits on Meta Muse Image, its web and shell tools off by default (RMK-251)
- feat(stt): Deepgram diarize_model gives speaker segments, one per run of a voice's words (RMK-245)
- fix(examples): the voice examples read VOICE_LANGUAGE, not the system's gettext LANGUAGE (RMK-238)
- feat(voice): TTS providers list their voices and voice a dialogue, and custom voices are made through a library with consent (RMK-240, RMK-241, RMK-242)
- fix(voice): the reply never holds back the next final, and a kept stream stays level with the clock, per review (RMK-237)
- feat(voice): a continuous VoiceChannel carries a diarizing STT's speakers to the room (RMK-237)
- refactor(anthropic): name the thinking-or-temperature step and hold the no-httpx install, per review (RMK-236)
- fix(anthropic): the provider runs on the anthropic 1.x SDK, its timeout httpx2 and its temperature in extra_body (RMK-236)
- fix(ai): a constrained answer is checked against its schema, OpenRouter routes only to upstreams that honour it, per review (RMK-234)
- docs(examples): triage a support message into a JSON shape, on the mock or a real provider (RMK-234)
- feat(ai): an AI provider answers in the JSON Schema the context declares, or says why it cannot (RMK-234)
- feat(voice): an STT result says who spoke, and Meta Muse labels its turns (RMK-233)
- fix(vision): Gemini vision drops the zero thinking budget for a model that refuses it (RMK-232)
- feat(voice): ScenarioVoiceBackend mutes the caller while the bot speaks, as a local mic does (RMK-232)
- fix(gemini): thinking_budget=0 turns reasoning off, and the SDK's automatic function calling is off (RMK-232)
- docs(examples): speak into the microphone and watch Meta Muse end each turn itself (RMK-231)
- feat(stt): MetaSTTProvider transcribes on Meta Muse Voice Transcribe, streamed and over REST (RMK-231)
- fix(stt): a Gemini Live transcription stream of silence ends, so a voice channel keeps listening after its first answer (RMK-230)
- docs(examples): a voice assistant that is Gemini end to end and acts its lines (RMK-229)
- feat(stt): GeminiSTTProvider transcribes on the dedicated gemini-3.5-transcribe recogniser (RMK-228)
- refactor(tts): the Gemini WAV-or-PCM decision is its own method, synthesize() keeps one call (RMK-227)
- feat(gemini): every Gemini default is a 3.8 model where Google serves one (RMK-227)
- fix(tts): Gemini 3.8 speaks the transcript, not the prompt, and its WAV answer plays clean (RMK-227)
- docs(acp): the scope key is absent before 0.91.1, not 0.92.0 (RMK-225)
- Begin 0.92.0.dev0 development
Full Changelog: v0.91.1...v0.92.0