ddovidovich commited on
Commit
9aef153
·
1 Parent(s): 4facf34

First commit

Browse files
Files changed (2) hide show
  1. app.py +165 -0
  2. requirements.txt +8 -0
app.py ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import sqlite3
3
+ import pandas as pd
4
+ import openai
5
+ import os
6
+
7
+ from langchain.embeddings.openai import OpenAIEmbeddings
8
+ from langchain.chat_models import ChatOpenAI
9
+ from langchain.chains.question_answering import load_qa_chain
10
+ from langchain.text_splitter import CharacterTextSplitter
11
+ from langchain.vectorstores import Chroma
12
+
13
+ os.environ["OPENAI_API_KEY"] = os.getenv("SECRET_KEY")
14
+
15
+ def init_database():
16
+ conn = sqlite3.connect('GPTPromptTemplates.db')
17
+ cursor = conn.cursor()
18
+
19
+ cursor.execute('''
20
+ CREATE TABLE IF NOT EXISTS USERS (
21
+ USER_ID INTEGER PRIMARY KEY,
22
+ User_Name VARCHAR(255)
23
+ )
24
+ ''')
25
+
26
+ cursor.execute('''
27
+ CREATE TABLE IF NOT EXISTS TEMPLATES (
28
+ TEMPLATE_ID INTEGER PRIMARY KEY,
29
+ USER_ID INTEGER,
30
+ Prompt_Name VARCHAR(255),
31
+ Prompt_Text TEXT
32
+ )
33
+ ''')
34
+
35
+ cursor.execute('''
36
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_templates_prompt_name ON TEMPLATES (USER_ID, Prompt_Name)
37
+ ''')
38
+
39
+ conn.commit()
40
+ conn.close()
41
+
42
+ def insert_prompt_template(user_id, prompt_name, prompt_text):
43
+ conn = sqlite3.connect('GPTPromptTemplates.db')
44
+ cursor = conn.cursor()
45
+ cursor.execute('INSERT OR REPLACE INTO TEMPLATES (USER_ID, Prompt_Name, Prompt_Text) VALUES (?, ?, ?)', (user_id, prompt_name, prompt_text))
46
+ conn.commit()
47
+ conn.close()
48
+
49
+ def delete_prompt_template(user_id, prompt_name):
50
+ conn = sqlite3.connect('GPTPromptTemplates.db')
51
+ cursor = conn.cursor()
52
+ cursor.execute('DELETE FROM TEMPLATES WHERE USER_ID = ? AND prompt_name = ?', (user_id, prompt_name))
53
+ conn.commit()
54
+ conn.close()
55
+
56
+ def get_prompt(user_id, prompt_name):
57
+ conn = sqlite3.connect('GPTPromptTemplates.db')
58
+ cursor = conn.cursor()
59
+ cursor.execute('SELECT Prompt_Name, Prompt_Text FROM TEMPLATES WHERE Prompt_Name = ? AND USER_ID = ?', (prompt_name, user_id))
60
+ template = cursor.fetchone()
61
+ conn.close()
62
+
63
+ if template == None:
64
+ return '',''
65
+ else:
66
+ return template[0], template[1]
67
+
68
+ def get_default_prompt(user_id):
69
+ conn = sqlite3.connect('GPTPromptTemplates.db')
70
+ cursor = conn.cursor()
71
+ cursor.execute('SELECT Prompt_Name, Prompt_Text FROM TEMPLATES WHERE USER_ID = ? ORDER BY Prompt_Name ASC LIMIT 1', (user_id, ))
72
+ template = cursor.fetchone()
73
+ conn.close()
74
+
75
+ if template == None:
76
+ return '',''
77
+ else:
78
+ return template[0], template[1]
79
+
80
+ def get_prompt_list(user_id):
81
+ conn = sqlite3.connect('GPTPromptTemplates.db')
82
+ templates = pd.read_sql_query('SELECT DISTINCT Prompt_Name FROM TEMPLATES WHERE USER_ID = {} ORDER BY Prompt_Name ASC'.format(user_id), conn)
83
+ conn.commit()
84
+ conn.close()
85
+
86
+ return templates
87
+
88
+ def template_change_value():
89
+ name, prompt = get_prompt(st.session_state.user_id, st.session_state.template_select)
90
+ st.session_state.name = name
91
+ st.session_state.prompt = prompt
92
+
93
+ def template_return_value(template_name):
94
+ st.session_state.template_select = template_name
95
+ name, prompt = get_prompt(st.session_state.user_id, st.session_state.template_select)
96
+ st.session_state.name = name
97
+ st.session_state.prompt = prompt
98
+
99
+ def main():
100
+ st.title("Working with Chat GPT with templates")
101
+
102
+ init_database()
103
+
104
+ col1, col2, col3 = st.columns([1,1,1])
105
+
106
+ user_id = 1
107
+ name, prompt = get_default_prompt(user_id)
108
+ prompt_list = get_prompt_list(user_id)
109
+ model_names = ['gpt-4','gpt-3.5-turbo','gpt-3.5-turbo-16k']
110
+
111
+ if not "initialized" in st.session_state:
112
+ st.session_state.user_id = user_id
113
+ st.session_state.name = name
114
+ st.session_state.prompt = prompt
115
+ st.session_state.prompt_list = prompt_list
116
+ st.session_state.template_select = name
117
+ st.session_state.output = ''
118
+ st.session_state.model_name = 'gpt-4'
119
+ st.session_state.initialized = True
120
+
121
+ with col1:
122
+
123
+ input_text = st.text_area('Please insert data for transforming', '', key="input_data", height=370)
124
+
125
+ if st.button("Apply"):
126
+ query = prompt
127
+ st.write("in progress")
128
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
129
+ texts = text_splitter.split_text(input_text)
130
+ embeddings = OpenAIEmbeddings()
131
+ docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": str(i)} for i in range(len(texts))]).as_retriever()
132
+ docs = docsearch.get_relevant_documents(query)
133
+ chain = load_qa_chain(ChatOpenAI(model = st.session_state.model_name,temperature=0), chain_type="stuff")
134
+ st.session_state.output = chain.run(input_documents=docs, question=query)
135
+ #st.session_state["output"] = output
136
+ #col3.text_area('Result', value=output, key="output_data", height=450)
137
+ st.experimental_rerun()
138
+ st.success("Ready!")
139
+
140
+
141
+ with col2:
142
+ st.session_state.model_name = st.selectbox("GPT model: ",model_names, key="gpt_model")
143
+ template_return_value(st.selectbox("Template: ",st.session_state.prompt_list, key="prompt_template",))
144
+ new_name = st.text_input("Template name:",value=st.session_state.name, key="template_name")
145
+ input_query = st.text_area("Prompt:",value=st.session_state.prompt, key="template_text", height=200)
146
+
147
+ col4, col5 = st.columns([1,1])
148
+ if col4.button("Save"):
149
+ insert_prompt_template(user_id, new_name, input_query)
150
+ st.session_state.prompt_list = get_prompt_list(user_id)
151
+ st.success("Prompt saved!")
152
+ st.experimental_rerun()
153
+
154
+ if col5.button("Delete"):
155
+ delete_prompt_template(user_id, new_name)
156
+ st.session_state.prompt_list = get_prompt_list(user_id)
157
+ st.success("Prompt deleted!")
158
+ st.experimental_rerun()
159
+
160
+ with col3:
161
+ txt_result = st.text_area('Result', value=st.session_state.output, key="output_data", height=450)
162
+
163
+
164
+ if __name__ == "__main__":
165
+ main()
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ numpy
2
+ pandas
3
+ streamlit
4
+ langchain
5
+ openai
6
+ chromadb
7
+ tiktoken
8
+ sqlite3