add stable diffusion, llama models and add dashboard feature

This commit is contained in:
Zhang Minghan 2023-11-11 09:33:23 +08:00
parent 3cf84ec524
commit 16a74423be
9 changed files with 151 additions and 57 deletions

View File

@ -58,16 +58,19 @@
## 🔨 模型 | Models
- ChatGPT
- GPT-3.5-Turbo (_0613_, _0301_)
- GPT-3.5-Turbo (_0613_, _0301_, _1106_)
- GPT-3.5-Turbo-16k (_0613_, _0301_)
- GPT-3.5-Reverse (_text-davincci-002-render-sha_, _text-davincci-002-render-paid_)
- GPT-3.5-Turbo-Instruct
- GPT-4 (_0314_, _0613_)
- GPT-4 1106 Preview
- GPT-4-32k (_0314_, _0613_)
- GPT-4-Reverse (_gpt-4_, _**gpt-4v**_, _**dalle3**_)
- DALL-E 2
- DALL-E 3
- Claude
- Slack-Claude (unstable)
- Claude-instant
- Claude-2
- Claude-2-100k
- SparkDesk 讯飞星火
@ -84,12 +87,17 @@
- Balanced
- Precise
- ChatGLM
- Turbo
- Pro
- Std
- Lite
- DashScope Tongyi
- Qwen Plus (net)
- Qwen Turbo (net)
- Midjourney
- Stable Diffusion
- LLaMa 2 (70b, 13b, 7b)
- Code LLaMa (34b, 13b, 7b)
- More models are under development...

View File

