@proteinjs/conversation 1.7.5 → 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.
Files changed (36) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/src/CodegenConversation.d.ts.map +1 -1
  6. package/dist/src/CodegenConversation.js +9 -6
  7. package/dist/src/CodegenConversation.js.map +1 -1
  8. package/dist/src/Conversation.d.ts +30 -6
  9. package/dist/src/Conversation.d.ts.map +1 -1
  10. package/dist/src/Conversation.js +119 -47
  11. package/dist/src/Conversation.js.map +1 -1
  12. package/dist/src/OpenAi.d.ts +57 -15
  13. package/dist/src/OpenAi.d.ts.map +1 -1
  14. package/dist/src/OpenAi.js +148 -124
  15. package/dist/src/OpenAi.js.map +1 -1
  16. package/dist/src/OpenAiStreamProcessor.d.ts +5 -1
  17. package/dist/src/OpenAiStreamProcessor.d.ts.map +1 -1
  18. package/dist/src/OpenAiStreamProcessor.js +25 -5
  19. package/dist/src/OpenAiStreamProcessor.js.map +1 -1
  20. package/dist/src/UsageData.d.ts +38 -0
  21. package/dist/src/UsageData.d.ts.map +1 -0
  22. package/dist/src/UsageData.js +47 -0
  23. package/dist/src/UsageData.js.map +1 -0
  24. package/dist/src/code_template/Code.js +1 -1
  25. package/dist/src/code_template/Code.js.map +1 -1
  26. package/dist/test/openai/openai.generateList.test.js +1 -1
  27. package/dist/test/openai/openai.generateList.test.js.map +1 -1
  28. package/index.ts +1 -0
  29. package/package.json +3 -2
  30. package/src/CodegenConversation.ts +6 -3
  31. package/src/Conversation.ts +87 -80
  32. package/src/OpenAi.ts +197 -210
  33. package/src/OpenAiStreamProcessor.ts +25 -6
  34. package/src/UsageData.ts +76 -0
  35. package/src/code_template/Code.ts +1 -1
  36. 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
- _this.handleToolCalls();
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.destroyStreams();
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.destroyStreams();
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.destroyStreams();
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":"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"}
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;4BAAhF,sBAAO,SAAyE,EAAC;;;;KAClF;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"}
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;gBAAE,qBAAM,eAAM,CAAC,YAAY,CAAC,CAAC,oDAAoD,CAAC,CAAC,EAAA;;gBAAzF,kBAAO,CAAC,SAAiF,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC,IAAI,CACxG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAClB,CAAC;;;;KACH,CAAC,CAAC"}
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": "1.7.5",
3
+ "version": "2.0.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "publishConfig": {
@@ -36,5 +36,6 @@
36
36
  "readline-sync": "1.4.10",
37
37
  "tiktoken": "1.0.15",
38
38
  "typescript": "5.2.2"
39
- }
39
+ },
40
+ "gitHead": "244af0406c34b582f0f81c9a7d11cfb3e62ec255"
40
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 response = await conversation.generateResponse([initialUserInput], CodegenConversation.MODEL);
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(response);
33
- response = await conversation.generateResponse([userInput], CodegenConversation.MODEL);
35
+ const userInput = this.respondToUser(responseObject.message);
36
+ responseObject = await conversation.generateResponse({ messages: [userInput], model: CodegenConversation.MODEL });
34
37
  }
35
38
  }
36
39
 
@@ -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.generateResponse(
139
- [summarizeConversationRequest],
140
- model,
141
- this.history,
142
- this.functions,
143
- this.messageModerators,
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.generateResponse(
148
- [referenceSummaryRequest],
149
- model,
150
- this.history,
151
- this.functions,
152
- this.messageModerators,
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(messages: (string | ChatCompletionMessageParam)[], model?: TiktokenModel) {
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.generateResponse(
203
- messages,
204
- model,
205
- this.history,
206
- this.functions,
207
- this.messageModerators,
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: (string | ChatCompletionMessageParam)[],
214
- model?: TiktokenModel,
215
- abortSignal?: AbortSignal
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.generateStreamingResponse(
219
- messages,
220
- model,
221
- this.history,
222
- this.functions,
223
- this.messageModerators,
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[], model?: TiktokenModel) {
230
- this.logger.info({ message: `Generating code for description:\n${description.join('\n')}` });
231
- const code = await OpenAi.generateCode(
232
- description,
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.history,
235
- this.functions,
236
- this.messageModerators,
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: string,
247
- dependencyCodeFilePaths: string[],
248
- description: string,
249
- model?: TiktokenModel
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.info({ message: `Updating code from file: ${codeToUpdateFilePath}` });
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, description: string, model?: TiktokenModel) {
263
- this.logger.info({
264
- message: `Updating code:\n${code.slice(0, 150)}${code.length > 150 ? '...' : ''}\nFrom description: ${description}`,
265
- });
266
- const updatedCode = await OpenAi.updateCode(
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.history,
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[], model?: TiktokenModel) {
284
- const list = await OpenAi.generateList(
285
- description,
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.history,
288
- this.functions,
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
  }