only_ever_generator 0.2.6 → 0.2.8

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 (37) hide show
  1. package/dist/bootstrap/app.js +47 -44
  2. package/dist/card_gen/generate_cards.js +47 -32
  3. package/dist/constants/prompt_data.js +273 -273
  4. package/dist/constants/prompts/card_gen_prompt.js +180 -180
  5. package/dist/constants/prompts/typology_prompt.js +93 -93
  6. package/dist/logger.js +41 -0
  7. package/dist/parse/parse_source_content.js +23 -9
  8. package/dist/typology_gen/generate_typology.js +21 -12
  9. package/dist/utils/generate_args.js +1 -11
  10. package/package.json +33 -33
  11. package/readme.md +23 -23
  12. package/src/bootstrap/app.ts +150 -141
  13. package/src/card_gen/generate_cards.ts +251 -239
  14. package/src/config.ts +6 -6
  15. package/src/constants/api_constants.ts +2 -2
  16. package/src/constants/prompt_data.ts +296 -296
  17. package/src/constants/prompts/card_gen_prompt.ts +372 -372
  18. package/src/constants/prompts/typology_prompt.ts +202 -202
  19. package/src/constants/source_data.ts +47 -47
  20. package/src/gap_fill/calculate_gap_fill.ts +52 -52
  21. package/src/index.ts +61 -61
  22. package/src/logger.ts +31 -0
  23. package/src/parse/parse_card_response.ts +289 -289
  24. package/src/parse/parse_source_content.ts +94 -81
  25. package/src/parse/response_format_card.ts +210 -210
  26. package/src/parse/response_format_typology.ts +43 -43
  27. package/src/services/open_ai_service.ts +55 -54
  28. package/src/typology_gen/generate_typology.ts +71 -64
  29. package/src/utils/generate_args.ts +28 -37
  30. package/src/utils/parse_openai_response.ts +20 -20
  31. package/tsconfig.json +12 -12
  32. package/dist/class/parse/parse_source_content.js +0 -62
  33. package/dist/class/services/open_ai_service.js +0 -25
  34. package/dist/parse_response/parse_card_response.js +0 -288
  35. package/dist/parse_response/response_format_card.js +0 -210
  36. package/dist/parse_response/response_format_typology.js +0 -47
  37. package/dist/service/open_ai_request.js +0 -57
@@ -7,18 +7,32 @@ class ParseSourceContent {
7
7
  this.content = sourceContent;
8
8
  }
