Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -380,12 +380,12 @@ import json
|
|
| 380 |
# β
λν μμ½ ν¨μ
|
| 381 |
# ββββββββββββββββββββββββββββββ
|
| 382 |
def summarize_title(history):
|
| 383 |
-
"""λν μμ½
|
| 384 |
if not history: return "μ λν"
|
| 385 |
text = "\n".join(f"User:{h[0]} AI:{h[1]}" for h in history[-3:])
|
| 386 |
try:
|
| 387 |
-
title = llm._call(f"λ€μ λνμ
|
| 388 |
-
return title.strip().replace("\n", " ")[:
|
| 389 |
except Exception:
|
| 390 |
return "μμ½ μ€ν¨"
|
| 391 |
|
|
@@ -409,9 +409,77 @@ def list_conversations(username):
|
|
| 409 |
|
| 410 |
def load_conversation(file):
|
| 411 |
with open(os.path.join("user_logs", file), encoding="utf-8") as jf:
|
| 412 |
-
|
| 413 |
-
return data["history"]
|
| 414 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 415 |
def chat(message, history):
|
| 416 |
try:
|
| 417 |
response = agent.run(message)
|
|
@@ -488,4 +556,4 @@ with gr.Blocks(theme=gr.themes.Soft(), title="PIXAL Assistant") as demo:
|
|
| 488 |
if __name__ == "__main__":
|
| 489 |
demo.launch(server_name="0.0.0.0", server_port=7860)
|
| 490 |
|
| 491 |
-
|
|
|
|
| 380 |
# β
λν μμ½ ν¨μ
|
| 381 |
# ββββββββββββββββββββββββββββββ
|
| 382 |
def summarize_title(history):
|
| 383 |
+
"""λν μ λͺ© μμ½"""
|
| 384 |
if not history: return "μ λν"
|
| 385 |
text = "\n".join(f"User:{h[0]} AI:{h[1]}" for h in history[-3:])
|
| 386 |
try:
|
| 387 |
+
title = llm._call(f"λ€μ λνμ μ£Όμ λ₯Ό ν μ€λ‘ μμ½ν΄μ€:\n{text}")
|
| 388 |
+
return title.strip().replace("\n", " ")[:60]
|
| 389 |
except Exception:
|
| 390 |
return "μμ½ μ€ν¨"
|
| 391 |
|
|
|
|
| 409 |
|
| 410 |
def load_conversation(file):
|
| 411 |
with open(os.path.join("user_logs", file), encoding="utf-8") as jf:
|
| 412 |
+
return json.load(jf)["history"]
|
|
|
|
| 413 |
|
| 414 |
+
# ββββββββββββββββββββββββββββββ
|
| 415 |
+
# β
λ‘κ·ΈμΈ ν μ¬μ©μ μ 보 κ°μ Έμ€κΈ°
|
| 416 |
+
# ββββββββββββββββββββββββββββββ
|
| 417 |
+
def get_hf_user(token):
|
| 418 |
+
"""HF OAuth ν ν°μΌλ‘ μ¬μ©μ μ 보 μ‘°ν"""
|
| 419 |
+
try:
|
| 420 |
+
r = requests.get("https://huggingface.co/api/whoami-v2", headers={"Authorization": f"Bearer {token}"})
|
| 421 |
+
if r.status_code == 200:
|
| 422 |
+
data = r.json()
|
| 423 |
+
return data.get("name") or data.get("email") or "unknown_user"
|
| 424 |
+
except Exception:
|
| 425 |
+
pass
|
| 426 |
+
return "guest"
|
| 427 |
+
def chat(message, history, hf_token):
|
| 428 |
+
username = get_hf_user(hf_token) if hf_token else "guest"
|
| 429 |
+
try:
|
| 430 |
+
response = agent.run(message)
|
| 431 |
+
except Exception as e:
|
| 432 |
+
response = f"β οΈ μ€λ₯: {e}"
|
| 433 |
+
history = history + [(message, response)]
|
| 434 |
+
if username:
|
| 435 |
+
save_conversation(username, history)
|
| 436 |
+
return history, history, "" # μ
λ ₯ μ΄κΈ°ν
|
| 437 |
+
|
| 438 |
+
def refresh_list(hf_token):
|
| 439 |
+
username = get_hf_user(hf_token)
|
| 440 |
+
items = list_conversations(username)
|
| 441 |
+
return gr.Dropdown.update(choices=[x[1] for x in items])
|
| 442 |
+
|
| 443 |
+
def load_selected(file):
|
| 444 |
+
return load_conversation(file)
|
| 445 |
+
|
| 446 |
+
|
| 447 |
+
# ββββββββββββββββββββββββββββββ
|
| 448 |
+
# β
Gradio UI with HF Auth
|
| 449 |
+
# ββββββββββββββββββββββββββββββ
|
| 450 |
+
with gr.Blocks(theme=gr.themes.Soft(), title="PIXAL Assistant (HF Auth)") as demo:
|
| 451 |
+
gr.Markdown("## π€ PIXAL Assistant β Hugging Face κ³μ κΈ°λ° λν μ μ₯")
|
| 452 |
+
|
| 453 |
+
hf_login = gr.LoginButton("huggingface", label="π Hugging Faceλ‘ λ‘κ·ΈμΈ")
|
| 454 |
+
hf_token = gr.State()
|
| 455 |
+
|
| 456 |
+
@hf_login.click(inputs=None, outputs=hf_token)
|
| 457 |
+
def login(token): # λ‘κ·ΈμΈ ν token λ°ν
|
| 458 |
+
return token
|
| 459 |
+
|
| 460 |
+
with gr.Row():
|
| 461 |
+
with gr.Column(scale=2):
|
| 462 |
+
chatbot = gr.Chatbot(label="PIXAL λν", height=600, render_markdown=True)
|
| 463 |
+
msg = gr.Textbox(label="λ©μμ§", placeholder="μ
λ ₯ ν Enter λλ μ μ‘ ν΄λ¦")
|
| 464 |
+
send = gr.Button("μ μ‘")
|
| 465 |
+
clear = gr.Button("μ΄κΈ°ν")
|
| 466 |
+
|
| 467 |
+
msg.submit(chat, [msg, chatbot, hf_token], [chatbot, chatbot, msg])
|
| 468 |
+
send.click(chat, [msg, chatbot, hf_token], [chatbot, chatbot, msg])
|
| 469 |
+
clear.click(lambda: None, None, chatbot, queue=False)
|
| 470 |
+
|
| 471 |
+
with gr.Column(scale=1):
|
| 472 |
+
gr.Markdown("### πΎ μ μ₯λ λν κΈ°λ‘")
|
| 473 |
+
convo_files = gr.Dropdown(label="λν μ ν", choices=[])
|
| 474 |
+
refresh_btn = gr.Button("π λͺ©λ‘ μλ‘κ³ μΉ¨")
|
| 475 |
+
load_btn = gr.Button("λΆλ¬μ€κΈ°")
|
| 476 |
+
|
| 477 |
+
refresh_btn.click(refresh_list, [hf_token], convo_files)
|
| 478 |
+
load_btn.click(load_selected, [convo_files], chatbot)
|
| 479 |
+
|
| 480 |
+
if __name__ == "__main__":
|
| 481 |
+
demo.launch(server_name="0.0.0.0", server_port=7860)
|
| 482 |
+
'''
|
| 483 |
def chat(message, history):
|
| 484 |
try:
|
| 485 |
response = agent.run(message)
|
|
|
|
| 556 |
if __name__ == "__main__":
|
| 557 |
demo.launch(server_name="0.0.0.0", server_port=7860)
|
| 558 |
|
| 559 |
+
'''
|