Spaces:
Sleeping
Sleeping
File size: 6,619 Bytes
9aef153 cb863f0 9aef153 86eb78e 7753b87 86eb78e 7753b87 86eb78e 7753b87 86eb78e 9aef153 |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
import streamlit as st
import sqlite3
import pandas as pd
import openai
import os
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains.question_answering import load_qa_chain
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
os.environ["OPENAI_API_KEY"] = os.getenv("SECRET_KEY")
def init_database():
conn = sqlite3.connect('GPTPromptTemplates.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS USERS (
USER_ID INTEGER PRIMARY KEY,
User_Name VARCHAR(255)
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS TEMPLATES (
TEMPLATE_ID INTEGER PRIMARY KEY,
USER_ID INTEGER,
Prompt_Name VARCHAR(255),
Prompt_Text TEXT
)
''')
cursor.execute('''
CREATE UNIQUE INDEX IF NOT EXISTS idx_templates_prompt_name ON TEMPLATES (USER_ID, Prompt_Name)
''')
conn.commit()
conn.close()
def insert_prompt_template(user_id, prompt_name, prompt_text):
conn = sqlite3.connect('GPTPromptTemplates.db')
cursor = conn.cursor()
cursor.execute('INSERT OR REPLACE INTO TEMPLATES (USER_ID, Prompt_Name, Prompt_Text) VALUES (?, ?, ?)', (user_id, prompt_name, prompt_text))
conn.commit()
conn.close()
def delete_prompt_template(user_id, prompt_name):
conn = sqlite3.connect('GPTPromptTemplates.db')
cursor = conn.cursor()
cursor.execute('DELETE FROM TEMPLATES WHERE USER_ID = ? AND prompt_name = ?', (user_id, prompt_name))
conn.commit()
conn.close()
def get_prompt(user_id, prompt_name):
conn = sqlite3.connect('GPTPromptTemplates.db')
cursor = conn.cursor()
cursor.execute('SELECT Prompt_Name, Prompt_Text FROM TEMPLATES WHERE Prompt_Name = ? AND USER_ID = ?', (prompt_name, user_id))
template = cursor.fetchone()
conn.close()
if template == None:
return '',''
else:
return template[0], template[1]
def get_default_prompt(user_id):
conn = sqlite3.connect('GPTPromptTemplates.db')
cursor = conn.cursor()
cursor.execute('SELECT Prompt_Name, Prompt_Text FROM TEMPLATES WHERE USER_ID = ? ORDER BY Prompt_Name ASC LIMIT 1', (user_id, ))
template = cursor.fetchone()
conn.close()
if template == None:
return '',''
else:
return template[0], template[1]
def get_prompt_list(user_id):
conn = sqlite3.connect('GPTPromptTemplates.db')
templates = pd.read_sql_query('SELECT DISTINCT Prompt_Name FROM TEMPLATES WHERE USER_ID = {} ORDER BY Prompt_Name ASC'.format(user_id), conn)
conn.commit()
conn.close()
return templates
def template_change_value():
name, prompt = get_prompt(st.session_state.user_id, st.session_state.template_select)
st.session_state.name = name
st.session_state.prompt = prompt
def template_return_value(template_name):
st.session_state.template_select = template_name
name, prompt = get_prompt(st.session_state.user_id, st.session_state.template_select)
st.session_state.name = name
st.session_state.prompt = prompt
def main():
st.title("Working with Chat GPT with templates")
init_database()
col1, col2, col3 = st.columns([1,1,1])
user_id = 1
name, prompt = get_default_prompt(user_id)
prompt_list = get_prompt_list(user_id)
model_names = ['gpt-4','gpt-3.5-turbo','gpt-3.5-turbo-16k']
if not "initialized" in st.session_state:
st.session_state.user_id = user_id
st.session_state.name = name
st.session_state.prompt = prompt
st.session_state.prompt_list = prompt_list
st.session_state.template_select = name
st.session_state.output = ''
st.session_state.model_name = 'gpt-4'
st.session_state.initialized = True
with col1:
input_text = st.text_area('Please insert data for transforming', '', key="input_data", height=450)
if st.button("Apply"):
query = prompt
with st.spinner('In progress...'):
# st.write("in progress")
# text_splitter = CharacterTextSplitter(chunk_size=4096, chunk_overlap=0)
# texts = text_splitter.split_text(input_text)
# embeddings = OpenAIEmbeddings()
# docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": str(i)} for i in range(len(texts))]).as_retriever()
# docs = docsearch.get_relevant_documents(query)
if st.session_state.model_name == 'gpt-4':
max_tkns=5500
else :
max_tkns=3000
openai.api_key = os.environ["OPENAI_API_KEY"]
response = openai.ChatCompletion.create(
model=st.session_state.model_name,
messages=[
{"role": "system", "content": query},
{"role": "user", "content": input_text},
],
temperature = 0.7,
max_tokens=max_tkns
)
st.session_state.output = response["choices"][0]["message"]["content"].replace("\\n", "\n")
# chain = load_qa_chain(ChatOpenAI(model = st.session_state.model_name,max_tokens=max_tkns,temperature=0), chain_type="stuff")
# st.session_state.output = chain.run(input_documents=docs, question=query)
#st.session_state["output"] = output
#col3.text_area('Result', value=output, key="output_data", height=450)
st.experimental_rerun()
st.success("Ready!")
with col2:
st.session_state.model_name = st.selectbox("GPT model: ",model_names, key="gpt_model")
template_return_value(st.selectbox("Template: ",st.session_state.prompt_list, key="prompt_template",))
new_name = st.text_input("Template name:",value=st.session_state.name, key="template_name")
input_query = st.text_area("Prompt:",value=st.session_state.prompt, key="template_text", height=200)
col4, col5 = st.columns([1,1])
if col4.button("Save"):
insert_prompt_template(user_id, new_name, input_query)
st.session_state.prompt_list = get_prompt_list(user_id)
st.success("Prompt saved!")
st.experimental_rerun()
if col5.button("Delete"):
delete_prompt_template(user_id, new_name)
st.session_state.prompt_list = get_prompt_list(user_id)
st.success("Prompt deleted!")
st.experimental_rerun()
with col3:
txt_result = st.text_area('Result', value=st.session_state.output, key="output_data", height=450)
if __name__ == "__main__":
main() |