Skip to content

Release v0.17.3#831

Merged
itomek merged 1 commit intomainfrom
v0.17.3-release
Apr 20, 2026
Merged

Release v0.17.3#831
itomek merged 1 commit intomainfrom
v0.17.3-release

Conversation

@itomek
Copy link
Copy Markdown
Collaborator

@itomek itomek commented Apr 20, 2026

GAIA v0.17.3 Release Notes

GAIA v0.17.3 is an extensibility and resilience release. You can now package your own agents into a custom GAIA installer and seed them on first launch, point GAIA at alternative OpenAI-compatible inference servers from the C++ library (Ollama, for example), and start from three new reference agents (weather, RAG Q&A, HTML mockup) that execute against real Lemonade hardware in CI. It also hardens the RAG cache against an insecure-deserialization class of bug (CWE-502) — all users should upgrade.

Why upgrade:

  • Ship your own GAIA — Export and import agents between machines, follow a new guide to produce a custom installer that seeds your agents on first launch, and on Windows install everything in one step because the installer now includes the Lemonade Server MSI.
  • Work with alternative inference backends — The C++ library now preserves OpenAI-compatible /v1 base URLs instead of rewriting them to /api/v1, so servers that expose the standard /v1 path (Ollama, for example) work out of the box.
  • Start from a working example — Three new reference agents (weather via MCP, RAG document Q&A, HTML landing-page generator) with integration tests that actually execute against Lemonade on a Strix CI runner.
  • Safer RAG cache — Replaces pickle deserialization with JSON + HMAC-SHA256 (CWE-502). Unsigned or tampered caches are rejected and transparently rebuilt on the next query.
  • Better document handling — Encrypted or corrupted PDFs now produce distinct, actionable errors (EncryptedPDFError, CorruptedPDFError) instead of generic failures, and the RAG index is hardened for concurrent queries.

What's New

Custom Installers and Agent Portability

