If your documents live in AnythingLLM but you want the conversation model to run through an OpenAI-compatible endpoint, the main thing to get right is the Base URL.
AnythingLLM is a practical tool for document Q&A because it wraps documents, users, vector storage, and agent tools into isolated Workspaces. For personal setups, it can run as a desktop app; for team setups, it can be deployed with Docker. In both cases, the useful pattern is the same: keep document indexing local, then point the chat model at a provider that speaks the OpenAI-compatible API shape.
This guide shows how to configure Ace Data Cloud as the conversational model provider in AnythingLLM while keeping the default local AnythingLLM Embedder for document vectorization.
What you are wiring together
The source workflow has two independent parts:
- LLM Preference: the chat/completion model used to answer questions.
- Embedding Preference: the model or local embedder used to vectorize uploaded documents.
For the LLM side, AnythingLLM provides OpenAI (Generic). That is the provider you want because it supports a custom Base URL. The regular OpenAI option is fixed to api.openai.com and is not the right place to enter a custom endpoint.
For the embedding side, the recommended default is AnythingLLM Embedder. It runs locally, requires no API key, and stores the original text plus vectors in the local LanceDB. The network is used only when the conversation model is called.
The important values from the Ace Data Cloud document are:
| Field | Value |
|---|---|
| Base URL | https://api.acedata.cloud/v1 |
| Alternative Base URL | https://api.acedata.cloud/openai |
| Chat request path | https://api.acedata.cloud/v1/chat/completions |
| Model list path | GET https://api.acedata.cloud/v1/models |
| Auth header for direct API test | Authorization: Bearer {token} |
Configure the conversational model
Open AnythingLLM and go to:
Settings → LLM Preference
Choose:
Provider: OpenAI (Generic)
Then fill in:
Base URL: https://api.acedata.cloud/v1
API Key: your Ace Data Cloud token
Selected Model: use the current model ID loaded from /models, or enter one manually
Model context window: set it according to the selected model
The /v1 suffix matters. AnythingLLM builds the final chat completions URL from the Base URL. If the Base URL is correct, the actual request becomes:
https://api.acedata.cloud/v1/chat/completions
The documentation also notes that this Base URL works:
https://api.acedata.cloud/openai
which maps to:
https://api.acedata.cloud/openai/chat/completions
But these two common variants are wrong:
https://api.acedata.cloud/openai/v1
https://api.acedata.cloud
The first points to a non-existent /v1 under /openai; the second omits /v1, causing AnythingLLM to call /chat/completions at the wrong root path.
Keep embeddings local for a simple RAG setup
Next, go to:
Settings → Embedding Preference
Keep the provider as:
AnythingLLM Embedder
This is the built-in local embedder. It works without adding another key, and AnythingLLM stores the vectors in local LanceDB. That separation is useful: uploaded PDF, Word, or Markdown files are split into paragraphs locally; only the retrieved excerpts plus your question are sent to the conversational model when you ask something.
If you want a custom endpoint for embeddings later, the document mentions that Generic OpenAI Embedder has a Base URL field and can point to an Ace Data Cloud embedding model such as text-embedding-3-large. But for a first reliable setup, local embeddings plus a remote conversation model is the cleanest path.
Verify the endpoint with curl
If AnythingLLM shows a connection problem, test the API directly before changing UI settings at random. Replace {token} and MODEL_ID with your real values:
curl -X POST 'https://api.acedata.cloud/v1/chat/completions' \
-H 'Authorization: Bearer {token}' \
-H 'Content-Type: application/json' \
-d '{
"model": "MODEL_ID",
"messages": [{"role": "user", "content": "ping"}]
}'
A successful response returns an OpenAI-compatible chat.completion object. That tells you the token and endpoint are usable independently of AnythingLLM.
If you see HTTP 403 used_up, the token is valid but the related application balance is insufficient. If you see 401 Unauthorized, check that the API Key field contains the Ace Data Cloud token without the Bearer prefix and without extra spaces.
Create a Workspace and ask document-grounded questions
After the model configuration is working, create a new Workspace and upload documents: PDF, Word, or Markdown are typical choices.
AnythingLLM will:
- split documents by paragraph,
- create vectors with the local AnythingLLM Embedder,
- store the text and vectors in local LanceDB,
- retrieve relevant segments when you ask a question,
- send the retrieved context plus your question to the configured conversational model.
At the top of a Workspace, AnythingLLM lets you switch between Query mode and Chat mode. Query mode answers based only on documents, which is usually the safer choice for serious document Q&A. Chat mode can mix in general model knowledge.
A good first test is to upload a small Markdown file and ask something that can only be answered from the file. If the answer cites the uploaded source, your retrieval path and model path are both working.
Docker deployment notes
For team or multi-user setups, the AnythingLLM Docker path can use environment variables to preset the same Generic OpenAI integration. The document lists these names:
GENERIC_OPEN_AI_BASE_PATH
GENERIC_OPEN_AI_API_KEY
GENERIC_OPEN_AI_MODEL_PREF
That is useful when you do not want every user to configure the provider manually in the UI. The same Base URL rule still applies: use https://api.acedata.cloud/v1 for the Generic OpenAI base path.
Troubleshooting checklist
When something fails, I would check in this order:
- Is the LLM provider set to OpenAI (Generic) rather than regular OpenAI?
- Does the Base URL end with
/v1? - Did you paste the token without the
Bearerprefix in the AnythingLLM API Key field? - Does the direct curl request return a
chat.completionobject? - Is AnythingLLM Embedder selected before uploading documents?
- After changing embedding settings, did you re-upload documents so vectors are generated?
This setup is intentionally simple: AnythingLLM handles Workspaces, local document storage, and local vectors; Ace Data Cloud handles the OpenAI-compatible chat completions call. Once that boundary is clear, most integration bugs become easy to isolate.
Full source document: https://platform.acedata.cloud/documents/development_anythingllm
Top comments (0)