From 2d6b3b06060110e3b38459cb4292ea37687eb627 Mon Sep 17 00:00:00 2001 From: Pravesh Kumar <121786590+praveshkumar1988@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:53:20 +0000 Subject: [PATCH 1/8] Added new API user_details and implement functionality for neo4j user has no limit on tokens --- backend/score.py | 38 +++++++++++++++++++++----- backend/src/create_chunks.py | 4 +-- backend/src/graphDB_dataAccess.py | 8 +++++- backend/src/main.py | 44 +++++++++++++++---------------- 4 files changed, 62 insertions(+), 32 deletions(-) diff --git a/backend/score.py b/backend/score.py index 75181e096..6e43f5f34 100644 --- a/backend/score.py +++ b/backend/score.py @@ -218,7 +218,8 @@ async def extract_knowledge_graph_from_file( access_token=Form(None), retry_condition=Form(None), additional_instructions=Form(None), - email=Form(None) + email=Form(None), + is_neo4j_user=Form(False) ): """ Calls 'extract_graph_from_file' in a new thread to create Neo4jGraph from a @@ -241,22 +242,22 @@ async def extract_knowledge_graph_from_file( if source_type == 'local file': file_name = sanitize_filename(file_name) merged_file_path = validate_file_path(MERGED_DIR, file_name) - uri_latency, result = await extract_graph_from_file_local_file(uri, userName, password, database, model, merged_file_path, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions) + uri_latency, result = await extract_graph_from_file_local_file(uri, userName, password, database, model, merged_file_path, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user) elif source_type == 's3 bucket' and source_url: - uri_latency, result = await extract_graph_from_file_s3(uri, userName, password, database, model, source_url, aws_access_key_id, aws_secret_access_key, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions) + uri_latency, result = await extract_graph_from_file_s3(uri, userName, password, database, model, source_url, aws_access_key_id, aws_secret_access_key, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user) elif source_type == 'web-url': - uri_latency, result = await extract_graph_from_web_page(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions) + uri_latency, result = await extract_graph_from_web_page(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user) elif source_type == 'youtube' and source_url: - uri_latency, result = await extract_graph_from_file_youtube(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions) + uri_latency, result = await extract_graph_from_file_youtube(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user) elif source_type == 'Wikipedia' and wiki_query: - uri_latency, result = await extract_graph_from_file_Wikipedia(uri, userName, password, database, model, wiki_query, language, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions) + uri_latency, result = await extract_graph_from_file_Wikipedia(uri, userName, password, database, model, wiki_query, language, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user) elif source_type == 'gcs bucket' and gcs_bucket_name: - uri_latency, result = await extract_graph_from_file_gcs(uri, userName, password, database, model, gcs_project_id, gcs_bucket_name, gcs_bucket_folder, gcs_blob_filename, access_token, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions) + uri_latency, result = await extract_graph_from_file_gcs(uri, userName, password, database, model, gcs_project_id, gcs_bucket_name, gcs_bucket_folder, gcs_blob_filename, access_token, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user) else: return create_api_response('Failed',message='source_type is other than accepted source') extract_api_time = time.time() - start_time @@ -1096,5 +1097,28 @@ async def get_schema_visualization(uri=Form(None), userName=Form(None), password finally: gc.collect() +@app.post("/user_details") +async def user_details(uri=Form(None), + userName=Form(None), + password=Form(None), + database=Form(None), + email=Form(None)): + try: + start = time.time() + graph = create_graph_database_connection(uri, userName, password, database) + graphDb_data_Access = graphDBdataAccess(graph) + result = graphDb_data_Access.save_user_details(email) + end = time.time() + elapsed_time = end - start + return create_api_response('Success', data=result,message=f"Total elapsed API time {elapsed_time:.2f}") + except Exception as e: + message="Unable to get schema visualization from neo4j database" + error_message = str(e) + logging.info(message) + logging.exception(f'Exception:{error_message}') + return create_api_response("Failed", message=message, error=error_message) + finally: + gc.collect() + if __name__ == "__main__": uvicorn.run(app) \ No newline at end of file diff --git a/backend/src/create_chunks.py b/backend/src/create_chunks.py index 523d2b77c..4657701cd 100644 --- a/backend/src/create_chunks.py +++ b/backend/src/create_chunks.py @@ -14,7 +14,7 @@ def __init__(self, pages: list[Document], graph: Neo4jGraph): self.pages = pages self.graph = graph - def split_file_into_chunks(self,token_chunk_size, chunk_overlap): + def split_file_into_chunks(self,token_chunk_size, chunk_overlap, is_neo4j_user): """ Split a list of documents(file pages) into chunks of fixed size. @@ -33,7 +33,7 @@ def split_file_into_chunks(self,token_chunk_size, chunk_overlap): chunks = [] for i, document in enumerate(self.pages): page_number = i + 1 - if len(chunks) >= chunk_to_be_created: + if not is_neo4j_user and len(chunks) >= chunk_to_be_created: break else: for chunk in text_splitter.split_documents([document]): diff --git a/backend/src/graphDB_dataAccess.py b/backend/src/graphDB_dataAccess.py index 397227a9a..5a729fb59 100644 --- a/backend/src/graphDB_dataAccess.py +++ b/backend/src/graphDB_dataAccess.py @@ -583,4 +583,10 @@ def get_websource_url(self,file_name): RETURN d.url AS url """ param = {"file_name" : file_name} - return self.execute_query(query, param) \ No newline at end of file + return self.execute_query(query, param) + + def save_user_details(self,email, database): + domain = "@neo4j.com" + is_neo4j_user = domain in email + write_access = self.check_account_access(database=database) + return {"is_neo4j_user": is_neo4j_user, "write_access": write_access} \ No newline at end of file diff --git a/backend/src/main.py b/backend/src/main.py index 41e69e6f4..d3859f24d 100644 --- a/backend/src/main.py +++ b/backend/src/main.py @@ -226,7 +226,7 @@ def create_source_node_graph_url_wikipedia(graph, model, wiki_query, source_type lst_file_name.append({'fileName':obj_source_node.file_name,'fileSize':obj_source_node.file_size,'url':obj_source_node.url, 'language':obj_source_node.language, 'status':'Success'}) return lst_file_name,success_count,failed_count -async def extract_graph_from_file_local_file(uri, userName, password, database, model, merged_file_path, fileName, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions): +async def extract_graph_from_file_local_file(uri, userName, password, database, model, merged_file_path, fileName, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user): logging.info(f'Process file name :{fileName}') if not retry_condition: @@ -238,11 +238,11 @@ async def extract_graph_from_file_local_file(uri, userName, password, database, file_name, pages, file_extension = get_documents_from_file_by_path(merged_file_path,fileName) if pages==None or len(pages)==0: raise LLMGraphBuilderException(f'File content is not available for file : {file_name}') - return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, True, merged_file_path, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, is_uploaded_from_local= True, merged_file_path= merged_file_path) else: - return await processing_source(uri, userName, password, database, model, fileName, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, True, merged_file_path, retry_condition, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, fileName, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition, True, merged_file_path) -async def extract_graph_from_file_s3(uri, userName, password, database, model, source_url, aws_access_key_id, aws_secret_access_key, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions): +async def extract_graph_from_file_s3(uri, userName, password, database, model, source_url, aws_access_key_id, aws_secret_access_key, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user): if not retry_condition: if(aws_access_key_id==None or aws_secret_access_key==None): raise LLMGraphBuilderException('Please provide AWS access and secret keys') @@ -252,48 +252,48 @@ async def extract_graph_from_file_s3(uri, userName, password, database, model, s if pages==None or len(pages)==0: raise LLMGraphBuilderException(f'File content is not available for file : {file_name}') - return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user) else: - return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition=retry_condition, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition) -async def extract_graph_from_web_page(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions): +async def extract_graph_from_web_page(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user): if not retry_condition: pages = get_documents_from_web_page(source_url) if pages==None or len(pages)==0: raise LLMGraphBuilderException(f'Content is not available for given URL : {file_name}') - return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user) else: - return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition=retry_condition, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition) -async def extract_graph_from_file_youtube(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions): +async def extract_graph_from_file_youtube(uri, userName, password, database, model, source_url, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user): if not retry_condition: file_name, pages = get_documents_from_youtube(source_url) if pages==None or len(pages)==0: raise LLMGraphBuilderException(f'Youtube transcript is not available for file : {file_name}') - return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user) else: - return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition=retry_condition, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition) -async def extract_graph_from_file_Wikipedia(uri, userName, password, database, model, wiki_query, language, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions): +async def extract_graph_from_file_Wikipedia(uri, userName, password, database, model, wiki_query, language, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user): if not retry_condition: file_name, pages = get_documents_from_Wikipedia(wiki_query, language) if pages==None or len(pages)==0: raise LLMGraphBuilderException(f'Wikipedia page is not available for file : {file_name}') - return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user) else: - return await processing_source(uri, userName, password, database, model, file_name,[], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition=retry_condition, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name,[], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition) -async def extract_graph_from_file_gcs(uri, userName, password, database, model, gcs_project_id, gcs_bucket_name, gcs_bucket_folder, gcs_blob_filename, access_token, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions): +async def extract_graph_from_file_gcs(uri, userName, password, database, model, gcs_project_id, gcs_bucket_name, gcs_bucket_folder, gcs_blob_filename, access_token, file_name, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition, additional_instructions, is_neo4j_user): if not retry_condition: file_name, pages = get_documents_from_gcs(gcs_project_id, gcs_bucket_name, gcs_bucket_folder, gcs_blob_filename, access_token) if pages==None or len(pages)==0: raise LLMGraphBuilderException(f'File content is not available for file : {file_name}') - return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user) else: - return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, retry_condition=retry_condition, additional_instructions=additional_instructions) + return await processing_source(uri, userName, password, database, model, file_name, [], allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition) -async def processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, is_uploaded_from_local=None, merged_file_path=None, retry_condition=None, additional_instructions=None): +async def processing_source(uri, userName, password, database, model, file_name, pages, allowedNodes, allowedRelationship, token_chunk_size, chunk_overlap, chunks_to_combine, additional_instructions, is_neo4j_user, retry_condition = None, is_uploaded_from_local=False, merged_file_path=None): """ Extracts a Neo4jGraph from a PDF file based on the model. @@ -322,7 +322,7 @@ async def processing_source(uri, userName, password, database, model, file_name, graphDb_data_Access = graphDBdataAccess(graph) create_chunk_vector_index(graph) start_get_chunkId_chunkDoc_list = time.time() - total_chunks, chunkId_chunkDoc_list = get_chunkId_chunkDoc_list(graph, file_name, pages, token_chunk_size, chunk_overlap, retry_condition) + total_chunks, chunkId_chunkDoc_list = get_chunkId_chunkDoc_list(graph, file_name, pages, token_chunk_size, chunk_overlap, retry_condition, is_neo4j_user) end_get_chunkId_chunkDoc_list = time.time() elapsed_get_chunkId_chunkDoc_list = end_get_chunkId_chunkDoc_list - start_get_chunkId_chunkDoc_list logging.info(f'Time taken to create list chunkids with chunk document: {elapsed_get_chunkId_chunkDoc_list:.2f} seconds') @@ -509,7 +509,7 @@ async def processing_chunks(chunkId_chunkDoc_list,graph,uri, userName, password, rel_count = count_response[file_name].get('relationshipCount',"0") return node_count,rel_count,latency_processing_chunk -def get_chunkId_chunkDoc_list(graph, file_name, pages, token_chunk_size, chunk_overlap, retry_condition): +def get_chunkId_chunkDoc_list(graph, file_name, pages, token_chunk_size, chunk_overlap, retry_condition, is_neo4j_user): if not retry_condition: logging.info("Break down file into chunks") bad_chars = ['"', "\n", "'"] @@ -522,7 +522,7 @@ def get_chunkId_chunkDoc_list(graph, file_name, pages, token_chunk_size, chunk_o text = text.replace(j, '') pages[i]=Document(page_content=str(text), metadata=pages[i].metadata) create_chunks_obj = CreateChunksofDocument(pages, graph) - chunks = create_chunks_obj.split_file_into_chunks(token_chunk_size, chunk_overlap) + chunks = create_chunks_obj.split_file_into_chunks(token_chunk_size, chunk_overlap, is_neo4j_user) chunkId_chunkDoc_list = create_relation_between_chunks(graph,file_name,chunks) return len(chunks), chunkId_chunkDoc_list From 5fd9d6904a8abe3eecfed0b4a107a252e10f6cf2 Mon Sep 17 00:00:00 2001 From: Pravesh Kumar <121786590+praveshkumar1988@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:56:20 +0000 Subject: [PATCH 2/8] update the message --- backend/score.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/score.py b/backend/score.py index 6e43f5f34..508fc67a4 100644 --- a/backend/score.py +++ b/backend/score.py @@ -1112,7 +1112,7 @@ async def user_details(uri=Form(None), elapsed_time = end - start return create_api_response('Success', data=result,message=f"Total elapsed API time {elapsed_time:.2f}") except Exception as e: - message="Unable to get schema visualization from neo4j database" + message="Unable to save the detail of user in DB" error_message = str(e) logging.info(message) logging.exception(f'Exception:{error_message}') From 8d5b4b91aa89b9351b18286ff0f43027e55de3b9 Mon Sep 17 00:00:00 2001 From: kartikpersistent <101251502+kartikpersistent@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:55:01 +0000 Subject: [PATCH 3/8] userdetails api integration --- frontend/src/components/Content.tsx | 28 +---------------- .../components/DataSources/AWS/S3Modal.tsx | 2 +- .../components/DataSources/GCS/GCSModal.tsx | 2 +- frontend/src/components/FileTable.tsx | 4 +-- .../AdditionalInstructions/index.tsx | 8 ++++- .../{HOC => components/UI}/CustomModal.tsx | 4 +-- frontend/src/components/User/Profile.tsx | 30 +++++++++++++++---- frontend/src/context/UserCredentials.tsx | 11 +++---- .../{getChunkText.ts => GetChunkTexts.ts} | 8 ++--- frontend/src/services/UserDetails.ts | 16 ++++++++++ frontend/src/types.ts | 15 ++++++++-- 11 files changed, 77 insertions(+), 51 deletions(-) rename frontend/src/{HOC => components/UI}/CustomModal.tsx (92%) rename frontend/src/services/{getChunkText.ts => GetChunkTexts.ts} (63%) create mode 100644 frontend/src/services/UserDetails.ts diff --git a/frontend/src/components/Content.tsx b/frontend/src/components/Content.tsx index 4f8904fd9..e9851ec19 100644 --- a/frontend/src/components/Content.tsx +++ b/frontend/src/components/Content.tsx @@ -45,7 +45,7 @@ import retry from '../services/Retry'; import { showErrorToast, showNormalToast, showSuccessToast } from '../utils/Toasts'; import { useMessageContext } from '../context/UserMessages'; import PostProcessingToast from './Popups/GraphEnhancementDialog/PostProcessingCheckList/PostProcessingToast'; -import { getChunkText } from '../services/getChunkText'; +import { getChunkText } from '../services/GetChunkTexts'; import ChunkPopUp from './Popups/ChunkPopUp'; import { isExpired, isFileReadyToProcess } from '../utils/Utils'; import { useHasSelections } from '../hooks/useHasSelections'; @@ -836,32 +836,6 @@ const Content: React.FC = ({ > )} - {showExpirationModal && filesForProcessing.length && ( - }> - setShowExpirationModal(false)} - loading={extractLoading} - selectedRows={childRef.current?.getSelectedRows() as CustomFile[]} - isLargeDocumentAlert={false} - > - - )} - {showExpirationModal && filesForProcessing.length && ( - }> - setShowExpirationModal(false)} - loading={extractLoading} - selectedRows={childRef.current?.getSelectedRows() as CustomFile[]} - isLargeDocumentAlert={false} - > - - )} {showDeletePopUp && ( = ({ hideModal, open }) => { diff --git a/frontend/src/components/DataSources/GCS/GCSModal.tsx b/frontend/src/components/DataSources/GCS/GCSModal.tsx index f0ee06996..1b3e70928 100644 --- a/frontend/src/components/DataSources/GCS/GCSModal.tsx +++ b/frontend/src/components/DataSources/GCS/GCSModal.tsx @@ -4,7 +4,7 @@ import { useFileContext } from '../../../context/UsersFiles'; import { urlScanAPI } from '../../../services/URLScan'; import { CustomFileBase, GCSModalProps, fileName, nonoautherror } from '../../../types'; import { v4 as uuidv4 } from 'uuid'; -import CustomModal from '../../../HOC/CustomModal'; +import CustomModal from '../../UI/CustomModal'; import { useGoogleLogin } from '@react-oauth/google'; import { useAlertContext } from '../../../context/Alert'; import { buttonCaptions } from '../../../utils/Constants'; diff --git a/frontend/src/components/FileTable.tsx b/frontend/src/components/FileTable.tsx index 1617d88a1..f3b0847a8 100644 --- a/frontend/src/components/FileTable.tsx +++ b/frontend/src/components/FileTable.tsx @@ -74,7 +74,7 @@ const FileTable: ForwardRefRenderFunction = (props, re const { connectionStatus, setConnectionStatus, onInspect, onRetry, onChunkView } = props; const { filesData, setFilesData, model, rowSelection, setRowSelection, setSelectedRows, setProcessedCount, queue } = useFileContext(); - const { userCredentials, isReadOnlyUser } = useCredentials(); + const { userCredentials, isReadOnlyUser, isNeo4jUser } = useCredentials(); const columnHelper = createColumnHelper(); const [columnFilters, setColumnFilters] = useState([]); const [isLoading, setIsLoading] = useState(false); @@ -1020,7 +1020,7 @@ const FileTable: ForwardRefRenderFunction = (props, re ); - } else if (connectionStatus) { + } else if (connectionStatus && !isNeo4jUser) { return ( diff --git a/frontend/src/components/Popups/GraphEnhancementDialog/AdditionalInstructions/index.tsx b/frontend/src/components/Popups/GraphEnhancementDialog/AdditionalInstructions/index.tsx index 0cf693138..1f62a05a4 100644 --- a/frontend/src/components/Popups/GraphEnhancementDialog/AdditionalInstructions/index.tsx +++ b/frontend/src/components/Popups/GraphEnhancementDialog/AdditionalInstructions/index.tsx @@ -14,6 +14,7 @@ import { useFileContext } from '../../../../context/UsersFiles'; import { showNormalToast } from '../../../../utils/Toasts'; import { OnChangeValue } from 'react-select'; import { OptionType } from '../../../../types'; +import { useCredentials } from '../../../../context/UserCredentials'; export default function AdditionalInstructionsText({ closeEnhanceGraphSchemaDialog, @@ -22,6 +23,7 @@ export default function AdditionalInstructionsText({ }) { const { breakpoints } = tokens; const tablet = useMediaQuery(`(min-width:${breakpoints.xs}) and (max-width: ${breakpoints.lg})`); + const { isNeo4jUser } = useCredentials(); const { additionalInstructions, setAdditionalInstructions, @@ -134,7 +136,11 @@ export default function AdditionalInstructionsText({ `, }} type='creatable' - helpText='The maximum token limit is 10,000 for LLM processing. The total number of chunks will be calculated as 10,000 divided by the tokens per chunk you select. For example, selecting 500 tokens per chunk results in 20 chunks (10,000 / 500).' + helpText={ + !isNeo4jUser + ? 'The maximum token limit is 10,000 for LLM processing. The total number of chunks will be calculated as 10,000 divided by the tokens per chunk you select. For example, selecting 500 tokens per chunk results in 20 chunks (10,000 / 500).' + : null + } />