|
|
|
@ -207,6 +207,7 @@ func embeddings(c *gin.Context) {
|
|
|
|
proxy := httputil.NewSingleHostReverseProxy(remote)
|
|
|
|
proxy := httputil.NewSingleHostReverseProxy(remote)
|
|
|
|
newReqBody, err := json.Marshal(chatRequest)
|
|
|
|
newReqBody, err := json.Marshal(chatRequest)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Printf("http request err: %v", err)
|
|
|
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
|
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -239,6 +240,7 @@ func embeddings(c *gin.Context) {
|
|
|
|
var chatResponse ChatResponse
|
|
|
|
var chatResponse ChatResponse
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Printf("读取返回数据出错: %v", err)
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
json.Unmarshal(body, &chatResponse)
|
|
|
|
json.Unmarshal(body, &chatResponse)
|
|
|
|
@ -287,6 +289,7 @@ func completions(c *gin.Context) {
|
|
|
|
proxy := httputil.NewSingleHostReverseProxy(remote)
|
|
|
|
proxy := httputil.NewSingleHostReverseProxy(remote)
|
|
|
|
newReqBody, err := json.Marshal(chatRequest)
|
|
|
|
newReqBody, err := json.Marshal(chatRequest)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Printf("http request err: %v", err)
|
|
|
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
|
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -311,7 +314,10 @@ func completions(c *gin.Context) {
|
|
|
|
req.Body = ioutil.NopCloser(bytes.NewReader(newReqBody))
|
|
|
|
req.Body = ioutil.NopCloser(bytes.NewReader(newReqBody))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sss, err := json.Marshal(chatRequest)
|
|
|
|
sss, err := json.Marshal(chatRequest)
|
|
|
|
log.Printf("开始处理返回逻辑 %d", string(sss))
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Printf("chatRequest 转化出错 %v", err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Printf("开始处理返回逻辑: %v", string(sss))
|
|
|
|
if chatRequest.Stream {
|
|
|
|
if chatRequest.Stream {
|
|
|
|
// 流式回应,处理
|
|
|
|
// 流式回应,处理
|
|
|
|
proxy.ModifyResponse = func(resp *http.Response) error {
|
|
|
|
proxy.ModifyResponse = func(resp *http.Response) error {
|
|
|
|
@ -329,7 +335,7 @@ func completions(c *gin.Context) {
|
|
|
|
if err == io.EOF {
|
|
|
|
if err == io.EOF {
|
|
|
|
break
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
log.Printf("httpError1 %v", err.Error())
|
|
|
|
log.Printf("流式回应,处理 err %v:", err.Error())
|
|
|
|
break
|
|
|
|
break
|
|
|
|
//return err
|
|
|
|
//return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -338,7 +344,6 @@ func completions(c *gin.Context) {
|
|
|
|
var trimStr = strings.Trim(string(chunk), "data: ")
|
|
|
|
var trimStr = strings.Trim(string(chunk), "data: ")
|
|
|
|
if trimStr != "\n" {
|
|
|
|
if trimStr != "\n" {
|
|
|
|
json.Unmarshal([]byte(trimStr), &chatResponse)
|
|
|
|
json.Unmarshal([]byte(trimStr), &chatResponse)
|
|
|
|
//log.Printf("trimStr:" + trimStr)
|
|
|
|
|
|
|
|
if chatResponse.Choices != nil {
|
|
|
|
if chatResponse.Choices != nil {
|
|
|
|
reqContent += chatResponse.Choices[0].Delta.Content
|
|
|
|
reqContent += chatResponse.Choices[0].Delta.Content
|
|
|
|
chatRequestId = chatResponse.Id
|
|
|
|
chatRequestId = chatResponse.Id
|
|
|
|
@ -347,7 +352,7 @@ func completions(c *gin.Context) {
|
|
|
|
// 写回数据
|
|
|
|
// 写回数据
|
|
|
|
_, err = c.Writer.Write([]byte(string(chunk) + "\n"))
|
|
|
|
_, err = c.Writer.Write([]byte(string(chunk) + "\n"))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("httpError2 %v", err.Error())
|
|
|
|
log.Printf("写回数据 err: %v", err.Error())
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
c.Writer.(http.Flusher).Flush()
|
|
|
|
c.Writer.(http.Flusher).Flush()
|
|
|
|
@ -372,6 +377,7 @@ func completions(c *gin.Context) {
|
|
|
|
var chatResponse ChatResponse
|
|
|
|
var chatResponse ChatResponse
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Printf("非流式回应,处理 err: %v", err)
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
json.Unmarshal(body, &chatResponse)
|
|
|
|
json.Unmarshal(body, &chatResponse)
|
|
|
|
@ -464,6 +470,7 @@ func checkKeyMid() gin.HandlerFunc {
|
|
|
|
log.Printf("key: %v", key)
|
|
|
|
log.Printf("key: %v", key)
|
|
|
|
msg, err := checkKeyAndTimeCount(key)
|
|
|
|
msg, err := checkKeyAndTimeCount(key)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Printf("checkKeyMid err: %v", err)
|
|
|
|
c.AbortWithStatusJSON(msg, gin.H{"code": err.Error()})
|
|
|
|
c.AbortWithStatusJSON(msg, gin.H{"code": err.Error()})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -489,7 +496,7 @@ func main() {
|
|
|
|
|
|
|
|
|
|
|
|
r := gin.Default()
|
|
|
|
r := gin.Default()
|
|
|
|
|
|
|
|
|
|
|
|
//r.GET("/dashboard/billing/credit_grants", checkKeyMid(), balance)
|
|
|
|
r.GET("/dashboard/billing/credit_grants", checkKeyMid(), balance)
|
|
|
|
|
|
|
|
|
|
|
|
r.GET("/v1/models", handleGetModels)
|
|
|
|
r.GET("/v1/models", handleGetModels)
|
|
|
|
r.OPTIONS("/v1/*path", handleOptions)
|
|
|
|
r.OPTIONS("/v1/*path", handleOptions)
|
|
|
|
@ -557,5 +564,13 @@ func main() {
|
|
|
|
|
|
|
|
|
|
|
|
//r.Run("127.0.0.1:8080")
|
|
|
|
//r.Run("127.0.0.1:8080")
|
|
|
|
//docker下使用
|
|
|
|
//docker下使用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义一个GET请求测试接口
|
|
|
|
|
|
|
|
r.GET("/ping", func(c *gin.Context) {
|
|
|
|
|
|
|
|
c.JSON(200, gin.H{
|
|
|
|
|
|
|
|
"message": "pong from api2gpt",
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
r.Run("0.0.0.0:8080")
|
|
|
|
r.Run("0.0.0.0:8080")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|