9
9
  parseData() {
10
- if (this.content.type == 'source') {
11
- let dataAfterRemovingUnWantedBlocks = this.removeSectionsByTitle(this.content.content);
12
- let afterSanitized = this.sanitizeBlocks(dataAfterRemovingUnWantedBlocks);
13
- return JSON.stringify([
14
- { 'title': this.content.title },
15
- { 'headings': this.content.headings },
16
- { 'content': afterSanitized }
17
- ]);
10
+ // if(this.content.type == 'source') {
11
+ let dataAfterRemovingUnWantedBlocks = this.removeSectionsByTitle(this.content.content);
12
+ let afterSanitized = this.sanitizeBlocks(dataAfterRemovingUnWantedBlocks);
13
+ let taxonomy;
14
+ if (this.content.taxonomy) {
15
+ taxonomy = this.content.taxonomy;
18
16
  }
19
17
  else {
20
- return '';
18
+ taxonomy = null;
21
19
  }
20
+ return {
21
+ type: this.content.type,
22
+ title: this.content.title,
23
+ content: afterSanitized,
24
+ headings: this.content.headings,
25
+ taxonomy: this.content.taxonomy,
26
+ };
27
+ // } else if(this.content.type == 'cards'){
28
+ // return {
29
+ // type :'card',
30
+ // title: this.content.title,
31
+ // content: afterSanitized,
32
+ // headings: this.content.headings
33
+ // taxonomy: this.content.taxonomy,
34
+ // };
35
+ // }
22
36
  // return JSON.stringify(afterSanitized);
23
37
  }
24
38
  removeSectionsByTitle(data) {
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.GenerateTypology = void 0;
13
+ const logger_1 = require("../logger");
13
14
  class GenerateTypology {
14
15
  constructor(openAiService, prompt, content, expected_fields) {
15
16
  this.prompt = '';
@@ -22,19 +23,27 @@ class GenerateTypology {
22
23
  generate() {
23
24
  return __awaiter(this, void 0, void 0, function* () {
24
25
  var _a, _b, _c;
25
- const response = yield ((_a = this.openAiService) === null || _a === void 0 ? void 0 : _a.sendRequest(this.prompt, this.content));
26
- response['type'] = 'typology';
27
- response.metadata = {
28
- "req_time": response.generated_at,
29
- "req_type": response.type,
30
- "req_tokens": (_b = response.usage_data) === null || _b === void 0 ? void 0 : _b.prompt_tokens,
31
- "res_tokens": (_c = response.usage_data) === null || _c === void 0 ? void 0 : _c.completion_tokens,
32
- };
33
- if (response.status_code == 200) {
34
- return this.parseTypologyOnSuccess(response);
26
+ try {
27
+ const response = yield ((_a = this.openAiService) === null || _a === void 0 ? void 0 : _a.sendRequest(this.prompt, this.content));
28
+ response['type'] = 'typology';
29
+ response.metadata = {
30
+ "req_time": response.generated_at,
31
+ "req_type": response.type,
32
+ "req_tokens": (_b = response.usage_data) === null || _b === void 0 ? void 0 : _b.prompt_tokens,
33
+ "res_tokens": (_c = response.usage_data) === null || _c === void 0 ? void 0 : _c.completion_tokens,
34
+ };
35
+ if (response.status_code == 200) {
36
+ return this.parseTypologyOnSuccess(response);
37
+ }
38
+ else {
39
+ return response;
40
+ }
35
41
  }
36
- else {
37
- return response;
42
+ catch (e) {
43
+ yield new logger_1.ErrorLogger({
44
+ "type": 'typology_parsing',
45
+ "data": e.message
46
+ }).log();
38
47
  }
39
48
  });
40
49
  }
@@ -2,23 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenerateArgs = void 0;
4
4
  class GenerateArgs {
5
- constructor(generate_card, generate_typology, generate_summary, prompts = {
6
- typology_prompt: '',
7
- card_gen_prompt: '',
8
- summary_prompt: ''
9
- }) {
5
+ constructor(generate_card, generate_typology, generate_summary) {
10
6
  this.generate_card = false;
11
7
  this.generate_typology = false;
12
8
  this.generate_summary = false;
13
- this.prompts = {
14
- typology_prompt: '',
15
- card_gen_prompt: '',
16
- summary_prompt: ''
17
- };
18
9
  this.generate_card = generate_card;
19
10
  this.generate_typology = generate_typology;
20
11
  this.generate_summary = generate_summary;
21
- this.prompts = prompts;
22
12
  }
23
13
  getWhatNeedsToBeGenerated() {
24
14
  let returnData = [];
package/package.json CHANGED
@@ -1,33 +1,33 @@
1
- {
2
- "name": "only_ever_generator",
3
- "version": "0.2.6",
4
- "main": "dist/index.js",
5
- "scripts": {
6
- "start": "npm run build && nodemon dist/index.js",
7
- "build": "tsc",
8
- "test": "echo \"Error: no test specified\" && exit 1"
9
- },
10
- "keywords": [],
11
- "author": "shree",
12
- "license": "ISC",
13
- "devDependencies": {
14
- "@types/express": "^4.17.21",
15
- "@types/node": "^20.14.2",
16
- "nodemon": "^3.1.3",
17
- "ts-node": "^10.9.2",
18
- "typescript": "^5.4.5",
19
- "dotenv": "^16.4.5",
20
- "express": "^4.19.2"
21
- },
22
- "dependencies": {
23
- "axios": "^1.7.2"
24
-
25
-
26
- },
27
- "eslintConfig": {
28
- "parser": "typescript-eslint-parser",
29
- "plugins": [
30
- "typescript"
31
- ]
32
- }
33
- }
1
+ {
2
+ "name": "only_ever_generator",
3
+ "version": "0.2.8",
4
+ "main": "dist/index.js",
5
+ "scripts": {
6
+ "start": "npm run build && nodemon dist/index.js",
7
+ "build": "tsc",
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "keywords": [],
11
+ "author": "shree",
12
+ "license": "ISC",
13
+ "devDependencies": {
14
+ "@types/express": "^4.17.21",
15
+ "@types/node": "^20.14.2",
16
+ "nodemon": "^3.1.3",
17
+ "ts-node": "^10.9.2",
18
+ "typescript": "^5.4.5",
19
+ "dotenv": "^16.4.5",
20
+ "express": "^4.19.2"
21
+ },
22
+ "dependencies": {
23
+ "axios": "^1.7.2"
24
+
25
+
26
+ },
27
+ "eslintConfig": {
28
+ "parser": "typescript-eslint-parser",
29
+ "plugins": [
30
+ "typescript"
31
+ ]
32
+ }
33
+ }
package/readme.md CHANGED
@@ -1,23 +1,23 @@
1
- This is a NPM package that handles the all the ai generation for _source on OnlyEver.
2
- The Generation includes, Knowledge Taxonomy , Summary and Test Cards data for the _source.
3
-
4
- The class [OnlyEverGenerator] is the Entry point for the generation module it has two required fields,
5
- [api_key] which is open ai token
6
- [model] open ai model : 'gpt-3.5-turbo-1106'
7
- [content] source content : Array<BaseBlocks>
8
-
9
- The [OnlyEverGenerator] currently exposes a main method, [generate] which handles all types of generation and takes a Param
10
- ```
11
- generate(generate_typology = false,generate_card = false) method takes two args, generate_typology and generate_cards, which are both boolean.
12
- For Eg:
13
- let oeGenerator = new OnlyEverGenerator(
14
- api_key,
15
- model,
16
- [Block1,Block2,Block3], // oe content model
17
- );
18
-
19
-
20
- let responsesArray = await oeGenerator.generate(true,true);
21
-
22
-
23
- ```
1
+ This is a NPM package that handles the all the ai generation for _source on OnlyEver.
2
+ The Generation includes, Knowledge Taxonomy , Summary and Test Cards data for the _source.
3
+
4
+ The class [OnlyEverGenerator] is the Entry point for the generation module it has two required fields,
5
+ [api_key] which is open ai token
6
+ [model] open ai model : 'gpt-3.5-turbo-1106'
7
+ [content] source content : Array<BaseBlocks>
8
+
9
+ The [OnlyEverGenerator] currently exposes a main method, [generate] which handles all types of generation and takes a Param
10
+ ```
11
+ generate(generate_typology = false,generate_card = false) method takes two args, generate_typology and generate_cards, which are both boolean.
12
+ For Eg:
13
+ let oeGenerator = new OnlyEverGenerator(
14
+ api_key,
15
+ model,
16
+ [Block1,Block2,Block3], // oe content model
17
+ );
18
+
19
+
20
+ let responsesArray = await oeGenerator.generate(true,true);
21
+
22
+
23
+ ```
@@ -1,141 +1,150 @@
1
- import { GenerateCards } from "../card_gen/generate_cards";
2
- import { ParseSourceContent } from "../parse/parse_source_content";
3
- import { OpenAiService } from "../services/open_ai_service";
4
- import { returnCardGenPrompt } from "../constants/prompts/card_gen_prompt";
5
- import { returnTypologyPrompt } from "../constants/prompts/typology_prompt";
6
- import { GenerateTypology } from "../typology_gen/generate_typology";
7
- import { GenerateArgs } from "../utils/generate_args";
8
- import { returnFields } from "../constants/source_data";
9
- import { returnTypologyData } from "../parse/response_format_typology";
10
- import { gapFilling } from "../gap_fill/calculate_gap_fill";
11
-
12
-
13
- /// OnlyEverGenerator
14
-
15
- export class OnlyEverGenerator {
16
- public api_key: string = "";
17
- public openAiService: OpenAiService;
18
- parsedContent: string = "";
19
- promptForTypology: string = "";
20
- promptForCardGen: string = "";
21
- expectedFields: Array<string>;
22
- constructor(
23
- apiKey: string,
24
- model: string,
25
- generationContent : any
26
- // prompt: any,
27
- // content: any,
28
- // expected_fields: Array<string>
29
- ) {
30
- this.api_key = apiKey;
31
- this.openAiService = new OpenAiService(
32
- apiKey,
33
- model ?? "gpt-3.5-turbo-1106"
34
- );
35
-
36
- this.parsedContent = new ParseSourceContent(generationContent.content).parseData();
37
- this.expectedFields = generationContent.content.fields; //returnFields();
38
- this.promptForTypology = returnTypologyPrompt(generationContent.prompt.typology);
39
- this.promptForCardGen = returnCardGenPrompt(generationContent.prompt.card_generation);
40
- }
41
-
42
- typologyResponse: any = {};
43
- cardgenResponse: any = {};
44
- summarizeResponse = {};
45
- gapFillResponse: any = {};
46
-
47
-
48
- async generate(
49
- generate_typology: boolean = false,
50
- generate_card: boolean = false
51
- ): Promise<Array<any>> {
52
- //let typologyPrompt = returnTypologyPrompt();
53
- let typologyPrompt = this.promptForTypology;
54
-
55
- // let cardPrompt = returnCardGenPrompt();
56
- let cardPrompt = this.promptForCardGen;
57
- let args = new GenerateArgs(generate_card, generate_typology, false, {
58
- typology_prompt: typologyPrompt,
59
- card_gen_prompt: cardPrompt,
60
- summary_prompt: "",
61
- });
62
- const responseToReturn = [];
63
- const whatNeedsToBeGenerated = args.getWhatNeedsToBeGenerated();
64
- for (let elem of whatNeedsToBeGenerated)
65
- if (elem == "generate_tyopology") {
66
- this.typologyResponse = await this.generateTypology(
67
- args.prompts.typology_prompt ?? ""
68
- );
69
- responseToReturn.push(this.typologyResponse);
70
- } else if (elem == "generate_card") {
71
- if(this.typologyResponse.generate_cards){
72
- if(this.typologyResponse.generate_cards.state == false){
73
- console.log('Cards Generation Not Required');
74
- }else{
75
- this.cardgenResponse = await this.generateCard(
76
- args.prompts.card_gen_prompt ?? "",
77
- this.parsedContent + JSON.stringify(this.typologyResponse),
78
- false
79
- );
80
- }
81
- }
82
-
83
- else{
84
- this.cardgenResponse = await this.generateCard(
85
- args.prompts.card_gen_prompt ?? "",
86
- this.parsedContent,
87
- false
88
- );
89
-
90
- }
91
- responseToReturn.push(this.cardgenResponse);
92
- }
93
- if (this.cardgenResponse.status_code == 200) {
94
- let gapFill = gapFilling(this.typologyResponse, this.cardgenResponse);
95
- if (
96
- gapFill.remainingConcepts.length !== 0 ||
97
- gapFill.remainingFacts.length !== 0
98
- ) {
99
- this.gapFillResponse = await this.generateCard(
100
- args.prompts.card_gen_prompt ?? "",
101
- this.parsedContent +
102
- "Generate cards only suitable for the given remaining concepts and facts" +
103
- JSON.stringify(gapFill) +
104
- "Exclude generating these cards" +
105
- JSON.stringify(this.cardgenResponse.cards_data),
106
- true
107
- );
108
- }
109
- responseToReturn.push(this.gapFillResponse);
110
- }
111
-
112
- return responseToReturn;
113
- // return [typologyPrompt, cardPrompt];
114
-
115
- }
116
-
117
- async generateCard(prompt: string, content: string, isGapFill: boolean) {
118
- let generateCards = new GenerateCards(this.openAiService);
119
- let cardgenResponse = await generateCards.generateCards(
120
- prompt ?? "",
121
- content,
122
- isGapFill
123
- );
124
- // let response = await this.openAiService?.sendRequest(prompt,this.parsedContent);
125
- // response['type'] = 'card_gen';
126
- return cardgenResponse;
127
- }
128
-
129
- async generateTypology(prompt: string) {
130
- let response = await new GenerateTypology(
131
- this.openAiService,
132
- prompt,
133
- this.parsedContent,
134
- this.expectedFields
135
- ).generate();
136
- return response;
137
- }
138
-
139
-
140
-
141
- }
1
+ import { GenerateCards } from "../card_gen/generate_cards";
2
+ import { ParseSourceContent } from "../parse/parse_source_content";
3
+ import { OpenAiService } from "../services/open_ai_service";
4
+ import { returnCardGenPrompt } from "../constants/prompts/card_gen_prompt";
5
+ import { returnTypologyPrompt } from "../constants/prompts/typology_prompt";
6
+ import { GenerateTypology } from "../typology_gen/generate_typology";
7
+ import { GenerateArgs } from "../utils/generate_args";
8
+ import { gapFilling } from "../gap_fill/calculate_gap_fill";
9
+
10
+
11
+ /// OnlyEverGenerator
12
+
13
+ export class OnlyEverGenerator {
14
+ public api_key: string = "";
15
+ public openAiService: OpenAiService;
16
+
17
+ /// these fields will be populated inside the constructor
18
+ parsedContent: any = {};
19
+ promptForTypology: string = "";
20
+ promptForCardGen: string = "";
21
+ expectedFields: Array<string>;
22
+
23
+
24
+ typologyResponse: any = {};
25
+ cardgenResponse: any = {};
26
+ summarizeResponse = {};
27
+ gapFillResponse: any = {};
28
+
29
+
30
+ constructor(
31
+ apiKey: string,
32
+ model: string,
33
+ generationContent : any
34
+ ) {
35
+ this.api_key = apiKey;
36
+ this.openAiService = new OpenAiService(
37
+ apiKey,
38
+ model ?? "gpt-3.5-turbo-1106"
39
+ );
40
+ const parsedData = new ParseSourceContent(generationContent.content).parseData()
41
+ this.parsedContent = {
42
+ title: parsedData.title,
43
+ headings: parsedData.headings,
44
+ content: parsedData.content,
45
+
46
+ },
47
+ // parsedData.type == 'cards' ? this.typologyResponse = parsedData.taxonomy : this.typologyResponse = null;
48
+ this.typologyResponse = parsedData.taxonomy
49
+
50
+ this.expectedFields = generationContent.content.fields; //returnFields();
51
+ this.promptForTypology = returnTypologyPrompt(generationContent.prompt.typology);
52
+ this.promptForCardGen = returnCardGenPrompt(generationContent.prompt.card_generation);
53
+ }
54
+
55
+
56
+
57
+ async generate(
58
+ generate_typology: boolean = false,
59
+ generate_card: boolean = false
60
+ ): Promise<Array<any>> {
61
+ let args = new GenerateArgs(generate_card, generate_typology, false, );
62
+ const responseToReturn = [];
63
+ const whatNeedsToBeGenerated = args.getWhatNeedsToBeGenerated();
64
+ for (let elem of whatNeedsToBeGenerated)
65
+ if (elem == "generate_tyopology") {
66
+ this.typologyResponse = await this.generateTypology(
67
+ this.promptForTypology
68
+ );
69
+ responseToReturn.push(this.typologyResponse);
70
+ } else if (elem == "generate_card") {
71
+ /// for cards gen to occur, there must be presence of source taxonomy
72
+ if(this.shouldTheCardBeGeneratedAfterTypologyResponse()){
73
+ this.cardgenResponse = await this.generateCard(
74
+ this.promptForCardGen,
75
+ JSON.stringify(this.typologyResponse),
76
+ false,
77
+ )
78
+ responseToReturn.push(this.cardgenResponse);
79
+
80
+ /// check if gap fill is required ie coverage determination
81
+ if(this.cardgenResponse.status_code == 200) {
82
+ this.gapFillResponse = await this.generationForGapFill(this.typologyResponse, this.cardgenResponse);
83
+ responseToReturn.push(this.gapFillResponse);
84
+ }
85
+
86
+ }
87
+ }
88
+ return responseToReturn;
89
+ // return [typologyPrompt, cardPrompt];
90
+
91
+ }
92
+
93
+ shouldTheCardBeGeneratedAfterTypologyResponse(){
94
+ if(this.typologyResponse){
95
+ return this.typologyResponse.generate_cards.state == true;
96
+ }else{
97
+ return false;
98
+ }
99
+
100
+ }
101
+
102
+ async generationForGapFill(typologyData: any, cardGenData: any) {
103
+ let gapFill = gapFilling(typologyData, cardGenData);
104
+ let response :any ;
105
+ if (
106
+ gapFill.remainingConcepts.length !== 0 ||
107
+ gapFill.remainingFacts.length !== 0
108
+ ) {
109
+ response = await this.generateCard(
110
+ this.promptForCardGen +
111
+ "Generate cards only suitable for the given remaining concepts and facts" +
112
+ JSON.stringify(gapFill) +
113
+ "Exclude generating these cards",
114
+ JSON.stringify(cardGenData.cards_data),
115
+ true
116
+ );
117
+ }
118
+ return response;
119
+
120
+ }
121
+
122
+
123
+
124
+ async generateCard(prompt: string, additionalContent: string, isGapFill: boolean) {
125
+ let generateCards = new GenerateCards(this.openAiService);
126
+ this.cardgenResponse = await generateCards.generateCards(
127
+ prompt ?? "",
128
+ this.parsedContent + additionalContent,
129
+ isGapFill
130
+ );
131
+
132
+ // let response = await this.openAiService?.sendRequest(prompt,this.parsedContent);
133
+ // response['type'] = 'card_gen';
134
+ return this.cardgenResponse;
135
+ }
136
+
137
+
138
+ async generateTypology(prompt: string) {
139
+ let response = await new GenerateTypology(
140
+ this.openAiService,
141
+ prompt,
142
+ JSON.stringify(this.parsedContent),
143
+ this.expectedFields
144
+ ).generate();
145
+ return response;
146
+ }
147
+
148
+
149
+
150
+ }