forked from microsoft/prompt-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CodeEngine.ts
107 lines (101 loc) · 3.79 KB
/
CodeEngine.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { PromptEngine } from "./PromptEngine";
import { Interaction, ICodePromptConfig } from "./types";
import { dashesToCamelCase } from "./utils/utils";
import { stringify } from "yaml";
export const JavaScriptConfig: ICodePromptConfig = {
modelConfig: {
maxTokens: 1024,
},
descriptionCommentOperator: "/*",
descriptionCloseCommentOperator: "*/",
commentOperator: "/*",
closeCommentOperator: "*/",
newlineOperator: "\n",
multiTurn: true,
promptNewlineEnd: true,
};
export class CodeEngine extends PromptEngine {
languageConfig: ICodePromptConfig;
constructor(
description: string = "",
examples: Interaction[] = [],
flowResetText: string = "",
languageConfig: Partial<ICodePromptConfig> = JavaScriptConfig
) {
super(description, examples, flowResetText);
this.languageConfig = { ...JavaScriptConfig, ...languageConfig};
this.promptConfig = {
modelConfig: this.languageConfig.modelConfig,
inputPrefix: this.languageConfig.commentOperator,
inputPostfix: this.languageConfig.closeCommentOperator,
outputPrefix: "",
outputPostfix: "",
descriptionPrefix: this.languageConfig.descriptionCommentOperator,
descriptionPostfix: this.languageConfig.descriptionCloseCommentOperator,
newlineOperator: this.languageConfig.newlineOperator,
multiTurn: this.languageConfig.multiTurn,
promptNewlineEnd: this.languageConfig.promptNewlineEnd,
};
}
/**
*
* @param parsedYAML Yaml dict to load config from
*
**/
protected loadConfigYAML(parsedYAML: Record<string, any>) {
if (parsedYAML["type"] == "code-engine") {
if (parsedYAML.hasOwnProperty("config")){
const configData = parsedYAML["config"]
if (configData.hasOwnProperty("model-config")) {
const modelConfig = configData["model-config"];
const camelCaseModelConfig = {};
for (const key in modelConfig) {
camelCaseModelConfig[dashesToCamelCase(key)] = modelConfig[key];
}
this.languageConfig.modelConfig = { ...this.languageConfig.modelConfig, ...camelCaseModelConfig };
delete configData["model-config"];
}
const camelCaseConfig = {};
for (const key in configData) {
camelCaseConfig[dashesToCamelCase(key)] = configData[key];
}
this.languageConfig = { ...this.languageConfig, ...camelCaseConfig };
this.promptConfig = {
modelConfig: this.languageConfig.modelConfig,
inputPrefix: this.languageConfig.commentOperator,
inputPostfix: this.languageConfig.closeCommentOperator,
outputPrefix: "",
outputPostfix: "",
descriptionPrefix: this.languageConfig.commentOperator,
descriptionPostfix: this.languageConfig.closeCommentOperator,
newlineOperator: this.languageConfig.newlineOperator,
multiTurn: this.languageConfig.multiTurn,
promptNewlineEnd: this.languageConfig.promptNewlineEnd,
};
}
} else {
throw Error("Invalid yaml file type");
}
}
/**
*
* @returns the stringified yaml representation of the prompt engine
*
**/
public saveYAML(){
const yamlData: any = {
"type": "code-engine",
"description": this.description,
"examples": this.examples,
"flow-reset-text": this.flowResetText,
"dialog": this.dialog,
"config": {
"model-config" : this.promptConfig.modelConfig,
"comment-operator": this.languageConfig.commentOperator,
"close-comment-operator": this.languageConfig.closeCommentOperator,
"newline-operator": this.languageConfig.newlineOperator,
}
}
return stringify(yamlData, null, 2);
}
}