supercompat 1.0.4 → 1.0.5

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/dist/index.cjs CHANGED
@@ -443,26 +443,19 @@ var perplexityClientAdapter = function(param) {
443
443
  };
444
444
  // src/adapters/run/completionsRunAdapter/index.ts
445
445
  var import_lodash = __toESM(require("lodash"), 1);
446
- var import_radash4 = require("radash");
446
+ var import_radash3 = require("radash");
447
447
  var import_dayjs = __toESM(require("dayjs"), 1);
448
448
  // src/adapters/run/completionsRunAdapter/messages.ts
449
- var import_radash3 = require("radash");
450
- // src/adapters/run/completionsRunAdapter/serializeMessage.ts
451
449
  var import_radash2 = require("radash");
452
- var serializeToolCalls = function(param) {
453
- var runStep = param.runStep;
454
- if (runStep.step_details.type !== "tool_calls") return [];
455
- var functionToolCalls = runStep.step_details.tool_calls.filter(function(tc) {
456
- return tc.type === "function";
457
- });
458
- return functionToolCalls.map(function(toolCall) {
459
- return {
460
- tool_call_id: toolCall.id,
461
- role: "tool",
462
- name: toolCall.function.name,
463
- content: toolCall.function.output
464
- };
465
- });
450
+ // src/adapters/run/completionsRunAdapter/serializeMessage.ts
451
+ var serializeToolCall = function(param) {
452
+ var toolCall = param.toolCall;
453
+ return {
454
+ tool_call_id: toolCall.id,
455
+ role: "tool",
456
+ name: toolCall.function.name,
457
+ content: toolCall.function.output
458
+ };
466
459
  };
467
460
  var serializeMessageWithContent = function(param) {
468
461
  var message = param.message;
@@ -490,21 +483,25 @@ var serializeMessage = function(param) {
490
483
  message: message
491
484
  })
492
485
  ];
493
- if (!message.run) return result;
494
- if ((0, import_radash2.isEmpty)((_message_metadata = message.metadata) === null || _message_metadata === void 0 ? void 0 : _message_metadata.toolCalls)) return result;
495
- var toolCallsRunSteps = message.run.runSteps.filter(function(runStep) {
496
- return runStep.type === "tool_calls";
497
- });
498
- toolCallsRunSteps.forEach(function(runStep) {
499
- var _result;
500
- (_result = result).push.apply(_result, _to_consumable_array(serializeToolCalls({
501
- runStep: runStep
502
- })));
503
- });
504
- console.dir({
505
- result: result
506
- }, {
507
- depth: null
486
+ var run = message.run;
487
+ if (!run) return result;
488
+ var messageToolCalls = ((_message_metadata = message.metadata) === null || _message_metadata === void 0 ? void 0 : _message_metadata.toolCalls) || [];
489
+ messageToolCalls.forEach(function(tc) {
490
+ var runStep = run.runSteps.find(function(rs) {
491
+ if (rs.type !== "tool_calls") return false;
492
+ return rs.step_details.tool_calls.some(function(rsTc) {
493
+ if (rsTc.type !== "function") return false;
494
+ return rsTc.id === tc.id;
495
+ });
496
+ });
497
+ if (!runStep) return;
498
+ var toolCall = runStep.step_details.tool_calls.find(function(rsTc) {
499
+ if (rsTc.type !== "function") return false;
500
+ return rsTc.id === tc.id;
501
+ });
502
+ result.push(serializeToolCall({
503
+ toolCall: toolCall
504
+ }));
508
505
  });
509
506
  return result;
510
507
  };
@@ -522,7 +519,7 @@ var messages = function() {
522
519
  content: run.instructions
523
520
  }
524
521
  ] : [])).concat;
