chore(deps): bump Lemonade Server to v11.0.0#2130
Merged
Merged
Conversation
Moving the pin 10.10.0 -> 11.0.0 is the first time it crosses a major boundary, which activates a branch that had never fired. The client's compatibility check compared MAJOR versions for equality, so every user still on Lemonade 10.x would now see "version mismatch detected! ... this may cause compatibility issues. Please install Lemonade Server 11.0.0" on every initialize() -- while gaia init simultaneously told them their version is sufficient (profile minimums are 10.2.0/10.9.0, which 10.10.0 clears). Two gates, opposite answers, and the alarming one is the wrong one: 10.10.0 works. GAIA's real compatibility contract is a floor, not major equality -- nothing anywhere declares an upper bound on the Lemonade version. Make that contract explicit as LEMONADE_MIN_VERSION (10.2.0, the lowest already asserted across INIT_PROFILES and the email agent's own minimum) and compare against it: below the floor warns loudly and names the minimum; at or above the floor but off the pin keeps the existing low-key "consider updating" note; an exact match stays silent. No upper bound, so a newer server is never flagged. Adds a regression test asserting the two gates agree: every profile minimum must be accepted by the client's check.
Nothing connected the version GAIA installs (version.LEMONADE_VERSION) to the version the email agent demands (gaia_agent_email.version.MIN_LEMONADE_VERSION). The two numbers never met in code, so the email suite went green against any pin -- including one that would make /v1/email/init report the server incompatible. A pin bump was exactly the change that suite could not catch, and the path filter did not fire on it either: it covered agents/base, connectors and eval, but not version.py or the Lemonade client the agent actually talks through. Assert the invariant directly, and add the two paths so a future bump runs it. Verified load-bearing: faking the pin to 9.0.0 fails with "gaia init installs Lemonade 9.0.0, but triage requires >= 10.2.0".
itomek-amd
approved these changes
Jul 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps the pinned Lemonade Server 10.10.0 → 11.0.0 (
LEMONADE_VERSIONinsrc/gaia/version.py) — the versiongaia initand the bundled desktop installer provision. Note this does not move existing installs: a machine already on 10.x clears every profile minimum, sogaia initreports it sufficient and leaves it alone. The change reaches fresh installs, the bundled installer, and CI.Crossing the major boundary also lights up a latent bug, fixed here rather than shipped: the client compared Lemonade's major version for equality, so everyone still on 10.x would have started seeing
version mismatch detected! … may cause compatibility issueson every run — whilegaia initsimultaneously told them their version was fine. Two gates, opposite answers, and the alarming one was wrong. The client now checks a floor (LEMONADE_MIN_VERSION = 10.2.0, the lowest already asserted acrossINIT_PROFILESand the email agent), so both gates agree and only a genuinely-too-old server warns. GAIA declares minimums everywhere and a ceiling nowhere, so a newer server is never flagged.Third, the guard that should have made this reviewable in the first place: nothing connected the pin GAIA installs to the floor the email agent demands, so the email suite went green against any pin — and its path filter didn't fire on a
version.pychange anyway. Both are fixed, so a future bump runs the email tests and fails loudly if the pin ever drops below the floor.Evidence
The Agent UI chatting through the full stack against a live Lemonade 11.0.0 on AMD hardware — browser → Agent UI →
gaia.ui.server→ the version-gate code this PR changes → Lemonade 11 → Gemma-4-E4B on GPU. The reply is a planted passphrase the model could not otherwise produce:Backing trace:
chat: Invoking agent chat for session 01ae71ec, model=Gemma-4-E4B-it-GGUF took=3.563s, with/api/v1/healthreportingversion: 11.0.0and the model loadeddevice: gpu | ctx: 65536(themin_ctx_sizethe client pins — honored on v11).Validated end-to-end on Ryzen AI Max+ 395 (Strix Halo, Ubuntu 24.04) against a real Lemonade 11.0.0 — because CI can't answer this on Linux (it installs
lemonade-sdk9.1.4 from PyPI, a channel GAIA doesn't ship on Linux — #2134) and no email job runs on aversion.pychange (fixed here).gaia initfresh install → PPA✓ Installed Lemonade v11.0.0/✓ Verified: lemonade-server v11.0.0/api/v1/health→"version": "11.0.0"Vulkan0 : Radeon 8060S Graphics (RADV GFX1151), both modelsdevice: gpu{'model_name': 'user.embeddinggemma-300m-GGUF', 'status': 'success'}gaia llm)"category":"URGENT", 2169 tokens @ 54.3 tok/sPROMOTIONAL→archive,NEEDS_RESPONSE→reply,"error":nullTrue+ quiet "consider updating" — no "mismatch detected"False+ loud "too old, minimum 10.2.0"True— no upper bound existsgaia initincl. Agent UI build✓ Agent UI frontend ready(Node 22)43 passedemail suite;ALL QUALITY CHECKS PASSEDThe token counts matter: they prove real local inference against v11, not a cached or canned response.
Raw: fresh install → v11 via the PPA (the only path this pin changes)
Server reports
"version": "11.0.0"; inference on GPU (Vulkan0 : Radeon 8060S Graphics (RADV GFX1151)), not CPU fallback.Raw: version gate, both directions, against the live v11 server
12.0.0 → True(no upper bound). Zero occurrences of the oldmismatch detected/may cause compatibility issuestext.Raw: agents against live v11 — chat + email triage
Tracked separately: Linux CI validates Lemonade from PyPI rather than the shipped PPA build (#2134); no PR-time check runs real Lemonade at the pinned version (#2135). Neither blocks this bump — both were confirmed by hand on Ryzen AI hardware for v11.
Not covered: v11 makes re-registering a
user.*model under an existing name with a different checkpoint an error instead of a silent overwrite. That path isn't exercised — GAIA skips re-registration once the model is downloaded, and the embedder's name/checkpoint pair has never diverged. It would only bite if that checkpoint changes under the same name. The NPU/FLM backend reportsstate: installableunder v11 (unchanged from v10; it remains opt-in).Test plan
gaia initinstalls Lemonade 11.0.0 on a machine with none (Linux/PPA)util/check_doc_versions.pygreen)