@oas-tools/oas-telemetry 0.7.1 → 0.8.0-alpha.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/.env.example +21 -2
- package/README.md +1 -2
- package/dist/cjs/config/bootConfig.cjs +19 -14
- package/dist/cjs/config/config.cjs +112 -125
- package/dist/cjs/config/config.types.cjs +1 -4
- package/dist/cjs/docs/openapi.yaml +158 -4
- package/dist/cjs/index.cjs +27 -30
- package/dist/cjs/routesManager.cjs +62 -70
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs +202 -190
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +204 -99
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +152 -116
- package/dist/cjs/telemetry/custom-implementations/instrumentations/logsInstrumentation.cjs +92 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Chunk.cjs +159 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Series.cjs +168 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.cjs +389 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/types.cjs +2 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/utils.cjs +77 -0
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +65 -63
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +63 -62
- package/dist/cjs/telemetry/custom-implementations/utils/circular.cjs +47 -47
- package/dist/cjs/telemetry/custom-implementations/utils/storagePath.cjs +39 -0
- package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +141 -138
- package/dist/cjs/telemetry/initializeTelemetry.cjs +35 -91
- package/dist/cjs/telemetry/telemetryConfigurator.cjs +70 -72
- package/dist/cjs/telemetry/telemetryRegistry.cjs +45 -31
- package/dist/cjs/tlm-ai/agent.cjs +49 -64
- package/dist/cjs/tlm-ai/aiController.cjs +54 -76
- package/dist/cjs/tlm-ai/aiRoutes.cjs +17 -20
- package/dist/cjs/tlm-ai/aiService.cjs +91 -95
- package/dist/cjs/tlm-ai/tools.cjs +177 -174
- package/dist/cjs/tlm-auth/authController.cjs +80 -123
- package/dist/cjs/tlm-auth/authMiddleware.cjs +25 -30
- package/dist/cjs/tlm-auth/authRoutes.cjs +11 -14
- package/dist/cjs/tlm-log/logController.cjs +171 -116
- package/dist/cjs/tlm-log/logRoutes.cjs +20 -20
- package/dist/cjs/tlm-metric/metricsController.cjs +211 -121
- package/dist/cjs/tlm-metric/metricsRoutes.cjs +23 -20
- package/dist/cjs/tlm-plugin/pluginController.cjs +128 -140
- package/dist/cjs/tlm-plugin/pluginProcess.cjs +89 -94
- package/dist/cjs/tlm-plugin/pluginRoutes.cjs +11 -14
- package/dist/cjs/tlm-plugin/pluginService.cjs +73 -74
- package/dist/cjs/tlm-trace/traceController.cjs +169 -117
- package/dist/cjs/tlm-trace/traceRoutes.cjs +20 -20
- package/dist/cjs/tlm-ui/uiRoutes.cjs +63 -32
- package/dist/cjs/tlm-util/utilController.cjs +68 -70
- package/dist/cjs/tlm-util/utilRoutes.cjs +51 -63
- package/dist/cjs/types/index.cjs +2 -5
- package/dist/cjs/utils/logger.cjs +38 -43
- package/dist/cjs/utils/regexUtils.cjs +22 -22
- package/dist/esm/config/bootConfig.js +6 -0
- package/dist/esm/config/config.js +1 -2
- package/dist/esm/docs/openapi.yaml +158 -4
- package/dist/esm/index.js +9 -8
- package/dist/esm/routesManager.js +6 -10
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js +47 -8
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js +164 -48
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +69 -29
- package/dist/esm/telemetry/custom-implementations/instrumentations/logsInstrumentation.js +85 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Chunk.js +155 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Series.js +164 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.js +382 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/types.js +1 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/utils.js +74 -0
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +2 -1
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +1 -1
- package/dist/esm/telemetry/custom-implementations/utils/storagePath.js +33 -0
- package/dist/esm/telemetry/custom-implementations/wrappers.js +5 -2
- package/dist/esm/telemetry/initializeTelemetry.js +27 -69
- package/dist/esm/telemetry/telemetryConfigurator.js +42 -40
- package/dist/esm/telemetry/telemetryRegistry.js +12 -1
- package/dist/esm/tlm-ai/agent.js +5 -3
- package/dist/esm/tlm-ai/aiController.js +3 -3
- package/dist/esm/tlm-ai/aiService.js +6 -2
- package/dist/esm/tlm-ai/tools.js +5 -9
- package/dist/esm/tlm-auth/authController.js +3 -2
- package/dist/esm/tlm-log/logController.js +84 -4
- package/dist/esm/tlm-log/logRoutes.js +5 -2
- package/dist/esm/tlm-metric/metricsController.js +172 -49
- package/dist/esm/tlm-metric/metricsRoutes.js +10 -4
- package/dist/esm/tlm-plugin/pluginController.js +6 -11
- package/dist/esm/tlm-plugin/pluginService.js +2 -4
- package/dist/esm/tlm-trace/traceController.js +102 -16
- package/dist/esm/tlm-trace/traceRoutes.js +5 -2
- package/dist/esm/tlm-ui/uiRoutes.js +5 -5
- package/dist/esm/tlm-util/utilController.js +3 -9
- package/dist/esm/tlm-util/utilRoutes.js +2 -2
- package/dist/types/config/bootConfig.d.ts +4 -0
- package/dist/types/config/config.d.ts +36 -7
- package/dist/types/config/config.types.d.ts +6 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts +4 -1
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts +60 -15
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts +9 -4
- package/dist/types/telemetry/custom-implementations/instrumentations/logsInstrumentation.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/Chunk.d.ts +49 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/Series.d.ts +67 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.d.ts +69 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/types.d.ts +68 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/utils.d.ts +21 -0
- package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +2 -2
- package/dist/types/telemetry/custom-implementations/utils/storagePath.d.ts +12 -0
- package/dist/types/telemetry/custom-implementations/wrappers.d.ts +1 -1
- package/dist/types/telemetry/telemetryConfigurator.d.ts +1 -1
- package/dist/types/telemetry/telemetryRegistry.d.ts +8 -0
- package/dist/types/tlm-ai/agent.d.ts +1 -1
- package/dist/types/tlm-ai/aiService.d.ts +1 -1
- package/dist/types/tlm-log/logController.d.ts +2 -0
- package/dist/types/tlm-metric/metricsController.d.ts +16 -2
- package/dist/types/tlm-trace/traceController.d.ts +3 -1
- package/dist/types/types/index.d.ts +2 -2
- package/dist/ui/assets/{ApiDocsPage-C_VVPPHa.js → ApiDocsPage-BFUrXE5F.js} +2 -2
- package/dist/ui/assets/CollapsibleCard-STA1GVQO.js +1 -0
- package/dist/ui/assets/DevToolsPage-BRSfZqO_.js +1 -0
- package/dist/ui/assets/LandingPage-DzeDy7q7.js +6 -0
- package/dist/ui/assets/LogsPage-BeiFrV2X.js +1 -0
- package/dist/ui/assets/{NotFoundPage-B3quk3P1.js → NotFoundPage-fRNOatbM.js} +1 -1
- package/dist/ui/assets/PluginCreatePage-Ch_RXsdf.js +50 -0
- package/dist/ui/assets/PluginPage-Cl65ZZ_n.js +27 -0
- package/dist/ui/assets/TraceSpansPage-BoK4M5Hh.js +6 -0
- package/dist/ui/assets/VirtualizedListPanel-zcj0v7DL.js +16 -0
- package/dist/ui/assets/alert-BkNVKxJN.js +1133 -0
- package/dist/ui/assets/badge-CN7FeufU.js +1 -0
- package/dist/ui/assets/{chevron-down-CPsvsmqj.js → chevron-down-CG--ounh.js} +1 -1
- package/dist/ui/assets/{chevron-up-Df9jMo1X.js → chevron-up-B6tzMAOm.js} +1 -1
- package/dist/ui/assets/{circle-alert-DOPQPvU8.js → circle-alert-BDF8Tq9y.js} +1 -1
- package/dist/ui/assets/dialog-BrpWNk36.js +15 -0
- package/dist/ui/assets/index-6xOVKwKn.js +305 -0
- package/dist/ui/assets/index-D6f1KjWV.css +1 -0
- package/dist/ui/assets/index-D96rVSkR.js +1 -0
- package/dist/ui/assets/info-99kuqpbx.js +6 -0
- package/dist/ui/assets/{input-Dzvg_ZEZ.js → input-B-01QDg_.js} +1 -1
- package/dist/ui/assets/label-CQLeZjM1.js +1 -0
- package/dist/ui/assets/{loader-circle-CrvlRy5o.js → loader-circle-BoDGk-BO.js} +1 -1
- package/dist/ui/assets/{loginPage-qa4V-B70.js → loginPage-8F4EEd1B.js} +1 -1
- package/dist/ui/assets/metrics-page-D1GxaB_c.css +1 -0
- package/dist/ui/assets/metrics-page-DPtteXqY.js +31 -0
- package/dist/ui/assets/popover-DS_8DYYt.js +11 -0
- package/dist/ui/assets/select-DYjegiXi.js +6 -0
- package/dist/ui/assets/separator-DGsRxIrl.js +6 -0
- package/dist/ui/assets/severityOptions-DEOvJqC9.js +11 -0
- package/dist/ui/assets/square-pen-DPhgYz6O.js +6 -0
- package/dist/ui/assets/switch-Di9NJH2A.js +1 -0
- package/dist/ui/assets/trace-DJq1miYa.js +1 -0
- package/dist/ui/assets/upload-BiLTpCnX.js +11 -0
- package/dist/ui/assets/{utilService-DNyqzwj0.js → utilService-CNZOmadC.js} +1 -1
- package/dist/ui/assets/wand-sparkles-CPoBNFFg.js +6 -0
- package/dist/ui/index.html +2 -2
- package/package.json +44 -48
- package/dist/ui/assets/CollapsibleCard-B3KR_8mL.js +0 -1
- package/dist/ui/assets/DevToolsPage-OyZcDcmw.js +0 -1
- package/dist/ui/assets/LandingPage-CppFBA6K.js +0 -6
- package/dist/ui/assets/LogsPage-9Fq8GArS.js +0 -26
- package/dist/ui/assets/PluginCreatePage-X_aCH4t4.js +0 -50
- package/dist/ui/assets/PluginPage-DMDSihrZ.js +0 -27
- package/dist/ui/assets/alert-jQ9HCPIf.js +0 -1133
- package/dist/ui/assets/badge-CNq0-mH5.js +0 -1
- package/dist/ui/assets/card-DFAwwhN3.js +0 -1
- package/dist/ui/assets/index-BkD6DijD.js +0 -15
- package/dist/ui/assets/index-CERGVYZK.js +0 -292
- package/dist/ui/assets/index-CSIPf9qw.css +0 -1
- package/dist/ui/assets/label-DuVnkZ4q.js +0 -1
- package/dist/ui/assets/select-DhS8YUtJ.js +0 -1
- package/dist/ui/assets/separator-isK4chBP.js +0 -6
- package/dist/ui/assets/severityOptions-O38dSOfk.js +0 -11
- package/dist/ui/assets/switch-Z3mImG9n.js +0 -1
- package/dist/ui/assets/tabs-_77MUUQe.js +0 -16
- package/dist/ui/assets/upload-C1LT4Gkb.js +0 -16
|
@@ -1,92 +1,70 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.createConversation = createConversation;
|
|
7
|
-
exports.deleteConversation = deleteConversation;
|
|
8
|
-
exports.getConversationHistory = getConversationHistory;
|
|
9
4
|
exports.listConversations = listConversations;
|
|
5
|
+
exports.getConversationHistory = getConversationHistory;
|
|
6
|
+
exports.deleteConversation = deleteConversation;
|
|
10
7
|
exports.sendMessage = sendMessage;
|
|
11
|
-
|
|
8
|
+
const aiService_js_1 = require("./aiService.cjs");
|
|
12
9
|
async function createConversation(req, res) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
}
|
|
10
|
+
try {
|
|
11
|
+
const conversation = (0, aiService_js_1.getAiService)().createConversation();
|
|
12
|
+
res.status(201).json(conversation);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
res.status(500).json({ error: err.message });
|
|
16
|
+
}
|
|
21
17
|
}
|
|
22
18
|
async function listConversations(req, res) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
}
|
|
19
|
+
try {
|
|
20
|
+
// Only return id and name for each conversation
|
|
21
|
+
const conversations = (0, aiService_js_1.getAiService)().listConversationsMinimal();
|
|
22
|
+
res.json(conversations);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
res.status(500).json({ error: err.message });
|
|
26
|
+
}
|
|
32
27
|
}
|
|
33
28
|
async function getConversationHistory(req, res) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
29
|
+
try {
|
|
30
|
+
const conversationId = req.params.conversationId;
|
|
31
|
+
const conversation = (0, aiService_js_1.getAiService)().getConversation(conversationId);
|
|
32
|
+
if (!conversation) {
|
|
33
|
+
res.status(404).json({ error: 'Not found' });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
res.json(conversation);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
res.status(500).json({ error: err.message });
|
|
44
40
|
}
|
|
45
|
-
res.json(conversation);
|
|
46
|
-
} catch (err) {
|
|
47
|
-
res.status(500).json({
|
|
48
|
-
error: err.message
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
41
|
}
|
|
52
42
|
async function deleteConversation(req, res) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
43
|
+
try {
|
|
44
|
+
const conversationId = req.params.conversationId;
|
|
45
|
+
const deleted = (0, aiService_js_1.getAiService)().deleteConversation(conversationId);
|
|
46
|
+
if (!deleted) {
|
|
47
|
+
res.status(404).json({ error: 'Not found' });
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
res.status(204).send();
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
res.status(500).json({ error: err.message });
|
|
63
54
|
}
|
|
64
|
-
res.status(204).send();
|
|
65
|
-
} catch (err) {
|
|
66
|
-
res.status(500).json({
|
|
67
|
-
error: err.message
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
55
|
}
|
|
71
56
|
async function sendMessage(req, res) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
57
|
+
try {
|
|
58
|
+
const conversationId = req.params.conversationId;
|
|
59
|
+
const { content } = req.body;
|
|
60
|
+
if (!content) {
|
|
61
|
+
res.status(400).json({ error: 'Missing content' });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const messages = await (0, aiService_js_1.getAiService)().sendMessage(conversationId, content);
|
|
65
|
+
res.json(messages);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
res.status(500).json({ error: err.message });
|
|
84
69
|
}
|
|
85
|
-
|
|
86
|
-
res.json(messages);
|
|
87
|
-
} catch (err) {
|
|
88
|
-
res.status(500).json({
|
|
89
|
-
error: err.message
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
70
|
+
}
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getAIRoutes = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const getAIRoutes = oasTlmConfig => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const aiController_js_1 = require("./aiController.cjs");
|
|
6
|
+
const aiService_js_1 = require("./aiService.cjs");
|
|
7
|
+
const getAIRoutes = (oasTlmConfig) => {
|
|
8
|
+
const router = (0, express_1.Router)();
|
|
9
|
+
(0, aiService_js_1.configureAiService)(oasTlmConfig); //oasTlmConfig.ai.openAIKey
|
|
10
|
+
router.get('/chat/health', (req, res) => {
|
|
11
|
+
res.status(200).send('AI service is healthy');
|
|
12
|
+
});
|
|
13
|
+
router.get('/chat', aiController_js_1.listConversations);
|
|
14
|
+
router.post('/chat', aiController_js_1.createConversation);
|
|
15
|
+
router.get('/chat/:conversationId', aiController_js_1.getConversationHistory);
|
|
16
|
+
router.post('/chat/:conversationId/message', aiController_js_1.sendMessage);
|
|
17
|
+
router.delete('/chat/:conversationId', aiController_js_1.deleteConversation);
|
|
18
|
+
return router;
|
|
22
19
|
};
|
|
23
|
-
exports.getAIRoutes = getAIRoutes;
|
|
20
|
+
exports.getAIRoutes = getAIRoutes;
|
|
@@ -1,109 +1,105 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
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
6
|
exports.configureAiService = configureAiService;
|
|
7
7
|
exports.getAiService = getAiService;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
const openai_1 = __importDefault(require("openai"));
|
|
9
|
+
const agent_js_1 = require("./agent.cjs");
|
|
11
10
|
class AIService {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
timestamp: new Date().toISOString(),
|
|
45
|
-
content: "This is a telemetry chat. Focus your replies strictly on the topics and instructions defined by the system prompts and the available tools. Do not answer outside of these boundaries. Reply in the same language as the question."
|
|
46
|
-
});
|
|
47
|
-
if (this.extraPrompts.length > 0) {
|
|
48
|
-
this.extraPrompts.forEach(prompt => {
|
|
11
|
+
config;
|
|
12
|
+
conversations = new Map();
|
|
13
|
+
openai;
|
|
14
|
+
model;
|
|
15
|
+
extraPrompts;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.openai = new openai_1.default({
|
|
19
|
+
apiKey: this.config.apiKey,
|
|
20
|
+
});
|
|
21
|
+
this.model = config.model;
|
|
22
|
+
this.extraPrompts = config.extraPrompts || [];
|
|
23
|
+
}
|
|
24
|
+
createConversation() {
|
|
25
|
+
const id = Math.random().toString(36).substring(2, 15);
|
|
26
|
+
const conversation = { id, messages: [] };
|
|
27
|
+
this.conversations.set(id, conversation);
|
|
28
|
+
return conversation;
|
|
29
|
+
}
|
|
30
|
+
listConversations() {
|
|
31
|
+
return Array.from(this.conversations.values());
|
|
32
|
+
}
|
|
33
|
+
getConversation(id) {
|
|
34
|
+
return this.conversations.get(id);
|
|
35
|
+
}
|
|
36
|
+
deleteConversation(id) {
|
|
37
|
+
return this.conversations.delete(id);
|
|
38
|
+
}
|
|
39
|
+
async sendMessage(conversationId, content, model) {
|
|
40
|
+
const conversation = this.conversations.get(conversationId);
|
|
41
|
+
if (!conversation)
|
|
42
|
+
throw new Error('Conversation not found');
|
|
49
43
|
conversation.messages.push({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
role: 'system',
|
|
45
|
+
timestamp: new Date().toISOString(),
|
|
46
|
+
content: "This is a telemetry chat. Focus your replies strictly on the topics and instructions defined by the system prompts and the available tools. Do not answer outside of these boundaries. Reply in the same language as the question."
|
|
53
47
|
});
|
|
54
|
-
|
|
48
|
+
if (this.extraPrompts.length > 0) {
|
|
49
|
+
this.extraPrompts.forEach(prompt => {
|
|
50
|
+
conversation.messages.push({ role: 'system', content: prompt, timestamp: new Date().toISOString() });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
conversation.messages.push({ role: 'user', content, timestamp: new Date().toISOString() });
|
|
54
|
+
// Set conversation name if not set
|
|
55
|
+
if (!('name' in conversation) || !conversation.name) {
|
|
56
|
+
conversation.name = content.slice(0, 30);
|
|
57
|
+
}
|
|
58
|
+
// Use the agent function with tools
|
|
59
|
+
// Internaly pushes new messages to conversation.messages
|
|
60
|
+
const currentMessagesCount = conversation.messages.length;
|
|
61
|
+
await (0, agent_js_1.agent)(this.openai, conversation.messages, model || this.model);
|
|
62
|
+
// Return the last assistant message (the one just added by agent)
|
|
63
|
+
const generatedMessages = conversation.messages.slice(currentMessagesCount);
|
|
64
|
+
return generatedMessages;
|
|
55
65
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// Set conversation name if not set
|
|
62
|
-
if (!('name' in conversation) || !conversation.name) {
|
|
63
|
-
conversation.name = content.slice(0, 30);
|
|
66
|
+
listConversationsMinimal() {
|
|
67
|
+
return Array.from(this.conversations.values()).map(c => ({
|
|
68
|
+
id: c.id,
|
|
69
|
+
name: c.name,
|
|
70
|
+
}));
|
|
64
71
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
async listModels() {
|
|
80
|
-
const {
|
|
81
|
-
data
|
|
82
|
-
} = await this.openai.models.list();
|
|
83
|
-
return data.map(m => m.id).sort();
|
|
84
|
-
}
|
|
85
|
-
async isValidModel(modelId) {
|
|
86
|
-
try {
|
|
87
|
-
await this.openai.models.retrieve(modelId);
|
|
88
|
-
return true;
|
|
89
|
-
} catch {
|
|
90
|
-
return false;
|
|
72
|
+
async listModels() {
|
|
73
|
+
const { data } = await this.openai.models.list();
|
|
74
|
+
return data
|
|
75
|
+
.map(m => m.id)
|
|
76
|
+
.sort();
|
|
77
|
+
}
|
|
78
|
+
async isValidModel(modelId) {
|
|
79
|
+
try {
|
|
80
|
+
await this.openai.models.retrieve(modelId);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
91
86
|
}
|
|
92
|
-
}
|
|
93
87
|
}
|
|
94
88
|
let aiService;
|
|
95
89
|
function configureAiService(config) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
90
|
+
const openAIKey = config.ai?.openAIKey;
|
|
91
|
+
const model = config.ai.openAIModel;
|
|
92
|
+
const extraPrompts = config.ai.extraContextPrompts;
|
|
93
|
+
if (!openAIKey)
|
|
94
|
+
throw new Error('OpenAI API key is required');
|
|
95
|
+
aiService = new AIService({
|
|
96
|
+
apiKey: openAIKey,
|
|
97
|
+
model,
|
|
98
|
+
extraPrompts
|
|
99
|
+
});
|
|
105
100
|
}
|
|
106
101
|
function getAiService() {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
if (!aiService)
|
|
103
|
+
throw new Error('AI Service not configured');
|
|
104
|
+
return aiService;
|
|
105
|
+
}
|