agent-orcha 0.0.1
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/LICENSE +21 -0
- package/README.md +917 -0
- package/bin/cli.js +2 -0
- package/dist/lib/agents/agent-executor.d.ts +13 -0
- package/dist/lib/agents/agent-executor.d.ts.map +1 -0
- package/dist/lib/agents/agent-executor.js +158 -0
- package/dist/lib/agents/agent-executor.js.map +1 -0
- package/dist/lib/agents/agent-loader.d.ts +13 -0
- package/dist/lib/agents/agent-loader.d.ts.map +1 -0
- package/dist/lib/agents/agent-loader.js +39 -0
- package/dist/lib/agents/agent-loader.js.map +1 -0
- package/dist/lib/agents/index.d.ts +5 -0
- package/dist/lib/agents/index.d.ts.map +1 -0
- package/dist/lib/agents/index.js +4 -0
- package/dist/lib/agents/index.js.map +1 -0
- package/dist/lib/agents/types.d.ts +140 -0
- package/dist/lib/agents/types.d.ts.map +1 -0
- package/dist/lib/agents/types.js +28 -0
- package/dist/lib/agents/types.js.map +1 -0
- package/dist/lib/functions/function-loader.d.ts +30 -0
- package/dist/lib/functions/function-loader.d.ts.map +1 -0
- package/dist/lib/functions/function-loader.js +107 -0
- package/dist/lib/functions/function-loader.js.map +1 -0
- package/dist/lib/functions/index.d.ts +3 -0
- package/dist/lib/functions/index.d.ts.map +1 -0
- package/dist/lib/functions/index.js +2 -0
- package/dist/lib/functions/index.js.map +1 -0
- package/dist/lib/functions/simple-function-wrapper.d.ts +33 -0
- package/dist/lib/functions/simple-function-wrapper.d.ts.map +1 -0
- package/dist/lib/functions/simple-function-wrapper.js +66 -0
- package/dist/lib/functions/simple-function-wrapper.js.map +1 -0
- package/dist/lib/index.d.ts +16 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +17 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/llm/index.d.ts +6 -0
- package/dist/lib/llm/index.d.ts.map +1 -0
- package/dist/lib/llm/index.js +4 -0
- package/dist/lib/llm/index.js.map +1 -0
- package/dist/lib/llm/llm-config.d.ts +138 -0
- package/dist/lib/llm/llm-config.d.ts.map +1 -0
- package/dist/lib/llm/llm-config.js +75 -0
- package/dist/lib/llm/llm-config.js.map +1 -0
- package/dist/lib/llm/llm-factory.d.ts +30 -0
- package/dist/lib/llm/llm-factory.d.ts.map +1 -0
- package/dist/lib/llm/llm-factory.js +103 -0
- package/dist/lib/llm/llm-factory.js.map +1 -0
- package/dist/lib/llm/provider-detector.d.ts +12 -0
- package/dist/lib/llm/provider-detector.d.ts.map +1 -0
- package/dist/lib/llm/provider-detector.js +46 -0
- package/dist/lib/llm/provider-detector.js.map +1 -0
- package/dist/lib/llm/types.d.ts +19 -0
- package/dist/lib/llm/types.d.ts.map +1 -0
- package/dist/lib/llm/types.js +18 -0
- package/dist/lib/llm/types.js.map +1 -0
- package/dist/lib/logger.d.ts +43 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +113 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/mcp/index.d.ts +4 -0
- package/dist/lib/mcp/index.d.ts.map +1 -0
- package/dist/lib/mcp/index.js +3 -0
- package/dist/lib/mcp/index.js.map +1 -0
- package/dist/lib/mcp/mcp-client.d.ts +17 -0
- package/dist/lib/mcp/mcp-client.d.ts.map +1 -0
- package/dist/lib/mcp/mcp-client.js +166 -0
- package/dist/lib/mcp/mcp-client.js.map +1 -0
- package/dist/lib/mcp/types.d.ts +146 -0
- package/dist/lib/mcp/types.d.ts.map +1 -0
- package/dist/lib/mcp/types.js +24 -0
- package/dist/lib/mcp/types.js.map +1 -0
- package/dist/lib/orchestrator.d.ts +64 -0
- package/dist/lib/orchestrator.d.ts.map +1 -0
- package/dist/lib/orchestrator.js +201 -0
- package/dist/lib/orchestrator.js.map +1 -0
- package/dist/lib/tools/built-in/index.d.ts +2 -0
- package/dist/lib/tools/built-in/index.d.ts.map +1 -0
- package/dist/lib/tools/built-in/index.js +2 -0
- package/dist/lib/tools/built-in/index.js.map +1 -0
- package/dist/lib/tools/built-in/vector-search.tool.d.ts +4 -0
- package/dist/lib/tools/built-in/vector-search.tool.d.ts.map +1 -0
- package/dist/lib/tools/built-in/vector-search.tool.js +26 -0
- package/dist/lib/tools/built-in/vector-search.tool.js.map +1 -0
- package/dist/lib/tools/index.d.ts +3 -0
- package/dist/lib/tools/index.d.ts.map +1 -0
- package/dist/lib/tools/index.js +3 -0
- package/dist/lib/tools/index.js.map +1 -0
- package/dist/lib/tools/tool-registry.d.ts +20 -0
- package/dist/lib/tools/tool-registry.d.ts.map +1 -0
- package/dist/lib/tools/tool-registry.js +76 -0
- package/dist/lib/tools/tool-registry.js.map +1 -0
- package/dist/lib/vectors/index.d.ts +5 -0
- package/dist/lib/vectors/index.d.ts.map +1 -0
- package/dist/lib/vectors/index.js +4 -0
- package/dist/lib/vectors/index.js.map +1 -0
- package/dist/lib/vectors/types.d.ts +212 -0
- package/dist/lib/vectors/types.d.ts.map +1 -0
- package/dist/lib/vectors/types.js +39 -0
- package/dist/lib/vectors/types.js.map +1 -0
- package/dist/lib/vectors/vector-store-factory.d.ts +14 -0
- package/dist/lib/vectors/vector-store-factory.d.ts.map +1 -0
- package/dist/lib/vectors/vector-store-factory.js +350 -0
- package/dist/lib/vectors/vector-store-factory.js.map +1 -0
- package/dist/lib/vectors/vector-store-manager.d.ts +18 -0
- package/dist/lib/vectors/vector-store-manager.d.ts.map +1 -0
- package/dist/lib/vectors/vector-store-manager.js +79 -0
- package/dist/lib/vectors/vector-store-manager.js.map +1 -0
- package/dist/lib/workflows/index.d.ts +5 -0
- package/dist/lib/workflows/index.d.ts.map +1 -0
- package/dist/lib/workflows/index.js +4 -0
- package/dist/lib/workflows/index.js.map +1 -0
- package/dist/lib/workflows/types.d.ts +630 -0
- package/dist/lib/workflows/types.d.ts.map +1 -0
- package/dist/lib/workflows/types.js +51 -0
- package/dist/lib/workflows/types.js.map +1 -0
- package/dist/lib/workflows/workflow-executor.d.ts +22 -0
- package/dist/lib/workflows/workflow-executor.d.ts.map +1 -0
- package/dist/lib/workflows/workflow-executor.js +276 -0
- package/dist/lib/workflows/workflow-executor.js.map +1 -0
- package/dist/lib/workflows/workflow-loader.d.ts +13 -0
- package/dist/lib/workflows/workflow-loader.d.ts.map +1 -0
- package/dist/lib/workflows/workflow-loader.js +39 -0
- package/dist/lib/workflows/workflow-loader.js.map +1 -0
- package/dist/public/index.html +762 -0
- package/dist/src/cli/commands/init.d.ts +2 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +108 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/start.d.ts +3 -0
- package/dist/src/cli/commands/start.d.ts.map +1 -0
- package/dist/src/cli/commands/start.js +114 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +59 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +62 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/routes/agents.route.d.ts +3 -0
- package/dist/src/routes/agents.route.d.ts.map +1 -0
- package/dist/src/routes/agents.route.js +58 -0
- package/dist/src/routes/agents.route.js.map +1 -0
- package/dist/src/routes/llm.route.d.ts +3 -0
- package/dist/src/routes/llm.route.d.ts.map +1 -0
- package/dist/src/routes/llm.route.js +97 -0
- package/dist/src/routes/llm.route.js.map +1 -0
- package/dist/src/routes/vectors.route.d.ts +3 -0
- package/dist/src/routes/vectors.route.d.ts.map +1 -0
- package/dist/src/routes/vectors.route.js +74 -0
- package/dist/src/routes/vectors.route.js.map +1 -0
- package/dist/src/routes/workflows.route.d.ts +3 -0
- package/dist/src/routes/workflows.route.d.ts.map +1 -0
- package/dist/src/routes/workflows.route.js +58 -0
- package/dist/src/routes/workflows.route.js.map +1 -0
- package/dist/src/server.d.ts +9 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +34 -0
- package/dist/src/server.js.map +1 -0
- package/dist/templates/.env.example +6 -0
- package/dist/templates/README.md +234 -0
- package/dist/templates/agents/example.agent.yaml +32 -0
- package/dist/templates/agents/knowledge.agent.yaml +36 -0
- package/dist/templates/agents/math.agent.yaml +38 -0
- package/dist/templates/agents/time.agent.yaml +42 -0
- package/dist/templates/functions/README.md +195 -0
- package/dist/templates/functions/fibonacci.function.js +55 -0
- package/dist/templates/llm.json +44 -0
- package/dist/templates/mcp.json +18 -0
- package/dist/templates/vectors/example-chroma.vector.yaml +43 -0
- package/dist/templates/vectors/example.vector.yaml +28 -0
- package/dist/templates/vectors/sample-data/example-document.txt +15 -0
- package/dist/templates/workflows/example.workflow.yaml +79 -0
- package/package.json +77 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const SourceConfigSchema = z.object({
|
|
3
|
+
type: z.enum(['directory', 'file', 'url', 'database']),
|
|
4
|
+
path: z.string().describe('Path to source (relative to project root)'),
|
|
5
|
+
pattern: z.string().optional(),
|
|
6
|
+
recursive: z.boolean().default(true),
|
|
7
|
+
});
|
|
8
|
+
export const LoaderConfigSchema = z.object({
|
|
9
|
+
type: z.enum(['text', 'pdf', 'csv', 'json', 'markdown']).default('text'),
|
|
10
|
+
options: z.record(z.unknown()).optional(),
|
|
11
|
+
});
|
|
12
|
+
export const SplitterConfigSchema = z.object({
|
|
13
|
+
type: z.enum(['character', 'recursive', 'token', 'markdown']).default('character'),
|
|
14
|
+
chunkSize: z.number().default(1000),
|
|
15
|
+
chunkOverlap: z.number().default(200),
|
|
16
|
+
separator: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
// Embedding is now just a reference to a config name in llm.json
|
|
19
|
+
export const EmbeddingRefSchema = z.string().default('default');
|
|
20
|
+
export const StoreConfigSchema = z.object({
|
|
21
|
+
type: z.enum(['memory', 'chroma', 'pinecone', 'qdrant']).default('memory'),
|
|
22
|
+
options: z.record(z.unknown()).optional(),
|
|
23
|
+
});
|
|
24
|
+
export const SearchConfigSchema = z.object({
|
|
25
|
+
defaultK: z.number().default(4),
|
|
26
|
+
scoreThreshold: z.number().optional(),
|
|
27
|
+
});
|
|
28
|
+
export const VectorConfigSchema = z.object({
|
|
29
|
+
name: z.string().describe('Unique vector store identifier'),
|
|
30
|
+
description: z.string().describe('Human-readable description'),
|
|
31
|
+
source: SourceConfigSchema,
|
|
32
|
+
loader: LoaderConfigSchema,
|
|
33
|
+
splitter: SplitterConfigSchema,
|
|
34
|
+
embedding: EmbeddingRefSchema,
|
|
35
|
+
store: StoreConfigSchema,
|
|
36
|
+
search: SearchConfigSchema.optional(),
|
|
37
|
+
metadata: z.record(z.unknown()).optional(),
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/vectors/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACxE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAClF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC9D,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE,oBAAoB;IAC9B,SAAS,EAAE,kBAAkB;IAC7B,KAAK,EAAE,iBAAiB;IACxB,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { VectorConfig, VectorStoreInstance } from './types.js';
|
|
2
|
+
export declare class VectorStoreFactory {
|
|
3
|
+
static create(config: VectorConfig, projectRoot: string): Promise<VectorStoreInstance>;
|
|
4
|
+
private static loadDocuments;
|
|
5
|
+
private static createLoader;
|
|
6
|
+
private static splitDocuments;
|
|
7
|
+
private static createEmbeddings;
|
|
8
|
+
/**
|
|
9
|
+
* Wraps embeddings with validation and optional EOS token support
|
|
10
|
+
*/
|
|
11
|
+
private static wrapWithValidation;
|
|
12
|
+
private static createStore;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=vector-store-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store-factory.d.ts","sourceRoot":"","sources":["../../../lib/vectors/vector-store-factory.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAA+B,MAAM,YAAY,CAAC;AAQjG,qBAAa,kBAAkB;WAChB,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;mBA4JvE,aAAa;IAwBlC,OAAO,CAAC,MAAM,CAAC,YAAY;mBAeN,cAAc;IAcnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiD/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;mBAsEZ,WAAW;CAuCjC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';
|
|
2
|
+
import { Chroma } from '@langchain/community/vectorstores/chroma';
|
|
3
|
+
import { OpenAIEmbeddings } from '@langchain/openai';
|
|
4
|
+
import { GoogleGenerativeAIEmbeddings } from '@langchain/google-genai';
|
|
5
|
+
import { TextLoader } from '@langchain/classic/document_loaders/fs/text';
|
|
6
|
+
import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
|
|
7
|
+
import { CSVLoader } from '@langchain/community/document_loaders/fs/csv';
|
|
8
|
+
import { JSONLoader } from '@langchain/classic/document_loaders/fs/json';
|
|
9
|
+
import { CharacterTextSplitter, RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
|
|
10
|
+
import { glob } from 'glob';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { getEmbeddingConfig } from '../llm/llm-config.js';
|
|
13
|
+
import { detectProvider } from '../llm/provider-detector.js';
|
|
14
|
+
import { createLogger } from '../logger.js';
|
|
15
|
+
const logger = createLogger('VectorFactory');
|
|
16
|
+
const searchLogger = createLogger('VectorSearch');
|
|
17
|
+
export class VectorStoreFactory {
|
|
18
|
+
static async create(config, projectRoot) {
|
|
19
|
+
logger.info(`Loading documents for "${config.name}"...`);
|
|
20
|
+
const documents = await this.loadDocuments(config, projectRoot);
|
|
21
|
+
logger.info(`Loaded ${documents.length} document(s)`);
|
|
22
|
+
const splitDocs = await this.splitDocuments(config, documents);
|
|
23
|
+
logger.info(`Split into ${splitDocs.length} chunk(s)`);
|
|
24
|
+
const embeddingConfigName = config.embedding;
|
|
25
|
+
logger.info(`Using embedding config: "${embeddingConfigName}"`);
|
|
26
|
+
const embeddings = this.createEmbeddings(embeddingConfigName);
|
|
27
|
+
// Test embeddings to ensure they work correctly
|
|
28
|
+
if (splitDocs.length > 0) {
|
|
29
|
+
const testDoc = splitDocs[0];
|
|
30
|
+
if (!testDoc) {
|
|
31
|
+
throw new Error('First document is undefined');
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const testText = testDoc.pageContent.substring(0, 100);
|
|
35
|
+
const testEmbedding = await embeddings.embedQuery(testText);
|
|
36
|
+
if (!testEmbedding || testEmbedding.length === 0 || testEmbedding.some(v => !isFinite(v))) {
|
|
37
|
+
throw new Error(`Embedding test failed: returned invalid values`);
|
|
38
|
+
}
|
|
39
|
+
logger.info(`Embedding test successful (dimension: ${testEmbedding.length})`);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
43
|
+
logger.error(`Embedding test failed: ${errorMessage}`);
|
|
44
|
+
throw new Error(`Failed to create embeddings for vector store "${config.name}": ${errorMessage}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
logger.info(`Building vector store...`);
|
|
48
|
+
const store = await this.createStore(config, splitDocs, embeddings, projectRoot);
|
|
49
|
+
logger.info(`Vector store "${config.name}" ready`);
|
|
50
|
+
return {
|
|
51
|
+
config,
|
|
52
|
+
search: async (query, k) => {
|
|
53
|
+
const numResults = k ?? config.search?.defaultK ?? 4;
|
|
54
|
+
searchLogger.info(`Searching "${config.name}" for: "${query.substring(0, 50)}..." (k=${numResults})`);
|
|
55
|
+
try {
|
|
56
|
+
// Expand short queries - some embedding models struggle with very short or terse text
|
|
57
|
+
// Expand if less than 30 chars or less than 4 words to ensure better embedding quality
|
|
58
|
+
let searchQuery = query.trim();
|
|
59
|
+
const wordCount = searchQuery.split(/\s+/).filter(w => w.length > 0).length;
|
|
60
|
+
if (searchQuery.length < 30 || wordCount < 4) {
|
|
61
|
+
searchLogger.warn(`Query is short (${searchQuery.length} chars, ${wordCount} words), expanding with context`);
|
|
62
|
+
// Add context based on the vector store description to make query more descriptive
|
|
63
|
+
const storeContext = config.description
|
|
64
|
+
? `${config.description.toLowerCase()} information about`
|
|
65
|
+
: 'information about';
|
|
66
|
+
searchQuery = `${storeContext} ${searchQuery}`;
|
|
67
|
+
searchLogger.info(`Expanded query: "${searchQuery}"`);
|
|
68
|
+
}
|
|
69
|
+
// Note: We validate the embedding here for diagnostics, but MemoryVectorStore
|
|
70
|
+
// will embed the query again internally. If our validation fails but the store's
|
|
71
|
+
// embedding works, we'll still get results.
|
|
72
|
+
let queryEmbedding = null;
|
|
73
|
+
try {
|
|
74
|
+
queryEmbedding = await embeddings.embedQuery(searchQuery);
|
|
75
|
+
if (queryEmbedding && queryEmbedding.length > 0) {
|
|
76
|
+
const invalidValues = queryEmbedding.filter(v => !isFinite(v));
|
|
77
|
+
const isZeroVector = queryEmbedding.every(v => v === 0);
|
|
78
|
+
if (invalidValues.length > 0) {
|
|
79
|
+
searchLogger.warn(`Validation embedding contains ${invalidValues.length} invalid values (NaN/Inf) - proceeding with search`);
|
|
80
|
+
}
|
|
81
|
+
else if (isZeroVector) {
|
|
82
|
+
searchLogger.warn(`Validation embedding is a zero vector for query: "${searchQuery}"`);
|
|
83
|
+
// Try with original query if we expanded it
|
|
84
|
+
if (searchQuery !== query) {
|
|
85
|
+
searchLogger.warn(`Trying original query instead`);
|
|
86
|
+
try {
|
|
87
|
+
const originalEmbedding = await embeddings.embedQuery(query);
|
|
88
|
+
if (originalEmbedding && originalEmbedding.length > 0 && !originalEmbedding.every(v => v === 0)) {
|
|
89
|
+
searchQuery = query;
|
|
90
|
+
queryEmbedding = originalEmbedding;
|
|
91
|
+
searchLogger.info(`Original query embedding successful`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
// Keep using expanded query
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
searchLogger.warn(`Proceeding with search - MemoryVectorStore will embed the query internally`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const norm = Math.sqrt(queryEmbedding.reduce((sum, v) => sum + v * v, 0));
|
|
102
|
+
searchLogger.info(`Query validation successful (dimension: ${queryEmbedding.length}, norm: ${norm.toFixed(3)})`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
searchLogger.warn(`Validation embedding returned empty array - proceeding with search`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (embedError) {
|
|
110
|
+
const embedErrorMessage = embedError instanceof Error ? embedError.message : String(embedError);
|
|
111
|
+
searchLogger.warn(`Query validation embedding failed: ${embedErrorMessage} - proceeding with search anyway`);
|
|
112
|
+
// Don't return - let MemoryVectorStore try embedding internally
|
|
113
|
+
}
|
|
114
|
+
// MemoryVectorStore will embed the query internally using its stored embeddings instance
|
|
115
|
+
// Use the query that worked best (original or expanded)
|
|
116
|
+
const results = await store.similaritySearchWithScore(searchQuery, numResults);
|
|
117
|
+
// Filter out NaN scores and log warnings with more details
|
|
118
|
+
const validResults = results.filter(([doc, score]) => {
|
|
119
|
+
if (isNaN(score) || !isFinite(score)) {
|
|
120
|
+
searchLogger.warn(`Invalid score detected: ${score} for document: "${doc.pageContent.substring(0, 50)}..."`);
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
});
|
|
125
|
+
searchLogger.info(`Raw results: ${results.length}, valid: ${validResults.length}, scores: ${validResults.map(([, s]) => s.toFixed(3)).join(', ')}`);
|
|
126
|
+
// If all results have NaN scores, this indicates the embedding API failed
|
|
127
|
+
// Try a fallback: return all documents with a low score so the agent at least gets some context
|
|
128
|
+
if (validResults.length === 0 && results.length > 0) {
|
|
129
|
+
searchLogger.error(`All results have invalid scores - embedding API may be failing`);
|
|
130
|
+
searchLogger.error(`This is a critical issue - returning empty results. Check embedding API at ${config.embedding}`);
|
|
131
|
+
// Return empty - the agent will need to handle this
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const threshold = config.search?.scoreThreshold;
|
|
135
|
+
const filtered = validResults.filter(([, score]) => {
|
|
136
|
+
if (threshold === undefined)
|
|
137
|
+
return true;
|
|
138
|
+
return score >= threshold;
|
|
139
|
+
});
|
|
140
|
+
searchLogger.info(`After threshold (${threshold ?? 'none'}): ${filtered.length} result(s)`);
|
|
141
|
+
return filtered.map(([doc, score]) => ({
|
|
142
|
+
content: doc.pageContent,
|
|
143
|
+
metadata: doc.metadata,
|
|
144
|
+
score,
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
149
|
+
searchLogger.error(`Error during search: ${errorMessage}`, error);
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
addDocuments: async (docs) => {
|
|
154
|
+
const langchainDocs = docs.map((d) => ({
|
|
155
|
+
pageContent: d.content,
|
|
156
|
+
metadata: d.metadata ?? {},
|
|
157
|
+
}));
|
|
158
|
+
await store.addDocuments(langchainDocs);
|
|
159
|
+
},
|
|
160
|
+
refresh: async () => {
|
|
161
|
+
const newDocs = await this.loadDocuments(config, projectRoot);
|
|
162
|
+
const splitNewDocs = await this.splitDocuments(config, newDocs);
|
|
163
|
+
await store.addDocuments(splitNewDocs);
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
static async loadDocuments(config, projectRoot) {
|
|
168
|
+
const sourcePath = path.join(projectRoot, config.source.path);
|
|
169
|
+
if (config.source.type === 'directory') {
|
|
170
|
+
const pattern = config.source.pattern ?? '*';
|
|
171
|
+
logger.info(`Searching for files in: ${sourcePath}`);
|
|
172
|
+
logger.info(`Using pattern: ${pattern}`);
|
|
173
|
+
const files = await glob(pattern, { cwd: sourcePath, absolute: true });
|
|
174
|
+
logger.info(`Found ${files.length} file(s):`, files.map(f => path.basename(f)));
|
|
175
|
+
const allDocs = [];
|
|
176
|
+
for (const file of files) {
|
|
177
|
+
const loader = this.createLoader(config.loader.type, file);
|
|
178
|
+
const docs = await loader.load();
|
|
179
|
+
logger.info(`Loaded ${docs.length} doc(s) from ${path.basename(file)}`);
|
|
180
|
+
allDocs.push(...docs);
|
|
181
|
+
}
|
|
182
|
+
return allDocs;
|
|
183
|
+
}
|
|
184
|
+
const loader = this.createLoader(config.loader.type, sourcePath);
|
|
185
|
+
return loader.load();
|
|
186
|
+
}
|
|
187
|
+
static createLoader(type, filePath) {
|
|
188
|
+
switch (type) {
|
|
189
|
+
case 'pdf':
|
|
190
|
+
return new PDFLoader(filePath);
|
|
191
|
+
case 'csv':
|
|
192
|
+
return new CSVLoader(filePath);
|
|
193
|
+
case 'json':
|
|
194
|
+
return new JSONLoader(filePath);
|
|
195
|
+
case 'text':
|
|
196
|
+
case 'markdown':
|
|
197
|
+
default:
|
|
198
|
+
return new TextLoader(filePath);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
static async splitDocuments(config, documents) {
|
|
202
|
+
const splitterConfig = {
|
|
203
|
+
chunkSize: config.splitter.chunkSize,
|
|
204
|
+
chunkOverlap: config.splitter.chunkOverlap,
|
|
205
|
+
separator: config.splitter.separator,
|
|
206
|
+
};
|
|
207
|
+
const splitter = config.splitter.type === 'recursive'
|
|
208
|
+
? new RecursiveCharacterTextSplitter(splitterConfig)
|
|
209
|
+
: new CharacterTextSplitter(splitterConfig);
|
|
210
|
+
return splitter.splitDocuments(documents);
|
|
211
|
+
}
|
|
212
|
+
static createEmbeddings(configName) {
|
|
213
|
+
const embeddingConfig = getEmbeddingConfig(configName);
|
|
214
|
+
const provider = detectProvider(embeddingConfig);
|
|
215
|
+
const eosToken = embeddingConfig.eosToken;
|
|
216
|
+
logger.info(`Embedding model: ${embeddingConfig.model} (provider: ${provider})${embeddingConfig.baseUrl ? `, URL: ${embeddingConfig.baseUrl}` : ''}`);
|
|
217
|
+
if (eosToken) {
|
|
218
|
+
logger.info(`Using EOS token: "${eosToken}"`);
|
|
219
|
+
}
|
|
220
|
+
let baseEmbeddings;
|
|
221
|
+
switch (provider) {
|
|
222
|
+
case 'gemini':
|
|
223
|
+
logger.info('Creating Gemini embeddings');
|
|
224
|
+
baseEmbeddings = new GoogleGenerativeAIEmbeddings({
|
|
225
|
+
modelName: embeddingConfig.model,
|
|
226
|
+
apiKey: embeddingConfig.apiKey,
|
|
227
|
+
});
|
|
228
|
+
break;
|
|
229
|
+
case 'openai':
|
|
230
|
+
case 'local':
|
|
231
|
+
case 'anthropic':
|
|
232
|
+
default: {
|
|
233
|
+
const openAIConfig = {
|
|
234
|
+
modelName: embeddingConfig.model,
|
|
235
|
+
openAIApiKey: embeddingConfig.apiKey,
|
|
236
|
+
configuration: embeddingConfig.baseUrl ? { baseURL: embeddingConfig.baseUrl } : undefined,
|
|
237
|
+
// CRITICAL: Force float encoding to get number arrays instead of base64 strings
|
|
238
|
+
// LM Studio and other local servers need this to return valid embeddings
|
|
239
|
+
encodingFormat: 'float',
|
|
240
|
+
};
|
|
241
|
+
// Add dimensions if specified
|
|
242
|
+
if (embeddingConfig.dimensions) {
|
|
243
|
+
openAIConfig.dimensions = embeddingConfig.dimensions;
|
|
244
|
+
}
|
|
245
|
+
logger.info(`Creating OpenAI-compatible embeddings (encoding: float)${embeddingConfig.dimensions ? ` (dimensions: ${embeddingConfig.dimensions})` : ''}`);
|
|
246
|
+
baseEmbeddings = new OpenAIEmbeddings(openAIConfig);
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Wrap embeddings to add validation and EOS token support
|
|
251
|
+
return this.wrapWithValidation(baseEmbeddings, eosToken);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Wraps embeddings with validation and optional EOS token support
|
|
255
|
+
*/
|
|
256
|
+
static wrapWithValidation(embeddings, eosToken) {
|
|
257
|
+
const appendToken = (text) => {
|
|
258
|
+
if (!eosToken)
|
|
259
|
+
return text;
|
|
260
|
+
// Only append if not already present
|
|
261
|
+
if (text.endsWith(eosToken)) {
|
|
262
|
+
return text;
|
|
263
|
+
}
|
|
264
|
+
return `${text}${eosToken}`;
|
|
265
|
+
};
|
|
266
|
+
const validateEmbedding = (result, context) => {
|
|
267
|
+
if (!Array.isArray(result) || result.length === 0) {
|
|
268
|
+
throw new Error(`${context}: Embedding returned invalid format - expected array of numbers, got ${typeof result}`);
|
|
269
|
+
}
|
|
270
|
+
if (result.some(v => typeof v !== 'number')) {
|
|
271
|
+
throw new Error(`${context}: Embedding contains non-numeric values`);
|
|
272
|
+
}
|
|
273
|
+
if (result.some(v => !isFinite(v))) {
|
|
274
|
+
throw new Error(`${context}: Embedding contains NaN or Infinity values`);
|
|
275
|
+
}
|
|
276
|
+
// Check for zero vector (usually indicates API failure)
|
|
277
|
+
const isZeroVector = result.every(v => v === 0);
|
|
278
|
+
if (isZeroVector) {
|
|
279
|
+
throw new Error(`${context}: Embedding returned a zero vector - API may have failed or returned invalid data`);
|
|
280
|
+
}
|
|
281
|
+
return result;
|
|
282
|
+
};
|
|
283
|
+
const validateEmbeddings = (result, context) => {
|
|
284
|
+
if (!Array.isArray(result)) {
|
|
285
|
+
throw new Error(`${context}: Embedding returned invalid format - expected array of arrays`);
|
|
286
|
+
}
|
|
287
|
+
return result.map((embedding, idx) => validateEmbedding(embedding, `${context}[${idx}]`));
|
|
288
|
+
};
|
|
289
|
+
// Store original methods
|
|
290
|
+
const originalEmbedQuery = embeddings.embedQuery.bind(embeddings);
|
|
291
|
+
const originalEmbedDocuments = embeddings.embedDocuments.bind(embeddings);
|
|
292
|
+
// Override with validation
|
|
293
|
+
embeddings.embedQuery = async (text) => {
|
|
294
|
+
try {
|
|
295
|
+
const processedText = appendToken(text);
|
|
296
|
+
const result = await originalEmbedQuery(processedText);
|
|
297
|
+
return validateEmbedding(result, 'embedQuery');
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
301
|
+
logger.error(`Embedding query failed for text: "${text.substring(0, 50)}..."`);
|
|
302
|
+
logger.error(`Error: ${errorMessage}`);
|
|
303
|
+
throw new Error(`Embedding query failed: ${errorMessage}`);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
embeddings.embedDocuments = async (texts) => {
|
|
307
|
+
try {
|
|
308
|
+
const processedTexts = texts.map(appendToken);
|
|
309
|
+
const result = await originalEmbedDocuments(processedTexts);
|
|
310
|
+
return validateEmbeddings(result, 'embedDocuments');
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
314
|
+
logger.error(`Embedding documents failed for ${texts.length} text(s)`);
|
|
315
|
+
logger.error(`Error: ${errorMessage}`);
|
|
316
|
+
throw new Error(`Embedding documents failed: ${errorMessage}`);
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
return embeddings;
|
|
320
|
+
}
|
|
321
|
+
static async createStore(config, docs, embeddings, projectRoot) {
|
|
322
|
+
switch (config.store.type) {
|
|
323
|
+
case 'chroma': {
|
|
324
|
+
const chromaPath = config.store.options?.path
|
|
325
|
+
? path.resolve(projectRoot, config.store.options.path)
|
|
326
|
+
: path.resolve(projectRoot, '.chroma');
|
|
327
|
+
const collectionName = config.store.options?.collectionName ?? config.name;
|
|
328
|
+
const url = config.store.options?.url ?? 'http://localhost:8000';
|
|
329
|
+
logger.info(`Using Chroma at ${url} (collection: ${collectionName}, path: ${chromaPath})`);
|
|
330
|
+
return Chroma.fromDocuments(docs, embeddings, {
|
|
331
|
+
collectionName,
|
|
332
|
+
url,
|
|
333
|
+
collectionMetadata: {
|
|
334
|
+
'hnsw:space': 'cosine',
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
case 'memory':
|
|
339
|
+
return MemoryVectorStore.fromDocuments(docs, embeddings);
|
|
340
|
+
case 'pinecone':
|
|
341
|
+
case 'qdrant':
|
|
342
|
+
logger.warn(`Store type "${config.store.type}" not yet implemented, falling back to memory`);
|
|
343
|
+
return MemoryVectorStore.fromDocuments(docs, embeddings);
|
|
344
|
+
default:
|
|
345
|
+
logger.warn(`Unknown store type "${config.store.type}", falling back to memory`);
|
|
346
|
+
return MemoryVectorStore.fromDocuments(docs, embeddings);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=vector-store-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store-factory.js","sourceRoot":"","sources":["../../../lib/vectors/vector-store-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type VectorConfig, type VectorStoreInstance } from './types.js';
|
|
2
|
+
export declare class VectorStoreManager {
|
|
3
|
+
private vectorsDir;
|
|
4
|
+
private projectRoot;
|
|
5
|
+
private stores;
|
|
6
|
+
private configs;
|
|
7
|
+
constructor(vectorsDir: string, projectRoot: string);
|
|
8
|
+
loadAll(): Promise<void>;
|
|
9
|
+
loadOne(filePath: string): Promise<VectorConfig>;
|
|
10
|
+
initialize(name: string): Promise<VectorStoreInstance>;
|
|
11
|
+
initializeAll(): Promise<void>;
|
|
12
|
+
get(name: string): VectorStoreInstance | undefined;
|
|
13
|
+
getConfig(name: string): VectorConfig | undefined;
|
|
14
|
+
list(): VectorStoreInstance[];
|
|
15
|
+
listConfigs(): VectorConfig[];
|
|
16
|
+
refresh(name: string): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=vector-store-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store-manager.d.ts","sourceRoot":"","sources":["../../../lib/vectors/vector-store-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAM7F,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,OAAO,CAAwC;gBAE3C,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAK7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASxB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0BtD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIlD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,IAAI,IAAI,mBAAmB,EAAE;IAI7B,WAAW,IAAI,YAAY,EAAE;IAIvB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3C"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
import { VectorConfigSchema } from './types.js';
|
|
6
|
+
import { VectorStoreFactory } from './vector-store-factory.js';
|
|
7
|
+
import { createLogger } from '../logger.js';
|
|
8
|
+
const logger = createLogger('VectorStore');
|
|
9
|
+
export class VectorStoreManager {
|
|
10
|
+
vectorsDir;
|
|
11
|
+
projectRoot;
|
|
12
|
+
stores = new Map();
|
|
13
|
+
configs = new Map();
|
|
14
|
+
constructor(vectorsDir, projectRoot) {
|
|
15
|
+
this.vectorsDir = vectorsDir;
|
|
16
|
+
this.projectRoot = projectRoot;
|
|
17
|
+
}
|
|
18
|
+
async loadAll() {
|
|
19
|
+
const files = await glob('**/*.vector.yaml', { cwd: this.vectorsDir });
|
|
20
|
+
for (const file of files) {
|
|
21
|
+
const filePath = path.join(this.vectorsDir, file);
|
|
22
|
+
await this.loadOne(filePath);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async loadOne(filePath) {
|
|
26
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
27
|
+
const parsed = parseYaml(content);
|
|
28
|
+
const config = VectorConfigSchema.parse(parsed);
|
|
29
|
+
this.configs.set(config.name, config);
|
|
30
|
+
return config;
|
|
31
|
+
}
|
|
32
|
+
async initialize(name) {
|
|
33
|
+
const existing = this.stores.get(name);
|
|
34
|
+
if (existing) {
|
|
35
|
+
logger.info(`"${name}" already initialized`);
|
|
36
|
+
return existing;
|
|
37
|
+
}
|
|
38
|
+
const config = this.configs.get(name);
|
|
39
|
+
if (!config) {
|
|
40
|
+
throw new Error(`Vector config not found: ${name}`);
|
|
41
|
+
}
|
|
42
|
+
logger.info(`Initializing "${name}"...`);
|
|
43
|
+
logger.info(`Source: ${config.source.path}, Pattern: ${config.source.pattern || '*'}`);
|
|
44
|
+
try {
|
|
45
|
+
const store = await VectorStoreFactory.create(config, this.projectRoot);
|
|
46
|
+
this.stores.set(name, store);
|
|
47
|
+
logger.info(`"${name}" initialized successfully`);
|
|
48
|
+
return store;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
logger.error(`Failed to initialize "${name}":`, error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async initializeAll() {
|
|
56
|
+
for (const name of this.configs.keys()) {
|
|
57
|
+
await this.initialize(name);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
get(name) {
|
|
61
|
+
return this.stores.get(name);
|
|
62
|
+
}
|
|
63
|
+
getConfig(name) {
|
|
64
|
+
return this.configs.get(name);
|
|
65
|
+
}
|
|
66
|
+
list() {
|
|
67
|
+
return Array.from(this.stores.values());
|
|
68
|
+
}
|
|
69
|
+
listConfigs() {
|
|
70
|
+
return Array.from(this.configs.values());
|
|
71
|
+
}
|
|
72
|
+
async refresh(name) {
|
|
73
|
+
const store = this.stores.get(name);
|
|
74
|
+
if (store) {
|
|
75
|
+
await store.refresh();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=vector-store-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store-manager.js","sourceRoot":"","sources":["../../../lib/vectors/vector-store-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAA+C,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAE3C,MAAM,OAAO,kBAAkB;IACrB,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,MAAM,GAAqC,IAAI,GAAG,EAAE,CAAC;IACrD,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEvD,YAAY,UAAkB,EAAE,WAAmB;QACjD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,uBAAuB,CAAC,CAAC;YAC7C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QAEvF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,4BAA4B,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { WorkflowLoader } from './workflow-loader.js';
|
|
2
|
+
export { WorkflowExecutor } from './workflow-executor.js';
|
|
3
|
+
export { WorkflowDefinitionSchema, WorkflowStepSchema, InputMappingSchema, RetryConfigSchema, StepOutputSchema, ParallelStepsSchema, InputFieldSchema, WorkflowConfigSchema, } from './types.js';
|
|
4
|
+
export type { WorkflowDefinition, WorkflowStep, InputMapping, RetryConfig, StepOutput, ParallelSteps, InputField, WorkflowConfig, WorkflowContext, WorkflowResult, StepResult, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/workflows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { WorkflowLoader } from './workflow-loader.js';
|
|
2
|
+
export { WorkflowExecutor } from './workflow-executor.js';
|
|
3
|
+
export { WorkflowDefinitionSchema, WorkflowStepSchema, InputMappingSchema, RetryConfigSchema, StepOutputSchema, ParallelStepsSchema, InputFieldSchema, WorkflowConfigSchema, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/workflows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
|