mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-21 01:25:28 -04:00
Open
opened 2026-06-05 15:21:37 -04:00 by yindo
·
0 comments
No Branch/Tag Specified
master
5846-bug-when-scrolling-up-scrolling-jumps
2235-translations
2235-bug-how-to-upload-a-folder-with-subfolders-with-files-to-anythingllm
refactor-remove-workspace-pfp
5969-bug-stopgenerationbutton-disappears-on-the-first-prompt-that-initiates-an-agent-session
5968-chore-update-default-system-prompt-for-better-tool-use
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
pull-request
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#5524
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?
📋 Pull Request Information
Original PR: https://github.com/Mintplex-Labs/anything-llm/pull/5677
Author: @angelplusultra
Created: 5/21/2026
Status: 🔄 Open
Base:
feat-reasoning-control← Head:5676-bug-non-ollama-agent-providers-do-not-parse-and-present-reasoning-content📝 Commits (8)
7369489parse reasoning_content in agent tool-calling helpersbcfad04hide action bar on reasoning-only agent messagesfa66306fix: route agent reasoning into the collapsible status bubble instead of stacking thought panes5ef0a44refactor ollama stream reasoning parsing and emission1853252fix: keep agent head pulsing through all status output, not just reasoning44211e0fix: keep agent head animation and untooled reasoning in sync with the live streamb713337simplify frontend04febb6fix untooled reasoning stream from vanishing after final response begins streaming📊 Changes
5 files changed (+250 additions, -43 deletions)
View changed files
📝
frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx(+18 -12)📝
frontend/src/utils/chat/agent.js(+51 -0)📝
server/utils/agents/aibitat/providers/helpers/tooled.js(+45 -1)📝
server/utils/agents/aibitat/providers/helpers/untooled.js(+88 -8)📝
server/utils/agents/aibitat/providers/ollama.js(+48 -22)📄 Description
Pull Request Type
Relevant Issues
resolves #5676
TLDR
This PR fixes a few things:
tooledStreamanduntooledstream pathways (any provider emittingreasoning_content), instead of only Ollama.StatusResponsebubble (same place tool activity shows) and is ephemeral — a reloaded conversation shows only tool status + the final answer. This replaces the old<think>thought-pane that stacked a separate pane per step.tooledoruntooledstream pathways, instead its own bespoke implementation using</think>tags. It has been refactored to match the behavior intooledanduntooledDescription
In agent mode, only
ollamasurfaced reasoning — and it did so as a standalone<think>thought pane that was persisted into the saved message. Every other provider routing through the shared OpenAI-compatible helpers (tooled.js/untooled.js) droppedreasoning_contententirely, so users got a long pause then only the final answer.This PR does two things:
reasoning_content).StatusResponsebubble (the same place tool activity shows), framed with"Thinking:", and is no longer persisted — a reloaded conversation shows only tool status + the final answer. This replaces the old<think>thought-pane approach, which stacked a separate pane per step in multi-step runs (per review feedback).This is a behavior change for Ollama too: its agent reasoning used to render as a thought pane and survive reload, and is now ephemeral.
Scope:
tooledStream,UnTooled.stream/streamingFunctionCall) plus Ollama.anthropic.js,openai.js,gemini.js,bedrock.js.<think>panes. The agent/regular asymmetry is noted for a separate discussion.Implementation notes:
${msgUUID}:reasoning) so the answer'stextResponseChunkdoesn't merge into the reasoning bubble and render thoughts as visible text.visibleResponseContent()helper so reasoning-only bubbles don't get a copy button that copies an empty string.Agent head animation (pulse) fix:
The animated agent head is meant to pulse while the agent is actively thinking or invoking a tool, and go static once the final answer is streaming or the agent is idle. It was instead deriving "is the agent working" from the chat tail — pulse while a session is open and the last message is a status bubble. In an interactive
@agentsession the socket stays open between turns, so any turn that ended on a status bubble (e.g. an untooled reasoning turn that finished on a thought with no trailing answer) left the head pulsing forever.It now drives the animation off the live stream events instead of the rendered tail:
statusResponse(thinking) ortoolCallInvocationevent starts the pulse.textResponseChunk/fullTextResponse) or the end-of-turn markers (usageMetrics/chatId, which the agent backend emits at the end of every turn even when the answer is empty) settle it to static, as does a session start/end.This is tracked with a small
useIsAgentThinking()hook (mirroringuseIsAgentSessionActive) fed byAGENT_THINKING_START/AGENT_THINKING_STOPevents dispatched from the websocket handler.Untooled reasoning persistence fix:
In tooled mode the reasoning bubble persists after the answer lands (collapsible), but in untooled mode the thoughts disappeared the moment the response finished.
streamingFunctionCallwas streaming both the reasoning and the tentative tool-call/answer preview under the samemsgUUID, then callingremoveStatusResponse(msgUUID)to clear the preview once the turn resolved — which wiped the thoughts along with it. Reasoning now streams under its own${msgUUID}:reasoningbubble so the cleanup only removes the preview, matchingtooled.jsand the existing second-stream path.Visuals (if applicable)
Additional Information
Developer Validations
yarn lintfrom the root of the repo & committed changes🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.