coai/globals/variables.go
Deng Junhai afb13dd545 feat: support max timeout env (#175)
Co-Authored-By: Minghan Zhang <112773885+zmh-program@users.noreply.github.com>
2024-06-30 02:14:59 +08:00

167 lines
5.0 KiB
Go

package globals
import (
"net/url"
"strings"
"time"
"github.com/gin-gonic/gin"
)
const ChatMaxThread = 5
const AnonymousMaxThread = 1
var HttpMaxTimeout = 30 * time.Minute
var AllowedOrigins []string
var DebugMode bool
var NotifyUrl = ""
var ArticlePermissionGroup []string
var GenerationPermissionGroup []string
var CacheAcceptedModels []string
var CacheAcceptedExpire int64
var CacheAcceptedSize int64
var AcceptImageStore bool
var CloseRegistration bool
var CloseRelay bool
var SearchEndpoint string
var SearchCrop bool
var SearchCropLength int
var SearchEngines string // e.g. "google,bing"
var SearchImageProxy string // e.g. "True", "False"
var SearchSafeSearch int // e.g. 0: None, 1: Moderation, 2: Strict
func OriginIsAllowed(uri string) bool {
if len(AllowedOrigins) == 0 {
// if allowed origins is empty, allow all origins
return true
}
instance, _ := url.Parse(uri)
if instance == nil {
return false
}
if instance.Hostname() == "localhost" || instance.Scheme == "file" {
return true
}
if strings.HasPrefix(instance.Host, "www.") {
instance.Host = instance.Host[4:]
}
return in(instance.Host, AllowedOrigins)
}
func OriginIsOpen(c *gin.Context) bool {
return strings.HasPrefix(c.Request.URL.Path, "/v1") || strings.HasPrefix(c.Request.URL.Path, "/dashboard") || strings.HasPrefix(c.Request.URL.Path, "/mj")
}
const (
GPT3Turbo = "gpt-3.5-turbo"
GPT3TurboInstruct = "gpt-3.5-turbo-instruct"
GPT3Turbo0613 = "gpt-3.5-turbo-0613"
GPT3Turbo0301 = "gpt-3.5-turbo-0301"
GPT3Turbo1106 = "gpt-3.5-turbo-1106"
GPT3Turbo0125 = "gpt-3.5-turbo-0125"
GPT3Turbo16k = "gpt-3.5-turbo-16k"
GPT3Turbo16k0613 = "gpt-3.5-turbo-16k-0613"
GPT3Turbo16k0301 = "gpt-3.5-turbo-16k-0301"
GPT4 = "gpt-4"
GPT4All = "gpt-4-all"
GPT4Vision = "gpt-4-v"
GPT4Dalle = "gpt-4-dalle"
GPT40314 = "gpt-4-0314"
GPT40613 = "gpt-4-0613"
GPT41106Preview = "gpt-4-1106-preview"
GPT40125Preview = "gpt-4-0125-preview"
GPT4TurboPreview = "gpt-4-turbo-preview"
GPT4VisionPreview = "gpt-4-vision-preview"
GPT4Turbo = "gpt-4-turbo"
GPT4Turbo20240409 = "gpt-4-turbo-2024-04-09"
GPT41106VisionPreview = "gpt-4-1106-vision-preview"
GPT432k = "gpt-4-32k"
GPT432k0314 = "gpt-4-32k-0314"
GPT432k0613 = "gpt-4-32k-0613"
GPT4O = "gpt-4o"
GPT4O20240513 = "gpt-4o-2024-05-13"
Dalle = "dalle"
Dalle2 = "dall-e-2"
Dalle3 = "dall-e-3"
Claude1 = "claude-1"
Claude1100k = "claude-1.3"
Claude2 = "claude-1-100k"
Claude2100k = "claude-2"
Claude2200k = "claude-2.1"
Claude3 = "claude-3"
ClaudeSlack = "claude-slack"
SparkDesk = "spark-desk-v1.5"
SparkDeskV2 = "spark-desk-v2"
SparkDeskV3 = "spark-desk-v3"
SparkDeskV35 = "spark-desk-v3.5"
ChatBison001 = "chat-bison-001"
GeminiPro = "gemini-pro"
GeminiProVision = "gemini-pro-vision"
Gemini15ProLatest = "gemini-1.5-pro-latest"
Gemini15FlashLatest = "gemini-1.5-flash-latest"
BingCreative = "bing-creative"
BingBalanced = "bing-balanced"
BingPrecise = "bing-precise"
ZhiPuChatGLM4 = "glm-4"
ZhiPuChatGLM4Vision = "glm-4v"
ZhiPuChatGLM3Turbo = "glm-3-turbo"
ZhiPuChatGLMTurbo = "zhipu-chatglm-turbo"
ZhiPuChatGLMPro = "zhipu-chatglm-pro"
ZhiPuChatGLMStd = "zhipu-chatglm-std"
ZhiPuChatGLMLite = "zhipu-chatglm-lite"
QwenTurbo = "qwen-turbo"
QwenPlus = "qwen-plus"
QwenTurboNet = "qwen-turbo-net"
QwenPlusNet = "qwen-plus-net"
Midjourney = "midjourney"
MidjourneyFast = "midjourney-fast"
MidjourneyTurbo = "midjourney-turbo"
Hunyuan = "hunyuan"
GPT360V9 = "360-gpt-v9"
Baichuan53B = "baichuan-53b"
SkylarkLite = "skylark-lite-public"
SkylarkPlus = "skylark-plus-public"
SkylarkPro = "skylark-pro-public"
SkylarkChat = "skylark-chat"
)
var OpenAIDalleModels = []string{
Dalle, Dalle2, Dalle3,
}
var VisionModels = []string{
GPT4VisionPreview, GPT41106VisionPreview, GPT4Turbo, GPT4Turbo20240409, GPT4O, GPT4O20240513, // openai
GeminiProVision, Gemini15ProLatest, Gemini15FlashLatest, // gemini
Claude3, // anthropic
ZhiPuChatGLM4Vision, // chatglm
}
var VisionSkipModels = []string{
GPT4TurboPreview,
}
func in(value string, slice []string) bool {
for _, item := range slice {
if item == value || strings.Contains(value, item) {
return true
}
}
return false
}
func IsOpenAIDalleModel(model string) bool {
// using image generation api if model is in dalle models
return in(model, OpenAIDalleModels) && !strings.Contains(model, "gpt-4-dalle")
}
func IsVisionModel(model string) bool {
return in(model, VisionModels) && !in(model, VisionSkipModels)
}