Skip to content

Commit ab79115

Browse files
authored
Merge pull request #26 from chaitin/develop/jw
Develop/jw
2 parents 26b5f20 + 0ab39a0 commit ab79115

File tree

22 files changed

+3315
-317
lines changed

22 files changed

+3315
-317
lines changed

.gitignore

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
ui_example
21
node_modules
32
ui/node_modules
43
ui/ModelModal/node_modules
54
ui/ModelModal/dist
65
.DS_Store
7-
main
8-
main.go
9-
handler
10-
templates
6+
test/ui_example/dist

consts/model.go

Lines changed: 147 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package consts
22

33
import (
4-
"errors"
54
"strings"
65
)
76

@@ -23,47 +22,88 @@ const (
2322
ModelTypeFunctionCall ModelType = "function_call"
2423
)
2524

26-
func ParseModelType(s string) (ModelType, error) {
25+
func ParseModelType(s string) ModelType {
2726
switch s {
2827
case "llm", "chat":
29-
return ModelTypeChat, nil
28+
return ModelTypeChat
3029
case "coder", "code":
31-
return ModelTypeCoder, nil
30+
return ModelTypeCoder
3231
case "embedding":
33-
return ModelTypeEmbedding, nil
32+
return ModelTypeEmbedding
3433
case "reranker", "rerank":
35-
return ModelTypeRerank, nil
34+
return ModelTypeRerank
3635
case "vision":
37-
return ModelTypeVision, nil
36+
return ModelTypeVision
3837
case "function_call":
39-
return ModelTypeFunctionCall, nil
38+
return ModelTypeFunctionCall
4039
default:
41-
return "", errors.New("invalid model type")
40+
return ModelTypeChat
4241
}
4342
}
4443

4544
type ModelProvider string
4645

4746
const (
48-
ModelProviderSiliconFlow ModelProvider = "SiliconFlow"
49-
ModelProviderOpenAI ModelProvider = "OpenAI"
50-
ModelProviderOllama ModelProvider = "Ollama"
51-
ModelProviderDeepSeek ModelProvider = "DeepSeek"
52-
ModelProviderMoonshot ModelProvider = "Moonshot"
53-
ModelProviderAzureOpenAI ModelProvider = "AzureOpenAI"
54-
ModelProviderBaiZhiCloud ModelProvider = "BaiZhiCloud"
55-
ModelProviderHunyuan ModelProvider = "Hunyuan"
56-
ModelProviderBaiLian ModelProvider = "BaiLian"
57-
ModelProviderVolcengine ModelProvider = "Volcengine"
58-
ModelProviderGemini ModelProvider = "Gemini"
59-
ModelProviderZhiPu ModelProvider = "ZhiPu"
60-
ModelProviderOther ModelProvider = "Other"
47+
ModelProviderSiliconFlow ModelProvider = "SiliconFlow"
48+
ModelProviderOpenAI ModelProvider = "OpenAI"
49+
ModelProviderOllama ModelProvider = "Ollama"
50+
ModelProviderDeepSeek ModelProvider = "DeepSeek"
51+
ModelProviderMoonshot ModelProvider = "Moonshot"
52+
ModelProviderAzureOpenAI ModelProvider = "AzureOpenAI"
53+
ModelProviderBaiZhiCloud ModelProvider = "BaiZhiCloud"
54+
ModelProviderHunyuan ModelProvider = "Hunyuan"
55+
ModelProviderBaiLian ModelProvider = "BaiLian"
56+
ModelProviderVolcengine ModelProvider = "Volcengine"
57+
ModelProviderGemini ModelProvider = "Gemini"
58+
ModelProviderZhiPu ModelProvider = "ZhiPu"
59+
ModelProviderAiHubMix ModelProvider = "AiHubMix"
60+
ModelProviderOcoolAI ModelProvider = "OcoolAI"
61+
ModelProviderPPIO ModelProvider = "PPIO"
62+
ModelProviderAlayaNew ModelProvider = "AlayaNew"
63+
ModelProviderQiniu ModelProvider = "Qiniu"
64+
ModelProviderDMXAPI ModelProvider = "DMXAPI"
65+
ModelProviderBurnCloud ModelProvider = "BurnCloud"
66+
ModelProviderTokenFlux ModelProvider = "TokenFlux"
67+
ModelProvider302AI ModelProvider = "302AI"
68+
ModelProviderCephalon ModelProvider = "Cephalon"
69+
ModelProviderLanyun ModelProvider = "Lanyun"
70+
ModelProviderPH8 ModelProvider = "PH8"
71+
ModelProviderOpenRouter ModelProvider = "OpenRouter"
72+
ModelProviderNewAPI ModelProvider = "NewAPI"
73+
ModelProviderLMStudio ModelProvider = "LMStudio"
74+
ModelProviderAnthropic ModelProvider = "Anthropic"
75+
ModelProviderVertexAI ModelProvider = "VertexAI"
76+
ModelProviderGithub ModelProvider = "Github"
77+
ModelProviderCopilot ModelProvider = "Copilot"
78+
ModelProviderYi ModelProvider = "Yi"
79+
ModelProviderBaichuan ModelProvider = "Baichuan"
80+
ModelProviderStepFun ModelProvider = "StepFun"
81+
ModelProviderInfini ModelProvider = "Infini"
82+
ModelProviderMiniMax ModelProvider = "MiniMax"
83+
ModelProviderGroq ModelProvider = "Groq"
84+
ModelProviderTogether ModelProvider = "Together"
85+
ModelProviderFireworks ModelProvider = "Fireworks"
86+
ModelProviderNvidia ModelProvider = "Nvidia"
87+
ModelProviderGrok ModelProvider = "Grok"
88+
ModelProviderHyperbolic ModelProvider = "Hyperbolic"
89+
ModelProviderMistral ModelProvider = "Mistral"
90+
ModelProviderJina ModelProvider = "Jina"
91+
ModelProviderPerplexity ModelProvider = "Perplexity"
92+
ModelProviderModelScope ModelProvider = "ModelScope"
93+
ModelProviderXirang ModelProvider = "Xirang"
94+
ModelProviderTencentCloudTI ModelProvider = "TencentCloudTI"
95+
ModelProviderBaiduCloud ModelProvider = "BaiduCloud"
96+
ModelProviderGPUStack ModelProvider = "GPUStack"
97+
ModelProviderVoyageAI ModelProvider = "VoyageAI"
98+
ModelProviderAWSBedrock ModelProvider = "AWSBedrock"
99+
ModelProviderPoe ModelProvider = "Poe"
100+
ModelProviderOther ModelProvider = "Other"
61101
)
62102

63103
func ParseModelProvider(s string) ModelProvider {
64104
// 转换为小写进行不区分大小写的比较
65105
switch strings.ToLower(s) {
66-
case "siliconflow":
106+
case "siliconflow", "silicon":
67107
return ModelProviderSiliconFlow
68108
case "openai":
69109
return ModelProviderOpenAI
@@ -73,20 +113,102 @@ func ParseModelProvider(s string) ModelProvider {
73113
return ModelProviderDeepSeek
74114
case "moonshot":
75115
return ModelProviderMoonshot
76-
case "azureopenai":
116+
case "azureopenai", "azure-openai":
77117
return ModelProviderAzureOpenAI
78118
case "baizhicloud", "baizhiyun":
79119
return ModelProviderBaiZhiCloud
80120
case "hunyuan":
81121
return ModelProviderHunyuan
82122
case "bailian":
83123
return ModelProviderBaiLian
84-
case "volcengine":
124+
case "volcengine", "doubao":
85125
return ModelProviderVolcengine
86126
case "gemini":
87127
return ModelProviderGemini
88128
case "zhipu":
89129
return ModelProviderZhiPu
130+
case "aihubmix":
131+
return ModelProviderAiHubMix
132+
case "ocoolai":
133+
return ModelProviderOcoolAI
134+
case "ppio":
135+
return ModelProviderPPIO
136+
case "alayanew":
137+
return ModelProviderAlayaNew
138+
case "qiniu":
139+
return ModelProviderQiniu
140+
case "dmxapi":
141+
return ModelProviderDMXAPI
142+
case "burncloud":
143+
return ModelProviderBurnCloud
144+
case "tokenflux":
145+
return ModelProviderTokenFlux
146+
case "302ai":
147+
return ModelProvider302AI
148+
case "cephalon":
149+
return ModelProviderCephalon
150+
case "lanyun":
151+
return ModelProviderLanyun
152+
case "ph8":
153+
return ModelProviderPH8
154+
case "openrouter":
155+
return ModelProviderOpenRouter
156+
case "new-api":
157+
return ModelProviderNewAPI
158+
case "lmstudio":
159+
return ModelProviderLMStudio
160+
case "anthropic":
161+
return ModelProviderAnthropic
162+
case "vertexai":
163+
return ModelProviderVertexAI
164+
case "github":
165+
return ModelProviderGithub
166+
case "copilot":
167+
return ModelProviderCopilot
168+
case "yi":
169+
return ModelProviderYi
170+
case "baichuan":
171+
return ModelProviderBaichuan
172+
case "stepfun":
173+
return ModelProviderStepFun
174+
case "infini":
175+
return ModelProviderInfini
176+
case "minimax":
177+
return ModelProviderMiniMax
178+
case "groq":
179+
return ModelProviderGroq
180+
case "together":
181+
return ModelProviderTogether
182+
case "fireworks":
183+
return ModelProviderFireworks
184+
case "nvidia":
185+
return ModelProviderNvidia
186+
case "grok":
187+
return ModelProviderGrok
188+
case "hyperbolic":
189+
return ModelProviderHyperbolic
190+
case "mistral":
191+
return ModelProviderMistral
192+
case "jina":
193+
return ModelProviderJina
194+
case "perplexity":
195+
return ModelProviderPerplexity
196+
case "modelscope":
197+
return ModelProviderModelScope
198+
case "xirang":
199+
return ModelProviderXirang
200+
case "tencent-cloud-ti":
201+
return ModelProviderTencentCloudTI
202+
case "baidu-cloud":
203+
return ModelProviderBaiduCloud
204+
case "gpustack":
205+
return ModelProviderGPUStack
206+
case "voyageai":
207+
return ModelProviderVoyageAI
208+
case "aws-bedrock":
209+
return ModelProviderAWSBedrock
210+
case "poe":
211+
return ModelProviderPoe
90212
default:
91213
return ModelProviderOther
92214
}

domain/domain.go

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package domain
2+
3+
import (
4+
"github.com/chaitin/ModelKit/consts"
5+
)
6+
7+
type ModelKit interface {
8+
// CheckModel(ctx context.Context, req *CheckModelReq) (*Model, error)
9+
}
10+
11+
type ModelListReq struct {
12+
Provider string `json:"provider" query:"provider" validate:"required"`
13+
BaseURL string `json:"base_url" query:"base_url" validate:"required"`
14+
APIKey string `json:"api_key" query:"api_key"`
15+
APIHeader string `json:"api_header" query:"api_header"`
16+
Type string `json:"type" query:"type" validate:"required"`
17+
}
18+
19+
type Response struct {
20+
Message string `json:"message"`
21+
Success bool `json:"success"`
22+
Data any `json:"data,omitempty"`
23+
}
24+
25+
type ModelListResp struct {
26+
Models []ModelListItem `json:"models"`
27+
}
28+
29+
type ModelListItem struct {
30+
Model string `json:"model"`
31+
}
32+
33+
type CheckModelReq struct {
34+
Provider string `json:"provider" query:"provider" validate:"required,oneof=OpenAI Ollama DeepSeek SiliconFlow Moonshot Other AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine Gemini ZhiPu AiHubMix"`
35+
Model string `json:"model" query:"model_name" validate:"required"`
36+
BaseURL string `json:"base_url" query:"base_url" validate:"required"`
37+
APIKey string `json:"api_key" query:"api_key"`
38+
APIHeader string `json:"api_header" query:"api_header"`
39+
APIVersion string `json:"api_version" query:"api_version"` // for azure openai
40+
Type string `json:"type" query:"model_type" validate:"required,oneof=chat embedding rerank llm"`
41+
}
42+
43+
type CheckModelResp struct {
44+
Error string `json:"error"`
45+
Content string `json:"content"`
46+
}
47+
48+
func getModelsByOwner(owner consts.ModelProvider) []ModelMetadata {
49+
var ms []ModelMetadata
50+
for i := range Models {
51+
if Models[i].Provider == owner {
52+
ms = append(ms, Models[i])
53+
}
54+
}
55+
return ms
56+
}
57+
58+
func init() {
59+
initModels()
60+
initModelProviders()
61+
}
62+
63+
func From(ModelProvider ModelProvider) []ModelListItem {
64+
var result []ModelListItem
65+
for _, model := range ModelProvider.Models {
66+
result = append(result, ModelListItem{
67+
Model: model.ModelName,
68+
})
69+
}
70+
return result
71+
}
72+
73+
// ModelResponseParser 定义模型响应解析器接口
74+
type ModelResponseParser interface {
75+
ParseModels() []ModelListItem
76+
}
77+
78+
type GithubModel struct {
79+
ID string `json:"id"`
80+
Name string `json:"name"`
81+
Registry string `json:"registry"`
82+
Publisher string `json:"publisher"`
83+
Summary string `json:"summary"`
84+
RateLimitTier string `json:"rate_limit_tier"`
85+
HTMLURL string `json:"html_url"`
86+
Version string `json:"version"`
87+
Capabilities []string `json:"capabilities"`
88+
Limits struct {
89+
MaxInputTokens int `json:"max_input_tokens"`
90+
MaxOutputTokens int `json:"max_output_tokens"`
91+
} `json:"limits"`
92+
Tags []string `json:"tags"`
93+
SupportedInputModalities []string `json:"supported_input_modalities"`
94+
SupportedOutputModalities []string `json:"supported_output_modalities"`
95+
}
96+
97+
type GithubResp []GithubModel
98+
99+
// ParseModels 实现ModelResponseParser接口
100+
func (g *GithubResp) ParseModels() []ModelListItem {
101+
var models []ModelListItem
102+
for _, item := range *g {
103+
models = append(models, ModelListItem{Model: item.ID})
104+
}
105+
return models
106+
}

0 commit comments

Comments
 (0)