File size: 6,149 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
8cc000e
78ac0ef
8cc000e
78ac0ef
cb249bf
 
 
8cc000e
 
 
 
 
 
 
 
 
 
 
cb249bf
 
 
 
 
 
 
 
 
 
8cc000e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fe67270
8cc000e
 
464f8f9
8cc000e
 
 
464f8f9
cb249bf
fe67270
 
 
 
9f5efd5
fe67270
 
 
 
cb249bf
 
fe67270
 
 
 
 
78ac0ef
437bce8
fe67270
 
 
 
 
 
 
1275349
fe67270
 
 
cb249bf
 
eff9ab5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
af9ae78
8cc000e
68300d0
 
464f8f9
68300d0
78ac0ef
 
cb249bf
78ac0ef
 
 
 
8cc000e
 
 
 
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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("Модель загружена")
        
        with gr.Progress() as progress:
            progress(0, desc="Подготовка контекста...")
            
            # Отладочная печать входных параметров
            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:
                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 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__}")
        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        # Включить отладочный режим
    )