File size: 2,865 Bytes
ee233a4
7bd5533
 
 
 
 
f94ca0e
7bd5533
 
635af98
 
 
 
 
c8c75ba
4d3e0eb
f94ca0e
 
7bd5533
c8c75ba
 
635af98
 
 
 
 
 
 
c8c75ba
7bd5533
f94ca0e
 
 
 
 
 
 
4d3e0eb
f94ca0e
 
 
 
 
4d3e0eb
f94ca0e
 
 
 
 
 
 
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
63
64
65
66
67
68
69
70
71
72
73
74
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, gemini_generate_code

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

    # Sidebar (updated return values)
    (query, num_results, theme, search_clicked, gemini_prompt,
     mcp_codegen_prompt, codegen_clicked) = render_sidebar()

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

    # -- Gemini Q&A --
    if gemini_prompt:
        st.header("πŸ’‘ Gemini Research Q&A")
        with st.spinner("Gemini is thinking..."):
            answer = gemini_generate(gemini_prompt)
        st.success(answer)

    # -- MCP Code Generation --
    if mcp_codegen_prompt and codegen_clicked:
        st.header("πŸ› οΈ Gemini MCP Server Code Generation")
        with st.spinner("Gemini is coding your MCP server..."):
            system_instruction = (
                "You are an expert in Model Context Protocol (MCP) server development. "
                "Generate clean, production-ready Python code for an MCP server as described below. "
                "Use best practices and include all necessary imports and comments."
            )
            code_result = gemini_generate_code(system_instruction, mcp_codegen_prompt)
        st.code(code_result, language="python")
        st.download_button("Download code as mcp_server.py", code_result, file_name="mcp_server.py", mime="text/x-python")

    # -- 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)

            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)

if __name__ == "__main__":
    main()