@proteinjs/conversation 1.0.5 → 1.0.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.
- package/.eslintrc.js +20 -0
- package/.prettierrc +8 -0
- package/CHANGELOG.md +7 -4
- package/LICENSE +21 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +40 -28
- package/dist/src/CodegenConversation.d.ts +11 -11
- package/dist/src/CodegenConversation.d.ts.map +1 -1
- package/dist/src/CodegenConversation.js +294 -180
- package/dist/src/CodegenConversation.js.map +1 -1
- package/dist/src/Conversation.d.ts +52 -49
- package/dist/src/Conversation.d.ts.map +1 -1
- package/dist/src/Conversation.js +480 -274
- package/dist/src/Conversation.js.map +1 -1
- package/dist/src/ConversationModule.d.ts +6 -6
- package/dist/src/ConversationModule.js +3 -3
- package/dist/src/Function.d.ts +4 -4
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +3 -3
- package/dist/src/OpenAi.d.ts +42 -10
- package/dist/src/OpenAi.d.ts.map +1 -1
- package/dist/src/OpenAi.js +496 -289
- package/dist/src/OpenAi.js.map +1 -1
- package/dist/src/Paragraph.d.ts +4 -4
- package/dist/src/Paragraph.d.ts.map +1 -1
- package/dist/src/Paragraph.js +17 -16
- package/dist/src/Paragraph.js.map +1 -1
- package/dist/src/Sentence.d.ts +4 -4
- package/dist/src/Sentence.d.ts.map +1 -1
- package/dist/src/Sentence.js +21 -19
- package/dist/src/Sentence.js.map +1 -1
- package/dist/src/code_template/Code.d.ts +15 -15
- package/dist/src/code_template/Code.d.ts.map +1 -1
- package/dist/src/code_template/Code.js +167 -69
- package/dist/src/code_template/Code.js.map +1 -1
- package/dist/src/code_template/CodeTemplate.d.ts +11 -11
- package/dist/src/code_template/CodeTemplate.d.ts.map +1 -1
- package/dist/src/code_template/CodeTemplate.js +169 -79
- package/dist/src/code_template/CodeTemplate.js.map +1 -1
- package/dist/src/code_template/CodeTemplateModule.d.ts +6 -6
- package/dist/src/code_template/CodeTemplateModule.js +28 -26
- package/dist/src/code_template/Repo.d.ts +34 -38
- package/dist/src/code_template/Repo.d.ts.map +1 -1
- package/dist/src/code_template/Repo.js +291 -191
- package/dist/src/code_template/Repo.js.map +1 -1
- package/dist/src/fs/conversation_fs/ConversationFsModerator.d.ts +12 -12
- package/dist/src/fs/conversation_fs/ConversationFsModerator.d.ts.map +1 -1
- package/dist/src/fs/conversation_fs/ConversationFsModerator.js +111 -98
- package/dist/src/fs/conversation_fs/ConversationFsModerator.js.map +1 -1
- package/dist/src/fs/conversation_fs/ConversationFsModule.d.ts +11 -11
- package/dist/src/fs/conversation_fs/ConversationFsModule.d.ts.map +1 -1
- package/dist/src/fs/conversation_fs/ConversationFsModule.js +204 -99
- package/dist/src/fs/conversation_fs/ConversationFsModule.js.map +1 -1
- package/dist/src/fs/conversation_fs/FsFunctions.d.ts +58 -62
- package/dist/src/fs/conversation_fs/FsFunctions.d.ts.map +1 -1
- package/dist/src/fs/conversation_fs/FsFunctions.js +414 -266
- package/dist/src/fs/conversation_fs/FsFunctions.js.map +1 -1
- package/dist/src/fs/git/GitModule.d.ts +8 -8
- package/dist/src/fs/git/GitModule.d.ts.map +1 -1
- package/dist/src/fs/git/GitModule.js +163 -74
- package/dist/src/fs/git/GitModule.js.map +1 -1
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexFunctions.d.ts +16 -18
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexFunctions.d.ts.map +1 -1
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexFunctions.js +158 -58
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexFunctions.js.map +1 -1
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexModule.d.ts +27 -26
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexModule.d.ts.map +1 -1
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexModule.js +234 -133
- package/dist/src/fs/keyword_to_files_index/KeywordToFilesIndexModule.js.map +1 -1
- package/dist/src/fs/package/PackageFunctions.d.ts +54 -60
- package/dist/src/fs/package/PackageFunctions.d.ts.map +1 -1
- package/dist/src/fs/package/PackageFunctions.js +366 -223
- package/dist/src/fs/package/PackageFunctions.js.map +1 -1
- package/dist/src/fs/package/PackageModule.d.ts +24 -24
- package/dist/src/fs/package/PackageModule.d.ts.map +1 -1
- package/dist/src/fs/package/PackageModule.js +292 -163
- package/dist/src/fs/package/PackageModule.js.map +1 -1
- package/dist/src/history/MessageHistory.d.ts +12 -12
- package/dist/src/history/MessageHistory.d.ts.map +1 -1
- package/dist/src/history/MessageHistory.js +52 -43
- package/dist/src/history/MessageHistory.js.map +1 -1
- package/dist/src/history/MessageModerator.d.ts +2 -2
- package/dist/src/history/MessageModerator.js +3 -3
- package/dist/src/template/ConversationTemplate.d.ts +8 -8
- package/dist/src/template/ConversationTemplate.d.ts.map +1 -1
- package/dist/src/template/ConversationTemplate.js +3 -3
- package/dist/src/template/ConversationTemplateFunctions.d.ts +33 -35
- package/dist/src/template/ConversationTemplateFunctions.d.ts.map +1 -1
- package/dist/src/template/ConversationTemplateFunctions.js +176 -75
- package/dist/src/template/ConversationTemplateFunctions.js.map +1 -1
- package/dist/src/template/ConversationTemplateModule.d.ts +51 -48
- package/dist/src/template/ConversationTemplateModule.d.ts.map +1 -1
- package/dist/src/template/ConversationTemplateModule.js +211 -114
- package/dist/src/template/ConversationTemplateModule.js.map +1 -1
- package/dist/src/template/createApp/CreateAppTemplate.d.ts +1 -1
- package/dist/src/template/createApp/CreateAppTemplate.js +151 -59
- package/dist/src/template/createCode/CreateCodeConversationTemplate.d.ts +1 -1
- package/dist/src/template/createCode/CreateCodeConversationTemplate.d.ts.map +1 -1
- package/dist/src/template/createCode/CreateCodeConversationTemplate.js +183 -74
- package/dist/src/template/createCode/CreateCodeConversationTemplate.js.map +1 -1
- package/dist/src/template/createPackage/CreatePackageConversationTemplate.d.ts +1 -1
- package/dist/src/template/createPackage/CreatePackageConversationTemplate.d.ts.map +1 -1
- package/dist/src/template/createPackage/CreatePackageConversationTemplate.js +174 -84
- package/dist/src/template/createPackage/CreatePackageConversationTemplate.js.map +1 -1
- package/dist/src/template/createPackage/tsconfig.json +11 -11
- package/dist/test/createKeywordFilesIndex.test.d.ts +1 -1
- package/dist/test/createKeywordFilesIndex.test.js +132 -41
- package/dist/test/createKeywordFilesIndex.test.js.map +1 -1
- package/dist/test/openai/openai.generateList.test.d.ts +1 -1
- package/dist/test/openai/openai.generateList.test.js +136 -47
- package/dist/test/openai/openai.generateList.test.js.map +1 -1
- package/dist/test/openai/openai.parseCodeFromMarkdown.test.d.ts +1 -1
- package/dist/test/openai/openai.parseCodeFromMarkdown.test.js +15 -10
- package/dist/test/openai/openai.parseCodeFromMarkdown.test.js.map +1 -1
- package/dist/test/repo/repo.test.d.ts +1 -1
- package/dist/test/repo/repo.test.js +127 -38
- package/dist/test/repo/repo.test.js.map +1 -1
- package/jest.config.js +2 -2
- package/package.json +11 -5
- package/src/CodegenConversation.ts +6 -4
- package/src/Conversation.ts +102 -33
- package/src/ConversationModule.ts +2 -2
- package/src/Function.ts +0 -1
- package/src/OpenAi.ts +128 -63
- package/src/Paragraph.ts +3 -2
- package/src/Sentence.ts +5 -3
- package/src/code_template/Code.ts +25 -19
- package/src/code_template/CodeTemplate.ts +8 -7
- package/src/code_template/CodeTemplateModule.ts +2 -2
- package/src/code_template/Repo.ts +25 -19
- package/src/fs/conversation_fs/ConversationFsModerator.ts +34 -20
- package/src/fs/conversation_fs/ConversationFsModule.ts +13 -7
- package/src/fs/conversation_fs/FsFunctions.ts +33 -44
- package/src/fs/git/GitModule.ts +2 -4
- package/src/fs/keyword_to_files_index/KeywordToFilesIndexFunctions.ts +31 -31
- package/src/fs/keyword_to_files_index/KeywordToFilesIndexModule.ts +19 -18
- package/src/fs/package/PackageFunctions.ts +34 -41
- package/src/fs/package/PackageModule.ts +33 -21
- package/src/history/MessageHistory.ts +7 -4
- package/src/history/MessageModerator.ts +1 -1
- package/src/template/ConversationTemplate.ts +9 -9
- package/src/template/ConversationTemplateFunctions.ts +8 -7
- package/src/template/ConversationTemplateModule.ts +24 -15
- package/src/template/createApp/CreateAppTemplate.ts +1 -1
- package/src/template/createCode/CreateCodeConversationTemplate.ts +9 -11
- package/src/template/createPackage/CreatePackageConversationTemplate.ts +2 -9
- package/src/template/createPackage/jest.config.js +2 -2
- package/test/createKeywordFilesIndex.test.ts +3 -3
- package/test/openai/openai.generateList.test.ts +5 -3
- package/test/openai/openai.parseCodeFromMarkdown.test.ts +10 -5
- package/test/repo/repo.test.ts +3 -4
- package/tsconfig.json +16 -20
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
import { Fs } from '@proteinjs/util-node';
|
|
2
2
|
import { ConversationModule, ConversationModuleFactory } from '../../ConversationModule';
|
|
3
3
|
import { Function } from '../../Function';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
packageFunctions,
|
|
6
|
+
searchLibrariesFunction,
|
|
7
|
+
searchLibrariesFunctionName,
|
|
8
|
+
searchPackagesFunction,
|
|
9
|
+
searchPackagesFunctionName,
|
|
10
|
+
} from './PackageFunctions';
|
|
5
11
|
import path from 'path';
|
|
6
12
|
import { searchFilesFunctionName } from '../keyword_to_files_index/KeywordToFilesIndexFunctions';
|
|
7
13
|
import { readFilesFunctionName } from '../conversation_fs/FsFunctions';
|
|
8
14
|
|
|
9
15
|
export type Library = {
|
|
10
|
-
fileName: string
|
|
11
|
-
filePath: string
|
|
12
|
-
packageName: string
|
|
13
|
-
}
|
|
16
|
+
fileName: string;
|
|
17
|
+
filePath: string;
|
|
18
|
+
packageName: string;
|
|
19
|
+
};
|
|
14
20
|
|
|
15
21
|
export type LibraryImport = {
|
|
16
|
-
importStatements: string[]
|
|
17
|
-
typescriptDeclaration: string
|
|
18
|
-
}
|
|
22
|
+
importStatements: string[];
|
|
23
|
+
typescriptDeclaration: string;
|
|
24
|
+
};
|
|
19
25
|
|
|
20
26
|
export class PackageModule implements ConversationModule {
|
|
21
27
|
private repoPath: string;
|
|
@@ -39,11 +45,7 @@ export class PackageModule implements ConversationModule {
|
|
|
39
45
|
}
|
|
40
46
|
|
|
41
47
|
getFunctions(): Function[] {
|
|
42
|
-
return [
|
|
43
|
-
...packageFunctions,
|
|
44
|
-
searchPackagesFunction(this),
|
|
45
|
-
searchLibrariesFunction(this),
|
|
46
|
-
];
|
|
48
|
+
return [...packageFunctions, searchPackagesFunction(this), searchLibrariesFunction(this)];
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
getMessageModerators() {
|
|
@@ -56,12 +58,16 @@ export class PackageModule implements ConversationModule {
|
|
|
56
58
|
*/
|
|
57
59
|
async searchPackages(keyword: string): Promise<string[]> {
|
|
58
60
|
const matchingPackageJsonPaths: string[] = [];
|
|
59
|
-
const packageJsonFilePaths = await Fs.getFilePathsMatchingGlob(this.repoPath, '**/package.json', [
|
|
61
|
+
const packageJsonFilePaths = await Fs.getFilePathsMatchingGlob(this.repoPath, '**/package.json', [
|
|
62
|
+
'**/node_modules/**',
|
|
63
|
+
'**/dist/**',
|
|
64
|
+
]);
|
|
60
65
|
const packageJsonFileMap = await Fs.readFiles(packageJsonFilePaths);
|
|
61
|
-
for (
|
|
66
|
+
for (const packageJsonFilePath of Object.keys(packageJsonFileMap)) {
|
|
62
67
|
const packageJson = JSON.parse(packageJsonFileMap[packageJsonFilePath]);
|
|
63
|
-
if (packageJson.name.toLowerCase().includes(keyword.toLocaleLowerCase()))
|
|
68
|
+
if (packageJson.name.toLowerCase().includes(keyword.toLocaleLowerCase())) {
|
|
64
69
|
matchingPackageJsonPaths.push(packageJsonFilePath);
|
|
70
|
+
}
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
return matchingPackageJsonPaths;
|
|
@@ -74,15 +80,21 @@ export class PackageModule implements ConversationModule {
|
|
|
74
80
|
*/
|
|
75
81
|
async searchLibraries(keyword: string): Promise<Library[]> {
|
|
76
82
|
const matchingLibraries: Library[] = [];
|
|
77
|
-
const packageJsonFilePaths = await Fs.getFilePathsMatchingGlob(this.repoPath, '**/package.json', [
|
|
83
|
+
const packageJsonFilePaths = await Fs.getFilePathsMatchingGlob(this.repoPath, '**/package.json', [
|
|
84
|
+
'**/node_modules/**',
|
|
85
|
+
'**/dist/**',
|
|
86
|
+
]);
|
|
78
87
|
const packageJsonFileMap = await Fs.readFiles(packageJsonFilePaths);
|
|
79
|
-
for (
|
|
88
|
+
for (const packageJsonFilePath of Object.keys(packageJsonFileMap)) {
|
|
80
89
|
const packageJson = JSON.parse(packageJsonFileMap[packageJsonFilePath]);
|
|
81
90
|
const packageJsonFilePathParts = packageJsonFilePath.split(path.sep);
|
|
82
91
|
packageJsonFilePathParts.pop();
|
|
83
92
|
const packageDirectory = packageJsonFilePathParts.join(path.sep);
|
|
84
|
-
const srcFilePaths = await Fs.getFilePathsMatchingGlob(path.join(packageDirectory, 'src'), '**/*.ts', [
|
|
85
|
-
|
|
93
|
+
const srcFilePaths = await Fs.getFilePathsMatchingGlob(path.join(packageDirectory, 'src'), '**/*.ts', [
|
|
94
|
+
'**/node_modules/**',
|
|
95
|
+
'**/dist/**',
|
|
96
|
+
]);
|
|
97
|
+
for (const srcFilePath of srcFilePaths) {
|
|
86
98
|
const fileNameWithExtension = path.basename(srcFilePath);
|
|
87
99
|
if (fileNameWithExtension.includes(keyword)) {
|
|
88
100
|
const fileName = path.basename(srcFilePath, path.extname(srcFilePath));
|
|
@@ -103,4 +115,4 @@ export class PackageModuleFactory implements ConversationModuleFactory {
|
|
|
103
115
|
async createModule(repoPath: string): Promise<PackageModule> {
|
|
104
116
|
return new PackageModule(repoPath);
|
|
105
117
|
}
|
|
106
|
-
}
|
|
118
|
+
}
|
|
@@ -20,7 +20,7 @@ export class MessageHistory {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
toString() {
|
|
23
|
-
return this.messages.map(message => message.content).join('. ');
|
|
23
|
+
return this.messages.map((message) => message.content).join('. ');
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
setMessages(messages: ChatCompletionMessageParam[]): MessageHistory {
|
|
@@ -36,19 +36,22 @@ export class MessageHistory {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
prune() {
|
|
39
|
-
if (this.params.enforceMessageLimit === false)
|
|
39
|
+
if (this.params.enforceMessageLimit === false) {
|
|
40
40
|
return;
|
|
41
|
+
}
|
|
41
42
|
|
|
42
43
|
let messageCount = 0;
|
|
43
44
|
const messagesToRemoveIndexes: number[] = [];
|
|
44
45
|
for (let i = this.messages.length - 1; i >= 0; i--) {
|
|
45
46
|
const message = this.messages[i];
|
|
46
|
-
if (message.role == 'system')
|
|
47
|
+
if (message.role == 'system') {
|
|
47
48
|
continue;
|
|
49
|
+
}
|
|
48
50
|
|
|
49
51
|
messageCount++;
|
|
50
|
-
if (messageCount > this.params.maxMessages)
|
|
52
|
+
if (messageCount > this.params.maxMessages) {
|
|
51
53
|
messagesToRemoveIndexes.push(i);
|
|
54
|
+
}
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
this.messages = this.messages.filter((message, i) => !messagesToRemoveIndexes.includes(i));
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export type Question = {
|
|
2
|
-
text: string
|
|
3
|
-
optional?: boolean
|
|
4
|
-
}
|
|
2
|
+
text: string;
|
|
3
|
+
optional?: boolean;
|
|
4
|
+
};
|
|
5
5
|
|
|
6
6
|
export type ConversationTemplate = {
|
|
7
|
-
name: string
|
|
8
|
-
keywords: string[]
|
|
9
|
-
description: string
|
|
10
|
-
questions: Question[]
|
|
11
|
-
instructions: () => Promise<string[]
|
|
12
|
-
}
|
|
7
|
+
name: string;
|
|
8
|
+
keywords: string[];
|
|
9
|
+
description: string;
|
|
10
|
+
questions: Question[];
|
|
11
|
+
instructions: () => Promise<string[]>;
|
|
12
|
+
};
|
|
@@ -14,12 +14,12 @@ export const searchConversationTemplatesFunction = (repo: ConversationTemplateMo
|
|
|
14
14
|
description: 'Search for conversation template names that match this keyword',
|
|
15
15
|
},
|
|
16
16
|
},
|
|
17
|
-
required: ['keyword']
|
|
17
|
+
required: ['keyword'],
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
call: async (params: { keyword: string }) => repo.searchConversationTemplates(params.keyword),
|
|
21
|
-
}
|
|
22
|
-
}
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
23
|
|
|
24
24
|
export const getConversationTemplateFunctionName = 'getConversationTemplate';
|
|
25
25
|
export const getConversationTemplateFunction = (repo: ConversationTemplateModule) => {
|
|
@@ -35,9 +35,10 @@ export const getConversationTemplateFunction = (repo: ConversationTemplateModule
|
|
|
35
35
|
description: 'Get the conversation template that has this name',
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
|
-
required: ['conversationTemplateName']
|
|
38
|
+
required: ['conversationTemplateName'],
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
|
-
call: async (params: { conversationTemplateName: string }) =>
|
|
42
|
-
|
|
43
|
-
}
|
|
41
|
+
call: async (params: { conversationTemplateName: string }) =>
|
|
42
|
+
await repo.getConversationTemplate(params.conversationTemplateName),
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -2,7 +2,12 @@ import { Logger } from '@proteinjs/util';
|
|
|
2
2
|
import { ConversationTemplate } from './ConversationTemplate';
|
|
3
3
|
import { createPackageConversationTemplate } from './createPackage/CreatePackageConversationTemplate';
|
|
4
4
|
import { ConversationModule, ConversationModuleFactory } from '../ConversationModule';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
getConversationTemplateFunction,
|
|
7
|
+
getConversationTemplateFunctionName,
|
|
8
|
+
searchConversationTemplatesFunction,
|
|
9
|
+
searchConversationTemplatesFunctionName,
|
|
10
|
+
} from './ConversationTemplateFunctions';
|
|
6
11
|
import { createCodeConversationTemplate } from './createCode/CreateCodeConversationTemplate';
|
|
7
12
|
import { createAppTemplate } from './createApp/CreateAppTemplate';
|
|
8
13
|
|
|
@@ -13,9 +18,9 @@ const conversationTemplates: ConversationTemplate[] = [
|
|
|
13
18
|
];
|
|
14
19
|
|
|
15
20
|
export type ConversationTemplateModuleParams = {
|
|
16
|
-
conversationTemplates: { [conversationTemplateName: string]: ConversationTemplate}
|
|
17
|
-
conversationTemplateKeywordIndex: { [keyword: string]: string[] /** conversationTemplateNames */ }
|
|
18
|
-
}
|
|
21
|
+
conversationTemplates: { [conversationTemplateName: string]: ConversationTemplate };
|
|
22
|
+
conversationTemplateKeywordIndex: { [keyword: string]: string[] /** conversationTemplateNames */ };
|
|
23
|
+
};
|
|
19
24
|
|
|
20
25
|
export class ConversationTemplateModule implements ConversationModule {
|
|
21
26
|
private logger = new Logger(this.constructor.name);
|
|
@@ -35,10 +40,13 @@ export class ConversationTemplateModule implements ConversationModule {
|
|
|
35
40
|
return conversationNames || [];
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
async getConversationTemplate(
|
|
43
|
+
async getConversationTemplate(
|
|
44
|
+
conversationTemplateName: string
|
|
45
|
+
): Promise<Omit<ConversationTemplate, 'instructions'> & { instructions: string[] }> {
|
|
39
46
|
const conversationTemplate = this.params.conversationTemplates[conversationTemplateName];
|
|
40
|
-
if (!conversationTemplate)
|
|
47
|
+
if (!conversationTemplate) {
|
|
41
48
|
return {} as any;
|
|
49
|
+
}
|
|
42
50
|
|
|
43
51
|
const instructions = await conversationTemplate.instructions();
|
|
44
52
|
return Object.assign(conversationTemplate, { instructions });
|
|
@@ -54,10 +62,7 @@ export class ConversationTemplateModule implements ConversationModule {
|
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
getFunctions() {
|
|
57
|
-
return [
|
|
58
|
-
searchConversationTemplatesFunction(this),
|
|
59
|
-
getConversationTemplateFunction(this),
|
|
60
|
-
];
|
|
65
|
+
return [searchConversationTemplatesFunction(this), getConversationTemplateFunction(this)];
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
getMessageModerators() {
|
|
@@ -67,12 +72,16 @@ export class ConversationTemplateModule implements ConversationModule {
|
|
|
67
72
|
|
|
68
73
|
export class ConversationTemplateModuleFactory implements ConversationModuleFactory {
|
|
69
74
|
async createModule(repoPath: string) {
|
|
70
|
-
const params: ConversationTemplateModuleParams = {
|
|
71
|
-
|
|
75
|
+
const params: ConversationTemplateModuleParams = {
|
|
76
|
+
conversationTemplates: {},
|
|
77
|
+
conversationTemplateKeywordIndex: {},
|
|
78
|
+
};
|
|
79
|
+
for (const conversationTemplate of conversationTemplates) {
|
|
72
80
|
params.conversationTemplates[conversationTemplate.name] = conversationTemplate;
|
|
73
|
-
for (
|
|
74
|
-
if (!params.conversationTemplateKeywordIndex[keyword])
|
|
81
|
+
for (const keyword of conversationTemplate.keywords) {
|
|
82
|
+
if (!params.conversationTemplateKeywordIndex[keyword]) {
|
|
75
83
|
params.conversationTemplateKeywordIndex[keyword] = [];
|
|
84
|
+
}
|
|
76
85
|
|
|
77
86
|
params.conversationTemplateKeywordIndex[keyword].push(conversationTemplate.name);
|
|
78
87
|
}
|
|
@@ -80,4 +89,4 @@ export class ConversationTemplateModuleFactory implements ConversationModuleFact
|
|
|
80
89
|
|
|
81
90
|
return new ConversationTemplateModule(params);
|
|
82
91
|
}
|
|
83
|
-
}
|
|
92
|
+
}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { fileOrDirectoryExistsFunction, readFilesFunctionName } from '../../fs/conversation_fs/FsFunctions';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
generateTypescriptDeclarationsFunction,
|
|
4
|
+
installPackagesFunction,
|
|
5
|
+
searchLibrariesFunctionName,
|
|
6
|
+
searchPackagesFunctionName,
|
|
7
|
+
} from '../../fs/package/PackageFunctions';
|
|
3
8
|
import { ConversationTemplate } from '../ConversationTemplate';
|
|
4
9
|
|
|
5
10
|
export const createCodeConversationTemplate: ConversationTemplate = {
|
|
6
11
|
name: 'Create code',
|
|
7
|
-
keywords: [
|
|
8
|
-
'create code',
|
|
9
|
-
'implement',
|
|
10
|
-
'write code',
|
|
11
|
-
'generate code',
|
|
12
|
-
'write software',
|
|
13
|
-
'build something',
|
|
14
|
-
],
|
|
12
|
+
keywords: ['create code', 'implement', 'write code', 'generate code', 'write software', 'build something'],
|
|
15
13
|
description: 'User and ai developing together',
|
|
16
14
|
questions: [],
|
|
17
15
|
instructions: async () => {
|
|
@@ -37,5 +35,5 @@ export const createCodeConversationTemplate: ConversationTemplate = {
|
|
|
37
35
|
`3.c. When writing the code to file, if updating an existing file, be sure to read the file first to not blow away existing code. Be sure to preserve comments as well.`,
|
|
38
36
|
`4. Repeat 3. unless the user asks to switch packages or files`,
|
|
39
37
|
];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
38
|
+
},
|
|
39
|
+
};
|
|
@@ -5,14 +5,7 @@ import tConfig from './tsconfig.json';
|
|
|
5
5
|
|
|
6
6
|
export const createPackageConversationTemplate: ConversationTemplate = {
|
|
7
7
|
name: 'Create Package',
|
|
8
|
-
keywords: [
|
|
9
|
-
'package',
|
|
10
|
-
'create package',
|
|
11
|
-
'create',
|
|
12
|
-
'create a package',
|
|
13
|
-
'create a new package',
|
|
14
|
-
`new package`,
|
|
15
|
-
],
|
|
8
|
+
keywords: ['package', 'create package', 'create', 'create a package', 'create a new package', `new package`],
|
|
16
9
|
description: 'Create a npm package',
|
|
17
10
|
questions: [
|
|
18
11
|
{ text: `Which folder should the package be created in?` },
|
|
@@ -39,4 +32,4 @@ export const createPackageConversationTemplate: ConversationTemplate = {
|
|
|
39
32
|
`If it's a typescript project, create a tsconfig.json file in the pakage directory with the following content: ${tsConfig}`,
|
|
40
33
|
];
|
|
41
34
|
},
|
|
42
|
-
}
|
|
35
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { KeywordToFilesIndexModuleFactory } from '../src/fs/keyword_to_files_index/KeywordToFilesIndexModule';
|
|
2
2
|
|
|
3
|
-
test('Create keyword-files index', async() => {
|
|
3
|
+
test('Create keyword-files index', async () => {
|
|
4
4
|
// Example usage
|
|
5
|
-
const index = new KeywordToFilesIndexModuleFactory().createKeywordFilesIndex(`${process.cwd()}`)
|
|
5
|
+
const index = new KeywordToFilesIndexModuleFactory().createKeywordFilesIndex(`${process.cwd()}`);
|
|
6
6
|
console.log(JSON.stringify(index, null, 2));
|
|
7
|
-
}, 60000)
|
|
7
|
+
}, 60000);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { OpenAi } from
|
|
1
|
+
import { OpenAi } from '../../src/OpenAi';
|
|
2
2
|
|
|
3
3
|
test('generateList should return an array of numbers, counting to 10', async () => {
|
|
4
4
|
const numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'];
|
|
5
|
-
expect((await OpenAi.generateList([`Create a list of numbers spelled out, from 1 to 10`])).join(' ')).toBe(
|
|
6
|
-
|
|
5
|
+
expect((await OpenAi.generateList([`Create a list of numbers spelled out, from 1 to 10`])).join(' ')).toBe(
|
|
6
|
+
numbers.join(' ')
|
|
7
|
+
);
|
|
8
|
+
});
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { OpenAi } from
|
|
1
|
+
import { OpenAi } from '../../src/OpenAi';
|
|
2
2
|
|
|
3
3
|
const helloWorldCode = "console.log('hello world');";
|
|
4
4
|
const helloWorldWithTicksCode = "console.log('hello ```world');";
|
|
5
5
|
const logXCode = "const x = 'yo';\nconsole.log(x);";
|
|
6
|
-
const testOneBlock = "Sure! I'm a helpful chatbot.\n```typescript\n" + helloWorldCode +
|
|
7
|
-
const testOneBlockWithExtraTicks = "Sure! I'm a helpful chatbot.\n```typescript\n" + helloWorldWithTicksCode +
|
|
8
|
-
const testTwoBlocks =
|
|
6
|
+
const testOneBlock = "Sure! I'm a helpful chatbot.\n```typescript\n" + helloWorldCode + '\n```';
|
|
7
|
+
const testOneBlockWithExtraTicks = "Sure! I'm a helpful chatbot.\n```typescript\n" + helloWorldWithTicksCode + '\n```';
|
|
8
|
+
const testTwoBlocks =
|
|
9
|
+
"Sure! I'm a helpful chatbot.\n```typescript\n" +
|
|
10
|
+
helloWorldCode +
|
|
11
|
+
"\n```\n\nI'm still really helpful.\n```typescript\n" +
|
|
12
|
+
logXCode +
|
|
13
|
+
'\n```\n\nMore unhelpful chat';
|
|
9
14
|
|
|
10
15
|
test('parseCodeFromMarkdown should parse 1 block of code', () => {
|
|
11
16
|
expect(OpenAi.parseCodeFromMarkdown(testOneBlock)).toBe(helloWorldCode);
|
|
@@ -17,4 +22,4 @@ test('parseCodeFromMarkdown should parse 1 block of code that contains ticks', (
|
|
|
17
22
|
|
|
18
23
|
test('parseCodeFromMarkdown should parse 1 block of code', () => {
|
|
19
24
|
expect(OpenAi.parseCodeFromMarkdown(testTwoBlocks)).toBe(helloWorldCode + '\n\n' + logXCode);
|
|
20
|
-
});
|
|
25
|
+
});
|
package/test/repo/repo.test.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { RepoFactory } from '../../src/code_template/Repo';
|
|
|
3
3
|
import { Conversation } from '../../src/Conversation';
|
|
4
4
|
import { Fs } from '@proteinjs/util-node';
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
// test(`Return repo of the source files and the code they depend on`, async () => {
|
|
8
7
|
// const tableTemplatePath = require.resolve('conversation/src/table.ts');
|
|
9
8
|
// const repo = await new RepoFactory([tableTemplatePath]).create();
|
|
@@ -15,12 +14,12 @@ import { Fs } from '@proteinjs/util-node';
|
|
|
15
14
|
// }, 60000);
|
|
16
15
|
|
|
17
16
|
// test(`Interpret all parameters of a function`, async () => {
|
|
18
|
-
|
|
17
|
+
|
|
19
18
|
// }, 60000);
|
|
20
19
|
|
|
21
20
|
// test(`Gather parameter data from the user`, async () => {
|
|
22
21
|
// const conversation = new Conversation();
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
// }, 60000);
|
|
25
24
|
|
|
26
25
|
// test(`Generate code from templates guided by user input`, async () => {
|
|
@@ -30,4 +29,4 @@ import { Fs } from '@proteinjs/util-node';
|
|
|
30
29
|
test(`Create repo`, async () => {
|
|
31
30
|
// console.log(JSON.stringify((await RepoFactory.createRepo(`${process.cwd()}`)).params, null, 4));
|
|
32
31
|
// console.log(JSON.stringify(await Fs.getFilesInDirectory(`${process.cwd()}`, ['node_modules', 'dist']), null, 4));
|
|
33
|
-
}, 60000)
|
|
32
|
+
}, 60000);
|
package/tsconfig.json
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
],
|
|
19
|
-
"types": [
|
|
20
|
-
"node", "jest"
|
|
21
|
-
]
|
|
3
|
+
"rootDir": "./",
|
|
4
|
+
"target": "es5",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationMap": true,
|
|
8
|
+
"sourceMap": true,
|
|
9
|
+
"outDir": "./dist/",
|
|
10
|
+
"strict": true,
|
|
11
|
+
"noImplicitAny": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"typeRoots": ["./node_modules/@types"],
|
|
17
|
+
"types": ["node", "jest"]
|
|
22
18
|
}
|
|
23
|
-
}
|
|
19
|
+
}
|