File size: 2,681 Bytes
c0a2f04
a1d082f
c0a2f04
 
dbcc073
04d19e0
 
a1d082f
c0a2f04
 
 
 
 
 
 
 
dbcc073
70a66d0
dbcc073
c0a2f04
dbcc073
 
 
04d19e0
 
 
 
 
 
 
 
 
 
 
dbcc073
 
 
 
c0a2f04
dbcc073
 
07df051
dbcc073
 
07df051
dbcc073
07df051
 
 
 
c0a2f04
fa55365
c0a2f04
04d19e0
 
c0a2f04
04d19e0
 
c0a2f04
 
04d19e0
c0a2f04
 
 
 
 
04d19e0
 
 
 
 
 
c0a2f04
04d19e0
 
 
 
 
 
 
 
 
 
 
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
81
82
83
84
import streamlit as st
from gpt_researcher import GPTResearcher
import asyncio
import nest_asyncio
import os
from contextlib import contextmanager
from io import StringIO
import sys

# Access secrets
openai_api_key = st.secrets["OPENAI_API_KEY"]
tavily_api_key = st.secrets["TAVILY_API_KEY"]

# Apply the asyncio patch from nest_asyncio if required
nest_asyncio.apply()

# Set the document path environment variable
os.environ['DOC_PATH'] = './local'  # Path to the folder with documents

# Constants
REPORT_TYPE = "research_report"
DOCUMENT_FILE = 'removed_code.txt'  # Name of the document file

# Function to capture output to the standard output
@contextmanager
def st_capture(output_func):
    old_out = sys.stdout
    sys.stdout = StringIO()
    try:
        yield
        output_func(sys.stdout.getvalue())
    finally:
        sys.stdout = old_out

# Function to handle asynchronous calls
def run_async(coroutine):
    loop = asyncio.get_event_loop()
    return loop.run_until_complete(coroutine)

# Define the asynchronous function to fetch the report
async def fetch_report(query, report_type):
    """
    Fetch a research report based on the provided query and report type.
    Research is conducted on a local document specified by DOCUMENT_FILE.
    """
    researcher = GPTResearcher(query=query, report_type=report_type, report_source='local')
    await researcher.conduct_research()
    report = await researcher.write_report()
    return report

# Streamlit interface
st.title("Google Leak Reporting Tool")

# User input for the query using a text area for multi-line input
query = st.text_area(
    "Enter your research query:",
    "Extract all the information about how the ranking for internal links works.",
    height=150  # You can adjust the height as needed
)


# Button to generate report
if st.button("Generate Report"):
    if not query:
        st.warning("Please enter a query to generate a report.")
    else:
        # Collapsible expander to show progress
        with st.expander("See research progress"):
            with st_capture(st.write):
                report = run_async(fetch_report(query, "research_report"))
        
        if report:
            st.success("Report generated successfully!")
            st.write(report)  # Display the report in the app
            
            # Create a download button and provide the report as a downloadable file
            st.download_button(
                label="Download Report as Text File",
                data=report,
                file_name="research_report.txt",
                mime="text/plain"
            )
        else:
            st.error("Failed to generate the report.")