| | import os |
| | import keyfile |
| | import warnings |
| | import streamlit as st |
| | from langchain_google_genai import ChatGoogleGenerativeAI |
| | from langchain.schema import HumanMessage, SystemMessage, AIMessage |
| |
|
| | |
| | warnings.filterwarnings("ignore") |
| |
|
| | |
| | st.set_page_config(page_title="πΏ ChitChat π§ββοΈ", page_icon="π§ββοΈ", layout="wide") |
| |
|
| | |
| | st.markdown("<h1 style='text-align: center; color: #4B0082;'>Welcome to ChitChat πΏβ¨</h1>", unsafe_allow_html=True) |
| | st.markdown("<h3 style='color: #003366;'>How can I assist with your ailments or worries today? π§ͺπ«</h3>", unsafe_allow_html=True) |
| |
|
| | |
| | if "sessionMessages" not in st.session_state: |
| | st.session_state.sessionMessages = [ |
| | SystemMessage(content="You are a medieval magical healer known for your peculiar sarcasm.") |
| | ] |
| |
|
| | |
| | os.environ["GOOGLE_API_KEY"] = keyfile.GOOGLEKEY |
| |
|
| | |
| | llm = ChatGoogleGenerativeAI( |
| | model="gemini-1.5-pro", |
| | temperature=0.7, |
| | convert_system_message_to_human=True |
| | ) |
| |
|
| | |
| | def chat_bubble(message, is_user=True): |
| | align = 'right' if is_user else 'left' |
| | color = '#E1F5FE' if is_user else '#FFEBEE' |
| | bubble_style = f""" |
| | <div style="text-align: {align}; padding: 10px;"> |
| | <span style="display: inline-block; padding: 10px; background-color: {color}; color: black; |
| | border-radius: 15px; max-width: 70%; word-wrap: break-word;"> |
| | {message} |
| | </span> |
| | </div> |
| | """ |
| | st.markdown(bubble_style, unsafe_allow_html=True) |
| |
|
| | |
| | def load_answer(question): |
| | |
| | st.session_state.sessionMessages.append(HumanMessage(content=question)) |
| | assistant_answer = llm.invoke(st.session_state.sessionMessages) |
| | |
| | |
| | if isinstance(assistant_answer, AIMessage): |
| | st.session_state.sessionMessages.append(assistant_answer) |
| | return assistant_answer.content.strip() |
| | else: |
| | st.session_state.sessionMessages.append(AIMessage(content=assistant_answer)) |
| | return assistant_answer.strip() |
| |
|
| | |
| | for message in st.session_state.sessionMessages: |
| | if isinstance(message, HumanMessage): |
| | chat_bubble(message.content, is_user=True) |
| | elif isinstance(message, AIMessage): |
| | chat_bubble(message.content, is_user=False) |
| |
|
| | |
| | st.sidebar.header("Additional Options") |
| |
|
| | |
| | mood_options = { |
| | "π Happy": "Happy", |
| | "π Neutral": "Neutral", |
| | "π Concerned": "Concerned", |
| | "π€ Curious": "Curious" |
| | } |
| | mood = st.sidebar.selectbox("Select your mood:", list(mood_options.keys())) |
| |
|
| | predefined_responses = st.sidebar.radio("Choose a predefined response:", |
| | ["Tell me a joke", "Give me advice on health", "Suggest a potion", "General inquiry"]) |
| | |
| | |
| | user_input = st.text_input("You: ", key="input", placeholder="Type your question here...") |
| |
|
| | |
| | if st.button("π Get a Magical Answer π"): |
| | if user_input: |
| | chat_bubble(user_input, is_user=True) |
| | response = load_answer(user_input) |
| | chat_bubble(response, is_user=False) |
| |
|
| | |
| | if predefined_responses == "Tell me a joke": |
| | joke = "Why did the scarecrow win an award? Because he was outstanding in his field!" |
| | chat_bubble(joke, is_user=False) |
| | elif predefined_responses == "Give me advice on health": |
| | health_advice = "Make sure to drink plenty of water and eat a balanced diet rich in fruits and vegetables." |
| | chat_bubble(health_advice, is_user=False) |
| | elif predefined_responses == "Suggest a potion": |
| | potion_suggestion = "How about a calming lavender potion? It helps with relaxation and sleep!" |
| | chat_bubble(potion_suggestion, is_user=False) |
| |
|
| | |
| | st.markdown(""" |
| | <style> |
| | .stApp { |
| | background: linear-gradient(to right, #FFEFBA, #FFFFFF); |
| | color: #4B0082; |
| | font-family: Arial, sans-serif; |
| | } |
| | input[type="text"] { |
| | padding: 10px; |
| | border: 2px solid #4B0082; |
| | border-radius: 15px; |
| | outline: none; |
| | width: 100%; |
| | } |
| | button { |
| | background-color: #4B0082; |
| | color: white; |
| | border-radius: 15px; |
| | margin-top: 10px; |
| | } |
| | .sidebar .sidebar-content { |
| | background-color: #f9f9f9; |
| | border-radius: 10px; |
| | } |
| | </style> |
| | """, unsafe_allow_html=True) |
| |
|