only_ever_generator 8.4.6 → 8.4.7

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 (119) hide show
  1. package/dist/bootstrap/app.d.ts +6 -3
  2. package/dist/bootstrap/app.d.ts.map +1 -1
  3. package/dist/bootstrap/app.js +11 -17
  4. package/dist/bootstrap/app.js.map +1 -1
  5. package/dist/card_gen/generate_cards.d.ts +2 -3
  6. package/dist/card_gen/generate_cards.d.ts.map +1 -1
  7. package/dist/card_gen/generate_cards.js +22 -15
  8. package/dist/card_gen/generate_cards.js.map +1 -1
  9. package/dist/constants/prompt_data.d.ts +4 -4
  10. package/dist/constants/prompt_data.js +302 -302
  11. package/dist/constants/prompts/card_gen_prompt.js +160 -160
  12. package/dist/constants/prompts/typology_prompt.js +131 -131
  13. package/dist/constants/source_data.d.ts +171 -171
  14. package/dist/constants/source_data.js +973 -973
  15. package/dist/embedding_generation/local_consolidation.js +104 -104
  16. package/dist/helper/build_concept_facts_schema.d.ts +42 -42
  17. package/dist/helper/build_concept_facts_schema.js +44 -44
  18. package/dist/helper/qdrant_db_methods.d.ts.map +1 -1
  19. package/dist/helper/schema_helper/build_card_schema.d.ts +1 -9
  20. package/dist/helper/schema_helper/build_card_schema.d.ts.map +1 -1
  21. package/dist/helper/schema_helper/build_card_schema.js +47 -50
  22. package/dist/helper/schema_helper/build_card_schema.js.map +1 -1
  23. package/dist/helper/schema_helper/build_concept_facts_schema.d.ts +1 -1
  24. package/dist/helper/schema_helper/build_concept_facts_schema.d.ts.map +1 -1
  25. package/dist/helper/schema_helper/build_concept_facts_schema.js +20 -5
  26. package/dist/helper/schema_helper/build_concept_facts_schema.js.map +1 -1
  27. package/dist/helper/schema_helper/build_summary_schema.d.ts +1 -1
  28. package/dist/helper/schema_helper/build_summary_schema.d.ts.map +1 -1
  29. package/dist/helper/schema_helper/build_summary_schema.js +18 -7
  30. package/dist/helper/schema_helper/build_summary_schema.js.map +1 -1
  31. package/dist/index.d.ts +0 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +10 -9
  34. package/dist/index.js.map +1 -1
  35. package/dist/parse/response_format_card.d.ts +176 -176
  36. package/dist/parse/response_format_card.js +371 -371
  37. package/dist/parse/response_format_typology.d.ts +1 -1
  38. package/dist/parse/response_format_typology.js +46 -46
  39. package/dist/services/get_prompts.d.ts +8 -7
  40. package/dist/services/get_prompts.d.ts.map +1 -1
  41. package/dist/services/get_prompts.js +69 -21
  42. package/dist/services/get_prompts.js.map +1 -1
  43. package/dist/typology_gen/generate_concept_facts.d.ts +2 -3
  44. package/dist/typology_gen/generate_concept_facts.d.ts.map +1 -1
  45. package/dist/typology_gen/generate_concept_facts.js +25 -15
  46. package/dist/typology_gen/generate_concept_facts.js.map +1 -1
  47. package/dist/typology_gen/generate_typology.d.ts +2 -1
  48. package/dist/typology_gen/generate_typology.d.ts.map +1 -1
  49. package/dist/typology_gen/generate_typology.js +24 -13
  50. package/dist/typology_gen/generate_typology.js.map +1 -1
  51. package/dist/typology_gen/summarize.d.ts +2 -3
  52. package/dist/typology_gen/summarize.d.ts.map +1 -1
  53. package/dist/typology_gen/summarize.js +24 -13
  54. package/dist/typology_gen/summarize.js.map +1 -1
  55. package/package.json +39 -38
  56. package/src/bootstrap/app.ts +418 -416
  57. package/src/card_gen/generate_cards.ts +347 -345
  58. package/src/config.ts +11 -11
  59. package/src/constants/api_constants.ts +7 -7
  60. package/src/constants/prompts/card_gen_prompt.ts +164 -164
  61. package/src/constants/prompts/typology_prompt.ts +139 -139
  62. package/src/embedding_generation/consolidation/global_consolidation.ts +96 -96
  63. package/src/embedding_generation/consolidation/local_consolidation.ts +141 -141
  64. package/src/embedding_generation/consolidation/write_consolidated_data.ts +98 -98
  65. package/src/embedding_generation/generate_embeddings.ts +42 -42
  66. package/src/embedding_generation/parse_embedding_response.ts +31 -31
  67. package/src/enums/card_type_enum.ts +6 -6
  68. package/src/gap_fill/calculate_gap_fill.ts +50 -50
  69. package/src/helper/get_id_from_title.ts +33 -33
  70. package/src/helper/mongo_helper.ts +29 -29
  71. package/src/helper/openai_helper.ts +20 -20
  72. package/src/helper/qdrant_db_methods.ts +77 -77
  73. package/src/helper/schema_helper/build_card_schema.ts +74 -98
  74. package/src/helper/schema_helper/build_classify_summarize_schema.ts +43 -43
  75. package/src/helper/schema_helper/build_concept_facts_schema.ts +45 -31
  76. package/src/helper/schema_helper/build_summary_schema.ts +43 -32
  77. package/src/index.ts +71 -73
  78. package/src/logger.ts +65 -65
  79. package/src/parse/parse_card/parse_cloze_card.ts +146 -146
  80. package/src/parse/parse_card/parse_flash_cards.ts +42 -42
  81. package/src/parse/parse_card/parse_match_card.ts +104 -104
  82. package/src/parse/parse_card/parse_mcq_card.ts +114 -114
  83. package/src/parse/parse_card_response.ts +197 -197
  84. package/src/parse/parse_source_content.ts +212 -212
  85. package/src/services/get_prompts.ts +164 -112
  86. package/src/services/open_ai_service.ts +89 -89
  87. package/src/services/qdrant_service.ts +10 -10
  88. package/src/types/base_param_type.ts +13 -13
  89. package/src/types/mongo_concept_fact_type.ts +12 -12
  90. package/src/types/parsed_card_type.ts +39 -39
  91. package/src/types/raw_card_response_types/generated_card_response_type.ts +59 -59
  92. package/src/types/source_taxonomy_type.ts +24 -24
  93. package/src/typology-parsed-response.ts +1932 -1932
  94. package/src/typology_gen/generate_concept_facts.ts +180 -169
  95. package/src/typology_gen/generate_typology.ts +203 -189
  96. package/src/typology_gen/summarize.ts +176 -164
  97. package/src/utils/distributed_quote_restoration.ts +80 -80
  98. package/src/utils/generate_args.ts +29 -29
  99. package/src/utils/parse_openai_response.ts +19 -19
  100. package/src/utils/sanitize_strings.ts +65 -65
  101. package/tsconfig.json +16 -16
  102. package/dist/constants/default_generation_variables.d.ts +0 -3
  103. package/dist/constants/default_generation_variables.d.ts.map +0 -1
  104. package/dist/constants/default_generation_variables.js +0 -580
  105. package/dist/constants/default_generation_variables.js.map +0 -1
  106. package/dist/services/prompts_test.d.ts +0 -10
  107. package/dist/services/prompts_test.d.ts.map +0 -1
  108. package/dist/services/prompts_test.js +0 -227
  109. package/dist/services/prompts_test.js.map +0 -1
  110. package/dist/types/generation_variables_schema.d.ts +0 -14
  111. package/dist/types/generation_variables_schema.d.ts.map +0 -1
  112. package/dist/types/generation_variables_schema.js +0 -3
  113. package/dist/types/generation_variables_schema.js.map +0 -1
  114. package/dist/utils/test.d.ts +0 -2
  115. package/dist/utils/test.d.ts.map +0 -1
  116. package/dist/utils/test.js +0 -5
  117. package/dist/utils/test.js.map +0 -1
  118. package/src/constants/default_generation_variables.ts +0 -624
  119. package/src/types/generation_variables_schema.ts +0 -16
