fix: 修复AI模型参数,切换模型时参数修改为当前模型的默认参数
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run
Typos Check / Spell Check with Typos (push) Waiting to run

This commit is contained in:
shaohuzhang1 2024-08-26 18:06:32 +08:00 committed by shaohuzhang1
parent 7360779002
commit eb60a0de2e
6 changed files with 53 additions and 18 deletions

View File

@ -23,7 +23,7 @@ from common.exception.app_exception import AppApiException
from common.util.field_message import ErrMessage
from common.util.rsa_util import rsa_long_decrypt, rsa_long_encrypt
from dataset.models import DataSet
from setting.models.model_management import Model, Status
from setting.models.model_management import Model, Status, PermissionType
from setting.models_provider import get_model, get_model_credential
from setting.models_provider.base_model_provider import ValidCode, DownModelChunkStatus
from setting.models_provider.constants.model_provider_constants import ModelProvideConstants
@ -208,6 +208,27 @@ class ModelSerializer(serializers.Serializer):
credential),
'permission_type': model.permission_type}
class ModelParams(serializers.Serializer):
id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("模型id"))
user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("用户id"))
def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
model = QuerySet(Model).filter(id=self.data.get("id")).first()
if model is None:
raise AppApiException(500, '模型不存在')
if model.permission_type == PermissionType.PRIVATE and self.data.get('user_id') != str(model.user_id):
raise AppApiException(500, '没有权限访问到此模型')
def get_model_params(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
model_id = self.data.get('id')
model = QuerySet(Model).filter(id=model_id).first()
credential = get_model_credential(model.provider, model.model_type, model.model_name)
return credential.get_model_params_setting_form(model.model_name).to_form_list()
class Operate(serializers.Serializer):
id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("模型id"))
@ -235,14 +256,6 @@ class ModelSerializer(serializers.Serializer):
'meta': model.meta
}
def get_model_params(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
model_id = self.data.get('id')
model = QuerySet(Model).filter(id=model_id).first()
credential = get_model_credential(model.provider, model.model_type, model.model_name)
return credential.get_model_params_setting_form(model.model_name).to_form_list()
def delete(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)

View File

@ -92,7 +92,7 @@ class Model(APIView):
@has_permissions(PermissionConstants.MODEL_READ)
def get(self, request: Request, model_id: str):
return result.success(
ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).get_model_params())
ModelSerializer.ModelParams(data={'id': model_id, 'user_id': request.user.id}).get_model_params())
class Operate(APIView):
authentication_classes = [TokenAuth]

View File

@ -79,6 +79,7 @@
</div>
</template>
<el-select
@change="model_change"
v-model="applicationForm.model_id"
:placeholder="$t('views.application.applicationForm.form.aiModel.placeholder')"
class="w-full"
@ -450,7 +451,9 @@ const submit = async (formEl: FormInstance | undefined) => {
}
})
}
const model_change = (model_id: string) => {
AIModeParamSettingDialogRef.value?.reset_default(model_id)
}
const openAIParamSettingDialog = () => {
const model_id = applicationForm.value.model_id
if (!model_id) {

View File

@ -32,8 +32,6 @@
<script setup lang="ts">
import { ref } from 'vue'
import type { FormInstance } from 'element-plus'
import type { FormField } from '@/components/dynamics-form/type'
import modelAPi from '@/api/model'
import DynamicsForm from '@/components/dynamics-form/index.vue'
@ -46,6 +44,7 @@ const dialogVisible = ref(false)
const loading = ref(false)
const open = (model_id: string, model_setting_data?: any) => {
form_data.value = {}
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
model_form_field.value = ok.data
model_setting_data =
@ -60,12 +59,25 @@ const open = (model_id: string, model_setting_data?: any) => {
dialogVisible.value = true
}
const reset_default = (model_id: string) => {
form_data.value = {}
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
model_form_field.value = ok.data
const model_setting_data = ok.data
.map((item) => ({ [item.field]: item.default_value }))
.reduce((x, y) => ({ ...x, ...y }), {})
//
dynamicsFormRef.value?.render(model_form_field.value, model_setting_data)
emit('refresh', form_data.value)
})
}
const submit = async () => {
emit('refresh', form_data.value)
dialogVisible.value = false
}
defineExpose({ open })
defineExpose({ open, reset_default })
</script>
<style lang="scss" scoped>

View File

@ -42,6 +42,7 @@
</div>
</template>
<el-select
@change="model_change"
@wheel="wheel"
@keydown="isKeyDown = true"
@keyup="isKeyDown = false"
@ -238,7 +239,9 @@ function submitDialog() {
set(props.nodeModel.properties.node_data, 'prompt', cloneContent.value)
dialogVisible.value = false
}
const model_change = (model_id: string) => {
AIModeParamSettingDialogRef.value?.reset_default(model_id)
}
const {
params: { id }
} = app.config.globalProperties.$route as any
@ -314,7 +317,7 @@ const openCreateModel = (provider?: Provider) => {
const openAIParamSettingDialog = (modelId: string) => {
if (modelId) {
AIModeParamSettingDialogRef.value?.open(modelId,chat_data.value.model_params_setting)
AIModeParamSettingDialogRef.value?.open(modelId, chat_data.value.model_params_setting)
}
}

View File

@ -16,7 +16,7 @@
ref="questionNodeFormRef"
hide-required-asterisk
>
<el-form-item
<el-form-item
label="AI 模型"
prop="model_id"
:rules="{
@ -42,6 +42,7 @@
</div>
</template>
<el-select
@change="model_change"
@wheel="wheel"
@keydown="isKeyDown = true"
@keyup="isKeyDown = false"
@ -231,6 +232,9 @@ function openDialog() {
cloneContent.value = form_data.value.prompt
dialogVisible.value = true
}
const model_change = (model_id: string) => {
AIModeParamSettingDialogRef.value?.reset_default(model_id)
}
function submitDialog() {
set(props.nodeModel.properties.node_data, 'prompt', cloneContent.value)
dialogVisible.value = false
@ -255,7 +259,7 @@ function refreshParam(data: any) {
const openAIParamSettingDialog = (modelId: string) => {
if (modelId) {
AIModeParamSettingDialogRef.value?.open(modelId,form_data.value.model_params_setting)
AIModeParamSettingDialogRef.value?.open(modelId, form_data.value.model_params_setting)
}
}
const form_data = computed({