@workglow/ai 0.0.84 → 0.0.86
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 +166 -35
- package/dist/browser.js +3947 -1449
- package/dist/browser.js.map +49 -38
- package/dist/bun.js +3947 -1449
- package/dist/bun.js.map +49 -38
- package/dist/common.d.ts +0 -3
- package/dist/common.d.ts.map +1 -1
- package/dist/model/ModelRegistry.d.ts +2 -2
- package/dist/model/ModelRegistry.d.ts.map +1 -1
- package/dist/model/ModelRepository.d.ts +3 -3
- package/dist/model/ModelRepository.d.ts.map +1 -1
- package/dist/node.js +3947 -1449
- package/dist/node.js.map +49 -38
- package/dist/task/BackgroundRemovalTask.d.ts +121 -289
- package/dist/task/BackgroundRemovalTask.d.ts.map +1 -1
- package/dist/task/ChunkRetrievalTask.d.ts +243 -0
- package/dist/task/ChunkRetrievalTask.d.ts.map +1 -0
- package/dist/task/ChunkToVectorTask.d.ts +183 -0
- package/dist/task/ChunkToVectorTask.d.ts.map +1 -0
- package/dist/task/ChunkVectorHybridSearchTask.d.ts +160 -0
- package/dist/task/ChunkVectorHybridSearchTask.d.ts.map +1 -0
- package/dist/task/ChunkVectorSearchTask.d.ts +137 -0
- package/dist/task/ChunkVectorSearchTask.d.ts.map +1 -0
- package/dist/task/ChunkVectorUpsertTask.d.ts +120 -0
- package/dist/task/ChunkVectorUpsertTask.d.ts.map +1 -0
- package/dist/task/ContextBuilderTask.d.ts +131 -0
- package/dist/task/ContextBuilderTask.d.ts.map +1 -0
- package/dist/task/DocumentEnricherTask.d.ts +232 -0
- package/dist/task/DocumentEnricherTask.d.ts.map +1 -0
- package/dist/task/DownloadModelTask.d.ts +79 -208
- package/dist/task/DownloadModelTask.d.ts.map +1 -1
- package/dist/task/FaceDetectorTask.d.ts +117 -272
- package/dist/task/FaceDetectorTask.d.ts.map +1 -1
- package/dist/task/FaceLandmarkerTask.d.ts +117 -272
- package/dist/task/FaceLandmarkerTask.d.ts.map +1 -1
- package/dist/task/GestureRecognizerTask.d.ts +129 -284
- package/dist/task/GestureRecognizerTask.d.ts.map +1 -1
- package/dist/task/HandLandmarkerTask.d.ts +125 -280
- package/dist/task/HandLandmarkerTask.d.ts.map +1 -1
- package/dist/task/HierarchicalChunkerTask.d.ts +212 -0
- package/dist/task/HierarchicalChunkerTask.d.ts.map +1 -0
- package/dist/task/HierarchyJoinTask.d.ts +318 -0
- package/dist/task/HierarchyJoinTask.d.ts.map +1 -0
- package/dist/task/ImageClassificationTask.d.ts +117 -272
- package/dist/task/ImageClassificationTask.d.ts.map +1 -1
- package/dist/task/ImageEmbeddingTask.d.ts +125 -446
- package/dist/task/ImageEmbeddingTask.d.ts.map +1 -1
- package/dist/task/ImageSegmentationTask.d.ts +117 -272
- package/dist/task/ImageSegmentationTask.d.ts.map +1 -1
- package/dist/task/ImageToTextTask.d.ts +117 -272
- package/dist/task/ImageToTextTask.d.ts.map +1 -1
- package/dist/task/ObjectDetectionTask.d.ts +119 -274
- package/dist/task/ObjectDetectionTask.d.ts.map +1 -1
- package/dist/task/PoseLandmarkerTask.d.ts +117 -272
- package/dist/task/PoseLandmarkerTask.d.ts.map +1 -1
- package/dist/task/QueryExpanderTask.d.ts +129 -0
- package/dist/task/QueryExpanderTask.d.ts.map +1 -0
- package/dist/task/RerankerTask.d.ts +209 -0
- package/dist/task/RerankerTask.d.ts.map +1 -0
- package/dist/task/StructuralParserTask.d.ts +91 -0
- package/dist/task/StructuralParserTask.d.ts.map +1 -0
- package/dist/task/TextChunkerTask.d.ts +129 -0
- package/dist/task/TextChunkerTask.d.ts.map +1 -0
- package/dist/task/TextClassificationTask.d.ts +42 -115
- package/dist/task/TextClassificationTask.d.ts.map +1 -1
- package/dist/task/TextEmbeddingTask.d.ts +55 -277
- package/dist/task/TextEmbeddingTask.d.ts.map +1 -1
- package/dist/task/TextFillMaskTask.d.ts +42 -115
- package/dist/task/TextFillMaskTask.d.ts.map +1 -1
- package/dist/task/TextGenerationTask.d.ts +44 -128
- package/dist/task/TextGenerationTask.d.ts.map +1 -1
- package/dist/task/TextLanguageDetectionTask.d.ts +42 -115
- package/dist/task/TextLanguageDetectionTask.d.ts.map +1 -1
- package/dist/task/TextNamedEntityRecognitionTask.d.ts +42 -115
- package/dist/task/TextNamedEntityRecognitionTask.d.ts.map +1 -1
- package/dist/task/TextQuestionAnswerTask.d.ts +47 -144
- package/dist/task/TextQuestionAnswerTask.d.ts.map +1 -1
- package/dist/task/TextRewriterTask.d.ts +45 -131
- package/dist/task/TextRewriterTask.d.ts.map +1 -1
- package/dist/task/TextSummaryTask.d.ts +42 -115
- package/dist/task/TextSummaryTask.d.ts.map +1 -1
- package/dist/task/TextTranslationTask.d.ts +54 -168
- package/dist/task/TextTranslationTask.d.ts.map +1 -1
- package/dist/task/TopicSegmenterTask.d.ts +148 -0
- package/dist/task/TopicSegmenterTask.d.ts.map +1 -0
- package/dist/task/UnloadModelTask.d.ts +79 -208
- package/dist/task/UnloadModelTask.d.ts.map +1 -1
- package/dist/task/VectorQuantizeTask.d.ts +120 -0
- package/dist/task/VectorQuantizeTask.d.ts.map +1 -0
- package/dist/task/VectorSimilarityTask.d.ts +18 -253
- package/dist/task/VectorSimilarityTask.d.ts.map +1 -1
- package/dist/task/base/AiTask.d.ts +24 -22
- package/dist/task/base/AiTask.d.ts.map +1 -1
- package/dist/task/base/AiTaskSchemas.d.ts +3 -127
- package/dist/task/base/AiTaskSchemas.d.ts.map +1 -1
- package/dist/task/base/AiVisionTask.d.ts +1 -4
- package/dist/task/base/AiVisionTask.d.ts.map +1 -1
- package/dist/task/index.d.ts +54 -1
- package/dist/task/index.d.ts.map +1 -1
- package/package.json +14 -9
- package/dist/source/Document.d.ts +0 -56
- package/dist/source/Document.d.ts.map +0 -1
- package/dist/source/DocumentConverter.d.ts +0 -15
- package/dist/source/DocumentConverter.d.ts.map +0 -1
- package/dist/source/DocumentConverterMarkdown.d.ts +0 -13
- package/dist/source/DocumentConverterMarkdown.d.ts.map +0 -1
- package/dist/source/DocumentConverterText.d.ts +0 -13
- package/dist/source/DocumentConverterText.d.ts.map +0 -1
- package/dist/source/MasterDocument.d.ts +0 -27
- package/dist/source/MasterDocument.d.ts.map +0 -1
- package/dist/source/index.d.ts +0 -10
- package/dist/source/index.d.ts.map +0 -1
- package/dist/task/DocumentSplitterTask.d.ts +0 -58
- package/dist/task/DocumentSplitterTask.d.ts.map +0 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Steven Roussey <sroussey@gmail.com>
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { CreateWorkflow, IExecuteContext, JobQueueTaskConfig, Task } from "@workglow/task-graph";
|
|
7
|
+
import { DataPortSchema, FromSchema } from "@workglow/util";
|
|
8
|
+
declare const inputSchema: {
|
|
9
|
+
readonly type: "object";
|
|
10
|
+
readonly properties: {
|
|
11
|
+
readonly query: {
|
|
12
|
+
readonly type: "string";
|
|
13
|
+
readonly title: "Query";
|
|
14
|
+
readonly description: "The query to rerank results against";
|
|
15
|
+
};
|
|
16
|
+
readonly chunks: {
|
|
17
|
+
readonly type: "array";
|
|
18
|
+
readonly items: {
|
|
19
|
+
readonly type: "string";
|
|
20
|
+
};
|
|
21
|
+
readonly title: "Text Chunks";
|
|
22
|
+
readonly description: "Retrieved text chunks to rerank";
|
|
23
|
+
};
|
|
24
|
+
readonly scores: {
|
|
25
|
+
readonly type: "array";
|
|
26
|
+
readonly items: {
|
|
27
|
+
readonly type: "number";
|
|
28
|
+
};
|
|
29
|
+
readonly title: "Initial Scores";
|
|
30
|
+
readonly description: "Initial retrieval scores (optional)";
|
|
31
|
+
};
|
|
32
|
+
readonly metadata: {
|
|
33
|
+
readonly type: "array";
|
|
34
|
+
readonly items: {
|
|
35
|
+
readonly type: "object";
|
|
36
|
+
readonly title: "Metadata";
|
|
37
|
+
readonly description: "Metadata for each chunk";
|
|
38
|
+
};
|
|
39
|
+
readonly title: "Metadata";
|
|
40
|
+
readonly description: "Metadata for each chunk (optional)";
|
|
41
|
+
};
|
|
42
|
+
readonly topK: {
|
|
43
|
+
readonly type: "number";
|
|
44
|
+
readonly title: "Top K";
|
|
45
|
+
readonly description: "Number of top results to return after reranking";
|
|
46
|
+
readonly minimum: 1;
|
|
47
|
+
};
|
|
48
|
+
readonly method: {
|
|
49
|
+
readonly type: "string";
|
|
50
|
+
readonly enum: readonly ["cross-encoder", "reciprocal-rank-fusion", "simple"];
|
|
51
|
+
readonly title: "Reranking Method";
|
|
52
|
+
readonly description: "Method to use for reranking";
|
|
53
|
+
readonly default: "simple";
|
|
54
|
+
};
|
|
55
|
+
readonly model: {
|
|
56
|
+
readonly oneOf: readonly [{
|
|
57
|
+
readonly title: "Model";
|
|
58
|
+
readonly description: `The model ${string}`;
|
|
59
|
+
} & {
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
} & {
|
|
63
|
+
readonly format: import("./base/AiTaskSchemas").TypeModelSemantic;
|
|
64
|
+
readonly type: "string";
|
|
65
|
+
}, {
|
|
66
|
+
readonly type: "object";
|
|
67
|
+
readonly properties: {
|
|
68
|
+
readonly model_id: {
|
|
69
|
+
readonly type: "string";
|
|
70
|
+
};
|
|
71
|
+
readonly tasks: {
|
|
72
|
+
readonly type: "array";
|
|
73
|
+
readonly items: {
|
|
74
|
+
readonly type: "string";
|
|
75
|
+
};
|
|
76
|
+
readonly "x-ui-editor": "multiselect";
|
|
77
|
+
};
|
|
78
|
+
readonly title: {
|
|
79
|
+
readonly type: "string";
|
|
80
|
+
};
|
|
81
|
+
readonly description: {
|
|
82
|
+
readonly type: "string";
|
|
83
|
+
readonly "x-ui-editor": "textarea";
|
|
84
|
+
};
|
|
85
|
+
readonly provider: {
|
|
86
|
+
readonly type: "string";
|
|
87
|
+
};
|
|
88
|
+
readonly provider_config: {
|
|
89
|
+
readonly type: "object";
|
|
90
|
+
readonly default: {};
|
|
91
|
+
};
|
|
92
|
+
readonly metadata: {
|
|
93
|
+
readonly type: "object";
|
|
94
|
+
readonly default: {};
|
|
95
|
+
readonly "x-ui-hidden": true;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
readonly required: readonly ["provider", "provider_config"];
|
|
99
|
+
readonly format: "model";
|
|
100
|
+
readonly additionalProperties: false;
|
|
101
|
+
} & {
|
|
102
|
+
title: string;
|
|
103
|
+
description: string;
|
|
104
|
+
} & {
|
|
105
|
+
readonly format: import("./base/AiTaskSchemas").TypeModelSemantic;
|
|
106
|
+
}];
|
|
107
|
+
} & {
|
|
108
|
+
title: string;
|
|
109
|
+
description: string;
|
|
110
|
+
} & {
|
|
111
|
+
readonly format: import("./base/AiTaskSchemas").TypeModelSemantic;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
readonly required: readonly ["query", "chunks"];
|
|
115
|
+
readonly additionalProperties: false;
|
|
116
|
+
};
|
|
117
|
+
declare const outputSchema: {
|
|
118
|
+
readonly type: "object";
|
|
119
|
+
readonly properties: {
|
|
120
|
+
readonly chunks: {
|
|
121
|
+
readonly type: "array";
|
|
122
|
+
readonly items: {
|
|
123
|
+
readonly type: "string";
|
|
124
|
+
};
|
|
125
|
+
readonly title: "Reranked Chunks";
|
|
126
|
+
readonly description: "Chunks reordered by relevance";
|
|
127
|
+
};
|
|
128
|
+
readonly scores: {
|
|
129
|
+
readonly type: "array";
|
|
130
|
+
readonly items: {
|
|
131
|
+
readonly type: "number";
|
|
132
|
+
};
|
|
133
|
+
readonly title: "Reranked Scores";
|
|
134
|
+
readonly description: "New relevance scores";
|
|
135
|
+
};
|
|
136
|
+
readonly metadata: {
|
|
137
|
+
readonly type: "array";
|
|
138
|
+
readonly items: {
|
|
139
|
+
readonly type: "object";
|
|
140
|
+
readonly title: "Metadata";
|
|
141
|
+
readonly description: "Metadata for each chunk";
|
|
142
|
+
};
|
|
143
|
+
readonly title: "Metadata";
|
|
144
|
+
readonly description: "Metadata for reranked chunks";
|
|
145
|
+
};
|
|
146
|
+
readonly originalIndices: {
|
|
147
|
+
readonly type: "array";
|
|
148
|
+
readonly items: {
|
|
149
|
+
readonly type: "number";
|
|
150
|
+
};
|
|
151
|
+
readonly title: "Original Indices";
|
|
152
|
+
readonly description: "Original indices of reranked chunks";
|
|
153
|
+
};
|
|
154
|
+
readonly count: {
|
|
155
|
+
readonly type: "number";
|
|
156
|
+
readonly title: "Count";
|
|
157
|
+
readonly description: "Number of results returned";
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
readonly required: readonly ["chunks", "scores", "originalIndices", "count"];
|
|
161
|
+
readonly additionalProperties: false;
|
|
162
|
+
};
|
|
163
|
+
export type RerankerTaskInput = FromSchema<typeof inputSchema>;
|
|
164
|
+
export type RerankerTaskOutput = FromSchema<typeof outputSchema>;
|
|
165
|
+
/**
|
|
166
|
+
* Task for reranking retrieved chunks to improve relevance.
|
|
167
|
+
* Supports multiple reranking methods including cross-encoder models.
|
|
168
|
+
*
|
|
169
|
+
* Note: Cross-encoder reranking requires a model to be loaded.
|
|
170
|
+
* For now, this implements simple heuristic-based reranking.
|
|
171
|
+
*/
|
|
172
|
+
export declare class RerankerTask extends Task<RerankerTaskInput, RerankerTaskOutput, JobQueueTaskConfig> {
|
|
173
|
+
static type: string;
|
|
174
|
+
static category: string;
|
|
175
|
+
static title: string;
|
|
176
|
+
static description: string;
|
|
177
|
+
static cacheable: boolean;
|
|
178
|
+
private resolvedCrossEncoderModel?;
|
|
179
|
+
static inputSchema(): DataPortSchema;
|
|
180
|
+
static outputSchema(): DataPortSchema;
|
|
181
|
+
execute(input: RerankerTaskInput, context: IExecuteContext): Promise<RerankerTaskOutput>;
|
|
182
|
+
private crossEncoderRerank;
|
|
183
|
+
private extractCrossEncoderScore;
|
|
184
|
+
/**
|
|
185
|
+
* Simple heuristic-based reranking using keyword matching and position
|
|
186
|
+
*/
|
|
187
|
+
private simpleRerank;
|
|
188
|
+
/**
|
|
189
|
+
* Reciprocal Rank Fusion for combining multiple rankings
|
|
190
|
+
* Useful when you have multiple retrieval methods
|
|
191
|
+
*/
|
|
192
|
+
private reciprocalRankFusion;
|
|
193
|
+
}
|
|
194
|
+
export declare const reranker: (input: RerankerTaskInput, config?: JobQueueTaskConfig) => Promise<{
|
|
195
|
+
metadata?: {
|
|
196
|
+
[x: string]: unknown;
|
|
197
|
+
}[] | undefined;
|
|
198
|
+
chunks: string[];
|
|
199
|
+
scores: number[];
|
|
200
|
+
count: number;
|
|
201
|
+
originalIndices: number[];
|
|
202
|
+
}>;
|
|
203
|
+
declare module "@workglow/task-graph" {
|
|
204
|
+
interface Workflow {
|
|
205
|
+
reranker: CreateWorkflow<RerankerTaskInput, RerankerTaskOutput, JobQueueTaskConfig>;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export {};
|
|
209
|
+
//# sourceMappingURL=RerankerTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RerankerTask.d.ts","sourceRoot":"","sources":["../../src/task/RerankerTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAM5D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDkB,CAAC;AAEpC,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCiB,CAAC;AAEpC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AASjE;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;IAC/F,OAAc,IAAI,SAAkB;IACpC,OAAc,QAAQ,SAAS;IAC/B,OAAc,KAAK,SAAc;IACjC,OAAc,WAAW,SAAkD;IAC3E,OAAc,SAAS,UAAQ;IAC/B,OAAO,CAAC,yBAAyB,CAAC,CAAgB;WAEpC,WAAW,IAAI,cAAc;WAI7B,YAAY,IAAI,cAAc;IAItC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA4ChF,kBAAkB;IAuChC,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,OAAO,CAAC,YAAY;IAuDpB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAqB7B;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,iBAAiB,EAAE,SAAS,kBAAkB;;;;;;;;EAE7E,CAAC;AAEF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,QAAQ;QAChB,QAAQ,EAAE,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;KACrF;CACF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Steven Roussey <sroussey@gmail.com>
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { CreateWorkflow, IExecuteContext, JobQueueTaskConfig, Task } from "@workglow/task-graph";
|
|
7
|
+
import { DataPortSchema, FromSchema } from "@workglow/util";
|
|
8
|
+
declare const inputSchema: {
|
|
9
|
+
readonly type: "object";
|
|
10
|
+
readonly properties: {
|
|
11
|
+
readonly text: {
|
|
12
|
+
readonly type: "string";
|
|
13
|
+
readonly title: "Text";
|
|
14
|
+
readonly description: "The text content to parse";
|
|
15
|
+
};
|
|
16
|
+
readonly title: {
|
|
17
|
+
readonly type: "string";
|
|
18
|
+
readonly title: "Title";
|
|
19
|
+
readonly description: "Document title";
|
|
20
|
+
};
|
|
21
|
+
readonly format: {
|
|
22
|
+
readonly type: "string";
|
|
23
|
+
readonly enum: readonly ["markdown", "text", "auto"];
|
|
24
|
+
readonly title: "Format";
|
|
25
|
+
readonly description: "Document format (auto-detects if not specified)";
|
|
26
|
+
readonly default: "auto";
|
|
27
|
+
};
|
|
28
|
+
readonly sourceUri: {
|
|
29
|
+
readonly type: "string";
|
|
30
|
+
readonly title: "Source URI";
|
|
31
|
+
readonly description: "Source identifier for document ID generation";
|
|
32
|
+
};
|
|
33
|
+
readonly doc_id: {
|
|
34
|
+
readonly type: "string";
|
|
35
|
+
readonly title: "Document ID";
|
|
36
|
+
readonly description: "Pre-generated document ID (optional)";
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
readonly required: readonly ["text", "title"];
|
|
40
|
+
readonly additionalProperties: false;
|
|
41
|
+
};
|
|
42
|
+
declare const outputSchema: {
|
|
43
|
+
readonly type: "object";
|
|
44
|
+
readonly properties: {
|
|
45
|
+
readonly doc_id: {
|
|
46
|
+
readonly type: "string";
|
|
47
|
+
readonly title: "Document ID";
|
|
48
|
+
readonly description: "Generated or provided document ID";
|
|
49
|
+
};
|
|
50
|
+
readonly documentTree: {
|
|
51
|
+
readonly title: "Document Tree";
|
|
52
|
+
readonly description: "Parsed hierarchical document tree";
|
|
53
|
+
};
|
|
54
|
+
readonly nodeCount: {
|
|
55
|
+
readonly type: "number";
|
|
56
|
+
readonly title: "Node Count";
|
|
57
|
+
readonly description: "Total number of nodes in the tree";
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
readonly required: readonly ["doc_id", "documentTree", "nodeCount"];
|
|
61
|
+
readonly additionalProperties: false;
|
|
62
|
+
};
|
|
63
|
+
export type StructuralParserTaskInput = FromSchema<typeof inputSchema>;
|
|
64
|
+
export type StructuralParserTaskOutput = FromSchema<typeof outputSchema>;
|
|
65
|
+
/**
|
|
66
|
+
* Task for parsing documents into hierarchical tree structure
|
|
67
|
+
* Supports markdown and plain text with automatic format detection
|
|
68
|
+
*/
|
|
69
|
+
export declare class StructuralParserTask extends Task<StructuralParserTaskInput, StructuralParserTaskOutput, JobQueueTaskConfig> {
|
|
70
|
+
static type: string;
|
|
71
|
+
static category: string;
|
|
72
|
+
static title: string;
|
|
73
|
+
static description: string;
|
|
74
|
+
static cacheable: boolean;
|
|
75
|
+
static inputSchema(): DataPortSchema;
|
|
76
|
+
static outputSchema(): DataPortSchema;
|
|
77
|
+
execute(input: StructuralParserTaskInput, context: IExecuteContext): Promise<StructuralParserTaskOutput>;
|
|
78
|
+
private countNodes;
|
|
79
|
+
}
|
|
80
|
+
export declare const structuralParser: (input: StructuralParserTaskInput, config?: JobQueueTaskConfig) => Promise<{
|
|
81
|
+
doc_id: string;
|
|
82
|
+
documentTree: unknown;
|
|
83
|
+
nodeCount: number;
|
|
84
|
+
}>;
|
|
85
|
+
declare module "@workglow/task-graph" {
|
|
86
|
+
interface Workflow {
|
|
87
|
+
structuralParser: CreateWorkflow<StructuralParserTaskInput, StructuralParserTaskOutput, JobQueueTaskConfig>;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=StructuralParserTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StructuralParserTask.d.ts","sourceRoot":"","sources":["../../src/task/StructuralParserTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAS,MAAM,gBAAgB,CAAC;AAEnE,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCkB,CAAC;AAEpC,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;CAoBiB,CAAC;AAEpC,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AACvE,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzE;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,IAAI,CAC5C,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,CACnB;IACC,OAAc,IAAI,SAA0B;IAC5C,OAAc,QAAQ,SAAc;IACpC,OAAc,KAAK,SAAuB;IAC1C,OAAc,WAAW,SAAsD;IAC/E,OAAc,SAAS,UAAQ;WAEjB,WAAW,IAAI,cAAc;WAI7B,YAAY,IAAI,cAAc;IAItC,OAAO,CACX,KAAK,EAAE,yBAAyB,EAChC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,0BAA0B,CAAC;IA2BtC,OAAO,CAAC,UAAU;CASnB;AAED,eAAO,MAAM,gBAAgB,GAAI,OAAO,yBAAyB,EAAE,SAAS,kBAAkB;;;;EAE7F,CAAC;AAEF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,QAAQ;QAChB,gBAAgB,EAAE,cAAc,CAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,CACnB,CAAC;KACH;CACF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Steven Roussey <sroussey@gmail.com>
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { CreateWorkflow, IExecuteContext, JobQueueTaskConfig, Task } from "@workglow/task-graph";
|
|
7
|
+
import { DataPortSchema, FromSchema } from "@workglow/util";
|
|
8
|
+
export declare const ChunkingStrategy: {
|
|
9
|
+
readonly FIXED: "fixed";
|
|
10
|
+
readonly SENTENCE: "sentence";
|
|
11
|
+
readonly PARAGRAPH: "paragraph";
|
|
12
|
+
readonly SEMANTIC: "semantic";
|
|
13
|
+
};
|
|
14
|
+
export type ChunkingStrategy = (typeof ChunkingStrategy)[keyof typeof ChunkingStrategy];
|
|
15
|
+
declare const inputSchema: {
|
|
16
|
+
readonly type: "object";
|
|
17
|
+
readonly properties: {
|
|
18
|
+
readonly text: {
|
|
19
|
+
readonly type: "string";
|
|
20
|
+
readonly title: "Text";
|
|
21
|
+
readonly description: "The text to chunk";
|
|
22
|
+
};
|
|
23
|
+
readonly chunkSize: {
|
|
24
|
+
readonly type: "number";
|
|
25
|
+
readonly title: "Chunk Size";
|
|
26
|
+
readonly description: "Maximum size of each chunk in characters";
|
|
27
|
+
readonly minimum: 1;
|
|
28
|
+
readonly default: 512;
|
|
29
|
+
};
|
|
30
|
+
readonly chunkOverlap: {
|
|
31
|
+
readonly type: "number";
|
|
32
|
+
readonly title: "Chunk Overlap";
|
|
33
|
+
readonly description: "Number of characters to overlap between chunks";
|
|
34
|
+
readonly minimum: 0;
|
|
35
|
+
readonly default: 50;
|
|
36
|
+
};
|
|
37
|
+
readonly strategy: {
|
|
38
|
+
readonly type: "string";
|
|
39
|
+
readonly enum: ("fixed" | "sentence" | "paragraph" | "semantic")[];
|
|
40
|
+
readonly title: "Chunking Strategy";
|
|
41
|
+
readonly description: "Strategy to use for chunking text";
|
|
42
|
+
readonly default: "fixed";
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
readonly required: readonly ["text"];
|
|
46
|
+
readonly additionalProperties: false;
|
|
47
|
+
};
|
|
48
|
+
declare const outputSchema: {
|
|
49
|
+
readonly type: "object";
|
|
50
|
+
readonly properties: {
|
|
51
|
+
readonly chunks: {
|
|
52
|
+
readonly type: "array";
|
|
53
|
+
readonly items: {
|
|
54
|
+
readonly type: "string";
|
|
55
|
+
};
|
|
56
|
+
readonly title: "Text Chunks";
|
|
57
|
+
readonly description: "The chunked text segments";
|
|
58
|
+
};
|
|
59
|
+
readonly metadata: {
|
|
60
|
+
readonly type: "array";
|
|
61
|
+
readonly items: {
|
|
62
|
+
readonly type: "object";
|
|
63
|
+
readonly properties: {
|
|
64
|
+
readonly index: {
|
|
65
|
+
readonly type: "number";
|
|
66
|
+
};
|
|
67
|
+
readonly startChar: {
|
|
68
|
+
readonly type: "number";
|
|
69
|
+
};
|
|
70
|
+
readonly endChar: {
|
|
71
|
+
readonly type: "number";
|
|
72
|
+
};
|
|
73
|
+
readonly length: {
|
|
74
|
+
readonly type: "number";
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
readonly additionalProperties: false;
|
|
78
|
+
};
|
|
79
|
+
readonly title: "Chunk Metadata";
|
|
80
|
+
readonly description: "Metadata for each chunk";
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
readonly required: readonly ["chunks", "metadata"];
|
|
84
|
+
readonly additionalProperties: false;
|
|
85
|
+
};
|
|
86
|
+
export type TextChunkerTaskInput = FromSchema<typeof inputSchema>;
|
|
87
|
+
export type TextChunkerTaskOutput = FromSchema<typeof outputSchema>;
|
|
88
|
+
/**
|
|
89
|
+
* Task for chunking text into smaller segments with configurable strategies.
|
|
90
|
+
* Supports fixed-size, sentence-based, paragraph-based, and semantic chunking.
|
|
91
|
+
*/
|
|
92
|
+
export declare class TextChunkerTask extends Task<TextChunkerTaskInput, TextChunkerTaskOutput, JobQueueTaskConfig> {
|
|
93
|
+
static type: string;
|
|
94
|
+
static category: string;
|
|
95
|
+
static title: string;
|
|
96
|
+
static description: string;
|
|
97
|
+
static cacheable: boolean;
|
|
98
|
+
static inputSchema(): DataPortSchema;
|
|
99
|
+
static outputSchema(): DataPortSchema;
|
|
100
|
+
execute(input: TextChunkerTaskInput, context: IExecuteContext): Promise<TextChunkerTaskOutput>;
|
|
101
|
+
/**
|
|
102
|
+
* Fixed-size chunking with overlap
|
|
103
|
+
*/
|
|
104
|
+
private chunkFixed;
|
|
105
|
+
/**
|
|
106
|
+
* Sentence-based chunking that respects sentence boundaries
|
|
107
|
+
*/
|
|
108
|
+
private chunkBySentence;
|
|
109
|
+
/**
|
|
110
|
+
* Paragraph-based chunking that respects paragraph boundaries
|
|
111
|
+
*/
|
|
112
|
+
private chunkByParagraph;
|
|
113
|
+
}
|
|
114
|
+
export declare const textChunker: (input: TextChunkerTaskInput, config?: JobQueueTaskConfig) => Promise<{
|
|
115
|
+
metadata: {
|
|
116
|
+
length?: number | undefined;
|
|
117
|
+
index?: number | undefined;
|
|
118
|
+
startChar?: number | undefined;
|
|
119
|
+
endChar?: number | undefined;
|
|
120
|
+
}[];
|
|
121
|
+
chunks: string[];
|
|
122
|
+
}>;
|
|
123
|
+
declare module "@workglow/task-graph" {
|
|
124
|
+
interface Workflow {
|
|
125
|
+
textChunker: CreateWorkflow<TextChunkerTaskInput, TextChunkerTaskOutput, JobQueueTaskConfig>;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export {};
|
|
129
|
+
//# sourceMappingURL=TextChunkerTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextChunkerTask.d.ts","sourceRoot":"","sources":["../../src/task/TextChunkerTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAExF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCkB,CAAC;AAEpC,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BiB,CAAC;AAEpC,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AASpE;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,IAAI,CACvC,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,CACnB;IACC,OAAc,IAAI,SAAqB;IACvC,OAAc,QAAQ,SAAc;IACpC,OAAc,KAAK,SAAkB;IACrC,OAAc,WAAW,SACyD;IAClF,OAAc,SAAS,UAAQ;WAEjB,WAAW,IAAI,cAAc;WAI7B,YAAY,IAAI,cAAc;IAItC,OAAO,CACX,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,qBAAqB,CAAC;IA2BjC;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoFvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoEzB;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,oBAAoB,EAAE,SAAS,kBAAkB;;;;;;;;EAEnF,CAAC;AAEF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,QAAQ;QAChB,WAAW,EAAE,cAAc,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;KAC9F;CACF"}
|
|
@@ -6,27 +6,13 @@
|
|
|
6
6
|
import { CreateWorkflow, JobQueueTaskConfig } from "@workglow/task-graph";
|
|
7
7
|
import { DataPortSchema, FromSchema } from "@workglow/util";
|
|
8
8
|
import { AiTask } from "./base/AiTask";
|
|
9
|
-
import { DeReplicateFromSchema } from "./base/AiTaskSchemas";
|
|
10
9
|
export declare const TextClassificationInputSchema: {
|
|
11
10
|
readonly type: "object";
|
|
12
11
|
readonly properties: {
|
|
13
12
|
readonly text: {
|
|
14
|
-
readonly "
|
|
15
|
-
readonly
|
|
16
|
-
readonly
|
|
17
|
-
type: "string";
|
|
18
|
-
title: string;
|
|
19
|
-
description: string;
|
|
20
|
-
}, {
|
|
21
|
-
readonly type: "array";
|
|
22
|
-
readonly items: {
|
|
23
|
-
type: "string";
|
|
24
|
-
title: string;
|
|
25
|
-
description: string;
|
|
26
|
-
};
|
|
27
|
-
}];
|
|
28
|
-
readonly title: string | undefined;
|
|
29
|
-
readonly description: string | undefined;
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly title: "Text";
|
|
15
|
+
readonly description: "The text to classify";
|
|
30
16
|
};
|
|
31
17
|
readonly candidateLabels: {
|
|
32
18
|
readonly type: "array";
|
|
@@ -47,110 +33,53 @@ export declare const TextClassificationInputSchema: {
|
|
|
47
33
|
readonly "x-ui-group": "Configuration";
|
|
48
34
|
};
|
|
49
35
|
readonly model: {
|
|
50
|
-
readonly "x-replicate": true;
|
|
51
|
-
readonly format?: string | undefined;
|
|
52
36
|
readonly oneOf: readonly [{
|
|
53
|
-
readonly
|
|
54
|
-
|
|
55
|
-
readonly description: `The model ${string}`;
|
|
56
|
-
} & {
|
|
57
|
-
readonly format: import(".").TypeModelSemantic;
|
|
58
|
-
readonly type: "string";
|
|
59
|
-
}, {
|
|
60
|
-
readonly type: "object";
|
|
61
|
-
readonly properties: {
|
|
62
|
-
readonly model_id: {
|
|
63
|
-
readonly type: "string";
|
|
64
|
-
};
|
|
65
|
-
readonly tasks: {
|
|
66
|
-
readonly type: "array";
|
|
67
|
-
readonly items: {
|
|
68
|
-
readonly type: "string";
|
|
69
|
-
};
|
|
70
|
-
readonly "x-ui-editor": "multiselect";
|
|
71
|
-
};
|
|
72
|
-
readonly title: {
|
|
73
|
-
readonly type: "string";
|
|
74
|
-
};
|
|
75
|
-
readonly description: {
|
|
76
|
-
readonly type: "string";
|
|
77
|
-
readonly "x-ui-editor": "textarea";
|
|
78
|
-
};
|
|
79
|
-
readonly provider: {
|
|
80
|
-
readonly type: "string";
|
|
81
|
-
};
|
|
82
|
-
readonly provider_config: {
|
|
83
|
-
readonly type: "object";
|
|
84
|
-
readonly default: {};
|
|
85
|
-
};
|
|
86
|
-
readonly metadata: {
|
|
87
|
-
readonly type: "object";
|
|
88
|
-
readonly default: {};
|
|
89
|
-
readonly "x-ui-hidden": true;
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
readonly required: readonly ["provider", "provider_config"];
|
|
93
|
-
readonly format: "model";
|
|
94
|
-
readonly additionalProperties: false;
|
|
95
|
-
} & {
|
|
96
|
-
readonly format: import(".").TypeModelSemantic;
|
|
97
|
-
}];
|
|
37
|
+
readonly title: "Model";
|
|
38
|
+
readonly description: `The model ${string}`;
|
|
98
39
|
} & {
|
|
99
40
|
readonly format: import(".").TypeModelSemantic;
|
|
41
|
+
readonly type: "string";
|
|
100
42
|
}, {
|
|
101
|
-
readonly type: "
|
|
102
|
-
readonly
|
|
103
|
-
readonly
|
|
104
|
-
readonly title: "Model";
|
|
105
|
-
readonly description: `The model ${string}`;
|
|
106
|
-
} & {
|
|
107
|
-
readonly format: import(".").TypeModelSemantic;
|
|
43
|
+
readonly type: "object";
|
|
44
|
+
readonly properties: {
|
|
45
|
+
readonly model_id: {
|
|
108
46
|
readonly type: "string";
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
readonly
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
};
|
|
115
|
-
readonly tasks: {
|
|
116
|
-
readonly type: "array";
|
|
117
|
-
readonly items: {
|
|
118
|
-
readonly type: "string";
|
|
119
|
-
};
|
|
120
|
-
readonly "x-ui-editor": "multiselect";
|
|
121
|
-
};
|
|
122
|
-
readonly title: {
|
|
123
|
-
readonly type: "string";
|
|
124
|
-
};
|
|
125
|
-
readonly description: {
|
|
126
|
-
readonly type: "string";
|
|
127
|
-
readonly "x-ui-editor": "textarea";
|
|
128
|
-
};
|
|
129
|
-
readonly provider: {
|
|
130
|
-
readonly type: "string";
|
|
131
|
-
};
|
|
132
|
-
readonly provider_config: {
|
|
133
|
-
readonly type: "object";
|
|
134
|
-
readonly default: {};
|
|
135
|
-
};
|
|
136
|
-
readonly metadata: {
|
|
137
|
-
readonly type: "object";
|
|
138
|
-
readonly default: {};
|
|
139
|
-
readonly "x-ui-hidden": true;
|
|
140
|
-
};
|
|
47
|
+
};
|
|
48
|
+
readonly tasks: {
|
|
49
|
+
readonly type: "array";
|
|
50
|
+
readonly items: {
|
|
51
|
+
readonly type: "string";
|
|
141
52
|
};
|
|
142
|
-
readonly
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
53
|
+
readonly "x-ui-editor": "multiselect";
|
|
54
|
+
};
|
|
55
|
+
readonly title: {
|
|
56
|
+
readonly type: "string";
|
|
57
|
+
};
|
|
58
|
+
readonly description: {
|
|
59
|
+
readonly type: "string";
|
|
60
|
+
readonly "x-ui-editor": "textarea";
|
|
61
|
+
};
|
|
62
|
+
readonly provider: {
|
|
63
|
+
readonly type: "string";
|
|
64
|
+
};
|
|
65
|
+
readonly provider_config: {
|
|
66
|
+
readonly type: "object";
|
|
67
|
+
readonly default: {};
|
|
68
|
+
};
|
|
69
|
+
readonly metadata: {
|
|
70
|
+
readonly type: "object";
|
|
71
|
+
readonly default: {};
|
|
72
|
+
readonly "x-ui-hidden": true;
|
|
73
|
+
};
|
|
150
74
|
};
|
|
75
|
+
readonly required: readonly ["provider", "provider_config"];
|
|
76
|
+
readonly format: "model";
|
|
77
|
+
readonly additionalProperties: false;
|
|
78
|
+
} & {
|
|
79
|
+
readonly format: import(".").TypeModelSemantic;
|
|
151
80
|
}];
|
|
152
|
-
|
|
153
|
-
readonly
|
|
81
|
+
} & {
|
|
82
|
+
readonly format: import(".").TypeModelSemantic;
|
|
154
83
|
};
|
|
155
84
|
};
|
|
156
85
|
readonly required: readonly ["text", "model"];
|
|
@@ -187,8 +116,6 @@ export declare const TextClassificationOutputSchema: {
|
|
|
187
116
|
};
|
|
188
117
|
export type TextClassificationTaskInput = FromSchema<typeof TextClassificationInputSchema>;
|
|
189
118
|
export type TextClassificationTaskOutput = FromSchema<typeof TextClassificationOutputSchema>;
|
|
190
|
-
export type TextClassificationTaskExecuteInput = DeReplicateFromSchema<typeof TextClassificationInputSchema>;
|
|
191
|
-
export type TextClassificationTaskExecuteOutput = DeReplicateFromSchema<typeof TextClassificationOutputSchema>;
|
|
192
119
|
/**
|
|
193
120
|
* Classifies text into categories using language models.
|
|
194
121
|
* Automatically selects between regular and zero-shot classification based on whether candidate labels are provided.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextClassificationTask.d.ts","sourceRoot":"","sources":["../../src/task/TextClassificationTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"TextClassificationTask.d.ts","sourceRoot":"","sources":["../../src/task/TextClassificationTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAY,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAKvC,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BP,CAAC;AAEpC,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BR,CAAC;AAEpC,MAAM,MAAM,2BAA2B,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAC3F,MAAM,MAAM,4BAA4B,GAAG,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE7F;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,MAAM,CAChD,2BAA2B,EAC3B,4BAA4B,CAC7B;IACC,OAAc,IAAI,SAA4B;IAC9C,OAAc,QAAQ,SAAmB;IACzC,OAAc,KAAK,SAAqB;IACxC,OAAc,WAAW,SACwG;WACnH,WAAW,IAAI,cAAc;WAG7B,YAAY,IAAI,cAAc;CAG7C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,2BAA2B,EAClC,SAAS,kBAAkB;;;;;EAG5B,CAAC;AAEF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,QAAQ;QAChB,kBAAkB,EAAE,cAAc,CAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,CACnB,CAAC;KACH;CACF"}
|