cogniscrape 1.0.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/LICENSE +21 -0
- package/README.md +308 -0
- package/dist/graphs/AbstractGraph.d.ts +27 -0
- package/dist/graphs/AbstractGraph.d.ts.map +1 -0
- package/dist/graphs/AbstractGraph.js +44 -0
- package/dist/graphs/AbstractGraph.js.map +1 -0
- package/dist/graphs/BaseGraph.d.ts +30 -0
- package/dist/graphs/BaseGraph.d.ts.map +1 -0
- package/dist/graphs/BaseGraph.js +62 -0
- package/dist/graphs/BaseGraph.js.map +1 -0
- package/dist/graphs/CSVScraperGraph.d.ts +16 -0
- package/dist/graphs/CSVScraperGraph.d.ts.map +1 -0
- package/dist/graphs/CSVScraperGraph.js +84 -0
- package/dist/graphs/CSVScraperGraph.js.map +1 -0
- package/dist/graphs/DepthSearchGraph.d.ts +14 -0
- package/dist/graphs/DepthSearchGraph.d.ts.map +1 -0
- package/dist/graphs/DepthSearchGraph.js +45 -0
- package/dist/graphs/DepthSearchGraph.js.map +1 -0
- package/dist/graphs/JSONScraperGraph.d.ts +18 -0
- package/dist/graphs/JSONScraperGraph.d.ts.map +1 -0
- package/dist/graphs/JSONScraperGraph.js +100 -0
- package/dist/graphs/JSONScraperGraph.js.map +1 -0
- package/dist/graphs/SearchGraph.d.ts +14 -0
- package/dist/graphs/SearchGraph.d.ts.map +1 -0
- package/dist/graphs/SearchGraph.js +42 -0
- package/dist/graphs/SearchGraph.js.map +1 -0
- package/dist/graphs/SmartScraperGraph.d.ts +16 -0
- package/dist/graphs/SmartScraperGraph.d.ts.map +1 -0
- package/dist/graphs/SmartScraperGraph.js +57 -0
- package/dist/graphs/SmartScraperGraph.js.map +1 -0
- package/dist/graphs/SmartScraperMultiGraph.d.ts +17 -0
- package/dist/graphs/SmartScraperMultiGraph.d.ts.map +1 -0
- package/dist/graphs/SmartScraperMultiGraph.js +71 -0
- package/dist/graphs/SmartScraperMultiGraph.js.map +1 -0
- package/dist/graphs/index.d.ts +12 -0
- package/dist/graphs/index.d.ts.map +1 -0
- package/dist/graphs/index.js +23 -0
- package/dist/graphs/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/models/GeminiModel.d.ts +16 -0
- package/dist/models/GeminiModel.d.ts.map +1 -0
- package/dist/models/GeminiModel.js +127 -0
- package/dist/models/GeminiModel.js.map +1 -0
- package/dist/models/OllamaModel.d.ts +15 -0
- package/dist/models/OllamaModel.d.ts.map +1 -0
- package/dist/models/OllamaModel.js +134 -0
- package/dist/models/OllamaModel.js.map +1 -0
- package/dist/models/index.d.ts +8 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +24 -0
- package/dist/models/index.js.map +1 -0
- package/dist/nodes/BaseNode.d.ts +37 -0
- package/dist/nodes/BaseNode.d.ts.map +1 -0
- package/dist/nodes/BaseNode.js +116 -0
- package/dist/nodes/BaseNode.js.map +1 -0
- package/dist/nodes/CSVExporterNode.d.ts +16 -0
- package/dist/nodes/CSVExporterNode.d.ts.map +1 -0
- package/dist/nodes/CSVExporterNode.js +85 -0
- package/dist/nodes/CSVExporterNode.js.map +1 -0
- package/dist/nodes/ConditionalNode.d.ts +16 -0
- package/dist/nodes/ConditionalNode.d.ts.map +1 -0
- package/dist/nodes/ConditionalNode.js +68 -0
- package/dist/nodes/ConditionalNode.js.map +1 -0
- package/dist/nodes/FetchNode.d.ts +15 -0
- package/dist/nodes/FetchNode.d.ts.map +1 -0
- package/dist/nodes/FetchNode.js +182 -0
- package/dist/nodes/FetchNode.js.map +1 -0
- package/dist/nodes/GenerateAnswerNode.d.ts +14 -0
- package/dist/nodes/GenerateAnswerNode.d.ts.map +1 -0
- package/dist/nodes/GenerateAnswerNode.js +86 -0
- package/dist/nodes/GenerateAnswerNode.js.map +1 -0
- package/dist/nodes/JSONExporterNode.d.ts +16 -0
- package/dist/nodes/JSONExporterNode.d.ts.map +1 -0
- package/dist/nodes/JSONExporterNode.js +42 -0
- package/dist/nodes/JSONExporterNode.js.map +1 -0
- package/dist/nodes/MergeNode.d.ts +10 -0
- package/dist/nodes/MergeNode.d.ts.map +1 -0
- package/dist/nodes/MergeNode.js +51 -0
- package/dist/nodes/MergeNode.js.map +1 -0
- package/dist/nodes/PDFScraperNode.d.ts +10 -0
- package/dist/nodes/PDFScraperNode.d.ts.map +1 -0
- package/dist/nodes/PDFScraperNode.js +80 -0
- package/dist/nodes/PDFScraperNode.js.map +1 -0
- package/dist/nodes/ParseNode.d.ts +12 -0
- package/dist/nodes/ParseNode.d.ts.map +1 -0
- package/dist/nodes/ParseNode.js +44 -0
- package/dist/nodes/ParseNode.js.map +1 -0
- package/dist/nodes/RAGNode.d.ts +13 -0
- package/dist/nodes/RAGNode.d.ts.map +1 -0
- package/dist/nodes/RAGNode.js +64 -0
- package/dist/nodes/RAGNode.js.map +1 -0
- package/dist/nodes/ReasoningNode.d.ts +10 -0
- package/dist/nodes/ReasoningNode.d.ts.map +1 -0
- package/dist/nodes/ReasoningNode.js +51 -0
- package/dist/nodes/ReasoningNode.js.map +1 -0
- package/dist/nodes/SearchNode.d.ts +13 -0
- package/dist/nodes/SearchNode.d.ts.map +1 -0
- package/dist/nodes/SearchNode.js +81 -0
- package/dist/nodes/SearchNode.js.map +1 -0
- package/dist/nodes/XMLScraperNode.d.ts +11 -0
- package/dist/nodes/XMLScraperNode.d.ts.map +1 -0
- package/dist/nodes/XMLScraperNode.js +99 -0
- package/dist/nodes/XMLScraperNode.js.map +1 -0
- package/dist/nodes/index.d.ts +17 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +33 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/prompts/index.d.ts +12 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +117 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/types.d.ts +106 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cache.d.ts +28 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +72 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/chunking.d.ts +8 -0
- package/dist/utils/chunking.d.ts.map +1 -0
- package/dist/utils/chunking.js +51 -0
- package/dist/utils/chunking.js.map +1 -0
- package/dist/utils/cleanupHtml.d.ts +7 -0
- package/dist/utils/cleanupHtml.d.ts.map +1 -0
- package/dist/utils/cleanupHtml.js +81 -0
- package/dist/utils/cleanupHtml.js.map +1 -0
- package/dist/utils/convertToMarkdown.d.ts +6 -0
- package/dist/utils/convertToMarkdown.d.ts.map +1 -0
- package/dist/utils/convertToMarkdown.js +61 -0
- package/dist/utils/convertToMarkdown.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +40 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +35 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/proxy.d.ts +30 -0
- package/dist/utils/proxy.d.ts.map +1 -0
- package/dist/utils/proxy.js +62 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/rateLimiter.d.ts +24 -0
- package/dist/utils/rateLimiter.d.ts.map +1 -0
- package/dist/utils/rateLimiter.js +61 -0
- package/dist/utils/rateLimiter.js.map +1 -0
- package/dist/utils/retry.d.ts +17 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +43 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/schemaValidator.d.ts +69 -0
- package/dist/utils/schemaValidator.d.ts.map +1 -0
- package/dist/utils/schemaValidator.js +133 -0
- package/dist/utils/schemaValidator.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Google Gemini LLM Model Implementation
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GeminiModel = void 0;
|
|
7
|
+
const generative_ai_1 = require("@google/generative-ai");
|
|
8
|
+
const types_1 = require("../types");
|
|
9
|
+
const retry_1 = require("../utils/retry");
|
|
10
|
+
const rateLimiter_1 = require("../utils/rateLimiter");
|
|
11
|
+
const cache_1 = require("../utils/cache");
|
|
12
|
+
class GeminiModel extends types_1.BaseLLM {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
super(config);
|
|
15
|
+
if (!config.apiKey) {
|
|
16
|
+
throw new Error('Gemini API key is required. Set GEMINI_API_KEY environment variable or pass apiKey in config.');
|
|
17
|
+
}
|
|
18
|
+
this.genAI = new generative_ai_1.GoogleGenerativeAI(config.apiKey);
|
|
19
|
+
this.modelName = config.model || 'gemini-2.0-flash-exp';
|
|
20
|
+
}
|
|
21
|
+
async generate(prompt, systemPrompt) {
|
|
22
|
+
// Check cache first
|
|
23
|
+
const cacheKey = `gemini:${this.modelName}:${systemPrompt}:${prompt}`;
|
|
24
|
+
const cached = cache_1.cache.get(cacheKey);
|
|
25
|
+
if (cached) {
|
|
26
|
+
return cached;
|
|
27
|
+
}
|
|
28
|
+
// Rate limit requests
|
|
29
|
+
await rateLimiter_1.rateLimiter.wait();
|
|
30
|
+
// Retry with exponential backoff
|
|
31
|
+
const result = await (0, retry_1.retry)(async () => {
|
|
32
|
+
const model = this.genAI.getGenerativeModel({
|
|
33
|
+
model: this.modelName,
|
|
34
|
+
generationConfig: {
|
|
35
|
+
temperature: this.config.temperature ?? 0,
|
|
36
|
+
maxOutputTokens: this.config.maxTokens ?? 2048,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
const fullPrompt = systemPrompt ? `${systemPrompt}\n\n${prompt}` : prompt;
|
|
40
|
+
const result = await model.generateContent(fullPrompt);
|
|
41
|
+
const response = await result.response;
|
|
42
|
+
return response.text();
|
|
43
|
+
}, {
|
|
44
|
+
maxRetries: 3,
|
|
45
|
+
initialDelay: 1000,
|
|
46
|
+
maxDelay: 10000,
|
|
47
|
+
backoffMultiplier: 2,
|
|
48
|
+
});
|
|
49
|
+
// Cache the result
|
|
50
|
+
cache_1.cache.set(cacheKey, result, 3600); // 1 hour TTL
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
async generateJson(prompt, systemPrompt) {
|
|
54
|
+
// Check cache first
|
|
55
|
+
const cacheKey = `gemini:json:${this.modelName}:${systemPrompt}:${prompt}`;
|
|
56
|
+
const cached = cache_1.cache.get(cacheKey);
|
|
57
|
+
if (cached) {
|
|
58
|
+
return cached;
|
|
59
|
+
}
|
|
60
|
+
// Rate limit requests
|
|
61
|
+
await rateLimiter_1.rateLimiter.wait();
|
|
62
|
+
// Retry with exponential backoff
|
|
63
|
+
const result = await (0, retry_1.retry)(async () => {
|
|
64
|
+
const model = this.genAI.getGenerativeModel({
|
|
65
|
+
model: this.modelName,
|
|
66
|
+
generationConfig: {
|
|
67
|
+
temperature: this.config.temperature ?? 0,
|
|
68
|
+
maxOutputTokens: this.config.maxTokens ?? 2048,
|
|
69
|
+
responseMimeType: "application/json",
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
const fullPrompt = `${systemPrompt || ''}\n\n${prompt}\n\nRespond with valid JSON only.`;
|
|
73
|
+
const result = await model.generateContent(fullPrompt);
|
|
74
|
+
const response = await result.response;
|
|
75
|
+
const text = response.text();
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(text);
|
|
78
|
+
}
|
|
79
|
+
catch (parseError) {
|
|
80
|
+
// Try to extract JSON from response
|
|
81
|
+
const jsonMatch = text.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
82
|
+
text.match(/```\s*([\s\S]*?)\s*```/) ||
|
|
83
|
+
text.match(/\{[\s\S]*\}/);
|
|
84
|
+
if (jsonMatch) {
|
|
85
|
+
const jsonStr = jsonMatch[0].replace(/```json|```/g, '').trim();
|
|
86
|
+
return JSON.parse(jsonStr);
|
|
87
|
+
}
|
|
88
|
+
throw new Error(`Failed to parse JSON response: ${text}`);
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
maxRetries: 3,
|
|
92
|
+
initialDelay: 1000,
|
|
93
|
+
maxDelay: 10000,
|
|
94
|
+
backoffMultiplier: 2,
|
|
95
|
+
});
|
|
96
|
+
// Cache the result
|
|
97
|
+
cache_1.cache.set(cacheKey, result, 3600); // 1 hour TTL
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
async chat(messages) {
|
|
101
|
+
try {
|
|
102
|
+
const model = this.genAI.getGenerativeModel({
|
|
103
|
+
model: this.modelName,
|
|
104
|
+
generationConfig: {
|
|
105
|
+
temperature: this.config.temperature ?? 0,
|
|
106
|
+
maxOutputTokens: this.config.maxTokens ?? 2048,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// Convert messages to Gemini format
|
|
110
|
+
const chat = model.startChat({
|
|
111
|
+
history: messages.slice(0, -1).map(msg => ({
|
|
112
|
+
role: msg.role === 'user' ? 'user' : 'model',
|
|
113
|
+
parts: [{ text: msg.content }],
|
|
114
|
+
})),
|
|
115
|
+
});
|
|
116
|
+
const lastMessage = messages[messages.length - 1];
|
|
117
|
+
const result = await chat.sendMessage(lastMessage.content);
|
|
118
|
+
const response = await result.response;
|
|
119
|
+
return response.text();
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
throw new Error(`Gemini chat error: ${error.message}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.GeminiModel = GeminiModel;
|
|
127
|
+
//# sourceMappingURL=GeminiModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiModel.js","sourceRoot":"","sources":["../../src/models/GeminiModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama LLM Model Implementation
|
|
3
|
+
*/
|
|
4
|
+
import { BaseLLM, LLMConfig } from '../types';
|
|
5
|
+
export declare class OllamaModel extends BaseLLM {
|
|
6
|
+
private baseUrl;
|
|
7
|
+
constructor(config: LLMConfig);
|
|
8
|
+
generate(prompt: string, systemPrompt?: string): Promise<string>;
|
|
9
|
+
generateJson(prompt: string, systemPrompt?: string): Promise<any>;
|
|
10
|
+
chat(messages: Array<{
|
|
11
|
+
role: string;
|
|
12
|
+
content: string;
|
|
13
|
+
}>): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=OllamaModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OllamaModel.d.ts","sourceRoot":"","sources":["../../src/models/OllamaModel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAe,MAAM,UAAU,CAAC;AAK3D,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,SAAS;IAKvB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDhE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmEjE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAkChF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ollama LLM Model Implementation
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OllamaModel = void 0;
|
|
10
|
+
const axios_1 = __importDefault(require("axios"));
|
|
11
|
+
const types_1 = require("../types");
|
|
12
|
+
const retry_1 = require("../utils/retry");
|
|
13
|
+
const rateLimiter_1 = require("../utils/rateLimiter");
|
|
14
|
+
const cache_1 = require("../utils/cache");
|
|
15
|
+
class OllamaModel extends types_1.BaseLLM {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
super(config);
|
|
18
|
+
this.baseUrl = config.baseUrl || 'http://localhost:11434';
|
|
19
|
+
}
|
|
20
|
+
async generate(prompt, systemPrompt) {
|
|
21
|
+
// Check cache first
|
|
22
|
+
const cacheKey = `ollama:${this.config.model}:${systemPrompt}:${prompt}`;
|
|
23
|
+
const cached = cache_1.cache.get(cacheKey);
|
|
24
|
+
if (cached) {
|
|
25
|
+
return cached;
|
|
26
|
+
}
|
|
27
|
+
// Rate limit requests
|
|
28
|
+
await rateLimiter_1.rateLimiter.wait();
|
|
29
|
+
// Retry with exponential backoff
|
|
30
|
+
const result = await (0, retry_1.retry)(async () => {
|
|
31
|
+
const response = await axios_1.default.post(`${this.baseUrl}/api/generate`, {
|
|
32
|
+
model: this.config.model,
|
|
33
|
+
prompt: systemPrompt ? `${systemPrompt}\n\n${prompt}` : prompt,
|
|
34
|
+
stream: false,
|
|
35
|
+
options: {
|
|
36
|
+
temperature: this.config.temperature ?? 0,
|
|
37
|
+
num_predict: this.config.maxTokens ?? 2048,
|
|
38
|
+
},
|
|
39
|
+
}, {
|
|
40
|
+
headers: {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
},
|
|
43
|
+
timeout: 120000, // 2 minutes
|
|
44
|
+
});
|
|
45
|
+
return response.data.response;
|
|
46
|
+
}, {
|
|
47
|
+
maxRetries: 3,
|
|
48
|
+
initialDelay: 1000,
|
|
49
|
+
maxDelay: 10000,
|
|
50
|
+
backoffMultiplier: 2,
|
|
51
|
+
});
|
|
52
|
+
// Cache the result
|
|
53
|
+
cache_1.cache.set(cacheKey, result, 3600); // 1 hour TTL
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
async generateJson(prompt, systemPrompt) {
|
|
57
|
+
// Check cache first
|
|
58
|
+
const cacheKey = `ollama:json:${this.config.model}:${systemPrompt}:${prompt}`;
|
|
59
|
+
const cached = cache_1.cache.get(cacheKey);
|
|
60
|
+
if (cached) {
|
|
61
|
+
return cached;
|
|
62
|
+
}
|
|
63
|
+
// Rate limit requests
|
|
64
|
+
await rateLimiter_1.rateLimiter.wait();
|
|
65
|
+
const fullPrompt = `${systemPrompt || ''}\n\n${prompt}\n\nRespond with valid JSON only.`;
|
|
66
|
+
// Retry with exponential backoff
|
|
67
|
+
const result = await (0, retry_1.retry)(async () => {
|
|
68
|
+
const response = await axios_1.default.post(`${this.baseUrl}/api/generate`, {
|
|
69
|
+
model: this.config.model,
|
|
70
|
+
prompt: fullPrompt,
|
|
71
|
+
format: 'json',
|
|
72
|
+
stream: false,
|
|
73
|
+
options: {
|
|
74
|
+
temperature: this.config.temperature ?? 0,
|
|
75
|
+
num_predict: this.config.maxTokens ?? 2048,
|
|
76
|
+
},
|
|
77
|
+
}, {
|
|
78
|
+
headers: {
|
|
79
|
+
'Content-Type': 'application/json',
|
|
80
|
+
},
|
|
81
|
+
timeout: 120000,
|
|
82
|
+
});
|
|
83
|
+
const responseText = response.data.response;
|
|
84
|
+
// Try to parse JSON
|
|
85
|
+
try {
|
|
86
|
+
return JSON.parse(responseText);
|
|
87
|
+
}
|
|
88
|
+
catch (parseError) {
|
|
89
|
+
// If response is not valid JSON, try to extract JSON from markdown code blocks
|
|
90
|
+
const jsonMatch = responseText.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
91
|
+
responseText.match(/```\s*([\s\S]*?)\s*```/);
|
|
92
|
+
if (jsonMatch) {
|
|
93
|
+
return JSON.parse(jsonMatch[1]);
|
|
94
|
+
}
|
|
95
|
+
throw new Error('Failed to parse JSON response from Ollama');
|
|
96
|
+
}
|
|
97
|
+
}, {
|
|
98
|
+
maxRetries: 3,
|
|
99
|
+
initialDelay: 1000,
|
|
100
|
+
maxDelay: 10000,
|
|
101
|
+
backoffMultiplier: 2,
|
|
102
|
+
});
|
|
103
|
+
// Cache the result
|
|
104
|
+
cache_1.cache.set(cacheKey, result, 3600); // 1 hour TTL
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
async chat(messages) {
|
|
108
|
+
await rateLimiter_1.rateLimiter.wait();
|
|
109
|
+
return await (0, retry_1.retry)(async () => {
|
|
110
|
+
const response = await axios_1.default.post(`${this.baseUrl}/api/chat`, {
|
|
111
|
+
model: this.config.model,
|
|
112
|
+
messages: messages,
|
|
113
|
+
stream: false,
|
|
114
|
+
options: {
|
|
115
|
+
temperature: this.config.temperature ?? 0,
|
|
116
|
+
num_predict: this.config.maxTokens ?? 2048,
|
|
117
|
+
},
|
|
118
|
+
}, {
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
},
|
|
122
|
+
timeout: 120000,
|
|
123
|
+
});
|
|
124
|
+
return response.data.message.content;
|
|
125
|
+
}, {
|
|
126
|
+
maxRetries: 3,
|
|
127
|
+
initialDelay: 1000,
|
|
128
|
+
maxDelay: 10000,
|
|
129
|
+
backoffMultiplier: 2,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.OllamaModel = OllamaModel;
|
|
134
|
+
//# sourceMappingURL=OllamaModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OllamaModel.js","sourceRoot":"","sources":["../../src/models/OllamaModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model factory for creating LLM instances
|
|
3
|
+
*/
|
|
4
|
+
import { BaseLLM, LLMConfig } from '../types';
|
|
5
|
+
export declare function createLLM(config: LLMConfig): BaseLLM;
|
|
6
|
+
export { OllamaModel } from './OllamaModel';
|
|
7
|
+
export { GeminiModel } from './GeminiModel';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI9C,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CASpD;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Model factory for creating LLM instances
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GeminiModel = exports.OllamaModel = void 0;
|
|
7
|
+
exports.createLLM = createLLM;
|
|
8
|
+
const OllamaModel_1 = require("./OllamaModel");
|
|
9
|
+
const GeminiModel_1 = require("./GeminiModel");
|
|
10
|
+
function createLLM(config) {
|
|
11
|
+
switch (config.provider) {
|
|
12
|
+
case 'ollama':
|
|
13
|
+
return new OllamaModel_1.OllamaModel(config);
|
|
14
|
+
case 'gemini':
|
|
15
|
+
return new GeminiModel_1.GeminiModel(config);
|
|
16
|
+
default:
|
|
17
|
+
throw new Error(`Unsupported LLM provider: ${config.provider}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
var OllamaModel_2 = require("./OllamaModel");
|
|
21
|
+
Object.defineProperty(exports, "OllamaModel", { enumerable: true, get: function () { return OllamaModel_2.OllamaModel; } });
|
|
22
|
+
var GeminiModel_2 = require("./GeminiModel");
|
|
23
|
+
Object.defineProperty(exports, "GeminiModel", { enumerable: true, get: function () { return GeminiModel_2.GeminiModel; } });
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAMH,8BASC;AAZD,+CAA4C;AAC5C,+CAA4C;AAE5C,SAAgB,SAAS,CAAC,MAAiB;IACzC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;QACjC;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Node class for the graph pipeline
|
|
3
|
+
*/
|
|
4
|
+
import { GraphState, NodeConfig, BaseLLM } from '../types';
|
|
5
|
+
import { Logger } from '../utils/logger';
|
|
6
|
+
export declare abstract class BaseNode {
|
|
7
|
+
protected nodeName: string;
|
|
8
|
+
protected nodeType: string;
|
|
9
|
+
protected input: string;
|
|
10
|
+
protected output: string[];
|
|
11
|
+
protected minInputLen: number;
|
|
12
|
+
protected config: NodeConfig;
|
|
13
|
+
protected logger: Logger;
|
|
14
|
+
protected llmModel?: BaseLLM;
|
|
15
|
+
constructor(nodeName: string, nodeType: string, input: string, output: string[], minInputLen?: number, config?: NodeConfig);
|
|
16
|
+
/**
|
|
17
|
+
* Get input keys from the input expression
|
|
18
|
+
*/
|
|
19
|
+
protected getInputKeys(state: GraphState): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Validate that required inputs are present in state
|
|
22
|
+
*/
|
|
23
|
+
protected validateInputs(state: GraphState): void;
|
|
24
|
+
/**
|
|
25
|
+
* Update state with output values
|
|
26
|
+
*/
|
|
27
|
+
protected updateState(state: GraphState, outputs: Record<string, any>): GraphState;
|
|
28
|
+
/**
|
|
29
|
+
* Execute the node logic
|
|
30
|
+
*/
|
|
31
|
+
execute(state: GraphState): Promise<GraphState>;
|
|
32
|
+
/**
|
|
33
|
+
* Process logic to be implemented by subclasses
|
|
34
|
+
*/
|
|
35
|
+
protected abstract process(state: GraphState): Promise<GraphState>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=BaseNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseNode.d.ts","sourceRoot":"","sources":["../../src/nodes/BaseNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAG3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,GAAE,MAAU,EACvB,MAAM,GAAE,UAAe;IAczB;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IA2CnD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoCjD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,UAAU;IAOlF;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAcrD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CACnE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Node class for the graph pipeline
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BaseNode = void 0;
|
|
7
|
+
const logger_1 = require("../utils/logger");
|
|
8
|
+
class BaseNode {
|
|
9
|
+
constructor(nodeName, nodeType, input, output, minInputLen = 1, config = {}) {
|
|
10
|
+
this.nodeName = nodeName;
|
|
11
|
+
this.nodeType = nodeType;
|
|
12
|
+
this.input = input;
|
|
13
|
+
this.output = output;
|
|
14
|
+
this.minInputLen = minInputLen;
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.llmModel = config.llmModel;
|
|
17
|
+
const verbose = config.verbose ?? false;
|
|
18
|
+
this.logger = new logger_1.Logger(nodeName, verbose);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get input keys from the input expression
|
|
22
|
+
*/
|
|
23
|
+
getInputKeys(state) {
|
|
24
|
+
// Parse input expression like "url | local_dir" or "user_prompt & doc"
|
|
25
|
+
const keys = [];
|
|
26
|
+
// Check if expression contains OR (|) or AND (&)
|
|
27
|
+
const hasOr = this.input.includes('|');
|
|
28
|
+
const hasAnd = this.input.includes('&');
|
|
29
|
+
if (hasOr && !hasAnd) {
|
|
30
|
+
// Pure OR case: "url | localDir" - return first available
|
|
31
|
+
const parts = this.input.split('|').map(s => s.trim());
|
|
32
|
+
for (const part of parts) {
|
|
33
|
+
if (state[part] !== undefined) {
|
|
34
|
+
keys.push(part);
|
|
35
|
+
return keys; // Return first match
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// If no match, return all options for error reporting
|
|
39
|
+
return parts;
|
|
40
|
+
}
|
|
41
|
+
// Handle complex expressions with & and optional parts in ()
|
|
42
|
+
const parts = this.input.split('&').map(s => s.trim());
|
|
43
|
+
for (const part of parts) {
|
|
44
|
+
// Handle optional inputs in parentheses like "(relevant_chunks | parsed_doc | doc)"
|
|
45
|
+
if (part.startsWith('(') && part.endsWith(')')) {
|
|
46
|
+
const innerParts = part.slice(1, -1).split('|').map(s => s.trim());
|
|
47
|
+
// Find the first key that exists in state
|
|
48
|
+
for (const innerPart of innerParts) {
|
|
49
|
+
if (state[innerPart] !== undefined) {
|
|
50
|
+
keys.push(innerPart);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
keys.push(part);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return keys;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Validate that required inputs are present in state
|
|
63
|
+
*/
|
|
64
|
+
validateInputs(state) {
|
|
65
|
+
const keys = this.getInputKeys(state);
|
|
66
|
+
if (keys.length === 0) {
|
|
67
|
+
throw new Error(`${this.nodeName}: No valid input keys found. Expected one of: ${this.input}`);
|
|
68
|
+
}
|
|
69
|
+
// For OR conditions, we just need at least one valid key
|
|
70
|
+
const hasOr = this.input.includes('|') && !this.input.includes('&');
|
|
71
|
+
if (hasOr) {
|
|
72
|
+
// Check if we have at least one valid input
|
|
73
|
+
const hasValidInput = keys.some(key => state[key] !== undefined);
|
|
74
|
+
if (!hasValidInput) {
|
|
75
|
+
throw new Error(`${this.nodeName}: No valid input found. Expected one of: ${this.input}`);
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// For AND conditions, validate all required keys
|
|
80
|
+
if (keys.length < this.minInputLen) {
|
|
81
|
+
throw new Error(`${this.nodeName}: Expected at least ${this.minInputLen} inputs, got ${keys.length}`);
|
|
82
|
+
}
|
|
83
|
+
for (const key of keys) {
|
|
84
|
+
if (state[key] === undefined) {
|
|
85
|
+
throw new Error(`${this.nodeName}: Required input '${key}' is missing from state`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Update state with output values
|
|
91
|
+
*/
|
|
92
|
+
updateState(state, outputs) {
|
|
93
|
+
return {
|
|
94
|
+
...state,
|
|
95
|
+
...outputs,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Execute the node logic
|
|
100
|
+
*/
|
|
101
|
+
async execute(state) {
|
|
102
|
+
this.logger.info(`--- Executing ${this.nodeName} Node ---`);
|
|
103
|
+
try {
|
|
104
|
+
this.validateInputs(state);
|
|
105
|
+
const newState = await this.process(state);
|
|
106
|
+
this.logger.success(`${this.nodeName} completed successfully`);
|
|
107
|
+
return newState;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.logger.error(`${this.nodeName} failed: ${error.message}`);
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.BaseNode = BaseNode;
|
|
116
|
+
//# sourceMappingURL=BaseNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseNode.js","sourceRoot":"","sources":["../../src/nodes/BaseNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSVExporterNode - Export data to CSV format
|
|
3
|
+
*/
|
|
4
|
+
import { BaseNode } from './BaseNode';
|
|
5
|
+
import { GraphState, NodeConfig } from '../types';
|
|
6
|
+
export declare class CSVExporterNode extends BaseNode {
|
|
7
|
+
private outputPath?;
|
|
8
|
+
constructor(input: string, output: string[], config?: NodeConfig & {
|
|
9
|
+
outputPath?: string;
|
|
10
|
+
});
|
|
11
|
+
protected process(state: GraphState): Promise<GraphState>;
|
|
12
|
+
private convertToCSV;
|
|
13
|
+
private formatValue;
|
|
14
|
+
private escapeCSVValue;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=CSVExporterNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSVExporterNode.d.ts","sourceRoot":"","sources":["../../src/nodes/CSVExporterNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,UAAU,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;cAK9E,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmB/D,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,cAAc;CAOvB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CSVExporterNode - Export data to CSV format
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CSVExporterNode = void 0;
|
|
7
|
+
const BaseNode_1 = require("./BaseNode");
|
|
8
|
+
class CSVExporterNode extends BaseNode_1.BaseNode {
|
|
9
|
+
constructor(input, output, config = {}) {
|
|
10
|
+
super('CSVExporter', 'node', input, output, 1, config);
|
|
11
|
+
this.outputPath = config.outputPath;
|
|
12
|
+
}
|
|
13
|
+
async process(state) {
|
|
14
|
+
const data = state.answer || state.parsedDoc;
|
|
15
|
+
if (!data) {
|
|
16
|
+
throw new Error('No data available to export to CSV');
|
|
17
|
+
}
|
|
18
|
+
this.logger.info('Converting data to CSV format');
|
|
19
|
+
const csv = this.convertToCSV(data);
|
|
20
|
+
this.logger.success(`Generated CSV with ${csv.split('\n').length - 1} rows`);
|
|
21
|
+
return this.updateState(state, {
|
|
22
|
+
csv,
|
|
23
|
+
csvPath: this.outputPath,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
convertToCSV(data) {
|
|
27
|
+
// Handle array of objects
|
|
28
|
+
if (Array.isArray(data)) {
|
|
29
|
+
if (data.length === 0) {
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
// Get all unique keys from all objects
|
|
33
|
+
const allKeys = new Set();
|
|
34
|
+
data.forEach(item => {
|
|
35
|
+
if (typeof item === 'object' && item !== null) {
|
|
36
|
+
Object.keys(item).forEach(key => allKeys.add(key));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const headers = Array.from(allKeys);
|
|
40
|
+
// Create CSV header
|
|
41
|
+
const csvRows = [headers.map(this.escapeCSVValue).join(',')];
|
|
42
|
+
// Add data rows
|
|
43
|
+
data.forEach(item => {
|
|
44
|
+
if (typeof item === 'object' && item !== null) {
|
|
45
|
+
const row = headers.map(header => {
|
|
46
|
+
const value = item[header];
|
|
47
|
+
return this.escapeCSVValue(this.formatValue(value));
|
|
48
|
+
});
|
|
49
|
+
csvRows.push(row.join(','));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return csvRows.join('\n');
|
|
53
|
+
}
|
|
54
|
+
// Handle single object
|
|
55
|
+
if (typeof data === 'object' && data !== null) {
|
|
56
|
+
const keys = Object.keys(data);
|
|
57
|
+
const headers = keys.map(this.escapeCSVValue).join(',');
|
|
58
|
+
const values = keys.map(key => this.escapeCSVValue(this.formatValue(data[key]))).join(',');
|
|
59
|
+
return `${headers}\n${values}`;
|
|
60
|
+
}
|
|
61
|
+
// Handle primitive value
|
|
62
|
+
return String(data);
|
|
63
|
+
}
|
|
64
|
+
formatValue(value) {
|
|
65
|
+
if (value === null || value === undefined) {
|
|
66
|
+
return '';
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(value)) {
|
|
69
|
+
return value.map(v => this.formatValue(v)).join('; ');
|
|
70
|
+
}
|
|
71
|
+
if (typeof value === 'object') {
|
|
72
|
+
return JSON.stringify(value);
|
|
73
|
+
}
|
|
74
|
+
return String(value);
|
|
75
|
+
}
|
|
76
|
+
escapeCSVValue(value) {
|
|
77
|
+
// If value contains comma, quote, or newline, wrap in quotes and escape quotes
|
|
78
|
+
if (value.includes(',') || value.includes('"') || value.includes('\n')) {
|
|
79
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.CSVExporterNode = CSVExporterNode;
|
|
85
|
+
//# sourceMappingURL=CSVExporterNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSVExporterNode.js","sourceRoot":"","sources":["../../src/nodes/CSVExporterNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConditionalNode - Execute conditional logic in the graph
|
|
3
|
+
*/
|
|
4
|
+
import { BaseNode } from './BaseNode';
|
|
5
|
+
import { GraphState, NodeConfig } from '../types';
|
|
6
|
+
export declare class ConditionalNode extends BaseNode {
|
|
7
|
+
private condition;
|
|
8
|
+
private keyName;
|
|
9
|
+
constructor(input: string, output: string[], config: NodeConfig & {
|
|
10
|
+
condition: string;
|
|
11
|
+
keyName: string;
|
|
12
|
+
});
|
|
13
|
+
protected process(state: GraphState): Promise<GraphState>;
|
|
14
|
+
private evaluateCondition;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ConditionalNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionalNode.d.ts","sourceRoot":"","sources":["../../src/nodes/ConditionalNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;cAcxF,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAe/D,OAAO,CAAC,iBAAiB;CAyC1B"}
|