@ -7,6 +7,9 @@ import (
var HitModels = []string{
globals.Claude1, globals.Claude1100k,
globals.Claude2, globals.Claude2100k,
globals.StableDiffusion,
globals.LLaMa270B, globals.LLaMa213B, globals.LLaMa27B,
globals.CodeLLaMa34B, globals.CodeLLaMa13B, globals.CodeLLaMa7B,
}
func (c *ChatInstance) Process(data string) string {
@ -27,6 +30,8 @@ func (c *ChatInstance) GetToken(model string) int {
return 5000
case globals.Claude2100k, globals.Claude1100k:
return 50000
case globals.LLaMa270B, globals.LLaMa213B, globals.LLaMa27B, globals.CodeLLaMa34B, globals.CodeLLaMa13B, globals.CodeLLaMa7B:
return 3000
default:
return 2500
}

View File

@ -8,7 +8,7 @@ import {
} from "@/utils/env.ts";
import { getMemory } from "@/utils/memory.ts";
export const version = "3.6.17";
export const version = "3.6.18";
export const dev: boolean = getDev();
export const deploy: boolean = true;
export let rest_api: string = getRestApi(deploy);
@ -39,15 +39,28 @@ export const supportModels: Model[] = [
{ id: "qwen-turbo-net", name: "通义千问 Turbo X", free: false, auth: true },
{ id: "qwen-turbo", name: "通义千问 Turbo", free: false, auth: true },
// zhipu models
{ id: "zhipu-chatglm-turbo", name: "ChatGLM Turbo 32k", free: false, auth: true },
// llama models
{ id: "llama-2-70b", name: "LLaMa-2 70B", free: false, auth: true },
{ id: "llama-2-13b", name: "LLaMa-2 13B", free: false, auth: true },
{ id: "llama-2-7b", name: "LLaMa-2 7B", free: false, auth: true },
{ id: "code-llama-34b", name: "Code LLaMa 34B", free: false, auth: true },
{ id: "code-llama-13b", name: "Code LLaMa 13B", free: false, auth: true },
{ id: "code-llama-7b", name: "Code LLaMa 7B", free: false, auth: true },
// drawing models
{ id: "stable-diffusion", name: "Stable Diffusion XL", free: false, auth: true },
// new bing
{ id: "bing-creative", name: "New Bing", free: true, auth: true },
// google palm2
{ id: "chat-bison-001", name: "Palm2", free: true, auth: true },
// zhipu models
{ id: "zhipu-chatglm-turbo", name: "ChatGLM Turbo 32k", free: false, auth: true },
// dalle models
{ id: "dalle", name: "DALLE2", free: true, auth: true },
// reverse models

View File

@ -23,6 +23,11 @@ func CanEnableModel(db *sql.DB, user *User, model string) bool {
return user != nil && user.GetQuota(db) >= 1
case globals.QwenTurbo, globals.QwenPlus, globals.QwenPlusNet, globals.QwenTurboNet:
return user != nil && user.GetQuota(db) >= 1
case globals.Midjourney, globals.StableDiffusion:
return user != nil && user.GetQuota(db) >= 1
case globals.LLaMa27B, globals.LLaMa213B, globals.LLaMa270B,
globals.CodeLLaMa34B, globals.CodeLLaMa13B, globals.CodeLLaMa7B:
return user != nil && user.GetQuota(db) >= 1
default:
return user != nil
}

View File

@ -34,7 +34,7 @@ func OriginIsAllowed(uri string) bool {
}
func OriginIsOpen(c *gin.Context) bool {
return strings.HasPrefix(c.Request.URL.Path, "/v1")
return strings.HasPrefix(c.Request.URL.Path, "/v1") || strings.HasPrefix(c.Request.URL.Path, "/dashboard")
}
const (
@ -77,6 +77,14 @@ const (
QwenPlus = "qwen-plus"
QwenTurboNet = "qwen-turbo-net"
QwenPlusNet = "qwen-plus-net"
Midjourney = "midjourney"
StableDiffusion = "stable-diffusion"
LLaMa270B = "llama-2-70b"
LLaMa213B = "llama-2-13b"
LLaMa27B = "llama-2-7b"
CodeLLaMa34B = "code-llama-34b"
CodeLLaMa13B = "code-llama-13b"
CodeLLaMa7B = "code-llama-7b"
)
var GPT3TurboArray = []string{
@ -109,6 +117,11 @@ var ClaudeModelArray = []string{
Claude2, Claude2100k,
}
var LLaMaModelArray = []string{
LLaMa270B, LLaMa213B, LLaMa27B,
CodeLLaMa34B, CodeLLaMa13B, CodeLLaMa7B,
}
var BingModelArray = []string{
BingCreative,
BingBalanced,
@ -136,16 +149,11 @@ var QwenModelArray = []string{
}
var LongContextModelArray = []string{
GPT3Turbo16k,
GPT3Turbo16k0613,
GPT3Turbo16k0301,
GPT432k,
GPT432k0314,
GPT432k0613,
Claude1,
Claude1100k,
Claude2,
Claude2100k,
GPT3Turbo16k, GPT3Turbo16k0613, GPT3Turbo16k0301,
GPT41106Preview, GPT432k, GPT432k0314, GPT432k0613,
Claude1, Claude1100k,
CodeLLaMa34B, LLaMa270B,
Claude2, Claude2100k,
}
var FreeModelArray = []string{
@ -167,45 +175,20 @@ var FreeModelArray = []string{
}
var AllModels = []string{
GPT3Turbo,
GPT3TurboInstruct,
GPT3Turbo0613,
GPT3Turbo0301,
GPT3Turbo1106,
GPT3Turbo16k,
GPT3Turbo16k0613,
GPT3Turbo16k0301,
GPT4,
GPT40314,
GPT40613,
GPT4Vision,
GPT4All,
GPT41106Preview,
GPT4Dalle,
GPT432k,
GPT432k0314,
GPT432k0613,
GPT3Turbo, GPT3TurboInstruct, GPT3Turbo0613, GPT3Turbo0301, GPT3Turbo1106,
GPT3Turbo16k, GPT3Turbo16k0613, GPT3Turbo16k0301,
GPT4, GPT40314, GPT40613, GPT4Vision, GPT4All, GPT41106Preview, GPT4Dalle,
GPT432k, GPT432k0314, GPT432k0613,
Dalle2,
Claude1,
Claude1100k,
Claude2,
Claude2100k,
ClaudeSlack,
SparkDesk,
SparkDeskV2,
SparkDeskV3,
Claude1, Claude1100k, Claude2, Claude2100k, ClaudeSlack,
SparkDesk, SparkDeskV2, SparkDeskV3,
ChatBison001,
BingCreative,
BingBalanced,
BingPrecise,
ZhiPuChatGLMTurbo,
ZhiPuChatGLMPro,
ZhiPuChatGLMStd,
ZhiPuChatGLMLite,
QwenTurbo,
QwenPlus,
QwenTurboNet,
QwenPlusNet,
BingCreative, BingBalanced, BingPrecise,
ZhiPuChatGLMTurbo, ZhiPuChatGLMPro, ZhiPuChatGLMStd, ZhiPuChatGLMLite,
QwenTurbo, QwenPlus, QwenTurboNet, QwenPlusNet,
Midjourney, StableDiffusion,
LLaMa270B, LLaMa213B, LLaMa27B,
CodeLLaMa34B, CodeLLaMa13B, CodeLLaMa7B,
}
func in(value string, slice []string) bool {
@ -237,6 +220,10 @@ func IsClaudeModel(model string) bool {
return in(model, ClaudeModelArray)
}
func IsLLaMaModel(model string) bool {
return in(model, LLaMaModelArray)
}
func IsClaude100KModel(model string) bool {
return model == Claude1100k || model == Claude2100k
}

View File

@ -5,5 +5,7 @@ import "github.com/gin-gonic/gin"
func Register(app *gin.Engine) {
app.GET("/chat", ChatAPI)
app.GET("/v1/models", ModelAPI)
app.GET("/dashboard/billing/usage", GetBillingUsage)
app.GET("/dashboard/billing/subscription", GetSubscription)
app.POST("/v1/chat/completions", TranshipmentAPI)
}

60
manager/usage.go Normal file
View File

@ -0,0 +1,60 @@
package manager
import (
"chat/auth"
"chat/utils"
"github.com/gin-gonic/gin"
"net/http"
)
type BillingResponse struct {
Object string `json:"object"`
TotalUsage float32 `json:"total_usage"`
}
type SubscriptionResponse struct {
Object string `json:"object"`
SoftLimit int64 `json:"soft_limit"`
HardLimit int64 `json:"hard_limit"`
SystemHardLimit int64 `json:"system_hard_limit"`
SoftLimitUSD float32 `json:"soft_limit_usd"`
HardLimitUSD float32 `json:"hard_limit_usd"`
SystemHardLimitUSD float32 `json:"system_hard_limit_usd"`
}
func GetBillingUsage(c *gin.Context) {
user := auth.RequireAuth(c)
if user == nil {
return
}
db := utils.GetDBFromContext(c)
usage := user.GetUsedQuota(db)
c.JSON(http.StatusOK, BillingResponse{
Object: "list",
TotalUsage: usage,
})
}
func GetSubscription(c *gin.Context) {
user := auth.RequireAuth(c)
if user == nil {
return
}
db := utils.GetDBFromContext(c)
quota := user.GetQuota(db)
used := user.GetUsedQuota(db)
total := quota + used
c.JSON(http.StatusOK, SubscriptionResponse{
Object: "billing_subscription",
SoftLimit: int64(quota * 100),
HardLimit: int64(total * 100),
SystemHardLimit: 100000000,
SoftLimitUSD: quota / 7.3,
HardLimitUSD: total / 7.3,
SystemHardLimitUSD: 1000000,
})
}

View File

@ -39,10 +39,10 @@ var limits = map[string]Limiter{
"/conversation": {Duration: 1, Count: 5},
"/invite": {Duration: 7200, Count: 20},
"/v1": {Duration: 1, Count: 600},
"/card": {Duration: 1, Count: 5},
"/generation": {Duration: 1, Count: 5},
"/article": {Duration: 1, Count: 5},
"/dashboard": {Duration: 1, Count: 5},
"/card": {Duration: 1, Count: 5},
"/generation": {Duration: 1, Count: 5},
"/article": {Duration: 1, Count: 5},
}
func GetPrefixMap[T comparable](s string, p map[string]T) *T {

View File

@ -20,6 +20,8 @@ func GetWeightByModel(model string) int {
globals.GPT3Turbo16k, globals.GPT3Turbo16k0613,
globals.GPT4, globals.GPT4Vision, globals.GPT4Dalle, globals.GPT4All, globals.GPT40314, globals.GPT40613, globals.GPT41106Preview,
globals.GPT432k, globals.GPT432k0613, globals.GPT432k0314,
globals.LLaMa27B, globals.LLaMa213B, globals.LLaMa270B,
globals.CodeLLaMa34B, globals.CodeLLaMa13B, globals.CodeLLaMa7B,
globals.SparkDesk, globals.SparkDeskV2, globals.SparkDeskV3,
globals.QwenTurbo, globals.QwenPlus, globals.QwenTurboNet, globals.QwenPlusNet,
@ -91,6 +93,10 @@ func CountInputToken(model string, v []globals.Message) float32 {
return 0
case globals.Claude1100k, globals.Claude2100k:
return float32(CountTokenPrice(v, model)) / 1000 * 0.8 * 0.6
case globals.LLaMa270B, globals.CodeLLaMa34B:
return float32(CountTokenPrice(v, model)) / 1000 * 0.25
case globals.LLaMa213B, globals.CodeLLaMa13B, globals.LLaMa27B, globals.CodeLLaMa7B:
return float32(CountTokenPrice(v, model)) / 1000 * 0.1
case globals.ZhiPuChatGLMPro:
return float32(CountTokenPrice(v, model)) / 1000 * 0.1
case globals.ZhiPuChatGLMTurbo, globals.ZhiPuChatGLMStd:
@ -123,6 +129,10 @@ func CountOutputToken(model string, t int) float32 {
return 0
case globals.Claude1100k, globals.Claude2100k:
return float32(t*GetWeightByModel(model)) / 1000 * 2.4 * 0.6
case globals.LLaMa270B, globals.CodeLLaMa34B:
return float32(t*GetWeightByModel(model)) / 1000 * 0.25
case globals.LLaMa213B, globals.CodeLLaMa13B, globals.LLaMa27B, globals.CodeLLaMa7B:
return float32(t*GetWeightByModel(model)) / 1000 * 0.1
case globals.ZhiPuChatGLMPro:
return float32(t*GetWeightByModel(model)) / 1000 * 0.1
case globals.ZhiPuChatGLMTurbo, globals.ZhiPuChatGLMStd:
@ -131,6 +141,10 @@ func CountOutputToken(model string, t int) float32 {
return float32(t*GetWeightByModel(model)) / 1000 * 0.08
case globals.QwenPlus, globals.QwenPlusNet:
return float32(t*GetWeightByModel(model)) / 1000 * 0.2
case globals.StableDiffusion:
return 0.25
case globals.Midjourney:
return 0.5
default:
return 0
}