Spaces:
Running
Running
| 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 | |