fix: 修复应用授权给其他用户,其他用户编辑无法编辑模型
This commit is contained in:
parent
d030a4c87c
commit
b7ceac61ad
@ -589,6 +589,13 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
return FunctionLibSerializer.Operate(data={'user_id': application.user_id, 'id': function_lib_id}).one(
|
return FunctionLibSerializer.Operate(data={'user_id': application.user_id, 'id': function_lib_id}).one(
|
||||||
with_valid=True)
|
with_valid=True)
|
||||||
|
|
||||||
|
def get_model_params_form(self, model_id, with_valid=True):
|
||||||
|
if with_valid:
|
||||||
|
self.is_valid(raise_exception=True)
|
||||||
|
application = QuerySet(Application).filter(id=self.data.get("application_id")).first()
|
||||||
|
return ModelSerializer.ModelParams(
|
||||||
|
data={'user_id': application.user_id, 'id': model_id}).get_model_params(with_valid=True)
|
||||||
|
|
||||||
def delete(self, with_valid=True):
|
def delete(self, with_valid=True):
|
||||||
if with_valid:
|
if with_valid:
|
||||||
self.is_valid()
|
self.is_valid()
|
||||||
|
|||||||
@ -22,6 +22,8 @@ urlpatterns = [
|
|||||||
path('application/<str:application_id>/function_lib', views.Application.FunctionLib.as_view()),
|
path('application/<str:application_id>/function_lib', views.Application.FunctionLib.as_view()),
|
||||||
path('application/<str:application_id>/function_lib/<str:function_lib_id>',
|
path('application/<str:application_id>/function_lib/<str:function_lib_id>',
|
||||||
views.Application.FunctionLib.Operate.as_view()),
|
views.Application.FunctionLib.Operate.as_view()),
|
||||||
|
path('application/<str:application_id>/model_params_form/<str:model_id>',
|
||||||
|
views.Application.ModelParamsForm.as_view()),
|
||||||
path('application/<str:application_id>/hit_test', views.Application.HitTest.as_view()),
|
path('application/<str:application_id>/hit_test', views.Application.HitTest.as_view()),
|
||||||
path('application/<str:application_id>/api_key', views.Application.ApplicationKey.as_view()),
|
path('application/<str:application_id>/api_key', views.Application.ApplicationKey.as_view()),
|
||||||
path("application/<str:application_id>/api_key/<str:api_key_id>",
|
path("application/<str:application_id>/api_key/<str:api_key_id>",
|
||||||
|
|||||||
@ -27,6 +27,7 @@ from common.response import result
|
|||||||
from common.swagger_api.common_api import CommonApi
|
from common.swagger_api.common_api import CommonApi
|
||||||
from common.util.common import query_params_to_single_dict
|
from common.util.common import query_params_to_single_dict
|
||||||
from dataset.serializers.dataset_serializers import DataSetSerializers
|
from dataset.serializers.dataset_serializers import DataSetSerializers
|
||||||
|
from setting.swagger_api.provide_api import ProvideApi
|
||||||
|
|
||||||
chat_cache = cache.caches['chat_cache']
|
chat_cache = cache.caches['chat_cache']
|
||||||
|
|
||||||
@ -187,6 +188,24 @@ class Application(APIView):
|
|||||||
data={'application_id': application_id,
|
data={'application_id': application_id,
|
||||||
'user_id': request.user.id}).list_model(request.query_params.get('model_type')))
|
'user_id': request.user.id}).list_model(request.query_params.get('model_type')))
|
||||||
|
|
||||||
|
class ModelParamsForm(APIView):
|
||||||
|
authentication_classes = [TokenAuth]
|
||||||
|
|
||||||
|
@action(methods=['GET'], detail=False)
|
||||||
|
@swagger_auto_schema(operation_summary="获取模型参数表单",
|
||||||
|
operation_id="获取模型参数表单",
|
||||||
|
tags=["模型"])
|
||||||
|
@has_permissions(ViewPermission(
|
||||||
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
||||||
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||||
|
dynamic_tag=keywords.get('application_id'))],
|
||||||
|
compare=CompareConstants.AND))
|
||||||
|
def get(self, request: Request, application_id: str, model_id: str):
|
||||||
|
return result.success(
|
||||||
|
ApplicationSerializer.Operate(
|
||||||
|
data={'application_id': application_id,
|
||||||
|
'user_id': request.user.id}).get_model_params_form(model_id))
|
||||||
|
|
||||||
class FunctionLib(APIView):
|
class FunctionLib(APIView):
|
||||||
authentication_classes = [TokenAuth]
|
authentication_classes = [TokenAuth]
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { get, post, postStream, del, put } from '@/request/index'
|
|||||||
import type { pageRequest } from '@/api/type/common'
|
import type { pageRequest } from '@/api/type/common'
|
||||||
import type { ApplicationFormType } from '@/api/type/application'
|
import type { ApplicationFormType } from '@/api/type/application'
|
||||||
import { type Ref } from 'vue'
|
import { type Ref } from 'vue'
|
||||||
|
import type { FormField } from '@/components/dynamics-form/type'
|
||||||
const prefix = '/application'
|
const prefix = '/application'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -274,6 +274,20 @@ const getFunctionLib: (
|
|||||||
) => Promise<Result<any>> = (application_id, function_lib_id, loading) => {
|
) => Promise<Result<any>> = (application_id, function_lib_id, loading) => {
|
||||||
return get(`${prefix}/${application_id}/function_lib/${function_lib_id}`, undefined, loading)
|
return get(`${prefix}/${application_id}/function_lib/${function_lib_id}`, undefined, loading)
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 获取模型参数表单
|
||||||
|
* @param application_id 应用id
|
||||||
|
* @param model_id 模型id
|
||||||
|
* @param loading
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getModelParamsForm: (
|
||||||
|
application_id: String,
|
||||||
|
model_id: String,
|
||||||
|
loading?: Ref<boolean>
|
||||||
|
) => Promise<Result<Array<FormField>>> = (application_id, model_id, loading) => {
|
||||||
|
return get(`${prefix}/${application_id}/model_params_form/${model_id}`, undefined, loading)
|
||||||
|
}
|
||||||
export default {
|
export default {
|
||||||
getAllAppilcation,
|
getAllAppilcation,
|
||||||
getApplication,
|
getApplication,
|
||||||
@ -295,5 +309,6 @@ export default {
|
|||||||
putPublishApplication,
|
putPublishApplication,
|
||||||
postWorkflowChatOpen,
|
postWorkflowChatOpen,
|
||||||
listFunctionLib,
|
listFunctionLib,
|
||||||
getFunctionLib
|
getFunctionLib,
|
||||||
|
getModelParamsForm
|
||||||
}
|
}
|
||||||
|
|||||||
@ -453,7 +453,7 @@ const submit = async (formEl: FormInstance | undefined) => {
|
|||||||
}
|
}
|
||||||
const model_change = (model_id?: string) => {
|
const model_change = (model_id?: string) => {
|
||||||
if (model_id) {
|
if (model_id) {
|
||||||
AIModeParamSettingDialogRef.value?.reset_default(model_id)
|
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
|
||||||
} else {
|
} else {
|
||||||
refreshForm({})
|
refreshForm({})
|
||||||
}
|
}
|
||||||
@ -464,7 +464,7 @@ const openAIParamSettingDialog = () => {
|
|||||||
MsgSuccess(t('请选择AI 模型'))
|
MsgSuccess(t('请选择AI 模型'))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
AIModeParamSettingDialogRef.value?.open(model_id, applicationForm.value.model_params_setting)
|
AIModeParamSettingDialogRef.value?.open(model_id, id, applicationForm.value.model_params_setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
const openParamSettingDialog = () => {
|
const openParamSettingDialog = () => {
|
||||||
|
|||||||
@ -34,6 +34,7 @@
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import type { FormField } from '@/components/dynamics-form/type'
|
import type { FormField } from '@/components/dynamics-form/type'
|
||||||
import modelAPi from '@/api/model'
|
import modelAPi from '@/api/model'
|
||||||
|
import applicationApi from '@/api/application'
|
||||||
import DynamicsForm from '@/components/dynamics-form/index.vue'
|
import DynamicsForm from '@/components/dynamics-form/index.vue'
|
||||||
import { keys } from 'lodash'
|
import { keys } from 'lodash'
|
||||||
const model_form_field = ref<Array<FormField>>([])
|
const model_form_field = ref<Array<FormField>>([])
|
||||||
@ -42,16 +43,21 @@ const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>()
|
|||||||
const form_data = ref<any>({})
|
const form_data = ref<any>({})
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
|
const getApi = (model_id: string, application_id?: string) => {
|
||||||
const open = (model_id: string, model_setting_data?: any) => {
|
return application_id
|
||||||
|
? applicationApi.getModelParamsForm(application_id, model_id, loading)
|
||||||
|
: modelAPi.getModelParamsForm(model_id, loading)
|
||||||
|
}
|
||||||
|
const open = (model_id: string, application_id?: string, model_setting_data?: any) => {
|
||||||
form_data.value = {}
|
form_data.value = {}
|
||||||
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
|
const api = getApi(model_id, application_id)
|
||||||
|
api.then((ok) => {
|
||||||
model_form_field.value = ok.data
|
model_form_field.value = ok.data
|
||||||
model_setting_data =
|
model_setting_data =
|
||||||
model_setting_data && keys(model_setting_data).length > 0
|
model_setting_data && keys(model_setting_data).length > 0
|
||||||
? model_setting_data
|
? model_setting_data
|
||||||
: ok.data
|
: ok.data
|
||||||
.map((item) => ({ [item.field]: item.default_value }))
|
.map((item: any) => ({ [item.field]: item.default_value }))
|
||||||
.reduce((x, y) => ({ ...x, ...y }), {})
|
.reduce((x, y) => ({ ...x, ...y }), {})
|
||||||
// 渲染动态表单
|
// 渲染动态表单
|
||||||
dynamicsFormRef.value?.render(model_form_field.value, model_setting_data)
|
dynamicsFormRef.value?.render(model_form_field.value, model_setting_data)
|
||||||
@ -59,8 +65,9 @@ const open = (model_id: string, model_setting_data?: any) => {
|
|||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
const reset_default = (model_id: string) => {
|
const reset_default = (model_id: string, application_id?: string) => {
|
||||||
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
|
const api = getApi(model_id, application_id)
|
||||||
|
api.then((ok) => {
|
||||||
model_form_field.value = ok.data
|
model_form_field.value = ok.data
|
||||||
const model_setting_data = ok.data
|
const model_setting_data = ok.data
|
||||||
.map((item) => ({ [item.field]: item.default_value }))
|
.map((item) => ({ [item.field]: item.default_value }))
|
||||||
|
|||||||
@ -241,7 +241,7 @@ function submitDialog() {
|
|||||||
}
|
}
|
||||||
const model_change = (model_id?: string) => {
|
const model_change = (model_id?: string) => {
|
||||||
if (model_id) {
|
if (model_id) {
|
||||||
AIModeParamSettingDialogRef.value?.reset_default(model_id)
|
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
|
||||||
} else {
|
} else {
|
||||||
refreshParam({})
|
refreshParam({})
|
||||||
}
|
}
|
||||||
@ -321,7 +321,7 @@ const openCreateModel = (provider?: Provider) => {
|
|||||||
|
|
||||||
const openAIParamSettingDialog = (modelId: string) => {
|
const openAIParamSettingDialog = (modelId: string) => {
|
||||||
if (modelId) {
|
if (modelId) {
|
||||||
AIModeParamSettingDialogRef.value?.open(modelId, chat_data.value.model_params_setting)
|
AIModeParamSettingDialogRef.value?.open(modelId, id, chat_data.value.model_params_setting)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -234,7 +234,7 @@ function openDialog() {
|
|||||||
}
|
}
|
||||||
const model_change = (model_id?: string) => {
|
const model_change = (model_id?: string) => {
|
||||||
if (model_id) {
|
if (model_id) {
|
||||||
AIModeParamSettingDialogRef.value?.reset_default(model_id)
|
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
|
||||||
} else {
|
} else {
|
||||||
refreshParam({})
|
refreshParam({})
|
||||||
}
|
}
|
||||||
@ -263,7 +263,7 @@ function refreshParam(data: any) {
|
|||||||
|
|
||||||
const openAIParamSettingDialog = (modelId: string) => {
|
const openAIParamSettingDialog = (modelId: string) => {
|
||||||
if (modelId) {
|
if (modelId) {
|
||||||
AIModeParamSettingDialogRef.value?.open(modelId, form_data.value.model_params_setting)
|
AIModeParamSettingDialogRef.value?.open(modelId, id, form_data.value.model_params_setting)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const form_data = computed({
|
const form_data = computed({
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user