Spaces:
Sleeping
Sleeping
import gradio as gr | |
from ctransformers import AutoModelForCausalLM | |
import os | |
from huggingface_hub import hf_hub_download | |
# Глобальная переменная для модели | |
model = None | |
def load_model(): | |
global model | |
try: | |
print("Начинаем загрузку модели из Hub...") | |
# Загружаем файл модели из Hub | |
model_path = hf_hub_download( | |
repo_id="AugustLight/LLight-3.2-3B-Instruct", | |
filename="Llight.Q8_0.gguf", | |
repo_type="model" | |
) | |
print(f"Модель загружена в: {model_path}") | |
# Инициализируем модель | |
model = AutoModelForCausalLM.from_pretrained( | |
model_path, | |
model_type="llama", | |
context_length=2048, | |
gpu_layers=0, | |
threads=4 | |
) | |
print("Модель успешно инициализирована!") | |
return model | |
except Exception as e: | |
print(f"Подробная ошибка при загрузке модели: {str(e)}") | |
raise e | |
def respond(message, history, system_message, max_new_tokens, temperature, top_p): | |
try: | |
global model | |
if model is None: | |
model = load_model() | |
# Формируем контекст из истории | |
context = f"{system_message}\n\n" | |
for user_msg, assistant_msg in history: | |
context += f"User: {user_msg}\nAssistant: {assistant_msg}\n" | |
context += f"User: {message}\nAssistant: " | |
print(f"Генерируем ответ для контекста длиной {len(context)} символов") | |
# Генерируем ответ | |
response = model( | |
context, | |
max_tokens=max_new_tokens, | |
temperature=temperature, | |
top_p=top_p, | |
stop=["User:", "\n\n", "<|endoftext|>"] | |
) | |
print(f"Ответ сгенерирован успешно, длина: {len(response)}") | |
return response.strip() | |
except Exception as e: | |
error_msg = f"Произошла ошибка: {str(e)}" | |
print(error_msg) | |
return error_msg | |
# Создаем интерфейс | |
demo = gr.ChatInterface( | |
respond, | |
additional_inputs=[ | |
gr.Textbox( | |
value="Ты дружелюбный и полезный ассистент. Ты всегда отвечаешь кратко и по делу.", | |
label="System message" | |
), | |
gr.Slider( | |
minimum=1, | |
maximum=2048, | |
value=512, | |
step=1, | |
label="Max new tokens" | |
), | |
gr.Slider( | |
minimum=0.1, | |
maximum=2.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)" | |
), | |
], | |
title="GGUF Chat Model", | |
description="Чат с GGUF моделью (Llight.Q8_0.gguf)", | |
examples=[ | |
["Привет! Как дела?"], | |
["Расскажи мне о себе"], | |
["Что ты умеешь делать?"] | |
], | |
cache_examples=False | |
) | |
# Запускаем приложение | |
if __name__ == "__main__": | |
# Пробуем загрузить модель при запуске | |
try: | |
print("Инициализация приложения...") | |
model = load_model() | |
print("Модель загружена успешно при старте") | |
except Exception as e: | |
print(f"Ошибка при инициализации: {str(e)}") | |
demo.launch() |