diff --git a/.gitignore b/.gitignore
index 0477fed6..b6849da3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
backend/assets
backend/docs/swagger.json
-backend/assets-amd64
\ No newline at end of file
+backend/assets-amd64
+ModelModal
+ui/node_modules
+ui/dist
\ No newline at end of file
diff --git a/backend/consts/model.go b/backend/consts/model.go
index 7b8cfd3a..fad90d95 100644
--- a/backend/consts/model.go
+++ b/backend/consts/model.go
@@ -20,17 +20,58 @@ const (
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"
- ModelProviderZhiPu ModelProvider = "ZhiPu"
- ModelProviderGemini ModelProvider = "Gemini"
- 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"
+ ModelProviderZhiPu ModelProvider = "ZhiPu"
+ ModelProviderGemini ModelProvider = "Gemini"
+ 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"
)
diff --git a/backend/domain/model.go b/backend/domain/model.go
index bd79c86f..ed9e264b 100644
--- a/backend/domain/model.go
+++ b/backend/domain/model.go
@@ -46,7 +46,7 @@ type CheckModelReq struct {
}
type GetProviderModelListReq struct {
- Provider consts.ModelProvider `json:"provider" query:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine ZhiPu Gemini Other"`
+ Provider consts.ModelProvider `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"`
@@ -76,11 +76,11 @@ type GetTokenUsageReq struct {
type CreateModelReq struct {
AdminID uuid.UUID `json:"-"`
- ShowName string `json:"show_name"` // 模型显示名称
- ModelName string `json:"model_name" validate:"required"` // 模型名称 如: deepseek-v3
- Provider consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine ZhiPu Gemini Other"` // 提供商
- APIBase string `json:"api_base" validate:"required"` // 接口地址 如:https://api.qwen.com
- APIKey string `json:"api_key"` // 接口密钥 如:sk-xxxx
+ ShowName string `json:"show_name"` // 模型显示名称
+ ModelName string `json:"model_name" validate:"required"` // 模型名称 如: deepseek-v3
+ Provider consts.ModelProvider `json:"provider" validate:"required"` // 提供商
+ APIBase string `json:"api_base" validate:"required"` // 接口地址 如:https://api.qwen.com
+ APIKey string `json:"api_key"` // 接口密钥 如:sk-xxxx
APIVersion string `json:"api_version"`
APIHeader string `json:"api_header"`
ModelType consts.ModelType `json:"model_type"` // 模型类型 llm:对话模型 coder:代码模型
@@ -108,12 +108,12 @@ func DefaultModelParam() *ModelParam {
}
type UpdateModelReq struct {
- ID string `json:"id"` // 模型ID
- ModelName *string `json:"model_name"` // 模型名称
- ShowName *string `json:"show_name"` // 模型显示名称
- Provider *consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine ZhiPu Gemini Other"` // 提供商
- APIBase *string `json:"api_base"` // 接口地址 如:https://api.qwen.com
- APIKey *string `json:"api_key"` // 接口密钥 如:sk-xxxx
+ ID string `json:"id"` // 模型ID
+ ModelName *string `json:"model_name"` // 模型名称
+ ShowName *string `json:"show_name"` // 模型显示名称
+ Provider *consts.ModelProvider `json:"provider" validate:"required"` // 提供商
+ APIBase *string `json:"api_base"` // 接口地址 如:https://api.qwen.com
+ APIKey *string `json:"api_key"` // 接口密钥 如:sk-xxxx
APIVersion *string `json:"api_version"`
APIHeader *string `json:"api_header"`
Status *consts.ModelStatus `json:"status"` // 状态 active:启用 inactive:禁用
@@ -133,9 +133,9 @@ type ModelTokenUsage struct {
}
type ModelBasic struct {
- Name string `json:"name"` // 模型名称
- Provider consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine ZhiPu Gemini Other"` // 提供商
- APIBase string `json:"api_base"` // 接口地址 如:https://api.qwen.com
+ Name string `json:"name"` // 模型名称
+ Provider consts.ModelProvider `json:"provider" validate:"required"` // 提供商
+ APIBase string `json:"api_base"` // 接口地址 如:https://api.qwen.com
}
type ModelUsage struct {
@@ -198,6 +198,6 @@ func (m *Model) From(e *db.Model) *Model {
}
type CheckModelResp struct {
- Error string `json:"error"`
- Content string `json:"content"`
+ Error string `json:"error"`
+ Model *Model `json:"model"`
}
diff --git a/backend/go.mod b/backend/go.mod
index 9d678632..193ad87e 100644
--- a/backend/go.mod
+++ b/backend/go.mod
@@ -5,7 +5,7 @@ go 1.25.0
require (
entgo.io/ent v0.14.4
github.com/GoYoko/web v1.4.0
- github.com/chaitin/ModelKit v1.5.1-0.20250822075523-d896029f3d7a
+ github.com/chaitin/ModelKit v1.6.2
github.com/doquangtan/socket.io/v4 v4.0.8
github.com/golang-migrate/migrate/v4 v4.18.3
github.com/google/uuid v1.6.0
@@ -17,13 +17,10 @@ require (
github.com/pgvector/pgvector-go v0.3.0
github.com/redis/go-redis/v9 v9.7.3
github.com/rokku-c/go-openai v1.35.7-fix2
- github.com/sashabaranov/go-openai v1.41.1
- github.com/sirupsen/logrus v1.9.3
github.com/spf13/viper v1.20.1
- gitlab.com/gitlab-org/api/client-go v0.142.0
- golang.org/x/crypto v0.40.0
+ golang.org/x/crypto v0.41.0
golang.org/x/oauth2 v0.30.0
- golang.org/x/text v0.27.0
+ golang.org/x/text v0.28.0
golang.org/x/time v0.12.0
google.golang.org/grpc v1.74.2
google.golang.org/protobuf v1.36.8
@@ -76,16 +73,13 @@ require (
github.com/gofiber/websocket/v2 v2.2.1 // indirect
github.com/google/generative-ai-go v0.20.1 // indirect
github.com/google/go-cmp v0.7.0 // indirect
- github.com/google/go-querystring v1.1.0 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
github.com/goph/emperror v0.17.2 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
- github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
- github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
github.com/hashicorp/hcl/v2 v2.23.0 // indirect
github.com/invopop/yaml v0.1.0 // indirect
github.com/joho/godotenv v1.5.1 // indirect
@@ -114,6 +108,7 @@ require (
github.com/rs/xid v1.6.0 // indirect
github.com/sagikazarmark/locafero v0.9.0 // indirect
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee // indirect
+ github.com/sirupsen/logrus v1.9.3 // indirect
github.com/slongfield/pyfmt v0.0.0-20220222012616-ea85ff4c361f // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.14.0 // indirect
@@ -136,14 +131,15 @@ require (
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.opentelemetry.io/otel/trace v1.37.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
+ go.uber.org/mock v0.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/arch v0.19.0 // indirect
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 // indirect
- golang.org/x/mod v0.26.0 // indirect
- golang.org/x/net v0.42.0 // indirect
+ golang.org/x/mod v0.27.0 // indirect
+ golang.org/x/net v0.43.0 // indirect
golang.org/x/sync v0.16.0 // indirect
- golang.org/x/sys v0.34.0 // indirect
- golang.org/x/tools v0.35.0 // indirect
+ golang.org/x/sys v0.35.0 // indirect
+ golang.org/x/tools v0.36.0 // indirect
google.golang.org/api v0.239.0 // indirect
google.golang.org/genai v1.13.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
diff --git a/backend/go.sum b/backend/go.sum
index f705b469..80ef9a3d 100644
--- a/backend/go.sum
+++ b/backend/go.sum
@@ -54,8 +54,8 @@ github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFos
github.com/certifi/gocertifi v0.0.0-20190105021004-abcd57078448/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chaitin/ModelKit v1.5.1-0.20250822075523-d896029f3d7a h1:5J+cCU87hukEuTWlXO5D1UC6J3Bi+1xfihlSmgerUEM=
-github.com/chaitin/ModelKit v1.5.1-0.20250822075523-d896029f3d7a/go.mod h1:IRTq/CXbuk8/Gr3Gy/78ZDBTN7HMmxW7YvRjrfW9jdA=
+github.com/chaitin/ModelKit v1.6.2 h1:iw605mv1MCQwyud4nzblcgMe9pw8jvBG6Rv/UV40jzA=
+github.com/chaitin/ModelKit v1.6.2/go.mod h1:IBeqs9T8+vxMXhoer8daV0yrSPb5uaoAwQQW2Tz2qAg=
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
github.com/cloudwego/eino v0.3.51 h1:emSaDu49v9EEJYOusL42Li/VL5QBSyBvhxO9ZcKPZvs=
@@ -95,8 +95,6 @@ github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8
github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ=
github.com/fasthttp/websocket v1.5.3 h1:TPpQuLwJYfd4LJPXvHDYPMFWbLjsT91n3GpWtCQtdek=
github.com/fasthttp/websocket v1.5.3/go.mod h1:46gg/UBmTU1kUaTcwQXpUxtRwG2PvIZYeA8oL6vF3Fs=
-github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
-github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -155,11 +153,8 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6
github.com/google/generative-ai-go v0.20.1 h1:6dEIujpgN2V0PgLhr6c/M1ynRdc7ARtiIDPFzj45uNQ=
github.com/google/generative-ai-go v0.20.1/go.mod h1:TjOnZJmZKzarWbjUJgy+r3Ee7HGBRVLhOIgupnwR4Bg=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
-github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
@@ -182,14 +177,8 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
-github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
-github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
-github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48=
-github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw=
github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -314,8 +303,6 @@ github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k=
github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk=
-github.com/sashabaranov/go-openai v1.41.1 h1:zf5tM+GuxpyiyD9XZg8nCqu52eYFQg9OOew0gnIuDy4=
-github.com/sashabaranov/go-openai v1.41.1/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee h1:8Iv5m6xEo1NR1AvpV+7XmhI4r39LGNzwUL4YpMuL5vk=
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee/go.mod h1:qwtSXrKuJh/zsFQ12yEE89xfCrGKK63Rr7ctU/uCo4g=
github.com/sebdah/goldie/v2 v2.5.5 h1:rx1mwF95RxZ3/83sdS4Yp7t2C5TCokvWP4TBRbAyEWY=
@@ -401,8 +388,6 @@ github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
github.com/zclconf/go-cty-yaml v1.1.0 h1:nP+jp0qPHv2IhUVqmQSzjvqAWcObN0KBkUl2rWBdig0=
github.com/zclconf/go-cty-yaml v1.1.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs=
-gitlab.com/gitlab-org/api/client-go v0.142.0 h1:cR8+RhDc7ooH0SiGNhgm3Nf5ZpW5D1R3DLshfAXJZmQ=
-gitlab.com/gitlab-org/api/client-go v0.142.0/go.mod h1:3YuWlZCirs2TTcaAzM6qNwVHB7WvV67ATb0GGpBCdlQ=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ=
@@ -432,16 +417,16 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
-golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
-golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
+golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
+golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4=
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
-golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
+golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
+golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -450,8 +435,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
-golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
-golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
+golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
+golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -475,16 +460,16 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
-golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
+golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
-golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
-golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
+golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
+golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -492,8 +477,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
-golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
+golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
+golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -502,10 +487,9 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
-golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
-golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
+golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
+golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.239.0 h1:2hZKUnFZEy81eugPs4e2XzIJ5SOwQg0G82bpXD65Puo=
google.golang.org/api v0.239.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50=
google.golang.org/genai v1.13.0 h1:LRhwx5PU+bXhfnXyPEHu2kt9yc+MpvuYbajxSorOJjg=
diff --git a/backend/internal/model/handler/http/v1/model.go b/backend/internal/model/handler/http/v1/model.go
index 2be049d4..791aaa3d 100644
--- a/backend/internal/model/handler/http/v1/model.go
+++ b/backend/internal/model/handler/http/v1/model.go
@@ -2,7 +2,6 @@ package v1
import (
"context"
- "errors"
"log/slog"
"strings"
@@ -53,7 +52,7 @@ func NewModelHandler(
// @Accept json
// @Produce json
// @Param model body domain.CheckModelReq true "模型"
-// @Success 200 {object} web.Resp{data=domain.Model}
+// @Success 200 {object} web.Resp{data=domain.CheckModelResp}
// @Router /api/v1/model/check [post]
func (h *ModelHandler) Check(c *web.Context, req domain.CheckModelReq) error {
modelkitRes, err := modelkit.CheckModel(c.Request().Context(), &modelkitDomain.CheckModelReq{
@@ -66,10 +65,14 @@ func (h *ModelHandler) Check(c *web.Context, req domain.CheckModelReq) error {
Type: string(req.Type),
})
if err != nil {
- return err
+ return c.Success(domain.CheckModelResp{
+ Error: err.Error(),
+ })
}
if modelkitRes.Error != "" {
- return errors.New(modelkitRes.Error)
+ return c.Success(domain.CheckModelResp{
+ Error: modelkitRes.Error,
+ })
}
// 将输出转化为monkeycode格式
@@ -81,7 +84,10 @@ func (h *ModelHandler) Check(c *web.Context, req domain.CheckModelReq) error {
}
// end
- return c.Success(m)
+ return c.Success(domain.CheckModelResp{
+ Model: m,
+ Error: "",
+ })
}
// List 获取模型列表
diff --git a/ui/package.json b/ui/package.json
index f8166adb..e8bbb8bd 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -19,7 +19,7 @@
"@mui/icons-material": "^6.4.12",
"@mui/lab": "6.0.0-beta.19",
"@mui/material": "^6.4.12",
- "@yokowu/modelkit-ui": "0.4.2",
+ "@yokowu/modelkit-ui": "0.6.0",
"ahooks": "^3.8.4",
"axios": "^1.9.0",
"dayjs": "^1.11.7",
@@ -51,6 +51,7 @@
"@types/react-dom": "^19.1.2",
"@types/react-syntax-highlighter": "^15.5.13",
"@vitejs/plugin-react": "^4.4.1",
+ "dotenv": "^17.2.1",
"eslint": "^9.25.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19",
diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml
index 2b811efd..3f7b5050 100644
--- a/ui/pnpm-lock.yaml
+++ b/ui/pnpm-lock.yaml
@@ -33,8 +33,8 @@ importers:
specifier: ^6.4.12
version: 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@yokowu/modelkit-ui':
- specifier: 0.4.2
- version: 0.4.2(8525073519bd78ecc27b6ab63a7efdab)
+ specifier: 0.6.0
+ version: 0.6.0(8525073519bd78ecc27b6ab63a7efdab)
ahooks:
specifier: ^3.8.4
version: 3.9.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -123,6 +123,9 @@ importers:
'@vitejs/plugin-react':
specifier: ^4.4.1
version: 4.7.0(vite@6.3.5(@types/node@24.2.1)(jiti@2.5.1))
+ dotenv:
+ specifier: ^17.2.1
+ version: 17.2.1
eslint:
specifier: ^9.25.0
version: 9.33.0(jiti@2.5.1)
@@ -1108,8 +1111,8 @@ packages:
'@vue/shared@3.5.18':
resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
- '@yokowu/modelkit-ui@0.4.2':
- resolution: {integrity: sha512-UqbllIW1baY3vo9oOFpiKCki8NPBKBE98DRCkALLN5PVtfkw3nieimvvi/mbyViaY/5Ry+83UFr5YEECg6Hu1A==}
+ '@yokowu/modelkit-ui@0.6.0':
+ resolution: {integrity: sha512-STKsF+4QXIgkZHRISxbhJEF5AdMkUvCIeIdwdYxQUkrlCENkLLyYijH63bxNSm6c/DVB+tYbSDHg8XdSFDI6KQ==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -3751,7 +3754,7 @@ snapshots:
'@vue/shared@3.5.18': {}
- '@yokowu/modelkit-ui@0.4.2(8525073519bd78ecc27b6ab63a7efdab)':
+ '@yokowu/modelkit-ui@0.6.0(8525073519bd78ecc27b6ab63a7efdab)':
dependencies:
'@c-x/ui': 1.0.9(87983aa74373e7bdff176d7db35e2938)
'@mui/material': 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
diff --git a/ui/src/api/Model.ts b/ui/src/api/Model.ts
index 4cfb25ac..b64d7d02 100644
--- a/ui/src/api/Model.ts
+++ b/ui/src/api/Model.ts
@@ -23,6 +23,7 @@ import {
GetGetTokenUsageParams,
GetMyModelListParams,
GithubComChaitinMonkeyCodeBackendDomainCheckModelReq,
+ GithubComChaitinMonkeyCodeBackendDomainCheckModelResp,
WebResp,
} from "./types";
@@ -143,7 +144,7 @@ export const deleteDeleteModel = (
* @summary 检查模型
* @request POST:/api/v1/model/check
* @response `200` `(WebResp & {
- data?: DomainModel,
+ data?: GithubComChaitinMonkeyCodeBackendDomainCheckModelResp,
})` OK
*/
@@ -154,7 +155,7 @@ export const postCheckModel = (
) =>
request<
WebResp & {
- data?: DomainModel;
+ data?: GithubComChaitinMonkeyCodeBackendDomainCheckModelResp;
}
>({
path: `/api/v1/model/check`,
diff --git a/ui/src/api/types.ts b/ui/src/api/types.ts
index 468e03b9..bf290698 100644
--- a/ui/src/api/types.ts
+++ b/ui/src/api/types.ts
@@ -36,6 +36,47 @@ export enum GithubComChaitinMonkeyCodeBackendConstsModelProvider {
ModelProviderVolcengine = "Volcengine",
ModelProviderZhiPu = "ZhiPu",
ModelProviderGemini = "Gemini",
+ ModelProviderAiHubMix = "AiHubMix",
+ ModelProviderOcoolAI = "OcoolAI",
+ ModelProviderPPIO = "PPIO",
+ ModelProviderAlayaNew = "AlayaNew",
+ ModelProviderQiniu = "Qiniu",
+ ModelProviderDMXAPI = "DMXAPI",
+ ModelProviderBurnCloud = "BurnCloud",
+ ModelProviderTokenFlux = "TokenFlux",
+ ModelProvider302AI = "302AI",
+ ModelProviderCephalon = "Cephalon",
+ ModelProviderLanyun = "Lanyun",
+ ModelProviderPH8 = "PH8",
+ ModelProviderOpenRouter = "OpenRouter",
+ ModelProviderNewAPI = "NewAPI",
+ ModelProviderLMStudio = "LMStudio",
+ ModelProviderAnthropic = "Anthropic",
+ ModelProviderVertexAI = "VertexAI",
+ ModelProviderGithub = "Github",
+ ModelProviderCopilot = "Copilot",
+ ModelProviderYi = "Yi",
+ ModelProviderBaichuan = "Baichuan",
+ ModelProviderStepFun = "StepFun",
+ ModelProviderInfini = "Infini",
+ ModelProviderMiniMax = "MiniMax",
+ ModelProviderGroq = "Groq",
+ ModelProviderTogether = "Together",
+ ModelProviderFireworks = "Fireworks",
+ ModelProviderNvidia = "Nvidia",
+ ModelProviderGrok = "Grok",
+ ModelProviderHyperbolic = "Hyperbolic",
+ ModelProviderMistral = "Mistral",
+ ModelProviderJina = "Jina",
+ ModelProviderPerplexity = "Perplexity",
+ ModelProviderModelScope = "ModelScope",
+ ModelProviderXirang = "Xirang",
+ ModelProviderTencentCloudTI = "TencentCloudTI",
+ ModelProviderBaiduCloud = "BaiduCloud",
+ ModelProviderGPUStack = "GPUStack",
+ ModelProviderVoyageAI = "VoyageAI",
+ ModelProviderAWSBedrock = "AWSBedrock",
+ ModelProviderPoe = "Poe",
ModelProviderOther = "Other",
}
@@ -450,20 +491,7 @@ export interface DomainCreateModelReq {
/** 高级参数 */
param?: DomainModelParam;
/** 提供商 */
- provider:
- | "SiliconFlow"
- | "OpenAI"
- | "Ollama"
- | "DeepSeek"
- | "Moonshot"
- | "AzureOpenAI"
- | "BaiZhiCloud"
- | "Hunyuan"
- | "BaiLian"
- | "Volcengine"
- | "ZhiPu"
- | "Gemini"
- | "Other";
+ provider: GithubComChaitinMonkeyCodeBackendConstsModelProvider;
/** 模型显示名称 */
show_name?: string;
}
@@ -848,20 +876,7 @@ export interface DomainModelBasic {
/** 模型名称 */
name?: string;
/** 提供商 */
- provider:
- | "SiliconFlow"
- | "OpenAI"
- | "Ollama"
- | "DeepSeek"
- | "Moonshot"
- | "AzureOpenAI"
- | "BaiZhiCloud"
- | "Hunyuan"
- | "BaiLian"
- | "Volcengine"
- | "ZhiPu"
- | "Gemini"
- | "Other";
+ provider: GithubComChaitinMonkeyCodeBackendConstsModelProvider;
}
export interface DomainModelData {
@@ -1168,20 +1183,7 @@ export interface DomainUpdateModelReq {
/** 高级参数 */
param?: DomainModelParam;
/** 提供商 */
- provider:
- | "SiliconFlow"
- | "OpenAI"
- | "Ollama"
- | "DeepSeek"
- | "Moonshot"
- | "AzureOpenAI"
- | "BaiZhiCloud"
- | "Hunyuan"
- | "BaiLian"
- | "Volcengine"
- | "ZhiPu"
- | "Gemini"
- | "Other";
+ provider: GithubComChaitinMonkeyCodeBackendConstsModelProvider;
/** 模型显示名称 */
show_name?: string;
/** 状态 active:启用 inactive:禁用 */
@@ -1387,6 +1389,11 @@ export interface GithubComChaitinMonkeyCodeBackendDomainCheckModelReq {
type: "llm" | "coder" | "embedding" | "rerank";
}
+export interface GithubComChaitinMonkeyCodeBackendDomainCheckModelResp {
+ error?: string;
+ model?: DomainModel;
+}
+
export interface GithubComChaitinMonkeyCodeBackendDomainModelListResp {
data?: DomainModelData[];
object?: string;
@@ -1714,6 +1721,47 @@ export interface GetGetProviderModelListParams {
| "Volcengine"
| "ZhiPu"
| "Gemini"
+ | "AiHubMix"
+ | "OcoolAI"
+ | "PPIO"
+ | "AlayaNew"
+ | "Qiniu"
+ | "DMXAPI"
+ | "BurnCloud"
+ | "TokenFlux"
+ | "302AI"
+ | "Cephalon"
+ | "Lanyun"
+ | "PH8"
+ | "OpenRouter"
+ | "NewAPI"
+ | "LMStudio"
+ | "Anthropic"
+ | "VertexAI"
+ | "Github"
+ | "Copilot"
+ | "Yi"
+ | "Baichuan"
+ | "StepFun"
+ | "Infini"
+ | "MiniMax"
+ | "Groq"
+ | "Together"
+ | "Fireworks"
+ | "Nvidia"
+ | "Grok"
+ | "Hyperbolic"
+ | "Mistral"
+ | "Jina"
+ | "Perplexity"
+ | "ModelScope"
+ | "Xirang"
+ | "TencentCloudTI"
+ | "BaiduCloud"
+ | "GPUStack"
+ | "VoyageAI"
+ | "AWSBedrock"
+ | "Poe"
| "Other";
type: "llm" | "coder" | "embedding" | "audio" | "reranker";
}
diff --git a/ui/src/assets/fonts/iconfont.js b/ui/src/assets/fonts/iconfont.js
index 649f931d..234dd5d4 100644
--- a/ui/src/assets/fonts/iconfont.js
+++ b/ui/src/assets/fonts/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_4940939='',(l=>{var a=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,m,z=function(a,c){c.parentNode.insertBefore(a,c)};if(a&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_4940939,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?z(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=l.document,m=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,d())})}function d(){m||(m=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(p,50)}d()}})(window);
\ No newline at end of file
+window._iconfont_svg_string_4940939='',(l=>{var a=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,m,z=function(a,c){c.parentNode.insertBefore(a,c)};if(a&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_4940939,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?z(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=l.document,m=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,d())})}function d(){m||(m=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(p,50)}d()}})(window);
\ No newline at end of file
diff --git a/ui/src/pages/model/components/services/modelService.ts b/ui/src/pages/model/components/services/modelService.ts
index 13455261..77d01923 100644
--- a/ui/src/pages/model/components/services/modelService.ts
+++ b/ui/src/pages/model/components/services/modelService.ts
@@ -152,8 +152,8 @@ export const modelService: IModelService = {
const localData = convertUICheckToLocalCheck(data);
const result = await postCheckModel(localData);
- const model: Model = result;
- const error: string = '';
+ const model: Model = result.model || {};
+ const error: string = result.error || '';
return { model, error };
},