@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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ollamaProvider = void 0;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
const logger_1 = require("../lib/logger");
|
|
6
|
+
exports.ollamaProvider = {
|
|
7
|
+
async complete(request) {
|
|
8
|
+
const url = `${config_1.config.providers.ollama.baseUrl}/api/chat`;
|
|
9
|
+
const res = await fetch(url, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: { 'Content-Type': 'application/json' },
|
|
12
|
+
body: JSON.stringify({
|
|
13
|
+
model: request.model,
|
|
14
|
+
messages: request.messages,
|
|
15
|
+
stream: false,
|
|
16
|
+
options: {
|
|
17
|
+
temperature: request.options?.temperature ?? 0.7,
|
|
18
|
+
num_predict: request.options?.maxTokens ?? 1024,
|
|
19
|
+
},
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
if (!res.ok) {
|
|
23
|
+
throw new Error(`Ollama error: ${res.status} ${res.statusText}`);
|
|
24
|
+
}
|
|
25
|
+
const data = (await res.json());
|
|
26
|
+
logger_1.logger.debug({ model: request.model }, 'Ollama completion');
|
|
27
|
+
return {
|
|
28
|
+
message: { role: 'assistant', content: data.message.content },
|
|
29
|
+
usage: {
|
|
30
|
+
promptTokens: data.prompt_eval_count ?? 0,
|
|
31
|
+
completionTokens: data.eval_count ?? 0,
|
|
32
|
+
totalTokens: (data.prompt_eval_count ?? 0) + (data.eval_count ?? 0),
|
|
33
|
+
},
|
|
34
|
+
finishReason: data.done_reason === 'stop' ? 'stop' : 'length',
|
|
35
|
+
model: request.model,
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
async *stream(request) {
|
|
39
|
+
const url = `${config_1.config.providers.ollama.baseUrl}/api/chat`;
|
|
40
|
+
const res = await fetch(url, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: { 'Content-Type': 'application/json' },
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
model: request.model,
|
|
45
|
+
messages: request.messages,
|
|
46
|
+
stream: true,
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
if (!res.ok || !res.body) {
|
|
50
|
+
throw new Error(`Ollama stream error: ${res.status}`);
|
|
51
|
+
}
|
|
52
|
+
const reader = res.body.getReader();
|
|
53
|
+
const decoder = new TextDecoder();
|
|
54
|
+
while (true) {
|
|
55
|
+
const { done, value } = await reader.read();
|
|
56
|
+
if (done)
|
|
57
|
+
break;
|
|
58
|
+
const text = decoder.decode(value);
|
|
59
|
+
for (const line of text.split('\n')) {
|
|
60
|
+
if (!line.trim())
|
|
61
|
+
continue;
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(line);
|
|
64
|
+
if (parsed.message?.content)
|
|
65
|
+
yield parsed.message.content;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// skip malformed lines
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
countTokens(messages) {
|
|
74
|
+
return messages.reduce((sum, m) => sum + Math.ceil(m.content.length / 4) + 4, 0);
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,WAAW,EAAW,MAAM,UAAU,CAAA;AAWtF,eAAO,MAAM,cAAc,EAAE,WAkD5B,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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.openaiProvider = void 0;
|
|
7
|
+
const openai_1 = __importDefault(require("openai"));
|
|
8
|
+
const config_1 = require("../config");
|
|
9
|
+
const logger_1 = require("../lib/logger");
|
|
10
|
+
function buildClient() {
|
|
11
|
+
return new openai_1.default({
|
|
12
|
+
apiKey: config_1.config.providers.openai.apiKey,
|
|
13
|
+
baseURL: config_1.config.providers.openai.baseUrl,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
exports.openaiProvider = {
|
|
17
|
+
async complete(request) {
|
|
18
|
+
const client = buildClient();
|
|
19
|
+
const response = await client.chat.completions.create({
|
|
20
|
+
model: request.model,
|
|
21
|
+
messages: request.messages,
|
|
22
|
+
temperature: request.options?.temperature ?? 0.7,
|
|
23
|
+
max_tokens: request.options?.maxTokens ?? 1024,
|
|
24
|
+
stream: false,
|
|
25
|
+
});
|
|
26
|
+
const choice = response.choices[0];
|
|
27
|
+
if (!choice)
|
|
28
|
+
throw new Error('OpenAI returned no choices');
|
|
29
|
+
logger_1.logger.debug({ model: request.model, usage: response.usage }, 'OpenAI completion');
|
|
30
|
+
return {
|
|
31
|
+
message: {
|
|
32
|
+
role: 'assistant',
|
|
33
|
+
content: choice.message.content ?? '',
|
|
34
|
+
},
|
|
35
|
+
usage: {
|
|
36
|
+
promptTokens: response.usage?.prompt_tokens ?? 0,
|
|
37
|
+
completionTokens: response.usage?.completion_tokens ?? 0,
|
|
38
|
+
totalTokens: response.usage?.total_tokens ?? 0,
|
|
39
|
+
},
|
|
40
|
+
finishReason: choice.finish_reason ?? 'stop',
|
|
41
|
+
model: response.model,
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
async *stream(request) {
|
|
45
|
+
const client = buildClient();
|
|
46
|
+
const stream = await client.chat.completions.create({
|
|
47
|
+
model: request.model,
|
|
48
|
+
messages: request.messages,
|
|
49
|
+
temperature: request.options?.temperature ?? 0.7,
|
|
50
|
+
max_tokens: request.options?.maxTokens ?? 1024,
|
|
51
|
+
stream: true,
|
|
52
|
+
});
|
|
53
|
+
for await (const chunk of stream) {
|
|
54
|
+
const delta = chunk.choices[0]?.delta?.content;
|
|
55
|
+
if (delta)
|
|
56
|
+
yield delta;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
countTokens(messages) {
|
|
60
|
+
return messages.reduce((sum, m) => sum + Math.ceil(m.content.length / 4) + 4, 0);
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAE3B,sCAAkC;AAClC,0CAAsC;AAEtC,SAAS,WAAW;IAClB,OAAO,IAAI,gBAAM,CAAC;QAChB,MAAM,EAAE,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;QACtC,OAAO,EAAE,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;KACzC,CAAC,CAAA;AACJ,CAAC;AAEY,QAAA,cAAc,GAAgB;IACzC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACvC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;QAC5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAA+C;YACjE,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG;YAChD,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;YAC9C,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAE1D,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAElF,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE;aACtC;YACD,KAAK,EAAE;gBACL,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;gBAChD,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC;gBACxD,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;aAC/C;YACD,YAAY,EAAG,MAAM,CAAC,aAAoD,IAAI,MAAM;YACpF,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAA0B;QACtC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAA+C;YACjE,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG;YAChD,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;YAC9C,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAA;YAC9C,IAAI,KAAK;gBAAE,MAAM,KAAK,CAAA;QACxB,CAAC;IACH,CAAC;IAED,WAAW,CAAC,QAAmB;QAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LLMProvider, KernelRequest } from '../types';
|
|
2
|
+
export declare class Router {
|
|
3
|
+
private rules;
|
|
4
|
+
constructor();
|
|
5
|
+
resolve(request: KernelRequest): {
|
|
6
|
+
provider: LLMProvider;
|
|
7
|
+
model: string;
|
|
8
|
+
providerName: string;
|
|
9
|
+
};
|
|
10
|
+
getAvailableModels(): import("../types").ModelInfo[];
|
|
11
|
+
}
|
|
12
|
+
export declare const router: Router;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,aAAa,EAAE,MAAM,UAAU,CAAA;AAmBlE,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAe;;IAM5B,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,QAAQ,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IA6C/F,kBAAkB;CAGnB;AAED,eAAO,MAAM,MAAM,QAAe,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.router = exports.Router = void 0;
|
|
4
|
+
const providers_1 = require("../providers");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const logger_1 = require("../lib/logger");
|
|
7
|
+
const defaultRules = [
|
|
8
|
+
{ default: true, use: 'openai', model: config_1.config.providers.defaultModel },
|
|
9
|
+
];
|
|
10
|
+
function loadRules() {
|
|
11
|
+
try {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
13
|
+
const routing = require('../../config/routing.json');
|
|
14
|
+
return routing.rules;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return defaultRules;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
class Router {
|
|
21
|
+
rules;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.rules = loadRules();
|
|
24
|
+
}
|
|
25
|
+
resolve(request) {
|
|
26
|
+
const tag = request.options?.tag;
|
|
27
|
+
const tier = request.options?.tier;
|
|
28
|
+
const requestedModel = request.model;
|
|
29
|
+
if (requestedModel) {
|
|
30
|
+
const found = (0, providers_1.getProviderForModel)(requestedModel);
|
|
31
|
+
if (found) {
|
|
32
|
+
return { provider: found.provider, model: requestedModel, providerName: found.name };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
for (const rule of this.rules) {
|
|
36
|
+
if (rule.default || rule.fallback)
|
|
37
|
+
continue;
|
|
38
|
+
if (rule.if) {
|
|
39
|
+
const matchModel = rule.if.model ? rule.if.model === requestedModel : true;
|
|
40
|
+
const matchTag = rule.if.tag ? rule.if.tag === tag : true;
|
|
41
|
+
const matchTier = rule.if.tier ? rule.if.tier === tier : true;
|
|
42
|
+
if (matchModel && matchTag && matchTier) {
|
|
43
|
+
const provider = providers_1.providers[rule.use];
|
|
44
|
+
const model = rule.model ?? config_1.config.providers.defaultModel;
|
|
45
|
+
if (provider) {
|
|
46
|
+
logger_1.logger.debug({ rule, model }, 'Routing rule matched');
|
|
47
|
+
return { provider, model, providerName: rule.use };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const defaultRule = this.rules.find((r) => r.default);
|
|
53
|
+
if (defaultRule) {
|
|
54
|
+
const provider = providers_1.providers[defaultRule.use];
|
|
55
|
+
const model = defaultRule.model ?? config_1.config.providers.defaultModel;
|
|
56
|
+
if (provider) {
|
|
57
|
+
return { provider, model, providerName: defaultRule.use };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const fallbackProvider = providers_1.providers['openai'] ?? Object.values(providers_1.providers)[0];
|
|
61
|
+
const fallbackModel = config_1.config.providers.defaultModel;
|
|
62
|
+
return { provider: fallbackProvider, model: fallbackModel, providerName: 'openai' };
|
|
63
|
+
}
|
|
64
|
+
getAvailableModels() {
|
|
65
|
+
return providers_1.modelCatalog.filter((m) => providers_1.providers[m.provider]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.Router = Router;
|
|
69
|
+
exports.router = new Router();
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.routes.d.ts","sourceRoot":"","sources":["../../src/routes/ai.routes.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,QAAQ,4CAAW,CAAA;AAIzB,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.aiRouter = void 0;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const ai_controller_1 = require("../controllers/ai.controller");
|
|
6
|
+
const aiRouter = (0, express_1.Router)();
|
|
7
|
+
exports.aiRouter = aiRouter;
|
|
8
|
+
aiRouter.post('/complete', ai_controller_1.handleComplete);
|
|
9
|
+
//# sourceMappingURL=ai.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.routes.js","sourceRoot":"","sources":["../../src/routes/ai.routes.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAChC,gEAA6D;AAE7D,MAAM,QAAQ,GAAG,IAAA,gBAAM,GAAE,CAAA;AAIhB,4BAAQ;AAFjB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAc,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.apiRouter = void 0;
|
|
4
|
+
var routes_1 = require("../api/routes");
|
|
5
|
+
Object.defineProperty(exports, "apiRouter", { enumerable: true, get: function () { return routes_1.apiRouter; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;AAAA,wCAAyC;AAAhC,mGAAA,SAAS,OAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { KernelRequest, KernelResponse } from '../types';
|
|
2
|
+
export declare function complete(conversationId: string, userMessage: string, model?: string, options?: KernelRequest['options']): Promise<KernelResponse>;
|
|
3
|
+
export declare function streamCompletion(conversationId: string, userMessage: string, onChunk: (chunk: string) => void, model?: string, options?: KernelRequest['options']): Promise<KernelResponse>;
|
|
4
|
+
//# sourceMappingURL=ai.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.service.d.ts","sourceRoot":"","sources":["../../src/services/ai.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAIxD,wBAAsB,QAAQ,CAC5B,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAChC,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAQzB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.complete = complete;
|
|
4
|
+
exports.streamCompletion = streamCompletion;
|
|
5
|
+
const kernel_1 = require("../kernel");
|
|
6
|
+
const helpers_1 = require("../utils/helpers");
|
|
7
|
+
const logger_1 = require("../lib/logger");
|
|
8
|
+
async function complete(conversationId, userMessage, model, options) {
|
|
9
|
+
const request = {
|
|
10
|
+
id: (0, helpers_1.generateId)('req'),
|
|
11
|
+
conversationId,
|
|
12
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
13
|
+
model,
|
|
14
|
+
options,
|
|
15
|
+
};
|
|
16
|
+
logger_1.logger.debug({ conversationId, model }, 'ai.service: complete');
|
|
17
|
+
return kernel_1.kernel.process(request);
|
|
18
|
+
}
|
|
19
|
+
async function streamCompletion(conversationId, userMessage, onChunk, model, options) {
|
|
20
|
+
kernel_1.kernel.onStream(conversationId, onChunk);
|
|
21
|
+
try {
|
|
22
|
+
return await complete(conversationId, userMessage, model, options);
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
kernel_1.kernel.offStream(conversationId);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ai.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.service.js","sourceRoot":"","sources":["../../src/services/ai.service.ts"],"names":[],"mappings":";;AAKA,4BAgBC;AAED,4CAcC;AArCD,sCAAkC;AAElC,8CAA6C;AAC7C,0CAAsC;AAE/B,KAAK,UAAU,QAAQ,CAC5B,cAAsB,EACtB,WAAmB,EACnB,KAAc,EACd,OAAkC;IAElC,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,IAAA,oBAAU,EAAC,KAAK,CAAC;QACrB,cAAc;QACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAClD,KAAK;QACL,OAAO;KACR,CAAA;IAED,eAAM,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAA;IAC/D,OAAO,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,cAAsB,EACtB,WAAmB,EACnB,OAAgC,EAChC,KAAc,EACd,OAAkC;IAElC,eAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAExC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACpE,CAAC;YAAS,CAAC;QACT,eAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.service.d.ts","sourceRoot":"","sources":["../../src/services/db.service.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAe1D;AAED,wBAAsB,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAItF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getPool = getPool;
|
|
37
|
+
exports.query = query;
|
|
38
|
+
const config_1 = require("../config");
|
|
39
|
+
const logger_1 = require("../lib/logger");
|
|
40
|
+
let pool = null;
|
|
41
|
+
async function getPool() {
|
|
42
|
+
if (!config_1.config.db.enabled) {
|
|
43
|
+
throw new Error('Database persistence is not enabled. Set ENABLE_DB_PERSISTENCE=true.');
|
|
44
|
+
}
|
|
45
|
+
if (!config_1.config.db.url) {
|
|
46
|
+
throw new Error('DATABASE_URL is required when ENABLE_DB_PERSISTENCE=true.');
|
|
47
|
+
}
|
|
48
|
+
if (!pool) {
|
|
49
|
+
const { Pool } = await Promise.resolve().then(() => __importStar(require('pg')));
|
|
50
|
+
pool = new Pool({ connectionString: config_1.config.db.url });
|
|
51
|
+
logger_1.logger.info('Database pool initialized');
|
|
52
|
+
}
|
|
53
|
+
return pool;
|
|
54
|
+
}
|
|
55
|
+
async function query(sql, params) {
|
|
56
|
+
const db = await getPool();
|
|
57
|
+
const result = await db.query(sql, params);
|
|
58
|
+
return result.rows;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=db.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.service.js","sourceRoot":"","sources":["../../src/services/db.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0BAeC;AAED,sBAIC;AA1BD,sCAAkC;AAClC,0CAAsC;AAEtC,IAAI,IAAI,GAA6B,IAAI,CAAA;AAElC,KAAK,UAAU,OAAO;IAC3B,IAAI,CAAC,eAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;IACzF,CAAC;IACD,IAAI,CAAC,eAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAA;QACnC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,gBAAgB,EAAE,eAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;QACpD,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAEM,KAAK,UAAU,KAAK,CAAc,GAAW,EAAE,MAAkB;IACtE,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,IAAW,CAAA;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.service.d.ts","sourceRoot":"","sources":["../../src/services/kernel.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGzD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPlugin = registerPlugin;
|
|
4
|
+
exports.shutdownKernel = shutdownKernel;
|
|
5
|
+
const kernel_1 = require("../kernel");
|
|
6
|
+
const logger_1 = require("../lib/logger");
|
|
7
|
+
function registerPlugin(plugin) {
|
|
8
|
+
kernel_1.kernel.use(plugin);
|
|
9
|
+
logger_1.logger.info({ plugin: plugin.name }, 'Plugin registered');
|
|
10
|
+
}
|
|
11
|
+
async function shutdownKernel() {
|
|
12
|
+
await kernel_1.kernel.shutdown();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=kernel.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.service.js","sourceRoot":"","sources":["../../src/services/kernel.service.ts"],"names":[],"mappings":";;AAIA,wCAGC;AAED,wCAEC;AAXD,sCAAkC;AAElC,0CAAsC;AAEtC,SAAgB,cAAc,CAAC,MAAoB;IACjD,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAClB,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,mBAAmB,CAAC,CAAA;AAC3D,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,MAAM,eAAM,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export type Role = 'user' | 'assistant' | 'system';
|
|
2
|
+
export type Message = {
|
|
3
|
+
role: Role;
|
|
4
|
+
content: string;
|
|
5
|
+
metadata?: Record<string, unknown>;
|
|
6
|
+
};
|
|
7
|
+
export type CompletionRequest = {
|
|
8
|
+
model: string;
|
|
9
|
+
messages: Message[];
|
|
10
|
+
options?: {
|
|
11
|
+
temperature?: number;
|
|
12
|
+
maxTokens?: number;
|
|
13
|
+
tag?: string;
|
|
14
|
+
tier?: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export type CompletionResponse = {
|
|
18
|
+
message: Message;
|
|
19
|
+
usage: {
|
|
20
|
+
promptTokens: number;
|
|
21
|
+
completionTokens: number;
|
|
22
|
+
totalTokens: number;
|
|
23
|
+
};
|
|
24
|
+
finishReason: 'stop' | 'length' | 'aborted' | 'error';
|
|
25
|
+
model: string;
|
|
26
|
+
};
|
|
27
|
+
export type KernelRequest = {
|
|
28
|
+
id: string;
|
|
29
|
+
conversationId: string;
|
|
30
|
+
messages: Message[];
|
|
31
|
+
model?: string;
|
|
32
|
+
options?: CompletionRequest['options'];
|
|
33
|
+
connectionId?: string;
|
|
34
|
+
};
|
|
35
|
+
export type KernelResponse = CompletionResponse & {
|
|
36
|
+
id: string;
|
|
37
|
+
conversationId: string;
|
|
38
|
+
};
|
|
39
|
+
export type KernelPlugin = {
|
|
40
|
+
name: string;
|
|
41
|
+
pre?: (ctx: PluginContext, next: () => Promise<void>) => Promise<void>;
|
|
42
|
+
post?: (ctx: PluginContext, next: () => Promise<void>) => Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
export type PluginContext = {
|
|
45
|
+
request: KernelRequest;
|
|
46
|
+
response?: KernelResponse;
|
|
47
|
+
metadata: Record<string, unknown>;
|
|
48
|
+
};
|
|
49
|
+
export interface LLMProvider {
|
|
50
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
51
|
+
stream(request: CompletionRequest): AsyncIterable<string>;
|
|
52
|
+
countTokens(messages: Message[]): number;
|
|
53
|
+
}
|
|
54
|
+
export type RoutingRule = {
|
|
55
|
+
if?: {
|
|
56
|
+
model?: string;
|
|
57
|
+
tag?: string;
|
|
58
|
+
tier?: string;
|
|
59
|
+
};
|
|
60
|
+
use: string;
|
|
61
|
+
model?: string;
|
|
62
|
+
fallback?: boolean;
|
|
63
|
+
default?: boolean;
|
|
64
|
+
};
|
|
65
|
+
export type ModelInfo = {
|
|
66
|
+
id: string;
|
|
67
|
+
provider: string;
|
|
68
|
+
contextWindow: number;
|
|
69
|
+
streaming: boolean;
|
|
70
|
+
vision: boolean;
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function generateId(prefix: string): string;
|
|
2
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
3
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
4
|
+
export declare function isRetryableStatus(status: number): boolean;
|
|
5
|
+
export declare function exponentialBackoff(attempt: number, baseDelayMs: number): number;
|
|
6
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateId = generateId;
|
|
4
|
+
exports.sleep = sleep;
|
|
5
|
+
exports.clamp = clamp;
|
|
6
|
+
exports.isRetryableStatus = isRetryableStatus;
|
|
7
|
+
exports.exponentialBackoff = exponentialBackoff;
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
function generateId(prefix) {
|
|
10
|
+
return `${prefix}_${(0, uuid_1.v4)().replace(/-/g, '').slice(0, 12)}`;
|
|
11
|
+
}
|
|
12
|
+
function sleep(ms) {
|
|
13
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
14
|
+
}
|
|
15
|
+
function clamp(value, min, max) {
|
|
16
|
+
return Math.max(min, Math.min(max, value));
|
|
17
|
+
}
|
|
18
|
+
function isRetryableStatus(status) {
|
|
19
|
+
return status === 429 || status === 503 || status === 502 || status === 504;
|
|
20
|
+
}
|
|
21
|
+
function exponentialBackoff(attempt, baseDelayMs) {
|
|
22
|
+
return baseDelayMs * Math.pow(2, attempt);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":";;AAEA,gCAEC;AAED,sBAEC;AAED,sBAEC;AAED,8CAEC;AAED,gDAEC;AApBD,+BAAmC;AAEnC,SAAgB,UAAU,CAAC,MAAc;IACvC,OAAO,GAAG,MAAM,IAAI,IAAA,SAAM,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;AAC/D,CAAC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAgB,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAA;AAC7E,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe,EAAE,WAAmB;IACrE,OAAO,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
var logger_1 = require("../lib/logger");
|
|
5
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
6
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AAAA,wCAAsC;AAA7B,gGAAA,MAAM,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LLMProvider, CompletionRequest, CompletionResponse } from '../types';
|
|
2
|
+
export declare function runWithRetry(provider: LLMProvider, request: CompletionRequest): Promise<CompletionResponse>;
|
|
3
|
+
export declare function streamWithAbort(provider: LLMProvider, request: CompletionRequest, abortSignal: {
|
|
4
|
+
aborted: boolean;
|
|
5
|
+
}): AsyncIterable<string>;
|
|
6
|
+
//# sourceMappingURL=aiWorker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiWorker.d.ts","sourceRoot":"","sources":["../../src/workers/aiWorker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7E,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AAED,wBAAuB,eAAe,CACpC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAChC,aAAa,CAAC,MAAM,CAAC,CAMvB"}
|