ginipick commited on
Commit
2013128
β€’
1 Parent(s): 95a32d4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -34
app.py CHANGED
@@ -59,7 +59,6 @@ def respond(
59
  elif message.lower() == "test.parquet μ‹€ν–‰":
60
  # ν˜„μž¬ Parquet λ‚΄μš©μ€ μƒνƒœ λ³€μˆ˜μ—μ„œ 가져와야 함
61
  # μ—¬κΈ°μ„œλŠ” μ˜ˆμ‹œλ‘œ 'parquet_content'κ°€ history에 μžˆλ‹€κ³  κ°€μ •
62
- # μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” λ³„λ„μ˜ μƒνƒœ 관리λ₯Ό 톡해 Parquet 데이터λ₯Ό μ°Έμ‘°ν•΄μ•Ό 함
63
  parquet_content = ""
64
  for item in history:
65
  if isinstance(item, tuple) and item[0].startswith("Parquet"):
@@ -150,22 +149,9 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
150
 
151
  with gr.Tab("챗봇"):
152
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
153
- chat = gr.ChatInterface(
154
- fn=respond,
155
- examples=[
156
- ["νŒ¨μ…˜ μ½”λ“œ μ‹€ν–‰"],
157
- ["UHD 이미지 μ½”λ“œ μ‹€ν–‰"],
158
- ["MixGEN μ½”λ“œ μ‹€ν–‰"],
159
- ["test.parquet μ‹€ν–‰"],
160
- ["μƒμ„Έν•œ μ‚¬μš© 방법을 마치 화면을 λ³΄λ©΄μ„œ μ„€λͺ…ν•˜λ“―이 4000 토큰 이상 μžμ„Ένžˆ μ„€λͺ…ν•˜λΌ"],
161
- ["FAQ 20건을 μƒμ„Έν•˜κ²Œ μž‘μ„±ν•˜λΌ. 4000토큰 이상 μ‚¬μš©ν•˜λΌ."],
162
- ["μ‚¬μš© 방법과 차별점, νŠΉμ§•, 강점을 μ€‘μ‹¬μœΌλ‘œ 4000 토큰 이상 유튜브 μ˜μƒ 슀크립트 ν˜•νƒœλ‘œ μž‘μ„±ν•˜λΌ"],
163
- ["λ³Έ μ„œλΉ„μŠ€λ₯Ό SEO μ΅œμ ν™”ν•˜μ—¬ λΈ”λ‘œκ·Έ 포슀트(λ°°κ²½ 및 ν•„μš”μ„±, κΈ°μ‘΄ μœ μ‚¬ μ„œλΉ„μŠ€μ™€ λΉ„κ΅ν•˜μ—¬ 특μž₯점, ν™œμš©μ²˜, κ°€μΉ˜, κΈ°λŒ€νš¨κ³Ό, 결둠을 포함)둜 4000 토큰 이상 μž‘μ„±ν•˜λΌ"],
164
- ["νŠΉν—ˆ μΆœμ›μ— ν™œμš©ν•  기술 및 λΉ„μ¦ˆλ‹ˆμŠ€λͺ¨λΈ 츑면을 ν¬ν•¨ν•˜μ—¬ νŠΉν—ˆ μΆœμ›μ„œ ꡬ성에 맞게 ν˜μ‹ μ μΈ 창의 발λͺ… λ‚΄μš©μ„ μ€‘μ‹¬μœΌλ‘œ 4000 토큰 이상 μž‘μ„±ν•˜λΌ."],
165
- ["계속 μ΄μ–΄μ„œ λ‹΅λ³€ν•˜λΌ"],
166
- ],
167
- theme="default", # μ›ν•˜λŠ” ν…Œλ§ˆλ‘œ λ³€κ²½ κ°€λŠ₯
168
- )
169
 
170
  with gr.Accordion("μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ 및 μ˜΅μ…˜ μ„€μ •", open=False):
171
  system_message = gr.Textbox(label="System Message", value="λ„ˆλŠ” AI μ‘°μ–Έμž 역할이닀.")
@@ -173,6 +159,28 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
173
  temperature = gr.Slider(minimum=0, maximum=1, value=0.7, label="Temperature")
174
  top_p = gr.Slider(minimum=0, maximum=1, value=0.9, label="Top P")
175
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  with gr.Tab("데이터 λ³€ν™˜"):
177
  gr.Markdown("### CSV 파일 μ—…λ‘œλ“œ 및 Parquet λ³€ν™˜")
178
  with gr.Row():
@@ -181,7 +189,7 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
181
  upload_button = gr.Button("μ—…λ‘œλ“œ 및 λ³€ν™˜")
182
  upload_status = gr.Textbox(label="μ—…λ‘œλ“œ μƒνƒœ", interactive=False)
183
  parquet_preview = gr.Markdown(label="Parquet 파일 미리보기")
184
- download_button = gr.File(label="Parquet 파일 λ‹€μš΄λ‘œλ“œ", file=None, interactive=False)
185
 
186
  # μ—…λ‘œλ“œ λ²„νŠΌ 클릭 μ‹œ μ‹€ν–‰ν•  ν•¨μˆ˜
187
  def handle_csv_upload(file):
@@ -190,7 +198,7 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
190
  # νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆλ„λ‘ 경둜 μ„€μ •
191
  with open(parquet_filename, "rb") as f:
192
  data = f.read()
193
- return message, load_parquet(parquet_filename), (parquet_filename, data)
194
  else:
195
  return message, "", None
196
 
@@ -228,21 +236,30 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
228
  )
