4949 ToolResult ,
5050 get_memory_data ,
5151)
52- from ..utils .models import InsightsModel
52+ from ..utils .models import ImageContent , ImageUrl , InsightsModel , TextContent
5353from ..utils .tokenizer import hybrid_token_count
5454
5555command_prefix = get_driver ().config .command_start or "/"
@@ -80,7 +80,9 @@ async def get_tokens(
8080 if isinstance (st ["content" ], str ):
8181 full_string += st ["content" ]
8282 else :
83- temp_string = "" .join (s ["text" ] for s in st ["content" ] if s ["type" ] == "text" )
83+ temp_string = "" .join (
84+ s ["text" ] for s in st ["content" ] if s ["type" ] == "text"
85+ )
8486 full_string += temp_string
8587 it = hybrid_token_count (full_string )
8688 ot = hybrid_token_count (response .content )
@@ -97,8 +99,8 @@ async def enforce_token_limit(
9799 """
98100 控制 token 数量,删除超出限制的旧消息.
99101 """
100- train = copy . deepcopy (train )
101- memory_l = [train , * data .memory .messages ]
102+ train_model = Message . model_validate (train )
103+ memory_l : list [ Message | ToolResult ] = [train_model , * data .memory .messages ]
102104 tokens = await get_tokens (memory_l , response )
103105 if not config_manager .config .llm_config .enable_tokens_limit :
104106 return tokens
@@ -131,6 +133,7 @@ async def enforce_token_limit(
131133 tk_tmp = hybrid_token_count (
132134 full_string , config_manager .config .llm_config .tokens_count_mode
133135 )
136+ await asyncio .sleep (0 )
134137 return tokens
135138
136139
@@ -198,25 +201,22 @@ async def handle_group_message(
198201 if config_manager .config .parse_segments :
199202 text = (
200203 [
201- {
202- "type" : "text" ,
203- "text" : f"[{ role } ][{ Date } ][{ user_name } ({ user_id } )]说:{ content } " ,
204- },
204+ TextContent (
205+ text = f"[{ role } ][{ Date } ][{ user_name } ({ user_id } )]说:{ content } "
206+ )
205207 ]
206208 + [
207- { "type" : "input_image" , " url" : seg .data . get ( "url" )}
209+ ImageContent ( image_url = ImageUrl ( url = seg .data [ "url" ]))
208210 for seg in event .message
209- if seg .data .get ("type" ) == "image"
211+ if seg .data .get ("type" ) == "image" and seg . data . get ( "url" )
210212 ]
211213 if is_multimodal
212214 else f"[{ role } ][{ Date } ][{ user_name } ({ user_id } )]说:{ content } "
213215 )
214216 else :
215217 text = event .message .extract_plain_text ()
216218
217- data .memory .messages .append (
218- Message .model_validate ({"role" : "user" , "content" : text })
219- )
219+ data .memory .messages .append (Message (role = "user" , content = text ))
220220 if chat_manager .debug :
221221 logger .debug (f"当前群组提示词:\n { config_manager .group_train } " )
222222 # 控制记忆长度和 token 限制
@@ -275,24 +275,21 @@ async def handle_private_message(
275275 if config_manager .config .parse_segments :
276276 text = (
277277 [
278- {
279- "type" : "text" ,
280- "text" : f"{ Date } { await get_friend_name (event .user_id , bot = bot )} ({ event .user_id } ): { content !s} " ,
281- },
278+ TextContent (
279+ text = f"{ Date } { await get_friend_name (event .user_id , bot = bot )} ({ event .user_id } ): { content !s} "
280+ )
282281 ]
283282 + [
284- { "type" : " image_url" , "image_url" : { " url" : seg .data . get ( "url" )}}
283+ ImageContent ( image_url = ImageUrl ( url = seg .data [ "url" ]))
285284 for seg in event .message
286- if seg .data .get ("type" ) == "image"
285+ if seg .data .get ("type" ) == "image" and seg . data . get ( "url" )
287286 ]
288287 if is_multimodal
289288 else f"{ Date } { await get_friend_name (event .user_id , bot = bot )} ({ event .user_id } ): { content !s} "
290289 )
291290 else :
292291 text = event .message .extract_plain_text ()
293- data .memory .messages .append (
294- Message .model_validate ({"role" : "user" , "content" : text })
295- )
292+ data .memory .messages .append (Message (role = "user" , content = text ))
296293 if chat_manager .debug :
297294 logger .debug (f"当前私聊提示词:\n { config_manager .private_train } " )
298295 # 控制记忆长度和 token 限制
0 commit comments