DarijaBot / app.py
halimbahae's picture
Update app.py
8870a28 verified
# Importing required packages
import streamlit as st
import uuid
from huggingface_hub import InferenceClient
# Initialize the HuggingFace inference client
def initialize_client(api_key):
return InferenceClient(model="HuggingFaceH4/zephyr-7b-beta", token=api_key)
INIT_PROMPT = """
\n\nHuman: You are DarijaBot, a helpful assistant that can converse in both Latin and Arabic alphabet Darija. You will help the users learn about Wardley Mapping.
"""
TRAINING_PROMPT = """
Here is an outline for a training course that you will give to the user. It covers the key principles of Wardley Mapping:
"""
INTRO_PROMPT = """
Hello, I'm DarijaBot! I can help you with your questions about Wardley Mapping in Darija. You can type in either Latin or Arabic script.
"""
REG_PROMPT = """
\n\nHuman: Here is the user's question in Darija:
<question>
{QUESTION}
</question>
\n\nAssistant: [DarijaBot] <response>
"""
new_prompt = []
if "session_id" not in st.session_state:
st.session_state.session_id = str(uuid.uuid4())
st.set_page_config(page_title="DarijaBot - ChatBot")
st.sidebar.title("DarijaBot - ChatBot")
st.sidebar.title("Wardley Mapping Mentor")
st.sidebar.divider()
st.sidebar.markdown("Developed by [Bahae Eddine HALIM](https://linkedin.com/in/halimbahae)", unsafe_allow_html=True)
st.sidebar.markdown("Current Version: 0.0.4")
st.sidebar.markdown("Using HuggingFaceH4/zephyr-7b-beta API")
st.sidebar.markdown(st.session_state.session_id)
st.sidebar.divider()
# Prompt the user for the API key
user_huggingface_api_key = st.sidebar.text_input("Enter your HuggingFace API Key:", placeholder="hf_...", type="password")
if "messages" not in st.session_state:
st.session_state["messages"] = []
st.session_state.messages.append({"role": "assistant", "content": INTRO_PROMPT})
if "all_prompts" not in st.session_state:
st.session_state["all_prompts"] = INIT_PROMPT + TRAINING_PROMPT
if user_huggingface_api_key:
client = initialize_client(user_huggingface_api_key)
else:
st.warning("Please enter your HuggingFace API key", icon="⚠️")
for message in st.session_state.messages:
if message["role"] in ["user", "assistant"]:
with st.chat_message(message["role"]):
new_prompt.append(message["content"])
st.markdown(message["content"])
if user_huggingface_api_key:
if user_input := st.chat_input("How can I help with Wardley Mapping? (Darija: Latin or Arabic script)"):
prompt = REG_PROMPT.format(QUESTION=user_input)
st.session_state.all_prompts += prompt
st.session_state.messages.append({"role": "user", "content": user_input})
with st.chat_message("user"):
st.markdown(user_input)
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
try:
response = client.chat_completion(
[{"role": "system", "content": "You are DarijaBot, a helpful assistant that can converse in both Latin and Arabic alphabet Darija."}, {"role": "user", "content": user_input}],
max_tokens=512,
temperature=0.7,
top_p=0.95
).choices[0].message.content
full_response += response
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
except Exception as e:
st.error(f"Error: Unable to fetch response from the API.\nDetails: {e}")
st.session_state.messages.append({"role": "assistant", "content": full_response})
st.session_state.all_prompts += full_response