Starchik1 commited on
Commit
77db817
·
verified ·
1 Parent(s): b82d722

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +118 -118
app.py CHANGED
@@ -1,119 +1,119 @@
1
- import os
2
- import json
3
- from flask import Flask, render_template, request, jsonify
4
- from flask_cors import CORS
5
- import torch
6
- from transformers import AutoModelForCausalLM, AutoTokenizer
7
-
8
- app = Flask(__name__)
9
- CORS(app)
10
-
11
- # Глобальные переменные для модели
12
- model = None
13
- tokenizer = None
14
-
15
- # Загрузка модели Mistral (локально)
16
- def load_model():
17
- global model, tokenizer
18
- try:
19
- model_name = "mistralai/Mistral-7B-Instruct-v0.3"
20
- tokenizer = AutoTokenizer.from_pretrained(model_name)
21
-
22
- # Проверяем наличие GPU
23
- if torch.cuda.is_available():
24
- print("Загрузка модели на GPU...")
25
- model = AutoModelForCausalLM.from_pretrained(
26
- model_name,
27
- torch_dtype=torch.float16,
28
- device_map="auto",
29
- load_in_8bit=True # Для оптимизации памяти
30
- )
31
- else:
32
- print("GPU не обнаружен. Загрузка модели на CPU (это может быть медленно)...")
33
- # Загрузка облегченной версии для CPU
34
- model = AutoModelForCausalLM.from_pretrained(
35
- model_name,
36
- torch_dtype=torch.float32, # Используем float32 для CPU
37
- low_cpu_mem_usage=True,
38
- device_map="auto"
39
- )
40
- print("Модель успешно загружена!")
41
- except Exception as e:
42
- print(f"Ошибка при загрузке модели: {e}")
43
- model = None
44
- tokenizer = None
45
-
46
- # Инициализация приложения
47
- @app.before_request
48
- def before_request():
49
- global model, tokenizer
50
- if model is None or tokenizer is None:
51
- load_model()
52
-
53
- # Функция для генерации ответа от модели
54
- def generate_response(prompt, max_length=1024):
55
- if model is None or tokenizer is None:
56
- return "Ошибка: Модель не загружена"
57
-
58
- # Форматирование запроса в формате Mistral Instruct
59
- formatted_prompt = f"<s>[INST] {prompt} [/INST]"
60
-
61
- inputs = tokenizer(formatted_prompt, return_tensors="pt").to(model.device)
62
-
63
- # Генерация ответа
64
- with torch.no_grad():
65
- outputs = model.generate(
66
- inputs["input_ids"],
67
- max_new_tokens=max_length,
68
- temperature=0.7,
69
- top_p=0.9,
70
- do_sample=True,
71
- pad_token_id=tokenizer.eos_token_id
72
- )
73
-
74
- # Декодирование ответа
75
- response = tokenizer.decode(outputs[0], skip_special_tokens=True)
76
- # Извлечение только ответа модели (после [/INST])
77
- response = response.split("[/INST]")[-1].strip()
78
-
79
- return response
80
-
81
- # Маршруты
82
- @app.route('/')
83
- def index():
84
- return render_template('index.html')
85
-
86
- @app.route('/api/chat', methods=['POST'])
87
- def chat():
88
- data = request.json
89
- prompt = data.get('prompt', '')
90
-
91
- if not prompt:
92
- return jsonify({"error": "Пустой запрос"}), 400
93
-
94
- try:
95
- response = generate_response(prompt)
96
- return jsonify({"response": response})
97
- except Exception as e:
98
- return jsonify({"error": str(e)}), 500
99
-
100
- @app.route('/api/code', methods=['POST'])
101
- def code():
102
- data = request.json
103
- prompt = data.get('prompt', '')
104
- language = data.get('language', 'python')
105
-
106
- if not prompt:
107
- return jsonify({"error": "Пустой запрос"}), 400
108
-
109
- # Добавляем контекст для генерации кода
110
- code_prompt = f"Напиши код на языке {language} для решения следующей задачи: {prompt}"
111
-
112
- try:
113
- response = generate_response(code_prompt)
114
- return jsonify({"code": response})
115
- except Exception as e:
116
- return jsonify({"error": str(e)}), 500
117
-
118
- if __name__ == '__main__':
119
  app.run(debug=True, port=5000)
 
