@tiangong-lca/tidas-sdk 0.1.20 → 0.1.21

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 (255) hide show
  1. package/README.md +174 -451
  2. package/dist/core/base/TidasEntity.d.ts +190 -0
  3. package/dist/core/base/TidasEntity.d.ts.map +1 -0
  4. package/dist/core/base/TidasEntity.js +433 -0
  5. package/dist/core/base/TidasEntity.js.map +1 -0
  6. package/dist/core/config/GlobalConfig.d.ts +60 -0
  7. package/dist/core/config/GlobalConfig.d.ts.map +1 -0
  8. package/dist/core/config/GlobalConfig.js +110 -0
  9. package/dist/core/config/GlobalConfig.js.map +1 -0
  10. package/dist/core/config/ValidationConfig.d.ts +70 -0
  11. package/dist/core/config/ValidationConfig.d.ts.map +1 -0
  12. package/dist/core/config/ValidationConfig.js +157 -0
  13. package/dist/core/config/ValidationConfig.js.map +1 -0
  14. package/dist/core/copilot/ai.d.ts +150 -0
  15. package/dist/core/copilot/ai.d.ts.map +1 -0
  16. package/dist/core/copilot/ai.js +581 -0
  17. package/dist/core/copilot/ai.js.map +1 -0
  18. package/dist/core/copilot/base.d.ts +83 -0
  19. package/dist/core/copilot/base.d.ts.map +1 -0
  20. package/dist/core/copilot/base.js +193 -0
  21. package/dist/core/copilot/base.js.map +1 -0
  22. package/dist/core/copilot/index.d.ts +1 -0
  23. package/dist/core/copilot/index.d.ts.map +1 -0
  24. package/dist/core/copilot/index.js +2 -0
  25. package/dist/core/copilot/index.js.map +1 -0
  26. package/dist/core/entities/TidasContact.d.ts +14 -0
  27. package/dist/core/entities/TidasContact.d.ts.map +1 -0
  28. package/dist/core/entities/TidasContact.js +124 -0
  29. package/dist/core/entities/TidasContact.js.map +1 -0
  30. package/dist/core/entities/TidasFlow.d.ts +14 -0
  31. package/dist/core/entities/TidasFlow.d.ts.map +1 -0
  32. package/dist/core/entities/TidasFlow.js +143 -0
  33. package/dist/core/entities/TidasFlow.js.map +1 -0
  34. package/dist/core/entities/TidasFlowProperty.d.ts +14 -0
  35. package/dist/core/entities/TidasFlowProperty.d.ts.map +1 -0
  36. package/dist/core/entities/TidasFlowProperty.js +156 -0
  37. package/dist/core/entities/TidasFlowProperty.js.map +1 -0
  38. package/dist/core/entities/TidasLCIAMethod.d.ts +14 -0
  39. package/dist/core/entities/TidasLCIAMethod.d.ts.map +1 -0
  40. package/dist/core/entities/TidasLCIAMethod.js +177 -0
  41. package/dist/core/entities/TidasLCIAMethod.js.map +1 -0
  42. package/dist/core/entities/TidasLifeCycleModel.d.ts +14 -0
  43. package/dist/core/entities/TidasLifeCycleModel.d.ts.map +1 -0
  44. package/dist/core/entities/TidasLifeCycleModel.js +169 -0
  45. package/dist/core/entities/TidasLifeCycleModel.js.map +1 -0
  46. package/dist/core/entities/TidasProcess.d.ts +14 -0
  47. package/dist/core/entities/TidasProcess.d.ts.map +1 -0
  48. package/dist/core/entities/TidasProcess.js +191 -0
  49. package/dist/core/entities/TidasProcess.js.map +1 -0
  50. package/dist/core/entities/TidasSource.d.ts +14 -0
  51. package/dist/core/entities/TidasSource.d.ts.map +1 -0
  52. package/dist/core/entities/TidasSource.js +146 -0
  53. package/dist/core/entities/TidasSource.js.map +1 -0
  54. package/dist/core/entities/TidasUnitGroup.d.ts +14 -0
  55. package/dist/core/entities/TidasUnitGroup.d.ts.map +1 -0
  56. package/dist/core/entities/TidasUnitGroup.js +177 -0
  57. package/dist/core/entities/TidasUnitGroup.js.map +1 -0
  58. package/dist/core/factories/index.d.ts +46 -0
  59. package/dist/core/factories/index.d.ts.map +1 -0
  60. package/dist/core/factories/index.js +223 -0
  61. package/dist/core/factories/index.js.map +1 -0
  62. package/dist/core/index.d.ts +9 -0
  63. package/dist/core/index.d.ts.map +1 -0
  64. package/dist/core/index.js +56 -0
  65. package/dist/core/index.js.map +1 -0
  66. package/dist/core/zod-factories.d.ts +71 -0
  67. package/dist/core/zod-factories.d.ts.map +1 -0
  68. package/dist/core/zod-factories.js +169 -0
  69. package/dist/core/zod-factories.js.map +1 -0
  70. package/dist/core/zod-proxy.d.ts +108 -0
  71. package/dist/core/zod-proxy.d.ts.map +1 -0
  72. package/dist/core/zod-proxy.js +382 -0
  73. package/dist/core/zod-proxy.js.map +1 -0
  74. package/dist/data/bundled-methodologies.json +1259 -0
  75. package/dist/index.d.ts +33 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +73 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/schemas/index.d.ts +48 -0
  80. package/dist/schemas/index.d.ts.map +1 -0
  81. package/dist/schemas/index.js +112 -0
  82. package/dist/schemas/index.js.map +1 -0
  83. package/dist/schemas/tidas_contacts.schema.d.ts +124 -0
  84. package/dist/schemas/tidas_contacts.schema.d.ts.map +1 -0
  85. package/dist/schemas/tidas_contacts.schema.js +75 -0
  86. package/dist/schemas/tidas_contacts.schema.js.map +1 -0
  87. package/dist/schemas/tidas_contacts_category.schema.d.ts +3 -0
  88. package/dist/schemas/tidas_contacts_category.schema.d.ts.map +1 -0
  89. package/dist/schemas/tidas_contacts_category.schema.js +53 -0
  90. package/dist/schemas/tidas_contacts_category.schema.js.map +1 -0
  91. package/dist/schemas/tidas_data_types.schema.d.ts +34 -0
  92. package/dist/schemas/tidas_data_types.schema.d.ts.map +1 -0
  93. package/dist/schemas/tidas_data_types.schema.js +60 -0
  94. package/dist/schemas/tidas_data_types.schema.js.map +1 -0
  95. package/dist/schemas/tidas_flowproperties.schema.d.ts +152 -0
  96. package/dist/schemas/tidas_flowproperties.schema.d.ts.map +1 -0
  97. package/dist/schemas/tidas_flowproperties.schema.js +88 -0
  98. package/dist/schemas/tidas_flowproperties.schema.js.map +1 -0
  99. package/dist/schemas/tidas_flowproperties_category.schema.d.ts +3 -0
  100. package/dist/schemas/tidas_flowproperties_category.schema.d.ts.map +1 -0
  101. package/dist/schemas/tidas_flowproperties_category.schema.js +28 -0
  102. package/dist/schemas/tidas_flowproperties_category.schema.js.map +1 -0
  103. package/dist/schemas/tidas_flows.schema.d.ts +215 -0
  104. package/dist/schemas/tidas_flows.schema.d.ts.map +1 -0
  105. package/dist/schemas/tidas_flows.schema.js +165 -0
  106. package/dist/schemas/tidas_flows.schema.js.map +1 -0
  107. package/dist/schemas/tidas_flows_elementary_category.schema.d.ts +3 -0
  108. package/dist/schemas/tidas_flows_elementary_category.schema.d.ts.map +1 -0
  109. package/dist/schemas/tidas_flows_elementary_category.schema.js +309 -0
  110. package/dist/schemas/tidas_flows_elementary_category.schema.js.map +1 -0
  111. package/dist/schemas/tidas_flows_product_category.schema.d.ts +3 -0
  112. package/dist/schemas/tidas_flows_product_category.schema.d.ts.map +1 -0
  113. package/dist/schemas/tidas_flows_product_category.schema.js +28508 -0
  114. package/dist/schemas/tidas_flows_product_category.schema.js.map +1 -0
  115. package/dist/schemas/tidas_lciamethods.schema.d.ts +546 -0
  116. package/dist/schemas/tidas_lciamethods.schema.d.ts.map +1 -0
  117. package/dist/schemas/tidas_lciamethods.schema.js +513 -0
  118. package/dist/schemas/tidas_lciamethods.schema.js.map +1 -0
  119. package/dist/schemas/tidas_lciamethods_category.schema.d.ts +3 -0
  120. package/dist/schemas/tidas_lciamethods_category.schema.d.ts.map +1 -0
  121. package/dist/schemas/tidas_lciamethods_category.schema.js +278 -0
  122. package/dist/schemas/tidas_lciamethods_category.schema.js.map +1 -0
  123. package/dist/schemas/tidas_lifecyclemodels.schema.d.ts +465 -0
  124. package/dist/schemas/tidas_lifecyclemodels.schema.d.ts.map +1 -0
  125. package/dist/schemas/tidas_lifecyclemodels.schema.js +420 -0
  126. package/dist/schemas/tidas_lifecyclemodels.schema.js.map +1 -0
  127. package/dist/schemas/tidas_locations_category.schema.d.ts +3 -0
  128. package/dist/schemas/tidas_locations_category.schema.d.ts.map +1 -0
  129. package/dist/schemas/tidas_locations_category.schema.js +655 -0
  130. package/dist/schemas/tidas_locations_category.schema.js.map +1 -0
  131. package/dist/schemas/tidas_processes.schema.d.ts +626 -0
  132. package/dist/schemas/tidas_processes.schema.d.ts.map +1 -0
  133. package/dist/schemas/tidas_processes.schema.js +659 -0
  134. package/dist/schemas/tidas_processes.schema.js.map +1 -0
  135. package/dist/schemas/tidas_processes_category.schema.d.ts +3 -0
  136. package/dist/schemas/tidas_processes_category.schema.d.ts.map +1 -0
  137. package/dist/schemas/tidas_processes_category.schema.js +4904 -0
  138. package/dist/schemas/tidas_processes_category.schema.js.map +1 -0
  139. package/dist/schemas/tidas_sources.schema.d.ts +113 -0
  140. package/dist/schemas/tidas_sources.schema.d.ts.map +1 -0
  141. package/dist/schemas/tidas_sources.schema.js +73 -0
  142. package/dist/schemas/tidas_sources.schema.js.map +1 -0
  143. package/dist/schemas/tidas_sources_category.schema.d.ts +3 -0
  144. package/dist/schemas/tidas_sources_category.schema.d.ts.map +1 -0
  145. package/dist/schemas/tidas_sources_category.schema.js +43 -0
  146. package/dist/schemas/tidas_sources_category.schema.js.map +1 -0
  147. package/dist/schemas/tidas_unitgroups.schema.d.ts +140 -0
  148. package/dist/schemas/tidas_unitgroups.schema.d.ts.map +1 -0
  149. package/dist/schemas/tidas_unitgroups.schema.js +103 -0
  150. package/dist/schemas/tidas_unitgroups.schema.js.map +1 -0
  151. package/dist/schemas/tidas_unitgroups_category.schema.d.ts +3 -0
  152. package/dist/schemas/tidas_unitgroups_category.schema.d.ts.map +1 -0
  153. package/dist/schemas/tidas_unitgroups_category.schema.js +28 -0
  154. package/dist/schemas/tidas_unitgroups_category.schema.js.map +1 -0
  155. package/dist/services/copilot-service.d.ts +147 -0
  156. package/dist/services/copilot-service.d.ts.map +1 -0
  157. package/dist/services/copilot-service.js +259 -0
  158. package/dist/services/copilot-service.js.map +1 -0
  159. package/dist/services/index.d.ts +9 -0
  160. package/dist/services/index.d.ts.map +1 -0
  161. package/dist/services/index.js +24 -0
  162. package/dist/services/index.js.map +1 -0
  163. package/dist/types/index.d.ts +22 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +21 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/dist/types/multi-lang-types.d.ts +23 -0
  168. package/dist/types/multi-lang-types.d.ts.map +1 -0
  169. package/dist/types/multi-lang-types.js +40 -0
  170. package/dist/types/multi-lang-types.js.map +1 -0
  171. package/dist/types/tidas_contacts.d.ts +72 -0
  172. package/dist/types/tidas_contacts.d.ts.map +1 -0
  173. package/dist/types/tidas_contacts.js +8 -0
  174. package/dist/types/tidas_contacts.js.map +1 -0
  175. package/dist/types/tidas_contacts_category.d.ts +43 -0
  176. package/dist/types/tidas_contacts_category.d.ts.map +1 -0
  177. package/dist/types/tidas_contacts_category.js +8 -0
  178. package/dist/types/tidas_contacts_category.js.map +1 -0
  179. package/dist/types/tidas_data_types.d.ts +116 -0
  180. package/dist/types/tidas_data_types.d.ts.map +1 -0
  181. package/dist/types/tidas_data_types.js +8 -0
  182. package/dist/types/tidas_data_types.js.map +1 -0
  183. package/dist/types/tidas_flowproperties.d.ts +73 -0
  184. package/dist/types/tidas_flowproperties.d.ts.map +1 -0
  185. package/dist/types/tidas_flowproperties.js +8 -0
  186. package/dist/types/tidas_flowproperties.js.map +1 -0
  187. package/dist/types/tidas_flowproperties_category.d.ts +23 -0
  188. package/dist/types/tidas_flowproperties_category.d.ts.map +1 -0
  189. package/dist/types/tidas_flowproperties_category.js +8 -0
  190. package/dist/types/tidas_flowproperties_category.js.map +1 -0
  191. package/dist/types/tidas_flows.d.ts +113 -0
  192. package/dist/types/tidas_flows.d.ts.map +1 -0
  193. package/dist/types/tidas_flows.js +8 -0
  194. package/dist/types/tidas_flows.js.map +1 -0
  195. package/dist/types/tidas_flows_elementary_category.d.ts +227 -0
  196. package/dist/types/tidas_flows_elementary_category.d.ts.map +1 -0
  197. package/dist/types/tidas_flows_elementary_category.js +8 -0
  198. package/dist/types/tidas_flows_elementary_category.js.map +1 -0
  199. package/dist/types/tidas_flows_product_category.d.ts +18391 -0
  200. package/dist/types/tidas_flows_product_category.d.ts.map +1 -0
  201. package/dist/types/tidas_flows_product_category.js +8 -0
  202. package/dist/types/tidas_flows_product_category.js.map +1 -0
  203. package/dist/types/tidas_lciamethods.d.ts +231 -0
  204. package/dist/types/tidas_lciamethods.d.ts.map +1 -0
  205. package/dist/types/tidas_lciamethods.js +8 -0
  206. package/dist/types/tidas_lciamethods.js.map +1 -0
  207. package/dist/types/tidas_lciamethods_category.d.ts +215 -0
  208. package/dist/types/tidas_lciamethods_category.d.ts.map +1 -0
  209. package/dist/types/tidas_lciamethods_category.js +8 -0
  210. package/dist/types/tidas_lciamethods_category.js.map +1 -0
  211. package/dist/types/tidas_lifecyclemodels.d.ts +259 -0
  212. package/dist/types/tidas_lifecyclemodels.d.ts.map +1 -0
  213. package/dist/types/tidas_lifecyclemodels.js +8 -0
  214. package/dist/types/tidas_lifecyclemodels.js.map +1 -0
  215. package/dist/types/tidas_locations_category.d.ts +7 -0
  216. package/dist/types/tidas_locations_category.d.ts.map +1 -0
  217. package/dist/types/tidas_locations_category.js +8 -0
  218. package/dist/types/tidas_locations_category.js.map +1 -0
  219. package/dist/types/tidas_processes.d.ts +301 -0
  220. package/dist/types/tidas_processes.d.ts.map +1 -0
  221. package/dist/types/tidas_processes.js +8 -0
  222. package/dist/types/tidas_processes.js.map +1 -0
  223. package/dist/types/tidas_processes_category.d.ts +3327 -0
  224. package/dist/types/tidas_processes_category.d.ts.map +1 -0
  225. package/dist/types/tidas_processes_category.js +8 -0
  226. package/dist/types/tidas_processes_category.js.map +1 -0
  227. package/dist/types/tidas_sources.d.ts +58 -0
  228. package/dist/types/tidas_sources.d.ts.map +1 -0
  229. package/dist/types/tidas_sources.js +8 -0
  230. package/dist/types/tidas_sources.js.map +1 -0
  231. package/dist/types/tidas_sources_category.d.ts +35 -0
  232. package/dist/types/tidas_sources_category.d.ts.map +1 -0
  233. package/dist/types/tidas_sources_category.js +8 -0
  234. package/dist/types/tidas_sources_category.js.map +1 -0
  235. package/dist/types/tidas_unitgroups.d.ts +85 -0
  236. package/dist/types/tidas_unitgroups.d.ts.map +1 -0
  237. package/dist/types/tidas_unitgroups.js +8 -0
  238. package/dist/types/tidas_unitgroups.js.map +1 -0
  239. package/dist/types/tidas_unitgroups_category.d.ts +23 -0
  240. package/dist/types/tidas_unitgroups_category.d.ts.map +1 -0
  241. package/dist/types/tidas_unitgroups_category.js +8 -0
  242. package/dist/types/tidas_unitgroups_category.js.map +1 -0
  243. package/dist/utils/diff.d.ts +47 -0
  244. package/dist/utils/diff.d.ts.map +1 -0
  245. package/dist/utils/diff.js +263 -0
  246. package/dist/utils/diff.js.map +1 -0
  247. package/dist/utils/index.d.ts +7 -0
  248. package/dist/utils/index.d.ts.map +1 -0
  249. package/dist/utils/index.js +31 -0
  250. package/dist/utils/index.js.map +1 -0
  251. package/dist/utils/object-utils.d.ts +47 -0
  252. package/dist/utils/object-utils.d.ts.map +1 -0
  253. package/dist/utils/object-utils.js +332 -0
  254. package/dist/utils/object-utils.js.map +1 -0
  255. package/package.json +4 -4
