File size: 3,062 Bytes
af2c4a4
b10cbb3
 
 
 
 
 
 
 
 
 
 
 
68f58b6
b10cbb3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
af2c4a4
e7e2827
 
 
af2c4a4
e7e2827
 
 
 
102aa00
e7e2827
 
 
 
 
 
 
 
5c2060f
e7e2827
 
b10cbb3
f1b344d
b10cbb3
e7e2827
c263170
d83956b
5c2060f
6d423fe
b10cbb3
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import gradio as gr
from openai import OpenAI # type: ignore
import os

# chat = gr.ChatInterface(
#     call_api.call_deepseek, #chat
#     title="Trợ lý Học Tập AI",
#     description="Nhập câu hỏi của bạn về Toán, Lý, Hóa, Văn… và nhận giải đáp chi tiết ngay lập tức!",
#     additional_inputs=[
#         gr.Textbox("Bạn là một chatbot tiếng Việt thân thiện.", label="System message"),
#         gr.Slider(1, 2048, value=200, step=1, label="Max new tokens"),
#         gr.Slider(0.1, 4.0, value=0.7, step=0.1, label="Temperature"),
#         gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
        
#         gr.Image(label="Attach an image (optional)"), # báo lỗi
#         gr.File(label="Upload a file (optional)"), # báo lỗi
#     ],
#     # examples=[
#     #     # Mỗi item: [message, system_message, max_tokens, temperature, top_p]
#     #     ["tích phân của x^2 từ 0 đến 2 là gì? vui lòng lập luận từng bước, và đặt kết quả cuối cùng trong \boxed{}", "bạn là nhà toán học", 100, 0.7, 0.95],
#     # ],
# )



deepseek = OpenAI(api_key = os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
def call_deepseek_new(
    user_prompt,
    chat_history
):
    history = chat_history or []
    history.append({"role": "user", "content": user_prompt})

    # Gọi API DeepSeek Chat (OpenAI-compatible, không stream)
    response = deepseek.chat.completions.create(
        model      = "deepseek-chat",       # hoặc model bạn đã config
        messages   = history,
    )

    # Lấy nội dung assistant trả về
    reply = response.choices[0].message.content

    # Append vào history
    history.append({"role": "assistant", "content": reply})

    # Trả về 2 outputs: toàn bộ history và đúng reply để render Markdown
    return history, reply

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 = gr.Markdown(
        latex_delimiters=[{"left":"$$","right":"$$","display":True}]
    )  # 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")

    # Sự kiện submit
    txt.submit(
        call_deepseek_new,
        inputs=[txt, chatbot],
        outputs=[chatbot, markdown],
    )


# Chạy app
if __name__ == "__main__":
    demo.launch(show_error=True)