Spaces:
Running
Running
import time | |
import streamlit as st | |
from utils.questions_dataset import system_instruction, get_model_tools | |
from google.genai import types | |
from google import genai | |
import time | |
from utils.firebase_util import push_study_time_data | |
st.set_page_config(page_title="LSAT Group A", page_icon="📘") | |
GEMINI_API_KEY = "AIzaSyAjpHA08BUwLhK-tIlORxcB18RAp3541-M" | |
client = genai.Client(api_key=GEMINI_API_KEY) | |
new_chat_id = f'{time.time()}' | |
MODEL_ROLE = 'ai' | |
AI_AVATAR_ICON = '✨' | |
st.title("📘Logical Reasoning: Group A") | |
next_btn = st.button("Click here when finished") | |
st.write("Use this AI Tutor to help you understand the concepts. You can ask it to explain the concepts, provide examples, or clarify any doubts you have.") | |
st.write("Start by sending a hello message!") | |
sys_prompt = system_instruction % ( | |
st.session_state.prequiz_df['num_correct'][0], | |
st.session_state.prequiz_df['num_questions'][0], | |
st.session_state.prequiz_df['num_correct'][1], | |
st.session_state.prequiz_df['num_questions'][1], | |
st.session_state.prequiz_df['num_correct'][2], | |
st.session_state.prequiz_df['num_questions'][2], | |
st.session_state.prequiz_df['num_correct'][3], | |
st.session_state.prequiz_df['num_questions'][3], | |
st.session_state.prequiz_df['num_correct'][4], | |
st.session_state.prequiz_df['num_questions'][4], | |
st.session_state.prequiz_df['num_correct'][5], | |
st.session_state.prequiz_df['num_questions'][5], | |
st.session_state.prequiz_df['num_correct'][6], | |
st.session_state.prequiz_df['num_questions'][6], | |
st.session_state.prequiz_df['num_correct'][7], | |
st.session_state.prequiz_df['num_questions'][7], | |
st.session_state.prequiz_df['num_correct'][8], | |
st.session_state.prequiz_df['num_questions'][8] | |
) if st.session_state.prequiz_df is not None else "" | |
st.session_state.chat_id = new_chat_id | |
st.session_state.chat_title = f'ChatSession-{st.session_state.chat_id}' | |
st.session_state.gemini_history = [] | |
# Initialize session state | |
if "chat" not in st.session_state: | |
st.session_state.chat = None | |
st.session_state.chat = client.chats.create(model='gemini-2.0-flash', | |
config=types.GenerateContentConfig( | |
tools=[get_model_tools()], | |
system_instruction=sys_prompt), | |
history=st.session_state.gemini_history | |
) | |
if "messages" not in st.session_state: | |
st.session_state.messages = [] | |
# Display chat messages from history on app rerun | |
for message in st.session_state.messages: | |
with st.chat_message( | |
name=message['role'], | |
avatar=message.get('avatar'), | |
): | |
st.markdown(message['text']) | |
# Chat input | |
user_input = st.chat_input("💬 Ask your tutor a question...") | |
if user_input: | |
st.chat_message("user").markdown(user_input) | |
st.session_state.messages.append({"role": "user", "text": user_input}) | |
full_response = "" | |
response = st.session_state.chat.send_message_stream(user_input) | |
full_reply = "" | |
with st.chat_message( | |
name=MODEL_ROLE, | |
avatar=AI_AVATAR_ICON, | |
): | |
response_box = st.empty() | |
try: | |
for chunk in response: | |
chunk_text = chunk.text | |
if chunk_text: | |
full_reply += chunk_text | |
time.sleep(0.05) | |
response_box.markdown(full_reply + "▌") | |
# Final display after stream ends | |
response_box.markdown(full_reply) | |
except Exception as e: | |
response_box.markdown(f"⚠️ Error: {e}") | |
full_reply = "Sorry, there was an error." | |
print(e) | |
st.session_state.messages.append({"role": "assistant", "text": full_reply, "avatar": AI_AVATAR_ICON}) | |
if len(st.session_state.messages) > 10: | |
st.session_state.messages = st.session_state.messages[-10:] | |
st.session_state.gemini_history = st.session_state.chat.get_history() | |
if next_btn: | |
print(time.time()) | |
print(st.session_state.tutor_start_time) | |
push_study_time_data(time.time() - st.session_state.tutor_start_time) | |
st.session_state.postquiz_start_time = time.time() | |
st.switch_page("pages/postquiz.py") |