Skip to content

LIA

v1.20.13 Feature

This release adds 1 notable feature for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

ai ai-assistant apple llm claude conversational-ai
+13 more
docker emotional-ai google healthcare-ai human-in-the-loop langchain langgraph mcp multi-agent personal-assistant self-hosted skills vision-ai

Summary

AI summary

Fixed crashes and degradations when Gemini 3.x returns list‑based content blocks.

Full changelog

🔧 Fixed — Responses no longer fail or degrade with Gemini 3.x models

Gemini 3.x (gemini-3.5-flash, gemini-3-pro-preview) returns AIMessage.content as a list of content blocks ([{"type":"text","text":"…"}]) instead of a plain string like earlier Gemini and every other provider. Several code paths assumed str and broke:

  • SSE token streaming aborted with a ChatStreamChunk ValidationError — surfacing to the user as "Un problème est survenu lors de la génération de la réponse" — in both Pipeline and ReAct modes (they share the response-node token stream).
  • ReAct mode also crashed in format_conversation_history ('list' object has no attribute 'strip') whenever the conversation history held Gemini list-content messages — independent of the response model (mixed-provider setups were equally affected).
  • Silent degradations: skipped psyche / registry-filtering / HTML-widget post-processing, garbled voice (TTS) output, distorted token counts, dropped tokens after a HITL resumption, email-draft generation, and the structured_output JSON-mode fallback.

♻️ Changed — Canonical content-normalization primitive (DRY)

New coerce_content_to_text() (infrastructure/llm/message_text.py) normalizes any .content shape (str, Gemini 3.x list[dict] blocks, None) to plain text, mirroring LangChain BaseMessage.text. Applied at the shared chokepoints (SSE token formatter, format_conversation_history, structured_output fallback) so all callers are protected; four pre-existing bespoke list → text implementations consolidated onto it. Non-destructive — messages stored in graph state are never mutated.

Tests: new helper + regression suites reproducing both crashes; Ruff / Black / MyPy clean; 8316 unit tests green.
Docs: docs/technical/LLM_PROVIDER_CONSTRAINTS.md.
No DB migration, no new env var, no endpoint change.

🤖 Generated with Claude Code

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track LIA

Get notified when new releases ship.

Sign up free

Beta — feedback welcome: [email protected]