Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| import time | |
| # Khởi tạo client | |
| client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") | |
| # CSS tùy chỉnh để làm đẹp giao diện | |
| custom_css = """ | |
| .container { | |
| max-width: 800px; | |
| margin: auto; | |
| padding: 20px; | |
| } | |
| .chat-window { | |
| height: 600px; | |
| border-radius: 10px; | |
| background-color: #f5f5f5; | |
| } | |
| .controls { | |
| margin-top: 20px; | |
| padding: 15px; | |
| border-radius: 8px; | |
| background-color: #ffffff; | |
| } | |
| """ | |
| def respond(message, history: list[tuple[str, str]], | |
| system_message, max_tokens, temperature, top_p, | |
| creativity_level, response_length): | |
| # Xử lý mức độ sáng tạo | |
| if creativity_level == "Conservative": | |
| temperature = min(temperature, 0.5) | |
| top_p = min(top_p, 0.8) | |
| elif creativity_level == "Balanced": | |
| temperature = 0.7 | |
| top_p = 0.9 | |
| else: # Creative | |
| temperature = max(temperature, 0.9) | |
| top_p = 0.95 | |
| # Điều chỉnh max_tokens dựa trên độ dài phản hồi | |
| if response_length == "Short": | |
| max_tokens = min(max_tokens, 256) | |
| elif response_length == "Medium": | |
| max_tokens = min(max_tokens, 512) | |
| else: # Long | |
| max_tokens = max_tokens | |
| messages = [{"role": "system", "content": system_message}] | |
| # Thêm lịch sử chat | |
| for user_msg, assistant_msg in history: | |
| if user_msg: | |
| messages.append({"role": "user", "content": user_msg}) | |
| if assistant_msg: | |
| messages.append({"role": "assistant", "content": assistant_msg}) | |
| # Thêm tin nhắn hiện tại | |
| messages.append({"role": "user", "content": message}) | |
| # Sinh phản hồi | |
| response = "" | |
| try: | |
| for message in client.chat_completion( | |
| messages, | |
| max_tokens=max_tokens, | |
| stream=True, | |
| temperature=temperature, | |
| top_p=top_p, | |
| ): | |
| token = message.choices[0].delta.content | |
| response += token | |
| time.sleep(0.02) # Tạo hiệu ứng đánh máy | |
| yield response | |
| except Exception as e: | |
| yield f"Xin lỗi, đã có lỗi xảy ra: {str(e)}" | |
| # Tạo giao diện | |
| with gr.Blocks(css=custom_css) as demo: | |
| gr.Markdown("# 🤖 AI Chat Assistant") | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| chatbot = gr.ChatInterface( | |
| respond, | |
| chatbot=gr.Chatbot(height=500, container=True, show_share_button=True), | |
| textbox=gr.Textbox(placeholder="Nhập tin nhắn của bạn...", | |
| container=True, scale=7), | |
| additional_inputs=[ | |
| gr.Textbox( | |
| value="You are a friendly and helpful AI assistant.", | |
| label="System Message", | |
| lines=2 | |
| ), | |
| gr.Slider( | |
| minimum=1, maximum=2048, value=512, step=1, | |
| label="Max Tokens" | |
| ), | |
| gr.Slider( | |
| minimum=0.1, maximum=4.0, value=0.7, step=0.1, | |
| label="Temperature" | |
| ), | |
| gr.Slider( | |
| minimum=0.1, maximum=1.0, value=0.95, step=0.05, | |
| label="Top-p (nucleus sampling)" | |
| ), | |
| gr.Radio( | |
| ["Conservative", "Balanced", "Creative"], | |
| label="Creativity Level", | |
| value="Balanced" | |
| ), | |
| gr.Radio( | |
| ["Short", "Medium", "Long"], | |
| label="Response Length", | |
| value="Medium" | |
| ) | |
| ], | |
| submit_btn="Gửi 📤", | |
| retry_btn="Thử lại 🔄", | |
| undo_btn="Hoàn tác ↩️", | |
| clear_btn="Xóa 🗑️", | |
| ) | |
| with gr.Column(scale=1): | |
| with gr.Accordion("Hướng dẫn sử dụng", open=False): | |
| gr.Markdown(""" | |
| ### Cách sử dụng: | |
| 1. Nhập tin nhắn vào ô văn bản | |
| 2. Điều chỉnh các thông số nếu muốn: | |
| - System Message: Định hướng cho AI | |
| - Max Tokens: Độ dài tối đa của câu trả lời | |
| - Temperature: Độ sáng tạo | |
| - Top-p: Độ đa dạng của từ vựng | |
| 3. Chọn mức độ sáng tạo và độ dài phản hồi | |
| 4. Nhấn 'Gửi' để chat | |
| ### Các nút chức năng: | |
| - 🔄 Thử lại: Tạo câu trả lời mới | |
| - ↩️ Hoàn tác: Quay lại tin nhắn trước | |
| - 🗑️ Xóa: Xóa lịch sử chat | |
| """) | |
| if __name__ == "__main__": | |
| demo.launch(share=True, server_name="0.0.0.0") |