1111class MessageHandler (RPBotMessageHandler ):
1212 permission_classes = (AllowedUser , BotAdmin , NotBanned )
1313
14+ async def estimate_price (self , message : Message ) -> float :
15+ """
16+ Estimates the price of the message
17+ """
18+ return self .models_toolkit .estimate_price (
19+ input_text = message .message_text ,
20+ input_image = message .in_file_image ,
21+ input_audio = message .in_file_audio ,
22+ )
23+
1424 async def _get_user_usage (
1525 self , input_message : Message , generated_message : str
1626 ) -> int :
17- return self .ai .get_price (
18- message = input_message , generated_message = generated_message
27+ return self .models_toolkit .get_price (
28+ input_text = input_message .message_text ,
29+ output_text = generated_message ,
30+ input_image = input_message .in_file_image ,
31+ input_audio = input_message .in_file_audio ,
1932 )
2033
2134 async def _get_transcribed_message (self , message : Message ) -> TranscribedMessage :
2235 # Note that here the responsibility to pass NULL images and Audio is on the
2336 # outer level bot processing (TG bot or other bot)
2437 image_description = (
25- await self .ai .describe_image (message .in_file_image )
38+ str (
39+ await self .models_toolkit .vision_model .arun_default (
40+ message .in_file_image
41+ )
42+ )
2643 if message .in_file_image
2744 else None
2845 )
2946 voice_description = (
30- await self .ai .transcribe_audio (message .in_file_audio )
47+ str (
48+ await self .models_toolkit .audio_recognition_model .arun_default (
49+ message .in_file_audio
50+ )
51+ )
3152 if message .in_file_audio
3253 else None
3354 )
@@ -66,7 +87,12 @@ async def prepare_get_reply(
6687 autoengage_state = await self .db .chats .get_autoengage_state (context )
6788 engage_is_needed = False
6889 if autoengage_state :
69- engage_is_needed = await self .ai .engage_is_needed (message )
90+ prompt = await self .prompt_manager .compose_engage_needed_prompt (
91+ message .message_text
92+ )
93+ engage_is_needed = (
94+ await self .models_toolkit .text_model .async_ask_yes_no_question (prompt )
95+ )
7096 if not context .is_bot_mentioned and not engage_is_needed :
7197 self .logger .info (
7298 f"Saving the message from { person .user_handle } in chat { context .chat_id } "
@@ -83,7 +109,7 @@ async def prepare_get_reply(
83109 async def is_usage_under_limit (
84110 self , person : Person , context : Context , transcribed_message : TranscribedMessage
85111 ) -> bool :
86- estimated_usage = await self .ai . estimate_price (transcribed_message )
112+ estimated_usage = await self .estimate_price (transcribed_message )
87113 user_usage = await self .db .user_usage .get_user_usage (person )
88114 user_limit = await self .db .user_usage .get_user_usage_limit (person )
89115 return user_usage + estimated_usage < user_limit
@@ -150,7 +176,7 @@ async def get_response(
150176 context ,
151177 message ,
152178 self .db ,
153- self .ai . models_toolkit ,
179+ self .models_toolkit ,
154180 self .prompt_manager ,
155181 )
156182 response_message = await ai_agent .get_reply (prompt , system_prompt )
@@ -181,7 +207,7 @@ async def stream_get_response(
181207 context ,
182208 message ,
183209 self .db ,
184- self .ai . models_toolkit ,
210+ self .models_toolkit ,
185211 self .prompt_manager ,
186212 )
187213 async for response_message_chunk in ai_agent .get_streaming_reply (
0 commit comments