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