UNPKG

@autobe/agent

Version:

AI backend server code generator

207 lines (197 loc) 6.79 kB
// import { // AutoBeProgressEventBase, // AutoBeTestValidateEvent, // } from "@autobe/interface"; // import { ILlmController } from "@samchon/openapi"; // import { IPointer } from "tstl"; // import { v7 } from "uuid"; // import { AutoBeContext } from "../../../context/AutoBeContext"; // import { IAutoBeOrchestrateHistory } from "../../../structures/IAutoBeOrchestrateHistory"; // import { executeCachedBatch } from "../../../utils/executeCachedBatch"; // import { IAutoBeTestAuthorizeProcedure } from "../structures/IAutoBeTestAuthorizeWriteResult"; // import { IAutoBeTestCorrectRequestApplication } from "../structures/IAutoBeTestCorrectRequestApplication"; // import { IAutoBeTestFunctionFailure } from "../structures/IAutoBeTestFunctionFailure"; // import { IAutoBeTestGenerateProcedure } from "../structures/IAutoBeTestGenerateProcedure"; // import { IAutoBeTestOperationProcedure } from "../structures/IAutoBeTestOperationProcedure"; // interface IProgrammer< // Model extends ILlmSchema.Model, // Procedure extends // | IAutoBeTestAuthorizeProcedure // | IAutoBeTestGenerateProcedure // | IAutoBeTestOperationProcedure, // > { // controller(next: { // model: Model; // procedure: Procedure; // build: (next: IAutoBeTestCorrectRequestApplication.IProps | false) => void; // }): ILlmController<Model, IAutoBeTestCorrectRequestApplication>; // histories(props: { // procedure: Procedure; // failures: IAutoBeTestFunctionFailure<Procedure>[]; // }): Promise<IAutoBeOrchestrateHistory>; // replaceImportStatements(procedure: Procedure): Promise<string>; // compile( // procedure: Procedure, // ): Promise<AutoBeTestValidateEvent<Procedure["function"]>>; // } // export async function orchestrateTestCorrectRequest< // Model extends ILlmSchema.Model, // Procedure extends // | IAutoBeTestAuthorizeProcedure // | IAutoBeTestGenerateProcedure // | IAutoBeTestOperationProcedure, // >( // ctx: AutoBeContext, // props: { // programmer: IProgrammer<Model, Procedure>; // instruction: string; // procedures: Procedure[]; // progress: AutoBeProgressEventBase; // }, // ): Promise<Procedure[]> { // const results: Array<Procedure | null> = await executeCachedBatch( // ctx, // props.procedures.map((procedure) => async (promptCacheKey) => { // try { // const event: AutoBeTestValidateEvent<Procedure["function"]> = // await predicate( // ctx, // { // programmer: props.programmer, // procedure, // failures: [], // validate: await props.programmer.compile(procedure), // promptCacheKey, // instruction: props.instruction, // }, // ctx.retry, // ); // return { // ...procedure, // function: event.function, // }; // } catch { // return null; // } // }), // ); // return results.filter((r) => r !== null); // } // async function predicate< // Model extends ILlmSchema.Model, // Procedure extends // | IAutoBeTestAuthorizeProcedure // | IAutoBeTestGenerateProcedure // | IAutoBeTestOperationProcedure, // >( // ctx: AutoBeContext, // props: { // programmer: IProgrammer<Model, Procedure>; // procedure: Procedure; // failures: IAutoBeTestFunctionFailure<Procedure>[]; // validate: AutoBeTestValidateEvent<Procedure["function"]>; // promptCacheKey: string; // instruction: string; // }, // life: number, // ): Promise<AutoBeTestValidateEvent<Procedure["function"]>> { // if (props.validate.result.type === "failure") { // ctx.dispatch(props.validate); // return await correct(ctx, props, life - 1); // } // return props.validate; // } // async function correct< // Model extends ILlmSchema.Model, // Procedure extends // | IAutoBeTestAuthorizeProcedure // | IAutoBeTestGenerateProcedure // | IAutoBeTestOperationProcedure, // >( // ctx: AutoBeContext, // props: { // programmer: IProgrammer<Model, Procedure>; // procedure: Procedure; // failures: IAutoBeTestFunctionFailure<Procedure>[]; // validate: AutoBeTestValidateEvent<Procedure["function"]>; // promptCacheKey: string; // instruction: string; // }, // life: number, // ): Promise<AutoBeTestValidateEvent<Procedure["function"]>> { // if (props.validate.result.type !== "failure") return props.validate; // else if (life < 0) return props.validate; // const pointer: IPointer< // IAutoBeTestCorrectRequestApplication.IProps | false | null // > = { // value: null, // }; // const { metric, tokenUsage } = await ctx.conversate({ // source: "testCorrect", // controller: props.programmer.controller({ // model: ctx.model, // procedure: props.procedure, // build: (next) => { // pointer.value = next; // }, // }), // enforceFunctionCall: true, // promptCacheKey: props.promptCacheKey, // ...(await props.programmer.histories({ // 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."); // else if (pointer.value === false) return props.validate; // other's responsibility // const newProcedure: Procedure = { // ...props.procedure, // function: { // ...props.procedure.function, // content: await props.programmer.replaceImportStatements({ // ...props.procedure, // function: { // ...props.procedure.function, // content: pointer.value.revise.final ?? pointer.value.draft, // }, // }), // }, // }; // const newValidate: AutoBeTestValidateEvent<Procedure["function"]> = // await props.programmer.compile(newProcedure); // ctx.dispatch({ // type: "testCorrect", // kind: "request", // id: v7(), // created_at: new Date().toISOString(), // function: newProcedure.function, // result: props.validate.result, // metric, // tokenUsage, // step: ctx.state().analyze?.step ?? 0, // }); // return await 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, // ); // }