fruitpicker01 commited on
Commit
dab2b5a
·
verified ·
1 Parent(s): 1015f1f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -58
app.py CHANGED
@@ -1170,21 +1170,35 @@ def generate_message_meta_llama_3_1_405b_with_retry(prompt):
1170
  return correct_dash_usage(message)
1171
  return message
1172
 
1173
- def generate_message_mistral(prompt):
1174
- try:
1175
- chat_response = client_mistral.chat.complete(
1176
- model="open-mistral-nemo",
1177
- messages=[
1178
- {
1179
- "role": "user",
1180
- "content": prompt,
1181
- },
1182
- ]
1183
- )
1184
- cleaned_message = clean_message(chat_response.choices[0].message.content.strip())
1185
- return cleaned_message
1186
- except Exception as e:
1187
- return f"Ошибка при обращении к Mistral: {e}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1188
 
1189
  def generate_messages(description, advantages, key_message, approach, *selected_values):
1190
 
@@ -2077,6 +2091,22 @@ def check_no_word_repetitions(message):
2077
 
2078
  # Проверки на LLM
2079
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2080
  # 22. Проверка сложных предложений без логической связи
2081
  def check_disconnected_sentences(message):
2082
  prompt = f'''Проверь следующий текст на наличие сложных предложений, где отсутствует логическая связь между частями:
@@ -2086,19 +2116,18 @@ def check_disconnected_sentences(message):
2086
  {{"decision": true, "explanation": "В тексте есть предложения, которые не связаны логически."}}
2087
  Если такие предложения есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2088
  если таких предложений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2089
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2090
 
2091
  response = generate_message_mistral(prompt)
2092
  time.sleep(3) # Задержка в 3 секунды между запросами
2093
  print("Mistral response:", response) # Выводим полный ответ модели
2094
- try:
2095
- result = json.loads(response)
2096
  decision = result.get("decision", False)
2097
  explanation = result.get("explanation", "")
2098
  print("Explanation:", explanation)
2099
- return decision
2100
- except Exception as e:
2101
- print(f"Ошибка при разборе JSON: {e}")
2102
  return None
2103
 
2104
  # 23. Проверка на близкие по смыслу однородные члены
@@ -2110,19 +2139,18 @@ def check_synonymous_members(message):
2110
  {{"decision": true, "explanation": "В предложении используются синонимы, передающие одну идею."}}
2111
  Если такие слова или выражения есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2112
  если таких слов или выражений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2113
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2114
 
2115
  response = generate_message_mistral(prompt)
2116
  time.sleep(3)
2117
  print("Mistral response:", response)
2118
- try:
2119
- result = json.loads(response)
2120
  decision = result.get("decision", False)
2121
  explanation = result.get("explanation", "")
2122
  print("Explanation:", explanation)
2123
- return decision
2124
- except Exception as e:
2125
- print(f"Ошибка при разборе JSON: {e}")
2126
  return None
2127
 
2128
  # 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
@@ -2137,19 +2165,18 @@ def check_clickbait_phrases(message):
2137
  {{"decision": false, "explanation": "Текст нейтрален и не содержит кликбейтных фраз."}}
2138
  Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2139
  если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2140
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2141
 
2142
  response = generate_message_mistral(prompt)
2143
  time.sleep(3)
2144
  print("Mistral response:", response)
2145
- try:
2146
- result = json.loads(response)
2147
  decision = result.get("decision", False)
2148
  explanation = result.get("explanation", "")
2149
  print("Explanation:", explanation)
2150
- return decision
2151
- except Exception as e:
2152
- print(f"Ошибка при разборе JSON: {e}")
2153
  return None
2154
 
2155
  # 25. Проверка на абстрактные заявления без поддержки фактами
@@ -2161,19 +2188,18 @@ def check_abstract_claims(message):
2161
  {{"decision": true, "explanation": "Текст содержит общие заявления без конкретики."}}
2162
  Если такие утверждения есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2163
  если таких утверждений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2164
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2165
 
2166
  response = generate_message_mistral(prompt)
2167
  time.sleep(3)
2168
  print("Mistral response:", response)
2169
- try:
2170
- result = json.loads(response)
2171
  decision = result.get("decision", False)
2172
  explanation = result.get("explanation", "")
2173
  print("Explanation:", explanation)
2174
- return decision
2175
- except Exception as e:
2176
- print(f"Ошибка при разборе JSON: {e}")
2177
  return None
2178
 
2179
  # 26. Проверка на узкоспециализированные термины
@@ -2184,19 +2210,18 @@ def check_specialized_terms(message):
2184
  {{"decision": false, "explanation": "В тексте отсутствуют узко��пециализированные термины."}}
2185
  Если в тексте есть такие термины, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2186
  если таких терминов нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2187
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2188
 
2189
  response = generate_message_mistral(prompt)
2190
  time.sleep(3)
2191
  print("Mistral response:", response)
2192
- try:
2193
- result = json.loads(response)
2194
  decision = result.get("decision", False)
2195
  explanation = result.get("explanation", "")
2196
  print("Explanation:", explanation)
2197
- return decision
2198
- except Exception as e:
2199
- print(f"Ошибка при разборе JSON: {e}")
2200
  return None
2201
 
2202
  # 27. Проверка на двусмысленные или обидные фразы
@@ -2208,19 +2233,18 @@ def check_offensive_phrases(message):
2208
  {{"decision": true, "explanation": "Текст содержит фразу, которая может быть обидной."}}
2209
  Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2210
  если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2211
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2212
 
2213
  response = generate_message_mistral(prompt)
2214
  time.sleep(3)
2215
  print("Mistral response:", response)
2216
- try:
2217
- result = json.loads(response)
2218
  decision = result.get("decision", False)
2219
  explanation = result.get("explanation", "")
2220
  print("Explanation:", explanation)
2221
- return decision
2222
- except Exception as e:
2223
- print(f"Ошибка при разборе JSON: {e}")
2224
  return None
2225
 
2226
  # 28. Проверка на речевые клише, рекламные штампы и канцеляризмы
@@ -2231,22 +2255,20 @@ def check_cliches_and_bureaucratese(message):
2231
  {{"decision": false, "explanation": "Текст не содержит клише или канцеляризмов."}}
2232
  Если в тексте есть такие выражения, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2233
  если таких выражений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2234
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON.**'''
2235
 
