mirror of
https://github.com/NCBM/plyngent.git
synced 2026-11-07 07:17:54 +08:00
docs: document DeepSeek Anthropic convention support
This commit is contained in:
@@ -42,6 +42,7 @@ lmproto/openai/ ← OpenAI platform: Responses + chat (extends ba
|
||||
lmproto/anthropic/ ← Anthropic Messages: model, config, client
|
||||
lmproto/deepseek/openai_compat/ ← Extends base via inheritance + extra fields
|
||||
lmproto/deepseek/responses/ ← DeepSeek Responses client (extends OpenAI Responses client; SSE stops at terminal events, no `[DONE]`)
|
||||
lmproto/deepseek/anthropic/ ← DeepSeek Anthropic client (extends AnthropicClient; no `GET /models`)
|
||||
```
|
||||
|
||||
- **`openai_compatible/model.py`** — tagged chat messages (`SystemChatMessage`, `UserChatMessage`, …), tools, request/response, streaming chunks.
|
||||
@@ -51,15 +52,15 @@ lmproto/deepseek/responses/ ← DeepSeek Responses client (extends OpenAI Re
|
||||
- **`openai/client.py`** — platform `OpenAIClient` (`kind="responses"`): chat completions + `responses` / `get_response` / `delete_response`.
|
||||
- **`anthropic/model.py`** — Anthropic Messages request/response + SSE event models.
|
||||
- **`anthropic/client.py`** — `AnthropicClient` (`kind="messages"`): `POST /messages` + `GET /models`.
|
||||
- **DeepSeek** — `DeepseekOpenAIClient` (`kind="chat_completions"`); models add `reasoning_content`, `prefix`, `ThinkingOptions`. Config default model ids: `deepseek-v4-flash`, `deepseek-v4-pro`. `DeepseekResponsesClient` (`kind="responses"`) extends the OpenAI Responses client for `convention = "responses"` (SSE stops at terminal events — DeepSeek sends no `[DONE]`).
|
||||
- **DeepSeek** — `DeepseekOpenAIClient` (`kind="chat_completions"`); models add `reasoning_content`, `prefix`, `ThinkingOptions`. Config default model ids: `deepseek-v4-flash`, `deepseek-v4-pro`. `DeepseekResponsesClient` (`kind="responses"`) extends the OpenAI Responses client for `convention = "responses"` (SSE stops at terminal events — DeepSeek sends no `[DONE]`). `DeepseekAnthropicClient` (`kind="messages"`) extends `AnthropicClient` for `convention = "anthropic"` (base `https://api.deepseek.com/anthropic`; `models()` returns `[]`).
|
||||
|
||||
### Config (`config/`)
|
||||
|
||||
TOML load/store (`ConfigStore`): `[providers]` tagged union presets, `[database]` section. Default path via platformdirs. Providers may set `timeout` as a float or `{ connect, read }` (`HttpTimeoutConfig`); omitted → product defaults (10s connect / 600s read). `DeepseekProvider.convention` (Literal: `""`/`"openai"`/`"anthropic"`/`"responses"`) selects the DeepSeek API surface — `"responses"` → OpenAI Responses; a per-model `ModelConfig.convention` overrides it (empty = inherit).
|
||||
TOML load/store (`ConfigStore`): `[providers]` tagged union presets, `[database]` section. Default path via platformdirs. Providers may set `timeout` as a float or `{ connect, read }` (`HttpTimeoutConfig`); omitted → product defaults (10s connect / 600s read). `DeepseekProvider.convention` (Literal: `""`/`"openai"`/`"anthropic"`/`"responses"`) selects the DeepSeek API surface — `"responses"` → OpenAI Responses, `"anthropic"` → Anthropic Messages on `https://api.deepseek.com/anthropic` (default url follows the convention); a per-model `ModelConfig.convention` overrides it (empty = inherit).
|
||||
|
||||
### Runtime (`runtime/`)
|
||||
|
||||
`create_client(provider)` maps config `Provider` → protocol client by effective preset (model-level `preset`/`url` overrides apply). `normalize_http_timeout` feeds OpenAI-compatible configs and Anthropic. Mapping: `openai` → `OpenAIClient` (agent uses Responses), `openai-compatible` / `deepseek` → chat-completions clients (deepseek with effective `convention = "responses"` → `DeepseekResponsesClient`), `anthropic` → `AnthropicClient`.
|
||||
`create_client(provider)` maps config `Provider` → protocol client by effective preset (model-level `preset`/`url` overrides apply). `normalize_http_timeout` feeds OpenAI-compatible configs and Anthropic. Mapping: `openai` → `OpenAIClient` (agent uses Responses), `openai-compatible` / `deepseek` → chat-completions clients (deepseek with effective `convention = "responses"` → `DeepseekResponsesClient`, `"anthropic"` → `DeepseekAnthropicClient`), `anthropic` → `AnthropicClient`.
|
||||
|
||||
### Memory (`memory/`)
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ Supported provider presets today:
|
||||
|--------|------------------------|--------|
|
||||
| `openai` (default if `preset` omitted) | OpenAI **Responses** (`POST /responses`) | Default models `gpt-5.4` / `gpt-5.4-mini` / `gpt-5.4-nano` when `models` is omitted; optional `provider_tools` (default `web_search`) |
|
||||
| `openai-compatible` | Chat Completions | Generic hosts (vLLM, LiteLLM, proxies); requires `url` |
|
||||
| `deepseek` | Chat Completions (DeepSeek) | Default models `deepseek-v4-flash` / `deepseek-v4-pro` when `models` is omitted; set `convention = "responses"` (provider or per-model) to use the OpenAI **Responses** API (`POST /responses`, currently only `deepseek-v4-flash`) |
|
||||
| `deepseek` | Chat Completions (DeepSeek) | Default models `deepseek-v4-flash` / `deepseek-v4-pro` when `models` is omitted; set `convention = "responses"` (provider or per-model) to use the OpenAI **Responses** API (`POST /responses`, currently only `deepseek-v4-flash`), or `convention = "anthropic"` to use the Anthropic **Messages** API on `https://api.deepseek.com/anthropic` |
|
||||
| `anthropic` | Anthropic **Messages** (`POST /messages`) | Native tools/streaming; set `access_key_or_token` (API key) |
|
||||
|
||||
Model-level `preset` / `url` overrides on a catalog entry can route a single provider name to a different API (e.g. gateway + Anthropic model). DeepSeek models may also carry a per-model `convention` (empty = inherit the provider-level one), e.g. serve `deepseek-v4-flash` over Responses while `deepseek-v4-pro` stays Chat Completions:
|
||||
@@ -178,6 +178,14 @@ access_key_or_token = "sk-..."
|
||||
"deepseek-v4-pro" = { text = true }
|
||||
```
|
||||
|
||||
DeepSeek's Anthropic convention (`convention = "anthropic"`) points at
|
||||
`https://api.deepseek.com/anthropic` by default and is fully supported by the
|
||||
agent's Anthropic Messages path (tools, streaming, usage). DeepSeek maps
|
||||
`claude-opus*` model ids to `deepseek-v4-pro` and `claude-haiku*` /
|
||||
`claude-sonnet*` (and unknown ids) to `deepseek-v4-flash` server-side; real
|
||||
`deepseek-v4-*` ids pass through as-is. `GET /models` is not documented on that
|
||||
base, so model selection is config-driven.
|
||||
|
||||
If `[database]` is omitted (or SQLite `url` is unset/empty), chat uses a durable file under the user data dir (e.g. `~/.local/share/plyngent/chat.db` on Linux). Set `url = ":memory:"` for a true in-memory SQLite (CLI warns; no file; useful for tests).
|
||||
|
||||
## Chat
|
||||
|
||||
+4
-2
@@ -12,8 +12,10 @@
|
||||
- openai: Platform Responses + chat (``kind=responses``).
|
||||
- anthropic: Messages API (``kind=messages``).
|
||||
- deepseek
|
||||
- openai_compat
|
||||
- anthropic (convention extras; runtime uses openai_compat today)
|
||||
- openai_compat (``kind=chat_completions``)
|
||||
- responses (``kind=responses``; DeepSeek Responses API)
|
||||
- anthropic (``kind=messages``; DeepSeek Anthropic-compatible API on
|
||||
``https://api.deepseek.com/anthropic``)
|
||||
- utils: Common utilities for code architecture.
|
||||
- components: Utilities for class composition.
|
||||
- memory: Storage controlling for sessions and messages.
|
||||
|
||||
@@ -103,17 +103,20 @@ access_key_or_token = "sk-replace-me"
|
||||
# "claude-sonnet-4-20250514" = { text = true }
|
||||
# "claude-opus-4-20250514" = { text = true }
|
||||
|
||||
# --- DeepSeek (OpenAI-compatible convention; optional Responses API) ---
|
||||
# --- DeepSeek (OpenAI-compatible / Responses / Anthropic conventions) ---
|
||||
# Default models if [providers.*.models] is omitted: deepseek-v4-flash, deepseek-v4-pro.
|
||||
# [providers.deepseek]
|
||||
# preset = "deepseek"
|
||||
# access_key_or_token = "sk-replace-me"
|
||||
# # url defaults to https://api.deepseek.com when empty
|
||||
# # url defaults by convention: https://api.deepseek.com (chat/responses),
|
||||
# # https://api.deepseek.com/anthropic (anthropic). Set explicitly to override.
|
||||
# # Convention selects the API surface:
|
||||
# # "" / "openai" → OpenAI-compatible chat completions (default)
|
||||
# # "responses" → OpenAI Responses API (POST /responses; today only
|
||||
# # deepseek-v4-flash supports it)
|
||||
# # "anthropic" → legacy value, ignored (still chat completions)
|
||||
# # "anthropic" → Anthropic Messages API (POST /messages on
|
||||
# # https://api.deepseek.com/anthropic; claude-* model ids
|
||||
# # map server-side to deepseek-v4-*)
|
||||
# convention = "responses"
|
||||
# # Legacy location (parsed but ignored; prefer the typed field above):
|
||||
# # extras = { convention = "openai" }
|
||||
|
||||
Reference in New Issue
Block a user