@autobe/agent
Version:
AI backend server code generator
129 lines • 6.02 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.orchestrateTestCorrectOverall = orchestrateTestCorrectOverall;
const uuid_1 = require("uuid");
const executeCachedBatch_1 = require("../../../utils/executeCachedBatch");
const transformTestCorrectOverallHistory_1 = require("../histories/transformTestCorrectOverallHistory");
function orchestrateTestCorrectOverall(ctx, props) {
return __awaiter(this, void 0, void 0, function* () {
const results = yield (0, executeCachedBatch_1.executeCachedBatch)(ctx, props.procedures.map((procedure) => (promptCacheKey) => __awaiter(this, void 0, void 0, function* () {
try {
const event = yield predicate(ctx, {
programmer: props.programmer,
procedure,
failures: [],
validate: yield compileWithFiltering({
compile: props.programmer.compile,
procedure,
}),
promptCacheKey,
instruction: props.instruction,
}, 4 /* AutoBeConfigConstant.COMPILER_RETRY */);
if (event.result.type === "failure" && props.discard)
return null;
return Object.assign(Object.assign({}, procedure), { function: event.function });
}
catch (_a) {
if (props.discard)
return null;
else
return procedure;
}
})));
return results.filter((r) => r !== null);
});
}
function predicate(ctx, props, life) {
return __awaiter(this, void 0, void 0, function* () {
if (props.validate.result.type === "failure") {
ctx.dispatch(props.validate);
try {
return yield correct(ctx, props, life - 1);
}
catch (error) {
console.log("testCorrectOverall", error);
return yield correct(ctx, props, life - 2);
}
}
return props.validate;
});
}
function correct(ctx, props, life) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c;
if (props.validate.result.type !== "failure")
return props.validate;
else if (life < 0)
return props.validate;
const pointer = {
value: null,
};
const { metric, tokenUsage } = yield ctx.conversate(Object.assign({ source: "testCorrect", controller: props.programmer.controller({
procedure: props.procedure,
build: (next) => {
pointer.value = next;
},
}), enforceFunctionCall: true, promptCacheKey: props.promptCacheKey }, (yield (0, transformTestCorrectOverallHistory_1.transformTestCorrectOverallHistory)(ctx, {
instruction: props.instruction,
procedure: props.procedure,
failures: [
...props.failures,
{
procedure: props.procedure,
failure: props.validate.result,
},
],
}))));
if (pointer.value === null)
throw new Error("Failed to correct test code.");
const newProcedure = Object.assign(Object.assign({}, props.procedure), { function: Object.assign(Object.assign({}, props.procedure.function), { content: yield props.programmer.replaceImportStatements(Object.assign(Object.assign({}, props.procedure), { function: Object.assign(Object.assign({}, props.procedure.function), { content: (_a = pointer.value.revise.final) !== null && _a !== void 0 ? _a : pointer.value.draft }) })) }) });
const newValidate = yield compileWithFiltering({
compile: props.programmer.compile,
procedure: newProcedure,
});
ctx.dispatch({
type: "testCorrect",
kind: "overall",
id: (0, uuid_1.v7)(),
created_at: new Date().toISOString(),
function: newProcedure.function,
result: props.validate.result,
metric,
tokenUsage,
step: (_c = (_b = ctx.state().analyze) === null || _b === void 0 ? void 0 : _b.step) !== null && _c !== void 0 ? _c : 0,
});
return yield predicate(ctx, {
programmer: props.programmer,
procedure: newProcedure,
failures: [
...props.failures,
{
procedure: props.procedure,
failure: props.validate.result,
},
],
validate: newValidate,
promptCacheKey: props.promptCacheKey,
instruction: props.instruction,
}, life);
});
}
const compileWithFiltering = (props) => __awaiter(void 0, void 0, void 0, function* () {
const event = yield props.compile(props.procedure);
if (event.result.type === "failure") {
event.result.diagnostics = event.result.diagnostics.filter((d) => d.file === props.procedure.function.location);
if (event.result.diagnostics.length === 0)
event.result = { type: "success" };
}
return event;
});
//# sourceMappingURL=orchestrateTestCorrectOverall.js.map