fruitpicker01 commited on
Commit
2097c8d
·
verified ·
1 Parent(s): cbd204e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -2
app.py CHANGED
@@ -21,6 +21,10 @@ from sklearn.feature_extraction.text import TfidfVectorizer
21
  from sklearn.metrics.pairwise import cosine_similarity
22
  from sentence_transformers import SentenceTransformer, util
23
  import numpy as np
 
 
 
 
24
 
25
 
26
  morph = pymorphy2.MorphAnalyzer()
@@ -30,6 +34,7 @@ openai_api_key = os.getenv('GPT_KEY')
30
  gc_key = os.getenv('GC_KEY')
31
  token = os.getenv('GITHUB_TOKEN')
32
  TOGETHER_API_KEY = os.getenv('TOGETHER_API_KEY')
 
33
 
34
  # Инициализация клиента для Together
35
  client = Together(api_key=TOGETHER_API_KEY)
@@ -2055,6 +2060,77 @@ def check_no_word_repetitions(message):
2055
  # Если мы дошли до этой точки, повторов не было
2056
  return True
2057
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2058
  # ФУНКЦИИ ПРОВЕРОК (КОНЕЦ)
2059
 
2060
  def safe_check(func, message):
@@ -2084,7 +2160,15 @@ def perform_checks(message):
2084
  "derived_prepositions": safe_check(check_no_derived_prepositions, message),
2085
  "compound_sentences": safe_check(check_no_compound_sentences, message),
2086
  "dates_written_out": safe_check(check_no_dates_written_out, message),
2087
- "no_word_repetitions": safe_check(check_no_word_repetitions, message)
 
 
 
 
 
 
 
 
2088
  }
2089
  return checks
2090
 
@@ -2109,7 +2193,15 @@ def format_checks(checks):
2109
  "derived_prepositions": "Производные предлоги",
2110
  "compound_sentences": "Сложноподчиненные предложения",
2111
  "dates_written_out": "Даты прописью",
2112
- "no_word_repetitions": "Повторы слов"
 
 
 
 
 
 
 
 
2113
  }
2114
  formatted_results = []
2115
  for rule, result in checks.items():
 
21
  from sklearn.metrics.pairwise import cosine_similarity
22
  from sentence_transformers import SentenceTransformer, util
23
  import numpy as np
24
+ from langchain_core.output_parsers import JsonOutputParser
25
+ from pydantic import BaseModel, Field
26
+ from langchain_core.runnables.base import Runnable
27
+ from langchain_mistralai import ChatMistralAI
28
 
29
 
30
  morph = pymorphy2.MorphAnalyzer()
 
34
  gc_key = os.getenv('GC_KEY')
35
  token = os.getenv('GITHUB_TOKEN')
36
  TOGETHER_API_KEY = os.getenv('TOGETHER_API_KEY')
37
+ m_auth = os.getenv('MISTRAL_API_KEY')
38
 
39
  # Инициализация клиента для Together
40
  client = Together(api_key=TOGETHER_API_KEY)
 
2060
  # Если мы дошли до этой точки, повторов не было
2061
  return True
2062
 