2236
  response = generate_message_mistral(prompt)
2237
  time.sleep(3)
2238
  print("Mistral response:", response)
2239
- try:
2240
- result = json.loads(response)
2241
  decision = result.get("decision", False)
2242
  explanation = result.get("explanation", "")
2243
  print("Explanation:", explanation)
2244
- return decision
2245
- except Exception as e:
2246
- print(f"Ошибка при разборе JSON: {e}")
2247
  return None
2248
 
2249
-
2250
  # ФУНКЦИИ ПРОВЕРОК (КОНЕЦ)
2251
 
2252
  def safe_check(func, message):
 
1170
  return correct_dash_usage(message)
1171
  return message
1172
 
1173
+ def generate_message_mistral(prompt, max_retries=5):
1174
+ retries = 0
1175
+ while retries < max_retries:
1176
+ try:
1177
+ chat_response = client_mistral.chat.complete(
1178
+ model="mistral-large-latest",
1179
+ messages=[
1180
+ {
1181
+ "role": "user",
1182
+ "content": prompt
1183
+ },
1184
+ ],
1185
+ max_tokens=3000, # Увеличено до 3000
1186
+ temperature=0.2,
1187
+ stop=["}"] # Останавливаем генерацию после закрывающей скобки
1188
+ )
1189
+ cleaned_message = chat_response.choices[0].message.content.strip()
1190
+ return cleaned_message
1191
+ except Exception as e:
1192
+ if "Status 429" in str(e):
1193
+ wait_time = 3 # Можно установить фиксированную задержку
1194
+ print(f"Превышен лимит запросов. Ожидание {wait_time} секунд перед повторной попыткой...")
1195
+ time.sleep(wait_time)
1196
+ retries += 1
1197
+ else:
1198
+ print(f"Ошибка при обращении к Mistral: {e}")
1199
+ return None
1200
+ print("Ошибка: превышено количество попыток обращения к Mistral")
1201
+ return None
1202
 
1203
  def generate_messages(description, advantages, key_message, approach, *selected_values):
1204
 
 
2091
 
2092
  # Проверки на LLM
2093
 
2094
+ def parse_json_response(response):
2095
+ try:
2096
+ # Попытка найти самый длинный корректный JSON в ответе
2097
+ import re
2098
+ matches = re.findall(r'\{(?:[^{}]|(?R))*\}', response)
2099
+ if matches:
2100
+ json_str = matches[-1] # Берем последний найденный JSON
2101
+ result = json.loads(json_str)
2102
+ return result
2103
+ else:
2104
+ print("JSON не найден в ответе")
2105
+ return None
2106
+ except json.JSONDecodeError as e:
2107
+ print(f"Ошибка при разборе JSON: {e}")
2108
+ return None
2109
+
2110
  # 22. Проверка сложных предложений без логической связи
2111
  def check_disconnected_sentences(message):
