ASCO-based-QA / graph_rag.py
AbdulMoid's picture
Update graph_rag.py
518225a verified
raw
history blame
3.01 kB
import os
import zipfile
import shutil
import logging
import subprocess
from dotenv import load_dotenv
import gradio as gr
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# Load environment variables
load_dotenv()
def unzip_folder(zip_path, extract_path):
output_dir = os.path.join(extract_path, "ragtest")
os.makedirs(output_dir, exist_ok=True)
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_path)
# Adjust to handle the extra ragtest folder inside the zip
actual_output_dir = os.path.join(output_dir, "ragtest")
if os.path.exists(actual_output_dir):
logger.info(f"Extracted contents to {actual_output_dir}")
logger.info(f"Contents of {actual_output_dir}:")
for file in os.listdir(actual_output_dir):
logger.info(os.path.join(actual_output_dir, file))
else:
logger.error(f"Expected directory {actual_output_dir} does not exist. Check the structure of the zip file.")
actual_output_dir = output_dir # fallback in case the structure is not as expected
return actual_output_dir
def run_graphrag_query(query, ragtest_dir):
# Log the directory and its contents
logger.info(f"Running GraphRAG query with root: {ragtest_dir}")
logger.info(f"Contents of {ragtest_dir}:")
for file in os.listdir(ragtest_dir):
logger.info(os.path.join(ragtest_dir, file))
# Define the command
command = [
"python", "-m", "graphrag.query",
"--root", ragtest_dir,
"--method", "global",
query
]
# Run the command
result = subprocess.run(command, capture_output=True, text=True)
# Return the output or error message
if result.returncode == 0:
return result.stdout
else:
logger.error(f"GraphRAG query failed with error: {result.stderr}")
return result.stderr
def qa_tool_graph_rag(user_question):
original_dir = os.getcwd() # Store the original directory
try:
zip_path = os.getenv('ZIP_PATH', '/home/user/app/ragtest.zip')
extract_path = os.getenv('EXTRACT_PATH', '/home/user/app')
output_dir = unzip_folder(zip_path, extract_path)
os.chdir(extract_path)
answer = run_graphrag_query(user_question, output_dir)
logger.info(f"GraphRAG answer generated: {answer}")
images = [] # Adjust as needed for your application
return answer, images, gr.update(visible=True), gr.update(visible=True)
except Exception as e:
logger.error(f"Error in GraphRAG processing: {str(e)}")
return f"An error occurred: {str(e)}", [], gr.update(visible=False), gr.update(visible=False)
finally:
if 'output_dir' in locals():
shutil.rmtree(output_dir)
os.chdir(original_dir) # Return to the original directory