Spaces:
Runtime error
Runtime error
File size: 10,184 Bytes
c0ab8a1 c983ef1 62ec04b 59bf340 62ec04b 59bf340 c983ef1 a0942f4 c983ef1 59bf340 c0ab8a1 a0942f4 c0ab8a1 62ec04b c0ab8a1 a0942f4 62ec04b a0942f4 62ec04b c0ab8a1 c983ef1 c0ab8a1 c983ef1 59bf340 c983ef1 59bf340 c983ef1 c0ab8a1 c983ef1 c0ab8a1 c983ef1 62ec04b c0ab8a1 59bf340 c983ef1 c0ab8a1 c983ef1 59bf340 c983ef1 59bf340 c983ef1 59bf340 c983ef1 62ec04b |
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 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
from annotated_text import annotated_text
import streamlit as st
import openai
from gpt_based_function import gpt_keyw_extract_n_annotator
import concurrent.futures
import os, sys
from tqdm import tqdm
# current_path = '/Users/kintch/PycharmProjects/jungu_sgi/keyword_konan'
# os.chdir(current_path)
# sys.path.append(current_path)
# OpenAI API ์ค์ (ํ๊ฒฝ ๋ณ์์์ ์ฝ์ด์ด)
openai.api_key = os.getenv("OPENAI_API_KEY") # ์ค์ ์ฝ๋์์ ์ฃผ์ ํด์
st.set_page_config(layout="wide")
col, _ = st.columns(2)
preset_learning_text = """๋ฏผ์ฃผ์ฃผ์ ์ฌํ๋ ๊ตญ๋ฏผ์ด ์ ์น์ ์ฐธ์ฌํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค. ๊ทธ๋ฌํ ๊ถ๋ฆฌ๋ฅผ ์ฐธ์ ๊ถ์ด๋ผ ํ๋๋ฐ, ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก โ์ ๊ฑฐโ๋ก ์คํ๋๋ค. ์ ๊ฑฐ๋ ์ฌํ ์ง๋จ์ ๋ํ์๋ ๊ณต์ง์๋ฅผ ์ ์ถํ์ฌ ๊ทธ๋ค์๊ฒ ๋ํ์ฑ์ ๋ถ์ฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋์ ํฌํ์จ์ ๋ฏผ์ฃผ์ฃผ์์ ์ ๋น์ฑ ํ๋ณด์ ๊น์ ๊ด๋ จ์ด ์๋ค.
์ ๊ฑฐ ํฌํ ์ ๋์๋ ํฌํ๊ถ ํ์ฌ๋ฅผ ํฌํ์์ ์์ ์์ฌ์ ๋งก๊ธฐ๋ โ์์ ํฌํ์ โ์ ํฌํ๊ถ ํ์ฌ๋ฅผ ๊ตญ๋ฏผ์ ์๋ฌด๋ก ๊ฐ์ฃผํ๊ณ ์ ๋นํ ์ฌ์ ์์ด ๊ธฐ๊ถํ๋ฉด ๋ฒ์ ์ ์ฌ๋ฅผ ๊ฐํ๋ โ์๋ฌด ํฌํ์ โ๊ฐ ์๋ค. ์ฐ๋ฆฌ๋๋ผ๋ ์์ ํฌํ์ ๋ฅผ ์ฑํํ๊ณ ์๋๋ฐ, ์ต๊ทผ ์น๋ฅธ ์ ๊ฑฐ์ ํ๊ท ํฌํ์จ์ด 50ํผ์ผํธ๋๋ก ๋ํ๋ฌ๋ค. ๊ฒฝ์ ๊ฐ๋ฐ ํ๋ ฅ ๊ธฐ๊ตฌ(OECD) ํ์๊ตญ ํ๊ท ์ด 70ํผ์ผํธ๋์ธ ๊ฒ์ ์๊ฐํ๋ฉด ๋งค์ฐ ๋ฎ์ ์์น๋ผ ํ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ด ์ง์๋์ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํด์ผ ํ๋ค๋ ์๊ฒฌ์ด ์ ์๋์๊ณ , ์์ ํฌํ์ ๊ฐ ๋ฏผ์ฃผ์ฃผ์์ ์์น์ ๋ง์ผ๋ฏ๋ก ์ด๋ฅผ ์ ์งํด์ผ ํ๋ค๋ ์๊ฒฌ๊ณผ ๋๋ฆฝํ๊ณ ์๋ค.
์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ์๋ ์ธก์ ๋ฎ์ ํฌํ์จ๋ก ํฌํ ๊ฒฐ๊ณผ์ ์ ๋น์ฑ์ ํ๋ณดํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ๋ ์๋ฌด ํฌํ์ ์ ๊ฐ์ ์ฑ๊ณผ ๋ฒ์ ์ ์ฌ๊ฐ ํฌํ์จ์ ๋์ด๋ฏ๋ก ํฌํ์จ์ด ๋ฎ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตญ๋ฏผ ๋๋ถ๋ถ์ด ํฌํ์ ์ฐธ์ฌํ๊ฒ ๋๋ฉด ์ ์น์ธ๋ค์ด ๋ชจ๋ ๊ณ์ธต์ ์ง์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ์ ์ฑ
๊ฒฝ์๋ ฅ์ ๋์ด๋ ค ํ ๊ฒ์ด๋ฏ๋ก ์ ์น ์์ธ ๊ณ์ธต์ ๋์ฑ ๊ด์ฌ์ ์๋ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค.
๋ฐ๋ฉด ์๋ฌด ํฌํ์ ์ ๋ฐ๋ํ๋ ์ธก์ ํ์ฌ ์ฐ๋ฆฌ๋๋ผ์ ํฌํ์จ์ด ์ ์น ์ง๋์๋ค์ ๋ํ์ฑ์ ํผ์ํ ๋งํผ ์ฌ๊ฐํ ์ํฉ์ ์๋๋ผ๊ณ ์ฃผ์ฅํ๋ค. ๋ ํฌํ์จ์ ๋์ด๋ ๊ฒ๋ณด๋ค ๊ตญ๋ฏผ์ ์ ๋ขฐ๋ฅผ ํ๋ณตํ๋ ๊ฒ์ด ๋ ์ค์ํ๊ณ , ์๋ฏผ ๊ต์ก์ด๋ ๋ชจ์ ํฌํ ๊ต์ก ํ๋ก๊ทธ๋จ์ผ๋ก๋ ํฌํ์จ ์์น์ ๊ธฐ๋ํ ์ ์๋ค๋ฉฐ ์๋ฌด ํฌํ์ ์ ๋์
๋ง์ด ํฌํ์จ์ด๋ ์ ์น์ ๊ด์ฌ์ ๋์ด๋ ํด๊ฒฐ ๋ฐฉ์์ ์๋๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ๋ฉด, ์ ์ถ๋ ์ ์น์ธ๋ค์ด ๋์ ํฌํ์จ์ ํ๊ณ๋ก ์ํ๋ฌด์ธ์ ํ๋๋ฅผ ๊ฐ๋ ๋ถ์์ฉ์ด ์๊ธด๋ค๋ ๊ฐ ํ๋ณด์๋ฅผ ์ ๋ชจ๋ฅด๋ ์ํ์์ ํฌํํ๋ ์ผ์ด ๋ฐ์ํ์ฌ ๊ตญ๋ฏผ์ ๋ป์ด ์คํ๋ ค ์๊ณก๋ ์ ์๋ค๋ฉฐ ์ฐ๋ ค์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ค.
"""
# ํค์๋ ์ฐพ๊ธฐ ์คํํด์ ๋ณ์์ keep
# preset_keyw_func(preset_learning_texts)
preset_learning_texts = preset_learning_text.split("\n") #๋ฌธ๋จ๋ณ๋ก ์ชผ๊ฐ๊ธฐ
highlighted_texts_list = list()
tmp = str()
tmp_list = list()
for k in range(len(preset_learning_texts)):
print(k)
text = preset_learning_texts[k] #๋ฌธ๋จ๋ณ ํ
์คํธ
tmp += text #1๋ฌธ๋จ, 1+2๋ฌธ๋จ, 1+2+3๋ฌธ๋จ ...
tmp_list.append(tmp)
#to be updated: ํ ๋ฒ ํด๋ฆญํ ๋ ๋ง๋ค, +1 ๋ฌธ๋จ์ฉ ํค์๋ ๋ถ์ ๊ฒฐ๊ณผ ๋ณด์ฌ์ฃผ๊ธฐ
def run(list_sum):
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(tqdm(executor.map(gpt_keyw_extract_n_annotator, list_sum), total=len(list_sum)))
return results
highlighted_texts_list = run(tmp_list)
def display_passage(col):
st.header("์ง๋ฌธ")
global text_container
text_container = st.container() # ์ถ๊ฐ๋ ์ฝ๋
# ๋ฏธ๋ฆฌ ๊ณต๊ฐ ํ๋ณด
global text_placeholder
text_placeholder = text_container.empty()
global preset_learning_text
text_placeholder.write(preset_learning_text)
#์ ์ธํ ๋ณ์ ๋ค๋ฅธ ํจ์์์ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด return
return text_placeholder, text_container, preset_learning_text
def display_summary(col):
st.header("์์ฝ ๊ฒฐ๊ณผ")
global user_summary
user_summary = st.text_area("์์ฝ๊ฒฐ๊ณผ๋ฅผ ์ ์ถํ์ธ์.")
cols = st.columns(2)
with cols[0]:
btn_submit = st.button("์ ์ถ")
if btn_submit:
#๊ตฌ๊ธ ๋๋ผ์ด๋ธ api ์ฐ๊ฒฐ ๋ก์ง ์ถํ ์ถ๊ฐ
st.write("์ ์ถ ๋์์ต๋๋ค.")
pass
with cols[1]:
btn_score = st.button("์ฑ์ ํ๊ธฐ")
if btn_score:
#๋ฃจ๋ธ๋ฆญ์ ์ํ ์ฑ์
lubric = """์ฑ์ ๊ธฐ์ค ์: ๋ฌธ์ฅ์ ์ฃผ์ ๋ฅผ ํ์
ํ๊ณ , ์ฃผ์ ๋ด์ฉ์ ํ์
ํ ์ ์๋ค. ์ค: ๋ฌธ์ฅ์ ์ฃผ์ ๋ฅผ ํ์
ํ ์ ์๋ค. ํ: ๋ฌธ์ฅ์ ์ฃผ์ ๋ฅผ ํ์
ํ ์ ์๋ค."""
#๋ฃจ๋ธ๋ฆญ ๊ธฐ์ค์ ์ด์ฉํด์ ์
๋ ฅ์นธ์ ์
๋ ฅํ ๋ด์ฉ์ ์ฑ์ ํ๋ ์์ด๋ก ํ๋กฌํํธ
explanation_task = f"{lubric}์ ๊ธฐ์ค์ผ๋ก {user_summary}์ ๋ด์ฉ์ ์ฑ์ ํด์ฃผ์ธ์. ์ฑ์ ๊ธฐ์ค์ ๊ณต๊ฐํ์ง ๋ง๊ณ ์, ์ค,ํ๋ก ๋๋๊ณ ๊ฐ๋จํ ์ด์ ๋ฅผ ์๋ ค์ฃผ์ธ์."
messages = [
{"role": "system", "content": "You are a helpful assistant. use only korean"},
{"role": "user", "content": explanation_task}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=messages,
temperature=0.1,
max_tokens=2500
)
explanation = response['choices'][0]['message']['content']
st.write(f"์ฑ์ ํ๊ธฐ: {explanation}")
def display_input_btns(col):
st.header("์ธ๊ณต์ง๋ฅ ์ฌ์ฉํ๊ธฐ")
global user_input
user_input = st.text_area("๋ด์ฉ์ ๋ฃ๊ณ ๋ฒํผ์ ๋๋ฌ์ฃผ์ธ์:", "")
st.write(user_input)
# ๋ฒํผ row
cols = st.columns(4)
with cols[0]:
btn_keyword = st.button("ํค์๋ ์ฐพ๊ธฐ")
if btn_keyword:
# ํค์๋ ์ฐพ๊ธฐ ๋ก์ง
# highlighted_text = gpt_keyw_extract_n_annotator(preset_learning_text) # Should Be DELETED
global highlighted_texts_list
highlighted_text = highlighted_texts_list[-1]
# ๊ธฐ์กด ์ง๋ฌธ ์ง์ฐ๊ธฐ
text_placeholder.empty()
# ์๋ก์ด ๋ด์ฉ ๋ฃ๊ธฐ
with text_container:
exec(highlighted_text)
with cols[1]:
global btn_explanation
btn_explanation= st.button("์ถ๊ฐ ์ค๋ช
")
with cols[2]:
global btn_simple
btn_simple = st.button("์ฌ์ด ํํ")
with cols[3]:
global btn_rewrite
btn_rewrite = st.button("๋ค์ ์ฐ๊ธฐ")
return btn_keyword, btn_explanation, btn_simple, btn_rewrite
def display_output():
with st.container():
st.header("๊ฒฐ๊ณผ")
if btn_explanation:
explanation_task = f"Explain the term '{user_input}' in a simple manner, based on the context of the following passage: {preset_learning_text}"
messages = [
{"role": "system", "content": "You are a helpful assistant that explains complex topics in a way that an elementary school student can understand. use only korean"},
{"role": "user", "content": explanation_task}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=messages,
temperature=0.1,
max_tokens=200
)
explanation = response['choices'][0]['message']['content']
# ์ถ๊ฐ ์ค๋ช
st.write(f"์ถ๊ฐ ์ค๋ช
: {explanation}")
pass
if btn_simple:
explanation_task = f"Describe the fingerprint of '{preset_learning_text}' in a way that an elementary school student could understand."
messages = [
{"role": "system", "content": "You are a helpful assistant that explains complex topics in a way that an elementary school student can understand. use only korean"},
{"role": "user", "content": explanation_task}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=messages,
temperature=0.1,
max_tokens=2500
)
explanation = response['choices'][0]['message']['content']
# ์ฌ์ด ํํ์ผ๋ก ๊ฒฐ๊ณผ ์ถ๋ ฅ
st.write(f"์ฌ์ด ๊ธ: {explanation}")
pass
if btn_rewrite:
explanation_task = f"Rewrite the contents of '{user_input}' so that it will pass the writing test."
messages = [
{"role": "system", "content": "You are a helpful assistant. use only korean"},
{"role": "user", "content": explanation_task}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=messages,
temperature=0.1,
max_tokens=2500
)
explanation = response['choices'][0]['message']['content']
st.write(f"๋ค์ ์ฐ๊ธฐ: {explanation}")
#๊ฒฐ๊ณผ ๋ถ๋ถ์ ๋ฒํผ ์ถ๋ ฅ ์ถ๊ฐ
def main():
st.title("ํ๊ตญ์ด ํ์ต์๋ฅผ ์ํ HCI tools")
col1, col2 = st.columns(2)
with col1:
display_passage(col1)
display_summary(col1)
with col2:
btn_keyword, btn_explanation, btn_simple, btn_rewrite = display_input_btns(col2)
display_output()
# # ํ๋จ ์ปจํ
์ด๋
# with st.container():
# st.header("๊ฒฐ๊ณผ")
if __name__ == "__main__":
main()
|