VOIDER commited on
Commit
d7d7f03
·
verified ·
1 Parent(s): 578ee8e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -16
app.py CHANGED
@@ -2,20 +2,19 @@ import os
2
  import sys
3
  import subprocess
4
 
5
- # --- ХАК ДЛЯ УСТАНОВКИ LLAMA-CPP-PYTHON ---
6
- # Устанавливаем библиотеку при запуске, чтобы избежать компиляции во время сборки Space
7
  try:
8
  import llama_cpp
9
- print("llama-cpp-python уже установлен.")
10
  except ImportError:
11
- print("Установка llama-cpp-python из пресобранного wheel (CPU)...")
12
- # Используем pre-built wheel для Linux x86_64 (избегаем компиляции)
13
  subprocess.check_call([
14
  sys.executable, "-m", "pip", "install",
15
- "llama-cpp-python",
16
- "--extra-index-url", "https://abetlen.github.io/llama-cpp-python/whl/cpu"
17
  ])
18
- print("Установка завершена!")
19
  import llama_cpp
20
  # ------------------------------------------
21
 
@@ -41,16 +40,17 @@ def load_model():
41
  repo_id=REPO_ID,
42
  filename=MODEL_FILENAME
43
  )
 
44
  llm = Llama(
45
  model_path=model_path,
46
- n_ctx=8192,
47
- n_gpu_layers=0,
48
  verbose=True,
49
  chat_format="chatml-function-calling"
50
  )
51
  print("Модель успешно загружена!")
52
  except Exception as e:
53
- print(f"Ошибка загрузки: {e}")
54
  raise e
55
  return llm
56
 
@@ -63,7 +63,8 @@ def evaluate_image(image, progress=gr.Progress()):
63
  if image is None:
64
  return "Пожалуйста, загрузите изображение.", ""
65
 
66
- # Ленивая загрузка модели при первом запросе
 
67
  model = load_model()
68
 
69
  system_prompt = "You are doing the image quality assessment task."
@@ -74,6 +75,7 @@ def evaluate_image(image, progress=gr.Progress()):
74
  "Please only output the final answer with only one score in <answer> </answer> tags."
75
  )
76
 
 
77
  base64_image = image_to_base64(image)
78
  image_url = f"data:image/jpeg;base64,{base64_image}"
79
 
@@ -91,9 +93,10 @@ def evaluate_image(image, progress=gr.Progress()):
91
  full_response = ""
92
  print("Начало генерации...")
93
 
 
94
  stream = model.create_chat_completion(
95
  messages=messages,
96
- max_tokens=1024,
97
  temperature=0.6,
98
  stream=True
99
  )
@@ -104,16 +107,19 @@ def evaluate_image(image, progress=gr.Progress()):
104
  if "content" in delta and delta["content"]:
105
  content = delta["content"]
106
  full_response += content
 
107
  yield full_response, "Вычисляется..."
108
 
 
109
  score_match = re.search(r'<answer>\s*([\d\.]+)\s*</answer>', full_response)
110
  final_score = score_match.group(1) if score_match else "Не найдено"
111
 
112
  yield full_response, final_score
113
 
 
114
  with gr.Blocks(title="VisualQuality-R1 (Q8 GGUF)") as demo:
115
  gr.Markdown("# 👁️ VisualQuality-R1 (7B Q8)")
116
- gr.Markdown("Оценка качества изображений (Chain of Thought). Работает на CPU.")
117
 
118
  with gr.Row():
119
  with gr.Column():
@@ -122,9 +128,14 @@ with gr.Blocks(title="VisualQuality-R1 (Q8 GGUF)") as demo:
122
 
123
  with gr.Column():
124
  output_score = gr.Label(label="Итоговая оценка")
125
- output_text = gr.Textbox(label="Ход мыслей (CoT)", lines=15, show_copy_button=True)
 
126
 
127
- run_btn.click(evaluate_image, inputs=[input_img], outputs=[output_text, output_score])
 
 
 
 
128
 
