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 }; },