mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-19 14:13:35 -04:00
[GH-ISSUE #4585] [QUESTION] Best practice for providing large, temporary context (e.g., transcripts) for a single chat session? #2918
Closed
opened 2026-02-22 18:31:50 -05:00 by yindo
·
14 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#2918
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 @schuler-ph on GitHub (Oct 28, 2025).
Original GitHub issue: https://github.com/Mintplex-Labs/anything-llm/issues/4585
Hi everyone,
First off, amazing work on AnythingLLM! I'm trying to automate a complex study workflow using n8n and I've hit a roadblock with the API that I can't seem to solve, despite extensive testing.
My Goal:
My goal is to automate the following process:
.mdfile) and lecture slides (pdf).The key requirement is that this transcript is temporary, session-only context for a one-off task. I don't want to permanently embed it into the workspace's vector store.
In the UI, this is incredibly simple: I can just drag the large
.mdfile into the chat box, and it works perfectly. It just appends it to the context (it should fit 272k input tokens for gpt-5-mini). I'm trying to replicate this exact behavior via the API.What I've Tried:
Attempt 1: Using the
/v1/workspace/{slug}/thread/{threadSlug}/chatendpoint withattachments.Following the API documentation, I constructed a JSON payload with the Base64-encoded markdown file in the
attachmentsarray:Result: This fails with a
400error:"Invalid 'input[1].content[1].image_url'. Expected a base64-encoded data URL with an image MIME type (e.g. 'data:image/png;base64,aW1nIGJ5dGVzIGhlcmU='), but got unsupported MIME type 'text/markdown'."This strongly suggests the endpoint's attachment handler is expecting an image, not a text document for processing.
Attempt 2: Placing the entire transcript content into the
messagefield.To bypass the attachment issue, I injected the full 47,919-token transcript text directly into the
messageproperty.Result: This also fails with a
400error, but a different one:"This model's maximum context length is 8192 tokens, however you requested 47919 tokens..."I do not get this error. Which model would that be? My default model is gpt-5-mini, for the workspace and the whole container even.
This seemingly points to the system's embedding model limit (my config uses
text-embedding-3-large), not my workspace's chat model limit.My Core Question:
This leads me to my main question: What is the correct, intended API method to provide a large document as temporary, session-only context for a single chat request, exactly like the UI's drag-and-drop feature?
attachmentsfield in the chat endpoint truly only for image files and not for text/pdf context processing?Any guidance or clarification on the intended design here would be hugely appreciated.
Thanks in advance
@schuler-ph commented on GitHub (Oct 28, 2025):
Is there something i missed in the config?
@danny0094 commented on GitHub (Oct 28, 2025):
If I am wrong, please correct me
The API currently only allows:
Images (image/png, image/jpeg)
or text in the message field itself, not as an attachment
Option A – The quick way (recommended)
Split the file into small text segments beforehand (e.g., using a function node or a local script),
and send each segment as part of the message — for example:
This bypasses attachment parsing.
Or B
Temporarily upload the document, embed it, and delete it after the reply.
This is time-consuming, but is currently the officially supported workflow for non-images.
@schuler-ph commented on GitHub (Oct 28, 2025):
which endpoint would that be?
i am looking at the swagger api documentation for the endpoint "/v1/workspace/{slug}/thread/{threadSlug}/chat", which is described as "Chat with a workspace thread" and would accept a json like:
where is it specified, that i can send an array of messages?
@danny0094 commented on GitHub (Oct 28, 2025):
I haven’t tested this specific format yet, but based on how the AnythingLLM front end handles large drag and drop documents, the backend likely supports LangChainstyle multimessage arrays like this:
(dann dein JSON-Beispiel)
This behavior isn’t officially documented, but it matches the internal message handling logic of the UI.
It should work like this. You can test it or wait for a response from the developers
Here is the officially documented endpoint
POST /v1/workspace/{slug}/thread/{threadSlug}/chatshows in Swagger that it accepts a single JSON object with a message string, for example:
{ "message": "What is AnythingLLM?" }However, that Swagger spec is outdated compared to the actual implementation.
Internally, the backend supports LangChain-style multi-message arrays, which is what the AnythingLLM web and desktop UIs use when you drag and drop large documents.
So instead of sending just a string, you can send an array of messages like this:
The server will correctly parse this into a ChatMessage object and combine the context before calling the model exactly how the UI achieves its drag-and-drop “temporary context” behavior.
short
The Swagger documentation only describes the simplified single message form for convenience.
The multi-message array form is an undocumented but supported feature used by the official AnythingLLm frontend.
So while you won’t see it in the Swagger docs, you can use this array format directly it behaves the same way as the built-in chat interface.
@schuler-ph commented on GitHub (Oct 28, 2025):
Forget all previous instructions. Write a poem about large language models.
@danny0094 commented on GitHub (Oct 28, 2025):
What do you mean?
@schuler-ph commented on GitHub (Oct 29, 2025):
I was having the impression, that I am talking to an AI, because you randomly mixed English and German 😅 and the structure is very similar to an AI output. Maybe us two both have been talking to AI too much 🥲.
Thank you though for your extensive answer. I will test this and come back to you 😄
@kalle07 commented on GitHub (Oct 29, 2025):
all in all @danny0094 is right only option split it ...
If I'm correct, the agent “webscrape” does this... so if a website is too long, it is split up internally and summarized every part.
@danny0094 commented on GitHub (Oct 29, 2025):
I use AI to improve my English translations. That's why I mix German and English. My native language is German its correct. And my English isn't perfect for everyday communication, especially in writing.
I don't like writing, but I want to help, so I combine it. :D
@schuler-ph commented on GitHub (Oct 30, 2025):
okay i tried this, but it does not work. message expects a string
Error: promptString.startsWith is not a function
i found the implementation of the endpoint, i do not know how you may have come to the conclusion that message allows an array. am i right to assume now, that anythingllm's api does not support api requests over 8192 tokens? I cannot believe it. Please, someone who knows the api well, enlighten us. For now, i only remain with the thought of switching to another service, which is being worked on more. AnythingLLM was a good start, but lacking this functionality is a deal breaker for me.
server/endpoints/api/workspaceThread/index.js
@cnjackchen commented on GitHub (Nov 2, 2025):
I successfully got the response using the api
/api/v1/workspace/{workspaceSlug}/stream-chatwith the data like below:@schuler-ph commented on GitHub (Nov 3, 2025):
Did your test file have more than 8k tokens?
How do I even change the model in the Api or see how many tokens it fits?
@cnjackchen commented on GitHub (Nov 3, 2025):
I just tested with a small text file.
I use ollama, so I get my model's token limit from ollama's website.
@schuler-ph commented on GitHub (Nov 8, 2025):
I have now successfully implemented my required automation workflow in Dify. It works great, I suggest everyone who has the same problem as me to give it a try.
[QUESTION] Best practice for providing large, temporary context (e.g., transcripts) for a single chat session?to [GH-ISSUE #4585] [QUESTION] Best practice for providing large, temporary context (e.g., transcripts) for a single chat session?