|
@@ -10,103 +10,75 @@
|
|
:loading="state.loading"
|
|
:loading="state.loading"
|
|
>
|
|
>
|
|
<div class="bm-form">
|
|
<div class="bm-form">
|
|
- <CzrForm ref="ref_form" :form-view="isViewCpt">
|
|
|
|
|
|
+ <CzrForm ref="ref_form" label-width="100px" :form-view="isViewCpt">
|
|
<div class="__czr-title_1">基本信息</div>
|
|
<div class="__czr-title_1">基本信息</div>
|
|
<CzrFormColumn
|
|
<CzrFormColumn
|
|
required
|
|
required
|
|
:span="12"
|
|
:span="12"
|
|
- label="模型供应商"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- link="select"
|
|
|
|
- :options="[]"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="12"
|
|
|
|
label="模型类型"
|
|
label="模型类型"
|
|
- v-model:param="state.form.name"
|
|
|
|
|
|
+ v-model:param="state.form.type"
|
|
link="select"
|
|
link="select"
|
|
- :options="[]"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="24"
|
|
|
|
- label="模型名称"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- :span="24"
|
|
|
|
- label="模型简介"
|
|
|
|
- v-model:param="state.form.remark"
|
|
|
|
- type="textarea"
|
|
|
|
- :rows="4"
|
|
|
|
|
|
+ :options="DictionaryStore.modelTypes.list"
|
|
|
|
+ @change="state.form.pluginClass = ''"
|
|
/>
|
|
/>
|
|
|
|
+ <template v-if="state.form.type">
|
|
|
|
+ <CzrFormColumn
|
|
|
|
+ required
|
|
|
|
+ :span="12"
|
|
|
|
+ label="模型供应商"
|
|
|
|
+ v-model:param="state.form.pluginClass"
|
|
|
|
+ link="select"
|
|
|
|
+ :options="
|
|
|
|
+ DictionaryStore.modelProvides.list.filter(
|
|
|
|
+ (v) => v.type === state.form.type,
|
|
|
|
+ )
|
|
|
|
+ "
|
|
|
|
+ @getObject="getModelProvide"
|
|
|
|
+ />
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="state.form.pluginClass">
|
|
|
|
+ <CzrFormColumn
|
|
|
|
+ required
|
|
|
|
+ :span="24"
|
|
|
|
+ label="模型名称"
|
|
|
|
+ v-model:param="state.form.name"
|
|
|
|
+ />
|
|
|
|
+ <CzrFormColumn
|
|
|
|
+ :span="24"
|
|
|
|
+ label="模型简介"
|
|
|
|
+ v-model:param="state.form.description"
|
|
|
|
+ type="textarea"
|
|
|
|
+ :rows="4"
|
|
|
|
+ />
|
|
|
|
+ </template>
|
|
<CzrFormColumn
|
|
<CzrFormColumn
|
|
required
|
|
required
|
|
:span="24"
|
|
:span="24"
|
|
label="共享条件"
|
|
label="共享条件"
|
|
- v-model:param="state.form.name"
|
|
|
|
- link="radio"
|
|
|
|
- :options="[
|
|
|
|
- { label: '不开放', value: 0 },
|
|
|
|
- { label: '全部开放', value: 1 },
|
|
|
|
- { label: '申请开放', value: 2 },
|
|
|
|
- ]"
|
|
|
|
- />
|
|
|
|
- <div class="__czr-title_1">模型参数配置</div>
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="12"
|
|
|
|
- label="基础URL"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="12"
|
|
|
|
- label="上下文长度"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- link="number"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="12"
|
|
|
|
- label="最大Token上限"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- link="number"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- :span="12"
|
|
|
|
- label="Vision"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- link="radio"
|
|
|
|
- :options="[
|
|
|
|
- { label: '支持', value: 0 },
|
|
|
|
- { label: '不支持', value: 1 },
|
|
|
|
- ]"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- :span="12"
|
|
|
|
- label="函数调用"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
|
|
+ v-model:param="state.form.openStrategy"
|
|
link="radio"
|
|
link="radio"
|
|
- :options="[
|
|
|
|
- { label: '支持', value: 0 },
|
|
|
|
- { label: '不支持', value: 1 },
|
|
|
|
- ]"
|
|
|
|
- />
|
|
|
|
- <div class="__czr-title_1">业务参数配置</div>
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="12"
|
|
|
|
- label="待定"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
- />
|
|
|
|
- <CzrFormColumn
|
|
|
|
- required
|
|
|
|
- :span="12"
|
|
|
|
- label="待定"
|
|
|
|
- v-model:param="state.form.name"
|
|
|
|
|
|
+ :options="DictionaryStore.shareConditions"
|
|
/>
|
|
/>
|
|
|
|
+ <template v-if="state.form.pluginClass">
|
|
|
|
+ <template v-if="state.baseForms?.length > 0">
|
|
|
|
+ <div class="__czr-title_1">基本参数配置</div>
|
|
|
|
+ <template v-for="item in state.baseForms">
|
|
|
|
+ <modelFormInit :config="item" :form="state.form.basicConfigs" />
|
|
|
|
+ </template>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="state.paramForms?.length > 0">
|
|
|
|
+ <div class="__czr-title_1">模型参数配置</div>
|
|
|
|
+ <template v-for="item in state.paramForms">
|
|
|
|
+ <modelFormInit :config="item" :form="state.form.paramConfigs" />
|
|
|
|
+ </template>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="state.bizForms?.length > 0">
|
|
|
|
+ <div class="__czr-title_1">业务参数配置</div>
|
|
|
|
+ <template v-for="item in state.bizForms">
|
|
|
|
+ <modelFormInit :config="item" :form="state.form.bizConfigs" />
|
|
|
|
+ </template>
|
|
|
|
+ </template>
|
|
|
|
+ </template>
|
|
</CzrForm>
|
|
</CzrForm>
|
|
</div>
|
|
</div>
|
|
</CzrDialog>
|
|
</CzrDialog>
|
|
@@ -122,10 +94,17 @@ import {
|
|
watch,
|
|
watch,
|
|
} from 'vue'
|
|
} from 'vue'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
-import { useDialogStore, useDictionaryStore } from '@/stores'
|
|
|
|
|
|
+import { useAppStore, useDialogStore, useDictionaryStore } from '@/stores'
|
|
import { useRouter } from 'vue-router'
|
|
import { useRouter } from 'vue-router'
|
|
|
|
+import modelFormInit from './model-form-init.vue'
|
|
|
|
+import {
|
|
|
|
+ pluginAddInstance,
|
|
|
|
+ pluginDetail,
|
|
|
|
+ pluginUpdateInstance,
|
|
|
|
+} from '@/api/modules/model'
|
|
|
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
|
+const AppStore = useAppStore()
|
|
const DictionaryStore = useDictionaryStore()
|
|
const DictionaryStore = useDictionaryStore()
|
|
const DialogStore = useDialogStore()
|
|
const DialogStore = useDialogStore()
|
|
const emit = defineEmits(['update:show', 'refresh'])
|
|
const emit = defineEmits(['update:show', 'refresh'])
|
|
@@ -136,7 +115,14 @@ const props = defineProps({
|
|
})
|
|
})
|
|
const state: any = reactive({
|
|
const state: any = reactive({
|
|
loading: false,
|
|
loading: false,
|
|
- form: {},
|
|
|
|
|
|
+ form: {
|
|
|
|
+ basicConfigs: {},
|
|
|
|
+ paramConfigs: {},
|
|
|
|
+ bizConfigs: {},
|
|
|
|
+ },
|
|
|
|
+ baseForms: [],
|
|
|
|
+ paramForms: [],
|
|
|
|
+ bizForms: [],
|
|
})
|
|
})
|
|
const ref_form = ref()
|
|
const ref_form = ref()
|
|
const titleCpt = computed(() => {
|
|
const titleCpt = computed(() => {
|
|
@@ -160,7 +146,15 @@ watch(
|
|
(n) => {
|
|
(n) => {
|
|
if (n) {
|
|
if (n) {
|
|
initDictionary()
|
|
initDictionary()
|
|
- state.form = {}
|
|
|
|
|
|
+ state.form = {
|
|
|
|
+ tenantId: AppStore.tenantInfo?.id,
|
|
|
|
+ basicConfigs: {},
|
|
|
|
+ paramConfigs: {},
|
|
|
|
+ bizConfigs: {},
|
|
|
|
+ }
|
|
|
|
+ state.baseForms = []
|
|
|
|
+ state.paramForms = []
|
|
|
|
+ state.bizForms = []
|
|
if (props.transfer.mode !== 'add') {
|
|
if (props.transfer.mode !== 'add') {
|
|
initData()
|
|
initData()
|
|
}
|
|
}
|
|
@@ -170,9 +164,16 @@ watch(
|
|
}
|
|
}
|
|
},
|
|
},
|
|
)
|
|
)
|
|
-const initDictionary = () => {}
|
|
|
|
-const initData = () => {}
|
|
|
|
-const onSubmit = (isImport) => {
|
|
|
|
|
|
+const initDictionary = () => {
|
|
|
|
+ DictionaryStore.initModelProvides()
|
|
|
|
+}
|
|
|
|
+const initData = () => {
|
|
|
|
+ state.loading = true
|
|
|
|
+ pluginDetail(props.transfer.id).then(({ data }: any) => {
|
|
|
|
+ state.form = data
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+const onSubmit = () => {
|
|
ref_form.value
|
|
ref_form.value
|
|
.submit()
|
|
.submit()
|
|
.then(() => {
|
|
.then(() => {
|
|
@@ -180,10 +181,33 @@ const onSubmit = (isImport) => {
|
|
content: `请确认是否提交?`,
|
|
content: `请确认是否提交?`,
|
|
onSubmit: () => {
|
|
onSubmit: () => {
|
|
state.loading = true
|
|
state.loading = true
|
|
- ElMessage.success(`${titleCpt.value}成功!`)
|
|
|
|
- emit('update:show', false)
|
|
|
|
- emit('refresh')
|
|
|
|
- state.loading = false
|
|
|
|
|
|
+ if (props.transfer.mode === 'add') {
|
|
|
|
+ pluginAddInstance(state.form)
|
|
|
|
+ .then(() => {
|
|
|
|
+ ElMessage.success(`${titleCpt.value}成功!`)
|
|
|
|
+ emit('update:show', false)
|
|
|
|
+ emit('refresh')
|
|
|
|
+ })
|
|
|
|
+ .catch(({ message }: any) => {
|
|
|
|
+ ElMessage.error(message)
|
|
|
|
+ })
|
|
|
|
+ .finally(() => {
|
|
|
|
+ state.loading = false
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ pluginUpdateInstance(state.form)
|
|
|
|
+ .then(() => {
|
|
|
|
+ ElMessage.success(`${titleCpt.value}成功!`)
|
|
|
|
+ emit('update:show', false)
|
|
|
|
+ emit('refresh')
|
|
|
|
+ })
|
|
|
|
+ .catch(({ message }: any) => {
|
|
|
|
+ ElMessage.error(message)
|
|
|
|
+ })
|
|
|
|
+ .finally(() => {
|
|
|
|
+ state.loading = false
|
|
|
|
+ })
|
|
|
|
+ }
|
|
},
|
|
},
|
|
})
|
|
})
|
|
})
|
|
})
|
|
@@ -195,6 +219,18 @@ const onSubmit = (isImport) => {
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+const getModelProvide = (obj) => {
|
|
|
|
+ console.log(obj)
|
|
|
|
+ state.form.name = obj.name
|
|
|
|
+ state.form.description = obj.description
|
|
|
|
+ state.baseForms = obj.basicConfigAttr
|
|
|
|
+ ? Object.values(obj.basicConfigAttr)
|
|
|
|
+ : []
|
|
|
|
+ state.paramForms = obj.paramConfigAttr
|
|
|
|
+ ? Object.values(obj.paramConfigAttr)
|
|
|
|
+ : []
|
|
|
|
+ state.bizForms = obj.bizConfigAttr ? Object.values(obj.bizConfigAttr) : []
|
|
|
|
+}
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped></style>
|
|
<style lang="scss" scoped></style>
|