|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | from elasticsearch_dsl import Q | 
					
						
						|  |  | 
					
						
						|  | from api.db.db_models import File2Document | 
					
						
						|  | from api.db.services.file2document_service import File2DocumentService | 
					
						
						|  | from api.db.services.file_service import FileService | 
					
						
						|  |  | 
					
						
						|  | from flask import request | 
					
						
						|  | from flask_login import login_required, current_user | 
					
						
						|  | from api.db.services.knowledgebase_service import KnowledgebaseService | 
					
						
						|  | from api.utils.api_utils import server_error_response, get_data_error_result, validate_request | 
					
						
						|  | from api.utils import get_uuid | 
					
						
						|  | from api.db import FileType | 
					
						
						|  | from api.db.services.document_service import DocumentService | 
					
						
						|  | from api.settings import RetCode | 
					
						
						|  | from api.utils.api_utils import get_json_result | 
					
						
						|  | from rag.nlp import search | 
					
						
						|  | from rag.utils.es_conn import ELASTICSEARCH | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | @manager.route('/convert', methods=['POST']) | 
					
						
						|  | @login_required | 
					
						
						|  | @validate_request("file_ids", "kb_ids") | 
					
						
						|  | def convert(): | 
					
						
						|  | req = request.json | 
					
						
						|  | kb_ids = req["kb_ids"] | 
					
						
						|  | file_ids = req["file_ids"] | 
					
						
						|  | file2documents = [] | 
					
						
						|  |  | 
					
						
						|  | try: | 
					
						
						|  | for file_id in file_ids: | 
					
						
						|  | e, file = FileService.get_by_id(file_id) | 
					
						
						|  | file_ids_list = [file_id] | 
					
						
						|  | if file.type == FileType.FOLDER.value: | 
					
						
						|  | file_ids_list = FileService.get_all_innermost_file_ids(file_id, []) | 
					
						
						|  | for id in file_ids_list: | 
					
						
						|  | informs = File2DocumentService.get_by_file_id(id) | 
					
						
						|  |  | 
					
						
						|  | for inform in informs: | 
					
						
						|  | doc_id = inform.document_id | 
					
						
						|  | e, doc = DocumentService.get_by_id(doc_id) | 
					
						
						|  | if not e: | 
					
						
						|  | return get_data_error_result(retmsg="Document not found!") | 
					
						
						|  | tenant_id = DocumentService.get_tenant_id(doc_id) | 
					
						
						|  | if not tenant_id: | 
					
						
						|  | return get_data_error_result(retmsg="Tenant not found!") | 
					
						
						|  | if not DocumentService.remove_document(doc, tenant_id): | 
					
						
						|  | return get_data_error_result( | 
					
						
						|  | retmsg="Database error (Document removal)!") | 
					
						
						|  | File2DocumentService.delete_by_file_id(id) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | for kb_id in kb_ids: | 
					
						
						|  | e, kb = KnowledgebaseService.get_by_id(kb_id) | 
					
						
						|  | if not e: | 
					
						
						|  | return get_data_error_result( | 
					
						
						|  | retmsg="Can't find this knowledgebase!") | 
					
						
						|  | e, file = FileService.get_by_id(id) | 
					
						
						|  | if not e: | 
					
						
						|  | return get_data_error_result( | 
					
						
						|  | retmsg="Can't find this file!") | 
					
						
						|  |  | 
					
						
						|  | doc = DocumentService.insert({ | 
					
						
						|  | "id": get_uuid(), | 
					
						
						|  | "kb_id": kb.id, | 
					
						
						|  | "parser_id": FileService.get_parser(file.type, file.name, kb.parser_id), | 
					
						
						|  | "parser_config": kb.parser_config, | 
					
						
						|  | "created_by": current_user.id, | 
					
						
						|  | "type": file.type, | 
					
						
						|  | "name": file.name, | 
					
						
						|  | "location": file.location, | 
					
						
						|  | "size": file.size | 
					
						
						|  | }) | 
					
						
						|  | file2document = File2DocumentService.insert({ | 
					
						
						|  | "id": get_uuid(), | 
					
						
						|  | "file_id": id, | 
					
						
						|  | "document_id": doc.id, | 
					
						
						|  | }) | 
					
						
						|  | file2documents.append(file2document.to_json()) | 
					
						
						|  | return get_json_result(data=file2documents) | 
					
						
						|  | except Exception as e: | 
					
						
						|  | return server_error_response(e) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | @manager.route('/rm', methods=['POST']) | 
					
						
						|  | @login_required | 
					
						
						|  | @validate_request("file_ids") | 
					
						
						|  | def rm(): | 
					
						
						|  | req = request.json | 
					
						
						|  | file_ids = req["file_ids"] | 
					
						
						|  | if not file_ids: | 
					
						
						|  | return get_json_result( | 
					
						
						|  | data=False, retmsg='Lack of "Files ID"', retcode=RetCode.ARGUMENT_ERROR) | 
					
						
						|  | try: | 
					
						
						|  | for file_id in file_ids: | 
					
						
						|  | informs = File2DocumentService.get_by_file_id(file_id) | 
					
						
						|  | if not informs: | 
					
						
						|  | return get_data_error_result(retmsg="Inform not found!") | 
					
						
						|  | for inform in informs: | 
					
						
						|  | if not inform: | 
					
						
						|  | return get_data_error_result(retmsg="Inform not found!") | 
					
						
						|  | File2DocumentService.delete_by_file_id(file_id) | 
					
						
						|  | doc_id = inform.document_id | 
					
						
						|  | e, doc = DocumentService.get_by_id(doc_id) | 
					
						
						|  | if not e: | 
					
						
						|  | return get_data_error_result(retmsg="Document not found!") | 
					
						
						|  | tenant_id = DocumentService.get_tenant_id(doc_id) | 
					
						
						|  | if not tenant_id: | 
					
						
						|  | return get_data_error_result(retmsg="Tenant not found!") | 
					
						
						|  | if not DocumentService.remove_document(doc, tenant_id): | 
					
						
						|  | return get_data_error_result( | 
					
						
						|  | retmsg="Database error (Document removal)!") | 
					
						
						|  | return get_json_result(data=True) | 
					
						
						|  | except Exception as e: | 
					
						
						|  | return server_error_response(e) | 
					
						
						|  |  |