Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion astrbot/core/agent/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@

from typing import Any, ClassVar, Literal, cast

from pydantic import BaseModel, GetCoreSchemaHandler, model_serializer, model_validator
from pydantic import (
BaseModel,
GetCoreSchemaHandler,
PrivateAttr,
model_serializer,
model_validator,
)
from pydantic_core import core_schema


Expand Down Expand Up @@ -178,6 +184,8 @@ class Message(BaseModel):
tool_call_id: str | None = None
"""The ID of the tool call."""

_no_save: bool = PrivateAttr(default=False)

@model_validator(mode="after")
def check_content_required(self):
# assistant + tool_calls is not None: allow content to be None
Expand Down
5 changes: 4 additions & 1 deletion astrbot/core/agent/runners/tool_loop_agent_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,10 @@ async def reset(
messages = []
# append existing messages in the run context
for msg in request.contexts:
messages.append(Message.model_validate(msg))
m = Message.model_validate(msg)
if isinstance(msg, dict) and msg.get("_no_save"):
m._no_save = True
messages.append(m)
if request.prompt is not None:
m = await request.assemble_context()
messages.append(Message.model_validate(m))
Expand Down
2 changes: 1 addition & 1 deletion astrbot/core/persona_mgr.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ def get_v3_persona_data(
{
"role": "user" if user_turn else "assistant",
"content": dialog,
"_no_save": None, # 不持久化到 db
"_no_save": True, # 不持久化到 db
},
)
user_turn = not user_turn
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -355,9 +355,7 @@ async def _save_to_history(
if message.role == "system" and not skipped_initial_system:
skipped_initial_system = True
continue
if message.role in ["assistant", "user"] and getattr(
message, "_no_save", None
):
if message.role in ["assistant", "user"] and message._no_save:
continue
message_to_save.append(message.model_dump())

Expand Down