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)