# ** import streamlit as st import time import os import openai import streamlit as st from streamlit_chat import message from openai.error import RateLimitError import backoff import tiktoken st.set_page_config( page_title="GPT4 ChatBot", page_icon=":robot:" ) st.markdown("""
""", unsafe_allow_html=True) st.header("GPT4 ChatBot") if 'generated' not in st.session_state: st.session_state['generated'] = [] if 'past' not in st.session_state: st.session_state['past'] = [] def get_text(): input_text = st.text_input("You: ","Hi", key="input") return input_text.strip() @backoff.on_exception(backoff.expo, RateLimitError) def chatgpt(messages): if num_tokens_from_messages(messages,"gpt-4") > 8000: messages = messages[-2:] print("Found higher number of tokens !!") print("Reprint message ::") print(*messages, sep = "\n") if num_tokens_from_messages(messages,"gpt-4") > 8000: messages = messages[-1:] print("Found higher number of tokens 2nd time also !!") print("Reprinting the message ::") print(*messages, sep = "\n") completion = openai.ChatCompletion.create( model="gpt-4", messages=messages) print(f"token {completion['usage']}") return(completion['choices'][0]["message"]["content"]) def openapi_key_present(): if 'openapikey' in st.session_state: if st.session_state['openapikey'] != "": return True return False def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301"): """Returns the number of tokens used by a list of messages.""" try: encoding = tiktoken.encoding_for_model(model) except KeyError: print("Warning: model not found. Using cl100k_base encoding.") encoding = tiktoken.get_encoding("cl100k_base") if model == "gpt-3.5-turbo": print("Warning: gpt-3.5-turbo may change over time. Returning num tokens assuming gpt-3.5-turbo-0301.") return num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301") elif model == "gpt-4": print("Warning: gpt-4 may change over time. Returning num tokens assuming gpt-4-0314.") return num_tokens_from_messages(messages, model="gpt-4-0314") elif model == "gpt-3.5-turbo-0301": tokens_per_message = 4 # every message follows