DocUA commited on
Commit
669a418
·
1 Parent(s): 7282079

перевірка наявності сигнатури при розгортанні на HF

Browse files
Files changed (2) hide show
  1. app.py +31 -2
  2. sdc_classifier.py +34 -0
app.py CHANGED
@@ -2,6 +2,7 @@ import gradio as gr
2
  from sdc_classifier import SDCClassifier
3
  from dotenv import load_dotenv
4
  import json
 
5
 
6
  # Load environment variables
7
  load_dotenv()
@@ -10,12 +11,40 @@ def main():
10
  # Ініціалізуємо класифікатор
11
  classifier = SDCClassifier()
12
 
13
- # Спроба завантажити початкові класи та signatures
14
  DEFAULT_CLASSES_FILE = "classes_short.json"
15
  DEFAULT_SIGNATURES_FILE = "signatures.npz"
 
16
 
17
  print("Завантаження початкових класів...")
18
- classifier.load_initial_state(DEFAULT_CLASSES_FILE, DEFAULT_SIGNATURES_FILE)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  with gr.Blocks() as demo:
21
  gr.Markdown("# SDC Classifier з Gradio")
 
2
  from sdc_classifier import SDCClassifier
3
  from dotenv import load_dotenv
4
  import json
5
+ import os
6
 
7
  # Load environment variables
8
  load_dotenv()
 
11
  # Ініціалізуємо класифікатор
12
  classifier = SDCClassifier()
13
 
14
+ # Константи файлів
15
  DEFAULT_CLASSES_FILE = "classes_short.json"
16
  DEFAULT_SIGNATURES_FILE = "signatures.npz"
17
+ CACHE_FILE = "embeddings_cache.db"
18
 
19
  print("Завантаження початкових класів...")
20
+
21
+ # Перевірка наявності кешу
22
+ if not os.path.exists(CACHE_FILE):
23
+ print("Кеш ембедінгів не знайдено. Створюємо новий...")
24
+
25
+ # Перевіряємо наявність classes.json
26
+ if not os.path.exists(DEFAULT_CLASSES_FILE):
27
+ print(f"ПОМИЛКА: Файл {DEFAULT_CLASSES_FILE} не знайдено!")
28
+ return
29
+
30
+ # Завантажуємо класи і створюємо нові signatures
31
+ try:
32
+ classifier.load_initial_state(DEFAULT_CLASSES_FILE, DEFAULT_SIGNATURES_FILE)
33
+ result = classifier.initialize_signatures(
34
+ force_rebuild=True, # Примусово будуємо нові signatures
35
+ signatures_file=DEFAULT_SIGNATURES_FILE
36
+ )
37
+ print(f"Результат ініціалізації: {result}")
38
+ except Exception as e:
39
+ print(f"ПОМИЛКА при ініціалізації: {str(e)}")
40
+ return
41
+ else:
42
+ # Якщо кеш існує, просто завантажуємо початковий стан
43
+ try:
44
+ classifier.load_initial_state(DEFAULT_CLASSES_FILE, DEFAULT_SIGNATURES_FILE)
45
+ except Exception as e:
46
+ print(f"ПОМИЛКА при завантаженні початкового стану: {str(e)}")
47
+ return
48
 
49
  with gr.Blocks() as demo:
50
  gr.Markdown("# SDC Classifier з Gradio")
sdc_classifier.py CHANGED
@@ -24,6 +24,11 @@ class SDCClassifier:
24
  self.embeddings_mean = None
25
  self.embeddings_std = None
26
 
 
 
 
 
 
27
  # Ініціалізація кешу
28
  from embedding_cache import EmbeddingCache
29
  self.cache = EmbeddingCache(cache_path)
@@ -61,6 +66,35 @@ class SDCClassifier:
61
  self.classes_json = self.base_classes_json.copy()
62
  self.class_signatures = self.base_signatures.copy() if self.base_signatures else None
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  def load_initial_state(self, classes_file: str, signatures_file: str):
65
  """Завантаження початкового стану при старті застосунку"""
66
  self.base_classes_json = self.load_classes(classes_file)
 
24
  self.embeddings_mean = None
25
  self.embeddings_std = None
26
 
27
+ # Створення директорії для кешу, якщо потрібно
28
+ cache_dir = os.path.dirname(cache_path)
29
+ if cache_dir and not os.path.exists(cache_dir):
30
+ os.makedirs(cache_dir)
31
+
32
  # Ініціалізація кешу
33
  from embedding_cache import EmbeddingCache
34
  self.cache = EmbeddingCache(cache_path)
 
66
  self.classes_json = self.base_classes_json.copy()
67
  self.class_signatures = self.base_signatures.copy() if self.base_signatures else None
68
 
69
+ def load_initial_state(self, classes_file: str, signatures_file: str) -> str:
70
+ """
71
+ Завантаження початкового стану при старті застосунку
72
+
73
+ Args:
74
+ classes_file: шлях до файлу з класами
75
+ signatures_file: шлях до файлу з signatures
76
+
77
+ Returns:
78
+ str: повідомлення про результат завантаження
79
+ """
80
+ try:
81
+ self.base_classes_json = self.load_classes(classes_file)
82
+ if os.path.exists(signatures_file):
83
+ self.base_signatures = self.load_signatures(signatures_file)
84
+
85
+ # Встановлюємо поточний стан як базовий
86
+ self.classes_json = self.base_classes_json.copy()
87
+ self.class_signatures = self.base_signatures.copy() if self.base_signatures else None
88
+
89
+ return f"Завантажено {len(self.base_classes_json)} базових класів"
90
+ except Exception as e:
91
+ return f"Помилка при завантаженні базового стану: {str(e)}"
92
+
93
+ def restore_base_state(self) -> None:
94
+ """Відновлення базового стану"""
95
+ self.classes_json = self.base_classes_json.copy()
96
+ self.class_signatures = self.base_signatures.copy() if self.base_signatures else None
97
+
98
  def load_initial_state(self, classes_file: str, signatures_file: str):
99
  """Завантаження початкового стану при старті застосунку"""
100
  self.base_classes_json = self.load_classes(classes_file)