Skip to content

v1.2.1

Latest

Choose a tag to compare

@vvlrff vvlrff released this 21 Oct 20:18
· 2 commits to main since this release
0938ebd

Highlights

  • Mistral voice for ag2.live: offline and realtime speech-to-text (MistralTranscriber, MistralRealtimeTranscriber) and text-to-speech (MistralTTSConfig, MistralStreamingTTSConfig), on top of mistralai 3.2 with its new chat parameters.
  • OpenAIResponsesConfig accepts a reasoning option for effort and summaries.
  • New search toolkits: FirecrawlToolkit and KeenableSearchToolkit.
  • New compaction_verifier extension: measures whether a CompactStrategy makes the agent's next actions worse, not just how many tokens it saves.
  • TypeSafe can locate objects in images: ResponseSchema(BoundingBox) sends a Box question.
  • ACP and the network layer keep multimodal input parts instead of flattening them to text.
  • Fixes for Ollama, Gemini and xAI history, paginated file listings, and atomic SQLite and Redis knowledge appends.

Upgrade notes

  • Mistral uses httpx2. mistralai 3.x moved from httpx to httpx2, so MistralConfig.async_client is now an httpx2.AsyncClient and the extra requires mistralai>=3.2.0,<4. An httpx.AsyncClient still works at runtime but no longer type-checks, and httpx.HTTPError does not catch httpx2 errors.
  • ElevenLabs now requires elevenlabs>=2.73.0,<3.
  • Input parts are no longer joined into one string in ACP and the network layer. ACP sends each part as its own content block, based on what the agent advertises; before, every non-text part was dropped. ChannelAdapter.render_envelope and extract_turn_input can now return an Input or a sequence of them, so check custom channel adapters.
  • MCP tool calls are pinned to the configuration used for discovery, so a Variable(default_factory=...) can no longer route a call to a different server than the one that advertised the tool.
  • OpenAI Chat Completions rejects files uploaded to another provider with UnsupportedInputError, like the Responses, Anthropic and Gemini mappers.

What's Changed

  • chore(deps): bump j178/prek-action from 3.0.0 to 3.0.1 in the github-actions group by @dependabot[bot] in #3405
  • chore(deps): bump the uv group with 16 updates by @dependabot[bot] in #3406
  • fix(ollama): serialize multipart tool results as text by @ch-z-hc in #3374
  • feat(openai): add reasoning option to OpenAIResponsesConfig by @vvlrff in #3407
  • feat(mistral): bump mistralai to 3.2 and expose new chat parameters by @vvlrff in #3408
  • fix: keep input parts separate instead of joining them into a string by @vvlrff in #3413
  • fix(annotations): resolve falsy Variable and Inject values from context by @kabishou11 in #3414
  • fix(events): fall back to media type for unknown binary kinds in sizing by @kabishou11 in #3416
  • fix(eval): apply threshold keys to passthrough feedback by @BichengWang in #3423
  • fix(gemini): preserve function call IDs in history by @ch-z-hc in #3417
  • fix(shell): check paths after '=' against the ignore list by @kabishou11 in #3415
  • fix(xai): preserve conversation history order by @ch-z-hc in #3418
  • feat(extensions/search): add Firecrawl search and scrape toolkit by @JuampiHernandez in #3362
  • feat(live): add MistralTranscriber for offline speech-to-text by @vvlrff in #3419
  • feat(live): add Mistral TTS configs by @vvlrff in #3420
  • fix(typesafe): bump typesafe-sdk to 0.7.5 and handle unexpected answe… by @vvlrff in #3424
  • fix(elevenlabs): support elevenlabs 2.73 and expose Scribe/TTS options by @vvlrff in #3437
  • fix(files): enumerate all file listing pages by @ch-z-hc in #3429
  • fix(a2a): accept empty text, raw and url parts in part_to_input by @kabishou11 in #3440
  • fix(openai): reject files from another provider in Chat Completions messages by @kabishou11 in #3441
  • test(ag-ui): make the pre-question client call test deterministic by @vvlrff in #3444
  • fix(knowledge): remove empty parent directories after DiskKnowledgeStore.delete by @kabishou11 in #3439
  • fix(mcp): pin tool calls to the discovered configuration by @ch-z-hc in #3435
  • feat(typesafe): support Box questions with a BoundingBox response schema by @vvlrff in #3436
  • fix(events): honor explicit media types for local paths by @ch-z-hc in #3430
  • fix(xai): preserve file creation timestamps by @ch-z-hc in #3431
  • fix(gemini): honor the configured HTTP client for files by @ch-z-hc in #3427
  • fix: make SQLite knowledge append atomic across stores by @liangzhechen655 in #3388
  • fix(eval): accept os.PathLike in human_labels by @BichengWang in #3376
  • fix: notify knowledge watchers of both renamed paths by @liangzhechen655 in #3389
  • fix: normalize knowledge store lock paths by @liangzhechen655 in #3390
  • fix: make Redis knowledge appends atomic across connections by @liangzhechen655 in #3391
  • fix(response): accept Literal schemas by @ch-z-hc in #3432
  • test(config): cover ToolSearchTool rejection in unsupported-provider tests by @BichengWang in #3375
  • chore(deps): bump the github-actions group with 4 updates by @dependabot[bot] in #3453
  • test(xai): share one gRPC Files server helper across file tests by @vvlrff in #3448
  • feat(live): add Mistral realtime transcriber by @vvlrff in #3421
  • chore(deps): bump aiohttp from 3.14.3 to 3.14.4 by @dependabot[bot] in #3458
  • feat(extensions): add mi4afa probing failure attribution by @wuliang211 in #3277
  • feat(extensions/search): add Keenable search toolkit by @ilya-bogin-keenable in #3373
  • docs(extensions/search): link Keenable API docs for request and response fields by @vvlrff in #3463
  • feat(extensions): add compaction_verifier — measure whether a CompactStrategy makes the agent's next actions worse by @wuliang211 in #3306
  • fix(ollama): keep tool call IDs unique across turns by @ch-z-hc in #3426
  • chore: bump version to 1.2.1 by @vvlrff in #3467

New Contributors

Full Changelog: v1.2.0...v1.2.1