Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
2095 |
-
|
2096 |
decision = result.get("decision", False)
|
2097 |
explanation = result.get("explanation", "")
|
2098 |
print("Explanation:", explanation)
|
2099 |
-
return decision
|
2100 |
-
|
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 |
-
|
2119 |
-
|
2120 |
decision = result.get("decision", False)
|
2121 |
explanation = result.get("explanation", "")
|
2122 |
print("Explanation:", explanation)
|
2123 |
-
return decision
|
2124 |
-
|
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 |
-
|
2146 |
-
|
2147 |
decision = result.get("decision", False)
|
2148 |
explanation = result.get("explanation", "")
|
2149 |
print("Explanation:", explanation)
|
2150 |
-
return decision
|
2151 |
-
|
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 |
-
|
2170 |
-
|
2171 |
decision = result.get("decision", False)
|
2172 |
explanation = result.get("explanation", "")
|
2173 |
print("Explanation:", explanation)
|
2174 |
-
return decision
|
2175 |
-
|
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 |
-
|
2193 |
-
|
2194 |
decision = result.get("decision", False)
|
2195 |
explanation = result.get("explanation", "")
|
2196 |
print("Explanation:", explanation)
|
2197 |
-
return decision
|
2198 |
-
|
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 |
-
|
2217 |
-
|
2218 |
decision = result.get("decision", False)
|
2219 |
explanation = result.get("explanation", "")
|
2220 |
print("Explanation:", explanation)
|
2221 |
-
return decision
|
2222 |
-
|
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 |
-
|
2240 |
-
|
2241 |
decision = result.get("decision", False)
|
2242 |
explanation = result.get("explanation", "")
|
2243 |
print("Explanation:", explanation)
|
2244 |
-
return decision
|
2245 |
-
|
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):
|