AI_Mentor / src /streamlit_app.py
kanneboinakumar's picture
Update src/streamlit_app.py
6e78fc1 verified
import os
from io import BytesIO
import streamlit as st
from langchain.prompts import PromptTemplate
from langchain.chains.llm import LLMChain
from langchain_google_genai import ChatGoogleGenerativeAI
from fpdf import FPDF
# 1️⃣ Configure with your API key
os.environ["GOOGLE_API_KEY"] = os.getenv("G_API")
# 2️⃣ Initialize Gemini via LangChain
model = ChatGoogleGenerativeAI(model="gemini-2.0-flash",
temperature=0.0)
# 3️⃣ Prompt template
prompt = PromptTemplate.from_template(
"You are an expert and motivational AI Mentor. Provide detailed, thoughtful, and practical guidance in response to the following query. Avoid unnecessary fluff or emojis.\n\n{input}"
)
chain = LLMChain(llm=model, prompt=prompt)
def ai_mentor(prompt_input: str) -> str:
return chain.run(input=prompt_input)
def create_pdf_buffer(messages) -> BytesIO:
buffer = BytesIO()
pdf = FPDF()
pdf.add_page()
pdf.set_font("Helvetica", size=14)
pdf.cell(200, 20, "Chat History with AI Mentor", ln=1, align="C")
pdf.ln(10)
pdf.set_font("Helvetica", size=12)
for msg in messages:
role = msg["role"].capitalize()
pdf.multi_cell(0, 8, f"{role}: {msg['content']}")
pdf.ln(2)
# Write PDF to memory as bytes
pdf_bytes = pdf.output(dest="S").encode("latin-1")
buffer.write(pdf_bytes)
buffer.seek(0)
return buffer
# ── Streamlit UI ──
st.title("AI Mentor (Gemini with LangChain)")
st.sidebar.write("Chat with your AI Mentor. Type questions or worries below 😊")
if "messages" not in st.session_state:
st.session_state.messages = []
for msg in st.session_state.messages:
st.chat_message(msg["role"]).write(msg["content"])
prompt_input = st.chat_input("Write your message here...")
if prompt_input:
st.session_state.messages.append({"role": "user", "content": prompt_input})
with st.spinner("AI Mentor is thinking..."):
response = ai_mentor(prompt_input)
st.session_state.messages.append({"role": "assistant", "content": response})
st.chat_message("assistant").write(response)
if st.session_state.messages:
pdf_buffer = create_pdf_buffer(st.session_state.messages)
st.download_button(
label="Download chat history as PDF",
data=pdf_buffer,
file_name="chat_history.pdf",
mime="application/pdf",
)