feat: 新增统一模型网关与模型管理工作区

- 新增 OpenAI 兼容统一模型调用链路、模型发布配置与批量发布能力

- 重构模型管理页面入口与统一网关工作区,更新服务商 logo 资源与模型 ID 文案

- 收口全新库初始化脚本,仅保留服务商种子并整理统一网关 migration
This commit is contained in:
2026-03-26 20:48:18 +08:00
parent b777cb3641
commit aaf4c61ff8
80 changed files with 4786 additions and 362 deletions

View File

@@ -1,17 +1,25 @@
<script setup lang="ts">
import type {PropType} from 'vue';
import {ref} from 'vue';
import type { PropType } from 'vue';
import type {llmType} from '#/api';
import type {ModelAbilityItem} from '#/views/ai/model/modelUtils/model-ability';
import {getDefaultModelAbility} from '#/views/ai/model/modelUtils/model-ability';
import type { llmType } from '#/api';
import type { ModelAbilityItem } from '#/views/ai/model/modelUtils/model-ability';
import {CircleCheck, CircleClose, Delete, Edit, Loading, Select,} from '@element-plus/icons-vue';
import {ElButton, ElIcon, ElMessage, ElTag} from 'element-plus';
import { ref } from 'vue';
import {verifyModelConfig} from '#/api/ai/llm';
import {
CircleCheck,
CircleClose,
Delete,
Edit,
Loading,
Select,
} from '@element-plus/icons-vue';
import { ElButton, ElIcon, ElMessage, ElTag } from 'element-plus';
import { verifyModelConfig } from '#/api/ai/llm';
import ModelProviderBadge from '#/views/ai/model/ModelProviderBadge.vue';
import {mapLlmToModelAbility} from '#/views/ai/model/modelUtils/model-ability-utils';
import { getDefaultModelAbility } from '#/views/ai/model/modelUtils/model-ability';
import { mapLlmToModelAbility } from '#/views/ai/model/modelUtils/model-ability-utils';
const props = defineProps({
llmList: {
@@ -115,14 +123,6 @@ const getSelectedAbilityTagsForLlm = (llm: llmType): ModelAbilityItem[] => {
const allTags = mapLlmToModelAbility(llm, defaultAbility);
return allTags.filter((tag) => tag.selected);
};
const getModelMeta = (llm: llmType) => {
const providerName =
llm?.modelProvider?.providerName || llm?.aiLlmProvider?.providerName || '';
const modelName = llm.llmModel || llm.title;
return `${providerName} · ${modelName}`;
};
</script>
<template>
@@ -153,7 +153,6 @@ const getModelMeta = (llm: llmType) => {
</ElTag>
</div>
</div>
<p class="llm-item__meta">{{ getModelMeta(llm) }}</p>
<p v-if="llm.description" class="llm-item__description">
{{ llm.description }}
</p>
@@ -263,7 +262,6 @@ const getModelMeta = (llm: llmType) => {
color: hsl(var(--text-strong));
}
.llm-item__meta,
.llm-item__description {
margin: 0;
font-size: 13px;