229
 
230
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
231
- chat_interface = gr.ChatInterface(
232
- fn=respond,
233
- examples=[
234
- ["νŒ¨μ…˜ μ½”λ“œ μ‹€ν–‰"],
235
- ["UHD 이미지 μ½”λ“œ μ‹€ν–‰"],
236
- ["MixGEN μ½”λ“œ μ‹€ν–‰"],
237
- ["test.parquet μ‹€ν–‰"],
238
- ["μƒμ„Έν•œ μ‚¬μš© 방법을 마치 화면을 λ³΄λ©΄μ„œ μ„€λͺ…ν•˜λ“―이 4000 토큰 이상 μžμ„Ένžˆ μ„€λͺ…ν•˜λΌ"],
239
- ["FAQ 20건을 μƒμ„Έν•˜κ²Œ μž‘μ„±ν•˜λΌ. 4000토큰 이상 μ‚¬μš©ν•˜λΌ."],
240
- ["μ‚¬μš© 방법과 차별점, νŠΉμ§•, 강점을 μ€‘μ‹¬μœΌλ‘œ 4000 토큰 이상 유튜브 μ˜μƒ 슀크립트 ν˜•νƒœλ‘œ μž‘μ„±ν•˜λΌ"],
241
- ["λ³Έ μ„œλΉ„μŠ€λ₯Ό SEO μ΅œμ ν™”ν•˜μ—¬ λΈ”λ‘œκ·Έ 포슀트(λ°°κ²½ 및 ν•„μš”μ„±, κΈ°μ‘΄ μœ μ‚¬ μ„œλΉ„μŠ€μ™€ λΉ„κ΅ν•˜μ—¬ 특μž₯점, ν™œμš©μ²˜, κ°€μΉ˜, κΈ°λŒ€νš¨κ³Ό, 결둠을 포함)둜 4000 토큰 이상 μž‘μ„±ν•˜λΌ"],
242
- ["νŠΉν—ˆ μΆœμ›μ— ν™œμš©ν•  기술 및 λΉ„μ¦ˆλ‹ˆμŠ€λͺ¨λΈ 츑면을 ν¬ν•¨ν•˜μ—¬ νŠΉν—ˆ μΆœμ›μ„œ ꡬ성에 맞게 ν˜μ‹ μ μΈ 창의 발λͺ… λ‚΄μš©μ„ μ€‘μ‹¬μœΌλ‘œ 4000 토큰 이상 μž‘μ„±ν•˜λΌ."],
243
- ["계속 μ΄μ–΄μ„œ λ‹΅λ³€ν•˜λΌ"],
244
- ],
245
- theme="default", # μ›ν•˜λŠ” ν…Œλ§ˆλ‘œ λ³€κ²½ κ°€λŠ₯
 
 
 
 
 
 
 
 
 
246
  )
247
 
248
  gr.Markdown("## 주의 사항")
 
59
  elif message.lower() == "test.parquet μ‹€ν–‰":
60
  # ν˜„μž¬ Parquet λ‚΄μš©μ€ μƒνƒœ λ³€μˆ˜μ—μ„œ 가져와야 함