2063
+ # Проверки на LLM
2064
+
2065
+ class LLMAnswerParser(BaseModel):
2066
+ reasoning: str = Field(description='Рассуждения')
2067
+ decision: bool = Field(description='True или False')
2068
+
2069
+ llm = ChatMistralAI(
2070
+ model=model,
2071
+ api_key=m_auth,
2072
+ temperature=0
2073
+ )
2074
+
2075
+ parser = JsonOutputParser(pydantic_object=LLMAnswerParser)
2076
+
2077
+ # 22. Проверка сложных предложений без логической связи
2078
+ def check_disconnected_sentences(sms, parser):
2079
+ task = '''Проверь текст на наличие сложных предложений, где отсутствует логическая связь между частями.
2080
+ Определи, есть ли в тексте предложения с несколькими частями, которые кажутся несвязанными, не поддерживают общую мысль или делают текст трудным для понимания.
2081
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2082
+
2083
+ return check_with_m(task, sms, parser)
2084
+
2085
+ # 23. Проверка на близкие по смыслу однородные члены
2086
+ def check_synonymous_members(sms, parser):
2087
+ task = '''Проверь текст на наличие однородных членов предложения, которые имеют близкий или одинаковый смысл.
2088
+ Определи, есть ли в предложении несколько слов или выражений, которые передают одну и ту же идею или значение, но используются вместе.
2089
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2090
+
2091
+ return check_with_m(task, sms, parser)
2092
+
2093
+ # 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
2094
+ def check_clickbait_phrases(sms, parser):
2095
+ task = '''Проверь СМС на наличие шокирующих, экстравагантных или кликбейтных фраз.
2096
+ Укажи, если текст содержит утверждения, которые:
2097
+ - стремятся вызвать сильные эмоции (например, шок, страх, удивление);
2098
+ - используют преувеличения, необоснованные заявления или сенсационные выражения;
2099
+ - содержат провокационные формулировки, которые побуждают к немедленному действию или реакции.
2100
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2101
+
2102
+ return check_with_m(task, sms, parser)
2103
+
2104
+ # 25. Проверка на абстрактные заявления без поддержки фактами
2105
+ def check_abstract_claims(sms, parser):
2106
+ task = '''Проверь текст на наличие абстрактных утверждений, которые не подкреплены фактами, данными или конкретными примерами.
2107
+ Определи, содержит ли текст общие фразы, которые не объясняют, как клиенту будет полезен продукт или услуга.
2108
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2109
+
2110
+ return check_with_m(task, sms, parser)
2111
+
2112
+ # 26. Проверка на узкоспециализированные термины
2113
+ def check_specialized_terms(sms, parser):
2114
+ task = '''Проверь текст на наличие узкоспециализированных терминов, которые могут быть непонятны широкой аудитории.
2115
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2116
+
2117
+ return check_with_m(task, sms, parser)
2118
+
2119
+ # 27. Проверка на двусмысленные или обидные фразы
2120
+ def check_offensive_phrases(sms, parser):
2121
+ task = '''Проверь текст на наличие фраз, которые могут быть истолкованы двусмысленно или вызвать негативные эмоции у читателя.
2122
+ Определи, есть ли в тексте выражения, которые могут быть восприняты как оскорбительные, обидные или неуместные.
2123
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2124
+
2125
+ return check_with_m(task, sms, parser)
2126
+
2127
+ # 28. Проверка на речевые клише, рекламные штампы и канцеляризмы
2128
+ def check_cliches_and_bureaucratese(sms, parser):
2129
+ task = '''Проверь текст на наличие речевых клише, рекламных штампов и канцеляризмов, которые делают текст менее выразительным и оригинальным.
2130
+ Верни ответ в виде JSON с полями reasoning в виде строки и decision в виде True или False.'''
2131
+
2132
+ return check_with_m(task, sms, parser)
2133
+
2134
  # ФУНКЦИИ ПРОВЕРОК (КОНЕЦ)
2135
 
2136
  def safe_check(func, message):
 
2160
  "derived_prepositions": safe_check(check_no_derived_prepositions, message),
2161
  "compound_sentences": safe_check(check_no_compound_sentences, message),
2162
  "dates_written_out": safe_check(check_no_dates_written_out, message),
2163
+ "no_word_repetitions": safe_check(check_no_word_repetitions, message),
2164
+ # Проверки на LLM
2165
+ "disconnected_sentences": safe_check(check_disconnected_sentences, message),
2166
+ "synonymous_members": safe_check(check_synonymous_members, message),
2167
+ "clickbait_phrases": safe_check(check_clickbait_phrases, message),
2168
+ "abstract_claims": safe_check(check_abstract_claims, message),
2169
+ "specialized_terms": safe_check(check_specialized_terms, message),
2170
+ "offensive_phrases": safe_check(check_offensive_phrases, message),
2171
+ "cliches_and_bureaucratese": safe_check(check_cliches_and_bureaucratese, message)
2172
  }
2173
  return checks
2174
 
 
2193
  "derived_prepositions": "Производные предлоги",
2194
  "compound_sentences": "Сложноподчиненные предложения",
2195
  "dates_written_out": "Даты прописью",
2196
+ "no_word_repetitions": "Повторы слов",
2197
+ # Проверки на LLM
2198
+ "disconnected_sentences": "Сложные предложения без логической связи",
2199
+ "synonymous_members": "Близкие по смыслу однородные члены предложения",
2200
+ "clickbait_phrases": "Кликбейтные фразы",
2201
+ "abstract_claims": "Абстрактные заявления без доказательств",
2202
+ "specialized_terms": "Узкоспециализированные термины",
2203
+ "offensive_phrases": "Двусмысленные или оскорбительные фразы",
2204
+ "cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы"
2205
  }
2206
  formatted_results = []
2207
  for rule, result in checks.items():