Просмотр исходного кода

feat: support channel ai.ls now (close #99)

JustSong 2 лет назад
Родитель
Сommit
3711f4a741
5 измененных файлов с 15 добавлено и 7 удалено
  1. 3 2
      README.md
  2. 2 0
      common/constants.go
  3. 2 2
      controller/relay-utils.go
  4. 7 3
      controller/relay.go
  5. 1 0
      web/src/constants/channel.constants.js

+ 3 - 2
README.md

@@ -51,9 +51,10 @@ _✨ All in one 的 OpenAI 接口,整合各种 API 访问方式,开箱即用
    + [x] **Azure OpenAI API**
    + [x] [API2D](https://api2d.com/r/197971)
    + [x] [OhMyGPT](https://aigptx.top?aff=uFpUl2Kf)
-   + [x] [CloseAI](https://console.openai-asia.com)
-   + [x] [OpenAI-SB](https://openai-sb.com)
+   + [x] [AI.LS](https://ai.ls)
    + [x] [OpenAI Max](https://openaimax.com)
+   + [x] [OpenAI-SB](https://openai-sb.com)
+   + [x] [CloseAI](https://console.openai-asia.com)
    + [x] 自定义渠道:例如使用自行搭建的 OpenAI 代理
 2. 支持通过**负载均衡**的方式访问多个渠道。
 3. 支持 **stream 模式**,可以通过流式传输实现打字机效果。

+ 2 - 0
common/constants.go

@@ -127,6 +127,7 @@ const (
 	ChannelTypeOpenAIMax = 6
 	ChannelTypeOhMyGPT   = 7
 	ChannelTypeCustom    = 8
+	ChannelTypeAILS      = 9
 )
 
 var ChannelBaseURLs = []string{
@@ -139,4 +140,5 @@ var ChannelBaseURLs = []string{
 	"https://api.openaimax.com",   // 6
 	"https://api.ohmygpt.com",     // 7
 	"",                            // 8
+	"https://api.caipacity.com",   // 9
 }

+ 2 - 2
controller/relay-utils.go

@@ -45,9 +45,9 @@ func countTokenMessages(messages []Message, model string) int {
 		tokenNum += tokensPerMessage
 		tokenNum += len(tokenEncoder.Encode(message.Content, nil, nil))
 		tokenNum += len(tokenEncoder.Encode(message.Role, nil, nil))
-		if message.Name != "" {
+		if message.Name != nil {
 			tokenNum += tokensPerName
-			tokenNum += len(tokenEncoder.Encode(message.Name, nil, nil))
+			tokenNum += len(tokenEncoder.Encode(*message.Name, nil, nil))
 		}
 	}
 	tokenNum += 3 // Every reply is primed with <|start|>assistant<|message|>

+ 7 - 3
controller/relay.go

@@ -14,9 +14,9 @@ import (
 )
 
 type Message struct {
-	Role    string `json:"role"`
-	Content string `json:"content"`
-	Name    string `json:"name"`
+	Role    string  `json:"role"`
+	Content string  `json:"content"`
+	Name    *string `json:"name,omitempty"`
 }
 
 type ChatRequest struct {
@@ -232,6 +232,10 @@ func relayHelper(c *gin.Context) *OpenAIErrorWithStatusCode {
 		go func() {
 			for scanner.Scan() {
 				data := scanner.Text()
+				if len(data) < 6 { // must be something wrong!
+					common.SysError("Invalid stream response: " + data)
+					continue
+				}
 				dataChan <- data
 				data = data[6:]
 				if !strings.HasPrefix(data, "[DONE]") {

+ 1 - 0
web/src/constants/channel.constants.js

@@ -6,5 +6,6 @@ export const CHANNEL_OPTIONS = [
   { key: 5, text: 'OpenAI-SB', value: 5, color: 'brown' },
   { key: 6, text: 'OpenAI Max', value: 6, color: 'violet' },
   { key: 7, text: 'OhMyGPT', value: 7, color: 'purple' },
+  { key: 9, text: 'AI.LS', value: 9, color: 'yellow' },
   { key: 8, text: '自定义', value: 8, color: 'pink' }
 ];