61
  # μ—¬κΈ°μ„œλŠ” μ˜ˆμ‹œλ‘œ 'parquet_content'κ°€ history에 μžˆλ‹€κ³  κ°€μ •
 
62
  parquet_content = ""
63
  for item in history:
64
  if isinstance(item, tuple) and item[0].startswith("Parquet"):
 
149
 
150
  with gr.Tab("챗봇"):
151
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
152
+ chatbot = gr.Chatbot(label="챗봇")
153
+ msg = gr.Textbox(label="λ©”μ‹œμ§€ μž…λ ₯")
154
+ send = gr.Button("전솑")
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
  with gr.Accordion("μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ 및 μ˜΅μ…˜ μ„€μ •", open=False):
157
  system_message = gr.Textbox(label="System Message", value="λ„ˆλŠ” AI μ‘°μ–Έμž 역할이닀.")
 
159
  temperature = gr.Slider(minimum=0, maximum=1, value=0.7, label="Temperature")
160
  top_p = gr.Slider(minimum=0, maximum=1, value=0.9, label="Top P")
161
 
162
+ # 챗봇 λ©”μ‹œμ§€ 처리 ν•¨μˆ˜
163
+ def handle_message(message, history, system_message, max_tokens, temperature, top_p):
164
+ # Update history with user message
165
+ history = history or []
166
+ history.append((message, None))
167
+ # Generate response
168
+ response = ""
169
+ try:
170
+ for token in respond(message, history, system_message, max_tokens, temperature, top_p):
171
+ response = token
172
+ # Update history with assistant response
173
+ history[-1] = (message, response)
174
+ except Exception as e:
175
+ history[-1] = (message, f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}")
176
+ return history, ""
177
+
178
+ send.click(
179
+ handle_message,
180
+ inputs=[msg, chatbot, system_message, max_tokens, temperature, top_p],
181
+ outputs=[chatbot, msg]
182
+ )
183
+
184
  with gr.Tab("데이터 λ³€ν™˜"):
185
  gr.Markdown("### CSV 파일 μ—…λ‘œλ“œ 및 Parquet λ³€ν™˜")
186
  with gr.Row():
 
189
  upload_button = gr.Button("μ—…λ‘œλ“œ 및 λ³€ν™˜")
190
  upload_status = gr.Textbox(label="μ—…λ‘œλ“œ μƒνƒœ", interactive=False)
191
  parquet_preview = gr.Markdown(label="Parquet 파일 미리보기")
192
+ download_button = gr.File(label="Parquet 파일 λ‹€μš΄λ‘œλ“œ", type="binary", interactive=False)
193
 
194
  # μ—…λ‘œλ“œ λ²„νŠΌ 클릭 μ‹œ μ‹€ν–‰ν•  ν•¨μˆ˜
195
  def handle_csv_upload(file):
 
198
  # νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆλ„λ‘ 경둜 μ„€μ •
199
  with open(parquet_filename, "rb") as f:
200
  data = f.read()
201
+ return message, load_parquet(parquet_filename), data
202
  else:
203
  return message, "", None
204
 
 
236
  )
237
 
238
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
239
+ chatbot_data_upload = gr.Chatbot(label="챗봇 데이터 μ—…λ‘œλ“œ")
240
+ msg_data_upload = gr.Textbox(label="λ©”μ‹œμ§€ μž…λ ₯")
241
+ send_data_upload = gr.Button("전솑")
242
+
243
+ # 챗봇 λ©”μ‹œμ§€ 처리 ν•¨μˆ˜ (데이터 μ—…λ‘œλ“œ 버전)
244
+ def handle_message_data_upload(message, history, system_message, max_tokens, temperature, top_p, parquet_data):
245
+ # Update history with user message
246
+ history = history or []
247
+ history.append((message, None))
248
+ # Generate response
249
+ response = ""
250
+ try:
251
+ for token in respond(message, history, system_message, max_tokens, temperature, top_p):
252
+ response = token
253
+ # Update history with assistant response
254
+ history[-1] = (message, response)
255
+ except Exception as e:
256
+ history[-1] = (message, f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}")
257
+ return history, ""
258
+
259
+ send_data_upload.click(
260
+ handle_message_data_upload,
261
+ inputs=[msg_data_upload, chatbot_data_upload, system_message, max_tokens, temperature, top_p, parquet_data_state],
262
+ outputs=[chatbot_data_upload, msg_data_upload]
263
  )
264
 
265
  gr.Markdown("## 주의 사항")