@elizaos/plugin-knowledge 1.2.0 → 1.2.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/README.md +1 -1
- package/dist/.vite/manifest.json +1 -1
- package/dist/assets/{index-DlOvU00u.js → index-YT4-1nM5.js} +38 -38
- package/dist/index.d.ts +42 -14
- package/dist/index.html +1 -1
- package/dist/index.js +67 -65
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -2,16 +2,8 @@ import { UUID, Plugin } from '@elizaos/core';
|
|
|
2
2
|
import z from 'zod';
|
|
3
3
|
|
|
4
4
|
declare const ModelConfigSchema: z.ZodObject<{
|
|
5
|
-
EMBEDDING_PROVIDER: z.ZodOptional<z.ZodEnum<
|
|
6
|
-
|
|
7
|
-
google: "google";
|
|
8
|
-
}>>;
|
|
9
|
-
TEXT_PROVIDER: z.ZodOptional<z.ZodEnum<{
|
|
10
|
-
openai: "openai";
|
|
11
|
-
google: "google";
|
|
12
|
-
anthropic: "anthropic";
|
|
13
|
-
openrouter: "openrouter";
|
|
14
|
-
}>>;
|
|
5
|
+
EMBEDDING_PROVIDER: z.ZodOptional<z.ZodEnum<["openai", "google"]>>;
|
|
6
|
+
TEXT_PROVIDER: z.ZodOptional<z.ZodEnum<["openai", "anthropic", "openrouter", "google"]>>;
|
|
15
7
|
OPENAI_API_KEY: z.ZodOptional<z.ZodString>;
|
|
16
8
|
ANTHROPIC_API_KEY: z.ZodOptional<z.ZodString>;
|
|
17
9
|
OPENROUTER_API_KEY: z.ZodOptional<z.ZodString>;
|
|
@@ -22,12 +14,48 @@ declare const ModelConfigSchema: z.ZodObject<{
|
|
|
22
14
|
GOOGLE_BASE_URL: z.ZodOptional<z.ZodString>;
|
|
23
15
|
TEXT_EMBEDDING_MODEL: z.ZodString;
|
|
24
16
|
TEXT_MODEL: z.ZodOptional<z.ZodString>;
|
|
25
|
-
MAX_INPUT_TOKENS: z.
|
|
26
|
-
MAX_OUTPUT_TOKENS: z.
|
|
27
|
-
EMBEDDING_DIMENSION: z.
|
|
17
|
+
MAX_INPUT_TOKENS: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, number, string | number>;
|
|
18
|
+
MAX_OUTPUT_TOKENS: z.ZodEffects<z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>, number, string | number | undefined>;
|
|
19
|
+
EMBEDDING_DIMENSION: z.ZodEffects<z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>, number, string | number | undefined>;
|
|
28
20
|
LOAD_DOCS_ON_STARTUP: z.ZodDefault<z.ZodBoolean>;
|
|
29
21
|
CTX_KNOWLEDGE_ENABLED: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
-
}, z.
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
TEXT_EMBEDDING_MODEL: string;
|
|
24
|
+
MAX_INPUT_TOKENS: number;
|
|
25
|
+
MAX_OUTPUT_TOKENS: number;
|
|
26
|
+
EMBEDDING_DIMENSION: number;
|
|
27
|
+
LOAD_DOCS_ON_STARTUP: boolean;
|
|
28
|
+
CTX_KNOWLEDGE_ENABLED: boolean;
|
|
29
|
+
EMBEDDING_PROVIDER?: "openai" | "google" | undefined;
|
|
30
|
+
TEXT_PROVIDER?: "openai" | "google" | "anthropic" | "openrouter" | undefined;
|
|
31
|
+
OPENAI_API_KEY?: string | undefined;
|
|
32
|
+
ANTHROPIC_API_KEY?: string | undefined;
|
|
33
|
+
OPENROUTER_API_KEY?: string | undefined;
|
|
34
|
+
GOOGLE_API_KEY?: string | undefined;
|
|
35
|
+
OPENAI_BASE_URL?: string | undefined;
|
|
36
|
+
ANTHROPIC_BASE_URL?: string | undefined;
|
|
37
|
+
OPENROUTER_BASE_URL?: string | undefined;
|
|
38
|
+
GOOGLE_BASE_URL?: string | undefined;
|
|
39
|
+
TEXT_MODEL?: string | undefined;
|
|
40
|
+
}, {
|
|
41
|
+
TEXT_EMBEDDING_MODEL: string;
|
|
42
|
+
MAX_INPUT_TOKENS: string | number;
|
|
43
|
+
EMBEDDING_PROVIDER?: "openai" | "google" | undefined;
|
|
44
|
+
TEXT_PROVIDER?: "openai" | "google" | "anthropic" | "openrouter" | undefined;
|
|
45
|
+
OPENAI_API_KEY?: string | undefined;
|
|
46
|
+
ANTHROPIC_API_KEY?: string | undefined;
|
|
47
|
+
OPENROUTER_API_KEY?: string | undefined;
|
|
48
|
+
GOOGLE_API_KEY?: string | undefined;
|
|
49
|
+
OPENAI_BASE_URL?: string | undefined;
|
|
50
|
+
ANTHROPIC_BASE_URL?: string | undefined;
|
|
51
|
+
OPENROUTER_BASE_URL?: string | undefined;
|
|
52
|
+
GOOGLE_BASE_URL?: string | undefined;
|
|
53
|
+
TEXT_MODEL?: string | undefined;
|
|
54
|
+
MAX_OUTPUT_TOKENS?: string | number | undefined;
|
|
55
|
+
EMBEDDING_DIMENSION?: string | number | undefined;
|
|
56
|
+
LOAD_DOCS_ON_STARTUP?: boolean | undefined;
|
|
57
|
+
CTX_KNOWLEDGE_ENABLED?: boolean | undefined;
|
|
58
|
+
}>;
|
|
31
59
|
type ModelConfig = z.infer<typeof ModelConfigSchema>;
|
|
32
60
|
/**
|
|
33
61
|
* Interface for provider rate limits
|
package/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Agent Plugin View</title>
|
|
8
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
+
<script type="module" crossorigin src="./assets/index-YT4-1nM5.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="./assets/index-B5VEkqpw.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/dist/index.js
CHANGED
|
@@ -792,7 +792,7 @@ async function generateText(runtime, prompt, system, overrideConfig) {
|
|
|
792
792
|
throw new Error(`Unsupported text provider: ${provider}`);
|
|
793
793
|
}
|
|
794
794
|
} catch (error) {
|
|
795
|
-
logger2.error(`[Document Processor] ${provider} ${modelName} error
|
|
795
|
+
logger2.error({ error }, `[Document Processor] ${provider} ${modelName} error`);
|
|
796
796
|
throw error;
|
|
797
797
|
}
|
|
798
798
|
}
|
|
@@ -2053,27 +2053,25 @@ function logKnowledgeGenerationSummary({
|
|
|
2053
2053
|
import { logger as logger5 } from "@elizaos/core";
|
|
2054
2054
|
import * as fs from "fs";
|
|
2055
2055
|
import * as path from "path";
|
|
2056
|
-
function getKnowledgePath() {
|
|
2057
|
-
const
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2056
|
+
function getKnowledgePath(runtimePath) {
|
|
2057
|
+
const knowledgePath = runtimePath || process.env.KNOWLEDGE_PATH || path.join(process.cwd(), "docs");
|
|
2058
|
+
const resolvedPath = path.resolve(knowledgePath);
|
|
2059
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
2060
|
+
logger5.warn(`Knowledge path does not exist: ${resolvedPath}`);
|
|
2061
|
+
if (runtimePath) {
|
|
2062
|
+
logger5.warn("Please create the directory or update KNOWLEDGE_PATH in agent settings");
|
|
2063
|
+
} else if (process.env.KNOWLEDGE_PATH) {
|
|
2062
2064
|
logger5.warn("Please create the directory or update KNOWLEDGE_PATH environment variable");
|
|
2065
|
+
} else {
|
|
2066
|
+
logger5.info("To use the knowledge plugin, either:");
|
|
2067
|
+
logger5.info('1. Create a "docs" folder in your project root');
|
|
2068
|
+
logger5.info("2. Set KNOWLEDGE_PATH in agent settings or environment variable");
|
|
2063
2069
|
}
|
|
2064
|
-
return resolvedPath;
|
|
2065
|
-
}
|
|
2066
|
-
const defaultPath = path.join(process.cwd(), "docs");
|
|
2067
|
-
if (!fs.existsSync(defaultPath)) {
|
|
2068
|
-
logger5.info(`Default docs folder does not exist at: ${defaultPath}`);
|
|
2069
|
-
logger5.info("To use the knowledge plugin, either:");
|
|
2070
|
-
logger5.info('1. Create a "docs" folder in your project root');
|
|
2071
|
-
logger5.info("2. Set KNOWLEDGE_PATH environment variable to your documents folder");
|
|
2072
2070
|
}
|
|
2073
|
-
return
|
|
2071
|
+
return resolvedPath;
|
|
2074
2072
|
}
|
|
2075
|
-
async function loadDocsFromPath(service, agentId, worldId) {
|
|
2076
|
-
const docsPath = getKnowledgePath();
|
|
2073
|
+
async function loadDocsFromPath(service, agentId, worldId, knowledgePath) {
|
|
2074
|
+
const docsPath = getKnowledgePath(knowledgePath);
|
|
2077
2075
|
if (!fs.existsSync(docsPath)) {
|
|
2078
2076
|
logger5.warn(`Knowledge path does not exist: ${docsPath}`);
|
|
2079
2077
|
return { total: 0, successful: 0, failed: 0 };
|
|
@@ -2117,7 +2115,7 @@ async function loadDocsFromPath(service, agentId, worldId) {
|
|
|
2117
2115
|
logger5.info(`\u2705 "${fileName}": ${result.fragmentCount} fragments created`);
|
|
2118
2116
|
successful++;
|
|
2119
2117
|
} catch (error) {
|
|
2120
|
-
logger5.error(`Failed to process file ${filePath}
|
|
2118
|
+
logger5.error({ error }, `Failed to process file ${filePath}`);
|
|
2121
2119
|
failed++;
|
|
2122
2120
|
}
|
|
2123
2121
|
}
|
|
@@ -2144,7 +2142,7 @@ function getAllFiles(dirPath, files = []) {
|
|
|
2144
2142
|
}
|
|
2145
2143
|
}
|
|
2146
2144
|
} catch (error) {
|
|
2147
|
-
logger5.error(`Error reading directory ${dirPath}
|
|
2145
|
+
logger5.error({ error }, `Error reading directory ${dirPath}`);
|
|
2148
2146
|
}
|
|
2149
2147
|
return files;
|
|
2150
2148
|
}
|
|
@@ -2282,7 +2280,14 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2282
2280
|
);
|
|
2283
2281
|
try {
|
|
2284
2282
|
await new Promise((resolve2) => setTimeout(resolve2, 1e3));
|
|
2285
|
-
const
|
|
2283
|
+
const knowledgePath = this.runtime.getSetting("KNOWLEDGE_PATH");
|
|
2284
|
+
const result = await loadDocsFromPath(
|
|
2285
|
+
this,
|
|
2286
|
+
this.runtime.agentId,
|
|
2287
|
+
void 0,
|
|
2288
|
+
// worldId
|
|
2289
|
+
knowledgePath
|
|
2290
|
+
);
|
|
2286
2291
|
if (result.successful > 0) {
|
|
2287
2292
|
logger6.info(
|
|
2288
2293
|
`KnowledgeService: Loaded ${result.successful} documents from docs folder on startup for agent ${this.runtime.agentId}`
|
|
@@ -2294,8 +2299,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2294
2299
|
}
|
|
2295
2300
|
} catch (error) {
|
|
2296
2301
|
logger6.error(
|
|
2297
|
-
|
|
2298
|
-
|
|
2302
|
+
{ error },
|
|
2303
|
+
`KnowledgeService: Error loading documents on startup for agent ${this.runtime.agentId}`
|
|
2299
2304
|
);
|
|
2300
2305
|
}
|
|
2301
2306
|
}
|
|
@@ -2355,13 +2360,13 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2355
2360
|
);
|
|
2356
2361
|
}
|
|
2357
2362
|
}
|
|
2358
|
-
logger6.
|
|
2359
|
-
logger6.
|
|
2363
|
+
logger6.info("Model configuration validated successfully.");
|
|
2364
|
+
logger6.info(`Knowledge Plugin initialized for agent: ${runtime.character.name}`);
|
|
2360
2365
|
logger6.info(
|
|
2361
2366
|
"Knowledge Plugin initialized. Frontend panel should be discoverable via its public route."
|
|
2362
2367
|
);
|
|
2363
2368
|
} catch (error) {
|
|
2364
|
-
logger6.error("Failed to initialize Knowledge plugin
|
|
2369
|
+
logger6.error({ error }, "Failed to initialize Knowledge plugin");
|
|
2365
2370
|
throw error;
|
|
2366
2371
|
}
|
|
2367
2372
|
const service = new _KnowledgeService(runtime);
|
|
@@ -2369,7 +2374,7 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2369
2374
|
if (service.config.LOAD_DOCS_ON_STARTUP) {
|
|
2370
2375
|
logger6.info("LOAD_DOCS_ON_STARTUP is enabled. Loading documents from docs folder...");
|
|
2371
2376
|
service.loadInitialDocuments().catch((error) => {
|
|
2372
|
-
logger6.error("Error during initial document loading in KnowledgeService
|
|
2377
|
+
logger6.error({ error }, "Error during initial document loading in KnowledgeService");
|
|
2373
2378
|
});
|
|
2374
2379
|
} else {
|
|
2375
2380
|
logger6.info("LOAD_DOCS_ON_STARTUP is disabled. Skipping automatic document loading.");
|
|
@@ -2383,8 +2388,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2383
2388
|
);
|
|
2384
2389
|
await service.processCharacterKnowledge(stringKnowledge).catch((err) => {
|
|
2385
2390
|
logger6.error(
|
|
2386
|
-
|
|
2387
|
-
|
|
2391
|
+
{ error: err },
|
|
2392
|
+
"KnowledgeService: Error processing character knowledge during startup"
|
|
2388
2393
|
);
|
|
2389
2394
|
});
|
|
2390
2395
|
} else {
|
|
@@ -2484,7 +2489,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2484
2489
|
fileBuffer = Buffer.from(content, "base64");
|
|
2485
2490
|
} catch (e) {
|
|
2486
2491
|
logger6.error(
|
|
2487
|
-
|
|
2492
|
+
{ error: e },
|
|
2493
|
+
`KnowledgeService: Failed to convert base64 to buffer for ${originalFilename}`
|
|
2488
2494
|
);
|
|
2489
2495
|
throw new Error(`Invalid base64 content for PDF file ${originalFilename}`);
|
|
2490
2496
|
}
|
|
@@ -2495,7 +2501,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2495
2501
|
fileBuffer = Buffer.from(content, "base64");
|
|
2496
2502
|
} catch (e) {
|
|
2497
2503
|
logger6.error(
|
|
2498
|
-
|
|
2504
|
+
{ error: e },
|
|
2505
|
+
`KnowledgeService: Failed to convert base64 to buffer for ${originalFilename}`
|
|
2499
2506
|
);
|
|
2500
2507
|
throw new Error(`Invalid base64 content for binary file ${originalFilename}`);
|
|
2501
2508
|
}
|
|
@@ -2515,9 +2522,7 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2515
2522
|
extractedText = decodedText;
|
|
2516
2523
|
documentContentToStore = decodedText;
|
|
2517
2524
|
} catch (e) {
|
|
2518
|
-
logger6.error(
|
|
2519
|
-
`Failed to decode base64 for ${originalFilename}: ${e instanceof Error ? e.message : String(e)}`
|
|
2520
|
-
);
|
|
2525
|
+
logger6.error({ error: e }, `Failed to decode base64 for ${originalFilename}`);
|
|
2521
2526
|
throw new Error(
|
|
2522
2527
|
`File ${originalFilename} appears to be corrupted or incorrectly encoded`
|
|
2523
2528
|
);
|
|
@@ -2588,15 +2593,15 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2588
2593
|
};
|
|
2589
2594
|
} catch (error) {
|
|
2590
2595
|
logger6.error(
|
|
2591
|
-
|
|
2592
|
-
|
|
2596
|
+
{ error, stack: error.stack },
|
|
2597
|
+
`KnowledgeService: Error processing document ${originalFilename}`
|
|
2593
2598
|
);
|
|
2594
2599
|
throw error;
|
|
2595
2600
|
}
|
|
2596
2601
|
}
|
|
2597
2602
|
// --- Knowledge methods moved from AgentRuntime ---
|
|
2598
2603
|
async handleProcessingError(error, context) {
|
|
2599
|
-
logger6.error(`KnowledgeService: Error ${context}
|
|
2604
|
+
logger6.error({ error }, `KnowledgeService: Error ${context}`);
|
|
2600
2605
|
throw error;
|
|
2601
2606
|
}
|
|
2602
2607
|
async checkExistingKnowledge(knowledgeId) {
|
|
@@ -2868,8 +2873,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2868
2873
|
fragmentsProcessed++;
|
|
2869
2874
|
} catch (error) {
|
|
2870
2875
|
logger6.error(
|
|
2871
|
-
|
|
2872
|
-
|
|
2876
|
+
{ error },
|
|
2877
|
+
`KnowledgeService: Error processing fragment ${fragment.id} for document ${item.id}`
|
|
2873
2878
|
);
|
|
2874
2879
|
}
|
|
2875
2880
|
}
|
|
@@ -2882,10 +2887,7 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2882
2887
|
await this.runtime.addEmbeddingToMemory(fragment);
|
|
2883
2888
|
await this.runtime.createMemory(fragment, "knowledge");
|
|
2884
2889
|
} catch (error) {
|
|
2885
|
-
logger6.error(
|
|
2886
|
-
`KnowledgeService: Error processing fragment ${fragment.id}:`,
|
|
2887
|
-
error instanceof Error ? error.message : String(error)
|
|
2888
|
-
);
|
|
2890
|
+
logger6.error({ error }, `KnowledgeService: Error processing fragment ${fragment.id}`);
|
|
2889
2891
|
throw error;
|
|
2890
2892
|
}
|
|
2891
2893
|
}
|
|
@@ -3486,7 +3488,7 @@ var KnowledgeTestSuite = class {
|
|
|
3486
3488
|
if (service.capabilityDescription !== "Provides Retrieval Augmented Generation capabilities, including knowledge upload and querying.") {
|
|
3487
3489
|
throw new Error("Incorrect service capability description");
|
|
3488
3490
|
}
|
|
3489
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3491
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3490
3492
|
const retrievedService = runtime.getService(KnowledgeService.serviceType);
|
|
3491
3493
|
if (retrievedService !== service) {
|
|
3492
3494
|
throw new Error("Service not properly registered with runtime");
|
|
@@ -3552,7 +3554,7 @@ var KnowledgeTestSuite = class {
|
|
|
3552
3554
|
name: "Should add knowledge successfully",
|
|
3553
3555
|
fn: async (runtime) => {
|
|
3554
3556
|
const service = await KnowledgeService.start(runtime);
|
|
3555
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3557
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3556
3558
|
const testDocument = {
|
|
3557
3559
|
clientDocumentId: v4_default(),
|
|
3558
3560
|
contentType: "text/plain",
|
|
@@ -3583,7 +3585,7 @@ var KnowledgeTestSuite = class {
|
|
|
3583
3585
|
name: "Should handle duplicate document uploads",
|
|
3584
3586
|
fn: async (runtime) => {
|
|
3585
3587
|
const service = await KnowledgeService.start(runtime);
|
|
3586
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3588
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3587
3589
|
const testDocument = {
|
|
3588
3590
|
clientDocumentId: v4_default(),
|
|
3589
3591
|
contentType: "text/plain",
|
|
@@ -3609,7 +3611,7 @@ var KnowledgeTestSuite = class {
|
|
|
3609
3611
|
name: "Should retrieve knowledge based on query",
|
|
3610
3612
|
fn: async (runtime) => {
|
|
3611
3613
|
const service = await KnowledgeService.start(runtime);
|
|
3612
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3614
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3613
3615
|
const testDocument = {
|
|
3614
3616
|
clientDocumentId: v4_default(),
|
|
3615
3617
|
contentType: "text/plain",
|
|
@@ -3647,7 +3649,7 @@ var KnowledgeTestSuite = class {
|
|
|
3647
3649
|
name: "Should format knowledge in provider output",
|
|
3648
3650
|
fn: async (runtime) => {
|
|
3649
3651
|
const service = await KnowledgeService.start(runtime);
|
|
3650
|
-
runtime.services.set("knowledge", service);
|
|
3652
|
+
runtime.services.set("knowledge", [service]);
|
|
3651
3653
|
const testDocument = {
|
|
3652
3654
|
clientDocumentId: v4_default(),
|
|
3653
3655
|
contentType: "text/plain",
|
|
@@ -3741,7 +3743,7 @@ var KnowledgeTestSuite = class {
|
|
|
3741
3743
|
name: "Should handle and log errors appropriately",
|
|
3742
3744
|
fn: async (runtime) => {
|
|
3743
3745
|
const service = await KnowledgeService.start(runtime);
|
|
3744
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3746
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3745
3747
|
mockLogger.clearCalls();
|
|
3746
3748
|
try {
|
|
3747
3749
|
await service.addKnowledge({
|
|
@@ -3788,8 +3790,8 @@ var KnowledgeTestSuite = class {
|
|
|
3788
3790
|
runtime
|
|
3789
3791
|
);
|
|
3790
3792
|
const service = await KnowledgeService.start(runtime);
|
|
3791
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3792
|
-
runtime.services.set("knowledge", service);
|
|
3793
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3794
|
+
runtime.services.set("knowledge", [service]);
|
|
3793
3795
|
runtime.registerProvider(knowledgeProvider);
|
|
3794
3796
|
const document = {
|
|
3795
3797
|
clientDocumentId: v4_default(),
|
|
@@ -3842,7 +3844,7 @@ var KnowledgeTestSuite = class {
|
|
|
3842
3844
|
name: "Should handle large documents with chunking",
|
|
3843
3845
|
fn: async (runtime) => {
|
|
3844
3846
|
const service = await KnowledgeService.start(runtime);
|
|
3845
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3847
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3846
3848
|
const largeContent = Array(100).fill(
|
|
3847
3849
|
"This is a paragraph of text that will be repeated many times to create a large document for testing chunking functionality. "
|
|
3848
3850
|
).join("\n\n");
|
|
@@ -4045,7 +4047,7 @@ var processKnowledgeAction = {
|
|
|
4045
4047
|
await callback(response);
|
|
4046
4048
|
}
|
|
4047
4049
|
} catch (error) {
|
|
4048
|
-
logger8.error("Error in PROCESS_KNOWLEDGE action
|
|
4050
|
+
logger8.error({ error }, "Error in PROCESS_KNOWLEDGE action");
|
|
4049
4051
|
const errorResponse = {
|
|
4050
4052
|
text: `I encountered an error while processing the knowledge: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
4051
4053
|
};
|
|
@@ -4136,7 +4138,7 @@ ${formattedResults}`
|
|
|
4136
4138
|
await callback(response);
|
|
4137
4139
|
}
|
|
4138
4140
|
} catch (error) {
|
|
4139
|
-
logger8.error("Error in SEARCH_KNOWLEDGE action
|
|
4141
|
+
logger8.error({ error }, "Error in SEARCH_KNOWLEDGE action");
|
|
4140
4142
|
const errorResponse = {
|
|
4141
4143
|
text: `I encountered an error while searching the knowledge base: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
4142
4144
|
};
|
|
@@ -4200,7 +4202,7 @@ var cleanupFile = (filePath) => {
|
|
|
4200
4202
|
try {
|
|
4201
4203
|
fs4.unlinkSync(filePath);
|
|
4202
4204
|
} catch (error) {
|
|
4203
|
-
logger9.error(`Error cleaning up file ${filePath}
|
|
4205
|
+
logger9.error({ error }, `Error cleaning up file ${filePath}`);
|
|
4204
4206
|
}
|
|
4205
4207
|
}
|
|
4206
4208
|
};
|
|
@@ -4406,7 +4408,7 @@ async function uploadKnowledgeHandler(req, res, runtime) {
|
|
|
4406
4408
|
sendSuccess(res, results);
|
|
4407
4409
|
}
|
|
4408
4410
|
} catch (error) {
|
|
4409
|
-
logger9.error("[Document Processor] \u274C Error processing knowledge
|
|
4411
|
+
logger9.error({ error }, "[Document Processor] \u274C Error processing knowledge");
|
|
4410
4412
|
if (hasUploadedFiles) {
|
|
4411
4413
|
cleanupFiles(req.files);
|
|
4412
4414
|
}
|
|
@@ -4460,7 +4462,7 @@ async function getKnowledgeDocumentsHandler(req, res, runtime) {
|
|
|
4460
4462
|
totalRequested: fileUrls ? fileUrls.length : 0
|
|
4461
4463
|
});
|
|
4462
4464
|
} catch (error) {
|
|
4463
|
-
logger9.error("[Document Processor] \u274C Error retrieving documents
|
|
4465
|
+
logger9.error({ error }, "[Document Processor] \u274C Error retrieving documents");
|
|
4464
4466
|
sendError(res, 500, "RETRIEVAL_ERROR", "Failed to retrieve documents", error.message);
|
|
4465
4467
|
}
|
|
4466
4468
|
}
|
|
@@ -4487,7 +4489,7 @@ async function deleteKnowledgeDocumentHandler(req, res, runtime) {
|
|
|
4487
4489
|
logger9.info(`[Document Processor] \u2705 Successfully deleted document: ${typedKnowledgeId}`);
|
|
4488
4490
|
sendSuccess(res, null, 204);
|
|
4489
4491
|
} catch (error) {
|
|
4490
|
-
logger9.error(`[Document Processor] \u274C Error deleting document ${knowledgeId}
|
|
4492
|
+
logger9.error({ error }, `[Document Processor] \u274C Error deleting document ${knowledgeId}`);
|
|
4491
4493
|
sendError(res, 500, "DELETE_ERROR", "Failed to delete document", error.message);
|
|
4492
4494
|
}
|
|
4493
4495
|
}
|
|
@@ -4525,7 +4527,7 @@ async function getKnowledgeByIdHandler(req, res, runtime) {
|
|
|
4525
4527
|
};
|
|
4526
4528
|
sendSuccess(res, { document: cleanDocument });
|
|
4527
4529
|
} catch (error) {
|
|
4528
|
-
logger9.error(`[Document Processor] \u274C Error retrieving document ${knowledgeId}
|
|
4530
|
+
logger9.error({ error }, `[Document Processor] \u274C Error retrieving document ${knowledgeId}`);
|
|
4529
4531
|
sendError(res, 500, "RETRIEVAL_ERROR", "Failed to retrieve document", error.message);
|
|
4530
4532
|
}
|
|
4531
4533
|
}
|
|
@@ -4569,7 +4571,7 @@ async function knowledgePanelHandler(req, res, runtime) {
|
|
|
4569
4571
|
}
|
|
4570
4572
|
}
|
|
4571
4573
|
} catch (manifestError) {
|
|
4572
|
-
logger9.error("[Document Processor] \u274C Error reading manifest
|
|
4574
|
+
logger9.error({ error: manifestError }, "[Document Processor] \u274C Error reading manifest");
|
|
4573
4575
|
}
|
|
4574
4576
|
}
|
|
4575
4577
|
logger9.debug(`[Document Processor] \u{1F310} Using fallback with CSS: ${cssFile}, JS: ${jsFile}`);
|
|
@@ -4606,7 +4608,7 @@ async function knowledgePanelHandler(req, res, runtime) {
|
|
|
4606
4608
|
res.end(html);
|
|
4607
4609
|
}
|
|
4608
4610
|
} catch (error) {
|
|
4609
|
-
logger9.error("[Document Processor] \u274C Error serving frontend
|
|
4611
|
+
logger9.error({ error }, "[Document Processor] \u274C Error serving frontend");
|
|
4610
4612
|
sendError(res, 500, "FRONTEND_ERROR", "Failed to load knowledge panel", error.message);
|
|
4611
4613
|
}
|
|
4612
4614
|
}
|
|
@@ -4645,7 +4647,7 @@ async function frontendAssetHandler(req, res, runtime) {
|
|
|
4645
4647
|
sendError(res, 404, "NOT_FOUND", `Asset not found: ${req.url}`);
|
|
4646
4648
|
}
|
|
4647
4649
|
} catch (error) {
|
|
4648
|
-
logger9.error(`[Document Processor] \u274C Error serving asset ${req.url}
|
|
4650
|
+
logger9.error({ error }, `[Document Processor] \u274C Error serving asset ${req.url}`);
|
|
4649
4651
|
sendError(res, 500, "ASSET_ERROR", `Failed to load asset ${req.url}`, error.message);
|
|
4650
4652
|
}
|
|
4651
4653
|
}
|
|
@@ -4706,7 +4708,7 @@ async function getKnowledgeChunksHandler(req, res, runtime) {
|
|
|
4706
4708
|
}
|
|
4707
4709
|
});
|
|
4708
4710
|
} catch (error) {
|
|
4709
|
-
logger9.error("[Document Processor] \u274C Error retrieving chunks
|
|
4711
|
+
logger9.error({ error }, "[Document Processor] \u274C Error retrieving chunks");
|
|
4710
4712
|
sendError(res, 500, "RETRIEVAL_ERROR", "Failed to retrieve knowledge chunks", error.message);
|
|
4711
4713
|
}
|
|
4712
4714
|
}
|
|
@@ -4787,7 +4789,7 @@ async function searchKnowledgeHandler(req, res, runtime) {
|
|
|
4787
4789
|
count: enhancedResults.length
|
|
4788
4790
|
});
|
|
4789
4791
|
} catch (error) {
|
|
4790
|
-
logger9.error("[Document Processor] \u274C Error searching knowledge
|
|
4792
|
+
logger9.error({ error }, "[Document Processor] \u274C Error searching knowledge");
|
|
4791
4793
|
sendError(res, 500, "SEARCH_ERROR", "Failed to search knowledge", error.message);
|
|
4792
4794
|
}
|
|
4793
4795
|
}
|
|
@@ -4799,7 +4801,7 @@ async function uploadKnowledgeWithMulter(req, res, runtime) {
|
|
|
4799
4801
|
);
|
|
4800
4802
|
uploadArray(req, res, (err) => {
|
|
4801
4803
|
if (err) {
|
|
4802
|
-
logger9.error("[Document Processor] \u274C File upload error
|
|
4804
|
+
logger9.error({ error: err }, "[Document Processor] \u274C File upload error");
|
|
4803
4805
|
return sendError(res, 400, "UPLOAD_ERROR", err.message);
|
|
4804
4806
|
}
|
|
4805
4807
|
uploadKnowledgeHandler(req, res, runtime);
|