dsh-model-think-level 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +163 -2
- package/assets/models-page-effort-editor.png +0 -0
- package/cordis.patch.yml +7 -0
- package/docs/banner-dark.svg +82 -0
- package/docs/banner-zh-dark.svg +82 -0
- package/docs/banner-zh.svg +78 -0
- package/docs/banner.svg +78 -0
- package/docs/demo-zh.svg +85 -0
- package/docs/demo.svg +85 -0
- package/icon.svg +1 -0
- package/lib/autofill.d.ts +32 -0
- package/lib/client/ComposerSlider.d.ts +36 -0
- package/lib/client/EffortEditor.d.ts +112 -0
- package/lib/client/HeadersEditor.d.ts +86 -0
- package/lib/client/LocaleRefresh.d.ts +18 -0
- package/lib/client/ModelSearch.d.ts +48 -0
- package/lib/client/SliderToggle.d.ts +7 -0
- package/lib/client/effort-memory.d.ts +44 -0
- package/lib/client/effort.d.ts +38 -0
- package/lib/client/index.d.ts +67 -0
- package/lib/client/injection/autofill-run.d.ts +26 -0
- package/lib/client/injection/composer-menu.d.ts +51 -0
- package/lib/client/injection/configured-efforts.d.ts +31 -0
- package/lib/client/injection/model-menu.d.ts +29 -0
- package/lib/client/injection/model-order-drag.d.ts +68 -0
- package/lib/client/injection/models-page-editor.d.ts +385 -0
- package/lib/client/injection/models-page.d.ts +58 -0
- package/lib/client/injection/mount.d.ts +62 -0
- package/lib/client/injection/provider-card-slot.d.ts +53 -0
- package/lib/client/injection/provider-order-drag.d.ts +86 -0
- package/lib/client/injection/provider-toggle.d.ts +42 -0
- package/lib/client/injection/row-drag.d.ts +145 -0
- package/lib/client/injection/session-directory.d.ts +34 -0
- package/lib/client/injection/slider-toggle-slot.d.ts +19 -0
- package/lib/client/locales.d.ts +117 -0
- package/lib/client/model-order.d.ts +58 -0
- package/lib/client/ops.d.ts +193 -0
- package/lib/client/provider-enabled.d.ts +30 -0
- package/lib/client/provider-order.d.ts +58 -0
- package/lib/client/slider-pref.d.ts +20 -0
- package/lib/client/styles.d.ts +8 -0
- package/lib/client/types.d.ts +339 -0
- package/lib/client/wire-preview.d.ts +29 -0
- package/lib/client.js +1373 -0
- package/lib/client.js.map +7 -0
- package/lib/constants.d.ts +76 -0
- package/lib/detection.d.ts +60 -0
- package/lib/guard.d.ts +36 -0
- package/lib/headers-conflict.d.ts +64 -0
- package/lib/headers-core.d.ts +158 -0
- package/lib/headers-fetch.d.ts +52 -0
- package/lib/index.d.ts +86 -0
- package/lib/index.js +2298 -0
- package/lib/index.js.map +7 -0
- package/lib/knowledge.d.ts +270 -0
- package/lib/shared.d.ts +20 -0
- package/locale/en.json +5 -0
- package/locale/zh.json +6 -0
- package/package.json +112 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 GaoHu1997
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,164 @@
|
|
|
1
|
-
#
|
|
1
|
+
# DSH Model Think Level
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<picture>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/banner-dark.svg">
|
|
6
|
+
<img src="docs/banner.svg" alt="DSH Model Think Level" width="720">
|
|
7
|
+
</picture>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[](https://www.npmjs.com/package/dsh-model-think-level)
|
|
12
|
+
[](https://www.npmjs.com/package/dsh-model-think-level)
|
|
13
|
+

|
|
14
|
+
[](https://awesome-dsh-plugin.com)
|
|
15
|
+
|
|
16
|
+
**English** | [中文](README.zh.md)
|
|
17
|
+
|
|
18
|
+
Thinking levels, vision badges and request headers for **third-party models** in DeepSeek Harness — a provider → model picker with capability icons inside the official composer menu, a one-switch thinking gate plus auto-adapted levels inside the official Models page card, and per-route request headers. A renamed derivative of [dsh-better-reasoning-effort](https://github.com/HaoyueQin/dsh-better-reasoning-effort) — see [Acknowledgements](#acknowledgements).
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<img src="docs/demo.svg" alt="demo" width="640">
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<img src="assets/models-page-effort-editor.png" alt="The thinking-effort editor injected into a model row on the official Models page" width="720">
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
## Why
|
|
29
|
+
|
|
30
|
+
The `llm-pi-ai` adapter natively supports per-model `reasoningEfforts` and `input` declarations, but the official Models page editor deliberately keeps both fields out of reach. As a result, third-party models get **no thinking-level picker** in the composer, only the official DeepSeek API can set reasoning effort, hand-declared models are treated as **text-only**, and configuring any of this meant hand-writing `settings.yaml` blocks. This plugin brings both configuration surfaces back into the UI: edit inside the official model editor card, plus one-click auto-adapt.
|
|
31
|
+
|
|
32
|
+
## Features
|
|
33
|
+
|
|
34
|
+
- **In-page editor** — a **Thinking** switch plus a reasoning-effort block appears under each model row's disclosure on the official Models page (levels, default effort, input modalities, endpoint compatibility), committing with the card's own **Save**; changes stay pending until then, and **Cancel** discards them with the card's fields. The switch sits **outside** that block and gates it: switched off, the model is written as not reasoning and the whole block is not rendered — one row is all an un-thinking model shows.
|
|
35
|
+
- **Auto-adapt** — one click fills recommended levels, wire spellings and modalities from a built-in knowledge base (65 entries across 15 vendors — see [Supported models](docs/supported-models.md)), wire-protocol inference, and a same-origin probe of the provider's raw `/models` listing, every suggestion labeled by confidence; reference capacities show as read-only hints you copy yourself.
|
|
36
|
+
- **Auto-fill** — models without a declaration are filled at boot and when added mid-session (opt out via `autofill: false` / `modalityAutofill: false`); explicit declarations, `false` and deliberately-unset markers are never touched.
|
|
37
|
+
- **Three intents** — all levels off = unset (back to inheritance); only `off` = disable reasoning; levels armed = write the declaration.
|
|
38
|
+
- **Composer model & reasoning rows** — the official model menu's body renders a **Model** row and a **Reasoning level** row. The model row opens a provider column with that provider's models beside it, every entry carrying vision / thinking badges and the current pick marked in accent colour (no tick, so it cannot be mistaken for a badge); the reasoning row opens the model's own level list. The official trigger stays untouched, picks are optimistic and roll back on refusal, the popover stays open after a model switch so the level can be chosen next, and model switches keep your level through a per-session memory chain (issue #4's per-model default effort outranks it across sessions).
|
|
39
|
+
- **Composer model search** — a filter box above the official model list (provider / model / id tokens), always on.
|
|
40
|
+
- **Per-model default effort** — a "Default effort" picker on each model row, stored in the settings document; every new session starts the model there.
|
|
41
|
+
- **Request headers & `user-agent`** — a provider-card section edits the official `headers` field (masked, path-merged, Save-gated), and the plugin performs the `user-agent` override at the fetch layer per **provider route**, because the official adapter reserves that name. Routes that share one endpoint are told apart by their `baseURL` path and by the `model` carried in the request body, so each provider keeps its own identity; a request that identifies no single route falls back to the first declarer and the overlap is reported rather than guessed. Same-origin `/models` probes are covered.
|
|
42
|
+
- **Defensive injection** — everything keys off the official page's DOM; if an official upgrade changes the structure, injection simply pauses and the official page is unaffected.
|
|
43
|
+
- Bilingual copy (中文 / English).
|
|
44
|
+
|
|
45
|
+
## Supported models
|
|
46
|
+
|
|
47
|
+
The auto-adapt knowledge base carries **65 curated entries across 15 vendors** (DeepSeek, OpenAI, Anthropic Claude, Gemini, Grok, Qwen, GLM, Kimi, Mistral, MiniMax, MiMo, Doubao, Hunyuan, Step, ERNIE — re-verified against official docs 2026-08/09, including vision-capable variants and no-effort-control families). The full table — match patterns, level → wire-spelling ladders, defaults, modalities, reference capacities — lives in **[docs/supported-models.md](docs/supported-models.md)** (generated from [`src/knowledge.ts`](src/knowledge.ts), the authoritative source). Unlisted models fall back to protocol inference + generic levels, adjustable by hand.
|
|
48
|
+
|
|
49
|
+
## Install
|
|
50
|
+
|
|
51
|
+
Requires DeepSeek Harness **`0.1.5-alpha.1` or later** (per-line peer ranges; the `0.1.2-rc` / `0.1.3-alpha` lines are no longer supported — use plugin `0.3.7` there). Compiled and gated against `0.2.0-rc.1`. The per-kernel seam re-checks behind this live in [docs/compatibility-notes.md](docs/compatibility-notes.md).
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# from npm, under the dsh web profile
|
|
55
|
+
dsh plugin --profile web add dsh-model-think-level
|
|
56
|
+
|
|
57
|
+
# or from GitHub (source install; `lib/` builds via the prepare hook — the
|
|
58
|
+
# installer prints the `allowBuilds` key it needs, follow that and re-add)
|
|
59
|
+
dsh plugin --profile web add github:GaoHu1997/dsh-model-think-level
|
|
60
|
+
|
|
61
|
+
# or link a local checkout for development
|
|
62
|
+
npm install && npm run build
|
|
63
|
+
dsh plugin --profile web add link:D:/Project/dsh-model-think-level
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Restart `dsh web` and hard-refresh the browser.
|
|
67
|
+
|
|
68
|
+
## Usage
|
|
69
|
+
|
|
70
|
+
1. Configure a third-party provider (API key etc.) on the official Models page.
|
|
71
|
+
2. Expand a model row: the **Thinking** switch sits above the effort block, and the block sits under the official capacity fields.
|
|
72
|
+
- Leave **Thinking** on to configure levels. Switch it **off** and the model is saved as not reasoning — the whole effort block disappears with it, leaving just the switch row.
|
|
73
|
+
- Check levels (off / minimal / low / medium / high / xhigh / max) and fill the wire values (e.g. give `high` the spelling `ultra`, and the gateway receives `ultra` when you pick High in the composer);
|
|
74
|
+
- Toggle **Image input** under *Input modalities* to declare what the model accepts;
|
|
75
|
+
- Click **Auto-adapt** to fill recommended levels and modalities — reference capacities show up as read-only hints you copy into the official fields yourself;
|
|
76
|
+
- Any change is **pending** and lands when you press the card's own **Save**; **Cancel** (or a reload) discards it with the card's fields.
|
|
77
|
+
3. On a compatible protocol, the *Endpoint compatibility* section appears at the bottom — thinking budget field / vLLM priority on `openai-completions`, `max_output_tokens` handling on `openai-responses`.
|
|
78
|
+
4. All levels off + Save = unset the declaration; only `off` checked + Save = disable reasoning (`false`); *Clear declaration* + Save = back to inheriting the provider default.
|
|
79
|
+
5. In the composer, open the model menu: the **Model** row lists providers on the left and that provider's models on the right — each model carries an eye badge when it accepts images and a sparkle badge when it reasons — and the **Reasoning level** row lists the levels of the current model. Picking a model closes its list but keeps the menu open, so the level can be picked right after.
|
|
80
|
+
|
|
81
|
+
Declared models are immediately selectable for reasoning effort in the composer, and image-declared models accept attachments end to end.
|
|
82
|
+
|
|
83
|
+
## Configuration
|
|
84
|
+
|
|
85
|
+
Optional on the plugin's profile row (values shown are the defaults):
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
- insert:
|
|
89
|
+
- id: dsh-model-think-level
|
|
90
|
+
name: dsh-model-think-level
|
|
91
|
+
config:
|
|
92
|
+
autofill: true # auto-fill undeclared models at boot
|
|
93
|
+
modalityAutofill: true # whether the boot fill also covers modalities
|
|
94
|
+
probeTimeoutMs: 15000 # /models probe fetch timeout
|
|
95
|
+
bootRetryDelaysMs: [1000, 2000, 4000, 8000, 16000, 30000]
|
|
96
|
+
defaultGuard: true # map effort-less calls on forced-thinking
|
|
97
|
+
# ladders to the vendor default
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## How it works
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Browser (lib/client.js) Host (lib/index.js)
|
|
104
|
+
├─ DOM injector └─ Auto-fill
|
|
105
|
+
│ MutationObserver on the models page settings/document-updated →
|
|
106
|
+
│ → mounts EffortEditor in each invalidates the host cache;
|
|
107
|
+
│ model row's disclosure browser idle pass fills models
|
|
108
|
+
├─ Composer injection
|
|
109
|
+
│ MutationObserver on the document
|
|
110
|
+
│ → ComposerSlider (root pane)
|
|
111
|
+
│ → model search box (model-list pane)
|
|
112
|
+
├─ EffortEditor (React component) (knowledge base + inference)
|
|
113
|
+
│ level checkboxes / wire values /
|
|
114
|
+
│ input-modality toggle /
|
|
115
|
+
│ auto-adapt (zoned suggestions) / committed with the card's Save
|
|
116
|
+
│ └─ writes settings.mutate (llm-pi-ai)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- `suggestEfforts()` in `src/knowledge.ts` is the knowledge base + inference engine — a pure function shared by host and browser.
|
|
120
|
+
- `reconcile()` in `src/client/injection/models-page-editor.ts` locates model rows and mounts the editor; `src/client/index.ts` assembles the browser half, one module per seam in `src/client/injection/`.
|
|
121
|
+
- `createEditorApi()` in `src/client/ops.ts` writes the declarations via `settings.mutate`, preserving every other row field and retrying once on a revision conflict.
|
|
122
|
+
|
|
123
|
+
## Development
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm run typecheck # tsc strict check on src
|
|
127
|
+
npm test # vitest: knowledge / inference / autofill / DOM injection / writing
|
|
128
|
+
npm run build # lib/*.js + lib/client.js (module-loader bundle)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Compiled and gated against the `0.2.0-rc.1` official packages; see [docs/compatibility-notes.md](docs/compatibility-notes.md) for the per-kernel records.
|
|
132
|
+
|
|
133
|
+
## Known limitations
|
|
134
|
+
|
|
135
|
+
- Injection depends on the official Models page's DOM (aria-label/class); an official upgrade may pause injection until adapted — the official page is unaffected meanwhile.
|
|
136
|
+
- The auto-adapt probe route answers **loopback and IP-literal hosts only** (the core `/api` Host-allowlist discipline without `trustedHosts`), and **never follows redirects** — a gateway listing its models only behind a 30x simply yields no endpoint evidence; Auto-adapt falls back to the knowledge base and protocol inference.
|
|
137
|
+
- `reasoningEfforts` declarations are suggestions — what an endpoint actually accepts is up to its docs; tweak in the UI. The knowledge base is not exhaustive; families without an effort ladder carry no entry at all.
|
|
138
|
+
- Endpoint-compatibility switches are never auto-filled by design: they describe a gateway, not a model.
|
|
139
|
+
- The modality vocabulary follows pi-ai's core (`text` / `image` today); wider gateway support (PDF, audio, video) is recorded per family until the core vocabulary grows.
|
|
140
|
+
- Name-heuristic modality advice (vision-flavored ids) is deliberately low-confidence and labeled as such.
|
|
141
|
+
- Self-hosted relays: auto-fill pins `supportsDeveloperRole: false` on routes no official host claims (some upstreams reject the `developer` role); explicit values are never overwritten.
|
|
142
|
+
- Forced-thinking models (ladders without `off`, e.g. GLM-5.3): effort-less calls map to the vendor default instead of sending `thinking: disabled` — set `defaultGuard: false` to restore raw behavior.
|
|
143
|
+
- **Credentials inside `headers` are not redacted on disk**: the read-only view masks them, but the settings document still holds them in clear text — treat it like an API key.
|
|
144
|
+
- **The request-header section's edit-state detection reads an unofficial signal** (the official row exposes no data attribute for its editor state); if an official build renames that class root, the section stops appearing — never breaking the page.
|
|
145
|
+
- **Only one `user-agent` rewrite should be active**: sibling header plugins land on the same layer; the plugin detects and reports known ones, but the last writer on the wire wins.
|
|
146
|
+
- The request-layer takeover relies on the official adapter creating a fresh SDK client per request — guarded by an end-to-end test that fails loudly if that changes.
|
|
147
|
+
|
|
148
|
+
## Acknowledgements
|
|
149
|
+
|
|
150
|
+
This plugin is a renamed derivative of **[dsh-better-reasoning-effort](https://github.com/HaoyueQin/dsh-better-reasoning-effort) by [HaoyueQin](https://github.com/HaoyueQin)** (MIT). The request-header layer, the model knowledge base, the auto-adapt / auto-fill pipeline and the Models-page editor all come from that project — thank you for the original work. What changed here: the composer's effort slider was replaced by a provider → model picker plus a reasoning-level list, model entries gained vision / thinking badges, the selection tick was dropped in favour of an accent colour, and the per-model editor gained the master **Thinking** switch that gates it.
|
|
151
|
+
|
|
152
|
+
That project's own composer slider was **adapted from [dsh-reasoning-effort](https://github.com/HanaAyane/dsh-reasoning-effort) by [HanaAyane](https://github.com/HanaAyane)** (MIT); it is no longer shipped here, but the credit stands for the lineage. If you used the upstream plugin, remove it to avoid two effort controls on the same seat:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
dsh plugin --profile web remove dsh-reasoning-effort
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Activity
|
|
159
|
+
|
|
160
|
+
[](https://gitstock.org/GaoHu1997/dsh-model-think-level/stock.svg)
|
|
161
|
+
|
|
162
|
+
## License
|
|
163
|
+
|
|
164
|
+
MIT
|
|
Binary file
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Applied by the profile composer (dsh.bundle.patch) when this package is
|
|
2
|
+
# added to a profile. Mounts the host half (settings auto-adaptation plus a
|
|
3
|
+
# keepalive row) so the browser scanner discovers `dsh.client` and serves
|
|
4
|
+
# `lib/client.js` as `/plugins/dsh-model-think-level/client.js`.
|
|
5
|
+
- insert:
|
|
6
|
+
- id: dsh-model-think-level
|
|
7
|
+
name: dsh-model-think-level
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="b" x1="0" y1="0" x2="1" y2=".6"><stop offset="0" stop-color="#05070f"/><stop offset=".5" stop-color="#0e1638"/><stop offset="1" stop-color="#241a4e"/></linearGradient>
|
|
4
|
+
<linearGradient id="tk" x1="0" y1="0" x2="1" y2=".25"><stop offset="0" stop-color="#03040a"/><stop offset=".22" stop-color="#071126"/><stop offset=".45" stop-color="#101d4c"/><stop offset=".7" stop-color="#302262"/><stop offset="1" stop-color="#5d35a0"/></linearGradient>
|
|
5
|
+
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#000" stop-opacity=".28"/><stop offset=".42" stop-color="#000" stop-opacity="0"/><stop offset="1" stop-color="#a871ff" stop-opacity=".12"/></linearGradient>
|
|
6
|
+
<radialGradient id="or"><stop offset="0" stop-color="#5282ff" stop-opacity=".14"/><stop offset="1" stop-color="#5282ff" stop-opacity="0"/></radialGradient>
|
|
7
|
+
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".96"/><stop offset=".11" stop-color="#bcbdff" stop-opacity=".8"/><stop offset=".28" stop-color="#6a57ff" stop-opacity=".5"/><stop offset=".49" stop-color="#691fff" stop-opacity=".2"/><stop offset=".74" stop-color="#691fff" stop-opacity="0"/></radialGradient>
|
|
8
|
+
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#64a0ff" stop-opacity="0"/><stop offset=".4" stop-color="#64a0ff" stop-opacity=".42"/><stop offset=".55" stop-color="#f1ecff"/><stop offset=".72" stop-color="#c152ff" stop-opacity=".65"/><stop offset="1" stop-color="#c152ff" stop-opacity="0"/></linearGradient>
|
|
9
|
+
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#c4beff" stop-opacity="0"/><stop offset=".5" stop-color="#c4beff" stop-opacity=".84"/><stop offset="1" stop-color="#c4beff" stop-opacity="0"/></linearGradient>
|
|
10
|
+
<radialGradient id="ho"><stop offset="0" stop-color="#cfd6ff" stop-opacity=".5"/><stop offset="1" stop-color="#cfd6ff" stop-opacity="0"/></radialGradient>
|
|
11
|
+
<radialGradient id="kg"><stop offset="0" stop-color="#874eff" stop-opacity=".55"/><stop offset="1" stop-color="#874eff" stop-opacity="0"/></radialGradient>
|
|
12
|
+
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#4876ff" stop-opacity="0"/><stop offset=".68" stop-color="#7087ff" stop-opacity=".5"/><stop offset="1" stop-color="#ecdeff" stop-opacity=".7"/></linearGradient>
|
|
13
|
+
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
14
|
+
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="12" width="2" height="30" fill="#a9c2ff" opacity=".05"/><rect x="16" width="2" height="30" fill="#a9c2ff" opacity=".09"/><rect x="20" width="2" height="30" fill="#a9c2ff" opacity=".13"/><rect x="24" width="2" height="30" fill="#a9c2ff" opacity=".17"/><rect x="28" width="2" height="30" fill="#a9c2ff" opacity=".19"/><rect x="32" width="2" height="30" fill="#a9c2ff" opacity=".2"/><rect x="36" width="2" height="30" fill="#a9c2ff" opacity=".31"/><rect x="40" width="2" height="30" fill="#a9c2ff" opacity=".56"/><rect x="44" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="48" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="52" width="2" height="30" fill="#a9c2ff" opacity=".63"/><rect x="56" width="2" height="30" fill="#a9c2ff" opacity=".51"/><rect x="60" width="2" height="30" fill="#e8eaff" opacity=".54"/></pattern>
|
|
15
|
+
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
16
|
+
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
17
|
+
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
18
|
+
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
19
|
+
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
20
|
+
</defs>
|
|
21
|
+
<rect width="1200" height="260" fill="url(#b)"/>
|
|
22
|
+
<g fill="#c9d4ff"><circle cx="636" cy="46" r="1.5" opacity=".55"/><circle cx="402" cy="247" r="1.2" opacity=".35"/><circle cx="1174" cy="50" r="1.3" opacity=".4"/></g>
|
|
23
|
+
<text x="56" y="102" font-size="38" font-weight="700" fill="#f0f3fa">DSH Model Think Level</text>
|
|
24
|
+
<text x="56" y="142" font-size="16" fill="#9aa5c0">Thinking levels, vision badges & request headers —</text>
|
|
25
|
+
<text x="56" y="166" font-size="16" fill="#9aa5c0">edited inside the official Models page, auto-adapted in one click.</text>
|
|
26
|
+
<g font-size="12.5">
|
|
27
|
+
<rect x="56" y="192" width="170" height="27" rx="13.5" fill="#5d83ff"/><text x="141" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness plugin</text>
|
|
28
|
+
<rect x="238" y="192" width="150" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="313" y="210" text-anchor="middle" fill="#c6d2f2">One-click auto-adapt</text>
|
|
29
|
+
<rect x="400" y="192" width="163" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="481" y="210" text-anchor="middle" fill="#c6d2f2">Provider → model picker</text>
|
|
30
|
+
</g>
|
|
31
|
+
<rect x="690" y="24" width="450" height="212" rx="13" fill="#161b2c" stroke="#273049"/>
|
|
32
|
+
<text x="714" y="54" font-size="15" font-weight="700" fill="#f0f3fa">Reasoning effort</text>
|
|
33
|
+
<text x="1116" y="54" font-size="13" font-weight="600" fill="#7d97ff" text-anchor="end">Auto-adapt</text>
|
|
34
|
+
<g font-size="13" fill="#c6cddc">
|
|
35
|
+
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
36
|
+
</g>
|
|
37
|
+
<g fill="#0f1526" stroke="#3a4666">
|
|
38
|
+
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
39
|
+
</g>
|
|
40
|
+
<g fill="#0f1526" stroke="#2c3554">
|
|
41
|
+
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
42
|
+
</g>
|
|
43
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
44
|
+
<rect x="714" y="65" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
45
|
+
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
46
|
+
<text x="822" y="78" font-size="12.5" fill="#e8ecf6">off</text></g>
|
|
47
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
48
|
+
<rect x="714" y="93" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
49
|
+
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
50
|
+
<text x="822" y="106" font-size="12.5" fill="#e8ecf6">low</text></g>
|
|
51
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
52
|
+
<rect x="714" y="121" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
53
|
+
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
54
|
+
<text x="822" y="134" font-size="12.5" fill="#e8ecf6">high</text></g>
|
|
55
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
56
|
+
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#39435f" stroke-dasharray="4 3"/>
|
|
57
|
+
<text x="728" y="156.5" font-size="11" fill="#97a2c4">Context window 1,048,576 · Max output 128,000</text></g>
|
|
58
|
+
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#6f42ff" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.28;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
59
|
+
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#0c1137" opacity=".35" filter="url(#f3)"/>
|
|
60
|
+
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#tk)"/>
|
|
61
|
+
<rect x="716" y="179" width="280" height="1.2" fill="#bdc7ff" opacity=".15"/>
|
|
62
|
+
<rect x="716" y="206" width="280" height="1.2" fill="#000" opacity=".55"/>
|
|
63
|
+
<ellipse cx="765" cy="191" rx="60" ry="14" fill="url(#or)"/>
|
|
64
|
+
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
65
|
+
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
66
|
+
<rect x="714" y="178" width="284" height="30" fill="#2a38af" opacity=".26"/>
|
|
67
|
+
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
68
|
+
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
69
|
+
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
70
|
+
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
71
|
+
</g></g>
|
|
72
|
+
<g clip-path="url(#tc)">
|
|
73
|
+
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
74
|
+
<rect x="928" y="191.7" width="54" height="2.6" fill="#9b7cff" opacity=".5" filter="url(#fb)"/>
|
|
75
|
+
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
76
|
+
<rect x="953.4" y="182" width="3.2" height="22" fill="#9c7cff" opacity=".5" filter="url(#fb)"/>
|
|
77
|
+
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
78
|
+
</g>
|
|
79
|
+
<circle cx="955" cy="193" r="30" fill="url(#kg)"><animate attributeName="opacity" values=".5;.95;.5" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
80
|
+
<circle cx="955" cy="193" r="16.2" fill="none" stroke="#7763ff" stroke-opacity=".18" stroke-width="2.6"/>
|
|
81
|
+
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#fff" stroke-opacity=".94"/>
|
|
82
|
+
</svg>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="b" x1="0" y1="0" x2="1" y2=".6"><stop offset="0" stop-color="#05070f"/><stop offset=".5" stop-color="#0e1638"/><stop offset="1" stop-color="#241a4e"/></linearGradient>
|
|
4
|
+
<linearGradient id="tk" x1="0" y1="0" x2="1" y2=".25"><stop offset="0" stop-color="#03040a"/><stop offset=".22" stop-color="#071126"/><stop offset=".45" stop-color="#101d4c"/><stop offset=".7" stop-color="#302262"/><stop offset="1" stop-color="#5d35a0"/></linearGradient>
|
|
5
|
+
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#000" stop-opacity=".28"/><stop offset=".42" stop-color="#000" stop-opacity="0"/><stop offset="1" stop-color="#a871ff" stop-opacity=".12"/></linearGradient>
|
|
6
|
+
<radialGradient id="or"><stop offset="0" stop-color="#5282ff" stop-opacity=".14"/><stop offset="1" stop-color="#5282ff" stop-opacity="0"/></radialGradient>
|
|
7
|
+
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".96"/><stop offset=".11" stop-color="#bcbdff" stop-opacity=".8"/><stop offset=".28" stop-color="#6a57ff" stop-opacity=".5"/><stop offset=".49" stop-color="#691fff" stop-opacity=".2"/><stop offset=".74" stop-color="#691fff" stop-opacity="0"/></radialGradient>
|
|
8
|
+
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#64a0ff" stop-opacity="0"/><stop offset=".4" stop-color="#64a0ff" stop-opacity=".42"/><stop offset=".55" stop-color="#f1ecff"/><stop offset=".72" stop-color="#c152ff" stop-opacity=".65"/><stop offset="1" stop-color="#c152ff" stop-opacity="0"/></linearGradient>
|
|
9
|
+
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#c4beff" stop-opacity="0"/><stop offset=".5" stop-color="#c4beff" stop-opacity=".84"/><stop offset="1" stop-color="#c4beff" stop-opacity="0"/></linearGradient>
|
|
10
|
+
<radialGradient id="ho"><stop offset="0" stop-color="#cfd6ff" stop-opacity=".5"/><stop offset="1" stop-color="#cfd6ff" stop-opacity="0"/></radialGradient>
|
|
11
|
+
<radialGradient id="kg"><stop offset="0" stop-color="#874eff" stop-opacity=".55"/><stop offset="1" stop-color="#874eff" stop-opacity="0"/></radialGradient>
|
|
12
|
+
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#4876ff" stop-opacity="0"/><stop offset=".68" stop-color="#7087ff" stop-opacity=".5"/><stop offset="1" stop-color="#ecdeff" stop-opacity=".7"/></linearGradient>
|
|
13
|
+
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
14
|
+
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="12" width="2" height="30" fill="#a9c2ff" opacity=".05"/><rect x="16" width="2" height="30" fill="#a9c2ff" opacity=".09"/><rect x="20" width="2" height="30" fill="#a9c2ff" opacity=".13"/><rect x="24" width="2" height="30" fill="#a9c2ff" opacity=".17"/><rect x="28" width="2" height="30" fill="#a9c2ff" opacity=".19"/><rect x="32" width="2" height="30" fill="#a9c2ff" opacity=".2"/><rect x="36" width="2" height="30" fill="#a9c2ff" opacity=".31"/><rect x="40" width="2" height="30" fill="#a9c2ff" opacity=".56"/><rect x="44" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="48" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="52" width="2" height="30" fill="#a9c2ff" opacity=".63"/><rect x="56" width="2" height="30" fill="#a9c2ff" opacity=".51"/><rect x="60" width="2" height="30" fill="#e8eaff" opacity=".54"/></pattern>
|
|
15
|
+
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
16
|
+
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
17
|
+
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
18
|
+
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
19
|
+
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
20
|
+
</defs>
|
|
21
|
+
<rect width="1200" height="260" fill="url(#b)"/>
|
|
22
|
+
<g fill="#c9d4ff"><circle cx="636" cy="46" r="1.5" opacity=".55"/><circle cx="402" cy="247" r="1.2" opacity=".35"/><circle cx="1174" cy="50" r="1.3" opacity=".4"/></g>
|
|
23
|
+
<text x="56" y="102" font-size="38" font-weight="700" fill="#f0f3fa">DSH Model Think Level</text>
|
|
24
|
+
<text x="56" y="142" font-size="16" fill="#9aa5c0">第三方模型的思考档位、视觉标识与请求头,</text>
|
|
25
|
+
<text x="56" y="166" font-size="16" fill="#9aa5c0">直接在官方「模型」页内编辑,一键自动适配。</text>
|
|
26
|
+
<g font-size="12.5">
|
|
27
|
+
<rect x="56" y="192" width="150" height="27" rx="13.5" fill="#5d83ff"/><text x="131" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness 插件</text>
|
|
28
|
+
<rect x="218" y="192" width="104" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="270" y="210" text-anchor="middle" fill="#c6d2f2">一键自动适配</text>
|
|
29
|
+
<rect x="334" y="192" width="140" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="404" y="210" text-anchor="middle" fill="#c6d2f2">供应商 → 模型选择器</text>
|
|
30
|
+
</g>
|
|
31
|
+
<rect x="690" y="24" width="450" height="212" rx="13" fill="#161b2c" stroke="#273049"/>
|
|
32
|
+
<text x="714" y="54" font-size="15" font-weight="700" fill="#f0f3fa">思考强度</text>
|
|
33
|
+
<text x="1116" y="54" font-size="13" font-weight="600" fill="#7d97ff" text-anchor="end">自动适配</text>
|
|
34
|
+
<g font-size="13" fill="#c6cddc">
|
|
35
|
+
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
36
|
+
</g>
|
|
37
|
+
<g fill="#0f1526" stroke="#3a4666">
|
|
38
|
+
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
39
|
+
</g>
|
|
40
|
+
<g fill="#0f1526" stroke="#2c3554">
|
|
41
|
+
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
42
|
+
</g>
|
|
43
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
44
|
+
<rect x="714" y="65" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
45
|
+
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
46
|
+
<text x="822" y="78" font-size="12.5" fill="#e8ecf6">off</text></g>
|
|
47
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
48
|
+
<rect x="714" y="93" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
49
|
+
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
50
|
+
<text x="822" y="106" font-size="12.5" fill="#e8ecf6">low</text></g>
|
|
51
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
52
|
+
<rect x="714" y="121" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
53
|
+
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
54
|
+
<text x="822" y="134" font-size="12.5" fill="#e8ecf6">high</text></g>
|
|
55
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
56
|
+
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#39435f" stroke-dasharray="4 3"/>
|
|
57
|
+
<text x="728" y="156.5" font-size="11" fill="#97a2c4">上下文窗口 1,048,576 · 最大输出 128,000</text></g>
|
|
58
|
+
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#6f42ff" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.28;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
59
|
+
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#0c1137" opacity=".35" filter="url(#f3)"/>
|
|
60
|
+
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#tk)"/>
|
|
61
|
+
<rect x="716" y="179" width="280" height="1.2" fill="#bdc7ff" opacity=".15"/>
|
|
62
|
+
<rect x="716" y="206" width="280" height="1.2" fill="#000" opacity=".55"/>
|
|
63
|
+
<ellipse cx="765" cy="191" rx="60" ry="14" fill="url(#or)"/>
|
|
64
|
+
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
65
|
+
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
66
|
+
<rect x="714" y="178" width="284" height="30" fill="#2a38af" opacity=".26"/>
|
|
67
|
+
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
68
|
+
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
69
|
+
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
70
|
+
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
71
|
+
</g></g>
|
|
72
|
+
<g clip-path="url(#tc)">
|
|
73
|
+
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
74
|
+
<rect x="928" y="191.7" width="54" height="2.6" fill="#9b7cff" opacity=".5" filter="url(#fb)"/>
|
|
75
|
+
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
76
|
+
<rect x="953.4" y="182" width="3.2" height="22" fill="#9c7cff" opacity=".5" filter="url(#fb)"/>
|
|
77
|
+
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
78
|
+
</g>
|
|
79
|
+
<circle cx="955" cy="193" r="30" fill="url(#kg)"><animate attributeName="opacity" values=".5;.95;.5" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
80
|
+
<circle cx="955" cy="193" r="16.2" fill="none" stroke="#7763ff" stroke-opacity=".18" stroke-width="2.6"/>
|
|
81
|
+
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#fff" stroke-opacity=".94"/>
|
|
82
|
+
</svg>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="b" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#edf2fd"/></linearGradient>
|
|
4
|
+
<linearGradient id="gt" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff"/><stop offset=".18" stop-color="#d7eaff"/><stop offset=".54" stop-color="#75afea"/><stop offset="1" stop-color="#0751ad"/></linearGradient>
|
|
5
|
+
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff" stop-opacity=".48"/><stop offset=".34" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#1765c9" stop-opacity=".07"/></linearGradient>
|
|
6
|
+
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".98"/><stop offset=".13" stop-color="#cce7ff" stop-opacity=".88"/><stop offset=".31" stop-color="#5ba2f1" stop-opacity=".48"/><stop offset=".53" stop-color="#256fcf" stop-opacity=".16"/><stop offset=".75" stop-color="#256fcf" stop-opacity="0"/></radialGradient>
|
|
7
|
+
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#74b1f4" stop-opacity="0"/><stop offset=".4" stop-color="#74b1f4" stop-opacity=".34"/><stop offset=".55" stop-color="#fff"/><stop offset=".72" stop-color="#428be1" stop-opacity=".58"/><stop offset="1" stop-color="#428be1" stop-opacity="0"/></linearGradient>
|
|
8
|
+
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset=".5" stop-color="#fff" stop-opacity=".94"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient>
|
|
9
|
+
<radialGradient id="ho"><stop offset="0" stop-color="#eaf3ff" stop-opacity=".7"/><stop offset="1" stop-color="#eaf3ff" stop-opacity="0"/></radialGradient>
|
|
10
|
+
<radialGradient id="kg"><stop offset="0" stop-color="#3076cf" stop-opacity=".3"/><stop offset="1" stop-color="#3076cf" stop-opacity="0"/></radialGradient>
|
|
11
|
+
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#185eb8" stop-opacity="0"/><stop offset=".68" stop-color="#246cca" stop-opacity=".4"/><stop offset="1" stop-color="#67aff8" stop-opacity=".6"/></linearGradient>
|
|
12
|
+
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
13
|
+
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="16" width="2" height="30" fill="#65bef4" opacity=".05"/><rect x="20" width="2" height="30" fill="#65bef4" opacity=".07"/><rect x="24" width="2" height="30" fill="#65bef4" opacity=".09"/><rect x="28" width="2" height="30" fill="#65bef4" opacity=".1"/><rect x="32" width="2" height="30" fill="#65bef4" opacity=".11"/><rect x="36" width="2" height="30" fill="#65bef4" opacity=".17"/><rect x="40" width="2" height="30" fill="#65bef4" opacity=".3"/><rect x="44" width="2" height="30" fill="#65bef4" opacity=".45"/><rect x="48" width="2" height="30" fill="#65bef4" opacity=".45"/><rect x="52" width="2" height="30" fill="#65bef4" opacity=".34"/><rect x="56" width="2" height="30" fill="#65bef4" opacity=".27"/><rect x="60" width="2" height="30" fill="#65bef4" opacity=".29"/></pattern>
|
|
14
|
+
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
15
|
+
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
16
|
+
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
17
|
+
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
18
|
+
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
19
|
+
</defs>
|
|
20
|
+
<rect width="1200" height="260" fill="url(#b)"/>
|
|
21
|
+
<text x="56" y="102" font-size="38" font-weight="700" fill="#15171b">DSH Model Think Level</text>
|
|
22
|
+
<text x="56" y="142" font-size="16" fill="#5c6470">第三方模型的思考档位、视觉标识与请求头,</text>
|
|
23
|
+
<text x="56" y="166" font-size="16" fill="#5c6470">直接在官方「模型」页内编辑,一键自动适配。</text>
|
|
24
|
+
<g font-size="12.5">
|
|
25
|
+
<rect x="56" y="192" width="150" height="27" rx="13.5" fill="#4d6bfe"/><text x="131" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness 插件</text>
|
|
26
|
+
<rect x="218" y="192" width="104" height="27" rx="13.5" fill="#fff" stroke="#bcc9f5"/><text x="270" y="210" text-anchor="middle" fill="#3d55d8">一键自动适配</text>
|
|
27
|
+
<rect x="334" y="192" width="140" height="27" rx="13.5" fill="#fff" stroke="#bcc9f5"/><text x="404" y="210" text-anchor="middle" fill="#3d55d8">供应商 → 模型选择器</text>
|
|
28
|
+
</g>
|
|
29
|
+
<rect x="690" y="24" width="450" height="212" rx="13" fill="#f6f8f7" stroke="#e2e6e5"/>
|
|
30
|
+
<text x="714" y="54" font-size="15" font-weight="700" fill="#15171b">思考强度</text>
|
|
31
|
+
<text x="1116" y="54" font-size="13" font-weight="600" fill="#4d6bfe" text-anchor="end">自动适配</text>
|
|
32
|
+
<g font-size="13" fill="#3c434c">
|
|
33
|
+
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
34
|
+
</g>
|
|
35
|
+
<g fill="#fff" stroke="#b9c1cc">
|
|
36
|
+
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
37
|
+
</g>
|
|
38
|
+
<g fill="#fbfcfe" stroke="#d7dce2">
|
|
39
|
+
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
40
|
+
</g>
|
|
41
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
42
|
+
<rect x="714" y="65" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
43
|
+
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
44
|
+
<text x="822" y="78" font-size="12.5" fill="#1c232b">off</text></g>
|
|
45
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
46
|
+
<rect x="714" y="93" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
47
|
+
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
48
|
+
<text x="822" y="106" font-size="12.5" fill="#1c232b">low</text></g>
|
|
49
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
50
|
+
<rect x="714" y="121" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
51
|
+
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
52
|
+
<text x="822" y="134" font-size="12.5" fill="#1c232b">high</text></g>
|
|
53
|
+
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
54
|
+
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#c6cdd9" stroke-dasharray="4 3"/>
|
|
55
|
+
<text x="728" y="156.5" font-size="11" fill="#6b7480">上下文窗口 1,048,576 · 最大输出 128,000</text></g>
|
|
56
|
+
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#1f69c9" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.2;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
57
|
+
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#3065a5" opacity=".16" filter="url(#f3)"/>
|
|
58
|
+
<rect x="714" y="178" width="284" height="30" rx="15" fill="#e5f0ff"/>
|
|
59
|
+
<rect x="716" y="179" width="280" height="1.4" rx=".7" fill="#fff" opacity=".9"/>
|
|
60
|
+
<rect x="715" y="179" width="240" height="28" rx="14" fill="url(#gt)"/>
|
|
61
|
+
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
62
|
+
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
63
|
+
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
64
|
+
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
65
|
+
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
66
|
+
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
67
|
+
</g></g>
|
|
68
|
+
<g clip-path="url(#tc)">
|
|
69
|
+
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
70
|
+
<rect x="928" y="191.7" width="54" height="2.6" fill="#3a85de" opacity=".45" filter="url(#fb)"/>
|
|
71
|
+
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
72
|
+
<rect x="953.4" y="182" width="3.2" height="22" fill="#4089e0" opacity=".4" filter="url(#fb)"/>
|
|
73
|
+
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
74
|
+
</g>
|
|
75
|
+
<circle cx="955" cy="193" r="26" fill="url(#kg)"><animate attributeName="opacity" values=".55;1;.55" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
76
|
+
<circle cx="955" cy="193" r="15.6" fill="none" stroke="#3a7ccf" stroke-opacity=".09" stroke-width="2"/>
|
|
77
|
+
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#7ea0c5" stroke-opacity=".32"/>
|
|
78
|
+
</svg>
|