Katpeeler's picture
Update pages/Chat_Mode.py
587d806
import openai
import streamlit as st
import json
import mysql.connector
import random
import time
st.title("LaptopGPT v1.0")
openai.api_base = "https://master-naturally-bluegill.ngrok-free.app/v1"
openai.api_key = "not needed for a local LLM"
if "openai_model" not in st.session_state:
st.session_state["openai_model"] = "GPT4All Falcon"
# Initialize message history list
if "messages" not in st.session_state:
st.session_state.messages = [{"role": "assistant", "content": "I'm ready for a prompt!"}]
# display message history in chat window
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
token_number = st.sidebar.slider("Maximum Tokens", min_value=10, max_value=400, value=50, step=1)
temp_number = st.sidebar.slider("Temperature", min_value=0.00, max_value=1.00, value=0.28, step=0.01)
model_selector = st.sidebar.selectbox("Available Models", ("GPT4All Falcon", "Llama-2-7B Chat", "Mini Orca (Small)"))
display_stats = st.sidebar.checkbox("Display stats")
iter = random.randint(0, 999999999)
siter = str(iter)
# User input
if prompt := st.chat_input("Type some text here!"):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
response = openai.Completion.create(
model=model_selector,
prompt=prompt,
max_tokens=token_number,
temperature=temp_number,
top_p=0.95,
n=1,
echo=False,
stream=False
)
response_text = response["choices"][0]["text"]
print(response_text)
print(response["usage"]["prompt_tokens"])
print(response["usage"]["completion_tokens"])
print(response["usage"]["total_tokens"])
##actual text from the json
#response_text = getSentToDatabase()
##entire json
#response = getSentToDatabase()
print(prompt)
print(response)
prompt_tokens = response["usage"]["prompt_tokens"]
completion_tokens = response["usage"]["completion_tokens"]
total_tokens = response["usage"]["total_tokens"]
cost = (prompt_tokens * 0.03 + completion_tokens * 0.06) / 1000
st.markdown(response_text)
st.session_state.messages.append({"role": "assistant", "content": response_text})
if (display_stats == True):
st.markdown(''':red[Tokens in prompt: ]''' + " " + str(prompt_tokens))
st.markdown(''':orange[Tokens in response: ]''' + " " + str(completion_tokens))
st.markdown(''':green[Total Tokens: ]''' + " " + str(total_tokens))
st.markdown(''':blue[GPT4 Cost: ]''' + " $" + str(round(cost, 5)))
st.markdown(''':rainbow[Our Cost: ]''' + " $0.00")
# Extracting fields from the response
id = response["id"]
model = response["model"]
created = response["created"]
finish_reason = response["choices"][0]["finish_reason"]
text_content = response["choices"][0]["text"]
# Splitting the 'text' field into different rows based on '\n'
#text_line = text_content.split('\n')
conn = mysql.connector.connect(
host='34.70.75.35',
database='chatbotdb',
user='remote3',
password='password'
)
cursor = conn.cursor()
timestr = time.strftime("%Y%m%d-%H%M%S")
# Extracting data from JSON
id_value = "web_" + timestr
finish_reason = response["choices"][0]["finish_reason"]
index_value = response["choices"][0]["index"]
#logprobs = "web"
logprobs = json.dumps(response["choices"][0]["logprobs"]) if response["choices"][0]["logprobs"] is not None else None
#text_lines = response["choices"][0]["text"].split('\n')
text_line1 = prompt
text_line2 = response["choices"][0]["text"]
created = response["created"]
model = response["model"]
object = response["object"]
completion_tokens = response["usage"]["completion_tokens"]
prompt_tokens = response["usage"]["prompt_tokens"]
total_tokens = response["usage"]["total_tokens"]
# Insert data into the table
insert_data_query = """
INSERT INTO chatbot3 (id, finish_reason, index_value, logprobs, text_line1, text_line2, created, model, object, completion_tokens, prompt_tokens, total_tokens)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
"""
cursor.execute(insert_data_query, (id_value, finish_reason, index_value, logprobs, text_line1, text_line2, created, model, object, completion_tokens, prompt_tokens, total_tokens))
# Commit the changes and close the connection
conn.commit()
conn.close()
def clear_chat_history():
st.session_state.messages = [{"role": "assistant", "content": "I'm ready for a prompt!"}]
#model.current_chat_session = empty_chat_session(model.config["systemPrompt"])
st.sidebar.button('Clear Chat History', on_click=clear_chat_history)
#token_number = st.sidebar.slider("Maximum Tokens", min_value=10, max_value=500, value=75, step=1)
#st.sidebar.write(token_number)