1
+ import os
2
+ import json
3
+ from flask import Flask, render_template, request, jsonify
4
+ from flask_cors import CORS
5
+ import torch
6
+ from transformers import AutoModelForCausalLM, AutoTokenizer
7
+
8
+ app = Flask(__name__)
9
+ CORS(app)
10
+
11
+ # Глобальные переменные для модели
12
+ model = None
13
+ tokenizer = None
14
+
15
+ # Загрузка модели Mistral (локально)
16
+ def load_model():
17
+ global model, tokenizer
18
+ try:
19
+ model_name = "mistralai/Mistral-7B-Instruct-v0.3"
20
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
21
+
22
+ # Проверяем наличие GPU
23
+ if torch.cuda.is_available():
24
+ print("Загрузка модели на GPU...")
25
+ model = AutoModelForCausalLM.from_pretrained(
26
+ model_name,
27
+ torch_dtype=torch.float16,
28
+ device_map="auto",
29
+ load_in_8bit=True # Для оптимизации памяти
30
+ )
31
+ else:
32
+ print("GPU не обнаружен. Загрузка модели на CPU (это может быть медленно)...")
33
+ # Загрузка облегченной версии для CPU
34
+ model = AutoModelForCausalLM.from_pretrained(
35
+ model_name,
36
+ torch_dtype=torch.float32, # Используем float32 для CPU
37
+ low_cpu_mem_usage=True,
38
+ device_map="auto"
39
+ )
40
+ print("Модель успешно загружена!")
41
+ except Exception as e:
42
+ print("Ошибка при загрузке модели: ", e)
43
+ model = None
44
+ tokenizer = None
45
+
46
+ # Инициализация приложения
47
+ @app.before_request
48
+ def before_request():
49
+ global model, tokenizer
50
+ if model is None or tokenizer is None:
51
+ load_model()
52
+
53
+ # Функция для генерации ответа от модели
54
+ def generate_response(prompt, max_length=1024):
55
+ if model is None or tokenizer is None:
56
+ return "Ошибка: Модель не загружена"
57
+
58
+ # Форматирование запроса в формате Mistral Instruct
59
+ formatted_prompt = f"<s>[INST] {prompt} [/INST]"
60
+
61
+ inputs = tokenizer(formatted_prompt, return_tensors="pt").to(model.device)
62
+
63
+ # Генерация ответа
64
+ with torch.no_grad():
65
+ outputs = model.generate(
66
+ inputs["input_ids"],
67
+ max_new_tokens=max_length,
68
+ temperature=0.7,
69
+ top_p=0.9,
70
+ do_sample=True,
71
+ pad_token_id=tokenizer.eos_token_id
72
+ )
73
+
74
+ # Декодирование ответа
75
+ response = tokenizer.decode(outputs[0], skip_special_tokens=True)
76
+ # Извлечение только ответа модели (после [/INST])
77
+ response = response.split("[/INST]")[-1].strip()
78
+
79
+ return response
80
+
81
+ # Маршруты
82
+ @app.route('/')
83
+ def index():
84
+ return render_template('index.html')
85
+
86
+ @app.route('/api/chat', methods=['POST'])
87
+ def chat():
88
+ data = request.json
89
+ prompt = data.get('prompt', '')
90
+
91
+ if not prompt:
92
+ return jsonify({"error": "Пустой запрос"}), 400
93
+
94
+ try:
95
+ response = generate_response(prompt)
96
+ return jsonify({"response": response})
97
+ except Exception as e:
98
+ return jsonify({"error": str(e)}), 500
99
+
100
+ @app.route('/api/code', methods=['POST'])
101
+ def code():
102
+ data = request.json
103
+ prompt = data.get('prompt', '')
104
+ language = data.get('language', 'python')
105
+
106
+ if not prompt:
107
+ return jsonify({"error": "Пустой запрос"}), 400
108
+
109
+ # Добавляем контекст для генерации кода
110
+ code_prompt = f"Напиши код на языке {language} для решения следующей задачи: {prompt}"
111
+
112
+ try:
113
+ response = generate_response(code_prompt)
114
+ return jsonify({"code": response})
115
+ except Exception as e:
116
+ return jsonify({"error": str(e)}), 500
117
+
118
+ if __name__ == '__main__':
119
  app.run(debug=True, port=5000)