2112
  prompt = f'''Проверь следующий текст на наличие сложных предложений, где отсутствует логическая связь между частями:
 
2116
  {{"decision": true, "explanation": "В тексте есть предложения, которые не связаны логически."}}
2117
  Если такие предложения есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2118
  если таких предложений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2119
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2120
 
2121
  response = generate_message_mistral(prompt)
2122
  time.sleep(3) # Задержка в 3 секунды между запросами
2123
  print("Mistral response:", response) # Выводим полный ответ модели
2124
+ result = parse_json_response(response)
2125
+ if result is not None:
2126
  decision = result.get("decision", False)
2127
  explanation = result.get("explanation", "")
2128
  print("Explanation:", explanation)
2129
+ return not decision # Инвертируем логику
2130
+ else:
 
2131
  return None
2132
 
2133
  # 23. Проверка на близкие по смыслу однородные члены
 
2139
  {{"decision": true, "explanation": "В предложении используются синонимы, передающие одну идею."}}
2140
  Если такие слова или выражения есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2141
  если таких слов или выражений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2142
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2143
 
2144
  response = generate_message_mistral(prompt)
2145
  time.sleep(3)
2146
  print("Mistral response:", response)
2147
+ result = parse_json_response(response)
2148
+ if result is not None:
2149
  decision = result.get("decision", False)
2150
  explanation = result.get("explanation", "")
2151
  print("Explanation:", explanation)
2152
+ return not decision # Инвертируем логику
2153
+ else:
 
2154
  return None
2155
 
2156
  # 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
 
2165
  {{"decision": false, "explanation": "Текст нейтрален и не содержит кликбейтных фраз."}}
2166
  Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2167
  если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2168
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2169
 
2170
  response = generate_message_mistral(prompt)
2171
  time.sleep(3)
2172
  print("Mistral response:", response)
2173
+ result = parse_json_response(response)
2174
+ if result is not None:
2175
  decision = result.get("decision", False)
2176
  explanation = result.get("explanation", "")
2177
  print("Explanation:", explanation)
2178
+ return not decision # Инвертируем логику
2179
+ else:
 
2180
  return None
2181
 
2182
  # 25. Проверка на абстрактные заявления без поддержки фактами
 
2188
  {{"decision": true, "explanation": "Текст содержит общие заявления без конкретики."}}
2189
  Если такие утверждения есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2190
  если таких утверждений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2191
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2192
 
2193
  response = generate_message_mistral(prompt)
2194
  time.sleep(3)
2195
  print("Mistral response:", response)
2196
+ result = parse_json_response(response)
2197
+ if result is not None:
2198
  decision = result.get("decision", False)
2199
  explanation = result.get("explanation", "")
2200
  print("Explanation:", explanation)
2201
+ return not decision # Инвертируем логику
2202
+ else:
 
2203
  return None
2204
 
2205
  # 26. Проверка на узкоспециализированные термины
 
2210
  {{"decision": false, "explanation": "В тексте отсутствуют узко��пециализированные термины."}}
2211
  Если в тексте есть такие термины, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2212
  если таких терминов нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2213
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2214
 
2215
  response = generate_message_mistral(prompt)
2216
  time.sleep(3)
2217
  print("Mistral response:", response)
2218
+ result = parse_json_response(response)
2219
+ if result is not None:
2220
  decision = result.get("decision", False)
2221
  explanation = result.get("explanation", "")
2222
  print("Explanation:", explanation)
2223
+ return not decision # Инвертируем логику
2224
+ else:
 
2225
  return None
2226
 
2227
  # 27. Проверка на двусмысленные или обидные фразы
 
2233
  {{"decision": true, "explanation": "Текст содержит фразу, которая может быть обидной."}}
2234
  Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2235
  если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2236
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2237
 
2238
  response = generate_message_mistral(prompt)
2239
  time.sleep(3)
2240
  print("Mistral response:", response)
2241
+ result = parse_json_response(response)
2242
+ if result is not None:
2243
  decision = result.get("decision", False)
2244
  explanation = result.get("explanation", "")
2245
  print("Explanation:", explanation)
2246
+ return not decision # Инвертируем логику
2247
+ else:
 
2248
  return None
2249
 
2250
  # 28. Проверка на речевые клише, рекламные штампы и канцеляризмы
 
2255
  {{"decision": false, "explanation": "Текст не содержит клише или канцеляризмов."}}
2256
  Если в тексте есть такие выражения, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2257
  если таких выражений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2258
+ **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2259
 
2260
  response = generate_message_mistral(prompt)
2261
  time.sleep(3)
2262
  print("Mistral response:", response)
2263
+ result = parse_json_response(response)
2264
+ if result is not None:
2265
  decision = result.get("decision", False)
2266
  explanation = result.get("explanation", "")
2267
  print("Explanation:", explanation)
2268
+ return not decision # Инвертируем логическое значение
2269
+ else:
 
2270
  return None
2271
 
 
2272
  # ФУНКЦИИ ПРОВЕРОК (КОНЕЦ)
2273
 
2274
  def safe_check(func, message):