@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,9 @@
|
|
|
1
|
+
import { ChatMessage, ProviderId } from '../types';
|
|
2
|
+
export declare class PromptNormalizer {
|
|
3
|
+
normalize(messages: ChatMessage[], provider: ProviderId, tokenBudget?: number): ChatMessage[];
|
|
4
|
+
private removeEmpty;
|
|
5
|
+
private orderForProvider;
|
|
6
|
+
private trimToTokenBudget;
|
|
7
|
+
private ensureAlternation;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=prompt-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-normalizer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/prompt-normalizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGnD,qBACa,gBAAgB;IAC3B,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,SAAO,GAAG,WAAW,EAAE;IAQ3F,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,iBAAiB;CAmB1B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PromptNormalizer = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const text_1 = require("../utils/text");
|
|
12
|
+
let PromptNormalizer = class PromptNormalizer {
|
|
13
|
+
normalize(messages, provider, tokenBudget = 8000) {
|
|
14
|
+
let result = this.removeEmpty(messages);
|
|
15
|
+
result = this.orderForProvider(result, provider);
|
|
16
|
+
result = this.trimToTokenBudget(result, tokenBudget);
|
|
17
|
+
result = this.ensureAlternation(result, provider);
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
removeEmpty(messages) {
|
|
21
|
+
return messages.filter((m) => m.content.trim().length > 0);
|
|
22
|
+
}
|
|
23
|
+
orderForProvider(messages, provider) {
|
|
24
|
+
if (provider === 'gemini') {
|
|
25
|
+
const system = messages.filter((m) => m.role === 'system');
|
|
26
|
+
const nonSystem = messages.filter((m) => m.role !== 'system');
|
|
27
|
+
return [...system, ...nonSystem];
|
|
28
|
+
}
|
|
29
|
+
return messages;
|
|
30
|
+
}
|
|
31
|
+
trimToTokenBudget(messages, budget) {
|
|
32
|
+
const systemMessages = messages.filter((m) => m.role === 'system');
|
|
33
|
+
const nonSystem = messages.filter((m) => m.role !== 'system');
|
|
34
|
+
let systemCost = 0;
|
|
35
|
+
for (const msg of systemMessages) {
|
|
36
|
+
systemCost += (0, text_1.estimateTokens)(msg.content);
|
|
37
|
+
}
|
|
38
|
+
const remainingBudget = budget - systemCost;
|
|
39
|
+
if (remainingBudget <= 0) {
|
|
40
|
+
return systemMessages;
|
|
41
|
+
}
|
|
42
|
+
const kept = [];
|
|
43
|
+
let used = 0;
|
|
44
|
+
for (let i = nonSystem.length - 1; i >= 0; i--) {
|
|
45
|
+
const cost = (0, text_1.estimateTokens)(nonSystem[i].content);
|
|
46
|
+
if (used + cost > remainingBudget)
|
|
47
|
+
break;
|
|
48
|
+
kept.unshift(nonSystem[i]);
|
|
49
|
+
used += cost;
|
|
50
|
+
}
|
|
51
|
+
return [...systemMessages, ...kept];
|
|
52
|
+
}
|
|
53
|
+
ensureAlternation(messages, provider) {
|
|
54
|
+
if (provider !== 'gemini')
|
|
55
|
+
return messages;
|
|
56
|
+
const result = [];
|
|
57
|
+
for (const msg of messages) {
|
|
58
|
+
if (msg.role === 'system') {
|
|
59
|
+
result.push(msg);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const lastNonSystem = result.filter((m) => m.role !== 'system').pop();
|
|
63
|
+
if (lastNonSystem && lastNonSystem.role === msg.role) {
|
|
64
|
+
lastNonSystem.content += '\n\n' + msg.content;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result.push({ ...msg });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.PromptNormalizer = PromptNormalizer;
|
|
74
|
+
exports.PromptNormalizer = PromptNormalizer = __decorate([
|
|
75
|
+
(0, common_1.Injectable)()
|
|
76
|
+
], PromptNormalizer);
|
|
77
|
+
//# sourceMappingURL=prompt-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-normalizer.js","sourceRoot":"","sources":["../../src/orchestrator/prompt-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AiChatModuleConfig } from '../types';
|
|
2
|
+
export declare class ResponseSanitizer {
|
|
3
|
+
private readonly config;
|
|
4
|
+
private readonly needles;
|
|
5
|
+
private readonly redactSysPrompt;
|
|
6
|
+
private readonly redactPii;
|
|
7
|
+
constructor(config: AiChatModuleConfig);
|
|
8
|
+
createStream(): SanitizerStream;
|
|
9
|
+
}
|
|
10
|
+
interface SanitizerOpts {
|
|
11
|
+
needles: string[];
|
|
12
|
+
redactSysPrompt: boolean;
|
|
13
|
+
redactPii: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare class SanitizerStream {
|
|
16
|
+
private readonly opts;
|
|
17
|
+
private buffer;
|
|
18
|
+
private readonly maxNeedleLen;
|
|
19
|
+
constructor(opts: SanitizerOpts);
|
|
20
|
+
push(chunk: string): string;
|
|
21
|
+
flush(): string;
|
|
22
|
+
private consumeSafePrefix;
|
|
23
|
+
private scrub;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=response-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-sanitizer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/response-sanitizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AA8B9D,qBACa,iBAAiB;IAKQ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJ3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAEiB,MAAM,EAAE,kBAAkB;IAQ/E,YAAY,IAAI,eAAe;CAOhC;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAET,IAAI,EAAE,aAAa;IAIhD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,KAAK,IAAI,MAAM;IAMf,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,KAAK;CAyBd"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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.SanitizerStream = exports.ResponseSanitizer = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const types_1 = require("../types");
|
|
18
|
+
const DEFAULT_NEEDLES = [
|
|
19
|
+
'You are a helpful AI assistant',
|
|
20
|
+
'<DOCUMENT_CONTEXT>',
|
|
21
|
+
'</DOCUMENT_CONTEXT>',
|
|
22
|
+
'[INST]',
|
|
23
|
+
'[/INST]',
|
|
24
|
+
'<|im_start|>',
|
|
25
|
+
'<|im_end|>',
|
|
26
|
+
];
|
|
27
|
+
const TEMPLATE_TOKEN_PATTERN = /\[\/?INST\]|<\|im_(start|end)\|>/gi;
|
|
28
|
+
const SECURITY_LINE_PATTERN = /^SECURITY:.*$/gm;
|
|
29
|
+
const EMAIL_REGEX = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
|
|
30
|
+
const IPV4_REGEX = /\b(?:\d{1,3}\.){3}\d{1,3}\b/g;
|
|
31
|
+
const CREDIT_CARD_REGEX = /\b(?:\d[ -]?){13,19}\b/g;
|
|
32
|
+
const ROLLING_BUFFER_SIZE = 256;
|
|
33
|
+
let ResponseSanitizer = class ResponseSanitizer {
|
|
34
|
+
config;
|
|
35
|
+
needles;
|
|
36
|
+
redactSysPrompt;
|
|
37
|
+
redactPii;
|
|
38
|
+
constructor(config) {
|
|
39
|
+
this.config = config;
|
|
40
|
+
this.redactSysPrompt = config.output?.redactSystemPrompt !== false;
|
|
41
|
+
this.redactPii = config.output?.redactPii === true;
|
|
42
|
+
this.needles = [...DEFAULT_NEEDLES, ...(config.output?.customNeedles ?? [])].filter((n) => n.length > 0);
|
|
43
|
+
}
|
|
44
|
+
createStream() {
|
|
45
|
+
return new SanitizerStream({
|
|
46
|
+
needles: this.needles,
|
|
47
|
+
redactSysPrompt: this.redactSysPrompt,
|
|
48
|
+
redactPii: this.redactPii,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.ResponseSanitizer = ResponseSanitizer;
|
|
53
|
+
exports.ResponseSanitizer = ResponseSanitizer = __decorate([
|
|
54
|
+
(0, common_1.Injectable)(),
|
|
55
|
+
__param(0, (0, common_1.Inject)(types_1.AI_CHAT_CONFIG)),
|
|
56
|
+
__metadata("design:paramtypes", [Object])
|
|
57
|
+
], ResponseSanitizer);
|
|
58
|
+
class SanitizerStream {
|
|
59
|
+
opts;
|
|
60
|
+
buffer = '';
|
|
61
|
+
maxNeedleLen;
|
|
62
|
+
constructor(opts) {
|
|
63
|
+
this.opts = opts;
|
|
64
|
+
this.maxNeedleLen = opts.needles.reduce((max, n) => Math.max(max, n.length), 0);
|
|
65
|
+
}
|
|
66
|
+
push(chunk) {
|
|
67
|
+
this.buffer += chunk;
|
|
68
|
+
return this.consumeSafePrefix();
|
|
69
|
+
}
|
|
70
|
+
flush() {
|
|
71
|
+
const tail = this.buffer;
|
|
72
|
+
this.buffer = '';
|
|
73
|
+
return this.scrub(tail);
|
|
74
|
+
}
|
|
75
|
+
consumeSafePrefix() {
|
|
76
|
+
if (this.buffer.length <= ROLLING_BUFFER_SIZE) {
|
|
77
|
+
return '';
|
|
78
|
+
}
|
|
79
|
+
const holdback = Math.max(this.maxNeedleLen, 32);
|
|
80
|
+
const safeLen = this.buffer.length - holdback;
|
|
81
|
+
if (safeLen <= 0)
|
|
82
|
+
return '';
|
|
83
|
+
const safe = this.buffer.slice(0, safeLen);
|
|
84
|
+
this.buffer = this.buffer.slice(safeLen);
|
|
85
|
+
return this.scrub(safe);
|
|
86
|
+
}
|
|
87
|
+
scrub(text) {
|
|
88
|
+
let out = text;
|
|
89
|
+
if (this.opts.redactSysPrompt) {
|
|
90
|
+
for (const needle of this.opts.needles) {
|
|
91
|
+
if (!needle)
|
|
92
|
+
continue;
|
|
93
|
+
const escaped = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
94
|
+
const re = new RegExp(escaped, 'gi');
|
|
95
|
+
out = out.replace(re, '[REDACTED]');
|
|
96
|
+
}
|
|
97
|
+
out = out.replace(TEMPLATE_TOKEN_PATTERN, '');
|
|
98
|
+
out = out.replace(SECURITY_LINE_PATTERN, '');
|
|
99
|
+
}
|
|
100
|
+
if (this.opts.redactPii) {
|
|
101
|
+
out = out.replace(EMAIL_REGEX, '[REDACTED_EMAIL]');
|
|
102
|
+
out = out.replace(IPV4_REGEX, '[REDACTED_IP]');
|
|
103
|
+
out = out.replace(CREDIT_CARD_REGEX, (match) => looksLikeLuhn(match) ? '[REDACTED_CARD]' : match);
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.SanitizerStream = SanitizerStream;
|
|
109
|
+
function looksLikeLuhn(text) {
|
|
110
|
+
const digits = text.replace(/\D/g, '');
|
|
111
|
+
if (digits.length < 13 || digits.length > 19)
|
|
112
|
+
return false;
|
|
113
|
+
let sum = 0;
|
|
114
|
+
let alt = false;
|
|
115
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
116
|
+
let d = digits.charCodeAt(i) - 48;
|
|
117
|
+
if (alt) {
|
|
118
|
+
d *= 2;
|
|
119
|
+
if (d > 9)
|
|
120
|
+
d -= 9;
|
|
121
|
+
}
|
|
122
|
+
sum += d;
|
|
123
|
+
alt = !alt;
|
|
124
|
+
}
|
|
125
|
+
return sum % 10 === 0;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=response-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-sanitizer.js","sourceRoot":"","sources":["../../src/orchestrator/response-sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChatMessage } from '../types';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class ResponseValidator {
|
|
7
|
+
validate(response: string): ValidationResult;
|
|
8
|
+
buildCorrectionMessages(error: string): ChatMessage[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=response-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-validator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/response-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBACa,iBAAiB;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAO5C,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;CAQtD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ResponseValidator = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let ResponseValidator = class ResponseValidator {
|
|
12
|
+
validate(response) {
|
|
13
|
+
if (!response || response.trim().length === 0) {
|
|
14
|
+
return { valid: false, error: 'Empty response from LLM' };
|
|
15
|
+
}
|
|
16
|
+
return { valid: true };
|
|
17
|
+
}
|
|
18
|
+
buildCorrectionMessages(error) {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
role: 'system',
|
|
22
|
+
content: `Your previous response was invalid: ${error}. Please provide a valid response.`,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.ResponseValidator = ResponseValidator;
|
|
28
|
+
exports.ResponseValidator = ResponseValidator = __decorate([
|
|
29
|
+
(0, common_1.Injectable)()
|
|
30
|
+
], ResponseValidator);
|
|
31
|
+
//# sourceMappingURL=response-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-validator.js","sourceRoot":"","sources":["../../src/orchestrator/response-validator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AASrC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,QAAQ,CAAC,QAAgB;QACvB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,uBAAuB,CAAC,KAAa;QACnC,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,uCAAuC,KAAK,oCAAoC;aAC1F;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAgB7B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ChatMessage, ChatStreamEvent, ILlmProvider, StreamOptions } from '../types';
|
|
2
|
+
import { ProviderSettings } from './provider-settings';
|
|
3
|
+
export declare class GeminiProvider implements ILlmProvider {
|
|
4
|
+
private readonly s;
|
|
5
|
+
readonly id: "gemini";
|
|
6
|
+
readonly supportsEmbedding = true;
|
|
7
|
+
constructor(s: ProviderSettings);
|
|
8
|
+
chatStream(messages: ChatMessage[], options?: StreamOptions): AsyncGenerator<ChatStreamEvent>;
|
|
9
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
10
|
+
private toGeminiContents;
|
|
11
|
+
private extractSystemInstruction;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=gemini.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.provider.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,cAAe,YAAW,YAAY;IAIrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAH9B,QAAQ,CAAC,EAAE,EAAG,QAAQ,CAAU;IAChC,QAAQ,CAAC,iBAAiB,QAAQ;gBAEL,CAAC,EAAE,gBAAgB;IAEzC,UAAU,CACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc,CAAC,eAAe,CAAC;IAkG5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0BjD,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,wBAAwB;CAKjC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GeminiProvider = void 0;
|
|
4
|
+
const retry_1 = require("../utils/retry");
|
|
5
|
+
const logger_1 = require("../utils/logger");
|
|
6
|
+
class GeminiProvider {
|
|
7
|
+
s;
|
|
8
|
+
id = 'gemini';
|
|
9
|
+
supportsEmbedding = true;
|
|
10
|
+
constructor(s) {
|
|
11
|
+
this.s = s;
|
|
12
|
+
}
|
|
13
|
+
async *chatStream(messages, options) {
|
|
14
|
+
const url = `${this.s.baseUrl}/models/${this.s.chatModel}:streamGenerateContent?alt=sse&key=${this.s.apiKey}`;
|
|
15
|
+
const contents = this.toGeminiContents(messages);
|
|
16
|
+
const systemInstruction = this.extractSystemInstruction(messages);
|
|
17
|
+
const body = {
|
|
18
|
+
contents,
|
|
19
|
+
generationConfig: {
|
|
20
|
+
temperature: options?.temperature ?? 0.7,
|
|
21
|
+
maxOutputTokens: options?.maxTokens ?? 2048,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
if (systemInstruction) {
|
|
25
|
+
body.systemInstruction = { parts: [{ text: systemInstruction }] };
|
|
26
|
+
}
|
|
27
|
+
let response;
|
|
28
|
+
try {
|
|
29
|
+
response = await (0, retry_1.withRetry)(() => fetch(url, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: { 'Content-Type': 'application/json' },
|
|
32
|
+
body: JSON.stringify(body),
|
|
33
|
+
signal: options?.signal,
|
|
34
|
+
}), this.s.retry);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
(0, logger_1.logStreamError)('Gemini', error);
|
|
38
|
+
yield { type: 'error', error: 'Failed to connect to Gemini API' };
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const errorBody = await response.text().catch(() => '');
|
|
43
|
+
(0, logger_1.logStreamError)('Gemini', `HTTP ${response.status}: ${errorBody}`);
|
|
44
|
+
yield {
|
|
45
|
+
type: 'error',
|
|
46
|
+
error: `Gemini API error: ${response.status}`,
|
|
47
|
+
};
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const reader = response.body?.getReader();
|
|
51
|
+
if (!reader) {
|
|
52
|
+
yield { type: 'error', error: 'No response body from Gemini' };
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const decoder = new TextDecoder();
|
|
56
|
+
let buffer = '';
|
|
57
|
+
let totalTokens = 0;
|
|
58
|
+
try {
|
|
59
|
+
while (true) {
|
|
60
|
+
const { done, value } = await reader.read();
|
|
61
|
+
if (done)
|
|
62
|
+
break;
|
|
63
|
+
buffer += decoder.decode(value, { stream: true });
|
|
64
|
+
const lines = buffer.split('\n');
|
|
65
|
+
buffer = lines.pop() || '';
|
|
66
|
+
for (const line of lines) {
|
|
67
|
+
if (!line.startsWith('data: '))
|
|
68
|
+
continue;
|
|
69
|
+
const data = line.slice(6).trim();
|
|
70
|
+
if (!data || data === '[DONE]')
|
|
71
|
+
continue;
|
|
72
|
+
try {
|
|
73
|
+
const parsed = JSON.parse(data);
|
|
74
|
+
const text = parsed?.candidates?.[0]?.content?.parts?.[0]?.text;
|
|
75
|
+
if (text) {
|
|
76
|
+
totalTokens += Math.ceil(text.length / 4);
|
|
77
|
+
yield { type: 'token', content: text };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
(0, logger_1.logStreamError)('Gemini', error);
|
|
87
|
+
yield { type: 'error', error: 'Stream interrupted' };
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
yield {
|
|
91
|
+
type: 'done',
|
|
92
|
+
usage: {
|
|
93
|
+
promptTokens: 0,
|
|
94
|
+
completionTokens: totalTokens,
|
|
95
|
+
totalTokens,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async embed(texts) {
|
|
100
|
+
const url = `${this.s.baseUrl}/models/${this.s.embeddingModel}:batchEmbedContents?key=${this.s.apiKey}`;
|
|
101
|
+
const requests = texts.map((text) => ({
|
|
102
|
+
model: `models/${this.s.embeddingModel}`,
|
|
103
|
+
content: { parts: [{ text }] },
|
|
104
|
+
}));
|
|
105
|
+
const response = await (0, retry_1.withRetry)(() => fetch(url, {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: { 'Content-Type': 'application/json' },
|
|
108
|
+
body: JSON.stringify({ requests }),
|
|
109
|
+
}), this.s.retry);
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw new Error(`Gemini embedding failed: ${response.status}`);
|
|
112
|
+
}
|
|
113
|
+
const data = await response.json();
|
|
114
|
+
return data.embeddings.map((e) => e.values);
|
|
115
|
+
}
|
|
116
|
+
toGeminiContents(messages) {
|
|
117
|
+
return messages
|
|
118
|
+
.filter((m) => m.role !== 'system')
|
|
119
|
+
.map((m) => ({
|
|
120
|
+
role: m.role === 'assistant' ? 'model' : 'user',
|
|
121
|
+
parts: [{ text: m.content }],
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
extractSystemInstruction(messages) {
|
|
125
|
+
const systemMessages = messages.filter((m) => m.role === 'system');
|
|
126
|
+
if (systemMessages.length === 0)
|
|
127
|
+
return null;
|
|
128
|
+
return systemMessages.map((m) => m.content).join('\n\n');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.GeminiProvider = GeminiProvider;
|
|
132
|
+
//# sourceMappingURL=gemini.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../../src/providers/gemini.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChatMessage, ChatStreamEvent, ILlmProvider, StreamOptions } from '../types';
|
|
2
|
+
import { ProviderSettings } from './provider-settings';
|
|
3
|
+
export declare class GrokProvider implements ILlmProvider {
|
|
4
|
+
private readonly s;
|
|
5
|
+
readonly id: "grok";
|
|
6
|
+
readonly supportsEmbedding = false;
|
|
7
|
+
private readonly client;
|
|
8
|
+
constructor(s: ProviderSettings);
|
|
9
|
+
chatStream(messages: ChatMessage[], options?: StreamOptions): AsyncGenerator<ChatStreamEvent>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=grok.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok.provider.d.ts","sourceRoot":"","sources":["../../src/providers/grok.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,YAAa,YAAW,YAAY;IAMnC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAL9B,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAC9B,QAAQ,CAAC,iBAAiB,SAAS;IAEnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,CAAC,EAAE,gBAAgB;IAOzC,UAAU,CACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc,CAAC,eAAe,CAAC;CAgDnC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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.GrokProvider = void 0;
|
|
7
|
+
const openai_1 = __importDefault(require("openai"));
|
|
8
|
+
const logger_1 = require("../utils/logger");
|
|
9
|
+
class GrokProvider {
|
|
10
|
+
s;
|
|
11
|
+
id = 'grok';
|
|
12
|
+
supportsEmbedding = false;
|
|
13
|
+
client;
|
|
14
|
+
constructor(s) {
|
|
15
|
+
this.s = s;
|
|
16
|
+
this.client = new openai_1.default({
|
|
17
|
+
apiKey: s.apiKey,
|
|
18
|
+
baseURL: s.baseUrl,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async *chatStream(messages, options) {
|
|
22
|
+
let stream;
|
|
23
|
+
try {
|
|
24
|
+
stream = await this.client.chat.completions.create({
|
|
25
|
+
model: this.s.chatModel,
|
|
26
|
+
messages: messages.map((m) => ({
|
|
27
|
+
role: m.role,
|
|
28
|
+
content: m.content,
|
|
29
|
+
})),
|
|
30
|
+
stream: true,
|
|
31
|
+
temperature: options?.temperature ?? 0.7,
|
|
32
|
+
max_tokens: options?.maxTokens ?? 2048,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
(0, logger_1.logStreamError)('Grok', error);
|
|
37
|
+
yield {
|
|
38
|
+
type: 'error',
|
|
39
|
+
error: 'Failed to connect to Grok API',
|
|
40
|
+
};
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let totalTokens = 0;
|
|
44
|
+
try {
|
|
45
|
+
for await (const chunk of stream) {
|
|
46
|
+
const delta = chunk.choices[0]?.delta;
|
|
47
|
+
if (delta?.content) {
|
|
48
|
+
totalTokens += Math.ceil(delta.content.length / 4);
|
|
49
|
+
yield { type: 'token', content: delta.content };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
(0, logger_1.logStreamError)('Grok', error);
|
|
55
|
+
yield { type: 'error', error: 'Stream interrupted' };
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
yield {
|
|
59
|
+
type: 'done',
|
|
60
|
+
usage: {
|
|
61
|
+
promptTokens: 0,
|
|
62
|
+
completionTokens: totalTokens,
|
|
63
|
+
totalTokens,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.GrokProvider = GrokProvider;
|
|
69
|
+
//# sourceMappingURL=grok.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok.provider.js","sourceRoot":"","sources":["../../src/providers/grok.provider.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,4CAAiD;AAGjD,MAAa,YAAY;IAMM;IALpB,EAAE,GAAG,MAAe,CAAC;IACrB,iBAAiB,GAAG,KAAK,CAAC;IAElB,MAAM,CAAS;IAEhC,YAA6B,CAAmB;QAAnB,MAAC,GAAD,CAAC,CAAkB;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,CAAC,OAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACf,QAAuB,EACvB,OAAuB;QAEvB,IAAI,MAAkE,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACjD,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;gBACvB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC;gBACH,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,GAAG;gBACxC,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;aACvC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,+BAA+B;aACvC,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBACtC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;oBACnB,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACnD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAED,MAAM;YACJ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,WAAW;gBAC7B,WAAW;aACZ;SACF,CAAC;IACJ,CAAC;CACF;AAhED,oCAgEC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ChatMessage, ChatStreamEvent, ILlmProvider, StreamOptions } from '../types';
|
|
2
|
+
import { ProviderSettings } from './provider-settings';
|
|
3
|
+
export declare class OpenAIProvider implements ILlmProvider {
|
|
4
|
+
private readonly s;
|
|
5
|
+
readonly id: "openai";
|
|
6
|
+
readonly supportsEmbedding = true;
|
|
7
|
+
private readonly client;
|
|
8
|
+
constructor(s: ProviderSettings);
|
|
9
|
+
chatStream(messages: ChatMessage[], options?: StreamOptions): AsyncGenerator<ChatStreamEvent>;
|
|
10
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=openai.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.provider.d.ts","sourceRoot":"","sources":["../../src/providers/openai.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,cAAe,YAAW,YAAY;IAMrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAL9B,QAAQ,CAAC,EAAE,EAAG,QAAQ,CAAU;IAChC,QAAQ,CAAC,iBAAiB,QAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,CAAC,EAAE,gBAAgB;IAOzC,UAAU,CACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc,CAAC,eAAe,CAAC;IA6D5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAQlD"}
|