feat: preserve planner context across task steps
Tests / Test apps.device-host-agent.tests.test_mcp_token.test_load_or_create_concurrent_calls_do_not_corrupt failed
Tests / Test apps.device-host-agent.tests.test_mcp_token.test_load_or_create_concurrent_calls_do_not_corrupt failed
This commit is contained in:
@@ -6,6 +6,7 @@ import json
|
||||
import logging
|
||||
from collections.abc import Awaitable, Callable
|
||||
from datetime import timedelta
|
||||
from inspect import Parameter, signature
|
||||
from time import monotonic
|
||||
from typing import TYPE_CHECKING
|
||||
from uuid import uuid4
|
||||
@@ -505,13 +506,21 @@ def create_internal_router(
|
||||
|
||||
started_at = monotonic()
|
||||
try:
|
||||
decision = client.decide(
|
||||
system_prompt=payload.system_prompt,
|
||||
user_prompt=payload.user_prompt,
|
||||
screenshot=screenshot,
|
||||
tools=tools,
|
||||
timeout=planner_timeout,
|
||||
)
|
||||
decision_kwargs = {
|
||||
"system_prompt": payload.system_prompt,
|
||||
"user_prompt": payload.user_prompt,
|
||||
"screenshot": screenshot,
|
||||
"tools": tools,
|
||||
"timeout": planner_timeout,
|
||||
}
|
||||
parameters = signature(client.decide).parameters.values()
|
||||
if any(
|
||||
parameter.name == "history"
|
||||
or parameter.kind == Parameter.VAR_KEYWORD
|
||||
for parameter in parameters
|
||||
):
|
||||
decision_kwargs["history"] = payload.history
|
||||
decision = client.decide(**decision_kwargs)
|
||||
except ToolCallUnavailable as exc:
|
||||
logger.info(
|
||||
"planner-decision request failed",
|
||||
|
||||
@@ -143,6 +143,7 @@ class PlannerDecisionRequest(BaseModel):
|
||||
host_id: str = Field(min_length=1)
|
||||
system_prompt: str
|
||||
user_prompt: str
|
||||
history: list[dict[str, Any]] = Field(default_factory=list)
|
||||
screenshot_base64: str | None = None
|
||||
tools: list[PlannerToolSpecModel] = Field(default_factory=list)
|
||||
timeout_seconds: float = Field(default=30.0, gt=0, le=120)
|
||||
|
||||
Reference in New Issue
Block a user