Update app.py
Browse files
app.py
CHANGED
@@ -37,7 +37,7 @@ test_parquet_content = load_parquet('test.parquet')
|
|
37 |
|
38 |
def respond(
|
39 |
message,
|
40 |
-
history: List[
|
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 |
-
#
|
61 |
-
# μ¬κΈ°μλ μμλ‘ 'parquet_content'κ° historyμ μλ€κ³ κ°μ
|
62 |
parquet_content = ""
|
63 |
for item in history:
|
64 |
-
if
|
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
|
75 |
-
|
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(
|
98 |
try:
|
99 |
# CSV νμΌ μ½κΈ° (ꡬλΆμ μ½€λ§)
|
100 |
-
df = pd.read_csv(
|
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(
|
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(
|
129 |
try:
|
130 |
# Parquet νμΌ μ½κΈ°
|
131 |
-
df = pd.read_parquet(
|
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(
|
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
|
174 |
except Exception as e:
|
175 |
-
history
|
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(
|
196 |
-
message, parquet_filename = upload_csv(
|
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(
|
226 |
-
message, parquet_content, parquet_json = upload_parquet(
|
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(
|
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
|
255 |
except Exception as e:
|
256 |
-
history
|
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 λͺ¨λΈκ³Ό μνΈμμ©νμΈμ!")
|