增加模型别名

This commit is contained in:
2026-07-04 14:49:52 +08:00
parent 641a021f7a
commit 03f9744dcb
16 changed files with 298 additions and 145 deletions
+7 -1
View File
@@ -15,6 +15,7 @@ const ALL_RES = ['1K', '2K', '4K', '720p', '1080p']
const DUR_OPTS = ['5s', '6s', '8s', '10s', '15s']
const id = ref('')
const alias = ref('')
const type = ref('image')
const ratios = ref(['1:1', '16:9', '9:16'])
const maxRefs = ref(0)
@@ -89,6 +90,7 @@ async function save() {
const body = {
id: mid,
name: mid,
alias: alias.value.trim(),
type: type.value,
provider: 'custom',
prices: r.prices,
@@ -127,7 +129,7 @@ async function save() {
</div>
<div class="p-5 space-y-4">
<p class="text-xs text-slate-500 leading-relaxed">
id 要与上游模型名<strong class="text-slate-700">一致</strong> 生成时按 id 自动路由到支持该 id 的上游账号价格按本地价计费
id 要与上游模型名<strong class="text-slate-700">一致</strong> 生成时按 id 自动路由到支持该 id 的上游账号价格按本地价计费设了别名后,对外只用别名调用( id 调不到),但内部仍按 id 路由到上游,不影响
</p>
<div class="flex gap-3">
@@ -135,6 +137,10 @@ async function save() {
<label class="text-xs text-slate-500 block mb-1">模型 id <span class="text-rose-500">*</span></label>
<input v-model="id" class="field font-mono text-xs h-10" placeholder="gpt-image-2" />
</div>
<div class="w-40">
<label class="text-xs text-slate-500 block mb-1">别名(选填)</label>
<input v-model="alias" class="field font-mono text-xs h-10" placeholder="对外调用名" />
</div>
<div class="w-28">
<label class="text-xs text-slate-500 block mb-1">类型</label>
<SelectMenu v-model="type" :options="[{value:'image',label:'图像'},{value:'video',label:'视频'}]" />
@@ -18,6 +18,7 @@ const REF_MODE_LABEL = { none: '无', frame: '首帧/首尾帧', asset: '参考
const catalog = ref([])
const loading = ref(true)
const selectedId = ref(props.model?.id || '')
const alias = ref(props.model?.alias || '')
const imagePrices = ref({}) // 普通价 { '1K': '', '2K': '', ... } keyed by resolutions
const videoPrices = ref({}) // 普通价 { '5s': '', '10s': '', ... } keyed by durations
const imagePricesAgent = ref({}) // 代理价(留空 = 跟随普通价)
@@ -138,6 +139,7 @@ async function save() {
duration_prices,
prices_agent,
duration_prices_agent,
alias: alias.value.trim(),
max_reference_images: e.max_reference_images || 0,
reference_mode: e.reference_mode || 'none',
weight: Number(weight.value) || 0,
@@ -153,6 +155,7 @@ async function save() {
prices,
prices_agent,
image_to_image: !!e.image_to_image,
alias: alias.value.trim(),
// 多参考图:把目录定义的张数(gpt=3/seedream=6/flux=4 …)写进模型,
// 否则后端仍按旧值(默认 1)限制。
max_reference_images: e.max_reference_images || 0,
@@ -197,6 +200,12 @@ async function save() {
</p>
</div>
<div>
<label class="lbl">别名</label>
<input v-model="alias" class="field font-mono" placeholder="可选,对外名" />
<p class="text-[11px] text-white/40 mt-1.5">设置后原模型名将不可调用,画图台 / API / 文档都改用别名</p>
</div>
<!-- read-only param summary, straight from the loaded catalog -->
<div v-if="entry" class="rounded-xl bg-white/[0.03] ring-1 ring-white/[0.06] p-3.5 space-y-2.5">
<div class="flex items-center gap-2">
+3 -2
View File
@@ -8,6 +8,7 @@ const props = defineProps({
model: { type: Object, required: true },
})
const emit = defineEmits(['close'])
const publishName = computed(() => props.model.alias || props.model.id)
const isVideo = props.model.type === 'video'
@@ -124,7 +125,7 @@ async function run() {
resultUrl.value = ''
resultKind.value = ''
const payload = {
model: props.model.id,
model: publishName.value,
prompt: prompt.value,
ratio: ratio.value,
resolution: resolution.value,
@@ -198,7 +199,7 @@ async function recover() {
<div class="px-5 py-4 border-b border-white/[0.06] flex items-center justify-between">
<div class="min-w-0">
<h2 class="text-sm font-semibold">测试模型</h2>
<div class="text-xs text-white/45 font-mono truncate">{{ model.id }}</div>
<div class="text-xs text-white/45 font-mono truncate">{{ publishName }}</div>
</div>
<button @click="emit('close')" class="text-white/40 hover:text-white transition-colors">
<Icon name="close" class="w-5 h-5" />