From ce1ebfa4b5a454ffbfcb8f3d12213ccdfea828d2 Mon Sep 17 00:00:00 2001 From: jiangwel Date: Fri, 22 Aug 2025 16:40:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(ModelModal):=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=B1=BB=E5=9E=8B=E6=94=AF=E6=8C=81=E5=B9=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为ModelProviderConfig接口添加chat/code/embedding/rerank字段,用于支持不同模型类型的筛选 更新package.json版本至0.5.1并添加echo/v4为主依赖 在main.go中添加错误处理逻辑 --- go.mod | 2 +- test/main.go | 5 +- ui/ModelModal/package.json | 2 +- ui/ModelModal/src/ModelModal.tsx | 20 ++- ui/ModelModal/src/constants/providers.ts | 148 +++++++++++++++++++++++ ui/ModelModal/src/types/types.ts | 4 + 6 files changed, 173 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 4373925..a23ec3a 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/cloudwego/eino-ext/components/model/openai v0.0.0-20250710065240-482d48888f25 github.com/google/generative-ai-go v0.20.1 github.com/google/uuid v1.6.0 + github.com/labstack/echo/v4 v4.13.4 github.com/ollama/ollama v0.6.5 github.com/yuin/goldmark v1.7.11 google.golang.org/api v0.239.0 @@ -57,7 +58,6 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/labstack/echo/v4 v4.13.4 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect diff --git a/test/main.go b/test/main.go index 930dad0..be81ef7 100644 --- a/test/main.go +++ b/test/main.go @@ -97,5 +97,8 @@ func main() { NewModelKit(echo, nil, false) - echo.Start(":8080") + err := echo.Start(":8080") + if err != nil { + fmt.Println("err:", err) + } } diff --git a/ui/ModelModal/package.json b/ui/ModelModal/package.json index 6969bcf..0e5af27 100644 --- a/ui/ModelModal/package.json +++ b/ui/ModelModal/package.json @@ -1,6 +1,6 @@ { "name": "@yokowu/modelkit-ui", - "version": "0.5.0", + "version": "0.5.1", "description": "A reusable AI model configuration modal component for React applications", "private": false, "type": "module", diff --git a/ui/ModelModal/src/ModelModal.tsx b/ui/ModelModal/src/ModelModal.tsx index 4a296df..f0d3c15 100644 --- a/ui/ModelModal/src/ModelModal.tsx +++ b/ui/ModelModal/src/ModelModal.tsx @@ -376,12 +376,22 @@ export const ModelModal: React.FC = ({ {Object.values(providers) .filter((it) => { - // 当model_type为chat或llm时显示所有供应商 - if (model_type === 'chat' || model_type === 'llm' || model_type === 'code' || model_type === 'coder') { - return true; + // 根据model_type和provider配置决定是否显示 + switch (model_type) { + case 'chat': + case 'llm': + return it.chat; + case 'code': + case 'coder': + return it.code; + case 'embedding': + return it.embedding; + case 'rerank': + case 'reranker': + return it.rerank; + default: + return it.label === 'BaiZhiCloud' || it.label === 'Other'; } - // 其他情况只显示百智云和其它 - return it.label === 'BaiZhiCloud' || it.label === 'Other'; }) .map((it) => ( .openai.azure.com', }, @@ -119,6 +163,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: false, + rerank: false, modelDocumentUrl: 'https://ai.google.dev/gemini-api/docs', defaultBaseUrl: 'https://generativelanguage.googleapis.com', }, @@ -129,6 +177,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://developer.qiniu.com/aitokenapi', defaultBaseUrl: 'https://api.qnaigc.com/v1', }, @@ -179,6 +231,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://platform.lingyiwanwu.com/docs', defaultBaseUrl: 'https://api.lingyiwanwu.com/v1', }, @@ -250,6 +306,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://www.ctyun.cn/products/ctxirang', defaultBaseUrl: 'https://wishub-x1.ctyun.cn/v1', }, @@ -260,6 +320,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://cloud.tencent.com/document/product/1772', defaultBaseUrl: 'https://api.lkeap.cloud.tencent.com/v1', }, @@ -270,6 +334,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://cloud.baidu.com/doc/index.html', defaultBaseUrl: 'https://qianfan.baidubce.com/v2', }, @@ -280,6 +348,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://modelscope.cn/docs/model-service/API-Inference/intro', defaultBaseUrl: 'https://api-inference.modelscope.cn/v1', }, @@ -290,6 +362,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.infini-ai.com/gen-studio/api/maas.html#/operations/chatCompletions', defaultBaseUrl: 'https://cloud.infini-ai.com/maas/v1', }, @@ -300,6 +376,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://platform.stepfun.com/docs/overview/concept', defaultBaseUrl: 'https://api.stepfun.com/v1', }, @@ -310,6 +390,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://archive.lanyun.net/#/maas/', defaultBaseUrl: 'https://maas-api.lanyun.net/v1', }, @@ -320,6 +404,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.alayanew.com/docs/modelService/interview?utm_source=cherrystudio', defaultBaseUrl: 'https://deepseek.alayanew.com/v1', }, @@ -330,6 +418,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.cherry-ai.com/pre-basic/providers/ppio?invited_by=JYT9GD&utm_source=github_cherry-studio', defaultBaseUrl: 'https://api.ppinfra.com/v3/openai', }, @@ -340,6 +432,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://doc.aihubmix.com/', defaultBaseUrl: 'https://aihubmix.com/v1', }, @@ -350,6 +446,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.ocoolai.com/', defaultBaseUrl: 'https://api.ocoolai.com/v1', }, @@ -360,6 +460,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://dmxapi.cn/models.html#code-block', defaultBaseUrl: 'https://www.dmxapi.cn/v1', }, @@ -370,6 +474,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://ai.burncloud.com/docs', defaultBaseUrl: 'https://ai.burncloud.com/v1', }, @@ -390,6 +498,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.api.nvidia.com/nim/reference/llm-apis', defaultBaseUrl: 'https://integrate.api.nvidia.com/v1', }, @@ -400,6 +512,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://tokenflux.ai/docs', defaultBaseUrl: 'https://tokenflux.ai/v1', }, @@ -410,6 +526,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: false, + rerank: false, modelDocumentUrl: 'https://302ai.apifox.cn/api-147522039', defaultBaseUrl: 'https://api.302.ai/v1', }, @@ -420,6 +540,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://cephalon.cloud/apitoken/1864244127731589124', defaultBaseUrl: 'https://cephalon.cloud/user-center/v1/model', }, @@ -430,6 +554,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://openrouter.ai/docs/quick-start', defaultBaseUrl: 'https://openrouter.ai/api/v1', }, @@ -440,6 +568,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.fireworks.ai/getting-started/introduction', defaultBaseUrl: 'https://api.fireworks.ai/inference/v1', }, @@ -450,6 +582,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.mistral.ai', defaultBaseUrl: 'https://api.mistral.ai/v1', }, @@ -460,6 +596,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.perplexity.ai/home', defaultBaseUrl: 'https://api.perplexity.ai', }, @@ -470,6 +610,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, + chat: false, + code: false, + embedding: false, + rerank: false, modelDocumentUrl: 'https://docs.hyperbolic.xyz', defaultBaseUrl: 'https://api.hyperbolic.xyz/v1', }, @@ -500,6 +644,10 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: true, secretRequired: true, customHeader: false, + chat: true, + code: true, + embedding: true, + rerank: true, modelDocumentUrl: '', defaultBaseUrl: '', }, diff --git a/ui/ModelModal/src/types/types.ts b/ui/ModelModal/src/types/types.ts index 094933f..3a7a890 100644 --- a/ui/ModelModal/src/types/types.ts +++ b/ui/ModelModal/src/types/types.ts @@ -53,6 +53,10 @@ export interface ModelProviderConfig { urlWrite: boolean; secretRequired: boolean; customHeader: boolean; + chat: boolean; + code: boolean; + embedding: boolean; + rerank: boolean; modelDocumentUrl?: string; defaultBaseUrl: string; }