fix(Basic LLM Chain Node): Parse plain object output from structured output parser

This commit is contained in:
Devendra Reddy Pennabadi 2026-05-06 17:34:42 +00:00
parent 0ce820de73
commit 5ae5528979
2 changed files with 34 additions and 0 deletions

View File

@ -191,5 +191,13 @@ export const getAgentStepsParser =
return parsedOutput;
}
if (typeof steps === 'object' && steps !== null && !Array.isArray(steps)) {
const parsedOutput = (await outputParser.parse(JSON.stringify(steps))) as Record<
string,
unknown
>;
return parsedOutput;
}
throw new Error('Failed to parse agent steps');
};

View File

@ -349,5 +349,31 @@ describe('promptUtils', () => {
await expect(parser(steps)).rejects.toThrow('Failed to parse agent steps');
});
it('should parse plain object via outputParser (regression for #29903)', async () => {
const parser = getAgentStepsParser(mockOutputParser);
const plainObject = { output: { isValid: false, message: 'error' } };
const parsedResult = { isValid: false, message: 'error' };
mockOutputParser.parse.mockResolvedValue(parsedResult);
const result = await parser(plainObject as unknown as AgentFinish);
expect(mockOutputParser.parse).toHaveBeenCalledWith(JSON.stringify(plainObject));
expect(result).toEqual(parsedResult);
});
it('should parse plain object with arbitrary shape via outputParser', async () => {
const parser = getAgentStepsParser(mockOutputParser);
const plainObject = { foo: 'bar', count: 42 };
const parsedResult = { foo: 'bar', count: 42 };
mockOutputParser.parse.mockResolvedValue(parsedResult);
const result = await parser(plainObject as unknown as AgentFinish);
expect(mockOutputParser.parse).toHaveBeenCalledWith(JSON.stringify(plainObject));
expect(result).toEqual(parsedResult);
});
});
});