From 373d7f8201dba67b9f167993766dbd5302847e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BB=98?= <925456043@qq.com> Date: Wed, 11 Mar 2026 20:33:04 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=A8=A1=E5=9E=8B=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E9=87=8D=E5=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/ai/ModelController.java | 31 +- .../easyflow/ai/entity/base/ModelBase.java | 15 +- .../easyflow/ai/service/ModelService.java | 5 +- .../ai/service/impl/ModelServiceImpl.java | 13 +- .../src/main/resources/application-prod.yml | 4 +- .../app/public/model-providers/aliyun.png | Bin 0 -> 7399 bytes .../app/public/model-providers/deepseek.png | Bin 0 -> 8803 bytes .../app/public/model-providers/kimi.png | Bin 0 -> 7295 bytes .../app/public/model-providers/minimax.png | Bin 0 -> 1877 bytes .../app/public/model-providers/ollama.png | Bin 0 -> 1797 bytes .../app/public/model-providers/openai.ico | 1 + .../app/public/model-providers/openai.svg | 10 + .../public/model-providers/self-hosted.svg | 8 + .../public/model-providers/siliconflow.png | Bin 0 -> 583 bytes .../app/public/model-providers/zhipu.png | Bin 0 -> 2747 bytes easyflow-ui-admin/app/src/api/ai/llm.ts | 16 +- .../app/src/components/page/ListPageShell.vue | 14 +- .../page/__tests__/CardList.test.ts | 112 ++ .../app/src/locales/langs/en-US/llm.json | 1 - .../app/src/locales/langs/zh-CN/llm.json | 1 - .../views/ai/model/ActiveModelWorkspace.vue | 774 ++++++++ .../app/src/views/ai/model/AddModelModal.vue | 552 +++--- .../views/ai/model/AddModelProviderModal.vue | 470 +++-- .../src/views/ai/model/ManageModelModal.vue | 350 ---- .../app/src/views/ai/model/Model.vue | 1601 +++++++++++------ .../src/views/ai/model/ModelProviderBadge.vue | 155 ++ .../src/views/ai/model/ModelVerifyConfig.vue | 297 ++- .../views/ai/model/ModelViewItemOperation.vue | 452 +++-- .../modelUtils/__tests__/defaultIcon.test.ts | 17 + .../__tests__/providerDraft.test.ts | 67 + .../views/ai/model/modelUtils/defaultIcon.ts | 65 +- .../ai/model/modelUtils/providerDraft.ts | 72 + .../ai/model/modelUtils/providerList.json | 714 +++----- .../ui/authentication/__tests__/login.test.ts | 152 ++ sql/02-easyflow-v2.data.sql | 89 +- ...-easyflow-v2.p4-model-provider-refresh.sql | 81 + sql/initdb/02-easyflow-v2.data.sql | 89 +- 37 files changed, 4120 insertions(+), 2108 deletions(-) create mode 100644 easyflow-ui-admin/app/public/model-providers/aliyun.png create mode 100644 easyflow-ui-admin/app/public/model-providers/deepseek.png create mode 100644 easyflow-ui-admin/app/public/model-providers/kimi.png create mode 100644 easyflow-ui-admin/app/public/model-providers/minimax.png create mode 100644 easyflow-ui-admin/app/public/model-providers/ollama.png create mode 100644 easyflow-ui-admin/app/public/model-providers/openai.ico create mode 100644 easyflow-ui-admin/app/public/model-providers/openai.svg create mode 100644 easyflow-ui-admin/app/public/model-providers/self-hosted.svg create mode 100644 easyflow-ui-admin/app/public/model-providers/siliconflow.png create mode 100644 easyflow-ui-admin/app/public/model-providers/zhipu.png create mode 100644 easyflow-ui-admin/app/src/components/page/__tests__/CardList.test.ts create mode 100644 easyflow-ui-admin/app/src/views/ai/model/ActiveModelWorkspace.vue delete mode 100644 easyflow-ui-admin/app/src/views/ai/model/ManageModelModal.vue create mode 100644 easyflow-ui-admin/app/src/views/ai/model/ModelProviderBadge.vue create mode 100644 easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/defaultIcon.test.ts create mode 100644 easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/providerDraft.test.ts create mode 100644 easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerDraft.ts create mode 100644 easyflow-ui-admin/packages/effects/common-ui/src/ui/authentication/__tests__/login.test.ts create mode 100644 sql/07-easyflow-v2.p4-model-provider-refresh.sql diff --git a/easyflow-api/easyflow-api-admin/src/main/java/tech/easyflow/admin/controller/ai/ModelController.java b/easyflow-api/easyflow-api-admin/src/main/java/tech/easyflow/admin/controller/ai/ModelController.java index 95b22da..6f248f3 100644 --- a/easyflow-api/easyflow-api-admin/src/main/java/tech/easyflow/admin/controller/ai/ModelController.java +++ b/easyflow-api/easyflow-api-admin/src/main/java/tech/easyflow/admin/controller/ai/ModelController.java @@ -92,13 +92,6 @@ public class ModelController extends BaseCurdController { return Result.ok(); } - @PostMapping("/updateByEntity") - @SaCheckPermission("/api/v1/model/save") - public Result updateByEntity(@RequestBody Model entity) { - modelService.updateByEntity(entity); - return Result.ok(); - } - @GetMapping("/selectLlmByProviderCategory") @SaCheckPermission("/api/v1/model/query") public Result>> selectLlmByProviderCategory(Model entity, String sortKey, String sortType) { @@ -129,19 +122,6 @@ public class ModelController extends BaseCurdController { } - /** - * 添加所有模型 - * - * @param entity - * @return - */ - @PostMapping("addAllLlm") - public Result addAllLlm(@JsonBody Model entity) { - QueryWrapper queryWrapper = QueryWrapper.create().eq(Model::getProviderId, entity.getProviderId()); - service.update(entity, queryWrapper); - return Result.ok(); - } - @GetMapping("/selectLlmList") @SaCheckPermission("/api/v1/model/query") public Result> selectLlmList(Model entity, Boolean asTree, String sortKey, String sortType) { @@ -154,15 +134,6 @@ public class ModelController extends BaseCurdController { return Result.ok(totalList); } - @Override - protected Result onSaveOrUpdateBefore(Model entity, boolean isSave) { - if (isSave) { - entity.setWithUsed(true); - } - return super.onSaveOrUpdateBefore(entity, isSave); - } - - @PostMapping("removeLlmByIds") @Transactional public Result removeLlm(@JsonBody(value = "id", required = true) Serializable id) { @@ -171,4 +142,4 @@ public class ModelController extends BaseCurdController { service.remove(queryWrapper); return Result.ok(); } -} \ No newline at end of file +} diff --git a/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/entity/base/ModelBase.java b/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/entity/base/ModelBase.java index 7547c62..a71e627 100644 --- a/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/entity/base/ModelBase.java +++ b/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/entity/base/ModelBase.java @@ -4,6 +4,7 @@ import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.core.handler.FastjsonTypeHandler; + import java.io.Serializable; import java.math.BigInteger; import java.util.Map; @@ -103,12 +104,6 @@ public class ModelBase implements Serializable { @Column(comment = "模型类型: chatModel/embeddingModel/rerankModel/orc..") private String modelType; - /** - * 是否使用 - */ - @Column(comment = "是否使用") - private Boolean withUsed; - /** * 是否支持推理 */ @@ -277,14 +272,6 @@ public class ModelBase implements Serializable { this.modelType = modelType; } - public Boolean getWithUsed() { - return withUsed; - } - - public void setWithUsed(Boolean withUsed) { - this.withUsed = withUsed; - } - public Boolean getSupportThinking() { return supportThinking; } diff --git a/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/ModelService.java b/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/ModelService.java index cc2368e..b9b1f2a 100644 --- a/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/ModelService.java +++ b/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/ModelService.java @@ -1,8 +1,7 @@ package tech.easyflow.ai.service; -import tech.easyflow.ai.entity.Model; import com.mybatisflex.core.service.IService; -import tech.easyflow.common.domain.Result; +import tech.easyflow.ai.entity.Model; import java.math.BigInteger; import java.util.List; @@ -25,6 +24,4 @@ public interface ModelService extends IService { void removeByEntity(Model entity); Model getModelInstance(BigInteger modelId); - - void updateByEntity(Model entity); } diff --git a/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/impl/ModelServiceImpl.java b/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/impl/ModelServiceImpl.java index 6f932ed..9a102b3 100644 --- a/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/impl/ModelServiceImpl.java +++ b/easyflow-modules/easyflow-module-ai/src/main/java/tech/easyflow/ai/service/impl/ModelServiceImpl.java @@ -2,13 +2,13 @@ package tech.easyflow.ai.service.impl; import cn.hutool.core.util.StrUtil; +import com.alicp.jetcache.Cache; import com.easyagents.core.document.Document; import com.easyagents.core.model.chat.ChatModel; import com.easyagents.core.model.chat.ChatOptions; import com.easyagents.core.model.embedding.EmbeddingModel; import com.easyagents.core.model.rerank.RerankModel; import com.easyagents.core.store.VectorData; -import com.alicp.jetcache.Cache; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import org.slf4j.Logger; @@ -21,7 +21,6 @@ import tech.easyflow.ai.entity.ModelProvider; import tech.easyflow.ai.mapper.ModelMapper; import tech.easyflow.ai.service.ModelProviderService; import tech.easyflow.ai.service.ModelService; -import tech.easyflow.common.domain.Result; import tech.easyflow.common.web.exceptions.BusinessException; import javax.annotation.Resource; @@ -92,7 +91,6 @@ public class ModelServiceImpl extends ServiceImpl implements QueryWrapper queryWrapper = new QueryWrapper() .eq(Model::getProviderId, entity.getProviderId()); - queryWrapper.eq(Model::getWithUsed, entity.getWithUsed()); List totalList = modelMapper.selectListWithRelationsByQuery(queryWrapper); for (String modelType : Model.MODEL_TYPES) { Map> groupMap = groupLlmByGroupName(totalList, modelType); @@ -212,13 +210,4 @@ public class ModelServiceImpl extends ServiceImpl implements return model; } - - @Override - public void updateByEntity(Model entity) { - QueryWrapper queryWrapper = QueryWrapper.create().eq(Model::getProviderId, entity.getProviderId()) - .eq(Model::getGroupName, entity.getGroupName()); - Model model = new Model(); - model.setWithUsed(entity.getWithUsed()); - modelMapper.updateByQuery(model, queryWrapper); - } } diff --git a/easyflow-starter/easyflow-starter-all/src/main/resources/application-prod.yml b/easyflow-starter/easyflow-starter-all/src/main/resources/application-prod.yml index 758c530..ec41fd3 100644 --- a/easyflow-starter/easyflow-starter-all/src/main/resources/application-prod.yml +++ b/easyflow-starter/easyflow-starter-all/src/main/resources/application-prod.yml @@ -3,9 +3,9 @@ spring: activate: on-profile: prod datasource: - url: jdbc:mysql://127.0.0.1:3306/easyflow?useInformationSchema=true&characterEncoding=utf-8 + url: jdbc:mysql://127.0.0.1:23306/easyflow?useInformationSchema=true&characterEncoding=utf-8 username: easyflow - password: 123456 + password: root data: redis: host: 127.0.0.1 diff --git a/easyflow-ui-admin/app/public/model-providers/aliyun.png b/easyflow-ui-admin/app/public/model-providers/aliyun.png new file mode 100644 index 0000000000000000000000000000000000000000..29fbfa6813e74ecd2aab527b125f57af8dacadfe GIT binary patch literal 7399 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 F{tpizLT&&6 literal 0 HcmV?d00001 diff --git a/easyflow-ui-admin/app/public/model-providers/kimi.png b/easyflow-ui-admin/app/public/model-providers/kimi.png new file mode 100644 index 0000000000000000000000000000000000000000..294e9efcb53acb95bacfe32a38fca1521a18987d GIT binary patch literal 7295 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 Z{68os#UUsSnSuZS002ovPDHLkV1i+-=Rp7f literal 0 HcmV?d00001 diff --git a/easyflow-ui-admin/app/public/model-providers/minimax.png b/easyflow-ui-admin/app/public/model-providers/minimax.png new file mode 100644 index 0000000000000000000000000000000000000000..a79385908ea557fa9d6bb0ee65e327777b5fcc98 GIT binary patch literal 1877 zcmV-b2demqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$_zez+vR9FdpS6yrsMHK#Kc5i=y zA|OA8f&m2!429|2sCG3m1m(oc|k2-?ZF@!(1z3z8Bz3m8%E0~aKMPKl9(>Xmerw&zIXBhK^) z$xqosLok0XdlgZXEFqIO3H%I=+7z?}sFtvXp_2$NWi3f zO^i`%t(k)~dWG)KF&S-|m+Zj>0W?Q|td6wo)zkx1nztM5s0nI$8&e@lzq8m&u&x*> z9;3l->a20W(!-TU(iaj|Dafd#Em(=8jEpJELO;Ak5A1?*r-*0zDW4}g*W@KwY<}wc z6fbTo5qfz6s3Hwb3-wb8yJ8pr-CfbaDUrZ%EZb7mz_VZ>8JAbb0+_S^PYkN(4WfHRkpTLcb zAllex+IBq+)76Re^l3DX9t9fJ0^ue-1GmsJVUmSrlFgGYTv-a@jcZNRw-VKX&tTfy zQF&xDPep|I@$GQKqo{p)4EBL7Fe{e(>_~b7UU+*%&7C#5Hn(d^m|t`6q02e18*X9> z$xpwzbaWhMK@U)gVdi!t`Qrl8v*&=>S(uIvZXbcV`_TQ~t`hv=M-~Y+LFp3DZ$AabGVD6Qt*d;bs~%$!Pjc zQ#7wBiDYtJ-LR`x0`==GxfiJPlkqSH%v~vLscS0MbiME}+PC#7)!OmXs2=>Xu#mN* zubkWf5#DMfY`VJ<^*;~0dbLy;xZ}s*P7YELEctm6CSu#v$lNaOLHpKqnBG5#>mMFR z+x88xx6Prkw+@*v`-vuCImhqCqD8Rl)+0GMfOO~t%>7$|_71Vqbr)M%0;wFHQW>F* zDoT^#3D|k<>~p~Lt<76&FzJS%qRUkJb~a+_>u{43!1x$X3#)KU+(vH33}nYZ7Tr`L zbnUzs@m-6#R2i&p{Q#@s^&yhh;G!t+v)oIK^HI)NBzX;xl$y>qbnM)O`0gcS={HNs zP4LUDJn=$)Qz>Uz2Fm(kTATt3U5&eZwt;xfQcWG05m%RdaS2*mmboICJ|pEgg$wf% zh_x7Giz=pEgqb?3$9_cngX=KoRC%s3#lNCBvC#_tX|$seOa-R zi&uC@;cX|<(^7_%=zh$yR~sDC>scmI5XBECMlzReV)y&6NN11 z&OP82cL{;ZVYxSEd0C4QufNkoYkGm18c#`r%9C4Bd171H6s|gh`r(gVN)qm$NhC)O zIU&_lM?w-ALid1#QW7~6As_>4n2F^47-}caqH_;tb$tfa_gPYFb2{jo8CDPM` zW?jvKTvpsPzxA4K^;0u(mSqq{kY?{3k+b>U67c{PmqnRtyk%2#6}3WnyUer2TXo9! zCJF@_C&dq}i|`F2ze`cQ1)q*0DWn4DN0}^FF)F#4HB%C=v4}{*;NP)P##adWCS3!uKeCo11mk_Kv(Js%!iQ z^$j||$lnmhtURIVI?5o+r(oW^Nu;t?c5KO#)eEPn-(ynyI{W`d2fxLCpg*1epzs&c P00000NkvXXu0mjf;;v%_ literal 0 HcmV?d00001 diff --git a/easyflow-ui-admin/app/public/model-providers/ollama.png b/easyflow-ui-admin/app/public/model-providers/ollama.png new file mode 100644 index 0000000000000000000000000000000000000000..5886fb91f2027bda5e92eaca4c0e4be495f1191e GIT binary patch literal 1797 zcmV+g2m1JlP)^L9hX(gL&^i$>q5W$$TXN zp5Hlh2qc-z+_^LNW5R)I8Lf3fA6+VERFa|`6`zs?m1XhyMdcIa;NW1P{xzu6T`FTL zsjg2-rKfYP+7GtWaT7diymLWN1NwTq9XCm-^whS2ShqRY{VlCg6IHj*e8P)2XT#7Gy+LW1`wZ z=kuFtG9A#4jOqIvAHj{{RrbA__d5tN+3}v4WMduUx=&3+3 zio9U)!iEvWrySAi>uW`Bt+g&_2B~;vK^`9;v)@qn-Q8XG94vrx;j7Xx2Z&%N8(N?P z=RPC7K;=1)eehW@WBiMPA@^JQ0nu~c#lypc3dQFhnAAx6e2`56o#)#U70Aua&4yaT zo})lL(LkteOjwM2AOtu&ToqLIOltrGA zQ{ivkKnG@TN#bh_==b}2+YAPSx&c?poe%aV*%fl3jBtuT0s#c|K#o2h>PSqq z3c_KTEsD^B9;`q|1@Q9nvN~=u?-v6WN1Feu@AvojDv%B|z$>U`q{JP$xvgLeoIH4T zrn@9E5Q%tLYsf(foRS}y0#W{Cl^Y5>4gX*?8f`c#_zpF_xVTWq$H$87a8_`P-`M>% z??GLtvnu|NbcwTDRfxD;p(xJF(SWbOAbn+~&C3evmFaZpYFFg}Wk43XC`SvRYzoNy zpb{~Fbehn?@p!z}P^=}eF4DZR@MLZgrEIT33f3c0x<-%y%!ip~$IJ$!Q*x2=ahRlo zgL})e!x9Kj)mWE;1t3*YW@{NV5TnP!Vf8dSkCDQ)TqK+kW(|TMWt}1IaS`kWnKrnO_91csH?mO?~nt|iVWU?}GT=1K`&UZwm z6_AdXCrLIDbbuw0jtNxN7pbnU5|Ut%;dx+gB1PXhEshwsuRM?oPe>?Cb6ru#vVB41 z`OHNQ3nn&8kP;8^?d9Sp^MxMFS4TR3vC#{;0PZpw!qnI*>!R;jTD-`PM(3FSK^B}5 zmiq$1>6CpSa&KV72T}k?6FY0GG3QzV+i;BMnuI>i`O8WG#a@|H3*XV&(!IQxPW<6@s=*1#@?3SIF4G5eM9=7<5Ib zEFT;a4>Sz|D5cgDuq6yt9jJn}G_3h*?5_6)m3s@Wn6Hgw9E6s00000NkvXXu0mjfOPpQf literal 0 HcmV?d00001 diff --git a/easyflow-ui-admin/app/public/model-providers/openai.ico b/easyflow-ui-admin/app/public/model-providers/openai.ico new file mode 100644 index 0000000..6f206de --- /dev/null +++ b/easyflow-ui-admin/app/public/model-providers/openai.ico @@ -0,0 +1 @@ +Just a moment...
\ No newline at end of file diff --git a/easyflow-ui-admin/app/public/model-providers/openai.svg b/easyflow-ui-admin/app/public/model-providers/openai.svg new file mode 100644 index 0000000..005b2e4 --- /dev/null +++ b/easyflow-ui-admin/app/public/model-providers/openai.svg @@ -0,0 +1,10 @@ + + + diff --git a/easyflow-ui-admin/app/public/model-providers/self-hosted.svg b/easyflow-ui-admin/app/public/model-providers/self-hosted.svg new file mode 100644 index 0000000..acdd3f1 --- /dev/null +++ b/easyflow-ui-admin/app/public/model-providers/self-hosted.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/easyflow-ui-admin/app/public/model-providers/siliconflow.png b/easyflow-ui-admin/app/public/model-providers/siliconflow.png new file mode 100644 index 0000000000000000000000000000000000000000..fda2dc6717ab0021d1d82031b5979f357e1ef206 GIT binary patch literal 583 zcmV-N0=WH&P)Px%0ZBwbRCwC$*1KwyQ51&Z_uG5VkkJuQ5yeww6-z-|3vXc%tgLLsTEy`Z#0#*n z5k&9?1RL$_G*|>Y;E6yKHOz#W|6iX)qC|$|H)9b3^W4B*>)p*_W@cumsgGfL3E&o( ze{>tv2Ls;K1riX;r&s1vJKu27CPj!OHete$S~72A-01^9?k=LjG%k>UC`;`t-B$bZ zU`!=ZXkc*3Xw{=0>dPM!xYSW;Q7QCl%O7|qK=Uf zK?7OUTC!$wNXfh0k5f%Qs31i;Z1%9k#U&OF3GObifYCju~l zY49htFu=o)H+*jfy# z)e^)jfLDk2m?`M`3A4e$x;^YV5j3ccS`ni=Z}u($=Kopj02#A^*gnthx|x|>?H2)m Vztlt0t002ovPDHLkV1l5f0;~W4 literal 0 HcmV?d00001 diff --git a/easyflow-ui-admin/app/public/model-providers/zhipu.png b/easyflow-ui-admin/app/public/model-providers/zhipu.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3640d03de46b12d1bd739ed55dba2a1bc1e598 GIT binary patch literal 2747 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 literal 0 HcmV?d00001 diff --git a/easyflow-ui-admin/app/src/api/ai/llm.ts b/easyflow-ui-admin/app/src/api/ai/llm.ts index 76cb2b3..d54c912 100644 --- a/easyflow-ui-admin/app/src/api/ai/llm.ts +++ b/easyflow-ui-admin/app/src/api/ai/llm.ts @@ -1,10 +1,19 @@ -import { api } from '#/api/request.js'; +import {api} from '#/api/request.js'; // 获取LLM供应商 export async function getLlmProviderList() { return api.get('/api/v1/modelProvider/list'); } +export interface ModelListQuery { + modelType?: string; + providerId?: string; +} + +export async function getModelList(params: ModelListQuery = {}) { + return api.get('/api/v1/model/list', { params }); +} + // 保存LLM export async function saveLlm(data: string) { return api.post('/api/v1/model/save', data); @@ -20,6 +29,10 @@ export async function updateLlm(data: any) { return api.post(`/api/v1/model/update`, data); } +export async function verifyModelConfig(id: string) { + return api.get('/api/v1/model/verifyLlmConfig', { params: { id } }); +} + // 一键添加LLM export async function quickAddLlm(data: any) { return api.post(`/api/v1/model/quickAdd`, data); @@ -33,7 +46,6 @@ export interface llmType { providerName: string; providerType: string; }; - withUsed: boolean; llmModel: string; icon: string; description: string; diff --git a/easyflow-ui-admin/app/src/components/page/ListPageShell.vue b/easyflow-ui-admin/app/src/components/page/ListPageShell.vue index 3f2ccf7..1e62cd1 100644 --- a/easyflow-ui-admin/app/src/components/page/ListPageShell.vue +++ b/easyflow-ui-admin/app/src/components/page/ListPageShell.vue @@ -6,7 +6,7 @@ interface Props { contentPadding?: number | string; dense?: boolean; stickyToolbar?: boolean; - surface?: 'panel' | 'subtle'; + surface?: 'panel' | 'plain' | 'subtle'; } const props = withDefaults(defineProps(), { @@ -141,6 +141,18 @@ const contentStyle = computed((): CSSProperties => { box-shadow: none; } +.list-page-shell.is-plain .list-page-shell__content { + background: hsl(var(--surface-panel) / 0.96); + border: 1px solid hsl(var(--divider-faint) / 0.58); + border-radius: 20px; + box-shadow: none; + backdrop-filter: none; +} + +.list-page-shell.is-plain .list-page-shell__content::before { + display: none; +} + .list-page-shell__content::before { position: absolute; inset: 0 0 auto; diff --git a/easyflow-ui-admin/app/src/components/page/__tests__/CardList.test.ts b/easyflow-ui-admin/app/src/components/page/__tests__/CardList.test.ts new file mode 100644 index 0000000..ef6629c --- /dev/null +++ b/easyflow-ui-admin/app/src/components/page/__tests__/CardList.test.ts @@ -0,0 +1,112 @@ +import {mount} from '@vue/test-utils'; + +import {describe, expect, it, vi} from 'vitest'; +import CardList from '../CardList.vue'; + +const { hasAccessByCodes } = vi.hoisted(() => ({ + hasAccessByCodes: vi.fn((codes: string[]) => codes[0] !== 'blocked'), +})); + +vi.mock('@easyflow/access', () => ({ + useAccess: () => ({ + hasAccessByCodes, + }), +})); + +describe('CardList', () => { + function mountCardList(props: Record) { + return mount(CardList, { + props: { + data: [ + { + id: 'bot-1', + title: '演示卡片', + description: '用于验证主次交互是否正常工作', + }, + ], + defaultIcon: '/favicon.svg', + ...props, + }, + global: { + stubs: { + IconifyIcon: { + props: ['icon'], + template: '{{ icon }}', + }, + }, + }, + }); + } + + it('点击卡片空白区域时触发主动作', async () => { + const primaryAction = vi.fn(); + const wrapper = mountCardList({ + primaryAction: { + text: '进入设置', + onClick: primaryAction, + }, + }); + + await wrapper.get('.card-item').trigger('click'); + + expect(primaryAction).toHaveBeenCalledTimes(1); + expect(primaryAction).toHaveBeenCalledWith( + expect.objectContaining({ id: 'bot-1' }), + ); + }); + + it('点击次级按钮时不会冒泡触发主动作', async () => { + const primaryAction = vi.fn(); + const inlineAction = vi.fn(); + const wrapper = mountCardList({ + primaryAction: { + text: '进入设置', + onClick: primaryAction, + }, + actions: [ + { + text: '编辑', + placement: 'inline', + onClick: inlineAction, + }, + ], + }); + + await wrapper.get('.card-action-btn').trigger('click'); + + expect(inlineAction).toHaveBeenCalledTimes(1); + expect(primaryAction).not.toHaveBeenCalled(); + }); + + it('键盘 Enter 可以触发主动作', async () => { + const primaryAction = vi.fn(); + const wrapper = mountCardList({ + primaryAction: { + text: '进入设计', + onClick: primaryAction, + }, + }); + + await wrapper.get('.card-item').trigger('keydown.enter'); + + expect(primaryAction).toHaveBeenCalledTimes(1); + }); + + it('未提供主动作时保持旧卡片模式,不会把卡片变成可点击入口', async () => { + const legacyAction = vi.fn(); + const wrapper = mountCardList({ + actions: [ + { + text: '编辑', + onClick: legacyAction, + }, + ], + }); + + await wrapper.get('.card-item').trigger('click'); + await wrapper.get('.card-action-btn').trigger('click'); + + expect(wrapper.get('.card-item').attributes('role')).toBeUndefined(); + expect(legacyAction).toHaveBeenCalledTimes(1); + }); +}); diff --git a/easyflow-ui-admin/app/src/locales/langs/en-US/llm.json b/easyflow-ui-admin/app/src/locales/langs/en-US/llm.json index 3548087..659534f 100644 --- a/easyflow-ui-admin/app/src/locales/langs/en-US/llm.json +++ b/easyflow-ui-admin/app/src/locales/langs/en-US/llm.json @@ -58,7 +58,6 @@ "button": { "management": "Management", "test": "Test", - "addAllLlm": "Add models from the list", "RetrieveAgain": "Retrieve the model list again" }, "all": "All", diff --git a/easyflow-ui-admin/app/src/locales/langs/zh-CN/llm.json b/easyflow-ui-admin/app/src/locales/langs/zh-CN/llm.json index fe1febd..6f02d5e 100644 --- a/easyflow-ui-admin/app/src/locales/langs/zh-CN/llm.json +++ b/easyflow-ui-admin/app/src/locales/langs/zh-CN/llm.json @@ -55,7 +55,6 @@ "button": { "management": "管理", "test": "检测", - "addAllLlm": "添加列表中的所有模型", "RetrieveAgain": "重新获取模型列表" }, "all": "全部", diff --git a/easyflow-ui-admin/app/src/views/ai/model/ActiveModelWorkspace.vue b/easyflow-ui-admin/app/src/views/ai/model/ActiveModelWorkspace.vue new file mode 100644 index 0000000..6c9972f --- /dev/null +++ b/easyflow-ui-admin/app/src/views/ai/model/ActiveModelWorkspace.vue @@ -0,0 +1,774 @@ + + + + + diff --git a/easyflow-ui-admin/app/src/views/ai/model/AddModelModal.vue b/easyflow-ui-admin/app/src/views/ai/model/AddModelModal.vue index c8d627a..9207508 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/AddModelModal.vue +++ b/easyflow-ui-admin/app/src/views/ai/model/AddModelModal.vue @@ -1,31 +1,31 @@ diff --git a/easyflow-ui-admin/app/src/views/ai/model/AddModelProviderModal.vue b/easyflow-ui-admin/app/src/views/ai/model/AddModelProviderModal.vue index f0dc272..5798675 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/AddModelProviderModal.vue +++ b/easyflow-ui-admin/app/src/views/ai/model/AddModelProviderModal.vue @@ -1,41 +1,25 @@ diff --git a/easyflow-ui-admin/app/src/views/ai/model/ManageModelModal.vue b/easyflow-ui-admin/app/src/views/ai/model/ManageModelModal.vue deleted file mode 100644 index 4677552..0000000 --- a/easyflow-ui-admin/app/src/views/ai/model/ManageModelModal.vue +++ /dev/null @@ -1,350 +0,0 @@ - - - - - diff --git a/easyflow-ui-admin/app/src/views/ai/model/Model.vue b/easyflow-ui-admin/app/src/views/ai/model/Model.vue index ad7c714..eb0bc00 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/Model.vue +++ b/easyflow-ui-admin/app/src/views/ai/model/Model.vue @@ -1,622 +1,1163 @@ - diff --git a/easyflow-ui-admin/app/src/views/ai/model/ModelProviderBadge.vue b/easyflow-ui-admin/app/src/views/ai/model/ModelProviderBadge.vue new file mode 100644 index 0000000..50afe15 --- /dev/null +++ b/easyflow-ui-admin/app/src/views/ai/model/ModelProviderBadge.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/easyflow-ui-admin/app/src/views/ai/model/ModelVerifyConfig.vue b/easyflow-ui-admin/app/src/views/ai/model/ModelVerifyConfig.vue index ed11e36..c46f579 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/ModelVerifyConfig.vue +++ b/easyflow-ui-admin/app/src/views/ai/model/ModelVerifyConfig.vue @@ -1,44 +1,61 @@ @@ -80,54 +120,147 @@ const getModelInfo = (id: string) => { :centered="true" :closable="!btnLoading" :title="$t('llm.verifyLlmTitle')" - width="482" + width="560" :confirm-loading="btnLoading" :confirm-text="$t('button.confirm')" :submitting="btnLoading" @confirm="save" > - - - - - - - - {{ vectorDimension }} - - +
+
+
+

1. 选择待验证模型

+

+ 会用当前保存的服务商配置发起一次真实请求,帮助你确认密钥和路径是否正确。 +

+
+ + + + + + + + +
+ +
+
+

2. 查看验证结果

+

成功后会返回可用状态;如果是向量模型,还会展示向量维度。

+
+ +
+
+ + +
+
+

{{ resultTitle }}

+

{{ verifyMessage }}

+
+ 向量维度:{{ vectorDimension }} +
+
+
+
+
diff --git a/easyflow-ui-admin/app/src/views/ai/model/ModelViewItemOperation.vue b/easyflow-ui-admin/app/src/views/ai/model/ModelViewItemOperation.vue index 157f7c2..566136c 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/ModelViewItemOperation.vue +++ b/easyflow-ui-admin/app/src/views/ai/model/ModelViewItemOperation.vue @@ -1,201 +1,377 @@ diff --git a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/defaultIcon.test.ts b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/defaultIcon.test.ts new file mode 100644 index 0000000..2618973 --- /dev/null +++ b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/defaultIcon.test.ts @@ -0,0 +1,17 @@ +import {describe, expect, it} from 'vitest'; + +import {getProviderBadgeText, getProviderPresetByValue} from '../defaultIcon'; + +describe('defaultIcon helpers', () => { + it('可以读取新的服务商预设', () => { + const preset = getProviderPresetByValue('self-hosted'); + + expect(preset?.label).toBe('自部署'); + expect(preset?.mode).toBe('self-hosted'); + }); + + it('未知服务商类型会回退到 providerName 文本', () => { + expect(getProviderBadgeText('历史服务商', 'legacy')).toBe('历史'); + expect(getProviderBadgeText('', 'legacy-provider')).toBe('LE'); + }); +}); diff --git a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/providerDraft.test.ts b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/providerDraft.test.ts new file mode 100644 index 0000000..97458f6 --- /dev/null +++ b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/__tests__/providerDraft.test.ts @@ -0,0 +1,67 @@ +import {describe, expect, it} from 'vitest'; + +import { + createProviderDraft, + getProviderConfigMetrics, + isProviderDraftDirty, +} from '../providerDraft'; + +describe('providerDraft helpers', () => { + it('相同配置不会被识别为脏数据', () => { + const provider = { + apiKey: 'key', + endpoint: 'https://api.example.com', + chatPath: '/v1/chat/completions', + embedPath: '/v1/embeddings', + rerankPath: '', + }; + + expect(isProviderDraftDirty(provider, createProviderDraft(provider))).toBe( + false, + ); + }); + + it('修改任一关键字段后会被识别为脏数据', () => { + const provider = { + apiKey: 'key', + endpoint: 'https://api.example.com', + chatPath: '/v1/chat/completions', + embedPath: '', + rerankPath: '', + }; + + expect( + isProviderDraftDirty(provider, { + ...createProviderDraft(provider), + apiKey: 'next-key', + }), + ).toBe(true); + }); + + it('会根据预设路径计算配置完成度', () => { + const metrics = getProviderConfigMetrics( + { + apiKey: 'key', + endpoint: 'https://api.example.com', + chatPath: '/v1/chat/completions', + embedPath: '/v1/embeddings', + rerankPath: '', + }, + { + label: '示例', + value: 'demo', + description: '', + icon: '', + mode: 'hosted', + options: { + chatPath: '/v1/chat/completions', + embedPath: '/v1/embeddings', + }, + }, + ); + + expect(metrics.completed).toBe(4); + expect(metrics.total).toBe(4); + expect(metrics.complete).toBe(true); + }); +}); diff --git a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/defaultIcon.ts b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/defaultIcon.ts index 34b42ba..0984990 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/defaultIcon.ts +++ b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/defaultIcon.ts @@ -1,27 +1,66 @@ -import { ref } from 'vue'; - import providerList from './providerList.json'; -const providerOptions = - ref>( - providerList, - ); +export interface ProviderModelPreset { + description: string; + label: string; + llmModel: string; + supportChat?: boolean; + supportEmbed?: boolean; + supportFunctionCalling?: boolean; + supportRerank?: boolean; +} + +export interface ProviderPreset { + description: string; + icon: string; + label: string; + mode: 'hosted' | 'self-hosted'; + options: { + chatPath?: string; + embedPath?: string; + llmEndpoint?: string; + modelList?: ProviderModelPreset[]; + rerankPath?: string; + }; + tags?: string[]; + value: string; +} + +const providerOptions = providerList as ProviderPreset[]; + +export const getProviderPresetByValue = (targetValue?: string) => + providerOptions.find((item) => item.value === targetValue); /** * 根据传入的value,返回对应的icon属性 * @param targetValue 要匹配的value值 * @returns 匹配到的icon字符串,未匹配到返回空字符串 */ -export const getIconByValue = (targetValue: string): string => { - const matchItem = providerOptions.value.find( - (item) => item.value === targetValue, - ); - - return matchItem?.icon || ''; -}; +export const getIconByValue = (targetValue: string): string => + getProviderPresetByValue(targetValue)?.icon || ''; export const isSvgString = (icon: any) => { if (typeof icon !== 'string') return false; // 简单判断:是否包含 SVG 根标签 return icon.trim().startsWith(''); }; + +export const getProviderBadgeText = ( + providerName?: string, + providerType?: string, +) => { + const preset = getProviderPresetByValue(providerType); + const source = providerName || preset?.label || providerType || 'AI'; + const ascii = source + .replaceAll(/[^a-z]/gi, '') + .slice(0, 2) + .toUpperCase(); + + if (ascii) { + return ascii; + } + + return source.replaceAll(/\s+/g, '').slice(0, 2).toUpperCase(); +}; + +export const providerPresets = providerOptions; diff --git a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerDraft.ts b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerDraft.ts new file mode 100644 index 0000000..907a309 --- /dev/null +++ b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerDraft.ts @@ -0,0 +1,72 @@ +import type {ProviderPreset} from './defaultIcon'; + +export const PROVIDER_EDITABLE_FIELDS = [ + 'apiKey', + 'endpoint', + 'chatPath', + 'embedPath', + 'rerankPath', +] as const; + +export type ProviderEditableField = (typeof PROVIDER_EDITABLE_FIELDS)[number]; + +export interface ProviderDraft { + apiKey: string; + endpoint: string; + chatPath: string; + embedPath: string; + rerankPath: string; +} + +type ProviderLike = Partial> & { + providerType?: string; +}; + +export const createProviderDraft = ( + provider?: null | ProviderLike, +): ProviderDraft => ({ + apiKey: provider?.apiKey || '', + endpoint: provider?.endpoint || '', + chatPath: provider?.chatPath || '', + embedPath: provider?.embedPath || '', + rerankPath: provider?.rerankPath || '', +}); + +export const isProviderDraftDirty = ( + provider?: null | ProviderLike, + draft?: null | ProviderLike, +) => + PROVIDER_EDITABLE_FIELDS.some( + (field) => (provider?.[field] || '') !== (draft?.[field] || ''), + ); + +export const getProviderConfigMetrics = ( + provider?: null | ProviderLike, + preset?: ProviderPreset, +) => { + const requiredFields: ProviderEditableField[] = [ + 'apiKey', + 'endpoint', + 'chatPath', + ]; + + if (preset?.options?.embedPath || provider?.embedPath) { + requiredFields.push('embedPath'); + } + + if (preset?.options?.rerankPath || provider?.rerankPath) { + requiredFields.push('rerankPath'); + } + + const completed = requiredFields.filter((field) => + Boolean((provider?.[field] || '').trim()), + ).length; + const total = requiredFields.length; + + return { + completed, + total, + ratio: total === 0 ? 0 : Math.round((completed / total) * 100), + complete: total > 0 && completed === total, + }; +}; diff --git a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerList.json b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerList.json index 1c7b213..764fb76 100644 --- a/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerList.json +++ b/easyflow-ui-admin/app/src/views/ai/model/modelUtils/providerList.json @@ -2,576 +2,292 @@ { "label": "DeepSeek", "value": "deepseek", - "options":{ - "llmEndpoint":"https://api.deepseek.com", - "chatPath":"/chat/completions", - "modelList":[ + "description": "推理与代码能力表现稳定,适合对话、推理和工具调用场景。", + "tags": ["推理", "函数调用", "高性价比"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://api.deepseek.com", + "chatPath": "/chat/completions", + "modelList": [ { - "llmModel":"deepseek-reasoner", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1-0528", - "description":"DeepSeek-R1-0528 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题。在 RL 之前,DeepSeek-R1 引入了冷启动数据,进一步优化了推理性能。它在数学、代码和推理任务中与 OpenAI-o1 表现相当,并且通过精心设计的训练方法,提升了整体效果" + "llmModel": "deepseek-chat", + "supportChat": true, + "supportFunctionCalling": true, + "label": "DeepSeek-V3", + "description": "通用对话与代码任务表现均衡,适合作为默认大模型。" }, { - "llmModel":"deepseek-chat", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-V3-0324", - "description":"新版 DeepSeek-V3 (DeepSeek-V3-0324)与之前的 DeepSeek-V3-1226 使用同样的 base 模型,仅改进了后训练方法。新版 V3 模型借鉴 DeepSeek-R1 模型训练过程中所使用的强化学习技术,大幅提高了在推理类任务上的表现水平,在数学、代码类相关评测集上取得了超过 GPT-4.5 的得分成绩。此外该模型在工具调用、角色扮演、问答闲聊等方面也得到了一定幅度的能力提升。" + "llmModel": "deepseek-reasoner", + "supportChat": true, + "supportFunctionCalling": true, + "label": "DeepSeek-R1", + "description": "面向复杂推理、数学和长链路分析场景。" } ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n" - + "icon": "/model-providers/deepseek.png" }, { - "label": "Open AI", + "label": "OpenAI", "value": "openai", - "options":{ - "llmEndpoint":"https://api.openai.com", - "chatPath":"/v1/chat/completions", - "embedPath":"/v1/embeddings", - - "modelList":[ + "description": "标准 OpenAI 兼容接口,适合多模态、推理与通用对话场景。", + "tags": ["标准兼容", "多模态", "推理"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://api.openai.com", + "chatPath": "/v1/chat/completions", + "embedPath": "/v1/embeddings", + "modelList": [ { - "llmModel":"o4-mini", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"o4-mini", - "description":"O4-mini 是OpenAi最新的小型 O 系列型号。它针对快速、有效的推理进行了优化,在编码和可视化任务中具有非常高效的性能。" + "llmModel": "o4-mini", + "supportChat": true, + "supportFunctionCalling": true, + "multimodal": true, + "label": "o4-mini", + "description": "适合推理和通用生产任务的轻量模型。" }, { - "llmModel":"o3", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"o3", - "description":"O3 是一个全面而强大的跨领域模型。它为数学、科学、编码和视觉推理任务设定了新标准。它还擅长技术写作和指导遵循。使用它来思考涉及跨文本、代码和图像分析的多步骤问题。" + "llmModel": "gpt-4.1", + "supportChat": true, + "supportFunctionCalling": true, + "multimodal": true, + "label": "GPT-4.1", + "description": "复杂任务和多模态理解的旗舰模型。" }, { - "llmModel":"o3-pro", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"o3-pro", - "description":"o 系列模型经过强化学习训练,在回答和执行复杂推理之前先思考。o3-pro 模型使用更多的计算来更深入地思考并始终提供更好的答案。" - }, - { - "llmModel":"o3-mini", - "supportChat":true, - "supportFunctionCalling":true, - "label":"o3-mini", - "description":"O3-mini 是OpenAi最新的小型推理模型,以与 O1-mini 相同的成本和延迟目标提供高智能。o3-mini 支持关键的开发人员功能,如结构化输出、函数调用和批处理 API。" - }, - { - "llmModel":"GPT-4.1", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"GPT-4.1", - "description":"GPT-4.1 是OpenAi用于复杂任务的旗舰模型。它非常适合跨领域解决问题。" - }, - { - "llmModel":"GPT-4o", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"GPT-4o", - "description":"GPT-4o(“o”代表“omni”)是OpenAi多功能、高智能的旗舰模型。它接受文本和图像输入,并生成文本输出(包括结构化输出)。它是大多数任务的最佳模型,也是 o 系列模型之外功能最强大的模型" - }, - { - "llmModel":"text-embedding-3-small", - "supportEmbed":true, - "label":"text-embedding-3-small", - "description":"text-embedding-3-small 是 ADA 嵌入模型的改进版,性能更高。嵌入是文本的数字表示形式,可用于度量两段文本之间的相关性。嵌入对于搜索、聚类、推荐、异常检测和分类任务非常有用" - }, - { - "llmModel":"text-embedding-3-large", - "supportEmbed":true, - "label":"text-embedding-3-large", - "description":"text-embedding-3-large 是OpenAi最强大的嵌入模型,适用于英语和非英语任务。嵌入是文本的数字表示形式,可用于度量两段文本之间的相关性。嵌入对于搜索、聚类、推荐、异常检测和分类任务非常有用。" - }, - { - "llmModel":"text-embedding-ada-002", - "supportEmbed":true, - "label":"text-embedding-ada-002", - "description":"text-embedding-ada-002 是 ADA 嵌入模型的改进版,性能更高。嵌入是文本的数字表示形式,可用于度量两段文本之间的相关性。嵌入对于搜索、聚类、推荐、异常检测和分类任务非常有用。" + "llmModel": "text-embedding-3-large", + "supportEmbed": true, + "label": "text-embedding-3-large", + "description": "高质量文本向量模型。" } - ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/openai.svg" }, { "label": "阿里百炼", "value": "aliyun", - "options":{ - "llmEndpoint":"https://dashscope.aliyuncs.com", - "chatPath":"/compatible-mode/v1/chat/completions", - "embedPath":"/compatible-mode/v1/embeddings", - "rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank", - "modelList":[ + "description": "兼容 OpenAI 的云端模型平台,覆盖对话、向量与 Rerank 能力。", + "tags": ["通义", "Embedding", "Rerank"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://dashscope.aliyuncs.com", + "chatPath": "/compatible-mode/v1/chat/completions", + "embedPath": "/compatible-mode/v1/embeddings", + "rerankPath": "/api/v1/services/rerank/text-rerank/text-rerank", + "modelList": [ { - "llmModel":"qwen-plus", - "supportChat":true, - "supportFunctionCalling":true, - "label":"通义千问-Plus", - "description":"Qwen3系列Plus模型,实现思考模式和非思考模式的有效融合,可在对话中切换模式。推理能力显著超过QwQ、通用能力显著超过Qwen2.5-Plus,达到同规模业界SOTA水平。" - + "llmModel": "qwen-plus", + "supportChat": true, + "supportFunctionCalling": true, + "label": "通义千问 Plus", + "description": "适合通用问答、工具调用和企业应用集成。" }, { - "llmModel":"qwen-turbo", - "supportChat":true, - "supportFunctionCalling":true, - "label":"通义千问-Turbo", - "description":"Qwen3系列Turbo模型,实现思考模式和非思考模式的有效融合,可在对话中切换模式。推理能力以更小参数规模比肩QwQ-32B、通用能力显著超过Qwen2.5-Turbo,达到同规模业界SOTA水平。" + "llmModel": "qwen-max", + "supportChat": true, + "supportFunctionCalling": true, + "label": "通义千问 Max", + "description": "更强的综合能力与复杂任务处理能力。" }, { - "llmModel":"qwen-max", - "supportChat":true, - "supportFunctionCalling":true, - "label":"通义千问-Max", - "description":"通义千问2.5系列千亿级别超大规模语言模型,支持中文、英文等不同语言输入。随着模型的升级,qwen-max将滚动更新升级。" - }, - { - "llmModel":"deepseek-r1-distill-qwen-7b", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1-Distill-Qwen-7B", - "description":"DeepSeek-R1-Distill-Qwen-7B是一个基于Qwen2.5-Math-7B的蒸馏大型语言模型,使用了 DeepSeek R1 的输出。" - }, - { - "llmModel":"deepseek-r1-distill-qwen-14b", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1-Distill-Qwen-14B", - "description":"DeepSeek-R1-Distill-Qwen-14B是一个基于Qwen2.5-14B的蒸馏大型语言模型,使用了 DeepSeek R1 的输出。" - }, - { - "llmModel":"deepseek-r1-distill-qwen-32b", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1-Distill-Qwen-32B", - "description":"DeepSeek-R1-Distill-Qwen-32B是一个基于Qwen2.5-32B的蒸馏大型语言模型,使用了 DeepSeek R1 的输出。" - }, - { - "llmModel":"qwen-vl-max", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"通义千问VL-Max", - "description":"通义千问VL-Max(qwen-vl-max),即通义千问超大规模视觉语言模型。相比增强版,再次提升视觉推理能力和指令遵循能力,提供更高的视觉感知和认知水平。在更多复杂任务上提供最佳的性能。" - }, - { - "llmModel":"qwen-vl-plus", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"通义千问VL-Plus", - "description":"通义千问VL-Plus(qwen-vl-plus),即通义千问大规模视觉语言模型增强版。大幅提升细节识别能力和文字识别能力,支持超百万像素分辨率和任意长宽比规格的图像。在广泛的视觉任务上提供卓越的性能。" - }, - { - "llmModel":"qvq-max", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"通义千问-QVQ-Max", - "description":"通义千问QVQ视觉推理模型,支持视觉输入及思维链输出,在数学、编程、视觉分析、创作以及通用任务上都表现了更强的能力。" - }, - { - "llmModel":"qvq-plus", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"通义千问-QVQ-Plus", - "description":"通义千问QVQ视觉推理模型增强版,支持视觉输入及思维链输出,在数学、编程、视觉分析、创作以及通用任务上都表现了更强的能力。" - }, - { - "llmModel":"text-embedding-v4", - "supportEmbed":true, - "label":"通用文本向量-v4", - "description":"通义实验室基于Qwen3训练的多语言文本统一向量模型,相较V3版本在文本检索、聚类、分类性能大幅提升;在MTEB多语言、中英、Code检索等评测任务上效果提升15%~40%;支持64~2048维用户自定义向量维度。" - }, - { - "llmModel":"text-embedding-v3", - "supportEmbed":true, - "label":"通用文本向量-v3", - "description":"通用文本向量,是通义实验室基于LLM底座的多语言文本统一向量模型,面向全球多个主流语种,提供高水准的向量服务,帮助开发者将文本数据快速转换为高质量的向量数据。" + "llmModel": "text-embedding-v4", + "supportEmbed": true, + "label": "text-embedding-v4", + "description": "支持多语言和可配置维度的文本向量模型。" } ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/aliyun.png" }, { - "label": "火山引擎", - "value": "volcengine", - "options":{ - "llmEndpoint":"https://ark.cn-beijing.volces.com", - "chatPath":"/api/v3/chat/completions", - "embedPath":"/api/v3/embeddings", - "modelList":[ + "label": "智谱", + "value": "zhipu", + "description": "提供 OpenAI 兼容接入,适合中文场景、推理和视觉理解。", + "tags": ["GLM", "中文", "OpenAI 兼容"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://open.bigmodel.cn", + "chatPath": "/api/paas/v4/chat/completions", + "embedPath": "/api/paas/v4/embeddings", + "modelList": [ { - "llmModel":"doubao-seed-1-6-250615", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"doubao-seed-1.6", - "description":"全新多模态深度思考模型,同时支持 thinking、non-thinking、auto三种思考模式。其中 non-thinking 模型对比 doubao-1-5-pro-32k-250115 模型大幅提升。" - + "llmModel": "glm-4.5", + "supportChat": true, + "supportFunctionCalling": true, + "label": "GLM-4.5", + "description": "适合复杂对话、知识问答和中文推理任务。" }, { - "llmModel":"doubao-seed-1-6-flash-250615", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"doubao-seed-1.6-flash", - "description":"有极致推理速度的多模态深度思考模型;同时支持文本和视觉理解。文本理解能力超过上一代 Lite 系列模型,视觉理解比肩友商 Pro 系列模型。" + "llmModel": "glm-4.5-air", + "supportChat": true, + "supportFunctionCalling": true, + "label": "GLM-4.5-Air", + "description": "更轻量的通用模型,适合低延迟场景。" }, { - "llmModel":"doubao-seed-1-6-thinking-250715", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"doubao-seed-1.6-thinking", - "description":"在思考能力上进行了大幅强化, 对比 doubao 1.5 代深度理解模型,在编程、数学、逻辑推理等基础能力上进一步提升, 支持视觉理解。" - }, - { - "llmModel":"deepseek-r1-250528", - "supportChat":true, - "supportFunctionCalling":true, - "label":"deepseek-r1", - "description":"deepseek-r1 在后训练阶段大规模使用了强化学习技术,在数学、代码、自然语言推理等任务上,能力比肩 OpenAI o1 正式版。" + "llmModel": "embedding-3", + "supportEmbed": true, + "label": "Embedding-3", + "description": "用于检索、召回和知识库向量化。" } ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/zhipu.png" }, { - "label": "百度千帆", - "value": "baidu", - "options":{ - "llmEndpoint":"https://qianfan.baidubce.com", - "chatPath":"/v2/chat/completions", - "embedPath":"/v2/embeddings", - "rerankPath":"/v2/rerank", - "modelList":[ + "label": "MiniMax", + "value": "minimax", + "description": "面向长上下文和高吞吐推理任务的 OpenAI 兼容模型服务。", + "tags": ["长上下文", "OpenAI 兼容", "推理"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://api.minimax.io", + "chatPath": "/v1/chat/completions", + "modelList": [ { - "llmModel":"ernie-x1-turbo-32k", - "supportChat":true, - "supportFunctionCalling":true, - "label":"ERNIE X1 Turbo", - "description":"核心定位:深度思考模型,具备更强的理解、规划、反思、进化能力。适用场景: 在中文知识问答、文学创作、文稿写作、日常对话、逻辑推理、复杂计算及工具调用等方面表现尤为出色。" - + "llmModel": "MiniMax-M2.5", + "supportChat": true, + "supportFunctionCalling": true, + "label": "MiniMax-M2.5", + "description": "适合需要长上下文和推理能力的复杂场景。" }, { - "llmModel":"ernie-4.5-turbo-128k", - "supportChat":true, - "supportFunctionCalling":true, - "label":"ERNIE 4.5 Turbo", - "description":"​核心定位:更好的满足多轮长历史对话处理、长文档理解问答任务。适用场景:​1)复杂语义理解:支持中文知识问答、文学创作,尤其擅长文档理解(如DocVQA任务)。 ​2)数学推理:在中文数学问题(CMath基准)表现突出。" - }, - { - "llmModel":"ernie-4.5-turbo-vl-32k", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"ERNIE 4.5 Turbo VL", - "description":"​核心定位:多模态基础模型,支持文本、图像跨模态输入与生成。​适用场景:结合图文生成营销文案、视频脚本设计等。" - }, - { - "llmModel":"deepseek-r1-250528", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1", - "description":"核心定位:专业优化推理模型,聚焦数学与逻辑任务。 ​适用场景: ​复杂数学问题:如高等数学题求解、科学计算模拟。 ​逻辑拆解与规划:业务流程自动化、学术研究中的假设验证。 ​STEM领域应用:物理建模、金融量化分析等需高精度推理的场景。" + "llmModel": "MiniMax-M2.5-highspeed", + "supportChat": true, + "supportFunctionCalling": true, + "label": "MiniMax-M2.5-highspeed", + "description": "更高吞吐的快速对话与 Agent 场景。" } ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/minimax.png" }, { - "label": "星火大模型", - "value": "spark", - "options":{ - "llmEndpoint":"https://spark-api-open.xf-yun.com", - "chatPath":"/v1/chat/completions", - "modelList":[ + "label": "Kimi", + "value": "kimi", + "description": "Moonshot 提供的长上下文对话模型,适合知识问答与通用助手场景。", + "tags": ["长上下文", "Moonshot", "对话"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://api.moonshot.cn", + "chatPath": "/v1/chat/completions", + "modelList": [ { - "llmModel":"generalv3.5", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Spark Max", - "description":"旗舰级大语言模型,具有千亿级参数,核心能力全面升级,具备更强的数学、中文、代码和多模态能力。适用数理计算、逻辑推理等对效果有更高要求的业务场景。" + "llmModel": "moonshot-v1-8k", + "supportChat": true, + "supportFunctionCalling": true, + "label": "moonshot-v1-8k", + "description": "低延迟通用对话模型。" }, { - "llmModel":"4.0Ultra", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Spark4.0 Ultra", - "description":"最强大的大语言模型版本,文本生成、语言理解、知识问答、逻辑推理、数学能力等方面实现超越GPT4 Turbo,优化联网搜索链路,提供更精准回答。" + "llmModel": "moonshot-v1-128k", + "supportChat": true, + "supportFunctionCalling": true, + "label": "moonshot-v1-128k", + "description": "适合长文档理解和大上下文场景。" } ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" - }, - { - "label": "Gitee", - "value": "gitee", - "options":{ - "llmEndpoint":"https://ai.gitee.com", - "chatPath":"/v1/chat/completions", - "embedPath":"/v1/embeddings", - "rerankPath":"/v1/rerank", - "modelList":[ - { - "llmModel":"kimi-k2-instruct", - "supportChat":true, - "supportFunctionCalling":true, - "label":"kimi-k2-instruct", - "description":"Kimi K2 是一个最先进的混合专家 (MoE) 语言模型,激活参数为 320 亿,总参数为 1 万亿。通过 Muon 优化器进行训练,Kimi K2 在前沿知识、推理和编码任务上表现出色,同时在智能体能力方面进行了精心优化" - - }, - { - "llmModel":"ERNIE-4.5-Turbo", - "supportChat":true, - "supportFunctionCalling":true, - "label":"ERNIE-4.5-Turbo", - "description":"文心4.5 Turbo在去幻觉、逻辑推理和代码能力等方面也有着明显增强。对比文心4.5,速度更快、价格更低。" - - }, - { - "llmModel":"ERNIE-X1-Turbo", - "supportChat":true, - "supportFunctionCalling":true, - "label":"ERNIE-X1-Turbo", - "description":"文心ERNIE X1 Turbo具备更长的思维链,更强的深度思考能力,进一步增强了多模态和工具调用能力,擅长文学创作、逻辑推理等" - - }, - { - "llmModel":"DeepSeek-R1", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1", - "description":"DeepSeek-R1 是一款采用强化学习技术的推理模型,凭借少量标注数据大幅提升推理能力,性能媲美 OpenAI o1。" - - }, - { - "llmModel":"DeepSeek-V3", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-V3", - "description":"DeepSeek-V3 是 685B 参数的高效 MoE 语言模型,性能优越,训练稳定,超越开源模型,并接近顶级闭源模型。" - - }, - { - "llmModel":"Qwen3-235B-A22B", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Qwen3-235B-A22B", - "description":"Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一系列密集型和混合专家(MoE)模型。基于在训练数据、模型架构和优化技术方面的广泛进步。" - - }, - { - "llmModel":"Qwen3-30B-A3B", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Qwen3-30B-A3B", - "description":"Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一系列密集型和混合专家(MoE)模型。基于在训练数据、模型架构和优化技术方面的广泛进步。" - - }, - { - "llmModel":"Qwen3-32B", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Qwen3-32B", - "description":"Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一系列密集型和混合专家(MoE)模型。基于在训练数据、模型架构和优化技术方面的广泛进步。" - - }, - { - "llmModel":"ERNIE-4.5-Turbo-VL", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"ERNIE-4.5-Turbo-VL", - "description":"文心一言大模型全新版本,图片理解、创作、翻译、代码等能力显著提升,首次支持32K上下文长度,首Token时延显著降低。" - - }, - { - "llmModel":"Qwen2.5-VL-32B-Instruct", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"Qwen2.5-VL-32B-Instruct", - "description":"Qwen2.5-VL-32B-Instruct 是一款拥有 320 亿参数、支持多图输入与复杂图文推理的大规模多模态指令微调模型。" - - }, - { - "llmModel":"InternVL3-78B", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"InternVL3-78B", - "description":"InternVL3-78B 是一款支持中英文、多图多轮对话的大规模多模态模型,具备超强图文理解、推理与生成能力,广泛适用于复杂 AI 应用场景。" - - }, - { - "llmModel":"InternVL3-38B", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"InternVL3-38B", - "description":"InternVL3-38B 是一款支持中英双语、多模态对话与图像理解的大规模视觉语言模型,具备强大的跨模态推理与视觉问答能力。" - }, - { - "llmModel":"Qwen3-Embedding-8B", - "supportEmbed":true, - "label":"Qwen3-Embedding-8B", - "description":"Qwen3‑Embedding‑8B 是 Qwen 系列推出的大规模嵌入模型,专注于生成高质量、多语言及代码向量,支持多种下游任务中的语义匹配与信息检索需求。" - }, - { - "llmModel":"Qwen3-Embedding-4B", - "supportEmbed":true, - "label":"Qwen3-Embedding-4B", - "description":"Qwen3-Embedding-4B 是由 Qwen 团队开发的一款高性能文本和代码嵌入模型,专为多语言、多模态任务设计,能够将文本和代码内容转换为语义丰富的向量表示。它广泛适用于语义搜索、跨语言检索、信息匹配、文本相似度分析等多种自然语言处理和代码理解场景。" - } - ] - }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/kimi.png" }, { "label": "硅基流动", "value": "siliconlow", - "options":{ - "llmEndpoint":"https://api.siliconflow.cn", - "chatPath":"/v1/chat/completions", - "embedPath":"/v1/embeddings", - "rerankPath":"/v1/rerank", - "modelList":[ + "description": "聚合多家开源模型能力,适合快速接入主流开源生态。", + "tags": ["开源模型", "聚合平台", "Embeddings"], + "mode": "hosted", + "options": { + "llmEndpoint": "https://api.siliconflow.cn", + "chatPath": "/v1/chat/completions", + "embedPath": "/v1/embeddings", + "rerankPath": "/v1/rerank", + "modelList": [ { - "llmModel":"deepseek-ai/DeepSeek-R1", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-R1", - "description":"DeepSeek-R1-0528 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题。在 RL 之前,DeepSeek-R1 引入了冷启动数据,进一步优化了推理性能。它在数学、代码和推理任务中与 OpenAI-o1 表现相当,并且通过精心设计的训练方法,提升了整体效果。" - + "llmModel": "deepseek-ai/DeepSeek-V3", + "supportChat": true, + "supportFunctionCalling": true, + "label": "DeepSeek-V3", + "description": "便于通过统一平台接入主流开源对话模型。" }, { - "llmModel":"deepseek-ai/DeepSeek-V3", - "supportChat":true, - "supportFunctionCalling":true, - "label":"DeepSeek-V3", - "description":"新版 DeepSeek-V3 (DeepSeek-V3-0324)与之前的 DeepSeek-V3-1226 使用同样的 base 模型,仅改进了后训练方法。新版 V3 模型借鉴 DeepSeek-R1 模型训练过程中所使用的强化学习技术,大幅提高了在推理类任务上的表现水平,在数学、代码类相关评测集上取得了超过 GPT-4.5 的得分成绩。此外该模型在工具调用、角色扮演、问答闲聊等方面也得到了一定幅度的能力提升。" - + "llmModel": "moonshotai/Kimi-K2-Instruct", + "supportChat": true, + "supportFunctionCalling": true, + "label": "Kimi-K2-Instruct", + "description": "适合代码和 Agent 型工作流场景。" }, { - "llmModel":"moonshotai/Kimi-K2-Instruct", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Kimi-K2-Instruct", - "description":"Kimi K2 是一款具备超强代码和 Agent 能力的 MoE 架构基础模型,总参数 1T,激活参数 32B。在通用知识推理、编程、数学、Agent 等主要类别的基准性能测试中,K2 模型的性能超过其他主流开源模型" - - }, - { - "llmModel":"Tongyi-Zhiwen/QwenLong-L1-32B", - "supportChat":true, - "supportFunctionCalling":true, - "label":"QwenLong-L1-32B", - "description":"QwenLong-L1-32B 是首个使用强化学习训练的长上下文大型推理模型(LRM),专门针对长文本推理任务进行优化。该模型通过渐进式上下文扩展的强化学习框架,实现了从短上下文到长上下文的稳定迁移。在七个长上下文文档问答基准测试中,QwenLong-L1-32B 超越了 OpenAI-o3-mini 和 Qwen3-235B-A22B 等旗舰模型,性能可媲美 Claude-3.7-Sonnet-Thinking。该模型特别擅长数学推理、逻辑推理和多跳推理等复杂任务" - - }, - { - "llmModel":"Qwen/Qwen3-30B-A3B", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Qwen3-30B-A3B", - "description":"Qwen3-30B-A3B 是通义千问系列的最新大语言模型,采用混合专家(MoE)架构,拥有 30.5B 总参数量和 3.3B 激活参数量。该模型独特地支持在思考模式(适用于复杂逻辑推理、数学和编程)和非思考模式(适用于高效的通用对话)之间无缝切换,显著增强了推理能力。模型在数学、代码生成和常识逻辑推理上表现优异,并在创意写作、角色扮演和多轮对话等方面展现出卓越的人类偏好对齐能力。此外,该模型支持 100 多种语言和方言,具备出色的多语言指令遵循和翻译能力" - - }, - { - "llmModel":"Qwen/Qwen3-32B", - "supportChat":true, - "supportFunctionCalling":true, - "label":"Qwen3-32B", - "description":"Qwen3-32B 是通义千问系列的最新大语言模型,拥有 32.8B 参数量。该模型独特地支持在思考模式(适用于复杂逻辑推理、数学和编程)和非思考模式(适用于高效的通用对话)之间无缝切换,显著增强了推理能力。模型在数学、代码生成和常识逻辑推理上表现优异,并在创意写作、角色扮演和多轮对话等方面展现出卓越的人类偏好对齐能力。此外,该模型支持 100 多种语言和方言,具备出色的多语言指令遵循和翻译能力" - - }, - { - "llmModel":"MiniMaxAI/MiniMax-M1-80k", - "supportChat":true, - "supportFunctionCalling":true, - "label":"MiniMax-M1-80k", - "description":"MiniMax-M1 是开源权重的大规模混合注意力推理模型,拥有 4560 亿参数,每个 Token 可激活约 459 亿参数。模型原生支持 100 万 Token 的超长上下文,并通过闪电注意力机制,在 10 万 Token 的生成任务中相比 DeepSeek R1 节省 75% 的浮点运算量。同时,MiniMax-M1 采用 MoE(混合专家)架构,结合 CISPO 算法与混合注意力设计的高效强化学习训练,在长输入推理与真实软件工程场景中实现了业界领先的性能。" - - }, - { - "llmModel":"THUDM/GLM-4.1V-9B-Thinking", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"GLM-4.1V-9B-Thinking", - "description":"GLM-4.1V-9B-Thinking 是由智谱 AI 和清华大学 KEG 实验室联合发布的一款开源视觉语言模型(VLM),专为处理复杂的多模态认知任务而设计。该模型基于 GLM-4-9B-0414 基础模型,通过引入“思维链”(Chain-of-Thought)推理机制和采用强化学习策略,显著提升了其跨模态的推理能力和稳定性。作为一个 9B 参数规模的轻量级模型,它在部署效率和性能之间取得了平衡,在 28 项权威评测基准中,有 18 项的表现持平甚至超越了 72B 参数规模的 Qwen-2.5-VL-72B。该模型不仅在图文理解、数学科学推理、视频理解等任务上表现卓越,还支持高达 4K 分辨率的图像和任意宽高比输入" - }, - { - "llmModel":"Qwen/Qwen2.5-VL-32B-Instruct", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"Qwen2.5-VL-32B-Instruct", - "description":"Qwen2.5-VL-32B-Instruct 是通义千问团队推出的多模态大模型,是 Qwen2.5-VL 系列的一部分。该模型不仅精通识别常见物体,还能分析图像中的文本、图表、图标、图形和布局。它可作为视觉智能体,能够推理并动态操控工具,具备使用电脑和手机的能力。此外,这个模型可以精确定位图像中的对象,并为发票、表格等生成结构化输出。相比前代模型 Qwen2-VL,该版本在数学和问题解决能力方面通过强化学习得到了进一步提升,响应风格也更符合人类偏好" - }, - { - "llmModel":"Qwen/Qwen2.5-VL-72B-Instruct", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"Qwen2.5-VL-72B-Instruct", - "description":"Qwen2.5-VL 是 Qwen2.5 系列中的视觉语言模型。该模型在多方面有显著提升:具备更强的视觉理解能力,能够识别常见物体、分析文本、图表和布局;作为视觉代理能够推理并动态指导工具使用;支持理解超过 1 小时的长视频并捕捉关键事件;能够通过生成边界框或点准确定位图像中的物体;支持生成结构化输出,尤其适用于发票、表格等扫描数据。模型在多项基准测试中表现出色,包括图像、视频和代理任务评测" - }, - { - "llmModel":"deepseek-ai/deepseek-vl2", - "supportChat":true, - "supportFunctionCalling":true, - "multimodal":true, - "label":"deepseek-vl2", - "description":"DeepSeek-VL2 是一个基于 DeepSeekMoE-27B 开发的混合专家(MoE)视觉语言模型,采用稀疏激活的 MoE 架构,在仅激活 4.5B 参数的情况下实现了卓越性能。该模型在视觉问答、光学字符识别、文档/表格/图表理解和视觉定位等多个任务中表现优异,与现有的开源稠密模型和基于 MoE 的模型相比,在使用相同或更少的激活参数的情况下,实现了具有竞争力的或最先进的性能表现" - }, - { - "llmModel":"Qwen/Qwen3-Embedding-8B", - "supportEmbed":true, - "label":"Qwen3-Embedding-8B", - "description":"Qwen3-Embedding-8B 是 Qwen3 嵌入模型系列的最新专有模型,专为文本嵌入和排序任务设计。该模型基于 Qwen3 系列的密集基础模型,具有 80 亿参数规模,支持长达 32K 的上下文长度,可生成最高 4096 维的嵌入向量。该模型继承了基础模型卓越的多语言能力,支持超过 100 种语言,具备长文本理解和推理能力。在 MTEB 多语言排行榜上排名第一(截至 2025 年 6 月 5 日,得分 70.58),在文本检索、代码检索、文本分类、文本聚类和双语挖掘等多项任务中表现出色。模型支持用户自定义输出维度(32 到 4096)和指令感知功能,可根据特定任务、语言或场景进行优化" - }, - { - "llmModel":"Qwen/Qwen3-Embedding-4B", - "supportEmbed":true, - "label":"Qwen3-Embedding-4B", - "description":"Qwen3-Embedding-4B 是 Qwen3 嵌入模型系列的最新专有模型,专为文本嵌入和排序任务设计。该模型基于 Qwen3 系列的密集基础模型,具有 40 亿参数规模,支持长达 32K 的上下文长度,可生成最高 2560 维的嵌入向量。模型继承了基础模型卓越的多语言能力,支持超过 100 种语言,具备长文本理解和推理能力。在 MTEB 多语言排行榜上表现卓越(得分 69.45),在文本检索、代码检索、文本分类、文本聚类和双语挖掘等多项任务中表现出色。模型支持用户自定义输出维度(32 到 2560)和指令感知功能,可根据特定任务、语言或场景进行优化,在效率和效果之间达到良好平衡" - }, - { - "llmModel":"BAAI/bge-m3", - "supportEmbed":true, - "label":"bge-m3", - "description":"BGE-M3 是一个多功能、多语言、多粒度的文本嵌入模型。它支持三种常见的检索功能:密集检索、多向量检索和稀疏检索。该模型可以处理超过100种语言,并且能够处理从短句到长达8192个词元的长文档等不同粒度的输入。BGE-M3在多语言和跨语言检索任务中表现出色,在 MIRACL 和 MKQA 等基准测试中取得了领先结果。它还具有处理长文档检索的能力,在 MLDR 和 NarritiveQA 等数据集上展现了优秀性能" - }, - { - "llmModel":"netease-youdao/bce-embedding-base_v1", - "supportEmbed":true, - "label":"bce-embedding-base_v1", - "description":"bce-embedding-base_v1 是由网易有道开发的双语和跨语言嵌入模型。该模型在中英文语义表示和检索任务中表现出色,尤其擅长跨语言场景。它是为检索增强生成(RAG)系统优化的,可以直接应用于教育、医疗、法律等多个领域。该模型不需要特定指令即可使用,能够高效地生成语义向量,为语义搜索和问答系统提供关键支持" + "llmModel": "BAAI/bge-m3", + "supportEmbed": true, + "label": "BAAI/bge-m3", + "description": "多语言检索与向量召回场景常用模型。" } - ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/siliconflow.png" }, { "label": "Ollama", "value": "ollama", - "options":{ - + "description": "本地部署和开发调试友好的模型运行环境,适合单机快速验证。", + "tags": ["本地开发", "轻量部署", "实验环境"], + "mode": "self-hosted", + "options": { + "llmEndpoint": "http://127.0.0.1:11434", + "chatPath": "/v1/chat/completions", + "embedPath": "/api/embed", + "modelList": [ + { + "llmModel": "qwen3:8b", + "supportChat": true, + "supportFunctionCalling": true, + "label": "qwen3:8b", + "description": "本地开发中常见的通用对话模型。" + }, + { + "llmModel": "bge-m3", + "supportEmbed": true, + "label": "bge-m3", + "description": "适合本地向量化和检索验证。" + } + ] }, - "icon": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + "icon": "/model-providers/ollama.png" + }, + { + "label": "自部署", + "value": "self-hosted", + "description": "统一承载 vLLM、SGLang 与其他 OpenAI 兼容网关的自部署入口。", + "tags": ["vLLM", "SGLang", "OpenAI 兼容"], + "mode": "self-hosted", + "options": { + "llmEndpoint": "http://127.0.0.1:8000", + "chatPath": "/v1/chat/completions", + "embedPath": "/v1/embeddings", + "rerankPath": "/v1/score", + "modelList": [ + { + "llmModel": "Qwen/Qwen3-32B", + "supportChat": true, + "supportFunctionCalling": true, + "label": "Qwen/Qwen3-32B", + "description": "适合自部署通用对话与工具调用。" + }, + { + "llmModel": "BAAI/bge-m3", + "supportEmbed": true, + "label": "BAAI/bge-m3", + "description": "适合自部署检索和知识库向量化。" + }, + { + "llmModel": "jinaai/jina-reranker-m0", + "supportRerank": true, + "label": "jinaai/jina-reranker-m0", + "description": "适合自部署重排和召回优化。" + } + ] + }, + "icon": "/model-providers/self-hosted.svg" } ] diff --git a/easyflow-ui-admin/packages/effects/common-ui/src/ui/authentication/__tests__/login.test.ts b/easyflow-ui-admin/packages/effects/common-ui/src/ui/authentication/__tests__/login.test.ts new file mode 100644 index 0000000..ae25abe --- /dev/null +++ b/easyflow-ui-admin/packages/effects/common-ui/src/ui/authentication/__tests__/login.test.ts @@ -0,0 +1,152 @@ +import {mount} from '@vue/test-utils'; +import {nextTick} from 'vue'; + +import {beforeEach, describe, expect, it, vi} from 'vitest'; +import AuthenticationLogin from '../login.vue'; + +const { formApi, routerPush } = vi.hoisted(() => ({ + formApi: { + getValues: vi.fn(), + setFieldValue: vi.fn(), + validate: vi.fn(), + }, + routerPush: vi.fn(), +})); + +vi.mock('vue-router', () => ({ + useRouter: () => ({ + push: routerPush, + }), +})); + +vi.mock('@easyflow/locales', () => ({ + $t: (key: string) => key, +})); + +vi.mock('@easyflow-core/form-ui', async () => { + const vue = await import('vue'); + + return { + useEasyFlowForm: () => [ + vue.defineComponent({ + name: 'MockEasyFlowForm', + setup() { + return () => vue.h('div', { class: 'mock-form' }); + }, + }), + formApi, + ], + }; +}); + +vi.mock('@easyflow-core/shadcn-ui', async (importOriginal) => { + const vue = await import('vue'); + const actual = await importOriginal(); + + return { + ...actual, + EasyFlowButton: vue.defineComponent({ + name: 'EasyFlowButton', + props: { + loading: { + default: false, + type: Boolean, + }, + }, + emits: ['click'], + setup(props, { attrs, emit, slots }) { + return () => + vue.h( + 'button', + { + ...attrs, + 'data-loading': String(props.loading), + type: 'button', + onClick: () => emit('click'), + }, + slots.default?.(), + ); + }, + }), + EasyFlowCheckbox: vue.defineComponent({ + name: 'EasyFlowCheckbox', + props: { + modelValue: { + default: false, + type: Boolean, + }, + name: { + default: '', + type: String, + }, + }, + emits: ['update:modelValue'], + setup(props, { emit, slots }) { + return () => + vue.h('label', [ + vue.h('input', { + checked: props.modelValue, + name: props.name, + type: 'checkbox', + onChange: (event: Event) => { + emit( + 'update:modelValue', + (event.target as HTMLInputElement).checked, + ); + }, + }), + slots.default?.(), + ]); + }, + }), + }; +}); + +describe('AuthenticationLogin', () => { + const rememberKey = `REMEMBER_ME_ACCOUNT_${location.hostname}`; + + beforeEach(() => { + localStorage.clear(); + vi.clearAllMocks(); + formApi.validate.mockResolvedValue({ valid: true }); + formApi.getValues.mockResolvedValue({ account: 'admin' }); + }); + + it('restores remembered account into the account field', async () => { + localStorage.setItem(rememberKey, 'remembered-user'); + + mount(AuthenticationLogin, { + props: { + formSchema: [], + }, + }); + + await nextTick(); + + expect(formApi.setFieldValue).toHaveBeenCalledWith( + 'account', + 'remembered-user', + ); + }); + + it('persists remembered account using the account field and renders overlay slot', async () => { + localStorage.setItem(rememberKey, 'remembered-user'); + + const wrapper = mount(AuthenticationLogin, { + props: { + formSchema: [], + showRememberMe: true, + }, + slots: { + overlay: '
', + }, + }); + + await nextTick(); + await wrapper.get('button').trigger('click'); + + expect(localStorage.getItem(rememberKey)).toBe('admin'); + expect(wrapper.emitted('submit')?.[0]).toEqual([{ account: 'admin' }]); + expect(wrapper.find('#captcha-box').exists()).toBe(true); + }); +}); diff --git a/sql/02-easyflow-v2.data.sql b/sql/02-easyflow-v2.data.sql index 22a759b..01959b3 100644 --- a/sql/02-easyflow-v2.data.sql +++ b/sql/02-easyflow-v2.data.sql @@ -176,66 +176,43 @@ INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`) VALUES (365314364334 -- ---------------------------- -- Records of tb_model_provider -- ---------------------------- -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (358906187162456064, 'Gitee', 'gitee', '', '', 'https://ai.gitee.com', '/v1/chat/completions', '/v1/embeddings', '/v1/rerank', '2025-12-17 22:26:03', 1, '2025-12-17 22:26:03', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359109019710914560, '百度千帆', 'baidu', '', '', 'https://qianfan.baidubce.com', '/v2/chat/completions', '/v2/embeddings', '', '2025-12-18 11:52:02', 1, '2025-12-18 11:52:02', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110565693620224, '火山引擎', 'volcengine', '', '', 'https://ark.cn-beijing.volces.com', '/api/v3/chat/completions', '/api/v3/embeddings', '', '2025-12-18 11:58:11', 1, '2025-12-18 11:58:11', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110640402563072, '星火大模型', 'spark', '', '', 'https://spark-api-open.xf-yun.com', '/v1/chat/completions', NULL, '', '2025-12-18 11:58:29', 1, '2025-12-18 11:58:29', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110667376132096, '硅基流动', 'siliconlow', '', '', 'https://api.siliconflow.cn', '/v1/chat/completions', '/v1/embeddings', '/v1/rerank', '2025-12-18 11:58:35', 1, '2025-12-18 11:58:35', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110690079899648, 'Ollama', 'ollama', '', '', NULL, NULL, NULL, '', '2025-12-18 11:58:40', 1, '2025-12-18 11:58:40', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111120310632448, 'DeepSeek', 'deepseek', '', '', 'https://api.deepseek.com', '/compatible-mode/v1/chat/completions', '/compatible-mode/v1/embeddings', '', '2025-12-18 12:00:23', 1, '2025-12-18 12:00:23', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111228158771200, 'Open AI', 'openai', '', '', 'https://api.openai.com', '/v1/chat/completions', '/v1/embeddings', '', '2025-12-18 12:00:49', 1, '2025-12-18 12:00:49', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111448204541952, '阿里百炼', 'aliyun', '', '', 'https://dashscope.aliyuncs.com', '/compatible-mode/v1/chat/completions', '/compatible-mode/v1/embeddings', '', '2025-12-18 12:01:41', 1, '2025-12-18 12:01:41', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110667376132096, '硅基流动', 'siliconlow', '', '', 'https://api.siliconflow.cn', '/v1/chat/completions', '/v1/embeddings', '/v1/rerank', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110690079899648, 'Ollama', 'ollama', '', '', 'http://127.0.0.1:11434', '/v1/chat/completions', '/api/embed', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111120310632448, 'DeepSeek', 'deepseek', '', '', 'https://api.deepseek.com', '/chat/completions', '', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111228158771200, 'OpenAI', 'openai', '', '', 'https://api.openai.com', '/v1/chat/completions', '/v1/embeddings', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111448204541952, '阿里百炼', 'aliyun', '', '', 'https://dashscope.aliyuncs.com', '/compatible-mode/v1/chat/completions', '/compatible-mode/v1/embeddings', '/api/v1/services/rerank/text-rerank/text-rerank', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000001, '智谱', 'zhipu', '', '', 'https://open.bigmodel.cn', '/api/paas/v4/chat/completions', '/api/paas/v4/embeddings', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000002, 'MiniMax', 'minimax', '', '', 'https://api.minimax.io', '/v1/chat/completions', '', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000003, 'Kimi', 'kimi', '', '', 'https://api.moonshot.cn', '/v1/chat/completions', '', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000004, '自部署', 'self-hosted', '', '', 'http://127.0.0.1:8000', '/v1/chat/completions', '/v1/embeddings', '/v1/score', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); -- ---------------------------- -- Records of tb_model -- ---------------------------- -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359159030960295936, 1, 1000000, 358906187162456064, 'DeepSeek-V3', NULL, NULL, NULL, NULL, 'DeepSeek-V3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188398742933504, 1, 1000000, 358906187162456064, 'kimi-k2-instruct', NULL, NULL, NULL, NULL, 'kimi-k2-instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188487121113088, 1, 1000000, 358906187162456064, 'ERNIE-X1-Turbo', NULL, NULL, NULL, NULL, 'ERNIE-X1-Turbo', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188591383121920, 1, 1000000, 358906187162456064, 'ERNIE-4.5-Turbo', NULL, NULL, NULL, NULL, 'ERNIE-4.5-Turbo', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188717564563456, 1, 1000000, 358906187162456064, 'DeepSeek-R1', NULL, NULL, NULL, NULL, 'DeepSeek-R1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188823290384384, 1, 1000000, 358906187162456064, 'Qwen3-235B-A22B', NULL, NULL, NULL, NULL, 'Qwen3-235B-A22B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188894316728320, 1, 1000000, 358906187162456064, 'Qwen3-30B-A3B', NULL, NULL, NULL, NULL, 'Qwen3-30B-A3B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189040752463872, 1, 1000000, 358906187162456064, 'Qwen3-32B', NULL, NULL, NULL, NULL, 'Qwen3-32B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189205492142080, 1, 1000000, 358906187162456064, 'ERNIE-4.5-Turbo-VL', NULL, NULL, NULL, NULL, 'ERNIE-4.5-Turbo-VL', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189277827108864, 1, 1000000, 358906187162456064, 'Qwen2.5-VL-32B-Instruct', NULL, NULL, NULL, NULL, 'Qwen2.5-VL-32B-Instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189415073124352, 1, 1000000, 358906187162456064, 'InternVL3-78B', NULL, NULL, NULL, NULL, 'InternVL3-78B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'InternVL3', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189479254364160, 1, 1000000, 358906187162456064, 'InternVL3-38B', NULL, NULL, NULL, NULL, 'InternVL3-38B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'InternVL3', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189562309971968, 1, 1000000, 358906187162456064, 'Qwen3-Embedding-8B', NULL, NULL, NULL, NULL, 'Qwen3-Embedding-8B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189617381183488, 1, 1000000, 358906187162456064, 'Qwen3-Embedding-4B', NULL, NULL, NULL, NULL, 'Qwen3-Embedding-4B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359190580372410368, 1, 1000000, 359111120310632448, 'deepseek-chat', NULL, NULL, NULL, NULL, 'deepseek-chat', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359250814495248384, 1, 1000000, 359111228158771200, 'o4-mini', NULL, NULL, NULL, NULL, 'o4-mini', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359250916064514048, 1, 1000000, 359111228158771200, 'o3', NULL, NULL, NULL, NULL, 'o3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359250975883677696, 1, 1000000, 359111228158771200, 'o3-pro', NULL, NULL, NULL, NULL, 'o3-pro', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251041788776448, 1, 1000000, 359111228158771200, 'o3-mini', NULL, NULL, NULL, NULL, 'o3-mini', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251651388919808, 1, 1000000, 359111228158771200, 'GPT-4.1', NULL, NULL, NULL, NULL, 'GPT-4.1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'GPT系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251703859662848, 1, 1000000, 359111228158771200, 'GPT-4o', NULL, NULL, NULL, NULL, 'GPT-4o', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'GPT系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251899029016576, 1, 1000000, 359111228158771200, 'text-embedding-3-small', NULL, NULL, NULL, NULL, 'text-embedding-3-small', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251948844765184, 1, 1000000, 359111228158771200, 'text-embedding-3-large', NULL, NULL, NULL, NULL, 'text-embedding-3-large', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252007019761664, 1, 1000000, 359111228158771200, 'text-embedding-ada-002', NULL, NULL, NULL, NULL, 'text-embedding-ada-002', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252333504385024, 1, 1000000, 359110667376132096, 'DeepSeek-R1', NULL, NULL, NULL, NULL, 'deepseek-ai/DeepSeek-R1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252410297896960, 1, 1000000, 359110667376132096, 'DeepSeek-V3', NULL, NULL, NULL, NULL, 'deepseek-ai/DeepSeek-V3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252901950017536, 1, 1000000, 359110667376132096, 'QwenLong-L1-32B', NULL, NULL, NULL, NULL, 'Tongyi-Zhiwen/QwenLong-L1-32B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253108129419264, 1, 1000000, 359110667376132096, 'Qwen3-30B-A3B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-30B-A3B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253178463703040, 1, 1000000, 359110667376132096, 'Qwen3-32B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-32B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253290258681856, 1, 1000000, 359110667376132096, 'Qwen2.5-VL-32B-Instruct', NULL, NULL, NULL, NULL, 'Qwen/Qwen2.5-VL-32B-Instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253356990058496, 1, 1000000, 359110667376132096, 'Qwen2.5-VL-72B-Instruct', NULL, NULL, NULL, NULL, 'Qwen/Qwen2.5-VL-72B-Instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253448664961024, 1, 1000000, 359110667376132096, 'deepseek-vl2', NULL, NULL, NULL, NULL, 'deepseek-ai/deepseek-vl2', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253538523729920, 1, 1000000, 359110667376132096, 'Qwen3-Embedding-8B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-Embedding-8B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253610657370112, 1, 1000000, 359110667376132096, 'Qwen3-Embedding-4B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-Embedding-4B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253918280208384, 1, 1000000, 359110667376132096, 'bge-m3', NULL, NULL, NULL, NULL, 'BAAI/bge-m3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'BAAI', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254052095283200, 1, 1000000, 359110667376132096, 'bce-embedding-base_v1', NULL, NULL, NULL, NULL, 'netease-youdao/bce-embedding-base_v1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Netease-youdao', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254268492009472, 1, 1000000, 359110565693620224, 'doubao-seed-1.6', NULL, NULL, NULL, NULL, 'doubao-seed-1-6-250615', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Doubao', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254341498064896, 1, 1000000, 359110565693620224, 'doubao-seed-1.6-flash', NULL, NULL, NULL, NULL, 'doubao-seed-1-6-flash-250615', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Doubao', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254465049677824, 1, 1000000, 359110565693620224, 'doubao-seed-1.6-thinking', NULL, NULL, NULL, NULL, 'doubao-seed-1-6-thinking-250715', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Doubao', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254550235992064, 1, 1000000, 359110565693620224, 'deepseek-r1', NULL, NULL, NULL, NULL, 'deepseek-r1-250528', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359255963729022976, 1, 1000000, 359110640402563072, 'Spark Max', NULL, NULL, NULL, NULL, 'generalv3.5', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256036009463808, 1, 1000000, 359110640402563072, 'Spark4.0 Ultra', NULL, NULL, NULL, NULL, '4.0Ultra', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256272148779008, 1, 1000000, 359110640402563072, 'Max-32K', NULL, NULL, NULL, NULL, 'max-32k', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256472095444992, 1, 1000000, 359110640402563072, 'Spark Pro', NULL, NULL, NULL, NULL, 'generalv3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256641138479104, 1, 1000000, 359110640402563072, 'Spark Pro-128k', NULL, NULL, NULL, NULL, 'pro-128k', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359498072033816576, 1, 1000000, 359111448204541952, 'text-embedding-v3', NULL, NULL, NULL, NULL, 'text-embedding-v3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359536003377258496, 1, 1000000, 358906187162456064, 'Qwen3-Reranker-8B', NULL, NULL, NULL, NULL, 'Qwen3-Reranker-8B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'rerankModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010001, 1, 1000000, 359111120310632448, 'DeepSeek-V3', NULL, '通用对话与代码任务表现均衡。', NULL, NULL, 'deepseek-chat', NULL, NULL, '{"llmEndpoint":"https://api.deepseek.com","chatPath":"/chat/completions","embedPath":"","rerankPath":""}', 'DeepSeek', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010002, 1, 1000000, 359111120310632448, 'DeepSeek-R1', NULL, '复杂推理与长链路分析场景。', NULL, NULL, 'deepseek-reasoner', NULL, NULL, '{"llmEndpoint":"https://api.deepseek.com","chatPath":"/chat/completions","embedPath":"","rerankPath":""}', 'DeepSeek', 'chatModel', 1, 1, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010003, 1, 1000000, 359111228158771200, 'o4-mini', NULL, '轻量推理与通用生产任务模型。', NULL, NULL, 'o4-mini', NULL, NULL, '{"llmEndpoint":"https://api.openai.com","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":""}', 'OpenAI', 'chatModel', 1, 1, 1, 1, 0, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010004, 1, 1000000, 359111228158771200, 'GPT-4.1', NULL, '复杂任务与多模态理解旗舰模型。', NULL, NULL, 'gpt-4.1', NULL, NULL, '{"llmEndpoint":"https://api.openai.com","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":""}', 'OpenAI', 'chatModel', 1, 1, 1, 1, 0, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010005, 1, 1000000, 359111228158771200, 'text-embedding-3-large', NULL, '高质量文本向量模型。', NULL, NULL, 'text-embedding-3-large', NULL, NULL, '{"llmEndpoint":"https://api.openai.com","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":""}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010006, 1, 1000000, 359111448204541952, '通义千问 Plus', NULL, '适合通用问答与工具调用。', NULL, NULL, 'qwen-plus', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Qwen', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010007, 1, 1000000, 359111448204541952, '通义千问 Max', NULL, '综合能力更强的主力模型。', NULL, NULL, 'qwen-max', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Qwen', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010008, 1, 1000000, 359111448204541952, 'text-embedding-v4', NULL, '阿里百炼默认向量模型。', NULL, NULL, 'text-embedding-v4', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010009, 1, 1000000, 359111448204541952, 'gte-rerank-v2', NULL, '阿里百炼默认重排模型。', NULL, NULL, 'gte-rerank-v2', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Rerank', 'rerankModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010010, 1, 1000000, 366100000000000001, 'GLM-4.5', NULL, '中文与推理能力表现均衡。', NULL, NULL, 'glm-4.5', NULL, NULL, '{"llmEndpoint":"https://open.bigmodel.cn","chatPath":"/api/paas/v4/chat/completions","embedPath":"/api/paas/v4/embeddings","rerankPath":""}', 'GLM', 'chatModel', 1, 1, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010011, 1, 1000000, 366100000000000001, 'GLM-4.5-Air', NULL, '低延迟通用模型。', NULL, NULL, 'glm-4.5-air', NULL, NULL, '{"llmEndpoint":"https://open.bigmodel.cn","chatPath":"/api/paas/v4/chat/completions","embedPath":"/api/paas/v4/embeddings","rerankPath":""}', 'GLM', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010012, 1, 1000000, 366100000000000001, 'Embedding-3', NULL, '知识库与检索常用向量模型。', NULL, NULL, 'embedding-3', NULL, NULL, '{"llmEndpoint":"https://open.bigmodel.cn","chatPath":"/api/paas/v4/chat/completions","embedPath":"/api/paas/v4/embeddings","rerankPath":""}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010013, 1, 1000000, 366100000000000002, 'MiniMax-M2.5', NULL, '长上下文与复杂推理场景。', NULL, NULL, 'MiniMax-M2.5', NULL, NULL, '{"llmEndpoint":"https://api.minimax.io","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'MiniMax', 'chatModel', 1, 1, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010014, 1, 1000000, 366100000000000002, 'MiniMax-M2.5-highspeed', NULL, '更高吞吐的快速对话模型。', NULL, NULL, 'MiniMax-M2.5-highspeed', NULL, NULL, '{"llmEndpoint":"https://api.minimax.io","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'MiniMax', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010015, 1, 1000000, 366100000000000003, 'moonshot-v1-8k', NULL, '低延迟通用对话模型。', NULL, NULL, 'moonshot-v1-8k', NULL, NULL, '{"llmEndpoint":"https://api.moonshot.cn","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'Kimi', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010016, 1, 1000000, 366100000000000003, 'moonshot-v1-128k', NULL, '长文档理解与大上下文任务。', NULL, NULL, 'moonshot-v1-128k', NULL, NULL, '{"llmEndpoint":"https://api.moonshot.cn","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'Kimi', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010017, 1, 1000000, 359110667376132096, 'DeepSeek-V3', NULL, '统一平台接入的开源对话模型。', NULL, NULL, 'deepseek-ai/DeepSeek-V3', NULL, NULL, '{"llmEndpoint":"https://api.siliconflow.cn","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/rerank"}', 'DeepSeek', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010018, 1, 1000000, 359110667376132096, 'Kimi-K2-Instruct', NULL, '代码与 Agent 工作流场景常用模型。', NULL, NULL, 'moonshotai/Kimi-K2-Instruct', NULL, NULL, '{"llmEndpoint":"https://api.siliconflow.cn","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/rerank"}', 'Kimi', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010019, 1, 1000000, 359110667376132096, 'BAAI/bge-m3', NULL, '多语言检索与向量召回模型。', NULL, NULL, 'BAAI/bge-m3', NULL, NULL, '{"llmEndpoint":"https://api.siliconflow.cn","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/rerank"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010020, 1, 1000000, 359110690079899648, 'qwen3:8b', NULL, '本地开发常用的通用对话模型。', NULL, NULL, 'qwen3:8b', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:11434","chatPath":"/v1/chat/completions","embedPath":"/api/embed","rerankPath":""}', 'Ollama', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010021, 1, 1000000, 359110690079899648, 'bge-m3', NULL, '本地向量化与检索验证。', NULL, NULL, 'bge-m3', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:11434","chatPath":"/v1/chat/completions","embedPath":"/api/embed","rerankPath":""}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010022, 1, 1000000, 366100000000000004, 'Qwen/Qwen3-32B', NULL, '适合自部署对话与工具调用。', NULL, NULL, 'Qwen/Qwen3-32B', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:8000","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/score"}', 'Qwen', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010023, 1, 1000000, 366100000000000004, 'BAAI/bge-m3', NULL, '自部署检索和知识库向量化。', NULL, NULL, 'BAAI/bge-m3', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:8000","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/score"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010024, 1, 1000000, 366100000000000004, 'jinaai/jina-reranker-m0', NULL, '自部署召回重排模型。', NULL, NULL, 'jinaai/jina-reranker-m0', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:8000","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/score"}', 'Rerank', 'rerankModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -- ---------------------------- -- Records of tb_sys_option diff --git a/sql/07-easyflow-v2.p4-model-provider-refresh.sql b/sql/07-easyflow-v2.p4-model-provider-refresh.sql new file mode 100644 index 0000000..13fc921 --- /dev/null +++ b/sql/07-easyflow-v2.p4-model-provider-refresh.sql @@ -0,0 +1,81 @@ +-- 模型服务商集合刷新脚本 +-- 用途: +-- 1. 清理已下线的旧服务商及其关联模型(星火、火山、千帆、Gitee) +-- 2. 对保留服务商做默认路径对齐 +-- 3. 补齐新的服务商预设(智谱、MiniMax、Kimi、自部署) + +START TRANSACTION; + +DELETE m +FROM tb_model AS m +INNER JOIN tb_model_provider AS p ON p.id = m.provider_id +WHERE p.provider_type IN ('gitee', 'baidu', 'volcengine', 'spark'); + +DELETE FROM tb_model_provider +WHERE provider_type IN ('gitee', 'baidu', 'volcengine', 'spark'); + +UPDATE tb_model_provider +SET provider_name = 'DeepSeek', + endpoint = 'https://api.deepseek.com', + chat_path = '/chat/completions', + embed_path = '', + rerank_path = '' +WHERE provider_type = 'deepseek'; + +UPDATE tb_model_provider +SET provider_name = 'OpenAI', + endpoint = 'https://api.openai.com', + chat_path = '/v1/chat/completions', + embed_path = '/v1/embeddings', + rerank_path = '' +WHERE provider_type = 'openai'; + +UPDATE tb_model_provider +SET provider_name = '阿里百炼', + endpoint = 'https://dashscope.aliyuncs.com', + chat_path = '/compatible-mode/v1/chat/completions', + embed_path = '/compatible-mode/v1/embeddings', + rerank_path = '/api/v1/services/rerank/text-rerank/text-rerank' +WHERE provider_type = 'aliyun'; + +UPDATE tb_model_provider +SET provider_name = '硅基流动', + endpoint = 'https://api.siliconflow.cn', + chat_path = '/v1/chat/completions', + embed_path = '/v1/embeddings', + rerank_path = '/v1/rerank' +WHERE provider_type = 'siliconlow'; + +UPDATE tb_model_provider +SET provider_name = 'Ollama', + endpoint = 'http://127.0.0.1:11434', + chat_path = '/v1/chat/completions', + embed_path = '/api/embed', + rerank_path = '' +WHERE provider_type = 'ollama'; + +INSERT INTO tb_model_provider (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) +SELECT 366100000000000001, '智谱', 'zhipu', '', '', 'https://open.bigmodel.cn', '/api/paas/v4/chat/completions', '/api/paas/v4/embeddings', '', NOW(), 1, NOW(), 1 +WHERE NOT EXISTS ( + SELECT 1 FROM tb_model_provider WHERE provider_type = 'zhipu' +); + +INSERT INTO tb_model_provider (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) +SELECT 366100000000000002, 'MiniMax', 'minimax', '', '', 'https://api.minimax.io', '/v1/chat/completions', '', '', NOW(), 1, NOW(), 1 +WHERE NOT EXISTS ( + SELECT 1 FROM tb_model_provider WHERE provider_type = 'minimax' +); + +INSERT INTO tb_model_provider (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) +SELECT 366100000000000003, 'Kimi', 'kimi', '', '', 'https://api.moonshot.cn', '/v1/chat/completions', '', '', NOW(), 1, NOW(), 1 +WHERE NOT EXISTS ( + SELECT 1 FROM tb_model_provider WHERE provider_type = 'kimi' +); + +INSERT INTO tb_model_provider (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) +SELECT 366100000000000004, '自部署', 'self-hosted', '', '', 'http://127.0.0.1:8000', '/v1/chat/completions', '/v1/embeddings', '/v1/score', NOW(), 1, NOW(), 1 +WHERE NOT EXISTS ( + SELECT 1 FROM tb_model_provider WHERE provider_type = 'self-hosted' +); + +COMMIT; diff --git a/sql/initdb/02-easyflow-v2.data.sql b/sql/initdb/02-easyflow-v2.data.sql index 22a759b..01959b3 100644 --- a/sql/initdb/02-easyflow-v2.data.sql +++ b/sql/initdb/02-easyflow-v2.data.sql @@ -176,66 +176,43 @@ INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`) VALUES (365314364334 -- ---------------------------- -- Records of tb_model_provider -- ---------------------------- -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (358906187162456064, 'Gitee', 'gitee', '', '', 'https://ai.gitee.com', '/v1/chat/completions', '/v1/embeddings', '/v1/rerank', '2025-12-17 22:26:03', 1, '2025-12-17 22:26:03', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359109019710914560, '百度千帆', 'baidu', '', '', 'https://qianfan.baidubce.com', '/v2/chat/completions', '/v2/embeddings', '', '2025-12-18 11:52:02', 1, '2025-12-18 11:52:02', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110565693620224, '火山引擎', 'volcengine', '', '', 'https://ark.cn-beijing.volces.com', '/api/v3/chat/completions', '/api/v3/embeddings', '', '2025-12-18 11:58:11', 1, '2025-12-18 11:58:11', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110640402563072, '星火大模型', 'spark', '', '', 'https://spark-api-open.xf-yun.com', '/v1/chat/completions', NULL, '', '2025-12-18 11:58:29', 1, '2025-12-18 11:58:29', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110667376132096, '硅基流动', 'siliconlow', '', '', 'https://api.siliconflow.cn', '/v1/chat/completions', '/v1/embeddings', '/v1/rerank', '2025-12-18 11:58:35', 1, '2025-12-18 11:58:35', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110690079899648, 'Ollama', 'ollama', '', '', NULL, NULL, NULL, '', '2025-12-18 11:58:40', 1, '2025-12-18 11:58:40', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111120310632448, 'DeepSeek', 'deepseek', '', '', 'https://api.deepseek.com', '/compatible-mode/v1/chat/completions', '/compatible-mode/v1/embeddings', '', '2025-12-18 12:00:23', 1, '2025-12-18 12:00:23', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111228158771200, 'Open AI', 'openai', '', '', 'https://api.openai.com', '/v1/chat/completions', '/v1/embeddings', '', '2025-12-18 12:00:49', 1, '2025-12-18 12:00:49', 1); -INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111448204541952, '阿里百炼', 'aliyun', '', '', 'https://dashscope.aliyuncs.com', '/compatible-mode/v1/chat/completions', '/compatible-mode/v1/embeddings', '', '2025-12-18 12:01:41', 1, '2025-12-18 12:01:41', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110667376132096, '硅基流动', 'siliconlow', '', '', 'https://api.siliconflow.cn', '/v1/chat/completions', '/v1/embeddings', '/v1/rerank', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359110690079899648, 'Ollama', 'ollama', '', '', 'http://127.0.0.1:11434', '/v1/chat/completions', '/api/embed', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111120310632448, 'DeepSeek', 'deepseek', '', '', 'https://api.deepseek.com', '/chat/completions', '', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111228158771200, 'OpenAI', 'openai', '', '', 'https://api.openai.com', '/v1/chat/completions', '/v1/embeddings', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (359111448204541952, '阿里百炼', 'aliyun', '', '', 'https://dashscope.aliyuncs.com', '/compatible-mode/v1/chat/completions', '/compatible-mode/v1/embeddings', '/api/v1/services/rerank/text-rerank/text-rerank', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000001, '智谱', 'zhipu', '', '', 'https://open.bigmodel.cn', '/api/paas/v4/chat/completions', '/api/paas/v4/embeddings', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000002, 'MiniMax', 'minimax', '', '', 'https://api.minimax.io', '/v1/chat/completions', '', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000003, 'Kimi', 'kimi', '', '', 'https://api.moonshot.cn', '/v1/chat/completions', '', '', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); +INSERT INTO `tb_model_provider` (`id`, `provider_name`, `provider_type`, `icon`, `api_key`, `endpoint`, `chat_path`, `embed_path`, `rerank_path`, `created`, `created_by`, `modified`, `modified_by`) VALUES (366100000000000004, '自部署', 'self-hosted', '', '', 'http://127.0.0.1:8000', '/v1/chat/completions', '/v1/embeddings', '/v1/score', '2026-03-10 10:00:00', 1, '2026-03-10 10:00:00', 1); -- ---------------------------- -- Records of tb_model -- ---------------------------- -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359159030960295936, 1, 1000000, 358906187162456064, 'DeepSeek-V3', NULL, NULL, NULL, NULL, 'DeepSeek-V3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188398742933504, 1, 1000000, 358906187162456064, 'kimi-k2-instruct', NULL, NULL, NULL, NULL, 'kimi-k2-instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188487121113088, 1, 1000000, 358906187162456064, 'ERNIE-X1-Turbo', NULL, NULL, NULL, NULL, 'ERNIE-X1-Turbo', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188591383121920, 1, 1000000, 358906187162456064, 'ERNIE-4.5-Turbo', NULL, NULL, NULL, NULL, 'ERNIE-4.5-Turbo', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188717564563456, 1, 1000000, 358906187162456064, 'DeepSeek-R1', NULL, NULL, NULL, NULL, 'DeepSeek-R1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188823290384384, 1, 1000000, 358906187162456064, 'Qwen3-235B-A22B', NULL, NULL, NULL, NULL, 'Qwen3-235B-A22B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359188894316728320, 1, 1000000, 358906187162456064, 'Qwen3-30B-A3B', NULL, NULL, NULL, NULL, 'Qwen3-30B-A3B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189040752463872, 1, 1000000, 358906187162456064, 'Qwen3-32B', NULL, NULL, NULL, NULL, 'Qwen3-32B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189205492142080, 1, 1000000, 358906187162456064, 'ERNIE-4.5-Turbo-VL', NULL, NULL, NULL, NULL, 'ERNIE-4.5-Turbo-VL', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', '文心ERNIE', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189277827108864, 1, 1000000, 358906187162456064, 'Qwen2.5-VL-32B-Instruct', NULL, NULL, NULL, NULL, 'Qwen2.5-VL-32B-Instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189415073124352, 1, 1000000, 358906187162456064, 'InternVL3-78B', NULL, NULL, NULL, NULL, 'InternVL3-78B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'InternVL3', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189479254364160, 1, 1000000, 358906187162456064, 'InternVL3-38B', NULL, NULL, NULL, NULL, 'InternVL3-38B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'InternVL3', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189562309971968, 1, 1000000, 358906187162456064, 'Qwen3-Embedding-8B', NULL, NULL, NULL, NULL, 'Qwen3-Embedding-8B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359189617381183488, 1, 1000000, 358906187162456064, 'Qwen3-Embedding-4B', NULL, NULL, NULL, NULL, 'Qwen3-Embedding-4B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359190580372410368, 1, 1000000, 359111120310632448, 'deepseek-chat', NULL, NULL, NULL, NULL, 'deepseek-chat', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359250814495248384, 1, 1000000, 359111228158771200, 'o4-mini', NULL, NULL, NULL, NULL, 'o4-mini', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359250916064514048, 1, 1000000, 359111228158771200, 'o3', NULL, NULL, NULL, NULL, 'o3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359250975883677696, 1, 1000000, 359111228158771200, 'o3-pro', NULL, NULL, NULL, NULL, 'o3-pro', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251041788776448, 1, 1000000, 359111228158771200, 'o3-mini', NULL, NULL, NULL, NULL, 'o3-mini', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'O系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251651388919808, 1, 1000000, 359111228158771200, 'GPT-4.1', NULL, NULL, NULL, NULL, 'GPT-4.1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'GPT系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251703859662848, 1, 1000000, 359111228158771200, 'GPT-4o', NULL, NULL, NULL, NULL, 'GPT-4o', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'GPT系列', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251899029016576, 1, 1000000, 359111228158771200, 'text-embedding-3-small', NULL, NULL, NULL, NULL, 'text-embedding-3-small', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359251948844765184, 1, 1000000, 359111228158771200, 'text-embedding-3-large', NULL, NULL, NULL, NULL, 'text-embedding-3-large', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252007019761664, 1, 1000000, 359111228158771200, 'text-embedding-ada-002', NULL, NULL, NULL, NULL, 'text-embedding-ada-002', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252333504385024, 1, 1000000, 359110667376132096, 'DeepSeek-R1', NULL, NULL, NULL, NULL, 'deepseek-ai/DeepSeek-R1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252410297896960, 1, 1000000, 359110667376132096, 'DeepSeek-V3', NULL, NULL, NULL, NULL, 'deepseek-ai/DeepSeek-V3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359252901950017536, 1, 1000000, 359110667376132096, 'QwenLong-L1-32B', NULL, NULL, NULL, NULL, 'Tongyi-Zhiwen/QwenLong-L1-32B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253108129419264, 1, 1000000, 359110667376132096, 'Qwen3-30B-A3B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-30B-A3B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253178463703040, 1, 1000000, 359110667376132096, 'Qwen3-32B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-32B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253290258681856, 1, 1000000, 359110667376132096, 'Qwen2.5-VL-32B-Instruct', NULL, NULL, NULL, NULL, 'Qwen/Qwen2.5-VL-32B-Instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253356990058496, 1, 1000000, 359110667376132096, 'Qwen2.5-VL-72B-Instruct', NULL, NULL, NULL, NULL, 'Qwen/Qwen2.5-VL-72B-Instruct', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253448664961024, 1, 1000000, 359110667376132096, 'deepseek-vl2', NULL, NULL, NULL, NULL, 'deepseek-ai/deepseek-vl2', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253538523729920, 1, 1000000, 359110667376132096, 'Qwen3-Embedding-8B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-Embedding-8B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253610657370112, 1, 1000000, 359110667376132096, 'Qwen3-Embedding-4B', NULL, NULL, NULL, NULL, 'Qwen/Qwen3-Embedding-4B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359253918280208384, 1, 1000000, 359110667376132096, 'bge-m3', NULL, NULL, NULL, NULL, 'BAAI/bge-m3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'BAAI', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254052095283200, 1, 1000000, 359110667376132096, 'bce-embedding-base_v1', NULL, NULL, NULL, NULL, 'netease-youdao/bce-embedding-base_v1', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Netease-youdao', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254268492009472, 1, 1000000, 359110565693620224, 'doubao-seed-1.6', NULL, NULL, NULL, NULL, 'doubao-seed-1-6-250615', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Doubao', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254341498064896, 1, 1000000, 359110565693620224, 'doubao-seed-1.6-flash', NULL, NULL, NULL, NULL, 'doubao-seed-1-6-flash-250615', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Doubao', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254465049677824, 1, 1000000, 359110565693620224, 'doubao-seed-1.6-thinking', NULL, NULL, NULL, NULL, 'doubao-seed-1-6-thinking-250715', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Doubao', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359254550235992064, 1, 1000000, 359110565693620224, 'deepseek-r1', NULL, NULL, NULL, NULL, 'deepseek-r1-250528', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'DeepSeek', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359255963729022976, 1, 1000000, 359110640402563072, 'Spark Max', NULL, NULL, NULL, NULL, 'generalv3.5', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256036009463808, 1, 1000000, 359110640402563072, 'Spark4.0 Ultra', NULL, NULL, NULL, NULL, '4.0Ultra', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256272148779008, 1, 1000000, 359110640402563072, 'Max-32K', NULL, NULL, NULL, NULL, 'max-32k', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256472095444992, 1, 1000000, 359110640402563072, 'Spark Pro', NULL, NULL, NULL, NULL, 'generalv3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359256641138479104, 1, 1000000, 359110640402563072, 'Spark Pro-128k', NULL, NULL, NULL, NULL, 'pro-128k', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Spark', 'chatModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359498072033816576, 1, 1000000, 359111448204541952, 'text-embedding-v3', NULL, NULL, NULL, NULL, 'text-embedding-v3', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (359536003377258496, 1, 1000000, 358906187162456064, 'Qwen3-Reranker-8B', NULL, NULL, NULL, NULL, 'Qwen3-Reranker-8B', NULL, NULL, '{\"rerankPath\":\"\",\"chatPath\":\"\",\"llmEndpoint\":\"\",\"embedPath\":\"\"}', 'Qwen', 'rerankModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010001, 1, 1000000, 359111120310632448, 'DeepSeek-V3', NULL, '通用对话与代码任务表现均衡。', NULL, NULL, 'deepseek-chat', NULL, NULL, '{"llmEndpoint":"https://api.deepseek.com","chatPath":"/chat/completions","embedPath":"","rerankPath":""}', 'DeepSeek', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010002, 1, 1000000, 359111120310632448, 'DeepSeek-R1', NULL, '复杂推理与长链路分析场景。', NULL, NULL, 'deepseek-reasoner', NULL, NULL, '{"llmEndpoint":"https://api.deepseek.com","chatPath":"/chat/completions","embedPath":"","rerankPath":""}', 'DeepSeek', 'chatModel', 1, 1, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010003, 1, 1000000, 359111228158771200, 'o4-mini', NULL, '轻量推理与通用生产任务模型。', NULL, NULL, 'o4-mini', NULL, NULL, '{"llmEndpoint":"https://api.openai.com","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":""}', 'OpenAI', 'chatModel', 1, 1, 1, 1, 0, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010004, 1, 1000000, 359111228158771200, 'GPT-4.1', NULL, '复杂任务与多模态理解旗舰模型。', NULL, NULL, 'gpt-4.1', NULL, NULL, '{"llmEndpoint":"https://api.openai.com","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":""}', 'OpenAI', 'chatModel', 1, 1, 1, 1, 0, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010005, 1, 1000000, 359111228158771200, 'text-embedding-3-large', NULL, '高质量文本向量模型。', NULL, NULL, 'text-embedding-3-large', NULL, NULL, '{"llmEndpoint":"https://api.openai.com","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":""}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010006, 1, 1000000, 359111448204541952, '通义千问 Plus', NULL, '适合通用问答与工具调用。', NULL, NULL, 'qwen-plus', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Qwen', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010007, 1, 1000000, 359111448204541952, '通义千问 Max', NULL, '综合能力更强的主力模型。', NULL, NULL, 'qwen-max', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Qwen', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010008, 1, 1000000, 359111448204541952, 'text-embedding-v4', NULL, '阿里百炼默认向量模型。', NULL, NULL, 'text-embedding-v4', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010009, 1, 1000000, 359111448204541952, 'gte-rerank-v2', NULL, '阿里百炼默认重排模型。', NULL, NULL, 'gte-rerank-v2', NULL, NULL, '{"llmEndpoint":"https://dashscope.aliyuncs.com","chatPath":"/compatible-mode/v1/chat/completions","embedPath":"/compatible-mode/v1/embeddings","rerankPath":"/api/v1/services/rerank/text-rerank/text-rerank"}', 'Rerank', 'rerankModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010010, 1, 1000000, 366100000000000001, 'GLM-4.5', NULL, '中文与推理能力表现均衡。', NULL, NULL, 'glm-4.5', NULL, NULL, '{"llmEndpoint":"https://open.bigmodel.cn","chatPath":"/api/paas/v4/chat/completions","embedPath":"/api/paas/v4/embeddings","rerankPath":""}', 'GLM', 'chatModel', 1, 1, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010011, 1, 1000000, 366100000000000001, 'GLM-4.5-Air', NULL, '低延迟通用模型。', NULL, NULL, 'glm-4.5-air', NULL, NULL, '{"llmEndpoint":"https://open.bigmodel.cn","chatPath":"/api/paas/v4/chat/completions","embedPath":"/api/paas/v4/embeddings","rerankPath":""}', 'GLM', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010012, 1, 1000000, 366100000000000001, 'Embedding-3', NULL, '知识库与检索常用向量模型。', NULL, NULL, 'embedding-3', NULL, NULL, '{"llmEndpoint":"https://open.bigmodel.cn","chatPath":"/api/paas/v4/chat/completions","embedPath":"/api/paas/v4/embeddings","rerankPath":""}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010013, 1, 1000000, 366100000000000002, 'MiniMax-M2.5', NULL, '长上下文与复杂推理场景。', NULL, NULL, 'MiniMax-M2.5', NULL, NULL, '{"llmEndpoint":"https://api.minimax.io","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'MiniMax', 'chatModel', 1, 1, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010014, 1, 1000000, 366100000000000002, 'MiniMax-M2.5-highspeed', NULL, '更高吞吐的快速对话模型。', NULL, NULL, 'MiniMax-M2.5-highspeed', NULL, NULL, '{"llmEndpoint":"https://api.minimax.io","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'MiniMax', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010015, 1, 1000000, 366100000000000003, 'moonshot-v1-8k', NULL, '低延迟通用对话模型。', NULL, NULL, 'moonshot-v1-8k', NULL, NULL, '{"llmEndpoint":"https://api.moonshot.cn","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'Kimi', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010016, 1, 1000000, 366100000000000003, 'moonshot-v1-128k', NULL, '长文档理解与大上下文任务。', NULL, NULL, 'moonshot-v1-128k', NULL, NULL, '{"llmEndpoint":"https://api.moonshot.cn","chatPath":"/v1/chat/completions","embedPath":"","rerankPath":""}', 'Kimi', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010017, 1, 1000000, 359110667376132096, 'DeepSeek-V3', NULL, '统一平台接入的开源对话模型。', NULL, NULL, 'deepseek-ai/DeepSeek-V3', NULL, NULL, '{"llmEndpoint":"https://api.siliconflow.cn","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/rerank"}', 'DeepSeek', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010018, 1, 1000000, 359110667376132096, 'Kimi-K2-Instruct', NULL, '代码与 Agent 工作流场景常用模型。', NULL, NULL, 'moonshotai/Kimi-K2-Instruct', NULL, NULL, '{"llmEndpoint":"https://api.siliconflow.cn","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/rerank"}', 'Kimi', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010019, 1, 1000000, 359110667376132096, 'BAAI/bge-m3', NULL, '多语言检索与向量召回模型。', NULL, NULL, 'BAAI/bge-m3', NULL, NULL, '{"llmEndpoint":"https://api.siliconflow.cn","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/rerank"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010020, 1, 1000000, 359110690079899648, 'qwen3:8b', NULL, '本地开发常用的通用对话模型。', NULL, NULL, 'qwen3:8b', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:11434","chatPath":"/v1/chat/completions","embedPath":"/api/embed","rerankPath":""}', 'Ollama', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010021, 1, 1000000, 359110690079899648, 'bge-m3', NULL, '本地向量化与检索验证。', NULL, NULL, 'bge-m3', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:11434","chatPath":"/v1/chat/completions","embedPath":"/api/embed","rerankPath":""}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010022, 1, 1000000, 366100000000000004, 'Qwen/Qwen3-32B', NULL, '适合自部署对话与工具调用。', NULL, NULL, 'Qwen/Qwen3-32B', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:8000","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/score"}', 'Qwen', 'chatModel', 1, 0, 1, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010023, 1, 1000000, 366100000000000004, 'BAAI/bge-m3', NULL, '自部署检索和知识库向量化。', NULL, NULL, 'BAAI/bge-m3', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:8000","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/score"}', 'Embedding', 'embeddingModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); +INSERT INTO `tb_model` (`id`, `dept_id`, `tenant_id`, `provider_id`, `title`, `icon`, `description`, `endpoint`, `request_path`, `model_name`, `api_key`, `extra_config`, `options`, `group_name`, `model_type`, `with_used`, `support_thinking`, `support_tool`, `support_image`, `support_image_b64_only`, `support_video`, `support_audio`, `support_free`) VALUES (366100000000010024, 1, 1000000, 366100000000000004, 'jinaai/jina-reranker-m0', NULL, '自部署召回重排模型。', NULL, NULL, 'jinaai/jina-reranker-m0', NULL, NULL, '{"llmEndpoint":"http://127.0.0.1:8000","chatPath":"/v1/chat/completions","embedPath":"/v1/embeddings","rerankPath":"/v1/score"}', 'Rerank', 'rerankModel', 1, 0, 0, NULL, NULL, NULL, NULL, 0); -- ---------------------------- -- Records of tb_sys_option