Repository navigation
Releases
v1.3.0
Minor release.
[1.3.0] - 2026-11-03
Added
- The bridge now mirrors the web client's device-session check,
POST /users/auth_token/check_device, piggybacked on completions
and throttled to once per token per six hours. That endpoint is
where the backend delivers a rotated session token (in a
rotatefield) when it rotates one; a client that never checks
can be left holding a retired token. A delivered rotation is
kept in memory only and substituted for the retired token on
later requests, so a rotation does not break connected clients;
the mapping is never written to disk and is lost on restart.
Counters are reported in/statsasdevice_checks, and
rotations are logged underDS_LOG. SetDS_CHECK_DEVICE=0
to disable the checks, orDS_CHECK_DEVICE_INTERVAL(seconds)
to change the spacing.
Assets
ds-server.zip: the full source tree. Unzip anywhere, then follow
the install steps in the README (pip install -r requirements.txt
andpython ds_server.py).
Warning
Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.
Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md
v1.2.4
Patch release.
[1.2.4] - 2026-10-31
Fixed
- A completion that is still empty after the fresh-session retry
(the backend intermittently produces replies that never
materialize, and the empties cluster) is now surfaced as a
retryable 502upstream_errorinstead of an empty 200, so
routers and agent loops retry at their own layer instead of
reading a completed, empty turn. - The empty-retry no longer relabels the chain outcome as
reset
in DS_LOG and /stats; the label describes the conversation
(hit, new, or a genuine divergence reset), so divergence
counters stay truthful. - Search answers no longer leak
[citation:N]markers; they are
stripped on every answer path, like the[reference:N]family.
Assets
ds-server.zip: the full source tree. Unzip anywhere, then follow
the install steps in the README (pip install -r requirements.txt
andpython ds_server.py).
Warning
Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.
Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md
v1.2.3
Patch release.
[1.2.3] - 2026-10-31
Added
- File attachments: OpenAI
filecontent parts (a base64 data URL
plus a filename) are uploaded to the web backend and attached to
the completion, so clients without a coding agent can send PDF,
text, and office documents the model then reads. - Remote image URLs: an
image_urlpart pointing at an http(s)
URL is downloaded by the server (15 second timeout, 10 MB cap)
and uploaded like a data-URL image; an unreachable or oversized
image is skipped instead of failing the request.
Assets
ds-server.zip: the full source tree. Unzip anywhere, then follow
the install steps in the README (pip install -r requirements.txt
andpython ds_server.py).
Warning
Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.
Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md
v1.2.2
Patch release.
[1.2.2] - 2026-10-31
Fixed
- Chain continuation now verifies the fingerprints of the whole
recorded prefix, not only the boundary message. Edits behind the
boundary (an edit, a rollback, a head-preserving compaction) went
undetected and the backend kept answering from the pre-edit
context; they now reset the chain like any other divergence.
Records written before this change reset once and are rewritten. - A completion whose final answer is completely empty (the backend
intermittently produces a session with no reply, observed under
the tool-catalog prompt) is retried once on a fresh session
instead of being returned as an empty success. - File upload business errors now carry the backend's
biz_msg
(for example "rate limit reached") instead of an empty detail,
and a rate-limit business error is surfaced as HTTP 429 so
routers back off. - The DS_LOG chain label for a divergence on an existing chain now
readsreset, matching the behavior (it readnewbefore). - The README now states that OpenAI sampling parameters
(temperature, max_tokens, stop, n) are accepted and ignored,
because the web backend has no equivalents.
Assets
ds-server.zip: the full source tree. Unzip anywhere, then follow
the install steps in the README (pip install -r requirements.txt
andpython ds_server.py).
Warning
Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.
Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md
v1.2.1
Patch release.
[1.2.1] - 2026-10-31
Changed
- Upstream session auto-delete is now on by default: a chain's
backend session is deleted once the chain is replaced or evicted.
SetDS_DELETE_SESSIONS=0to keep retired sessions. The feature
only ever touches sessions the server itself created. - Authoritative history mode is now on by default (the per-request
history_modeflag andDS_HISTORY_MODE=0still turn it off).
The shipped defaults now follow the bridge's main deployment:
behind a router, serving agent workloads whose requests are
buffered anyway.
Assets
ds-server.zip: the complete source package
Warning
Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.
Full history: CHANGELOG.md
v1.2.0
Minor release, delivered through pull request #4.
[1.2.0] - 2026-10-31
Added
response_formatis honored at prompt level:json_object
instructs the model to answer with a single JSON object, and
json_schemacarries the client's schema along with the
instruction. The web backend cannot enforce a format at decode
time, so conformance rests on the model following the instruction.- Opt-in authoritative history mode:
history_mode: truein the
request body (orDS_HISTORY_MODE=1as the default) makes the
reply stored in the backend's history the answer of record, read
back after the completion instead of the assembled stream text.
Streamed requests are buffered in this mode. - Opt-in upstream session auto-delete (
DS_DELETE_SESSIONS=1): a
chain's backend session is deleted once the chain is replaced or
evicted, so retired conversations do not pile up in the account's
chat list. GET /stats: in-process completion counters (totals by outcome,
chain outcomes, estimated token totals, and a per-model breakdown
with retries and durations). Always on, memory only.
Assets
ds-server.zip: the complete source package
Warning
Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.
Full history: CHANGELOG.md
v1.1.2
Patch release.
[1.1.2] - 2026-10-31
Changed
- The README now documents the one-time caps setup for 9Router
users: 9Router reads a custom model's capabilities from the caps
saved on the model row, not from the provider's/v1/models, so
the guide ships a console snippet that declares them once per
model.
Removed
- The
capabilitiesandarchitecturemetadata on/v1/models
entries is gone. It was added in 1.1.1, but the router this bridge
serves does not read capability metadata from a provider's model
list, so the declaration had no consumer.
Assets
ds-server.zip: the complete source package
Warning
Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.
Full history: CHANGELOG.md
v1.1.1
Patch release, delivered through pull request #3.
[1.1.1] - 2026-10-31
Added
- Adaptive pacing: whenever the backend answers 429 and a request has
to be retried, the pacer widens its minimum intervals automatically
(the penalty doubles from 2 seconds up to a 30 second cap) and then
relaxes with a 60 second half-life. SetDS_ADAPTIVE_PACING=0to
keep the intervals fixed. - The server version is now reported by the
/healthendpoint and in
the startup line, from a single__version__constant in the
package. /v1/modelsnow declares each model's capabilities (vision,
reasoning,tools,search) and its input and output modalities,
so routers and clients can display and route on them instead of
guessing from the model name. The declaration follows each model's
own mode:deepseek-chatis the plain mode and declares no
reasoning,deepseek-reasoneris the thinking mode.- Regression fixture corpus under
tests/fixturescovering the
historical parser failure shapes: SSE patch sequences for thinking
routed through the -1 fragment selector, fragment lists appended
and batched at the response level, transition chunks with no
operation plus standalone[reference:N]markers, and
mixed-dialect tool replies including mojibake-damaged DSML.
Changed
- The model labels in the README and the module docs no longer call
the web chat models DeepSeek V3 and R1. The web chat has run the
DeepSeek V4 family since April 2026 (the vendor replaces the web
checkpoint without notice, and the web API does not report which
one served a request), so the models are now described as the web
chat model in its plain and thinking modes.
Removed
- The legacy model aliases
deepseek-v3anddeepseek-r1are gone.
Onlydeepseek-chatanddeepseek-reasonerare served: lookups of
any other model name return amodel_not_founderror, and chat
completions reject unknown model names the same way instead of
silently treating them asdeepseek-chat.
Fixed
- A streamed request whose parsing produced no text now delivers the
history fallback through the stream as one content piece, matching
the buffered path; before, streaming clients silently received an
empty reply in that case. - Tool replies with fused dialects no longer leak markup into the
visible text: a DSML invoke block closed by atool_calltag (or
by its calls wrapper) is now parsed as a call, and any orphaned
DSML ortool_calltag debris left after extraction is stripped
by a final sweep. Long fenced code blocks in tool-carrying
replies stay capped at 10 lines plus a trimmed note, while plain
replies are untouched; both behaviors are now covered by tests. - The stream parser now handles fragment updates that arrive at
the response level itself: lists appended withAPPENDand bare
fragment dicts insideBATCHupdates are routed to the correct
channel instead of being dropped. Standalone[reference:N]
markers are now filtered from every channel, not only from
fragment batch updates. - Streaming cancellation now reacts even when the upstream stalls
completely: the completion stream read re-checks the cancel event
at least every 2 seconds, so a disconnected client no longer
waits out a silent upstream. Normal streaming behavior and the
pacing design are unchanged.
Assets
ds-server.zip: the complete source package
Warning
Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.
Full history: CHANGELOG.md
v1.1.0
Minor release, delivered through pull request #2.
Added
- True streaming for plain streaming requests: tokens are relayed live
from the backend instead of being buffered and replayed. If the
client disconnects mid-stream, the upstream read is aborted and the
pacing slot is released immediately, instead of completing a reply
nobody is waiting for. Requests with tools still use the buffered
path, because tool calls are parsed from the complete reply. - Optional request logging with
DS_LOG=1: one line per completion on
stderr carrying the model, the chain outcome (hit, new or reset),
the duration, the upstream retry count, and the final status (ok,
cancelled, or the mapped error status).
Assets
ds-server.zip: the complete source package
Warning
Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.
Full history: CHANGELOG.md
v1.0.2
Patch release, delivered through pull request #1.
Fixed
- Upstream failures are now mapped to correct client-facing HTTP status
codes and OpenAI-style error types instead of a generic 502: rate
limits stay 429 (rate_limit_error), rejected userTokens become 401
(authentication_error), other upstream 4xx pass through, and
upstream 5xx or connection failures become 502 (upstream_error).
Routers and agents can now back off or report credential problems
correctly.
Changed
- Dependencies in
requirements.txtare pinned to the minimum versions
this release was tested with (Flask 3.1, requests 2.34, wasmtime 50),
so a fresh install can no longer silently pull an untested major
version.
Assets
ds-server.zip: the complete source package
Warning
Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.
Full history: CHANGELOG.md