Skip to content

Commit 12c26b5

Browse files
authored
fix: The simple intelligent agent moves from one folder to another, and the previously set AI model and associated knowledge base will be cleared #4890 (#4900)
1 parent 19755f7 commit 12c26b5

8 files changed

Lines changed: 86 additions & 19 deletions

File tree

apps/application/serializers/application.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -699,9 +699,12 @@ def to_application(application, workspace_id, user_id, update_tool_map, folder_i
699699
file_clean_time=application.get('file_clean_time') or 180,
700700
file_upload_enable=application.get('file_upload_enable'),
701701
file_upload_setting=application.get('file_upload_setting'),
702-
tool_ids=[update_tool_map.get(tool_id, tool_id) for tool_id in application.get('tool_ids', [])],
703-
skill_tool_ids=[update_tool_map.get(tool_id, tool_id) for tool_id in application.get('skill_tool_ids', [])],
704-
mcp_tool_ids=[update_tool_map.get(tool_id, tool_id) for tool_id in application.get('mcp_tool_ids', [])],
702+
tool_ids=[update_tool_map.get(tool_id, tool_id) for tool_id in
703+
application.get('tool_ids', [])],
704+
skill_tool_ids=[update_tool_map.get(tool_id, tool_id) for tool_id in
705+
application.get('skill_tool_ids', [])],
706+
mcp_tool_ids=[update_tool_map.get(tool_id, tool_id) for tool_id in
707+
application.get('mcp_tool_ids', [])],
705708
)
706709

707710
class StoreApplication(serializers.Serializer):
@@ -926,7 +929,7 @@ def publish(self, instance, with_valid=True):
926929
work_flow_version.save()
927930
access_token = hashlib.md5(
928931
str(uuid.uuid7()).encode()).hexdigest()[
929-
8:24]
932+
8:24]
930933
application_access_token = QuerySet(ApplicationAccessToken).filter(
931934
application_id=application.id).first()
932935
if application_access_token is None:
@@ -987,6 +990,14 @@ def update_work_flow_model(instance):
987990
not view_knowledge_id_list.__contains__(knowledge_id)]
988991
node_data['knowledge_id_list'] = other_knowledge_id_list + knowledge_id_list
989992

993+
def move(self, folder_id: str):
994+
self.is_valid(raise_exception=True)
995+
application_id = self.data.get("application_id")
996+
application = QuerySet(Application).get(id=application_id)
997+
application.folder_id = folder_id
998+
application.save()
999+
return True
1000+
9901001
@transaction.atomic
9911002
def edit(self, instance: Dict, with_valid=True):
9921003
if with_valid:

apps/application/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
path('workspace/<str:workspace_id>/application/<int:current_page>/<int:page_size>', views.ApplicationAPI.Page.as_view(), name='application_page'),
1212
path('workspace/<str:workspace_id>/application/<str:application_id>', views.ApplicationAPI.Operate.as_view()),
1313
path('workspace/<str:workspace_id>/application/<str:application_id>/publish', views.ApplicationAPI.Publish.as_view()),
14+
path('workspace/<str:workspace_id>/application/<str:application_id>/move/<str:folder_id>', views.ApplicationAPI.Move.as_view()),
1415
path('workspace/<str:workspace_id>/application/<str:application_id>/application_key', views.ApplicationKey.as_view()),
1516
path('workspace/<str:workspace_id>/application/<str:application_id>/application_stats', views.ApplicationStats.as_view()),
1617
path('workspace/<str:workspace_id>/application/<str:application_id>/application_token_usage', views.ApplicationStats.TokenUsageStatistics.as_view()),

apps/application/views/application.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,33 @@ def get(self, request: Request, workspace_id: str, application_id: str):
225225
data={'application_id': application_id, 'user_id': request.user.id,
226226
'workspace_id': workspace_id, }).one())
227227

