Yesterday's major update might affect your current programs

As Info, after the update yesterday my LLM started almost every combo with"truncated"

Had to use claude to debug, but yesterday's update was the cause clashing with my custom app lab program

Hi @HKSpowered. I'm sorry to hear about the problem caused by the update.

If you will share more details about your project, the problem, and the solution you found, I'll be happy to investigate.

If I am able to reproduce the fault, then I can submit a formal bug report to the Arduino developers.

@ptillisch

i will attached a copy of my program, with IP's removed and personal details, here is what happened, and how it got working again:

VENTUNO Q: offline LLM chat + vision app, and what broke after the Oct 22 update

THE ATTACHED APP
LLM and Vision (v2.93): an App Lab app for the VENTUNO Q.

  • Offline chat on the NPU (Qwen3-4B), with Quick / Balanced / Thorough
    effort levels, custom instructions and an "About you" profile
  • Live camera object detection on its own port (4912), USB or network
    (RTSP) cameras, focus and exposure controls, alerts, snapshots
  • Dashboard of other devices on the network, Programs tab, Board Control
    Import the zip in App Lab and run it. Chat is on port 7000.
    Optional extras are described in README.md inside the zip.

WHAT BROKE AFTER THE UPDATE (Oct 22, 2026, 23:01 board time)
The updater upgraded:
arduino-app-cli 0.13.0 -> 0.14.0
arduino-app-lab 0.10 -> 0.11, arduino-ventunoq 0.3 -> 0.4
assets 0.12.0 -> 0.13.1
python-apps-base 0.12.0 -> 0.13.1, ei-qnn-models-runner 0.12.1 -> 0.13.0
genai-llm-vlm-service 1.3.0 -> 1.5.0

Problem A: chat dies after a few long answers

  • Replies become the literal text "[truncated]", or HTTP 500
    "Service temporarily unavailable". After that every request fails
    (HTTP 400) until the genie container is restarted.
  • Reproduces with Arduino's own Edge AI Assistant example prompt (failed on
    the 5th question), and even with no conversation memory when going
    through the brick. Tiny replies never trigger it.
  • Rough threshold: once a request plus its reply passes ~7,000 characters,
    the next request fails (an estimate, not an exact number).
  • Did not help: DELETE /v1/chat/completions/{id}, fresh connections,
    folding history into one message, retrying.

Problem B: system-prompt changes are ignored

  • If a new system prompt STARTS the same way as the previous one, the
    service keeps using the old one. Settings added at the END of a long
    prompt were never picked up: Quick and Thorough gave identical answers
    and "Answer only in French" got English.
  • Seen with the 1.3.0 service on the 0.13.1 brick. I have not tested 1.5.0
    on its own, so I can't say which component causes it.

Smaller things noticed

  • "arduino-app-cli app start/stop" rejects the IDs from "app list"
    ("invalid app path") but accepts the app's folder path.
  • After an app folder was renamed, the CLI later started a leftover LLM
    container of the old app. It held port 9001 and left the other app's LLM
    container with no network.

HOW I PATCHED IT (workaround, not a real fix)

  • Pinned the LLM service back to 1.3.0: tools/pin-llm-service.sh rewrites
    assets//services/arduino/genie/service_compose.yaml with the
    0.12.0 definition, keeps a backup, and restarts the app. No sudo needed.
    "--undo" restores Arduino's file.
  • Verified on the board: 1.3.0 passed every test that broke 1.5.0,
    including 8 long answers in a row through the brick, and 15 of 15 long
    answers through the finished app at all three effort levels.
  • Put the settings that change (effort, instructions, profile) at the START
    of the system prompt. After that Quick gave 23 words, Thorough 299, and
    the French instruction worked.
  • A later Arduino update that ships new assets will probably undo the pin.
    The app shows a warning banner when the LLM service isn't 1.3.0.

USEFUL TO KNOW

  • The model's real context window is 4,096 tokens (prompt + history +
    reply together).
  • Reply length limits are hard stops: the 4B model often writes more than
    it's asked to, so set the limit well above what the prompt requests.
  • Check which LLM service you're running:
    docker ps --format '{{.Names}} {{.Image}}' | grep genie

Tested on a VENTUNO Q with qwen3_4b_instruct_2507 (genie), October 2026.

llm and vision multi program.zip (628.3 KB)