mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-21 01:25:28 -04:00
[GH-ISSUE #5520] [FEAT]: Auto mode always invokes agent mode regardless of prompt intent - should include lightweight classifier to determine tool necessity #5141
Open
opened 2026-06-05 14:52:15 -04:00 by yindo
·
5 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
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#5141
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 @elevatingcreativity on GitHub (Apr 24, 2026).
Original GitHub issue: https://github.com/Mintplex-Labs/anything-llm/issues/5520
What would you like to see?
Current Behavior (v1.12.0+)
When “Auto mode” is enabled on a workspace and the provider supports native tool calling, agent mode is always invoked regardless of the user’s actual intent or explicit instructions. The system does not:
The Problem: Model Separation Is Impossible
Our specific use case highlights why this design is problematic:
What We Want
What Actually Happens
What We Thought Auto Mode Would Do
We understood "Auto mode" to mean: "Intelligently decide when agent mode is needed based on the query intent."
What we discovered after investigating the code: "Auto mode" actually means "always on agent mode" for providers that support native tool calling.
This is highly confusing because:
Why This Is a Problem
Proposed Solution: Intent-Checking Layer Before Agent Invocation
Add a lightweight intent-checking step before committing to agent mode. A small, fast model (configurable by the user) would analyze each incoming prompt to determine if tools are actually needed. The classifier would consider explicit opt-out instructions in the message, respect workspace system prompt guidance, and include a failsafe to default to regular chat if the response is unclear. This would make "Auto mode" actually intelligent rather than simply always-on.
Proposed Implementation (We Will Submit PR)
I plan to implement this fix and submit a PR. The implementation will:
enableIntentClassifier,intentClassifierModel, andclassifierSensitivityWhy This Isn't Just a Bug Report
I understand from PR #5143 and Issue #4932 that this behavior was intentional design—specifically to prevent small models from over-calling tools. However, the implementation went too far in the opposite direction: it now always invokes agent mode for capable providers without any intent analysis.
A true "auto" mode should intelligently decide when tools are needed, not always use them. This feature request is for making the "Auto" mode actually live up to its name.
Environment
Additional Context
This feature would enable a powerful workflow pattern:
I believe this is a relatively straightforward fix that would significantly improve the user experience and make "Auto mode" actually work as users expect. I'll be working on a PR and would appreciate any feedback from the maintainers before implementation.
(PR report assisted by qwen3.5-122b-a10b in AnythingLLM)
@timothycarambat commented on GitHub (Apr 24, 2026):
To clarify our design philosophy here: Auto mode was intentionally built to solve the
#1UX complaint we’ve received: "Why do I have to manually type@agentevery time I want a tool used?" By defaulting to "Always-on Agent" for providers that support native tool-calling, we’ve aligned AnythingLLM with the industry-standard UX found in platforms like ChatGPT or Claude. Users generally expect the AI to "just work" with the tools available without manual invocation.The docs even say that is the intention: https://docs.anythingllm.com/features/chat-modes#available-chat-modes
Why we wont implementing a dynamic router:
We did consider an "intelligent decision" layer, but decided against it for a few reasons:
chatis just a click or two away to solve the issue totally.The Path Forward:
We have to have an opinion on the "intended" default experience for the majority of users, and right now, that is a seamless agent experience. However, I hear your regarding workspace setup.
Instead of changing the fundamental logic of Auto mode - which by far is better UX for most, we could support adding a UI Preference option that allows you to set the Default Workspace Mode. This way, if your workflow favors standard Chat, every new workspace you create will respect that preference, and you won’t have to manually toggle it every time which would be annoying? How is that?
In the meantime, switching your current workspaces to
Chatmode will resolve the aforementioned issues you're seeing.@elevatingcreativity commented on GitHub (Apr 24, 2026):
@timothycarambat I understand your considerations.
However, we are using our workspace with naive users.
Having to explicitly invoke "@agent" mode for them is very confusing.
So, we were elated when "auto" mode came in, thinking it would solve the problem.
Instead what it did is broke in three ways:
If nothing else, I beg and plead, if you are unable to consider another alternative, please please consider renaming "auto" mode to "agent only" mode or something. Because it is NOT auto. My team and my users (and myself) were all confused by that.
In terms of the "black box" argument - I get it. I get that you don't want it to be some black box of decision making. I was literally working on the prompt that would drive that decision making just a few minutes ago. It could be tricky.
But, what I did is a simple fix: if a user doesn't like the result (e.g. want agent mode) they can include @agent as a word anywhere in the prompt, and invoke agent mode. If they DO NOT want agent mode, they can include @noagent or @chat or @chatonly and it would route to chat.
I know there's not an ideal solution here, but I have been involved in software design for more decades than I'd like to admit - and there is almost always a solution if you are willing to work on it.
It is my humble opinion that this forced invocation of agent mode when the user sets it to "auto" is confusing and problematic.
It may work for personal users working with smaller models. But for more complex and demanding needs, this is not a workable solution.
I am really trying to make AnythingLLM work for our team and users so we can wean away from the other platforms. I'd happily contribute to the project in time and money - but there are just many glitches where assumptions like this one are made based on a single user in a simple situation, that actively impede usage in a more complex, team oriented environment.
I wish I had time to truly maintain my own codebase for this, but I don't. I have submitted multiple PR's that have been ignored to fix other issues.
Perhaps if you have the time, we could discuss it on a call, so you can understand how we are trying to use it and what kinds of issues like this one we are running into.
Thanks,
Morgan Giddings
@elevatingcreativity commented on GitHub (Apr 24, 2026):
One concrete example of why ‘just use Chat mode’ doesn’t work for us:
We store transcripts of calls. When a user later asks a specific question about a past decision, Chat mode’s default RAG retrieval frequently misses it - I’ve tested this repeatedly. Agent mode works because it iterates through the knowledge base until it finds the right answer. This isn’t a tool-use scenario - it’s deep knowledge retrieval. Chat mode simply fails here.
AnythingLLM’s RAG retrieval could use improvement (hybrid search, re-ranking, configurable retrieval depth) so that Chat mode can actually compete with Agent mode for knowledge retrieval tasks. Until then, we’re stuck needing Agent mode for basic knowledge management and accurate retrieval - which leads back to being able to control the switching, preferably automated.
At the end of the day, with the way this is designed currently, there is no such thing as a separate "agent", there's just one mode to its operation, so the whole intent behind "agent" versus "chat" mode becomes moot. If that's the case, what's the intended purpose of that?
I appreciate your time in considering this, and again, am happy to talk if you like.
@elevatingcreativity commented on GitHub (Apr 29, 2026):
Thank you @timothycarambat for taking my feedback and updating the name to agent mode.
@timothycarambat commented on GitHub (Apr 29, 2026):
@elevatingcreativity Working on addressing the other issue as changing the name doesnt solve all your valid points in the above. I am working out a plan to best address this for your (and presumably) others use cases.
Apologies for delay in response!