Spaces:
Sleeping
Sleeping
| import assert from 'node:assert/strict' | |
| import { determineStudioAgentLoopAction } from '../../index' | |
| import { run } from './factories' | |
| export async function runLoopTests() { | |
| await run('loop policy finishes when the assistant stops calling tools', async () => { | |
| const decision = determineStudioAgentLoopAction({ | |
| finishReason: 'stop', | |
| toolCallCount: 0, | |
| step: 0, | |
| maxSteps: 8 | |
| }) | |
| assert.deepEqual(decision, { type: 'finish' }) | |
| }) | |
| await run('loop policy continues when tool calls are returned with budget left', async () => { | |
| const decision = determineStudioAgentLoopAction({ | |
| finishReason: 'tool_calls', | |
| toolCallCount: 2, | |
| step: 2, | |
| maxSteps: 8 | |
| }) | |
| assert.deepEqual(decision, { type: 'continue' }) | |
| }) | |
| await run('loop policy aborts when tool calls would exceed the safety step limit', async () => { | |
| const decision = determineStudioAgentLoopAction({ | |
| finishReason: 'tool_calls', | |
| toolCallCount: 1, | |
| step: 7, | |
| maxSteps: 8 | |
| }) | |
| assert.deepEqual(decision, { | |
| type: 'abort', | |
| message: 'Stopped after reaching the Studio agent step limit (8).' | |
| }) | |
| }) | |
| await run('loop policy surfaces provider stop reasons without leaking loop internals', async () => { | |
| const decision = determineStudioAgentLoopAction({ | |
| finishReason: 'length', | |
| toolCallCount: 0, | |
| step: 0, | |
| maxSteps: 8 | |
| }) | |
| assert.deepEqual(decision, { | |
| type: 'abort', | |
| message: 'Studio agent response hit the model output limit before finishing.' | |
| }) | |
| }) | |
| console.log(' Loop tests passed') | |
| } |