UNPKG

@autobe/agent

Version:

AI backend server code generator

129 lines 6.02 kB
"use strict"; 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