Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -27,36 +27,13 @@ if torch.cuda.is_available():
|
|
27 |
else:
|
28 |
logger.info("CUDA недоступен, будет использоваться CPU")
|
29 |
|
30 |
-
#
|
31 |
-
|
32 |
-
|
33 |
-
"/mnt/data", # Альтернативный путь для подключенного диска
|
34 |
-
"/home/user/data", # Директория пользователя
|
35 |
-
"/tmp" # Временная директория (запасной вариант)
|
36 |
-
]
|
37 |
|
38 |
-
#
|
39 |
-
DISK_DIR =
|
40 |
-
|
41 |
-
try:
|
42 |
-
if not os.path.exists(dir_path):
|
43 |
-
os.makedirs(dir_path, exist_ok=True)
|
44 |
-
|
45 |
-
# Проверяем, можем ли мы писать в эту директорию
|
46 |
-
test_file = os.path.join(dir_path, "write_test.txt")
|
47 |
-
with open(test_file, "w") as f:
|
48 |
-
f.write("test")
|
49 |
-
os.remove(test_file)
|
50 |
-
|
51 |
-
DISK_DIR = dir_path
|
52 |
-
logger.info(f"Используем директорию для хранения: {DISK_DIR}")
|
53 |
-
break
|
54 |
-
except (OSError, PermissionError) as e:
|
55 |
-
logger.warning(f"Не удалось использовать директорию {dir_path}: {e}")
|
56 |
-
|
57 |
-
if DISK_DIR is None:
|
58 |
-
DISK_DIR = "." # Используем текущую директорию, если ничего не найдено
|
59 |
-
logger.warning(f"Внимание! Используем текущую директорию: {os.path.abspath(DISK_DIR)}")
|
60 |
|
61 |
# Настраиваем пути для сохранения моделей
|
62 |
CACHE_DIR = os.path.join(DISK_DIR, "models_cache")
|
@@ -88,14 +65,17 @@ logger.info("Информация о дисках перед загрузкой:
|
|
88 |
check_disk_space("/")
|
89 |
check_disk_space(DISK_DIR)
|
90 |
|
91 |
-
# Загрузка модели и токенизатора
|
92 |
-
model_name = "
|
93 |
|
94 |
# Глобальные переменные для модели
|
95 |
model = None
|
96 |
tokenizer = None
|
97 |
is_model_loaded = False
|
98 |
|
|
|
|
|
|
|
99 |
# Функция для загрузки модели
|
100 |
def load_model():
|
101 |
global model, tokenizer, is_model_loaded
|
@@ -167,7 +147,9 @@ check_disk_space(DISK_DIR)
|
|
167 |
|
168 |
# Определяем шаблон Q&A, как при обучении
|
169 |
qa_prompt = "<s>Пользователь: {}\nАссистент: {}"
|
170 |
-
EOS_TOKEN =
|
|
|
|
|
171 |
|
172 |
def respond(
|
173 |
message,
|
@@ -180,8 +162,8 @@ def respond(
|
|
180 |
global model, tokenizer, is_model_loaded
|
181 |
|
182 |
# Проверяем, загружена ли модель
|
183 |
-
if not is_model_loaded or model is None:
|
184 |
-
return "Модель не загружена или произошла ошибка при загрузке."
|
185 |
|
186 |
# Замеряем время
|
187 |
start_time = time.time()
|
@@ -218,7 +200,11 @@ def respond(
|
|
218 |
|
219 |
# Извлекаем только часть после "Ассистент: "
|
220 |
response_start = generated_text.rfind("Ассистент: ") + len("Ассистент: ")
|
221 |
-
|
|
|
|
|
|
|
|
|
222 |
|
223 |
end_time = time.time()
|
224 |
generation_time = end_time - start_time
|
@@ -280,6 +266,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
|
280 |
* **Модель**: {model_name}
|
281 |
* **Режим работы**: {"GPU" if torch.cuda.is_available() else "CPU"}
|
282 |
* **Директория для кэша**: {CACHE_DIR}
|
|
|
283 |
""")
|
284 |
|
285 |
# Примеры вопросов
|
|
|
27 |
else:
|
28 |
logger.info("CUDA недоступен, будет использоваться CPU")
|
29 |
|
30 |
+
# Используем домашнюю директорию пользователя (она всегда должна быть доступна)
|
31 |
+
user_home = os.path.expanduser("~")
|
32 |
+
DISK_DIR = os.path.join(user_home, "app_data")
|
|
|
|
|
|
|
|
|
33 |
|
34 |
+
# Создаем директорию, если она не существует
|
35 |
+
os.makedirs(DISK_DIR, exist_ok=True)
|
36 |
+
logger.info(f"Используем директорию для хранения: {DISK_DIR}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
# Настраиваем пути для сохранения моделей
|
39 |
CACHE_DIR = os.path.join(DISK_DIR, "models_cache")
|
|
|
65 |
check_disk_space("/")
|
66 |
check_disk_space(DISK_DIR)
|
67 |
|
68 |
+
# Загрузка модели и токенизатора (исправлен лишний пробел в имени)
|
69 |
+
model_name = "KoDer123/Nerealnost_8M"
|
70 |
|
71 |
# Глобальные переменные для модели
|
72 |
model = None
|
73 |
tokenizer = None
|
74 |
is_model_loaded = False
|
75 |
|
76 |
+
# Переопределяем EOS_TOKEN для случая, когда токенизатор не загружен
|
77 |
+
DEFAULT_EOS_TOKEN = "</s>"
|
78 |
+
|
79 |
# Функция для загрузки модели
|
80 |
def load_model():
|
81 |
global model, tokenizer, is_model_loaded
|
|
|
147 |
|
148 |
# Определяем шаблон Q&A, как при обучении
|
149 |
qa_prompt = "<s>Пользователь: {}\nАссистент: {}"
|
150 |
+
EOS_TOKEN = DEFAULT_EOS_TOKEN
|
151 |
+
if tokenizer is not None and hasattr(tokenizer, 'eos_token') and tokenizer.eos_token:
|
152 |
+
EOS_TOKEN = tokenizer.eos_token
|
153 |
|
154 |
def respond(
|
155 |
message,
|
|
|
162 |
global model, tokenizer, is_model_loaded
|
163 |
|
164 |
# Проверяем, загружена ли модель
|
165 |
+
if not is_model_loaded or model is None or tokenizer is None:
|
166 |
+
return "Модель не загружена или произошла ошибка при загрузке. Проверьте имя модели 'KoDer123/Nerealnost_8M'."
|
167 |
|
168 |
# Замеряем время
|
169 |
start_time = time.time()
|
|
|
200 |
|
201 |
# Извлекаем только часть после "Ассистент: "
|
202 |
response_start = generated_text.rfind("Ассистент: ") + len("Ассистент: ")
|
203 |
+
if response_start >= len("Ассистент: "): # Проверяем, что "Ассистент: " найден
|
204 |
+
response = generated_text[response_start:].strip()
|
205 |
+
else:
|
206 |
+
# Если не найдено, возвращаем весь текст
|
207 |
+
response = generated_text.strip()
|
208 |
|
209 |
end_time = time.time()
|
210 |
generation_time = end_time - start_time
|
|
|
266 |
* **Модель**: {model_name}
|
267 |
* **Режим работы**: {"GPU" if torch.cuda.is_available() else "CPU"}
|
268 |
* **Директория для кэша**: {CACHE_DIR}
|
269 |
+
* **Статус загрузки**: {"Успешно" if is_model_loaded else "Ошибка"}
|
270 |
""")
|
271 |
|
272 |
# Примеры вопросов
|