This commit is contained in:
dataeaseShu
2025-08-01 16:16:17 +08:00
2 changed files with 150 additions and 20 deletions
+63 -10
View File
@@ -2,7 +2,14 @@ import icon_alybl_colorful from '@/assets/model/icon_alybl_colorful.png'
import icon_bdyzn_colorful from '@/assets/model/icon_bdyzn_colorful.png'
import icon_deepseek_colorful from '@/assets/model/icon_deepseek_colorful.png'
import icon_txy_colorful from '@/assets/model/icon_txy_colorful.png'
type ModelConfig = Record<number, { api_domain: string; model_options: string[] }>
import icon_xfhx_colorful from '@/assets/model/icon_xfhx_colorful.png'
type ModelArg = { key: string; val?: string | number; type: string; range?: string }
type ModelOption = { name: string; api_domain?: string; args?: ModelArg[] }
type ModelConfig = Record<
number,
{ api_domain: string; common_args?: ModelArg[]; model_options: ModelOption[] }
>
export const supplierList: Array<{
id: number
@@ -17,7 +24,7 @@ export const supplierList: Array<{
model_config: {
0: {
api_domain: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
model_options: ['qwen-plus'],
model_options: [{ name: 'qwen-plus' }],
},
},
},
@@ -28,7 +35,7 @@ export const supplierList: Array<{
model_config: {
0: {
api_domain: 'https://qianfan.baidubce.com/v2/',
model_options: ['ernie-x1-turbo-32k'],
model_options: [{ name: 'ernie-x1-turbo-32k' }],
},
},
},
@@ -39,7 +46,7 @@ export const supplierList: Array<{
model_config: {
0: {
api_domain: 'https://api.deepseek.com',
model_options: ['deepseek-chat', 'deepseek-reasoner'],
model_options: [{ name: 'deepseek-chat' }, { name: 'deepseek-reasoner' }],
},
},
},
@@ -50,13 +57,59 @@ export const supplierList: Array<{
model_config: {
0: {
api_domain: 'https://api.hunyuan.cloud.tencent.com/v1/',
common_args: [{ key: 'temperature', val: 1.0, type: 'number', range: '[0, 2]' }],
model_options: [
'hunyuan-turbos-latest',
'hunyuan-turbos-longtext-128k-20250325',
'hunyuan-large',
'hunyuan-standard-256K',
'hunyuan-standard',
'hunyuan-lite',
{ name: 'hunyuan-turbos-latest' },
{ name: 'hunyuan-turbos-longtext-128k-20250325' },
{ name: 'hunyuan-large' },
{ name: 'hunyuan-standard-256K' },
{ name: 'hunyuan-standard' },
{ name: 'hunyuan-lite' },
],
},
},
},
{
id: 5,
name: '讯飞星火',
icon: icon_xfhx_colorful,
model_config: {
0: {
api_domain: 'https://spark-api-open.xf-yun.com/v1/',
common_args: [{ key: 'temperature', val: 1.0, type: 'number', range: '[0, 2]' }],
model_options: [
{
name: '4.0Ultra',
args: [{ key: 'max_tokens', val: 32768, type: 'number', range: '[1, 32768]' }],
},
{
name: 'generalv3.5',
args: [{ key: 'max_tokens', val: 4096, type: 'number', range: '[1, 8192]' }],
},
{
name: 'max-32k',
args: [{ key: 'max_tokens', val: 4096, type: 'number', range: '[1, 32768]' }],
},
{
name: 'generalv3',
args: [{ key: 'max_tokens', val: 4096, type: 'number', range: '[1, 8192]' }],
},
{
name: 'pro-128k',
args: [{ key: 'max_tokens', val: 4096, type: 'number', range: '[1, 131072]' }],
},
{
name: 'lite',
args: [{ key: 'max_tokens', val: 4096, type: 'number', range: '[1, 4096]' }],
},
{
name: 'x1',
args: [
{ key: 'max_tokens', val: 32768, type: 'number', range: '[1, 32768]' },
{ key: 'temperature', val: 1.2, type: 'number', range: '(0, 2]' },
],
api_domain: 'https://spark-api-open.xf-yun.com/v2/',
},
],
},
},
+87 -10
View File
@@ -7,7 +7,7 @@ import icon_delete from '@/assets/svg/icon_delete.svg'
import icon_add_outlined from '@/assets/svg/icon_add_outlined.svg'
import ParamsForm from './ParamsForm.vue'
import { modelTypeOptions } from '@/entity/CommonEntity.ts'
import { base_model_options } from '@/entity/supplier'
import { base_model_options, get_supplier } from '@/entity/supplier'
import { useI18n } from 'vue-i18n'
withDefaults(
@@ -44,8 +44,18 @@ const modelRef = ref()
const paramsFormRef = ref()
const advancedSetting = ref([] as ParamsFormData[])
const paramsFormDrawer = ref(false)
const configExpand = ref(false)
const configExpand = ref(true)
let tempConfigMap = new Map<string, Array<any>>()
const modelSelected = computed(() => {
return !!modelForm.base_model
})
const currentSupplier = computed(() => {
if (!modelForm.supplier) {
return null
}
return get_supplier(modelForm.supplier)
})
const modelList = computed(() => {
if (!modelForm.supplier) {
return []
@@ -133,6 +143,7 @@ const duplicateName = async (item: any) => {
if (isCreate.value) {
advancedSetting.value.push({ ...item, id: +new Date() })
beforeClose()
tempConfigMap.set(`${modelForm.supplier}-${modelForm.base_model}`, [...advancedSetting.value])
return
}
for (const key in advancedSetting.value) {
@@ -141,7 +152,7 @@ const duplicateName = async (item: any) => {
Object.assign(element, { ...item })
}
}
tempConfigMap.set(`${modelForm.supplier}-${modelForm.base_model}`, [...advancedSetting.value])
beforeClose()
}
@@ -158,11 +169,13 @@ const supplierChang = (supplier: any) => {
const config = supplier.model_config[modelForm.model_type || 0]
modelForm.api_domain = config.api_domain
modelForm.base_model = ''
advancedSetting.value = []
}
let curId = +new Date()
const initForm = (item?: any) => {
modelForm.id = ''
modelRef.value.clearValidate()
tempConfigMap = new Map<string, Array<any>>()
if (item) {
Object.assign(modelForm, { ...item })
if (item?.config_list?.length) {
@@ -176,8 +189,58 @@ const initForm = (item?: any) => {
} else {
advancedSetting.value = []
}
tempConfigMap.set(`${modelForm.supplier}-${modelForm.base_model}`, [...advancedSetting.value])
}
}
const formatAdvancedSetting = (list: Array<any>) => {
const setting_list = [
...list.map((item) => {
return { id: ++curId, name: item.name, key: item.key, val: item.val } as any
}),
]
advancedSetting.value = setting_list
}
const baseModelChange = (val: string) => {
if (!val || !modelForm.supplier || !modelList.value?.length) {
return
}
const current_model = modelList.value?.find((model: any) => model.name == val)
if (current_model) {
modelForm.api_domain = current_model.api_domain || getSupplierDomain() || ''
}
const current_config_list = tempConfigMap.get(`${modelForm.supplier}-${modelForm.base_model}`)
if (current_config_list) {
formatAdvancedSetting(current_config_list)
return
}
const defaultArgs = getModelDefaultArgs()
if (defaultArgs?.size) {
const defaultArgsList = [...defaultArgs.values()]
formatAdvancedSetting(defaultArgsList)
tempConfigMap.set(`${modelForm.supplier}-${modelForm.base_model}`, [...advancedSetting.value])
}
}
const getSupplierDomain = () => {
return currentSupplier.value?.model_config[modelForm.model_type || 0].api_domain
}
const getModelDefaultArgs = () => {
if (!modelForm.supplier || !modelForm.base_model) {
return null
}
const model_config = currentSupplier.value?.model_config[modelForm.model_type || 0]
const common_args = model_config?.common_args || []
const current_model = modelList.value?.find((model: any) => model.name == modelForm.base_model)
if (current_model?.args?.length) {
const modelArgs = current_model.args
common_args.push(...modelArgs)
}
const argMap = common_args.reduce((acc: any, item: any) => {
acc.set(item.key, { ...item, name: item.key })
return acc
}, new Map())
return argMap
}
const emits = defineEmits(['submit'])
const submitModel = () => {
@@ -185,7 +248,11 @@ const submitModel = () => {
if (res) {
emits('submit', {
...modelForm,
config_list: [...advancedSetting.value],
config_list: [
...advancedSetting.value.map((item) => {
return { key: item.key, name: item.name, val: item.val }
}),
],
})
}
})
@@ -249,11 +316,17 @@ defineExpose({
allow-create
default-first-option
:reserve-keyword="false"
@change="baseModelChange"
>
<el-option v-for="item in modelList" :key="item" :label="item" :value="item" />
<el-option
v-for="item in modelList"
:key="item.name"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item prop="api_domain" :label="t('model.api_domain_name')">
<el-form-item v-if="modelSelected" prop="api_domain" :label="t('model.api_domain_name')">
<el-input
v-model="modelForm.api_domain"
clearable
@@ -262,7 +335,7 @@ defineExpose({
"
/>
</el-form-item>
<el-form-item prop="api_key" label="API Key">
<el-form-item v-if="modelSelected" prop="api_key" label="API Key">
<el-input
v-model="modelForm.api_key"
clearable
@@ -273,6 +346,7 @@ defineExpose({
</el-form-item>
</el-form>
<div
v-if="modelSelected"
class="advance-setting"
:class="configExpand && 'expand'"
@click="configExpand = !configExpand"
@@ -282,7 +356,7 @@ defineExpose({
<arrow_down></arrow_down>
</el-icon>
</div>
<div v-if="configExpand" class="model-params">
<div v-if="modelSelected && configExpand" class="model-params">
{{ t('model.model_parameters') }}
<span class="add" @click="handleParamsCreate">
<el-icon size="16">
@@ -293,7 +367,7 @@ defineExpose({
</div>
<div
v-if="configExpand"
v-if="modelSelected && configExpand"
class="params-table"
:class="!advancedSettingPagination.length && 'bottom-border'"
>
@@ -322,7 +396,10 @@ defineExpose({
</el-table-column>
</el-table>
</div>
<div v-if="advancedSetting.length > 5 && configExpand" class="params-table_pagination">
<div
v-if="modelSelected && advancedSetting.length > 5 && configExpand"
class="params-table_pagination"
>
<el-pagination
:default-page-size="5"
layout="prev, pager, next"