File size: 4,655 Bytes
9f54a3b dab5cc9 9f54a3b e8f079f 9f54a3b 60eb20c 67a2453 60eb20c 8270bde 0ca86ba 9f54a3b 142827c 0029ae0 142827c b8e69b4 0029ae0 e644846 0029ae0 40d82ac 6e0c914 0029ae0 b8e69b4 b713846 9f54a3b 60eb20c 142827c 8e38e68 142827c 0ca86ba 142827c eabc41f 79898e5 d135f7b 79898e5 eabc41f 9f54a3b b713846 9f54a3b 60eb20c 9f54a3b b713846 9f54a3b 8d2df67 9f54a3b 8d2df67 9f54a3b 531ed05 9f54a3b 715fa41 f786670 9f54a3b 0441833 f9207df f5989f3 f9207df b7ab64c f9207df 76c37db b7ab64c f9207df 0441833 9f54a3b 3bb7e5d 0029ae0 9f54a3b 60eb20c 9f54a3b 0029ae0 1e6fc39 0cafb36 ca83e2e b7ab64c |
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 |
import streamlit as st
from openai import OpenAI
import os
import sys
from dotenv import load_dotenv, dotenv_values
load_dotenv()
# initialize the client
client = OpenAI(
base_url="https://api-inference.huggingface.co/v1",
api_key=os.environ.get('HUGGINGFACEHUB_API_TOKEN') # Replace with your token
)
# Create supported models
model_links = {
"Mixtral-8x7B-Instruct-v0.1": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"Mistral-Nemo-Instruct-2407": "mistralai/Mistral-Nemo-Instruct-2407",
"Nous-Hermes-2-Mixtral-8x7B-DPO": "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO",
"Mistral-7B-Instruct-v0.1": "mistralai/Mistral-7B-Instruct-v0.1",
"Mistral-7B-Instruct-v0.2": "mistralai/Mistral-7B-Instruct-v0.2",
"Mistral-7B-Instruct-v0.3": "mistralai/Mistral-7B-Instruct-v0.3",
"Mistral-Small-Instruct-2409": "mistralai/Mistral-Small-Instruct-2409",
}
def reset_conversation():
#st.session_state.conversation = []
st.session_state.messages = []
return None
def ask_assistant_stream(st_model, st_messages, st_temp_value, st_max_tokens):
response={}
try:
stream = client.chat.completions.create(
model=st_model,
messages=[
{"role": m["role"], "content": m["content"]}
for m in st_messages
],
temperature=st_temp_value,
stream=True,
max_tokens=st_max_tokens,
)
response["stream"] = stream
except Exception as e:
pass
return response
# Define the available models & Create the sidebar with the dropdown for model selection
models =[key for key in model_links.keys()]
selected_model = st.sidebar.selectbox("Select Model", models)
# Create a temperature slider
temp_values = st.sidebar.slider('Select a temperature value', 0.0, 1.0, (0.5))
# Create a max_token slider
max_token_value = st.sidebar.slider('Select a max_token value', 1000, 9000, (5000))
#Add reset button to clear conversation
st.sidebar.button('Reset Chat', on_click=reset_conversation) #Reset button
# Create model description
st.sidebar.write(f"You're now chatting with **{selected_model}**")
st.sidebar.markdown("*Generated content may be inaccurate or false.*")
if "prev_option" not in st.session_state:
st.session_state.prev_option = selected_model
#if st.session_state.prev_option != selected_model:
# st.session_state.messages = []
# st.write(f"Changed to {selected_model}")
# st.session_state.prev_option = selected_model
# reset_conversation()
#Pull in the model we want to use
#repo_id = model_links[selected_model]
st.subheader(f'{selected_model}')
# Set a default model
#if selected_model not in st.session_state:
# st.session_state[selected_model] = model_links[selected_model]
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
def remove_message(position):
st.toast("remove message no:" + position)
# Display chat messages from history on app rerun
pos = 0
for message in st.session_state.messages:
pos=pos+1
with st.chat_message(message["role"]):
col1, col2 = st.columns([9,1])
col1.markdown(message["content"])
col2.button("remove", key="button_remove_message_"+str(pos), args=[pos], on_click=remove_message)
if "remove" not in st.session_state:
st.session_state.remove= False
def remove_click():
st.session_state.remove= True
if st.session_state.remove:
lastmessage = st.session_state.messages.pop()
prelastmessage = st.session_state.messages.pop()
st.toast("popped msg: " + lastmessage["content"] + " // model: " + model_links[selected_model])
st.session_state.remove = False
st.rerun()
# Accept user input
if prompt := st.chat_input(f"Hi I'm {selected_model}, ask me a question"):
# Display user message in chat message container and Add user message to chat history
with st.chat_message("user"):
st.markdown(prompt)
st.session_state.messages.append({"role": "user", "content": prompt})
# Display assistant response in chat message container
assistant = ask_assistant_stream(model_links[selected_model], st.session_state.messages, temp_values, max_token_value)
if "stream" in assistant:
with st.chat_message("assistant"):
response = st.write_stream(assistant["stream"])
else:
with st.chat_message("assistant"):
response = st.write("Failure")
st.session_state.messages.append({"role": "assistant", "content": response})
if len(st.session_state.messages)>0:
st.button("remove last conversation", key="removeButton", on_click=remove_click)
|