Spaces:
Runtime error
Runtime error
from annotated_text import annotated_text | |
import ast | |
import streamlit as st | |
import openai | |
import os | |
import sys | |
from gpt_based_function import gpt_summary_generator, gpt_keyword_highlighter, gpt_text_naturalizer, gpt_explanation_generator, gpt_easier_text_generator, gpt_rater | |
import concurrent.futures | |
from tqdm import tqdm | |
# current_path = '/Users/kintch/PycharmProjects/jungu_sgi/summary_with_gpt' | |
# os.chdir(current_path) | |
# sys.path.append(current_path) | |
openai.api_key = os.getenv("OPENAI_API_KEY") | |
st.set_page_config(layout="wide") | |
user_text = """๋ฏผ์ฃผ์ฃผ์ ์ฌํ๋ ๊ตญ๋ฏผ์ด ์ ์น์ ์ฐธ์ฌํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค. ๊ทธ๋ฌํ ๊ถ๋ฆฌ๋ฅผ ์ฐธ์ ๊ถ์ด๋ผ ํ๋๋ฐ, ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก โ์ ๊ฑฐโ๋ก ์คํ๋๋ค. ์ ๊ฑฐ๋ ์ฌํ ์ง๋จ์ ๋ํ์๋ ๊ณต์ง์๋ฅผ ์ ์ถํ์ฌ ๊ทธ๋ค์๊ฒ ๋ํ์ฑ์ ๋ถ์ฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋์ ํฌํ์จ์ ๋ฏผ์ฃผ์ฃผ์์ ์ ๋น์ฑ ํ๋ณด์ ๊น์ ๊ด๋ จ์ด ์๋ค. | |
์ ๊ฑฐ ํฌํ ์ ๋์๋ ํฌํ๊ถ ํ์ฌ๋ฅผ ํฌํ์์ ์์ ์์ฌ์ ๋งก๊ธฐ๋ โ์์ ํฌํ์ โ์ ํฌํ๊ถ ํ์ฌ๋ฅผ ๊ตญ๋ฏผ์ ์๋ฌด๋ก ๊ฐ์ฃผํ๊ณ ์ ๋นํ ์ฌ์ ์์ด ๊ธฐ๊ถํ๋ฉด ๋ฒ์ ์ ์ฌ๋ฅผ ๊ฐํ๋ โ์๋ฌด ํฌํ์ โ๊ฐ ์๋ค. ์ฐ๋ฆฌ๋๋ผ๋ ์์ ํฌํ์ ๋ฅผ ์ฑํํ๊ณ ์๋๋ฐ, ์ต๊ทผ ์น๋ฅธ ์ ๊ฑฐ์ ํ๊ท ํฌํ์จ์ด 50ํผ์ผํธ๋๋ก ๋ํ๋ฌ๋ค. ๊ฒฝ์ ๊ฐ๋ฐ ํ๋ ฅ ๊ธฐ๊ตฌ(OECD) ํ์๊ตญ ํ๊ท ์ด 70ํผ์ผํธ๋์ธ ๊ฒ์ ์๊ฐํ๋ฉด ๋งค์ฐ ๋ฎ์ ์์น๋ผ ํ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ด ์ง์๋์ ์๋ฌด ํฌํ์ ๋ฅผ ๋์ ํด์ผ ํ๋ค๋ ์๊ฒฌ์ด ์ ์๋์๊ณ , ์์ ํฌํ์ ๊ฐ ๋ฏผ์ฃผ์ฃผ์์ ์์น์ ๋ง์ผ๋ฏ๋ก ์ด๋ฅผ ์ ์งํด์ผ ํ๋ค๋ ์๊ฒฌ๊ณผ ๋๋ฆฝํ๊ณ ์๋ค. | |
์๋ฌด ํฌํ์ ๋ฅผ ๋์ ํ์๋ ์ธก์ ๋ฎ์ ํฌํ์จ๋ก ํฌํ ๊ฒฐ๊ณผ์ ์ ๋น์ฑ์ ํ๋ณดํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ๋ ์๋ฌด ํฌํ์ ์ ๊ฐ์ ์ฑ๊ณผ ๋ฒ์ ์ ์ฌ๊ฐ ํฌํ์จ์ ๋์ด๋ฏ๋ก ํฌํ์จ์ด ๋ฎ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตญ๋ฏผ ๋๋ถ๋ถ์ด ํฌํ์ ์ฐธ์ฌํ๊ฒ ๋๋ฉด ์ ์น์ธ๋ค์ด ๋ชจ๋ ๊ณ์ธต์ ์ง์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ์ ์ฑ ๊ฒฝ์๋ ฅ์ ๋์ด๋ ค ํ ๊ฒ์ด๋ฏ๋ก ์ ์น ์์ธ ๊ณ์ธต์ ๋์ฑ ๊ด์ฌ์ ์๋ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. | |
๋ฐ๋ฉด ์๋ฌด ํฌํ์ ์ ๋ฐ๋ํ๋ ์ธก์ ํ์ฌ ์ฐ๋ฆฌ๋๋ผ์ ํฌํ์จ์ด ์ ์น ์ง๋์๋ค์ ๋ํ์ฑ์ ํผ์ํ ๋งํผ ์ฌ๊ฐํ ์ํฉ์ ์๋๋ผ๊ณ ์ฃผ์ฅํ๋ค. ๋ ํฌํ์จ์ ๋์ด๋ ๊ฒ๋ณด๋ค ๊ตญ๋ฏผ์ ์ ๋ขฐ๋ฅผ ํ๋ณตํ๋ ๊ฒ์ด ๋ ์ค์ํ๊ณ , ์๋ฏผ ๊ต์ก์ด๋ ๋ชจ์ ํฌํ ๊ต์ก ํ๋ก๊ทธ๋จ์ผ๋ก๋ ํฌํ์จ ์์น์ ๊ธฐ๋ํ ์ ์๋ค๋ฉฐ ์๋ฌด ํฌํ์ ์ ๋์ ๋ง์ด ํฌํ์จ์ด๋ ์ ์น์ ๊ด์ฌ์ ๋์ด๋ ํด๊ฒฐ ๋ฐฉ์์ ์๋๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด ํฌํ์ ๋ฅผ ๋์ ํ๋ฉด, ์ ์ถ๋ ์ ์น์ธ๋ค์ด ๋์ ํฌํ์จ์ ํ๊ณ๋ก ์ํ๋ฌด์ธ์ ํ๋๋ฅผ ๊ฐ๋ ๋ถ์์ฉ์ด ์๊ธด๋ค๋ ๊ฐ ํ๋ณด์๋ฅผ ์ ๋ชจ๋ฅด๋ ์ํ์์ ํฌํํ๋ ์ผ์ด ๋ฐ์ํ์ฌ ๊ตญ๋ฏผ์ ๋ป์ด ์คํ๋ ค ์๊ณก๋ ์ ์๋ค๋ฉฐ ์ฐ๋ ค์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ค.""" | |
# gpt_summary = gpt_summary_generator(user_text) | |
user_text_paragraphs = user_text.split("\n") #๋ฌธ๋จ๋ณ๋ก ์ชผ๊ฐ๊ธฐ | |
is_easier_button_pressed = [False]*len(user_text_paragraphs) | |
def run(list_sum): | |
with concurrent.futures.ThreadPoolExecutor() as executor: | |
results = list(tqdm(executor.map(gpt_keyword_highlighter, list_sum), total=len(list_sum))) | |
return results | |
# SHOUD BE ํ์ฑํ | |
# highlighted_texts_list = run(user_text_paragraphs) | |
## ํฌ์ธํธ ๋ถ๋ถ ์ถ๊ฐ | |
if 'points' not in st.session_state: | |
st.session_state.points = 3 | |
if 'history' not in st.session_state: | |
st.session_state.history = [] | |
def update_points(value): | |
""" ํฌ์ธํธ ์ ๋ฐ์ดํธ """ | |
st.session_state.points += value | |
# display_points() # ํฌ์ธํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํ๊ธฐ ์ํด | |
def display_points(): | |
""" ํฌ์ธํธ ํ์ """ | |
st.sidebar.header(f"Current Points: {st.session_state.points}") | |
def display_markdown_table(): | |
"""์ง๊ธ๊น์ง ์ฌ์ฉํ ๊ธฐ๋ฅ๊ณผ ํฌ์ธํธ๋ฅผ ํ์ํ๋ ํ์คํ ๋ฆฌ ํจ์, ๊ธฐ๋ฅ์ ๋๋ฅธ ์์์ ํฌ์ธํธ ๋ณํ์ ํ์ฌ ํฌ์ธํธ๋ฅผ ํ๋ก ์ ๋ฆฌ""" | |
markdown_table = """| ์์ | ์ ํํ ๊ธฐ๋ฅ | ํฌ์ธํธ ๋ณํ | ํ์ฌ ํฌ์ธํธ | | |
| --- | --- | --- | --- | | |
""" | |
for i, step in enumerate(st.session_state.history): | |
markdown_table += f"| {i+1} | {step[0]} | {step[1]} | {step[2]} |\n" | |
st.sidebar.markdown(markdown_table) | |
##๊ธฐ๋ฅ์ ํจ์๋ก ๋๋์ด์ ๊ตฌํ | |
col, _ = st.columns(2) | |
def display_passage(user_text): | |
# st.header("์ง๋ฌธ") | |
global text_container | |
text_container = st.container() # ์ถ๊ฐ๋ ์ฝ๋ | |
# ๋ฏธ๋ฆฌ ๊ณต๊ฐ ํ๋ณด | |
global text_placeholder | |
text_placeholder = text_container.empty() | |
text_placeholder.write(user_text, unsafe_allow_html=True) | |
#์ ์ธํ ๋ณ์ ๋ค๋ฅธ ํจ์์์ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด return | |
return text_placeholder, text_container, user_text | |
def display_preset_func_btns(col): | |
# st.header("์ธ๊ณต์ง๋ฅ ์ฌ์ฉํ๊ธฐ") | |
# ๋ฒํผ row | |
cols = st.columns(2) | |
with cols[0]: | |
btn_gpt_keyword_func = st.button("ํค์๋ ์ฐพ์์ค") | |
if btn_gpt_keyword_func and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ | |
update_points(-1) # ํฌ์ธํธ ๊ฐ์ | |
st.session_state.history.append(["ํค์๋ ์ฐพ์์ค", -1, st.session_state.points]) | |
global is_easier_button_pressed | |
is_easier_button_pressed = [True]*len(user_text_paragraphs) | |
# ๋ค๋ฅธ ๋ก์ง ๊ณ ๋ ค | |
#๋ค๋ฅธ ์ง๋ฌธ ๋ฃ๊ธฐ | |
# global highlighted_texts_list | |
# highlighted_text = highlighted_texts_list[-1] | |
# | |
# # ๊ธฐ์กด ์ง๋ฌธ ์ง์ฐ๊ธฐ | |
# text_placeholder.empty() | |
# | |
# #text_container์ highlight๋ ํ ์คํธ๋ฅผ ์ถ๋ ฅ | |
# with text_container: | |
# exec(highlighted_text) | |
# st.markdown(highlighted_text, unsafe_allow_html=True) | |
else: | |
if st.session_state.points == 0: | |
#ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ๊ตฌ ์ถ๊ฐ | |
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ํค์๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.") | |
pass | |
with cols[1]: | |
global btn_gpt_easier_text_func | |
btn_gpt_easier_text_func = st.button("์ฝ๊ฒ ๋ค์ ์๋ ค์ค") | |
if btn_gpt_easier_text_func and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ | |
update_points(-1) # ํฌ์ธํธ ๊ฐ์ | |
st.session_state.history.append(["์ฝ๊ฒ ๋ค์ ์๋ ค์ค", -1, st.session_state.points]) | |
# return btn_gpt_keyword_func, btn_gpt_easier_text_func | |
def display_users_summarization(col): | |
# st.header("์์ฝ ๊ฒฐ๊ณผ") | |
global user_summary | |
user_summary = st.text_area("ํ ๋ฌธ๋จ์ฉ ์ฝ๊ณ ์ ์ฒด ๊ธ์ ์์ฝํด๋ณด์ธ์.", key='user_summary') | |
cols = st.columns(2) | |
with cols[0]: | |
global btn_gpt_naturalize_func | |
btn_gpt_naturalize_func = st.button("๊ธ ๋ค๋ฌ๊ธฐ") | |
if btn_gpt_naturalize_func and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ | |
update_points(-1) # ํฌ์ธํธ ๊ฐ์ | |
st.session_state.history.append(["๊ธ ๋ค๋ฌ๊ธฐ", -1, st.session_state.points]) | |
with cols[1]: | |
btn_gpt_rating_func = st.button("์ฑ์ ํ๊ธฐ") | |
if btn_gpt_rating_func and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ | |
update_points(1) # ํฌ์ธํธ ์ฆ๊ฐ | |
st.session_state.history.append(["์ฑ์ ํ๊ธฐ", +1, st.session_state.points]) #fix from -1 to +1 | |
gpt_rated_result = gpt_rater(user_summary) | |
st.write(f"์ฑ์ ํ๊ธฐ: {gpt_rated_result}") | |
# https://discuss.streamlit.io/t/streamlit-button-disable-enable/31293 # ๋ฒํผ ๋นํ์ฑํ ๊ด๋ จ ์ฐธ๊ณ (์์ง์ ์๋จ) | |
pass | |
else: | |
if st.session_state.points == 0: | |
# ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ๊ตฌ ์ถ๊ฐ | |
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ์ฑ์ ํ๊ธฐ๋ฅผ ํ ์ ์์ต๋๋ค.") | |
pass | |
if btn_gpt_naturalize_func and st.session_state.points > 0: | |
naturalized_text = gpt_text_naturalizer(user_summary) # ๋ค์์ฐ๊ธฐ ํจ์ | |
st.write(f"๊ธ ๋ค๋ฌ๊ธฐ: {naturalized_text}") | |
pass | |
else: | |
if st.session_state.points == 0: | |
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ๊ธ ๋ค๋ฌ๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.") | |
pass | |
btn_submit_summarized_text = st.button("์ ์ถํ๊ธฐ") | |
if btn_submit_summarized_text: | |
# ๊ตฌ๊ธ ๋๋ผ์ด๋ธ api ์ด์ฉํ์ฌ ์ ๋ก๋ | |
st.write("์ ์ถ ๋์์ต๋๋ค.") | |
pass | |
def display_qna_with_gpt(): | |
with st.container(): | |
cols = st.columns(2) | |
# st.header("๊ฒฐ๊ณผ") | |
with cols[0]: | |
global btn_explanation | |
btn_explanation = st.button("์ถ๊ฐ ์ค๋ช ") | |
if btn_explanation and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ | |
update_points(1) # ํฌ์ธํธ ์ฆ๊ฐ | |
st.session_state.history.append(["์ถ๊ฐ ์ค๋ช ", 1, st.session_state.points]) | |
user_input = st.text_area("์ถ๊ฐ ์ค๋ช ์ด ํ์ํ๊ฑฐ๋ ๋ค์ ์ฐ๊ณ ์ถ์ ๋ด์ฉ์ ์ ๋ ฅํ์ธ์.", key='user_input') | |
if btn_explanation and st.session_state.points > 0: | |
explanation = gpt_explanation_generator(user_input, user_text) | |
# ์ถ๊ฐ ์ค๋ช | |
st.write(f"์ถ๊ฐ ์ค๋ช : {explanation}") | |
pass | |
else: | |
if st.session_state.points == 0: | |
#ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ๊ตฌ ์ถ๊ฐ | |
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ์ถ๊ฐ ์ค๋ช ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.") | |
pass | |
if btn_gpt_easier_text_func and st.session_state.points > 0: | |
easier_text = gpt_easier_text_generator(user_input) | |
# ์ฝ๊ฒ ๋ค์ ์๋ ค์ค์ผ๋ก ๊ฒฐ๊ณผ ์ถ๋ ฅ | |
st.write(f"์ฌ์ด ๊ธ: {easier_text}") | |
pass | |
else: | |
if st.session_state.points == 0: | |
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ์ฝ๊ฒ ๋ค์ ์๋ ค์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.") | |
pass | |
def main(): | |
st.title("์ฑGPT์ ํจ๊ป ์์ฝํ๊ธฐ") | |
#ํฌ์ธํธ ์์คํ ์ค๋ช ์ถ๊ฐ | |
st.sidebar.markdown("ํฌ์ธํธ๋ 3์ ๋ถํฐ ์์ํด์, **ํค์๋ ์ฐพ์์ค**, **์ฝ๊ฒ ๋ค์ ์๋ ค์ค**, **๊ธ ๋ค๋ฌ๊ธฐ**๋ฅผ ํ ๋ 1์ ์ฉ ๊ฐ์ํฉ๋๋ค. **์ถ๊ฐ ์ค๋ช **๊ณผ **์ฑ์ ํ๊ธฐ**๋ฅผ ํ ๋ 1์ ์ฉ ์ฆ๊ฐํฉ๋๋ค. ํฌ์ธํธ๊ฐ 0์ ์ด ๋๋ฉด ๋ ์ด์ ์์ ์ ํ ์ ์์ต๋๋ค. ") | |
# col1, col2 = st.columns(2) | |
display_preset_func_btns(col) | |
# Paragraph Tabs | |
paragraph_tab1, paragraph_tab2, paragraph_tab3, paragraph_tab4 = st.tabs(["๋จ๋ฝ1", "๋จ๋ฝ2", "๋จ๋ฝ3", "๋จ๋ฝ4"]) | |
with paragraph_tab1: | |
if is_easier_button_pressed[0]: | |
text = ast.literal_eval(highlighted_texts_list[0][15:-1]) | |
annotated_text(*text) #exec ๋์ ์ธ์๋ก ๋ฐ๋ก ์ ๋ฌ | |
else: | |
display_passage(user_text_paragraphs[0]) | |
with paragraph_tab2: | |
display_passage(user_text_paragraphs[1]) | |
with paragraph_tab3: | |
display_passage(user_text_paragraphs[2]) | |
with paragraph_tab4: | |
display_passage(user_text_paragraphs[3]) | |
# User Input Tabs | |
user_input_tab1, user_input_tab2 = st.tabs(["์์ฝํ๊ธฐ", "์ฑGPT์๊ฒ ์ง๋ฌธํ๊ธฐ"]) | |
with user_input_tab1: | |
display_users_summarization(col) | |
with user_input_tab2: | |
display_qna_with_gpt() | |
#ํฌ์ธํธ ํ์ | |
display_points() | |
#ํฌ์ธํธ ๋ณํ ํ์ | |
display_markdown_table() | |
if __name__ == "__main__": | |
main() |