@superinterface/react 2.7.2 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.cjs CHANGED
@@ -674,6 +674,11 @@ var serializeRun = function(param) {
674
674
  "created_at"
675
675
  ]);
676
676
  };
677
+ // src/lib/streams/enqueueJson.ts
678
+ var enqueueJson = function(param) {
679
+ var controller = param.controller, value = param.value;
680
+ return controller.enqueue(new TextEncoder().encode(JSON.stringify(value)));
681
+ };
677
682
  // src/lib/messages/createMessageResponse/actionsStream.ts
678
683
  var import_p_map2 = __toESM(require("p-map"), 1);
679
684
  var actionsStream = function() {
@@ -717,10 +722,6 @@ var actionsStream = function() {
717
722
  };
718
723
  }();
719
724
  // src/lib/messages/createMessageResponse/handleStream.ts
720
- var enqueueJson = function(param) {
721
- var controller = param.controller, value = param.value;
722
- return controller.enqueue(new TextEncoder().encode(JSON.stringify(value)));
723
- };
724
725
  var handleStream = function() {
725
726
  var _ref = _async_to_generator(function(param) {
726
727
  var client, stream, controller, handleToolCall, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, value, _tmp, err;
@@ -932,13 +933,16 @@ var handleStream = function() {
932
933
  }();
933
934
  // src/lib/messages/createMessageResponse/index.ts
934
935
  var createMessageResponse = function(param) {
935
- var client = param.client, createRunStream = param.createRunStream, handleToolCall = param.handleToolCall, _param_onClose = param.onClose, onClose = _param_onClose === void 0 ? function() {} : _param_onClose;
936
+ var client = param.client, createRunStream = param.createRunStream, handleToolCall = param.handleToolCall, _param_onStart = param.onStart, onStart = _param_onStart === void 0 ? function() {} : _param_onStart, _param_onClose = param.onClose, onClose = _param_onClose === void 0 ? function() {} : _param_onClose;
936
937
  return new ReadableStream({
937
938
  start: function start(controller) {
938
939
  return _async_to_generator(function() {
939
940
  return _ts_generator(this, function(_state) {
940
941
  switch(_state.label){
941
942
  case 0:
943
+ onStart({
944
+ controller: controller
945
+ });
942
946
  return [
943
947
  4,
944
948
  handleStream({
@@ -951,7 +955,9 @@ var createMessageResponse = function(param) {
951
955
  case 1:
952
956
  _state.sent();
953
957
  console.log("Stream ended");
954
- onClose();
958
+ onClose({
959
+ controller: controller
960
+ });
955
961
  controller.close();
956
962
  return [
957
963
  2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["import_radash","dayjs","messagesResponse","pMap","import_p_map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAqB;AAGd,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,UAGE,oBAAK,SAAS;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAIO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,QAAQ,QAAQ;AAAA,EAChB,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,YACtC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,EACD,QAAQ,QAAQ;AAClB;;;ACtBA,mBAAiB;;;ACOV,IAAM,cAAc,OAAO;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,mBAAmB,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM;AAAA,IAC5D;AAAA,IACA;AAAA,EACF;AAEA,SAAO,iBAAiB;AAC1B;;;ACXO,IAAM,gBAAgB,OAAO;AAAA,EAClC;AAAA,EACA;AACF,MAAY;AACV,MAAI,CAAC,QAAQ,QAAQ;AACnB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,MAAM,YAAY;AAAA,MAC1B,UAAU,QAAQ;AAAA,MAClB,OAAO,QAAQ;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC3BA,mBAAkB;;;ACOX,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AACF,MAAY;AACV,QAAM,eAAe,MAAM,OAAO,KAAK,QAAQ,KAAK,KAAK,UAAU;AAAA,IACjE,OAAO;AAAA,EACT,CAAC;AAED,SAAO,aAAa,KAAK,CAAC;AAC5B;;;AChBA,IAAAA,iBAAoB;AAEb,IAAM,eAAe,MAC1B,QAAI,oBAAI,EAAE,CAAC;;;AFSb,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,cAAc,OAAO;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,YAAY,MAAM,aAAa,EAAE,UAAU,OAAO,CAAC;AAEzD,MAAI,CAAC,WAAW;AACd,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,uBAAuB,OAAO,KAAK,OAAK,EAAE,WAAW,UAAU,EAAE;AAEvE,MAAI,sBAAsB;AACxB,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,CAAC,iBAAiB,SAAS,UAAU,MAAM,GAAG;AAChD,WAAO,CAAC;AAAA,EACV;AAEA,SAAO;AAAA,IACL,MAAM,cAAc;AAAA,MAClB,SAAS;AAAA,QACP,IAAI,aAAa;AAAA,QACjB,MAAM;AAAA,QACN,gBAAY,aAAAC,SAAM,EAAE,KAAK;AAAA,QACzB,QAAQ;AAAA,QACR,oBAAoB;AAAA,QACpB,kBAAc,aAAAA,SAAM,EAAE,KAAK;AAAA,QAC3B,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,SAAS,CAAC;AAAA,QACV,QAAQ,UAAU;AAAA,QAClB,cAAc,UAAU;AAAA,QACxB,WAAW,UAAU;AAAA,QACrB,UAAU,CAAC;AAAA,QACX,UAAU,CAAC;AAAA,MACb;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AHxDO,IAAM,WAAW,OAAO;AAAA,EAC7B,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,SAAS,UAAM,aAAAC,SAAKD,kBAAiB,MAAM,CAAC,YAChD,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC,CACF;AAED,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,MAAM,YAAY;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,GAAG;AAAA,EACL;AACF;;;AM/BO,IAAM,OAAO,OAAO;AAAA,EACzB,kBAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAMG,MAAM,SAAS;AAAA,EACd,kBAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAAG,IAAI,CAAC,YACP,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;;;ACtBI,IAAM,QAAQ;;;ACGd,IAAM,cAAc,CAAC;AAAA,EAC1B,kBAAAA;AACF,MAEM;AACJ,MAAIA,kBAAiB,KAAK,SAAS;AAAO,WAAO;AAEjD,SAAOA,kBAAiB,YAAY;AACtC;;;ACEO,IAAM,mBAAmB,OAAO;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,MAAmC;AACjC,QAAMA,oBAAmB,MAAM,OAAO,KAAK,QAAQ,SAAS,KAAK,UAAU;AAAA,IACzE,GAAI,YAAY,EAAE,OAAO,UAAU,IAAI,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,MAAM,MAAM,KAAK;AAAA,MACf;AAAA,MACA,kBAAAA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,aAAa,YAAY,EAAE,kBAAAA,kBAAiB,CAAC;AAAA;AAAA,IAE7C,QAAQA,kBAAiB,KAAK;AAAA,EAChC;AACF;;;AClCA,IAAAF,iBAAqB;AAGd,IAAM,eAAe,CAAC;AAAA,EAC3B;AACF,UAGE,qBAAK,KAAK;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACZH,IAAAI,gBAAiB;AAEV,IAAM,gBAAgB,OAAO;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,MAAI,CAAC,IAAI,iBAAiB;AACxB,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAEA,QAAM,YAAY,IAAI,gBAAgB,oBAAoB;AAE1D,SAAO,OAAO,KAAK,QAAQ,KAAK;AAAA,IAC9B,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ;AAAA,MACE,cAAc,UAAM,cAAAD;AAAA,QAAK;AAAA,QAAW,CAAC,aACnC,eAAe,EAAE,UAAU,IAAI,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;;;ACtBA,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AACF,MAIE,WAAW,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC;AAG7D,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,mBAAiB,SAAS,QAAQ;AAChC,QAAI,CAAC,0BAA0B,0BAA0B,EAAE,SAAS,MAAM,KAAK,GAAG;AAChF,kBAAY;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,OAAO,MAAM;AAAA,UACb,MAAM,iBAAiB;AAAA,YACrB,SAAS,MAAM;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,WAAW,CAAC,wBAAwB,uBAAuB,EAAE,SAAS,MAAM,KAAK,GAAG;AAClF,kBAAY;AAAA,QACV;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,WAAW,MAAM,UAAU,sBAAsB;AAC/C,kBAAY;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,OAAO,MAAM;AAAA,UACb,MAAM,aAAa;AAAA,YACjB,KAAK,MAAM;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,WAAW,CAAC,2BAA2B,2BAA2B,EAAE,SAAS,MAAM,KAAK,GAAG;AACzF,kBAAY;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,OAAO,MAAM;AAAA,UACb,MAAM,iBAAiB;AAAA,YACrB,SAAS,MAAM;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,WAAW,MAAM,UAAU,8BAA8B;AACvD,kBAAY;AAAA,QACV;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,aAAa;AAAA,QACjB;AAAA,QACA,QAAQ,MAAM,cAAc;AAAA,UAC1B;AAAA,UACA,KAAK,MAAM;AAAA,UACX;AAAA,QACF,CAAC;AAAA,QACD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,cAAQ,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,KAAK,CAAC;AAAA,IACxC;AAAA,EACF;AACF;;;AChFO,IAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,MAAM;AAAA,EAAC;AACnB,MAME,IAAI,eAAe;AAAA,EACjB,MAAM,MAAM,YAAY;AACtB,UAAM,aAAa;AAAA,MACjB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF,CAAC;AAGD,YAAQ,IAAI,cAAc;AAC1B,YAAQ;AACR,eAAW,MAAM;AAAA,EACnB;AACF,CAAC","sourcesContent":["export { messagesResponse } from '@/lib/messages/messagesResponse'\nexport { createMessageResponse } from '@/lib/messages/createMessageResponse'\nexport { extendMessage } from '@/lib/messages/extendMessage'\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n file_ids: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({ toolCall, run }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { actionsStream } from './actionsStream'\n\nconst enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n}) => {\n for await (const value of stream) {\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n }),\n controller,\n handleToolCall,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onClose = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onClose?: () => void\n}) => (\n new ReadableStream({\n async start(controller) {\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n })\n\n\n console.log('Stream ended')\n onClose()\n controller.close()\n },\n })\n)\n"]}
1
+ {"version":3,"sources":["../src/server.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/streams/enqueueJson.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["import_radash","dayjs","messagesResponse","pMap","import_p_map"],"mappings":"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","sourcesContent":["export { messagesResponse } from '@/lib/messages/messagesResponse'\nexport { createMessageResponse } from '@/lib/messages/createMessageResponse'\nexport { extendMessage } from '@/lib/messages/extendMessage'\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n file_ids: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({ toolCall, run }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { enqueueJson } from '@/lib/streams/enqueueJson'\nimport { actionsStream } from './actionsStream'\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n}) => {\n for await (const value of stream) {\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n }),\n controller,\n handleToolCall,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\ntype CallbackArgs = {\n controller: ReadableStreamDefaultController<Uint8Array>\n}\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onStart = () => {},\n onClose = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onStart?: (args: CallbackArgs) => void\n onClose?: (args: CallbackArgs) => void\n}) => (\n new ReadableStream({\n async start(controller) {\n onStart({ controller })\n\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n })\n\n console.log('Stream ended')\n onClose({ controller })\n controller.close()\n },\n })\n)\n"]}
package/dist/server.d.cts CHANGED
@@ -8,11 +8,15 @@ type Args$1 = {
8
8
  };
9
9
  declare const messagesResponse: ({ client, threadId, pageParam, }: Args$1) => Promise<MessagesPage>;
10
10
 
11
- declare const createMessageResponse: ({ client, createRunStream, handleToolCall, onClose, }: {
11
+ type CallbackArgs = {
12
+ controller: ReadableStreamDefaultController<Uint8Array>;
13
+ };
14
+ declare const createMessageResponse: ({ client, createRunStream, handleToolCall, onStart, onClose, }: {
12
15
  client: any;
13
16
  createRunStream: any;
14
17
  handleToolCall: any;
15
- onClose?: (() => void) | undefined;
18
+ onStart?: ((args: CallbackArgs) => void) | undefined;
19
+ onClose?: ((args: CallbackArgs) => void) | undefined;
16
20
  }) => ReadableStream<any>;
17
21
 
18
22
  type Args = {
package/dist/server.d.ts CHANGED
@@ -8,11 +8,15 @@ type Args$1 = {
8
8
  };
9
9
  declare const messagesResponse: ({ client, threadId, pageParam, }: Args$1) => Promise<MessagesPage>;
10
10
 
11
- declare const createMessageResponse: ({ client, createRunStream, handleToolCall, onClose, }: {
11
+ type CallbackArgs = {
12
+ controller: ReadableStreamDefaultController<Uint8Array>;
13
+ };
14
+ declare const createMessageResponse: ({ client, createRunStream, handleToolCall, onStart, onClose, }: {
12
15
  client: any;
13
16
  createRunStream: any;
14
17
  handleToolCall: any;
15
- onClose?: (() => void) | undefined;
18
+ onStart?: ((args: CallbackArgs) => void) | undefined;
19
+ onClose?: ((args: CallbackArgs) => void) | undefined;
16
20
  }) => ReadableStream<any>;
17
21
 
18
22
  type Args = {
package/dist/server.js CHANGED
@@ -601,6 +601,11 @@ var serializeRun = function(param) {
601
601
  "created_at"
602
602
  ]);
603
603
  };
604
+ // src/lib/streams/enqueueJson.ts
605
+ var enqueueJson = function(param) {
606
+ var controller = param.controller, value = param.value;
607
+ return controller.enqueue(new TextEncoder().encode(JSON.stringify(value)));
608
+ };
604
609
  // src/lib/messages/createMessageResponse/actionsStream.ts
605
610
  import pMap2 from "p-map";
606
611
  var actionsStream = function() {
@@ -644,10 +649,6 @@ var actionsStream = function() {
644
649
  };
645
650
  }();
646
651
  // src/lib/messages/createMessageResponse/handleStream.ts
647
- var enqueueJson = function(param) {
648
- var controller = param.controller, value = param.value;
649
- return controller.enqueue(new TextEncoder().encode(JSON.stringify(value)));
650
- };
651
652
  var handleStream = function() {
652
653
  var _ref = _async_to_generator(function(param) {
653
654
  var client, stream, controller, handleToolCall, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, value, _tmp, err;
@@ -859,13 +860,16 @@ var handleStream = function() {
859
860
  }();
860
861
  // src/lib/messages/createMessageResponse/index.ts
861
862
  var createMessageResponse = function(param) {
862
- var client = param.client, createRunStream = param.createRunStream, handleToolCall = param.handleToolCall, _param_onClose = param.onClose, onClose = _param_onClose === void 0 ? function() {} : _param_onClose;
863
+ var client = param.client, createRunStream = param.createRunStream, handleToolCall = param.handleToolCall, _param_onStart = param.onStart, onStart = _param_onStart === void 0 ? function() {} : _param_onStart, _param_onClose = param.onClose, onClose = _param_onClose === void 0 ? function() {} : _param_onClose;
863
864
  return new ReadableStream({
864
865
  start: function start(controller) {
865
866
  return _async_to_generator(function() {
866
867
  return _ts_generator(this, function(_state) {
867
868
  switch(_state.label){
868
869
  case 0:
870
+ onStart({
871
+ controller: controller
872
+ });
869
873
  return [
870
874
  4,
871
875
  handleStream({
@@ -878,7 +882,9 @@ var createMessageResponse = function(param) {
878
882
  case 1:
879
883
  _state.sent();
880
884
  console.log("Stream ended");
881
- onClose();
885
+ onClose({
886
+ controller: controller
887
+ });
882
888
  controller.close();
883
889
  return [
884
890
  2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["messagesResponse","pick","pMap"],"mappings":";AAAA,SAAS,YAAY;AAGd,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,MAGE,KAAK,SAAS;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAIO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,QAAQ,QAAQ;AAAA,EAChB,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,YACtC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,EACD,QAAQ,QAAQ;AAClB;;;ACtBA,OAAO,UAAU;;;ACOV,IAAM,cAAc,OAAO;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,mBAAmB,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM;AAAA,IAC5D;AAAA,IACA;AAAA,EACF;AAEA,SAAO,iBAAiB;AAC1B;;;ACXO,IAAM,gBAAgB,OAAO;AAAA,EAClC;AAAA,EACA;AACF,MAAY;AACV,MAAI,CAAC,QAAQ,QAAQ;AACnB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,MAAM,YAAY;AAAA,MAC1B,UAAU,QAAQ;AAAA,MAClB,OAAO,QAAQ;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC3BA,OAAO,WAAW;;;ACOX,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AACF,MAAY;AACV,QAAM,eAAe,MAAM,OAAO,KAAK,QAAQ,KAAK,KAAK,UAAU;AAAA,IACjE,OAAO;AAAA,EACT,CAAC;AAED,SAAO,aAAa,KAAK,CAAC;AAC5B;;;AChBA,SAAS,WAAW;AAEb,IAAM,eAAe,MAC1B,IAAI,IAAI,EAAE,CAAC;;;AFSb,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,cAAc,OAAO;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,YAAY,MAAM,aAAa,EAAE,UAAU,OAAO,CAAC;AAEzD,MAAI,CAAC,WAAW;AACd,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,uBAAuB,OAAO,KAAK,OAAK,EAAE,WAAW,UAAU,EAAE;AAEvE,MAAI,sBAAsB;AACxB,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,CAAC,iBAAiB,SAAS,UAAU,MAAM,GAAG;AAChD,WAAO,CAAC;AAAA,EACV;AAEA,SAAO;AAAA,IACL,MAAM,cAAc;AAAA,MAClB,SAAS;AAAA,QACP,IAAI,aAAa;AAAA,QACjB,MAAM;AAAA,QACN,YAAY,MAAM,EAAE,KAAK;AAAA,QACzB,QAAQ;AAAA,QACR,oBAAoB;AAAA,QACpB,cAAc,MAAM,EAAE,KAAK;AAAA,QAC3B,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,SAAS,CAAC;AAAA,QACV,QAAQ,UAAU;AAAA,QAClB,cAAc,UAAU;AAAA,QACxB,WAAW,UAAU;AAAA,QACrB,UAAU,CAAC;AAAA,QACX,UAAU,CAAC;AAAA,MACb;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AHxDO,IAAM,WAAW,OAAO;AAAA,EAC7B,kBAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,SAAS,MAAM,KAAKA,kBAAiB,MAAM,CAAC,YAChD,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC,CACF;AAED,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,MAAM,YAAY;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,GAAG;AAAA,EACL;AACF;;;AM/BO,IAAM,OAAO,OAAO;AAAA,EACzB,kBAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAMG,MAAM,SAAS;AAAA,EACd,kBAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAAG,IAAI,CAAC,YACP,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;;;ACtBI,IAAM,QAAQ;;;ACGd,IAAM,cAAc,CAAC;AAAA,EAC1B,kBAAAA;AACF,MAEM;AACJ,MAAIA,kBAAiB,KAAK,SAAS;AAAO,WAAO;AAEjD,SAAOA,kBAAiB,YAAY;AACtC;;;ACEO,IAAM,mBAAmB,OAAO;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,MAAmC;AACjC,QAAMA,oBAAmB,MAAM,OAAO,KAAK,QAAQ,SAAS,KAAK,UAAU;AAAA,IACzE,GAAI,YAAY,EAAE,OAAO,UAAU,IAAI,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,MAAM,MAAM,KAAK;AAAA,MACf;AAAA,MACA,kBAAAA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,aAAa,YAAY,EAAE,kBAAAA,kBAAiB,CAAC;AAAA;AAAA,IAE7C,QAAQA,kBAAiB,KAAK;AAAA,EAChC;AACF;;;AClCA,SAAS,QAAAC,aAAY;AAGd,IAAM,eAAe,CAAC;AAAA,EAC3B;AACF,MAGEA,MAAK,KAAK;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACZH,OAAOC,WAAU;AAEV,IAAM,gBAAgB,OAAO;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,MAAI,CAAC,IAAI,iBAAiB;AACxB,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAEA,QAAM,YAAY,IAAI,gBAAgB,oBAAoB;AAE1D,SAAO,OAAO,KAAK,QAAQ,KAAK;AAAA,IAC9B,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ;AAAA,MACE,cAAc,MAAMA;AAAA,QAAK;AAAA,QAAW,CAAC,aACnC,eAAe,EAAE,UAAU,IAAI,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;;;ACtBA,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AACF,MAIE,WAAW,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC;AAG7D,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,mBAAiB,SAAS,QAAQ;AAChC,QAAI,CAAC,0BAA0B,0BAA0B,EAAE,SAAS,MAAM,KAAK,GAAG;AAChF,kBAAY;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,OAAO,MAAM;AAAA,UACb,MAAM,iBAAiB;AAAA,YACrB,SAAS,MAAM;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,WAAW,CAAC,wBAAwB,uBAAuB,EAAE,SAAS,MAAM,KAAK,GAAG;AAClF,kBAAY;AAAA,QACV;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,WAAW,MAAM,UAAU,sBAAsB;AAC/C,kBAAY;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,OAAO,MAAM;AAAA,UACb,MAAM,aAAa;AAAA,YACjB,KAAK,MAAM;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,WAAW,CAAC,2BAA2B,2BAA2B,EAAE,SAAS,MAAM,KAAK,GAAG;AACzF,kBAAY;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,OAAO,MAAM;AAAA,UACb,MAAM,iBAAiB;AAAA,YACrB,SAAS,MAAM;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,WAAW,MAAM,UAAU,8BAA8B;AACvD,kBAAY;AAAA,QACV;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,aAAa;AAAA,QACjB;AAAA,QACA,QAAQ,MAAM,cAAc;AAAA,UAC1B;AAAA,UACA,KAAK,MAAM;AAAA,UACX;AAAA,QACF,CAAC;AAAA,QACD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,cAAQ,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,KAAK,CAAC;AAAA,IACxC;AAAA,EACF;AACF;;;AChFO,IAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,MAAM;AAAA,EAAC;AACnB,MAME,IAAI,eAAe;AAAA,EACjB,MAAM,MAAM,YAAY;AACtB,UAAM,aAAa;AAAA,MACjB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF,CAAC;AAGD,YAAQ,IAAI,cAAc;AAC1B,YAAQ;AACR,eAAW,MAAM;AAAA,EACnB;AACF,CAAC","sourcesContent":["import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n file_ids: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({ toolCall, run }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { actionsStream } from './actionsStream'\n\nconst enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n}) => {\n for await (const value of stream) {\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n }),\n controller,\n handleToolCall,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onClose = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onClose?: () => void\n}) => (\n new ReadableStream({\n async start(controller) {\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n })\n\n\n console.log('Stream ended')\n onClose()\n controller.close()\n },\n })\n)\n"]}
1
+ {"version":3,"sources":["../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/streams/enqueueJson.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["messagesResponse","pick","pMap"],"mappings":"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","sourcesContent":["import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n file_ids: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({ toolCall, run }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { enqueueJson } from '@/lib/streams/enqueueJson'\nimport { actionsStream } from './actionsStream'\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n}) => {\n for await (const value of stream) {\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n }),\n controller,\n handleToolCall,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\ntype CallbackArgs = {\n controller: ReadableStreamDefaultController<Uint8Array>\n}\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onStart = () => {},\n onClose = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onStart?: (args: CallbackArgs) => void\n onClose?: (args: CallbackArgs) => void\n}) => (\n new ReadableStream({\n async start(controller) {\n onStart({ controller })\n\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n })\n\n console.log('Stream ended')\n onClose({ controller })\n controller.close()\n },\n })\n)\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA","sourcesContent":["import OpenAI from 'openai'\n\nexport type SerializedRunStep = Pick<OpenAI.Beta.Threads.Runs.RunStep, 'id' | 'run_id' | 'step_details' | 'completed_at' | 'cancelled_at' | 'failed_at' | 'status'>\n\nexport type SerializedMessage = Pick<OpenAI.Beta.Threads.Messages.Message, 'id' | 'role' | 'created_at' | 'content' | 'run_id' | 'assistant_id' | 'thread_id' | 'file_ids' | 'metadata' | 'status'> & {\n runSteps: SerializedRunStep[]\n}\n\nexport type MessagesPage = {\n data: SerializedMessage[]\n hasNextPage: boolean\n lastId: string\n}\n\nexport type MessageGroup = {\n id: string\n role: \"user\" | \"assistant\"\n messages: SerializedMessage[]\n createdAt: number\n}\n\nexport type AudioEngine = {\n source: MediaStreamAudioSourceNode | GainNode\n audioContext: AudioContext\n}\n\nexport type Toast = {\n type: 'success' | 'error'\n message: string\n}\n\nexport type ThreadMessageCreatedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCreated & {\n data: SerializedMessage\n}\n\nexport type ThreadMessageCompletedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCompleted & {\n data: SerializedMessage\n}\n\nexport type ThreadRunStepDeltaEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepDelta & {\n data: {\n run_id: string\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA","sourcesContent":["import OpenAI from 'openai'\n\nexport type SerializedRunStep = Pick<OpenAI.Beta.Threads.Runs.RunStep, 'id' | 'run_id' | 'step_details' | 'completed_at' | 'cancelled_at' | 'failed_at' | 'status'>\n\nexport type SerializedMessage = Pick<OpenAI.Beta.Threads.Messages.Message, 'id' | 'role' | 'created_at' | 'content' | 'run_id' | 'assistant_id' | 'thread_id' | 'file_ids' | 'metadata' | 'status'> & {\n runSteps: SerializedRunStep[]\n}\n\nexport type MessagesPage = {\n data: SerializedMessage[]\n hasNextPage: boolean\n lastId: string\n}\n\nexport type MessageGroup = {\n id: string\n role: \"user\" | \"assistant\"\n messages: SerializedMessage[]\n createdAt: number\n}\n\nexport type AudioEngine = {\n source: MediaStreamAudioSourceNode | GainNode\n audioContext: AudioContext\n}\n\nexport type Toast = {\n type: 'success' | 'error'\n message: string\n}\n\nexport type ThreadMessageCreatedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCreated & {\n data: SerializedMessage\n}\n\nexport type ThreadMessageCompletedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCompleted & {\n data: SerializedMessage\n}\n\nexport type ThreadRunStepDeltaEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepDelta & {\n data: {\n run_id: string\n }\n}\n\nexport type MessagesQueryKey = (string | Record<string, any>)[]\n"]}
@@ -34,5 +34,6 @@ type ThreadRunStepDeltaEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.Threa
34
34
  run_id: string;
35
35
  };
36
36
  };
37
+ type MessagesQueryKey = (string | Record<string, any>)[];
37
38
 
38
- export type { AudioEngine, MessageGroup, MessagesPage, SerializedMessage, SerializedRunStep, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast };
39
+ export type { AudioEngine, MessageGroup, MessagesPage, MessagesQueryKey, SerializedMessage, SerializedRunStep, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast };
@@ -34,5 +34,6 @@ type ThreadRunStepDeltaEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.Threa
34
34
  run_id: string;
35
35
  };
36
36
  };
37
+ type MessagesQueryKey = (string | Record<string, any>)[];
37
38
 
38
- export type { AudioEngine, MessageGroup, MessagesPage, SerializedMessage, SerializedRunStep, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast };
39
+ export type { AudioEngine, MessageGroup, MessagesPage, MessagesQueryKey, SerializedMessage, SerializedRunStep, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast };
package/dist/utils.cjs CHANGED
@@ -48,6 +48,9 @@ var __toCommonJS = function(mod) {
48
48
  // src/utils.ts
49
49
  var utils_exports = {};
50
50
  __export(utils_exports, {
51
+ enqueueJson: function() {
52
+ return enqueueJson;
53
+ },
51
54
  optimisticId: function() {
52
55
  return optimisticId;
53
56
  },
@@ -105,8 +108,14 @@ var key = function(param) {
105
108
  var assistantId = param.assistantId;
106
109
  return "superinterface-".concat(assistantId, "-threadId");
107
110
  };
111
+ // src/lib/streams/enqueueJson.ts
112
+ var enqueueJson = function(param) {
113
+ var controller = param.controller, value = param.value;
114
+ return controller.enqueue(new TextEncoder().encode(JSON.stringify(value)));
115
+ };
108
116
  // Annotate the CommonJS export names for ESM import in node:
109
117
  0 && (module.exports = {
118
+ enqueueJson: enqueueJson,
110
119
  optimisticId: optimisticId,
111
120
  serializeMessage: serializeMessage,
112
121
  threadIdCookieKey: threadIdCookieKey
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/threadIdCookies/key.ts"],"names":["import_radash"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAoB;AAEb,IAAM,eAAe,MAC1B,QAAI,mBAAI,EAAE,CAAC;;;ACHb,IAAAA,iBAAqB;AAGd,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,UAGE,qBAAK,SAAS;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAIO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,QAAQ,QAAQ;AAAA,EAChB,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,YACtC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,EACD,QAAQ,QAAQ;AAClB;;;ACvBO,IAAM,MAAM,CAAC;AAAA,EAClB;AACF,MAGE,kBAAkB,WAAW","sourcesContent":["export { optimisticId } from '@/lib/optimistic/optimisticId'\nexport { serializeMessage } from '@/lib/messages/serializeMessage'\nexport { key as threadIdCookieKey } from '@/lib/threadIdCookies/key'\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/threadIdCookies/key.ts","../src/lib/streams/enqueueJson.ts"],"names":["import_radash"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAoB;AAEb,IAAM,eAAe,MAC1B,QAAI,mBAAI,EAAE,CAAC;;;ACHb,IAAAA,iBAAqB;AAGd,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,UAGE,qBAAK,SAAS;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAIO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,QAAQ,QAAQ;AAAA,EAChB,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,YACtC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,EACD,QAAQ,QAAQ;AAClB;;;ACvBO,IAAM,MAAM,CAAC;AAAA,EAClB;AACF,MAGE,kBAAkB,WAAW;;;ACLxB,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AACF,MAIE,WAAW,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC","sourcesContent":["export { optimisticId } from '@/lib/optimistic/optimisticId'\nexport { serializeMessage } from '@/lib/messages/serializeMessage'\nexport { key as threadIdCookieKey } from '@/lib/threadIdCookies/key'\nexport { enqueueJson } from '@/lib/streams/enqueueJson'\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n"]}
package/dist/utils.d.cts CHANGED
@@ -24,4 +24,9 @@ declare const key: ({ assistantId, }: {
24
24
  assistantId: string;
25
25
  }) => string;
26
26
 
27
- export { optimisticId, serializeMessage, key as threadIdCookieKey };
27
+ declare const enqueueJson: ({ controller, value, }: {
28
+ controller: ReadableStreamDefaultController;
29
+ value: any;
30
+ }) => void;
31
+
32
+ export { enqueueJson, optimisticId, serializeMessage, key as threadIdCookieKey };
package/dist/utils.d.ts CHANGED
@@ -24,4 +24,9 @@ declare const key: ({ assistantId, }: {
24
24
  assistantId: string;
25
25
  }) => string;
26
26
 
27
- export { optimisticId, serializeMessage, key as threadIdCookieKey };
27
+ declare const enqueueJson: ({ controller, value, }: {
28
+ controller: ReadableStreamDefaultController;
29
+ value: any;
30
+ }) => void;
31
+
32
+ export { enqueueJson, optimisticId, serializeMessage, key as threadIdCookieKey };
package/dist/utils.js CHANGED
@@ -44,5 +44,10 @@ var key = function(param) {
44
44
  var assistantId = param.assistantId;
45
45
  return "superinterface-".concat(assistantId, "-threadId");
46
46
  };
47
- export { optimisticId, serializeMessage, key as threadIdCookieKey };
47
+ // src/lib/streams/enqueueJson.ts
48
+ var enqueueJson = function(param) {
49
+ var controller = param.controller, value = param.value;
50
+ return controller.enqueue(new TextEncoder().encode(JSON.stringify(value)));
51
+ };
52
+ export { enqueueJson, optimisticId, serializeMessage, key as threadIdCookieKey };
48
53
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/optimistic/optimisticId.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/threadIdCookies/key.ts"],"names":[],"mappings":";AAAA,SAAS,WAAW;AAEb,IAAM,eAAe,MAC1B,IAAI,IAAI,EAAE,CAAC;;;ACHb,SAAS,YAAY;AAGd,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,MAGE,KAAK,SAAS;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAIO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,QAAQ,QAAQ;AAAA,EAChB,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,YACtC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,EACD,QAAQ,QAAQ;AAClB;;;ACvBO,IAAM,MAAM,CAAC;AAAA,EAClB;AACF,MAGE,kBAAkB,WAAW","sourcesContent":["import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n"]}
1
+ {"version":3,"sources":["../src/lib/optimistic/optimisticId.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/threadIdCookies/key.ts","../src/lib/streams/enqueueJson.ts"],"names":[],"mappings":";AAAA,SAAS,WAAW;AAEb,IAAM,eAAe,MAC1B,IAAI,IAAI,EAAE,CAAC;;;ACHb,SAAS,YAAY;AAGd,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,MAGE,KAAK,SAAS;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,OAIO;AAAA,EACL,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,QAAQ,QAAQ;AAAA,EAChB,cAAc,QAAQ;AAAA,EACtB,WAAW,QAAQ;AAAA,EACnB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,YACtC,iBAAiB,EAAE,QAAQ,CAAC,CAC7B;AAAA,EACD,QAAQ,QAAQ;AAClB;;;ACvBO,IAAM,MAAM,CAAC;AAAA,EAClB;AACF,MAGE,kBAAkB,WAAW;;;ACLxB,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AACF,MAIE,WAAW,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC","sourcesContent":["import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n file_ids: message.file_ids,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superinterface/react",
3
- "version": "2.7.2",
3
+ "version": "2.8.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",