aglinxinyuan opened a new issue, #7484: URL: https://github.com/apache/texera/issues/7484
### What happened? `TexeraAgent` caps its ReAct loop with `stopWhen: stepCountIs(this.settings.maxSteps)` ([texera-agent.ts:529](https://github.com/apache/texera/blob/main/agent-service/src/agent/texera-agent.ts#L529)). In `[email protected]` that predicate is an **equality** test, not a ceiling: ```js // node_modules/ai/dist/index.js:4655 function isStepCount(stepCount) { return ({ steps }) => steps.length === stepCount; } ``` It is evaluated after a step has run, so `steps.length` is always at least 1. With `maxSteps: 0` the predicate is therefore never satisfied and **the cap is silently disabled** — a model that keeps emitting tool calls is never stopped by it. (A model that returns a plain text answer still terminates, because the loop ends on its own when there are no tool calls to service. The failure needs a tool-calling model, which is the normal case here.) Nothing rejects the value. `updateSettings` assigns it unchecked: ```ts // texera-agent.ts:379 if (updates.maxSteps !== undefined) { this.settings.maxSteps = updates.maxSteps; } ``` and the HTTP settings endpoint declares it as `maxSteps: t.Optional(t.Number())` ([server.ts:244](https://github.com/apache/texera/blob/main/agent-service/src/server.ts#L244)) with no minimum, so any client can turn the cap off. The default is 100, so this only bites when a value is supplied. Negative values have the same problem for the same reason. ### How to reproduce? 1. Start the agent service and connect a client. 2. Update the agent settings with `maxSteps: 0` (accepted — no validation rejects it). 3. Send a message that leads the model to keep calling tools. 4. The loop is never stopped by the step cap. Reproducing it in a unit test is possible but **do not add one**: because the run never ends, the test hangs the suite rather than failing it. This surfaced while writing coverage for `sendMessage`, and it is noted in that spec so nobody tries. ### Version/Branch 1.3.0-incubating-SNAPSHOT (main) ### Expected behavior `maxSteps` should be validated at both boundaries — rejected at the API schema (`t.Number({ minimum: 1 })`) and clamped or rejected in `updateSettings` — so the cap cannot be disabled by configuration. Alternatively `stopWhen` should use a `>=` comparison rather than the SDK's equality predicate, which would also make the cap robust to a step count that overshoots. ### Additional context Found while raising `texera-agent.ts` coverage from 51% to 99.8%. The reachable-but-untestable nature of this path is the reason no regression test accompanies the report. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
