KoDer123 commited on
Commit
a388086
·
verified ·
1 Parent(s): 55c25c0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -35
app.py CHANGED
@@ -27,36 +27,13 @@ if torch.cuda.is_available():
27
  else:
28
  logger.info("CUDA недоступен, будет использоваться CPU")
29
 
30
- # Проверяем наличие общих директорий для хранения данных
31
- possible_dirs = [
32
- "/data", # Стандартный путь для Spaces с подключенным диском
33
- "/mnt/data", # Альтернативный путь для подключенного диска
34
- "/home/user/data", # Директория пользователя
35
- "/tmp" # Временная директория (запасной вариант)
36
- ]
37
 
38
- # Находим первую доступную директорию
39
- DISK_DIR = None
40
- for dir_path in possible_dirs:
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 = " KoDer123/Nerealnost_8M"
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 = tokenizer.eos_token if tokenizer.eos_token else "</s>"
 
 
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
- response = generated_text[response_start:].strip()
 
 
 
 
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
  # Примеры вопросов