@workglow/ai 0.0.72 → 0.0.73
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/dist/browser.js +875 -87
- package/dist/browser.js.map +8 -3
- package/dist/bun.js +875 -87
- package/dist/bun.js.map +8 -3
- package/dist/node.js +875 -87
- package/dist/node.js.map +8 -3
- package/dist/task/FaceDetectorTask.d.ts +520 -0
- package/dist/task/FaceDetectorTask.d.ts.map +1 -0
- package/dist/task/FaceLandmarkerTask.d.ts +549 -0
- package/dist/task/FaceLandmarkerTask.d.ts.map +1 -0
- package/dist/task/GestureRecognizerTask.d.ts +629 -0
- package/dist/task/GestureRecognizerTask.d.ts.map +1 -0
- package/dist/task/HandLandmarkerTask.d.ts +576 -0
- package/dist/task/HandLandmarkerTask.d.ts.map +1 -0
- package/dist/task/PoseLandmarkerTask.d.ts +637 -0
- package/dist/task/PoseLandmarkerTask.d.ts.map +1 -0
- package/dist/task/index.d.ts +5 -0
- package/dist/task/index.d.ts.map +1 -1
- package/package.json +9 -9
package/dist/bun.js
CHANGED
|
@@ -1005,14 +1005,620 @@ var DownloadModel = (input, config) => {
|
|
|
1005
1005
|
return new DownloadModelTask(input, config).run();
|
|
1006
1006
|
};
|
|
1007
1007
|
Workflow3.prototype.DownloadModel = CreateWorkflow3(DownloadModelTask);
|
|
1008
|
-
// src/task/
|
|
1008
|
+
// src/task/FaceDetectorTask.ts
|
|
1009
1009
|
import { CreateWorkflow as CreateWorkflow4, TaskRegistry as TaskRegistry4, Workflow as Workflow4 } from "@workglow/task-graph";
|
|
1010
|
-
var modelSchema3 = TypeReplicateArray(TypeModel("model:
|
|
1011
|
-
var
|
|
1010
|
+
var modelSchema3 = TypeReplicateArray(TypeModel("model:FaceDetectorTask"));
|
|
1011
|
+
var TypeBoundingBox2 = {
|
|
1012
|
+
type: "object",
|
|
1013
|
+
properties: {
|
|
1014
|
+
x: {
|
|
1015
|
+
type: "number",
|
|
1016
|
+
title: "X Coordinate",
|
|
1017
|
+
description: "X coordinate of the top-left corner"
|
|
1018
|
+
},
|
|
1019
|
+
y: {
|
|
1020
|
+
type: "number",
|
|
1021
|
+
title: "Y Coordinate",
|
|
1022
|
+
description: "Y coordinate of the top-left corner"
|
|
1023
|
+
},
|
|
1024
|
+
width: {
|
|
1025
|
+
type: "number",
|
|
1026
|
+
title: "Width",
|
|
1027
|
+
description: "Width of the bounding box"
|
|
1028
|
+
},
|
|
1029
|
+
height: {
|
|
1030
|
+
type: "number",
|
|
1031
|
+
title: "Height",
|
|
1032
|
+
description: "Height of the bounding box"
|
|
1033
|
+
}
|
|
1034
|
+
},
|
|
1035
|
+
required: ["x", "y", "width", "height"],
|
|
1036
|
+
additionalProperties: false
|
|
1037
|
+
};
|
|
1038
|
+
var TypeKeypoint = {
|
|
1039
|
+
type: "object",
|
|
1040
|
+
properties: {
|
|
1041
|
+
x: {
|
|
1042
|
+
type: "number",
|
|
1043
|
+
title: "X Coordinate",
|
|
1044
|
+
description: "X coordinate normalized to [0.0, 1.0]"
|
|
1045
|
+
},
|
|
1046
|
+
y: {
|
|
1047
|
+
type: "number",
|
|
1048
|
+
title: "Y Coordinate",
|
|
1049
|
+
description: "Y coordinate normalized to [0.0, 1.0]"
|
|
1050
|
+
},
|
|
1051
|
+
label: {
|
|
1052
|
+
type: "string",
|
|
1053
|
+
title: "Keypoint Label",
|
|
1054
|
+
description: "Label for the keypoint (e.g., 'leftEye', 'rightEye', 'noseTip', etc.)"
|
|
1055
|
+
}
|
|
1056
|
+
},
|
|
1057
|
+
required: ["x", "y"],
|
|
1058
|
+
additionalProperties: false
|
|
1059
|
+
};
|
|
1060
|
+
var TypeFaceDetection = {
|
|
1061
|
+
type: "object",
|
|
1062
|
+
properties: {
|
|
1063
|
+
box: TypeBoundingBox2,
|
|
1064
|
+
keypoints: {
|
|
1065
|
+
type: "array",
|
|
1066
|
+
items: TypeKeypoint,
|
|
1067
|
+
title: "Keypoints",
|
|
1068
|
+
description: "Facial keypoints (left eye, right eye, nose tip, mouth, left/right tragion)"
|
|
1069
|
+
},
|
|
1070
|
+
score: {
|
|
1071
|
+
type: "number",
|
|
1072
|
+
title: "Confidence Score",
|
|
1073
|
+
description: "Confidence score for the face detection"
|
|
1074
|
+
}
|
|
1075
|
+
},
|
|
1076
|
+
required: ["box", "keypoints", "score"],
|
|
1077
|
+
additionalProperties: false
|
|
1078
|
+
};
|
|
1079
|
+
var FaceDetectorInputSchema = {
|
|
1012
1080
|
type: "object",
|
|
1013
1081
|
properties: {
|
|
1014
1082
|
image: TypeReplicateArray(TypeImageInput),
|
|
1015
1083
|
model: modelSchema3,
|
|
1084
|
+
minDetectionConfidence: {
|
|
1085
|
+
type: "number",
|
|
1086
|
+
minimum: 0,
|
|
1087
|
+
maximum: 1,
|
|
1088
|
+
default: 0.5,
|
|
1089
|
+
title: "Min Detection Confidence",
|
|
1090
|
+
description: "Minimum confidence score for face detection",
|
|
1091
|
+
"x-ui-group": "Configuration"
|
|
1092
|
+
},
|
|
1093
|
+
minSuppressionThreshold: {
|
|
1094
|
+
type: "number",
|
|
1095
|
+
minimum: 0,
|
|
1096
|
+
maximum: 1,
|
|
1097
|
+
default: 0.3,
|
|
1098
|
+
title: "Min Suppression Threshold",
|
|
1099
|
+
description: "Minimum non-maximum-suppression threshold for overlapping detections",
|
|
1100
|
+
"x-ui-group": "Configuration"
|
|
1101
|
+
}
|
|
1102
|
+
},
|
|
1103
|
+
required: ["image", "model"],
|
|
1104
|
+
additionalProperties: false
|
|
1105
|
+
};
|
|
1106
|
+
var FaceDetectorOutputSchema = {
|
|
1107
|
+
type: "object",
|
|
1108
|
+
properties: {
|
|
1109
|
+
faces: {
|
|
1110
|
+
oneOf: [
|
|
1111
|
+
{ type: "array", items: TypeFaceDetection },
|
|
1112
|
+
{ type: "array", items: { type: "array", items: TypeFaceDetection } }
|
|
1113
|
+
],
|
|
1114
|
+
title: "Face Detections",
|
|
1115
|
+
description: "Detected faces with bounding boxes, keypoints, and confidence scores"
|
|
1116
|
+
}
|
|
1117
|
+
},
|
|
1118
|
+
required: ["faces"],
|
|
1119
|
+
additionalProperties: false
|
|
1120
|
+
};
|
|
1121
|
+
|
|
1122
|
+
class FaceDetectorTask extends AiVisionTask {
|
|
1123
|
+
static type = "FaceDetectorTask";
|
|
1124
|
+
static category = "AI Vision Model";
|
|
1125
|
+
static title = "Face Detector";
|
|
1126
|
+
static description = "Detects faces in images. Locates faces and identifies facial keypoints like eyes, nose, and mouth.";
|
|
1127
|
+
static inputSchema() {
|
|
1128
|
+
return FaceDetectorInputSchema;
|
|
1129
|
+
}
|
|
1130
|
+
static outputSchema() {
|
|
1131
|
+
return FaceDetectorOutputSchema;
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
TaskRegistry4.registerTask(FaceDetectorTask);
|
|
1135
|
+
var FaceDetector = (input, config) => {
|
|
1136
|
+
return new FaceDetectorTask(input, config).run();
|
|
1137
|
+
};
|
|
1138
|
+
Workflow4.prototype.FaceDetector = CreateWorkflow4(FaceDetectorTask);
|
|
1139
|
+
// src/task/FaceLandmarkerTask.ts
|
|
1140
|
+
import { CreateWorkflow as CreateWorkflow5, TaskRegistry as TaskRegistry5, Workflow as Workflow5 } from "@workglow/task-graph";
|
|
1141
|
+
var modelSchema4 = TypeReplicateArray(TypeModel("model:FaceLandmarkerTask"));
|
|
1142
|
+
var TypeLandmark = {
|
|
1143
|
+
type: "object",
|
|
1144
|
+
properties: {
|
|
1145
|
+
x: {
|
|
1146
|
+
type: "number",
|
|
1147
|
+
title: "X Coordinate",
|
|
1148
|
+
description: "X coordinate normalized to [0.0, 1.0]"
|
|
1149
|
+
},
|
|
1150
|
+
y: {
|
|
1151
|
+
type: "number",
|
|
1152
|
+
title: "Y Coordinate",
|
|
1153
|
+
description: "Y coordinate normalized to [0.0, 1.0]"
|
|
1154
|
+
},
|
|
1155
|
+
z: {
|
|
1156
|
+
type: "number",
|
|
1157
|
+
title: "Z Coordinate",
|
|
1158
|
+
description: "Z coordinate (depth)"
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
required: ["x", "y", "z"],
|
|
1162
|
+
additionalProperties: false
|
|
1163
|
+
};
|
|
1164
|
+
var TypeBlendshape = {
|
|
1165
|
+
type: "object",
|
|
1166
|
+
properties: {
|
|
1167
|
+
label: {
|
|
1168
|
+
type: "string",
|
|
1169
|
+
title: "Blendshape Label",
|
|
1170
|
+
description: "Name of the blendshape (e.g., 'browDownLeft', 'eyeBlinkRight', etc.)"
|
|
1171
|
+
},
|
|
1172
|
+
score: {
|
|
1173
|
+
type: "number",
|
|
1174
|
+
title: "Coefficient Value",
|
|
1175
|
+
description: "Coefficient value for this blendshape"
|
|
1176
|
+
}
|
|
1177
|
+
},
|
|
1178
|
+
required: ["label", "score"],
|
|
1179
|
+
additionalProperties: false
|
|
1180
|
+
};
|
|
1181
|
+
var TypeTransformationMatrix = {
|
|
1182
|
+
type: "array",
|
|
1183
|
+
items: { type: "number" },
|
|
1184
|
+
minItems: 16,
|
|
1185
|
+
maxItems: 16,
|
|
1186
|
+
title: "Transformation Matrix",
|
|
1187
|
+
description: "4x4 transformation matrix for face effects rendering"
|
|
1188
|
+
};
|
|
1189
|
+
var TypeFaceLandmarkerDetection = {
|
|
1190
|
+
type: "object",
|
|
1191
|
+
properties: {
|
|
1192
|
+
landmarks: {
|
|
1193
|
+
type: "array",
|
|
1194
|
+
items: TypeLandmark,
|
|
1195
|
+
title: "Landmarks",
|
|
1196
|
+
description: "478 facial landmarks in image coordinates"
|
|
1197
|
+
},
|
|
1198
|
+
blendshapes: {
|
|
1199
|
+
type: "array",
|
|
1200
|
+
items: TypeBlendshape,
|
|
1201
|
+
title: "Blendshapes",
|
|
1202
|
+
description: "52 blendshape coefficients representing facial expressions"
|
|
1203
|
+
},
|
|
1204
|
+
transformationMatrix: TypeTransformationMatrix
|
|
1205
|
+
},
|
|
1206
|
+
required: ["landmarks"],
|
|
1207
|
+
additionalProperties: false
|
|
1208
|
+
};
|
|
1209
|
+
var FaceLandmarkerInputSchema = {
|
|
1210
|
+
type: "object",
|
|
1211
|
+
properties: {
|
|
1212
|
+
image: TypeReplicateArray(TypeImageInput),
|
|
1213
|
+
model: modelSchema4,
|
|
1214
|
+
numFaces: {
|
|
1215
|
+
type: "number",
|
|
1216
|
+
minimum: 1,
|
|
1217
|
+
maximum: 10,
|
|
1218
|
+
default: 1,
|
|
1219
|
+
title: "Number of Faces",
|
|
1220
|
+
description: "The maximum number of faces to detect",
|
|
1221
|
+
"x-ui-group": "Configuration"
|
|
1222
|
+
},
|
|
1223
|
+
minFaceDetectionConfidence: {
|
|
1224
|
+
type: "number",
|
|
1225
|
+
minimum: 0,
|
|
1226
|
+
maximum: 1,
|
|
1227
|
+
default: 0.5,
|
|
1228
|
+
title: "Min Face Detection Confidence",
|
|
1229
|
+
description: "Minimum confidence score for face detection",
|
|
1230
|
+
"x-ui-group": "Configuration"
|
|
1231
|
+
},
|
|
1232
|
+
minFacePresenceConfidence: {
|
|
1233
|
+
type: "number",
|
|
1234
|
+
minimum: 0,
|
|
1235
|
+
maximum: 1,
|
|
1236
|
+
default: 0.5,
|
|
1237
|
+
title: "Min Face Presence Confidence",
|
|
1238
|
+
description: "Minimum confidence score for face presence",
|
|
1239
|
+
"x-ui-group": "Configuration"
|
|
1240
|
+
},
|
|
1241
|
+
minTrackingConfidence: {
|
|
1242
|
+
type: "number",
|
|
1243
|
+
minimum: 0,
|
|
1244
|
+
maximum: 1,
|
|
1245
|
+
default: 0.5,
|
|
1246
|
+
title: "Min Tracking Confidence",
|
|
1247
|
+
description: "Minimum confidence score for face tracking",
|
|
1248
|
+
"x-ui-group": "Configuration"
|
|
1249
|
+
},
|
|
1250
|
+
outputFaceBlendshapes: {
|
|
1251
|
+
type: "boolean",
|
|
1252
|
+
default: false,
|
|
1253
|
+
title: "Output Face Blendshapes",
|
|
1254
|
+
description: "Whether to output blendshape coefficients for facial expressions",
|
|
1255
|
+
"x-ui-group": "Configuration"
|
|
1256
|
+
},
|
|
1257
|
+
outputFacialTransformationMatrixes: {
|
|
1258
|
+
type: "boolean",
|
|
1259
|
+
default: false,
|
|
1260
|
+
title: "Output Facial Transformation Matrix",
|
|
1261
|
+
description: "Whether to output transformation matrix for effects rendering",
|
|
1262
|
+
"x-ui-group": "Configuration"
|
|
1263
|
+
}
|
|
1264
|
+
},
|
|
1265
|
+
required: ["image", "model"],
|
|
1266
|
+
additionalProperties: false
|
|
1267
|
+
};
|
|
1268
|
+
var FaceLandmarkerOutputSchema = {
|
|
1269
|
+
type: "object",
|
|
1270
|
+
properties: {
|
|
1271
|
+
faces: {
|
|
1272
|
+
oneOf: [
|
|
1273
|
+
{ type: "array", items: TypeFaceLandmarkerDetection },
|
|
1274
|
+
{ type: "array", items: { type: "array", items: TypeFaceLandmarkerDetection } }
|
|
1275
|
+
],
|
|
1276
|
+
title: "Face Detections",
|
|
1277
|
+
description: "Detected faces with landmarks, blendshapes, and transformation matrices"
|
|
1278
|
+
}
|
|
1279
|
+
},
|
|
1280
|
+
required: ["faces"],
|
|
1281
|
+
additionalProperties: false
|
|
1282
|
+
};
|
|
1283
|
+
|
|
1284
|
+
class FaceLandmarkerTask extends AiVisionTask {
|
|
1285
|
+
static type = "FaceLandmarkerTask";
|
|
1286
|
+
static category = "AI Vision Model";
|
|
1287
|
+
static title = "Face Landmarker";
|
|
1288
|
+
static description = "Detects facial landmarks and expressions in images. Identifies 478 facial landmarks, blendshapes for expressions, and transformation matrices for AR effects.";
|
|
1289
|
+
static inputSchema() {
|
|
1290
|
+
return FaceLandmarkerInputSchema;
|
|
1291
|
+
}
|
|
1292
|
+
static outputSchema() {
|
|
1293
|
+
return FaceLandmarkerOutputSchema;
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
TaskRegistry5.registerTask(FaceLandmarkerTask);
|
|
1297
|
+
var FaceLandmarker = (input, config) => {
|
|
1298
|
+
return new FaceLandmarkerTask(input, config).run();
|
|
1299
|
+
};
|
|
1300
|
+
Workflow5.prototype.FaceLandmarker = CreateWorkflow5(FaceLandmarkerTask);
|
|
1301
|
+
// src/task/GestureRecognizerTask.ts
|
|
1302
|
+
import { CreateWorkflow as CreateWorkflow6, TaskRegistry as TaskRegistry6, Workflow as Workflow6 } from "@workglow/task-graph";
|
|
1303
|
+
var modelSchema5 = TypeReplicateArray(TypeModel("model:GestureRecognizerTask"));
|
|
1304
|
+
var TypeLandmark2 = {
|
|
1305
|
+
type: "object",
|
|
1306
|
+
properties: {
|
|
1307
|
+
x: {
|
|
1308
|
+
type: "number",
|
|
1309
|
+
title: "X Coordinate",
|
|
1310
|
+
description: "X coordinate normalized to [0.0, 1.0]"
|
|
1311
|
+
},
|
|
1312
|
+
y: {
|
|
1313
|
+
type: "number",
|
|
1314
|
+
title: "Y Coordinate",
|
|
1315
|
+
description: "Y coordinate normalized to [0.0, 1.0]"
|
|
1316
|
+
},
|
|
1317
|
+
z: {
|
|
1318
|
+
type: "number",
|
|
1319
|
+
title: "Z Coordinate",
|
|
1320
|
+
description: "Z coordinate (depth)"
|
|
1321
|
+
}
|
|
1322
|
+
},
|
|
1323
|
+
required: ["x", "y", "z"],
|
|
1324
|
+
additionalProperties: false
|
|
1325
|
+
};
|
|
1326
|
+
var TypeGesture = {
|
|
1327
|
+
type: "object",
|
|
1328
|
+
properties: {
|
|
1329
|
+
label: {
|
|
1330
|
+
type: "string",
|
|
1331
|
+
title: "Gesture Label",
|
|
1332
|
+
description: "The recognized gesture (e.g., 'Thumb_Up', 'Victory', etc.)"
|
|
1333
|
+
},
|
|
1334
|
+
score: {
|
|
1335
|
+
type: "number",
|
|
1336
|
+
title: "Confidence Score",
|
|
1337
|
+
description: "Confidence score for the gesture"
|
|
1338
|
+
}
|
|
1339
|
+
},
|
|
1340
|
+
required: ["label", "score"],
|
|
1341
|
+
additionalProperties: false
|
|
1342
|
+
};
|
|
1343
|
+
var TypeHandedness = {
|
|
1344
|
+
type: "object",
|
|
1345
|
+
properties: {
|
|
1346
|
+
label: {
|
|
1347
|
+
type: "string",
|
|
1348
|
+
title: "Hand Label",
|
|
1349
|
+
description: "Whether the hand is 'Left' or 'Right'"
|
|
1350
|
+
},
|
|
1351
|
+
score: {
|
|
1352
|
+
type: "number",
|
|
1353
|
+
title: "Confidence Score",
|
|
1354
|
+
description: "Confidence score for the handedness classification"
|
|
1355
|
+
}
|
|
1356
|
+
},
|
|
1357
|
+
required: ["label", "score"],
|
|
1358
|
+
additionalProperties: false
|
|
1359
|
+
};
|
|
1360
|
+
var TypeHandGestureDetection = {
|
|
1361
|
+
type: "object",
|
|
1362
|
+
properties: {
|
|
1363
|
+
gestures: {
|
|
1364
|
+
type: "array",
|
|
1365
|
+
items: TypeGesture,
|
|
1366
|
+
title: "Gestures",
|
|
1367
|
+
description: "Recognized gestures for this hand"
|
|
1368
|
+
},
|
|
1369
|
+
handedness: {
|
|
1370
|
+
type: "array",
|
|
1371
|
+
items: TypeHandedness,
|
|
1372
|
+
title: "Handedness",
|
|
1373
|
+
description: "Handedness classification (left/right)"
|
|
1374
|
+
},
|
|
1375
|
+
landmarks: {
|
|
1376
|
+
type: "array",
|
|
1377
|
+
items: TypeLandmark2,
|
|
1378
|
+
title: "Landmarks",
|
|
1379
|
+
description: "21 hand landmarks in image coordinates"
|
|
1380
|
+
},
|
|
1381
|
+
worldLandmarks: {
|
|
1382
|
+
type: "array",
|
|
1383
|
+
items: TypeLandmark2,
|
|
1384
|
+
title: "World Landmarks",
|
|
1385
|
+
description: "21 hand landmarks in 3D world coordinates (meters)"
|
|
1386
|
+
}
|
|
1387
|
+
},
|
|
1388
|
+
required: ["gestures", "handedness", "landmarks", "worldLandmarks"],
|
|
1389
|
+
additionalProperties: false
|
|
1390
|
+
};
|
|
1391
|
+
var GestureRecognizerInputSchema = {
|
|
1392
|
+
type: "object",
|
|
1393
|
+
properties: {
|
|
1394
|
+
image: TypeReplicateArray(TypeImageInput),
|
|
1395
|
+
model: modelSchema5,
|
|
1396
|
+
numHands: {
|
|
1397
|
+
type: "number",
|
|
1398
|
+
minimum: 1,
|
|
1399
|
+
maximum: 10,
|
|
1400
|
+
default: 1,
|
|
1401
|
+
title: "Number of Hands",
|
|
1402
|
+
description: "The maximum number of hands to detect",
|
|
1403
|
+
"x-ui-group": "Configuration"
|
|
1404
|
+
},
|
|
1405
|
+
minHandDetectionConfidence: {
|
|
1406
|
+
type: "number",
|
|
1407
|
+
minimum: 0,
|
|
1408
|
+
maximum: 1,
|
|
1409
|
+
default: 0.5,
|
|
1410
|
+
title: "Min Hand Detection Confidence",
|
|
1411
|
+
description: "Minimum confidence score for hand detection",
|
|
1412
|
+
"x-ui-group": "Configuration"
|
|
1413
|
+
},
|
|
1414
|
+
minHandPresenceConfidence: {
|
|
1415
|
+
type: "number",
|
|
1416
|
+
minimum: 0,
|
|
1417
|
+
maximum: 1,
|
|
1418
|
+
default: 0.5,
|
|
1419
|
+
title: "Min Hand Presence Confidence",
|
|
1420
|
+
description: "Minimum confidence score for hand presence",
|
|
1421
|
+
"x-ui-group": "Configuration"
|
|
1422
|
+
},
|
|
1423
|
+
minTrackingConfidence: {
|
|
1424
|
+
type: "number",
|
|
1425
|
+
minimum: 0,
|
|
1426
|
+
maximum: 1,
|
|
1427
|
+
default: 0.5,
|
|
1428
|
+
title: "Min Tracking Confidence",
|
|
1429
|
+
description: "Minimum confidence score for hand tracking",
|
|
1430
|
+
"x-ui-group": "Configuration"
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1433
|
+
required: ["image", "model"],
|
|
1434
|
+
additionalProperties: false
|
|
1435
|
+
};
|
|
1436
|
+
var GestureRecognizerOutputSchema = {
|
|
1437
|
+
type: "object",
|
|
1438
|
+
properties: {
|
|
1439
|
+
hands: {
|
|
1440
|
+
oneOf: [
|
|
1441
|
+
{ type: "array", items: TypeHandGestureDetection },
|
|
1442
|
+
{ type: "array", items: { type: "array", items: TypeHandGestureDetection } }
|
|
1443
|
+
],
|
|
1444
|
+
title: "Hand Detections",
|
|
1445
|
+
description: "Detected hands with gestures, handedness, and landmarks"
|
|
1446
|
+
}
|
|
1447
|
+
},
|
|
1448
|
+
required: ["hands"],
|
|
1449
|
+
additionalProperties: false
|
|
1450
|
+
};
|
|
1451
|
+
|
|
1452
|
+
class GestureRecognizerTask extends AiVisionTask {
|
|
1453
|
+
static type = "GestureRecognizerTask";
|
|
1454
|
+
static category = "AI Vision Model";
|
|
1455
|
+
static title = "Gesture Recognizer";
|
|
1456
|
+
static description = "Recognizes hand gestures in images. Detects hand landmarks, identifies gestures (thumbs up, victory, etc.), and classifies handedness.";
|
|
1457
|
+
static inputSchema() {
|
|
1458
|
+
return GestureRecognizerInputSchema;
|
|
1459
|
+
}
|
|
1460
|
+
static outputSchema() {
|
|
1461
|
+
return GestureRecognizerOutputSchema;
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
TaskRegistry6.registerTask(GestureRecognizerTask);
|
|
1465
|
+
var GestureRecognizer = (input, config) => {
|
|
1466
|
+
return new GestureRecognizerTask(input, config).run();
|
|
1467
|
+
};
|
|
1468
|
+
Workflow6.prototype.GestureRecognizer = CreateWorkflow6(GestureRecognizerTask);
|
|
1469
|
+
// src/task/HandLandmarkerTask.ts
|
|
1470
|
+
import { CreateWorkflow as CreateWorkflow7, TaskRegistry as TaskRegistry7, Workflow as Workflow7 } from "@workglow/task-graph";
|
|
1471
|
+
var modelSchema6 = TypeReplicateArray(TypeModel("model:HandLandmarkerTask"));
|
|
1472
|
+
var TypeLandmark3 = {
|
|
1473
|
+
type: "object",
|
|
1474
|
+
properties: {
|
|
1475
|
+
x: {
|
|
1476
|
+
type: "number",
|
|
1477
|
+
title: "X Coordinate",
|
|
1478
|
+
description: "X coordinate normalized to [0.0, 1.0]"
|
|
1479
|
+
},
|
|
1480
|
+
y: {
|
|
1481
|
+
type: "number",
|
|
1482
|
+
title: "Y Coordinate",
|
|
1483
|
+
description: "Y coordinate normalized to [0.0, 1.0]"
|
|
1484
|
+
},
|
|
1485
|
+
z: {
|
|
1486
|
+
type: "number",
|
|
1487
|
+
title: "Z Coordinate",
|
|
1488
|
+
description: "Z coordinate (depth)"
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1491
|
+
required: ["x", "y", "z"],
|
|
1492
|
+
additionalProperties: false
|
|
1493
|
+
};
|
|
1494
|
+
var TypeHandedness2 = {
|
|
1495
|
+
type: "object",
|
|
1496
|
+
properties: {
|
|
1497
|
+
label: {
|
|
1498
|
+
type: "string",
|
|
1499
|
+
title: "Hand Label",
|
|
1500
|
+
description: "Whether the hand is 'Left' or 'Right'"
|
|
1501
|
+
},
|
|
1502
|
+
score: {
|
|
1503
|
+
type: "number",
|
|
1504
|
+
title: "Confidence Score",
|
|
1505
|
+
description: "Confidence score for the handedness classification"
|
|
1506
|
+
}
|
|
1507
|
+
},
|
|
1508
|
+
required: ["label", "score"],
|
|
1509
|
+
additionalProperties: false
|
|
1510
|
+
};
|
|
1511
|
+
var TypeHandDetection = {
|
|
1512
|
+
type: "object",
|
|
1513
|
+
properties: {
|
|
1514
|
+
handedness: {
|
|
1515
|
+
type: "array",
|
|
1516
|
+
items: TypeHandedness2,
|
|
1517
|
+
title: "Handedness",
|
|
1518
|
+
description: "Handedness classification (left/right)"
|
|
1519
|
+
},
|
|
1520
|
+
landmarks: {
|
|
1521
|
+
type: "array",
|
|
1522
|
+
items: TypeLandmark3,
|
|
1523
|
+
title: "Landmarks",
|
|
1524
|
+
description: "21 hand landmarks in image coordinates"
|
|
1525
|
+
},
|
|
1526
|
+
worldLandmarks: {
|
|
1527
|
+
type: "array",
|
|
1528
|
+
items: TypeLandmark3,
|
|
1529
|
+
title: "World Landmarks",
|
|
1530
|
+
description: "21 hand landmarks in 3D world coordinates (meters)"
|
|
1531
|
+
}
|
|
1532
|
+
},
|
|
1533
|
+
required: ["handedness", "landmarks", "worldLandmarks"],
|
|
1534
|
+
additionalProperties: false
|
|
1535
|
+
};
|
|
1536
|
+
var HandLandmarkerInputSchema = {
|
|
1537
|
+
type: "object",
|
|
1538
|
+
properties: {
|
|
1539
|
+
image: TypeReplicateArray(TypeImageInput),
|
|
1540
|
+
model: modelSchema6,
|
|
1541
|
+
numHands: {
|
|
1542
|
+
type: "number",
|
|
1543
|
+
minimum: 1,
|
|
1544
|
+
maximum: 10,
|
|
1545
|
+
default: 1,
|
|
1546
|
+
title: "Number of Hands",
|
|
1547
|
+
description: "The maximum number of hands to detect",
|
|
1548
|
+
"x-ui-group": "Configuration"
|
|
1549
|
+
},
|
|
1550
|
+
minHandDetectionConfidence: {
|
|
1551
|
+
type: "number",
|
|
1552
|
+
minimum: 0,
|
|
1553
|
+
maximum: 1,
|
|
1554
|
+
default: 0.5,
|
|
1555
|
+
title: "Min Hand Detection Confidence",
|
|
1556
|
+
description: "Minimum confidence score for hand detection",
|
|
1557
|
+
"x-ui-group": "Configuration"
|
|
1558
|
+
},
|
|
1559
|
+
minHandPresenceConfidence: {
|
|
1560
|
+
type: "number",
|
|
1561
|
+
minimum: 0,
|
|
1562
|
+
maximum: 1,
|
|
1563
|
+
default: 0.5,
|
|
1564
|
+
title: "Min Hand Presence Confidence",
|
|
1565
|
+
description: "Minimum confidence score for hand presence",
|
|
1566
|
+
"x-ui-group": "Configuration"
|
|
1567
|
+
},
|
|
1568
|
+
minTrackingConfidence: {
|
|
1569
|
+
type: "number",
|
|
1570
|
+
minimum: 0,
|
|
1571
|
+
maximum: 1,
|
|
1572
|
+
default: 0.5,
|
|
1573
|
+
title: "Min Tracking Confidence",
|
|
1574
|
+
description: "Minimum confidence score for hand tracking",
|
|
1575
|
+
"x-ui-group": "Configuration"
|
|
1576
|
+
}
|
|
1577
|
+
},
|
|
1578
|
+
required: ["image", "model"],
|
|
1579
|
+
additionalProperties: false
|
|
1580
|
+
};
|
|
1581
|
+
var HandLandmarkerOutputSchema = {
|
|
1582
|
+
type: "object",
|
|
1583
|
+
properties: {
|
|
1584
|
+
hands: {
|
|
1585
|
+
oneOf: [
|
|
1586
|
+
{ type: "array", items: TypeHandDetection },
|
|
1587
|
+
{ type: "array", items: { type: "array", items: TypeHandDetection } }
|
|
1588
|
+
],
|
|
1589
|
+
title: "Hand Detections",
|
|
1590
|
+
description: "Detected hands with handedness and landmarks"
|
|
1591
|
+
}
|
|
1592
|
+
},
|
|
1593
|
+
required: ["hands"],
|
|
1594
|
+
additionalProperties: false
|
|
1595
|
+
};
|
|
1596
|
+
|
|
1597
|
+
class HandLandmarkerTask extends AiVisionTask {
|
|
1598
|
+
static type = "HandLandmarkerTask";
|
|
1599
|
+
static category = "AI Vision Model";
|
|
1600
|
+
static title = "Hand Landmarker";
|
|
1601
|
+
static description = "Detects hand landmarks in images. Identifies 21 hand landmarks and classifies left vs. right hands.";
|
|
1602
|
+
static inputSchema() {
|
|
1603
|
+
return HandLandmarkerInputSchema;
|
|
1604
|
+
}
|
|
1605
|
+
static outputSchema() {
|
|
1606
|
+
return HandLandmarkerOutputSchema;
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
TaskRegistry7.registerTask(HandLandmarkerTask);
|
|
1610
|
+
var HandLandmarker = (input, config) => {
|
|
1611
|
+
return new HandLandmarkerTask(input, config).run();
|
|
1612
|
+
};
|
|
1613
|
+
Workflow7.prototype.HandLandmarker = CreateWorkflow7(HandLandmarkerTask);
|
|
1614
|
+
// src/task/ImageClassificationTask.ts
|
|
1615
|
+
import { CreateWorkflow as CreateWorkflow8, TaskRegistry as TaskRegistry8, Workflow as Workflow8 } from "@workglow/task-graph";
|
|
1616
|
+
var modelSchema7 = TypeReplicateArray(TypeModel("model:ImageClassificationTask"));
|
|
1617
|
+
var ImageClassificationInputSchema = {
|
|
1618
|
+
type: "object",
|
|
1619
|
+
properties: {
|
|
1620
|
+
image: TypeReplicateArray(TypeImageInput),
|
|
1621
|
+
model: modelSchema7,
|
|
1016
1622
|
categories: {
|
|
1017
1623
|
type: "array",
|
|
1018
1624
|
items: {
|
|
@@ -1063,14 +1669,14 @@ class ImageClassificationTask extends AiVisionTask {
|
|
|
1063
1669
|
return ImageClassificationOutputSchema;
|
|
1064
1670
|
}
|
|
1065
1671
|
}
|
|
1066
|
-
|
|
1672
|
+
TaskRegistry8.registerTask(ImageClassificationTask);
|
|
1067
1673
|
var ImageClassification = (input, config) => {
|
|
1068
1674
|
return new ImageClassificationTask(input, config).run();
|
|
1069
1675
|
};
|
|
1070
|
-
|
|
1676
|
+
Workflow8.prototype.ImageClassification = CreateWorkflow8(ImageClassificationTask);
|
|
1071
1677
|
// src/task/ImageEmbeddingTask.ts
|
|
1072
|
-
import { CreateWorkflow as
|
|
1073
|
-
var
|
|
1678
|
+
import { CreateWorkflow as CreateWorkflow9, TaskRegistry as TaskRegistry9, Workflow as Workflow9 } from "@workglow/task-graph";
|
|
1679
|
+
var modelSchema8 = TypeReplicateArray(TypeModel("model:ImageEmbeddingTask"));
|
|
1074
1680
|
var embeddingSchema = TypedArraySchema({
|
|
1075
1681
|
title: "Embedding",
|
|
1076
1682
|
description: "The image embedding vector"
|
|
@@ -1079,7 +1685,7 @@ var ImageEmbeddingInputSchema = {
|
|
|
1079
1685
|
type: "object",
|
|
1080
1686
|
properties: {
|
|
1081
1687
|
image: TypeReplicateArray(TypeImageInput),
|
|
1082
|
-
model:
|
|
1688
|
+
model: modelSchema8
|
|
1083
1689
|
},
|
|
1084
1690
|
required: ["image", "model"],
|
|
1085
1691
|
additionalProperties: false
|
|
@@ -1109,19 +1715,19 @@ class ImageEmbeddingTask extends AiVisionTask {
|
|
|
1109
1715
|
return ImageEmbeddingOutputSchema;
|
|
1110
1716
|
}
|
|
1111
1717
|
}
|
|
1112
|
-
|
|
1718
|
+
TaskRegistry9.registerTask(ImageEmbeddingTask);
|
|
1113
1719
|
var ImageEmbedding = (input, config) => {
|
|
1114
1720
|
return new ImageEmbeddingTask(input, config).run();
|
|
1115
1721
|
};
|
|
1116
|
-
|
|
1722
|
+
Workflow9.prototype.ImageEmbedding = CreateWorkflow9(ImageEmbeddingTask);
|
|
1117
1723
|
// src/task/ImageSegmentationTask.ts
|
|
1118
|
-
import { CreateWorkflow as
|
|
1119
|
-
var
|
|
1724
|
+
import { CreateWorkflow as CreateWorkflow10, TaskRegistry as TaskRegistry10, Workflow as Workflow10 } from "@workglow/task-graph";
|
|
1725
|
+
var modelSchema9 = TypeReplicateArray(TypeModel("model:ImageSegmentationTask"));
|
|
1120
1726
|
var ImageSegmentationInputSchema = {
|
|
1121
1727
|
type: "object",
|
|
1122
1728
|
properties: {
|
|
1123
1729
|
image: TypeReplicateArray(TypeImageInput),
|
|
1124
|
-
model:
|
|
1730
|
+
model: modelSchema9,
|
|
1125
1731
|
threshold: {
|
|
1126
1732
|
type: "number",
|
|
1127
1733
|
title: "Threshold",
|
|
@@ -1197,14 +1803,14 @@ class ImageSegmentationTask extends AiVisionTask {
|
|
|
1197
1803
|
return ImageSegmentationOutputSchema;
|
|
1198
1804
|
}
|
|
1199
1805
|
}
|
|
1200
|
-
|
|
1806
|
+
TaskRegistry10.registerTask(ImageSegmentationTask);
|
|
1201
1807
|
var ImageSegmentation = (input, config) => {
|
|
1202
1808
|
return new ImageSegmentationTask(input, config).run();
|
|
1203
1809
|
};
|
|
1204
|
-
|
|
1810
|
+
Workflow10.prototype.ImageSegmentation = CreateWorkflow10(ImageSegmentationTask);
|
|
1205
1811
|
// src/task/ImageToTextTask.ts
|
|
1206
|
-
import { CreateWorkflow as
|
|
1207
|
-
var
|
|
1812
|
+
import { CreateWorkflow as CreateWorkflow11, TaskRegistry as TaskRegistry11, Workflow as Workflow11 } from "@workglow/task-graph";
|
|
1813
|
+
var modelSchema10 = TypeReplicateArray(TypeModel("model:ImageToTextTask"));
|
|
1208
1814
|
var generatedTextSchema = {
|
|
1209
1815
|
type: "string",
|
|
1210
1816
|
title: "Text",
|
|
@@ -1214,7 +1820,7 @@ var ImageToTextInputSchema = {
|
|
|
1214
1820
|
type: "object",
|
|
1215
1821
|
properties: {
|
|
1216
1822
|
image: TypeReplicateArray(TypeImageInput),
|
|
1217
|
-
model:
|
|
1823
|
+
model: modelSchema10,
|
|
1218
1824
|
maxTokens: {
|
|
1219
1825
|
type: "number",
|
|
1220
1826
|
title: "Max Tokens",
|
|
@@ -1252,14 +1858,14 @@ class ImageToTextTask extends AiVisionTask {
|
|
|
1252
1858
|
return ImageToTextOutputSchema;
|
|
1253
1859
|
}
|
|
1254
1860
|
}
|
|
1255
|
-
|
|
1861
|
+
TaskRegistry11.registerTask(ImageToTextTask);
|
|
1256
1862
|
var ImageToText = (input, config) => {
|
|
1257
1863
|
return new ImageToTextTask(input, config).run();
|
|
1258
1864
|
};
|
|
1259
|
-
|
|
1865
|
+
Workflow11.prototype.ImageToText = CreateWorkflow11(ImageToTextTask);
|
|
1260
1866
|
// src/task/ObjectDetectionTask.ts
|
|
1261
|
-
import { CreateWorkflow as
|
|
1262
|
-
var
|
|
1867
|
+
import { CreateWorkflow as CreateWorkflow12, TaskRegistry as TaskRegistry12, Workflow as Workflow12 } from "@workglow/task-graph";
|
|
1868
|
+
var modelSchema11 = TypeReplicateArray(TypeModel("model:ObjectDetectionTask"));
|
|
1263
1869
|
var detectionSchema = {
|
|
1264
1870
|
type: "object",
|
|
1265
1871
|
properties: {
|
|
@@ -1284,7 +1890,7 @@ var ObjectDetectionInputSchema = {
|
|
|
1284
1890
|
type: "object",
|
|
1285
1891
|
properties: {
|
|
1286
1892
|
image: TypeReplicateArray(TypeImageInput),
|
|
1287
|
-
model:
|
|
1893
|
+
model: modelSchema11,
|
|
1288
1894
|
labels: {
|
|
1289
1895
|
type: "array",
|
|
1290
1896
|
items: {
|
|
@@ -1335,14 +1941,176 @@ class ObjectDetectionTask extends AiVisionTask {
|
|
|
1335
1941
|
return ObjectDetectionOutputSchema;
|
|
1336
1942
|
}
|
|
1337
1943
|
}
|
|
1338
|
-
|
|
1944
|
+
TaskRegistry12.registerTask(ObjectDetectionTask);
|
|
1339
1945
|
var ObjectDetection = (input, config) => {
|
|
1340
1946
|
return new ObjectDetectionTask(input, config).run();
|
|
1341
1947
|
};
|
|
1342
|
-
|
|
1948
|
+
Workflow12.prototype.ObjectDetection = CreateWorkflow12(ObjectDetectionTask);
|
|
1949
|
+
// src/task/PoseLandmarkerTask.ts
|
|
1950
|
+
import { CreateWorkflow as CreateWorkflow13, TaskRegistry as TaskRegistry13, Workflow as Workflow13 } from "@workglow/task-graph";
|
|
1951
|
+
var modelSchema12 = TypeReplicateArray(TypeModel("model:PoseLandmarkerTask"));
|
|
1952
|
+
var TypePoseLandmark = {
|
|
1953
|
+
type: "object",
|
|
1954
|
+
properties: {
|
|
1955
|
+
x: {
|
|
1956
|
+
type: "number",
|
|
1957
|
+
title: "X Coordinate",
|
|
1958
|
+
description: "X coordinate normalized to [0.0, 1.0]"
|
|
1959
|
+
},
|
|
1960
|
+
y: {
|
|
1961
|
+
type: "number",
|
|
1962
|
+
title: "Y Coordinate",
|
|
1963
|
+
description: "Y coordinate normalized to [0.0, 1.0]"
|
|
1964
|
+
},
|
|
1965
|
+
z: {
|
|
1966
|
+
type: "number",
|
|
1967
|
+
title: "Z Coordinate",
|
|
1968
|
+
description: "Z coordinate (depth)"
|
|
1969
|
+
},
|
|
1970
|
+
visibility: {
|
|
1971
|
+
type: "number",
|
|
1972
|
+
title: "Visibility",
|
|
1973
|
+
description: "Likelihood of the landmark being visible within the image"
|
|
1974
|
+
},
|
|
1975
|
+
presence: {
|
|
1976
|
+
type: "number",
|
|
1977
|
+
title: "Presence",
|
|
1978
|
+
description: "Likelihood of the landmark being present in the image"
|
|
1979
|
+
}
|
|
1980
|
+
},
|
|
1981
|
+
required: ["x", "y", "z"],
|
|
1982
|
+
additionalProperties: false
|
|
1983
|
+
};
|
|
1984
|
+
var TypeSegmentationMask = {
|
|
1985
|
+
type: "object",
|
|
1986
|
+
properties: {
|
|
1987
|
+
data: {
|
|
1988
|
+
type: "object",
|
|
1989
|
+
title: "Mask Data",
|
|
1990
|
+
description: "Canvas or image data containing the segmentation mask"
|
|
1991
|
+
},
|
|
1992
|
+
width: {
|
|
1993
|
+
type: "number",
|
|
1994
|
+
title: "Width",
|
|
1995
|
+
description: "Width of the segmentation mask"
|
|
1996
|
+
},
|
|
1997
|
+
height: {
|
|
1998
|
+
type: "number",
|
|
1999
|
+
title: "Height",
|
|
2000
|
+
description: "Height of the segmentation mask"
|
|
2001
|
+
}
|
|
2002
|
+
},
|
|
2003
|
+
required: ["data", "width", "height"],
|
|
2004
|
+
additionalProperties: false
|
|
2005
|
+
};
|
|
2006
|
+
var TypePoseDetection = {
|
|
2007
|
+
type: "object",
|
|
2008
|
+
properties: {
|
|
2009
|
+
landmarks: {
|
|
2010
|
+
type: "array",
|
|
2011
|
+
items: TypePoseLandmark,
|
|
2012
|
+
title: "Landmarks",
|
|
2013
|
+
description: "33 pose landmarks in image coordinates"
|
|
2014
|
+
},
|
|
2015
|
+
worldLandmarks: {
|
|
2016
|
+
type: "array",
|
|
2017
|
+
items: TypePoseLandmark,
|
|
2018
|
+
title: "World Landmarks",
|
|
2019
|
+
description: "33 pose landmarks in 3D world coordinates (meters)"
|
|
2020
|
+
},
|
|
2021
|
+
segmentationMask: TypeSegmentationMask
|
|
2022
|
+
},
|
|
2023
|
+
required: ["landmarks", "worldLandmarks"],
|
|
2024
|
+
additionalProperties: false
|
|
2025
|
+
};
|
|
2026
|
+
var PoseLandmarkerInputSchema = {
|
|
2027
|
+
type: "object",
|
|
2028
|
+
properties: {
|
|
2029
|
+
image: TypeReplicateArray(TypeImageInput),
|
|
2030
|
+
model: modelSchema12,
|
|
2031
|
+
numPoses: {
|
|
2032
|
+
type: "number",
|
|
2033
|
+
minimum: 1,
|
|
2034
|
+
maximum: 10,
|
|
2035
|
+
default: 1,
|
|
2036
|
+
title: "Number of Poses",
|
|
2037
|
+
description: "The maximum number of poses to detect",
|
|
2038
|
+
"x-ui-group": "Configuration"
|
|
2039
|
+
},
|
|
2040
|
+
minPoseDetectionConfidence: {
|
|
2041
|
+
type: "number",
|
|
2042
|
+
minimum: 0,
|
|
2043
|
+
maximum: 1,
|
|
2044
|
+
default: 0.5,
|
|
2045
|
+
title: "Min Pose Detection Confidence",
|
|
2046
|
+
description: "Minimum confidence score for pose detection",
|
|
2047
|
+
"x-ui-group": "Configuration"
|
|
2048
|
+
},
|
|
2049
|
+
minPosePresenceConfidence: {
|
|
2050
|
+
type: "number",
|
|
2051
|
+
minimum: 0,
|
|
2052
|
+
maximum: 1,
|
|
2053
|
+
default: 0.5,
|
|
2054
|
+
title: "Min Pose Presence Confidence",
|
|
2055
|
+
description: "Minimum confidence score for pose presence",
|
|
2056
|
+
"x-ui-group": "Configuration"
|
|
2057
|
+
},
|
|
2058
|
+
minTrackingConfidence: {
|
|
2059
|
+
type: "number",
|
|
2060
|
+
minimum: 0,
|
|
2061
|
+
maximum: 1,
|
|
2062
|
+
default: 0.5,
|
|
2063
|
+
title: "Min Tracking Confidence",
|
|
2064
|
+
description: "Minimum confidence score for pose tracking",
|
|
2065
|
+
"x-ui-group": "Configuration"
|
|
2066
|
+
},
|
|
2067
|
+
outputSegmentationMasks: {
|
|
2068
|
+
type: "boolean",
|
|
2069
|
+
default: false,
|
|
2070
|
+
title: "Output Segmentation Masks",
|
|
2071
|
+
description: "Whether to output segmentation masks for detected poses",
|
|
2072
|
+
"x-ui-group": "Configuration"
|
|
2073
|
+
}
|
|
2074
|
+
},
|
|
2075
|
+
required: ["image", "model"],
|
|
2076
|
+
additionalProperties: false
|
|
2077
|
+
};
|
|
2078
|
+
var PoseLandmarkerOutputSchema = {
|
|
2079
|
+
type: "object",
|
|
2080
|
+
properties: {
|
|
2081
|
+
poses: {
|
|
2082
|
+
oneOf: [
|
|
2083
|
+
{ type: "array", items: TypePoseDetection },
|
|
2084
|
+
{ type: "array", items: { type: "array", items: TypePoseDetection } }
|
|
2085
|
+
],
|
|
2086
|
+
title: "Pose Detections",
|
|
2087
|
+
description: "Detected poses with landmarks and optional segmentation masks"
|
|
2088
|
+
}
|
|
2089
|
+
},
|
|
2090
|
+
required: ["poses"],
|
|
2091
|
+
additionalProperties: false
|
|
2092
|
+
};
|
|
2093
|
+
|
|
2094
|
+
class PoseLandmarkerTask extends AiVisionTask {
|
|
2095
|
+
static type = "PoseLandmarkerTask";
|
|
2096
|
+
static category = "AI Vision Model";
|
|
2097
|
+
static title = "Pose Landmarker";
|
|
2098
|
+
static description = "Detects pose landmarks in images. Identifies 33 body landmarks for pose estimation and optional segmentation.";
|
|
2099
|
+
static inputSchema() {
|
|
2100
|
+
return PoseLandmarkerInputSchema;
|
|
2101
|
+
}
|
|
2102
|
+
static outputSchema() {
|
|
2103
|
+
return PoseLandmarkerOutputSchema;
|
|
2104
|
+
}
|
|
2105
|
+
}
|
|
2106
|
+
TaskRegistry13.registerTask(PoseLandmarkerTask);
|
|
2107
|
+
var PoseLandmarker = (input, config) => {
|
|
2108
|
+
return new PoseLandmarkerTask(input, config).run();
|
|
2109
|
+
};
|
|
2110
|
+
Workflow13.prototype.PoseLandmarker = CreateWorkflow13(PoseLandmarkerTask);
|
|
1343
2111
|
// src/task/TextClassificationTask.ts
|
|
1344
|
-
import { CreateWorkflow as
|
|
1345
|
-
var
|
|
2112
|
+
import { CreateWorkflow as CreateWorkflow14, TaskRegistry as TaskRegistry14, Workflow as Workflow14 } from "@workglow/task-graph";
|
|
2113
|
+
var modelSchema13 = TypeReplicateArray(TypeModel("model:TextClassificationTask"));
|
|
1346
2114
|
var TextClassificationInputSchema = {
|
|
1347
2115
|
type: "object",
|
|
1348
2116
|
properties: {
|
|
@@ -1369,7 +2137,7 @@ var TextClassificationInputSchema = {
|
|
|
1369
2137
|
description: "The maximum number of categories to return",
|
|
1370
2138
|
"x-ui-group": "Configuration"
|
|
1371
2139
|
},
|
|
1372
|
-
model:
|
|
2140
|
+
model: modelSchema13
|
|
1373
2141
|
},
|
|
1374
2142
|
required: ["text", "model"],
|
|
1375
2143
|
additionalProperties: false
|
|
@@ -1416,14 +2184,14 @@ class TextClassificationTask extends AiTask {
|
|
|
1416
2184
|
return TextClassificationOutputSchema;
|
|
1417
2185
|
}
|
|
1418
2186
|
}
|
|
1419
|
-
|
|
2187
|
+
TaskRegistry14.registerTask(TextClassificationTask);
|
|
1420
2188
|
var TextClassification = (input, config) => {
|
|
1421
2189
|
return new TextClassificationTask(input, config).run();
|
|
1422
2190
|
};
|
|
1423
|
-
|
|
2191
|
+
Workflow14.prototype.TextClassification = CreateWorkflow14(TextClassificationTask);
|
|
1424
2192
|
// src/task/TextEmbeddingTask.ts
|
|
1425
|
-
import { CreateWorkflow as
|
|
1426
|
-
var
|
|
2193
|
+
import { CreateWorkflow as CreateWorkflow15, TaskRegistry as TaskRegistry15, Workflow as Workflow15 } from "@workglow/task-graph";
|
|
2194
|
+
var modelSchema14 = TypeReplicateArray(TypeModel("model:TextEmbeddingTask"));
|
|
1427
2195
|
var TextEmbeddingInputSchema = {
|
|
1428
2196
|
type: "object",
|
|
1429
2197
|
properties: {
|
|
@@ -1432,7 +2200,7 @@ var TextEmbeddingInputSchema = {
|
|
|
1432
2200
|
title: "Text",
|
|
1433
2201
|
description: "The text to embed"
|
|
1434
2202
|
}),
|
|
1435
|
-
model:
|
|
2203
|
+
model: modelSchema14
|
|
1436
2204
|
},
|
|
1437
2205
|
required: ["text", "model"],
|
|
1438
2206
|
additionalProperties: false
|
|
@@ -1461,14 +2229,14 @@ class TextEmbeddingTask extends AiTask {
|
|
|
1461
2229
|
return TextEmbeddingOutputSchema;
|
|
1462
2230
|
}
|
|
1463
2231
|
}
|
|
1464
|
-
|
|
2232
|
+
TaskRegistry15.registerTask(TextEmbeddingTask);
|
|
1465
2233
|
var TextEmbedding = async (input, config) => {
|
|
1466
2234
|
return new TextEmbeddingTask(input, config).run();
|
|
1467
2235
|
};
|
|
1468
|
-
|
|
2236
|
+
Workflow15.prototype.TextEmbedding = CreateWorkflow15(TextEmbeddingTask);
|
|
1469
2237
|
// src/task/TextFillMaskTask.ts
|
|
1470
|
-
import { CreateWorkflow as
|
|
1471
|
-
var
|
|
2238
|
+
import { CreateWorkflow as CreateWorkflow16, TaskRegistry as TaskRegistry16, Workflow as Workflow16 } from "@workglow/task-graph";
|
|
2239
|
+
var modelSchema15 = TypeReplicateArray(TypeModel("model:TextFillMaskTask"));
|
|
1472
2240
|
var TextFillMaskInputSchema = {
|
|
1473
2241
|
type: "object",
|
|
1474
2242
|
properties: {
|
|
@@ -1477,7 +2245,7 @@ var TextFillMaskInputSchema = {
|
|
|
1477
2245
|
title: "Text",
|
|
1478
2246
|
description: "The text with a mask token to fill"
|
|
1479
2247
|
}),
|
|
1480
|
-
model:
|
|
2248
|
+
model: modelSchema15
|
|
1481
2249
|
},
|
|
1482
2250
|
required: ["text", "model"],
|
|
1483
2251
|
additionalProperties: false
|
|
@@ -1529,23 +2297,23 @@ class TextFillMaskTask extends AiTask {
|
|
|
1529
2297
|
return TextFillMaskOutputSchema;
|
|
1530
2298
|
}
|
|
1531
2299
|
}
|
|
1532
|
-
|
|
2300
|
+
TaskRegistry16.registerTask(TextFillMaskTask);
|
|
1533
2301
|
var TextFillMask = (input, config) => {
|
|
1534
2302
|
return new TextFillMaskTask(input, config).run();
|
|
1535
2303
|
};
|
|
1536
|
-
|
|
2304
|
+
Workflow16.prototype.TextFillMask = CreateWorkflow16(TextFillMaskTask);
|
|
1537
2305
|
// src/task/TextGenerationTask.ts
|
|
1538
|
-
import { CreateWorkflow as
|
|
2306
|
+
import { CreateWorkflow as CreateWorkflow17, TaskRegistry as TaskRegistry17, Workflow as Workflow17 } from "@workglow/task-graph";
|
|
1539
2307
|
var generatedTextSchema2 = {
|
|
1540
2308
|
type: "string",
|
|
1541
2309
|
title: "Text",
|
|
1542
2310
|
description: "The generated text"
|
|
1543
2311
|
};
|
|
1544
|
-
var
|
|
2312
|
+
var modelSchema16 = TypeReplicateArray(TypeModel("model:TextGenerationTask"));
|
|
1545
2313
|
var TextGenerationInputSchema = {
|
|
1546
2314
|
type: "object",
|
|
1547
2315
|
properties: {
|
|
1548
|
-
model:
|
|
2316
|
+
model: modelSchema16,
|
|
1549
2317
|
prompt: TypeReplicateArray({
|
|
1550
2318
|
type: "string",
|
|
1551
2319
|
title: "Prompt",
|
|
@@ -1620,14 +2388,14 @@ class TextGenerationTask extends AiTask {
|
|
|
1620
2388
|
return TextGenerationOutputSchema;
|
|
1621
2389
|
}
|
|
1622
2390
|
}
|
|
1623
|
-
|
|
2391
|
+
TaskRegistry17.registerTask(TextGenerationTask);
|
|
1624
2392
|
var TextGeneration = (input, config) => {
|
|
1625
2393
|
return new TextGenerationTask(input, config).run();
|
|
1626
2394
|
};
|
|
1627
|
-
|
|
2395
|
+
Workflow17.prototype.TextGeneration = CreateWorkflow17(TextGenerationTask);
|
|
1628
2396
|
// src/task/TextLanguageDetectionTask.ts
|
|
1629
|
-
import { CreateWorkflow as
|
|
1630
|
-
var
|
|
2397
|
+
import { CreateWorkflow as CreateWorkflow18, TaskRegistry as TaskRegistry18, Workflow as Workflow18 } from "@workglow/task-graph";
|
|
2398
|
+
var modelSchema17 = TypeReplicateArray(TypeModel("model:TextLanguageDetectionTask"));
|
|
1631
2399
|
var TextLanguageDetectionInputSchema = {
|
|
1632
2400
|
type: "object",
|
|
1633
2401
|
properties: {
|
|
@@ -1644,7 +2412,7 @@ var TextLanguageDetectionInputSchema = {
|
|
|
1644
2412
|
title: "Max Languages",
|
|
1645
2413
|
description: "The maximum number of languages to return"
|
|
1646
2414
|
},
|
|
1647
|
-
model:
|
|
2415
|
+
model: modelSchema17
|
|
1648
2416
|
},
|
|
1649
2417
|
required: ["text", "model"],
|
|
1650
2418
|
additionalProperties: false
|
|
@@ -1691,14 +2459,14 @@ class TextLanguageDetectionTask extends AiTask {
|
|
|
1691
2459
|
return TextLanguageDetectionOutputSchema;
|
|
1692
2460
|
}
|
|
1693
2461
|
}
|
|
1694
|
-
|
|
2462
|
+
TaskRegistry18.registerTask(TextLanguageDetectionTask);
|
|
1695
2463
|
var TextLanguageDetection = (input, config) => {
|
|
1696
2464
|
return new TextLanguageDetectionTask(input, config).run();
|
|
1697
2465
|
};
|
|
1698
|
-
|
|
2466
|
+
Workflow18.prototype.TextLanguageDetection = CreateWorkflow18(TextLanguageDetectionTask);
|
|
1699
2467
|
// src/task/TextNamedEntityRecognitionTask.ts
|
|
1700
|
-
import { CreateWorkflow as
|
|
1701
|
-
var
|
|
2468
|
+
import { CreateWorkflow as CreateWorkflow19, TaskRegistry as TaskRegistry19, Workflow as Workflow19 } from "@workglow/task-graph";
|
|
2469
|
+
var modelSchema18 = TypeReplicateArray(TypeModel("model:NamedEntityRecognitionTask"));
|
|
1702
2470
|
var TextNamedEntityRecognitionInputSchema = {
|
|
1703
2471
|
type: "object",
|
|
1704
2472
|
properties: {
|
|
@@ -1717,7 +2485,7 @@ var TextNamedEntityRecognitionInputSchema = {
|
|
|
1717
2485
|
"x-ui-group": "Configuration",
|
|
1718
2486
|
"x-ui-group-open": false
|
|
1719
2487
|
},
|
|
1720
|
-
model:
|
|
2488
|
+
model: modelSchema18
|
|
1721
2489
|
},
|
|
1722
2490
|
required: ["text", "model"],
|
|
1723
2491
|
additionalProperties: false
|
|
@@ -1769,13 +2537,13 @@ class TextNamedEntityRecognitionTask extends AiTask {
|
|
|
1769
2537
|
return TextNamedEntityRecognitionOutputSchema;
|
|
1770
2538
|
}
|
|
1771
2539
|
}
|
|
1772
|
-
|
|
2540
|
+
TaskRegistry19.registerTask(TextNamedEntityRecognitionTask);
|
|
1773
2541
|
var TextNamedEntityRecognition = (input, config) => {
|
|
1774
2542
|
return new TextNamedEntityRecognitionTask(input, config).run();
|
|
1775
2543
|
};
|
|
1776
|
-
|
|
2544
|
+
Workflow19.prototype.TextNamedEntityRecognition = CreateWorkflow19(TextNamedEntityRecognitionTask);
|
|
1777
2545
|
// src/task/TextQuestionAnswerTask.ts
|
|
1778
|
-
import { CreateWorkflow as
|
|
2546
|
+
import { CreateWorkflow as CreateWorkflow20, TaskRegistry as TaskRegistry20, Workflow as Workflow20 } from "@workglow/task-graph";
|
|
1779
2547
|
var contextSchema = {
|
|
1780
2548
|
type: "string",
|
|
1781
2549
|
title: "Context",
|
|
@@ -1791,13 +2559,13 @@ var textSchema = {
|
|
|
1791
2559
|
title: "Text",
|
|
1792
2560
|
description: "The generated text"
|
|
1793
2561
|
};
|
|
1794
|
-
var
|
|
2562
|
+
var modelSchema19 = TypeReplicateArray(TypeModel("model:TextQuestionAnswerTask"));
|
|
1795
2563
|
var TextQuestionAnswerInputSchema = {
|
|
1796
2564
|
type: "object",
|
|
1797
2565
|
properties: {
|
|
1798
2566
|
context: TypeReplicateArray(contextSchema),
|
|
1799
2567
|
question: TypeReplicateArray(questionSchema),
|
|
1800
|
-
model:
|
|
2568
|
+
model: modelSchema19
|
|
1801
2569
|
},
|
|
1802
2570
|
required: ["context", "question", "model"],
|
|
1803
2571
|
additionalProperties: false
|
|
@@ -1827,14 +2595,14 @@ class TextQuestionAnswerTask extends AiTask {
|
|
|
1827
2595
|
return TextQuestionAnswerOutputSchema;
|
|
1828
2596
|
}
|
|
1829
2597
|
}
|
|
1830
|
-
|
|
2598
|
+
TaskRegistry20.registerTask(TextQuestionAnswerTask);
|
|
1831
2599
|
var TextQuestionAnswer = (input, config) => {
|
|
1832
2600
|
return new TextQuestionAnswerTask(input, config).run();
|
|
1833
2601
|
};
|
|
1834
|
-
|
|
2602
|
+
Workflow20.prototype.TextQuestionAnswer = CreateWorkflow20(TextQuestionAnswerTask);
|
|
1835
2603
|
// src/task/TextRewriterTask.ts
|
|
1836
|
-
import { CreateWorkflow as
|
|
1837
|
-
var
|
|
2604
|
+
import { CreateWorkflow as CreateWorkflow21, TaskRegistry as TaskRegistry21, Workflow as Workflow21 } from "@workglow/task-graph";
|
|
2605
|
+
var modelSchema20 = TypeReplicateArray(TypeModel("model:TextRewriterTask"));
|
|
1838
2606
|
var TextRewriterInputSchema = {
|
|
1839
2607
|
type: "object",
|
|
1840
2608
|
properties: {
|
|
@@ -1848,7 +2616,7 @@ var TextRewriterInputSchema = {
|
|
|
1848
2616
|
title: "Prompt",
|
|
1849
2617
|
description: "The prompt to direct the rewriting"
|
|
1850
2618
|
}),
|
|
1851
|
-
model:
|
|
2619
|
+
model: modelSchema20
|
|
1852
2620
|
},
|
|
1853
2621
|
required: ["text", "prompt", "model"],
|
|
1854
2622
|
additionalProperties: false
|
|
@@ -1878,14 +2646,14 @@ class TextRewriterTask extends AiTask {
|
|
|
1878
2646
|
return TextRewriterOutputSchema;
|
|
1879
2647
|
}
|
|
1880
2648
|
}
|
|
1881
|
-
|
|
2649
|
+
TaskRegistry21.registerTask(TextRewriterTask);
|
|
1882
2650
|
var TextRewriter = (input, config) => {
|
|
1883
2651
|
return new TextRewriterTask(input, config).run();
|
|
1884
2652
|
};
|
|
1885
|
-
|
|
2653
|
+
Workflow21.prototype.TextRewriter = CreateWorkflow21(TextRewriterTask);
|
|
1886
2654
|
// src/task/TextSummaryTask.ts
|
|
1887
|
-
import { CreateWorkflow as
|
|
1888
|
-
var
|
|
2655
|
+
import { CreateWorkflow as CreateWorkflow22, TaskRegistry as TaskRegistry22, Workflow as Workflow22 } from "@workglow/task-graph";
|
|
2656
|
+
var modelSchema21 = TypeReplicateArray(TypeModel("model:TextSummaryTask"));
|
|
1889
2657
|
var TextSummaryInputSchema = {
|
|
1890
2658
|
type: "object",
|
|
1891
2659
|
properties: {
|
|
@@ -1894,7 +2662,7 @@ var TextSummaryInputSchema = {
|
|
|
1894
2662
|
title: "Text",
|
|
1895
2663
|
description: "The text to summarize"
|
|
1896
2664
|
}),
|
|
1897
|
-
model:
|
|
2665
|
+
model: modelSchema21
|
|
1898
2666
|
},
|
|
1899
2667
|
required: ["text", "model"],
|
|
1900
2668
|
additionalProperties: false
|
|
@@ -1924,14 +2692,14 @@ class TextSummaryTask extends AiTask {
|
|
|
1924
2692
|
return TextSummaryOutputSchema;
|
|
1925
2693
|
}
|
|
1926
2694
|
}
|
|
1927
|
-
|
|
2695
|
+
TaskRegistry22.registerTask(TextSummaryTask);
|
|
1928
2696
|
var TextSummary = async (input, config) => {
|
|
1929
2697
|
return new TextSummaryTask(input, config).run();
|
|
1930
2698
|
};
|
|
1931
|
-
|
|
2699
|
+
Workflow22.prototype.TextSummary = CreateWorkflow22(TextSummaryTask);
|
|
1932
2700
|
// src/task/TextTranslationTask.ts
|
|
1933
|
-
import { CreateWorkflow as
|
|
1934
|
-
var
|
|
2701
|
+
import { CreateWorkflow as CreateWorkflow23, TaskRegistry as TaskRegistry23, Workflow as Workflow23 } from "@workglow/task-graph";
|
|
2702
|
+
var modelSchema22 = TypeReplicateArray(TypeModel("model:TextTranslationTask"));
|
|
1935
2703
|
var translationTextSchema = {
|
|
1936
2704
|
type: "string",
|
|
1937
2705
|
title: "Text",
|
|
@@ -1957,7 +2725,7 @@ var TextTranslationInputSchema = {
|
|
|
1957
2725
|
minLength: 2,
|
|
1958
2726
|
maxLength: 2
|
|
1959
2727
|
})),
|
|
1960
|
-
model:
|
|
2728
|
+
model: modelSchema22
|
|
1961
2729
|
},
|
|
1962
2730
|
required: ["text", "source_lang", "target_lang", "model"],
|
|
1963
2731
|
additionalProperties: false
|
|
@@ -1993,18 +2761,18 @@ class TextTranslationTask extends AiTask {
|
|
|
1993
2761
|
return TextTranslationOutputSchema;
|
|
1994
2762
|
}
|
|
1995
2763
|
}
|
|
1996
|
-
|
|
2764
|
+
TaskRegistry23.registerTask(TextTranslationTask);
|
|
1997
2765
|
var TextTranslation = (input, config) => {
|
|
1998
2766
|
return new TextTranslationTask(input, config).run();
|
|
1999
2767
|
};
|
|
2000
|
-
|
|
2768
|
+
Workflow23.prototype.TextTranslation = CreateWorkflow23(TextTranslationTask);
|
|
2001
2769
|
// src/task/UnloadModelTask.ts
|
|
2002
|
-
import { CreateWorkflow as
|
|
2003
|
-
var
|
|
2770
|
+
import { CreateWorkflow as CreateWorkflow24, TaskRegistry as TaskRegistry24, Workflow as Workflow24 } from "@workglow/task-graph";
|
|
2771
|
+
var modelSchema23 = TypeReplicateArray(TypeModel("model"));
|
|
2004
2772
|
var UnloadModelInputSchema = {
|
|
2005
2773
|
type: "object",
|
|
2006
2774
|
properties: {
|
|
2007
|
-
model:
|
|
2775
|
+
model: modelSchema23
|
|
2008
2776
|
},
|
|
2009
2777
|
required: ["model"],
|
|
2010
2778
|
additionalProperties: false
|
|
@@ -2012,7 +2780,7 @@ var UnloadModelInputSchema = {
|
|
|
2012
2780
|
var UnloadModelOutputSchema = {
|
|
2013
2781
|
type: "object",
|
|
2014
2782
|
properties: {
|
|
2015
|
-
model:
|
|
2783
|
+
model: modelSchema23
|
|
2016
2784
|
},
|
|
2017
2785
|
required: ["model"],
|
|
2018
2786
|
additionalProperties: false
|
|
@@ -2031,18 +2799,18 @@ class UnloadModelTask extends AiTask {
|
|
|
2031
2799
|
}
|
|
2032
2800
|
static cacheable = false;
|
|
2033
2801
|
}
|
|
2034
|
-
|
|
2802
|
+
TaskRegistry24.registerTask(UnloadModelTask);
|
|
2035
2803
|
var UnloadModel = (input, config) => {
|
|
2036
2804
|
return new UnloadModelTask(input, config).run();
|
|
2037
2805
|
};
|
|
2038
|
-
|
|
2806
|
+
Workflow24.prototype.UnloadModel = CreateWorkflow24(UnloadModelTask);
|
|
2039
2807
|
// src/task/VectorSimilarityTask.ts
|
|
2040
2808
|
import {
|
|
2041
2809
|
ArrayTask,
|
|
2042
|
-
CreateWorkflow as
|
|
2810
|
+
CreateWorkflow as CreateWorkflow25,
|
|
2043
2811
|
TaskError,
|
|
2044
|
-
TaskRegistry as
|
|
2045
|
-
Workflow as
|
|
2812
|
+
TaskRegistry as TaskRegistry25,
|
|
2813
|
+
Workflow as Workflow25
|
|
2046
2814
|
} from "@workglow/task-graph";
|
|
2047
2815
|
var SimilarityFn = {
|
|
2048
2816
|
COSINE: "cosine",
|
|
@@ -2136,11 +2904,11 @@ class VectorSimilarityTask extends ArrayTask {
|
|
|
2136
2904
|
};
|
|
2137
2905
|
}
|
|
2138
2906
|
}
|
|
2139
|
-
|
|
2907
|
+
TaskRegistry25.registerTask(VectorSimilarityTask);
|
|
2140
2908
|
var Similarity = (input, config) => {
|
|
2141
2909
|
return new VectorSimilarityTask(input, config).run();
|
|
2142
2910
|
};
|
|
2143
|
-
|
|
2911
|
+
Workflow25.prototype.Similarity = CreateWorkflow25(VectorSimilarityTask);
|
|
2144
2912
|
function inner(arr1, arr2) {
|
|
2145
2913
|
return 1 - arr1.reduce((acc, val, i) => acc + val * arr2[i], 0);
|
|
2146
2914
|
}
|
|
@@ -2232,6 +3000,10 @@ export {
|
|
|
2232
3000
|
TableFragment,
|
|
2233
3001
|
SimilarityFn,
|
|
2234
3002
|
Similarity,
|
|
3003
|
+
PoseLandmarkerTask,
|
|
3004
|
+
PoseLandmarkerOutputSchema,
|
|
3005
|
+
PoseLandmarkerInputSchema,
|
|
3006
|
+
PoseLandmarker,
|
|
2235
3007
|
ObjectDetectionTask,
|
|
2236
3008
|
ObjectDetectionOutputSchema,
|
|
2237
3009
|
ObjectDetectionInputSchema,
|
|
@@ -2258,6 +3030,22 @@ export {
|
|
|
2258
3030
|
ImageClassificationOutputSchema,
|
|
2259
3031
|
ImageClassificationInputSchema,
|
|
2260
3032
|
ImageClassification,
|
|
3033
|
+
HandLandmarkerTask,
|
|
3034
|
+
HandLandmarkerOutputSchema,
|
|
3035
|
+
HandLandmarkerInputSchema,
|
|
3036
|
+
HandLandmarker,
|
|
3037
|
+
GestureRecognizerTask,
|
|
3038
|
+
GestureRecognizerOutputSchema,
|
|
3039
|
+
GestureRecognizerInputSchema,
|
|
3040
|
+
GestureRecognizer,
|
|
3041
|
+
FaceLandmarkerTask,
|
|
3042
|
+
FaceLandmarkerOutputSchema,
|
|
3043
|
+
FaceLandmarkerInputSchema,
|
|
3044
|
+
FaceLandmarker,
|
|
3045
|
+
FaceDetectorTask,
|
|
3046
|
+
FaceDetectorOutputSchema,
|
|
3047
|
+
FaceDetectorInputSchema,
|
|
3048
|
+
FaceDetector,
|
|
2261
3049
|
DownloadModelTask,
|
|
2262
3050
|
DownloadModel,
|
|
2263
3051
|
DocumentSplitterTask,
|
|
@@ -2276,4 +3064,4 @@ export {
|
|
|
2276
3064
|
AiJob
|
|
2277
3065
|
};
|
|
2278
3066
|
|
|
2279
|
-
//# debugId=
|
|
3067
|
+
//# debugId=C19F9DAFD0EE171E64756E2164756E21
|