chatbot_tutor / pages /llm_tutor.py
shreypatel19's picture
time fix tweaks
8bc5bae
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")