@idevconn/ai-chat-be 0.1.2
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/dist/ai-chat.module.d.ts +6 -0
- package/dist/ai-chat.module.d.ts.map +1 -0
- package/dist/ai-chat.module.js +109 -0
- package/dist/ai-chat.module.js.map +1 -0
- package/dist/audit/audit.service.d.ts +39 -0
- package/dist/audit/audit.service.d.ts.map +1 -0
- package/dist/audit/audit.service.js +139 -0
- package/dist/audit/audit.service.js.map +1 -0
- package/dist/chat/chat.controller.d.ts +20 -0
- package/dist/chat/chat.controller.d.ts.map +1 -0
- package/dist/chat/chat.controller.js +104 -0
- package/dist/chat/chat.controller.js.map +1 -0
- package/dist/chat/chat.service.d.ts +15 -0
- package/dist/chat/chat.service.d.ts.map +1 -0
- package/dist/chat/chat.service.js +95 -0
- package/dist/chat/chat.service.js.map +1 -0
- package/dist/guards/api-key.guard.d.ts +8 -0
- package/dist/guards/api-key.guard.d.ts.map +1 -0
- package/dist/guards/api-key.guard.js +44 -0
- package/dist/guards/api-key.guard.js.map +1 -0
- package/dist/guards/llm-injection-classifier.d.ts +17 -0
- package/dist/guards/llm-injection-classifier.d.ts.map +1 -0
- package/dist/guards/llm-injection-classifier.js +82 -0
- package/dist/guards/llm-injection-classifier.js.map +1 -0
- package/dist/guards/pii.guard.d.ts +14 -0
- package/dist/guards/pii.guard.d.ts.map +1 -0
- package/dist/guards/pii.guard.js +67 -0
- package/dist/guards/pii.guard.js.map +1 -0
- package/dist/guards/prompt-injection.guard.d.ts +9 -0
- package/dist/guards/prompt-injection.guard.d.ts.map +1 -0
- package/dist/guards/prompt-injection.guard.js +157 -0
- package/dist/guards/prompt-injection.guard.js.map +1 -0
- package/dist/guards/rate-limit.guard.d.ts +8 -0
- package/dist/guards/rate-limit.guard.d.ts.map +1 -0
- package/dist/guards/rate-limit.guard.js +59 -0
- package/dist/guards/rate-limit.guard.js.map +1 -0
- package/dist/guards/topic-relevance.guard.d.ts +21 -0
- package/dist/guards/topic-relevance.guard.d.ts.map +1 -0
- package/dist/guards/topic-relevance.guard.js +59 -0
- package/dist/guards/topic-relevance.guard.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/intent/embedding-intent-router.d.ts +23 -0
- package/dist/intent/embedding-intent-router.d.ts.map +1 -0
- package/dist/intent/embedding-intent-router.js +103 -0
- package/dist/intent/embedding-intent-router.js.map +1 -0
- package/dist/intent/intent-router.interface.d.ts +8 -0
- package/dist/intent/intent-router.interface.d.ts.map +1 -0
- package/dist/intent/intent-router.interface.js +5 -0
- package/dist/intent/intent-router.interface.js.map +1 -0
- package/dist/intent/intent.types.d.ts +7 -0
- package/dist/intent/intent.types.d.ts.map +1 -0
- package/dist/intent/intent.types.js +3 -0
- package/dist/intent/intent.types.js.map +1 -0
- package/dist/orchestrator/default.orchestrator.d.ts +36 -0
- package/dist/orchestrator/default.orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/default.orchestrator.js +231 -0
- package/dist/orchestrator/default.orchestrator.js.map +1 -0
- package/dist/orchestrator/input-sanitizer.d.ts +8 -0
- package/dist/orchestrator/input-sanitizer.d.ts.map +1 -0
- package/dist/orchestrator/input-sanitizer.js +36 -0
- package/dist/orchestrator/input-sanitizer.js.map +1 -0
- package/dist/orchestrator/orchestrator.interface.d.ts +6 -0
- package/dist/orchestrator/orchestrator.interface.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.interface.js +5 -0
- package/dist/orchestrator/orchestrator.interface.js.map +1 -0
- package/dist/orchestrator/prompt-builder.d.ts +12 -0
- package/dist/orchestrator/prompt-builder.d.ts.map +1 -0
- package/dist/orchestrator/prompt-builder.js +55 -0
- package/dist/orchestrator/prompt-builder.js.map +1 -0
- package/dist/orchestrator/prompt-normalizer.d.ts +9 -0
- package/dist/orchestrator/prompt-normalizer.d.ts.map +1 -0
- package/dist/orchestrator/prompt-normalizer.js +77 -0
- package/dist/orchestrator/prompt-normalizer.js.map +1 -0
- package/dist/orchestrator/response-sanitizer.d.ts +26 -0
- package/dist/orchestrator/response-sanitizer.d.ts.map +1 -0
- package/dist/orchestrator/response-sanitizer.js +127 -0
- package/dist/orchestrator/response-sanitizer.js.map +1 -0
- package/dist/orchestrator/response-validator.d.ts +10 -0
- package/dist/orchestrator/response-validator.d.ts.map +1 -0
- package/dist/orchestrator/response-validator.js +31 -0
- package/dist/orchestrator/response-validator.js.map +1 -0
- package/dist/providers/gemini.provider.d.ts +13 -0
- package/dist/providers/gemini.provider.d.ts.map +1 -0
- package/dist/providers/gemini.provider.js +132 -0
- package/dist/providers/gemini.provider.js.map +1 -0
- package/dist/providers/grok.provider.d.ts +11 -0
- package/dist/providers/grok.provider.d.ts.map +1 -0
- package/dist/providers/grok.provider.js +69 -0
- package/dist/providers/grok.provider.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +12 -0
- package/dist/providers/openai.provider.d.ts.map +1 -0
- package/dist/providers/openai.provider.js +87 -0
- package/dist/providers/openai.provider.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +17 -0
- package/dist/providers/provider-registry.d.ts.map +1 -0
- package/dist/providers/provider-registry.js +42 -0
- package/dist/providers/provider-registry.js.map +1 -0
- package/dist/providers/provider-settings.d.ts +12 -0
- package/dist/providers/provider-settings.d.ts.map +1 -0
- package/dist/providers/provider-settings.js +3 -0
- package/dist/providers/provider-settings.js.map +1 -0
- package/dist/providers/provider.factory.d.ts +18 -0
- package/dist/providers/provider.factory.d.ts.map +1 -0
- package/dist/providers/provider.factory.js +107 -0
- package/dist/providers/provider.factory.js.map +1 -0
- package/dist/rag/chunker.d.ts +7 -0
- package/dist/rag/chunker.d.ts.map +1 -0
- package/dist/rag/chunker.js +32 -0
- package/dist/rag/chunker.js.map +1 -0
- package/dist/rag/rag.service.d.ts +20 -0
- package/dist/rag/rag.service.d.ts.map +1 -0
- package/dist/rag/rag.service.js +171 -0
- package/dist/rag/rag.service.js.map +1 -0
- package/dist/session/session.service.d.ts +32 -0
- package/dist/session/session.service.d.ts.map +1 -0
- package/dist/session/session.service.js +161 -0
- package/dist/session/session.service.js.map +1 -0
- package/dist/types/chat.types.d.ts +31 -0
- package/dist/types/chat.types.d.ts.map +1 -0
- package/dist/types/chat.types.js +3 -0
- package/dist/types/chat.types.js.map +1 -0
- package/dist/types/config.types.d.ts +139 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +5 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/provider.types.d.ts +15 -0
- package/dist/types/provider.types.d.ts.map +1 -0
- package/dist/types/provider.types.js +3 -0
- package/dist/types/provider.types.js.map +1 -0
- package/dist/utils/cosine-similarity.d.ts +2 -0
- package/dist/utils/cosine-similarity.d.ts.map +1 -0
- package/dist/utils/cosine-similarity.js +21 -0
- package/dist/utils/cosine-similarity.js.map +1 -0
- package/dist/utils/error-sanitizer.d.ts +8 -0
- package/dist/utils/error-sanitizer.d.ts.map +1 -0
- package/dist/utils/error-sanitizer.js +44 -0
- package/dist/utils/error-sanitizer.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +22 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pii-detector.d.ts +8 -0
- package/dist/utils/pii-detector.d.ts.map +1 -0
- package/dist/utils/pii-detector.js +82 -0
- package/dist/utils/pii-detector.js.map +1 -0
- package/dist/utils/retry.d.ts +8 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +33 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session-token.d.ts +8 -0
- package/dist/utils/session-token.d.ts.map +1 -0
- package/dist/utils/session-token.js +46 -0
- package/dist/utils/session-token.js.map +1 -0
- package/dist/utils/sse-parser.d.ts +5 -0
- package/dist/utils/sse-parser.d.ts.map +1 -0
- package/dist/utils/sse-parser.js +45 -0
- package/dist/utils/sse-parser.js.map +1 -0
- package/dist/utils/text.d.ts +4 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +25 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SessionService = exports.InvalidSessionError = exports.SessionLimitError = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const crypto_1 = require("crypto");
|
|
18
|
+
const types_1 = require("../types");
|
|
19
|
+
const session_token_1 = require("../utils/session-token");
|
|
20
|
+
const logger_1 = require("../utils/logger");
|
|
21
|
+
class SessionLimitError extends Error {
|
|
22
|
+
constructor(message = 'Session turn limit reached') {
|
|
23
|
+
super(message);
|
|
24
|
+
this.name = 'SessionLimitError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.SessionLimitError = SessionLimitError;
|
|
28
|
+
class InvalidSessionError extends Error {
|
|
29
|
+
constructor(message = 'Invalid or tampered session token') {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = 'InvalidSessionError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.InvalidSessionError = InvalidSessionError;
|
|
35
|
+
let SessionService = class SessionService {
|
|
36
|
+
config;
|
|
37
|
+
sessions = new Map();
|
|
38
|
+
maxHistory;
|
|
39
|
+
ttlMs;
|
|
40
|
+
maxTurns;
|
|
41
|
+
secret;
|
|
42
|
+
allowLegacy;
|
|
43
|
+
evictionTimer = null;
|
|
44
|
+
constructor(config) {
|
|
45
|
+
this.config = config;
|
|
46
|
+
this.maxHistory = config.session?.maxHistory ?? 50;
|
|
47
|
+
this.ttlMs = config.session?.ttlMs ?? 30 * 60 * 1000;
|
|
48
|
+
this.maxTurns = config.limits?.maxTurnsPerSession ?? 30;
|
|
49
|
+
const explicitSecret = config.sessionSecurity?.secret;
|
|
50
|
+
const fallback = config.auth?.key;
|
|
51
|
+
if (!explicitSecret && !fallback) {
|
|
52
|
+
logger_1.aiChatLogger.warn('SessionService: no sessionSecurity.secret or auth.key configured. Sessions will use a weak ephemeral secret.');
|
|
53
|
+
}
|
|
54
|
+
this.secret = explicitSecret || fallback || (0, crypto_1.randomUUID)();
|
|
55
|
+
this.allowLegacy = config.sessionSecurity?.allowLegacy !== false;
|
|
56
|
+
this.startEviction();
|
|
57
|
+
}
|
|
58
|
+
createSession() {
|
|
59
|
+
const rawId = (0, crypto_1.randomUUID)();
|
|
60
|
+
this.sessions.set(rawId, {
|
|
61
|
+
messages: [],
|
|
62
|
+
lastActive: Date.now(),
|
|
63
|
+
turnCount: 0,
|
|
64
|
+
});
|
|
65
|
+
return (0, session_token_1.signSessionId)(rawId, this.secret);
|
|
66
|
+
}
|
|
67
|
+
resolveToken(token) {
|
|
68
|
+
const result = (0, session_token_1.verifySessionId)(token, this.secret, this.allowLegacy);
|
|
69
|
+
if (!result.valid || !result.rawId)
|
|
70
|
+
return null;
|
|
71
|
+
return { rawId: result.rawId, legacy: result.legacy === true };
|
|
72
|
+
}
|
|
73
|
+
getHistory(token) {
|
|
74
|
+
const resolved = this.resolveToken(token);
|
|
75
|
+
if (!resolved)
|
|
76
|
+
return [];
|
|
77
|
+
const entry = this.sessions.get(resolved.rawId);
|
|
78
|
+
if (!entry)
|
|
79
|
+
return [];
|
|
80
|
+
entry.lastActive = Date.now();
|
|
81
|
+
return [...entry.messages];
|
|
82
|
+
}
|
|
83
|
+
addMessage(token, message) {
|
|
84
|
+
const resolved = this.resolveToken(token);
|
|
85
|
+
if (!resolved) {
|
|
86
|
+
throw new InvalidSessionError();
|
|
87
|
+
}
|
|
88
|
+
let entry = this.sessions.get(resolved.rawId);
|
|
89
|
+
if (!entry) {
|
|
90
|
+
if (!resolved.legacy) {
|
|
91
|
+
throw new InvalidSessionError('Session expired or was deleted. Please start a new conversation.');
|
|
92
|
+
}
|
|
93
|
+
entry = { messages: [], lastActive: Date.now(), turnCount: 0 };
|
|
94
|
+
this.sessions.set(resolved.rawId, entry);
|
|
95
|
+
}
|
|
96
|
+
entry.lastActive = Date.now();
|
|
97
|
+
if (message.role === 'user') {
|
|
98
|
+
entry.turnCount += 1;
|
|
99
|
+
if (entry.turnCount > this.maxTurns) {
|
|
100
|
+
throw new SessionLimitError(`Session turn limit (${this.maxTurns}) reached.`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
entry.messages.push(message);
|
|
104
|
+
if (entry.messages.length > this.maxHistory) {
|
|
105
|
+
const systemMessages = entry.messages.filter((m) => m.role === 'system');
|
|
106
|
+
const nonSystem = entry.messages.filter((m) => m.role !== 'system');
|
|
107
|
+
entry.messages = [
|
|
108
|
+
...systemMessages,
|
|
109
|
+
...nonSystem.slice(-this.maxHistory + systemMessages.length),
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
deleteSession(token) {
|
|
114
|
+
const resolved = this.resolveToken(token);
|
|
115
|
+
if (!resolved)
|
|
116
|
+
return;
|
|
117
|
+
this.sessions.delete(resolved.rawId);
|
|
118
|
+
}
|
|
119
|
+
hasSession(token) {
|
|
120
|
+
const resolved = this.resolveToken(token);
|
|
121
|
+
if (!resolved)
|
|
122
|
+
return false;
|
|
123
|
+
return this.sessions.has(resolved.rawId);
|
|
124
|
+
}
|
|
125
|
+
hashToken(token) {
|
|
126
|
+
const resolved = this.resolveToken(token);
|
|
127
|
+
if (!resolved)
|
|
128
|
+
return 'invalid';
|
|
129
|
+
return hashStringFNV(resolved.rawId);
|
|
130
|
+
}
|
|
131
|
+
startEviction() {
|
|
132
|
+
this.evictionTimer = setInterval(() => {
|
|
133
|
+
const cutoff = Date.now() - this.ttlMs;
|
|
134
|
+
for (const [id, entry] of this.sessions.entries()) {
|
|
135
|
+
if (entry.lastActive < cutoff) {
|
|
136
|
+
this.sessions.delete(id);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}, 60_000);
|
|
140
|
+
}
|
|
141
|
+
onModuleDestroy() {
|
|
142
|
+
if (this.evictionTimer) {
|
|
143
|
+
clearInterval(this.evictionTimer);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
exports.SessionService = SessionService;
|
|
148
|
+
exports.SessionService = SessionService = __decorate([
|
|
149
|
+
(0, common_1.Injectable)(),
|
|
150
|
+
__param(0, (0, common_1.Inject)(types_1.AI_CHAT_CONFIG)),
|
|
151
|
+
__metadata("design:paramtypes", [Object])
|
|
152
|
+
], SessionService);
|
|
153
|
+
function hashStringFNV(s) {
|
|
154
|
+
let h = 0x811c9dc5;
|
|
155
|
+
for (let i = 0; i < s.length; i++) {
|
|
156
|
+
h ^= s.charCodeAt(i);
|
|
157
|
+
h = Math.imul(h, 0x01000193);
|
|
158
|
+
}
|
|
159
|
+
return (h >>> 0).toString(16);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=session.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../src/session/session.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface ChatMessage {
|
|
2
|
+
role: 'system' | 'user' | 'assistant';
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ChatTurnInput {
|
|
6
|
+
sessionId: string;
|
|
7
|
+
message: string;
|
|
8
|
+
history: ChatMessage[];
|
|
9
|
+
ragContext?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ChatStreamEvent {
|
|
12
|
+
type: 'token' | 'tool_call' | 'tool_result' | 'done' | 'error';
|
|
13
|
+
content?: string;
|
|
14
|
+
usage?: TokenUsage;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TokenUsage {
|
|
18
|
+
promptTokens: number;
|
|
19
|
+
completionTokens: number;
|
|
20
|
+
totalTokens: number;
|
|
21
|
+
}
|
|
22
|
+
export interface ChatRequestDto {
|
|
23
|
+
sessionId?: string;
|
|
24
|
+
message: string;
|
|
25
|
+
}
|
|
26
|
+
export interface StreamOptions {
|
|
27
|
+
temperature?: number;
|
|
28
|
+
maxTokens?: number;
|
|
29
|
+
signal?: AbortSignal;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=chat.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.types.d.ts","sourceRoot":"","sources":["../../src/types/chat.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.types.js","sourceRoot":"","sources":["../../src/types/chat.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
export interface AiChatModuleConfig {
|
|
2
|
+
provider?: 'gemini' | 'openai' | 'grok' | 'auto' | (string & {});
|
|
3
|
+
apiKey?: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
embeddingModel?: string;
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
retry?: {
|
|
8
|
+
maxAttempts: number;
|
|
9
|
+
baseDelayMs: number;
|
|
10
|
+
};
|
|
11
|
+
geminiApiKey?: string;
|
|
12
|
+
geminiModel?: string;
|
|
13
|
+
openaiApiKey?: string;
|
|
14
|
+
openaiModel?: string;
|
|
15
|
+
grokApiKey?: string;
|
|
16
|
+
grokModel?: string;
|
|
17
|
+
rag?: RagModuleConfig;
|
|
18
|
+
auth?: AuthConfig;
|
|
19
|
+
guards?: GuardsConfig;
|
|
20
|
+
session?: SessionConfig;
|
|
21
|
+
systemPrompt?: string;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
maxTokens?: number;
|
|
24
|
+
locale?: string;
|
|
25
|
+
timezone?: string;
|
|
26
|
+
intent?: IntentConfig;
|
|
27
|
+
rateLimit?: RateLimitConfig;
|
|
28
|
+
output?: OutputConfig;
|
|
29
|
+
pii?: PiiConfig;
|
|
30
|
+
sessionSecurity?: SessionSecurityConfig;
|
|
31
|
+
limits?: HardLimitsConfig;
|
|
32
|
+
audit?: AuditConfig;
|
|
33
|
+
moderation?: ModerationConfig;
|
|
34
|
+
llmInjectionClassifier?: LlmInjectionClassifierConfig;
|
|
35
|
+
log?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface RagModuleConfig {
|
|
38
|
+
docsPath?: string;
|
|
39
|
+
topK?: number;
|
|
40
|
+
chunkSize?: number;
|
|
41
|
+
embedBatchSize?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface AuthConfig {
|
|
44
|
+
strategy: 'api-key' | 'jwt' | 'custom';
|
|
45
|
+
key?: string;
|
|
46
|
+
jwtSecret?: string;
|
|
47
|
+
validate?: (token: string) => Promise<boolean>;
|
|
48
|
+
}
|
|
49
|
+
export interface GuardsConfig {
|
|
50
|
+
promptInjection?: {
|
|
51
|
+
enabled?: boolean;
|
|
52
|
+
mode?: 'block' | 'warn';
|
|
53
|
+
};
|
|
54
|
+
topicRelevance?: {
|
|
55
|
+
enabled?: boolean;
|
|
56
|
+
threshold?: number;
|
|
57
|
+
fallbackMessage?: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface SessionConfig {
|
|
61
|
+
maxHistory?: number;
|
|
62
|
+
ttlMs?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface IntentConfig {
|
|
65
|
+
enabled?: boolean;
|
|
66
|
+
strategy?: 'embedding' | 'disabled';
|
|
67
|
+
threshold?: number;
|
|
68
|
+
offTopicMessage?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface RateLimitConfig {
|
|
71
|
+
enabled?: boolean;
|
|
72
|
+
perKey?: {
|
|
73
|
+
limit: number;
|
|
74
|
+
windowMs: number;
|
|
75
|
+
};
|
|
76
|
+
perSession?: {
|
|
77
|
+
limit: number;
|
|
78
|
+
windowMs: number;
|
|
79
|
+
};
|
|
80
|
+
perIp?: {
|
|
81
|
+
limit: number;
|
|
82
|
+
windowMs: number;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export interface OutputConfig {
|
|
86
|
+
redactSystemPrompt?: boolean;
|
|
87
|
+
redactPii?: boolean;
|
|
88
|
+
customNeedles?: string[];
|
|
89
|
+
}
|
|
90
|
+
export type PiiType = 'email' | 'phone' | 'creditCard' | 'ssn' | 'ipv4';
|
|
91
|
+
export interface PiiConfig {
|
|
92
|
+
enabled?: boolean;
|
|
93
|
+
mode?: 'warn' | 'block' | 'redact';
|
|
94
|
+
types?: PiiType[];
|
|
95
|
+
}
|
|
96
|
+
export interface SessionSecurityConfig {
|
|
97
|
+
secret?: string;
|
|
98
|
+
allowLegacy?: boolean;
|
|
99
|
+
}
|
|
100
|
+
export interface HardLimitsConfig {
|
|
101
|
+
maxInputChars?: number;
|
|
102
|
+
maxOutputTokens?: number;
|
|
103
|
+
maxTurnsPerSession?: number;
|
|
104
|
+
}
|
|
105
|
+
export interface AuditEvent {
|
|
106
|
+
ts: number;
|
|
107
|
+
sessionHash: string;
|
|
108
|
+
apiKeyHash: string;
|
|
109
|
+
inputHash: string;
|
|
110
|
+
inputLength: number;
|
|
111
|
+
outputLength: number;
|
|
112
|
+
intent: 'docs_question' | 'off_topic';
|
|
113
|
+
injectionFlags: string[];
|
|
114
|
+
piiTypes: string[];
|
|
115
|
+
provider: 'gemini' | 'openai' | 'grok' | 'unknown';
|
|
116
|
+
latencyMs: number;
|
|
117
|
+
outcome: 'success' | 'error' | 'rate_limited' | 'blocked' | 'off_topic' | 'session_limit' | 'moderated';
|
|
118
|
+
error?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface AuditConfig {
|
|
121
|
+
enabled?: boolean;
|
|
122
|
+
sink?: (event: AuditEvent) => Promise<void> | void;
|
|
123
|
+
}
|
|
124
|
+
export interface ModerationResult {
|
|
125
|
+
allowed: boolean;
|
|
126
|
+
reason?: string;
|
|
127
|
+
}
|
|
128
|
+
export interface ModerationConfig {
|
|
129
|
+
inputFn?: (text: string) => Promise<ModerationResult>;
|
|
130
|
+
outputFn?: (text: string) => Promise<ModerationResult>;
|
|
131
|
+
}
|
|
132
|
+
export interface LlmInjectionClassifierConfig {
|
|
133
|
+
enabled?: boolean;
|
|
134
|
+
model?: string;
|
|
135
|
+
provider?: 'gemini' | 'openai' | 'grok';
|
|
136
|
+
threshold?: 'strict' | 'balanced';
|
|
137
|
+
}
|
|
138
|
+
export declare const AI_CHAT_CONFIG: unique symbol;
|
|
139
|
+
//# sourceMappingURL=config.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":";;;AA0Ja,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
__exportStar(require("./config.types"), exports);
|
|
18
|
+
__exportStar(require("./chat.types"), exports);
|
|
19
|
+
__exportStar(require("./provider.types"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,+CAA6B;AAC7B,mDAAiC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChatMessage, ChatStreamEvent, StreamOptions } from './chat.types';
|
|
2
|
+
export type ProviderId = 'gemini' | 'openai' | 'grok';
|
|
3
|
+
export interface ILlmProvider {
|
|
4
|
+
readonly id: ProviderId;
|
|
5
|
+
readonly supportsEmbedding: boolean;
|
|
6
|
+
chatStream(messages: ChatMessage[], options?: StreamOptions): AsyncGenerator<ChatStreamEvent>;
|
|
7
|
+
embed?(texts: string[]): Promise<number[][]>;
|
|
8
|
+
}
|
|
9
|
+
export interface ProviderConfig {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
temperature?: number;
|
|
13
|
+
maxTokens?: number;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=provider.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.types.d.ts","sourceRoot":"","sources":["../../src/types/provider.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAEpC,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;IAE9F,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.types.js","sourceRoot":"","sources":["../../src/types/provider.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosine-similarity.d.ts","sourceRoot":"","sources":["../../src/utils/cosine-similarity.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAmBjE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cosineSimilarity = cosineSimilarity;
|
|
4
|
+
function cosineSimilarity(a, b) {
|
|
5
|
+
if (a.length !== b.length) {
|
|
6
|
+
throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
|
|
7
|
+
}
|
|
8
|
+
let dot = 0;
|
|
9
|
+
let normA = 0;
|
|
10
|
+
let normB = 0;
|
|
11
|
+
for (let i = 0; i < a.length; i++) {
|
|
12
|
+
dot += a[i] * b[i];
|
|
13
|
+
normA += a[i] * a[i];
|
|
14
|
+
normB += b[i] * b[i];
|
|
15
|
+
}
|
|
16
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
17
|
+
if (denominator === 0)
|
|
18
|
+
return 0;
|
|
19
|
+
return dot / denominator;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cosine-similarity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosine-similarity.js","sourceRoot":"","sources":["../../src/utils/cosine-similarity.ts"],"names":[],"mappings":";;AAAA,4CAmBC;AAnBD,SAAgB,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,OAAO,GAAG,GAAG,WAAW,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ClientErrorCode = 'PROVIDER_ERROR' | 'RATE_LIMITED' | 'BAD_REQUEST' | 'TIMEOUT' | 'BLOCKED' | 'OFF_TOPIC' | 'SESSION_LIMIT' | 'MODERATED' | 'INTERNAL_ERROR';
|
|
2
|
+
export interface SanitizedError {
|
|
3
|
+
code: ClientErrorCode;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function sanitizeError(err: unknown): SanitizedError;
|
|
7
|
+
export declare function code(c: ClientErrorCode, override?: string): SanitizedError;
|
|
8
|
+
//# sourceMappingURL=error-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitizer.d.ts","sourceRoot":"","sources":["../../src/utils/error-sanitizer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,SAAS,GACT,SAAS,GACT,WAAW,GACX,eAAe,GACf,WAAW,GACX,gBAAgB,CAAC;AAErB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CA+B1D;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAE1E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeError = sanitizeError;
|
|
4
|
+
exports.code = code;
|
|
5
|
+
const GENERIC_MESSAGES = {
|
|
6
|
+
PROVIDER_ERROR: 'The AI provider returned an error. Please try again.',
|
|
7
|
+
RATE_LIMITED: 'Too many requests. Please slow down and try again.',
|
|
8
|
+
BAD_REQUEST: 'The request was invalid. Please rephrase and try again.',
|
|
9
|
+
TIMEOUT: 'The request took too long. Please try again.',
|
|
10
|
+
BLOCKED: 'The request was blocked by a security filter.',
|
|
11
|
+
OFF_TOPIC: 'I can only help with questions about the loaded documentation.',
|
|
12
|
+
SESSION_LIMIT: 'Session limit reached. Please start a new conversation.',
|
|
13
|
+
MODERATED: 'The response was withheld by the moderation policy.',
|
|
14
|
+
INTERNAL_ERROR: 'An internal error occurred. Please try again later.',
|
|
15
|
+
};
|
|
16
|
+
function sanitizeError(err) {
|
|
17
|
+
if (!err)
|
|
18
|
+
return code('INTERNAL_ERROR');
|
|
19
|
+
const message = (err instanceof Error ? err.message : String(err)).toLowerCase();
|
|
20
|
+
const name = err instanceof Error ? err.name : '';
|
|
21
|
+
if (name === 'AbortError' || /timeout|timed out|deadline/i.test(message)) {
|
|
22
|
+
return code('TIMEOUT');
|
|
23
|
+
}
|
|
24
|
+
if (/\b429\b|rate[-_ ]?limit|too many requests|quota/i.test(message)) {
|
|
25
|
+
return code('RATE_LIMITED');
|
|
26
|
+
}
|
|
27
|
+
if (/\b400\b|invalid|validation|malformed|bad request/i.test(message)) {
|
|
28
|
+
return code('BAD_REQUEST');
|
|
29
|
+
}
|
|
30
|
+
if (name === 'SessionLimitError' || /session.*(limit|quota)/i.test(message)) {
|
|
31
|
+
return code('SESSION_LIMIT');
|
|
32
|
+
}
|
|
33
|
+
if (/(blocked|forbidden)/i.test(message)) {
|
|
34
|
+
return code('BLOCKED');
|
|
35
|
+
}
|
|
36
|
+
if (/\bapi\b|provider|gemini|openai|grok|model|completion/i.test(message)) {
|
|
37
|
+
return code('PROVIDER_ERROR');
|
|
38
|
+
}
|
|
39
|
+
return code('INTERNAL_ERROR');
|
|
40
|
+
}
|
|
41
|
+
function code(c, override) {
|
|
42
|
+
return { code: c, message: override ?? GENERIC_MESSAGES[c] };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=error-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitizer.js","sourceRoot":"","sources":["../../src/utils/error-sanitizer.ts"],"names":[],"mappings":";;AAgCA,sCA+BC;AAED,oBAEC;AAnDD,MAAM,gBAAgB,GAAoC;IACxD,cAAc,EAAE,sDAAsD;IACtE,YAAY,EAAE,oDAAoD;IAClE,WAAW,EAAE,yDAAyD;IACtE,OAAO,EAAE,8CAA8C;IACvD,OAAO,EAAE,+CAA+C;IACxD,SAAS,EAAE,gEAAgE;IAC3E,aAAa,EAAE,yDAAyD;IACxE,SAAS,EAAE,qDAAqD;IAChE,cAAc,EAAE,qDAAqD;CACtE,CAAC;AAMF,SAAgB,aAAa,CAAC,GAAY;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAElD,IAAI,IAAI,KAAK,YAAY,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,kDAAkD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,mDAAmD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,KAAK,mBAAmB,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,uDAAuD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,IAAI,CAAC,CAAkB,EAAE,QAAiB;IACxD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
__exportStar(require("./retry"), exports);
|
|
18
|
+
__exportStar(require("./cosine-similarity"), exports);
|
|
19
|
+
__exportStar(require("./text"), exports);
|
|
20
|
+
__exportStar(require("./sse-parser"), exports);
|
|
21
|
+
__exportStar(require("./logger"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,sDAAoC;AACpC,yCAAuB;AACvB,+CAA6B;AAC7B,2CAAyB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
export declare const aiChatLogger: Logger;
|
|
3
|
+
export declare function setBootLogsEnabled(enabled: boolean): void;
|
|
4
|
+
export declare function logBoot(message: string): void;
|
|
5
|
+
export declare function logBootWarn(message: string): void;
|
|
6
|
+
export declare function logBootError(message: string): void;
|
|
7
|
+
export declare function logProviderDisabled(provider: string, reason: string): void;
|
|
8
|
+
export declare function logProviderEnabled(provider: string, model: string): void;
|
|
9
|
+
export declare function logStreamError(provider: string, error: unknown): void;
|
|
10
|
+
export declare function logRagLoaded(chunkCount: number, fileCount: number, resolvedPath: string): void;
|
|
11
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,eAAO,MAAM,YAAY,QAAuB,CAAC;AAMjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEzD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGrE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAE9F"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.aiChatLogger = void 0;
|
|
4
|
+
exports.setBootLogsEnabled = setBootLogsEnabled;
|
|
5
|
+
exports.logBoot = logBoot;
|
|
6
|
+
exports.logBootWarn = logBootWarn;
|
|
7
|
+
exports.logBootError = logBootError;
|
|
8
|
+
exports.logProviderDisabled = logProviderDisabled;
|
|
9
|
+
exports.logProviderEnabled = logProviderEnabled;
|
|
10
|
+
exports.logStreamError = logStreamError;
|
|
11
|
+
exports.logRagLoaded = logRagLoaded;
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
exports.aiChatLogger = new common_1.Logger('AiChat');
|
|
14
|
+
const BOOT_PREFIX = '[AiChat]';
|
|
15
|
+
let bootLogsEnabled = true;
|
|
16
|
+
function setBootLogsEnabled(enabled) {
|
|
17
|
+
bootLogsEnabled = enabled;
|
|
18
|
+
}
|
|
19
|
+
function logBoot(message) {
|
|
20
|
+
if (!bootLogsEnabled)
|
|
21
|
+
return;
|
|
22
|
+
console.log(`${BOOT_PREFIX} ${message}`);
|
|
23
|
+
}
|
|
24
|
+
function logBootWarn(message) {
|
|
25
|
+
if (!bootLogsEnabled)
|
|
26
|
+
return;
|
|
27
|
+
console.warn(`${BOOT_PREFIX} WARN ${message}`);
|
|
28
|
+
}
|
|
29
|
+
function logBootError(message) {
|
|
30
|
+
if (!bootLogsEnabled)
|
|
31
|
+
return;
|
|
32
|
+
console.error(`${BOOT_PREFIX} ERROR ${message}`);
|
|
33
|
+
}
|
|
34
|
+
function logProviderDisabled(provider, reason) {
|
|
35
|
+
logBootWarn(`${provider} provider disabled: ${reason}`);
|
|
36
|
+
}
|
|
37
|
+
function logProviderEnabled(provider, model) {
|
|
38
|
+
logBoot(`${provider} provider enabled (model: ${model})`);
|
|
39
|
+
}
|
|
40
|
+
function logStreamError(provider, error) {
|
|
41
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
42
|
+
exports.aiChatLogger.error(`Stream error from ${provider}: ${message}`);
|
|
43
|
+
}
|
|
44
|
+
function logRagLoaded(chunkCount, fileCount, resolvedPath) {
|
|
45
|
+
logBoot(`RAG loaded: ${chunkCount} chunks from ${fileCount} documents (from ${resolvedPath})`);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AAQA,gDAEC;AAED,0BAGC;AAED,kCAGC;AAED,oCAGC;AAED,kDAEC;AAED,gDAEC;AAED,wCAGC;AAED,oCAEC;AA1CD,2CAAwC;AAE3B,QAAA,YAAY,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,CAAC;AAEjD,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B,IAAI,eAAe,GAAG,IAAI,CAAC;AAE3B,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,eAAe,GAAG,OAAO,CAAC;AAC5B,CAAC;AAED,SAAgB,OAAO,CAAC,OAAe;IACrC,IAAI,CAAC,eAAe;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe;IACzC,IAAI,CAAC,eAAe;QAAE,OAAO;IAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,SAAS,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,eAAe;QAAE,OAAO;IAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,UAAU,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,mBAAmB,CAAC,QAAgB,EAAE,MAAc;IAClE,WAAW,CAAC,GAAG,QAAQ,uBAAuB,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,KAAa;IAChE,OAAO,CAAC,GAAG,QAAQ,6BAA6B,KAAK,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,cAAc,CAAC,QAAgB,EAAE,KAAc;IAC7D,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,oBAAY,CAAC,KAAK,CAAC,qBAAqB,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,YAAY,CAAC,UAAkB,EAAE,SAAiB,EAAE,YAAoB;IACtF,OAAO,CAAC,eAAe,UAAU,gBAAgB,SAAS,oBAAoB,YAAY,GAAG,CAAC,CAAC;AACjG,CAAC"}
|