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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -30
app.py CHANGED
@@ -37,7 +37,7 @@ test_parquet_content = load_parquet('test.parquet')
37
 
38
  def respond(
39
  message,
40
- history: List[Tuple[str, str]],
41
  system_message="", # κΈ°λ³Έκ°’ μΆ”κ°€
42
  max_tokens=4000, # κΈ°λ³Έκ°’ λ³€κ²½
43
  temperature=0.7, # κΈ°λ³Έκ°’ μœ μ§€
@@ -57,12 +57,11 @@ def respond(
57
  system_message += f"\n\nMixGEN μ½”λ“œ λ‚΄μš©:\n```python\n{MixGEN_code}\n```"
58
  message = "MixGEN3 이미지 생성에 λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , μ„€λͺ…ν•  μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€κ³  μ•Œλ¦¬κ³  μ„œλΉ„μŠ€ URL(https://openfree-mixgen3.hf.space)을 톡해 ν…ŒμŠ€νŠΈ 해보라고 좜λ ₯ν•˜λΌ."
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"):
65
- parquet_content = item[1]
66
  break
67
  system_message += f"\n\ntest.parquet 파일 λ‚΄μš©:\n```markdown\n{parquet_content}\n```"
68
  message = "test.parquet νŒŒμΌμ— λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , κ΄€λ ¨ μ„€λͺ… 및 Q&Aλ₯Ό 진행할 μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€. κΆκΈˆν•œ 점이 있으면 물어보라."
@@ -71,11 +70,8 @@ def respond(
71
 
72
  # μ‹œμŠ€ν…œ λ©”μ‹œμ§€μ™€ μ‚¬μš©μž λ©”μ‹œμ§€ κ²°ν•©
73
  messages = [{"role": "system", "content": f"{system_prefix} {system_message}"}]
74
- for val in history:
75
- if isinstance(val, tuple) and val[0]:
76
- messages.append({"role": "user", "content": val[0]})
77
- if isinstance(val, tuple) and val[1]:
78
- messages.append({"role": "assistant", "content": val[1]})
79
  messages.append({"role": "user", "content": message})
80
 
81
  response = ""
@@ -94,10 +90,10 @@ def respond(
94
  except Exception as e:
95
  yield f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"
96
 
97
- def upload_csv(file):
98
  try:
99
  # CSV 파일 읽기 (κ΅¬λΆ„μž 콀마)
100
- df = pd.read_csv(file, sep=',')
101
 
102
  # CSV 파일의 컬럼 확인
103
  required_columns = {'id', 'text', 'label', 'metadata'}
@@ -115,7 +111,7 @@ def upload_csv(file):
115
  df = df.astype({'id': 'int32', 'text': 'string', 'label': 'category', 'metadata': 'string'})
116
 
117
  # Parquet 파일둜 λ³€ν™˜
118
- parquet_filename = os.path.splitext(os.path.basename(file))[0] + '.parquet'
119
  df.to_parquet(parquet_filename, engine='pyarrow', compression='snappy')
120
 
121
  # Parquet 파일 λ‘œλ“œ
@@ -125,10 +121,10 @@ def upload_csv(file):
125
  except Exception as e:
126
  return f"CSV 파일 μ—…λ‘œλ“œ 및 λ³€ν™˜ 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}", None
127
 
128
- def upload_parquet(file):
129
  try:
130
  # Parquet 파일 읽기
131
- df = pd.read_parquet(file, engine='pyarrow')
132
 
133
  # λ°μ΄ν„°ν”„λ ˆμž„μ„ Markdown으둜 λ³€ν™˜
134
  parquet_content = df.to_markdown(index=False)
@@ -137,10 +133,37 @@ def upload_parquet(file):
137
  except Exception as e:
138
  return f"Parquet 파일 μ—…λ‘œλ“œ 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}", None, None
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  css = """
141
  footer {
142
  visibility: hidden;
143
  }
 
 
 
 
 
 
144
  """
145
 
146
  # Gradio Blocks μΈν„°νŽ˜μ΄μŠ€ μ„€μ •
@@ -149,7 +172,7 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
149
 
150
  with gr.Tab("챗봇"):
151
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
152
- chatbot = gr.Chatbot(label="챗봇")
153
  msg = gr.Textbox(label="λ©”μ‹œμ§€ μž…λ ₯")
154
  send = gr.Button("전솑")
155
 
@@ -163,16 +186,16 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
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(
@@ -192,13 +215,13 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
192
  download_button = gr.File(label="Parquet 파일 λ‹€μš΄λ‘œλ“œ", type="binary", interactive=False)
193
 
194
  # μ—…λ‘œλ“œ λ²„νŠΌ 클릭 μ‹œ μ‹€ν–‰ν•  ν•¨μˆ˜
195
- def handle_csv_upload(file):
196
- message, parquet_filename = upload_csv(file)
197
  if parquet_filename:
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
 
@@ -222,8 +245,8 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
222
  # μƒνƒœλ₯Ό μ €μž₯ν•  Hidden State
223
  parquet_data_state = gr.State()
224
 
225
- def handle_parquet_upload(file):
226
- message, parquet_content, parquet_json = upload_parquet(file)
227
  if parquet_json:
228
  return message, parquet_preview_chat.update(value=parquet_content), parquet_data_state.update(value=parquet_json)
229
  else:
@@ -234,9 +257,9 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
234
  inputs=parquet_upload,
235
  outputs=[parquet_upload_status, parquet_preview_chat, parquet_data_state]
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
 
@@ -244,16 +267,16 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
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(
@@ -262,6 +285,29 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
262
  outputs=[chatbot_data_upload, msg_data_upload]
263
  )
264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  gr.Markdown("## 주의 사항")
266
  gr.Markdown("""
267
  - **CSV μ—…λ‘œλ“œ**: CSV νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λ©΄ μžλ™μœΌλ‘œ Parquet 파일둜 λ³€ν™˜λ©λ‹ˆλ‹€. CSV νŒŒμΌμ€ λ°˜λ“œμ‹œ **콀마(`,`)**둜 κ΅¬λΆ„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
@@ -269,6 +315,7 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as demo:
269
  - **LLM과의 λŒ€ν™”**: λ³€ν™˜λœ Parquet 파일 λ‚΄μš©μ„ 기반으둜 LLM이 응닡을 μƒμ„±ν•©λ‹ˆλ‹€.
270
  - **Parquet λ‹€μš΄λ‘œλ“œ**: λ³€ν™˜λœ Parquet νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λ €λ©΄ λ³€ν™˜λœ 파일 μ˜†μ˜ λ‹€μš΄λ‘œλ“œ 링크λ₯Ό ν΄λ¦­ν•˜μ„Έμš”.
271
  - **챗봇 데이터 μ—…λ‘œλ“œ**: 챗봇 데이터 μ—…λ‘œλ“œ νƒ­μ—μ„œ Parquet νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λ©΄ ν•΄λ‹Ή 데이터λ₯Ό 기반으둜 질문과 닡변을 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.
 
272
  """)
273
 
274
  gr.Markdown("### Gradio μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ LLM λͺ¨λΈκ³Ό μƒν˜Έμž‘μš©ν•˜μ„Έμš”!")
 
37
 
38
  def respond(
39
  message,
40
+ history: List[dict],
41
  system_message="", # κΈ°λ³Έκ°’ μΆ”κ°€
42
  max_tokens=4000, # κΈ°λ³Έκ°’ λ³€κ²½
43
  temperature=0.7, # κΈ°λ³Έκ°’ μœ μ§€
 
57
  system_message += f"\n\nMixGEN μ½”λ“œ λ‚΄μš©:\n```python\n{MixGEN_code}\n```"
58
  message = "MixGEN3 이미지 생성에 λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , μ„€λͺ…ν•  μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€κ³  μ•Œλ¦¬κ³  μ„œλΉ„μŠ€ URL(https://openfree-mixgen3.hf.space)을 톡해 ν…ŒμŠ€νŠΈ 해보라고 좜λ ₯ν•˜λΌ."
59
  elif message.lower() == "test.parquet μ‹€ν–‰":
60
+ # Parquet λ‚΄μš© μ°Έμ‘°
 
61
  parquet_content = ""
62
  for item in history:
63
+ if item['role'] == 'assistant' and 'test.parquet 파일 λ‚΄μš©' in item['content']:
64
+ parquet_content = item['content'].split("```markdown\n")[1].split("\n```")[0]
65
  break
66
  system_message += f"\n\ntest.parquet 파일 λ‚΄μš©:\n```markdown\n{parquet_content}\n```"
67
  message = "test.parquet νŒŒμΌμ— λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , κ΄€λ ¨ μ„€λͺ… 및 Q&Aλ₯Ό 진행할 μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€. κΆκΈˆν•œ 점이 있으면 물어보라."
 
70
 
71
  # μ‹œμŠ€ν…œ λ©”μ‹œμ§€μ™€ μ‚¬μš©μž λ©”μ‹œμ§€ κ²°ν•©
72
  messages = [{"role": "system", "content": f"{system_prefix} {system_message}"}]
73
+ for chat in history:
74
+ messages.append({"role": chat['role'], "content": chat['content']})
 
 
 
75
  messages.append({"role": "user", "content": message})
76
 
77
  response = ""
 
90
  except Exception as e:
91
  yield f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"
92
 
93
+ def upload_csv(file_path):
94
  try:
95
  # CSV 파일 읽기 (κ΅¬λΆ„μž 콀마)
96
+ df = pd.read_csv(file_path, sep=',')
97
 
98
  # CSV 파일의 컬럼 확인
99
  required_columns = {'id', 'text', 'label', 'metadata'}
 
111
  df = df.astype({'id': 'int32', 'text': 'string', 'label': 'category', 'metadata': 'string'})
112
 
113
  # Parquet 파일둜 λ³€ν™˜
114
+ parquet_filename = os.path.splitext(os.path.basename(file_path))[0] + '.parquet'
115
  df.to_parquet(parquet_filename, engine='pyarrow', compression='snappy')
116
 
117
  # Parquet 파일 λ‘œλ“œ
 
121
  except Exception as e:
122
  return f"CSV 파일 μ—…λ‘œλ“œ 및 λ³€ν™˜ 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}", None
123
 
124
+ def upload_parquet(file_path):
125
  try:
126
  # Parquet 파일 읽기
127
+ df = pd.read_parquet(file_path, engine='pyarrow')
128
 
129
  # λ°μ΄ν„°ν”„λ ˆμž„μ„ Markdown으둜 λ³€ν™˜
130
  parquet_content = df.to_markdown(index=False)
 
133
  except Exception as e:
134
  return f"Parquet 파일 μ—…λ‘œλ“œ 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}", None, None
135
 
136
+ def text_to_parquet(text):
137
+ try:
138
+ # ν…μŠ€νŠΈλ₯Ό DataFrame으둜 λ³€ν™˜ (μ˜ˆμ‹œ: 각 쀄을 μƒˆλ‘œμš΄ ν–‰μœΌλ‘œ)
139
+ data = [line.split(',') for line in text.strip().split('\n')]
140
+ df = pd.DataFrame(data, columns=['id', 'text', 'label', 'metadata'])
141
+
142
+ # Parquet 파일둜 λ³€ν™˜
143
+ parquet_filename = 'text_to_parquet.parquet'
144
+ df.to_parquet(parquet_filename, engine='pyarrow', compression='snappy')
145
+
146
+ # Parquet 파일 λ‘œλ“œ
147
+ parquet_content = load_parquet(parquet_filename)
148
+
149
+ # 파일 데이터λ₯Ό 읽어 λ°”μ΄λ„ˆλ¦¬λ‘œ λ°˜ν™˜
150
+ with open(parquet_filename, "rb") as f:
151
+ data = f.read()
152
+
153
+ return f"{parquet_filename} 파일이 μ„±κ³΅μ μœΌλ‘œ λ³€ν™˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.", parquet_content, (parquet_filename, data)
154
+ except Exception as e:
155
+ return f"ν…μŠ€νŠΈ λ³€ν™˜ 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}", "", None
156
+
157
  css = """
158
  footer {
159
  visibility: hidden;
160
  }
161
+ .chatbot-container {
162
+ height: 600px;
163
+ }
164
+ .chatbot-container .message {
165
+ font-size: 14px;
166
+ }
167
  """
168
 
169
  # Gradio Blocks μΈν„°νŽ˜μ΄μŠ€ μ„€μ •
 
172
 
173
  with gr.Tab("챗봇"):
174
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
175
+ chatbot = gr.Chatbot(label="챗봇", elem_id="chatbot-container")
176
  msg = gr.Textbox(label="λ©”μ‹œμ§€ μž…λ ₯")
177
  send = gr.Button("전솑")
178
 
 
186
  def handle_message(message, history, system_message, max_tokens, temperature, top_p):
187
  # Update history with user message
188
  history = history or []
189
+ history.append({"role": "user", "content": message})
190
  # Generate response
191
  response = ""
192
  try:
193
  for token in respond(message, history, system_message, max_tokens, temperature, top_p):
194
  response = token
195
  # Update history with assistant response
196
+ history.append({"role": "assistant", "content": response})
197
  except Exception as e:
198
+ history.append({"role": "assistant", "content": f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"})
199
  return history, ""
200
 
201
  send.click(
 
215
  download_button = gr.File(label="Parquet 파일 λ‹€μš΄λ‘œλ“œ", type="binary", interactive=False)
216
 
217
  # μ—…λ‘œλ“œ λ²„νŠΌ 클릭 μ‹œ μ‹€ν–‰ν•  ν•¨μˆ˜
218
+ def handle_csv_upload(file_path):
219
+ message, parquet_filename = upload_csv(file_path)
220
  if parquet_filename:
221
+ # νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆλ„λ‘ λ°”μ΄λ„ˆλ¦¬ λ°μ΄ν„°λ‘œ 읽기
222
  with open(parquet_filename, "rb") as f:
223
  data = f.read()
224
+ return message, load_parquet(parquet_filename), (parquet_filename, data)
225
  else:
226
  return message, "", None
227
 
 
245
  # μƒνƒœλ₯Ό μ €μž₯ν•  Hidden State
246
  parquet_data_state = gr.State()
247
 
248
+ def handle_parquet_upload(file_path):
249
+ message, parquet_content, parquet_json = upload_parquet(file_path)
250
  if parquet_json:
251
  return message, parquet_preview_chat.update(value=parquet_content), parquet_data_state.update(value=parquet_json)
252
  else:
 
257
  inputs=parquet_upload,
258
  outputs=[parquet_upload_status, parquet_preview_chat, parquet_data_state]
259
  )
260
+
261
  gr.Markdown("### LLMκ³Ό λŒ€ν™”ν•˜κΈ°")
262
+ chatbot_data_upload = gr.Chatbot(label="챗봇 데이터 μ—…λ‘œλ“œ", elem_id="chatbot-data-upload")
263
  msg_data_upload = gr.Textbox(label="λ©”μ‹œμ§€ μž…λ ₯")
264
  send_data_upload = gr.Button("전솑")
265
 
 
267
  def handle_message_data_upload(message, history, system_message, max_tokens, temperature, top_p, parquet_data):
268
  # Update history with user message
269
  history = history or []
270
+ history.append({"role": "user", "content": message})
271
  # Generate response
272
  response = ""
273
  try:
274
  for token in respond(message, history, system_message, max_tokens, temperature, top_p):
275
  response = token
276
  # Update history with assistant response
277
+ history.append({"role": "assistant", "content": response})
278
  except Exception as e:
279
+ history.append({"role": "assistant", "content": f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"})
280
  return history, ""
281
 
282
  send_data_upload.click(
 
285
  outputs=[chatbot_data_upload, msg_data_upload]
286
  )
287
 
288
+ with gr.Tab("ν…μŠ€νŠΈ to csv to parquet λ³€ν™”"):
289
+ gr.Markdown("### ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•˜λ©΄ CSV둜 λ³€ν™˜ ν›„ Parquet으둜 μžλ™ μ „ν™˜λ©λ‹ˆλ‹€.")
290
+ with gr.Row():
291
+ with gr.Column():
292
+ text_input = gr.Textbox(label="ν…μŠ€νŠΈ μž…οΏ½οΏ½ (각 행은 `id,text,label,metadata` ν˜•μ‹μœΌλ‘œ μž…λ ₯)", lines=10)
293
+ convert_button = gr.Button("λ³€ν™˜ 및 λ‹€μš΄λ‘œλ“œ")
294
+ convert_status = gr.Textbox(label="λ³€ν™˜ μƒνƒœ", interactive=False)
295
+ parquet_preview_convert = gr.Markdown(label="Parquet 파일 미리보기")
296
+ download_parquet_convert = gr.File(label="Parquet 파일 λ‹€μš΄λ‘œλ“œ", type="binary", interactive=False)
297
+
298
+ def handle_text_to_parquet(text):
299
+ message, parquet_content, file_data = text_to_parquet(text)
300
+ if file_data:
301
+ return message, parquet_content, file_data
302
+ else:
303
+ return message, "", None
304
+
305
+ convert_button.click(
306
+ handle_text_to_parquet,
307
+ inputs=text_input,
308
+ outputs=[convert_status, parquet_preview_convert, download_parquet_convert]
309
+ )
310
+
311
  gr.Markdown("## 주의 사항")
312
  gr.Markdown("""
313
  - **CSV μ—…λ‘œλ“œ**: CSV νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λ©΄ μžλ™μœΌλ‘œ Parquet 파일둜 λ³€ν™˜λ©λ‹ˆλ‹€. CSV νŒŒμΌμ€ λ°˜λ“œμ‹œ **콀마(`,`)**둜 κ΅¬λΆ„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
 
315
  - **LLM과의 λŒ€ν™”**: λ³€ν™˜λœ Parquet 파일 λ‚΄μš©μ„ 기반으둜 LLM이 응닡을 μƒμ„±ν•©λ‹ˆλ‹€.
316
  - **Parquet λ‹€μš΄λ‘œλ“œ**: λ³€ν™˜λœ Parquet νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λ €λ©΄ λ³€ν™˜λœ 파일 μ˜†μ˜ λ‹€μš΄λ‘œλ“œ 링크λ₯Ό ν΄λ¦­ν•˜μ„Έμš”.
317
  - **챗봇 데이터 μ—…λ‘œλ“œ**: 챗봇 데이터 μ—…λ‘œλ“œ νƒ­μ—μ„œ Parquet νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λ©΄ ν•΄λ‹Ή 데이터λ₯Ό 기반으둜 질문과 닡변을 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.
318
+ - **ν…μŠ€νŠΈ to csv to parquet**: λ„€ 번째 νƒ­μ—μ„œ ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•˜λ©΄ μžλ™μœΌλ‘œ CSV둜 λ³€ν™˜λ˜κ³ , λ‹€μ‹œ Parquet 파일둜 μ „ν™˜λ˜μ–΄ λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
319
  """)
320
 
321
  gr.Markdown("### Gradio μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ LLM λͺ¨λΈκ³Ό μƒν˜Έμž‘μš©ν•˜μ„Έμš”!")