129
  if __name__ == "__main__":
130
  demo.queue().launch()
 
2
  import sys
3
  import subprocess
4
 
5
+ # --- БЛОК УСТАНОВКИ БИБЛИОТЕК ПРИ ЗАПУСКЕ ---
6
+ # Это позволяет избежать ошибок сборки и компилировать библиотеку уже в работающем контейнере
7
  try:
8
  import llama_cpp
9
+ print("Библиотека llama-cpp-python уже установлена.")
10
  except ImportError:
11
+ print("Установка llama-cpp-python... (Это может занять пару минут при первом запуске)")
12
+ # Устанавливаем версию 0.3.16 (или новее), которая поддерживает Qwen2-VL
13
  subprocess.check_call([
14
  sys.executable, "-m", "pip", "install",
15
+ "llama-cpp-python"
 
16
  ])
17
+ print("Установка завершена! Запускаем приложение...")
18
  import llama_cpp
19
  # ------------------------------------------
20
 
 
40
  repo_id=REPO_ID,
41
  filename=MODEL_FILENAME
42
  )
43
+ # Инициализация модели
44
  llm = Llama(
45
  model_path=model_path,
46
+ n_ctx=8192, # Контекст
47
+ n_gpu_layers=0, # 0 слоев на GPU (работаем на CPU)
48
  verbose=True,
49
  chat_format="chatml-function-calling"
50
  )
51
  print("Модель успешно загружена!")
52
  except Exception as e:
53
+ print(f"Ошибка загрузки модели: {e}")
54
  raise e
55
  return llm
56
 
 
63
  if image is None:
64
  return "Пожалуйста, загрузите изображение.", ""
65
 
66
+ # Загружаем модель только когда пользователь нажмет кнопку (экономит память при старте)
67
+ progress(0, desc="Загрузка модели...")
68
  model = load_model()
69
 
70
  system_prompt = "You are doing the image quality assessment task."
 
75
  "Please only output the final answer with only one score in <answer> </answer> tags."
76
  )
77
 
78
+ progress(0.2, desc="Обработка изображения...")
79
  base64_image = image_to_base64(image)
80
  image_url = f"data:image/jpeg;base64,{base64_image}"
81
 
 
93
  full_response = ""
94
  print("Начало генерации...")
95
 
96
+ # Запуск генерации
97
  stream = model.create_chat_completion(
98
  messages=messages,
99
+ max_tokens=2048, # Увеличил лимит токенов для длинных рассуждений
100
  temperature=0.6,
101
  stream=True
102
  )
 
107
  if "content" in delta and delta["content"]:
108
  content = delta["content"]
109
  full_response += content
110
+ # Стримим ответ в текстовое поле
111
  yield full_response, "Вычисляется..."
112
 
113
+ # Поиск оценки в ответе
114
  score_match = re.search(r'<answer>\s*([\d\.]+)\s*</answer>', full_response)
115
  final_score = score_match.group(1) if score_match else "Не найдено"
116
 
117
  yield full_response, final_score
118
 
119
+ # Интерфейс
120
  with gr.Blocks(title="VisualQuality-R1 (Q8 GGUF)") as demo:
121
  gr.Markdown("# 👁️ VisualQuality-R1 (7B Q8)")
122
+ gr.Markdown("Оценка качества изображений. Запущено на CPU, генерация может занять 1-2 минуты.")
123
 
124
  with gr.Row():
125
  with gr.Column():
 
128
 
129
  with gr.Column():
130
  output_score = gr.Label(label="Итоговая оценка")
131
+ # Исправлено: убрал аргумент show_copy_button, вызывавший ошибку
132
+ output_text = gr.Textbox(label="Ход мыслей (CoT) и ответ", lines=15)
133
 
134
+ run_btn.click(
135
+ fn=evaluate_image,
136
+ inputs=[input_img],
137
+ outputs=[output_text, output_score]
138
+ )
139
 
140
  if __name__ == "__main__":
141
  demo.queue().launch()