@@ -0,0 +1,581 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.extractJson = void 0;
37
+ exports.extractValidJsonWithRetry = extractValidJsonWithRetry;
38
+ exports.suggestEntireObject = suggestEntireObject;
39
+ exports.fixJsonDataWithAI = fixJsonDataWithAI;
40
+ exports.suggest = suggest;
41
+ exports.reviewData = reviewData;
42
+ exports.getModel = getModel;
43
+ const openai_1 = require("@langchain/openai");
44
+ const prompts_1 = require("@langchain/core/prompts");
45
+ const output_parsers_1 = require("@langchain/core/output_parsers");
46
+ const object_utils_1 = require("../../utils/object-utils");
47
+ const base_1 = require("./base");
48
+ async function getModel(modelConfig) {
49
+ const chat_model = new openai_1.ChatOpenAI({
50
+ model: modelConfig.model || process.env.OPENAI_CHAT_MODEL,
51
+ configuration: {
52
+ apiKey: modelConfig.apiKey || process.env.OPENAI_API_KEY,
53
+ baseURL: modelConfig.baseURL || process.env.OPENAI_BASE_URL,
54
+ },
55
+ });
56
+ return chat_model;
57
+ }
58
+ /**
59
+ * Custom extractor
60
+ *
61
+ * Extracts JSON content from a string where
62
+ * JSON is embedded between ```json and ``` tags.
63
+ */
64
+ const extractJson = (output, schema, returnSingle = true) => {
65
+ const text = typeof output === 'string'
66
+ ? output
67
+ : (output.content || output.toString());
68
+ // Define the regular expression pattern to match JSON blocks
69
+ const pattern = /```json(.*?)```/gs;
70
+ // Find all non-overlapping matches of the pattern in the string
71
+ const matches = text.match(pattern);
72
+ if (!matches || matches.length === 0) {
73
+ throw new Error('No JSON blocks found in AI response');
74
+ }
75
+ // Process each match, attempting to parse it as JSON
76
+ try {
77
+ const results = matches.map((match) => {
78
+ // Remove the markdown code block syntax to isolate the JSON string
79
+ const jsonStr = match.replace(/```json|```/g, '').trim();
80
+ let jsonData;
81
+ try {
82
+ jsonData = JSON.parse(jsonStr);
83
+ }
84
+ catch (parseError) {
85
+ console.error('Invalid JSON format Error:', JSON.stringify(parseError));
86
+ throw new Error(`Invalid JSON format: ${jsonStr.substring(0, 100)}...`);
87
+ }
88
+ const isValid = (0, object_utils_1.validateSchema)(jsonData, schema);
89
+ if (!isValid) {
90
+ throw new Error(`JSON does not match expected schema`);
91
+ }
92
+ return jsonData;
93
+ });
94
+ return returnSingle && results.length === 1 ? results[0] : results;
95
+ }
96
+ catch (error) {
97
+ console.error('JSON extraction failed:', error);
98
+ throw new Error(`Failed to extract valid JSON: ${error.message}`);
99
+ }
100
+ };
101
+ exports.extractJson = extractJson;
102
+ async function fixJsonDataWithAI(data, originalData, modelConfig) {
103
+ const fixPrompt = `
104
+ There are two JSON objects, first one is the original data, second one is the data after some modifications.
105
+
106
+ Due to some content processing, the structure of the second JSON data has changed compared to the first one. Please modify the second JSON data according to the first JSON data, so that its structure matches the first JSON data.
107
+
108
+ The first JSON data is:
109
+ {originalData}
110
+
111
+ The second JSON data is:
112
+ {data}
113
+
114
+ Output your answer as JSON that
115
+ matches the given schema: \`\`\`json\n{schema}\n\`\`\`.
116
+ Make sure to wrap the answer in \`\`\`json and \`\`\` tags
117
+ `;
118
+ const schema = (0, object_utils_1.generateSchema)(originalData);
119
+ const model = await getModel(modelConfig || {});
120
+ const parser = new output_parsers_1.JsonOutputParser();
121
+ const prompt = new prompts_1.PromptTemplate({
122
+ template: fixPrompt,
123
+ inputVariables: ['originalData', 'data', 'schema'],
124
+ });
125
+ const chain = prompt.pipe(model).pipe(parser);
126
+ const result = await chain.invoke({
127
+ originalData: JSON.stringify(originalData),
128
+ data: JSON.stringify(data),
129
+ schema: JSON.stringify(schema),
130
+ });
131
+ return extractJson(result, schema);
132
+ }
133
+ /**
134
+ * Extracts valid JSON data from AI response with retry mechanism
135
+ * Combines extractJson and fixJsonDataWithAI functions to ensure the extracted data
136
+ * matches the original data structure
137
+ *
138
+ * @param data - The AI response or data containing JSON
139
+ * @param originalData - The original data structure to match
140
+ * @param schema - The schema to validate against
141
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
142
+ * @returns The extracted and validated JSON data
143
+ */
144
+ async function extractValidJsonWithRetry(data, originalData, schema, maxRetries = 3) {
145
+ // Use provided schema or generate from original data
146
+ const validationSchema = schema || (0, object_utils_1.generateSchema)(originalData);
147
+ let lastError = null;
148
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
149
+ try {
150
+ console.log(`Attempt ${attempt} of ${maxRetries}: Extracting JSON...`);
151
+ // First try to extract JSON directly
152
+ try {
153
+ const extractedData = extractJson(data, validationSchema, true);
154
+ // Validate the extracted data matches the original structure
155
+ if ((0, object_utils_1.validateSchema)(extractedData, validationSchema)) {
156
+ console.log(`Success on attempt ${attempt}: JSON extracted and validated`);
157
+ return extractedData;
158
+ }
159
+ // If validation fails, try to fix the structure
160
+ console.log(`Attempt ${attempt}: Structure mismatch, attempting to fix...`);
161
+ const fixedData = await fixJsonDataWithAI(extractedData, originalData);
162
+ if ((0, object_utils_1.validateSchema)(fixedData, validationSchema)) {
163
+ console.log(`Success on attempt ${attempt}: JSON structure fixed`);
164
+ return fixedData;
165
+ }
166
+ throw new Error('Fixed data still does not match original structure');
167
+ }
168
+ catch (extractError) {
169
+ // If extraction fails completely, try to fix the raw data
170
+ console.log('ExtractError:', JSON.stringify(extractError), `\nAttempt ${attempt}: Direct extraction failed, using AI to fix...`);
171
+ // Convert data to string if needed
172
+ const dataStr = typeof data === 'string' ? data : JSON.stringify(data);
173
+ // Use AI to fix and extract
174
+ const fixedData = await fixJsonDataWithAI(dataStr, originalData);
175
+ if ((0, object_utils_1.validateSchema)(fixedData, validationSchema)) {
176
+ console.log(`Success on attempt ${attempt}: AI fixed and extracted JSON`);
177
+ return fixedData;
178
+ }
179
+ throw new Error('AI-fixed data does not match original structure');
180
+ }
181
+ }
182
+ catch (error) {
183
+ lastError = error;
184
+ console.error(`Attempt ${attempt} failed:`, lastError.message);
185
+ if (attempt < maxRetries) {
186
+ console.log(`Retrying in 1 second...`);
187
+ await new Promise((resolve) => setTimeout(resolve, 1000));
188
+ }
189
+ }
190
+ }
191
+ // All attempts failed
192
+ throw new Error(`Failed to extract valid JSON after ${maxRetries} attempts. Last error: ${lastError?.message}`);
193
+ }
194
+ /**
195
+ * Suggests improvements to data based on TIDAS methodology rules.
196
+ *
197
+ * This function uses AI to analyze the provided data against TIDAS methodology rules
198
+ * and suggests optimized content that better complies with the methodology requirements.
199
+ * The function ensures that the data structure remains unchanged while improving the content.
200
+ *
201
+ * @param data - The original data object to be improved. Can be any JSON-serializable object
202
+ * such as process names, descriptions, or other TIDAS/ILCD data elements.
203
+ * @param methodology - The methodology rules to apply. Can be:
204
+ * - A complete methodology object loaded from YAML
205
+ * - A specific rule object extracted using getRuleFromMethodologyByPath
206
+ * - A custom rule object with description and rules properties
207
+ * @param modelConfig - The configuration for the AI model. Can be:
208
+ * - A complete model configuration object
209
+ * - A custom model configuration object with model, apiKey, and baseURL properties
210
+ * @returns Promise<any> - The improved data with the same structure as the input but with
211
+ * optimized content that better complies with the methodology.
212
+ * The returned data is guaranteed to match the original schema.
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * // Example 1: Improve a process name using specific rules
217
+ * const nameData = [{ '@xml:lang': 'en', '#text': 'Process 1' }];
218
+ * const rule = getRuleFromMethodologyByPath(methodology, 'processDataSet.processInformation.dataSetInformation.name.baseName');
219
+ * const improvedName = await suggest(nameData, rule);
220
+ * // Returns: [{ '@xml:lang': 'en', '#text': 'Production of Product A using Technology X' }]
221
+ *
222
+ * // Example 2: Improve data using full methodology
223
+ * const processData = { name: 'test', description: 'simple desc' };
224
+ * const improvedData = await suggest(processData, fullMethodology);
225
+ * // Returns data with improved names and descriptions
226
+ * ```
227
+ *
228
+ * @throws {Error} If the AI model fails to generate valid JSON
229
+ * @throws {Error} If the OpenAI API is not configured properly
230
+ */
231
+ async function suggest(data, methodology, modelConfig) {
232
+ const startTime = Date.now();
233
+ // Prompt template for the AI model
234
+ const suggestPrompt = `
235
+ You are an Expert in the field of Life Cycle Assessment (LCA) and the TIDAS methodology.
236
+
237
+ You are given a JSON Object Data and the corresponding TIDAS methodology which offers the rules for the data.
238
+
239
+ Your task is to modify the data content according to the methodology rules, optimizing it to better comply with the methodology requirements.
240
+ Provide the optimized JSON result, and ensure that the data structure remains unchanged.
241
+
242
+ The data is:
243
+ {data}
244
+
245
+ The methodology is:
246
+ {methodology}
247
+
248
+ Output your answer as JSON that
249
+ matches the given schema: \`\`\`json\n{schema}\n\`\`\`.
250
+ Make sure to wrap the answer in \`\`\`json and \`\`\` tags
251
+
252
+ `;
253
+ // Initialize the AI model
254
+ const model = await getModel(modelConfig || {});
255
+ // Create the prompt template with input variables
256
+ const prompt = new prompts_1.PromptTemplate({
257
+ template: suggestPrompt,
258
+ inputVariables: ['data', 'methodology', 'schema'],
259
+ });
260
+ // Generate schema from the input data to ensure structure preservation
261
+ const schema = (0, object_utils_1.generateSchema)(data);
262
+ // Create parser for JSON output
263
+ const parser = new output_parsers_1.JsonOutputParser();
264
+ // Build the processing chain
265
+ const chain = prompt.pipe(model).pipe(parser);
266
+ // Invoke the AI model with the formatted inputs
267
+ const result = await chain.invoke({
268
+ data: JSON.stringify(data),
269
+ methodology: JSON.stringify(methodology),
270
+ schema: JSON.stringify(schema),
271
+ });
272
+ // Log performance metrics
273
+ const endTime = Date.now();
274
+ console.log(`Suggestion took ${endTime - startTime}ms`);
275
+ return result;
276
+ }
277
+ /**
278
+ * Reviews data against TIDAS methodology rules and provides structured feedback.
279
+ *
280
+ * This function uses AI to analyze the provided data against TIDAS methodology rules
281
+ * and provides a review with comments and a compliance score. Unlike the suggest function
282
+ * which modifies data, this function only provides assessment and feedback.
283
+ *
284
+ * @param data - The data object to be reviewed. Can be any JSON-serializable object
285
+ * such as process names, descriptions, or other TIDAS/ILCD data elements.
286
+ * @param methodology - The methodology rules to evaluate against. Can be:
287
+ * - A complete methodology object loaded from YAML
288
+ * - A specific rule object extracted using getRuleFromMethodologyByPath
289
+ * - A custom rule object with description and rules properties
290
+ * @param modelConfig - The configuration for the AI model. Can be:
291
+ * - A complete model configuration object
292
+ * - A custom model configuration object with model, apiKey, and baseURL properties
293
+ * @returns Promise<{review_comment: string, review_score: number}> - A structured review containing:
294
+ * - review_comment: Detailed feedback on compliance and suggestions for improvement
295
+ * - review_score: A numerical score from 0-100 indicating compliance level
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * // Example 1: Review a process name against specific rules
300
+ * const nameData = [{ '@xml:lang': 'en', '#text': 'Process 1' }];
301
+ * const rule = getRuleFromMethodologyByPath(methodology, 'processDataSet.processInformation.dataSetInformation.name.baseName');
302
+ * const review = await reviewData(nameData, rule);
303
+ * // Returns: {
304
+ * // review_comment: "The process name 'Process 1' is too generic. It should include specific information about...",
305
+ * // review_score: 45
306
+ * // }
307
+ *
308
+ * // Example 2: Review complete process data
309
+ * const processData = { name: 'test', description: 'simple desc' };
310
+ * const review = await reviewData(processData, fullMethodology);
311
+ * // Returns comprehensive review with score
312
+ * ```
313
+ *
314
+ * @throws {Error} If the AI model fails to generate valid structured output
315
+ * @throws {Error} If the OpenAI API is not configured properly
316
+ */
317
+ async function reviewData(data, methodology, modelConfig) {
318
+ const startTime = Date.now();
319
+ // Review prompt template for the AI model
320
+ const reviewPrompt = `
321
+ You are an Expert in the field of Life Cycle Assessment (LCA) and the TIDAS methodology.
322
+
323
+ You are given a JSON Object Data and the corresponding TIDAS methodology rules to review against.
324
+
325
+ Your task is to:
326
+ 1. Analyze the data against the methodology rules
327
+ 2. Identify areas of compliance and non-compliance
328
+ 3. Provide specific, actionable feedback
329
+ 4. Assign a compliance score from 0-100
330
+
331
+ The data to review is:
332
+ {data}
333
+
334
+ The methodology rules are:
335
+ {methodology}
336
+
337
+ Provide a detailed review with the following structure:
338
+ - review_comment: A comprehensive review comment that includes:
339
+ * What aspects comply well with the methodology
340
+ * What aspects need improvement
341
+ * Specific suggestions for improvement
342
+ * Overall assessment of data quality
343
+ - review_score: A numerical score from 0-100 where:
344
+ * 0-30: Poor compliance, major issues
345
+ * 31-50: Below average, significant improvements needed
346
+ * 51-70: Average compliance, some improvements recommended
347
+ * 71-85: Good compliance, minor improvements possible
348
+ * 86-100: Excellent compliance with methodology
349
+
350
+ Output your answer as JSON in this exact format:
351
+ \`\`\`json
352
+ {{
353
+ "review_comment": "Your detailed review here",
354
+ "review_score": 75
355
+ }}
356
+ \`\`\`
357
+ `;
358
+ // Initialize the AI model with structured output
359
+ const model = await getModel(modelConfig || {});
360
+ // Define the output schema using Zod
361
+ const { z } = await Promise.resolve().then(() => __importStar(require('zod')));
362
+ const reviewSchema = z.object({
363
+ review_comment: z
364
+ .string()
365
+ .describe('Detailed review comment with compliance assessment and suggestions'),
366
+ review_score: z
367
+ .number()
368
+ .min(0)
369
+ .max(100)
370
+ .describe('Compliance score from 0-100'),
371
+ });
372
+ // Configure model with structured output
373
+ const modelWithStructure = model.withStructuredOutput(reviewSchema, {
374
+ name: 'review_output',
375
+ });
376
+ // Create the prompt template with input variables
377
+ const prompt = new prompts_1.PromptTemplate({
378
+ template: reviewPrompt,
379
+ inputVariables: ['data', 'methodology'],
380
+ });
381
+ // Build the processing chain
382
+ const chain = prompt.pipe(modelWithStructure);
383
+ try {
384
+ // Invoke the AI model with the formatted inputs
385
+ const result = await chain.invoke({
386
+ data: JSON.stringify(data, null, 2),
387
+ methodology: JSON.stringify(methodology, null, 2),
388
+ });
389
+ // Log performance metrics
390
+ const endTime = Date.now();
391
+ console.log(`Review completed in ${endTime - startTime}ms`);
392
+ console.log(`Review score: ${result.review_score}/100`);
393
+ return result;
394
+ }
395
+ catch (error) {
396
+ console.error('Review failed:', error);
397
+ // Fallback to parsing from regular output if structured output fails
398
+ try {
399
+ const prompt = new prompts_1.PromptTemplate({
400
+ template: reviewPrompt,
401
+ inputVariables: ['data', 'methodology'],
402
+ });
403
+ const chain = prompt.pipe(model);
404
+ const result = await chain.invoke({
405
+ data: JSON.stringify(data, null, 2),
406
+ methodology: JSON.stringify(methodology, null, 2),
407
+ });
408
+ // Extract JSON from the response
409
+ const text = result.content;
410
+ const jsonMatch = text.match(/```json\s*([\s\S]*?)\s*```/);
411
+ if (jsonMatch && jsonMatch[1]) {
412
+ const parsed = JSON.parse(jsonMatch[1]);
413
+ // Validate the structure
414
+ if (typeof parsed.review_comment === 'string' &&
415
+ typeof parsed.review_score === 'number' &&
416
+ parsed.review_score >= 0 &&
417
+ parsed.review_score <= 100) {
418
+ const endTime = Date.now();
419
+ console.log(`Review completed in ${endTime - startTime}ms (fallback mode)`);
420
+ console.log(`Review score: ${parsed.review_score}/100`);
421
+ return parsed;
422
+ }
423
+ }
424
+ throw new Error('Failed to extract valid review structure from AI response');
425
+ }
426
+ catch (fallbackError) {
427
+ throw new Error(`Review failed: ${fallbackError.message}`);
428
+ }
429
+ }
430
+ }
431
+ /**
432
+ * Suggests improvements for an entire object based on all applicable methodology rules.
433
+ *
434
+ * This function analyzes a complete data object against all relevant methodology rules,
435
+ * applies AI suggestions to each applicable field, and returns a new object with improvements.
436
+ *
437
+ * @param data - The complete data object to improve (TidasEntity or plain object)
438
+ * @param methodologyType - The type of methodology to use:
439
+ * - A string key for available methodologies (e.g., 'processes', 'flows')
440
+ * - A methodology object already loaded
441
+ * @param options - Optional configuration:
442
+ * - parallelRequests: Number of parallel AI requests (default: 1)
443
+ * - skipPaths: Array of paths to skip
444
+ * - maxRetries: Maximum retries per rule (default: 1)
445
+ * @returns Promise<any> - Improved data object with the same structure as input
446
+ *
447
+ * @example
448
+ * ```typescript
449
+ * // Example: Improve an entire Process object
450
+ * const process = createProcess();
451
+ * process.processDataSet.processInformation.dataSetInformation['common:UUID'] = 'test-123';
452
+ * const improvedData = await suggestEntireObject(process, 'processes');
453
+ *
454
+ * // Create a new Process with improved data
455
+ * const improvedProcess = createProcess();
456
+ * Object.assign(improvedProcess, improvedData);
457
+ * ```
458
+ */
459
+ async function suggestEntireObject(data, methodologyType, options) {
460
+ const startTime = Date.now();
461
+ // Default options
462
+ const opts = {
463
+ skipPaths: [],
464
+ maxRetries: 1,
465
+ ...options,
466
+ };
467
+ console.log('Starting comprehensive object improvement...');
468
+ // Load methodology if string is provided
469
+ let methodology;
470
+ if (typeof methodologyType === 'string') {
471
+ const methodologyData = (0, base_1.getMethodologyData)(methodologyType);
472
+ if (!methodologyData) {
473
+ throw new Error(`Unknown methodology type: ${methodologyType}. Available types: ${base_1.availableMethodologies.join(', ')}`);
474
+ }
475
+ methodology = methodologyData;
476
+ console.log(`Loaded methodology: ${methodologyType}`);
477
+ }
478
+ else {
479
+ methodology = methodologyType;
480
+ }
481
+ // Get all rule paths from the methodology
482
+ const allRulePaths = (0, base_1.listRulePathsFromMethodology)(methodology);
483
+ console.log(`Found ${allRulePaths.length} rule paths`);
484
+ // Convert TidasEntity to plain object if needed
485
+ let plainData = data;
486
+ if (data && typeof data.getValue === 'function') {
487
+ // It's a TidasEntity, extract the raw data
488
+ plainData = JSON.parse(JSON.stringify(data));
489
+ }
490
+ // Create a deep copy for modifications
491
+ const improvedData = JSON.parse(JSON.stringify(plainData));
492
+ // Helper function to get value from path
493
+ const getValueByPath = (obj, path) => {
494
+ const pathParts = path.split('.');
495
+ let current = obj;
496
+ for (const part of pathParts) {
497
+ if (current && typeof current === 'object' && part in current) {
498
+ current = current[part];
499
+ }
500
+ else {
501
+ return undefined;
502
+ }
503
+ }
504
+ return current;
505
+ };
506
+ // Helper function to set value at path
507
+ const setValueByPath = (obj, path, value) => {
508
+ const pathParts = path.split('.');
509
+ let target = obj;
510
+ for (let i = 0; i < pathParts.length - 1; i++) {
511
+ if (!target[pathParts[i]]) {
512
+ target[pathParts[i]] = {};
513
+ }
514
+ target = target[pathParts[i]];
515
+ }
516
+ target[pathParts[pathParts.length - 1]] = value;
517
+ };
518
+ // Process rule for a single path
519
+ const processPath = async (path) => {
520
+ // Skip if in skip list
521
+ if (opts.skipPaths && opts.skipPaths.includes(path)) {
522
+ console.log(`Skipping path (user request): ${path}`);
523
+ return null;
524
+ }
525
+ try {
526
+ // Get rule for this path
527
+ const rule = (0, base_1.getRuleFromMethodologyByPath)(methodology, path);
528
+ if (!rule) {
529
+ return null;
530
+ }
531
+ // Extract value at this path from the data
532
+ const currentValue = getValueByPath(plainData, path);
533
+ // Skip if no value at this path
534
+ if (currentValue === undefined || currentValue === null) {
535
+ console.log(`Skipping path (no data): ${path}`);
536
+ return null;
537
+ }
538
+ console.log(`Processing: ${path}`);
539
+ // Apply suggestion with retry
540
+ for (let retry = 1; retry <= opts.maxRetries; retry++) {
541
+ try {
542
+ const suggestedValue = await suggest(currentValue, rule);
543
+ // Validate structure is preserved
544
+ const originalSchema = (0, object_utils_1.generateSchema)(currentValue);
545
+ if ((0, object_utils_1.validateSchema)(suggestedValue, originalSchema)) {
546
+ console.log(` ✓ Improved: ${path}`);
547
+ return {
548
+ path,
549
+ original: currentValue,
550
+ suggested: suggestedValue,
551
+ };
552
+ }
553
+ }
554
+ catch (error) {
555
+ console.log(` Retry ${retry}/${opts.maxRetries} failed: ${error.message}`);
556
+ if (retry < opts.maxRetries) {
557
+ await new Promise((resolve) => setTimeout(resolve, 1000));
558
+ }
559
+ }
560
+ }
561
+ }
562
+ catch (error) {
563
+ console.error(`Error processing ${path}:`, error.message);
564
+ }
565
+ return null;
566
+ };
567
+ // Process all paths in parallel
568
+ console.log('Processing all paths in parallel...');
569
+ const results = await Promise.all(allRulePaths.map((path) => processPath(path)));
570
+ // Filter out null results and apply improvements
571
+ const improvements = results.filter((r) => r !== null);
572
+ // Apply all improvements to the improvedData object
573
+ for (const improvement of improvements) {
574
+ setValueByPath(improvedData, improvement.path, improvement.suggested);
575
+ }
576
+ const endTime = Date.now();
577
+ console.log(`\nCompleted ${methodologyType} Suggestion in ${endTime - startTime}ms`);
578
+ console.log(`Applied ${improvements.length} improvements out of ${allRulePaths.length} possible paths`);
579
+ return improvedData;
580
+ }
581
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/core/copilot/ai.ts"],"names":[],"mappings":"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"}