@bluelibs/runner-dev 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI.md +40 -43
- package/README.md +70 -0
- package/dist/architect/core/errors.d.ts +39 -0
- package/dist/architect/core/errors.js +143 -0
- package/dist/architect/core/errors.js.map +1 -0
- package/dist/architect/core/index.d.ts +3 -0
- package/dist/architect/core/index.js +21 -0
- package/dist/architect/core/index.js.map +1 -0
- package/dist/architect/core/interfaces.d.ts +158 -0
- package/dist/architect/core/interfaces.js +3 -0
- package/dist/architect/core/interfaces.js.map +1 -0
- package/dist/architect/core/types.d.ts +544 -0
- package/dist/architect/core/types.js +49 -0
- package/dist/architect/core/types.js.map +1 -0
- package/dist/architect/execution/executor.d.ts +23 -0
- package/dist/architect/execution/executor.js +476 -0
- package/dist/architect/execution/executor.js.map +1 -0
- package/dist/architect/execution/index.d.ts +1 -0
- package/dist/architect/execution/index.js +19 -0
- package/dist/architect/execution/index.js.map +1 -0
- package/dist/architect/executor.d.ts +7 -0
- package/dist/architect/executor.js +150 -0
- package/dist/architect/executor.js.map +1 -0
- package/dist/architect/index.d.ts +45 -0
- package/dist/architect/index.js +76 -0
- package/dist/architect/index.js.map +1 -0
- package/dist/architect/llmClient.d.ts +10 -0
- package/dist/architect/llmClient.js +33 -0
- package/dist/architect/llmClient.js.map +1 -0
- package/dist/architect/models/base.d.ts +16 -0
- package/dist/architect/models/base.js +68 -0
- package/dist/architect/models/base.js.map +1 -0
- package/dist/architect/models/factory.d.ts +16 -0
- package/dist/architect/models/factory.js +73 -0
- package/dist/architect/models/factory.js.map +1 -0
- package/dist/architect/models/index.d.ts +3 -0
- package/dist/architect/models/index.js +21 -0
- package/dist/architect/models/index.js.map +1 -0
- package/dist/architect/models/openai.d.ts +7 -0
- package/dist/architect/models/openai.js +71 -0
- package/dist/architect/models/openai.js.map +1 -0
- package/dist/architect/planner.d.ts +9 -0
- package/dist/architect/planner.js +42 -0
- package/dist/architect/planner.js.map +1 -0
- package/dist/architect/planning/index.d.ts +4 -0
- package/dist/architect/planning/index.js +22 -0
- package/dist/architect/planning/index.js.map +1 -0
- package/dist/architect/planning/optimizer.d.ts +14 -0
- package/dist/architect/planning/optimizer.js +275 -0
- package/dist/architect/planning/optimizer.js.map +1 -0
- package/dist/architect/planning/planner.d.ts +15 -0
- package/dist/architect/planning/planner.js +124 -0
- package/dist/architect/planning/planner.js.map +1 -0
- package/dist/architect/planning/prompts.d.ts +6 -0
- package/dist/architect/planning/prompts.js +111 -0
- package/dist/architect/planning/prompts.js.map +1 -0
- package/dist/architect/planning/validator.d.ts +16 -0
- package/dist/architect/planning/validator.js +331 -0
- package/dist/architect/planning/validator.js.map +1 -0
- package/dist/architect/prompt.d.ts +1 -0
- package/dist/architect/prompt.js +13 -0
- package/dist/architect/prompt.js.map +1 -0
- package/dist/architect/types.d.ts +4 -0
- package/dist/architect/types.js +24 -0
- package/dist/architect/types.js.map +1 -0
- package/dist/cli/format.d.ts +19 -0
- package/dist/cli/format.js +62 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/init.d.ts +1 -0
- package/dist/cli/init.js +279 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/query.js +69 -0
- package/dist/cli/query.js.map +1 -1
- package/dist/cli.js +48 -21
- package/dist/cli.js.map +1 -1
- package/dist/code.d.ts +50 -0
- package/dist/code.js +357 -0
- package/dist/code.js.map +1 -0
- package/dist/generated/resolvers-types.d.ts +150 -29
- package/dist/index.d.ts +6 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/cli.config.resource.d.ts +7 -0
- package/dist/resources/cli.config.resource.js +11 -0
- package/dist/resources/cli.config.resource.js.map +1 -0
- package/dist/resources/coverage.resource.d.ts +19 -0
- package/dist/resources/coverage.resource.js +213 -0
- package/dist/resources/coverage.resource.js.map +1 -0
- package/dist/resources/dev.resource.js +0 -2
- package/dist/resources/dev.resource.js.map +1 -1
- package/dist/resources/graphql.cli.resource.d.ts +4 -0
- package/dist/resources/graphql.cli.resource.js +27 -0
- package/dist/resources/graphql.cli.resource.js.map +1 -0
- package/dist/resources/graphql.query.cli.task.d.ts +47 -0
- package/dist/resources/graphql.query.cli.task.js +54 -0
- package/dist/resources/graphql.query.cli.task.js.map +1 -0
- package/dist/resources/introspector.cli.resource.d.ts +6 -0
- package/dist/resources/introspector.cli.resource.js +17 -0
- package/dist/resources/introspector.cli.resource.js.map +1 -0
- package/dist/resources/live.resource.d.ts +2 -1
- package/dist/resources/live.resource.js +4 -2
- package/dist/resources/live.resource.js.map +1 -1
- package/dist/resources/models/Introspector.d.ts +1 -1
- package/dist/resources/models/Introspector.js +5 -34
- package/dist/resources/models/Introspector.js.map +1 -1
- package/dist/resources/models/initializeFromStore.js +26 -34
- package/dist/resources/models/initializeFromStore.js.map +1 -1
- package/dist/resources/models/initializeFromStore.utils.js +25 -6
- package/dist/resources/models/initializeFromStore.utils.js.map +1 -1
- package/dist/resources/models/introspector.tools.js +2 -2
- package/dist/resources/models/introspector.tools.js.map +1 -1
- package/dist/resources/routeHandlers/getDocsData.d.ts +6 -0
- package/dist/resources/routeHandlers/getDocsData.js +106 -0
- package/dist/resources/routeHandlers/getDocsData.js.map +1 -1
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.d.ts +4 -0
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js +9 -7
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js.map +1 -1
- package/dist/resources/server.resource.d.ts +3 -0
- package/dist/resources/server.resource.js +8 -1
- package/dist/resources/server.resource.js.map +1 -1
- package/dist/resources/swap.cli.resource.d.ts +11 -0
- package/dist/resources/swap.cli.resource.js +54 -0
- package/dist/resources/swap.cli.resource.js.map +1 -0
- package/dist/schema/context.d.ts +2 -0
- package/dist/schema/model.d.ts +4 -1
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/mutation.js +38 -0
- package/dist/schema/mutation.js.map +1 -1
- package/dist/schema/query.js +22 -18
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/types/BaseElementCommon.d.ts +2 -4
- package/dist/schema/types/BaseElementCommon.js +28 -0
- package/dist/schema/types/BaseElementCommon.js.map +1 -1
- package/dist/schema/types/CoverageType.d.ts +7 -0
- package/dist/schema/types/CoverageType.js +54 -0
- package/dist/schema/types/CoverageType.js.map +1 -0
- package/dist/schema/types/LiveType.js +4 -0
- package/dist/schema/types/LiveType.js.map +1 -1
- package/dist/schema/types/ResourceType.js +6 -0
- package/dist/schema/types/ResourceType.js.map +1 -1
- package/dist/schema/types/TagType.js +4 -3
- package/dist/schema/types/TagType.js.map +1 -1
- package/dist/schema/types/index.d.ts +1 -0
- package/dist/schema/types/index.js +3 -1
- package/dist/schema/types/index.js.map +1 -1
- package/dist/ui/.vite/manifest.json +2 -2
- package/dist/ui/assets/docs-DR80KoAA.js +416 -0
- package/dist/ui/assets/docs-DR80KoAA.js.map +1 -0
- package/dist/ui/assets/docs-WKK9Zcu5.css +1 -0
- package/dist/utils/path.js +10 -0
- package/dist/utils/path.js.map +1 -1
- package/package.json +12 -8
- package/dist/ui/assets/docs-DVEzFAJo.css +0 -1
- package/dist/ui/assets/docs-l9XdmrRL.js +0 -174
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Legacy executor - deprecated in favor of the new execution system
|
|
3
|
+
// This file is kept for backward compatibility
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.executePlan = executePlan;
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
11
|
+
// Helper to resolve a path relative to the project root.
|
|
12
|
+
function resolveProjectPath(relativePath) {
|
|
13
|
+
// __dirname points to /.../src/architect, so go up two levels to project root.
|
|
14
|
+
const projectRoot = path_1.default.resolve(__dirname, "../..", ".."); // src/architect -> src -> project root
|
|
15
|
+
return path_1.default.resolve(projectRoot, relativePath);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Writes a file, ensuring the directory exists.
|
|
19
|
+
* Returns a log message.
|
|
20
|
+
*/
|
|
21
|
+
async function writeFileAction(action) {
|
|
22
|
+
const absolute = resolveProjectPath(action.path);
|
|
23
|
+
await promises_1.default.mkdir(path_1.default.dirname(absolute), { recursive: true });
|
|
24
|
+
const content = action.type === "createFile" ? action.content : action.patch; // update uses patch as new content for simplicity
|
|
25
|
+
await promises_1.default.writeFile(absolute, content, "utf8");
|
|
26
|
+
return `[OK] ${action.type === "createFile" ? "Created" : "Updated"} ${action.path}`;
|
|
27
|
+
}
|
|
28
|
+
/** Delete a file safely (only test files). */
|
|
29
|
+
async function deleteFileAction(action) {
|
|
30
|
+
const absolute = resolveProjectPath(action.path);
|
|
31
|
+
// Safety: only allow deletion of *.test.ts or *.spec.ts files.
|
|
32
|
+
if (!action.path.match(/\.(test|spec)\.ts$/)) {
|
|
33
|
+
return `WARNING: Skipped deletion of ${action.path}: only test files may be removed`; // no error, just log
|
|
34
|
+
}
|
|
35
|
+
await promises_1.default.unlink(absolute).catch(() => { }); // ignore if missing
|
|
36
|
+
return ` Deleted ${action.path}`;
|
|
37
|
+
}
|
|
38
|
+
/** Register a task by importing the file – ensures the task exists in the runtime. */
|
|
39
|
+
async function registerTaskAction(action) {
|
|
40
|
+
const absolute = resolveProjectPath(action.file);
|
|
41
|
+
try {
|
|
42
|
+
const mod = await import(absolute);
|
|
43
|
+
const task = mod[Object.keys(mod)[0]]; // naive: first export is the task
|
|
44
|
+
if (!task || typeof task !== "function" || !task.id) {
|
|
45
|
+
return `WARNING: Task not found in ${action.file}`;
|
|
46
|
+
}
|
|
47
|
+
// No explicit registration needed – importing registers via Runner's side‑effects.
|
|
48
|
+
return `[OK] Registered task ${action.taskId} from ${action.file}`;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
return `[ERROR] Failed to register task ${action.taskId}: ${e.message}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function registerTestAction(action) {
|
|
55
|
+
// Jest automatically picks up *.test.ts files, so just ensure the file exists.
|
|
56
|
+
const absolute = resolveProjectPath(action.file);
|
|
57
|
+
const exists = await promises_1.default.access(absolute).then(() => true).catch(() => false);
|
|
58
|
+
return exists
|
|
59
|
+
? `[OK] Test file ${action.file} ready for Jest`
|
|
60
|
+
: `[ERROR] Test file ${action.file} not found after creation`;
|
|
61
|
+
}
|
|
62
|
+
async function runDebuggerAction(action) {
|
|
63
|
+
// In dev mode we can emit an event that a custom hook can listen to.
|
|
64
|
+
// For simplicity we just log.
|
|
65
|
+
return ` Debugger requested for task ${action.taskId} (breakpoint: ${action.breakpoint ?? "none"})`;
|
|
66
|
+
}
|
|
67
|
+
async function logAction(action) {
|
|
68
|
+
return ` ${action.message}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated Use ArchitectExecutor class instead
|
|
72
|
+
*
|
|
73
|
+
* Main executor function - legacy implementation
|
|
74
|
+
*/
|
|
75
|
+
async function executePlan(plan) {
|
|
76
|
+
const result = {
|
|
77
|
+
planId: plan.id,
|
|
78
|
+
success: true,
|
|
79
|
+
executionTime: 0,
|
|
80
|
+
actionsPerformed: 0,
|
|
81
|
+
actionsSkipped: 0,
|
|
82
|
+
logs: []
|
|
83
|
+
};
|
|
84
|
+
const allowWrite = process.env.ARCHITECT_ALLOW_WRITES === "true";
|
|
85
|
+
const startTime = Date.now();
|
|
86
|
+
for (let i = 0; i < plan.actions.length; i++) {
|
|
87
|
+
const action = plan.actions[i];
|
|
88
|
+
try {
|
|
89
|
+
let logMsg;
|
|
90
|
+
if (!allowWrite && action.type !== "log") {
|
|
91
|
+
logMsg = `WARNING: Write blocked (ARCHITECT_ALLOW_WRITES not true) for action ${action.type}`;
|
|
92
|
+
result.success = false;
|
|
93
|
+
result.actionsSkipped++;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
switch (action.type) {
|
|
97
|
+
case "createFile":
|
|
98
|
+
case "updateFile":
|
|
99
|
+
logMsg = await writeFileAction(action);
|
|
100
|
+
break;
|
|
101
|
+
case "deleteFile":
|
|
102
|
+
logMsg = await deleteFileAction(action);
|
|
103
|
+
break;
|
|
104
|
+
case "registerTask":
|
|
105
|
+
logMsg = await registerTaskAction(action);
|
|
106
|
+
break;
|
|
107
|
+
case "registerTest":
|
|
108
|
+
logMsg = await registerTestAction(action);
|
|
109
|
+
break;
|
|
110
|
+
case "runDebugger":
|
|
111
|
+
logMsg = await runDebuggerAction(action);
|
|
112
|
+
break;
|
|
113
|
+
case "log":
|
|
114
|
+
logMsg = await logAction(action);
|
|
115
|
+
break;
|
|
116
|
+
default:
|
|
117
|
+
logMsg = ` Unknown action type ${action.type}`;
|
|
118
|
+
result.success = false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
result.logs.push({
|
|
122
|
+
timestamp: Date.now(),
|
|
123
|
+
level: 'info',
|
|
124
|
+
message: logMsg,
|
|
125
|
+
actionIndex: i
|
|
126
|
+
});
|
|
127
|
+
result.actionsPerformed++;
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
result.success = false;
|
|
131
|
+
const errMsg = `[ERROR] Error executing action ${i} (${action.type}): ${e.message}`;
|
|
132
|
+
result.logs.push({
|
|
133
|
+
timestamp: Date.now(),
|
|
134
|
+
level: 'error',
|
|
135
|
+
message: errMsg,
|
|
136
|
+
actionIndex: i
|
|
137
|
+
});
|
|
138
|
+
result.errors = result.errors ?? [];
|
|
139
|
+
result.errors.push({
|
|
140
|
+
actionIndex: i,
|
|
141
|
+
action,
|
|
142
|
+
error: e.message,
|
|
143
|
+
recoverable: false
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
result.executionTime = Date.now() - startTime;
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/architect/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export * from './core';
|
|
2
|
+
export * from './models';
|
|
3
|
+
export * from './planning';
|
|
4
|
+
export * from './execution';
|
|
5
|
+
import { IAIModel, IArchitectLogger, PlanningContext, ExecutionOptions, ArchitectPlan, ArchitectResult } from './core';
|
|
6
|
+
import { ArchitectPlanner } from './planning';
|
|
7
|
+
import { ArchitectExecutor } from './execution';
|
|
8
|
+
export interface ArchitectConfig {
|
|
9
|
+
model: IAIModel;
|
|
10
|
+
logger: IArchitectLogger;
|
|
11
|
+
defaultContext?: PlanningContext;
|
|
12
|
+
defaultExecutionOptions?: Partial<ExecutionOptions>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Main Architect class that combines planning and execution
|
|
16
|
+
*/
|
|
17
|
+
export declare class Architect {
|
|
18
|
+
private config;
|
|
19
|
+
private planner;
|
|
20
|
+
private executor;
|
|
21
|
+
constructor(config: ArchitectConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Generate a plan from a user prompt
|
|
24
|
+
*/
|
|
25
|
+
plan(prompt: string, context?: PlanningContext): Promise<ArchitectPlan>;
|
|
26
|
+
/**
|
|
27
|
+
* Execute a plan
|
|
28
|
+
*/
|
|
29
|
+
execute(plan: ArchitectPlan, options?: ExecutionOptions): Promise<ArchitectResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Plan and execute in one step
|
|
32
|
+
*/
|
|
33
|
+
run(prompt: string, context?: PlanningContext, options?: ExecutionOptions): Promise<{
|
|
34
|
+
plan: ArchitectPlan;
|
|
35
|
+
result: ArchitectResult;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Get the underlying planner
|
|
39
|
+
*/
|
|
40
|
+
get planner(): ArchitectPlanner;
|
|
41
|
+
/**
|
|
42
|
+
* Get the underlying executor
|
|
43
|
+
*/
|
|
44
|
+
get executor(): ArchitectExecutor;
|
|
45
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Architect = void 0;
|
|
18
|
+
// Main architect module exports
|
|
19
|
+
__exportStar(require("./core"), exports);
|
|
20
|
+
__exportStar(require("./models"), exports);
|
|
21
|
+
__exportStar(require("./planning"), exports);
|
|
22
|
+
__exportStar(require("./execution"), exports);
|
|
23
|
+
const planning_1 = require("./planning");
|
|
24
|
+
const execution_1 = require("./execution");
|
|
25
|
+
/**
|
|
26
|
+
* Main Architect class that combines planning and execution
|
|
27
|
+
*/
|
|
28
|
+
class Architect {
|
|
29
|
+
config;
|
|
30
|
+
planner;
|
|
31
|
+
executor;
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.config = config;
|
|
34
|
+
this.planner = new planning_1.ArchitectPlanner(config.model, config.logger, config.defaultContext);
|
|
35
|
+
this.executor = new execution_1.ArchitectExecutor(config.logger, config.defaultExecutionOptions);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate a plan from a user prompt
|
|
39
|
+
*/
|
|
40
|
+
async plan(prompt, context) {
|
|
41
|
+
return this.planner.plan(prompt, context);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute a plan
|
|
45
|
+
*/
|
|
46
|
+
async execute(plan, options) {
|
|
47
|
+
return this.executor.execute(plan, options);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Plan and execute in one step
|
|
51
|
+
*/
|
|
52
|
+
async run(prompt, context, options) {
|
|
53
|
+
const plan = await this.plan(prompt, context);
|
|
54
|
+
// Validate plan before execution
|
|
55
|
+
const validation = await this.planner.validate(plan);
|
|
56
|
+
if (!validation.valid) {
|
|
57
|
+
throw new Error(`Plan validation failed: ${validation.errors.map(e => e.message).join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
const result = await this.execute(plan, options);
|
|
60
|
+
return { plan, result };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get the underlying planner
|
|
64
|
+
*/
|
|
65
|
+
get planner() {
|
|
66
|
+
return this.planner;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the underlying executor
|
|
70
|
+
*/
|
|
71
|
+
get executor() {
|
|
72
|
+
return this.executor;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.Architect = Architect;
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/architect/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gCAAgC;AAChC,yCAAuB;AACvB,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAW5B,yCAA8C;AAC9C,2CAAgD;AAShD;;GAEG;AACH,MAAa,SAAS;IAIA;IAHZ,OAAO,CAAmB;IAC1B,QAAQ,CAAoB;IAEpC,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,2BAAgB,CACjC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,cAAc,CACtB,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,6BAAiB,CACnC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,uBAAuB,CAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,OAAyB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAmB,EAAE,OAA0B;QAC3D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,MAAc,EACd,OAAyB,EACzB,OAA0B;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AA/DD,8BA+DC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface LlmMessage {
|
|
2
|
+
role: "system" | "user" | "assistant";
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Use AIModelFactory.createFromEnv() instead
|
|
7
|
+
*
|
|
8
|
+
* Legacy function that either returns a fake response or uses the new model system
|
|
9
|
+
*/
|
|
10
|
+
export declare function queryLlm(userPrompt: string): Promise<string>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Legacy LLM client - deprecated in favor of the new models system
|
|
3
|
+
// This file is kept for backward compatibility
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.queryLlm = queryLlm;
|
|
6
|
+
const models_1 = require("./models");
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Use AIModelFactory.createFromEnv() instead
|
|
9
|
+
*
|
|
10
|
+
* Legacy function that either returns a fake response or uses the new model system
|
|
11
|
+
*/
|
|
12
|
+
async function queryLlm(userPrompt) {
|
|
13
|
+
const fake = process.env.ARCHITECT_FAKE_RESPONSE;
|
|
14
|
+
if (fake) {
|
|
15
|
+
// The fake response is expected to be a JSON string that matches the
|
|
16
|
+
// ArchitectPlan schema. We simply return it unchanged.
|
|
17
|
+
return fake;
|
|
18
|
+
}
|
|
19
|
+
// Use new model system for real queries
|
|
20
|
+
try {
|
|
21
|
+
const model = models_1.AIModelFactory.createFromEnv();
|
|
22
|
+
const messages = [
|
|
23
|
+
{ role: 'system', content: 'You are an AI architect that generates JSON plans.' },
|
|
24
|
+
{ role: 'user', content: userPrompt }
|
|
25
|
+
];
|
|
26
|
+
return await model.complete(messages);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new Error(`LLM query failed: ${error instanceof Error ? error.message : String(error)}. ` +
|
|
30
|
+
'Consider setting ARCHITECT_FAKE_RESPONSE for testing or configure proper API credentials.');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=llmClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmClient.js","sourceRoot":"","sources":["../../src/architect/llmClient.ts"],"names":[],"mappings":";AAAA,mEAAmE;AACnE,+CAA+C;;AAc/C,4BAsBC;AAlCD,qCAA0C;AAO1C;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAAC,UAAkB;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,qEAAqE;QACrE,uDAAuD;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,uBAAc,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAiB;YAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oDAAoD,EAAE;YACjF,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;SACtC,CAAC;QACF,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YAC/E,2FAA2F,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IAIModel, AIModelConfig, ChatMessage, ChatCompletionRequest, ChatCompletionResponse } from '../core';
|
|
2
|
+
export declare abstract class BaseAIModel implements IAIModel {
|
|
3
|
+
readonly config: AIModelConfig;
|
|
4
|
+
constructor(config: AIModelConfig);
|
|
5
|
+
abstract chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
|
|
6
|
+
complete(messages: ChatMessage[]): Promise<string>;
|
|
7
|
+
abstract supports(feature: 'tools' | 'vision' | 'json_mode'): boolean;
|
|
8
|
+
abstract getInfo(): Promise<{
|
|
9
|
+
id: string;
|
|
10
|
+
contextWindow: number;
|
|
11
|
+
maxOutputTokens: number;
|
|
12
|
+
supportedFeatures: string[];
|
|
13
|
+
}>;
|
|
14
|
+
protected validateConfig(config: AIModelConfig): void;
|
|
15
|
+
protected makeRequest<T = any>(endpoint: string, data: any, options?: RequestInit): Promise<T>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseAIModel = void 0;
|
|
4
|
+
const errors_1 = require("../core/errors");
|
|
5
|
+
class BaseAIModel {
|
|
6
|
+
config;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.validateConfig(config);
|
|
10
|
+
}
|
|
11
|
+
async complete(messages) {
|
|
12
|
+
const response = await this.chat({
|
|
13
|
+
model: this.config.model,
|
|
14
|
+
messages,
|
|
15
|
+
temperature: this.config.temperature ?? 0.7,
|
|
16
|
+
max_tokens: this.config.maxTokens
|
|
17
|
+
});
|
|
18
|
+
const content = response.choices[0]?.message?.content;
|
|
19
|
+
if (!content) {
|
|
20
|
+
throw new errors_1.AIModelError('No content in response', this.config.model);
|
|
21
|
+
}
|
|
22
|
+
return content;
|
|
23
|
+
}
|
|
24
|
+
validateConfig(config) {
|
|
25
|
+
if (!config.apiKey) {
|
|
26
|
+
throw new errors_1.AIModelError('API key is required', config.model);
|
|
27
|
+
}
|
|
28
|
+
if (!config.model) {
|
|
29
|
+
throw new errors_1.AIModelError('Model name is required');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async makeRequest(endpoint, data, options) {
|
|
33
|
+
const url = `${this.config.baseUrl || 'https://api.openai.com/v1'}${endpoint}`;
|
|
34
|
+
const controller = new AbortController();
|
|
35
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout || 30000);
|
|
36
|
+
try {
|
|
37
|
+
const response = await fetch(url, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: {
|
|
40
|
+
'Content-Type': 'application/json',
|
|
41
|
+
'Authorization': `Bearer ${this.config.apiKey}`,
|
|
42
|
+
...options?.headers
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify(data),
|
|
45
|
+
signal: controller.signal,
|
|
46
|
+
...options
|
|
47
|
+
});
|
|
48
|
+
clearTimeout(timeoutId);
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const errorData = await response.json().catch(() => ({}));
|
|
51
|
+
throw (0, errors_1.createErrorFromResponse)(errorData);
|
|
52
|
+
}
|
|
53
|
+
return await response.json();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
clearTimeout(timeoutId);
|
|
57
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
58
|
+
throw new errors_1.AIModelError('Request timeout', this.config.model, { timeout: this.config.timeout });
|
|
59
|
+
}
|
|
60
|
+
if (error instanceof errors_1.AIModelError) {
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
throw new errors_1.AIModelError(`Request failed: ${error instanceof Error ? error.message : String(error)}`, this.config.model, { originalError: error });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.BaseAIModel = BaseAIModel;
|
|
68
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/architect/models/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IAIModel, AIModelConfig } from '../core';
|
|
2
|
+
export type SupportedProvider = 'openai' | 'openai-compatible';
|
|
3
|
+
export interface ModelFactoryConfig extends AIModelConfig {
|
|
4
|
+
provider: SupportedProvider;
|
|
5
|
+
}
|
|
6
|
+
export declare class AIModelFactory {
|
|
7
|
+
static create(config: ModelFactoryConfig): IAIModel;
|
|
8
|
+
static createFromEnv(): IAIModel;
|
|
9
|
+
static getSupportedProviders(): SupportedProvider[];
|
|
10
|
+
static getProviderInfo(provider: SupportedProvider): {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
requiredEnvVars: string[];
|
|
14
|
+
defaultModels: string[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AIModelFactory = void 0;
|
|
4
|
+
const openai_1 = require("./openai");
|
|
5
|
+
const errors_1 = require("../core/errors");
|
|
6
|
+
class AIModelFactory {
|
|
7
|
+
static create(config) {
|
|
8
|
+
switch (config.provider) {
|
|
9
|
+
case 'openai':
|
|
10
|
+
return new openai_1.OpenAIModel({
|
|
11
|
+
...config,
|
|
12
|
+
baseUrl: config.baseUrl || 'https://api.openai.com/v1'
|
|
13
|
+
});
|
|
14
|
+
case 'openai-compatible':
|
|
15
|
+
if (!config.baseUrl) {
|
|
16
|
+
throw new errors_1.ConfigurationError('baseUrl is required for OpenAI-compatible providers', 'baseUrl');
|
|
17
|
+
}
|
|
18
|
+
return new openai_1.OpenAIModel(config);
|
|
19
|
+
default:
|
|
20
|
+
throw new errors_1.ConfigurationError(`Unsupported AI provider: ${config.provider}`, 'provider');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static createFromEnv() {
|
|
24
|
+
const provider = process.env.ARCHITECT_AI_PROVIDER || 'openai';
|
|
25
|
+
const apiKey = process.env.ARCHITECT_API_KEY ||
|
|
26
|
+
process.env.OPENAI_API_KEY;
|
|
27
|
+
if (!apiKey) {
|
|
28
|
+
throw new errors_1.ConfigurationError('No API key found. Set ARCHITECT_API_KEY or OPENAI_API_KEY', 'apiKey');
|
|
29
|
+
}
|
|
30
|
+
const model = process.env.ARCHITECT_MODEL || 'gpt-4o-mini';
|
|
31
|
+
const config = {
|
|
32
|
+
provider,
|
|
33
|
+
apiKey,
|
|
34
|
+
model,
|
|
35
|
+
baseUrl: process.env.ARCHITECT_BASE_URL,
|
|
36
|
+
temperature: process.env.ARCHITECT_TEMPERATURE
|
|
37
|
+
? parseFloat(process.env.ARCHITECT_TEMPERATURE)
|
|
38
|
+
: undefined,
|
|
39
|
+
maxTokens: process.env.ARCHITECT_MAX_TOKENS
|
|
40
|
+
? parseInt(process.env.ARCHITECT_MAX_TOKENS, 10)
|
|
41
|
+
: undefined,
|
|
42
|
+
timeout: process.env.ARCHITECT_TIMEOUT
|
|
43
|
+
? parseInt(process.env.ARCHITECT_TIMEOUT, 10)
|
|
44
|
+
: undefined
|
|
45
|
+
};
|
|
46
|
+
return this.create(config);
|
|
47
|
+
}
|
|
48
|
+
static getSupportedProviders() {
|
|
49
|
+
return ['openai', 'openai-compatible'];
|
|
50
|
+
}
|
|
51
|
+
static getProviderInfo(provider) {
|
|
52
|
+
switch (provider) {
|
|
53
|
+
case 'openai':
|
|
54
|
+
return {
|
|
55
|
+
name: 'OpenAI',
|
|
56
|
+
description: 'Official OpenAI API',
|
|
57
|
+
requiredEnvVars: ['OPENAI_API_KEY'],
|
|
58
|
+
defaultModels: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'gpt-3.5-turbo']
|
|
59
|
+
};
|
|
60
|
+
case 'openai-compatible':
|
|
61
|
+
return {
|
|
62
|
+
name: 'OpenAI Compatible',
|
|
63
|
+
description: 'Any OpenAI-compatible API (e.g., Together AI, Anyscale, local models)',
|
|
64
|
+
requiredEnvVars: ['ARCHITECT_API_KEY', 'ARCHITECT_BASE_URL'],
|
|
65
|
+
defaultModels: ['mixtral-8x7b', 'llama-2-70b-chat', 'code-llama-34b']
|
|
66
|
+
};
|
|
67
|
+
default:
|
|
68
|
+
throw new errors_1.ConfigurationError(`Unknown provider: ${provider}`, 'provider');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.AIModelFactory = AIModelFactory;
|
|
73
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/architect/models/factory.ts"],"names":[],"mappings":";;;AACA,qCAAuC;AACvC,2CAAoD;AAQpD,MAAa,cAAc;IACzB,MAAM,CAAC,MAAM,CAAC,MAA0B;QACtC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,QAAQ;gBACX,OAAO,IAAI,oBAAW,CAAC;oBACrB,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;iBACvD,CAAC,CAAC;YAEL,KAAK,mBAAmB;gBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,2BAAkB,CAC1B,qDAAqD,EACrD,SAAS,CACV,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,oBAAW,CAAC,MAAM,CAAC,CAAC;YAEjC;gBACE,MAAM,IAAI,2BAAkB,CAC1B,4BAA4B,MAAM,CAAC,QAAQ,EAAE,EAC7C,UAAU,CACX,CAAC;QACN,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,MAAM,QAAQ,GAAI,OAAO,CAAC,GAAG,CAAC,qBAA2C,IAAI,QAAQ,CAAC;QACtF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,2BAAkB,CAC1B,2DAA2D,EAC3D,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC;QAE3D,MAAM,MAAM,GAAuB;YACjC,QAAQ;YACR,MAAM;YACN,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;gBAC5C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;gBAC/C,CAAC,CAAC,SAAS;YACb,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;gBACzC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAChD,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBACpC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBAC7C,CAAC,CAAC,SAAS;SACd,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,QAA2B;QAMhD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;oBAClC,eAAe,EAAE,CAAC,gBAAgB,CAAC;oBACnC,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;iBACzE,CAAC;YAEJ,KAAK,mBAAmB;gBACtB,OAAO;oBACL,IAAI,EAAE,mBAAmB;oBACzB,WAAW,EAAE,uEAAuE;oBACpF,eAAe,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;oBAC5D,aAAa,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;iBACtE,CAAC;YAEJ;gBACE,MAAM,IAAI,2BAAkB,CAAC,qBAAqB,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;CACF;AA1FD,wCA0FC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// AI Model implementations and factory
|
|
18
|
+
__exportStar(require("./base"), exports);
|
|
19
|
+
__exportStar(require("./openai"), exports);
|
|
20
|
+
__exportStar(require("./factory"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/architect/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,yCAAuB;AACvB,2CAAyB;AACzB,4CAA0B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ChatCompletionRequest, ChatCompletionResponse } from '../core';
|
|
2
|
+
import { BaseAIModel } from './base';
|
|
3
|
+
export declare class OpenAIModel extends BaseAIModel {
|
|
4
|
+
chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
|
|
5
|
+
supports(feature: 'tools' | 'vision' | 'json_mode'): boolean;
|
|
6
|
+
getInfo(): Promise<any>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenAIModel = void 0;
|
|
4
|
+
const base_1 = require("./base");
|
|
5
|
+
class OpenAIModel extends base_1.BaseAIModel {
|
|
6
|
+
async chat(request) {
|
|
7
|
+
return this.makeRequest('/chat/completions', request);
|
|
8
|
+
}
|
|
9
|
+
supports(feature) {
|
|
10
|
+
const model = this.config.model.toLowerCase();
|
|
11
|
+
switch (feature) {
|
|
12
|
+
case 'tools':
|
|
13
|
+
return model.includes('gpt-4') || model.includes('gpt-3.5-turbo');
|
|
14
|
+
case 'vision':
|
|
15
|
+
return model.includes('gpt-4') && model.includes('vision');
|
|
16
|
+
case 'json_mode':
|
|
17
|
+
return model.includes('gpt-4') || model.includes('gpt-3.5-turbo');
|
|
18
|
+
default:
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async getInfo() {
|
|
23
|
+
const model = this.config.model.toLowerCase();
|
|
24
|
+
// Model-specific configurations
|
|
25
|
+
const modelConfigs = {
|
|
26
|
+
'gpt-4': {
|
|
27
|
+
contextWindow: 8192,
|
|
28
|
+
maxOutputTokens: 4096,
|
|
29
|
+
supportedFeatures: ['tools', 'json_mode']
|
|
30
|
+
},
|
|
31
|
+
'gpt-4-32k': {
|
|
32
|
+
contextWindow: 32768,
|
|
33
|
+
maxOutputTokens: 4096,
|
|
34
|
+
supportedFeatures: ['tools', 'json_mode']
|
|
35
|
+
},
|
|
36
|
+
'gpt-4-turbo': {
|
|
37
|
+
contextWindow: 128000,
|
|
38
|
+
maxOutputTokens: 4096,
|
|
39
|
+
supportedFeatures: ['tools', 'vision', 'json_mode']
|
|
40
|
+
},
|
|
41
|
+
'gpt-4o': {
|
|
42
|
+
contextWindow: 128000,
|
|
43
|
+
maxOutputTokens: 4096,
|
|
44
|
+
supportedFeatures: ['tools', 'vision', 'json_mode']
|
|
45
|
+
},
|
|
46
|
+
'gpt-4o-mini': {
|
|
47
|
+
contextWindow: 128000,
|
|
48
|
+
maxOutputTokens: 16384,
|
|
49
|
+
supportedFeatures: ['tools', 'vision', 'json_mode']
|
|
50
|
+
},
|
|
51
|
+
'gpt-3.5-turbo': {
|
|
52
|
+
contextWindow: 16385,
|
|
53
|
+
maxOutputTokens: 4096,
|
|
54
|
+
supportedFeatures: ['tools', 'json_mode']
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// Find the best match for the model
|
|
58
|
+
const configKey = Object.keys(modelConfigs).find(key => model.includes(key));
|
|
59
|
+
const config = configKey ? modelConfigs[configKey] : {
|
|
60
|
+
contextWindow: 4096,
|
|
61
|
+
maxOutputTokens: 2048,
|
|
62
|
+
supportedFeatures: []
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
id: this.config.model,
|
|
66
|
+
...config
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.OpenAIModel = OpenAIModel;
|
|
71
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/architect/models/openai.ts"],"names":[],"mappings":";;;AACA,iCAAqC;AAErC,MAAa,WAAY,SAAQ,kBAAW;IAC1C,KAAK,CAAC,IAAI,CAAC,OAA8B;QACvC,OAAO,IAAI,CAAC,WAAW,CAAyB,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED,QAAQ,CAAC,OAAyC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAE9C,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACpE,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7D,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACpE;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAE9C,gCAAgC;QAChC,MAAM,YAAY,GAAwB;YACxC,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1C;YACD,WAAW,EAAE;gBACX,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1C;YACD,aAAa,EAAE;gBACb,aAAa,EAAE,MAAM;gBACrB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;aACpD;YACD,QAAQ,EAAE;gBACR,aAAa,EAAE,MAAM;gBACrB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;aACpD;YACD,aAAa,EAAE;gBACb,aAAa,EAAE,MAAM;gBACrB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;aACpD;YACD,eAAe,EAAE;gBACf,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1C;SACF,CAAC;QAEF,oCAAoC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnD,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,EAAE;SACtB,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACrB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;CACF;AAtED,kCAsEC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ArchitectPlan } from "./core/types";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use ArchitectPlanner class instead
|
|
4
|
+
*
|
|
5
|
+
* Sends the user prompt to the LLM and returns a validated ArchitectPlan.
|
|
6
|
+
* If the LLM response cannot be parsed/validated, the function returns a plan
|
|
7
|
+
* containing a single log action that explains the problem.
|
|
8
|
+
*/
|
|
9
|
+
export declare function planFromPrompt(userPrompt: string): Promise<ArchitectPlan>;
|