tori29umai commited on
Commit
c8261c5
1 Parent(s): 33146cf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -30
app.py CHANGED
@@ -303,9 +303,10 @@ class CharacterMaker:
303
  self.chat_history = []
304
  self.settings = None
305
  self.model_loaded = threading.Event()
306
- self.current_model = None # 現在ロードされているモデルのタイプを記録
307
  self.model_lock = threading.Lock()
308
  self.use_chat_format = False
 
309
 
310
  def load_model(self, model_type):
311
  with self.model_lock:
@@ -313,36 +314,46 @@ class CharacterMaker:
313
  model_path = os.path.join(MODEL_DIR, self.settings[f'DEFAULT_{model_type.upper()}_MODEL'])
314
  n_gpu_layers = self.settings[f'{model_type.lower()}_n_gpu_layers']
315
 
316
- # 現在のモデルが既にロードされているか、同じ設定であるかチェック
317
- if (self.llama and self.current_model != model_type and
318
- self.llama.model_path == model_path and
319
- self.llama.n_gpu_layers == n_gpu_layers):
320
- print(f"同じ設定のため {self.current_model} から {model_type} へのモデルタイプ変更を行いますが、再ロードはしません。")
321
- self.current_model = model_type
322
- return # 設定が同じ場合は再ロードをスキップ
323
-
324
- if (self.llama and
325
- self.llama.model_path == model_path and
326
- self.llama.n_gpu_layers == n_gpu_layers):
327
- print(f"{model_type} モデルは既に同じ設定でロードされています。")
328
- return # 設定が同じ場合は再ロードをスキップ
329
 
330
- # モデルの初期化
331
- if self.llama:
332
- del self.llama
333
- self.llama = None
334
 
335
- self.model_loaded.clear()
336
 
337
- try:
338
- # 新しいモデルをロード
339
- self.llama = LlamaAdapter(model_path, params, n_gpu_layers)
340
- self.current_model = model_type
341
- self.model_loaded.set()
342
- print(f"{model_type} モデルをロードしました。モデルパス: {model_path}、GPUレイヤー数: {n_gpu_layers}")
343
- except Exception as e:
344
- print(f"{model_type} モデルのロード中にエラーが発生しました: {e}")
345
- self.model_loaded.set()
 
 
 
 
 
 
 
 
 
 
 
 
346
 
347
 
348
  def generate_response(self, input_str):
@@ -621,14 +632,14 @@ def apply_settings():
621
  int(new_config['GenerateParameters'].get('n_ctx', '10000'))
622
  )
623
 
624
- # モデルを再ロード
625
  character_maker.current_model = None
 
626
 
627
  # temp_settings をクリア
628
  temp_settings.clear()
629
 
630
  return "設定をiniファイルに保存し、アプリケーションに反映しました。次回の操作時に新しいモデルがロードされ���す。"
631
-
632
  # Gradioインターフェース
633
  def build_gradio_interface():
634
  global temp_settings
 
303
  self.chat_history = []
304
  self.settings = None
305
  self.model_loaded = threading.Event()
306
+ self.current_model = None
307
  self.model_lock = threading.Lock()
308
  self.use_chat_format = False
309
+ self.last_loaded_settings = None
310
 
311
  def load_model(self, model_type):
312
  with self.model_lock:
 
314
  model_path = os.path.join(MODEL_DIR, self.settings[f'DEFAULT_{model_type.upper()}_MODEL'])
315
  n_gpu_layers = self.settings[f'{model_type.lower()}_n_gpu_layers']
316
 
317
+ # 設定が変更されたかどうかをチェック
318
+ current_settings = self.get_current_settings(model_type)
319
+ if self.last_loaded_settings != current_settings:
320
+ print(f"設定が変更されたため、{model_type}モデルを再ロードします。")
321
+ self.reload_model(model_type, model_path, n_gpu_layers)
322
+ elif self.llama and self.current_model == model_type:
323
+ print(f"{model_type}モデルは既にロードされており、設定も変更されていません。")
324
+ return
325
+ else:
326
+ print(f"{model_type}モデルをロードします。")
327
+ self.reload_model(model_type, model_path, n_gpu_layers)
 
 
328
 
329
+ def reload_model(self, model_type, model_path, n_gpu_layers):
330
+ if self.llama:
331
+ del self.llama
332
+ self.llama = None
333
 
334
+ self.model_loaded.clear()
335
 
336
+ try:
337
+ self.llama = LlamaAdapter(model_path, params, n_gpu_layers)
338
+ self.current_model = model_type
339
+ self.model_loaded.set()
340
+ self.last_loaded_settings = self.get_current_settings(model_type)
341
+ print(f"{model_type}モデルをロードしました。モデルパス: {model_path}、GPUレイヤー数: {n_gpu_layers}")
342
+ except Exception as e:
343
+ print(f"{model_type}モデルのロード中にエラーが発生しました: {e}")
344
+ self.model_loaded.set()
345
+
346
+ def get_current_settings(self, model_type):
347
+ # 現在の設定を取得
348
+ return {
349
+ 'model_path': self.settings[f'DEFAULT_{model_type.upper()}_MODEL'],
350
+ 'n_gpu_layers': self.settings[f'{model_type.lower()}_n_gpu_layers'],
351
+ 'temperature': self.settings[f'{model_type.lower()}_temperature'],
352
+ 'top_p': self.settings[f'{model_type.lower()}_top_p'],
353
+ 'top_k': self.settings[f'{model_type.lower()}_top_k'],
354
+ 'rep_pen': self.settings[f'{model_type.lower()}_rep_pen'],
355
+ 'n_ctx': self.settings[f'{model_type.lower()}_n_ctx']
356
+ }
357
 
358
 
359
  def generate_response(self, input_str):
 
632
  int(new_config['GenerateParameters'].get('n_ctx', '10000'))
633
  )
634
 
635
+ # モデルを再ロードするためにcurrent_modelをリセット
636
  character_maker.current_model = None
637
+ character_maker.last_loaded_settings = None
638
 
639
  # temp_settings をクリア
640
  temp_settings.clear()
641
 
642
  return "設定をiniファイルに保存し、アプリケーションに反映しました。次回の操作時に新しいモデルがロードされ���す。"
 
643
  # Gradioインターフェース
644
  def build_gradio_interface():
645
  global temp_settings