pi-ds-files
DeepSeek Files API for Pi — upload images once, reuse file_id references in requests to deepseek-v4-flash-vision-exp, slash fewer bandwidth bills.
Package details
Install pi-ds-files from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-ds-files- Package
pi-ds-files- Version
0.1.0- Published
- Aug 21, 2026
- Downloads
- 143/mo · 25/wk
- Author
- siva-sub
- License
- MIT
- Types
- extension
- Size
- 41 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./extensions/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-ds-files
DeepSeek Files API for Pi. Upload an image once, reference it by file_id in
every later request to deepseek-v4-flash-vision-exp — instead of re-sending
base64 every time.
- Reuses the same image across requests (content-hash cache, no duplicate uploads)
- Bypasses the 32 MiB inline image limit (Files API accepts up to 64 MiB)
- Works automatically with the
deepseekprovider in pi - Zero runtime dependencies (Node built-ins only)
Install
pi install npm:pi-ds-files
Requires pi ≥ 0.6 and the DeepSeek API key already configured for the
deepseek provider (in ~/.pi/agent/models.json or ~/.pi/agent/auth.json,
or DEEPSEEK_API_KEY).
Add the vision model if you do not have it yet:
pi --list-models | grep vision-exp
How it works
image in provider payload (base64)
│
▼
pi.on("before_provider_request")
│
▼
hash(mime + bytes) ──► cache hit ──► reuse file_id
│
└────────────► cache miss ──► POST https://api.deepseek.com/files
(multipart, purpose=user_data)
│
▼
image block ──► { "type": "file", "file_id": "file-api-…" }
Only requests whose provider matches providerPatterns (default deepseek)
and model matches modelPatterns (default deepseek-v4-flash-vision-exp)
are rewritten. Everything else passes through untouched. If an upload fails,
the original inline image is kept — a request is never broken.
Commands
| Command | What it does |
|---|---|
/ds-files status |
Show config, cache size, active model |
/ds-files list [--limit N] [--order asc|desc] |
List uploaded files |
/ds-files upload <path> [--expires SECONDS] |
Upload an image, cache the file_id |
/ds-files delete <file_id> |
Delete a remote file |
/ds-files prune |
Drop expired/overflow cache entries |
/ds-files on / /ds-files off |
Enable/disable rewriting |
/ds-files cache <path> |
Point the cache at a custom file |
CLI
The package also installs a ds-files binary for scripting:
ds-files upload screenshot.png
ds-files upload big.png --expires 86400
ds-files list --limit 50
ds-files delete file-api-xxxxxxxxxxxxxxxx
ds-files status
Configuration
Config lives at ~/.pi/agent/extensions/pi-ds-files.json:
{
"enabled": true,
"providerPatterns": ["deepseek"],
"modelPatterns": ["deepseek-v4-flash-vision-exp"],
"maxCacheEntries": 500,
"defaultExpirySeconds": null,
"autoUpload": true,
"verbose": false
}
defaultExpirySeconds:null= permanent, or 3600–2592000 (1h–30d)autoUpload: whenfalse, cache hits still rewrite but new images stay inline- Cache file:
~/.pi/agent/pi-ds-files-cache.json(override withcachePathorPI_DS_FILES_CACHE)
Limits (DeepSeek Files API)
- Formats: JPEG, PNG, GIF, WebP
- Max upload: 64 MiB per file
- Storage: 25 GiB per user, 10,000 files
- Expiry: 1h–30d or permanent
Development
npm test
pi -e ./extensions/index.ts # quick load test
License
MIT