diff --git a/frontend/src/api/endpoints/aliases.ts b/frontend/src/api/endpoints/aliases.ts deleted file mode 100644 index bb3c076..0000000 --- a/frontend/src/api/endpoints/aliases.ts +++ /dev/null @@ -1,121 +0,0 @@ -/** - * 模型别名管理 API - */ - -import client from '../client' -import type { ModelMapping, ModelMappingCreate, ModelMappingUpdate } from './types' - -export interface ModelAlias { - id: string - alias: string - global_model_id: string - global_model_name: string | null - global_model_display_name: string | null - provider_id: string | null - provider_name: string | null - scope: 'global' | 'provider' - mapping_type: 'alias' | 'mapping' - is_active: boolean - created_at: string - updated_at: string -} - -export interface CreateModelAliasRequest { - alias: string - global_model_id: string - provider_id?: string | null - mapping_type?: 'alias' | 'mapping' - is_active?: boolean -} - -export interface UpdateModelAliasRequest { - alias?: string - global_model_id?: string - provider_id?: string | null - mapping_type?: 'alias' | 'mapping' - is_active?: boolean -} - -function transformMapping(mapping: ModelMapping): ModelAlias { - return { - id: mapping.id, - alias: mapping.source_model, - global_model_id: mapping.target_global_model_id, - global_model_name: mapping.target_global_model_name, - global_model_display_name: mapping.target_global_model_display_name, - provider_id: mapping.provider_id ?? null, - provider_name: mapping.provider_name ?? null, - scope: mapping.scope, - mapping_type: mapping.mapping_type || 'alias', - is_active: mapping.is_active, - created_at: mapping.created_at, - updated_at: mapping.updated_at - } -} - -/** - * 获取别名列表 - */ -export async function getAliases(params?: { - provider_id?: string - global_model_id?: string - is_active?: boolean - skip?: number - limit?: number -}): Promise { - const response = await client.get('/api/admin/models/mappings', { - params: { - provider_id: params?.provider_id, - target_global_model_id: params?.global_model_id, - is_active: params?.is_active, - skip: params?.skip, - limit: params?.limit - } - }) - return (response.data as ModelMapping[]).map(transformMapping) -} - -/** - * 获取单个别名 - */ -export async function getAlias(id: string): Promise { - const response = await client.get(`/api/admin/models/mappings/${id}`) - return transformMapping(response.data) -} - -/** - * 创建别名 - */ -export async function createAlias(data: CreateModelAliasRequest): Promise { - const payload: ModelMappingCreate = { - source_model: data.alias, - target_global_model_id: data.global_model_id, - provider_id: data.provider_id ?? null, - mapping_type: data.mapping_type ?? 'alias', - is_active: data.is_active ?? true - } - const response = await client.post('/api/admin/models/mappings', payload) - return transformMapping(response.data) -} - -/** - * 更新别名 - */ -export async function updateAlias(id: string, data: UpdateModelAliasRequest): Promise { - const payload: ModelMappingUpdate = { - source_model: data.alias, - target_global_model_id: data.global_model_id, - provider_id: data.provider_id ?? null, - mapping_type: data.mapping_type, - is_active: data.is_active - } - const response = await client.patch(`/api/admin/models/mappings/${id}`, payload) - return transformMapping(response.data) -} - -/** - * 删除别名 - */ -export async function deleteAlias(id: string): Promise { - await client.delete(`/api/admin/models/mappings/${id}`) -} diff --git a/frontend/src/api/endpoints/index.ts b/frontend/src/api/endpoints/index.ts index 73e60af..df0e4a6 100644 --- a/frontend/src/api/endpoints/index.ts +++ b/frontend/src/api/endpoints/index.ts @@ -4,6 +4,5 @@ export * from './endpoints' export * from './keys' export * from './health' export * from './models' -export * from './aliases' export * from './adaptive' export * from './global-models' diff --git a/frontend/src/api/endpoints/models.ts b/frontend/src/api/endpoints/models.ts index 1bffdf1..5a00f79 100644 --- a/frontend/src/api/endpoints/models.ts +++ b/frontend/src/api/endpoints/models.ts @@ -5,9 +5,6 @@ import type { ModelUpdate, ModelCatalogResponse, ProviderAvailableSourceModelsResponse, - UpdateModelMappingRequest, - UpdateModelMappingResponse, - DeleteModelMappingResponse } from './types' /** @@ -99,27 +96,6 @@ export async function getProviderAvailableSourceModels( return response.data } -/** - * 更新目录中的模型映射 - */ -export async function updateCatalogMapping( - mappingId: string, - data: UpdateModelMappingRequest -): Promise { - const response = await client.put(`/api/admin/models/catalog/mappings/${mappingId}`, data) - return response.data -} - -/** - * 删除目录中的模型映射 - */ -export async function deleteCatalogMapping( - mappingId: string -): Promise { - const response = await client.delete(`/api/admin/models/catalog/mappings/${mappingId}`) - return response.data -} - /** * 批量为 Provider 关联 GlobalModels */ diff --git a/frontend/src/api/endpoints/types.ts b/frontend/src/api/endpoints/types.ts index ad822d2..c069b2d 100644 --- a/frontend/src/api/endpoints/types.ts +++ b/frontend/src/api/endpoints/types.ts @@ -211,11 +211,17 @@ export interface ConcurrencyStatus { key_max_concurrent?: number } +export interface ProviderModelAlias { + name: string + priority: number // 优先级(数字越小优先级越高) +} + export interface Model { id: string provider_id: string global_model_id?: string // 关联的 GlobalModel ID - provider_model_name: string // Provider 侧的模型名称(原 name) + provider_model_name: string // Provider 侧的主模型名称 + provider_model_aliases?: ProviderModelAlias[] | null // 模型名称别名列表(带优先级) // 原始配置值(可能为空,为空时使用 GlobalModel 默认值) price_per_request?: number | null // 按次计费价格 tiered_pricing?: TieredPricingConfig | null // 阶梯计费配置 @@ -244,7 +250,8 @@ export interface Model { } export interface ModelCreate { - provider_model_name: string // Provider 侧的模型名称(原 name) + provider_model_name: string // Provider 侧的主模型名称 + provider_model_aliases?: ProviderModelAlias[] // 模型名称别名列表(带优先级) global_model_id: string // 关联的 GlobalModel ID(必填) // 计费配置(可选,为空时使用 GlobalModel 默认值) price_per_request?: number // 按次计费价格 @@ -261,6 +268,7 @@ export interface ModelCreate { export interface ModelUpdate { provider_model_name?: string + provider_model_aliases?: ProviderModelAlias[] | null // 模型名称别名列表(带优先级) global_model_id?: string price_per_request?: number | null // 按次计费价格(null 表示清空/使用默认值) tiered_pricing?: TieredPricingConfig | null // 阶梯计费配置 @@ -273,21 +281,6 @@ export interface ModelUpdate { is_available?: boolean } -export interface ModelMapping { - id: string - source_model: string // 别名/源模型名 - target_global_model_id: string // 目标 GlobalModel ID - target_global_model_name: string | null - target_global_model_display_name: string | null - provider_id: string | null - provider_name: string | null - scope: 'global' | 'provider' - mapping_type: 'alias' | 'mapping' - is_active: boolean - created_at: string - updated_at: string -} - export interface ModelCapabilities { supports_vision: boolean supports_function_calling: boolean @@ -335,7 +328,6 @@ export interface ModelCatalogItem { global_model_name: string // GlobalModel.name(原 source_model) display_name: string // GlobalModel.display_name description?: string | null // GlobalModel.description - aliases: string[] // 所有指向该 GlobalModel 的别名列表 providers: ModelCatalogProviderDetail[] // 支持该模型的 Provider 列表 price_range: ModelPriceRange // 价格区间 total_providers: number @@ -351,8 +343,6 @@ export interface ProviderAvailableSourceModel { global_model_name: string // GlobalModel.name(原 source_model) display_name: string // GlobalModel.display_name provider_model_name: string // Model.provider_model_name(Provider 侧的模型名) - has_alias: boolean // 是否有别名指向该 GlobalModel - aliases: string[] // 别名列表 model_id?: string | null // Model.id price: ProviderModelPriceInfo capabilities: ModelCapabilities @@ -371,65 +361,6 @@ export interface BatchAssignProviderConfig { model_id?: string } -export interface BatchAssignModelMappingRequest { - global_model_id: string // 要分配的 GlobalModel ID(原 source_model) - providers: BatchAssignProviderConfig[] -} - -export interface BatchAssignProviderResult { - provider_id: string - mapping_id?: string | null - created_model: boolean - model_id?: string | null - updated: boolean -} - -export interface BatchAssignError { - provider_id: string - error: string -} - -export interface BatchAssignModelMappingResponse { - success: boolean - created_mappings: BatchAssignProviderResult[] - errors: BatchAssignError[] -} - -export interface ModelMappingCreate { - source_model: string // 源模型名或别名 - target_global_model_id: string // 目标 GlobalModel ID - provider_id?: string | null - mapping_type?: 'alias' | 'mapping' - is_active?: boolean -} - -export interface ModelMappingUpdate { - source_model?: string // 源模型名或别名 - target_global_model_id?: string // 目标 GlobalModel ID - provider_id?: string | null - mapping_type?: 'alias' | 'mapping' - is_active?: boolean -} - -export interface UpdateModelMappingRequest { - source_model?: string - target_global_model_id?: string - provider_id?: string | null - mapping_type?: 'alias' | 'mapping' - is_active?: boolean -} - -export interface UpdateModelMappingResponse { - success: boolean - mapping_id: string - message?: string -} - -export interface DeleteModelMappingResponse { - success: boolean - message?: string -} - export interface AdaptiveStatsResponse { adaptive_mode: boolean current_limit: number | null diff --git a/frontend/src/features/models/components/AliasDialog.vue b/frontend/src/features/models/components/AliasDialog.vue deleted file mode 100644 index 7295141..0000000 --- a/frontend/src/features/models/components/AliasDialog.vue +++ /dev/null @@ -1,384 +0,0 @@ - - - diff --git a/frontend/src/features/models/components/ModelDetailDrawer.vue b/frontend/src/features/models/components/ModelDetailDrawer.vue index 89582de..1522491 100644 --- a/frontend/src/features/models/components/ModelDetailDrawer.vue +++ b/frontend/src/features/models/components/ModelDetailDrawer.vue @@ -104,19 +104,6 @@ 提供商 - @@ -684,236 +671,6 @@ - - -
- - -
-
-
-

- 别名与映射 -

-
-
- - -
-
-
- - -
- -
- - - -
- - -

- 暂无别名或映射 -

- -
-
-
@@ -931,7 +688,6 @@ import { Zap, Image, Building2, - Tag, Plus, Edit, Trash2, @@ -955,13 +711,11 @@ import TableCell from '@/components/ui/table-cell.vue' // 使用外部类型定义 import type { GlobalModelResponse } from '@/api/global-models' -import type { ModelAlias } from '@/api/endpoints/aliases' import type { TieredPricingConfig, PricingTier } from '@/api/endpoints/types' import type { CapabilityDefinition } from '@/api/endpoints' const props = withDefaults(defineProps(), { loadingProviders: false, - loadingAliases: false, hasBlockingDialogOpen: false, }) const emit = defineEmits<{ @@ -973,11 +727,6 @@ const emit = defineEmits<{ 'deleteProvider': [provider: any] 'toggleProviderStatus': [provider: any] 'refreshProviders': [] - 'addAlias': [] - 'editAlias': [alias: ModelAlias] - 'toggleAliasStatus': [alias: ModelAlias] - 'deleteAlias': [alias: ModelAlias] - 'refreshAliases': [] }>() const { success: showSuccess, error: showError } = useToast() @@ -985,9 +734,7 @@ interface Props { model: GlobalModelResponse | null open: boolean providers: any[] - aliases: ModelAlias[] loadingProviders?: boolean - loadingAliases?: boolean hasBlockingDialogOpen?: boolean capabilities?: CapabilityDefinition[] } diff --git a/frontend/src/features/models/components/index.ts b/frontend/src/features/models/components/index.ts index 8c99577..7b91cfc 100644 --- a/frontend/src/features/models/components/index.ts +++ b/frontend/src/features/models/components/index.ts @@ -1,4 +1,3 @@ export { default as GlobalModelFormDialog } from './GlobalModelFormDialog.vue' -export { default as AliasDialog } from './AliasDialog.vue' export { default as ModelDetailDrawer } from './ModelDetailDrawer.vue' export { default as TieredPricingEditor } from './TieredPricingEditor.vue' diff --git a/frontend/src/features/providers/components/ProviderDetailDrawer.vue b/frontend/src/features/providers/components/ProviderDetailDrawer.vue index 611f39e..6cd9c59 100644 --- a/frontend/src/features/providers/components/ProviderDetailDrawer.vue +++ b/frontend/src/features/providers/components/ProviderDetailDrawer.vue @@ -526,14 +526,7 @@ @edit-model="handleEditModel" @delete-model="handleDeleteModel" @batch-assign="handleBatchAssign" - /> - - - @@ -636,6 +629,16 @@ @update:open="batchAssignDialogOpen = $event" @changed="handleBatchAssignChanged" /> + + + diff --git a/frontend/src/features/providers/components/provider-tabs/ModelsTab.vue b/frontend/src/features/providers/components/provider-tabs/ModelsTab.vue index 1465c4e..a5b16a4 100644 --- a/frontend/src/features/providers/components/provider-tabs/ModelsTab.vue +++ b/frontend/src/features/providers/components/provider-tabs/ModelsTab.vue @@ -165,6 +165,15 @@ > +