File size: 1,778 Bytes
f137b9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f8b5696
f137b9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package handler

import (
	"bytes"
	"encoding/json"
	"io"
	"net/http"
	"os"
	"strings"
)

var deepseekToken = os.Getenv("DEEPSEEK_TOKEN")

var deepseekModels = map[string]bool{
	"deepseek":                   true,
	"deepseek-expert":             true,
	"deepseek-r1":                 true,
	"deepseek-search":             true,
	"deepseek-expert-r1":          true,
	"deepseek-expert-search":      true,
	"deepseek-r1-search":          true,
	"deepseek-expert-r1-search":   true,
	"deepseek-v4":                 true,
	"deepseek-v4-flash":           true,
	"deepseek-v4-pro":             true,
}

func IsDeepSeekModel(model string) bool {
	_, ok := deepseekModels[strings.ToLower(model)]
	return ok
}

func HandleDeepSeek(w http.ResponseWriter, r *http.Request, body []byte, apiKey string) {
	var req map[string]interface{}
	json.Unmarshal(body, &req)
	newBody, _ := json.Marshal(req)
	proxyReq, _ := http.NewRequest("POST", "https://chat.deepseek.com/api/v1/chat/completions", bytes.NewReader(newBody))
	proxyReq.Header.Set("Authorization", "Bearer "+deepseekToken)
	proxyReq.Header.Set("Content-Type", "application/json")
	proxyReq.Header.Set("User-Agent", "Mozilla/5.0")
	proxyReq.Header.Set("Referer", "https://chat.deepseek.com/")
	client := &http.Client{}
	resp, err := client.Do(proxyReq)
	if err != nil { http.Error(w, "DeepSeek error", 500); return }
	defer resp.Body.Close()
	respBody, _ := io.ReadAll(resp.Body)
	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(resp.StatusCode)
	w.Write(respBody)
	var result map[string]interface{}
	if json.Unmarshal(respBody, &result) == nil {
		if usage, ok := result["usage"].(map[string]interface{}); ok {
			if total, ok := usage["total_tokens"].(float64); ok {
				TrackUsage(apiKey, int(total))
			}
		}
	}
}