sadsada / app.py
satana123's picture
Update app.py
f2b4a5a verified
# Установка необходимых библиотек:
# pip install gradio huggingface_hub torch transformers
import gradio as gr
from huggingface_hub import hf_hub_download
from transformers import GPTJForCausalLM, AutoTokenizer
import torch
# Путь к модели на Hugging Face
MODEL_REPO = "EleutherAI/gpt-j-6B"
# Загрузка токенизатора
tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO)
# Загрузка модели
model = GPTJForCausalLM.from_pretrained(
MODEL_REPO,
revision="float16",
torch_dtype=torch.float16,
low_cpu_mem_usage=True
).to("cuda" if torch.cuda.is_available() else "cpu")
# Функция для генерации ответов
def generate_response(prompt, history=[]):
# Объединение истории в один контекст
input_text = "".join([f"User: {item[0]}\nBot: {item[1]}\n" for item in history])
input_text += f"User: {prompt}\nBot:"
# Токенизация
input_ids = tokenizer.encode(input_text, return_tensors="pt").to(model.device)
# Генерация
with torch.no_grad():
output = model.generate(
input_ids,
max_length=1024,
temperature=0.7,
top_p=0.9,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
# Декодирование и извлечение ответа
response = tokenizer.decode(output[0], skip_special_tokens=True)
response = response.split("User:")[-1].split("Bot:")[-1].strip()
# Обновление истории
history.append((prompt, response))
return history, history
# Кастомный CSS для интерфейса
custom_css = """
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f0f2f5;
margin: 0;
padding: 0;
}
#chatbot-container {
width: 80%;
max-width: 800px;
margin: 50px auto;
background: #fff;
border-radius: 10px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
overflow: hidden;
animation: fadeIn 0.5s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.chat-message {
display: flex;
align-items: flex-start;
padding: 15px;
border-bottom: 1px solid #f0f0f0;
animation: slideIn 0.3s ease-in-out;
}
@keyframes slideIn {
from { opacity: 0; transform: translateX(-20px); }
to { opacity: 1; transform: translateX(0); }
}
.chat-message.user .message-content {
background-color: #0078d7;
color: #fff;
border-radius: 15px 15px 0 15px;
padding: 10px 15px;
max-width: 70%;
margin-left: auto;
}
.chat-message.bot .message-content {
background-color: #e1e1e1;
color: #333;
border-radius: 15px 15px 15px 0;
padding: 10px 15px;
max-width: 70%;
margin-right: auto;
}
input[type="text"] {
width: calc(100% - 20px);
margin: 10px;
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
button {
background-color: #0078d7;
color: #fff;
border: none;
padding: 10px 20px;
margin: 10px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
button:hover {
background-color: #005bb5;
}
"""
# Интерфейс Gradio
with gr.Blocks(css=custom_css) as chat_interface:
gr.Markdown("# 🧠 Умный Чат с GPT-J-6B")
with gr.Box(elem_id="chatbot-container"):
chatbot = gr.Chatbot()
user_input = gr.Textbox(placeholder="Введите сообщение...")
clear_btn = gr.Button("Очистить историю")
user_input.submit(generate_response, [user_input, chatbot], [chatbot, user_input])
clear_btn.click(lambda: None, None, chatbot)
# Запуск приложения
chat_interface.launch(debug=True)