only_ever_generator 0.2.7 → 0.2.9

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 (36) hide show
  1. package/dist/bootstrap/app.js +1 -1
  2. package/dist/card_gen/generate_cards.js +2 -1
  3. package/dist/constants/prompt_data.js +273 -273
  4. package/dist/constants/prompts/card_gen_prompt.js +287 -282
  5. package/dist/constants/prompts/typology_prompt.js +94 -100
  6. package/dist/constants/source_data.js +883 -7
  7. package/dist/index.js +1 -1
  8. package/dist/parse/parse_source_content.js +0 -7
  9. package/package.json +33 -33
  10. package/readme.md +23 -23
  11. package/src/bootstrap/app.ts +150 -154
  12. package/src/card_gen/generate_cards.ts +251 -251
  13. package/src/config.ts +6 -6
  14. package/src/constants/api_constants.ts +2 -2
  15. package/src/constants/prompt_data.ts +296 -296
  16. package/src/constants/prompts/card_gen_prompt.ts +372 -372
  17. package/src/constants/prompts/typology_prompt.ts +196 -202
  18. package/src/constants/source_data.ts +915 -47
  19. package/src/gap_fill/calculate_gap_fill.ts +52 -52
  20. package/src/index.ts +61 -61
  21. package/src/logger.ts +30 -30
  22. package/src/parse/parse_card_response.ts +289 -289
  23. package/src/parse/parse_source_content.ts +88 -94
  24. package/src/parse/response_format_card.ts +210 -210
  25. package/src/parse/response_format_typology.ts +43 -43
  26. package/src/services/open_ai_service.ts +55 -55
  27. package/src/typology_gen/generate_typology.ts +71 -71
  28. package/src/utils/generate_args.ts +28 -28
  29. package/src/utils/parse_openai_response.ts +20 -20
  30. package/tsconfig.json +12 -12
  31. package/dist/class/parse/parse_source_content.js +0 -62
  32. package/dist/class/services/open_ai_service.js +0 -25
  33. package/dist/parse_response/parse_card_response.js +0 -288
  34. package/dist/parse_response/response_format_card.js +0 -210
  35. package/dist/parse_response/response_format_typology.js +0 -47
  36. package/dist/service/open_ai_request.js +0 -57
