File size: 5,330 Bytes
418ed18 941bf52 b14c6ee 941bf52 348c6ea aaf4dac 8ed4bb7 aaf4dac 941bf52 366fbdc 941bf52 ad77aaa 941bf52 55a97df a8fae85 2172c52 55a97df a8fae85 55a97df a8fae85 04ee2fa aaf4dac 8ed4bb7 aaf4dac 941bf52 f4a8199 941bf52 50500f5 941bf52 e81543b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
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-3.5-turbo", # NOTE: feel free to change it to "gpt-4" or "gpt-4o"
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("Yin's Profile π€")
with st.sidebar:
with st.expander("Instruction Manual"):
st.markdown("""
## Yin's Profile π€ Chatbot
This Streamlit app allows you to chat with GPT-4o model. However, it's been deprecated due to high cost and can be turned on upon request.
### How to Use:
1. **Input**: Type your prompt into the chat input box labeled "What is up?".
2. **Response**: The app will display a response from GPT-4o.
3. **Chat History**: Previous conversations will be shown on the app.
### 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/)
Enjoy chatting with Yin's assistant!
""")
# Example:
with st.expander("Examples"):
st.success("Example: Who is Yiqiao Yin?")
st.success("Example: What did Yiqiao do at graduate school?")
st.success("Example: Where to find published papers by Yiqiao?")
st.success("Example: What is Yiqiao's view on AI?")
st.success("Example: What are some online links by Yiqiao I can read about?")
st.success("Example: What is Yiqiao's view on stock market?")
# Consulting
with st.expander("AI Consulting"):
stripe_payment_link_consulting = os.environ["STRIPE_PAYMENT_LINK_CONSULTING"]
st.markdown(
f"""
Want website with copilot like mine? βοΈ Schedule an appointment with me [here]({stripe_payment_link_consulting})
"""
)
# Donation
with st.expander("Donation"):
stripe_payment_link = os.environ["STRIPE_PAYMENT_LINK"]
st.markdown(
f"""
Want to support me? π Click here using this [link]({stripe_payment_link}).
"""
)
# Add a button to clear the session state
if st.button("Clear Session"):
st.session_state.messages = []
st.experimental_rerun()
# Credit:
current_year = current_year() # This will print the current year
st.markdown(
f"""
<h6 style='text-align: left;'>Copyright Β© 2010-{current_year} Present Yiqiao Yin</h6>
""",
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"])
# React to user input
if prompt := st.chat_input("π Ask any question or feel free to use the examples provided in the left sidebar."):
# 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})
|