File size: 2,128 Bytes
ee233a4
7bd5533
 
 
 
 
635af98
7bd5533
 
635af98
 
 
 
 
c8c75ba
635af98
 
7bd5533
635af98
c8c75ba
 
635af98
 
 
 
 
 
 
c8c75ba
7bd5533
635af98
7bd5533
 
635af98
 
7bd5533
 
 
635af98
 
 
 
 
 
 
 
 
7bd5533
 
635af98
7bd5533
 
635af98
 
 
 
 
 
7bd5533
 
 
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
import streamlit as st
from orchestrator.dispatcher import Dispatcher
from components.sidebar import render_sidebar
from components.paper_list import render_paper_list
from components.notebook_view import render_notebook
from components.graph_view import render_graph
from orchestrator.gemini import gemini_generate

def main():
    st.set_page_config(
        page_title="πŸš€ MCP Research Companion",
        layout="wide",
        initial_sidebar_state="expanded"
    )

    # Sidebar: user query, num results, theme, gemini prompt, etc.
    query, num_results, theme, search_clicked, gemini_prompt = render_sidebar()

    # Optional theme
    if theme == "Dark":
        st.markdown(
            """
            <style>
                body {background-color: #0E1117; color: #E6E1DC;}
                .stButton>button {background-color: #2563EB; color: white;}
            </style>
            """,
            unsafe_allow_html=True,
        )

    # Search and display papers
    if search_clicked and query:
        dispatcher = Dispatcher()
        with st.spinner("Searching MCP servers..."):
            papers = dispatcher.search_papers(query, limit=num_results)
        render_paper_list(papers)

        if papers:
            first_paper = papers[0]
            st.subheader("Gemini-Powered Abstract Summarizer")
            if st.button("Summarize Abstract with Gemini"):
                with st.spinner("Gemini is generating summary..."):
                    summary = gemini_generate(first_paper["abstract"])
                    st.success(summary)

            # Show notebook and graph
            notebook_cells = dispatcher.get_notebook_cells(first_paper["id"])
            render_notebook(notebook_cells)

            graph_data = dispatcher.get_graph(first_paper["id"])
            render_graph(graph_data)

    # Gemini research Q&A, even if user hasn't hit 'Search'
    if gemini_prompt:
        st.header("πŸ’‘ Gemini Research Q&A")
        with st.spinner("Gemini is thinking..."):
            answer = gemini_generate(gemini_prompt)
        st.success(answer)

if __name__ == "__main__":
    main()