@denispro2006/duke-ai-kernel 1.0.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/README.md +81 -0
- package/config/prompts/default.txt +1 -0
- package/config/routing.json +24 -0
- package/dist/api/routes.d.ts +3 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +114 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/app.d.ts +7 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +21 -0
- package/dist/app.js.map +1 -0
- package/dist/config/index.d.ts +50 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +86 -0
- package/dist/config/index.js.map +1 -0
- package/dist/context/context-manager.d.ts +30 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +77 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/controllers/ai.controller.d.ts +3 -0
- package/dist/controllers/ai.controller.d.ts.map +1 -0
- package/dist/controllers/ai.controller.js +20 -0
- package/dist/controllers/ai.controller.js.map +1 -0
- package/dist/controllers/message.controller.d.ts +4 -0
- package/dist/controllers/message.controller.d.ts.map +1 -0
- package/dist/controllers/message.controller.js +28 -0
- package/dist/controllers/message.controller.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/index.d.ts +17 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +134 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/lib/logger.d.ts +3 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +15 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/middleware/auth.middleware.d.ts +3 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +24 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/middleware/error.middleware.d.ts +6 -0
- package/dist/middleware/error.middleware.d.ts.map +1 -0
- package/dist/middleware/error.middleware.js +16 -0
- package/dist/middleware/error.middleware.js.map +1 -0
- package/dist/models/Message.d.ts +10 -0
- package/dist/models/Message.d.ts.map +1 -0
- package/dist/models/Message.js +3 -0
- package/dist/models/Message.js.map +1 -0
- package/dist/models/User.d.ts +7 -0
- package/dist/models/User.d.ts.map +1 -0
- package/dist/models/User.js +3 -0
- package/dist/models/User.js.map +1 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +74 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +3 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +65 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +38 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +3 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +77 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +3 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +63 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/router/index.d.ts +13 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +70 -0
- package/dist/router/index.js.map +1 -0
- package/dist/routes/ai.routes.d.ts +3 -0
- package/dist/routes/ai.routes.d.ts.map +1 -0
- package/dist/routes/ai.routes.js +9 -0
- package/dist/routes/ai.routes.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +6 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/services/ai.service.d.ts +4 -0
- package/dist/services/ai.service.d.ts.map +1 -0
- package/dist/services/ai.service.js +28 -0
- package/dist/services/ai.service.js.map +1 -0
- package/dist/services/db.service.d.ts +3 -0
- package/dist/services/db.service.d.ts.map +1 -0
- package/dist/services/db.service.js +60 -0
- package/dist/services/db.service.js.map +1 -0
- package/dist/services/kernel.service.d.ts +4 -0
- package/dist/services/kernel.service.d.ts.map +1 -0
- package/dist/services/kernel.service.js +14 -0
- package/dist/services/kernel.service.js.map +1 -0
- package/dist/types.d.ts +72 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/helpers.d.ts +6 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +24 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +6 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/workers/aiWorker.d.ts +6 -0
- package/dist/workers/aiWorker.d.ts.map +1 -0
- package/dist/workers/aiWorker.js +42 -0
- package/dist/workers/aiWorker.js.map +1 -0
- package/dist/ws/gateway.d.ts +3 -0
- package/dist/ws/gateway.d.ts.map +1 -0
- package/dist/ws/gateway.js +110 -0
- package/dist/ws/gateway.js.map +1 -0
- package/package.json +68 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
require("dotenv/config");
|
|
7
|
+
const http_1 = __importDefault(require("http"));
|
|
8
|
+
const ws_1 = require("ws");
|
|
9
|
+
const app_1 = require("./app");
|
|
10
|
+
const gateway_1 = require("./ws/gateway");
|
|
11
|
+
const config_1 = require("./config");
|
|
12
|
+
const logger_1 = require("./lib/logger");
|
|
13
|
+
const kernel_1 = require("./kernel");
|
|
14
|
+
const app = (0, app_1.buildApp)();
|
|
15
|
+
const server = http_1.default.createServer(app);
|
|
16
|
+
const wss = new ws_1.WebSocketServer({ server, path: '/ws' });
|
|
17
|
+
(0, gateway_1.createWsGateway)(wss);
|
|
18
|
+
server.listen(config_1.config.port, () => {
|
|
19
|
+
logger_1.logger.info({ port: config_1.config.port, env: config_1.config.nodeEnv }, 'duke-ai-kernel started');
|
|
20
|
+
});
|
|
21
|
+
async function shutdown(signal) {
|
|
22
|
+
logger_1.logger.info({ signal }, 'Shutdown signal received');
|
|
23
|
+
await kernel_1.kernel.shutdown();
|
|
24
|
+
server.close(() => {
|
|
25
|
+
logger_1.logger.info('HTTP server closed');
|
|
26
|
+
process.exit(0);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
30
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,yBAAsB;AACtB,gDAAuB;AACvB,2BAAoC;AACpC,+BAAgC;AAChC,0CAA8C;AAC9C,qCAAiC;AACjC,yCAAqC;AACrC,qCAAiC;AAEjC,MAAM,GAAG,GAAG,IAAA,cAAQ,GAAE,CAAA;AACtB,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AAErC,MAAM,GAAG,GAAG,IAAI,oBAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACxD,IAAA,yBAAe,EAAC,GAAG,CAAC,CAAA;AAEpB,MAAM,CAAC,MAAM,CAAC,eAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAC9B,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAM,CAAC,IAAI,EAAE,GAAG,EAAE,eAAM,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAA;AACnF,CAAC,CAAC,CAAA;AAEF,KAAK,UAAU,QAAQ,CAAC,MAAc;IACpC,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAA;IACnD,MAAM,eAAM,CAAC,QAAQ,EAAE,CAAA;IACvB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,eAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;AAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { KernelRequest, KernelResponse, KernelPlugin } from '../types';
|
|
2
|
+
export declare class AIKernel {
|
|
3
|
+
private plugins;
|
|
4
|
+
private postPlugins;
|
|
5
|
+
private streamListeners;
|
|
6
|
+
private abortSignals;
|
|
7
|
+
use(plugin: KernelPlugin): void;
|
|
8
|
+
onStream(conversationId: string, listener: (chunk: string) => void): void;
|
|
9
|
+
offStream(conversationId: string): void;
|
|
10
|
+
abort(conversationId: string): void;
|
|
11
|
+
process(request: KernelRequest): Promise<KernelResponse>;
|
|
12
|
+
private executeWithRetry;
|
|
13
|
+
private executeWithStream;
|
|
14
|
+
shutdown(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare const kernel: AIKernel;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAA0B,MAAM,UAAU,CAAA;AAQ9F,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,YAAY,CAAyB;IAE7C,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAI/B,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIzE,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIvC,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAI7B,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;YAkDhD,gBAAgB;YAqChB,iBAAiB;IA2CzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC;AAED,eAAO,MAAM,MAAM,UAAiB,CAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.kernel = exports.AIKernel = void 0;
|
|
4
|
+
const context_manager_1 = require("../context/context-manager");
|
|
5
|
+
const router_1 = require("../router");
|
|
6
|
+
const plugins_1 = require("../plugins");
|
|
7
|
+
const config_1 = require("../config");
|
|
8
|
+
const logger_1 = require("../lib/logger");
|
|
9
|
+
const helpers_1 = require("../utils/helpers");
|
|
10
|
+
class AIKernel {
|
|
11
|
+
plugins = [...plugins_1.defaultPlugins];
|
|
12
|
+
postPlugins = [...plugins_1.postPlugins];
|
|
13
|
+
streamListeners = new Map();
|
|
14
|
+
abortSignals = new Set();
|
|
15
|
+
use(plugin) {
|
|
16
|
+
this.plugins.push(plugin);
|
|
17
|
+
}
|
|
18
|
+
onStream(conversationId, listener) {
|
|
19
|
+
this.streamListeners.set(conversationId, listener);
|
|
20
|
+
}
|
|
21
|
+
offStream(conversationId) {
|
|
22
|
+
this.streamListeners.delete(conversationId);
|
|
23
|
+
}
|
|
24
|
+
abort(conversationId) {
|
|
25
|
+
this.abortSignals.add(conversationId);
|
|
26
|
+
}
|
|
27
|
+
async process(request) {
|
|
28
|
+
const requestId = request.id ?? (0, helpers_1.generateId)('req');
|
|
29
|
+
logger_1.logger.info({ requestId, conversationId: request.conversationId }, 'Processing request');
|
|
30
|
+
if (!context_manager_1.contextManager.has(request.conversationId)) {
|
|
31
|
+
await context_manager_1.contextManager.create(request.conversationId);
|
|
32
|
+
}
|
|
33
|
+
const { messages: history, systemPrompt } = await context_manager_1.contextManager.getForRequest(request.conversationId);
|
|
34
|
+
const fullMessages = [
|
|
35
|
+
...(systemPrompt ? [{ role: 'system', content: systemPrompt }] : []),
|
|
36
|
+
...history,
|
|
37
|
+
...request.messages,
|
|
38
|
+
];
|
|
39
|
+
const enrichedRequest = { ...request, messages: fullMessages };
|
|
40
|
+
const ctx = {
|
|
41
|
+
request: enrichedRequest,
|
|
42
|
+
metadata: {},
|
|
43
|
+
};
|
|
44
|
+
await (0, plugins_1.runPipeline)(this.plugins, ctx, 'pre');
|
|
45
|
+
const { provider, model, providerName } = router_1.router.resolve(ctx.request);
|
|
46
|
+
const resolvedModel = model;
|
|
47
|
+
logger_1.logger.debug({ model: resolvedModel, providerName }, 'Provider resolved');
|
|
48
|
+
const streamListener = this.streamListeners.get(request.conversationId);
|
|
49
|
+
let response;
|
|
50
|
+
if (streamListener) {
|
|
51
|
+
response = await this.executeWithStream(ctx, provider, resolvedModel, request.conversationId, streamListener);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
response = await this.executeWithRetry(ctx, provider, resolvedModel);
|
|
55
|
+
}
|
|
56
|
+
ctx.response = response;
|
|
57
|
+
await (0, plugins_1.runPipeline)(this.postPlugins, ctx, 'post');
|
|
58
|
+
await context_manager_1.contextManager.append(request.conversationId, [
|
|
59
|
+
...request.messages,
|
|
60
|
+
response.message,
|
|
61
|
+
]);
|
|
62
|
+
return response;
|
|
63
|
+
}
|
|
64
|
+
async executeWithRetry(ctx, provider, model) {
|
|
65
|
+
let lastError;
|
|
66
|
+
for (let attempt = 0; attempt <= config_1.config.worker.retryLimit; attempt++) {
|
|
67
|
+
try {
|
|
68
|
+
const completion = await Promise.race([
|
|
69
|
+
provider.complete({ model, messages: ctx.request.messages, options: ctx.request.options }),
|
|
70
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('TIMEOUT')), config_1.config.worker.timeoutMs)),
|
|
71
|
+
]);
|
|
72
|
+
return {
|
|
73
|
+
id: (0, helpers_1.generateId)('cmpl'),
|
|
74
|
+
conversationId: ctx.request.conversationId,
|
|
75
|
+
...completion,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
lastError = err;
|
|
80
|
+
const status = err.status;
|
|
81
|
+
if (attempt < config_1.config.worker.retryLimit && status && (0, helpers_1.isRetryableStatus)(status)) {
|
|
82
|
+
const delay = (0, helpers_1.exponentialBackoff)(attempt, config_1.config.worker.retryDelayMs);
|
|
83
|
+
logger_1.logger.warn({ attempt, delay, status }, 'Retrying after error');
|
|
84
|
+
await (0, helpers_1.sleep)(delay);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
throw lastError ?? new Error('LLM call failed');
|
|
92
|
+
}
|
|
93
|
+
async executeWithStream(ctx, provider, model, conversationId, listener) {
|
|
94
|
+
let fullContent = '';
|
|
95
|
+
let index = 0;
|
|
96
|
+
const stream = provider.stream({ model, messages: ctx.request.messages, options: ctx.request.options });
|
|
97
|
+
for await (const chunk of stream) {
|
|
98
|
+
if (this.abortSignals.has(conversationId)) {
|
|
99
|
+
this.abortSignals.delete(conversationId);
|
|
100
|
+
return {
|
|
101
|
+
id: (0, helpers_1.generateId)('cmpl'),
|
|
102
|
+
conversationId,
|
|
103
|
+
message: { role: 'assistant', content: fullContent },
|
|
104
|
+
usage: { promptTokens: 0, completionTokens: index, totalTokens: index },
|
|
105
|
+
finishReason: 'aborted',
|
|
106
|
+
model,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
fullContent += chunk;
|
|
110
|
+
listener(chunk);
|
|
111
|
+
index++;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
id: (0, helpers_1.generateId)('cmpl'),
|
|
115
|
+
conversationId,
|
|
116
|
+
message: { role: 'assistant', content: fullContent },
|
|
117
|
+
usage: {
|
|
118
|
+
promptTokens: provider.countTokens(ctx.request.messages),
|
|
119
|
+
completionTokens: Math.ceil(fullContent.length / 4),
|
|
120
|
+
totalTokens: provider.countTokens(ctx.request.messages) + Math.ceil(fullContent.length / 4),
|
|
121
|
+
},
|
|
122
|
+
finishReason: 'stop',
|
|
123
|
+
model,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async shutdown() {
|
|
127
|
+
logger_1.logger.info('Kernel shutting down');
|
|
128
|
+
this.streamListeners.clear();
|
|
129
|
+
this.abortSignals.clear();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.AIKernel = AIKernel;
|
|
133
|
+
exports.kernel = new AIKernel();
|
|
134
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kernel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,eAAO,MAAM,MAAM,6BAMjB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
const pino_1 = __importDefault(require("pino"));
|
|
8
|
+
const config_1 = require("../config");
|
|
9
|
+
exports.logger = (0, pino_1.default)({
|
|
10
|
+
level: config_1.config.logLevel,
|
|
11
|
+
transport: config_1.config.nodeEnv === 'development'
|
|
12
|
+
? { target: 'pino-pretty', options: { colorize: true } }
|
|
13
|
+
: undefined,
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,sCAAkC;AAErB,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC;IACzB,KAAK,EAAE,eAAM,CAAC,QAAQ;IACtB,SAAS,EACP,eAAM,CAAC,OAAO,KAAK,aAAa;QAC9B,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACxD,CAAC,CAAC,SAAS;CAChB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAIzD,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAoBpF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authMiddleware = authMiddleware;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
const logger_1 = require("../lib/logger");
|
|
6
|
+
function authMiddleware(req, res, next) {
|
|
7
|
+
if (config_1.config.auth.bypass) {
|
|
8
|
+
next();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const authHeader = req.headers['authorization'];
|
|
12
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
13
|
+
res.status(401).json({ error: 'UNAUTHORIZED', message: 'Missing or invalid Authorization header' });
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const token = authHeader.slice(7);
|
|
17
|
+
if (token !== config_1.config.auth.secret) {
|
|
18
|
+
logger_1.logger.warn({ ip: req.ip }, 'Auth failed — invalid token');
|
|
19
|
+
res.status(401).json({ error: 'UNAUTHORIZED', message: 'Invalid bearer token' });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
next();
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=auth.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.middleware.js","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":";;AAIA,wCAoBC;AAvBD,sCAAkC;AAClC,0CAAsC;AAEtC,SAAgB,cAAc,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC5E,IAAI,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,CAAA;QACN,OAAM;IACR,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC/C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC,CAAA;QACnG,OAAM;IACR,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,KAAK,KAAK,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,eAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAA;QAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAChF,OAAM;IACR,CAAC;IAED,IAAI,EAAE,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/error.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGzD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,KAAK,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EAEb,KAAK,EAAE,YAAY,GAClB,IAAI,CAUN"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.errorMiddleware = errorMiddleware;
|
|
4
|
+
const logger_1 = require("../lib/logger");
|
|
5
|
+
function errorMiddleware(err, req, res,
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
7
|
+
_next) {
|
|
8
|
+
logger_1.logger.error({ err, path: req.path, method: req.method }, 'Unhandled error');
|
|
9
|
+
const status = err.status ?? 500;
|
|
10
|
+
const code = err.code ?? 'INTERNAL_ERROR';
|
|
11
|
+
res.status(status).json({
|
|
12
|
+
error: code,
|
|
13
|
+
message: err.message || 'An unexpected error occurred',
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=error.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.middleware.js","sourceRoot":"","sources":["../../src/middleware/error.middleware.ts"],"names":[],"mappings":";;AAGA,0CAgBC;AAlBD,0CAAsC;AAEtC,SAAgB,eAAe,CAC7B,GAA+C,EAC/C,GAAY,EACZ,GAAa;AACb,6DAA6D;AAC7D,KAAmB;IAEnB,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAE5E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAA;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,gBAAgB,CAAA;IAEzC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACtB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,8BAA8B;KACvD,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/models/Message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,SAAS,EAAE,IAAI,CAAA;CAChB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/models/Message.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAChB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { KernelPlugin, PluginContext } from '../types';
|
|
2
|
+
export declare const systemPromptPlugin: KernelPlugin;
|
|
3
|
+
export declare const tokenCountPlugin: KernelPlugin;
|
|
4
|
+
export declare const profanityFilterPlugin: KernelPlugin;
|
|
5
|
+
export declare const responseLogPlugin: KernelPlugin;
|
|
6
|
+
export declare const rateLimitPlugin: KernelPlugin;
|
|
7
|
+
export declare const defaultPlugins: KernelPlugin[];
|
|
8
|
+
export declare const postPlugins: KernelPlugin[];
|
|
9
|
+
export declare function runPipeline(plugins: KernelPlugin[], ctx: PluginContext, phase: 'pre' | 'post'): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAItD,eAAO,MAAM,kBAAkB,EAAE,YAYhC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,YAW9B,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,YAgB/B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,YAK7B,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,YAAY,EAKxC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,YAAY,EAAwB,CAAA;AAE9D,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EAAE,EACvB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,KAAK,GAAG,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.postPlugins = exports.defaultPlugins = exports.rateLimitPlugin = exports.responseLogPlugin = exports.profanityFilterPlugin = exports.tokenCountPlugin = exports.systemPromptPlugin = void 0;
|
|
4
|
+
exports.runPipeline = runPipeline;
|
|
5
|
+
const logger_1 = require("../lib/logger");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
exports.systemPromptPlugin = {
|
|
8
|
+
name: 'system-prompt',
|
|
9
|
+
pre: async (ctx, next) => {
|
|
10
|
+
const hasSystem = ctx.request.messages.some((m) => m.role === 'system');
|
|
11
|
+
if (!hasSystem) {
|
|
12
|
+
ctx.request.messages = [
|
|
13
|
+
{ role: 'system', content: config_1.config.systemPrompt.text },
|
|
14
|
+
...ctx.request.messages,
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
await next();
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
exports.tokenCountPlugin = {
|
|
21
|
+
name: 'token-count',
|
|
22
|
+
pre: async (ctx, next) => {
|
|
23
|
+
const estimated = ctx.request.messages.reduce((sum, m) => sum + Math.ceil(m.content.length / 4) + 4, 0);
|
|
24
|
+
ctx.metadata['estimatedPromptTokens'] = estimated;
|
|
25
|
+
logger_1.logger.debug({ estimatedPromptTokens: estimated, conversationId: ctx.request.conversationId }, 'Token estimate');
|
|
26
|
+
await next();
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
exports.profanityFilterPlugin = {
|
|
30
|
+
name: 'profanity-filter',
|
|
31
|
+
pre: async (_ctx, next) => {
|
|
32
|
+
await next();
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
exports.responseLogPlugin = {
|
|
36
|
+
name: 'response-log',
|
|
37
|
+
post: async (ctx, next) => {
|
|
38
|
+
await next();
|
|
39
|
+
if (ctx.response) {
|
|
40
|
+
logger_1.logger.info({
|
|
41
|
+
conversationId: ctx.request.conversationId,
|
|
42
|
+
model: ctx.response.model,
|
|
43
|
+
usage: ctx.response.usage,
|
|
44
|
+
finishReason: ctx.response.finishReason,
|
|
45
|
+
}, 'Completion logged');
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
exports.rateLimitPlugin = {
|
|
50
|
+
name: 'rate-limit',
|
|
51
|
+
pre: async (_ctx, next) => {
|
|
52
|
+
await next();
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
exports.defaultPlugins = [
|
|
56
|
+
exports.systemPromptPlugin,
|
|
57
|
+
exports.tokenCountPlugin,
|
|
58
|
+
exports.profanityFilterPlugin,
|
|
59
|
+
exports.rateLimitPlugin,
|
|
60
|
+
];
|
|
61
|
+
exports.postPlugins = [exports.responseLogPlugin];
|
|
62
|
+
async function runPipeline(plugins, ctx, phase) {
|
|
63
|
+
const handlers = plugins
|
|
64
|
+
.filter((p) => p[phase])
|
|
65
|
+
.map((p) => p[phase]);
|
|
66
|
+
async function dispatch(index) {
|
|
67
|
+
if (index >= handlers.length)
|
|
68
|
+
return;
|
|
69
|
+
const handler = handlers[index];
|
|
70
|
+
await handler(ctx, () => dispatch(index + 1));
|
|
71
|
+
}
|
|
72
|
+
await dispatch(0);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,WAAW,EAAW,MAAM,UAAU,CAAA;AAQtF,eAAO,MAAM,iBAAiB,EAAE,WA6D/B,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.anthropicProvider = void 0;
|
|
7
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
8
|
+
const config_1 = require("../config");
|
|
9
|
+
const logger_1 = require("../lib/logger");
|
|
10
|
+
function buildClient() {
|
|
11
|
+
return new sdk_1.default({ apiKey: config_1.config.providers.anthropic.apiKey });
|
|
12
|
+
}
|
|
13
|
+
exports.anthropicProvider = {
|
|
14
|
+
async complete(request) {
|
|
15
|
+
const client = buildClient();
|
|
16
|
+
const systemMsg = request.messages.find((m) => m.role === 'system');
|
|
17
|
+
const userMessages = request.messages.filter((m) => m.role !== 'system');
|
|
18
|
+
const response = await client.messages.create({
|
|
19
|
+
model: request.model,
|
|
20
|
+
max_tokens: request.options?.maxTokens ?? 1024,
|
|
21
|
+
system: systemMsg?.content,
|
|
22
|
+
messages: userMessages.map((m) => ({
|
|
23
|
+
role: m.role,
|
|
24
|
+
content: m.content,
|
|
25
|
+
})),
|
|
26
|
+
});
|
|
27
|
+
const block = response.content[0];
|
|
28
|
+
const content = block?.type === 'text' ? block.text : '';
|
|
29
|
+
logger_1.logger.debug({ model: request.model }, 'Anthropic completion');
|
|
30
|
+
return {
|
|
31
|
+
message: { role: 'assistant', content },
|
|
32
|
+
usage: {
|
|
33
|
+
promptTokens: response.usage.input_tokens,
|
|
34
|
+
completionTokens: response.usage.output_tokens,
|
|
35
|
+
totalTokens: response.usage.input_tokens + response.usage.output_tokens,
|
|
36
|
+
},
|
|
37
|
+
finishReason: response.stop_reason === 'end_turn' ? 'stop' : 'length',
|
|
38
|
+
model: response.model,
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
async *stream(request) {
|
|
42
|
+
const client = buildClient();
|
|
43
|
+
const systemMsg = request.messages.find((m) => m.role === 'system');
|
|
44
|
+
const userMessages = request.messages.filter((m) => m.role !== 'system');
|
|
45
|
+
const stream = client.messages.stream({
|
|
46
|
+
model: request.model,
|
|
47
|
+
max_tokens: request.options?.maxTokens ?? 1024,
|
|
48
|
+
system: systemMsg?.content,
|
|
49
|
+
messages: userMessages.map((m) => ({
|
|
50
|
+
role: m.role,
|
|
51
|
+
content: m.content,
|
|
52
|
+
})),
|
|
53
|
+
});
|
|
54
|
+
for await (const event of stream) {
|
|
55
|
+
if (event.type === 'content_block_delta' &&
|
|
56
|
+
event.delta.type === 'text_delta') {
|
|
57
|
+
yield event.delta.text;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
countTokens(messages) {
|
|
62
|
+
return messages.reduce((sum, m) => sum + Math.ceil(m.content.length / 4) + 4, 0);
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LLMProvider, ModelInfo } from '../types';
|
|
2
|
+
export declare const providers: Record<string, LLMProvider>;
|
|
3
|
+
export declare const modelCatalog: ModelInfo[];
|
|
4
|
+
export declare function getProviderForModel(modelId: string): {
|
|
5
|
+
provider: LLMProvider;
|
|
6
|
+
name: string;
|
|
7
|
+
} | undefined;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAKjD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAIjD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,EAenC,CAAA;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAMxG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.modelCatalog = exports.providers = void 0;
|
|
4
|
+
exports.getProviderForModel = getProviderForModel;
|
|
5
|
+
const openai_1 = require("./openai");
|
|
6
|
+
const anthropic_1 = require("./anthropic");
|
|
7
|
+
const ollama_1 = require("./ollama");
|
|
8
|
+
exports.providers = {
|
|
9
|
+
openai: openai_1.openaiProvider,
|
|
10
|
+
anthropic: anthropic_1.anthropicProvider,
|
|
11
|
+
ollama: ollama_1.ollamaProvider,
|
|
12
|
+
};
|
|
13
|
+
exports.modelCatalog = [
|
|
14
|
+
{ id: 'gpt-4o', provider: 'openai', contextWindow: 128000, streaming: true, vision: true },
|
|
15
|
+
{ id: 'gpt-4o-mini', provider: 'openai', contextWindow: 128000, streaming: true, vision: true },
|
|
16
|
+
{ id: 'gpt-4-turbo', provider: 'openai', contextWindow: 128000, streaming: true, vision: true },
|
|
17
|
+
{ id: 'gpt-3.5-turbo', provider: 'openai', contextWindow: 16385, streaming: true, vision: false },
|
|
18
|
+
{ id: 'o1-mini', provider: 'openai', contextWindow: 128000, streaming: false, vision: false },
|
|
19
|
+
{ id: 'o1', provider: 'openai', contextWindow: 200000, streaming: false, vision: false },
|
|
20
|
+
{ id: 'claude-3-5-sonnet-20241022', provider: 'anthropic', contextWindow: 200000, streaming: true, vision: true },
|
|
21
|
+
{ id: 'claude-3-5-haiku-20241022', provider: 'anthropic', contextWindow: 200000, streaming: true, vision: true },
|
|
22
|
+
{ id: 'claude-3-opus-20240229', provider: 'anthropic', contextWindow: 200000, streaming: true, vision: true },
|
|
23
|
+
{ id: 'llama3', provider: 'ollama', contextWindow: 8192, streaming: true, vision: false },
|
|
24
|
+
{ id: 'llama3:70b', provider: 'ollama', contextWindow: 8192, streaming: true, vision: false },
|
|
25
|
+
{ id: 'mistral', provider: 'ollama', contextWindow: 32768, streaming: true, vision: false },
|
|
26
|
+
{ id: 'phi3', provider: 'ollama', contextWindow: 128000, streaming: true, vision: false },
|
|
27
|
+
{ id: 'gemma2', provider: 'ollama', contextWindow: 8192, streaming: true, vision: false },
|
|
28
|
+
];
|
|
29
|
+
function getProviderForModel(modelId) {
|
|
30
|
+
const info = exports.modelCatalog.find((m) => m.id === modelId);
|
|
31
|
+
if (!info)
|
|
32
|
+
return undefined;
|
|
33
|
+
const provider = exports.providers[info.provider];
|
|
34
|
+
if (!provider)
|
|
35
|
+
return undefined;
|
|
36
|
+
return { provider, name: info.provider };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,WAAW,EAAW,MAAM,UAAU,CAAA;AAItF,eAAO,MAAM,cAAc,EAAE,WAgF5B,CAAA"}
|