mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
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(
|
||||
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):
|
||||
if with_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/<str:function_lib_id>',
|
||||
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>/api_key', views.Application.ApplicationKey.as_view()),
|
||||
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.util.common import query_params_to_single_dict
|
||||
from dataset.serializers.dataset_serializers import DataSetSerializers
|
||||
from setting.swagger_api.provide_api import ProvideApi
|
||||
|
||||
chat_cache = cache.caches['chat_cache']
|
||||
|
||||
|
|
@ -187,6 +188,24 @@ class Application(APIView):
|
|||
data={'application_id': application_id,
|
||||
'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):
|
||||
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 { ApplicationFormType } from '@/api/type/application'
|
||||
import { type Ref } from 'vue'
|
||||
|
||||
import type { FormField } from '@/components/dynamics-form/type'
|
||||
const prefix = '/application'
|
||||
|
||||
/**
|
||||
|
|
@ -274,6 +274,20 @@ const getFunctionLib: (
|
|||
) => Promise<Result<any>> = (application_id, function_lib_id, 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 {
|
||||
getAllAppilcation,
|
||||
getApplication,
|
||||
|
|
@ -295,5 +309,6 @@ export default {
|
|||
putPublishApplication,
|
||||
postWorkflowChatOpen,
|
||||
listFunctionLib,
|
||||
getFunctionLib
|
||||
getFunctionLib,
|
||||
getModelParamsForm
|
||||
}
|
||||
|
|
|
|||
|
|
@ -453,7 +453,7 @@ const submit = async (formEl: FormInstance | undefined) => {
|
|||
}
|
||||
const model_change = (model_id?: string) => {
|
||||
if (model_id) {
|
||||
AIModeParamSettingDialogRef.value?.reset_default(model_id)
|
||||
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
|
||||
} else {
|
||||
refreshForm({})
|
||||
}
|
||||
|
|
@ -464,7 +464,7 @@ const openAIParamSettingDialog = () => {
|
|||
MsgSuccess(t('请选择AI 模型'))
|
||||
return
|
||||
}
|
||||
AIModeParamSettingDialogRef.value?.open(model_id, applicationForm.value.model_params_setting)
|
||||
AIModeParamSettingDialogRef.value?.open(model_id, id, applicationForm.value.model_params_setting)
|
||||
}
|
||||
|
||||
const openParamSettingDialog = () => {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
import { ref } from 'vue'
|
||||
import type { FormField } from '@/components/dynamics-form/type'
|
||||
import modelAPi from '@/api/model'
|
||||
import applicationApi from '@/api/application'
|
||||
import DynamicsForm from '@/components/dynamics-form/index.vue'
|
||||
import { keys } from 'lodash'
|
||||
const model_form_field = ref<Array<FormField>>([])
|
||||
|
|
@ -42,16 +43,21 @@ const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>()
|
|||
const form_data = ref<any>({})
|
||||
const dialogVisible = ref(false)
|
||||
const loading = ref(false)
|
||||
|
||||
const open = (model_id: string, model_setting_data?: any) => {
|
||||
const getApi = (model_id: string, application_id?: string) => {
|
||||
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 = {}
|
||||
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
|
||||
const api = getApi(model_id, application_id)
|
||||
api.then((ok) => {
|
||||
model_form_field.value = ok.data
|
||||
model_setting_data =
|
||||
model_setting_data && keys(model_setting_data).length > 0
|
||||
? model_setting_data
|
||||
: ok.data
|
||||
.map((item) => ({ [item.field]: item.default_value }))
|
||||
.map((item: any) => ({ [item.field]: item.default_value }))
|
||||
.reduce((x, y) => ({ ...x, ...y }), {})
|
||||
// 渲染动态表单
|
||||
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
|
||||
}
|
||||
|
||||
const reset_default = (model_id: string) => {
|
||||
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
|
||||
const reset_default = (model_id: string, application_id?: string) => {
|
||||
const api = getApi(model_id, application_id)
|
||||
api.then((ok) => {
|
||||
model_form_field.value = ok.data
|
||||
const model_setting_data = ok.data
|
||||
.map((item) => ({ [item.field]: item.default_value }))
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@ function submitDialog() {
|
|||
}
|
||||
const model_change = (model_id?: string) => {
|
||||
if (model_id) {
|
||||
AIModeParamSettingDialogRef.value?.reset_default(model_id)
|
||||
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
|
||||
} else {
|
||||
refreshParam({})
|
||||
}
|
||||
|
|
@ -321,7 +321,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, id, chat_data.value.model_params_setting)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ function openDialog() {
|
|||
}
|
||||
const model_change = (model_id?: string) => {
|
||||
if (model_id) {
|
||||
AIModeParamSettingDialogRef.value?.reset_default(model_id)
|
||||
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
|
||||
} else {
|
||||
refreshParam({})
|
||||
}
|
||||
|
|
@ -263,7 +263,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, id, form_data.value.model_params_setting)
|
||||
}
|
||||
}
|
||||
const form_data = computed({
|
||||
|
|
|
|||
Loading…
Reference in New Issue