refactor: create project wise constants

Code_Style
sean1832 1 year ago
parent 7979a0f4b8
commit 0359e60d7f

@ -8,8 +8,8 @@ import GPT
openai.api_key = util.read_file(r'.user\API-KEYS.txt').strip()
if 'SESSION_LANGUAGE' not in st.session_state:
st.session_state['SESSION_LANGUAGE'] = util.read_json_at('.user/language.json', 'SESSION_LANGUAGE', 'en_US')
# if 'SESSION_LANGUAGE' not in st.session_state:
# st.session_state['SESSION_LANGUAGE'] = util.read_json_at('.user/language.json', 'SESSION_LANGUAGE', 'en_US')
SESSION_LANG = st.session_state['SESSION_LANGUAGE']
prompt_dir = f'.user/prompt/{SESSION_LANG}'

@ -6,48 +6,34 @@ import streamlit as st
import modules as mod
import GPT
import modules.utilities as util
import modules.INFO as INFO
# activate session
if 'SESSION_TIME' not in st.session_state:
st.session_state['SESSION_TIME'] = time.strftime("%Y%m%d-%H%H%S")
st.set_page_config(
page_title='GPT Brain'
)
util.remove_oldest_file('.user/log', 10)
LOG_PATH = '.user/log'
SESSION_TIME = st.session_state['SESSION_TIME']
SESSION_LANG = st.session_state['SESSION_LANGUAGE']
PROMPT_PATH = f'.user/prompt/{SESSION_LANG}'
CURRENT_LOG_FILE = f'{LOG_PATH}/log_{SESSION_TIME}.log'
BRAIN_MEMO = '.user/brain-memo.json'
MANIFEST = '.core/manifest.json'
model_options = ['text-davinci-003', 'text-curie-001', 'text-babbage-001', 'text-ada-001']
util.remove_oldest_file(INFO.LOG_PATH, 10)
header = st.container()
body = st.container()
def create_log():
if not os.path.exists(CURRENT_LOG_FILE):
util.write_file(f'Session {SESSION_TIME}\n\n', CURRENT_LOG_FILE)
return CURRENT_LOG_FILE
if not os.path.exists(INFO.CURRENT_LOG_FILE):
util.write_file(f'Session {INFO.SESSION_TIME}\n\n', INFO.CURRENT_LOG_FILE)
return INFO.CURRENT_LOG_FILE
def log(content, delimiter=''):
log_file = create_log()
if delimiter != '':
delimiter = f'\n\n=============={delimiter}==============\n'
util.write_file(f'\n{delimiter + content}', log_file, 'a')
def clear_log():
log_file_name = f'log_{SESSION_TIME}.log'
for root, dirs, files in os.walk(LOG_PATH):
log_file_name = f'log_{INFO.SESSION_TIME}.log'
for root, dirs, files in os.walk(INFO.LOG_PATH):
for file in files:
if not file == log_file_name:
os.remove(os.path.join(root, file))
@ -55,12 +41,12 @@ def clear_log():
def save_as():
# download log file
with open(CURRENT_LOG_FILE, 'rb') as f:
with open(INFO.CURRENT_LOG_FILE, 'rb') as f:
content = f.read()
st.download_button(
label=_("📥download log"),
data=content,
file_name=f'log_{SESSION_TIME}.txt',
file_name=f'log_{INFO.SESSION_TIME}.txt',
mime='text/plain'
)
@ -104,36 +90,37 @@ with st.sidebar:
operation_options = list(prompt_dictionary.keys())
operations = st.multiselect(_('Operations'), operation_options,
default=util.read_json_at(BRAIN_MEMO, f'operations_{SESSION_LANG}',
default=util.read_json_at(INFO.BRAIN_MEMO, f'operations_{SESSION_LANG}',
operation_options[0]))
last_question_model = util.read_json_at(BRAIN_MEMO, 'question_model', model_options[0])
last_question_model = util.read_json_at(INFO.BRAIN_MEMO, 'question_model', INFO.MODELS_OPTIONS[0])
# get index of last question model
question_model_index = util.get_index(model_options, last_question_model)
question_model = st.selectbox(_('Question Model'), model_options, index=question_model_index)
question_model_index = util.get_index(INFO.MODELS_OPTIONS, last_question_model)
question_model = st.selectbox(_('Question Model'), INFO.MODELS_OPTIONS, index=question_model_index)
operations_no_question = [op for op in operations if op != _('question')]
other_models = []
replace_tokens = []
for operation in operations_no_question:
last_model = util.read_json_at(BRAIN_MEMO, f'{operation}_model', model_options[0])
last_model = util.read_json_at(INFO.BRAIN_MEMO, f'{operation}_model', INFO.MODELS_OPTIONS[0])
# get index of last model
model_index = util.get_index(model_options, last_model)
model = st.selectbox(f"{operation} " + _('Model'), model_options, index=model_index)
model_index = util.get_index(INFO.MODELS_OPTIONS, last_model)
model = st.selectbox(f"{operation} " + _('Model'), INFO.MODELS_OPTIONS, index=model_index)
other_models.append(model)
temp = st.slider(_('Temperature'), 0.0, 1.0, value=util.read_json_at(BRAIN_MEMO, 'temp', 0.1))
max_tokens = st.slider(_('Max Tokens'), 850, 4500, value=util.read_json_at(BRAIN_MEMO, 'max_tokens', 1000))
temp = st.slider(_('Temperature'), 0.0, 1.0, value=util.read_json_at(INFO.BRAIN_MEMO, 'temp', 0.1))
max_tokens = st.slider(_('Max Tokens'), 850, 4500, value=util.read_json_at(INFO.BRAIN_MEMO, 'max_tokens', 1000))
with st.expander(label=_('Advanced Options')):
top_p = st.slider(_('Top_P'), 0.0, 1.0, value=util.read_json_at(BRAIN_MEMO, 'top_p', 1.0))
top_p = st.slider(_('Top_P'), 0.0, 1.0, value=util.read_json_at(INFO.BRAIN_MEMO, 'top_p', 1.0))
freq_panl = st.slider(_('Frequency penalty'), 0.0, 1.0,
value=util.read_json_at(BRAIN_MEMO, 'frequency_penalty', 0.0))
value=util.read_json_at(INFO.BRAIN_MEMO, 'frequency_penalty', 0.0))
pres_panl = st.slider(_('Presence penalty'), 0.0, 1.0,
value=util.read_json_at(BRAIN_MEMO, 'present_penalty', 0.0))
value=util.read_json_at(INFO.BRAIN_MEMO, 'present_penalty', 0.0))
chunk_size = st.slider(_('Chunk size'), 1500, 4500, value=util.read_json_at(BRAIN_MEMO, 'chunk_size', 4000))
chunk_count = st.slider(_('Answer count'), 1, 5, value=util.read_json_at(BRAIN_MEMO, 'chunk_count', 1))
chunk_size = st.slider(_('Chunk size'), 1500, 4500,
value=util.read_json_at(INFO.BRAIN_MEMO, 'chunk_size', 4000))
chunk_count = st.slider(_('Answer count'), 1, 5, value=util.read_json_at(INFO.BRAIN_MEMO, 'chunk_count', 1))
param = GPT.model_param.param(temp=temp,
max_tokens=max_tokens,
@ -148,17 +135,17 @@ with st.sidebar:
# info
st.markdown('---')
st.markdown(f"# {util.read_json_at(MANIFEST, 'name')}")
st.markdown(_('Version') + f": {util.read_json_at(MANIFEST, 'version')}")
st.markdown(_('Author') + f": {util.read_json_at(MANIFEST, 'author')}")
st.markdown("[" + _('Report bugs') + "]" + f"({util.read_json_at(MANIFEST, 'bugs')})")
st.markdown("[" + _('Github Repo') + "]" + f"({util.read_json_at(MANIFEST, 'homepage')})")
st.markdown(f"# {util.read_json_at(INFO.MANIFEST, 'name')}")
st.markdown(_('Version') + f": {util.read_json_at(INFO.MANIFEST, 'version')}")
st.markdown(_('Author') + f": {util.read_json_at(INFO.MANIFEST, 'author')}")
st.markdown("[" + _('Report bugs') + "]" + f"({util.read_json_at(INFO.MANIFEST, 'bugs')})")
st.markdown("[" + _('Github Repo') + "]" + f"({util.read_json_at(INFO.MANIFEST, 'homepage')})")
with header:
st.title(_('🧠GPT-Brain'))
st.text(_('This is my personal AI powered brain feeding my own Obsidian notes. Ask anything.'))
message(_("This is a beta version. Please [🪲report bugs](") + util.read_json_at(MANIFEST, 'bugs') + _(
message(_("This is a beta version. Please [🪲report bugs](") + util.read_json_at(INFO.MANIFEST, 'bugs') + _(
") if you find any."))
@ -196,17 +183,17 @@ def execute_brain(q):
# write param to json
for key in param_dict:
value = param_dict[key]
util.update_json(BRAIN_MEMO, key, value)
util.update_json(INFO.BRAIN_MEMO, key, value)
# write operation to json
util.update_json(BRAIN_MEMO, f'operations_{SESSION_LANG}', operations)
util.update_json(INFO.BRAIN_MEMO, f'operations_{SESSION_LANG}', operations)
# write question model to json
util.update_json(BRAIN_MEMO, 'question_model', question_model)
util.update_json(INFO.BRAIN_MEMO, 'question_model', question_model)
# write other models to json
for i in range(len(operations_no_question)):
util.update_json(BRAIN_MEMO, f'{operations_no_question[i]}_model', other_models[i])
util.update_json(INFO.BRAIN_MEMO, f'{operations_no_question[i]}_model', other_models[i])
# main
@ -216,7 +203,7 @@ with body:
with col1:
send = st.button(_('📩Send'))
with col2:
if os.path.exists(CURRENT_LOG_FILE):
if os.path.exists(INFO.CURRENT_LOG_FILE):
save_as()
# execute brain calculation
if not question == '' and send:

@ -0,0 +1,35 @@
import streamlit as st
import time
import modules.utilities as util
st.set_page_config(
page_title='GPT Brain'
)
# path
USER_DIR = '.user'
LOG_PATH = '.user/log'
BRAIN_MEMO = '.user/brain-memo.json'
MANIFEST = '.core/manifest.json'
SELECTED_LANGUAGE = '.user/language.json'
# activate session
if 'SESSION_TIME' not in st.session_state:
st.session_state['SESSION_TIME'] = time.strftime("%Y%m%d-%H%H%S")
if 'SESSION_LANGUAGE' not in st.session_state:
st.session_state['SESSION_LANGUAGE'] = util.read_json_at(SELECTED_LANGUAGE, 'SESSION_LANGUAGE')
if 'FILTER_ROW_COUNT' not in st.session_state:
st.session_state['FILTER_ROW_COUNT'] = util.read_json_at(BRAIN_MEMO, 'filter_row_count')
SESSION_TIME = st.session_state['SESSION_TIME']
CURRENT_LOG_FILE = f'{LOG_PATH}/log_{SESSION_TIME}.log'
# models
MODELS_OPTIONS = ['text-davinci-003', 'text-curie-001', 'text-babbage-001', 'text-ada-001']

@ -1,3 +1,4 @@
from modules import language
from modules import utilities
from modules import check_update
from modules import INFO

@ -2,6 +2,7 @@ import gettext
import streamlit as st
import modules.utilities as util
languages = util.read_json('.locals/languages.json')

@ -8,15 +8,10 @@ from tkinter import filedialog
import modules.language as language
import modules.utilities as util
import modules.INFO as INFO
user_dir = '.user/'
SESSION_LANG = st.session_state['SESSION_LANGUAGE']
prompt_dir = f'{user_dir}prompt/{SESSION_LANG}/'
brain_memo = f'{user_dir}brain-memo.json'
if 'FILTER_ROW_COUNT' not in st.session_state:
st.session_state['FILTER_ROW_COUNT'] = util.read_json_at(brain_memo, 'filter_row_count')
PROMPT_PATH = f'{INFO.USER_DIR}/prompt/{SESSION_LANG}/'
_ = language.set_language()
@ -36,12 +31,12 @@ def save(content, path, page='', json_value: dict = None):
st.success(_('✅File saved!'))
# write to json file
if page == '💽Brain Memory':
util.update_json(brain_memo, 'delimiter', json_value['delimiter'])
util.update_json(brain_memo, 'append_mode', json_value['append_mode'])
util.update_json(brain_memo, 'force_mode', json_value['force_mode'])
util.update_json(brain_memo, 'advanced_mode', json_value['advanced_mode'])
util.update_json(brain_memo, 'filter_info', json_value['filter_info'])
util.update_json(brain_memo, 'filter_row_count', json_value['filter_row_count'])
util.update_json(INFO.BRAIN_MEMO, 'delimiter', json_value['delimiter'])
util.update_json(INFO.BRAIN_MEMO, 'append_mode', json_value['append_mode'])
util.update_json(INFO.BRAIN_MEMO, 'force_mode', json_value['force_mode'])
util.update_json(INFO.BRAIN_MEMO, 'advanced_mode', json_value['advanced_mode'])
util.update_json(INFO.BRAIN_MEMO, 'filter_info', json_value['filter_info'])
util.update_json(INFO.BRAIN_MEMO, 'filter_row_count', json_value['filter_row_count'])
time.sleep(1)
# refresh page
st.experimental_rerun()
@ -162,7 +157,7 @@ def add_filter(num, val_filter_key, val_filter_logic, val_filter_val):
def filter_data(pages: list, add_filter_button, del_filter_button):
init_filter_infos = util.read_json_at(brain_memo, 'filter_info')
init_filter_infos = util.read_json_at(INFO.BRAIN_MEMO, 'filter_info')
filter_datas = []
if add_filter_button:
@ -185,7 +180,6 @@ def filter_data(pages: list, add_filter_button, del_filter_button):
init_logic = 'CONTAINS'
init_val = ''
if i == 0:
continue
# add filter
@ -213,10 +207,10 @@ def main():
st.text(_('Configuration of prompts.'))
# read selected file
last_sel_file = util.read_json_at(brain_memo, 'selected_prompt')
all_files = os.listdir(prompt_dir)
last_sel_file = util.read_json_at(INFO.BRAIN_MEMO, 'selected_prompt')
all_files = os.listdir(PROMPT_PATH)
# sort files base on creation time
all_files.sort(key=lambda x: os.path.getmtime(f'{prompt_dir}{x}'), reverse=True)
all_files.sort(key=lambda x: os.path.getmtime(f'{PROMPT_PATH}{x}'), reverse=True)
# index of last selected file
try:
@ -231,9 +225,9 @@ def main():
if st_toggle.st_toggle_switch(_('New Prompt'), label_after=True):
new_file = st.text_input(_('New Prompt Name'), value=_('new_prompt'))
if st.button(_('Create')):
util.write_file('', f'{prompt_dir}{new_file}.txt')
util.write_file('', f'{PROMPT_PATH}{new_file}.txt')
# change select file to new fie
util.update_json(brain_memo, 'selected_prompt', selected_file)
util.update_json(INFO.BRAIN_MEMO, 'selected_prompt', selected_file)
# refresh page
st.experimental_rerun()
with col2:
@ -243,18 +237,18 @@ def main():
if not is_core:
if st_toggle.st_toggle_switch(_('Delete Prompt'), label_after=True):
if st.button(_('❌Delete')):
util.delete_file(f'{prompt_dir}{selected_file}')
util.delete_file(f'{PROMPT_PATH}{selected_file}')
# refresh page
st.experimental_rerun()
selected_path = prompt_dir + selected_file
selected_path = PROMPT_PATH + selected_file
mod_text = st.text_area(_('Prompts'), value=util.read_file(selected_path), height=500)
save(mod_text, selected_path)
if menu == _('💽Brain Memory'):
st.title(_('💽Brain Memory'))
st.text(_('Modify your brain knowledge base.'))
memory_data = util.read_file(f'{user_dir}input.txt')
memory_data = util.read_file(f'{INFO.USER_DIR}/input.txt')
col1, col2 = st.columns(2)
with col1:
@ -262,23 +256,23 @@ def main():
with col2:
if st.button(_('📁Select Note Directory')):
note_dir = select_directory()
util.update_json(brain_memo, 'note_dir', note_dir)
note_dir = st.text_input(_('Note Directory'), value=util.read_json_at(brain_memo, 'note_dir'),
util.update_json(INFO.BRAIN_MEMO, 'note_dir', note_dir)
note_dir = st.text_input(_('Note Directory'), value=util.read_json_at(INFO.BRAIN_MEMO, 'note_dir'),
placeholder=_('Select Note Directory'), key='note_dir')
col1, col2, col3, col4 = st.columns([1, 2, 2, 2])
with col1:
delimiter_memo = util.read_json_at(brain_memo, 'delimiter')
delimiter_memo = util.read_json_at(INFO.BRAIN_MEMO, 'delimiter')
delimiter = st.text_input(_('Delimiter'), delimiter_memo, placeholder='e.g. +++')
with col2:
append_mode = st.checkbox(_('Append Mode'), value=util.read_json_at(brain_memo, 'append_mode'))
append_mode = st.checkbox(_('Append Mode'), value=util.read_json_at(INFO.BRAIN_MEMO, 'append_mode'))
force_delimiter = st.checkbox(_('Force Delimiter'),
value=util.read_json_at(brain_memo, 'force_mode'))
value=util.read_json_at(INFO.BRAIN_MEMO, 'force_mode'))
with col3:
advanced_mode = st_toggle.st_toggle_switch(_('Filter Mode'),
label_after=True,
default_value=util.read_json_at(brain_memo,
default_value=util.read_json_at(INFO.BRAIN_MEMO,
'advanced_mode', False))
with col4:
if advanced_mode:
@ -304,7 +298,7 @@ def main():
memory_data = modified_data
mod_text = st.text_area(_('Raw Memory Inputs'), value=memory_data, height=500)
save(mod_text, f'{user_dir}input.txt', _('💽Brain Memory'), {
save(mod_text, f'{INFO.USER_DIR}/input.txt', _('💽Brain Memory'), {
'delimiter': delimiter,
'append_mode': append_mode,
'force_mode': force_delimiter,
@ -316,8 +310,8 @@ def main():
if menu == _('🔑API Keys'):
st.title(_('🔑API Keys'))
st.text(_('Configure your OpenAI API keys.'))
mod_text = st.text_input(_('API Keys'), value=util.read_file(f'{user_dir}API-KEYS.txt'))
save(mod_text, f'{user_dir}API-KEYS.txt')
mod_text = st.text_input(_('API Keys'), value=util.read_file(f'{INFO.USER_DIR}/API-KEYS.txt'))
save(mod_text, f'{INFO.USER_DIR}/API-KEYS.txt')
if __name__ == '__main__':

Loading…
Cancel
Save