sirochild commited on
Commit
1b3d9b9
·
verified ·
1 Parent(s): ebc78dc

Upload 5 files

Browse files
Files changed (3) hide show
  1. .gitignore +30 -0
  2. app.py +70 -9
  3. generate_dialogue_with_swallow.py +1 -1
.gitignore ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ env/
8
+ build/
9
+ develop-eggs/
10
+ dist/
11
+ downloads/
12
+ eggs/
13
+ .eggs/
14
+ lib/
15
+ lib64/
16
+ parts/
17
+ sdist/
18
+ var/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+
23
+ # ログファイル
24
+ *.log
25
+
26
+ # 環境変数
27
+ .env
28
+
29
+ # キャッシュ
30
+ .cache/
app.py CHANGED
@@ -24,6 +24,10 @@ print("Swallowモデルをロード中...")
24
  MODEL_REPO = "mmnga/tokyotech-llm-Swallow-MX-8x7b-NVE-v0.1-gguf"
25
  MODEL_FILE = "tokyotech-llm-Swallow-MX-8x7b-NVE-v0.1-q4_K_M.gguf"
26
 
 
 
 
 
27
  try:
28
  # モデルファイルをダウンロード
29
  print(f"モデルファイル {MODEL_FILE} をダウンロード中...")
@@ -32,21 +36,78 @@ try:
32
 
33
  # 最も安全な設定でモデルをロード(CPUのみ)
34
  print("CPUモードでモデルをロードします")
35
- swallow_model = Llama(
36
- model_path=model_path,
37
- n_ctx=2048, # コンテキスト長
38
- n_gpu_layers=0, # GPUを使用しない
39
- n_threads=4, # スレッド数を制限
40
- verbose=True # デバッグ出力を有効化
41
- )
42
- print("モデルのロード完了")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  print("Swallowモデルのロード完了")
44
  tokenizer = None # llama-cppではtokenizerは不要
45
  except Exception as e:
46
  print(f"Swallowモデルのロードエラー: {e}")
47
  import traceback
48
  traceback.print_exc()
49
- swallow_model = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  tokenizer = None
51
 
52
  # 日本語感情分析モデルの初期化(グローバル変数として保持)
 
24
  MODEL_REPO = "mmnga/tokyotech-llm-Swallow-MX-8x7b-NVE-v0.1-gguf"
25
  MODEL_FILE = "tokyotech-llm-Swallow-MX-8x7b-NVE-v0.1-q4_K_M.gguf"
26
 
27
+ # メモリ使用量を確認
28
+ import psutil
29
+ print(f"利用可能なメモリ: {psutil.virtual_memory().available / (1024 * 1024 * 1024):.2f} GB")
30
+
31
  try:
32
  # モデルファイルをダウンロード
33
  print(f"モデルファイル {MODEL_FILE} をダウンロード中...")
 
36
 
37
  # 最も安全な設定でモデルをロード(CPUのみ)
38
  print("CPUモードでモデルをロードします")
39
+ try:
40
+ swallow_model = Llama(
41
+ model_path=model_path,
42
+ n_ctx=2048, # コンテキスト長
43
+ n_gpu_layers=0, # GPUを使用しない
44
+ n_threads=4, # スレッド数を制限
45
+ verbose=True # デバッグ出力を有効化
46
+ )
47
+ print("モデルのロード完了")
48
+ except Exception as e:
49
+ print(f"モデルのロードに失敗しました: {e}")
50
+ import traceback
51
+ traceback.print_exc()
52
+ # 再試行(より安全な設定で)
53
+ print("より安全な設定でモデルのロードを再試行します...")
54
+ swallow_model = Llama(
55
+ model_path=model_path,
56
+ n_ctx=1024, # より短いコンテキスト長
57
+ n_gpu_layers=0, # GPUを使用しない
58
+ n_threads=1, # 最小スレッド数
59
+ verbose=True, # デバッグ出力を有効化
60
+ seed=42 # 固定シード値
61
+ )
62
+ print("モデルのロード完了(安全モード)")
63
  print("Swallowモデルのロード完了")
64
  tokenizer = None # llama-cppではtokenizerは不要
65
  except Exception as e:
66
  print(f"Swallowモデルのロードエラー: {e}")
67
  import traceback
68
  traceback.print_exc()
69
+
70
+ # フォールバックとして非常に小さなモデルを使用
71
+ try:
72
+ print("フォールバックとして非常に小さなモデルを使用します...")
73
+ from transformers import pipeline
74
+
75
+ # テキスト生成用の小さなモデルをロード
76
+ small_model = pipeline("text-generation", model="TinyLlama/TinyLlama-1.1B-Chat-v1.0")
77
+
78
+ # Llamaクラスと同様のインターフェースを持つラッパークラスを作成
79
+ class SmallModelWrapper:
80
+ def __call__(self, prompt, max_tokens=100, temperature=0.7, top_p=0.9, stop=None, echo=False):
81
+ try:
82
+ result = small_model(
83
+ prompt,
84
+ max_length=len(prompt.split()) + max_tokens,
85
+ temperature=temperature,
86
+ top_p=top_p,
87
+ do_sample=temperature > 0
88
+ )
89
+
90
+ generated_text = result[0]["generated_text"]
91
+
92
+ # echoがFalseの場合はプロンプトを除去
93
+ if not echo and generated_text.startswith(prompt):
94
+ generated_text = generated_text[len(prompt):]
95
+
96
+ return {
97
+ "choices": [{"text": generated_text}]
98
+ }
99
+ except Exception as gen_error:
100
+ print(f"小さなモデルでの生成エラー: {gen_error}")
101
+ return {
102
+ "choices": [{"text": "(……システムエラーが発生しました)"}]
103
+ }
104
+
105
+ swallow_model = SmallModelWrapper()
106
+ print("フォールバックモデルのロード完了")
107
+ except Exception as fallback_error:
108
+ print(f"フォールバックモデルのロードエラー: {fallback_error}")
109
+ swallow_model = None
110
+
111
  tokenizer = None
112
 
113
  # 日本語感情分析モデルの初期化(グローバル変数として保持)
generate_dialogue_with_swallow.py CHANGED
@@ -28,7 +28,7 @@ def generate_dialogue_with_swallow(history, message, affection, stage_name, scen
28
  # モデルがロードされていない場合はフォールバック応答を返す
29
  if swallow_model is None:
30
  print("モデルがロードされていないため、フォールバック応答を返します")
31
- return "(……システムエラーが発生しました)"
32
 
33
  history_text = "\n".join([f"ユーザー: {u}\n麻理: {m}" for u, m in history])
34
  task_prompt = f"指示: {instruction}" if instruction else f"ユーザー: {message}"
 
28
  # モデルがロードされていない場合はフォールバック応答を返す
29
  if swallow_model is None:
30
  print("モデルがロードされていないため、フォールバック応答を返します")
31
+ return "(……システムエラーが発生しました。しばらく待ってから再度お試しください)"
32
 
33
  history_text = "\n".join([f"ユーザー: {u}\n麻理: {m}" for u, m in history])
34
  task_prompt = f"指示: {instruction}" if instruction else f"ユーザー: {message}"