docs: add the generative-deepseek model provider page set - #513
Merged
Conversation
Document the new generative-deepseek module (DeepSeek as a generative/RAG
provider), available from v1.36.19, v1.37.10, and v1.38.2.
- New provider pages model-providers/deepseek/{index,generative}.md (Python only for now)
- Document the X-Deepseek-Api-Key and X-Deepseek-Baseurl headers and the
DEEPSEEK_APIKEY env var
- Config keys (model, temperature, maxTokens, frequencyPenalty,
presencePenalty, topP, baseURL, stop) with defaults
- Recommend deepseek-v4-flash / deepseek-v4-pro; note deepseek-chat and
deepseek-reasoner are legacy aliases (deprecated 2026-07-24 per DeepSeek)
- Add DeepSeek to the model-providers table and sidebar
- Python snippets show the intended Configure.Generative.deepseek(...) syntax
(client support to follow); kept out of the CI snippet allowlist
The page shipped with a deprecation notice written as a future event (2026-07-24). That date has passed, so state it as settled fact: deepseek-chat and deepseek-reasoner are retired and DeepSeek no longer serves them. Core still ships DefaultDeepSeekModel = "deepseek-chat" (modules/generative-deepseek/config/class_settings.go:33, still true on v1.38.7), so the page's basic no-model example resolved to a retired alias. Present setting `model` as required rather than as an optional refinement: drop the no-model example, lead "Configure collection" with the warning and then the model-setting example, and disclose the built-in default as a caution instead of a neutral fact. Name only the current model names and link DeepSeek's pricing page rather than maintaining a catalogue. Correct "Header parameters", which was wrong. X-Deepseek-Api-Key does not override collection config (there is no API key there); it overrides the DEEPSEEK_APIKEY env var, and with neither set the request fails with "api key: no api key found" (clients/deepseek.go:240-248). X-Deepseek-Baseurl outranks the query-time baseURL param as well as the collection baseURL (clients/deepseek.go:75, 232-238). Also note that the base URL must be an API root, since Weaviate appends /chat/completions to it. Add two traps that were missing. MODULES_CLIENT_TIMEOUT defaults to 50s and covers the whole request including the body read (usecases/config/environment.go:869-876); the module's own acceptance test raises it to 120s, so reasoning models need a note. And the maxTokens ceiling is only consulted for the two retired aliases, so for a current model a value above the model's limit passes validation and only fails later as an error from DeepSeek; negative values are still rejected for every model by the unconditional arm of the same check (class_settings.go:89). Fold the reasoning caveats into one "Reasoning models" subsection rather than stacking admonitions, and link MODULES_CLIENT_TIMEOUT by its APITable row anchor. Update the Python snippet guard comment: Configure.Generative.deepseek() and GenerativeConfig.deepseek() are merged upstream (PR #2084, commit afc0e0eb) and signature-matched, but are not in a released client, so the blocks stay display-only and out of the test allowlist. Ignore platform.deepseek.com in the link validator; it 403s automated requests but loads fine in a browser, matching existing entries.
The DeepSeek blocks shipped behind DEEPSEEK_CLIENT_AVAILABLE = False with a TODO to lift the hold once pyproject.toml pinned a client release containing Configure.Generative.deepseek() and GenerativeConfig.deepseek() (PR #2084, commit afc0e0eb). This base pins weaviate-client==4.23.0, and both builders exist at that tag with the keyword-only signature the snippets already use: base_url, model, temperature, max_tokens, frequency_penalty, presence_penalty, top_p, stop. Per that TODO: set the flag to True, drop the now-empty guard and unindent the three blocks, and switch their FilteredTextBlock language from pyindent back to py, since there is no longer a guard indent to strip. The TODO's fourth clause, adding this file to the allowlist in tests/test_python.py, is deliberately not carried out. No model-provider include is in that allowlist; it lists only files under _includes/code/. Executing this file end to end would run every provider's snippets and require a credential per provider, so these blocks stay display-only like every other block in this file.
Every other model provider directory carries one; deepseek was the only one without. Position 225.5 places it between Databricks (225) and DigitalOcean (226), which matches its row in the provider table and its sidebar position.
There was a problem hiding this comment.
Orca Security Scan Summary
| Status | Check | Issues by priority | |
|---|---|---|---|
| Secrets | View in Orca |
Contributor
There was a problem hiding this comment.
Pull request overview
Adds DeepSeek generative-model provider documentation for Weaviate 1.39.
Changes:
- Adds DeepSeek setup, configuration, model, and RAG guidance.
- Adds Python examples and navigation entries.
- Excludes DeepSeek’s platform from automated link validation.
Reviewed changes
Copilot reviewed 8 out of 11 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
sidebars.js |
Adds DeepSeek navigation. |
docs/weaviate/model-providers/index.md |
Lists DeepSeek support. |
docs/weaviate/model-providers/deepseek/index.md |
Adds provider overview. |
docs/weaviate/model-providers/deepseek/generative.md |
Adds integration guidance. |
docs/weaviate/model-providers/deepseek/_category_.json |
Configures category metadata. |
docs/weaviate/model-providers/_includes/provider.generative.py |
Adds generative examples. |
docs/weaviate/model-providers/_includes/provider.connect.py |
Adds authentication example. |
_build_scripts/link-validator.js |
Ignores DeepSeek platform links. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebase of #459 onto the 1.39 release branch, with the client hold lifted. Supersedes #459, which targeted
mainand predates the morph and twelvelabs page sets.Diff against
v1-39/mainis 361 insertions, 0 deletions: nothing from the other two provider sets was disturbed. All three land at disjoint alphabetical positions, so nothing conflicted.The model aliases are retired, not deprecated
deepseek-chatanddeepseek-reasonerare retired and DeepSeek no longer serves them. Thegenerative-deepseekmodule still defaults todeepseek-chat, so a collection created without amodelpoints at a model that does not exist. The page says to setmodelon every collection, in three places.Current models are named as
deepseek-v4-flashanddeepseek-v4-pro.Also documented: Weaviate only checks
maxTokensagainst a built-in ceiling for the two retired aliases. For any current model, an over-limitmaxTokensis accepted at collection creation and fails later as a DeepSeek error at query time.Client hold lifted
provider.generative.pycarriedDEEPSEEK_CLIENT_AVAILABLE = Falsepending a release containing the DeepSeek builder. That is weaviate-client 4.23.0, which this base already pins, so the guard is removed, the blocks unindented, and theirFilteredTextBlocklanguage switched frompyindentback topy.The builder signature was read at tag
v4.23.0and matches the snippets one for one:base_url,model,temperature,max_tokens,frequency_penalty,presence_penalty,top_p,stop.One clause of that TODO was deliberately not followed. It also said to add the file to the
tests/test_python.pyallowlist. Noprovider.*.pyfile appears in that allowlist, and adding this one would execute every provider's snippets in the file, requiring credentials for Anthropic, AWS, Cohere, Databricks, Google, Mistral, NVIDIA, OpenAI and others. Display-only is the design for these shared provider includes.Also in here
_category_.json, whichdeepseek/was missing. It was the only one of 28 provider directories without one.platform.deepseek.comadded to the link-validator ignore list. It 403s automated requests while loading fine in a browser, matching the existing entries forplatform.openai.comand others. Both new pages link to it, so the checker fails without it.CI
Expect the Python lanes to fail at dependency install. weaviate-client 4.23.0 is tagged on GitHub but not yet published to PyPI, so the
==4.23.0pin on this base cannot resolve. This clears itself when the publish lands.