Veronika Belova commited on
Commit
398d995
1 Parent(s): ac2ec20
.gitignore CHANGED
@@ -1,4 +1,4 @@
1
  .env
2
- utils/rewrites-64f2b-firebase-adminsdk-mrs2y-1bd6e223b1.json
3
-
4
- __pycache__
 
1
  .env
2
+ __pycache__
3
+ mlspace__private_key.txt
4
+ rewrites-64f2b-firebase-adminsdk-mrs2y-1bd6e223b1.json
app.py CHANGED
@@ -6,7 +6,7 @@ from utils.firebase_utils import save_vote
6
  from utils.openai_utils import generate_rewrite
7
  from utils.data_utils import load_data, get_random_review, read_prompt
8
  from utils.gemma_utils import get_gemma_response
9
-
10
  models = ["gpt-3.5-turbo", "gpt-4", "gpt-4o", "gpt-4o-mini", "princeton-nlp/gemma-2-9b-it-SimPO"]
11
 
12
  def local_css(file_name):
 
6
  from utils.openai_utils import generate_rewrite
7
  from utils.data_utils import load_data, get_random_review, read_prompt
8
  from utils.gemma_utils import get_gemma_response
9
+
10
  models = ["gpt-3.5-turbo", "gpt-4", "gpt-4o", "gpt-4o-mini", "princeton-nlp/gemma-2-9b-it-SimPO"]
11
 
12
  def local_css(file_name):
prompts/gemma_prompt.txt CHANGED
@@ -2,8 +2,9 @@
2
  **Ты профессиональный рерайтер.**
3
 
4
  Твоя задача — переписать предоставленный текст, сохранив его смысл и основные знаки препинания, которые встречаются в оригинальном тексте,
5
- но используя другие слова. Используй повседневный стиль речи и добавь немного сленга, чтобы текст выглядел естественно и не был похож на сгенерированный.
6
- Избегай грамматических и стилистических ошибок. Не искажай факты и названия товаров.
 
7
 
8
  **Строго соблюдай следующий формат ответа и не добавляй ничего лишнего:**
9
 
@@ -17,9 +18,9 @@
17
 
18
  **Важно:**
19
  - Перепиши отзыв, сохраняя смысл, но используя другие слова.
20
- - Добавь повседневную речь и сленг.
21
- - Соблюдай указанный формат с разделами, каждый из которых начинается с новой строки и отделён пустой строкой.
22
  - Верни только один рерайт в указанном формате.
23
  - Игнорируй всё остальное и не добавляй дополнительных комментариев.
24
  <end_of_turn>
25
- <start_of_turn>model
 
2
  **Ты профессиональный рерайтер.**
3
 
4
  Твоя задача — переписать предоставленный текст, сохранив его смысл и основные знаки препинания, которые встречаются в оригинальном тексте,
5
+ но используя другие слова. Используй повседневный стиль речи, чтобы текст выглядел естественно и не был похож на сгенерированный.
6
+ Избегай грамматических и стилистических ошибок, грубостей, матных слов и жаргона. Не искажай факты и названия товаров.
7
+
8
 
9
  **Строго соблюдай следующий формат ответа и не добавляй ничего лишнего:**
10
 
 
18
 
19
  **Важно:**
20
  - Перепиши отзыв, сохраняя смысл, но используя другие слова.
21
+ - Добавь повседневную речь.
22
+ - Обязательно соблюдай указанный формат с разделами, каждый из которых начинается с новой строки и отделён пустой строкой.
23
  - Верни только один рерайт в указанном формате.
24
  - Игнорируй всё остальное и не добавляй дополнительных комментариев.
25
  <end_of_turn>
26
+ <start_of_turn>model
utils/gemma_utils.py CHANGED
@@ -1,8 +1,6 @@
1
  import json
2
  import paramiko
3
- import shlex
4
  import os
5
- from io import StringIO
6
 
7
  def get_gemma_response(model_name, instruction):
8
  hostname = "ssh-sr002-jupyter.ai.cloud.ru"
@@ -10,48 +8,73 @@ def get_gemma_response(model_name, instruction):
10
  username = "gallant-hofstadter.ai0001819-00029"
11
  private_key_path = "mlspace__private_key.txt"
12
 
13
- private_key = paramiko.RSAKey.from_private_key_file(private_key_path)
14
-
15
- ssh = paramiko.SSHClient()
16
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
17
- ssh.connect(hostname=hostname, port=port, username=username, pkey=private_key)
18
 
19
- prompt = instruction
 
 
 
 
 
 
 
 
20
 
21
  payload = {
22
  "model": model_name,
23
- "prompt": prompt,
24
- "max_tokens": 500,
25
  "temperature": 0.9,
26
  "top_p": 0.7
27
  }
