kiloG / kilo-api /api.go
seishi1
removed imgs 2
9dcbf04
package kilo_api
import (
"fmt"
"github.com/gin-gonic/gin"
"kilo2api/common"
"kilo2api/common/config"
logger "kilo2api/common/loggger"
"kilo2api/cycletls"
"strings"
)
const (
baseURL = "https://kilocode.ai"
chatEndpoint = baseURL + "/api/claude/v1/messages"
openRouterEndpoint = baseURL + "/api/openrouter/chat/completions"
)
func MakeStreamChatRequest(c *gin.Context, client cycletls.CycleTLS, jsonData []byte, cookie string, modelInfo common.ModelInfo) (<-chan cycletls.SSEResponse, error) {
split := strings.Split(cookie, "=")
if len(split) >= 2 {
cookie = split[0]
}
headers := make(map[string]string)
endpoint := ""
if modelInfo.Source == "claude" {
endpoint = chatEndpoint
headers = map[string]string{
"User-Agent": "Ls/JS 0.37.0",
"Connection": "close",
"Accept": "application/json",
"Accept-Encoding": "gzip,deflate",
"Content-Type": "application/json",
"x-stainless-lang": "js",
"x-stainless-package-version": "0.37.0",
"x-stainless-os": "MacOS",
"x-stainless-arch": "arm64",
"x-stainless-runtime": "node",
"x-stainless-runtime-version": "v20.18.3",
"authorization": fmt.Sprintf("Bearer %s", cookie),
"anthropic-version": "2023-06-01",
"anthropic-beta": "prompt-caching-2024-07-31,output-128k-2025-02-19",
"x-stainless-retry-count": "0",
"x-stainless-timeout": "600000",
}
} else if modelInfo.Source == "openrouter" {
endpoint = openRouterEndpoint
headers = map[string]string{
"User-Agent": "La/JS 4.78.1",
"Connection": "close",
"Accept": "application/json",
"Accept-Encoding": "gzip,deflate",
"Content-Type": "application/json",
"x-stainless-lang": "js",
"x-stainless-package-version": "4.78.1",
"x-stainless-os": "MacOS",
"x-stainless-arch": "arm64",
"x-stainless-runtime": "node",
"x-stainless-runtime-version": "v20.18.3",
"authorization": fmt.Sprintf("Bearer %s", cookie),
"http-referer": "https://kilocode.ai",
"x-title": "Kilo Code",
"x-stainless-retry-count": "0",
}
}
options := cycletls.Options{
Timeout: 10 * 60 * 60,
Proxy: config.ProxyUrl, // 在每个请求中设置代理
Body: string(jsonData),
Method: "POST",
Headers: headers,
}
logger.Debug(c.Request.Context(), fmt.Sprintf("cookie: %v", cookie))
sseChan, err := client.DoSSE(endpoint, options, "POST")
if err != nil {
logger.Errorf(c, "Failed to make stream request: %v", err)
return nil, fmt.Errorf("Failed to make stream request: %v", err)
}
return sseChan, nil
}