UNPKG

@autobe/agent

Version:

AI backend server code generator

201 lines (188 loc) 8.97 kB
/** * Default configuration constants for AutoBE agent behavior. * * These values balance performance, cost, and reliability across the entire * pipeline. Tuned through production usage to handle real-world LLM API * characteristics (rate limits, latency, failure rates) while maintaining * reasonable token costs and execution times. * * @author Samchon */ export const enum AutoBeConfigConstant { /** * Default retry attempts for LLM API failures and validation error * corrections. * * Used when user doesn't specify retry count in config. Covers two critical * failure modes: (1) transient API failures (rate limits, server errors, * network timeouts) handled by `randomBackoffRetry`, and (2) AI * hallucinations during function calling that produce invalid AST data. * * AI function calling frequently generates type-invalid AST or AST that * violates semantic rules. Orchestrators loop up to `retry` times, providing * validation feedback (from Typia runtime validation or AutoBE compiler * diagnostics) back to the AI for correction. This iterative feedback loop * transforms hallucinations into learning opportunities. * * Value of 3 provides sufficient attempts for complex validation scenarios * while keeping latency reasonable. Most validation errors resolve within 2-3 * attempts, but complex schema corrections may need additional cycles. * Permanent issues (fundamentally misunderstood requirements) still fail fast * rather than wasting resources. */ VALIDATION_RETRY = 3, /** * Retry attempts specifically for AutoBE compiler error correction loops. * * Used by compiler/diagnostic passes that iteratively refine generated code * or AST based on compiler feedback (syntax errors, type errors, or invalid * transformations). Unlike the general `VALIDATION_RETRY` constant, this is * scoped to compilation and code-fix phases where each iteration tends to be * more expensive and has diminishing returns after a few attempts. * * Value of 4 provides a reasonable number of correction cycles for general * compiler issues. Most compiler issues are either resolved within the first * couple of passes or indicate a fundamental mismatch that won't benefit from * further attempts. For database schema corrections specifically, use * `DATABASE_CORRECT_RETRY` which allows more iterations due to the cascading * nature of schema errors. */ COMPILER_RETRY = 4, /** * Retry attempts specifically for Prisma schema correction loops. * * Used by `orchestratePrismaCorrect` when iteratively fixing database schema * compilation errors. Prisma schema correction is particularly challenging * because errors often cascade (one fix reveals new errors) and require * multiple passes to fully resolve complex relationship and constraint * issues. * * Value of 30 is intentionally higher than `COMPILER_RETRY` because database * schema corrections tend to be incremental - each iteration typically fixes * one or two issues rather than resolving everything at once. The higher * limit accommodates complex schemas with many inter-model relationships * while still providing a reasonable bound to prevent infinite correction * loops. */ DATABASE_CORRECT_RETRY = 30, /** * Retry attempts for LLM function-calling execution flows. * * Applied when orchestrators invoke tools/functions through LLM * function-calling interfaces (e.g., to resolve missing parameters, invalid * argument shapes, or misaligned tool selections). Unlike the general `RETRY` * constant (which also covers raw completion failures), this value is scoped * to the tighter loop around function-call planning and argument repair. * * Value of 3 reflects the higher cost of each function-calling cycle (tool * selection + argument generation + execution) compared to simple * completions. Empirically, most function-call issues are corrected within * 1–2 iterations once validation feedback is provided; additional attempts * beyond 3 rarely improve success rates but notably increase latency and * resource usage. */ FUNCTION_CALLING_RETRY = 3, /** * Retry attempts for the Analyze Phase. * * Used when the Analyze Phase fails to write the module, unit, or section. * Value of 15 provides generous retries for the Analyze Phase, which often * needs multiple iterations due to the complexity of module/unit/section * decomposition. Most issues resolve within a few passes, but the higher * limit accommodates complex files requiring many correction cycles. The * limit still prevents indefinite loops while allowing meaningful automatic * correction. */ ANALYZE_RETRY = 15, /** * Maximum consecutive error threshold for fast-fail during the Analyze * Phase's hierarchical file processing. * * Used by `processFileHierarchical` in `orchestrateAnalyze` to detect * persistent failure patterns within a single file's Module → Unit → Section * pipeline. When errors occur consecutively without any successful sub-task * in between, the counter increments. If it reaches this threshold the entire * file processing is aborted immediately, preventing further wasted LLM calls * on a file that is unlikely to recover. * * Value of 5 allows transient failures (rate limits, occasional * hallucinations) to be tolerated while catching truly broken scenarios * (e.g., fundamentally invalid file structure, persistent API outages) before * they consume excessive resources. */ ANALYZE_CONSECUTIVE_ERROR = 5, /** * Batch count for parallel operation processing. * * Controls how many batches `divideArray` creates when splitting large * operation lists for concurrent processing. Value of 1 means no splitting — * the entire list is processed as a single batch, maximizing prompt cache hit * rates at the cost of no parallelism. */ INTERFACE_CAPACITY = 1, /** * Retry attempts for transient LLM API errors (rate limits, 5xx, timeouts). * * Applied by `randomBackoffRetry` around raw HTTP calls to the LLM vendor. * Covers only transport-level failures — not validation or semantic errors, * which are handled by `VALIDATION_RETRY` and `COMPILER_RETRY` respectively. * * Value of 3 keeps total back-off delay short while covering the vast * majority of transient outages. */ API_ERROR_RETRY = 3, /** * Maximum iterations for RAG (Retrieval-Augmented Generation) loops. * * Limits how many times `AutoBePreliminaryController` can fetch additional * context before forcing completion. Prevents infinite loops when LLM * continuously requests more data without making progress. Value of 7 * accommodates complex scenarios requiring multiple context rounds while * preventing runaway execution. */ RAG_LIMIT = 7, /** * Maximum number of `write` submissions per cyclinic write → validate → * correct loop. * * Enforced by `AutoBePreliminaryController`. The agent may call `write` up to * this many times (initial submission + revisions). After the final write, * completion is forced — the agent can no longer revise. * * Value of 3 gives the agent one initial attempt plus two revision * opportunities, which is sufficient for most correction cycles without * excessive token spend. * * @see IAutoBePreliminaryComplete — sent when the agent considers its last * write final (or when forced after reaching this limit) */ PRELIMINARY_WRITE_LIMIT = 3, /** * Default timeout for long-running operations in milliseconds (20 minutes). * * Prevents operations from hanging indefinitely when LLM APIs become * unresponsive. Value of 20 minutes accommodates complex generation tasks * (large projects with dozens of models/operations) while catching genuinely * stuck requests. Override via config for specialized scenarios. */ TIMEOUT = 20 * 60 * 1000, /** * Default concurrency limit for parallel LLM API calls. * * Controls maximum simultaneous requests in `executeCachedBatch` when vendor * doesn't specify semaphore. Value of 8 balances throughput against API rate * limits and memory usage. Too high causes rate limit errors and resource * exhaustion; too low wastes potential parallelism. */ SEMAPHORE = 8, /** * Maximum number of analysis section metadata rows shown per page. * * Controls how many rows appear in the "available sections" table sent to the * LLM during preliminary context loading. When analysis produces many * sections (e.g. 1,000+), sending the entire metadata table at once can * exceed model context limits. Pagination shows only this many rows per RAG * iteration, with the next batch appearing after each context request. */ ANALYSIS_PAGE_SIZE = 75, }