File size: 2,221 Bytes
af2c4a4
5c2060f
7a6311a
5c2060f
 
 
 
 
 
 
 
 
 
 
 
 
102aa00
5c2060f
 
 
 
 
 
 
 
 
af2c4a4
5c2060f
 
 
af2c4a4
5c2060f
 
 
 
 
 
 
102aa00
5c2060f
 
 
 
 
 
 
 
 
 
 
 
 
af2c4a4
5c2060f
 
 
af2c4a4
c263170
5c2060f
af2c4a4
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
import gradio as gr
import call_api

# Hàm format và respond giữ nguyên như trước
def format_reply(raw_reply: str) -> str:
    lines = raw_reply.splitlines()
    out_lines = []
    for line in lines:
        line = line.strip()
        if not line:
            continue
        if line.startswith("Bước"):
            out_lines.append(f"**{line}**")
        else:
            out_lines.append(line)
    return "\n\n".join(out_lines)

def respond(
    message, history, system_message, max_tokens, temperature, top_p,
    file_upload=None, image_upload=None
):
    raw = call_api.call_deepseek(
        message, history, system_message, max_tokens, temperature, top_p,
        file_upload=file_upload, image_upload=image_upload
    )
    return format_reply(raw)

with gr.Blocks() as demo:  # Bắt đầu Blocks
    # Thành phần hiển thị lịch sử chat
    chatbot = gr.Chatbot(type="messages")  # hỗ trợ subset Markdown:contentReference[oaicite:3]{index=3}

    # Thành phần Markdown để render kết quả đã format (Markdown + LaTeX)
    markdown_out = gr.Markdown(
        latex_delimiters=[
            {"left": "$$", "right": "$$", "display": True},
            {"left": "$",  "right": "$",  "display": False},
        ]
    )  # cho phép render LaTeX:contentReference[oaicite:4]{index=4}

    # Các input controls
    with gr.Row():
        txt = gr.Textbox(label="Nhập câu hỏi")
        sys_msg = gr.Textbox(value="Bạn là một chatbot tiếng Việt thân thiện.", label="System message")
    with gr.Row():
        max_t = gr.Slider(1, 2048, value=500, step=1, label="Max new tokens")
        temp = gr.Slider(0.1, 4.0, value=0.7, step=0.1, label="Temperature")
        top_p = gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="Top-p")
    # Inputs tuỳ chọn
    file_up = gr.File(label="Tải lên file (tuỳ chọn)", file_count="single", optional=True)
    img_up  = gr.Image(type="pil", label="Tải lên ảnh (tuỳ chọn)", optional=True)

    # Sự kiện submit
    txt.submit(
        fn=respond,
        inputs=[txt, chatbot, sys_msg, max_t, temp, top_p, file_up, img_up],
        outputs=[chatbot, markdown_out]
    )

# Chạy app
demo.launch()