GoogleLeak / app.py
cyberandy's picture
Update app.py
4f38ef9 verified
raw
history blame
2.56 kB
import streamlit as st
from gpt_researcher import GPTResearcher
import asyncio
import nest_asyncio
import os
# 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"
# 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 related to Google Search Algorithm Leak.
"""
try:
researcher = GPTResearcher(
query=query, report_type=report_type, report_source="local"
)
await researcher.conduct_research()
return await researcher.write_report()
except Exception as e:
return f"Error during research: {str(e)}"
# Function to run the asynchronous function in a separate thread
def run_async(coroutine):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return loop.run_until_complete(coroutine)
# Streamlit interface
st.title("Google Leak Reporting Tool")
# User input for the query using a text area
query = st.text_area(
"Enter your research query:",
"Extract all the information about how the ranking for internal links works.",
height=150, # Adjustable height
)
# Start the report generation process
if st.button("Generate Report"):
if not query:
st.warning("Please enter a query to generate a report.")
else:
with st.spinner("Generating report..."):
# Submit the task to the ThreadPoolExecutor
future = executor.submit(run_async, fetch_report(query, REPORT_TYPE))
# Wait for the result
report = future.result()
# Display the report or error message
if report and not report.startswith("Error"):
st.success("Report generated successfully!")
st.write(report) # Display the report in the app
# Create a download button for the report
st.download_button(
label="Download Report as Text File",
data=report,
file_name="research_report.txt",
mime="text/plain",
)
else:
st.error(report) # Show the error message if any