# -*- coding: utf-8 -*- """ Created on Fri Aug 18 08:01:41 2023 @author: Shamim Ahamed, RE AIMS Lab """ import streamlit as st import pandas as pd from tqdm.cli import tqdm import numpy as np import requests import pandas as pd from tqdm import tqdm def get_user_data(api, parameters): response = requests.post(f"{api}", json=parameters) if response.status_code == 200: return response.json() else: print(f"ERROR: {response.status_code}") return None st.set_page_config(page_title="SuSastho.AI Chatbot", page_icon="🚀", layout='wide') st.markdown(""" """, unsafe_allow_html=True) st.markdown(""" """,unsafe_allow_html=True) model_names = { 'BLOOM 7B': 'bloom-7b', } with st.sidebar: st.title("SuSastho.AI - ChatBot 🚀") model_name = model_names[st.selectbox('Model', list(model_names.keys()), 0)] max_ctx = st.slider('Select Top N Context', min_value=1, max_value=6, value=3, step=1) # ctx_checker_tmp = st.slider('Context Checker Sensitivity', min_value=0.001, max_value=1.0, value=0.008, step=0.001) ctx_checker_tmp = 0.008 lm_tmp = st.slider('Language Model Sensitivity', min_value=0.001, max_value=1.0, value=0.1, step=0.001) cls_threshold = st.slider('Classification Threshold', min_value=0.01, max_value=1.0, value=0.5, step=0.01) verbose = st.checkbox('Show Detailed Response', value=False) if verbose == True: retv_cnt = st.slider('Display N retrived Doc', min_value=0, max_value=32, value=0, step=1) show_input = st.checkbox('Show Input of LLM', value=False) endpoint = st.secrets["LLMEndpoint"] def main(): if model_name == 'None': st.markdown('##### Please select a model.') return # Initialize chat history if "messages" not in st.session_state: st.session_state.messages = [{"role": 'assistant', "content": 'āĻšā§āĻ¯āĻžāĻ˛ā§‹! āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻāĻ†āĻ‡ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻŸāĨ¤ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ? 😊'}] # Display chat messages from history on app rerun for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) # Accept user input if prompt := st.chat_input("āĻāĻ–āĻžāĻ¨ā§‡ āĻŽā§‡āĻ¸ā§‡āĻœ āĻ˛āĻŋāĻ–ā§āĻ¨"): # Display user message in chat message container with st.chat_message("user"): st.markdown(prompt) # Add user message to chat history st.session_state.messages.append({"role": "user", "content": prompt}) ## Get context params = { "chat_history": [{"content": x["content"], "role": x["role"]} for x in st.session_state.messages[-10:] if x['role']=='user'], "model": "bloom-7b", "mode": "specific", "config": { "ctx_checker_tmp": ctx_checker_tmp, "lm_tmp": lm_tmp, "max_ctx": max_ctx, "cls_threshold": cls_threshold, "llm_enable": True, } } resp = get_user_data(endpoint, params) if resp == None: st.markdown('#### INTERNAL ERROR') return print(resp['data']['logs']['content']) response = resp['data']['responses'][0]['content'] reasoning = resp['data']['logs']['content']['llm']['reasoning'] llm_input = resp['data']['logs']['content']['llm']['input'] context = resp['data']['logs']['content']['retrival_model']['matched_doc'] context_prob = resp['data']['logs']['content']['retrival_model']['matched_prob'] if verbose: clen = len(context) retrived = resp['data']['logs']['content']['retrival_model']['retrived_doc'][:retv_cnt] retrived_prob = resp['data']['logs']['content']['retrival_model']['retrived_prob'][:retv_cnt] retrived = [str(round(b, 3)) + ': ' + a for a, b in zip (retrived, retrived_prob)] retrived = '\n\n===============================\n\n'.join(retrived) context = [str(round(b, 3)) + ': ' + a for a, b in zip (context, context_prob)] context = '\n\n===============================\n\n'.join(context) response = f'###### Config: Context Checker Value: {ctx_checker_tmp}, LM Value: {lm_tmp}\n\n##### Retrived Context:\n{retrived}\n\n##### Response:\n{reasoning}' # ##### Matched Context:{clen}\n{context}\n\n if show_input: response += '\n\n### LLM Input:\n' + llm_input # Display assistant response in chat message container with st.chat_message("assistant", avatar=None): st.markdown(response) # Add assistant response to chat history st.session_state.messages.append({"role": "assistant", "content": response}) def app_viewport(): passw = st.empty() appc = st.container() if 'logged_in' not in st.session_state: with passw.container(): secret = st.text_input('Please Enter Access Code') if st.button("Submit", type='primary'): if secret == st.secrets["login_secret"]: passw.empty() st.session_state['logged_in'] = True else: st.error('Wrong Access Code.') if 'logged_in' in st.session_state and st.session_state['logged_in'] == True: with appc: main() if __name__ == '__main__': app_viewport()