mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-19 22:23:50 -04:00
[GH-ISSUE #5436] Desktop: bundled Ollama model pull hangs silently — stale bundled + pullModel drops all non-progress responses #5092
Closed
opened 2026-06-05 14:51:57 -04:00 by yindo
·
2 comments
No Branch/Tag Specified
master
5846-bug-when-scrolling-up-scrolling-jumps
refactor-remove-workspace-pfp
5969-bug-stopgenerationbutton-disappears-on-the-first-prompt-that-initiates-an-agent-session
2235-bug-how-to-upload-a-folder-with-subfolders-with-files-to-anythingllm
5990-workspace-update-fails-with-unknown-argument-router_id-v1130v1150-intel-mac
opencomputer-examples
pg
feat/image-generation-translations
feat/image-generation
5924-bug-meeting-summary-fails-with-sincludes-is-not-a-function-when-default-llm-is-anthropic-claude
render
feat/uniform-modal-component
5883-bug-unescaped-content-in-json-strings-being-passed-to-document-generator-tools
5901-bug-api-update-embeddings-fails-prisma-argument-filename-is-missing-on-workspace_documentscreate-desktop-windows-v1141
hybrid-search
1981-translations
5752-bug-prompts-to-local-jan-endpoint-unresponsive
feat-disable-native-tool-calling-env-var
5676-bug-non-ollama-agent-providers-do-not-parse-and-present-reasoning-content
feat/markdown-web-scraping
5717-bug-apiv1documentupload-silently-drops-metadata-field-in-desktop-1130-arg-count-mismatch-nested-payload-key
fix/aibitat-context-overflow
5711-bug-erratic-deepseek-v4-flash-the-agent-model-failed-to-respond-400-the-reasoning_content
5631-feat-custom-api-request-timeouts-for-ai-providers
feat-reasoning-control
feat-agent-clarifying-questions-translations
5583-bug-lm-studio-provider-does-not-present-reasoning-output
5313-normalize-translations
feat/memory-translations
5305-lemonade-embedding-engine-swallows-errors-falsely-reports-documents-as-embedded
5060-bug-agent-interactions-agent-are-not-persisted-to-thread-history-via-api
pptx-subagent
feat-render-images-from-mcp-tool-results
stt-provider-expansion-openai-api-compatible
feat-file-search-agent-tool
feat-native-embedder-job-queue
5189-normalize-translations
feat-file-search-agent-tool-translations
i18n-eslint
5140-auto-migration
5112-bug-openrouter-failed-message-bug
3506-feat-parameters-for-openrouter-models
4992-feat-preserve-scroll-position
4973-bug-markdown-numbered-list-display-in-reasoning-pane
desktop
4938-bug-pending-chat-rerendering-ui-bug
quickstart-env
node-llama-cpp-in-container-cuda
node-llama-cpp-in-container
ollama-in-container
4817-feat-set-cooldown-per-mcp-server
4845-keyboard-shortcuts-to-navigate-in-chat
4844-feat-reorder-threads-by-latest-interaction
standardize-username-constraints-normalize-translations
4792-feat-refactor-workspacepfp-image
1382-embed-ip-improvements
1382-bug-embed-api-improvements
refactor-eslint-frontend
4687-feat-refactor-vector-db-providers
4615-feat-disable-apidocs-with-environment-variable
4559-feat-agent-web-search-enable-ordering-of-results
4599-bug-ollama-race-condition-bug
4572-bug-lmstudio-provided-llm-stopped-working-with-anything-llm-after-upgrading-to-190
4508-agent-youtube-transcript-analysis
4497-feat-workspace-names
frontend-eslint
ollama-lmstudio-auto-context-window
4431-validate-vector-database-connectioN
2019-slash-command-keyboard-selection
microsoft-foundry-provider
4431-validate-vector-database-connection
4325-sys-prompt-var-improvements
3209-feat-apiv1workspacestream-chat-sources-citations
4210-bug-voice-to-text-overwrite
4136-feat-jan-as-a-backend-server-option
4172-feat-openai-o3-support
1.8.3-rerelease
web-push-notifications-service
tasks
3955-feat-jinaai-embedder-provider-support
3921-feat-agent-skills-uiux-improvements
3901-bug-validfunccall-checks-optional-arguments
keyboard-dev
1787-custom-roles-and-permissions
add-jira-slack-data-connector
office-extension-wip
lightmode-dropdown-color-update
3586-bug-agent-flow-function-description-provided-by-user-is-not-seen-in-the-llm-query
3463-bug-agent-continues-to-run-if-request-failed-even-after-exit
3439-feat-call-variables-within-the-flow-api-block-url-field
3282-manager-view-models-workspace
3280-token-counting-server-side-truncation-improvements
3147-bug-embedded-chat-widget---not-considering-query-mode-option-always-working-in-chat-mode
2995-feat-disable-temperature-setting-for-deepseek-r1-deepseek-reasoner-model
2827-feat-perplexity-citations
2866-feat-finally-a-gemini-models-endpoint
2647-feat-hpp-header-for-a-c++-code-file-mime-addition
lancedb-revert
1656-feat-implement-tooltip-ui-designs
2011-feat-bump-perplexity-models
1873-feat-auto-add-and-watch-folder-for-document-uploads
1297-feat-gemini-agent-support
1759-bug-ui-bug-fixes
1686-feat-implement-winston-for-logging
1536-bug-toggling-on-users-can-delete-workspaces-does-not-take-effect
agent-ui-mobile-styles
1522-feat-chromadb-support
1595-bug-unable-to-get-live-web-search-and-browsing-agent-working-using-google-custom-search-engine-error-getaddrinfo-enotfound-http-errno-3008
1582-bug-lm-studio-does-not-allow-for-different-model-selection
1312-bug-usernames-should-not-be-case-sensitive-when-logging-in
1029-feat-hf-serverless-inference-api
1086-feat-implement-normalized-input-fields
knowledge-graph-support
644-bug-uploaded-file-name-does-not-match-the-displayed-file-name-after-the-upload
v1.15.0
v1.14.2
v1.14.1
v1.14.0
v1.13.0
v1.12.1
v1.12.0
v1.11.2
v1.11.1
v1.11.0
v1.10.0
v1.9.1
v1.9.0
v1.8.5
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.8
v1.7.6
v1.7.5
v1.7.4
v1.4.0
v1.3.0
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.0
Labels
Clear labels
Desktop
Docker
Integration Request
Integration Request
OS: Linux
OS: Mobile
OS: Windows
UI/UX
blocked
bug
bug
core-team-only
documentation
duplicate
embed-widget
enhancement
feature request
github_actions
good first issue
investigating
needs info / can't replicate
possible bug
pull-request
question
stage: specifications
wontfix
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Mintplex-Labs/anything-llm#5092
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @shdjfensjfsns on GitHub (Apr 14, 2026).
Original GitHub issue: https://github.com/Mintplex-Labs/anything-llm/issues/5436
TL;DR
On AnythingLLM Desktop, pulling any modern model via the built-in "AnythingLLM" (bundled Ollama) provider hangs forever with no progress, no error, no timeout. Two stacked bugs:
AnythingLLMOllama.pullModelsilently swallows the 412 (and every other non-progress response) because of four separate issues in the stream handler.Locally patched both. Pull now works end-to-end. Full diagnosis, repro, and proposed source fix below.
Environment
Reproduction
gemma4:26b)Expected: progress bar, download, "model ready".
Actual: UI sits on "Starting pull of model tag…" indefinitely. Backend log shows exactly one line and nothing after it:
No progress events. No error. Waiting 30+ minutes changes nothing.
Root cause
Bug 1 — bundled Ollama binary is too old
Current Ollama release is v0.20.7. The
0.13.0client inside the Desktop bundle predates modern model manifest formats. When asked to pull a current model, the registry returns:Bug 2 —
AnythingLLMOllama.pullModeldrops every non-progress responseFound in the minified Desktop bundle at
Contents/Resources/backend/server.js. De-minified, the currentimplementation is:
Four issues, any one of which is sufficient to produce the hang:
response.okcheck. HTTP 4xx/5xx bodies are consumed as if they were success streams. A 412 with a single JSON error line reaches the parse block, doesn't match the progress guard, the reader hitsdone=true, and the loop exits without calling any callback. UI is left on its initial "Starting pull…" state forever./api/pullstreams newline-delimited JSON. A raw decoded chunk commonly contains multiple objects or a split object, soJSON.parse(chunk)throws and the entire chunk (including any progress info inside it) is discarded. Compare withcreateModela few lines below in thesame file, which at least handles
Array.isArray(parsed)—pullModeldoes not.m?.status && m?.total && m?.completedskips early events like{"status":"pulling manifest"},{"status":"verifying sha256 digest"},{"status":"writing manifest"}. None of these havetotal/completed, so the UI sees nothing for the first several seconds even when parsing succeeds.m.errorhandling. Ollama surfaces errors as{"error": "..."}lines with nostatusfield. The current code has no branch for this — errors are silently dropped.Net effect: on any non-progress response (HTTP error, error line, or multi-object chunk),
pullModelruns to stream completion without firingonSuccess,onProgress, oronError. The frontend sits forever on the initial log line with no signal that anything went wrong.Proposed fix
(a) Bump bundled Ollama to current stable
Update whatever build script downloads the Ollama binary during Desktop packaging. Current stable is v0.20.7 (
https://github.com/ollama/ollama/releases/download/v0.20.7/ollama-darwin.tgzfor macOS). v0.20.7 layout is a drop-in replacement for v0.20.3 — samelibggml-*files, plus newmlx_metal_v3/andmlx_metal_v4/subdirectories that modernMetal-accelerated models require.
(b) Rewrite
pullModelto handle the Ollama stream correctlyKey differences vs. the current implementation:
response.okand surfaces HTTP errors viaonError.buffer, splits on\n, parses each complete line individually, preserves trailing partial line for next chunk — correct NDJSON handling.msg.status, so early lifecycle events appear in the UI.{"error": "..."}lines from Ollama explicitly.decoder.decode(value, { stream: true })to correctly handle multibyte characters split across chunks.Verification
I applied both fixes locally (replaced
Contents/Resources/ollama/with v0.20.7 and rewrotepullModelin the installed Desktop bundle). Same repro as above now produces live progress events and the pull completes successfully:Backend log after the patch shows the full lifecycle:
Happy to open a PR against the Desktop source repo if a maintainer can point me at it — the
AnythingLLMOllamaclass and the bundled-binary build step don't appear to be in this repo, so I'm filing here as an issue.Severity note
This isn't just about
gemma4:26b— it's any model the bundled Ollama can't fetch (stale client, typo'd tag, network failure, registry 5xx, etc.). All of them hit the same silent-hang path with zero error surfaced to the user. That's a pretty bad first-run experience for anyone trying the bundled provider.@timothycarambat commented on GitHub (Apr 14, 2026):
Yeah, because the latest is basically always broken and needs to be patched within a few days. We have the ability to pull tags but some newer models need the latest binary. However the models we suggest/recommend all work as designed
@shdjfensjfsns commented on GitHub (Apr 14, 2026):
understood, it would just be nice to be able to pull the latest models without having to run a separate ollama instance since anythingllm makes everything so easy within a single pane of glass :)