Skip to content

chore(deps): bump Lemonade Server to v11.0.0#2130

Merged
itomek merged 3 commits into
mainfrom
deps/lemonade-11.0.0
Jul 17, 2026
Merged

chore(deps): bump Lemonade Server to v11.0.0#2130
itomek merged 3 commits into
mainfrom
deps/lemonade-11.0.0

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Bumps the pinned Lemonade Server 10.10.0 → 11.0.0 (LEMONADE_VERSION in src/gaia/version.py) — the version gaia init and the bundled desktop installer provision. Note this does not move existing installs: a machine already on 10.x clears every profile minimum, so gaia init reports 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 issues on every run — while gaia init simultaneously 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 across INIT_PROFILES and 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.py change 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:

Agent UI chatting against Lemonade 11.0.0 on Ryzen AI, returning the planted passphrase

Backing trace: chat: Invoking agent chat for session 01ae71ec, model=Gemma-4-E4B-it-GGUF took=3.563s, with /api/v1/health reporting version: 11.0.0 and the model loaded device: gpu | ctx: 65536 (the min_ctx_size the 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-sdk 9.1.4 from PyPI, a channel GAIA doesn't ship on Linux — #2134) and no email job runs on a version.py change (fixed here).

What was exercised Result
gaia init fresh install → PPA ✓ Installed Lemonade v11.0.0 / ✓ Verified: lemonade-server v11.0.0
Server actually running v11 /api/v1/health"version": "11.0.0"
Real GPU inference (not CPU fallback) Vulkan0 : Radeon 8060S Graphics (RADV GFX1151), both models device: gpu
Custom embedder registration {'model_name': 'user.embeddinggemma-300m-GGUF', 'status': 'success'}
Chat (gaia llm) returned the planted passphrase verbatim in 1.19s
Email triage vs live v11 HTTP 200, "category":"URGENT", 2169 tokens @ 54.3 tok/s
Email batch triage PROMOTIONAL→archive, NEEDS_RESPONSE→reply, "error":null
Version gate ≥ floor (10.10.0) True + quiet "consider updating" — no "mismatch detected"
Version gate < floor (9.5.0, 10.1.0) False + loud "too old, minimum 10.2.0"
Version gate newer (12.0.0) True — no upper bound exists
gaia init incl. Agent UI build exit 0, ✓ Agent UI frontend ready (Node 22)
Agent UI live chat vs v11 planted passphrase returned verbatim — screenshot above
Unit + lint 43 passed email suite; ALL QUALITY CHECKS PASSED
CI 67 pass / 0 fail, incl. 3 email checks that never ran on a pin bump before

The 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)
Step 1/6: Lemonade Server not found
   Adding Lemonade v11.0.0 PPA and installing...
   ✓ Installed Lemonade v11.0.0
   ✓ Verified: lemonade-server v11.0.0
   Installed user.embeddinggemma-300m-GGUF successfully: response={'model_name': 'user.embeddinggemma-300m-GGUF', 'status': 'success'}

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
PIN 11.0.0 FLOOR 10.2.0
--- simulating installed Lemonade 10.10.0 (pin=11.0.0) ---
⚠️  Lemonade Server version: v10.10.0 (expected v11.0.0)
   Consider updating: https://lemonade-server.ai
returned: True

--- simulating installed Lemonade 9.5.0 (pin=11.0.0) ---
⚠️  Lemonade Server version too old!
   Installed version: 9.5.0
   Minimum supported: 10.2.0
returned: False

12.0.0 → True (no upper bound). Zero occurrences of the old mismatch detected / may cause compatibility issues text.

Raw: agents against live v11 — chat + email triage
$ gaia llm "Reply with exactly this passphrase and nothing else: amber-lynx-41"
🤖 gaia: amber-lynx-41

$ curl -s -X POST localhost:8672/v1/email/triage -d @payload.json   # HTTP 200
{"schema_version":"2.4","request_kind":"single","result":{"category":"URGENT","is_spam":false,
 "summary":"Immediate action is required to make a failover decision as the primary database
  cluster is down, causing all customer checkouts to fail during a production outage.",
 "suggested_action":"reply"}}

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 reports state: installable under v11 (unchanged from v10; it remains opt-in).

Test plan

  • CI green (lint + unit tests)
  • gaia init installs Lemonade 11.0.0 on a machine with none (Linux/PPA)
  • Email agent triage returns a coherent result against a live v11 server
  • Users on Lemonade 10.x no longer get a contradictory "mismatch" warning; below-floor still warns loudly
  • Docs version strings synced (util/check_doc_versions.py green)
  • Email agent CI now triggers on a Lemonade pin bump (it did not before) and asserts the pin clears the agent's floor

@github-actions
github-actions Bot requested a review from kovtcharov-amd as a code owner July 16, 2026 17:52
@github-actions github-actions Bot added dependencies Dependency updates lemonade 🍋 labels Jul 16, 2026
@github-actions
github-actions Bot requested a review from itomek-amd July 16, 2026 17:52
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.
@github-actions github-actions Bot added documentation Documentation changes llm LLM backend changes tests Test changes performance Performance-critical changes cpp labels Jul 16, 2026
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
itomek added this pull request to the merge queue Jul 17, 2026
Merged via the queue into main with commit c9566b1 Jul 17, 2026
85 of 87 checks passed
@itomek
itomek deleted the deps/lemonade-11.0.0 branch July 17, 2026 00:00
@itomek itomek mentioned this pull request Jul 22, 2026
9 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cpp dependencies Dependency updates devops DevOps/infrastructure changes documentation Documentation changes lemonade 🍋 llm LLM backend changes performance Performance-critical changes tests Test changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants