File size: 1,631 Bytes
0b327f4
 
 
 
 
 
 
 
 
 
 
 
 
a0f4acf
 
 
 
 
0b327f4
 
 
 
 
 
 
e31009b
0b327f4
 
 
 
 
 
 
 
 
 
 
 
 
e31009b
0b327f4
e31009b
0b327f4
 
e31009b
 
 
 
 
 
 
 
 
0b327f4
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
package handler

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

var openRouterKey = os.Getenv("OP_Rowproxy_key")

var openRouterModels = map[string]string{
	"deepseek-r1":        "deepseek/deepseek-r1:free",
	"deepseek-v3":        "deepseek/deepseek-v3.2:free",
	"deepseek-r1-0528":   "deepseek/deepseek-r1-0528:free",
	"deepseek-v4-flash":  "deepseek/deepseek-v4-flash:free",
	"deepseek-v4-pro":    "deepseek/deepseek-v4-pro:free",
}

func IsOpenRouterModel(model string) bool {
	_, ok := openRouterModels[model]
	return ok
}

func HandleOpenRouter(w http.ResponseWriter, r *http.Request, body []byte, apiKey string) {
	var req map[string]interface{}
	json.Unmarshal(body, &req)
	if m, ok := req["model"].(string); ok {
		if mapped, found := openRouterModels[m]; found {
			req["model"] = mapped
		}
	}
	newBody, _ := json.Marshal(req)
	proxyReq, _ := http.NewRequest("POST", "https://openrouter.ai/api/v1/chat/completions", bytes.NewReader(newBody))
	proxyReq.Header.Set("Authorization", "Bearer "+openRouterKey)
	proxyReq.Header.Set("Content-Type", "application/json")
	client := &http.Client{}
	resp, err := client.Do(proxyReq)
	if err != nil { http.Error(w, "OpenRouter 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))
			}
		}
	}
}