Skip to content

v0.92.0

Choose a tag to compare

@sboily sboily released this 28 Sep 03:13
· 2536 commits to main since this release

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