initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# DeepSeek API Nginx Proxy
|
||||
|
||||
All ShopProQuote AI features now use DeepSeek V4 Flash via the VPS `/deepseek/` proxy. The browser cannot call `api.deepseek.com` directly — the API key is server-side only.
|
||||
|
||||
## VPS Nginx Configuration
|
||||
|
||||
At `/etc/nginx/sites-enabled/shopproquote` on VPS (51.81.84.34):
|
||||
|
||||
```nginx
|
||||
location /deepseek/ {
|
||||
proxy_pass https://api.deepseek.com/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host api.deepseek.com;
|
||||
proxy_set_header Authorization "Bearer ${DEEPSEEK_API_KEY}";
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_ssl_server_name on;
|
||||
proxy_ssl_protocols TLSv1.2 TLSv1.3;
|
||||
proxy_read_timeout 120;
|
||||
}
|
||||
```
|
||||
|
||||
Key requirements:
|
||||
- `proxy_ssl_server_name on` is REQUIRED — without it, nginx fails with "SSL handshake failure: alert number 40"
|
||||
- `proxy_read_timeout 120` because model loading can take a few seconds
|
||||
- The `DEEPSEEK_API_KEY` comes from `/home/ray/.hermes/.env`
|
||||
- `proxy_ssl_protocols TLSv1.2 TLSv1.3` ensures compatibility with CloudFront
|
||||
|
||||
## Client-Side Usage
|
||||
|
||||
All SPQ AI features use this pattern:
|
||||
|
||||
```javascript
|
||||
const response = await fetch('/deepseek/v1/chat/completions', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
model: 'deepseek-v4-flash',
|
||||
messages: [
|
||||
{ role: 'system', content: systemPrompt },
|
||||
{ role: 'user', content: userMsg }
|
||||
],
|
||||
temperature: 0,
|
||||
thinking: { type: 'disabled' },
|
||||
max_tokens: 500
|
||||
})
|
||||
});
|
||||
const result = await response.json();
|
||||
const text = result.choices[0].message.content;
|
||||
```
|
||||
|
||||
## Cost & Thinking Mode
|
||||
|
||||
- `thinking: { type: 'disabled' }` keeps costs at the non-thinking rate: $0.14/M input, $0.28/M output
|
||||
- Typical AI Write call: ~400 tokens total → ~$0.0001
|
||||
- Appointment scan: ~2,000 input + ~500 output → ~$0.0004
|
||||
- Without `thinking: disabled`, thinking tokens 3-5x the output cost
|
||||
|
||||
## CSP
|
||||
|
||||
`connect-src 'self'` covers `/deepseek/` since it's same-origin. No CSP changes needed for DeepSeek specifically. For Tesseract.js / WASM / Web Worker CSP requirements, see `references/csp-wasm-libraries.md`.
|
||||
|
||||
## Testing
|
||||
|
||||
```bash
|
||||
curl -s -X POST https://shopproquote.graj-media.com/deepseek/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"Say OK"}],"max_tokens":50,"thinking":{"type":"disabled"}}'
|
||||
```
|
||||
Reference in New Issue
Block a user