package/dist/index.js CHANGED
@@ -45,7 +45,7 @@ Object.defineProperty(exports, "OnlyEverGenerator", { enumerable: true, get: fun
45
45
  // // summary_prompt: "",
46
46
  // // }
47
47
  // // )
48
- // let typologyRequest = await oeGen.generate(true, true);
48
+ // let typologyRequest = await oeGen.generate(false, true);
49
49
  // res.send(typologyRequest);
50
50
  // }
51
51
  // });
@@ -10,13 +10,6 @@ class ParseSourceContent {
10
10
  // if(this.content.type == 'source') {
11
11
  let dataAfterRemovingUnWantedBlocks = this.removeSectionsByTitle(this.content.content);
12
12
  let afterSanitized = this.sanitizeBlocks(dataAfterRemovingUnWantedBlocks);
13
- let taxonomy;
14
- if (this.content.taxonomy) {
15
- taxonomy = this.content.taxonomy;
16
- }
17
- else {
18
- taxonomy = null;
19
- }
20
13
  return {
21
14
  type: this.content.type,
22
15
  title: this.content.title,
package/package.json CHANGED
@@ -1,33 +1,33 @@
1
- {
2
- "name": "only_ever_generator",
3
- "version": "0.2.7",
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.9",
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,154 +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
- import { title } from "process";
12
- import { ErrorLogger } from "../logger";
13
-
14
-
15
- /// OnlyEverGenerator
16
-
17
- export class OnlyEverGenerator {
18
- public api_key: string = "";
19
- public openAiService: OpenAiService;
20
-
21
- /// these fields will be populated inside the constructor
22
- parsedContent: any = {};
23
- promptForTypology: string = "";
24
- promptForCardGen: string = "";
25
- expectedFields: Array<string>;
26
-
27
-
28
- typologyResponse: any = {};
29
- cardgenResponse: any = {};
30
- summarizeResponse = {};
31
- gapFillResponse: any = {};
32
-
33
-
34
- constructor(
35
- apiKey: string,
36
- model: string,
37
- generationContent : any
38
- ) {
39
- this.api_key = apiKey;
40
- this.openAiService = new OpenAiService(
41
- apiKey,
42
- model ?? "gpt-3.5-turbo-1106"
43
- );
44
- const parsedData = new ParseSourceContent(generationContent.content).parseData()
45
- this.parsedContent = {
46
- title: parsedData.title,
47
- headings: parsedData.headings,
48
- content: parsedData.content,
49
-
50
- },
51
- // parsedData.type == 'cards' ? this.typologyResponse = parsedData.taxonomy : this.typologyResponse = null;
52
- this.typologyResponse = parsedData.taxonomy
53
-
54
- this.expectedFields = generationContent.content.fields; //returnFields();
55
- this.promptForTypology = returnTypologyPrompt(generationContent.prompt.typology);
56
- this.promptForCardGen = returnCardGenPrompt(generationContent.prompt.card_generation);
57
- }
58
-
59
-
60
-
61
- async generate(
62
- generate_typology: boolean = false,
63
- generate_card: boolean = false
64
- ): Promise<Array<any>> {
65
- let args = new GenerateArgs(generate_card, generate_typology, false, );
66
- const responseToReturn = [];
67
- const whatNeedsToBeGenerated = args.getWhatNeedsToBeGenerated();
68
- for (let elem of whatNeedsToBeGenerated)
69
- if (elem == "generate_tyopology") {
70
- this.typologyResponse = await this.generateTypology(
71
- this.promptForTypology
72
- );
73
- responseToReturn.push(this.typologyResponse);
74
- } else if (elem == "generate_card") {
75
- /// for cards gen to occur, there must be presence of source taxonomy
76
- if(this.shouldTheCardBeGeneratedAfterTypologyResponse()){
77
- this.cardgenResponse = await this.generateCard(
78
- this.promptForCardGen,
79
- JSON.stringify(this.typologyResponse),
80
- false,
81
- )
82
- responseToReturn.push(this.cardgenResponse);
83
-
84
- /// check if gap fill is required ie coverage determination
85
- if(this.cardgenResponse.status_code == 200) {
86
- this.gapFillResponse = await this.generationForGapFill(this.typologyResponse, this.cardgenResponse);
87
- responseToReturn.push(this.gapFillResponse);
88
- }
89
-
90
- }
91
- }
92
- return responseToReturn;
93
- // return [typologyPrompt, cardPrompt];
94
-
95
- }
96
-
97
- shouldTheCardBeGeneratedAfterTypologyResponse(){
98
- if(this.typologyResponse){
99
- return this.typologyResponse.generate_cards.state == true;
100
- }else{
101
- return false;
102
- }
103
-
104
- }
105
-
106
- async generationForGapFill(typologyData: any, cardGenData: any) {
107
- let gapFill = gapFilling(typologyData, cardGenData);
108
- let response :any ;
109
- if (
110
- gapFill.remainingConcepts.length !== 0 ||
111
- gapFill.remainingFacts.length !== 0
112
- ) {
113
- response = await this.generateCard(
114
- this.promptForCardGen +
115
- "Generate cards only suitable for the given remaining concepts and facts" +
116
- JSON.stringify(gapFill) +
117
- "Exclude generating these cards",
118
- JSON.stringify(cardGenData.cards_data),
119
- true
120
- );
121
- }
122
- return response;
123
-
124
- }
125
-
126
-
127
-
128
- async generateCard(prompt: string, additionalContent: string, isGapFill: boolean) {
129
- let generateCards = new GenerateCards(this.openAiService);
130
- this.cardgenResponse = await generateCards.generateCards(
131
- prompt ?? "",
132
- this.parsedContent + additionalContent,
133
- isGapFill
134
- );
135
-
136
- // let response = await this.openAiService?.sendRequest(prompt,this.parsedContent);
137
- // response['type'] = 'card_gen';
138
- return this.cardgenResponse;
139
- }
140
-
141
-
142
- async generateTypology(prompt: string) {
143
- let response = await new GenerateTypology(
144
- this.openAiService,
145
- prompt,
146
- JSON.stringify(this.parsedContent),
147
- this.expectedFields
148
- ).generate();
149
- return response;
150
- }
151
-
152
-
153
-
154
- }
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 = generationContent.content.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
+ }