From 4a8913ca2163385e20b4b88b926fbe4780c3d9c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20J=C4=99drecki?= Date: Thu, 25 Jun 2026 14:56:02 +0200 Subject: [PATCH 1/2] Fix typo in `max_structured_output_retires` --- splunklib/ai/README.md | 6 +++--- splunklib/ai/engines/langchain.py | 6 +++--- splunklib/ai/limits.py | 2 +- tests/integration/ai/test_structured_output.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/splunklib/ai/README.md b/splunklib/ai/README.md index 655efae3a..f1a62ba88 100644 --- a/splunklib/ai/README.md +++ b/splunklib/ai/README.md @@ -1020,10 +1020,10 @@ or excessive token usage. | `max_tokens` | 200 000 tokens | token count of messages passed to the model | | `max_steps` | 100 steps | number of messages in the conversation | | `timeout` | 600 seconds (10 minutes) | per `invoke` call | -| `max_structured_output_retires` | 3 retries | per `invoke` call | +| `max_structured_output_retries` | 3 retries | per `invoke` call | `max_tokens` and `max_steps` are checked against the messages passed to the model on each call. -`timeout` and `max_structured_output_retires` reset on each `invoke`, so they limit only the +`timeout` and `max_structured_output_retries` reset on each `invoke`, so they limit only the current agent loop invocation. When a limit is exceeded, the agent raises the corresponding exception: @@ -1053,7 +1053,7 @@ async with Agent( max_tokens=50_000, max_steps=10, timeout=30.0, - max_structured_output_retires=0, # no retries + max_structured_output_retries=0, # no retries ), ) as agent: ... ``` diff --git a/splunklib/ai/engines/langchain.py b/splunklib/ai/engines/langchain.py index a01a3515a..52aeb12a3 100644 --- a/splunklib/ai/engines/langchain.py +++ b/splunklib/ai/engines/langchain.py @@ -259,9 +259,9 @@ def __init__(self, agent: BaseAgent[OutputT]) -> None: before_user_middlewares, after_user_middlewares = _debugging_middleware(agent.logger) self._agent_middleware: list[AgentMiddleware] = [] - if agent.limits.max_structured_output_retires is not None: + if agent.limits.max_structured_output_retries is not None: self._agent_middleware.append( - _StructuredOutputRetryLimitMiddleware(agent.limits.max_structured_output_retires) + _StructuredOutputRetryLimitMiddleware(agent.limits.max_structured_output_retries) ) self._agent_middleware.extend(before_user_middlewares) @@ -2052,7 +2052,7 @@ async def model_middleware( class _StructuredOutputRetryLimitMiddleware(AgentMiddleware): """Stops agent execution when the agent exceeds structured output - retry limit during a single agent loop invocation. Pass 0 to disable retires. + retry limit during a single agent loop invocation. Pass 0 to disable retries. """ _limit: int diff --git a/splunklib/ai/limits.py b/splunklib/ai/limits.py index 3d54974dc..95e579f72 100644 --- a/splunklib/ai/limits.py +++ b/splunklib/ai/limits.py @@ -41,7 +41,7 @@ class AgentLimits: Raises `TokenLimitExceededException` when exceeded. """ - max_structured_output_retires: int | None = DEFAULT_STRUCTURED_OUTPUT_RETRY_LIMIT + max_structured_output_retries: int | None = DEFAULT_STRUCTURED_OUTPUT_RETRY_LIMIT """Maximum number of structured output generation retries allowed within a single `invoke` call. Raises `StructuredOutputRetryLimitExceededException` when exceeded. diff --git a/tests/integration/ai/test_structured_output.py b/tests/integration/ai/test_structured_output.py index af51c1f71..d1f74f8a4 100644 --- a/tests/integration/ai/test_structured_output.py +++ b/tests/integration/ai/test_structured_output.py @@ -971,7 +971,7 @@ async def _model_middleware( system_prompt="Respond with structured data", output_schema=Person, service=self.service, - limits=AgentLimits(max_structured_output_retires=limit), + limits=AgentLimits(max_structured_output_retries=limit), middleware=[ _model_middleware, ], From add847b573e0e3144963a2398e5fafcd6209acb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20J=C4=99drecki?= Date: Thu, 25 Jun 2026 15:18:32 +0200 Subject: [PATCH 2/2] Fix two more typos --- splunklib/ai/engines/langchain.py | 2 +- splunklib/client.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/splunklib/ai/engines/langchain.py b/splunklib/ai/engines/langchain.py index 52aeb12a3..ea8b33c2a 100644 --- a/splunklib/ai/engines/langchain.py +++ b/splunklib/ai/engines/langchain.py @@ -418,7 +418,7 @@ class _SubagentArgumentPacker(LC_AgentMiddleware): # to differentiate that we wrap the resulting args in an SubagentLCArgs. # # This middleware performs the corresponding pack/unpack at the two - # points in the LangChain call graph where raw args are needed/retreived. + # points in the LangChain call graph where raw args are needed/retrieved. # # TODO: we could move this logic to _Middleware. @override diff --git a/splunklib/client.py b/splunklib/client.py index 038980ea4..75379648f 100644 --- a/splunklib/client.py +++ b/splunklib/client.py @@ -1964,7 +1964,7 @@ def delete(self, key): def _entity_path(self, state): # Overridden to make all the ConfigurationFile objects # returned refer to the configs/ path instead of the - # properties/ path used by Configrations. + # properties/ path used by Configurations. return PATH_CONF % state["title"]