Spaces:
Running
Running
File size: 6,474 Bytes
832926c |
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# app.py
import streamlit as st
from research import arxiv_research # Import the corrected research module
import asyncio
from PIL import Image
# Page configuration
st.set_page_config(
page_title="Deep Research Arxiv",
page_icon="π",
layout="wide",
initial_sidebar_state="expanded"
)
# Load images (Make sure you have these image files in your directory)
logo = Image.open('logo_a.png') # replace with your logo
banner = Image.open('banner.png') # replace with your banner
# Custom CSS (Optional - for styling)
st.markdown("""
<style>
.stImage > img {
border-radius: 10px;
margin-bottom: 2rem;
}
.api-container {
background-color: #f8f9fa;
padding: 1.5rem;
border-radius: 10px;
margin-bottom: 2rem;
border: 1px solid #e0e0e0;
}
.api-header {
color: #1E88E5;
font-size: 1.2rem;
margin-bottom: 1rem;
}
</style>
""", unsafe_allow_html=True)
# Initialize session state for API key configuration
if 'api_keys_configured' not in st.session_state:
st.session_state.api_keys_configured = False
# Sidebar configuration for OpenRouter API key
with st.sidebar:
st.image(logo, width=200, use_container_width=True)
st.markdown("### βοΈ API Configuration")
with st.expander("Configure OpenRouter API Key", expanded=not st.session_state.api_keys_configured):
api_form = st.form("api_keys_form")
with api_form:
openrouter_key = api_form.text_input(
"OpenRouter API Key",
type="password",
value=st.session_state.get('openrouter_key', ''),
help="Required for language model access (literature review generation)."
)
if api_form.form_submit_button("Save API Key"):
if not openrouter_key:
st.error("β OpenRouter API key is required!")
else:
st.session_state.openrouter_key = openrouter_key
st.session_state.api_keys_configured = True
st.success("β
OpenRouter API key saved successfully!")
st.rerun() # Re-run the app to update the state
if st.session_state.api_keys_configured:
st.success("β
OpenRouter API Key configured")
st.markdown("### π Get API Key")
st.markdown("""
- [OpenRouter API Key](https://openrouter.ai/keys)
""")
# Main content area of the app
st.title("π Deep Research Arxiv")
col1, col2 = st.columns(2)
with col1:
st.markdown("""
<div style='background-color: #5dade2; padding: 1rem; border-radius: 10px; margin-bottom: 2rem;'>
<h4 style='color: #1565C0; margin-bottom: 0.5rem;'>Welcome to Deep Research Arxiv!</h4>
<p style='color: #424242;'>
This application helps you conduct literature reviews on Arxiv by:
<br>
β’ Searching Arxiv for relevant papers<br>
β’ Analyzing upto 100 papers based on query<br>
β’ Synthesizing a literature review with citations
</p>
</div>
""", unsafe_allow_html=True)
with col2:
st.markdown("### Tips for Better Results")
st.info("""
β’ Be specific in your query with clear and focused questions.
β’ Consider including relevant keywords.
β’ Don't choose too many papers; it might prompt the model to include irrelevant information if not enough relevant papers exist.
""")
with st.container():
with st.form("research_form", clear_on_submit=False):
st.markdown("### Research Parameters")
user_query = st.text_area(
"Research Query",
placeholder="Enter your research topic or question here...",
help="Be as specific as possible for better results (e.g., 'Quantum Machine Learning for Drug Discovery').",
height=100,
disabled=not st.session_state.api_keys_configured
)
paper_count = st.number_input(
"Number of papers to analyze",
min_value=10,
max_value=100,
value=20,
step=5,
help="Select number of papers to include (10-100)"
)
submitted = st.form_submit_button(
"π Start Research",
disabled=not st.session_state.api_keys_configured
)
if not st.session_state.api_keys_configured:
st.warning("β οΈ Please configure your OpenRouter API key in the sidebar to enable research.")
# Function to run the research (using asyncio.run)
def run_research(user_query, paper_count):
"""Execute research with specified paper count."""
arxiv_research.OPENROUTER_API_KEY = st.session_state.openrouter_key
return asyncio.run(arxiv_research.research_flow(user_query, paper_count))
# Handling form submission and displaying results
if submitted and st.session_state.api_keys_configured:
if not user_query.strip():
st.error("β οΈ Please enter a research query.")
else:
with st.spinner(f"π Analyzing {paper_count} papers from Arxiv..."):
try:
literature_review = run_research(user_query, paper_count)
# Display results
st.markdown("""
<div class='report-container'>
<h3 style='color: #1E88E5; margin-bottom: 1rem;'>π Literature Review</h3>
</div>
""", unsafe_allow_html=True)
st.markdown(literature_review, unsafe_allow_html=False)
# Extract citation statistics
if "Citation Statistics:" in literature_review:
stats_section = literature_review.split("Citation Statistics:")[-1]
st.info(f"π Citation Statistics:{stats_section}")
st.download_button(
label="π₯ Download Literature Review",
data=literature_review,
file_name="nature_style_review.txt",
mime="text/plain"
)
except Exception as e:
st.error(f"β An error occurred: {e}")
st.markdown("""
<div style='text-align: center; color: #666; padding: 2rem;'>
<p>Built by GItsSaikat β€οΈ</p>
</div>
""", unsafe_allow_html=True) |