Researcher / app.py
sidphbot's picture
stream streamlit stdout
27a82f7
raw
history blame
No virus
2.84 kB
import streamlit as st
import pandas as pd
import numpy as np
from src.Surveyor import Surveyor
import contextlib
from functools import wraps
from io import StringIO
def capture_output(func):
"""Capture output from running a function and write using streamlit."""
@wraps(func)
def wrapper(*args, **kwargs):
# Redirect output to string buffers
stdout, stderr = StringIO(), StringIO()
try:
with contextlib.redirect_stdout(stdout), contextlib.redirect_stderr(stderr):
return func(*args, **kwargs)
except Exception as err:
st.write(f"Failure while executing: {err}")
finally:
if _stdout := stdout.getvalue():
st.write("Execution stdout:")
st.code(_stdout)
if _stderr := stderr.getvalue():
st.write("Execution stderr:")
st.code(_stderr)
return wrapper
def run_survey(surveyor, research_keywords, max_search, num_papers):
survey_fn = capture_output(surveyor.survey)
zip_file_name, survey_file_name = survey_fn(research_keywords,
max_search=max_search,
num_papers=num_papers
)
with open(str(zip_file_name), "rb") as file:
btn = st.download_button(
label="Download extracted topic-clustered-highlights, images and tables as zip",
data=file,
file_name=str(zip_file_name)
)
with open(str(survey_file_name), "rb") as file:
btn = st.download_button(
label="Download detailed generated survey file",
data=file,
file_name=str(survey_file_name)
)
for line in file.readlines():
st.write(line)
def survey_space(surveyor):
st.sidebar.title('Auto-Research V0.1 - Automated Survey generation from research keywords')
form = st.sidebar.form(key='survey_form')
research_keywords = form.text_input("What would you like to research in today?")
max_search = form.number_input("num_papers_to_search", help="maximium number of papers to glance through - defaults to 20",
min_value=1, max_value=60, value=10, step=1, key='max_search')
num_papers = form.number_input("num_papers_to_select", help="maximium number of papers to select and analyse - defaults to 8",
min_value=1, max_value=25, value=2, step=1, key='num_papers')
submit = form.form_submit_button('Submit')
if submit:
st.write("hello")
run_survey(surveyor, research_keywords, max_search, num_papers)
if __name__ == '__main__':
global surveyor
surveyor_obj = Surveyor()
survey_space(surveyor_obj)