praisonai 1.0.19 → 1.1.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/agent/context.d.ts +68 -0
- package/dist/agent/context.js +119 -0
- package/dist/agent/enhanced.d.ts +92 -0
- package/dist/agent/enhanced.js +267 -0
- package/dist/agent/handoff.d.ts +82 -0
- package/dist/agent/handoff.js +124 -0
- package/dist/agent/router.d.ts +77 -0
- package/dist/agent/router.js +113 -0
- package/dist/agent/simple.js +1 -1
- package/dist/agent/types.js +2 -2
- package/dist/cli/index.d.ts +20 -0
- package/dist/cli/index.js +150 -0
- package/dist/db/index.d.ts +23 -0
- package/dist/db/index.js +72 -0
- package/dist/db/memory-adapter.d.ts +42 -0
- package/dist/db/memory-adapter.js +146 -0
- package/dist/db/types.d.ts +113 -0
- package/dist/db/types.js +5 -0
- package/dist/eval/index.d.ts +61 -0
- package/dist/eval/index.js +157 -0
- package/dist/guardrails/index.d.ts +82 -0
- package/dist/guardrails/index.js +202 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.js +72 -1
- package/dist/knowledge/rag.d.ts +80 -0
- package/dist/knowledge/rag.js +147 -0
- package/dist/llm/openai.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +33 -0
- package/dist/llm/providers/anthropic.js +291 -0
- package/dist/llm/providers/base.d.ts +25 -0
- package/dist/llm/providers/base.js +43 -0
- package/dist/llm/providers/google.d.ts +27 -0
- package/dist/llm/providers/google.js +275 -0
- package/dist/llm/providers/index.d.ts +43 -0
- package/dist/llm/providers/index.js +116 -0
- package/dist/llm/providers/openai.d.ts +18 -0
- package/dist/llm/providers/openai.js +203 -0
- package/dist/llm/providers/types.d.ts +94 -0
- package/dist/llm/providers/types.js +5 -0
- package/dist/observability/index.d.ts +86 -0
- package/dist/observability/index.js +166 -0
- package/dist/session/index.d.ts +111 -0
- package/dist/session/index.js +250 -0
- package/dist/skills/index.d.ts +70 -0
- package/dist/skills/index.js +233 -0
- package/dist/tools/decorator.d.ts +91 -0
- package/dist/tools/decorator.js +165 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/mcpSse.d.ts +41 -0
- package/dist/tools/mcpSse.js +108 -0
- package/dist/workflows/index.d.ts +97 -0
- package/dist/workflows/index.js +216 -0
- package/package.json +6 -2
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Guardrails - Input/output validation and safety checks
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.builtinGuardrails = exports.GuardrailManager = exports.Guardrail = void 0;
|
|
7
|
+
exports.guardrail = guardrail;
|
|
8
|
+
/**
|
|
9
|
+
* Guardrail class
|
|
10
|
+
*/
|
|
11
|
+
class Guardrail {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.name = config.name;
|
|
14
|
+
this.description = config.description || `Guardrail: ${config.name}`;
|
|
15
|
+
this.check = config.check;
|
|
16
|
+
this.onFail = config.onFail || 'block';
|
|
17
|
+
}
|
|
18
|
+
async run(content, context) {
|
|
19
|
+
try {
|
|
20
|
+
return await this.check(content, context);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
return {
|
|
24
|
+
status: 'failed',
|
|
25
|
+
message: `Guardrail error: ${error.message}`,
|
|
26
|
+
details: { error: error.message },
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.Guardrail = Guardrail;
|
|
32
|
+
/**
|
|
33
|
+
* Create a guardrail
|
|
34
|
+
*/
|
|
35
|
+
function guardrail(config) {
|
|
36
|
+
return new Guardrail(config);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Guardrail Manager - Run multiple guardrails
|
|
40
|
+
*/
|
|
41
|
+
class GuardrailManager {
|
|
42
|
+
constructor() {
|
|
43
|
+
this.guardrails = [];
|
|
44
|
+
}
|
|
45
|
+
add(g) {
|
|
46
|
+
this.guardrails.push(g);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
async runAll(content, context) {
|
|
50
|
+
const results = [];
|
|
51
|
+
let passed = true;
|
|
52
|
+
for (const g of this.guardrails) {
|
|
53
|
+
const result = await g.run(content, context);
|
|
54
|
+
results.push({ name: g.name, result });
|
|
55
|
+
if (result.status === 'failed') {
|
|
56
|
+
passed = false;
|
|
57
|
+
if (g.onFail === 'block') {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { passed, results };
|
|
63
|
+
}
|
|
64
|
+
get count() {
|
|
65
|
+
return this.guardrails.length;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.GuardrailManager = GuardrailManager;
|
|
69
|
+
/**
|
|
70
|
+
* Built-in guardrails
|
|
71
|
+
*/
|
|
72
|
+
exports.builtinGuardrails = {
|
|
73
|
+
/**
|
|
74
|
+
* Check for maximum length
|
|
75
|
+
*/
|
|
76
|
+
maxLength: (maxChars) => {
|
|
77
|
+
return guardrail({
|
|
78
|
+
name: 'max_length',
|
|
79
|
+
description: `Ensure content is under ${maxChars} characters`,
|
|
80
|
+
check: (content) => {
|
|
81
|
+
if (content.length > maxChars) {
|
|
82
|
+
return {
|
|
83
|
+
status: 'failed',
|
|
84
|
+
message: `Content exceeds maximum length of ${maxChars} characters`,
|
|
85
|
+
details: { length: content.length, max: maxChars },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { status: 'passed' };
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
/**
|
|
93
|
+
* Check for minimum length
|
|
94
|
+
*/
|
|
95
|
+
minLength: (minChars) => {
|
|
96
|
+
return guardrail({
|
|
97
|
+
name: 'min_length',
|
|
98
|
+
description: `Ensure content is at least ${minChars} characters`,
|
|
99
|
+
check: (content) => {
|
|
100
|
+
if (content.length < minChars) {
|
|
101
|
+
return {
|
|
102
|
+
status: 'failed',
|
|
103
|
+
message: `Content is below minimum length of ${minChars} characters`,
|
|
104
|
+
details: { length: content.length, min: minChars },
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return { status: 'passed' };
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* Check for blocked words
|
|
113
|
+
*/
|
|
114
|
+
blockedWords: (words) => {
|
|
115
|
+
return guardrail({
|
|
116
|
+
name: 'blocked_words',
|
|
117
|
+
description: 'Check for blocked words',
|
|
118
|
+
check: (content) => {
|
|
119
|
+
const lowerContent = content.toLowerCase();
|
|
120
|
+
const found = words.filter(w => lowerContent.includes(w.toLowerCase()));
|
|
121
|
+
if (found.length > 0) {
|
|
122
|
+
return {
|
|
123
|
+
status: 'failed',
|
|
124
|
+
message: `Content contains blocked words`,
|
|
125
|
+
details: { blockedWords: found },
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return { status: 'passed' };
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
/**
|
|
133
|
+
* Check for required words
|
|
134
|
+
*/
|
|
135
|
+
requiredWords: (words) => {
|
|
136
|
+
return guardrail({
|
|
137
|
+
name: 'required_words',
|
|
138
|
+
description: 'Check for required words',
|
|
139
|
+
check: (content) => {
|
|
140
|
+
const lowerContent = content.toLowerCase();
|
|
141
|
+
const missing = words.filter(w => !lowerContent.includes(w.toLowerCase()));
|
|
142
|
+
if (missing.length > 0) {
|
|
143
|
+
return {
|
|
144
|
+
status: 'failed',
|
|
145
|
+
message: `Content missing required words`,
|
|
146
|
+
details: { missingWords: missing },
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { status: 'passed' };
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
/**
|
|
154
|
+
* Regex pattern check
|
|
155
|
+
*/
|
|
156
|
+
pattern: (regex, mustMatch = true) => {
|
|
157
|
+
return guardrail({
|
|
158
|
+
name: 'pattern',
|
|
159
|
+
description: `Check content against pattern: ${regex}`,
|
|
160
|
+
check: (content) => {
|
|
161
|
+
const matches = regex.test(content);
|
|
162
|
+
if (mustMatch && !matches) {
|
|
163
|
+
return {
|
|
164
|
+
status: 'failed',
|
|
165
|
+
message: `Content does not match required pattern`,
|
|
166
|
+
details: { pattern: regex.toString() },
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (!mustMatch && matches) {
|
|
170
|
+
return {
|
|
171
|
+
status: 'failed',
|
|
172
|
+
message: `Content matches forbidden pattern`,
|
|
173
|
+
details: { pattern: regex.toString() },
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return { status: 'passed' };
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
/**
|
|
181
|
+
* JSON validity check
|
|
182
|
+
*/
|
|
183
|
+
validJson: () => {
|
|
184
|
+
return guardrail({
|
|
185
|
+
name: 'valid_json',
|
|
186
|
+
description: 'Ensure content is valid JSON',
|
|
187
|
+
check: (content) => {
|
|
188
|
+
try {
|
|
189
|
+
JSON.parse(content);
|
|
190
|
+
return { status: 'passed' };
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
return {
|
|
194
|
+
status: 'failed',
|
|
195
|
+
message: 'Content is not valid JSON',
|
|
196
|
+
details: { error: e.message },
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
},
|
|
202
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,19 @@ export * from './knowledge';
|
|
|
3
3
|
export * from './llm';
|
|
4
4
|
export * from './memory';
|
|
5
5
|
export * from './process';
|
|
6
|
-
export
|
|
6
|
+
export { Tool, BaseTool, FunctionTool, tool, ToolRegistry, getRegistry, registerTool, getTool, type ToolConfig, type ToolContext, type ToolParameters } from './tools';
|
|
7
|
+
export * from './tools/arxivTools';
|
|
8
|
+
export * from './tools/mcpSse';
|
|
9
|
+
export * from './session';
|
|
10
|
+
export * from './db';
|
|
11
|
+
export * from './workflows';
|
|
12
|
+
export * from './guardrails';
|
|
13
|
+
export { Handoff, handoff, handoffFilters, type HandoffConfig, type HandoffContext, type HandoffResult } from './agent/handoff';
|
|
14
|
+
export { RouterAgent, createRouter, routeConditions, type RouterConfig, type RouteConfig, type RouteContext } from './agent/router';
|
|
15
|
+
export { ContextAgent, createContextAgent, type ContextAgentConfig, type ContextMessage } from './agent/context';
|
|
16
|
+
export { KnowledgeBase, createKnowledgeBase, type Document, type SearchResult, type EmbeddingProvider, type KnowledgeBaseConfig } from './knowledge/rag';
|
|
17
|
+
export { accuracyEval, performanceEval, reliabilityEval, EvalSuite, type EvalResult, type PerformanceResult, type AccuracyEvalConfig, type PerformanceEvalConfig, type ReliabilityEvalConfig } from './eval';
|
|
18
|
+
export { MemoryObservabilityAdapter, ConsoleObservabilityAdapter, setObservabilityAdapter, getObservabilityAdapter, type ObservabilityAdapter, type TraceContext, type SpanContext, type SpanData, type TraceData } from './observability';
|
|
19
|
+
export { SkillManager, createSkillManager, parseSkillFile, type Skill, type SkillMetadata, type SkillDiscoveryOptions } from './skills';
|
|
20
|
+
export { chat, listProviders, version, help } from './cli';
|
|
21
|
+
export { createProvider, getDefaultProvider, parseModelString, isProviderAvailable, getAvailableProviders, OpenAIProvider, AnthropicProvider, GoogleProvider, BaseProvider, type LLMProvider, type ProviderConfig, type ProviderFactory, type GenerateTextOptions, type GenerateTextResult, type StreamTextOptions, type StreamChunk, type GenerateObjectOptions, type GenerateObjectResult, type TokenUsage, type Message as ProviderMessage, type ToolCall, type ToolDefinition as ProviderToolDefinition, } from './llm/providers';
|
package/dist/index.js
CHANGED
|
@@ -14,10 +14,81 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.BaseProvider = exports.GoogleProvider = exports.AnthropicProvider = exports.OpenAIProvider = exports.getAvailableProviders = exports.isProviderAvailable = exports.parseModelString = exports.getDefaultProvider = exports.createProvider = exports.help = exports.version = exports.listProviders = exports.chat = exports.parseSkillFile = exports.createSkillManager = exports.SkillManager = exports.getObservabilityAdapter = exports.setObservabilityAdapter = exports.ConsoleObservabilityAdapter = exports.MemoryObservabilityAdapter = exports.EvalSuite = exports.reliabilityEval = exports.performanceEval = exports.accuracyEval = exports.createKnowledgeBase = exports.KnowledgeBase = exports.createContextAgent = exports.ContextAgent = exports.routeConditions = exports.createRouter = exports.RouterAgent = exports.handoffFilters = exports.handoff = exports.Handoff = exports.getTool = exports.registerTool = exports.getRegistry = exports.ToolRegistry = exports.tool = exports.FunctionTool = exports.BaseTool = void 0;
|
|
17
18
|
// Export all public modules
|
|
18
19
|
__exportStar(require("./agent"), exports);
|
|
19
20
|
__exportStar(require("./knowledge"), exports);
|
|
20
21
|
__exportStar(require("./llm"), exports);
|
|
21
22
|
__exportStar(require("./memory"), exports);
|
|
22
23
|
__exportStar(require("./process"), exports);
|
|
23
|
-
|
|
24
|
+
// Export tools (excluding conflicting types)
|
|
25
|
+
var tools_1 = require("./tools");
|
|
26
|
+
Object.defineProperty(exports, "BaseTool", { enumerable: true, get: function () { return tools_1.BaseTool; } });
|
|
27
|
+
Object.defineProperty(exports, "FunctionTool", { enumerable: true, get: function () { return tools_1.FunctionTool; } });
|
|
28
|
+
Object.defineProperty(exports, "tool", { enumerable: true, get: function () { return tools_1.tool; } });
|
|
29
|
+
Object.defineProperty(exports, "ToolRegistry", { enumerable: true, get: function () { return tools_1.ToolRegistry; } });
|
|
30
|
+
Object.defineProperty(exports, "getRegistry", { enumerable: true, get: function () { return tools_1.getRegistry; } });
|
|
31
|
+
Object.defineProperty(exports, "registerTool", { enumerable: true, get: function () { return tools_1.registerTool; } });
|
|
32
|
+
Object.defineProperty(exports, "getTool", { enumerable: true, get: function () { return tools_1.getTool; } });
|
|
33
|
+
__exportStar(require("./tools/arxivTools"), exports);
|
|
34
|
+
__exportStar(require("./tools/mcpSse"), exports);
|
|
35
|
+
// Export session management
|
|
36
|
+
__exportStar(require("./session"), exports);
|
|
37
|
+
// Export database adapters
|
|
38
|
+
__exportStar(require("./db"), exports);
|
|
39
|
+
// Export workflows
|
|
40
|
+
__exportStar(require("./workflows"), exports);
|
|
41
|
+
// Export guardrails
|
|
42
|
+
__exportStar(require("./guardrails"), exports);
|
|
43
|
+
// Export handoff
|
|
44
|
+
var handoff_1 = require("./agent/handoff");
|
|
45
|
+
Object.defineProperty(exports, "Handoff", { enumerable: true, get: function () { return handoff_1.Handoff; } });
|
|
46
|
+
Object.defineProperty(exports, "handoff", { enumerable: true, get: function () { return handoff_1.handoff; } });
|
|
47
|
+
Object.defineProperty(exports, "handoffFilters", { enumerable: true, get: function () { return handoff_1.handoffFilters; } });
|
|
48
|
+
// Export router agent
|
|
49
|
+
var router_1 = require("./agent/router");
|
|
50
|
+
Object.defineProperty(exports, "RouterAgent", { enumerable: true, get: function () { return router_1.RouterAgent; } });
|
|
51
|
+
Object.defineProperty(exports, "createRouter", { enumerable: true, get: function () { return router_1.createRouter; } });
|
|
52
|
+
Object.defineProperty(exports, "routeConditions", { enumerable: true, get: function () { return router_1.routeConditions; } });
|
|
53
|
+
// Export context agent
|
|
54
|
+
var context_1 = require("./agent/context");
|
|
55
|
+
Object.defineProperty(exports, "ContextAgent", { enumerable: true, get: function () { return context_1.ContextAgent; } });
|
|
56
|
+
Object.defineProperty(exports, "createContextAgent", { enumerable: true, get: function () { return context_1.createContextAgent; } });
|
|
57
|
+
// Export knowledge base (RAG)
|
|
58
|
+
var rag_1 = require("./knowledge/rag");
|
|
59
|
+
Object.defineProperty(exports, "KnowledgeBase", { enumerable: true, get: function () { return rag_1.KnowledgeBase; } });
|
|
60
|
+
Object.defineProperty(exports, "createKnowledgeBase", { enumerable: true, get: function () { return rag_1.createKnowledgeBase; } });
|
|
61
|
+
// Export evaluation framework
|
|
62
|
+
var eval_1 = require("./eval");
|
|
63
|
+
Object.defineProperty(exports, "accuracyEval", { enumerable: true, get: function () { return eval_1.accuracyEval; } });
|
|
64
|
+
Object.defineProperty(exports, "performanceEval", { enumerable: true, get: function () { return eval_1.performanceEval; } });
|
|
65
|
+
Object.defineProperty(exports, "reliabilityEval", { enumerable: true, get: function () { return eval_1.reliabilityEval; } });
|
|
66
|
+
Object.defineProperty(exports, "EvalSuite", { enumerable: true, get: function () { return eval_1.EvalSuite; } });
|
|
67
|
+
// Export observability
|
|
68
|
+
var observability_1 = require("./observability");
|
|
69
|
+
Object.defineProperty(exports, "MemoryObservabilityAdapter", { enumerable: true, get: function () { return observability_1.MemoryObservabilityAdapter; } });
|
|
70
|
+
Object.defineProperty(exports, "ConsoleObservabilityAdapter", { enumerable: true, get: function () { return observability_1.ConsoleObservabilityAdapter; } });
|
|
71
|
+
Object.defineProperty(exports, "setObservabilityAdapter", { enumerable: true, get: function () { return observability_1.setObservabilityAdapter; } });
|
|
72
|
+
Object.defineProperty(exports, "getObservabilityAdapter", { enumerable: true, get: function () { return observability_1.getObservabilityAdapter; } });
|
|
73
|
+
// Export skills
|
|
74
|
+
var skills_1 = require("./skills");
|
|
75
|
+
Object.defineProperty(exports, "SkillManager", { enumerable: true, get: function () { return skills_1.SkillManager; } });
|
|
76
|
+
Object.defineProperty(exports, "createSkillManager", { enumerable: true, get: function () { return skills_1.createSkillManager; } });
|
|
77
|
+
Object.defineProperty(exports, "parseSkillFile", { enumerable: true, get: function () { return skills_1.parseSkillFile; } });
|
|
78
|
+
// Export CLI
|
|
79
|
+
var cli_1 = require("./cli");
|
|
80
|
+
Object.defineProperty(exports, "chat", { enumerable: true, get: function () { return cli_1.chat; } });
|
|
81
|
+
Object.defineProperty(exports, "listProviders", { enumerable: true, get: function () { return cli_1.listProviders; } });
|
|
82
|
+
Object.defineProperty(exports, "version", { enumerable: true, get: function () { return cli_1.version; } });
|
|
83
|
+
Object.defineProperty(exports, "help", { enumerable: true, get: function () { return cli_1.help; } });
|
|
84
|
+
// Export providers with explicit names to avoid conflicts
|
|
85
|
+
var providers_1 = require("./llm/providers");
|
|
86
|
+
Object.defineProperty(exports, "createProvider", { enumerable: true, get: function () { return providers_1.createProvider; } });
|
|
87
|
+
Object.defineProperty(exports, "getDefaultProvider", { enumerable: true, get: function () { return providers_1.getDefaultProvider; } });
|
|
88
|
+
Object.defineProperty(exports, "parseModelString", { enumerable: true, get: function () { return providers_1.parseModelString; } });
|
|
89
|
+
Object.defineProperty(exports, "isProviderAvailable", { enumerable: true, get: function () { return providers_1.isProviderAvailable; } });
|
|
90
|
+
Object.defineProperty(exports, "getAvailableProviders", { enumerable: true, get: function () { return providers_1.getAvailableProviders; } });
|
|
91
|
+
Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return providers_1.OpenAIProvider; } });
|
|
92
|
+
Object.defineProperty(exports, "AnthropicProvider", { enumerable: true, get: function () { return providers_1.AnthropicProvider; } });
|
|
93
|
+
Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return providers_1.GoogleProvider; } });
|
|
94
|
+
Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return providers_1.BaseProvider; } });
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base (RAG) - Retrieval Augmented Generation
|
|
3
|
+
*/
|
|
4
|
+
export interface Document {
|
|
5
|
+
id: string;
|
|
6
|
+
content: string;
|
|
7
|
+
metadata?: Record<string, any>;
|
|
8
|
+
embedding?: number[];
|
|
9
|
+
}
|
|
10
|
+
export interface SearchResult {
|
|
11
|
+
document: Document;
|
|
12
|
+
score: number;
|
|
13
|
+
}
|
|
14
|
+
export interface EmbeddingProvider {
|
|
15
|
+
embed(text: string): Promise<number[]>;
|
|
16
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
17
|
+
}
|
|
18
|
+
export interface KnowledgeBaseConfig {
|
|
19
|
+
embeddingProvider?: EmbeddingProvider;
|
|
20
|
+
similarityThreshold?: number;
|
|
21
|
+
maxResults?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Simple in-memory vector store for RAG
|
|
25
|
+
*/
|
|
26
|
+
export declare class KnowledgeBase {
|
|
27
|
+
private documents;
|
|
28
|
+
private embeddingProvider?;
|
|
29
|
+
private similarityThreshold;
|
|
30
|
+
private maxResults;
|
|
31
|
+
constructor(config?: KnowledgeBaseConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Add a document to the knowledge base
|
|
34
|
+
*/
|
|
35
|
+
add(doc: Omit<Document, 'embedding'>): Promise<Document>;
|
|
36
|
+
/**
|
|
37
|
+
* Add multiple documents
|
|
38
|
+
*/
|
|
39
|
+
addBatch(docs: Array<Omit<Document, 'embedding'>>): Promise<Document[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Get a document by ID
|
|
42
|
+
*/
|
|
43
|
+
get(id: string): Document | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Delete a document
|
|
46
|
+
*/
|
|
47
|
+
delete(id: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Search for similar documents
|
|
50
|
+
*/
|
|
51
|
+
search(query: string, limit?: number): Promise<SearchResult[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Simple text-based search fallback
|
|
54
|
+
*/
|
|
55
|
+
private textSearch;
|
|
56
|
+
/**
|
|
57
|
+
* Calculate cosine similarity between two vectors
|
|
58
|
+
*/
|
|
59
|
+
private cosineSimilarity;
|
|
60
|
+
/**
|
|
61
|
+
* Get all documents
|
|
62
|
+
*/
|
|
63
|
+
list(): Document[];
|
|
64
|
+
/**
|
|
65
|
+
* Clear all documents
|
|
66
|
+
*/
|
|
67
|
+
clear(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Get document count
|
|
70
|
+
*/
|
|
71
|
+
get size(): number;
|
|
72
|
+
/**
|
|
73
|
+
* Build context from search results for RAG
|
|
74
|
+
*/
|
|
75
|
+
buildContext(results: SearchResult[]): string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create a knowledge base
|
|
79
|
+
*/
|
|
80
|
+
export declare function createKnowledgeBase(config?: KnowledgeBaseConfig): KnowledgeBase;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Knowledge Base (RAG) - Retrieval Augmented Generation
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KnowledgeBase = void 0;
|
|
7
|
+
exports.createKnowledgeBase = createKnowledgeBase;
|
|
8
|
+
/**
|
|
9
|
+
* Simple in-memory vector store for RAG
|
|
10
|
+
*/
|
|
11
|
+
class KnowledgeBase {
|
|
12
|
+
constructor(config = {}) {
|
|
13
|
+
this.documents = new Map();
|
|
14
|
+
this.embeddingProvider = config.embeddingProvider;
|
|
15
|
+
this.similarityThreshold = config.similarityThreshold ?? 0.7;
|
|
16
|
+
this.maxResults = config.maxResults ?? 5;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Add a document to the knowledge base
|
|
20
|
+
*/
|
|
21
|
+
async add(doc) {
|
|
22
|
+
const document = { ...doc };
|
|
23
|
+
if (this.embeddingProvider) {
|
|
24
|
+
document.embedding = await this.embeddingProvider.embed(doc.content);
|
|
25
|
+
}
|
|
26
|
+
this.documents.set(doc.id, document);
|
|
27
|
+
return document;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Add multiple documents
|
|
31
|
+
*/
|
|
32
|
+
async addBatch(docs) {
|
|
33
|
+
if (this.embeddingProvider && docs.length > 0) {
|
|
34
|
+
const embeddings = await this.embeddingProvider.embedBatch(docs.map(d => d.content));
|
|
35
|
+
return Promise.all(docs.map(async (doc, i) => {
|
|
36
|
+
const document = { ...doc, embedding: embeddings[i] };
|
|
37
|
+
this.documents.set(doc.id, document);
|
|
38
|
+
return document;
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
return Promise.all(docs.map(doc => this.add(doc)));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get a document by ID
|
|
45
|
+
*/
|
|
46
|
+
get(id) {
|
|
47
|
+
return this.documents.get(id);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Delete a document
|
|
51
|
+
*/
|
|
52
|
+
delete(id) {
|
|
53
|
+
return this.documents.delete(id);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Search for similar documents
|
|
57
|
+
*/
|
|
58
|
+
async search(query, limit) {
|
|
59
|
+
const maxResults = limit ?? this.maxResults;
|
|
60
|
+
if (!this.embeddingProvider) {
|
|
61
|
+
// Fallback to simple text matching
|
|
62
|
+
return this.textSearch(query, maxResults);
|
|
63
|
+
}
|
|
64
|
+
const queryEmbedding = await this.embeddingProvider.embed(query);
|
|
65
|
+
const results = [];
|
|
66
|
+
for (const doc of this.documents.values()) {
|
|
67
|
+
if (doc.embedding) {
|
|
68
|
+
const score = this.cosineSimilarity(queryEmbedding, doc.embedding);
|
|
69
|
+
if (score >= this.similarityThreshold) {
|
|
70
|
+
results.push({ document: doc, score });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return results
|
|
75
|
+
.sort((a, b) => b.score - a.score)
|
|
76
|
+
.slice(0, maxResults);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Simple text-based search fallback
|
|
80
|
+
*/
|
|
81
|
+
textSearch(query, limit) {
|
|
82
|
+
const queryLower = query.toLowerCase();
|
|
83
|
+
const results = [];
|
|
84
|
+
for (const doc of this.documents.values()) {
|
|
85
|
+
const contentLower = doc.content.toLowerCase();
|
|
86
|
+
if (contentLower.includes(queryLower)) {
|
|
87
|
+
const score = queryLower.length / contentLower.length;
|
|
88
|
+
results.push({ document: doc, score: Math.min(score * 10, 1) });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return results
|
|
92
|
+
.sort((a, b) => b.score - a.score)
|
|
93
|
+
.slice(0, limit);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Calculate cosine similarity between two vectors
|
|
97
|
+
*/
|
|
98
|
+
cosineSimilarity(a, b) {
|
|
99
|
+
if (a.length !== b.length)
|
|
100
|
+
return 0;
|
|
101
|
+
let dotProduct = 0;
|
|
102
|
+
let normA = 0;
|
|
103
|
+
let normB = 0;
|
|
104
|
+
for (let i = 0; i < a.length; i++) {
|
|
105
|
+
dotProduct += a[i] * b[i];
|
|
106
|
+
normA += a[i] * a[i];
|
|
107
|
+
normB += b[i] * b[i];
|
|
108
|
+
}
|
|
109
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
110
|
+
return denominator === 0 ? 0 : dotProduct / denominator;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get all documents
|
|
114
|
+
*/
|
|
115
|
+
list() {
|
|
116
|
+
return Array.from(this.documents.values());
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Clear all documents
|
|
120
|
+
*/
|
|
121
|
+
clear() {
|
|
122
|
+
this.documents.clear();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get document count
|
|
126
|
+
*/
|
|
127
|
+
get size() {
|
|
128
|
+
return this.documents.size;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Build context from search results for RAG
|
|
132
|
+
*/
|
|
133
|
+
buildContext(results) {
|
|
134
|
+
if (results.length === 0)
|
|
135
|
+
return '';
|
|
136
|
+
return results
|
|
137
|
+
.map((r, i) => `[${i + 1}] ${r.document.content}`)
|
|
138
|
+
.join('\n\n');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.KnowledgeBase = KnowledgeBase;
|
|
142
|
+
/**
|
|
143
|
+
* Create a knowledge base
|
|
144
|
+
*/
|
|
145
|
+
function createKnowledgeBase(config) {
|
|
146
|
+
return new KnowledgeBase(config);
|
|
147
|
+
}
|
package/dist/llm/openai.js
CHANGED
|
@@ -73,7 +73,7 @@ async function getOpenAIClient() {
|
|
|
73
73
|
return openAIInstance;
|
|
74
74
|
}
|
|
75
75
|
class OpenAIService {
|
|
76
|
-
constructor(model = 'gpt-
|
|
76
|
+
constructor(model = 'gpt-5-nano') {
|
|
77
77
|
this.client = null;
|
|
78
78
|
this.model = model;
|
|
79
79
|
logger_1.Logger.debug(`OpenAIService initialized with model: ${model}`);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Provider - Implementation for Anthropic Claude API
|
|
3
|
+
*/
|
|
4
|
+
import { BaseProvider } from './base';
|
|
5
|
+
import type { ProviderConfig, GenerateTextOptions, GenerateTextResult, StreamTextOptions, StreamChunk, GenerateObjectOptions, GenerateObjectResult, Message, ToolDefinition } from './types';
|
|
6
|
+
interface AnthropicMessage {
|
|
7
|
+
role: 'user' | 'assistant';
|
|
8
|
+
content: string | Array<{
|
|
9
|
+
type: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
tool_use_id?: string;
|
|
12
|
+
content?: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
interface AnthropicTool {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
input_schema: Record<string, any>;
|
|
19
|
+
}
|
|
20
|
+
export declare class AnthropicProvider extends BaseProvider {
|
|
21
|
+
readonly providerId = "anthropic";
|
|
22
|
+
private apiKey;
|
|
23
|
+
private baseUrl;
|
|
24
|
+
constructor(modelId: string, config?: ProviderConfig);
|
|
25
|
+
generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;
|
|
26
|
+
streamText(options: StreamTextOptions): Promise<AsyncIterable<StreamChunk>>;
|
|
27
|
+
generateObject<T = any>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>>;
|
|
28
|
+
private extractSystemPrompt;
|
|
29
|
+
protected formatMessages(messages: Message[]): AnthropicMessage[];
|
|
30
|
+
protected formatTools(tools: ToolDefinition[]): AnthropicTool[];
|
|
31
|
+
private mapStopReason;
|
|
32
|
+
}
|
|
33
|
+
export {};
|