@@ -1,189 +1,203 @@
1
- import { OpenAIHelper } from "../helper/openai_helper";
2
- import { log_error, ParsingError } from "../logger";
3
- import { promptIds } from "../services/get_prompts";
4
- import { OpenAiService } from "../services/open_ai_service";
5
- import { restoreQuotesInString } from "../utils/sanitize_strings";
6
-
7
- export class GenerateTypology {
8
- public openAiService: OpenAiService;
9
- public type: string = "";
10
- public sourceId: string;
11
- public generationCurriculum: boolean;
12
- public content: {
13
- title: string;
14
- h1_headings?: string[];
15
- timecodes?: string[];
16
- content: any[];
17
- };
18
- expectedFields: Array<string>;
19
- constructor(
20
- openAiService: OpenAiService,
21
- type: string,
22
- sourceId: string,
23
- content: {
24
- title: string;
25
- h1_headings?: string[];
26
- timecodes?: string[];
27
- content: any[];
28
- },
29
- expected_fields: Array<string>,
30
- generationCurriculum: boolean
31
- ) {
32
- this.openAiService = openAiService;
33
- this.type = type;
34
- this.sourceId = sourceId;
35
- this.content = content;
36
- this.expectedFields = expected_fields.map((elem: string) =>
37
- elem.toString().toUpperCase()
38
- );
39
- this.generationCurriculum = generationCurriculum;
40
- }
41
- async generate() {
42
- try {
43
- const openAIHelper = new OpenAIHelper(this.openAiService.api_key);
44
- const openAiResponse: any = await openAIHelper.openAI.responses.create({
45
- prompt: {
46
- id: promptIds.classify,
47
- variables: {
48
- heading_type: this.type == "video" ? "timecode" : "h1 heading",
49
- },
50
- // version: "66",
51
- },
52
- max_output_tokens: 30000,
53
- input: [
54
- {
55
- role: "user",
56
- content: [
57
- { type: "input_text", text: JSON.stringify(this.content) },
58
- ],
59
- },
60
- ],
61
- store: true,
62
- });
63
- console.log(openAiResponse);
64
- if (!openAiResponse) {
65
- await log_error({
66
- flow: this.generationCurriculum
67
- ? "curriculum_manual_generation"
68
- : "manual_generation",
69
- data: openAiResponse,
70
- error: "empty_openai_response",
71
- timestamp: new Date(),
72
- source_id: this.sourceId,
73
- type: {
74
- request_type: "breadth",
75
- n: 1,
76
- },
77
- });
78
- return;
79
- }
80
-
81
- // Restore quotes in the response (works without original mapping)
82
- // if (openAiResponse.output) {
83
- // openAiResponse.output = restoreQuotesInObject(openAiResponse.output);
84
- // }
85
-
86
- openAiResponse["request_type"] = {
87
- type: "breadth",
88
- n: 1,
89
- };
90
- openAiResponse.metadata = {
91
- req_time: openAiResponse.created ?? new Date(),
92
- req_type: {
93
- type: "breadth",
94
- n: 1,
95
- },
96
- req_tokens: openAiResponse.usage?.input_tokens ?? 0,
97
- res_tokens: openAiResponse.usage?.output_tokens ?? 0,
98
- prompt: {
99
- id: openAiResponse.prompt.id,
100
- version: openAiResponse.prompt.version,
101
- },
102
- // prompt_tokens_details: openAiResponse.usage?.,
103
- model: openAiResponse.model,
104
- usage: openAiResponse.usage,
105
- };
106
-
107
- if (openAiResponse.status == "completed") {
108
- console.log("Completed");
109
- return this.parseTypologyOnSuccess(openAiResponse);
110
- } else {
111
- openAiResponse.metadata.err_message = openAiResponse.message;
112
- return openAiResponse;
113
- }
114
- } catch (e: any) {
115
- console.log(e);
116
- await log_error({
117
- flow: this.generationCurriculum
118
- ? "curriculum_manual_generation"
119
- : "manual_generation",
120
- data: e,
121
- timestamp: new Date(),
122
- error: "error_in_typology_generation",
123
- source_id: this.sourceId,
124
- type: {
125
- request_type: "breadth",
126
- n: 1,
127
- },
128
- });
129
- }
130
- }
131
-
132
- parseTypologyOnSuccess(responseData: any) {
133
- responseData.metadata.status = "completed";
134
- const generatedContent = this.parseJson(responseData);
135
- console.log(generatedContent.learn_value);
136
-
137
- return {
138
- status_code: 200,
139
- metadata: [responseData.metadata],
140
- field: this.parseFields(generatedContent.field),
141
-
142
- generate_cards: generatedContent.learn_value,
143
- summary_cards: generatedContent.summary_cards,
144
- // type: responseData.type,
145
- };
146
- }
147
-
148
- parseJson(response: any) {
149
- try {
150
- const generatedContent = JSON.parse(response.output_text);
151
- const summaryCards = generatedContent?.summary_cards ?? [];
152
- if (summaryCards) {
153
- const remappedSummaryCards = summaryCards.map((item: any) => {
154
- return {
155
- ...item,
156
- reference: restoreQuotesInString(item.reference),
157
- };
158
- });
159
- return {
160
- ...generatedContent,
161
- summary_cards: remappedSummaryCards,
162
- };
163
- }
164
- return generatedContent;
165
- } catch (e) {
166
- throw new ParsingError(
167
- "Something went wrong in parsing the json",
168
- response
169
- );
170
- }
171
- }
172
-
173
- parseFields(fields: Array<string>) {
174
- const fieldKeys = ["primary_field", "secondary_field", "tertiary_field"];
175
- return fields.slice(0, 3).map((item, index) => ({
176
- [fieldKeys[index]]: item,
177
- reconcile: !this.expectedFields.includes(item.toLowerCase()),
178
- }));
179
- }
180
-
181
- async parseTypologyOnFailure(responseData: any) {
182
- responseData.metadata.status = "failed";
183
-
184
- return {
185
- status_code: responseData.status_code,
186
- metadata: responseData.metadata,
187
- };
188
- }
189
- }
1
+ import { OpenAIHelper } from "../helper/openai_helper";
2
+ import { log_error, ParsingError } from "../logger";
3
+ import { OpenAiService } from "../services/open_ai_service";
4
+ import { restoreQuotesInString } from "../utils/sanitize_strings";
5
+ import { jsonrepair } from "jsonrepair";
6
+
7
+ export class GenerateTypology {
8
+ public openAiService: OpenAiService;
9
+ public type: string = "";
10
+ public sourceId: string;
11
+ public generationCurriculum: boolean;
12
+ public content: {
13
+ title: string;
14
+ h1_headings?: string[];
15
+ timecodes?: string[];
16
+ content: any[];
17
+ };
18
+ public promptIdForTypology: string;
19
+ expectedFields: Array<string>;
20
+ constructor(
21
+ openAiService: OpenAiService,
22
+ type: string,
23
+ sourceId: string,
24
+ content: {
25
+ title: string;
26
+ h1_headings?: string[];
27
+ timecodes?: string[];
28
+ content: any[];
29
+ },
30
+ expected_fields: Array<string>,
31
+ promptIdForTypology: string,
32
+ generationCurriculum: boolean
33
+ ) {
34
+ this.openAiService = openAiService;
35
+ this.type = type;
36
+ this.sourceId = sourceId;
37
+ this.content = content;
38
+ this.expectedFields = expected_fields.map((elem: string) =>
39
+ elem.toString().toUpperCase()
40
+ );
41
+ this.promptIdForTypology = promptIdForTypology;
42
+ this.generationCurriculum = generationCurriculum;
43
+ }
44
+ async generate() {
45
+ try {
46
+ const openAIHelper = new OpenAIHelper(this.openAiService.api_key);
47
+ const openAiResponse: any = await openAIHelper.openAI.responses.create({
48
+ prompt: {
49
+ id: this.promptIdForTypology,
50
+ variables: {
51
+ heading_type: this.type == "video" ? "timecode" : "h1 heading",
52
+ },
53
+ // version: "66",
54
+ },
55
+ max_output_tokens: 30000,
56
+ input: [
57
+ {
58
+ role: "user",
59
+ content: [
60
+ { type: "input_text", text: JSON.stringify(this.content) },
61
+ ],
62
+ },
63
+ ],
64
+ store: true,
65
+ });
66
+ console.log(openAiResponse);
67
+ if (!openAiResponse) {
68
+ await log_error({
69
+ flow: this.generationCurriculum
70
+ ? "curriculum_manual_generation"
71
+ : "manual_generation",
72
+ data: openAiResponse,
73
+ error: "empty_openai_response",
74
+ timestamp: new Date(),
75
+ source_id: this.sourceId,
76
+ type: {
77
+ request_type: "breadth",
78
+ n: 1,
79
+ },
80
+ });
81
+ return;
82
+ }
83
+
84
+ // Restore quotes in the response (works without original mapping)
85
+ // if (openAiResponse.output) {
86
+ // openAiResponse.output = restoreQuotesInObject(openAiResponse.output);
87
+ // }
88
+
89
+ openAiResponse["request_type"] = {
90
+ type: "breadth",
91
+ n: 1,
92
+ };
93
+ openAiResponse.metadata = {
94
+ req_time: openAiResponse.created ?? new Date(),
95
+ req_type: {
96
+ type: "breadth",
97
+ n: 1,
98
+ },
99
+ req_tokens: openAiResponse.usage?.input_tokens ?? 0,
100
+ res_tokens: openAiResponse.usage?.output_tokens ?? 0,
101
+ prompt: {
102
+ id: openAiResponse.prompt.id,
103
+ version: openAiResponse.prompt.version,
104
+ },
105
+ // prompt_tokens_details: openAiResponse.usage?.,
106
+ model: openAiResponse.model,
107
+ usage: openAiResponse.usage,
108
+ };
109
+
110
+ if (openAiResponse.status == "completed") {
111
+ console.log("Completed");
112
+ return this.parseTypologyOnSuccess(openAiResponse);
113
+ } else {
114
+ openAiResponse.metadata.err_message = openAiResponse.message;
115
+ return openAiResponse;
116
+ }
117
+ } catch (e: any) {
118
+ console.log(e);
119
+ await log_error({
120
+ flow: this.generationCurriculum
121
+ ? "curriculum_manual_generation"
122
+ : "manual_generation",
123
+ data: e,
124
+ timestamp: new Date(),
125
+ error: "error_in_typology_generation",
126
+ source_id: this.sourceId,
127
+ type: {
128
+ request_type: "breadth",
129
+ n: 1,
130
+ },
131
+ });
132
+ }
133
+ }
134
+
135
+ parseTypologyOnSuccess(responseData: any) {
136
+ responseData.metadata.status = "completed";
137
+ const generatedContent = this.parseJson(responseData);
138
+ console.log(generatedContent.learn_value);
139
+
140
+ return {
141
+ status_code: 200,
142
+ metadata: [responseData.metadata],
143
+ field: this.parseFields(generatedContent.field),
144
+
145
+ generate_cards: generatedContent.learn_value,
146
+ summary_cards: generatedContent.summary_cards,
147
+ // type: responseData.type,
148
+ };
149
+ }
150
+
151
+ parseJson(response: any) {
152
+ let generatedContent: any;
153
+
154
+ try {
155
+ generatedContent = JSON.parse(response.output_text);
156
+ } catch (e) {
157
+ // If original JSON parse fails, attempt to repair and parse
158
+ try {
159
+ const repairedJson = jsonrepair(response.output_text);
160
+ generatedContent = JSON.parse(repairedJson);
161
+ } catch (repairError) {
162
+ // If repair also fails, throw exception
163
+ throw new ParsingError(
164
+ "Something went wrong in repairing the json",
165
+ response
166
+ );
167
+ }
168
+ }
169
+
170
+ // Process the parsed content (same flow for both original and repaired JSON)
171
+ const summaryCards = generatedContent?.summary_cards ?? [];
172
+ if (summaryCards) {
173
+ const remappedSummaryCards = summaryCards.map((item: any) => {
174
+ return {
175
+ ...item,
176
+ reference: restoreQuotesInString(item.reference),
177
+ };
178
+ });
179
+ return {
180
+ ...generatedContent,
181
+ summary_cards: remappedSummaryCards,
182
+ };
183
+ }
184
+ return generatedContent;
185
+ }
186
+
187
+ parseFields(fields: Array<string>) {
188
+ const fieldKeys = ["primary_field", "secondary_field", "tertiary_field"];
189
+ return fields.slice(0, 3).map((item, index) => ({
190
+ [fieldKeys[index]]: item,
191
+ reconcile: !this.expectedFields.includes(item.toLowerCase()),
192
+ }));
193
+ }
194
+
195
+ async parseTypologyOnFailure(responseData: any) {
196
+ responseData.metadata.status = "failed";
197
+
198
+ return {
199
+ status_code: responseData.status_code,
200
+ metadata: responseData.metadata,
201
+ };
202
+ }
203
+ }