Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
ui_example
node_modules
ui/node_modules
ui/ModelModal/node_modules
ui/ModelModal/dist
.DS_Store
main
main.go
handler
templates
test/ui_example/dist
172 changes: 147 additions & 25 deletions consts/model.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package consts

import (
"errors"
"strings"
)

Expand All @@ -23,47 +22,88 @@ const (
ModelTypeFunctionCall ModelType = "function_call"
)

func ParseModelType(s string) (ModelType, error) {
func ParseModelType(s string) ModelType {
switch s {
case "llm", "chat":
return ModelTypeChat, nil
return ModelTypeChat
case "coder", "code":
return ModelTypeCoder, nil
return ModelTypeCoder
case "embedding":
return ModelTypeEmbedding, nil
return ModelTypeEmbedding
case "reranker", "rerank":
return ModelTypeRerank, nil
return ModelTypeRerank
case "vision":
return ModelTypeVision, nil
return ModelTypeVision
case "function_call":
return ModelTypeFunctionCall, nil
return ModelTypeFunctionCall
default:
return "", errors.New("invalid model type")
return ModelTypeChat
}
}

type ModelProvider string

const (
ModelProviderSiliconFlow ModelProvider = "SiliconFlow"
ModelProviderOpenAI ModelProvider = "OpenAI"
ModelProviderOllama ModelProvider = "Ollama"
ModelProviderDeepSeek ModelProvider = "DeepSeek"
ModelProviderMoonshot ModelProvider = "Moonshot"
ModelProviderAzureOpenAI ModelProvider = "AzureOpenAI"
ModelProviderBaiZhiCloud ModelProvider = "BaiZhiCloud"
ModelProviderHunyuan ModelProvider = "Hunyuan"
ModelProviderBaiLian ModelProvider = "BaiLian"
ModelProviderVolcengine ModelProvider = "Volcengine"
ModelProviderGemini ModelProvider = "Gemini"
ModelProviderZhiPu ModelProvider = "ZhiPu"
ModelProviderOther ModelProvider = "Other"
ModelProviderSiliconFlow ModelProvider = "SiliconFlow"
ModelProviderOpenAI ModelProvider = "OpenAI"
ModelProviderOllama ModelProvider = "Ollama"
ModelProviderDeepSeek ModelProvider = "DeepSeek"
ModelProviderMoonshot ModelProvider = "Moonshot"
ModelProviderAzureOpenAI ModelProvider = "AzureOpenAI"
ModelProviderBaiZhiCloud ModelProvider = "BaiZhiCloud"
ModelProviderHunyuan ModelProvider = "Hunyuan"
ModelProviderBaiLian ModelProvider = "BaiLian"
ModelProviderVolcengine ModelProvider = "Volcengine"
ModelProviderGemini ModelProvider = "Gemini"
ModelProviderZhiPu ModelProvider = "ZhiPu"
ModelProviderAiHubMix ModelProvider = "AiHubMix"
ModelProviderOcoolAI ModelProvider = "OcoolAI"
ModelProviderPPIO ModelProvider = "PPIO"
ModelProviderAlayaNew ModelProvider = "AlayaNew"
ModelProviderQiniu ModelProvider = "Qiniu"
ModelProviderDMXAPI ModelProvider = "DMXAPI"
ModelProviderBurnCloud ModelProvider = "BurnCloud"
ModelProviderTokenFlux ModelProvider = "TokenFlux"
ModelProvider302AI ModelProvider = "302AI"
ModelProviderCephalon ModelProvider = "Cephalon"
ModelProviderLanyun ModelProvider = "Lanyun"
ModelProviderPH8 ModelProvider = "PH8"
ModelProviderOpenRouter ModelProvider = "OpenRouter"
ModelProviderNewAPI ModelProvider = "NewAPI"
ModelProviderLMStudio ModelProvider = "LMStudio"
ModelProviderAnthropic ModelProvider = "Anthropic"
ModelProviderVertexAI ModelProvider = "VertexAI"
ModelProviderGithub ModelProvider = "Github"
ModelProviderCopilot ModelProvider = "Copilot"
ModelProviderYi ModelProvider = "Yi"
ModelProviderBaichuan ModelProvider = "Baichuan"
ModelProviderStepFun ModelProvider = "StepFun"
ModelProviderInfini ModelProvider = "Infini"
ModelProviderMiniMax ModelProvider = "MiniMax"
ModelProviderGroq ModelProvider = "Groq"
ModelProviderTogether ModelProvider = "Together"
ModelProviderFireworks ModelProvider = "Fireworks"
ModelProviderNvidia ModelProvider = "Nvidia"
ModelProviderGrok ModelProvider = "Grok"
ModelProviderHyperbolic ModelProvider = "Hyperbolic"
ModelProviderMistral ModelProvider = "Mistral"
ModelProviderJina ModelProvider = "Jina"
ModelProviderPerplexity ModelProvider = "Perplexity"
ModelProviderModelScope ModelProvider = "ModelScope"
ModelProviderXirang ModelProvider = "Xirang"
ModelProviderTencentCloudTI ModelProvider = "TencentCloudTI"
ModelProviderBaiduCloud ModelProvider = "BaiduCloud"
ModelProviderGPUStack ModelProvider = "GPUStack"
ModelProviderVoyageAI ModelProvider = "VoyageAI"
ModelProviderAWSBedrock ModelProvider = "AWSBedrock"
ModelProviderPoe ModelProvider = "Poe"
ModelProviderOther ModelProvider = "Other"
)

func ParseModelProvider(s string) ModelProvider {
// 转换为小写进行不区分大小写的比较
switch strings.ToLower(s) {
case "siliconflow":
case "siliconflow", "silicon":
return ModelProviderSiliconFlow
case "openai":
return ModelProviderOpenAI
Expand All @@ -73,20 +113,102 @@ func ParseModelProvider(s string) ModelProvider {
return ModelProviderDeepSeek
case "moonshot":
return ModelProviderMoonshot
case "azureopenai":
case "azureopenai", "azure-openai":
return ModelProviderAzureOpenAI
case "baizhicloud", "baizhiyun":
return ModelProviderBaiZhiCloud
case "hunyuan":
return ModelProviderHunyuan
case "bailian":
return ModelProviderBaiLian
case "volcengine":
case "volcengine", "doubao":
return ModelProviderVolcengine
case "gemini":
return ModelProviderGemini
case "zhipu":
return ModelProviderZhiPu
case "aihubmix":
return ModelProviderAiHubMix
case "ocoolai":
return ModelProviderOcoolAI
case "ppio":
return ModelProviderPPIO
case "alayanew":
return ModelProviderAlayaNew
case "qiniu":
return ModelProviderQiniu
case "dmxapi":
return ModelProviderDMXAPI
case "burncloud":
return ModelProviderBurnCloud
case "tokenflux":
return ModelProviderTokenFlux
case "302ai":
return ModelProvider302AI
case "cephalon":
return ModelProviderCephalon
case "lanyun":
return ModelProviderLanyun
case "ph8":
return ModelProviderPH8
case "openrouter":
return ModelProviderOpenRouter
case "new-api":
return ModelProviderNewAPI
case "lmstudio":
return ModelProviderLMStudio
case "anthropic":
return ModelProviderAnthropic
case "vertexai":
return ModelProviderVertexAI
case "github":
return ModelProviderGithub
case "copilot":
return ModelProviderCopilot
case "yi":
return ModelProviderYi
case "baichuan":
return ModelProviderBaichuan
case "stepfun":
return ModelProviderStepFun
case "infini":
return ModelProviderInfini
case "minimax":
return ModelProviderMiniMax
case "groq":
return ModelProviderGroq
case "together":
return ModelProviderTogether
case "fireworks":
return ModelProviderFireworks
case "nvidia":
return ModelProviderNvidia
case "grok":
return ModelProviderGrok
case "hyperbolic":
return ModelProviderHyperbolic
case "mistral":
return ModelProviderMistral
case "jina":
return ModelProviderJina
case "perplexity":
return ModelProviderPerplexity
case "modelscope":
return ModelProviderModelScope
case "xirang":
return ModelProviderXirang
case "tencent-cloud-ti":
return ModelProviderTencentCloudTI
case "baidu-cloud":
return ModelProviderBaiduCloud
case "gpustack":
return ModelProviderGPUStack
case "voyageai":
return ModelProviderVoyageAI
case "aws-bedrock":
return ModelProviderAWSBedrock
case "poe":
return ModelProviderPoe
default:
return ModelProviderOther
}
Expand Down
106 changes: 106 additions & 0 deletions domain/domain.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package domain

import (
"github.com/chaitin/ModelKit/consts"
)

type ModelKit interface {
// CheckModel(ctx context.Context, req *CheckModelReq) (*Model, error)
}

type ModelListReq struct {
Provider string `json:"provider" query:"provider" validate:"required"`
BaseURL string `json:"base_url" query:"base_url" validate:"required"`
APIKey string `json:"api_key" query:"api_key"`
APIHeader string `json:"api_header" query:"api_header"`
Type string `json:"type" query:"type" validate:"required"`
}

type Response struct {
Message string `json:"message"`
Success bool `json:"success"`
Data any `json:"data,omitempty"`
}

type ModelListResp struct {
Models []ModelListItem `json:"models"`
}

type ModelListItem struct {
Model string `json:"model"`
}

type CheckModelReq struct {
Provider string `json:"provider" query:"provider" validate:"required,oneof=OpenAI Ollama DeepSeek SiliconFlow Moonshot Other AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine Gemini ZhiPu AiHubMix"`
Model string `json:"model" query:"model_name" validate:"required"`
BaseURL string `json:"base_url" query:"base_url" validate:"required"`
APIKey string `json:"api_key" query:"api_key"`
APIHeader string `json:"api_header" query:"api_header"`
APIVersion string `json:"api_version" query:"api_version"` // for azure openai
Type string `json:"type" query:"model_type" validate:"required,oneof=chat embedding rerank llm"`
}

type CheckModelResp struct {
Error string `json:"error"`
Content string `json:"content"`
}

func getModelsByOwner(owner consts.ModelProvider) []ModelMetadata {
var ms []ModelMetadata
for i := range Models {
if Models[i].Provider == owner {
ms = append(ms, Models[i])
}
}
return ms
}

func init() {
initModels()
initModelProviders()
}

func From(ModelProvider ModelProvider) []ModelListItem {
var result []ModelListItem
for _, model := range ModelProvider.Models {
result = append(result, ModelListItem{
Model: model.ModelName,
})
}
return result
}

// ModelResponseParser 定义模型响应解析器接口
type ModelResponseParser interface {
ParseModels() []ModelListItem
}

type GithubModel struct {
ID string `json:"id"`
Name string `json:"name"`
Registry string `json:"registry"`
Publisher string `json:"publisher"`
Summary string `json:"summary"`
RateLimitTier string `json:"rate_limit_tier"`
HTMLURL string `json:"html_url"`
Version string `json:"version"`
Capabilities []string `json:"capabilities"`
Limits struct {
MaxInputTokens int `json:"max_input_tokens"`
MaxOutputTokens int `json:"max_output_tokens"`
} `json:"limits"`
Tags []string `json:"tags"`
SupportedInputModalities []string `json:"supported_input_modalities"`
SupportedOutputModalities []string `json:"supported_output_modalities"`
}

type GithubResp []GithubModel

// ParseModels 实现ModelResponseParser接口
func (g *GithubResp) ParseModels() []ModelListItem {
var models []ModelListItem
for _, item := range *g {
models = append(models, ModelListItem{Model: item.ID})
}
return models
}
Loading
Loading