28
 
29
- payload_json = json.dumps(payload)
30
- payload_escaped = shlex.quote(payload_json)
31
-
32
- curl_command = f"curl -s -X POST http://localhost:8001/v1/completions -H 'Content-Type: application/json' -d {payload_escaped}"
33
 
34
- stdin, stdout, stderr = ssh.exec_command(curl_command)
 
 
 
 
 
 
35
 
36
- response = stdout.read().decode('utf-8')
37
- error = stderr.read().decode('utf-8')
 
 
38
 
39
- ssh.close()
 
 
 
 
 
 
40
 
41
  if error:
42
  print("Ошибка при выполнении команды на сервере:", error)
43
  return None
44
 
 
 
 
 
45
  try:
46
  response_json = json.loads(response)
47
-
48
  if 'choices' in response_json and response_json['choices']:
49
  return response_json['choices'][0]['text'].strip()
50
  else:
51
  print("Некорректная структура ответа:", response_json)
52
  return None
53
-
54
  except json.JSONDecodeError as e:
55
  print("Не удалось разобрать JSON-ответ:", e)
56
  print("Полученный ответ:", response)
57
- return None
 
 
 
 
 
 
1
  import json
2
  import paramiko
 
3
  import os
 
4
 
5
  def get_gemma_response(model_name, instruction):
6
  hostname = "ssh-sr002-jupyter.ai.cloud.ru"
 
8
  username = "gallant-hofstadter.ai0001819-00029"
9
  private_key_path = "mlspace__private_key.txt"
10
 
11
+ if not os.path.exists(private_key_path):
12
+ print(f"Файл приватного ключа не найден: {private_key_path}")
13
+ return None
 
 
14
 
15
+ try:
16
+ private_key = paramiko.RSAKey.from_private_key_file(private_key_path)
17
+ ssh = paramiko.SSHClient()
18
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
19
+ ssh.connect(hostname=hostname, port=port, username=username, pkey=private_key)
20
+ print("Успешное SSH подключение")
21
+ except Exception as e:
22
+ print("Ошибка при подключении по SSH:", e)
23
+ return None
24
 
25
  payload = {
26
  "model": model_name,
27
+ "prompt": instruction,
28
+ "max_tokens": 600,
29
  "temperature": 0.9,
30
  "top_p": 0.7
31
  }
32
 
33
+ payload_json = json.dumps(payload, ensure_ascii=False)
34
+ print(f"payload_json: {payload_json}")
 
 
35
 
36
+ curl_command = (
37
+ f"curl -s -X POST http://localhost:8000/v1/completions "
38
+ f"-H 'Content-Type: application/json' "
39
+ f"-H 'Authorization: Bearer token-abc123' "
40
+ f"-d '{payload_json}'"
41
+ )
42
+ print("Executing command:", curl_command)
43
 
44
+ try:
45
+ stdin, stdout, stderr = ssh.exec_command(curl_command)
46
+ response = stdout.read().decode('utf-8')
47
+ error = stderr.read().decode('utf-8')
48
 
49
+ print("Response:", response)
50
+ print("Error output:", error)
51
+ except Exception as e:
52
+ print("Ошибка при выполнении команды на сервере:", e)
53
+ return None
54
+ finally:
55
+ ssh.close()
56
 
57
  if error:
58
  print("Ошибка при выполнении команды на сервере:", error)
59
  return None
60
 
61
+ if not response:
62
+ print("Получен пустой ответ от сервера.")
63
+ return None
64
+
65
  try:
66
  response_json = json.loads(response)
 
67
  if 'choices' in response_json and response_json['choices']:
68
  return response_json['choices'][0]['text'].strip()
69
  else:
70
  print("Некорректная структура ответа:", response_json)
71
  return None
 
72
  except json.JSONDecodeError as e:
73
  print("Не удалось разобрать JSON-ответ:", e)
74
  print("Полученный ответ:", response)
75
+ return None
76
+
77
+
78
+
79
+
80
+
utils/mlspace__private_key.txt DELETED
@@ -1,51 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIJKQIBAAKCAgEAx3aZtcAVmGTqtiqAt2i0F6cEBOi+CrOlVgXjFojySEX6t0CD
3
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- uDsjSxClq0LgweeCHWmJkJEwZcKGCv9o6QdSGwDy4ITHWewoL9i0GLG/lxJQQxaw
12
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- e1QvQfBjSuJ3FsJtbWQ4dPkXzx4x8eA1fOir+O9g6mkGhJtB9IsMd66h3q5Az6Ip
49
- oO2fneBGpSovre8Gok33cM+5VGHnM9ZVegtZfGgmfran4CaWbD0QszYMWZv4iCCt
50
- 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
51
- -----END RSA PRIVATE KEY-----