@things-factory/integration-label-studio 9.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/EXTERNAL_DATA_SOURCING.md +484 -0
  3. package/IMPLEMENTATION_GUIDE.md +469 -0
  4. package/INTEGRATION.md +279 -0
  5. package/README.md +1014 -0
  6. package/SETUP_GUIDE.md +577 -0
  7. package/TEST_GUIDE.md +387 -0
  8. package/UI_CUSTOMIZATION.md +395 -0
  9. package/USER_SYNC_GUIDE.md +514 -0
  10. package/client/bootstrap.ts +1 -0
  11. package/client/index.ts +1 -0
  12. package/client/label-studio-label-page.ts +52 -0
  13. package/client/label-studio-project-create.ts +216 -0
  14. package/client/label-studio-project-list.ts +214 -0
  15. package/client/label-studio-wrapper.ts +294 -0
  16. package/client/route.ts +15 -0
  17. package/client/tsconfig.json +13 -0
  18. package/config/config.development.js +124 -0
  19. package/config/config.production.js +182 -0
  20. package/dist-client/bootstrap.d.ts +1 -0
  21. package/dist-client/bootstrap.js +2 -0
  22. package/dist-client/bootstrap.js.map +1 -0
  23. package/dist-client/index.d.ts +1 -0
  24. package/dist-client/index.js +2 -0
  25. package/dist-client/index.js.map +1 -0
  26. package/dist-client/label-studio-label-page.d.ts +8 -0
  27. package/dist-client/label-studio-label-page.js +54 -0
  28. package/dist-client/label-studio-label-page.js.map +1 -0
  29. package/dist-client/label-studio-project-create.d.ts +16 -0
  30. package/dist-client/label-studio-project-create.js +235 -0
  31. package/dist-client/label-studio-project-create.js.map +1 -0
  32. package/dist-client/label-studio-project-list.d.ts +16 -0
  33. package/dist-client/label-studio-project-list.js +222 -0
  34. package/dist-client/label-studio-project-list.js.map +1 -0
  35. package/dist-client/label-studio-wrapper.d.ts +57 -0
  36. package/dist-client/label-studio-wrapper.js +304 -0
  37. package/dist-client/label-studio-wrapper.js.map +1 -0
  38. package/dist-client/route.d.ts +1 -0
  39. package/dist-client/route.js +14 -0
  40. package/dist-client/route.js.map +1 -0
  41. package/dist-client/tsconfig.tsbuildinfo +1 -0
  42. package/dist-server/controller/label-studio-role-mapper.d.ts +35 -0
  43. package/dist-server/controller/label-studio-role-mapper.js +65 -0
  44. package/dist-server/controller/label-studio-role-mapper.js.map +1 -0
  45. package/dist-server/controller/user-provisioning-service.d.ts +66 -0
  46. package/dist-server/controller/user-provisioning-service.js +264 -0
  47. package/dist-server/controller/user-provisioning-service.js.map +1 -0
  48. package/dist-server/index.d.ts +7 -0
  49. package/dist-server/index.js +19 -0
  50. package/dist-server/index.js.map +1 -0
  51. package/dist-server/route/label-studio-sso.d.ts +2 -0
  52. package/dist-server/route/label-studio-sso.js +156 -0
  53. package/dist-server/route/label-studio-sso.js.map +1 -0
  54. package/dist-server/route/webhook.d.ts +65 -0
  55. package/dist-server/route/webhook.js +248 -0
  56. package/dist-server/route/webhook.js.map +1 -0
  57. package/dist-server/route.d.ts +1 -0
  58. package/dist-server/route.js +21 -0
  59. package/dist-server/route.js.map +1 -0
  60. package/dist-server/service/ai-prediction-service.d.ts +27 -0
  61. package/dist-server/service/ai-prediction-service.js +222 -0
  62. package/dist-server/service/ai-prediction-service.js.map +1 -0
  63. package/dist-server/service/dataset-labeling-integration.d.ts +44 -0
  64. package/dist-server/service/dataset-labeling-integration.js +512 -0
  65. package/dist-server/service/dataset-labeling-integration.js.map +1 -0
  66. package/dist-server/service/external-data-source-service.d.ts +78 -0
  67. package/dist-server/service/external-data-source-service.js +415 -0
  68. package/dist-server/service/external-data-source-service.js.map +1 -0
  69. package/dist-server/service/index.d.ts +12 -0
  70. package/dist-server/service/index.js +27 -0
  71. package/dist-server/service/index.js.map +1 -0
  72. package/dist-server/service/label-studio-sso-service.d.ts +38 -0
  73. package/dist-server/service/label-studio-sso-service.js +98 -0
  74. package/dist-server/service/label-studio-sso-service.js.map +1 -0
  75. package/dist-server/service/ml/ml-backend-service.d.ts +23 -0
  76. package/dist-server/service/ml/ml-backend-service.js +153 -0
  77. package/dist-server/service/ml/ml-backend-service.js.map +1 -0
  78. package/dist-server/service/prediction/prediction-management.d.ts +32 -0
  79. package/dist-server/service/prediction/prediction-management.js +299 -0
  80. package/dist-server/service/prediction/prediction-management.js.map +1 -0
  81. package/dist-server/service/project/project-management.d.ts +36 -0
  82. package/dist-server/service/project/project-management.js +309 -0
  83. package/dist-server/service/project/project-management.js.map +1 -0
  84. package/dist-server/service/task/task-management.d.ts +42 -0
  85. package/dist-server/service/task/task-management.js +372 -0
  86. package/dist-server/service/task/task-management.js.map +1 -0
  87. package/dist-server/service/user-provisioning/user-sync-mutation.d.ts +28 -0
  88. package/dist-server/service/user-provisioning/user-sync-mutation.js +111 -0
  89. package/dist-server/service/user-provisioning/user-sync-mutation.js.map +1 -0
  90. package/dist-server/service/webhook/webhook-management.d.ts +21 -0
  91. package/dist-server/service/webhook/webhook-management.js +134 -0
  92. package/dist-server/service/webhook/webhook-management.js.map +1 -0
  93. package/dist-server/tsconfig.tsbuildinfo +1 -0
  94. package/dist-server/types/dataset-labeling-types.d.ts +71 -0
  95. package/dist-server/types/dataset-labeling-types.js +259 -0
  96. package/dist-server/types/dataset-labeling-types.js.map +1 -0
  97. package/dist-server/types/label-studio-types.d.ts +128 -0
  98. package/dist-server/types/label-studio-types.js +494 -0
  99. package/dist-server/types/label-studio-types.js.map +1 -0
  100. package/dist-server/types/prediction-types.d.ts +39 -0
  101. package/dist-server/types/prediction-types.js +121 -0
  102. package/dist-server/types/prediction-types.js.map +1 -0
  103. package/dist-server/utils/annotation-exporter.d.ts +104 -0
  104. package/dist-server/utils/annotation-exporter.js +261 -0
  105. package/dist-server/utils/annotation-exporter.js.map +1 -0
  106. package/dist-server/utils/label-config-builder.d.ts +117 -0
  107. package/dist-server/utils/label-config-builder.js +286 -0
  108. package/dist-server/utils/label-config-builder.js.map +1 -0
  109. package/dist-server/utils/label-studio-api-client.d.ts +180 -0
  110. package/dist-server/utils/label-studio-api-client.js +401 -0
  111. package/dist-server/utils/label-studio-api-client.js.map +1 -0
  112. package/dist-server/utils/media-url-extractor.d.ts +45 -0
  113. package/dist-server/utils/media-url-extractor.js +152 -0
  114. package/dist-server/utils/media-url-extractor.js.map +1 -0
  115. package/dist-server/utils/task-transformer.d.ts +108 -0
  116. package/dist-server/utils/task-transformer.js +260 -0
  117. package/dist-server/utils/task-transformer.js.map +1 -0
  118. package/package.json +47 -0
  119. package/server/SERVER_STRUCTURE.md +351 -0
  120. package/server/controller/label-studio-role-mapper.ts +76 -0
  121. package/server/controller/user-provisioning-service.ts +340 -0
  122. package/server/index.ts +19 -0
  123. package/server/route/label-studio-sso.ts +194 -0
  124. package/server/route/webhook.ts +304 -0
  125. package/server/route.ts +35 -0
  126. package/server/service/ai-prediction-service.ts +239 -0
  127. package/server/service/dataset-labeling-integration.ts +590 -0
  128. package/server/service/external-data-source-service.ts +438 -0
  129. package/server/service/index.ts +24 -0
  130. package/server/service/label-studio-sso-service.ts +108 -0
  131. package/server/service/labeling-scenario-service.ts.deprecated +566 -0
  132. package/server/service/ml/ml-backend-service.ts +127 -0
  133. package/server/service/prediction/prediction-management.ts +281 -0
  134. package/server/service/project/project-management.ts +284 -0
  135. package/server/service/task/task-management.ts +363 -0
  136. package/server/service/user-provisioning/user-sync-mutation.ts +80 -0
  137. package/server/service/webhook/webhook-management.ts +109 -0
  138. package/server/tsconfig.json +11 -0
  139. package/server/types/dataset-labeling-types.ts +181 -0
  140. package/server/types/global.d.ts +23 -0
  141. package/server/types/label-studio-types.ts +346 -0
  142. package/server/types/prediction-types.ts +86 -0
  143. package/server/types/scenario-types.ts.deprecated +362 -0
  144. package/server/utils/annotation-exporter.ts +340 -0
  145. package/server/utils/label-config-builder.ts +340 -0
  146. package/server/utils/label-studio-api-client.ts +487 -0
  147. package/server/utils/media-url-extractor.ts +193 -0
  148. package/server/utils/task-transformer.ts +342 -0
  149. package/test-ai-prediction.js +268 -0
  150. package/test-dataset-integration.js +449 -0
  151. package/test-simple.js +89 -0
  152. package/things-factory.config.js +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prediction-management.js","sourceRoot":"","sources":["../../../server/service/prediction/prediction-management.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, Mutation, Arg, Ctx, Int, Directive } from 'type-graphql'\nimport { labelStudioApi } from '../../utils/label-studio-api-client.js'\nimport {\n LabelStudioPrediction,\n PredictionInput,\n PredictionImportResult,\n BulkPredictionInput\n} from '../../types/label-studio-types.js'\n\n@Resolver()\nexport class PredictionManagement {\n /**\n * Get predictions for a task\n */\n @Query(returns => [LabelStudioPrediction], {\n description: 'Get all predictions for a Label Studio task'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"query\")')\n async labelStudioTaskPredictions(\n @Arg('taskId', type => Int) taskId: number,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioPrediction[]> {\n try {\n const predictions = await labelStudioApi.getPredictions(taskId)\n\n return predictions.map((prediction: any) => ({\n id: prediction.id,\n taskId: prediction.task || taskId,\n result: JSON.stringify(prediction.result),\n score: prediction.score || undefined,\n modelVersion: prediction.model_version || undefined,\n createdAt: prediction.created_at ? new Date(prediction.created_at) : undefined\n }))\n } catch (error) {\n console.error(`Failed to fetch predictions for task ${taskId}:`, error)\n throw new Error(`Failed to fetch predictions: ${error.message}`)\n }\n }\n\n /**\n * Get predictions for a project\n */\n @Query(returns => [LabelStudioPrediction], {\n description: 'Get all predictions for a Label Studio project'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"query\")')\n async labelStudioProjectPredictions(\n @Arg('projectId', type => Int) projectId: number,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioPrediction[]> {\n try {\n const predictions = await labelStudioApi.getProjectPredictions(projectId)\n\n return predictions.map((prediction: any) => ({\n id: prediction.id,\n taskId: prediction.task,\n result: JSON.stringify(prediction.result),\n score: prediction.score || undefined,\n modelVersion: prediction.model_version || undefined,\n createdAt: prediction.created_at ? new Date(prediction.created_at) : undefined\n }))\n } catch (error) {\n console.error(`Failed to fetch predictions for project ${projectId}:`, error)\n throw new Error(`Failed to fetch predictions: ${error.message}`)\n }\n }\n\n /**\n * Get single prediction by ID\n */\n @Query(returns => LabelStudioPrediction, {\n description: 'Get a single prediction by ID',\n nullable: true\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"query\")')\n async labelStudioPrediction(\n @Arg('predictionId', type => Int) predictionId: number,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioPrediction | null> {\n try {\n const prediction = await labelStudioApi.getPrediction(predictionId)\n\n if (!prediction) {\n return null\n }\n\n return {\n id: prediction.id,\n taskId: prediction.task,\n result: JSON.stringify(prediction.result),\n score: prediction.score || undefined,\n modelVersion: prediction.model_version || undefined,\n createdAt: prediction.created_at ? new Date(prediction.created_at) : undefined\n }\n } catch (error) {\n console.error(`Failed to fetch prediction ${predictionId}:`, error)\n return null\n }\n }\n\n /**\n * Create a prediction for a task\n */\n @Mutation(returns => LabelStudioPrediction, {\n description: 'Create a prediction for a Label Studio task'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async createLabelStudioPrediction(\n @Arg('input') input: PredictionInput,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioPrediction> {\n try {\n // Parse result JSON\n const result = JSON.parse(input.result)\n\n // Create prediction\n const prediction = await labelStudioApi.createPrediction({\n task: input.taskId,\n result,\n score: input.score,\n model_version: input.modelVersion\n })\n\n return {\n id: prediction.id,\n taskId: prediction.task,\n result: JSON.stringify(prediction.result),\n score: prediction.score || undefined,\n modelVersion: prediction.model_version || undefined,\n createdAt: prediction.created_at ? new Date(prediction.created_at) : undefined\n }\n } catch (error) {\n console.error(`Failed to create prediction for task ${input.taskId}:`, error)\n throw new Error(`Failed to create prediction: ${error.message}`)\n }\n }\n\n /**\n * Create predictions in bulk\n */\n @Mutation(returns => PredictionImportResult, {\n description: 'Create multiple predictions at once'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async createBulkPredictions(\n @Arg('predictions', type => [BulkPredictionInput]) predictions: BulkPredictionInput[],\n @Ctx() context: ResolverContext\n ): Promise<PredictionImportResult> {\n const errors: string[] = []\n let created = 0\n let failed = 0\n\n try {\n // Parse and validate predictions\n const parsedPredictions = predictions.map((pred, index) => {\n try {\n return {\n task: pred.taskId,\n result: JSON.parse(pred.result),\n score: pred.score,\n model_version: pred.modelVersion\n }\n } catch (e) {\n failed++\n errors.push(`Invalid JSON in prediction ${index}: ${pred.result}`)\n return null\n }\n })\n\n const validPredictions = parsedPredictions.filter(p => p !== null)\n\n if (validPredictions.length === 0) {\n return {\n created: 0,\n failed: predictions.length,\n errors\n }\n }\n\n // Create predictions\n const response = await labelStudioApi.createPredictions(validPredictions)\n created = response.created || validPredictions.length\n\n return {\n created,\n failed,\n errors: errors.length > 0 ? errors : undefined\n }\n } catch (error) {\n console.error('Failed to create bulk predictions:', error)\n throw new Error(`Failed to create predictions: ${error.message}`)\n }\n }\n\n /**\n * Import predictions for a project\n * This is the recommended way to bulk import AI model predictions\n */\n @Mutation(returns => PredictionImportResult, {\n description: 'Import predictions for a Label Studio project in bulk'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async importPredictionsToProject(\n @Arg('projectId', type => Int) projectId: number,\n @Arg('predictions', type => [BulkPredictionInput]) predictions: BulkPredictionInput[],\n @Ctx() context: ResolverContext\n ): Promise<PredictionImportResult> {\n const errors: string[] = []\n let created = 0\n let failed = 0\n\n try {\n // Parse and validate predictions\n const parsedPredictions = predictions.map((pred, index) => {\n try {\n return {\n task: pred.taskId,\n result: JSON.parse(pred.result),\n score: pred.score,\n model_version: pred.modelVersion\n }\n } catch (e) {\n failed++\n errors.push(`Invalid JSON in prediction ${index}: ${pred.result}`)\n return null\n }\n })\n\n const validPredictions = parsedPredictions.filter(p => p !== null)\n\n if (validPredictions.length === 0) {\n return {\n created: 0,\n failed: predictions.length,\n errors\n }\n }\n\n // Import predictions using project endpoint\n const response = await labelStudioApi.importPredictions(projectId, validPredictions)\n\n // Parse response\n if (response.created !== undefined) {\n created = response.created\n } else if (response.task_count !== undefined) {\n created = response.task_count\n } else if (Array.isArray(response)) {\n created = response.length\n }\n\n return {\n created,\n failed,\n errors: errors.length > 0 ? errors : undefined\n }\n } catch (error) {\n console.error(`Failed to import predictions to project ${projectId}:`, error)\n throw new Error(`Failed to import predictions: ${error.message}`)\n }\n }\n\n /**\n * Delete prediction\n */\n @Mutation(returns => Boolean, {\n description: 'Delete a prediction from Label Studio'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async deleteLabelStudioPrediction(\n @Arg('predictionId', type => Int) predictionId: number,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n try {\n await labelStudioApi.deletePrediction(predictionId)\n return true\n } catch (error) {\n console.error(`Failed to delete prediction ${predictionId}:`, error)\n throw new Error(`Failed to delete prediction: ${error.message}`)\n }\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import { LabelStudioProject, CreateProjectInput, CreateProjectWithSpecInput, ProjectMetrics } from '../../types/label-studio-types.js';
2
+ export declare class ProjectManagement {
3
+ /**
4
+ * Get JWT token for Label Studio SSO
5
+ */
6
+ labelStudioToken(context: ResolverContext): Promise<string | null>;
7
+ /**
8
+ * Get all Label Studio projects
9
+ */
10
+ labelStudioProjects(context: ResolverContext): Promise<LabelStudioProject[]>;
11
+ /**
12
+ * Get single Label Studio project by ID
13
+ */
14
+ labelStudioProject(projectId: number, context: ResolverContext): Promise<LabelStudioProject | null>;
15
+ /**
16
+ * Create new Label Studio project
17
+ */
18
+ createLabelStudioProject(input: CreateProjectInput, context: ResolverContext): Promise<LabelStudioProject>;
19
+ /**
20
+ * Update Label Studio project
21
+ */
22
+ updateLabelStudioProject(projectId: number, input: CreateProjectInput, context: ResolverContext): Promise<LabelStudioProject>;
23
+ /**
24
+ * Delete Label Studio project
25
+ */
26
+ deleteLabelStudioProject(projectId: number, context: ResolverContext): Promise<boolean>;
27
+ /**
28
+ * Get project metrics and statistics
29
+ */
30
+ labelStudioProjectMetrics(projectId: number, context: ResolverContext): Promise<ProjectMetrics>;
31
+ /**
32
+ * Create project with flexible config specification
33
+ * Uses LabelConfigBuilder for declarative template generation
34
+ */
35
+ createLabelStudioProjectWithSpec(input: CreateProjectWithSpecInput, context: ResolverContext): Promise<LabelStudioProject>;
36
+ }
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectManagement = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const label_studio_api_client_js_1 = require("../../utils/label-studio-api-client.js");
7
+ const label_config_builder_js_1 = require("../../utils/label-config-builder.js");
8
+ const label_studio_types_js_1 = require("../../types/label-studio-types.js");
9
+ let ProjectManagement = class ProjectManagement {
10
+ /**
11
+ * Get JWT token for Label Studio SSO
12
+ */
13
+ async labelStudioToken(context) {
14
+ try {
15
+ const { user } = context.state;
16
+ if (!user) {
17
+ return null;
18
+ }
19
+ // Generate JWT token using User.sign() method
20
+ const token = await user.sign();
21
+ return token;
22
+ }
23
+ catch (error) {
24
+ console.error('Failed to generate Label Studio token:', error);
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Get all Label Studio projects
30
+ */
31
+ async labelStudioProjects(context) {
32
+ try {
33
+ const projects = await label_studio_api_client_js_1.labelStudioApi.getProjects();
34
+ return projects.map(project => ({
35
+ id: project.id,
36
+ title: project.title,
37
+ description: project.description || '',
38
+ labelConfig: project.label_config || '',
39
+ expertInstruction: project.expert_instruction || '',
40
+ taskCount: project.task_number || 0,
41
+ completedTaskCount: project.finished_task_number || 0,
42
+ completionRate: project.task_number > 0 ? (project.finished_task_number || 0) / project.task_number : 0,
43
+ createdAt: new Date(project.created_at),
44
+ updatedAt: project.updated_at ? new Date(project.updated_at) : new Date(project.created_at)
45
+ }));
46
+ }
47
+ catch (error) {
48
+ console.error('Failed to fetch Label Studio projects:', error);
49
+ throw new Error(`Failed to fetch projects: ${error.message}`);
50
+ }
51
+ }
52
+ /**
53
+ * Get single Label Studio project by ID
54
+ */
55
+ async labelStudioProject(projectId, context) {
56
+ try {
57
+ const project = await label_studio_api_client_js_1.labelStudioApi.getProject(projectId);
58
+ if (!project) {
59
+ return null;
60
+ }
61
+ return {
62
+ id: project.id,
63
+ title: project.title,
64
+ description: project.description || '',
65
+ labelConfig: project.label_config || '',
66
+ expertInstruction: project.expert_instruction || '',
67
+ taskCount: project.task_number || 0,
68
+ completedTaskCount: project.finished_task_number || 0,
69
+ completionRate: project.task_number > 0 ? (project.finished_task_number || 0) / project.task_number : 0,
70
+ createdAt: new Date(project.created_at),
71
+ updatedAt: project.updated_at ? new Date(project.updated_at) : new Date(project.created_at)
72
+ };
73
+ }
74
+ catch (error) {
75
+ console.error(`Failed to fetch Label Studio project ${projectId}:`, error);
76
+ return null;
77
+ }
78
+ }
79
+ /**
80
+ * Create new Label Studio project
81
+ */
82
+ async createLabelStudioProject(input, context) {
83
+ try {
84
+ const project = await label_studio_api_client_js_1.labelStudioApi.createProject({
85
+ title: input.title,
86
+ description: input.description,
87
+ label_config: input.labelConfig,
88
+ expert_instruction: input.expertInstruction
89
+ });
90
+ return {
91
+ id: project.id,
92
+ title: project.title,
93
+ description: project.description || '',
94
+ labelConfig: project.label_config || '',
95
+ expertInstruction: project.expert_instruction || '',
96
+ taskCount: 0,
97
+ completedTaskCount: 0,
98
+ completionRate: 0,
99
+ createdAt: new Date(project.created_at),
100
+ updatedAt: new Date(project.updated_at)
101
+ };
102
+ }
103
+ catch (error) {
104
+ console.error('Failed to create Label Studio project:', error);
105
+ throw new Error(`Failed to create project: ${error.message}`);
106
+ }
107
+ }
108
+ /**
109
+ * Update Label Studio project
110
+ */
111
+ async updateLabelStudioProject(projectId, input, context) {
112
+ try {
113
+ const project = await label_studio_api_client_js_1.labelStudioApi.updateProject(projectId, {
114
+ title: input.title,
115
+ description: input.description,
116
+ label_config: input.labelConfig,
117
+ expert_instruction: input.expertInstruction
118
+ });
119
+ return {
120
+ id: project.id,
121
+ title: project.title,
122
+ description: project.description || '',
123
+ labelConfig: project.label_config || '',
124
+ expertInstruction: project.expert_instruction || '',
125
+ taskCount: project.task_number || 0,
126
+ completedTaskCount: project.finished_task_number || 0,
127
+ completionRate: project.task_number > 0 ? (project.finished_task_number || 0) / project.task_number : 0,
128
+ createdAt: new Date(project.created_at),
129
+ updatedAt: project.updated_at ? new Date(project.updated_at) : new Date(project.created_at)
130
+ };
131
+ }
132
+ catch (error) {
133
+ console.error(`Failed to update Label Studio project ${projectId}:`, error);
134
+ throw new Error(`Failed to update project: ${error.message}`);
135
+ }
136
+ }
137
+ /**
138
+ * Delete Label Studio project
139
+ */
140
+ async deleteLabelStudioProject(projectId, context) {
141
+ try {
142
+ await label_studio_api_client_js_1.labelStudioApi.deleteProject(projectId);
143
+ return true;
144
+ }
145
+ catch (error) {
146
+ console.error(`Failed to delete Label Studio project ${projectId}:`, error);
147
+ throw new Error(`Failed to delete project: ${error.message}`);
148
+ }
149
+ }
150
+ /**
151
+ * Get project metrics and statistics
152
+ */
153
+ async labelStudioProjectMetrics(projectId, context) {
154
+ try {
155
+ const stats = await label_studio_api_client_js_1.labelStudioApi.getProjectStats(projectId);
156
+ const annotatorStats = await label_studio_api_client_js_1.labelStudioApi.getAnnotatorStats(projectId);
157
+ return {
158
+ totalTasks: stats.totalTasks,
159
+ completedTasks: stats.completedTasks,
160
+ totalAnnotations: stats.totalAnnotations,
161
+ avgAnnotationsPerTask: stats.avgAnnotationsPerTask,
162
+ completionRate: stats.completionRate,
163
+ avgTimePerTask: null, // 계산 필요
164
+ annotatorStats: annotatorStats.map((stat) => ({
165
+ email: stat.email,
166
+ annotationCount: stat.annotationCount,
167
+ avgTime: stat.avgTime,
168
+ lastAnnotationDate: new Date(stat.lastAnnotationDate)
169
+ }))
170
+ };
171
+ }
172
+ catch (error) {
173
+ console.error(`Failed to fetch project metrics for ${projectId}:`, error);
174
+ throw new Error(`Failed to fetch project metrics: ${error.message}`);
175
+ }
176
+ }
177
+ /**
178
+ * Create project with flexible config specification
179
+ * Uses LabelConfigBuilder for declarative template generation
180
+ */
181
+ async createLabelStudioProjectWithSpec(input, context) {
182
+ try {
183
+ // Parse controls JSON
184
+ const controls = JSON.parse(input.labelConfigSpec.controls);
185
+ // Build label config using LabelConfigBuilder
186
+ const labelConfig = label_config_builder_js_1.LabelConfigBuilder.build({
187
+ dataType: input.labelConfigSpec.dataType,
188
+ dataName: input.labelConfigSpec.dataName,
189
+ controls
190
+ });
191
+ // Create project
192
+ const project = await label_studio_api_client_js_1.labelStudioApi.createProject({
193
+ title: input.title,
194
+ description: input.description,
195
+ label_config: labelConfig,
196
+ expert_instruction: input.expertInstruction
197
+ });
198
+ return {
199
+ id: project.id,
200
+ title: project.title,
201
+ description: project.description || '',
202
+ labelConfig: project.label_config || '',
203
+ expertInstruction: project.expert_instruction || '',
204
+ taskCount: 0,
205
+ completedTaskCount: 0,
206
+ completionRate: 0,
207
+ createdAt: new Date(project.created_at),
208
+ updatedAt: new Date(project.updated_at)
209
+ };
210
+ }
211
+ catch (error) {
212
+ console.error('Failed to create Label Studio project with spec:', error);
213
+ throw new Error(`Failed to create project: ${error.message}`);
214
+ }
215
+ }
216
+ };
217
+ exports.ProjectManagement = ProjectManagement;
218
+ tslib_1.__decorate([
219
+ (0, type_graphql_1.Query)(returns => String, {
220
+ description: 'Get JWT token for Label Studio authentication',
221
+ nullable: true
222
+ }),
223
+ tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
224
+ tslib_1.__metadata("design:type", Function),
225
+ tslib_1.__metadata("design:paramtypes", [Object]),
226
+ tslib_1.__metadata("design:returntype", Promise)
227
+ ], ProjectManagement.prototype, "labelStudioToken", null);
228
+ tslib_1.__decorate([
229
+ (0, type_graphql_1.Query)(returns => [label_studio_types_js_1.LabelStudioProject], {
230
+ description: 'Get all Label Studio projects accessible to the user'
231
+ }),
232
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "query")'),
233
+ tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
234
+ tslib_1.__metadata("design:type", Function),
235
+ tslib_1.__metadata("design:paramtypes", [Object]),
236
+ tslib_1.__metadata("design:returntype", Promise)
237
+ ], ProjectManagement.prototype, "labelStudioProjects", null);
238
+ tslib_1.__decorate([
239
+ (0, type_graphql_1.Query)(returns => label_studio_types_js_1.LabelStudioProject, {
240
+ description: 'Get a single Label Studio project by ID',
241
+ nullable: true
242
+ }),
243
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "query")'),
244
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId', type => type_graphql_1.Int)),
245
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
246
+ tslib_1.__metadata("design:type", Function),
247
+ tslib_1.__metadata("design:paramtypes", [Number, Object]),
248
+ tslib_1.__metadata("design:returntype", Promise)
249
+ ], ProjectManagement.prototype, "labelStudioProject", null);
250
+ tslib_1.__decorate([
251
+ (0, type_graphql_1.Mutation)(returns => label_studio_types_js_1.LabelStudioProject, {
252
+ description: 'Create a new Label Studio project'
253
+ }),
254
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "mutation")'),
255
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('input')),
256
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
257
+ tslib_1.__metadata("design:type", Function),
258
+ tslib_1.__metadata("design:paramtypes", [label_studio_types_js_1.CreateProjectInput, Object]),
259
+ tslib_1.__metadata("design:returntype", Promise)
260
+ ], ProjectManagement.prototype, "createLabelStudioProject", null);
261
+ tslib_1.__decorate([
262
+ (0, type_graphql_1.Mutation)(returns => label_studio_types_js_1.LabelStudioProject, {
263
+ description: 'Update an existing Label Studio project'
264
+ }),
265
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "mutation")'),
266
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId', type => type_graphql_1.Int)),
267
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('input')),
268
+ tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
269
+ tslib_1.__metadata("design:type", Function),
270
+ tslib_1.__metadata("design:paramtypes", [Number, label_studio_types_js_1.CreateProjectInput, Object]),
271
+ tslib_1.__metadata("design:returntype", Promise)
272
+ ], ProjectManagement.prototype, "updateLabelStudioProject", null);
273
+ tslib_1.__decorate([
274
+ (0, type_graphql_1.Mutation)(returns => Boolean, {
275
+ description: 'Delete a Label Studio project'
276
+ }),
277
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "mutation")'),
278
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId', type => type_graphql_1.Int)),
279
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
280
+ tslib_1.__metadata("design:type", Function),
281
+ tslib_1.__metadata("design:paramtypes", [Number, Object]),
282
+ tslib_1.__metadata("design:returntype", Promise)
283
+ ], ProjectManagement.prototype, "deleteLabelStudioProject", null);
284
+ tslib_1.__decorate([
285
+ (0, type_graphql_1.Query)(returns => label_studio_types_js_1.ProjectMetrics, {
286
+ description: 'Get metrics and statistics for a Label Studio project'
287
+ }),
288
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "query")'),
289
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId', type => type_graphql_1.Int)),
290
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
291
+ tslib_1.__metadata("design:type", Function),
292
+ tslib_1.__metadata("design:paramtypes", [Number, Object]),
293
+ tslib_1.__metadata("design:returntype", Promise)
294
+ ], ProjectManagement.prototype, "labelStudioProjectMetrics", null);
295
+ tslib_1.__decorate([
296
+ (0, type_graphql_1.Mutation)(returns => label_studio_types_js_1.LabelStudioProject, {
297
+ description: 'Create Label Studio project with flexible config specification'
298
+ }),
299
+ (0, type_graphql_1.Directive)('@privilege(category: "label-studio", privilege: "mutation")'),
300
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('input')),
301
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
302
+ tslib_1.__metadata("design:type", Function),
303
+ tslib_1.__metadata("design:paramtypes", [label_studio_types_js_1.CreateProjectWithSpecInput, Object]),
304
+ tslib_1.__metadata("design:returntype", Promise)
305
+ ], ProjectManagement.prototype, "createLabelStudioProjectWithSpec", null);
306
+ exports.ProjectManagement = ProjectManagement = tslib_1.__decorate([
307
+ (0, type_graphql_1.Resolver)()
308
+ ], ProjectManagement);
309
+ //# sourceMappingURL=project-management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-management.js","sourceRoot":"","sources":["../../../server/service/project/project-management.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, Mutation, Arg, Ctx, Int, Directive } from 'type-graphql'\nimport { labelStudioApi } from '../../utils/label-studio-api-client.js'\nimport { LabelConfigBuilder } from '../../utils/label-config-builder.js'\nimport {\n LabelStudioProject,\n CreateProjectInput,\n CreateProjectWithSpecInput,\n ProjectMetrics,\n AnnotatorStats\n} from '../../types/label-studio-types.js'\n\n@Resolver()\nexport class ProjectManagement {\n /**\n * Get JWT token for Label Studio SSO\n */\n @Query(returns => String, {\n description: 'Get JWT token for Label Studio authentication',\n nullable: true\n })\n async labelStudioToken(@Ctx() context: ResolverContext): Promise<string | null> {\n try {\n const { user } = context.state\n if (!user) {\n return null\n }\n\n // Generate JWT token using User.sign() method\n const token = await user.sign()\n return token\n } catch (error) {\n console.error('Failed to generate Label Studio token:', error)\n return null\n }\n }\n\n /**\n * Get all Label Studio projects\n */\n @Query(returns => [LabelStudioProject], {\n description: 'Get all Label Studio projects accessible to the user'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"query\")')\n async labelStudioProjects(@Ctx() context: ResolverContext): Promise<LabelStudioProject[]> {\n try {\n const projects = await labelStudioApi.getProjects()\n\n return projects.map(project => ({\n id: project.id,\n title: project.title,\n description: project.description || '',\n labelConfig: project.label_config || '',\n expertInstruction: project.expert_instruction || '',\n taskCount: project.task_number || 0,\n completedTaskCount: project.finished_task_number || 0,\n completionRate:\n project.task_number > 0 ? (project.finished_task_number || 0) / project.task_number : 0,\n createdAt: new Date(project.created_at),\n updatedAt: project.updated_at ? new Date(project.updated_at) : new Date(project.created_at)\n }))\n } catch (error) {\n console.error('Failed to fetch Label Studio projects:', error)\n throw new Error(`Failed to fetch projects: ${error.message}`)\n }\n }\n\n /**\n * Get single Label Studio project by ID\n */\n @Query(returns => LabelStudioProject, {\n description: 'Get a single Label Studio project by ID',\n nullable: true\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"query\")')\n async labelStudioProject(\n @Arg('projectId', type => Int) projectId: number,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioProject | null> {\n try {\n const project = await labelStudioApi.getProject(projectId)\n\n if (!project) {\n return null\n }\n\n return {\n id: project.id,\n title: project.title,\n description: project.description || '',\n labelConfig: project.label_config || '',\n expertInstruction: project.expert_instruction || '',\n taskCount: project.task_number || 0,\n completedTaskCount: project.finished_task_number || 0,\n completionRate:\n project.task_number > 0 ? (project.finished_task_number || 0) / project.task_number : 0,\n createdAt: new Date(project.created_at),\n updatedAt: project.updated_at ? new Date(project.updated_at) : new Date(project.created_at)\n }\n } catch (error) {\n console.error(`Failed to fetch Label Studio project ${projectId}:`, error)\n return null\n }\n }\n\n /**\n * Create new Label Studio project\n */\n @Mutation(returns => LabelStudioProject, {\n description: 'Create a new Label Studio project'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async createLabelStudioProject(\n @Arg('input') input: CreateProjectInput,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioProject> {\n try {\n const project = await labelStudioApi.createProject({\n title: input.title,\n description: input.description,\n label_config: input.labelConfig,\n expert_instruction: input.expertInstruction\n })\n\n return {\n id: project.id,\n title: project.title,\n description: project.description || '',\n labelConfig: project.label_config || '',\n expertInstruction: project.expert_instruction || '',\n taskCount: 0,\n completedTaskCount: 0,\n completionRate: 0,\n createdAt: new Date(project.created_at),\n updatedAt: new Date(project.updated_at)\n }\n } catch (error) {\n console.error('Failed to create Label Studio project:', error)\n throw new Error(`Failed to create project: ${error.message}`)\n }\n }\n\n /**\n * Update Label Studio project\n */\n @Mutation(returns => LabelStudioProject, {\n description: 'Update an existing Label Studio project'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async updateLabelStudioProject(\n @Arg('projectId', type => Int) projectId: number,\n @Arg('input') input: CreateProjectInput,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioProject> {\n try {\n const project = await labelStudioApi.updateProject(projectId, {\n title: input.title,\n description: input.description,\n label_config: input.labelConfig,\n expert_instruction: input.expertInstruction\n })\n\n return {\n id: project.id,\n title: project.title,\n description: project.description || '',\n labelConfig: project.label_config || '',\n expertInstruction: project.expert_instruction || '',\n taskCount: project.task_number || 0,\n completedTaskCount: project.finished_task_number || 0,\n completionRate:\n project.task_number > 0 ? (project.finished_task_number || 0) / project.task_number : 0,\n createdAt: new Date(project.created_at),\n updatedAt: project.updated_at ? new Date(project.updated_at) : new Date(project.created_at)\n }\n } catch (error) {\n console.error(`Failed to update Label Studio project ${projectId}:`, error)\n throw new Error(`Failed to update project: ${error.message}`)\n }\n }\n\n /**\n * Delete Label Studio project\n */\n @Mutation(returns => Boolean, {\n description: 'Delete a Label Studio project'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async deleteLabelStudioProject(\n @Arg('projectId', type => Int) projectId: number,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n try {\n await labelStudioApi.deleteProject(projectId)\n return true\n } catch (error) {\n console.error(`Failed to delete Label Studio project ${projectId}:`, error)\n throw new Error(`Failed to delete project: ${error.message}`)\n }\n }\n\n /**\n * Get project metrics and statistics\n */\n @Query(returns => ProjectMetrics, {\n description: 'Get metrics and statistics for a Label Studio project'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"query\")')\n async labelStudioProjectMetrics(\n @Arg('projectId', type => Int) projectId: number,\n @Ctx() context: ResolverContext\n ): Promise<ProjectMetrics> {\n try {\n const stats = await labelStudioApi.getProjectStats(projectId)\n const annotatorStats = await labelStudioApi.getAnnotatorStats(projectId)\n\n return {\n totalTasks: stats.totalTasks,\n completedTasks: stats.completedTasks,\n totalAnnotations: stats.totalAnnotations,\n avgAnnotationsPerTask: stats.avgAnnotationsPerTask,\n completionRate: stats.completionRate,\n avgTimePerTask: null, // 계산 필요\n annotatorStats: annotatorStats.map((stat: any) => ({\n email: stat.email,\n annotationCount: stat.annotationCount,\n avgTime: stat.avgTime,\n lastAnnotationDate: new Date(stat.lastAnnotationDate)\n }))\n }\n } catch (error) {\n console.error(`Failed to fetch project metrics for ${projectId}:`, error)\n throw new Error(`Failed to fetch project metrics: ${error.message}`)\n }\n }\n\n /**\n * Create project with flexible config specification\n * Uses LabelConfigBuilder for declarative template generation\n */\n @Mutation(returns => LabelStudioProject, {\n description: 'Create Label Studio project with flexible config specification'\n })\n @Directive('@privilege(category: \"label-studio\", privilege: \"mutation\")')\n async createLabelStudioProjectWithSpec(\n @Arg('input') input: CreateProjectWithSpecInput,\n @Ctx() context: ResolverContext\n ): Promise<LabelStudioProject> {\n try {\n // Parse controls JSON\n const controls = JSON.parse(input.labelConfigSpec.controls)\n\n // Build label config using LabelConfigBuilder\n const labelConfig = LabelConfigBuilder.build({\n dataType: input.labelConfigSpec.dataType as any,\n dataName: input.labelConfigSpec.dataName,\n controls\n })\n\n // Create project\n const project = await labelStudioApi.createProject({\n title: input.title,\n description: input.description,\n label_config: labelConfig,\n expert_instruction: input.expertInstruction\n })\n\n return {\n id: project.id,\n title: project.title,\n description: project.description || '',\n labelConfig: project.label_config || '',\n expertInstruction: project.expert_instruction || '',\n taskCount: 0,\n completedTaskCount: 0,\n completionRate: 0,\n createdAt: new Date(project.created_at),\n updatedAt: new Date(project.updated_at)\n }\n } catch (error) {\n console.error('Failed to create Label Studio project with spec:', error)\n throw new Error(`Failed to create project: ${error.message}`)\n }\n }\n}\n"]}
@@ -0,0 +1,42 @@
1
+ import { LabelStudioTask, TaskDataInput, TaskImportResult, LabelStudioAnnotation, ExportResult, ImportTasksWithTransformInput, ExportAnnotationsInput, AnnotationExportResult } from '../../types/label-studio-types.js';
2
+ export declare class TaskManagement {
3
+ /**
4
+ * Get tasks for a project
5
+ */
6
+ labelStudioTasks(projectId: number, page: number, pageSize: number, context: ResolverContext): Promise<LabelStudioTask[]>;
7
+ /**
8
+ * Get single task by ID
9
+ */
10
+ labelStudioTask(taskId: number, context: ResolverContext): Promise<LabelStudioTask | null>;
11
+ /**
12
+ * Import tasks to Label Studio project
13
+ */
14
+ importTasksToLabelStudio(projectId: number, tasks: TaskDataInput[], context: ResolverContext): Promise<TaskImportResult>;
15
+ /**
16
+ * Delete task
17
+ */
18
+ deleteLabelStudioTask(taskId: number, context: ResolverContext): Promise<boolean>;
19
+ /**
20
+ * Get annotations for a task
21
+ */
22
+ labelStudioTaskAnnotations(taskId: number, context: ResolverContext): Promise<LabelStudioAnnotation[]>;
23
+ /**
24
+ * Export annotations from project
25
+ */
26
+ exportLabelStudioAnnotations(projectId: number, format: 'JSON' | 'JSON_MIN' | 'CSV' | 'TSV' | 'CONLL2003' | 'COCO' | 'VOC' | 'YOLO', context: ResolverContext): Promise<ExportResult>;
27
+ /**
28
+ * Sync completed annotations to Things-Factory database
29
+ * This allows storing annotations in TF for further processing
30
+ */
31
+ syncAnnotationsToDatabase(projectId: number, context: ResolverContext): Promise<number>;
32
+ /**
33
+ * Import tasks with flexible data transformation
34
+ * Uses TaskTransformer for mapping source data to Label Studio format
35
+ */
36
+ importTasksWithTransform(projectId: number, input: ImportTasksWithTransformInput, context: ResolverContext): Promise<TaskImportResult>;
37
+ /**
38
+ * Export annotations with flexible format conversion
39
+ * Uses AnnotationExporter for custom format support
40
+ */
41
+ exportAnnotationsWithFormat(projectId: number, input: ExportAnnotationsInput, context: ResolverContext): Promise<AnnotationExportResult>;
42
+ }