import requests import json import streamlit as st import sys import time st.set_page_config(page_title="Samba-CoE_v0.1 Chatbot") if 'expert_sampling_details' not in st.session_state.keys(): st.session_state['temperature'] = 0.7 st.session_state['top_p'] = 0.1 st.session_state['max_length'] = 512 st.session_state['history_buffer_length'] = 3 st.session_state['top_k'] = 40 with st.sidebar: st.sidebar.info("Samba-CoE_v0.1 Chatbot") with st.sidebar.form("Chatbot Settings"): temperature = st.sidebar.slider('temperature', min_value=0.01, max_value=1.0, value=0.7, step=0.01) top_p = st.sidebar.slider('top_p', min_value=0.01, max_value=1.0, value=0.1, step=0.01) max_length = st.sidebar.slider('max_length', min_value=32, max_value=1024, value=512, step=8) submitted = st.form_submit_button("Submit") if submitted: st.session_state['max_length'] = max_length st.session_state['temperature'] = temperature st.session_state['top_p'] = top_p st.sidebar.success("Generation parameters:\n" + f'\n * temperature: {st.session_state.temperature}\n' + f'\n * top_p: {st.session_state.top_p}\n' + f'\n * max_tokens: {st.session_state.max_length}\n' + f'\n * skip_special_tokens: True\n'+ f'\n * do_sample: True\n' ) def clear_chat_history(): st.session_state.messages = [{"role": "assistant", "content": "How may I assist you today?"}] st.sidebar.button('Clear Chat History', on_click=clear_chat_history) # Store LLM generated responses if "messages" not in st.session_state.keys(): st.session_state.messages = [{"role": "assistant", "content": "How may I assist you today?"}] # Display or clear chat message for message in st.session_state.messages: with st.chat_message(message["role"]): st.write(message["content"]) def generate_response(prompt_input): history_buffer_length = st.session_state.history_buffer_length message_history = st.session_state.messages[-history_buffer_length:] string_dialogue = " [INST] You are a helpful assistant developed by SambaNova Systems as part of its Composition of Expert (CoE) effort. Always assist with care, respect, and truth. Respond with utmost utility yet securely and professionally. Avoid harmful, unethical, prejudiced, or negative content. Ensure replies promote fairness, positivity and an engaging conversation. [/INST] \n" for dict_message in message_history: if dict_message["role"] == "user": string_dialogue += '[INST]' + dict_message["content"] + '[/INST]' + '\n' else: string_dialogue += dict_message["content"] + "" + '\n' payload = {'prompt': string_dialogue, 'max_tokens': st.session_state['max_length'], 'n': 1, 'do_sample': True, 'temperature': st.session_state['temperature'], 'top_p': st.session_state['top_p'], 'top_k': st.session_state['top_k'], 'skip_special_token': True, 'repition_penalty': 1.15, 'stop_sequences': ['INST', '[INST]', '[/INST]'] } r = requests.post(st.secrets["backend_url"], json=payload) response = r.json()['choices'][0]['text'] return response # User-provided prompt if prompt := st.chat_input(): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.write(prompt) def clean_response(response): if '[INST' in response: return response.split('[INST')[0] elif '[/INST' in response: return response.split('[/INST')[0] return response def stream_response(response): response = "Please access our latest chatbot at this link: [Samba-CoE-v0.2](https://coe-1.cloud.snova.ai/)" for word in response.split(" "): yield word + " " time.sleep(0.02) # Generate a new response if last message is not from assistant if st.session_state.messages[-1]["role"] != "assistant": with st.chat_message("assistant"): with st.spinner("Thinking..."): # response = generate_response(prompt) # response = clean_response(response) response = None st.write_stream(stream_response(response)) message = {"role": "assistant", "content": response} st.session_state.messages.append(message)