Starchik1 commited on
Commit
4e8b762
·
verified ·
1 Parent(s): de832e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -24
app.py CHANGED
@@ -4,6 +4,8 @@ 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)
@@ -39,7 +41,7 @@ def load_model():
39
  )
40
  print("Модель успешно загружена!")
41
  except Exception as e:
42
- print("Ошибка при загрузке модели: ", e)
43
  model = None
44
  tokenizer = None
45
 
@@ -51,32 +53,49 @@ def before_request():
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('/')
 
4
  from flask_cors import CORS
5
  import torch
6
  from transformers import AutoModelForCausalLM, AutoTokenizer
7
+ from dotenv import load_dotenv
8
+ import requests
9
 
10
  app = Flask(__name__)
11
  CORS(app)
 
41
  )
42
  print("Модель успешно загружена!")
43
  except Exception as e:
44
+ print(f"Ошибка при загрузке модели: {e}")
45
  model = None
46
  tokenizer = None
47
 
 
53
  load_model()
54
 
55
  # Функция для генерации ответа от модели
56
+ from dotenv import load_dotenv
57
+ import requests
58
+
59
+ # Загружаем переменные окружения
60
+ load_dotenv()
61
+
62
+ # Проверяем наличие API ключа
63
+ API_KEY = os.getenv("MISTRAL_API_KEY")
64
+ API_URL = os.getenv("MISTRAL_API_URL", "https://api.mistral.ai/v1/")
65
+
66
+ # Функция для генерации ответа через API
67
+ def generate_response_api(prompt, max_length=1024):
68
+ if not API_KEY:
69
+ return "Ошибка: API ключ не найден. Пожалуйста, добавьте MISTRAL_API_KEY в файл .env"
70
 
71
+ headers = {
72
+ "Authorization": f"Bearer {API_KEY}",
73
+ "Content-Type": "application/json"
74
+ }
 
 
 
 
 
 
75
 
76
+ data = {
77
+ "model": "mistral-medium", # или другая доступная модель
78
+ "messages": [
79
+ {"role": "user", "content": prompt}
80
+ ],
81
+ "max_tokens": max_length,
82
+ "temperature": 0.7,
83
+ "top_p": 0.9
84
+ }
85
 
86
+ try:
87
+ response = requests.post(f"{API_URL}chat/completions", headers=headers, json=data)
88
+ response.raise_for_status()
89
+ result = response.json()
90
+ return result["choices"][0]["message"]["content"]
91
+ except Exception as e:
92
+ return f"Ошибка при обращении к API: {str(e)}"
93
+
94
+ # Обновление функции generate_response для использования API
95
+ def generate_response(prompt, max_length=1024):
96
+ return generate_response_api(prompt, max_length)
97
+
98
+ # Удаление старой функции load_model
99
 
100
  # Маршруты
101
  @app.route('/')