55
66from backend .services .content_generator import ContentGenerator , JudgeFailedError
77from backend .workers .broker import broker
8+ from backend .workers .callbacks import notify_slack_on_complete , notify_slack_on_failure
89from backend .workers .dependencies import get_content_generator
910
1011logger = structlog .get_logger ()
@@ -17,6 +18,8 @@ async def generate_draft_task(
1718 platform : str ,
1819 generator : Annotated [ContentGenerator , TaskiqDepends (get_content_generator )],
1920 source_url : str | None = None ,
21+ user_id : str | None = None ,
22+ channel_id : str | None = None ,
2023) -> str :
2124 """
2225 Фонова задача для генерації медичного контенту.
@@ -27,6 +30,8 @@ async def generate_draft_task(
2730 topic = topic ,
2831 platform = platform ,
2932 source_url = source_url ,
33+ user_id = user_id ,
34+ channel_id = channel_id ,
3035 )
3136
3237 try :
@@ -36,18 +41,30 @@ async def generate_draft_task(
3641 logger .info (
3742 "background_task_success" , task = "generate_medical_draft" , topic = topic
3843 )
44+
45+ # ДОДАНО: Відправка готового результату у Slack
46+ if user_id and channel_id :
47+ await notify_slack_on_complete (
48+ user_id = user_id , channel_id = channel_id , draft = result , topic = topic
49+ )
50+
3951 return result
4052
4153 except JudgeFailedError as e :
42- # Специфічна обробка помилки валідації LLM
4354 logger .error (
4455 "background_task_judge_failed" ,
4556 task = "generate_medical_draft" ,
4657 topic = e .topic ,
4758 attempts = e .attempts ,
4859 )
49- # Навіть якщо суддя відхилив, ми можемо кинути помилку або зберегти "чорновий" драфт.
50- # Зараз кидаємо виняток, щоб Taskiq зафіксував статус Failure.
60+ # ДОДАНО: Відправка повідомлення про провал валідації у Slack
61+ if user_id and channel_id :
62+ await notify_slack_on_failure (
63+ user_id = user_id ,
64+ channel_id = channel_id ,
65+ error_msg = f"Модель не пройшла валідацію після { e .attempts } спроб.\n \n Останній драфт:\n { e .draft } " ,
66+ topic = topic ,
67+ )
5168 raise
5269
5370 except Exception as e :
@@ -58,4 +75,9 @@ async def generate_draft_task(
5875 error = str (e ),
5976 error_type = type (e ).__name__ ,
6077 )
78+ # ДОДАНО: Відправка критичної помилки у Slack
79+ if user_id and channel_id :
80+ await notify_slack_on_failure (
81+ user_id = user_id , channel_id = channel_id , error_msg = str (e ), topic = topic
82+ )
6183 raise
0 commit comments