@proteinjs/conversation 1.7.4 → 2.0.0
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/CHANGELOG.md +18 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/src/CodegenConversation.d.ts.map +1 -1
- package/dist/src/CodegenConversation.js +9 -6
- package/dist/src/CodegenConversation.js.map +1 -1
- package/dist/src/Conversation.d.ts +30 -6
- package/dist/src/Conversation.d.ts.map +1 -1
- package/dist/src/Conversation.js +119 -47
- package/dist/src/Conversation.js.map +1 -1
- package/dist/src/OpenAi.d.ts +57 -15
- package/dist/src/OpenAi.d.ts.map +1 -1
- package/dist/src/OpenAi.js +148 -124
- package/dist/src/OpenAi.js.map +1 -1
- package/dist/src/OpenAiStreamProcessor.d.ts +5 -1
- package/dist/src/OpenAiStreamProcessor.d.ts.map +1 -1
- package/dist/src/OpenAiStreamProcessor.js +25 -5
- package/dist/src/OpenAiStreamProcessor.js.map +1 -1
- package/dist/src/UsageData.d.ts +38 -0
- package/dist/src/UsageData.d.ts.map +1 -0
- package/dist/src/UsageData.js +47 -0
- package/dist/src/UsageData.js.map +1 -0
- package/dist/src/code_template/Code.js +1 -1
- package/dist/src/code_template/Code.js.map +1 -1
- package/dist/test/openai/openai.generateList.test.js +1 -1
- package/dist/test/openai/openai.generateList.test.js.map +1 -1
- package/index.ts +1 -0
- package/package.json +5 -5
- package/src/CodegenConversation.ts +6 -3
- package/src/Conversation.ts +87 -80
- package/src/OpenAi.ts +197 -210
- package/src/OpenAiStreamProcessor.ts +25 -6
- package/src/UsageData.ts +76 -0
- package/src/code_template/Code.ts +1 -1
- package/test/openai/openai.generateList.test.ts +3 -3
|
@@ -45,12 +45,15 @@ var stream_1 = require("stream");
|
|
|
45
45
|
* - When a response to the user is received, it writes to `outputStream`
|
|
46
46
|
*/
|
|
47
47
|
var OpenAiStreamProcessor = /** @class */ (function () {
|
|
48
|
-
function OpenAiStreamProcessor(inputStream, onToolCalls, logLevel, abortSignal) {
|
|
48
|
+
function OpenAiStreamProcessor(inputStream, onToolCalls, usageDataAccumulator, logLevel, abortSignal, onUsageData) {
|
|
49
49
|
this.onToolCalls = onToolCalls;
|
|
50
|
+
this.usageDataAccumulator = usageDataAccumulator;
|
|
50
51
|
this.abortSignal = abortSignal;
|
|
52
|
+
this.onUsageData = onUsageData;
|
|
51
53
|
this.accumulatedToolCalls = [];
|
|
52
54
|
this.toolCallsExecuted = 0;
|
|
53
55
|
this.currentToolCall = null;
|
|
56
|
+
this.outputStreamTerminated = false;
|
|
54
57
|
this.logger = new logger_1.Logger({ name: this.constructor.name, logLevel: logLevel });
|
|
55
58
|
this.inputStream = stream_1.Readable.from(inputStream);
|
|
56
59
|
this.controlStream = this.createControlStream();
|
|
@@ -69,6 +72,7 @@ var OpenAiStreamProcessor = /** @class */ (function () {
|
|
|
69
72
|
*/
|
|
70
73
|
OpenAiStreamProcessor.prototype.createControlStream = function () {
|
|
71
74
|
var _this = this;
|
|
75
|
+
var finishedProcessingToolCallStream = false;
|
|
72
76
|
return new stream_1.Transform({
|
|
73
77
|
objectMode: true,
|
|
74
78
|
transform: function (chunk, encoding, callback) {
|
|
@@ -90,24 +94,40 @@ var OpenAiStreamProcessor = /** @class */ (function () {
|
|
|
90
94
|
_this.handleToolCallDelta(chunk.choices[0].delta.tool_calls);
|
|
91
95
|
}
|
|
92
96
|
else if (((_e = chunk.choices[0]) === null || _e === void 0 ? void 0 : _e.finish_reason) === 'tool_calls') {
|
|
93
|
-
|
|
97
|
+
finishedProcessingToolCallStream = true;
|
|
94
98
|
}
|
|
95
99
|
else if (((_f = chunk.choices[0]) === null || _f === void 0 ? void 0 : _f.finish_reason) === 'stop') {
|
|
96
100
|
_this.outputStream.push({ finishReason: 'stop' });
|
|
97
101
|
_this.outputStream.push(null);
|
|
98
|
-
_this.
|
|
102
|
+
_this.outputStreamTerminated = true;
|
|
99
103
|
}
|
|
100
104
|
else if (((_g = chunk.choices[0]) === null || _g === void 0 ? void 0 : _g.finish_reason) === 'length') {
|
|
101
105
|
_this.logger.info({ message: "The maximum number of output tokens was reached" });
|
|
102
106
|
_this.outputStream.push({ finishReason: 'length' });
|
|
103
107
|
_this.outputStream.push(null);
|
|
104
|
-
_this.
|
|
108
|
+
_this.outputStreamTerminated = true;
|
|
105
109
|
}
|
|
106
110
|
else if (((_h = chunk.choices[0]) === null || _h === void 0 ? void 0 : _h.finish_reason) === 'content_filter') {
|
|
107
111
|
_this.logger.warn({ message: "Content was omitted due to a flag from OpenAI's content filters" });
|
|
108
112
|
_this.outputStream.push({ finishReason: 'content_filter' });
|
|
109
113
|
_this.outputStream.push(null);
|
|
110
|
-
_this.
|
|
114
|
+
_this.outputStreamTerminated = true;
|
|
115
|
+
}
|
|
116
|
+
else if (chunk.usage) {
|
|
117
|
+
_this.usageDataAccumulator.addTokenUsage({
|
|
118
|
+
promptTokens: chunk.usage.prompt_tokens,
|
|
119
|
+
completionTokens: chunk.usage.completion_tokens,
|
|
120
|
+
totalTokens: chunk.usage.total_tokens,
|
|
121
|
+
});
|
|
122
|
+
if (finishedProcessingToolCallStream) {
|
|
123
|
+
_this.handleToolCalls();
|
|
124
|
+
}
|
|
125
|
+
else if (_this.outputStreamTerminated) {
|
|
126
|
+
if (_this.onUsageData) {
|
|
127
|
+
_this.onUsageData(_this.usageDataAccumulator.usageData);
|
|
128
|
+
}
|
|
129
|
+
_this.destroyStreams();
|
|
130
|
+
}
|
|
111
131
|
}
|
|
112
132
|
callback();
|
|
113
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiStreamProcessor.js","sourceRoot":"","sources":["../../src/OpenAiStreamProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4CAAqD;AAErD,iCAA6E;
|
|
1
|
+
{"version":3,"file":"OpenAiStreamProcessor.js","sourceRoot":"","sources":["../../src/OpenAiStreamProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TiktokenModel } from 'tiktoken';
|
|
2
|
+
export type TokenUsage = {
|
|
3
|
+
promptTokens: number;
|
|
4
|
+
completionTokens: number;
|
|
5
|
+
totalTokens: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Usage data accumulated throughout the lifecycle of a single call to
|
|
9
|
+
* `OpenAi.generateResponse` or `OpenAi.generateStreamingResponse`.
|
|
10
|
+
*/
|
|
11
|
+
export type UsageData = {
|
|
12
|
+
/** The model used by the assistant */
|
|
13
|
+
model: TiktokenModel;
|
|
14
|
+
/** The token usage of the initial request sent to the assistant */
|
|
15
|
+
initialRequestTokenUsage: TokenUsage;
|
|
16
|
+
/** The total token usage of all requests sent to the assistant (ie. initial request + all subsequent tool call requests) */
|
|
17
|
+
totalTokenUsage: TokenUsage;
|
|
18
|
+
/** The number of requests sent to the assistant */
|
|
19
|
+
totalRequestsToAssistant: number;
|
|
20
|
+
/** The number of times each tool was called by the assistant */
|
|
21
|
+
callsPerTool: {
|
|
22
|
+
[toolName: string]: number;
|
|
23
|
+
};
|
|
24
|
+
/** The total number of tool calls made by the assistant */
|
|
25
|
+
totalToolCalls: number;
|
|
26
|
+
};
|
|
27
|
+
type UsageDataAccumulatorParams = {
|
|
28
|
+
model: TiktokenModel;
|
|
29
|
+
};
|
|
30
|
+
export declare class UsageDataAccumulator {
|
|
31
|
+
private processedInitialRequest;
|
|
32
|
+
usageData: UsageData;
|
|
33
|
+
constructor({ model }: UsageDataAccumulatorParams);
|
|
34
|
+
addTokenUsage(tokenUsage: TokenUsage): void;
|
|
35
|
+
recordToolCall(toolName: string): void;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=UsageData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageData.d.ts","sourceRoot":"","sources":["../../src/UsageData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,sCAAsC;IACtC,KAAK,EAAE,aAAa,CAAC;IACrB,mEAAmE;IACnE,wBAAwB,EAAE,UAAU,CAAC;IACrC,4HAA4H;IAC5H,eAAe,EAAE,UAAU,CAAC;IAC5B,mDAAmD;IACnD,wBAAwB,EAAE,MAAM,CAAC;IACjC,gEAAgE;IAChE,YAAY,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7C,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,uBAAuB,CAAS;IACjC,SAAS,EAAE,SAAS,CAAC;gBAEhB,EAAE,KAAK,EAAE,EAAE,0BAA0B;IAmBjD,aAAa,CAAC,UAAU,EAAE,UAAU;IAapC,cAAc,CAAC,QAAQ,EAAE,MAAM;CAQhC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UsageDataAccumulator = void 0;
|
|
4
|
+
var UsageDataAccumulator = /** @class */ (function () {
|
|
5
|
+
function UsageDataAccumulator(_a) {
|
|
6
|
+
var model = _a.model;
|
|
7
|
+
this.processedInitialRequest = false;
|
|
8
|
+
this.usageData = {
|
|
9
|
+
model: model,
|
|
10
|
+
initialRequestTokenUsage: {
|
|
11
|
+
promptTokens: 0,
|
|
12
|
+
completionTokens: 0,
|
|
13
|
+
totalTokens: 0,
|
|
14
|
+
},
|
|
15
|
+
totalTokenUsage: {
|
|
16
|
+
promptTokens: 0,
|
|
17
|
+
completionTokens: 0,
|
|
18
|
+
totalTokens: 0,
|
|
19
|
+
},
|
|
20
|
+
totalRequestsToAssistant: 0,
|
|
21
|
+
callsPerTool: {},
|
|
22
|
+
totalToolCalls: 0,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
UsageDataAccumulator.prototype.addTokenUsage = function (tokenUsage) {
|
|
26
|
+
this.usageData.totalRequestsToAssistant++;
|
|
27
|
+
if (!this.processedInitialRequest) {
|
|
28
|
+
this.usageData.initialRequestTokenUsage = tokenUsage;
|
|
29
|
+
this.processedInitialRequest = true;
|
|
30
|
+
}
|
|
31
|
+
this.usageData.totalTokenUsage = {
|
|
32
|
+
promptTokens: this.usageData.totalTokenUsage.promptTokens + tokenUsage.promptTokens,
|
|
33
|
+
completionTokens: this.usageData.totalTokenUsage.completionTokens + tokenUsage.completionTokens,
|
|
34
|
+
totalTokens: this.usageData.totalTokenUsage.totalTokens + tokenUsage.totalTokens,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
UsageDataAccumulator.prototype.recordToolCall = function (toolName) {
|
|
38
|
+
if (!this.usageData.callsPerTool[toolName]) {
|
|
39
|
+
this.usageData.callsPerTool[toolName] = 0;
|
|
40
|
+
}
|
|
41
|
+
this.usageData.callsPerTool[toolName]++;
|
|
42
|
+
this.usageData.totalToolCalls++;
|
|
43
|
+
};
|
|
44
|
+
return UsageDataAccumulator;
|
|
45
|
+
}());
|
|
46
|
+
exports.UsageDataAccumulator = UsageDataAccumulator;
|
|
47
|
+
//# sourceMappingURL=UsageData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageData.js","sourceRoot":"","sources":["../../src/UsageData.ts"],"names":[],"mappings":";;;AA+BA;IAIE,8BAAY,EAAqC;YAAnC,KAAK,WAAA;QAHX,4BAAuB,GAAG,KAAK,CAAC;QAItC,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,OAAA;YACL,wBAAwB,EAAE;gBACxB,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC;aACf;YACD,eAAe,EAAE;gBACf,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC;aACf;YACD,wBAAwB,EAAE,CAAC;YAC3B,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;IAED,4CAAa,GAAb,UAAc,UAAsB;QAClC,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,UAAU,CAAC;YACrD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACrC;QACD,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG;YAC/B,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY;YACnF,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB;YAC/F,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;SACjF,CAAC;IACJ,CAAC;IAED,6CAAc,GAAd,UAAe,QAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC;IACH,2BAAC;AAAD,CAAC,AA5CD,IA4CC;AA5CY,oDAAoB"}
|
|
@@ -50,7 +50,7 @@ var Code = /** @class */ (function () {
|
|
|
50
50
|
if (this.args.imports) {
|
|
51
51
|
this.addImports(this.args.imports, this.args.conversation);
|
|
52
52
|
}
|
|
53
|
-
return [4 /*yield*/, this.args.conversation.generateCode(this.args.description, 'gpt-4')];
|
|
53
|
+
return [4 /*yield*/, this.args.conversation.generateCode({ description: this.args.description, model: 'gpt-4' })];
|
|
54
54
|
case 1: return [2 /*return*/, _a.sent()];
|
|
55
55
|
}
|
|
56
56
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Code.js","sourceRoot":"","sources":["../../../src/code_template/Code.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmD;AAqBnD;IAGE,cAAY,IAAc;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEK,uBAAQ,GAAd;;;;;wBACE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;4BACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBAC5D;wBAEM,qBAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAA;
|
|
1
|
+
{"version":3,"file":"Code.js","sourceRoot":"","sources":["../../../src/code_template/Code.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmD;AAqBnD;IAGE,cAAY,IAAc;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEK,uBAAQ,GAAd;;;;;wBACE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;4BACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBAC5D;wBAEM,qBAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAA;4BAAxG,sBAAO,SAAiG,EAAC;;;;KAC1G;IAEO,yBAAU,GAAlB,UAAmB,OAAiB,EAAE,YAA0B;QAC9D,YAAY,CAAC,0BAA0B,CAAC;YACtC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,cAAc,EAAhB,CAAgB,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAEO,iCAAkB,GAA1B,UAA2B,WAAqB;QAC9C,IAAM,cAAc,GAAG,uBAAW,CAAC,8BAA8B,CAAC;YAChE,WAAW,aAAA;YACX,6BAA6B,EAAE,IAAI;SACpC,CAAC,CAAC;QACH,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,4DAAqD,YAAY,CAAE,CAAC;IAC7E,CAAC;IAEO,4BAAa,GAArB,UAAsB,OAAmC;QACvD,IAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAClC,UAAC,CAAC,IAAK,OAAA,mBAAY,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAY,CAAC,CAAC,2BAA2B,MAAG,EAAhF,CAAgF,CACxF,CAAC;QACF,OAAO,sCAA+B,gBAAgB,CAAE,CAAC;IAC3D,CAAC;IACH,WAAC;AAAD,CAAC,AArCD,IAqCC;AArCY,oBAAI"}
|
|
@@ -44,7 +44,7 @@ test('generateList should return an array of numbers, counting to 10', function
|
|
|
44
44
|
case 0:
|
|
45
45
|
numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'];
|
|
46
46
|
_a = expect;
|
|
47
|
-
return [4 /*yield*/, OpenAi_1.OpenAi.generateList(["Create a list of numbers spelled out, from 1 to 10"])];
|
|
47
|
+
return [4 /*yield*/, new OpenAi_1.OpenAi().generateList({ messages: ["Create a list of numbers spelled out, from 1 to 10"] })];
|
|
48
48
|
case 1:
|
|
49
49
|
_a.apply(void 0, [(_b.sent()).join(' ')]).toBe(numbers.join(' '));
|
|
50
50
|
return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.generateList.test.js","sourceRoot":"","sources":["../../../test/openai/openai.generateList.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA0C;AAE1C,IAAI,CAAC,gEAAgE,EAAE;;;;;gBAC/D,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChG,KAAA,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"openai.generateList.test.js","sourceRoot":"","sources":["../../../test/openai/openai.generateList.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA0C;AAE1C,IAAI,CAAC,gEAAgE,EAAE;;;;;gBAC/D,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChG,KAAA,MAAM,CAAA;gBACH,qBAAM,IAAI,eAAM,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,oDAAoD,CAAC,EAAE,CAAC,EAAA;;gBADxG,kBACE,CAAC,SAAqG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAClH,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;;;KAC3B,CAAC,CAAC"}
|
package/index.ts
CHANGED
|
@@ -11,3 +11,4 @@ export * from './src/history/MessageModerator';
|
|
|
11
11
|
export * from './src/history/MessageHistory';
|
|
12
12
|
export * from './src/ChatCompletionMessageParamFactory';
|
|
13
13
|
export { AssistantResponseStreamChunk } from './src/OpenAiStreamProcessor';
|
|
14
|
+
export { UsageData } from './src/UsageData';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proteinjs/conversation",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"publishConfig": {
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"ts-jest": "^29.1.1"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@proteinjs/logger": "1.0.
|
|
32
|
-
"@proteinjs/util": "1.4.
|
|
33
|
-
"@proteinjs/util-node": "1.4.
|
|
31
|
+
"@proteinjs/logger": "1.0.5",
|
|
32
|
+
"@proteinjs/util": "1.4.1",
|
|
33
|
+
"@proteinjs/util-node": "1.4.1",
|
|
34
34
|
"fs-extra": "11.1.1",
|
|
35
35
|
"openai": "4.52.0",
|
|
36
36
|
"readline-sync": "1.4.10",
|
|
37
37
|
"tiktoken": "1.0.15",
|
|
38
38
|
"typescript": "5.2.2"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "244af0406c34b582f0f81c9a7d11cfb3e62ec255"
|
|
41
41
|
}
|
|
@@ -26,11 +26,14 @@ export class CodegenConversation {
|
|
|
26
26
|
const conversation = await this.createConversation();
|
|
27
27
|
conversation.addAssistantMessagesToHistory([CodegenConversation.INITIAL_QUESTION]);
|
|
28
28
|
const initialUserInput = this.respondToUser(CodegenConversation.INITIAL_QUESTION);
|
|
29
|
-
let
|
|
29
|
+
let responseObject = await conversation.generateResponse({
|
|
30
|
+
messages: [initialUserInput],
|
|
31
|
+
model: CodegenConversation.MODEL,
|
|
32
|
+
});
|
|
30
33
|
// eslint-disable-next-line no-constant-condition
|
|
31
34
|
while (true) {
|
|
32
|
-
const userInput = this.respondToUser(
|
|
33
|
-
|
|
35
|
+
const userInput = this.respondToUser(responseObject.message);
|
|
36
|
+
responseObject = await conversation.generateResponse({ messages: [userInput], model: CodegenConversation.MODEL });
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
|
package/src/Conversation.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { MessageModerator } from './history/MessageModerator';
|
|
|
8
8
|
import { ConversationModule } from './ConversationModule';
|
|
9
9
|
import { TiktokenModel, encoding_for_model } from 'tiktoken';
|
|
10
10
|
import { searchLibrariesFunctionName } from './fs/package/PackageFunctions';
|
|
11
|
+
import { UsageData } from './UsageData';
|
|
11
12
|
|
|
12
13
|
export type ConversationParams = {
|
|
13
14
|
name: string;
|
|
@@ -135,23 +136,19 @@ export class Conversation {
|
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
const summarizeConversationRequest = `First, call the ${summarizeConversationHistoryFunctionName} function`;
|
|
138
|
-
await OpenAi
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
this.
|
|
142
|
-
this.
|
|
143
|
-
|
|
144
|
-
this.params.logLevel
|
|
145
|
-
);
|
|
139
|
+
await new OpenAi({
|
|
140
|
+
history: this.history,
|
|
141
|
+
functions: this.functions,
|
|
142
|
+
messageModerators: this.messageModerators,
|
|
143
|
+
logLevel: this.params.logLevel,
|
|
144
|
+
}).generateResponse({ messages: [summarizeConversationRequest], model });
|
|
146
145
|
const referenceSummaryRequest = `If there's a file mentioned in the conversation summary, find and read the file to better respond to my next request. If that doesn't find anything, call the ${searchLibrariesFunctionName} function on other keywords in the conversation summary to find a file to read`;
|
|
147
|
-
await OpenAi
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this.
|
|
151
|
-
this.
|
|
152
|
-
|
|
153
|
-
this.params.logLevel
|
|
154
|
-
);
|
|
146
|
+
await new OpenAi({
|
|
147
|
+
history: this.history,
|
|
148
|
+
functions: this.functions,
|
|
149
|
+
messageModerators: this.messageModerators,
|
|
150
|
+
logLevel: this.params.logLevel,
|
|
151
|
+
}).generateResponse({ messages: [referenceSummaryRequest], model });
|
|
155
152
|
}
|
|
156
153
|
|
|
157
154
|
summarizeConversationHistory(summary: string) {
|
|
@@ -197,57 +194,69 @@ export class Conversation {
|
|
|
197
194
|
}
|
|
198
195
|
}
|
|
199
196
|
|
|
200
|
-
async generateResponse(
|
|
197
|
+
async generateResponse({
|
|
198
|
+
messages,
|
|
199
|
+
model,
|
|
200
|
+
}: {
|
|
201
|
+
messages: (string | ChatCompletionMessageParam)[];
|
|
202
|
+
model?: TiktokenModel;
|
|
203
|
+
}) {
|
|
201
204
|
await this.enforceTokenLimit(messages, model);
|
|
202
|
-
return await OpenAi
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
this.
|
|
206
|
-
this.
|
|
207
|
-
|
|
208
|
-
this.params.logLevel
|
|
209
|
-
);
|
|
205
|
+
return await new OpenAi({
|
|
206
|
+
history: this.history,
|
|
207
|
+
functions: this.functions,
|
|
208
|
+
messageModerators: this.messageModerators,
|
|
209
|
+
logLevel: this.params.logLevel,
|
|
210
|
+
}).generateResponse({ messages, model });
|
|
210
211
|
}
|
|
211
212
|
|
|
212
|
-
async generateStreamingResponse(
|
|
213
|
-
messages
|
|
214
|
-
model
|
|
215
|
-
|
|
216
|
-
|
|
213
|
+
async generateStreamingResponse({
|
|
214
|
+
messages,
|
|
215
|
+
model,
|
|
216
|
+
...rest
|
|
217
|
+
}: {
|
|
218
|
+
messages: (string | ChatCompletionMessageParam)[];
|
|
219
|
+
model?: TiktokenModel;
|
|
220
|
+
abortSignal?: AbortSignal;
|
|
221
|
+
onUsageData?: (usageData: UsageData) => Promise<void>;
|
|
222
|
+
}) {
|
|
217
223
|
await this.enforceTokenLimit(messages, model);
|
|
218
|
-
return await OpenAi
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.
|
|
222
|
-
this.
|
|
223
|
-
|
|
224
|
-
abortSignal,
|
|
225
|
-
this.params.logLevel
|
|
226
|
-
);
|
|
224
|
+
return await new OpenAi({
|
|
225
|
+
history: this.history,
|
|
226
|
+
functions: this.functions,
|
|
227
|
+
messageModerators: this.messageModerators,
|
|
228
|
+
logLevel: this.params.logLevel,
|
|
229
|
+
}).generateStreamingResponse({ messages, model, ...rest });
|
|
227
230
|
}
|
|
228
231
|
|
|
229
|
-
async generateCode(description: string[]
|
|
230
|
-
this.logger.
|
|
231
|
-
const code = await OpenAi
|
|
232
|
-
|
|
232
|
+
async generateCode({ description, model }: { description: string[]; model?: TiktokenModel }) {
|
|
233
|
+
this.logger.debug({ message: `Generating code`, obj: { description } });
|
|
234
|
+
const code = await new OpenAi({
|
|
235
|
+
history: this.history,
|
|
236
|
+
functions: this.functions,
|
|
237
|
+
messageModerators: this.messageModerators,
|
|
238
|
+
logLevel: this.params.logLevel,
|
|
239
|
+
}).generateCode({
|
|
240
|
+
messages: description,
|
|
233
241
|
model,
|
|
234
|
-
this.
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
!this.generatedCode,
|
|
238
|
-
this.params.logLevel
|
|
239
|
-
);
|
|
240
|
-
this.logger.info({ message: `Generated code:\n${code.slice(0, 150)}${code.length > 150 ? '...' : ''}` });
|
|
242
|
+
includeSystemMessages: !this.generatedCode,
|
|
243
|
+
});
|
|
244
|
+
this.logger.debug({ message: `Generated code`, obj: { code } });
|
|
241
245
|
this.generatedCode = true;
|
|
242
246
|
return code;
|
|
243
247
|
}
|
|
244
248
|
|
|
245
|
-
async updateCodeFromFile(
|
|
246
|
-
codeToUpdateFilePath
|
|
247
|
-
dependencyCodeFilePaths
|
|
248
|
-
description
|
|
249
|
-
model
|
|
250
|
-
|
|
249
|
+
async updateCodeFromFile({
|
|
250
|
+
codeToUpdateFilePath,
|
|
251
|
+
dependencyCodeFilePaths,
|
|
252
|
+
description,
|
|
253
|
+
model,
|
|
254
|
+
}: {
|
|
255
|
+
codeToUpdateFilePath: string;
|
|
256
|
+
dependencyCodeFilePaths: string[];
|
|
257
|
+
description: string;
|
|
258
|
+
model?: TiktokenModel;
|
|
259
|
+
}) {
|
|
251
260
|
const codeToUpdate = await Fs.readFile(codeToUpdateFilePath);
|
|
252
261
|
let dependencyDescription = `Assume the following exists:\n`;
|
|
253
262
|
for (const dependencyCodeFilePath of dependencyCodeFilePaths) {
|
|
@@ -255,41 +264,39 @@ export class Conversation {
|
|
|
255
264
|
dependencyDescription += dependencCode + '\n\n';
|
|
256
265
|
}
|
|
257
266
|
|
|
258
|
-
this.logger.
|
|
259
|
-
return await this.updateCode(codeToUpdate, dependencyDescription + description, model);
|
|
267
|
+
this.logger.debug({ message: `Updating code from file`, obj: { codeToUpdateFilePath } });
|
|
268
|
+
return await this.updateCode({ code: codeToUpdate, description: dependencyDescription + description, model });
|
|
260
269
|
}
|
|
261
270
|
|
|
262
|
-
async updateCode(code: string
|
|
263
|
-
this.logger.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
271
|
+
async updateCode({ code, description, model }: { code: string; description: string; model?: TiktokenModel }) {
|
|
272
|
+
this.logger.debug({ message: `Updating code`, obj: { description, code } });
|
|
273
|
+
const updatedCode = await new OpenAi({
|
|
274
|
+
history: this.history,
|
|
275
|
+
functions: this.functions,
|
|
276
|
+
messageModerators: this.messageModerators,
|
|
277
|
+
logLevel: this.params.logLevel,
|
|
278
|
+
}).updateCode({
|
|
267
279
|
code,
|
|
268
280
|
description,
|
|
269
281
|
model,
|
|
270
|
-
this.
|
|
271
|
-
this.functions,
|
|
272
|
-
this.messageModerators,
|
|
273
|
-
!this.generatedCode,
|
|
274
|
-
this.params.logLevel
|
|
275
|
-
);
|
|
276
|
-
this.logger.info({
|
|
277
|
-
message: `Updated code:\n${updatedCode.slice(0, 150)}${updatedCode.length > 150 ? '...' : ''}`,
|
|
282
|
+
includeSystemMessages: !this.generatedCode,
|
|
278
283
|
});
|
|
284
|
+
this.logger.debug({ message: `Updated code`, obj: { updatedCode } });
|
|
279
285
|
this.generatedCode = true;
|
|
280
286
|
return updatedCode;
|
|
281
287
|
}
|
|
282
288
|
|
|
283
|
-
async generateList(description: string[]
|
|
284
|
-
const list = await OpenAi
|
|
285
|
-
|
|
289
|
+
async generateList({ description, model }: { description: string[]; model?: TiktokenModel }) {
|
|
290
|
+
const list = await new OpenAi({
|
|
291
|
+
history: this.history,
|
|
292
|
+
functions: this.functions,
|
|
293
|
+
messageModerators: this.messageModerators,
|
|
294
|
+
logLevel: this.params.logLevel,
|
|
295
|
+
}).generateList({
|
|
296
|
+
messages: description,
|
|
286
297
|
model,
|
|
287
|
-
this.
|
|
288
|
-
|
|
289
|
-
this.messageModerators,
|
|
290
|
-
!this.generatedList,
|
|
291
|
-
this.params.logLevel
|
|
292
|
-
);
|
|
298
|
+
includeSystemMessages: !this.generatedList,
|
|
299
|
+
});
|
|
293
300
|
this.generatedList = true;
|
|
294
301
|
return list;
|
|
295
302
|
}
|