File size: 7,146 Bytes
08a0246
9f8a212
 
f1e900a
08a0246
 
f1e900a
b2fed43
a733938
 
 
 
 
 
 
 
 
b2fed43
 
 
 
a733938
 
 
 
b2fed43
 
496c793
 
b2fed43
905424e
b2fed43
 
 
ba11d51
1e62e94
b2fed43
 
ba11d51
b2fed43
 
ba11d51
 
 
496c793
b2fed43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ba11d51
b2fed43
 
ba11d51
b2fed43
7b22dde
a733938
 
 
7b22dde
 
 
b2fed43
 
 
 
 
 
a733938
 
2fc01da
a733938
2fc01da
b2fed43
a733938
 
 
 
7b22dde
 
 
 
 
b2fed43
7b22dde
 
 
 
 
a733938
 
ba11d51
a733938
9f8a212
 
 
496c793
 
 
9f8a212
b2fed43
 
 
 
 
 
 
 
 
 
 
 
496c793
 
 
 
b2fed43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
496c793
 
b2fed43
 
 
 
 
 
 
383b850
b2fed43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e62e94
 
b2fed43
 
 
1e62e94
 
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
import streamlit as st
from config import get_ai71_api_key
from ai_utils import generate_response as _generate_response

# Set the page configuration to wide layout
st.set_page_config(layout="wide")

# Custom CSS to style the page, text area, and flashcards
st.markdown("""
    <style>
        .main .block-container {
            padding: 2rem;
        }
        .title {
            text-align: center;
            margin-bottom: 1rem;
        }
        .section-title {
            margin-top: 2rem;
            font-size: 1.5rem;
        }
        .text-area {
            margin-top: 1rem;
            margin-bottom: 1rem;
        }
        .flashcard-container {
            display: flex;
            overflow-x: auto; /* Allow horizontal scrolling */
            white-space: nowrap; /* Prevent wrapping */
            gap: 1rem;
        }
        .flashcard {
            width: 250px;
            height: 200px;
            border: 2px solid #4682b4; /* Steel Blue border */
            border-radius: 5px;
            font-size: 16px;
            color: black;
            background-color: #f0f8ff; /* Alice Blue background */
            perspective: 1000px;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-shrink: 0; /* Prevent shrinking */
        }
        .flashcard-inner {
            position: relative;
            width: 100%;
            height: 100%;
            transition: transform 0.6s;
            transform-style: preserve-3d;
        }
        .flashcard:hover .flashcard-inner {
            transform: rotateY(180deg);
        }
        .flashcard-front, .flashcard-back {
            position: absolute;
            width: 100%;
            height: 100%;
            backface-visibility: hidden;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 1rem;
        }
        .flashcard-front {
            background-color: #f0f8ff; /* Alice Blue background */
        }
        .flashcard-back {
            background-color: #ffffff; /* White background for the back */
            transform: rotateY(180deg);
        }
    </style>
""", unsafe_allow_html=True)

# Initialize session state variables if not already set
if 'input_text' not in st.session_state:
    st.session_state.input_text = ""
if 'summary' not in st.session_state:
    st.session_state.summary = ""
if 'main_points' not in st.session_state:
    st.session_state.main_points = ""
if 'flashcards' not in st.session_state:
    st.session_state.flashcards = ""

# Display the title and introduction
st.title("InsightStarfleet")
st.write("""
    Welcome to the InsightStarfleet! This application helps you process text by summarizing content,
    extracting main points, and creating flashcards. Follow the instructions to enter your text and generate content.
""")

# Input area for text
st.subheader("Enter Your Text")
input_text = st.text_area(
    label="Enter text below:",
    value=st.session_state.input_text,
    height=200,
    key="input_text",
    help="Paste or type your text here for processing."
)

# Update session state if input text changes
if input_text != st.session_state.input_text:
    st.session_state.input_text = input_text

# Text Processing
st.subheader("Text Processing")
if st.session_state.input_text:
    # Caching API call function
    @st.cache_data
    def generate_response(system_message, user_message):
        response = _generate_response(system_message, user_message)
        # Strip any unwanted labels or text
        return response.strip()

    # Buttons for processing
    if st.button("Generate Summary"):
        summary_prompt = "Summarize the following text into a brief summary:"
        st.session_state.summary = generate_response(summary_prompt, st.session_state.input_text)

    if st.button("Extract Main Points"):
        main_points_prompt = "Extract the main points from the following text and format them as a bulleted list:"
        st.session_state.main_points = generate_response(main_points_prompt, st.session_state.input_text)

    if st.button("Generate Flashcards"):
        flashcards_prompt = "Create flashcards with questions and answers based on the following text. Ensure each flashcard includes a question and its corresponding answer, formatted as 'Question: [question]\\nAnswer: [answer]':"
        st.session_state.flashcards = generate_response(flashcards_prompt, st.session_state.input_text)
else:
    # Only show generate buttons if text is present
    if st.button("Generate Summary") or st.button("Extract Main Points") or st.button("Generate Flashcards"):
        st.error("Please enter text before generating content.")

# Combined Results
st.subheader("Results")

# Summary
if st.session_state.summary:
    st.markdown("### Summary")
    st.text_area(
        "Summary",
        value=st.session_state.summary,
        height=200,
        key="summary_results",
        help="Generated summary."
    )
    st.download_button(
        label="Download Summary",
        data=st.session_state.summary,
        file_name="summary.txt",
        mime="text/plain"
    )

# Main Points
if st.session_state.main_points:
    st.markdown("### Main Points")
    # Remove any leading or trailing blank lines from main points
    bullet_points = "\n".join([f"- {point.strip()}" for point in st.session_state.main_points.split("\n") if point.strip()])
    st.markdown(f"### Main Points\n{bullet_points}", unsafe_allow_html=True)
    st.download_button(
        label="Download Main Points",
        data=bullet_points,
        file_name="main_points.txt",
        mime="text/plain"
    )

# Flashcards
if st.session_state.flashcards:
    st.markdown("### Flashcards")
    flashcards = st.session_state.flashcards.split("\n\n")  # Assuming flashcards are separated by double newlines
    st.markdown('<div class="flashcard-container">', unsafe_allow_html=True)
    for card in flashcards:
        try:
            # Check if card contains both question and answer
            if '\n' in card:
                question, answer = card.split('\n', 1)
                st.markdown(f"""
                    <div class="flashcard">
                        <div class="flashcard-inner">
                            <div class="flashcard-front">
                                <p>{question.strip()}</p>
                            </div>
                            <div class="flashcard-back">
                                <p>{answer.strip()}</p>
                            </div>
                        </div>
                    </div>
                """, unsafe_allow_html=True)
            else:
                st.error("Invalid flashcard format. Each flashcard should be in 'question\\nanswer' format.")
        except Exception as e:
            st.error(f"Error processing flashcard: {e}")
    st.markdown('</div>', unsafe_allow_html=True)
    st.download_button(
        label="Download Flashcards",
        data=st.session_state.flashcards,
        file_name="flashcards.txt",
        mime="text/plain"
    )