44from astrbot .core .db import BaseDatabase
55from astrbot .core .db .po import Persona , PersonaFolder , Personality
66from astrbot .core .platform .message_session import MessageSession
7+ from astrbot .core .sentinels import NOT_GIVEN
78
89DEFAULT_PERSONALITY = Personality (
910 prompt = "You are a helpful and friendly assistant." ,
1213 mood_imitation_dialogs = [],
1314 tools = None ,
1415 skills = None ,
16+ custom_error_message = None ,
1517 _begin_dialogs_processed = [],
1618 _mood_imitation_dialogs_processed = "" ,
1719)
@@ -126,19 +128,27 @@ async def update_persona(
126128 persona_id : str ,
127129 system_prompt : str | None = None ,
128130 begin_dialogs : list [str ] | None = None ,
129- tools : list [str ] | None = None ,
130- skills : list [str ] | None = None ,
131+ tools : list [str ] | None | object = NOT_GIVEN ,
132+ skills : list [str ] | None | object = NOT_GIVEN ,
133+ custom_error_message : str | None | object = NOT_GIVEN ,
131134 ):
132135 """更新指定 persona 的信息。tools 参数为 None 时表示使用所有工具,空列表表示不使用任何工具"""
133136 existing_persona = await self .db .get_persona_by_id (persona_id )
134137 if not existing_persona :
135138 raise ValueError (f"Persona with ID { persona_id } does not exist." )
139+ update_kwargs = {}
140+ if tools is not NOT_GIVEN :
141+ update_kwargs ["tools" ] = tools
142+ if skills is not NOT_GIVEN :
143+ update_kwargs ["skills" ] = skills
144+ if custom_error_message is not NOT_GIVEN :
145+ update_kwargs ["custom_error_message" ] = custom_error_message
146+
136147 persona = await self .db .update_persona (
137148 persona_id ,
138149 system_prompt ,
139150 begin_dialogs ,
140- tools = tools ,
141- skills = skills ,
151+ ** update_kwargs ,
142152 )
143153 if persona :
144154 for i , p in enumerate (self .personas ):
@@ -298,6 +308,7 @@ async def create_persona(
298308 begin_dialogs : list [str ] | None = None ,
299309 tools : list [str ] | None = None ,
300310 skills : list [str ] | None = None ,
311+ custom_error_message : str | None = None ,
301312 folder_id : str | None = None ,
302313 sort_order : int = 0 ,
303314 ) -> Persona :
@@ -320,6 +331,7 @@ async def create_persona(
320331 begin_dialogs ,
321332 tools = tools ,
322333 skills = skills ,
334+ custom_error_message = custom_error_message ,
323335 folder_id = folder_id ,
324336 sort_order = sort_order ,
325337 )
@@ -346,6 +358,7 @@ def get_v3_persona_data(
346358 "mood_imitation_dialogs" : [], # deprecated
347359 "tools" : persona .tools ,
348360 "skills" : persona .skills ,
361+ "custom_error_message" : persona .custom_error_message ,
349362 }
350363 for persona in self .personas
351364 ]
@@ -402,6 +415,7 @@ def get_v3_persona_data(
402415 begin_dialogs = selected_default_persona ["begin_dialogs" ],
403416 tools = selected_default_persona ["tools" ] or None ,
404417 skills = selected_default_persona ["skills" ] or None ,
418+ custom_error_message = selected_default_persona ["custom_error_message" ],
405419 )
406420
407421 return v3_persona_config , personas_v3 , selected_default_persona
0 commit comments