fix: fix some bugs in #8226

This commit is contained in:
Soulter
2026-06-03 10:58:12 +08:00
parent f01dc474ef
commit df6eef052f
2 changed files with 7 additions and 29 deletions

View File

@@ -241,7 +241,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
self.tool_result_overflow_dir = tool_result_overflow_dir
self.read_tool = read_tool
self._tool_result_token_counter = EstimateTokenCounter()
self.request_context_manager_config = ContextConfig(
self.context_config = ContextConfig(
# <=0 disables token-based guarding.
max_context_tokens=provider.provider_config.get("max_context_tokens", 0),
# Enforce max turns before token-based guarding.
@@ -253,9 +253,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
custom_token_counter=self.custom_token_counter,
custom_compressor=self.custom_compressor,
)
self.request_context_manager = ContextManager(
self.request_context_manager_config
)
self.context_manager = ContextManager(self.context_config)
self.provider = provider
self.fallback_providers: list[Provider] = []
@@ -458,11 +456,8 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
self, *, include_model: bool = True
) -> T.AsyncGenerator[LLMResponse, None]:
"""Yields chunks *and* a final LLMResponse."""
messages_for_provider = getattr(
self, "_provider_messages", self.run_context.messages
)
payload = {
"contexts": self._sanitize_contexts_for_provider(messages_for_provider),
"contexts": self._sanitize_contexts_for_provider(self.run_context.messages),
"func_tool": self._func_tool_for_provider(),
"session_id": self.req.session_id,
"extra_user_content_parts": self.req.extra_user_content_parts, # list[ContentPart]
@@ -583,7 +578,8 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
self,
contexts: list[Message] | list[dict[str, T.Any]],
) -> list[Message] | list[dict[str, T.Any]]:
if not self._should_fix_modalities_for_provider():
modalities = self.provider.provider_config.get("modalities", None)
if not modalities: # Unconfigured (None or empty list) defaults to support all modalities
return contexts
sanitized_contexts, stats = sanitize_contexts_by_modalities(
contexts,
@@ -592,12 +588,6 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
log_context_sanitize_stats(stats)
return sanitized_contexts
def _should_fix_modalities_for_provider(self) -> bool:
modalities = self.provider.provider_config.get("modalities", None)
return (
isinstance(modalities, list) and modalities
) # Empty list is treated as unconfigured
def _func_tool_for_provider(self) -> ToolSet | None:
if not self.req.func_tool:
return None
@@ -714,7 +704,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
# memory layer.
token_usage = self.req.conversation.token_usage if self.req.conversation else 0
self._simple_print_message_role("[BefCompact]")
self._provider_messages = await self.request_context_manager.process(
self.run_context.messages = await self.context_manager.process(
self.run_context.messages, trusted_token_usage=token_usage
)
self._simple_print_message_role("[AftCompact]")

View File

@@ -98,7 +98,7 @@ class InternalAgentSubStage(Stage):
"llm_compress_instruction", ""
)
self.llm_compress_keep_recent: int = settings.get(
"llm_compress_keep_recent", 10
"llm_compress_keep_recent", 5
)
self.llm_compress_provider_id: str = settings.get(
"llm_compress_provider_id", ""
@@ -482,18 +482,6 @@ class InternalAgentSubStage(Stage):
continue
if message.role in ["assistant", "user"] and message._no_save:
continue
# Truncate long tool results before persisting (8192 chars)
if (
message.role == "tool"
and isinstance(message.content, str)
and len(message.content) > 8192
):
message = Message(
role="tool",
tool_call_id=message.tool_call_id,
content=message.content[:8192]
+ f"\n...[truncated {len(message.content) - 8192} chars]",
)
messages_to_save.append(message)
checkpoint_id = event.get_extra("llm_checkpoint_id")