# Pi + DeepSeek v4 Smoke Lane **Status:** PASS — lane confirmed working **Owner:** Opencode / Z.ai Integrator **Date:** 24.may.2026 ## Official API Reference - Docs: - Base URL (OpenAI format): `https://api.deepseek.com` - Base URL (Anthropic format): `https://api.deepseek.com/anthropic` - API keys: - Models & pricing: ### Available Models (from `pi --provider deepseek --list-models`) | pi model ID | API model ID | Context | Max output | Thinking | Images | | ----------------- | ----------------- | ------- | ---------- | -------- | ------ | | deepseek-v4-flash | deepseek-v4-flash | 1M | 384K | yes | no | | deepseek-v4-pro | deepseek-v4-pro | 1M | 384K | yes | no | Deprecated names (retired 24.jul.2026): `deepseek-chat` → v4-flash non-thinking, `deepseek-reasoner` → v4-flash thinking. ### Pricing (per 1M tokens) | Model | Input (cache hit) | Input (cache miss) | Output | | ----------------- | ----------------- | ------------------ | ------- | | deepseek-v4-flash | $0.0028 | $0.14 | $0.28 | | deepseek-v4-pro | $0.003625\* | $0.435\* | $0.87\* | \* 75% promotional discount ends 31.may.2026, then 1/4 of original. ## Key Management ### Environment variable (recommended for smoke tests) ```sh export DEEPSEEK_API_KEY="" pi --provider deepseek ... unset DEEPSEEK_API_KEY ``` ### pi auth.json (persistent) ```sh pi --provider deepseek --api-key "" ``` This writes to `~/.pi/agent/auth.json`. Pi prefers auth.json over env vars when both exist. ### Per-command (no env, no file) ```sh pi --provider deepseek --api-key "" -p "hello" ``` ### pi provider prefix shorthand ```sh pi --model deepseek/deepseek-v4-flash -p "hello" ``` The `provider/model` prefix selects the provider automatically — no `--provider` flag needed. ## Smoke Result - **Provider:** `deepseek` - **Model:** `deepseek-v4-flash` - **API:** `openai-completions` - **Content:** `COLIBRI_SMOKE_OK` confirmed - **Thinking:** enabled (v4-flash defaults to thinking mode) - **Usage:** 3688 input tokens, 32 output tokens - **Cost:** $0.00052528 - **Event types:** `session`, `agent_start`, `turn_start`, `message_start`, `message_end`, `message_update`, `message_update` (many), `turn_end`, `agent_end` - **Capture:** `tmp/deepseek-v4-smoke.jsonl` - **Verdict:** PASS ## Confirmed Working Commands ```sh # List models DEEPSEEK_API_KEY="" pi --provider deepseek --list-models # One-shot JSONL smoke DEEPSEEK_API_KEY="" pi --provider deepseek --model deepseek-v4-flash -p --mode json "hello" # Shorthand (no --provider needed) DEEPSEEK_API_KEY="" pi --model deepseek/deepseek-v4-flash -p --mode json "hello" ``` ## Where to Replace the Test Key The test key used for the initial smoke has been rotated. To set up a permanent key, edit: ``` ~/.pi/agent/auth.json ``` Or export in your shell profile: ```sh export DEEPSEEK_API_KEY="" ``` ## Verifying Key Deletion / Revocation ### 1. Confirm the key is gone from pi ```sh cat ~/.pi/agent/auth.json ``` If empty `{}`, no stored key. If it contains a `deepseek` entry, remove it: ```sh # Back up first cp ~/.pi/agent/auth.json ~/.pi/agent/auth.json.bak # Edit to remove the deepseek entry, or wipe entirely: echo '{}' > ~/.pi/agent/auth.json ``` ### 2. Confirm the env var is unset ```sh echo "DEEPSEEK_API_KEY is set: ${DEEPSEEK_API_KEY:+yes}" ``` If blank, no env key. If still set: ```sh unset DEEPSEEK_API_KEY ``` ### 3. Confirm the revoked key is rejected by the API ```sh DEEPSEEK_API_KEY="" pi --provider deepseek --model deepseek-v4-flash -p "test" 2>&1 ``` Expected error: ``` 401 Authentication Fails, Your api key: ****XXXX is invalid ``` If you see `401`, the key is properly revoked at DeepSeek's side. ### 4. Confirm clean "no key" state ```sh pi --provider deepseek --model deepseek-v4-flash -p "test" 2>&1 ``` Expected error: ``` No API key found for deepseek. ``` If you see this, pi has no stored or env key for DeepSeek — fully clean. ### Error Reference | Scenario | Error message | | ---------------------------- | ------------------------------------------------------------- | | No key at all | `No API key found for deepseek.` | | Revoked / invalid key | `401 Authentication Fails, Your api key: ****XXXX is invalid` | | Rate limited (too many reqs) | `429 Rate limit reached...` | | Quota exhausted | `402 Insufficient balance` | ## Deletion Criteria - Lane confirmed in agent capability table - Colibri can consume pi JSONL events from this provider