generator-begcode
Version:
Spring Boot + Angular/React/Vue in one handy generator
87 lines (86 loc) • 3.02 kB
JavaScript
import { AgentOutputType, ChatMessageBuilder } from '../agent-core/index.js';
import { AgentFunctionBase } from './utils/index.js';
const runTest = async (context) => {
try {
const result = await context.workspace.exec('poetry run pytest -v', undefined, 10000);
return result;
}
catch (e) {
return {
exitCode: 1,
stdout: `Error thrown from tests: ${e.message}`,
stderr: '',
};
}
};
const extractErrors = (errorsMessage) => {
const pattern = /(?<=^={3,} (FAILURES|ERRORS) ={3,}\n)[\s\S]*?(?=\n^={3,} short test summary info)/gm;
const match = errorsMessage.match(pattern);
if (match) {
return `Errors found in testing: \n ${match[0]}`;
}
return 'Could not find errors in error message';
};
export class RunPytest extends AgentFunctionBase {
constructor() {
super();
}
get name() {
return 'runPytest';
}
get description() {
return 'Run python test and returns error';
}
get parameters() {
return {
type: 'object',
properties: {
filename: {},
},
additionalProperties: false,
};
}
buildExecutor({ context }) {
return async (params, rawParams) => {
const response = await runTest(context);
if (response.exitCode === 0) {
return {
outputs: [
{
type: AgentOutputType.Success,
title: 'Succesfully ran test',
},
],
messages: [
ChatMessageBuilder.functionCall(this.name, params),
ChatMessageBuilder.functionCallResult(this.name, 'Succesfully ran test'),
],
};
}
if (response.stdout === 'Timeout achieved') {
return {
outputs: [
{
type: AgentOutputType.Error,
title: 'Error running tests',
},
],
messages: [
ChatMessageBuilder.functionCall(this.name, params),
ChatMessageBuilder.functionCallResult(this.name, "Test have reached timeout. Maybe there's an infinite loop in the code. Please review and fix"),
],
};
}
const errorMessages = extractErrors(response.stdout);
return {
outputs: [
{
type: AgentOutputType.Error,
title: 'Error running tests',
},
],
messages: [ChatMessageBuilder.functionCall(this.name, params), ChatMessageBuilder.functionCallResult(this.name, errorMessages)],
};
};
}
}