@things-factory/integration-label-studio 9.1.19
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/CHANGELOG.md +85 -0
- package/EXTERNAL_DATA_SOURCING.md +484 -0
- package/IMPLEMENTATION_GUIDE.md +469 -0
- package/INTEGRATION.md +279 -0
- package/README.md +1014 -0
- package/SETUP_GUIDE.md +577 -0
- package/TEST_GUIDE.md +387 -0
- package/UI_CUSTOMIZATION.md +395 -0
- package/USER_SYNC_GUIDE.md +514 -0
- package/client/bootstrap.ts +1 -0
- package/client/index.ts +1 -0
- package/client/label-studio-label-page.ts +52 -0
- package/client/label-studio-project-create.ts +216 -0
- package/client/label-studio-project-list.ts +214 -0
- package/client/label-studio-wrapper.ts +294 -0
- package/client/route.ts +15 -0
- package/client/tsconfig.json +13 -0
- package/config/config.development.js +124 -0
- package/config/config.production.js +182 -0
- package/dist-client/bootstrap.d.ts +1 -0
- package/dist-client/bootstrap.js +2 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/index.d.ts +1 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/label-studio-label-page.d.ts +8 -0
- package/dist-client/label-studio-label-page.js +54 -0
- package/dist-client/label-studio-label-page.js.map +1 -0
- package/dist-client/label-studio-project-create.d.ts +16 -0
- package/dist-client/label-studio-project-create.js +235 -0
- package/dist-client/label-studio-project-create.js.map +1 -0
- package/dist-client/label-studio-project-list.d.ts +16 -0
- package/dist-client/label-studio-project-list.js +222 -0
- package/dist-client/label-studio-project-list.js.map +1 -0
- package/dist-client/label-studio-wrapper.d.ts +57 -0
- package/dist-client/label-studio-wrapper.js +304 -0
- package/dist-client/label-studio-wrapper.js.map +1 -0
- package/dist-client/route.d.ts +1 -0
- package/dist-client/route.js +14 -0
- package/dist-client/route.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/controller/label-studio-role-mapper.d.ts +35 -0
- package/dist-server/controller/label-studio-role-mapper.js +65 -0
- package/dist-server/controller/label-studio-role-mapper.js.map +1 -0
- package/dist-server/controller/user-provisioning-service.d.ts +66 -0
- package/dist-server/controller/user-provisioning-service.js +264 -0
- package/dist-server/controller/user-provisioning-service.js.map +1 -0
- package/dist-server/index.d.ts +7 -0
- package/dist-server/index.js +19 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/route/label-studio-sso.d.ts +2 -0
- package/dist-server/route/label-studio-sso.js +156 -0
- package/dist-server/route/label-studio-sso.js.map +1 -0
- package/dist-server/route/webhook.d.ts +65 -0
- package/dist-server/route/webhook.js +248 -0
- package/dist-server/route/webhook.js.map +1 -0
- package/dist-server/route.d.ts +1 -0
- package/dist-server/route.js +21 -0
- package/dist-server/route.js.map +1 -0
- package/dist-server/service/ai-prediction-service.d.ts +27 -0
- package/dist-server/service/ai-prediction-service.js +222 -0
- package/dist-server/service/ai-prediction-service.js.map +1 -0
- package/dist-server/service/dataset-labeling-integration.d.ts +44 -0
- package/dist-server/service/dataset-labeling-integration.js +512 -0
- package/dist-server/service/dataset-labeling-integration.js.map +1 -0
- package/dist-server/service/external-data-source-service.d.ts +78 -0
- package/dist-server/service/external-data-source-service.js +415 -0
- package/dist-server/service/external-data-source-service.js.map +1 -0
- package/dist-server/service/index.d.ts +12 -0
- package/dist-server/service/index.js +27 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/label-studio-sso-service.d.ts +38 -0
- package/dist-server/service/label-studio-sso-service.js +98 -0
- package/dist-server/service/label-studio-sso-service.js.map +1 -0
- package/dist-server/service/ml/ml-backend-service.d.ts +23 -0
- package/dist-server/service/ml/ml-backend-service.js +153 -0
- package/dist-server/service/ml/ml-backend-service.js.map +1 -0
- package/dist-server/service/prediction/prediction-management.d.ts +32 -0
- package/dist-server/service/prediction/prediction-management.js +299 -0
- package/dist-server/service/prediction/prediction-management.js.map +1 -0
- package/dist-server/service/project/project-management.d.ts +36 -0
- package/dist-server/service/project/project-management.js +309 -0
- package/dist-server/service/project/project-management.js.map +1 -0
- package/dist-server/service/task/task-management.d.ts +42 -0
- package/dist-server/service/task/task-management.js +372 -0
- package/dist-server/service/task/task-management.js.map +1 -0
- package/dist-server/service/user-provisioning/user-sync-mutation.d.ts +28 -0
- package/dist-server/service/user-provisioning/user-sync-mutation.js +111 -0
- package/dist-server/service/user-provisioning/user-sync-mutation.js.map +1 -0
- package/dist-server/service/webhook/webhook-management.d.ts +21 -0
- package/dist-server/service/webhook/webhook-management.js +134 -0
- package/dist-server/service/webhook/webhook-management.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/dist-server/types/dataset-labeling-types.d.ts +71 -0
- package/dist-server/types/dataset-labeling-types.js +259 -0
- package/dist-server/types/dataset-labeling-types.js.map +1 -0
- package/dist-server/types/label-studio-types.d.ts +128 -0
- package/dist-server/types/label-studio-types.js +494 -0
- package/dist-server/types/label-studio-types.js.map +1 -0
- package/dist-server/types/prediction-types.d.ts +39 -0
- package/dist-server/types/prediction-types.js +121 -0
- package/dist-server/types/prediction-types.js.map +1 -0
- package/dist-server/utils/annotation-exporter.d.ts +104 -0
- package/dist-server/utils/annotation-exporter.js +261 -0
- package/dist-server/utils/annotation-exporter.js.map +1 -0
- package/dist-server/utils/label-config-builder.d.ts +117 -0
- package/dist-server/utils/label-config-builder.js +286 -0
- package/dist-server/utils/label-config-builder.js.map +1 -0
- package/dist-server/utils/label-studio-api-client.d.ts +180 -0
- package/dist-server/utils/label-studio-api-client.js +401 -0
- package/dist-server/utils/label-studio-api-client.js.map +1 -0
- package/dist-server/utils/media-url-extractor.d.ts +45 -0
- package/dist-server/utils/media-url-extractor.js +152 -0
- package/dist-server/utils/media-url-extractor.js.map +1 -0
- package/dist-server/utils/task-transformer.d.ts +108 -0
- package/dist-server/utils/task-transformer.js +260 -0
- package/dist-server/utils/task-transformer.js.map +1 -0
- package/package.json +47 -0
- package/server/SERVER_STRUCTURE.md +351 -0
- package/server/controller/label-studio-role-mapper.ts +76 -0
- package/server/controller/user-provisioning-service.ts +340 -0
- package/server/index.ts +19 -0
- package/server/route/label-studio-sso.ts +194 -0
- package/server/route/webhook.ts +304 -0
- package/server/route.ts +35 -0
- package/server/service/ai-prediction-service.ts +239 -0
- package/server/service/dataset-labeling-integration.ts +590 -0
- package/server/service/external-data-source-service.ts +438 -0
- package/server/service/index.ts +24 -0
- package/server/service/label-studio-sso-service.ts +108 -0
- package/server/service/labeling-scenario-service.ts.deprecated +566 -0
- package/server/service/ml/ml-backend-service.ts +127 -0
- package/server/service/prediction/prediction-management.ts +281 -0
- package/server/service/project/project-management.ts +284 -0
- package/server/service/task/task-management.ts +363 -0
- package/server/service/user-provisioning/user-sync-mutation.ts +80 -0
- package/server/service/webhook/webhook-management.ts +109 -0
- package/server/tsconfig.json +11 -0
- package/server/types/dataset-labeling-types.ts +181 -0
- package/server/types/global.d.ts +23 -0
- package/server/types/label-studio-types.ts +346 -0
- package/server/types/prediction-types.ts +86 -0
- package/server/types/scenario-types.ts.deprecated +362 -0
- package/server/utils/annotation-exporter.ts +340 -0
- package/server/utils/label-config-builder.ts +340 -0
- package/server/utils/label-studio-api-client.ts +487 -0
- package/server/utils/media-url-extractor.ts +193 -0
- package/server/utils/task-transformer.ts +342 -0
- package/test-ai-prediction.js +268 -0
- package/test-dataset-integration.js +449 -0
- package/test-simple.js +89 -0
- package/things-factory.config.js +12 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Label Config Builder
|
|
4
|
+
*
|
|
5
|
+
* Flexible, declarative Label Studio configuration generator.
|
|
6
|
+
* Supports any data type and control combination without hardcoding templates.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.LabelConfigTemplates = exports.LabelConfigBuilder = void 0;
|
|
10
|
+
class LabelConfigBuilder {
|
|
11
|
+
/**
|
|
12
|
+
* Build Label Studio XML configuration from specification
|
|
13
|
+
*/
|
|
14
|
+
static build(spec) {
|
|
15
|
+
const dataName = spec.dataName || 'data';
|
|
16
|
+
const dataTag = this.buildDataTag(spec.dataType, dataName);
|
|
17
|
+
const controlTags = spec.controls.map(c => this.buildControlTag(c));
|
|
18
|
+
return `
|
|
19
|
+
<View>
|
|
20
|
+
${dataTag}
|
|
21
|
+
${controlTags.join('\n ')}
|
|
22
|
+
</View>
|
|
23
|
+
`.trim();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build data source tag (Image, Text, Audio, etc.)
|
|
27
|
+
*/
|
|
28
|
+
static buildDataTag(type, name) {
|
|
29
|
+
const capitalizedType = type.charAt(0).toUpperCase() + type.slice(1);
|
|
30
|
+
return `<${capitalizedType} name="${name}" value="$${name}"/>`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build control tag based on type
|
|
34
|
+
*/
|
|
35
|
+
static buildControlTag(control) {
|
|
36
|
+
switch (control.type) {
|
|
37
|
+
case 'choices':
|
|
38
|
+
return this.buildChoices(control);
|
|
39
|
+
case 'labels':
|
|
40
|
+
return this.buildLabels(control);
|
|
41
|
+
case 'textarea':
|
|
42
|
+
return this.buildTextArea(control);
|
|
43
|
+
case 'rating':
|
|
44
|
+
return this.buildRating(control);
|
|
45
|
+
case 'rectangles':
|
|
46
|
+
return this.buildRectangles(control);
|
|
47
|
+
case 'polygon':
|
|
48
|
+
return this.buildPolygon(control);
|
|
49
|
+
case 'keypoint':
|
|
50
|
+
return this.buildKeypoint(control);
|
|
51
|
+
case 'brush':
|
|
52
|
+
return this.buildBrush(control);
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`Unknown control type: ${control.type}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build Choices control (single or multiple selection)
|
|
59
|
+
*/
|
|
60
|
+
static buildChoices(control) {
|
|
61
|
+
const config = control.config;
|
|
62
|
+
const choice = config.choice || 'single';
|
|
63
|
+
const required = config.required ? 'required="true"' : '';
|
|
64
|
+
const choiceElements = config.choices
|
|
65
|
+
.map(c => ` <Choice value="${this.escapeXml(c)}"/>`)
|
|
66
|
+
.join('\n');
|
|
67
|
+
return `<Choices name="${control.name}" toName="${control.toName}" choice="${choice}" ${required}>
|
|
68
|
+
${choiceElements}
|
|
69
|
+
</Choices>`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build Labels control (for NER, classification, etc.)
|
|
73
|
+
*/
|
|
74
|
+
static buildLabels(control) {
|
|
75
|
+
const config = control.config;
|
|
76
|
+
const labelElements = config.labels
|
|
77
|
+
.map(l => {
|
|
78
|
+
const background = l.background ? `background="${l.background}"` : '';
|
|
79
|
+
const hotkey = l.hotkey ? `hotkey="${l.hotkey}"` : '';
|
|
80
|
+
return ` <Label value="${this.escapeXml(l.value)}" ${background} ${hotkey}/>`;
|
|
81
|
+
})
|
|
82
|
+
.join('\n');
|
|
83
|
+
return `<Labels name="${control.name}" toName="${control.toName}">
|
|
84
|
+
${labelElements}
|
|
85
|
+
</Labels>`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build TextArea control
|
|
89
|
+
*/
|
|
90
|
+
static buildTextArea(control) {
|
|
91
|
+
const placeholder = control.config.placeholder ? `placeholder="${control.config.placeholder}"` : '';
|
|
92
|
+
const required = control.config.required ? 'required="true"' : '';
|
|
93
|
+
const maxSubmissions = control.config.maxSubmissions ? `maxSubmissions="${control.config.maxSubmissions}"` : '';
|
|
94
|
+
return `<TextArea name="${control.name}" toName="${control.toName}" ${placeholder} ${required} ${maxSubmissions}/>`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build Rating control
|
|
98
|
+
*/
|
|
99
|
+
static buildRating(control) {
|
|
100
|
+
const config = control.config;
|
|
101
|
+
const maxRating = config.maxRating || 5;
|
|
102
|
+
const icon = config.icon || 'star';
|
|
103
|
+
const size = config.size || 'medium';
|
|
104
|
+
return `<Rating name="${control.name}" toName="${control.toName}" maxRating="${maxRating}" icon="${icon}" size="${size}"/>`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Build Rectangle control (bounding boxes)
|
|
108
|
+
*/
|
|
109
|
+
static buildRectangles(control) {
|
|
110
|
+
const labels = control.config.labels ? `labels="${control.config.labels.join(',')}"` : '';
|
|
111
|
+
return `<Rectangle name="${control.name}" toName="${control.toName}" ${labels}/>`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Build Polygon control
|
|
115
|
+
*/
|
|
116
|
+
static buildPolygon(control) {
|
|
117
|
+
const labels = control.config.labels ? `labels="${control.config.labels.join(',')}"` : '';
|
|
118
|
+
return `<Polygon name="${control.name}" toName="${control.toName}" ${labels}/>`;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Build Keypoint control
|
|
122
|
+
*/
|
|
123
|
+
static buildKeypoint(control) {
|
|
124
|
+
const labels = control.config.labels ? `labels="${control.config.labels.join(',')}"` : '';
|
|
125
|
+
return `<KeyPoint name="${control.name}" toName="${control.toName}" ${labels}/>`;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Build Brush control (semantic segmentation)
|
|
129
|
+
*/
|
|
130
|
+
static buildBrush(control) {
|
|
131
|
+
const labels = control.config.labels ? `labels="${control.config.labels.join(',')}"` : '';
|
|
132
|
+
return `<Brush name="${control.name}" toName="${control.toName}" ${labels}/>`;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Escape XML special characters
|
|
136
|
+
*/
|
|
137
|
+
static escapeXml(str) {
|
|
138
|
+
return str
|
|
139
|
+
.replace(/&/g, '&')
|
|
140
|
+
.replace(/</g, '<')
|
|
141
|
+
.replace(/>/g, '>')
|
|
142
|
+
.replace(/"/g, '"')
|
|
143
|
+
.replace(/'/g, ''');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.LabelConfigBuilder = LabelConfigBuilder;
|
|
147
|
+
/**
|
|
148
|
+
* Pre-built template generators for common use cases
|
|
149
|
+
*/
|
|
150
|
+
class LabelConfigTemplates {
|
|
151
|
+
/**
|
|
152
|
+
* Generate Rank N image classification config
|
|
153
|
+
* Example: WBM Rank 3 classification
|
|
154
|
+
*/
|
|
155
|
+
static imageRankN(ranks, classes) {
|
|
156
|
+
const controls = [];
|
|
157
|
+
for (let i = 1; i <= ranks; i++) {
|
|
158
|
+
controls.push({
|
|
159
|
+
type: 'choices',
|
|
160
|
+
name: `rank${i}`,
|
|
161
|
+
toName: 'data',
|
|
162
|
+
config: {
|
|
163
|
+
choices: classes,
|
|
164
|
+
choice: 'single',
|
|
165
|
+
required: i === 1 // First rank is required
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
dataType: 'image',
|
|
171
|
+
controls
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Simple image classification
|
|
176
|
+
*/
|
|
177
|
+
static imageClassification(classes, multiLabel = false) {
|
|
178
|
+
return {
|
|
179
|
+
dataType: 'image',
|
|
180
|
+
controls: [
|
|
181
|
+
{
|
|
182
|
+
type: 'choices',
|
|
183
|
+
name: 'choice',
|
|
184
|
+
toName: 'data',
|
|
185
|
+
config: {
|
|
186
|
+
choices: classes,
|
|
187
|
+
choice: multiLabel ? 'multiple' : 'single',
|
|
188
|
+
required: true
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Text classification (sentiment, intent, etc.)
|
|
196
|
+
*/
|
|
197
|
+
static textClassification(classes) {
|
|
198
|
+
return {
|
|
199
|
+
dataType: 'text',
|
|
200
|
+
controls: [
|
|
201
|
+
{
|
|
202
|
+
type: 'choices',
|
|
203
|
+
name: 'choice',
|
|
204
|
+
toName: 'data',
|
|
205
|
+
config: {
|
|
206
|
+
choices: classes,
|
|
207
|
+
choice: 'single',
|
|
208
|
+
required: true
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Named Entity Recognition
|
|
216
|
+
*/
|
|
217
|
+
static namedEntityRecognition(labels) {
|
|
218
|
+
return {
|
|
219
|
+
dataType: 'text',
|
|
220
|
+
controls: [
|
|
221
|
+
{
|
|
222
|
+
type: 'labels',
|
|
223
|
+
name: 'label',
|
|
224
|
+
toName: 'data',
|
|
225
|
+
config: {
|
|
226
|
+
labels
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Object detection (bounding boxes)
|
|
234
|
+
*/
|
|
235
|
+
static objectDetection(labels) {
|
|
236
|
+
return {
|
|
237
|
+
dataType: 'image',
|
|
238
|
+
controls: [
|
|
239
|
+
{
|
|
240
|
+
type: 'rectangles',
|
|
241
|
+
name: 'bbox',
|
|
242
|
+
toName: 'data',
|
|
243
|
+
config: {
|
|
244
|
+
labels
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
type: 'labels',
|
|
249
|
+
name: 'label',
|
|
250
|
+
toName: 'data',
|
|
251
|
+
config: {
|
|
252
|
+
labels: labels.map(l => ({ value: l }))
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Semantic segmentation
|
|
260
|
+
*/
|
|
261
|
+
static semanticSegmentation(labels) {
|
|
262
|
+
return {
|
|
263
|
+
dataType: 'image',
|
|
264
|
+
controls: [
|
|
265
|
+
{
|
|
266
|
+
type: 'brush',
|
|
267
|
+
name: 'segmentation',
|
|
268
|
+
toName: 'data',
|
|
269
|
+
config: {
|
|
270
|
+
labels
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
type: 'labels',
|
|
275
|
+
name: 'label',
|
|
276
|
+
toName: 'data',
|
|
277
|
+
config: {
|
|
278
|
+
labels: labels.map(l => ({ value: l }))
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
]
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.LabelConfigTemplates = LabelConfigTemplates;
|
|
286
|
+
//# sourceMappingURL=label-config-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-config-builder.js","sourceRoot":"","sources":["../../server/utils/label-config-builder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Label Config Builder\n *\n * Flexible, declarative Label Studio configuration generator.\n * Supports any data type and control combination without hardcoding templates.\n */\n\nexport interface LabelConfigSpec {\n dataType: 'image' | 'text' | 'audio' | 'video' | 'timeseries' | 'html' | 'hypertext'\n dataName?: string // default: 'data'\n controls: ControlSpec[]\n}\n\nexport interface ControlSpec {\n type: 'choices' | 'labels' | 'textarea' | 'rating' | 'rectangles' | 'polygon' | 'keypoint' | 'brush'\n name: string\n toName: string\n config: any\n}\n\nexport interface ChoicesConfig {\n choices: string[]\n choice?: 'single' | 'multiple'\n required?: boolean\n}\n\nexport interface LabelsConfig {\n labels: Array<{\n value: string\n background?: string\n hotkey?: string\n }>\n}\n\nexport interface RatingConfig {\n maxRating?: number\n icon?: string\n size?: 'small' | 'medium' | 'large'\n}\n\nexport class LabelConfigBuilder {\n /**\n * Build Label Studio XML configuration from specification\n */\n static build(spec: LabelConfigSpec): string {\n const dataName = spec.dataName || 'data'\n const dataTag = this.buildDataTag(spec.dataType, dataName)\n const controlTags = spec.controls.map(c => this.buildControlTag(c))\n\n return `\n<View>\n ${dataTag}\n ${controlTags.join('\\n ')}\n</View>\n `.trim()\n }\n\n /**\n * Build data source tag (Image, Text, Audio, etc.)\n */\n private static buildDataTag(type: string, name: string): string {\n const capitalizedType = type.charAt(0).toUpperCase() + type.slice(1)\n return `<${capitalizedType} name=\"${name}\" value=\"$${name}\"/>`\n }\n\n /**\n * Build control tag based on type\n */\n private static buildControlTag(control: ControlSpec): string {\n switch (control.type) {\n case 'choices':\n return this.buildChoices(control)\n case 'labels':\n return this.buildLabels(control)\n case 'textarea':\n return this.buildTextArea(control)\n case 'rating':\n return this.buildRating(control)\n case 'rectangles':\n return this.buildRectangles(control)\n case 'polygon':\n return this.buildPolygon(control)\n case 'keypoint':\n return this.buildKeypoint(control)\n case 'brush':\n return this.buildBrush(control)\n default:\n throw new Error(`Unknown control type: ${control.type}`)\n }\n }\n\n /**\n * Build Choices control (single or multiple selection)\n */\n private static buildChoices(control: ControlSpec): string {\n const config = control.config as ChoicesConfig\n const choice = config.choice || 'single'\n const required = config.required ? 'required=\"true\"' : ''\n\n const choiceElements = config.choices\n .map(c => ` <Choice value=\"${this.escapeXml(c)}\"/>`)\n .join('\\n')\n\n return `<Choices name=\"${control.name}\" toName=\"${control.toName}\" choice=\"${choice}\" ${required}>\n${choiceElements}\n </Choices>`\n }\n\n /**\n * Build Labels control (for NER, classification, etc.)\n */\n private static buildLabels(control: ControlSpec): string {\n const config = control.config as LabelsConfig\n\n const labelElements = config.labels\n .map(l => {\n const background = l.background ? `background=\"${l.background}\"` : ''\n const hotkey = l.hotkey ? `hotkey=\"${l.hotkey}\"` : ''\n return ` <Label value=\"${this.escapeXml(l.value)}\" ${background} ${hotkey}/>`\n })\n .join('\\n')\n\n return `<Labels name=\"${control.name}\" toName=\"${control.toName}\">\n${labelElements}\n </Labels>`\n }\n\n /**\n * Build TextArea control\n */\n private static buildTextArea(control: ControlSpec): string {\n const placeholder = control.config.placeholder ? `placeholder=\"${control.config.placeholder}\"` : ''\n const required = control.config.required ? 'required=\"true\"' : ''\n const maxSubmissions = control.config.maxSubmissions ? `maxSubmissions=\"${control.config.maxSubmissions}\"` : ''\n\n return `<TextArea name=\"${control.name}\" toName=\"${control.toName}\" ${placeholder} ${required} ${maxSubmissions}/>`\n }\n\n /**\n * Build Rating control\n */\n private static buildRating(control: ControlSpec): string {\n const config = control.config as RatingConfig\n const maxRating = config.maxRating || 5\n const icon = config.icon || 'star'\n const size = config.size || 'medium'\n\n return `<Rating name=\"${control.name}\" toName=\"${control.toName}\" maxRating=\"${maxRating}\" icon=\"${icon}\" size=\"${size}\"/>`\n }\n\n /**\n * Build Rectangle control (bounding boxes)\n */\n private static buildRectangles(control: ControlSpec): string {\n const labels = control.config.labels ? `labels=\"${control.config.labels.join(',')}\"` : ''\n return `<Rectangle name=\"${control.name}\" toName=\"${control.toName}\" ${labels}/>`\n }\n\n /**\n * Build Polygon control\n */\n private static buildPolygon(control: ControlSpec): string {\n const labels = control.config.labels ? `labels=\"${control.config.labels.join(',')}\"` : ''\n return `<Polygon name=\"${control.name}\" toName=\"${control.toName}\" ${labels}/>`\n }\n\n /**\n * Build Keypoint control\n */\n private static buildKeypoint(control: ControlSpec): string {\n const labels = control.config.labels ? `labels=\"${control.config.labels.join(',')}\"` : ''\n return `<KeyPoint name=\"${control.name}\" toName=\"${control.toName}\" ${labels}/>`\n }\n\n /**\n * Build Brush control (semantic segmentation)\n */\n private static buildBrush(control: ControlSpec): string {\n const labels = control.config.labels ? `labels=\"${control.config.labels.join(',')}\"` : ''\n return `<Brush name=\"${control.name}\" toName=\"${control.toName}\" ${labels}/>`\n }\n\n /**\n * Escape XML special characters\n */\n private static escapeXml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n }\n}\n\n/**\n * Pre-built template generators for common use cases\n */\nexport class LabelConfigTemplates {\n /**\n * Generate Rank N image classification config\n * Example: WBM Rank 3 classification\n */\n static imageRankN(ranks: number, classes: string[]): LabelConfigSpec {\n const controls: ControlSpec[] = []\n\n for (let i = 1; i <= ranks; i++) {\n controls.push({\n type: 'choices',\n name: `rank${i}`,\n toName: 'data',\n config: {\n choices: classes,\n choice: 'single',\n required: i === 1 // First rank is required\n }\n })\n }\n\n return {\n dataType: 'image',\n controls\n }\n }\n\n /**\n * Simple image classification\n */\n static imageClassification(classes: string[], multiLabel: boolean = false): LabelConfigSpec {\n return {\n dataType: 'image',\n controls: [\n {\n type: 'choices',\n name: 'choice',\n toName: 'data',\n config: {\n choices: classes,\n choice: multiLabel ? 'multiple' : 'single',\n required: true\n }\n }\n ]\n }\n }\n\n /**\n * Text classification (sentiment, intent, etc.)\n */\n static textClassification(classes: string[]): LabelConfigSpec {\n return {\n dataType: 'text',\n controls: [\n {\n type: 'choices',\n name: 'choice',\n toName: 'data',\n config: {\n choices: classes,\n choice: 'single',\n required: true\n }\n }\n ]\n }\n }\n\n /**\n * Named Entity Recognition\n */\n static namedEntityRecognition(labels: Array<{ value: string; background: string }>): LabelConfigSpec {\n return {\n dataType: 'text',\n controls: [\n {\n type: 'labels',\n name: 'label',\n toName: 'data',\n config: {\n labels\n }\n }\n ]\n }\n }\n\n /**\n * Object detection (bounding boxes)\n */\n static objectDetection(labels: string[]): LabelConfigSpec {\n return {\n dataType: 'image',\n controls: [\n {\n type: 'rectangles',\n name: 'bbox',\n toName: 'data',\n config: {\n labels\n }\n },\n {\n type: 'labels',\n name: 'label',\n toName: 'data',\n config: {\n labels: labels.map(l => ({ value: l }))\n }\n }\n ]\n }\n }\n\n /**\n * Semantic segmentation\n */\n static semanticSegmentation(labels: string[]): LabelConfigSpec {\n return {\n dataType: 'image',\n controls: [\n {\n type: 'brush',\n name: 'segmentation',\n toName: 'data',\n config: {\n labels\n }\n },\n {\n type: 'labels',\n name: 'label',\n toName: 'data',\n config: {\n labels: labels.map(l => ({ value: l }))\n }\n }\n ]\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Label Studio API Client
|
|
3
|
+
* Provides methods to interact with Label Studio REST API
|
|
4
|
+
*/
|
|
5
|
+
export declare class LabelStudioApiClient {
|
|
6
|
+
private client;
|
|
7
|
+
private serverUrl;
|
|
8
|
+
private apiToken;
|
|
9
|
+
constructor();
|
|
10
|
+
private ensureInitialized;
|
|
11
|
+
/**
|
|
12
|
+
* Get all projects
|
|
13
|
+
*/
|
|
14
|
+
getProjects(): Promise<any[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Get project by ID
|
|
17
|
+
*/
|
|
18
|
+
getProject(projectId: number): Promise<any>;
|
|
19
|
+
/**
|
|
20
|
+
* Create new project
|
|
21
|
+
*/
|
|
22
|
+
createProject(data: {
|
|
23
|
+
title: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
label_config: string;
|
|
26
|
+
expert_instruction?: string;
|
|
27
|
+
}): Promise<any>;
|
|
28
|
+
/**
|
|
29
|
+
* Update project
|
|
30
|
+
*/
|
|
31
|
+
updateProject(projectId: number, data: any): Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
* Delete project
|
|
34
|
+
*/
|
|
35
|
+
deleteProject(projectId: number): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Get tasks for a project
|
|
38
|
+
*/
|
|
39
|
+
getTasks(projectId: number, params?: {
|
|
40
|
+
page?: number;
|
|
41
|
+
page_size?: number;
|
|
42
|
+
}): Promise<any>;
|
|
43
|
+
/**
|
|
44
|
+
* Get single task
|
|
45
|
+
*/
|
|
46
|
+
getTask(taskId: number): Promise<any>;
|
|
47
|
+
/**
|
|
48
|
+
* Create task
|
|
49
|
+
*/
|
|
50
|
+
createTask(projectId: number, data: any): Promise<any>;
|
|
51
|
+
/**
|
|
52
|
+
* Import tasks in bulk
|
|
53
|
+
*/
|
|
54
|
+
importTasks(projectId: number, tasks: any[]): Promise<any>;
|
|
55
|
+
/**
|
|
56
|
+
* Delete task
|
|
57
|
+
*/
|
|
58
|
+
deleteTask(taskId: number): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Get annotations for a task
|
|
61
|
+
*/
|
|
62
|
+
getAnnotations(taskId: number): Promise<any[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Create annotation
|
|
65
|
+
*/
|
|
66
|
+
createAnnotation(taskId: number, annotation: any): Promise<any>;
|
|
67
|
+
/**
|
|
68
|
+
* Update annotation
|
|
69
|
+
*/
|
|
70
|
+
updateAnnotation(annotationId: number, data: any): Promise<any>;
|
|
71
|
+
/**
|
|
72
|
+
* Delete annotation
|
|
73
|
+
*/
|
|
74
|
+
deleteAnnotation(annotationId: number): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Get all predictions for a task
|
|
77
|
+
*/
|
|
78
|
+
getPredictions(taskId: number): Promise<any[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Get predictions for a project
|
|
81
|
+
*/
|
|
82
|
+
getProjectPredictions(projectId: number): Promise<any[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Get single prediction by ID
|
|
85
|
+
*/
|
|
86
|
+
getPrediction(predictionId: number): Promise<any>;
|
|
87
|
+
/**
|
|
88
|
+
* Create a prediction for a task
|
|
89
|
+
*/
|
|
90
|
+
createPrediction(data: {
|
|
91
|
+
task: number;
|
|
92
|
+
result: any[];
|
|
93
|
+
score?: number;
|
|
94
|
+
model_version?: string;
|
|
95
|
+
}): Promise<any>;
|
|
96
|
+
/**
|
|
97
|
+
* Create predictions in bulk
|
|
98
|
+
*/
|
|
99
|
+
createPredictions(predictions: Array<{
|
|
100
|
+
task: number;
|
|
101
|
+
result: any[];
|
|
102
|
+
score?: number;
|
|
103
|
+
model_version?: string;
|
|
104
|
+
}>): Promise<any>;
|
|
105
|
+
/**
|
|
106
|
+
* Update prediction
|
|
107
|
+
*/
|
|
108
|
+
updatePrediction(predictionId: number, data: any): Promise<any>;
|
|
109
|
+
/**
|
|
110
|
+
* Delete prediction
|
|
111
|
+
*/
|
|
112
|
+
deletePrediction(predictionId: number): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Import predictions for a project
|
|
115
|
+
* This is useful for bulk importing AI model predictions
|
|
116
|
+
*/
|
|
117
|
+
importPredictions(projectId: number, predictions: any[]): Promise<any>;
|
|
118
|
+
/**
|
|
119
|
+
* Export annotations
|
|
120
|
+
*/
|
|
121
|
+
exportAnnotations(projectId: number, format?: 'JSON' | 'JSON_MIN' | 'CSV' | 'TSV' | 'CONLL2003' | 'COCO' | 'VOC' | 'YOLO'): Promise<any>;
|
|
122
|
+
/**
|
|
123
|
+
* Get export files
|
|
124
|
+
*/
|
|
125
|
+
getExportFiles(projectId: number): Promise<any[]>;
|
|
126
|
+
/**
|
|
127
|
+
* Get ML backends for project
|
|
128
|
+
*/
|
|
129
|
+
getMLBackends(projectId: number): Promise<any[]>;
|
|
130
|
+
/**
|
|
131
|
+
* Add ML backend to project
|
|
132
|
+
*/
|
|
133
|
+
addMLBackend(data: {
|
|
134
|
+
project: number;
|
|
135
|
+
url: string;
|
|
136
|
+
title: string;
|
|
137
|
+
is_interactive?: boolean;
|
|
138
|
+
}): Promise<any>;
|
|
139
|
+
/**
|
|
140
|
+
* Delete ML backend
|
|
141
|
+
*/
|
|
142
|
+
deleteMLBackend(mlBackendId: number): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Trigger predictions for tasks
|
|
145
|
+
*/
|
|
146
|
+
triggerPredictions(projectId: number, taskIds?: number[]): Promise<any>;
|
|
147
|
+
/**
|
|
148
|
+
* Train ML model
|
|
149
|
+
*/
|
|
150
|
+
trainModel(mlBackendId: number): Promise<any>;
|
|
151
|
+
/**
|
|
152
|
+
* Get project statistics
|
|
153
|
+
*/
|
|
154
|
+
getProjectStats(projectId: number): Promise<any>;
|
|
155
|
+
/**
|
|
156
|
+
* Get annotator statistics
|
|
157
|
+
*/
|
|
158
|
+
getAnnotatorStats(projectId: number): Promise<any[]>;
|
|
159
|
+
/**
|
|
160
|
+
* Create webhook
|
|
161
|
+
*/
|
|
162
|
+
createWebhook(data: {
|
|
163
|
+
project: number;
|
|
164
|
+
url: string;
|
|
165
|
+
send_payload?: boolean;
|
|
166
|
+
send_for_all_actions?: boolean;
|
|
167
|
+
headers?: {
|
|
168
|
+
[key: string]: string;
|
|
169
|
+
};
|
|
170
|
+
}): Promise<any>;
|
|
171
|
+
/**
|
|
172
|
+
* Get webhooks for project
|
|
173
|
+
*/
|
|
174
|
+
getWebhooks(projectId: number): Promise<any[]>;
|
|
175
|
+
/**
|
|
176
|
+
* Delete webhook
|
|
177
|
+
*/
|
|
178
|
+
deleteWebhook(webhookId: number): Promise<void>;
|
|
179
|
+
}
|
|
180
|
+
export declare const labelStudioApi: LabelStudioApiClient;
|