feat: prompt tune rethink with current default tools without anthropic view / str edit (#1709)

Co-authored-by: cpacker <packercharles@gmail.com>
Co-authored-by: Caren Thomas <carenthomas@gmail.com>
This commit is contained in:
Kevin Lin
2025-04-17 11:53:18 -07:00
committed by GitHub
parent 459c7bffae
commit f07954e7a3
9 changed files with 241 additions and 90 deletions

View File

@@ -36,7 +36,7 @@ from letta.log import get_logger
from letta.memory import summarize_messages
from letta.orm import User
from letta.orm.enums import ToolType
from letta.schemas.agent import AgentState, AgentStepResponse, UpdateAgent
from letta.schemas.agent import AgentState, AgentStepResponse, UpdateAgent, get_prompt_template_for_agent_type
from letta.schemas.block import BlockUpdate
from letta.schemas.embedding_config import EmbeddingConfig
from letta.schemas.enums import MessageRole
@@ -52,11 +52,7 @@ from letta.schemas.tool_rule import TerminalToolRule
from letta.schemas.usage import LettaUsageStatistics
from letta.services.agent_manager import AgentManager
from letta.services.block_manager import BlockManager
from letta.services.helpers.agent_manager_helper import (
check_supports_structured_output,
compile_memory_metadata_block,
compile_system_message,
)
from letta.services.helpers.agent_manager_helper import check_supports_structured_output, compile_memory_metadata_block
from letta.services.job_manager import JobManager
from letta.services.message_manager import MessageManager
from letta.services.passage_manager import PassageManager
@@ -204,7 +200,8 @@ class Agent(BaseAgent):
# refresh memory from DB (using block ids)
self.agent_state.memory = Memory(
blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()]
blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()],
prompt_template=get_prompt_template_for_agent_type(self.agent_state.agent_type),
)
# NOTE: don't do this since re-buildin the memory is handled at the start of the step
@@ -306,29 +303,6 @@ class Agent(BaseAgent):
elif step_count is not None and step_count > 0 and len(allowed_tool_names) == 1:
force_tool_call = allowed_tool_names[0]
if force_tool_call == "core_memory_insert":
current_system_message = message_sequence[0]
new_memory = Memory(
blocks=self.agent_state.memory.blocks,
prompt_template=(
"{% for block in blocks %}"
'<{{ block.label }} characters="{{ block.value|length }}/{{ block.limit }}">\n'
"{% for line in block.value.splitlines() %}"
"{{ loop.index0 }}: {{ line }}\n"
"{% endfor %}"
"</{{ block.label }}>"
"{% if not loop.last %}\n{% endif %}"
"{% endfor %}"
),
)
new_system_message_str = compile_system_message(
system_prompt=self.agent_state.system,
in_context_memory=new_memory,
in_context_memory_last_edit=current_system_message.created_at,
previous_message_count=len(message_sequence),
)
message_sequence[0].content = [TextContent(text=new_system_message_str)]
for attempt in range(1, empty_response_retry_limit + 1):
try:
log_telemetry(self.logger, "_get_ai_reply create start")
@@ -834,7 +808,8 @@ class Agent(BaseAgent):
# Step 0: update core memory
# only pulling latest block data if shared memory is being used
current_persisted_memory = Memory(
blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()]
blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()],
prompt_template=get_prompt_template_for_agent_type(self.agent_state.agent_type),
) # read blocks from DB
self.update_memory_if_changed(current_persisted_memory)