@apart-tech/intelligence-core 1.18.0 → 1.20.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/dist/auth/ability.d.ts +1 -1
- package/dist/auth/ability.d.ts.map +1 -1
- package/dist/auth/ability.js +21 -3
- package/dist/auth/ability.js.map +1 -1
- package/dist/auth/ability.test.js +51 -10
- package/dist/auth/ability.test.js.map +1 -1
- package/dist/db/tenant.d.ts.map +1 -1
- package/dist/db/tenant.js +10 -0
- package/dist/db/tenant.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/services/chat-capture-service.d.ts +19 -0
- package/dist/services/chat-capture-service.d.ts.map +1 -0
- package/dist/services/chat-capture-service.js +74 -0
- package/dist/services/chat-capture-service.js.map +1 -0
- package/dist/services/chat-context-service.d.ts +33 -0
- package/dist/services/chat-context-service.d.ts.map +1 -0
- package/dist/services/chat-context-service.js +110 -0
- package/dist/services/chat-context-service.js.map +1 -0
- package/dist/services/chat-service.d.ts +83 -0
- package/dist/services/chat-service.d.ts.map +1 -0
- package/dist/services/chat-service.js +103 -0
- package/dist/services/chat-service.js.map +1 -0
- package/dist/services/chat-usage-service.d.ts +36 -0
- package/dist/services/chat-usage-service.d.ts.map +1 -0
- package/dist/services/chat-usage-service.js +89 -0
- package/dist/services/chat-usage-service.js.map +1 -0
- package/dist/services/content-policy-service.d.ts +71 -0
- package/dist/services/content-policy-service.d.ts.map +1 -0
- package/dist/services/content-policy-service.js +109 -0
- package/dist/services/content-policy-service.js.map +1 -0
- package/dist/services/llm-router-service.d.ts +29 -0
- package/dist/services/llm-router-service.d.ts.map +1 -0
- package/dist/services/llm-router-service.js +70 -0
- package/dist/services/llm-router-service.js.map +1 -0
- package/dist/services/org-llm-provider-service.d.ts +47 -0
- package/dist/services/org-llm-provider-service.d.ts.map +1 -0
- package/dist/services/org-llm-provider-service.js +126 -0
- package/dist/services/org-llm-provider-service.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +148 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export class ContentPolicyService {
|
|
2
|
+
db;
|
|
3
|
+
tenantCtx;
|
|
4
|
+
constructor(db, tenantCtx) {
|
|
5
|
+
this.db = db;
|
|
6
|
+
this.tenantCtx = tenantCtx;
|
|
7
|
+
}
|
|
8
|
+
async list() {
|
|
9
|
+
return this.db.orgContentPolicy.findMany({
|
|
10
|
+
orderBy: [{ priority: "desc" }, { createdAt: "asc" }],
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
async get(id) {
|
|
14
|
+
return this.db.orgContentPolicy.findUnique({ where: { id } });
|
|
15
|
+
}
|
|
16
|
+
async create(input) {
|
|
17
|
+
return this.db.orgContentPolicy.create({
|
|
18
|
+
data: {
|
|
19
|
+
organizationId: this.tenantCtx?.organizationId ?? "",
|
|
20
|
+
name: input.name,
|
|
21
|
+
description: input.description ?? "",
|
|
22
|
+
category: input.category,
|
|
23
|
+
keywords: input.keywords,
|
|
24
|
+
action: input.action,
|
|
25
|
+
enabled: input.enabled ?? true,
|
|
26
|
+
priority: input.priority ?? 0,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
async update(id, input) {
|
|
31
|
+
return this.db.orgContentPolicy.update({
|
|
32
|
+
where: { id },
|
|
33
|
+
data: {
|
|
34
|
+
...(input.name !== undefined && { name: input.name }),
|
|
35
|
+
...(input.description !== undefined && { description: input.description }),
|
|
36
|
+
...(input.category !== undefined && { category: input.category }),
|
|
37
|
+
...(input.keywords !== undefined && { keywords: input.keywords }),
|
|
38
|
+
...(input.action !== undefined && { action: input.action }),
|
|
39
|
+
...(input.enabled !== undefined && { enabled: input.enabled }),
|
|
40
|
+
...(input.priority !== undefined && { priority: input.priority }),
|
|
41
|
+
updatedAt: new Date(),
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async delete(id) {
|
|
46
|
+
try {
|
|
47
|
+
await this.db.orgContentPolicy.delete({ where: { id } });
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Evaluate content against all enabled policies.
|
|
56
|
+
* Returns whether the content is allowed and any violations found.
|
|
57
|
+
*/
|
|
58
|
+
async evaluate(content) {
|
|
59
|
+
const policies = await this.db.orgContentPolicy.findMany({
|
|
60
|
+
where: { enabled: true },
|
|
61
|
+
orderBy: { priority: "desc" },
|
|
62
|
+
});
|
|
63
|
+
const violations = [];
|
|
64
|
+
for (const policy of policies) {
|
|
65
|
+
const keywords = policy.keywords;
|
|
66
|
+
for (const keyword of keywords) {
|
|
67
|
+
const lowerKeyword = keyword.toLowerCase();
|
|
68
|
+
// Word-boundary-aware case-insensitive match
|
|
69
|
+
const regex = new RegExp(`\\b${escapeRegex(lowerKeyword)}\\b`, "i");
|
|
70
|
+
if (regex.test(content)) {
|
|
71
|
+
violations.push({
|
|
72
|
+
policyId: policy.id,
|
|
73
|
+
policyName: policy.name,
|
|
74
|
+
category: policy.category,
|
|
75
|
+
action: policy.action,
|
|
76
|
+
matchedKeyword: keyword,
|
|
77
|
+
});
|
|
78
|
+
break; // One match per policy is enough
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const allowed = !violations.some((v) => v.action === "block");
|
|
83
|
+
return { allowed, violations };
|
|
84
|
+
}
|
|
85
|
+
async logViolation(input) {
|
|
86
|
+
await this.db.contentPolicyLog.create({
|
|
87
|
+
data: {
|
|
88
|
+
organizationId: this.tenantCtx?.organizationId ?? "",
|
|
89
|
+
policyId: input.policyId,
|
|
90
|
+
policyName: input.policyName,
|
|
91
|
+
sessionId: input.sessionId,
|
|
92
|
+
userId: input.userId,
|
|
93
|
+
action: input.action,
|
|
94
|
+
matchedKeyword: input.matchedKeyword,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async listLogs(options) {
|
|
99
|
+
return this.db.contentPolicyLog.findMany({
|
|
100
|
+
orderBy: { createdAt: "desc" },
|
|
101
|
+
take: options?.limit ?? 50,
|
|
102
|
+
skip: options?.offset ?? 0,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function escapeRegex(str) {
|
|
107
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=content-policy-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-policy-service.js","sourceRoot":"","sources":["../../src/services/content-policy-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { OrgLlmProviderService } from "./org-llm-provider-service.js";
|
|
2
|
+
export interface RoutingCriteria {
|
|
3
|
+
preferredModel?: string;
|
|
4
|
+
preferredProvider?: string;
|
|
5
|
+
dataResidency?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface RoutingDecision {
|
|
8
|
+
provider: string;
|
|
9
|
+
model: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
baseUrl: string | null;
|
|
12
|
+
providerId: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class LlmRouterService {
|
|
15
|
+
private providerService;
|
|
16
|
+
constructor(providerService: OrgLlmProviderService);
|
|
17
|
+
/**
|
|
18
|
+
* Route to the best available LLM provider/model based on criteria.
|
|
19
|
+
*
|
|
20
|
+
* Logic:
|
|
21
|
+
* 1. If preferredModel + preferredProvider specified and available → use it
|
|
22
|
+
* 2. If preferredModel specified → find first enabled provider with that model
|
|
23
|
+
* 3. Otherwise pick highest-priority enabled provider
|
|
24
|
+
* 4. Respect data residency constraints
|
|
25
|
+
*/
|
|
26
|
+
route(organizationId: string, criteria?: RoutingCriteria): Promise<RoutingDecision | null>;
|
|
27
|
+
private resolveDecision;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=llm-router-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-router-service.d.ts","sourceRoot":"","sources":["../../src/services/llm-router-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,+BAA+B,CAAC;AAElG,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,eAAe;gBAAf,eAAe,EAAE,qBAAqB;IAE1D;;;;;;;;OAQG;IACG,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAE,eAAoB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YAoDtF,eAAe;CAgB9B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export class LlmRouterService {
|
|
2
|
+
providerService;
|
|
3
|
+
constructor(providerService) {
|
|
4
|
+
this.providerService = providerService;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Route to the best available LLM provider/model based on criteria.
|
|
8
|
+
*
|
|
9
|
+
* Logic:
|
|
10
|
+
* 1. If preferredModel + preferredProvider specified and available → use it
|
|
11
|
+
* 2. If preferredModel specified → find first enabled provider with that model
|
|
12
|
+
* 3. Otherwise pick highest-priority enabled provider
|
|
13
|
+
* 4. Respect data residency constraints
|
|
14
|
+
*/
|
|
15
|
+
async route(organizationId, criteria = {}) {
|
|
16
|
+
const providers = await this.providerService.list(organizationId);
|
|
17
|
+
const enabledProviders = providers.filter((p) => p.enabled);
|
|
18
|
+
if (enabledProviders.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
// Filter by data residency
|
|
21
|
+
const residencyFiltered = criteria.dataResidency
|
|
22
|
+
? enabledProviders.filter((p) => p.dataResidency === "any" || p.dataResidency === criteria.dataResidency)
|
|
23
|
+
: enabledProviders;
|
|
24
|
+
if (residencyFiltered.length === 0)
|
|
25
|
+
return null;
|
|
26
|
+
// If preferred provider + model specified
|
|
27
|
+
if (criteria.preferredProvider && criteria.preferredModel) {
|
|
28
|
+
const match = residencyFiltered.find((p) => p.provider === criteria.preferredProvider && p.models.includes(criteria.preferredModel));
|
|
29
|
+
if (match) {
|
|
30
|
+
return this.resolveDecision(organizationId, match.provider, criteria.preferredModel);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// If preferred model specified — find first provider that has it
|
|
34
|
+
if (criteria.preferredModel) {
|
|
35
|
+
const match = residencyFiltered.find((p) => p.models.includes(criteria.preferredModel));
|
|
36
|
+
if (match) {
|
|
37
|
+
return this.resolveDecision(organizationId, match.provider, criteria.preferredModel);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// If preferred provider specified — use its default model
|
|
41
|
+
if (criteria.preferredProvider) {
|
|
42
|
+
const match = residencyFiltered.find((p) => p.provider === criteria.preferredProvider);
|
|
43
|
+
if (match) {
|
|
44
|
+
const model = match.defaultModel ?? match.models[0];
|
|
45
|
+
if (model) {
|
|
46
|
+
return this.resolveDecision(organizationId, match.provider, model);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Fall back to highest priority provider's default model
|
|
51
|
+
const best = residencyFiltered[0]; // already sorted by priority desc
|
|
52
|
+
const model = best.defaultModel ?? best.models[0];
|
|
53
|
+
if (!model)
|
|
54
|
+
return null;
|
|
55
|
+
return this.resolveDecision(organizationId, best.provider, model);
|
|
56
|
+
}
|
|
57
|
+
async resolveDecision(organizationId, provider, model) {
|
|
58
|
+
const withKey = await this.providerService.getWithKey(organizationId, provider);
|
|
59
|
+
if (!withKey)
|
|
60
|
+
return null;
|
|
61
|
+
return {
|
|
62
|
+
provider: withKey.provider,
|
|
63
|
+
model,
|
|
64
|
+
apiKey: withKey.apiKey,
|
|
65
|
+
baseUrl: withKey.baseUrl,
|
|
66
|
+
providerId: withKey.id,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=llm-router-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-router-service.js","sourceRoot":"","sources":["../../src/services/llm-router-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { PrismaClient } from "@prisma/client";
|
|
2
|
+
export type LlmProviderName = "openai" | "anthropic" | "google" | "mistral" | "ollama";
|
|
3
|
+
export interface OrgLlmProviderRecord {
|
|
4
|
+
id: string;
|
|
5
|
+
provider: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
baseUrl: string | null;
|
|
8
|
+
models: string[];
|
|
9
|
+
defaultModel: string | null;
|
|
10
|
+
dataResidency: string;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
priority: number;
|
|
13
|
+
maxTokensPerMin: number | null;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
updatedAt: Date;
|
|
16
|
+
}
|
|
17
|
+
export interface OrgLlmProviderWithKey extends OrgLlmProviderRecord {
|
|
18
|
+
apiKey: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SetOrgLlmProviderInput {
|
|
21
|
+
provider: string;
|
|
22
|
+
displayName: string;
|
|
23
|
+
apiKey: string;
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
models: string[];
|
|
26
|
+
defaultModel?: string;
|
|
27
|
+
dataResidency?: string;
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
priority?: number;
|
|
30
|
+
maxTokensPerMin?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare class OrgLlmProviderService {
|
|
33
|
+
private db;
|
|
34
|
+
constructor(db: PrismaClient);
|
|
35
|
+
set(organizationId: string, input: SetOrgLlmProviderInput): Promise<OrgLlmProviderRecord>;
|
|
36
|
+
get(organizationId: string, provider: string): Promise<OrgLlmProviderRecord | null>;
|
|
37
|
+
getWithKey(organizationId: string, provider: string): Promise<OrgLlmProviderWithKey | null>;
|
|
38
|
+
list(organizationId: string): Promise<OrgLlmProviderRecord[]>;
|
|
39
|
+
delete(organizationId: string, provider: string): Promise<boolean>;
|
|
40
|
+
listAvailableModels(organizationId: string): Promise<{
|
|
41
|
+
provider: string;
|
|
42
|
+
models: string[];
|
|
43
|
+
defaultModel: string | null;
|
|
44
|
+
}[]>;
|
|
45
|
+
private toRecord;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=org-llm-provider-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-llm-provider-service.d.ts","sourceRoot":"","sources":["../../src/services/org-llm-provider-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYnD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwCzF,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAYnF,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAiB3F,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAQ7D,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlE,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IASjI,OAAO,CAAC,QAAQ;CA6BjB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { encryptAesGcm, decryptAesGcm } from "../lib/crypto.js";
|
|
2
|
+
import { getAgentKeySecret } from "../lib/encryption-keys.js";
|
|
3
|
+
function encrypt(plaintext) {
|
|
4
|
+
return encryptAesGcm(plaintext, getAgentKeySecret());
|
|
5
|
+
}
|
|
6
|
+
function decrypt(encoded) {
|
|
7
|
+
return decryptAesGcm(encoded, getAgentKeySecret());
|
|
8
|
+
}
|
|
9
|
+
export class OrgLlmProviderService {
|
|
10
|
+
db;
|
|
11
|
+
constructor(db) {
|
|
12
|
+
this.db = db;
|
|
13
|
+
}
|
|
14
|
+
async set(organizationId, input) {
|
|
15
|
+
const encryptedKey = encrypt(input.apiKey);
|
|
16
|
+
const record = await this.db.orgLlmProvider.upsert({
|
|
17
|
+
where: {
|
|
18
|
+
organizationId_provider: {
|
|
19
|
+
organizationId,
|
|
20
|
+
provider: input.provider,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
create: {
|
|
24
|
+
organizationId,
|
|
25
|
+
provider: input.provider,
|
|
26
|
+
displayName: input.displayName,
|
|
27
|
+
encryptedApiKey: encryptedKey,
|
|
28
|
+
baseUrl: input.baseUrl ?? null,
|
|
29
|
+
models: input.models,
|
|
30
|
+
defaultModel: input.defaultModel ?? null,
|
|
31
|
+
dataResidency: input.dataResidency ?? "any",
|
|
32
|
+
enabled: input.enabled ?? true,
|
|
33
|
+
priority: input.priority ?? 0,
|
|
34
|
+
maxTokensPerMin: input.maxTokensPerMin ?? null,
|
|
35
|
+
},
|
|
36
|
+
update: {
|
|
37
|
+
displayName: input.displayName,
|
|
38
|
+
encryptedApiKey: encryptedKey,
|
|
39
|
+
baseUrl: input.baseUrl ?? null,
|
|
40
|
+
models: input.models,
|
|
41
|
+
defaultModel: input.defaultModel ?? undefined,
|
|
42
|
+
dataResidency: input.dataResidency ?? undefined,
|
|
43
|
+
enabled: input.enabled ?? undefined,
|
|
44
|
+
priority: input.priority ?? undefined,
|
|
45
|
+
maxTokensPerMin: input.maxTokensPerMin ?? undefined,
|
|
46
|
+
updatedAt: new Date(),
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return this.toRecord(record);
|
|
50
|
+
}
|
|
51
|
+
async get(organizationId, provider) {
|
|
52
|
+
const record = await this.db.orgLlmProvider.findUnique({
|
|
53
|
+
where: {
|
|
54
|
+
organizationId_provider: {
|
|
55
|
+
organizationId,
|
|
56
|
+
provider,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
return record ? this.toRecord(record) : null;
|
|
61
|
+
}
|
|
62
|
+
async getWithKey(organizationId, provider) {
|
|
63
|
+
const record = await this.db.orgLlmProvider.findUnique({
|
|
64
|
+
where: {
|
|
65
|
+
organizationId_provider: {
|
|
66
|
+
organizationId,
|
|
67
|
+
provider,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
if (!record)
|
|
72
|
+
return null;
|
|
73
|
+
return {
|
|
74
|
+
...this.toRecord(record),
|
|
75
|
+
apiKey: decrypt(record.encryptedApiKey),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async list(organizationId) {
|
|
79
|
+
const records = await this.db.orgLlmProvider.findMany({
|
|
80
|
+
where: { organizationId },
|
|
81
|
+
orderBy: { priority: "desc" },
|
|
82
|
+
});
|
|
83
|
+
return records.map((r) => this.toRecord(r));
|
|
84
|
+
}
|
|
85
|
+
async delete(organizationId, provider) {
|
|
86
|
+
try {
|
|
87
|
+
await this.db.orgLlmProvider.delete({
|
|
88
|
+
where: {
|
|
89
|
+
organizationId_provider: {
|
|
90
|
+
organizationId,
|
|
91
|
+
provider,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async listAvailableModels(organizationId) {
|
|
102
|
+
const records = await this.db.orgLlmProvider.findMany({
|
|
103
|
+
where: { organizationId, enabled: true },
|
|
104
|
+
orderBy: { priority: "desc" },
|
|
105
|
+
select: { provider: true, models: true, defaultModel: true },
|
|
106
|
+
});
|
|
107
|
+
return records;
|
|
108
|
+
}
|
|
109
|
+
toRecord(row) {
|
|
110
|
+
return {
|
|
111
|
+
id: row.id,
|
|
112
|
+
provider: row.provider,
|
|
113
|
+
displayName: row.displayName,
|
|
114
|
+
baseUrl: row.baseUrl,
|
|
115
|
+
models: row.models,
|
|
116
|
+
defaultModel: row.defaultModel,
|
|
117
|
+
dataResidency: row.dataResidency,
|
|
118
|
+
enabled: row.enabled,
|
|
119
|
+
priority: row.priority,
|
|
120
|
+
maxTokensPerMin: row.maxTokensPerMin,
|
|
121
|
+
createdAt: row.createdAt,
|
|
122
|
+
updatedAt: row.updatedAt,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=org-llm-provider-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-llm-provider-service.js","sourceRoot":"","sources":["../../src/services/org-llm-provider-service.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -131,6 +131,12 @@ export interface OrgMetadata {
|
|
|
131
131
|
maxNodes?: number;
|
|
132
132
|
minRelevance?: number;
|
|
133
133
|
};
|
|
134
|
+
branding?: {
|
|
135
|
+
logoUrl?: string;
|
|
136
|
+
primaryColor?: string;
|
|
137
|
+
companyName?: string;
|
|
138
|
+
welcomeMessage?: string;
|
|
139
|
+
};
|
|
134
140
|
}
|
|
135
141
|
/** @deprecated Use ApartConfig instead */
|
|
136
142
|
export type CollectiveConfig = ApartConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/prisma/schema.prisma
CHANGED
|
@@ -45,6 +45,13 @@ model Organization {
|
|
|
45
45
|
nodeChunks NodeChunk[]
|
|
46
46
|
piiQueryLogs PiiQueryLog[]
|
|
47
47
|
documents Document[]
|
|
48
|
+
llmProviders OrgLlmProvider[]
|
|
49
|
+
chatSessions ChatSession[]
|
|
50
|
+
chatMessages ChatMessage[]
|
|
51
|
+
chatGuidelines OrgChatGuideline[]
|
|
52
|
+
priorityDocuments OrgPriorityDocument[]
|
|
53
|
+
contentPolicies OrgContentPolicy[]
|
|
54
|
+
contentPolicyLogs ContentPolicyLog[]
|
|
48
55
|
|
|
49
56
|
@@map("organizations")
|
|
50
57
|
}
|
|
@@ -775,3 +782,144 @@ model SearchMetric {
|
|
|
775
782
|
@@index([organizationId, createdAt], map: "idx_search_metrics_org_time")
|
|
776
783
|
@@map("search_metrics")
|
|
777
784
|
}
|
|
785
|
+
|
|
786
|
+
// ── Chat Gateway ────────────────────────────────────────────────────────────
|
|
787
|
+
|
|
788
|
+
model OrgLlmProvider {
|
|
789
|
+
id String @id @default(uuid()) @db.Uuid
|
|
790
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
791
|
+
provider String @db.VarChar(30)
|
|
792
|
+
displayName String @map("display_name") @db.VarChar(200)
|
|
793
|
+
encryptedApiKey String @map("encrypted_api_key") @db.Text
|
|
794
|
+
baseUrl String? @map("base_url") @db.VarChar(500)
|
|
795
|
+
models String[]
|
|
796
|
+
defaultModel String? @map("default_model") @db.VarChar(100)
|
|
797
|
+
dataResidency String @default("any") @map("data_residency") @db.VarChar(10)
|
|
798
|
+
enabled Boolean @default(true)
|
|
799
|
+
priority Int @default(0)
|
|
800
|
+
maxTokensPerMin Int? @map("max_tokens_per_min")
|
|
801
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
802
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
803
|
+
|
|
804
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
805
|
+
|
|
806
|
+
@@unique([organizationId, provider], map: "uq_org_llm_provider_org_provider")
|
|
807
|
+
@@index([organizationId], map: "idx_org_llm_providers_org")
|
|
808
|
+
@@map("org_llm_providers")
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
model ChatSession {
|
|
812
|
+
id String @id @default(uuid()) @db.Uuid
|
|
813
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
814
|
+
userId String @map("user_id") @db.Uuid
|
|
815
|
+
title String? @db.VarChar(500)
|
|
816
|
+
privacy String @default("shared") @db.VarChar(20)
|
|
817
|
+
status String @default("active") @db.VarChar(20)
|
|
818
|
+
workspaceId String? @map("workspace_id") @db.Uuid
|
|
819
|
+
graphCaptured Boolean @default(false) @map("graph_captured")
|
|
820
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
821
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
822
|
+
|
|
823
|
+
messages ChatMessage[]
|
|
824
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
825
|
+
|
|
826
|
+
@@index([organizationId, userId, createdAt], map: "idx_chat_sessions_org_user_time")
|
|
827
|
+
@@index([organizationId, privacy, createdAt], map: "idx_chat_sessions_org_privacy_time")
|
|
828
|
+
@@map("chat_sessions")
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
model ChatMessage {
|
|
832
|
+
id String @id @default(uuid()) @db.Uuid
|
|
833
|
+
sessionId String @map("session_id") @db.Uuid
|
|
834
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
835
|
+
role String @db.VarChar(20)
|
|
836
|
+
content String @db.Text
|
|
837
|
+
contentClean String? @map("content_clean") @db.Text
|
|
838
|
+
model String? @db.VarChar(100)
|
|
839
|
+
providerId String? @map("provider_id") @db.Uuid
|
|
840
|
+
tokensIn Int? @map("tokens_in")
|
|
841
|
+
tokensOut Int? @map("tokens_out")
|
|
842
|
+
costCents Int? @map("cost_cents")
|
|
843
|
+
durationMs Int? @map("duration_ms")
|
|
844
|
+
piiDetected Boolean @default(false) @map("pii_detected")
|
|
845
|
+
piiReport Json? @map("pii_report")
|
|
846
|
+
contextNodeIds String[] @default([]) @map("context_node_ids")
|
|
847
|
+
documentIds String[] @default([]) @map("document_ids")
|
|
848
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
849
|
+
|
|
850
|
+
session ChatSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
|
|
851
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
852
|
+
|
|
853
|
+
@@index([sessionId, createdAt], map: "idx_chat_messages_session_time")
|
|
854
|
+
@@index([organizationId, createdAt], map: "idx_chat_messages_org_time")
|
|
855
|
+
@@map("chat_messages")
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
model OrgChatGuideline {
|
|
859
|
+
id String @id @default(uuid()) @db.Uuid
|
|
860
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
861
|
+
title String @db.VarChar(200)
|
|
862
|
+
content String @db.Text
|
|
863
|
+
priority Int @default(0)
|
|
864
|
+
enabled Boolean @default(true)
|
|
865
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
866
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
867
|
+
|
|
868
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
869
|
+
|
|
870
|
+
@@index([organizationId], map: "idx_org_chat_guidelines_org")
|
|
871
|
+
@@map("org_chat_guidelines")
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
model OrgPriorityDocument {
|
|
875
|
+
id String @id @default(uuid()) @db.Uuid
|
|
876
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
877
|
+
nodeId String @map("node_id") @db.Uuid
|
|
878
|
+
boostWeight Int @default(1) @map("boost_weight")
|
|
879
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
880
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
881
|
+
|
|
882
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
883
|
+
|
|
884
|
+
@@unique([organizationId, nodeId], map: "uq_org_priority_doc_org_node")
|
|
885
|
+
@@index([organizationId], map: "idx_org_priority_documents_org")
|
|
886
|
+
@@map("org_priority_documents")
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
model OrgContentPolicy {
|
|
890
|
+
id String @id @default(uuid()) @db.Uuid
|
|
891
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
892
|
+
name String @db.VarChar(200)
|
|
893
|
+
description String @default("") @db.Text
|
|
894
|
+
category String @db.VarChar(100)
|
|
895
|
+
keywords Json @default("[]")
|
|
896
|
+
action String @default("block") @db.VarChar(10)
|
|
897
|
+
enabled Boolean @default(true)
|
|
898
|
+
priority Int @default(0)
|
|
899
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
900
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
901
|
+
|
|
902
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
903
|
+
|
|
904
|
+
@@index([organizationId], map: "idx_org_content_policies_org")
|
|
905
|
+
@@map("org_content_policies")
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
model ContentPolicyLog {
|
|
909
|
+
id String @id @default(uuid()) @db.Uuid
|
|
910
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
911
|
+
policyId String @map("policy_id") @db.Uuid
|
|
912
|
+
policyName String @map("policy_name") @db.VarChar(200)
|
|
913
|
+
sessionId String? @map("session_id") @db.Uuid
|
|
914
|
+
userId String @map("user_id") @db.Uuid
|
|
915
|
+
action String @db.VarChar(10)
|
|
916
|
+
matchedKeyword String @map("matched_keyword") @db.VarChar(500)
|
|
917
|
+
userOverride Boolean @default(false) @map("user_override")
|
|
918
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
919
|
+
|
|
920
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
921
|
+
|
|
922
|
+
@@index([organizationId, createdAt], map: "idx_content_policy_logs_org_time")
|
|
923
|
+
@@index([policyId], map: "idx_content_policy_logs_policy")
|
|
924
|
+
@@map("content_policy_logs")
|
|
925
|
+
}
|