Skip to content

Commit ea64022

Browse files
fix: remove manual compaction, use get_messages_for_request()
Orchestrators should not call compaction methods directly. Instead, use get_messages_for_request() which handles compaction internally. This ensures tool_use/tool_result pairs are never separated during compaction. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
1 parent 0097557 commit ea64022

1 file changed

Lines changed: 11 additions & 14 deletions

File tree

amplifier_module_loop_basic/__init__.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
from amplifier_core import ModuleCoordinator
1515
from amplifier_core.events import CONTENT_BLOCK_END
1616
from amplifier_core.events import CONTENT_BLOCK_START
17-
from amplifier_core.events import CONTEXT_POST_COMPACT
18-
from amplifier_core.events import CONTEXT_PRE_COMPACT
1917
from amplifier_core.events import ORCHESTRATOR_COMPLETE
2018
from amplifier_core.events import PLAN_END
2119
from amplifier_core.events import PLAN_START
@@ -71,14 +69,6 @@ async def execute(
7169
if hasattr(context, "add_message"):
7270
await context.add_message({"role": "user", "content": prompt})
7371

74-
# Optionally compact before provider call
75-
if hasattr(context, "compact") and hasattr(context, "messages"):
76-
await hooks.emit(CONTEXT_PRE_COMPACT, {"messages": len(getattr(context, "messages", []))})
77-
# simple heuristic: compact if more than 50 messages
78-
if len(getattr(context, "messages", [])) > 50:
79-
await context.compact()
80-
await hooks.emit(CONTEXT_POST_COMPACT, {"messages": len(getattr(context, "messages", []))})
81-
8272
# Select provider based on priority
8373
provider = self._select_provider(providers)
8474
if not provider:
@@ -101,8 +91,12 @@ async def execute(
10191
if result.action == "deny":
10292
return f"Operation denied: {result.reason}"
10393

104-
# Get messages from context (includes permanent injections)
105-
message_dicts = getattr(context, "messages", [{"role": "user", "content": prompt}])
94+
# Get messages for LLM request (context handles compaction internally)
95+
if hasattr(context, "get_messages_for_request"):
96+
message_dicts = await context.get_messages_for_request()
97+
else:
98+
# Fallback for simple contexts without the method
99+
message_dicts = getattr(context, "messages", [{"role": "user", "content": prompt}])
106100

107101
# Append ephemeral injection if present (temporary, not stored)
108102
if result.action == "inject_context" and result.ephemeral and result.context_injection:
@@ -416,8 +410,11 @@ async def execute_single_tool(tc: Any, group_id: str) -> tuple[str, str]:
416410
"orchestrator",
417411
)
418412

419-
# Get one final response with the reminder
420-
message_dicts = getattr(context, "messages", [{"role": "user", "content": prompt}])
413+
# Get one final response with the reminder (context handles compaction internally)
414+
if hasattr(context, "get_messages_for_request"):
415+
message_dicts = await context.get_messages_for_request()
416+
else:
417+
message_dicts = getattr(context, "messages", [{"role": "user", "content": prompt}])
421418
message_dicts = list(message_dicts)
422419
message_dicts.append(
423420
{

0 commit comments

Comments
 (0)