File size: 2,251 Bytes
8b05818
36808f0
8b05818
b1ef4b2
fabd5db
 
 
8b05818
b1ef4b2
 
 
a23742f
 
fabd5db
 
 
 
 
da4b631
aae9b1e
fabd5db
 
 
 
 
 
 
 
 
b1ef4b2
fabd5db
 
 
 
 
 
 
c51caae
fabd5db
 
c51caae
fabd5db
8b05818
fabd5db
 
 
 
 
 
 
 
 
 
 
bb74b53
c51caae
fabd5db
 
b1ef4b2
fabd5db
b1ef4b2
c51caae
a06334d
c51caae
fabd5db
 
8b05818
 
fabd5db
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
import gradio as gr
import logging, langdetect
from huggingface_hub import InferenceClient
from libretranslatepy import LibreTranslateAPI

# Khởi tạo client HF và translator
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")

# Gọi API public
lt = LibreTranslateAPI("https://libretranslate.de/")  # Hoặc server tự host

logging.basicConfig(level=logging.INFO)

def respond(
    message,
    history: list[tuple[str, str]],
    system_message="""
    You are a professional speaking AI assistant.
    You can help solving the problems.
    You can only speak English with correct spelling, punctuation and grammar.
    """,
    max_tokens=2048,
    temperature=0.0,
    top_p=0.9,
):
    # Tạo list tin nhắn bắt đầu từ hệ thống
    messages = [{"role": "system", "content": system_message}]
    
    # Dịch câu hỏi của người dùng từ tiếng Việt sang tiếng Anh
    message_en = lt.translate(message, "vi", "en")
    
    # Thêm các tin nhắn lịch sử vào messages
    for val in history:
        if val[0]:  # Tin nhắn của người dùng
            messages.append({"role": "user", "content": val[0]})
        if val[1]:  # Tin nhắn của trợ lý
            messages.append({"role": "assistant", "content": val[1]})

    # Thêm câu hỏi của người dùng vào cuối lịch sử
    messages.append({"role": "user", "content": message_en})

    response = ""

    # Gửi yêu cầu tới mô hình và nhận kết quả
    try:
        for chunk in client.chat_completion(
            model="HuggingFaceH4/zephyr-7b-beta",
            messages=messages,
            max_tokens=max_tokens,
            temperature=temperature,
            top_p=top_p,
            stream=True
        ):
            # Tiến hành nhận phản hồi từ mô hình
            response += chunk.choices[0].delta.content

    except Exception as e:
        return f"Error: {str(e)}"
        
    logging.info(f"Successfully generated text: {response}")
    response_vi = lt.translate(response, "en", "vi")
    
    return response if langdetect.detect(response) == 'vi' else response_vi

# Gradio UI
demo = gr.ChatInterface(fn=respond, theme="soft")

if __name__ == "__main__":
    demo.launch()