228+
class Move(APIView):
229+
authentication_classes = [TokenAuth]
230+
231+
@extend_schema(
232+
methods=['PUT'],
233+
description=_("Move an application"),
234+
summary=_("Move an application"),
235+
operation_id=_("Move an application"), # type: ignore
236+
parameters=ApplicationOperateAPI.get_parameters(),
237+
request=None,
238+
responses=result.DefaultResultSerializer,
239+
tags=[_('Application')] # type: ignore
240+
)
241+
@has_permissions(PermissionConstants.APPLICATION_EDIT.get_workspace_application_permission(),
242+
PermissionConstants.APPLICATION_EDIT.get_workspace_permission_workspace_manage_role(),
243+
ViewPermission([RoleConstants.USER.get_workspace_role()],
244+
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
245+
CompareConstants.AND),
246+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
247+
@log(menu='Application', operate='Move an application',
248+
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
249+
def put(self, request: Request, workspace_id: str, application_id: str, folder_id: str):
250+
return result.success(
251+
ApplicationOperateSerializer(
252+
data={'application_id': application_id, 'user_id': request.user.id,
253+
'workspace_id': workspace_id, }).move(folder_id))
254+
228255
class Publish(APIView):
229256
authentication_classes = [TokenAuth]
230257

apps/locales/en_US/LC_MESSAGES/django.po

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9165,4 +9165,7 @@ msgid "Batch Remove Documents from Tag"
91659165
msgstr "Batch Remove Documents from Tag"
91669166

91679167
msgid "Document does not belong to current knowledge"
9168-
msgstr "Document does not belong to current knowledge"
9168+
msgstr "Document does not belong to current knowledge"
9169+
9170+
msgid "Move an application"
9171+
msgstr "Move an application"

apps/locales/zh_CN/LC_MESSAGES/django.po

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9288,4 +9288,7 @@ msgid "Batch Remove Documents from Tag"
92889288
msgstr "批量删除标签下的文档"
92899289

92909290
msgid "Document does not belong to current knowledge"
9291-
msgstr "文档不属于当前知识库"
9291+
msgstr "文档不属于当前知识库"
9292+
9293+
msgid "Move an application"
9294+
msgstr "移动应用程序"

apps/locales/zh_Hant/LC_MESSAGES/django.po

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9285,4 +9285,7 @@ msgid "Batch Remove Documents from Tag"
92859285
msgstr "批量刪除標籤下的文件"
92869286

92879287
msgid "Document does not belong to current knowledge"
9288-
msgstr "文件不屬於當前知識庫"
9288+
msgstr "文件不屬於當前知識庫"
9289+
9290+
msgid "Move an application"
9291+
msgstr "移動應用程序"

ui/src/api/application/application.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,20 @@ const putApplication: (
6363
) => Promise<Result<any>> = (application_id, data, loading) => {
6464
return put(`${prefix.value}/${application_id}`, data, undefined, loading)
6565
}
66+
/**
67+
* 移动应用
68+
* @param application_id
69+
* @param folder_id
70+
* @param loading
71+
* @returns
72+
*/
73+
const moveApplication: (
74+
application_id: string,
75+
folder_id: string,
76+
loading?: Ref<boolean>,
77+
) => Promise<Result<any>> = (application_id, folder_id, loading) => {
78+
return put(`${prefix.value}/${application_id}/move/${folder_id}`, {}, undefined, loading)
79+
}
6680

6781
/**
6882
* 删除应用
@@ -233,17 +247,19 @@ const open: (application_id: string, loading?: Ref<boolean>) => Promise<Result<s
233247
* @param data
234248
* @returns
235249
*/
236-
const generate_prompt: (workspace_id:string ,model_id:string, application_id:string,data: any) => Promise<any> = (
237-
workspace_id,
238-
model_id,
239-
application_id,
240-
data
241-
) => {
250+
const generate_prompt: (
251+
workspace_id: string,
252+
model_id: string,
253+
application_id: string,
254+
data: any,
255+
) => Promise<any> = (workspace_id, model_id, application_id, data) => {
242256
const prefix = (window.MaxKB?.prefix ? window.MaxKB?.prefix : '/admin') + '/api'
243-
return postStream(`${prefix}/workspace/${workspace_id}/application/${application_id}/model/${model_id}/prompt_generate`, data)
257+
return postStream(
258+
`${prefix}/workspace/${workspace_id}/application/${application_id}/model/${model_id}/prompt_generate`,
259+
data,
260+
)
244261
}
245262

246-
247263
/**
248264
* 对话
249265
* chat_id: string
@@ -401,8 +417,10 @@ const postUploadFile: (
401417
return post(`/oss/file`, fd, undefined, loading)
402418
}
403419

404-
405-
const getFile: (application_id: string, params: any) => Promise<Result<any>> = (application_id, params) => {
420+
const getFile: (application_id: string, params: any) => Promise<Result<any>> = (
421+
application_id,
422+
params,
423+
) => {
406424
return get(`/oss/get_url/${application_id}`, params)
407425
}
408426
export default {
@@ -435,5 +453,6 @@ export default {
435453
generate_prompt,
436454
getTokenUsage,
437455
topQuestions,
438-
getFile
456+
getFile,
457+
moveApplication,
439458
}

ui/src/components/folder-tree/MoveToDialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ const submitHandle = async () => {
130130
dialogVisible.value = false
131131
})
132132
} else if (props.source === SourceTypeEnum.APPLICATION) {
133-
ApplicationApi.putApplication(detail.value.id, obj, loading).then((res) => {
133+
ApplicationApi.moveApplication(detail.value.id, obj.folder_id, loading).then((res) => {
134134
MsgSuccess(t('common.saveSuccess'))
135135
emit('refresh', detail.value)
136136
dialogVisible.value = false

0 commit comments

Comments
 (0)