You can now package a custom GAIA installer that ships with your own agents pre-loaded, and move agents between machines with export/import (PR #795). On Windows, the official installer now includes the Lemonade Server MSI and runs it during install, so a fresh machine has the complete local-LLM stack after a single download (PR #781).

What you can do:

  • Export an agent from ~/.gaia/agents/ to a portable bundle with gaia agents export and import it on another machine with gaia agents import
  • Follow the new custom-installer playbook at docs/playbooks/custom-installer/index.mdx to distribute GAIA with your agents pre-loaded — useful for workshops, team deployments, and internal tooling
  • On Windows, the installer now includes Lemonade Server — no separate download for a complete first-run experience

Under the hood:

  • gaia agents export / gaia agents import CLI commands round-trip agents between machines as portable bundles
  • First-launch agent seeder (src/gaia/apps/webui/services/agent-seeder.cjs) copies <resourcesPath>/agents/<id>/ into ~/.gaia/agents/<id>/ the first time the app starts
  • Windows NSIS installer embeds lemonade-server-minimal.msi into $PLUGINSDIR and runs it via msiexec /i ... /qn /norestart during install (auto-cleaned on exit)

Broader Backend Compatibility in the C++ Library

The C++ library now preserves OpenAI-compatible /v1 base URLs (PR #773) instead of rewriting them to /api/v1. That means inference servers that expose the standard OpenAI /v1 path — for example, Ollama at http://localhost:11434/v1 — work out of the box without needing a special adapter.


Reference Agents and Real-Hardware Integration Tests

Three new example agents and a Strix-runner CI workflow land together (PR #340).

What you can do:

  • Copy examples/weather_agent.py, examples/rag_doc_agent.py, or examples/product_mockup_agent.py as a starting point for your own agents
  • Run the new integration tests locally against Lemonade to validate agents end-to-end, not just structurally

Under the hood:

  • tests/integration/test_example_agents.py executes agents and validates responses with a 5-minute-per-test timeout
  • .github/workflows/test_examples.yml runs on the self-hosted Strix runner (stx label) with Lemonade serving Qwen3-4B-Instruct-2507-GGUF
  • Docs homepage refreshed with a technical value prop ("Agent SDK for AMD Ryzen AI") and MCP / CUA added to the capabilities list

Smarter PDF Handling in RAG

Encrypted and corrupted PDFs now surface as distinct, actionable errors (EncryptedPDFError, CorruptedPDFError, EmptyPDFError) instead of generic failures or silent 0-chunk indexes (PR #784, closes #451). Encrypted PDFs are detected before extraction; corrupted PDFs are caught during extraction with a clear message. Combined with the indexing-failure surfacing in PR #723, you get a visible indexing-failed status the moment a document fails — and the RAG index itself is now thread-safe under concurrent queries (PR #746).


Security

RAG Cache Deserialization Replaced with JSON + HMAC

Fixes an insecure-deserialization issue in the RAG cache (CWE-502, PR #768). Previously, cached document indexes were serialized with Python pickle; if an attacker could write to ~/.gaia/ — via a shared drive, a sync conflict, or a malicious extension — loading that cache could execute arbitrary code.

v0.17.3 replaces pickle with signed JSON: caches are now serialized as JSON and authenticated with HMAC-SHA256 using a per-install key stored at ~/.gaia/cache/hmac.key. Unsigned or tampered caches are rejected and transparently rebuilt on the next query. Old .pkl caches from previous GAIA versions are ignored and re-indexed the next time you query a document.

You should upgrade if you share ~/.gaia/ across machines (Dropbox, iCloud, network home directories), run GAIA in a multi-user environment, or have ever imported RAG caches from another source.


Bug Fixes


Release & CI


Docs


Full Changelog

21 commits since v0.17.2:

Full Changelog: v0.17.2...v0.17.3


Release checklist

  • util/validate_release_notes.py docs/releases/v0.17.3.mdx --tag v0.17.3 passes
  • src/gaia/version.py0.17.3
  • src/gaia/apps/webui/package.json0.17.3
  • Navbar label in docs/docs.jsonv0.17.3 · Lemonade 10.0.0
  • All 21 PRs in the range (v0.17.2..HEAD) are represented in the notes
  • Review from @kovtcharov-amd addressed

@itomek itomek requested a review from kovtcharov-amd as a code owner April 20, 2026 14:32
@github-actions github-actions bot added the documentation Documentation changes label Apr 20, 2026
@itomek itomek self-assigned this Apr 20, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Summary

Clean, scope-tight release PR for v0.17.3: four files touched, exactly what a release bump requires — version in src/gaia/version.py, src/gaia/apps/webui/package.json, navbar label + new release page in docs/docs.json, and the new docs/releases/v0.17.3.mdx notes. All 21 PR references in the changelog resolve to real commits, the custom-installer playbook and example-agent files referenced in the notes exist, python util/validate_release_notes.py docs/releases/v0.17.3.mdx --tag v0.17.3 passes, and the Release Notes navigation is ordered newest-first (v0.17.3 placed directly after releases/index, before v0.17.2). No code paths changed.

Issues Found

None blocking. A couple of very minor observations:

🟢 Minor — external link to playbook uses an absolute site-relative path (docs/releases/v0.17.3.mdx:54)

The link reads [`docs/playbooks/custom-installer/index.mdx`](/playbooks/custom-installer). The anchor (/playbooks/custom-installer) will work on the Mintlify site; on GitHub, the displayed link text (a repo path) won't navigate to the .mdx file because the anchor is a site URL, not a repo URL. This is consistent with how v0.17.2.mdx handles similar links, so it's intentional / Mintlify-first — not a defect. Flagging only for awareness.

🟢 Minor — "closes #451" appears in two places (docs/releases/v0.17.3.mdx:87, :107)

"closes #451" is repeated in both the Smarter PDF Handling section and the Bug Fixes bullet for the same PR. Harmless but slightly redundant in user-facing notes.

Strengths

  • Scope discipline — exactly four files, all of which are the canonical artifacts the release checklist enumerates. No drive-by changes.
  • Thorough narrative — the notes lead with why upgrade, group features by theme, and call out the CWE-502 fix with a clear upgrade recommendation. The structure matches the house style of v0.17.2.mdx.
  • Changelog is verifiable — every one of the 21 commits listed in the "Full Changelog" section resolves (git cat-file -e ✓ on the spot-checked hashes) and every referenced artifact (examples/weather_agent.py, examples/rag_doc_agent.py, examples/product_mockup_agent.py, tests/integration/test_example_agents.py, .github/workflows/test_examples.yml, src/gaia/apps/webui/services/agent-seeder.cjs, docs/playbooks/custom-installer/index.mdx) exists in the tree.
  • Version consistencysrc/gaia/version.py (0.17.3), src/gaia/apps/webui/package.json (0.17.3), and the navbar label (v0.17.3 · Lemonade 10.0.0) all move together.

Verdict

Approve. Ready to merge as-is. The two minor nits above are stylistic and not worth blocking a release PR over.

@itomek itomek added this pull request to the merge queue Apr 20, 2026
Merged via the queue into main with commit 24e1e96 Apr 20, 2026
29 of 32 checks passed
@itomek itomek deleted the v0.17.3-release branch April 20, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Documentation changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Handle password-protected and corrupted PDFs gracefully

2 participants