File size: 2,482 Bytes
358c9e4
 
 
 
f38d527
358c9e4
f38d527
358c9e4
 
 
 
 
 
 
 
f38d527
358c9e4
 
 
 
 
 
 
 
 
 
 
f1172de
f38d527
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f1172de
358c9e4
 
f38d527
358c9e4
 
 
 
 
f38d527
 
358c9e4
f38d527
 
358c9e4
f38d527
358c9e4
 
 
 
 
 
 
 
 
 
 
 
 
 
f38d527
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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(output_dir)
    
    logger.info(f"Extracted contents to {output_dir}")
    logger.info(f"Contents of {output_dir}:")
    for file in os.listdir(output_dir):
        logger.info(os.path.join(output_dir, file))
    
    return output_dir

def run_graphrag_query(query):
    # Define the command
    command = [
        "python", "-m", "graphrag.query",
        "--root", "./ragtest",
        "--method", "local",
        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:
        return result.stderr

def qa_tool_graph_rag(user_question):
    try:
        # Paths from environment variables
        zip_path = os.getenv('ZIP_PATH', '/home/user/app/ragtest.zip')
        extract_path = os.getenv('EXTRACT_PATH', '/home/user/app')
        
        # Unzip the folder
        output_dir = unzip_folder(zip_path, extract_path)
        
        # Change to the directory containing the ragtest folder
        os.chdir(extract_path)
        
        # Run the GraphRAG query
        answer = run_graphrag_query(user_question)
        
        logger.info(f"GraphRAG answer generated: {answer}")
        
        # For simplicity, we're not handling images here. 
        # You may need to adjust this based on how GraphRAG returns results.
        images = []
        
        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:
        # Clean up: remove the extracted directory
        if 'output_dir' in locals():
            shutil.rmtree(output_dir)
        
        # Change back to the original directory
        os.chdir('/home/user/app')