from datetime import datetime import streamlit as st import os from openai import OpenAI class ChatBot: def __init__(self): self.client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) self.history = [{"role": "system", "content": "You are a helpful assistant."}] def generate_response(self, prompt: str) -> str: self.history.append({"role": "user", "content": prompt}) completion = self.client.chat.completions.create( model="gpt-4o-mini", # NOTE: feel free to change it to "gpt-4" or "our LLM" messages=self.history ) response = completion.choices[0].message.content self.history.append({"role": "assistant", "content": response}) return response def get_history(self) -> list: return self.history # Read the content of the Markdown file def read_markdown_file(file_path): with open(file_path, 'r', encoding='utf-8') as file: return file.read() # Credit: Time def current_year(): now = datetime.now() return now.year st.set_page_config(layout="wide") # st.title("A.V.A. 🤖: How can I help?") with st.sidebar: # Example: st.write("## Examples:") if st.button("Who's Yiqiao Yin?"): st.session_state["example_prompt"] = "Who's Yiqiao Yin?" if st.button("Any papers by Yiqiao?"): st.session_state["example_prompt"] = "Any papers by Yiqiao?" if st.button("Yiqiao's view on AI?"): st.session_state["example_prompt"] = "What is Yiqiao's view on AI?" if st.button("Yiqiao's view on market?"): st.session_state["example_prompt"] = "What is Yiqiao's view on stock market?" # Add a button to clear the session state st.write("---------------------------------") if st.button("Clear Session"): st.session_state.messages = [] st.experimental_rerun() st.markdown(""" ### Credits: - **Developer**: [Yiqiao Yin](https://www.y-yin.io/) | [App URL](https://huggingface.co/spaces/eagle0504/y-yin-homepage) | [LinkedIn](https://www.linkedin.com/in/yiqiaoyin/) | [YouTube](https://youtube.com/YiqiaoYin/) """) # Credit: current_year = current_year() # This will print the current year st.markdown( f"""
Copyright © 2010-{current_year} Present Yiqiao Yin
""", unsafe_allow_html=True, ) # Initialize chat history if "messages" not in st.session_state: st.session_state.messages = [] # Ensure messages are a list of dictionaries if not isinstance(st.session_state.messages, list): st.session_state.messages = [] if not all(isinstance(msg, dict) for msg in st.session_state.messages): st.session_state.messages = [] # Path to the Markdown file md_file_path = 'docs/yiqiao_yin.md' # Get the content of the Markdown file yiqiaoyin_profile = read_markdown_file(md_file_path) # Add the system message with the profile information to the chat history if it hasn't been added yet if not any(msg["role"] == "system" for msg in st.session_state.messages): st.session_state.messages.append({"role": "system", "content": f"You know the following about Mr. Yiqiao Yin: {yiqiaoyin_profile}"}) # Display chat messages from history on app rerun for message in st.session_state.messages: if message["role"] != "system": # Skip system messages with st.chat_message(message["role"]): st.markdown(message["content"]) # Check if an example prompt was selected if "example_prompt" in st.session_state and st.session_state["example_prompt"]: example_prompt = st.session_state.pop("example_prompt") # Remove after using st.session_state.messages.append({"role": "user", "content": example_prompt}) # Display user message in chat message container st.chat_message("user").markdown(example_prompt) # API Call bot = ChatBot() bot.history = st.session_state.messages.copy() # Update history from messages response = bot.generate_response(example_prompt) # Display assistant response in chat message container with st.chat_message("assistant"): st.markdown(response) # Add assistant response to chat history st.session_state.messages.append({"role": "assistant", "content": response}) # React to user input if prompt := st.chat_input("😉 Virtual Yiqiao is here to help."): # Display user message in chat message container st.chat_message("user").markdown(prompt) # Add user message to chat history st.session_state.messages.append({"role": "user", "content": prompt}) # API Call bot = ChatBot() bot.history = st.session_state.messages.copy() # Update history from messages response = bot.generate_response(prompt) # Display assistant response in chat message container with st.chat_message("assistant"): st.markdown(response) # Add assistant response to chat history st.session_state.messages.append({"role": "assistant", "content": response})