Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from huggingface_hub import hf_hub_download | |
| from llama_cpp import Llama | |
| import os | |
| # Global model instance | |
| model = None | |
| def load_model(): | |
| global model | |
| try: | |
| print("Начинаем загрузку модели из 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 = Llama( | |
| model_path=model_path, | |
| n_ctx=512, | |
| n_threads=os.cpu_count(), | |
| n_batch=128, | |
| n_gpu_layers=0, | |
| embedding_cache_size=1024 | |
| ) | |
| 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: | |
| print("Загружаем модель...") | |
| model = load_model() | |
| print("Модель загружена") | |
| # Отладочная печать входных параметров | |
| print(f""" | |
| Входные параметры: | |
| - message: {message} | |
| - history length: {len(history)} | |
| - system_message: {system_message} | |
| - max_new_tokens: {max_new_tokens} | |
| - temperature: {temperature} | |
| - top_p: {top_p} | |
| """) | |
| # Ограничиваем историю последними 3 сообщениями | |
| recent_history = history[-3:] if len(history) > 3 else history | |
| context = f"{system_message}\n\n" | |
| for user_msg, assistant_msg in recent_history: | |
| context += f"User: {user_msg}\nAssistant: {assistant_msg}\n" | |
| context += f"User: {message}\nAssistant: " | |
| print(f"Генерируем ответ для контекста длиной {len(context)} символов") | |
| try: | |
| response = model( | |
| prompt=context, | |
| max_tokens=max_new_tokens, | |
| temperature=temperature, | |
| top_p=top_p, | |
| stop=["User:", "\n\n", "<|endoftext|>"], | |
| echo=False | |
| ) | |
| generated_text = response['choices'][0]['text'] | |
| print(f"Ответ сгенерирован успешно, длина: {len(generated_text)}") | |
| return generated_text.strip() | |
| except Exception as inner_e: | |
| print(f"Ошибка при генерации: {str(inner_e)}") | |
| print(f"Тип ошибки: {type(inner_e).__name__}") | |
| return f"Ошибка при генерации: {str(inner_e)}" | |
| except KeyboardInterrupt: | |
| return "Генерация прервана пользователем" | |
| except Exception as e: | |
| print(f"Основная ошибка: {str(e)}") | |
| print(f"Тип ошибки: {type(e).__name__}") | |
| traceback.print_exc() # Добавим полный стек ошибки | |
| return f"Произошла ошибка: {str(e)}\nТип ошибки: {type(e).__name__}" | |
| # Создаем интерфейс с оптимизированными параметрами | |
| demo = gr.ChatInterface( | |
| respond, | |
| additional_inputs=[ | |
| gr.Textbox( | |
| value="Ты дружелюбный и полезный ассистент. Отвечай обдуманно и по делу.", | |
| label="System message" | |
| ), | |
| gr.Slider( | |
| minimum=1, | |
| maximum=512, | |
| value=128, | |
| step=1, | |
| label="Max new tokens" | |
| ), | |
| gr.Slider( | |
| minimum=0.1, | |
| maximum=2.0, | |
| value=0.3, | |
| 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="LLight Chat Model (Optimized)", | |
| description="Оптимизированный чат с LLight-3.2-3B", | |
| examples = [ | |
| ["Привет! Как дела?", | |
| "Ты дружелюбный и полезный ассистент. Отвечай обдуманно и по делу.", # system_message | |
| 128, # max_new_tokens | |
| 0.3, # temperature | |
| 0.95 # top_p | |
| ], | |
| ["Расскажи мне о себе", | |
| "Ты дружелюбный и полезный ассистент. Отвечай обдуманно и по делу.", | |
| 128, | |
| 0.3, | |
| 0.95 | |
| ], | |
| ["Что ты умеешь делать?", | |
| "Ты дружелюбный и полезный ассистент. Отвечай обдуманно и по делу.", | |
| 128, | |
| 0.3, | |
| 0.95 | |
| ] | |
| ], | |
| cache_examples=True | |
| ) | |
| # Запускаем приложение | |
| if __name__ == "__main__": | |
| try: | |
| print("Инициализация приложения...") | |
| model = load_model() # Предзагружаем модель | |
| print("Модель загружена успешно при старте") | |
| except Exception as e: | |
| print(f"Ошибка при инициализации: {str(e)}") | |
| demo.launch( | |
| show_error=True, # Показывать подробности ошибок | |
| debug=True # Включить отладочный режим | |
| ) |