525
- _2 = (0, import_radash3.flat);
522
+ _2 = (0, import_radash2.flat);
526
523
  return [
527
524
  4,
528
525
  getMessages2()
@@ -552,7 +549,7 @@ var messages = function() {
552
549
  // src/adapters/run/completionsRunAdapter/index.ts
553
550
  var updatedToolCall = function(param) {
554
551
  var toolCall = param.toolCall, delta = param.delta;
555
- if (!toolCall) return (0, import_radash4.omit)(delta, [
552
+ if (!toolCall) return (0, import_radash3.omit)(delta, [
556
553
  "index"
557
554
  ]);
558
555
  var result = import_lodash.default.cloneDeep(toolCall);
@@ -584,9 +581,9 @@ var toolCallsData = function(param) {
584
581
  if (!prevToolCalls) {
585
582
  return delta.tool_calls.map(function(tc) {
586
583
  return _object_spread({
587
- id: (0, import_radash4.uid)(24),
584
+ id: (0, import_radash3.uid)(24),
588
585
  type: "function"
589
- }, (0, import_radash4.omit)(tc, [
586
+ }, (0, import_radash3.omit)(tc, [
590
587
  "index"
591
588
  ]));
592
589
  });
@@ -644,7 +641,7 @@ var completionsRunAdapter = function() {
644
641
  case 1:
645
642
  opts = _object_spread.apply(void 0, [
646
643
  (_tmp.messages = _state.sent(), _tmp.model = run.model, _tmp.stream = true, _tmp),
647
- (0, import_radash4.isEmpty)(run.tools) ? {} : {
644
+ (0, import_radash3.isEmpty)(run.tools) ? {} : {
648
645
  tools: run.tools
649
646
  }
650
647
  ]);
@@ -828,7 +825,7 @@ var completionsRunAdapter = function() {
828
825
  type: "tool_calls",
829
826
  tool_calls: delta.tool_calls.map(function(tc) {
830
827
  return _object_spread({
831
- id: (0, import_radash4.uid)(24),
828
+ id: (0, import_radash3.uid)(24),
832
829
  type: "function"
833
830
  }, tc);
834
831
  })
@@ -937,7 +934,7 @@ var completionsRunAdapter = function() {
937
934
  ];
938
935
  case 22:
939
936
  message = _state.sent();
940
- if ((0, import_radash4.isEmpty)(message.toolCalls)) {
937
+ if ((0, import_radash3.isEmpty)(message.toolCalls)) {
941
938
  return [
942
939
  2,
943
940
  onEvent2({
@@ -1044,10 +1041,10 @@ var create = function(param) {
1044
1041
  });
1045
1042
  };
1046
1043
  // src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts
1047
- var import_radash6 = require("radash");
1044
+ var import_radash5 = require("radash");
1048
1045
  // src/adapters/storage/prismaStorageAdapter/beta/threads/messages/serializeMessage.ts
1049
1046
  var import_dayjs4 = __toESM(require("dayjs"), 1);
1050
- var import_radash5 = require("radash");
1047
+ var import_radash4 = require("radash");
1051
1048
  var serializeMessage2 = function(param) {
1052
1049
  var message = param.message;
1053
1050
  var _message_metadata;
@@ -1065,9 +1062,9 @@ var serializeMessage2 = function(param) {
1065
1062
  run_id: message.runId,
1066
1063
  file_ids: message.fileIds,
1067
1064
  status: message.status.toLowerCase(),
1068
- metadata: (0, import_radash5.assign)((_message_metadata = message.metadata) !== null && _message_metadata !== void 0 ? _message_metadata : {}, {
1065
+ metadata: (0, import_radash4.assign)((_message_metadata = message.metadata) !== null && _message_metadata !== void 0 ? _message_metadata : {}, message.toolCalls ? {
1069
1066
  toolCalls: message.toolCalls
1070
- })
1067
+ } : {})
1071
1068
  };
1072
1069
  };
1073
1070
  // src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts
@@ -1085,7 +1082,7 @@ var list = function(param) {
1085
1082
  args[_key] = _arguments[_key];
1086
1083
  }
1087
1084
  threadId = args[0];
1088
- _ref = (0, import_radash6.assign)({
1085
+ _ref = (0, import_radash5.assign)({
1089
1086
  // @ts-ignore-next-line
1090
1087
  limit: 20,
1091
1088
  order: "desc"
@@ -1116,7 +1113,7 @@ var list = function(param) {
1116
1113
  return false;
1117
1114
  },
1118
1115
  body: {
1119
- last_id: (_id = (_this = (0, import_radash6.last)(messages3)) === null || _this === void 0 ? void 0 : _this.id) !== null && _id !== void 0 ? _id : null
1116
+ last_id: (_id = (_this = (0, import_radash5.last)(messages3)) === null || _this === void 0 ? void 0 : _this.id) !== null && _id !== void 0 ? _id : null
1120
1117
  }
1121
1118
  }
1122
1119
  ];
@@ -1187,7 +1184,7 @@ var messages2 = function(param) {
1187
1184
  };
1188
1185
  };
1189
1186
  // src/adapters/storage/prismaStorageAdapter/beta/threads/runs/list.ts
1190
- var import_radash7 = require("radash");
1187
+ var import_radash6 = require("radash");
1191
1188
  // src/adapters/storage/prismaStorageAdapter/beta/threads/runs/serializeRun.ts
1192
1189
  var import_dayjs5 = __toESM(require("dayjs"), 1);
1193
1190
  var serializeRun = function(param) {
@@ -1230,7 +1227,7 @@ var list2 = function(param) {
1230
1227
  args[_key] = _arguments[_key];
1231
1228
  }
1232
1229
  threadId = args[0];
1233
- _ref = (0, import_radash7.assign)({
1230
+ _ref = (0, import_radash6.assign)({
1234
1231
  // @ts-ignore-next-line
1235
1232
  limit: 20,
1236
1233
  order: "desc"
@@ -1261,7 +1258,7 @@ var list2 = function(param) {
1261
1258
  return false;
1262
1259
  },
1263
1260
  body: {
1264
- last_id: (_id = (_this = (0, import_radash7.last)(runs2)) === null || _this === void 0 ? void 0 : _this.id) !== null && _id !== void 0 ? _id : null
1261
+ last_id: (_id = (_this = (0, import_radash6.last)(runs2)) === null || _this === void 0 ? void 0 : _this.id) !== null && _id !== void 0 ? _id : null
1265
1262
  }
1266
1263
  }
1267
1264
  ];
@@ -1271,7 +1268,7 @@ var list2 = function(param) {
1271
1268
  };
1272
1269
  // src/adapters/storage/prismaStorageAdapter/beta/threads/runs/create.ts
1273
1270
  var import_dayjs6 = __toESM(require("dayjs"), 1);
1274
- var import_radash8 = require("radash");
1271
+ var import_radash7 = require("radash");
1275
1272
  var create3 = function(param) {
1276
1273
  var prisma = param.prisma;
1277
1274
  return /*#__PURE__*/ _async_to_generator(function() {
@@ -1299,7 +1296,7 @@ var create3 = function(param) {
1299
1296
  if (!assistant) {
1300
1297
  throw new Error("Assistant not found");
1301
1298
  }
1302
- _ref = (0, import_radash8.assign)({
1299
+ _ref = (0, import_radash7.assign)({
1303
1300
  model: assistant.modelSlug,
1304
1301
  instructions: "",
1305
1302
  additional_instructions: null
@@ -1344,7 +1341,7 @@ var create3 = function(param) {
1344
1341
  });
1345
1342
  };
1346
1343
  // src/adapters/storage/prismaStorageAdapter/beta/threads/runs/createAndStream.ts
1347
- var import_radash9 = require("radash");
1344
+ var import_radash8 = require("radash");
1348
1345
  var import_dayjs8 = __toESM(require("dayjs"), 1);
1349
1346
  // src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunInProgress.ts
1350
1347
  var threadRunInProgress = function(param) {
@@ -1715,7 +1712,7 @@ var createAndStream = function(param) {
1715
1712
  if (!assistant) {
1716
1713
  throw new Error("Assistant not found");
1717
1714
  }
1718
- _ref = (0, import_radash9.assign)({
1715
+ _ref = (0, import_radash8.assign)({
1719
1716
  model: assistant.modelSlug,
1720
1717
  instructions: "",
1721
1718
  additional_instructions: null
@@ -2208,7 +2205,7 @@ var submitToolOutputsStream = function(param) {
2208
2205
  };
2209
2206
  };
2210
2207
  // src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/list.ts
2211
- var import_radash10 = require("radash");
2208
+ var import_radash9 = require("radash");
2212
2209
  var list3 = function(param) {
2213
2210
  var prisma = param.prisma;
2214
2211
  return /*#__PURE__*/ _async_to_generator(function() {
@@ -2224,7 +2221,7 @@ var list3 = function(param) {
2224
2221
  }
2225
2222
  threadId = args[0];
2226
2223
  runId = args[1];
2227
- _ref = (0, import_radash10.assign)({
2224
+ _ref = (0, import_radash9.assign)({
2228
2225
  // @ts-ignore-next-line
2229
2226
  limit: 20,
2230
2227
  order: "desc"
@@ -2256,7 +2253,7 @@ var list3 = function(param) {
2256
2253
  return false;
2257
2254
  },
2258
2255
  body: {
2259
- last_id: (_id = (_this = (0, import_radash10.last)(runSteps)) === null || _this === void 0 ? void 0 : _this.id) !== null && _id !== void 0 ? _id : null
2256
+ last_id: (_id = (_this = (0, import_radash9.last)(runSteps)) === null || _this === void 0 ? void 0 : _this.id) !== null && _id !== void 0 ? _id : null
2260
2257
  }
2261
2258
  }
2262
2259
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/supercompat.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages.ts","../src/adapters/run/completionsRunAdapter/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/createAndStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunInProgress.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunFailed.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunRequiresAction.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/serializeRunStep.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/getMessages.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputs.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputsStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/index.ts","../src/adapters/storage/prismaStorageAdapter/index.ts"],"names":["messages","import_radash","content","getMessages","_","onEvent","dayjs","import_dayjs","serializeMessage","create","list","runs","status","prisma"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAA+B;AAGxB,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,UAKE;AAAA,EACE;AAAA,EACA,QAAQ;AAAA,IACN,gBAAY,sBAAO,YAAY,EAAE,OAAO,CAAC;AAAA,EAC3C,CAAC;AACH;;;ACfK,IAAM,uBAAuB,CAAC;AAAA,EACnC;AACF,OAEO;AAAA,EACL,MAAM;AAAA,IACJ,aAAa;AAAA;AAAA,MAEX,QAAQ,IAAI;AAAA;AAAA,QAET,KAAK,CAAC,EAAE,SAAS,QAAQ,WAAW,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG,IAAI;AAAA;AAAA,IAExE;AAAA,EACF;AACF;;;ACfA,IAAM,iBAAiB,CAAC,aAAa,QAAQ;AAEtC,IAAM,0BAA0B,CAAC;AAAA,EACtC;AACF,OAEO;AAAA,EACL,MAAM;AAAA,IACJ,aAAa;AAAA,MACX,QAAQ,IAAI,SAAuG;AACjH,cAAM,CAAC,UAAU,GAAG,QAAQ,IAAI;AAEhC,cAAMA,YAAW,CAAC;AAElB,iBAAS,SAAS,QAAQ,CAAC,SAAiD,UAAkB;AAC5F,UAAAA,UAAS,KAAK,OAAO;AAErB,gBAAM,cAAc,SAAS,SAAS,QAAQ,CAAC;AAC/C,cAAI,CAAC;AAAa;AAElB,cAAI,QAAQ,SAAS,UAAU,YAAY,SAAS,QAAQ;AAC1D,YAAAA,UAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,SAAS;AAAA,YACX,CAAC;AAAA,UACH,WAAW,eAAe,SAAS,QAAQ,IAAI,KAAK,eAAe,SAAS,YAAY,IAAI,GAAG;AAC7F,YAAAA,UAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,SAAS;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAED,eAAO,WAAW,KAAK,YAAY,OAAO;AAAA,UACxC,GAAG;AAAA,UACH,UAAAA;AAAA,QACF,GAAG,GAAG,QAAQ;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;;;AC1CA,oBAAc;AACd,IAAAC,iBAAmC;AACnC,mBAAkB;;;ACDlB,IAAAA,iBAAqB;;;ACArB,IAAAA,iBAAwB;AAGxB,IAAM,qBAAqB,CAAC;AAAA,EAC1B;AACF,MAEM;AACJ,MAAI,QAAQ,aAAa,SAAS;AAAc,WAAO,CAAC;AAExD,QAAM,oBAAoB,QAAQ,aAAa,WAAW,OAAO,QAAM,GAAG,SAAS,UAAU;AAE7F,SAAO,kBAAkB,IAAI,CAAC,cAAc;AAAA,IAC1C,cAAc,SAAS;AAAA,IACvB,MAAM;AAAA,IACN,MAAM,SAAS,SAAS;AAAA,IACxB,SAAS,SAAS,SAAS;AAAA,EAC7B,EAAE;AACJ;AAEA,IAAM,8BAA8B,CAAC;AAAA,EACnC;AACF,OAEO;AAAA,EACL,MAAM,QAAQ;AAAA,EACd,SAAS,iBAAiB;AAAA,IACxB,SAAS,QAAQ;AAAA,EACnB,CAAC;AAAA,EACD,GAAI,SAAS,UAAU,YAAY,EAAE,YAAY,QAAQ,SAAS,UAAU,IAAI,CAAC;AACnF;AAEA,IAAM,mBAAmB,CAAC;AAAA,EACxB;AACF,MAEM,QAAQ,IAAI,CAACC,aAAYA,SAAQ,KAAK,KAAK,EAAE,KAAK,IAAI;AAErD,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,MAEM;AACJ,QAAM,SAAS,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAI,CAAC,QAAQ;AAAK,WAAO;AACzB,UAAI,wBAAQ,QAAQ,UAAU,SAAS;AAAG,WAAO;AAEjD,QAAM,oBAAoB,QAAQ,IAAI,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,YAAY;AAEhG,oBAAkB,QAAQ,CAAC,YAAY;AACrC,WAAO,KAAK,GAAG,mBAAmB,EAAE,QAAQ,CAAC,CAAC;AAAA,EAChD,CAAC;AAED,UAAQ,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK,CAAC;AAEvC,SAAO;AACT;;;ADrDO,IAAM,WAAW,OAAO;AAAA,EAC7B;AAAA,EACA,aAAAC;AACF,MAIE;AAAA,EACE,GAAI,IAAI,eAAe,CAAC;AAAA,IACtB,MAAM;AAAA,IACN,SAAS,IAAI;AAAA,EACf,CAAC,IAAI,CAAC;AAAA,EACN,OAAG,sBAAM,MAAMA,aAAY,GAAG,IAAI,CAAC,YAA4B,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/F;;;ADXF,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,MAAI,CAAC;AAAU,eAAO,qBAAK,OAAO,CAAC,OAAO,CAAC;AAI3C,QAAM,SAAS,cAAAC,QAAE,UAAU,QAAQ;AAEnC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,QAAQ,GAAG;AACzD,WAAO,SAAS,GAAG,IAAI,GAAG,OAAO,SAAS,GAAG,KAAK,EAAE,GAAG,KAAK;AAAA,EAC9D;AAEA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AACF,MAGM;AACJ,MAAI,CAAC,eAAe;AAClB,WAAO,MAAM,WAAW,IAAI,CAAC,QAAa;AAAA,MACxC,QAAI,oBAAI,EAAE;AAAA,MACV,MAAM;AAAA,MACN,OAAG,qBAAK,IAAI,CAAC,OAAO,CAAC;AAAA,IACvB,EAAE;AAAA,EACJ;AAEA,QAAM,eAAe,cAAAA,QAAE,UAAU,aAAa;AAE9C,aAAW,gBAAgB,MAAM,YAAY;AAC3C,iBAAa,aAAa,KAAK,IAAI,gBAAgB;AAAA,MACjD,UAAU,aAAa,aAAa,KAAK;AAAA,MACzC,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,IAAM,wBAAwB,OAAO;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,aAAAF;AACF,MAKM;AACJ,MAAI,IAAI,WAAW;AAAU;AAE7B,EAAAE,SAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,OAAO;AAAA,IACX,UAAU,MAAM,SAAS;AAAA,MACvB;AAAA,MACA,aAAAF;AAAA,IACF,CAAC;AAAA,IACD,OAAO,IAAI;AAAA,IACX,QAAQ;AAAA,IACR,OAAI,wBAAQ,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,MAAM;AAAA,EACnD;AAEA,UAAQ,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,KAAK,CAAC;AACrC,MAAI;AAEJ,MAAI;AACF,uBAAmB,MAAM,OAAO,KAAK,YAAY,OAAO,IAAI;AAAA,EAC9D,SAAQ,GAAG;AACT,YAAQ,MAAM,CAAC;AACf,WAAOE,SAAQ;AAAA,MACb,OAAO;AAAA,MACP,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,eAAW,aAAAC,SAAM,EAAE,KAAK;AAAA,QACxB,QAAQ;AAAA,QACR,YAAa,EAA0D;AAAA,MACzE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,UAAU,MAAMD,SAAQ;AAAA,IAC1B,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,QAAQ,IAAI;AAAA,MACZ,gBAAY,aAAAC,SAAM,EAAE,KAAK;AAAA,MACzB,cAAc,IAAI;AAAA,MAClB,eAAe;AAAA,MACf,oBAAoB;AAAA,MACpB,UAAU,CAAC;AAAA,MACX,UAAU,CAAC;AAAA,MACX,WAAW,IAAI;AAAA,MACf,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,IAAI,aAAa,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC;AAAA,MAChE,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,EAAAD,SAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ,IAAI;AAAA,MACZ,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,MACf,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,kBAAc,aAAAC,SAAM,EAAE,KAAK;AAAA,MAC3B,gBAAY,aAAAA,SAAM,EAAE,KAAK;AAAA,MACzB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU,CAAC;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,MACP,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,kBAAkB;AAAA,UAChB,YAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI;AACJ,MAAI,iBAAiB;AACrB,MAAI;AAEJ,UAAQ,IAAI,EAAE,iBAAiB,GAAG,EAAE,OAAO,KAAK,CAAC;AACjD,mBAAiB,SAAS,kBAAkB;AAC1C,UAAM,QAAQ,MAAM,QAAQ,CAAC,EAAE;AAE/B,QAAI,MAAM,SAAS;AACjB,uBAAiB,GAAG,cAAc,GAAG,MAAM,WAAW,EAAE;AAAA,IAC1D;AAEA,QAAI,MAAM,YAAY;AACpB,UAAI,CAAC,kBAAkB;AACrB,2BAAmB,MAAMD,SAAQ;AAAA,UAC/B,OAAO;AAAA,UACP,MAAM;AAAA,YACJ,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,QAAQ,IAAI;AAAA,YACZ,cAAc,IAAI;AAAA,YAClB,WAAW,IAAI;AAAA,YACf,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,gBAAY,aAAAC,SAAM,EAAE,KAAK;AAAA,YACzB,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,UAAU,CAAC;AAAA,YACX,WAAW;AAAA,YACX,cAAc;AAAA,YACd,OAAO;AAAA,YACP,cAAc;AAAA,cACZ,MAAM;AAAA,cACN,YAAY,CAAC;AAAA,YACf;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAEA,MAAAD,SAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,QAAQ,IAAI;AAAA,UACZ,IAAI,iBAAiB;AAAA,UACrB,OAAO;AAAA,YACL,cAAc;AAAA,cACZ,MAAM;AAAA,cACN,YAAY,MAAM,WAAW,IAAI,CAAC,QAAa;AAAA,gBAC7C,QAAI,oBAAI,EAAE;AAAA,gBACV,MAAM;AAAA,gBACN,GAAG;AAAA,cACL,EAAE;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAwD;AAExD,yBAAmB,cAAc,EAAE,eAAe,kBAAkB,MAAM,CAAC;AAAA,IAC7E;AAEA,QAAI,MAAM,SAAS;AACjB,MAAAA,SAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,UACJ,IAAI,QAAQ;AAAA,UACZ,OAAO;AAAA,YACL,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,MAAM;AAAA,kBACJ,OAAO,MAAM;AAAA,gBACf;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAwD;AAAA,IAC1D;AAAA,EACF;AAEA,YAAU,MAAMA,SAAQ;AAAA,IACtB,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,gBAAgB,aAAa,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC;AAAA,MAC5E,YAAY;AAAA,IACd;AAAA,EACF,CAAC;AAED,UAAI,wBAAQ,QAAQ,SAAS,GAAG;AAC9B,WAAOA,SAAQ;AAAA,MACb,OAAO;AAAA,MACP,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,kBAAc,aAAAC,SAAM,EAAE,KAAK;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAOD,SAAQ;AAAA,IACb,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,qBAAqB;AAAA,UACnB,YAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AG1QA,IAAAE,gBAAkB;;;ACAlB,IAAAA,gBAAkB;AAEX,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,OAEO;AAAA,EACL,IAAI,OAAO;AAAA,EACX,QAAQ;AAAA,EACR,gBAAY,cAAAD,SAAM,OAAO,SAAS,EAAE,KAAK;AAAA,EACzC,UAAU,OAAO;AACnB;;;ADPO,IAAM,SAAS,CAAC;AAAA,EACrB;AACF,MAEM,UAAU,SAAwG;AACtH,QAAM;AAAA;AAAA,IAEJ,MAAM;AAAA,MACJ,UAAAN;AAAA,MACA;AAAA,IACF;AAAA,EACF,IAAI,KAAK,CAAC;AAEV,QAAM,uBAAmB,cAAAM,SAAM,EAAE,SAASN,UAAS,QAAQ,SAAS,EAAE,OAAO;AAE7E,QAAM,SAAS,MAAM,OAAO,OAAO,OAAO;AAAA,IACxC,MAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT,SAAS;AAAA,UACP,IAAI,SAAS;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,QAAQA,UAAS,IAAI,CAAC,SAAiD,WAAmB;AAAA,UACxF,MAAM,QAAQ;AAAA,UACd,SAAS;AAAA,YAAC;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,gBACJ,aAAa,CAAC;AAAA,gBACd,OAAO,QAAQ;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,UAAU,QAAQ;AAAA,UAClB,eAAW,cAAAM,SAAM,gBAAgB,EAAE,IAAI,OAAO,SAAS,EAAE,OAAO;AAAA,QAClE,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,gBAAgB,EAAE,OAAO,CAAC;AACnC;;;AE9CA,IAAAL,iBAA6B;;;ACD7B,IAAAM,gBAAkB;AAElB,IAAAN,iBAAuB;AAEhB,IAAMO,oBAAmB,CAAC;AAAA,EAC/B;AACF,OAEO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,QAAQ;AAAA,EACR,gBAAY,cAAAF,SAAM,QAAQ,SAAS,EAAE,KAAK;AAAA,EAC1C,WAAW,QAAQ;AAAA,EACnB,cAAc,QAAQ,kBAAc,cAAAA,SAAM,QAAQ,WAAW,EAAE,KAAK,IAAI;AAAA,EACxE,eAAe,QAAQ,mBAAe,cAAAA,SAAM,QAAQ,YAAY,EAAE,KAAK,IAAI;AAAA,EAC3E,oBAAoB,QAAQ;AAAA,EAC5B,MAAM,QAAQ,KAAK,YAAY;AAAA,EAC/B,SAAS,QAAQ;AAAA,EACjB,cAAc,QAAQ;AAAA,EACtB,QAAQ,QAAQ;AAAA,EAChB,UAAU,QAAQ;AAAA,EAClB,QAAQ,QAAQ,OAAO,YAAY;AAAA,EACnC,cAAU,uBAAO,QAAQ,YAAgC,CAAC,GAAG,EAAE,WAAW,QAAQ,UAAU,CAAC;AAC/F;;;ADnBO,IAAM,OAAO,CAAC;AAAA,EACnB;AACF,MAEM,UAAU,SAAsH;AACpI,QAAM,WAAW,KAAK,CAAC;AACvB,QAAM;AAAA;AAAA,IAEJ;AAAA;AAAA,IAEA;AAAA,EACF,QAAI,uBAAO;AAAA;AAAA,IAET,OAAO;AAAA,IACP,OAAO;AAAA,EACT,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAEhB,QAAMN,YAAW,MAAM,OAAO,QAAQ,SAAS;AAAA,IAC7C,OAAO;AAAA,MACL;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAGD,SAAO;AAAA,IACL,MAAMA,UAAS,IAAI,CAAC,YAClBQ,kBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,IACD,aAAa,MAAM;AAAA,IACnB,MAAM;AAAA,MACJ,aAAS,qBAAKR,SAAQ,GAAG,MAAM;AAAA,IACjC;AAAA,EACF;AACF;;;AEtCA,IAAM,uBAAuB,CAAC;AAAA,EAC5B;AACF,MAEO;AAAA,EACL;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEO,IAAMS,UAAS,CAAC;AAAA,EACrB;AACF,MAEM,UAAU,SAA0H;AACxI,QAAM,WAAW,KAAK,CAAC;AACvB,QAAM,EAAE,QAAQ,IAAI,KAAK,CAAC;AAE1B,QAAM,UAAU,MAAM,OAAO,QAAQ,OAAO;AAAA,IAC1C,MAAM;AAAA,MACJ;AAAA,MACA,SAAS,qBAAqB,EAAE,QAAQ,CAAC;AAAA,MACzC,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AAED,SAAOD,kBAAiB,EAAE,QAAQ,CAAC;AACrC;;;AC/BO,IAAMR,YAAW,CAAC;AAAA,EACvB;AACF,OAEO;AAAA,EACL,MAAM,KAAK,EAAE,OAAO,CAAC;AAAA,EACrB,QAAQS,QAAO,EAAE,OAAO,CAAC;AAC3B;;;ACTA,IAAAR,iBAA6B;;;ACA7B,IAAAM,gBAAkB;AAEX,IAAM,eAAe,CAAC;AAAA,EAC3B;AACF,OAEO;AAAA,EACL,IAAI,IAAI;AAAA,EACR,QAAQ;AAAA,EACR,gBAAY,cAAAD,SAAM,IAAI,SAAS,EAAE,KAAK;AAAA,EACtC,WAAW,IAAI;AAAA,EACf,cAAc,IAAI;AAAA,EAClB,QAAQ,IAAI,OAAO,YAAY;AAAA,EAC/B,iBAAiB,IAAI;AAAA,EACrB,YAAY,IAAI;AAAA,EAChB,gBAAY,cAAAA,SAAM,IAAI,SAAS,EAAE,KAAK;AAAA,EACtC,YAAY,IAAI,gBAAY,cAAAA,SAAM,IAAI,SAAS,EAAE,KAAK,IAAI;AAAA,EAC1D,cAAc,IAAI,kBAAc,cAAAA,SAAM,IAAI,WAAW,EAAE,KAAK,IAAI;AAAA,EAChE,WAAW,IAAI,eAAW,cAAAA,SAAM,IAAI,QAAQ,EAAE,KAAK,IAAI;AAAA,EACvD,cAAc,IAAI,kBAAc,cAAAA,SAAM,IAAI,WAAW,EAAE,KAAK,IAAI;AAAA,EAChE,OAAO,IAAI;AAAA,EACX,cAAc,IAAI;AAAA;AAAA,EAElB,OAAO,IAAI;AAAA,EACX,UAAU,IAAI;AAAA,EACd,UAAU,IAAI;AAAA,EACd,OAAO,IAAI;AACb;;;ADxBO,IAAMI,QAAO,CAAC;AAAA,EACnB;AACF,MAEM,UAAU,SAA8G;AAC5H,QAAM,WAAW,KAAK,CAAC;AAEvB,QAAM;AAAA;AAAA,IAEJ;AAAA;AAAA,IAEA;AAAA,EACF,QAAI,uBAAO;AAAA;AAAA,IAET,OAAO;AAAA,IACP,OAAO;AAAA,EACT,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAEhB,QAAMC,QAAO,MAAM,OAAO,IAAI,SAAS;AAAA,IACrC,OAAO;AAAA,MACL;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAGD,SAAO;AAAA,IACL,MAAMA,MAAK,IAAI,CAAC,QAAQ,aAAa,EAAE,IAAI,CAAC,CAAC;AAAA,IAC7C,aAAa,MAAM;AAAA,IACnB,MAAM;AAAA,MACJ,aAAS,qBAAKA,KAAI,GAAG,MAAM;AAAA,IAC7B;AAAA,EACF;AACF;;;AEvCA,IAAAJ,gBAAkB;AAClB,IAAAN,iBAAuB;AAGhB,IAAMQ,UAAS,CAAC;AAAA,EACrB;AACF,MAEM,UAAU,SAAkH;AAChI,QAAM,WAAW,KAAK,CAAC;AACvB,QAAM,EAAE,aAAa,IAAI,KAAK,CAAC;AAE/B,QAAM,YAAY,MAAM,OAAO,UAAU,WAAW;AAAA,IAClD,OAAO;AAAA,MACL,IAAI;AAAA,IACN;AAAA,EACF,CAAC;AAED,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA;AAAA,EAEF,QAAI,uBAAO;AAAA,IACT,OAAO,UAAU;AAAA,IACjB,cAAc;AAAA,IACd,yBAAyB;AAAA;AAAA;AAAA,EAG3B,GAAG,KAAK,CAAC,CAAC;AAEV,QAAM,MAAM,MAAM,OAAO,IAAI,OAAO;AAAA,IAClC,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,eAAW,cAAAH,SAAM,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK;AAAA;AAAA,MAEvC;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA,QAAQ;AAAA,QACN,SAAS;AAAA,UACP,IAAI;AAAA,QACN;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,SAAS;AAAA,UACP,IAAI;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,aAAa,EAAE,IAAI,CAAC;AAC7B;;;AC/DA,IAAAL,iBAAuB;AACvB,IAAAM,gBAAkB;;;ACCX,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,aAAW,QAAQ,KAAK;AAExB,SAAO,OAAO,IAAI,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACnBO,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,aAAW,QAAQ,KAAK;AAExB,SAAO,OAAO,IAAI,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,UAAU,MAAM,KAAK;AAAA,MACrB,WAAW,MAAM,KAAK;AAAA,IACxB;AAAA,EACF,CAAC;AACH;;;ACrBO,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,aAAW,QAAQ,KAAK;AAExB,SAAO,OAAO,IAAI,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AACH;;;ACpBO,IAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,aAAW,QAAQ,KAAK;AAExB,SAAO,OAAO,IAAI,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,gBAAgB,MAAM,KAAK;AAAA,IAC7B;AAAA,EACF,CAAC;AACH;;;ACxBA,IAAAA,gBAAkB;AAIX,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAEO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,QAAQ;AAAA,EACR,gBAAY,cAAAD,SAAM,QAAQ,SAAS,EAAE,KAAK;AAAA,EAC1C,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,QAAQ,QAAQ;AAAA,EAChB,MAAM,QAAQ,KAAK,YAAY;AAAA,EAC/B,QAAQ,QAAQ,OAAO,YAAY;AAAA;AAAA,EAEnC,cAAc,QAAQ;AAAA,EACtB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ,gBAAY,cAAAA,SAAM,QAAQ,SAAS,EAAE,KAAK,IAAI;AAAA,EAClE,cAAc,QAAQ,kBAAc,cAAAA,SAAM,QAAQ,WAAW,EAAE,KAAK,IAAI;AAAA,EACxE,WAAW,QAAQ,eAAW,cAAAA,SAAM,QAAQ,QAAQ,EAAE,KAAK,IAAI;AAAA,EAC/D,cAAc,QAAQ,kBAAc,cAAAA,SAAM,QAAQ,WAAW,EAAE,KAAK,IAAI;AAAA,EACxE,UAAU,QAAQ;AAAA,EAClB,OAAO,QAAQ;AACjB;;;ACrBA,IAAM,OAAO,CAAC,UAAiE;AAC7E,MAAI,MAAM,KAAK,SAAS;AAAoB;AAC5C,MAAI,MAAM,KAAK,SAAS;AAAc;AAEtC,QAAM,IAAI,MAAM,iBAAiB,MAAM,KAAK,IAAI,EAAE;AACpD;AAEA,IAAM,SAAS,CAAC,UAAiE;AAC/E,MAAI,MAAM,KAAK,WAAW;AAAe;AACzC,MAAI,MAAM,KAAK,WAAW;AAAa;AACvC,MAAI,MAAM,KAAK,WAAW;AAAa;AACvC,MAAI,MAAM,KAAK,WAAW;AAAU;AACpC,MAAI,MAAM,KAAK,WAAW;AAAW;AAErC,QAAM,IAAI,MAAM,mBAAmB,MAAM,KAAK,MAAM,EAAE;AACxD;AAEO,IAAM,uBAAuB,OAAO;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,QAAM,UAAU,MAAM,OAAO,QAAQ,OAAO;AAAA,IAC1C,MAAM;AAAA,MACJ,OAAO,MAAM,KAAK;AAAA,MAClB,aAAa,MAAM,KAAK;AAAA,MACxB,UAAU,MAAM,KAAK;AAAA,MACrB,MAAM,KAAK,KAAK;AAAA,MAChB,QAAQ,OAAO,KAAK;AAAA,MACpB,aAAa,MAAM,KAAK;AAAA,MACxB,aAAa,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,QAAM,oBAAoB,iBAAiB,EAAE,QAAQ,CAAC;AAEtD,aAAW,QAAQ;AAAA,IACjB,GAAG;AAAA,IACH,MAAM;AAAA,EACR,CAAC;AAED,SAAO;AACT;;;ACjDO,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AACF,MAIE,WAAW,QAAQ,KAAK;;;ACJ1B,IAAMM,UAAS,CAAC,UAAiE;AAC/E,MAAI,MAAM,KAAK,WAAW;AAAa;AACvC,MAAI,MAAM,KAAK,WAAW;AAAe;AACzC,MAAI,MAAM,KAAK,WAAW;AAAc;AAExC,QAAM,IAAI,MAAM,mBAAmB,MAAM,KAAK,MAAM,EAAE;AACxD;AAEO,IAAM,uBAAuB,OAAO;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,QAAM,UAAU,MAAM,OAAO,QAAQ,OAAO;AAAA,IAC1C,MAAM;AAAA,MACJ,UAAU,MAAM,KAAK;AAAA,MACrB,SAAS,MAAM,KAAK;AAAA,MACpB,MAAM,MAAM,KAAK,SAAS,cAAc,cAAc;AAAA,MACtD,aAAa,MAAM,KAAK;AAAA,MACxB,OAAO,MAAM,KAAK;AAAA,MAClB,QAAQA,QAAO,KAAK;AAAA,IACtB;AAAA,EACF,CAAC;AAED,QAAM,oBAAoBJ,kBAAiB,EAAE,QAAQ,CAAC;AAEtD,aAAW,QAAQ;AAAA,IACjB,GAAG;AAAA,IACH,MAAM;AAAA,EACR,CAAC;AAED,SAAO;AACT;;;ACvCO,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AACF,MAIE,WAAW,QAAQ,KAAK;;;ACLnB,IAAM,yBAAyB,OAAO;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,aAAW,QAAQ,KAAK;AAExB,MAAI,MAAM,KAAK,YAAY;AACzB,UAAM,gBAAgB,MAAM,OAAO,QAAQ,UAAU;AAAA,MACnD,OAAO;AAAA,QACL,UAAU,MAAM,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IACF,CAAC;AAED,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACrC;AAEA,UAAM,OAAO,QAAQ,OAAO;AAAA,MAC1B,OAAO;AAAA,QACL,IAAI,cAAc;AAAA,MACpB;AAAA,MACA,MAAM;AAAA,QACJ,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,MAAM,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,QAAQ,OAAO;AAAA,IAC3B,OAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,GAAI,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC5D,GAAI,MAAM,KAAK,aAAa,EAAE,WAAW,MAAM,KAAK,WAAW,IAAI,CAAC;AAAA,IACtE;AAAA,EACF,CAAC;AACH;;;AC3CO,IAAM,WAAW;AAAA,EACtB,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA,EAC9B,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,wBAAwB;AAAA,EACxB,4BAA4B;AAC9B;;;AChBO,IAAM,UAAU,CAAC;AAAA,EACtB;AAAA,EACA;AACF,MAGM,CAAC,UAA4C;AAEjD,QAAM,UAAU,SAAS,MAAM,KAAK;AAEpC,MAAI,CAAC,SAAS;AACZ,YAAQ,IAAI,wBAAwB,KAAK;AACzC;AAAA,EACF;AAEA,SAAO,QAAQ,EAAE,QAAQ,YAAY,MAAM,CAAC;AAC9C;;;ACdO,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AACF,MAGM,YAAY;AAChB,QAAMR,YAAW,MAAM,OAAO,QAAQ,SAAS;AAAA,IAC7C,OAAO;AAAA,MACL,UAAU,IAAI;AAAA,IAChB;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,QACH,SAAS;AAAA,UACP,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAED,SAAOA,UAAS,IAAI,CAAC,aAA6B;AAAA,IAChD,GAAGQ,kBAAiB,EAAE,QAAQ,CAAC;AAAA,IAC/B,KAAK,QAAQ,MAAO;AAAA,MAClB,GAAG,aAAa,EAAE,KAAK,QAAQ,IAAI,CAAC;AAAA,MACpC,UAAU,QAAQ,IAAI,SAAS,IAAI,CAAC,YAClC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,IACH,IAAK;AAAA,EACP,EAAE;AACJ;;;Ab9BO,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AACF,MAGM,IAAI,SAA2H;AACnI,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,MAAM,YAAY;AACtB,YAAM,WAAW,KAAK,CAAC;AACvB,YAAM,EAAE,aAAa,IAAI,KAAK,CAAC;AAE/B,YAAM,YAAY,MAAM,OAAO,UAAU,WAAW;AAAA,QAClD,OAAO;AAAA,UACL,IAAI;AAAA,QACN;AAAA,MACF,CAAC;AAED,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACvC;AAEA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA;AAAA,MAEF,QAAI,uBAAO;AAAA,QACT,OAAO,UAAU;AAAA,QACjB,cAAc;AAAA,QACd,yBAAyB;AAAA;AAAA;AAAA,MAG3B,GAAG,KAAK,CAAC,CAAC;AAEV,YAAM,MAAM,MAAM,OAAO,IAAI,OAAO;AAAA,QAClC,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,eAAW,cAAAF,SAAM,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK;AAAA;AAAA,UAEvC;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,IAAI;AAAA,YACN;AAAA,UACF;AAAA,UACA,WAAW;AAAA,YACT,SAAS;AAAA,cACP,IAAI;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,OAAO,aAAa,EAAE,IAAI,CAAC;AAEjC,iBAAW,QAAQ;AAAA,QACjB,OAAO;AAAA,QACP;AAAA,MACF,CAAC;AAID,YAAM,WAAW;AAAA,QACf,KAAK;AAAA,QACL,SAAS,QAAQ,EAAE,YAAY,OAAO,CAAC;AAAA,QACvC,aAAa,YAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC1C,CAAC;AAED,cAAQ,IAAI,mCAAmC;AAC/C,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACH;;;AcxFA,IAAAC,gBAAkB;AAMX,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AACF,MAGM,UAAU,SAAwI;AACtJ,QAAM,CAAC,UAAU,OAAO,IAAI,IAAI;AAChC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI;AAEJ,QAAM,MAAM,MAAM,OAAO,aAAa,OAAOM,YAAyB;AACpE,UAAM,WAAW,MAAMA,QAAO,QAAQ,SAAS;AAAA,MAC7C,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAED,eAAW,WAAW,UAAU;AAC9B,YAAMA,QAAO,QAAQ,OAAO;AAAA,QAC1B,OAAO;AAAA,UACL,IAAI,QAAQ;AAAA,QACd;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,iBAAa,cAAAP,SAAM,EAAE,KAAK;AAAA,UAC1B,aAAa;AAAA,YACX,MAAM;AAAA,YACN,YAAY,QAAQ,YAAa,WAAW,IAAI,CAAC,aAAa;AAC5D,oBAAM,aAAa,aAAa,KAAK,CAAC,WAAW,OAAO,iBAAiB,SAAS,EAAE,KAAK,aAAa,CAAC;AAEvG,kBAAI,CAAC,YAAY;AACf,wBAAQ,IAAI,EAAE,YAAY,SAAS,cAAc,SAAS,GAAG,EAAE,OAAO,KAAK,CAAC;AAC5E,sBAAM,IAAI,MAAM,uBAAuB;AAAA,cACzC;AAEA,qBAAO;AAAA,gBACL,IAAI,SAAS;AAAA,gBACb,MAAM,SAAS;AAAA,gBACf,UAAU;AAAA,kBACR,GAAG,SAAS;AAAA,kBACZ,QAAQ,WAAW;AAAA,gBACrB;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAOO,QAAO,IAAI,OAAO;AAAA,MACvB,OAAO;AAAA,QACL,IAAI;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACJ,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,OAAO,aAAa,EAAE,IAAI,CAAC;AAEjC,QAAM,IAAI,QAAQ,CAAC,YACjB,IAAI,eAAe;AAAA,IACjB,MAAM,MAAM,YAAY;AACtB,YAAM,WAAW;AAAA,QACf,KAAK;AAAA,QACL,SAAS,QAAQ,EAAE,YAAY,OAAO,CAAC;AAAA;AAAA,QAEvC,aAAa,YAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC1C,CAAC;AAED,iBAAW,MAAM;AACjB,cAAQ,MAAM;AAAA,IAChB;AAAA,EACF,CAAC,CACF;AAED,SAAO;AACT;;;ACzFA,IAAAN,iBAAkB;AAOX,IAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AACF,MAGM,IAAI,SAA2I;AACnJ,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,MAAM,YAAY;AACtB,YAAM,CAAC,UAAU,OAAO,IAAI,IAAI;AAChC,YAAM;AAAA,QACJ;AAAA,MACF,IAAI;AAEJ,YAAM,MAAM,MAAM,OAAO,aAAa,OAAOM,YAAW;AACtD,cAAM,WAAW,MAAMA,QAAO,QAAQ,SAAS;AAAA,UAC7C,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,UACA,SAAS;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF,CAAC;AAED,mBAAW,WAAW,UAAU;AAC9B,gBAAM,mBAAmB,MAAMA,QAAO,QAAQ,OAAO;AAAA,YACnD,OAAO;AAAA,cACL,IAAI,QAAQ;AAAA,YACd;AAAA,YACA,MAAM;AAAA,cACJ,QAAQ;AAAA,cACR,iBAAa,eAAAP,SAAM,EAAE,KAAK;AAAA,cAC1B,aAAa;AAAA,gBACX,MAAM;AAAA,gBACN,YAAY,QAAQ,YAAa,WAAW,IAAI,CAAC,aAAa;AAC5D,wBAAM,aAAa,aAAa,KAAK,CAAC,WAAW,OAAO,iBAAiB,SAAS,EAAE,KAAK,aAAa,CAAC;AAEvG,sBAAI,CAAC,YAAY;AACf,4BAAQ,IAAI,EAAE,YAAY,SAAS,cAAc,SAAS,GAAG,EAAE,OAAO,KAAK,CAAC;AAC5E,0BAAM,IAAI,MAAM,uBAAuB;AAAA,kBACzC;AAEA,yBAAO;AAAA,oBACL,IAAI,SAAS;AAAA,oBACb,MAAM,SAAS;AAAA,oBACf,UAAU;AAAA,sBACR,GAAG,SAAS;AAAA,sBACZ,QAAQ,WAAW;AAAA,oBACrB;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAC;AAED,qBAAW,QAAQ;AAAA,YACjB,OAAO;AAAA,YACP,MAAM,iBAAiB,EAAE,SAAS,iBAAiB,CAAC;AAAA,UACtD,CAAC;AAAA,QACH;AAEA,eAAOO,QAAO,IAAI,OAAO;AAAA,UACvB,OAAO;AAAA,YACL,IAAI;AAAA,UACN;AAAA,UACA,MAAM;AAAA,YACJ,QAAQ;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAID,YAAM,WAAW;AAAA,QACf,KAAK,aAAa,EAAE,IAAI,CAAC;AAAA,QACzB,SAAS,QAAQ,EAAE,YAAY,OAAO,CAAC;AAAA;AAAA,QAEvC,aAAa,YAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC1C,CAAC;AAED,cAAQ,IAAI,mCAAmC;AAC/C,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACH;;;AC9FA,IAAAZ,kBAA6B;AAGtB,IAAMS,QAAO,CAAC;AAAA,EACnB;AACF,MAEM,UAAU,SAA0H;AACxI,QAAM,WAAW,KAAK,CAAC;AACvB,QAAM,QAAQ,KAAK,CAAC;AAEpB,QAAM;AAAA;AAAA,IAEJ;AAAA;AAAA,IAEA;AAAA,EACF,QAAI,wBAAO;AAAA;AAAA,IAET,OAAO;AAAA,IACP,OAAO;AAAA,EACT,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAEhB,QAAM,WAAW,MAAM,OAAO,QAAQ,SAAS;AAAA,IAC7C,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAGD,SAAO;AAAA,IACL,MAAM,SAAS,IAAI,CAAC,YAAY,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC7D,aAAa,MAAM;AAAA,IACnB,MAAM;AAAA,MACJ,aAAS,sBAAK,QAAQ,GAAG,MAAM;AAAA,IACjC;AAAA,EACF;AACF;;;ACxCO,IAAM,QAAQ,CAAC;AAAA,EACpB;AACF,OAEO;AAAA,EACL,MAAMA,MAAK,EAAE,OAAO,CAAC;AACvB;;;ACAO,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA;AACF,OAGO;AAAA,EACL,MAAMA,MAAK,EAAE,OAAO,CAAC;AAAA,EACrB,QAAQD,QAAO,EAAE,OAAO,CAAC;AAAA,EACzB,iBAAiB,gBAAgB,EAAE,QAAQ,WAAW,CAAC;AAAA,EACvD,mBAAmB,kBAAkB,EAAE,QAAQ,WAAW,CAAC;AAAA,EAC3D,yBAAyB,wBAAwB,EAAE,QAAQ,WAAW,CAAC;AAAA,EACvE,OAAO,MAAM,EAAE,OAAO,CAAC;AACzB;;;AChBO,IAAM,UAAU,CAAC;AAAA,EACtB;AAAA,EACA;AACF,OAGO;AAAA,EACL,QAAQ,OAAO,EAAE,OAAO,CAAC;AAAA,EACzB,UAAUT,UAAS,EAAE,OAAO,CAAC;AAAA,EAC7B,MAAM,KAAK,EAAE,QAAQ,WAAW,CAAC;AACnC;;;ACZO,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA;AACF,OAGO;AAAA,EACL,SAAS,QAAQ,EAAE,QAAQ,WAAW,CAAC;AACzC;;;ACRO,IAAM,uBAAuB,CAAC;AAAA,EACnC;AACF,MAEM,CAAC;AAAA,EACL;AACF,OAA2B;AAAA,EACzB,MAAM,KAAK,EAAE,QAAQ,WAAW,CAAC;AACnC","sourcesContent":["export { supercompat } from './supercompat'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\n","import OpenAI from 'openai'\nimport { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: {\n client: OpenAI\n storage: (arg0: StorageAdapterArgs) => OpenAI\n runAdapter: RunAdapter\n}) => (\n assign(\n client,\n storage({\n runAdapter: partob(runAdapter, { client }),\n }),\n )\n)\n","import type OpenAI from 'openai'\nimport type MistralClient from '@mistralai/mistralai'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: MistralClient\n}) => ({\n chat: {\n completions: {\n // @ts-ignore-next-line\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => (\n // @ts-ignore-next-line\n (args[0].stream ? mistral.chatStream(...args) : mistral.chat(...args))\n )\n },\n },\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n chat: {\n completions: {\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => {\n const [firstArg, ...restArgs] = args\n\n const messages = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n firstArg.messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam, index: number) => {\n messages.push(message)\n\n const nextMessage = firstArg.messages[index + 1]\n if (!nextMessage) return\n\n if (message.role === 'user' && nextMessage.role === 'user') {\n messages.push({\n role: 'assistant',\n content: '',\n })\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n messages.push({\n role: 'user',\n content: '',\n })\n }\n })\n\n return perplexity.chat.completions.create({\n ...firstArg,\n messages,\n }, ...restArgs)\n },\n },\n },\n})\n","import _ from 'lodash'\nimport { uid, omit, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { MessageWithRun } from '@/types'\nimport { messages } from './messages'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: any\n delta: any\n}) => {\n if (!toolCall) return omit(delta, ['index'])\n\n // if (delta.type !== 'function') return toolCall\n\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n}\n\nconst toolCallsData = ({\n prevToolCalls,\n delta,\n}: {\n prevToolCalls: any\n delta: any\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...omit(tc, ['index']),\n }))\n }\n\n const newToolCalls = _.cloneDeep(prevToolCalls)\n\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta,\n })\n }\n\n return newToolCalls\n}\n\nexport const completionsRunAdapter = async ({\n client,\n run,\n onEvent,\n getMessages,\n}: {\n client: OpenAI\n run: OpenAI.Beta.Threads.Run\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n getMessages: () => Promise<MessageWithRun[]>\n}) => {\n if (run.status !== 'queued') return\n\n onEvent({\n event: 'thread.run.in_progress',\n data: {\n ...run,\n status: 'in_progress',\n },\n })\n\n const opts = {\n messages: await messages({\n run,\n getMessages,\n }),\n model: run.model,\n stream: true,\n ...(isEmpty(run.tools) ? {} : { tools: run.tools }),\n } as OpenAI.ChatCompletionCreateParamsStreaming\n\n console.dir({ opts }, { depth: null })\n let providerResponse\n\n try {\n providerResponse = await client.chat.completions.create(opts)\n } catch(e) {\n console.error(e)\n return onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: (e as { message: OpenAI.Beta.Threads.Runs.Run.LastError }).message,\n },\n })\n }\n\n let message = await onEvent({\n event: 'thread.message.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.message',\n completed_at: null,\n run_id: run.id,\n created_at: dayjs().unix(),\n assistant_id: run.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n file_ids: [],\n thread_id: run.thread_id,\n content: [{ text: { value: '', annotations: [] }, type: 'text' }],\n role: 'assistant',\n status: 'in_progress',\n },\n })\n\n onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'message_creation',\n status: 'completed',\n completed_at: dayjs().unix(),\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'message_creation',\n message_creation: {\n message_id: message.id,\n },\n },\n },\n })\n\n let toolCallsRunStep\n let currentContent = ''\n let currentToolCalls\n\n console.dir({ providerResponse }, { depth: null })\n for await (const chunk of providerResponse) {\n const delta = chunk.choices[0].delta\n\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? ''}`\n }\n\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'tool_calls',\n status: 'in_progress',\n completed_at: null,\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'tool_calls',\n tool_calls: [],\n },\n },\n })\n }\n\n onEvent({\n event: 'thread.run.step.delta',\n data: {\n object: 'thread.run.step.delta',\n run_id: run.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...tc,\n })),\n },\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta)\n\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta })\n }\n\n if (delta.content) {\n onEvent({\n event: 'thread.message.delta',\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: 'text',\n index: 0,\n text: {\n value: delta.content,\n },\n },\n ],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n }\n }\n\n message = await onEvent({\n event: 'thread.message.completed',\n data: {\n ...message,\n status: 'completed',\n content: [{ text: { value: currentContent, annotations: [] }, type: 'text' }],\n tool_calls: currentToolCalls,\n },\n })\n\n if (isEmpty(message.toolCalls)) {\n return onEvent({\n event: 'thread.run.completed',\n data: {\n ...run,\n status: 'completed',\n completed_at: dayjs().unix(),\n },\n })\n }\n\n return onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...run,\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: message.toolCalls,\n },\n },\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { flat } from 'radash'\nimport { MessageWithRun } from '@/types'\nimport { serializeMessage } from './serializeMessage'\n\nexport const messages = async ({\n run,\n getMessages,\n}: {\n run: OpenAI.Beta.Threads.Run\n getMessages: () => Promise<MessageWithRun[]>\n}) => (\n [\n ...(run.instructions ? [{\n role: 'system',\n content: run.instructions,\n }] : []),\n ...flat((await getMessages()).map((message: MessageWithRun) => serializeMessage({ message }))),\n ]\n)\n","import type OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { MessageWithRun } from '@/types'\n\nconst serializeToolCalls = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => {\n if (runStep.step_details.type !== 'tool_calls') return []\n\n const functionToolCalls = runStep.step_details.tool_calls.filter(tc => tc.type === 'function') as OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall[]\n\n return functionToolCalls.map((toolCall) => ({\n tool_call_id: toolCall.id,\n role: 'tool' as 'tool',\n name: toolCall.function.name,\n content: toolCall.function.output,\n }))\n}\n\nconst serializeMessageWithContent = ({\n message,\n}: {\n message: MessageWithRun\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...(message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}),\n})\n\nconst serializeContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}) => content.map((content) => content.text.value).join('\\n')\n\nexport const serializeMessage = ({\n message\n}: {\n message: MessageWithRun\n}) => {\n const result = [serializeMessageWithContent({ message })]\n\n if (!message.run) return result\n if (isEmpty(message.metadata?.toolCalls)) return result\n\n const toolCallsRunSteps = message.run.runSteps.filter((runStep) => runStep.type === 'tool_calls')\n\n toolCallsRunSteps.forEach((runStep) => {\n result.push(...serializeToolCalls({ runStep }))\n })\n\n console.dir({ result }, { depth: null })\n\n return result\n}\n","import type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { serializeThread } from './serializeThread'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads['create']>): Promise<ReturnType<OpenAI.Beta.Threads['create']>> => {\n const {\n // @ts-ignore-next-line\n body: {\n messages,\n metadata,\n },\n } = args[0]\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds').format()\n\n const thread = await prisma.thread.create({\n data: {\n metadata,\n assistant: {\n connect: {\n id: metadata.superinterfaceAssistantId,\n },\n },\n messages: {\n create: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message, index: number) => ({\n role: message.role,\n content: [{\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ],\n fileIds: message.file_ids,\n metadata: message.metadata,\n createdAt: dayjs(initialCreatedAt).add(index, 'seconds').toDate(),\n })),\n },\n },\n })\n\n return serializeThread({ thread })\n}\n","import type { Thread } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeThread = ({\n thread,\n}: {\n thread: Thread\n}) => ({\n id: thread.id,\n object: 'thread' as 'thread',\n created_at: dayjs(thread.createdAt).unix(),\n metadata: thread.metadata,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeMessage } from './serializeMessage'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['list']>> => {\n const threadId = args[0]\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const messages = await prisma.message.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: messages.map((message) => (\n serializeMessage({ message })\n )),\n hasNextPage: () => false,\n body: {\n last_id: last(messages)?.id ?? null,\n },\n }\n}\n","import type { Message } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: Message\n}) => ({\n id: message.id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails as unknown as OpenAI.Beta.Threads.Messages.Message.IncompleteDetails,\n role: message.role.toLowerCase() as 'user' | 'assistant',\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n assistant_id: message.assistantId,\n run_id: message.runId,\n file_ids: message.fileIds,\n status: message.status.toLowerCase() as OpenAI.Beta.Threads.Messages.Message['status'],\n metadata: assign(message.metadata as Record<any, any> ?? {}, { toolCalls: message.toolCalls }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from './serializeMessage'\n\nconst messageContentBlocks = ({\n content,\n}: {\n content: string\n}) => ([\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\n },\n },\n])\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>> => {\n const threadId = args[0]\n const { content } = args[1]\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: 'USER',\n },\n })\n\n return serializeMessage({ message })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\nimport { create } from './create'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['list']>> => {\n const threadId = args[0]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const runs = await prisma.run.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runs.map((run) => serializeRun({ run })),\n hasNextPage: () => false,\n body: {\n last_id: last(runs)?.id ?? null,\n },\n }\n}\n","import type OpenAI from 'openai'\nimport type { Run } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeRun = ({\n run,\n}: {\n run: Run\n}) => ({\n id: run.id,\n object: 'thread.run' as 'thread.run',\n created_at: dayjs(run.createdAt).unix(),\n thread_id: run.threadId,\n assistant_id: run.assistantId,\n status: run.status.toLowerCase() as OpenAI.Beta.Threads.Run['status'],\n required_action: run.requiredAction as OpenAI.Beta.Threads.Run['required_action'],\n last_error: run.lastError as OpenAI.Beta.Threads.Run['last_error'],\n expires_at: dayjs(run.expiresAt).unix(),\n started_at: run.startedAt ? dayjs(run.startedAt).unix() : null,\n cancelled_at: run.cancelledAt ? dayjs(run.cancelledAt).unix() : null,\n failed_at: run.failedAt ? dayjs(run.failedAt).unix() : null,\n completed_at: run.completedAt ? dayjs(run.completedAt).unix() : null,\n model: run.model,\n instructions: run.instructions,\n // @ts-ignore-next-line\n tools: run.tools as OpenAI.Beta.Threads.Run['tools'],\n file_ids: run.fileIds,\n metadata: run.metadata,\n usage: run.usage as OpenAI.Beta.Threads.Run['usage'],\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['create']>> => {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n return serializeRun({ run })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\nimport dayjs from 'dayjs'\nimport { serializeRun } from './serializeRun'\nimport { RunAdapter } from '@/types'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const createAndStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['createAndStream']>): ReturnType<OpenAI.Beta.Threads.Runs['createAndStream']> => {\n return new ReadableStream({\n async start(controller) {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n const data = serializeRun({ run })\n\n controller.enqueue({\n event: 'thread.run.created',\n data,\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunInProgress = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.IN_PROGRESS,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunFailed = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.FAILED,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunCompleted = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { RunStatus } from '@/types/prisma'\n\nexport const threadRunRequiresAction = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.REQUIRES_ACTION,\n requiredAction: event.data.required_action,\n },\n })\n}\n","import dayjs from 'dayjs'\nimport type { RunStep } from '@prisma/client'\nimport type OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: RunStep\n}) => ({\n id: runStep.id,\n object: 'thread.run.step' as 'thread.run.step',\n created_at: dayjs(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['type'],\n status: runStep.status.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['status'],\n // @ts-ignore-next-line\n step_details: runStep.stepDetails as OpenAI.Beta.Threads.Runs.RunStep['step_details'],\n last_error: runStep.lastError as OpenAI.Beta.Threads.Runs.RunStep['last_error'],\n expired_at: runStep.expiredAt ? dayjs(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage as OpenAI.Beta.Threads.Runs.RunStep['usage'],\n})\n","import type OpenAI from 'openai'\nimport { RunStepType, RunStepStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\n\nconst type = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.type === 'message_creation') return RunStepType.MESSAGE_CREATION\n if (event.data.type === 'tool_calls') return RunStepType.TOOL_CALLS\n\n throw new Error(`Unknown type: ${event.data.type}`)\n}\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.status === 'in_progress') return RunStepStatus.IN_PROGRESS\n if (event.data.status === 'cancelled') return RunStepStatus.CANCELLED\n if (event.data.status === 'completed') return RunStepStatus.COMPLETED\n if (event.data.status === 'failed') return RunStepStatus.FAILED\n if (event.data.status === 'expired') return RunStepStatus.EXPIRED\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadRunStepCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated>\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n })\n\n return serializedRunStep\n}\n","import type OpenAI from 'openai'\n\nexport const threadRunStepDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../../../messages/serializeMessage'\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated) => {\n if (event.data.status === 'completed') return MessageStatus.COMPLETED\n if (event.data.status === 'in_progress') return MessageStatus.IN_PROGRESS\n if (event.data.status === 'incomplete') return MessageStatus.INCOMPLETE\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadMessageCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated>\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n role: event.data.role === 'assistant' ? 'ASSISTANT' : 'USER',\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event),\n },\n })\n\n const serializedMessage = serializeMessage({ message })\n\n controller.enqueue({\n ...event,\n data: serializedMessage,\n })\n\n return serializedMessage\n}\n","import type OpenAI from 'openai'\n\nexport const threadMessageDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus, RunStepType } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadMessageCompleted = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>\n}) => {\n controller.enqueue(event)\n\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: RunStepType.TOOL_CALLS,\n },\n orderBy: {\n createdAt: 'desc',\n },\n })\n\n if (!latestRunStep) {\n throw new Error('No run step found')\n }\n\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id,\n },\n data: {\n stepDetails: {\n type: 'tool_calls',\n tool_calls: event.data.tool_calls,\n },\n },\n })\n }\n\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED,\n ...(event.data.content ? { content: event.data.content } : {}),\n ...(event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}),\n },\n })\n}\n","import { threadRunInProgress } from './threadRunInProgress'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunCompleted } from './threadRunCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\n\nexport const handlers = {\n 'thread.run.in_progress': threadRunInProgress,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.completed': threadRunCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { handlers } from './handlers'\n\nexport const onEvent = ({\n prisma,\n controller,\n}: {\n prisma: PrismaClient\n controller: ReadableStreamDefaultController\n}) => (event: OpenAI.Beta.AssistantStreamEvent) => {\n // @ts-ignore-next-line\n const handler = handlers[event.event]\n\n if (!handler) {\n console.log('No handler for event', event)\n return\n }\n\n return handler({ prisma, controller, event })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run, MessageWithRun, RunStep } from '@/types/prisma'\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: Run\n}) => async () => {\n const messages = await prisma.message.findMany({\n where: {\n threadId: run.threadId,\n },\n include: {\n run: {\n include: {\n runSteps: true,\n },\n },\n },\n take: -10,\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n return messages.map((message: MessageWithRun) => ({\n ...serializeMessage({ message }),\n run: message.run ? ({\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n }) : null,\n }))\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputs']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputs']>> => {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma: PrismaClient) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n })\n\n for (const runStep of runSteps) {\n await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n const data = serializeRun({ run })\n\n await new Promise((resolve) => (\n new ReadableStream({\n async start(controller) {\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n resolve(void 0)\n },\n })\n ))\n\n return data\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\nimport { serializeRunStep } from './steps/serializeRunStep'\n\nexport const submitToolOutputsStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']>): ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']> => {\n return new ReadableStream({\n async start(controller) {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n for (const runStep of runSteps) {\n const completedRunStep = await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n\n controller.enqueue({\n event: 'thread.run.step.completed',\n data: serializeRunStep({ runStep: completedRunStep }),\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: serializeRun({ run }),\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRunStep } from './serializeRunStep'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs.Steps['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs.Steps['list']>> => {\n const threadId = args[0]\n const runId = args[1]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[2] ?? {})\n\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n hasNextPage: () => false,\n body: {\n last_id: last(runSteps)?.id ?? null,\n },\n }\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { list } from './list'\nimport { create } from './create'\nimport { createAndStream } from './createAndStream'\nimport { submitToolOutputs } from './submitToolOutputs'\nimport { submitToolOutputsStream } from './submitToolOutputsStream'\nimport { steps } from './steps'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n createAndStream: createAndStream({ prisma, runAdapter }),\n submitToolOutputs: submitToolOutputs({ prisma, runAdapter }),\n submitToolOutputsStream: submitToolOutputsStream({ prisma, runAdapter }),\n steps: steps({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { create } from './create'\nimport { messages } from './messages'\nimport { runs } from './runs'\n\nexport const threads = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n create: create({ prisma }),\n messages: messages({ prisma }),\n runs: runs({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { threads } from './threads'\n\nexport const beta = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n threads: threads({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } from '@/types'\nimport { beta } from './beta'\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n runAdapter,\n}: StorageAdapterArgs) => ({\n beta: beta({ prisma, runAdapter }),\n})\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/supercompat.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages.ts","../src/adapters/run/completionsRunAdapter/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/createAndStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunInProgress.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunFailed.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunRequiresAction.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/serializeRunStep.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/getMessages.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputs.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputsStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/index.ts","../src/adapters/storage/prismaStorageAdapter/index.ts"],"names":["messages","import_radash","content","getMessages","_","onEvent","dayjs","import_dayjs","serializeMessage","create","list","runs","status","prisma"],"mappings":"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","sourcesContent":["export { supercompat } from './supercompat'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\n","import OpenAI from 'openai'\nimport { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: {\n client: OpenAI\n storage: (arg0: StorageAdapterArgs) => OpenAI\n runAdapter: RunAdapter\n}) => (\n assign(\n client,\n storage({\n runAdapter: partob(runAdapter, { client }),\n }),\n )\n)\n","import type OpenAI from 'openai'\nimport type MistralClient from '@mistralai/mistralai'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: MistralClient\n}) => ({\n chat: {\n completions: {\n // @ts-ignore-next-line\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => (\n // @ts-ignore-next-line\n (args[0].stream ? mistral.chatStream(...args) : mistral.chat(...args))\n )\n },\n },\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n chat: {\n completions: {\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => {\n const [firstArg, ...restArgs] = args\n\n const messages = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n firstArg.messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam, index: number) => {\n messages.push(message)\n\n const nextMessage = firstArg.messages[index + 1]\n if (!nextMessage) return\n\n if (message.role === 'user' && nextMessage.role === 'user') {\n messages.push({\n role: 'assistant',\n content: '',\n })\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n messages.push({\n role: 'user',\n content: '',\n })\n }\n })\n\n return perplexity.chat.completions.create({\n ...firstArg,\n messages,\n }, ...restArgs)\n },\n },\n },\n})\n","import _ from 'lodash'\nimport { uid, omit, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { MessageWithRun } from '@/types'\nimport { messages } from './messages'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: any\n delta: any\n}) => {\n if (!toolCall) return omit(delta, ['index'])\n\n // if (delta.type !== 'function') return toolCall\n\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n}\n\nconst toolCallsData = ({\n prevToolCalls,\n delta,\n}: {\n prevToolCalls: any\n delta: any\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...omit(tc, ['index']),\n }))\n }\n\n const newToolCalls = _.cloneDeep(prevToolCalls)\n\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta,\n })\n }\n\n return newToolCalls\n}\n\nexport const completionsRunAdapter = async ({\n client,\n run,\n onEvent,\n getMessages,\n}: {\n client: OpenAI\n run: OpenAI.Beta.Threads.Run\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n getMessages: () => Promise<MessageWithRun[]>\n}) => {\n if (run.status !== 'queued') return\n\n onEvent({\n event: 'thread.run.in_progress',\n data: {\n ...run,\n status: 'in_progress',\n },\n })\n\n const opts = {\n messages: await messages({\n run,\n getMessages,\n }),\n model: run.model,\n stream: true,\n ...(isEmpty(run.tools) ? {} : { tools: run.tools }),\n } as OpenAI.ChatCompletionCreateParamsStreaming\n\n console.dir({ opts }, { depth: null })\n let providerResponse\n\n try {\n providerResponse = await client.chat.completions.create(opts)\n } catch(e) {\n console.error(e)\n return onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: (e as { message: OpenAI.Beta.Threads.Runs.Run.LastError }).message,\n },\n })\n }\n\n let message = await onEvent({\n event: 'thread.message.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.message',\n completed_at: null,\n run_id: run.id,\n created_at: dayjs().unix(),\n assistant_id: run.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n file_ids: [],\n thread_id: run.thread_id,\n content: [{ text: { value: '', annotations: [] }, type: 'text' }],\n role: 'assistant',\n status: 'in_progress',\n },\n })\n\n onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'message_creation',\n status: 'completed',\n completed_at: dayjs().unix(),\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'message_creation',\n message_creation: {\n message_id: message.id,\n },\n },\n },\n })\n\n let toolCallsRunStep\n let currentContent = ''\n let currentToolCalls\n\n console.dir({ providerResponse }, { depth: null })\n for await (const chunk of providerResponse) {\n const delta = chunk.choices[0].delta\n\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? ''}`\n }\n\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'tool_calls',\n status: 'in_progress',\n completed_at: null,\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'tool_calls',\n tool_calls: [],\n },\n },\n })\n }\n\n onEvent({\n event: 'thread.run.step.delta',\n data: {\n object: 'thread.run.step.delta',\n run_id: run.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...tc,\n })),\n },\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta)\n\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta })\n }\n\n if (delta.content) {\n onEvent({\n event: 'thread.message.delta',\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: 'text',\n index: 0,\n text: {\n value: delta.content,\n },\n },\n ],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n }\n }\n\n message = await onEvent({\n event: 'thread.message.completed',\n data: {\n ...message,\n status: 'completed',\n content: [{ text: { value: currentContent, annotations: [] }, type: 'text' }],\n tool_calls: currentToolCalls,\n },\n })\n\n if (isEmpty(message.toolCalls)) {\n return onEvent({\n event: 'thread.run.completed',\n data: {\n ...run,\n status: 'completed',\n completed_at: dayjs().unix(),\n },\n })\n }\n\n return onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...run,\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: message.toolCalls,\n },\n },\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { flat } from 'radash'\nimport { MessageWithRun } from '@/types'\nimport { serializeMessage } from './serializeMessage'\n\nexport const messages = async ({\n run,\n getMessages,\n}: {\n run: OpenAI.Beta.Threads.Run\n getMessages: () => Promise<MessageWithRun[]>\n}) => (\n [\n ...(run.instructions ? [{\n role: 'system',\n content: run.instructions,\n }] : []),\n ...flat((await getMessages()).map((message: MessageWithRun) => serializeMessage({ message }))),\n ]\n)\n","import type OpenAI from 'openai'\nimport { MessageWithRun } from '@/types'\n\nconst serializeToolCall = ({\n toolCall,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\n}) => ({\n tool_call_id: toolCall.id,\n role: 'tool' as 'tool',\n name: toolCall.function.name,\n content: toolCall.function.output,\n})\n\nconst serializeMessageWithContent = ({\n message,\n}: {\n message: MessageWithRun\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...(message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}),\n})\n\nconst serializeContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}) => content.map((content) => content.text.value).join('\\n')\n\nexport const serializeMessage = ({\n message\n}: {\n message: MessageWithRun\n}) => {\n const result = [serializeMessageWithContent({ message })]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = message.metadata?.toolCalls || []\n\n messageToolCalls.forEach((tc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n const runStep = run.runSteps.find((rs) => {\n if (rs.type !== 'tool_calls') return false\n\n return rs.step_details.tool_calls.some((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n })\n\n if (!runStep) return\n\n const toolCall = runStep.step_details.tool_calls.find((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n\n result.push(serializeToolCall({ toolCall }))\n })\n\n return result\n}\n","import type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { serializeThread } from './serializeThread'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads['create']>): Promise<ReturnType<OpenAI.Beta.Threads['create']>> => {\n const {\n // @ts-ignore-next-line\n body: {\n messages,\n metadata,\n },\n } = args[0]\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds').format()\n\n const thread = await prisma.thread.create({\n data: {\n metadata,\n assistant: {\n connect: {\n id: metadata.superinterfaceAssistantId,\n },\n },\n messages: {\n create: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message, index: number) => ({\n role: message.role,\n content: [{\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ],\n fileIds: message.file_ids,\n metadata: message.metadata,\n createdAt: dayjs(initialCreatedAt).add(index, 'seconds').toDate(),\n })),\n },\n },\n })\n\n return serializeThread({ thread })\n}\n","import type { Thread } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeThread = ({\n thread,\n}: {\n thread: Thread\n}) => ({\n id: thread.id,\n object: 'thread' as 'thread',\n created_at: dayjs(thread.createdAt).unix(),\n metadata: thread.metadata,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeMessage } from './serializeMessage'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['list']>> => {\n const threadId = args[0]\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const messages = await prisma.message.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: messages.map((message) => (\n serializeMessage({ message })\n )),\n hasNextPage: () => false,\n body: {\n last_id: last(messages)?.id ?? null,\n },\n }\n}\n","import type { Message } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: Message\n}) => ({\n id: message.id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails as unknown as OpenAI.Beta.Threads.Messages.Message.IncompleteDetails,\n role: message.role.toLowerCase() as 'user' | 'assistant',\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n assistant_id: message.assistantId,\n run_id: message.runId,\n file_ids: message.fileIds,\n status: message.status.toLowerCase() as OpenAI.Beta.Threads.Messages.Message['status'],\n metadata: assign(message.metadata as Record<any, any> ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {}),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from './serializeMessage'\n\nconst messageContentBlocks = ({\n content,\n}: {\n content: string\n}) => ([\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\n },\n },\n])\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>> => {\n const threadId = args[0]\n const { content } = args[1]\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: 'USER',\n },\n })\n\n return serializeMessage({ message })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\nimport { create } from './create'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['list']>> => {\n const threadId = args[0]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const runs = await prisma.run.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runs.map((run) => serializeRun({ run })),\n hasNextPage: () => false,\n body: {\n last_id: last(runs)?.id ?? null,\n },\n }\n}\n","import type OpenAI from 'openai'\nimport type { Run } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeRun = ({\n run,\n}: {\n run: Run\n}) => ({\n id: run.id,\n object: 'thread.run' as 'thread.run',\n created_at: dayjs(run.createdAt).unix(),\n thread_id: run.threadId,\n assistant_id: run.assistantId,\n status: run.status.toLowerCase() as OpenAI.Beta.Threads.Run['status'],\n required_action: run.requiredAction as OpenAI.Beta.Threads.Run['required_action'],\n last_error: run.lastError as OpenAI.Beta.Threads.Run['last_error'],\n expires_at: dayjs(run.expiresAt).unix(),\n started_at: run.startedAt ? dayjs(run.startedAt).unix() : null,\n cancelled_at: run.cancelledAt ? dayjs(run.cancelledAt).unix() : null,\n failed_at: run.failedAt ? dayjs(run.failedAt).unix() : null,\n completed_at: run.completedAt ? dayjs(run.completedAt).unix() : null,\n model: run.model,\n instructions: run.instructions,\n // @ts-ignore-next-line\n tools: run.tools as OpenAI.Beta.Threads.Run['tools'],\n file_ids: run.fileIds,\n metadata: run.metadata,\n usage: run.usage as OpenAI.Beta.Threads.Run['usage'],\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['create']>> => {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n return serializeRun({ run })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\nimport dayjs from 'dayjs'\nimport { serializeRun } from './serializeRun'\nimport { RunAdapter } from '@/types'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const createAndStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['createAndStream']>): ReturnType<OpenAI.Beta.Threads.Runs['createAndStream']> => {\n return new ReadableStream({\n async start(controller) {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n const data = serializeRun({ run })\n\n controller.enqueue({\n event: 'thread.run.created',\n data,\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunInProgress = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.IN_PROGRESS,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunFailed = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.FAILED,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunCompleted = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { RunStatus } from '@/types/prisma'\n\nexport const threadRunRequiresAction = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.REQUIRES_ACTION,\n requiredAction: event.data.required_action,\n },\n })\n}\n","import dayjs from 'dayjs'\nimport type { RunStep } from '@prisma/client'\nimport type OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: RunStep\n}) => ({\n id: runStep.id,\n object: 'thread.run.step' as 'thread.run.step',\n created_at: dayjs(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['type'],\n status: runStep.status.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['status'],\n // @ts-ignore-next-line\n step_details: runStep.stepDetails as OpenAI.Beta.Threads.Runs.RunStep['step_details'],\n last_error: runStep.lastError as OpenAI.Beta.Threads.Runs.RunStep['last_error'],\n expired_at: runStep.expiredAt ? dayjs(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage as OpenAI.Beta.Threads.Runs.RunStep['usage'],\n})\n","import type OpenAI from 'openai'\nimport { RunStepType, RunStepStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\n\nconst type = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.type === 'message_creation') return RunStepType.MESSAGE_CREATION\n if (event.data.type === 'tool_calls') return RunStepType.TOOL_CALLS\n\n throw new Error(`Unknown type: ${event.data.type}`)\n}\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.status === 'in_progress') return RunStepStatus.IN_PROGRESS\n if (event.data.status === 'cancelled') return RunStepStatus.CANCELLED\n if (event.data.status === 'completed') return RunStepStatus.COMPLETED\n if (event.data.status === 'failed') return RunStepStatus.FAILED\n if (event.data.status === 'expired') return RunStepStatus.EXPIRED\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadRunStepCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated>\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n })\n\n return serializedRunStep\n}\n","import type OpenAI from 'openai'\n\nexport const threadRunStepDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../../../messages/serializeMessage'\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated) => {\n if (event.data.status === 'completed') return MessageStatus.COMPLETED\n if (event.data.status === 'in_progress') return MessageStatus.IN_PROGRESS\n if (event.data.status === 'incomplete') return MessageStatus.INCOMPLETE\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadMessageCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated>\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n role: event.data.role === 'assistant' ? 'ASSISTANT' : 'USER',\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event),\n },\n })\n\n const serializedMessage = serializeMessage({ message })\n\n controller.enqueue({\n ...event,\n data: serializedMessage,\n })\n\n return serializedMessage\n}\n","import type OpenAI from 'openai'\n\nexport const threadMessageDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus, RunStepType } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadMessageCompleted = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>\n}) => {\n controller.enqueue(event)\n\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: RunStepType.TOOL_CALLS,\n },\n orderBy: {\n createdAt: 'desc',\n },\n })\n\n if (!latestRunStep) {\n throw new Error('No run step found')\n }\n\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id,\n },\n data: {\n stepDetails: {\n type: 'tool_calls',\n tool_calls: event.data.tool_calls,\n },\n },\n })\n }\n\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED,\n ...(event.data.content ? { content: event.data.content } : {}),\n ...(event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}),\n },\n })\n}\n","import { threadRunInProgress } from './threadRunInProgress'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunCompleted } from './threadRunCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\n\nexport const handlers = {\n 'thread.run.in_progress': threadRunInProgress,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.completed': threadRunCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { handlers } from './handlers'\n\nexport const onEvent = ({\n prisma,\n controller,\n}: {\n prisma: PrismaClient\n controller: ReadableStreamDefaultController\n}) => (event: OpenAI.Beta.AssistantStreamEvent) => {\n // @ts-ignore-next-line\n const handler = handlers[event.event]\n\n if (!handler) {\n console.log('No handler for event', event)\n return\n }\n\n return handler({ prisma, controller, event })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run, MessageWithRun, RunStep } from '@/types/prisma'\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: Run\n}) => async () => {\n const messages = await prisma.message.findMany({\n where: {\n threadId: run.threadId,\n },\n include: {\n run: {\n include: {\n runSteps: true,\n },\n },\n },\n take: -10,\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n return messages.map((message: MessageWithRun) => ({\n ...serializeMessage({ message }),\n run: message.run ? ({\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n }) : null,\n }))\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputs']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputs']>> => {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma: PrismaClient) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n })\n\n for (const runStep of runSteps) {\n await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n const data = serializeRun({ run })\n\n await new Promise((resolve) => (\n new ReadableStream({\n async start(controller) {\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n resolve(void 0)\n },\n })\n ))\n\n return data\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\nimport { serializeRunStep } from './steps/serializeRunStep'\n\nexport const submitToolOutputsStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']>): ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']> => {\n return new ReadableStream({\n async start(controller) {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n for (const runStep of runSteps) {\n const completedRunStep = await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n\n controller.enqueue({\n event: 'thread.run.step.completed',\n data: serializeRunStep({ runStep: completedRunStep }),\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: serializeRun({ run }),\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRunStep } from './serializeRunStep'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs.Steps['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs.Steps['list']>> => {\n const threadId = args[0]\n const runId = args[1]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[2] ?? {})\n\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n hasNextPage: () => false,\n body: {\n last_id: last(runSteps)?.id ?? null,\n },\n }\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { list } from './list'\nimport { create } from './create'\nimport { createAndStream } from './createAndStream'\nimport { submitToolOutputs } from './submitToolOutputs'\nimport { submitToolOutputsStream } from './submitToolOutputsStream'\nimport { steps } from './steps'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n createAndStream: createAndStream({ prisma, runAdapter }),\n submitToolOutputs: submitToolOutputs({ prisma, runAdapter }),\n submitToolOutputsStream: submitToolOutputsStream({ prisma, runAdapter }),\n steps: steps({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { create } from './create'\nimport { messages } from './messages'\nimport { runs } from './runs'\n\nexport const threads = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n create: create({ prisma }),\n messages: messages({ prisma }),\n runs: runs({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { threads } from './threads'\n\nexport const beta = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n threads: threads({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } from '@/types'\nimport { beta } from './beta'\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n runAdapter,\n}: StorageAdapterArgs) => ({\n beta: beta({ prisma, runAdapter }),\n})\n"]}
package/dist/index.js CHANGED
@@ -364,26 +364,19 @@ var perplexityClientAdapter = function(param) {
364
364
  };
365
365
  // src/adapters/run/completionsRunAdapter/index.ts
366
366
  import _ from "lodash";
367
- import { uid, omit, isEmpty as isEmpty2 } from "radash";
367
+ import { uid, omit, isEmpty } from "radash";
368
368
  import dayjs from "dayjs";
369
369
  // src/adapters/run/completionsRunAdapter/messages.ts
370
370
  import { flat } from "radash";
371
371
  // src/adapters/run/completionsRunAdapter/serializeMessage.ts
372
- import { isEmpty } from "radash";
373
- var serializeToolCalls = function(param) {
374
- var runStep = param.runStep;
375
- if (runStep.step_details.type !== "tool_calls") return [];
376
- var functionToolCalls = runStep.step_details.tool_calls.filter(function(tc) {
377
- return tc.type === "function";
378
- });
379
- return functionToolCalls.map(function(toolCall) {
380
- return {
381
- tool_call_id: toolCall.id,
382
- role: "tool",
383
- name: toolCall.function.name,
384
- content: toolCall.function.output
385
- };
386
- });
372
+ var serializeToolCall = function(param) {
373
+ var toolCall = param.toolCall;
374
+ return {
375
+ tool_call_id: toolCall.id,
376
+ role: "tool",
377
+ name: toolCall.function.name,
378
+ content: toolCall.function.output
379
+ };
387
380
  };
388
381
  var serializeMessageWithContent = function(param) {
389
382
  var message = param.message;
@@ -411,21 +404,25 @@ var serializeMessage = function(param) {
411
404
  message: message
412
405
  })
413
406
  ];
414
- if (!message.run) return result;
415
- if (isEmpty((_message_metadata = message.metadata) === null || _message_metadata === void 0 ? void 0 : _message_metadata.toolCalls)) return result;
416
- var toolCallsRunSteps = message.run.runSteps.filter(function(runStep) {
417
- return runStep.type === "tool_calls";
418
- });
419
- toolCallsRunSteps.forEach(function(runStep) {
420
- var _result;
421
- (_result = result).push.apply(_result, _to_consumable_array(serializeToolCalls({
422
- runStep: runStep
423
- })));
424
- });
425
- console.dir({
426
- result: result
427
- }, {
428
- depth: null
407
+ var run = message.run;
408
+ if (!run) return result;
409
+ var messageToolCalls = ((_message_metadata = message.metadata) === null || _message_metadata === void 0 ? void 0 : _message_metadata.toolCalls) || [];
410
+ messageToolCalls.forEach(function(tc) {
411
+ var runStep = run.runSteps.find(function(rs) {
412
+ if (rs.type !== "tool_calls") return false;
413
+ return rs.step_details.tool_calls.some(function(rsTc) {
414
+ if (rsTc.type !== "function") return false;
415
+ return rsTc.id === tc.id;
416
+ });
417
+ });
418
+ if (!runStep) return;
419
+ var toolCall = runStep.step_details.tool_calls.find(function(rsTc) {
420
+ if (rsTc.type !== "function") return false;
421
+ return rsTc.id === tc.id;
422
+ });
423
+ result.push(serializeToolCall({
424
+ toolCall: toolCall
425
+ }));
429
426
  });
430
427
  return result;
431
428
  };
@@ -564,7 +561,7 @@ var completionsRunAdapter = function() {
564
561
  case 1:
565
562
  opts = _object_spread.apply(void 0, [
566
563
  (_tmp.messages = _state.sent(), _tmp.model = run.model, _tmp.stream = true, _tmp),
567
- isEmpty2(run.tools) ? {} : {
564
+ isEmpty(run.tools) ? {} : {
568
565
  tools: run.tools
569
566
  }
570
567
  ]);
@@ -857,7 +854,7 @@ var completionsRunAdapter = function() {
857
854
  ];
858
855
  case 22:
859
856
  message = _state.sent();
860
- if (isEmpty2(message.toolCalls)) {
857
+ if (isEmpty(message.toolCalls)) {
861
858
  return [
862
859
  2,
863
860
  onEvent2({
@@ -985,9 +982,9 @@ var serializeMessage2 = function(param) {
985
982
  run_id: message.runId,
986
983
  file_ids: message.fileIds,
987
984
  status: message.status.toLowerCase(),
988
- metadata: assign2((_message_metadata = message.metadata) !== null && _message_metadata !== void 0 ? _message_metadata : {}, {
985
+ metadata: assign2((_message_metadata = message.metadata) !== null && _message_metadata !== void 0 ? _message_metadata : {}, message.toolCalls ? {
989
986
  toolCalls: message.toolCalls
990
- })
987
+ } : {})
991
988
  };
992
989
  };
993
990
  // src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/supercompat.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages.ts","../src/adapters/run/completionsRunAdapter/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/createAndStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunInProgress.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunFailed.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunRequiresAction.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/serializeRunStep.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/getMessages.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputs.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputsStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/index.ts","../src/adapters/storage/prismaStorageAdapter/index.ts"],"names":["messages","isEmpty","content","getMessages","onEvent","dayjs","assign","serializeMessage","create","last","list","runs","status","prisma"],"mappings":"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","sourcesContent":["import OpenAI from 'openai'\nimport { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: {\n client: OpenAI\n storage: (arg0: StorageAdapterArgs) => OpenAI\n runAdapter: RunAdapter\n}) => (\n assign(\n client,\n storage({\n runAdapter: partob(runAdapter, { client }),\n }),\n )\n)\n","import type OpenAI from 'openai'\nimport type MistralClient from '@mistralai/mistralai'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: MistralClient\n}) => ({\n chat: {\n completions: {\n // @ts-ignore-next-line\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => (\n // @ts-ignore-next-line\n (args[0].stream ? mistral.chatStream(...args) : mistral.chat(...args))\n )\n },\n },\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n chat: {\n completions: {\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => {\n const [firstArg, ...restArgs] = args\n\n const messages = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n firstArg.messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam, index: number) => {\n messages.push(message)\n\n const nextMessage = firstArg.messages[index + 1]\n if (!nextMessage) return\n\n if (message.role === 'user' && nextMessage.role === 'user') {\n messages.push({\n role: 'assistant',\n content: '',\n })\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n messages.push({\n role: 'user',\n content: '',\n })\n }\n })\n\n return perplexity.chat.completions.create({\n ...firstArg,\n messages,\n }, ...restArgs)\n },\n },\n },\n})\n","import _ from 'lodash'\nimport { uid, omit, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { MessageWithRun } from '@/types'\nimport { messages } from './messages'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: any\n delta: any\n}) => {\n if (!toolCall) return omit(delta, ['index'])\n\n // if (delta.type !== 'function') return toolCall\n\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n}\n\nconst toolCallsData = ({\n prevToolCalls,\n delta,\n}: {\n prevToolCalls: any\n delta: any\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...omit(tc, ['index']),\n }))\n }\n\n const newToolCalls = _.cloneDeep(prevToolCalls)\n\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta,\n })\n }\n\n return newToolCalls\n}\n\nexport const completionsRunAdapter = async ({\n client,\n run,\n onEvent,\n getMessages,\n}: {\n client: OpenAI\n run: OpenAI.Beta.Threads.Run\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n getMessages: () => Promise<MessageWithRun[]>\n}) => {\n if (run.status !== 'queued') return\n\n onEvent({\n event: 'thread.run.in_progress',\n data: {\n ...run,\n status: 'in_progress',\n },\n })\n\n const opts = {\n messages: await messages({\n run,\n getMessages,\n }),\n model: run.model,\n stream: true,\n ...(isEmpty(run.tools) ? {} : { tools: run.tools }),\n } as OpenAI.ChatCompletionCreateParamsStreaming\n\n console.dir({ opts }, { depth: null })\n let providerResponse\n\n try {\n providerResponse = await client.chat.completions.create(opts)\n } catch(e) {\n console.error(e)\n return onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: (e as { message: OpenAI.Beta.Threads.Runs.Run.LastError }).message,\n },\n })\n }\n\n let message = await onEvent({\n event: 'thread.message.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.message',\n completed_at: null,\n run_id: run.id,\n created_at: dayjs().unix(),\n assistant_id: run.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n file_ids: [],\n thread_id: run.thread_id,\n content: [{ text: { value: '', annotations: [] }, type: 'text' }],\n role: 'assistant',\n status: 'in_progress',\n },\n })\n\n onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'message_creation',\n status: 'completed',\n completed_at: dayjs().unix(),\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'message_creation',\n message_creation: {\n message_id: message.id,\n },\n },\n },\n })\n\n let toolCallsRunStep\n let currentContent = ''\n let currentToolCalls\n\n console.dir({ providerResponse }, { depth: null })\n for await (const chunk of providerResponse) {\n const delta = chunk.choices[0].delta\n\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? ''}`\n }\n\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'tool_calls',\n status: 'in_progress',\n completed_at: null,\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'tool_calls',\n tool_calls: [],\n },\n },\n })\n }\n\n onEvent({\n event: 'thread.run.step.delta',\n data: {\n object: 'thread.run.step.delta',\n run_id: run.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...tc,\n })),\n },\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta)\n\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta })\n }\n\n if (delta.content) {\n onEvent({\n event: 'thread.message.delta',\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: 'text',\n index: 0,\n text: {\n value: delta.content,\n },\n },\n ],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n }\n }\n\n message = await onEvent({\n event: 'thread.message.completed',\n data: {\n ...message,\n status: 'completed',\n content: [{ text: { value: currentContent, annotations: [] }, type: 'text' }],\n tool_calls: currentToolCalls,\n },\n })\n\n if (isEmpty(message.toolCalls)) {\n return onEvent({\n event: 'thread.run.completed',\n data: {\n ...run,\n status: 'completed',\n completed_at: dayjs().unix(),\n },\n })\n }\n\n return onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...run,\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: message.toolCalls,\n },\n },\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { flat } from 'radash'\nimport { MessageWithRun } from '@/types'\nimport { serializeMessage } from './serializeMessage'\n\nexport const messages = async ({\n run,\n getMessages,\n}: {\n run: OpenAI.Beta.Threads.Run\n getMessages: () => Promise<MessageWithRun[]>\n}) => (\n [\n ...(run.instructions ? [{\n role: 'system',\n content: run.instructions,\n }] : []),\n ...flat((await getMessages()).map((message: MessageWithRun) => serializeMessage({ message }))),\n ]\n)\n","import type OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { MessageWithRun } from '@/types'\n\nconst serializeToolCalls = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => {\n if (runStep.step_details.type !== 'tool_calls') return []\n\n const functionToolCalls = runStep.step_details.tool_calls.filter(tc => tc.type === 'function') as OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall[]\n\n return functionToolCalls.map((toolCall) => ({\n tool_call_id: toolCall.id,\n role: 'tool' as 'tool',\n name: toolCall.function.name,\n content: toolCall.function.output,\n }))\n}\n\nconst serializeMessageWithContent = ({\n message,\n}: {\n message: MessageWithRun\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...(message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}),\n})\n\nconst serializeContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}) => content.map((content) => content.text.value).join('\\n')\n\nexport const serializeMessage = ({\n message\n}: {\n message: MessageWithRun\n}) => {\n const result = [serializeMessageWithContent({ message })]\n\n if (!message.run) return result\n if (isEmpty(message.metadata?.toolCalls)) return result\n\n const toolCallsRunSteps = message.run.runSteps.filter((runStep) => runStep.type === 'tool_calls')\n\n toolCallsRunSteps.forEach((runStep) => {\n result.push(...serializeToolCalls({ runStep }))\n })\n\n console.dir({ result }, { depth: null })\n\n return result\n}\n","import type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { serializeThread } from './serializeThread'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads['create']>): Promise<ReturnType<OpenAI.Beta.Threads['create']>> => {\n const {\n // @ts-ignore-next-line\n body: {\n messages,\n metadata,\n },\n } = args[0]\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds').format()\n\n const thread = await prisma.thread.create({\n data: {\n metadata,\n assistant: {\n connect: {\n id: metadata.superinterfaceAssistantId,\n },\n },\n messages: {\n create: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message, index: number) => ({\n role: message.role,\n content: [{\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ],\n fileIds: message.file_ids,\n metadata: message.metadata,\n createdAt: dayjs(initialCreatedAt).add(index, 'seconds').toDate(),\n })),\n },\n },\n })\n\n return serializeThread({ thread })\n}\n","import type { Thread } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeThread = ({\n thread,\n}: {\n thread: Thread\n}) => ({\n id: thread.id,\n object: 'thread' as 'thread',\n created_at: dayjs(thread.createdAt).unix(),\n metadata: thread.metadata,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeMessage } from './serializeMessage'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['list']>> => {\n const threadId = args[0]\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const messages = await prisma.message.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: messages.map((message) => (\n serializeMessage({ message })\n )),\n hasNextPage: () => false,\n body: {\n last_id: last(messages)?.id ?? null,\n },\n }\n}\n","import type { Message } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: Message\n}) => ({\n id: message.id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails as unknown as OpenAI.Beta.Threads.Messages.Message.IncompleteDetails,\n role: message.role.toLowerCase() as 'user' | 'assistant',\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n assistant_id: message.assistantId,\n run_id: message.runId,\n file_ids: message.fileIds,\n status: message.status.toLowerCase() as OpenAI.Beta.Threads.Messages.Message['status'],\n metadata: assign(message.metadata as Record<any, any> ?? {}, { toolCalls: message.toolCalls }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from './serializeMessage'\n\nconst messageContentBlocks = ({\n content,\n}: {\n content: string\n}) => ([\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\n },\n },\n])\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>> => {\n const threadId = args[0]\n const { content } = args[1]\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: 'USER',\n },\n })\n\n return serializeMessage({ message })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\nimport { create } from './create'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['list']>> => {\n const threadId = args[0]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const runs = await prisma.run.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runs.map((run) => serializeRun({ run })),\n hasNextPage: () => false,\n body: {\n last_id: last(runs)?.id ?? null,\n },\n }\n}\n","import type OpenAI from 'openai'\nimport type { Run } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeRun = ({\n run,\n}: {\n run: Run\n}) => ({\n id: run.id,\n object: 'thread.run' as 'thread.run',\n created_at: dayjs(run.createdAt).unix(),\n thread_id: run.threadId,\n assistant_id: run.assistantId,\n status: run.status.toLowerCase() as OpenAI.Beta.Threads.Run['status'],\n required_action: run.requiredAction as OpenAI.Beta.Threads.Run['required_action'],\n last_error: run.lastError as OpenAI.Beta.Threads.Run['last_error'],\n expires_at: dayjs(run.expiresAt).unix(),\n started_at: run.startedAt ? dayjs(run.startedAt).unix() : null,\n cancelled_at: run.cancelledAt ? dayjs(run.cancelledAt).unix() : null,\n failed_at: run.failedAt ? dayjs(run.failedAt).unix() : null,\n completed_at: run.completedAt ? dayjs(run.completedAt).unix() : null,\n model: run.model,\n instructions: run.instructions,\n // @ts-ignore-next-line\n tools: run.tools as OpenAI.Beta.Threads.Run['tools'],\n file_ids: run.fileIds,\n metadata: run.metadata,\n usage: run.usage as OpenAI.Beta.Threads.Run['usage'],\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['create']>> => {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n return serializeRun({ run })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\nimport dayjs from 'dayjs'\nimport { serializeRun } from './serializeRun'\nimport { RunAdapter } from '@/types'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const createAndStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['createAndStream']>): ReturnType<OpenAI.Beta.Threads.Runs['createAndStream']> => {\n return new ReadableStream({\n async start(controller) {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n const data = serializeRun({ run })\n\n controller.enqueue({\n event: 'thread.run.created',\n data,\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunInProgress = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.IN_PROGRESS,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunFailed = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.FAILED,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunCompleted = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { RunStatus } from '@/types/prisma'\n\nexport const threadRunRequiresAction = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.REQUIRES_ACTION,\n requiredAction: event.data.required_action,\n },\n })\n}\n","import dayjs from 'dayjs'\nimport type { RunStep } from '@prisma/client'\nimport type OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: RunStep\n}) => ({\n id: runStep.id,\n object: 'thread.run.step' as 'thread.run.step',\n created_at: dayjs(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['type'],\n status: runStep.status.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['status'],\n // @ts-ignore-next-line\n step_details: runStep.stepDetails as OpenAI.Beta.Threads.Runs.RunStep['step_details'],\n last_error: runStep.lastError as OpenAI.Beta.Threads.Runs.RunStep['last_error'],\n expired_at: runStep.expiredAt ? dayjs(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage as OpenAI.Beta.Threads.Runs.RunStep['usage'],\n})\n","import type OpenAI from 'openai'\nimport { RunStepType, RunStepStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\n\nconst type = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.type === 'message_creation') return RunStepType.MESSAGE_CREATION\n if (event.data.type === 'tool_calls') return RunStepType.TOOL_CALLS\n\n throw new Error(`Unknown type: ${event.data.type}`)\n}\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.status === 'in_progress') return RunStepStatus.IN_PROGRESS\n if (event.data.status === 'cancelled') return RunStepStatus.CANCELLED\n if (event.data.status === 'completed') return RunStepStatus.COMPLETED\n if (event.data.status === 'failed') return RunStepStatus.FAILED\n if (event.data.status === 'expired') return RunStepStatus.EXPIRED\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadRunStepCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated>\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n })\n\n return serializedRunStep\n}\n","import type OpenAI from 'openai'\n\nexport const threadRunStepDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../../../messages/serializeMessage'\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated) => {\n if (event.data.status === 'completed') return MessageStatus.COMPLETED\n if (event.data.status === 'in_progress') return MessageStatus.IN_PROGRESS\n if (event.data.status === 'incomplete') return MessageStatus.INCOMPLETE\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadMessageCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated>\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n role: event.data.role === 'assistant' ? 'ASSISTANT' : 'USER',\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event),\n },\n })\n\n const serializedMessage = serializeMessage({ message })\n\n controller.enqueue({\n ...event,\n data: serializedMessage,\n })\n\n return serializedMessage\n}\n","import type OpenAI from 'openai'\n\nexport const threadMessageDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus, RunStepType } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadMessageCompleted = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>\n}) => {\n controller.enqueue(event)\n\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: RunStepType.TOOL_CALLS,\n },\n orderBy: {\n createdAt: 'desc',\n },\n })\n\n if (!latestRunStep) {\n throw new Error('No run step found')\n }\n\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id,\n },\n data: {\n stepDetails: {\n type: 'tool_calls',\n tool_calls: event.data.tool_calls,\n },\n },\n })\n }\n\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED,\n ...(event.data.content ? { content: event.data.content } : {}),\n ...(event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}),\n },\n })\n}\n","import { threadRunInProgress } from './threadRunInProgress'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunCompleted } from './threadRunCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\n\nexport const handlers = {\n 'thread.run.in_progress': threadRunInProgress,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.completed': threadRunCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { handlers } from './handlers'\n\nexport const onEvent = ({\n prisma,\n controller,\n}: {\n prisma: PrismaClient\n controller: ReadableStreamDefaultController\n}) => (event: OpenAI.Beta.AssistantStreamEvent) => {\n // @ts-ignore-next-line\n const handler = handlers[event.event]\n\n if (!handler) {\n console.log('No handler for event', event)\n return\n }\n\n return handler({ prisma, controller, event })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run, MessageWithRun, RunStep } from '@/types/prisma'\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: Run\n}) => async () => {\n const messages = await prisma.message.findMany({\n where: {\n threadId: run.threadId,\n },\n include: {\n run: {\n include: {\n runSteps: true,\n },\n },\n },\n take: -10,\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n return messages.map((message: MessageWithRun) => ({\n ...serializeMessage({ message }),\n run: message.run ? ({\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n }) : null,\n }))\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputs']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputs']>> => {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma: PrismaClient) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n })\n\n for (const runStep of runSteps) {\n await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n const data = serializeRun({ run })\n\n await new Promise((resolve) => (\n new ReadableStream({\n async start(controller) {\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n resolve(void 0)\n },\n })\n ))\n\n return data\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\nimport { serializeRunStep } from './steps/serializeRunStep'\n\nexport const submitToolOutputsStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']>): ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']> => {\n return new ReadableStream({\n async start(controller) {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n for (const runStep of runSteps) {\n const completedRunStep = await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n\n controller.enqueue({\n event: 'thread.run.step.completed',\n data: serializeRunStep({ runStep: completedRunStep }),\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: serializeRun({ run }),\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRunStep } from './serializeRunStep'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs.Steps['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs.Steps['list']>> => {\n const threadId = args[0]\n const runId = args[1]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[2] ?? {})\n\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n hasNextPage: () => false,\n body: {\n last_id: last(runSteps)?.id ?? null,\n },\n }\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { list } from './list'\nimport { create } from './create'\nimport { createAndStream } from './createAndStream'\nimport { submitToolOutputs } from './submitToolOutputs'\nimport { submitToolOutputsStream } from './submitToolOutputsStream'\nimport { steps } from './steps'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n createAndStream: createAndStream({ prisma, runAdapter }),\n submitToolOutputs: submitToolOutputs({ prisma, runAdapter }),\n submitToolOutputsStream: submitToolOutputsStream({ prisma, runAdapter }),\n steps: steps({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { create } from './create'\nimport { messages } from './messages'\nimport { runs } from './runs'\n\nexport const threads = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n create: create({ prisma }),\n messages: messages({ prisma }),\n runs: runs({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { threads } from './threads'\n\nexport const beta = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n threads: threads({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } from '@/types'\nimport { beta } from './beta'\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n runAdapter,\n}: StorageAdapterArgs) => ({\n beta: beta({ prisma, runAdapter }),\n})\n"]}
1
+ {"version":3,"sources":["../src/supercompat.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages.ts","../src/adapters/run/completionsRunAdapter/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/create.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/createAndStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunInProgress.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunFailed.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunRequiresAction.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/serializeRunStep.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadRunStepDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCreated.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageDelta.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/threadMessageCompleted.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/handlers/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/onEvent/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/getMessages.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputs.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/submitToolOutputsStream.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/list.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/steps/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/runs/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/beta/index.ts","../src/adapters/storage/prismaStorageAdapter/index.ts"],"names":["messages","content","getMessages","onEvent","dayjs","assign","serializeMessage","create","last","list","runs","status","prisma"],"mappings":"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","sourcesContent":["import OpenAI from 'openai'\nimport { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: {\n client: OpenAI\n storage: (arg0: StorageAdapterArgs) => OpenAI\n runAdapter: RunAdapter\n}) => (\n assign(\n client,\n storage({\n runAdapter: partob(runAdapter, { client }),\n }),\n )\n)\n","import type OpenAI from 'openai'\nimport type MistralClient from '@mistralai/mistralai'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: MistralClient\n}) => ({\n chat: {\n completions: {\n // @ts-ignore-next-line\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => (\n // @ts-ignore-next-line\n (args[0].stream ? mistral.chatStream(...args) : mistral.chat(...args))\n )\n },\n },\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n chat: {\n completions: {\n create: (...args: Parameters<OpenAI.Chat.Completions['create']>): ReturnType<OpenAI.Chat.Completions['create']> => {\n const [firstArg, ...restArgs] = args\n\n const messages = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n firstArg.messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam, index: number) => {\n messages.push(message)\n\n const nextMessage = firstArg.messages[index + 1]\n if (!nextMessage) return\n\n if (message.role === 'user' && nextMessage.role === 'user') {\n messages.push({\n role: 'assistant',\n content: '',\n })\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n messages.push({\n role: 'user',\n content: '',\n })\n }\n })\n\n return perplexity.chat.completions.create({\n ...firstArg,\n messages,\n }, ...restArgs)\n },\n },\n },\n})\n","import _ from 'lodash'\nimport { uid, omit, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { MessageWithRun } from '@/types'\nimport { messages } from './messages'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: any\n delta: any\n}) => {\n if (!toolCall) return omit(delta, ['index'])\n\n // if (delta.type !== 'function') return toolCall\n\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n}\n\nconst toolCallsData = ({\n prevToolCalls,\n delta,\n}: {\n prevToolCalls: any\n delta: any\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...omit(tc, ['index']),\n }))\n }\n\n const newToolCalls = _.cloneDeep(prevToolCalls)\n\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta,\n })\n }\n\n return newToolCalls\n}\n\nexport const completionsRunAdapter = async ({\n client,\n run,\n onEvent,\n getMessages,\n}: {\n client: OpenAI\n run: OpenAI.Beta.Threads.Run\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n getMessages: () => Promise<MessageWithRun[]>\n}) => {\n if (run.status !== 'queued') return\n\n onEvent({\n event: 'thread.run.in_progress',\n data: {\n ...run,\n status: 'in_progress',\n },\n })\n\n const opts = {\n messages: await messages({\n run,\n getMessages,\n }),\n model: run.model,\n stream: true,\n ...(isEmpty(run.tools) ? {} : { tools: run.tools }),\n } as OpenAI.ChatCompletionCreateParamsStreaming\n\n console.dir({ opts }, { depth: null })\n let providerResponse\n\n try {\n providerResponse = await client.chat.completions.create(opts)\n } catch(e) {\n console.error(e)\n return onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: (e as { message: OpenAI.Beta.Threads.Runs.Run.LastError }).message,\n },\n })\n }\n\n let message = await onEvent({\n event: 'thread.message.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.message',\n completed_at: null,\n run_id: run.id,\n created_at: dayjs().unix(),\n assistant_id: run.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n file_ids: [],\n thread_id: run.thread_id,\n content: [{ text: { value: '', annotations: [] }, type: 'text' }],\n role: 'assistant',\n status: 'in_progress',\n },\n })\n\n onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'message_creation',\n status: 'completed',\n completed_at: dayjs().unix(),\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'message_creation',\n message_creation: {\n message_id: message.id,\n },\n },\n },\n })\n\n let toolCallsRunStep\n let currentContent = ''\n let currentToolCalls\n\n console.dir({ providerResponse }, { depth: null })\n for await (const chunk of providerResponse) {\n const delta = chunk.choices[0].delta\n\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? ''}`\n }\n\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent({\n event: 'thread.run.step.created',\n data: {\n id: 'THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID',\n object: 'thread.run.step',\n run_id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n type: 'tool_calls',\n status: 'in_progress',\n completed_at: null,\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: 'tool_calls',\n tool_calls: [],\n },\n },\n })\n }\n\n onEvent({\n event: 'thread.run.step.delta',\n data: {\n object: 'thread.run.step.delta',\n run_id: run.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...tc,\n })),\n },\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta)\n\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta })\n }\n\n if (delta.content) {\n onEvent({\n event: 'thread.message.delta',\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: 'text',\n index: 0,\n text: {\n value: delta.content,\n },\n },\n ],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n }\n }\n\n message = await onEvent({\n event: 'thread.message.completed',\n data: {\n ...message,\n status: 'completed',\n content: [{ text: { value: currentContent, annotations: [] }, type: 'text' }],\n tool_calls: currentToolCalls,\n },\n })\n\n if (isEmpty(message.toolCalls)) {\n return onEvent({\n event: 'thread.run.completed',\n data: {\n ...run,\n status: 'completed',\n completed_at: dayjs().unix(),\n },\n })\n }\n\n return onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...run,\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: message.toolCalls,\n },\n },\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { flat } from 'radash'\nimport { MessageWithRun } from '@/types'\nimport { serializeMessage } from './serializeMessage'\n\nexport const messages = async ({\n run,\n getMessages,\n}: {\n run: OpenAI.Beta.Threads.Run\n getMessages: () => Promise<MessageWithRun[]>\n}) => (\n [\n ...(run.instructions ? [{\n role: 'system',\n content: run.instructions,\n }] : []),\n ...flat((await getMessages()).map((message: MessageWithRun) => serializeMessage({ message }))),\n ]\n)\n","import type OpenAI from 'openai'\nimport { MessageWithRun } from '@/types'\n\nconst serializeToolCall = ({\n toolCall,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\n}) => ({\n tool_call_id: toolCall.id,\n role: 'tool' as 'tool',\n name: toolCall.function.name,\n content: toolCall.function.output,\n})\n\nconst serializeMessageWithContent = ({\n message,\n}: {\n message: MessageWithRun\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...(message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}),\n})\n\nconst serializeContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}) => content.map((content) => content.text.value).join('\\n')\n\nexport const serializeMessage = ({\n message\n}: {\n message: MessageWithRun\n}) => {\n const result = [serializeMessageWithContent({ message })]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = message.metadata?.toolCalls || []\n\n messageToolCalls.forEach((tc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n const runStep = run.runSteps.find((rs) => {\n if (rs.type !== 'tool_calls') return false\n\n return rs.step_details.tool_calls.some((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n })\n\n if (!runStep) return\n\n const toolCall = runStep.step_details.tool_calls.find((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n\n result.push(serializeToolCall({ toolCall }))\n })\n\n return result\n}\n","import type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { serializeThread } from './serializeThread'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads['create']>): Promise<ReturnType<OpenAI.Beta.Threads['create']>> => {\n const {\n // @ts-ignore-next-line\n body: {\n messages,\n metadata,\n },\n } = args[0]\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds').format()\n\n const thread = await prisma.thread.create({\n data: {\n metadata,\n assistant: {\n connect: {\n id: metadata.superinterfaceAssistantId,\n },\n },\n messages: {\n create: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message, index: number) => ({\n role: message.role,\n content: [{\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ],\n fileIds: message.file_ids,\n metadata: message.metadata,\n createdAt: dayjs(initialCreatedAt).add(index, 'seconds').toDate(),\n })),\n },\n },\n })\n\n return serializeThread({ thread })\n}\n","import type { Thread } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeThread = ({\n thread,\n}: {\n thread: Thread\n}) => ({\n id: thread.id,\n object: 'thread' as 'thread',\n created_at: dayjs(thread.createdAt).unix(),\n metadata: thread.metadata,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeMessage } from './serializeMessage'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['list']>> => {\n const threadId = args[0]\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const messages = await prisma.message.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: messages.map((message) => (\n serializeMessage({ message })\n )),\n hasNextPage: () => false,\n body: {\n last_id: last(messages)?.id ?? null,\n },\n }\n}\n","import type { Message } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: Message\n}) => ({\n id: message.id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails as unknown as OpenAI.Beta.Threads.Messages.Message.IncompleteDetails,\n role: message.role.toLowerCase() as 'user' | 'assistant',\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n assistant_id: message.assistantId,\n run_id: message.runId,\n file_ids: message.fileIds,\n status: message.status.toLowerCase() as OpenAI.Beta.Threads.Messages.Message['status'],\n metadata: assign(message.metadata as Record<any, any> ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {}),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from './serializeMessage'\n\nconst messageContentBlocks = ({\n content,\n}: {\n content: string\n}) => ([\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\n },\n },\n])\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Messages['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>> => {\n const threadId = args[0]\n const { content } = args[1]\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: 'USER',\n },\n })\n\n return serializeMessage({ message })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\nimport { create } from './create'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['list']>> => {\n const threadId = args[0]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[1] ?? {})\n\n const runs = await prisma.run.findMany({\n where: {\n threadId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runs.map((run) => serializeRun({ run })),\n hasNextPage: () => false,\n body: {\n last_id: last(runs)?.id ?? null,\n },\n }\n}\n","import type OpenAI from 'openai'\nimport type { Run } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const serializeRun = ({\n run,\n}: {\n run: Run\n}) => ({\n id: run.id,\n object: 'thread.run' as 'thread.run',\n created_at: dayjs(run.createdAt).unix(),\n thread_id: run.threadId,\n assistant_id: run.assistantId,\n status: run.status.toLowerCase() as OpenAI.Beta.Threads.Run['status'],\n required_action: run.requiredAction as OpenAI.Beta.Threads.Run['required_action'],\n last_error: run.lastError as OpenAI.Beta.Threads.Run['last_error'],\n expires_at: dayjs(run.expiresAt).unix(),\n started_at: run.startedAt ? dayjs(run.startedAt).unix() : null,\n cancelled_at: run.cancelledAt ? dayjs(run.cancelledAt).unix() : null,\n failed_at: run.failedAt ? dayjs(run.failedAt).unix() : null,\n completed_at: run.completedAt ? dayjs(run.completedAt).unix() : null,\n model: run.model,\n instructions: run.instructions,\n // @ts-ignore-next-line\n tools: run.tools as OpenAI.Beta.Threads.Run['tools'],\n file_ids: run.fileIds,\n metadata: run.metadata,\n usage: run.usage as OpenAI.Beta.Threads.Run['usage'],\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { serializeRun } from './serializeRun'\n\nexport const create = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['create']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['create']>> => {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n return serializeRun({ run })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\nimport dayjs from 'dayjs'\nimport { serializeRun } from './serializeRun'\nimport { RunAdapter } from '@/types'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const createAndStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['createAndStream']>): ReturnType<OpenAI.Beta.Threads.Runs['createAndStream']> => {\n return new ReadableStream({\n async start(controller) {\n const threadId = args[0]\n const { assistant_id } = args[1]\n\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id,\n },\n })\n\n if (!assistant) {\n throw new Error('Assistant not found')\n }\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n // @ts-ignore-next-line\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n // tools: [],\n // metadata: {},\n }, args[1])\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n // @ts-ignore-next-line\n model,\n // @ts-ignore-next-line\n instructions,\n // @ts-ignore-next-line\n tools,\n // @ts-ignore-next-line\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n },\n })\n\n const data = serializeRun({ run })\n\n controller.enqueue({\n event: 'thread.run.created',\n data,\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunInProgress = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.IN_PROGRESS,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunFailed = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.FAILED,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunCompleted = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { RunStatus } from '@/types/prisma'\n\nexport const threadRunRequiresAction = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.REQUIRES_ACTION,\n requiredAction: event.data.required_action,\n },\n })\n}\n","import dayjs from 'dayjs'\nimport type { RunStep } from '@prisma/client'\nimport type OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: RunStep\n}) => ({\n id: runStep.id,\n object: 'thread.run.step' as 'thread.run.step',\n created_at: dayjs(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['type'],\n status: runStep.status.toLowerCase() as OpenAI.Beta.Threads.Runs.RunStep['status'],\n // @ts-ignore-next-line\n step_details: runStep.stepDetails as OpenAI.Beta.Threads.Runs.RunStep['step_details'],\n last_error: runStep.lastError as OpenAI.Beta.Threads.Runs.RunStep['last_error'],\n expired_at: runStep.expiredAt ? dayjs(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage as OpenAI.Beta.Threads.Runs.RunStep['usage'],\n})\n","import type OpenAI from 'openai'\nimport { RunStepType, RunStepStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\n\nconst type = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.type === 'message_creation') return RunStepType.MESSAGE_CREATION\n if (event.data.type === 'tool_calls') return RunStepType.TOOL_CALLS\n\n throw new Error(`Unknown type: ${event.data.type}`)\n}\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.status === 'in_progress') return RunStepStatus.IN_PROGRESS\n if (event.data.status === 'cancelled') return RunStepStatus.CANCELLED\n if (event.data.status === 'completed') return RunStepStatus.COMPLETED\n if (event.data.status === 'failed') return RunStepStatus.FAILED\n if (event.data.status === 'expired') return RunStepStatus.EXPIRED\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadRunStepCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated>\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n })\n\n return serializedRunStep\n}\n","import type OpenAI from 'openai'\n\nexport const threadRunStepDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../../../messages/serializeMessage'\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated) => {\n if (event.data.status === 'completed') return MessageStatus.COMPLETED\n if (event.data.status === 'in_progress') return MessageStatus.IN_PROGRESS\n if (event.data.status === 'incomplete') return MessageStatus.INCOMPLETE\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadMessageCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated>\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n role: event.data.role === 'assistant' ? 'ASSISTANT' : 'USER',\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event),\n },\n })\n\n const serializedMessage = serializeMessage({ message })\n\n controller.enqueue({\n ...event,\n data: serializedMessage,\n })\n\n return serializedMessage\n}\n","import type OpenAI from 'openai'\n\nexport const threadMessageDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus, RunStepType } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadMessageCompleted = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>\n}) => {\n controller.enqueue(event)\n\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: RunStepType.TOOL_CALLS,\n },\n orderBy: {\n createdAt: 'desc',\n },\n })\n\n if (!latestRunStep) {\n throw new Error('No run step found')\n }\n\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id,\n },\n data: {\n stepDetails: {\n type: 'tool_calls',\n tool_calls: event.data.tool_calls,\n },\n },\n })\n }\n\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED,\n ...(event.data.content ? { content: event.data.content } : {}),\n ...(event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}),\n },\n })\n}\n","import { threadRunInProgress } from './threadRunInProgress'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunCompleted } from './threadRunCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\n\nexport const handlers = {\n 'thread.run.in_progress': threadRunInProgress,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.completed': threadRunCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { handlers } from './handlers'\n\nexport const onEvent = ({\n prisma,\n controller,\n}: {\n prisma: PrismaClient\n controller: ReadableStreamDefaultController\n}) => (event: OpenAI.Beta.AssistantStreamEvent) => {\n // @ts-ignore-next-line\n const handler = handlers[event.event]\n\n if (!handler) {\n console.log('No handler for event', event)\n return\n }\n\n return handler({ prisma, controller, event })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run, MessageWithRun, RunStep } from '@/types/prisma'\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: Run\n}) => async () => {\n const messages = await prisma.message.findMany({\n where: {\n threadId: run.threadId,\n },\n include: {\n run: {\n include: {\n runSteps: true,\n },\n },\n },\n take: -10,\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n return messages.map((message: MessageWithRun) => ({\n ...serializeMessage({ message }),\n run: message.run ? ({\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n }) : null,\n }))\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputs']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputs']>> => {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma: PrismaClient) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n })\n\n for (const runStep of runSteps) {\n await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n const data = serializeRun({ run })\n\n await new Promise((resolve) => (\n new ReadableStream({\n async start(controller) {\n await runAdapter({\n run: data,\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n resolve(void 0)\n },\n })\n ))\n\n return data\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { RunAdapter } from '@/types'\nimport { serializeRun } from './serializeRun'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\nimport { serializeRunStep } from './steps/serializeRunStep'\n\nexport const submitToolOutputsStream = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => (...args: Parameters<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']>): ReturnType<OpenAI.Beta.Threads.Runs['submitToolOutputsStream']> => {\n return new ReadableStream({\n async start(controller) {\n const [threadId, runId, body] = args\n const {\n tool_outputs,\n } = body\n\n const run = await prisma.$transaction(async (prisma) => {\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n type: 'TOOL_CALLS',\n status: 'IN_PROGRESS',\n },\n orderBy: {\n createdAt: 'asc',\n },\n })\n\n for (const runStep of runSteps) {\n const completedRunStep = await prisma.runStep.update({\n where: {\n id: runStep.id,\n },\n data: {\n status: 'COMPLETED',\n completedAt: dayjs().unix(),\n stepDetails: {\n type: 'tool_calls',\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0]\n\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null })\n throw new Error('Tool output not found')\n }\n\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output,\n },\n }\n }),\n },\n },\n })\n\n controller.enqueue({\n event: 'thread.run.step.completed',\n data: serializeRunStep({ runStep: completedRunStep }),\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n })\n\n // partobs client from above\n // @ts-ignore-next-line\n await runAdapter({\n run: serializeRun({ run }),\n onEvent: onEvent({ controller, prisma }),\n // @ts-ignore-next-line\n getMessages: getMessages({ prisma, run }),\n })\n\n console.log('Stream ended inside cloud storage')\n controller.close()\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type OpenAI from 'openai'\nimport { assign, last } from 'radash'\nimport { serializeRunStep } from './serializeRunStep'\n\nexport const list = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads.Runs.Steps['list']>): Promise<ReturnType<OpenAI.Beta.Threads.Runs.Steps['list']>> => {\n const threadId = args[0]\n const runId = args[1]\n\n const {\n // @ts-ignore-next-line\n limit,\n // @ts-ignore-next-line\n order,\n } = assign({\n // @ts-ignore-next-line\n limit: 20,\n order: 'desc',\n }, args[2] ?? {})\n\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n },\n take: limit,\n orderBy: {\n createdAt: order,\n },\n })\n\n // @ts-ignore-next-line\n return {\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n hasNextPage: () => false,\n body: {\n last_id: last(runSteps)?.id ?? null,\n },\n }\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { list } from './list'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n list: list({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { list } from './list'\nimport { create } from './create'\nimport { createAndStream } from './createAndStream'\nimport { submitToolOutputs } from './submitToolOutputs'\nimport { submitToolOutputsStream } from './submitToolOutputsStream'\nimport { steps } from './steps'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n list: list({ prisma }),\n create: create({ prisma }),\n createAndStream: createAndStream({ prisma, runAdapter }),\n submitToolOutputs: submitToolOutputs({ prisma, runAdapter }),\n submitToolOutputsStream: submitToolOutputsStream({ prisma, runAdapter }),\n steps: steps({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { create } from './create'\nimport { messages } from './messages'\nimport { runs } from './runs'\n\nexport const threads = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n create: create({ prisma }),\n messages: messages({ prisma }),\n runs: runs({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { RunAdapter } from '@/types'\nimport { threads } from './threads'\n\nexport const beta = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n threads: threads({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } from '@/types'\nimport { beta } from './beta'\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n runAdapter,\n}: StorageAdapterArgs) => ({\n beta: beta({ prisma, runAdapter }),\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supercompat",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",