File size: 4,946 Bytes
68300d0
8cbfc7e
1275349
 
fe67270
cb249bf
fe67270
68300d0
464f8f9
fe67270
78ac0ef
4c2e13f
78ac0ef
4c2e13f
 
 
 
 
 
 
78ac0ef
1275349
 
cb249bf
 
 
 
 
78ac0ef
1275349
4c2e13f
78ac0ef
 
 
 
 
464f8f9
fe67270
464f8f9
78ac0ef
fe67270
78ac0ef
 
cb249bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fe67270
464f8f9
78ac0ef
 
 
464f8f9
cb249bf
fe67270
 
 
 
9f5efd5
fe67270
 
 
 
cb249bf
 
fe67270
 
 
 
 
78ac0ef
437bce8
fe67270
 
 
 
 
 
 
1275349
fe67270
 
 
cb249bf
 
eff9ab5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb249bf
68300d0
 
464f8f9
68300d0
78ac0ef
 
cb249bf
78ac0ef
 
 
 
de3d994
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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:
            model = load_model()
        
        with gr.Progress() as progress:
            progress(0, desc="Подготовка контекста...")
            
            # Ограничиваем историю последними 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)} символов")
            
            progress(0.3, desc="Генерация ответа...")
            response = model(
                prompt=context,
                max_tokens=max_new_tokens,
                temperature=temperature,
                top_p=top_p,
                stop=["User:", "\n\n", "<|endoftext|>"],
                echo=False
            )
            
            progress(1, desc="Готово!")
            generated_text = response['choices'][0]['text']
            print(f"Ответ сгенерирован успешно, длина: {len(generated_text)}")
            return generated_text.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=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()