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:
@@ -11,6 +11,7 @@ DEFAULT_MODEL_BY_PROVIDER = {
|
||||
"openai_compatible": "local-model",
|
||||
}
|
||||
DEFAULT_TIMEOUT_SECONDS = 30.0
|
||||
DEFAULT_HISTORY_MAX_TURNS = 20
|
||||
|
||||
ENABLED_ENV = "AI_PLANNER_ENABLED"
|
||||
PROVIDER_ENV = "AI_PLANNER_PROVIDER"
|
||||
@@ -20,6 +21,7 @@ THINKING_BUDGET_ENV = "AI_PLANNER_THINKING_BUDGET_TOKENS"
|
||||
API_KEY_ENV = "AI_PLANNER_API_KEY"
|
||||
BASE_URL_ENV = "AI_PLANNER_BASE_URL"
|
||||
MULTIMODAL_ENV = "AI_PLANNER_MULTIMODAL"
|
||||
HISTORY_MAX_TURNS_ENV = "AI_PLANNER_HISTORY_MAX_TURNS"
|
||||
|
||||
SUPPORTED_PROVIDERS = frozenset(DEFAULT_MODEL_BY_PROVIDER)
|
||||
|
||||
@@ -34,6 +36,7 @@ class PlannerConfig:
|
||||
api_key: str | None = None
|
||||
base_url: str | None = None
|
||||
multimodal: bool = False
|
||||
history_max_turns: int = DEFAULT_HISTORY_MAX_TURNS
|
||||
|
||||
def resolved_model(self) -> str:
|
||||
return self.model or DEFAULT_MODEL_BY_PROVIDER[self.provider]
|
||||
@@ -50,6 +53,10 @@ def load_config(env: Mapping[str, str] | None = None) -> PlannerConfig:
|
||||
api_key=values.get(API_KEY_ENV) or _provider_key(values),
|
||||
base_url=values.get(BASE_URL_ENV) or None,
|
||||
multimodal=_parse_bool(values.get(MULTIMODAL_ENV), default=False),
|
||||
history_max_turns=_parse_positive_int(
|
||||
values.get(HISTORY_MAX_TURNS_ENV),
|
||||
default=DEFAULT_HISTORY_MAX_TURNS,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -88,6 +95,16 @@ def _parse_thinking_budget(value: str | None) -> int | None:
|
||||
return budget if budget > 0 else None
|
||||
|
||||
|
||||
def _parse_positive_int(value: str | None, *, default: int) -> int:
|
||||
if value is None:
|
||||
return default
|
||||
try:
|
||||
parsed = int(value)
|
||||
except ValueError:
|
||||
return default
|
||||
return parsed if parsed > 0 else default
|
||||
|
||||
|
||||
def _provider_key(values: Mapping[str, str]) -> str | None:
|
||||
provider = (values.get(PROVIDER_ENV) or DEFAULT_PROVIDER).strip().lower()
|
||||
if provider == "openai":
|
||||
|
||||
Reference in New Issue
Block a user