11import logging
22
3- import httpx
43from aiogram import Router
54from aiogram .types import Message
65
6+ from answer .services .bot_service import get_bot_service
77from answer .settings import Settings , get_settings
88from answer .utils .validation import (
99 get_safe_user_info ,
1010 validate_message ,
1111 validate_question ,
1212)
1313
14-
1514logger = logging .getLogger (__name__ )
1615router = Router ()
1716settings : Settings = get_settings ()
18-
19-
20- async def call_internal_api (text : str , chat_id : str = "" , generate_ai_response : bool = False ):
21- """Вызов внутреннего API через HTTP-запрос к эндпоинту /greet"""
22- try :
23- request_data = {"text" : text , "generate_ai_response" : generate_ai_response , "user_chat_id" : chat_id }
24-
25- base_url = f"http://{ settings .HOST } :{ settings .PORT } "
26-
27- async with httpx .AsyncClient () as client :
28- response = await client .post (
29- f"{ base_url } /greet" , json = request_data , headers = {"Content-Type" : "application/json" }, timeout = 30.0
30- )
31-
32- if response .status_code == 200 :
33- return response .json ()
34- else :
35- logger .error (f"HTTP ошибка { response .status_code } : { response .text } " )
36- return None
37-
38- except Exception as e :
39- logger .error (f"Ошибка HTTP-запроса к внутреннему API: { e } " , exc_info = True )
40- return None
41-
42-
43- async def save_conversation_api (user_chat_id : str , request : str , response : str , is_response_with_buttons : bool = False ):
44- """Сохранение диалога через API"""
45- try :
46- base_url = f"http://{ settings .HOST } :{ settings .PORT } "
47- request_data = {
48- "user_chat_id" : user_chat_id ,
49- "request" : request ,
50- "response" : response ,
51- "is_response_with_buttons" : is_response_with_buttons ,
52- }
53-
54- async with httpx .AsyncClient () as client :
55- response = await client .post (
56- f"{ base_url } /conversations" ,
57- json = request_data ,
58- headers = {"Content-Type" : "application/json" },
59- timeout = 10.0 ,
60- )
61-
62- if response .status_code == 200 :
63- logger .info (f"Диалог успешно сохранен для пользователя { user_chat_id } " )
64- return True
65- else :
66- logger .error (f"Ошибка сохранения диалога: { response .status_code } - { response .text } " )
67- return False
68-
69- except Exception as e :
70- logger .error (f"Ошибка HTTP-запроса сохранения диалога: { e } " , exc_info = True )
71- return False
17+ bot_service = get_bot_service ()
7218
7319
7420@router .message ()
@@ -98,7 +44,7 @@ async def handle_any_message(message: Message):
9844
9945 search_message = await message .answer ("🔍 Ищу информацию и готовлю развернутый ответ..." )
10046
101- api_result = await call_internal_api (
47+ api_result = await bot_service . generate_response (
10248 text = validated_question , chat_id = str (message .chat .id ), generate_ai_response = True
10349 )
10450
@@ -113,7 +59,7 @@ async def handle_any_message(message: Message):
11359
11460 answer = api_result ["ai_answer" ]
11561
116- await save_conversation_api (str (message .chat .id ), validated_question , answer , is_response_with_buttons = False )
62+ bot_service . save_conversation (str (message .chat .id ), validated_question , answer , is_response_with_buttons = False )
11763 await search_message .delete ()
11864 await message .answer (f"💡 <b>Ответ:</b>\n \n { answer } \n \n { settings .warning_message } " )
11965
@@ -310,4 +256,4 @@ async def handle_topic_selection(callback: CallbackQuery, state: FSMContext):
310256 logger.error(f"Ошибка выбора топика: {e}", exc_info=True)
311257 await callback.answer("❌ Произошла ошибка при получении информации по топику.")
312258 await state.clear()
313- '''
259+ '''
0 commit comments