supercompat 3.9.2 → 3.9.3
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 +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.cjs","../src/index.ts","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/models/get.ts","../src/adapters/client/groqClientAdapter/models/index.ts","../src/adapters/client/groqClientAdapter/completions/post.ts","../src/adapters/client/groqClientAdapter/completions/index.ts","../src/adapters/client/groqClientAdapter/index.ts","../src/adapters/client/openaiClientAdapter/models/get.ts","../src/adapters/client/openaiClientAdapter/models/index.ts","../src/adapters/client/openaiClientAdapter/completions/post.ts","../src/lib/models/isOModel.ts","../src/lib/messages/systemDeveloperMessages.ts","../src/adapters/client/openaiClientAdapter/completions/index.ts","../src/adapters/client/openaiClientAdapter/index.ts","../src/adapters/client/azureOpenaiClientAdapter/index.ts","../src/adapters/client/mistralClientAdapter/models/get.ts","../src/adapters/client/mistralClientAdapter/models/index.ts","../src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts","../src/adapters/client/mistralClientAdapter/completions/serializeBody.ts","../src/adapters/client/mistralClientAdapter/completions/post.ts","../src/adapters/client/mistralClientAdapter/completions/index.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/models/get.ts","../src/adapters/client/perplexityClientAdapter/models/index.ts","../src/lib/messages/alternatingMessages.ts","../src/adapters/client/perplexityClientAdapter/completions/post.ts","../src/adapters/client/perplexityClientAdapter/completions/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/client/anthropicClientAdapter/models/get.ts","../src/adapters/client/anthropicClientAdapter/models/index.ts","../src/adapters/client/anthropicClientAdapter/completions/post.ts","../src/lib/messages/nonEmptyMessages.ts","../src/lib/messages/firstUserMessages.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/serializeMessage.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/index.ts","../src/adapters/client/anthropicClientAdapter/completions/index.ts","../src/adapters/client/anthropicClientAdapter/index.ts","../src/adapters/client/togetherClientAdapter/models/get.ts","../src/adapters/client/togetherClientAdapter/models/index.ts","../src/adapters/client/togetherClientAdapter/completions/post.ts","../src/adapters/client/togetherClientAdapter/completions/index.ts","../src/adapters/client/togetherClientAdapter/index.ts","../src/adapters/client/googleClientAdapter/models/get.ts","../src/adapters/client/googleClientAdapter/models/index.ts","../src/adapters/client/googleClientAdapter/completions/post.ts","../src/adapters/client/googleClientAdapter/completions/index.ts","../src/adapters/client/googleClientAdapter/index.ts","../src/adapters/client/humirisClientAdapter/models/get.ts","../src/adapters/client/humirisClientAdapter/models/index.ts","../src/adapters/client/humirisClientAdapter/completions/post.ts","../src/adapters/client/humirisClientAdapter/completions/index.ts","../src/adapters/client/humirisClientAdapter/index.ts","../src/adapters/client/ollamaClientAdapter/models/get.ts","../src/adapters/client/ollamaClientAdapter/models/index.ts","../src/adapters/client/ollamaClientAdapter/completions/post.ts","../src/adapters/client/ollamaClientAdapter/completions/index.ts","../src/adapters/client/ollamaClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages/index.ts","../src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts","../src/lib/messages/messagesRegexp.ts","../src/lib/runs/runsRegexp.ts","../src/lib/runs/runRegexp.ts","../src/lib/runs/submitToolOutputsRegexp.ts","../src/lib/steps/stepsRegexp.ts","../src/adapters/storage/prismaStorageAdapter/threads/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/mapPrismaRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/getMessages.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/run/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/run/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/index.ts","../src/adapters/storage/prismaStorageAdapter/assistants/post.ts","../src/adapters/storage/prismaStorageAdapter/assistants/index.ts","../src/adapters/storage/prismaStorageAdapter/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/serializeThread.ts","../src/adapters/storage/responsesStorageAdapter/threads/post.ts","../src/adapters/storage/responsesStorageAdapter/threads/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts","../src/lib/items/serializeItemAsMessage.ts","../src/adapters/storage/responsesStorageAdapter/threads/messages/get.ts","../src/lib/items/responseId.ts","../src/adapters/storage/responsesStorageAdapter/threads/messages/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/get.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/post.ts","../src/lib/responses/serializeResponseAsRun.ts","../src/lib/responses/saveResponseItemsToConversationMetadata.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/run/get.ts","../src/adapters/storage/responsesStorageAdapter/threads/run/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts","../src/lib/items/serializeItemAsMessageCreationRunStep.ts","../src/lib/items/serializeItemAsFunctionCallRunStep.ts","../src/lib/items/serializeItemAsImageGenerationRunStep.ts","../src/lib/items/serializeItemAsWebSearchRunStep.ts","../src/lib/items/serializeItemAsMcpListToolsRunStep.ts","../src/lib/items/serializeItemAsMcpCallRunStep.ts","../src/lib/items/serializeItemAsCodeInterpreterCallRunStep.ts","../src/lib/items/serializeItemAsComputerCallRunStep.ts","../src/lib/items/serializeItemAsReasoningRunStep.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/steps/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/post/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/index.ts","../src/adapters/storage/responsesStorageAdapter/assistants/get.ts","../src/adapters/storage/responsesStorageAdapter/assistants/post.ts","../src/adapters/storage/responsesStorageAdapter/assistants/index.ts","../src/adapters/storage/responsesStorageAdapter/index.ts","../src/adapters/run/responsesRunAdapter/index.ts"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","anthropicClientAdapter","azureOpenaiClientAdapter","completionsRunAdapter","googleClientAdapter","groqClientAdapter","humirisClientAdapter","mistralClientAdapter","ollamaClientAdapter","openaiClientAdapter","perplexityClientAdapter","prismaStorageAdapter","responsesRunAdapter","responsesStorageAdapter","supercompat","togetherClientAdapter","module","exports","import_openai","require","import_radash","storageRequestHandlers","storage","runAdapter","client","wrappedClient","result","handleRun","partob","requestHandlers","assign","findRequestHandler","url","pathname","URL","regex","RegExp","test","originalFetch","args","options","clientHeaders","newOptions","fetch","buildHeaders","method","toLowerCase","bodyHeaders","headers","retryCount","set","apiKey","supercompatFetch","pathHandler","requestHandler","endpointFromBaseUrl","baseURL","replace","type","AzureOpenAI","apiVersion","endpoint","OpenAI","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","ReadableStream","start","controller","chunk","enqueue","close","openai","isOModel","model","startsWith","systemDeveloperMessages","messages","map","message","role","omitKeys","resultOptions","import_radash2","omit","azureOpenai","mistral","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","serializeMessage","tool_call_id","toolCallId","serializeBody","serializedBody","serializedChunk","complete","perplexity","id","object","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","content","includes","anthropic","nonEmptyContent","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","function","description","input_schema","parameters","text","toolCall","input","arguments","tool_use_id","serializeMessages","systemMessages","otherMessages","system","chatMessages","import_radash3","fork","join","isEmpty","max_tokens","messageDelta","partial_json","uid","content_block","together","google","import_cuid2","resultChunk","newChoices","createId","humiris","created","logprobs","ollama","import_lodash","import_dayjs","validToolCallContentTypes","serializeToolContent","import_radash4","isArray","output","isEveryToolPartValid","every","toolPart","isObject","serializeToolCall","serializeMessageWithContent","serializeContent","metadata","run","messageToolCalls","tc","runStep","runSteps","find","rs","stepDetails","step_details","Array","some","rsTc","getMessages","instructions","import_radash5","flat","updatedToolCall","import_radash6","_","cloneDeep","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","response_format","console","failed_at","dayjs","unix","last_error","code","cause","completed_at","run_id","created_at","assistant_id","incomplete_at","incomplete_details","attachments","thread_id","annotations","expired_at","cancelled_at","usage","message_creation","message_id","required_action","submit_tool_outputs","messagesRegexp","runsRegexp","runRegexp","submitToolOutputsRegexp","stepsRegexp","serializeThread","thread","import_dayjs2","createdAt","tool_resources","prisma","_urlString","metadataRecord","assistantId","initialCreatedAt","messageData","threadData","Error","import_dayjs3","subtract","length","add","toDate","assistant","connect","threads","import_dayjs4","threadId","completedAt","incompleteAt","incompleteDetails","runId","import_radash7","messageContentBlocks","import_radash8","item","urlString","match","limit","order","after","pageSize","messagesPlusOne","import_radash9","fromEntries","searchParams","parseInt","findMany","where","take","orderBy","skip","cursor","slice","has_more","last_id","last","serializeRun","import_dayjs5","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","mapPrismaRun","truncationStrategy","responseFormat","updatedAt","runs","runsPlusOne","import_radash10","at","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","import_dayjs6","expiredAt","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","last_messages","include","readableStream","findUnique","import_radash11","modelSlug","additional_instructions","import_dayjs7","runStepsPlusOne","import_radash12","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","completedRunStep","import_dayjs8","toolOutput","dir","depth","Promise","resolve","submitToolOutputs","import_dayjs9","assistants","conversation","conversations","items","contentBlock","image_file","file_id","detail","filter","Boolean","image_url","output_format","serializeAttachments","inputFiles","inputFile","serializeMetadata","serializeItemAsMessage","openaiAssistant","import_radash13","contentBlocksFromContent","import_radash14","contentBlocksFromAttachments","attachment","createResponseItems","getOpenaiAssistant","select","import_dayjs10","responseId","itemId","keys","k","m","exec","idx","Number","x","sort","a","b","i","raw","arr","j","entry","itemIds","sortOrder","itemsWithRunIds","responseMap","timestampedItems","import_radash15","retrieve","mapItemsWithRunIds","fetchResponsesForItems","assignTimestamps","conversationCreatedAt","assignedTimestamp","responseIds","results","Set","allSettled","responses","Map","itemsWithTimestamps","timestamp","fallbackTimestampForIndex","findNextKnownTimestamp","startIndex","candidate","lastAssigned","nextValue","nextKnown","gap","serializeStatus","serializeUsage","prompt_tokens","input_tokens","completion_tokens","output_tokens","total_tokens","findPendingToolCalls","completedCallIds","call_id","has","serializeToolCalls","serializeResponseAsRun","pendingToolCalls","BUCKET_PREFIX","MAX_BUCKETS","MAX_VALUE_LENGTH","parseBucket","serializeBucket","bucketKey","listBucketIndices","parseAllPairs","indices","pairs","iid","serializeNonBucketEntries","packIntoBuckets","slots","buckets","currentEntries","flush","serialized","candidateEntries","metadataEquals","keysA","keysB","appendItemIdsToConversationMetadata","base","nonBucketEntries","availableSlots","Math","max","preservedNonBucket","changed","existingPairs","incomingPairs","combinedPairs","concat","retainedOldestFirst","rebuilt","saveResponseItemsToConversationMetadata","updated","truncation","defaultAssistant","import_radash17","format","import_radash16","import_dayjs11","o","_threadId","serializeItemAsMessageCreationRunStep","import_radash18","import_dayjs12","serializeFunctionCallOutput","functionCallOutput","serializeItemAsFunctionCallRunStep","import_radash19","import_dayjs13","serializeItemAsImageGenerationRunStep","import_dayjs14","background","quality","size","revised_prompt","serializeItemAsWebSearchRunStep","import_dayjs15","action","serializeItemAsMcpListToolsRunStep","import_dayjs16","server_label","serializeItemAsMcpCallRunStep","import_dayjs17","serializeOutput","logs","serializeOutputs","outputs","serializeItemAsCodeInterpreterCallRunStep","import_dayjs18","code_interpreter","serializeItemAsComputerCallRunStep","import_radash20","import_dayjs19","computerCallOutput","pending_safety_checks","serializeItemAsReasoningRunStep","import_dayjs20","summary","encrypted_content","latestToolCallItem","functionCallOutputItems","computerCallOutputItems","findLast","flatMap","step","import_radash21","isComputerCallOutput","parsedOutput","getToolCallOutputItems","acknowledged_safety_checks","toolCallOutputItems","previousResponse","toolCallItem","computer_call","getDirectOpenaiAssistant","waitUntil","p","then","cachedOpenaiAssistant","responseCreatedResponse","mcpCalls","codeInterpreterCalls","mcpCall","item_id","content_index","import_dayjs21","output_index","partial_image_b64","import_radash22","String"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n anthropicClientAdapter: () => anthropicClientAdapter,\n azureOpenaiClientAdapter: () => azureOpenaiClientAdapter,\n completionsRunAdapter: () => completionsRunAdapter,\n googleClientAdapter: () => googleClientAdapter,\n groqClientAdapter: () => groqClientAdapter,\n humirisClientAdapter: () => humirisClientAdapter,\n mistralClientAdapter: () => mistralClientAdapter,\n ollamaClientAdapter: () => ollamaClientAdapter,\n openaiClientAdapter: () => openaiClientAdapter,\n perplexityClientAdapter: () => perplexityClientAdapter,\n prismaStorageAdapter: () => prismaStorageAdapter,\n responsesRunAdapter: () => responsesRunAdapter,\n responsesStorageAdapter: () => responsesStorageAdapter,\n supercompat: () => supercompat,\n togetherClientAdapter: () => togetherClientAdapter\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/supercompat.ts\nvar import_openai = __toESM(require(\"openai\"), 1);\n\n// src/supercompatFetch/requestHandlers.ts\nvar import_radash = require(\"radash\");\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const wrappedClient = supercompat({\n client\n });\n const result = storage({\n runAdapter: {\n ...runAdapter,\n handleRun: (0, import_radash.partob)(runAdapter.handleRun, { client: wrappedClient })\n },\n client: wrappedClient\n });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => (0, import_radash.assign)(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client\n })\n);\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({\n url,\n requestHandlers: requestHandlers2\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers2) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers2[key];\n }\n }\n};\n\n// src/supercompatFetch/originalFetch.ts\nvar originalFetch = async ({\n args,\n client\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args;\n const clientHeaders = await client.client.buildHeaders({\n options: {},\n method: args[1].method.toLowerCase(),\n bodyHeaders: args[1].headers,\n retryCount: 0\n });\n clientHeaders.set(\"Authorization\", `Bearer ${client.client.apiKey}`);\n const newOptions = {\n ...options,\n headers: clientHeaders\n };\n return client.client.fetch(url, newOptions);\n } else {\n return fetch(...args);\n }\n};\n\n// src/supercompatFetch/index.ts\nvar supercompatFetch = ({\n client,\n storage,\n runAdapter\n}) => {\n const requestHandlers2 = requestHandlers({\n client,\n storage,\n runAdapter\n });\n return async (...args) => {\n const [url, options] = args;\n const pathHandler = findRequestHandler({\n url,\n requestHandlers: requestHandlers2\n });\n if (!pathHandler) {\n return originalFetch({\n client,\n args\n });\n }\n const method = options?.method ?? \"\";\n const requestHandler = pathHandler[method.toLowerCase()];\n if (!requestHandler) {\n return originalFetch({\n client,\n args\n });\n }\n return requestHandler(...args);\n };\n};\n\n// src/lib/azureOpenai/endpointFromBaseUrl.ts\nvar endpointFromBaseUrl = ({\n baseURL\n}) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({\n client,\n storage,\n runAdapter\n}) => {\n if (client.type === \"AZURE_OPENAI\") {\n return new import_openai.AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n }\n return new import_openai.default({\n apiKey: \"SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY\",\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n};\n\n// src/adapters/client/groqClientAdapter/models/get.ts\nvar get = ({\n groq\n}) => async (_url, _options) => {\n try {\n const data = await groq.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/groqClientAdapter/models/index.ts\nvar models = ({\n groq\n}) => ({\n get: get({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/completions/post.ts\nvar post = ({\n groq\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await groq.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await groq.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/groqClientAdapter/completions/index.ts\nvar completions = ({\n groq\n}) => ({\n post: post({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/index.ts\nvar groqClientAdapter = ({\n groq\n}) => ({\n client: groq,\n requestHandlers: {\n \"^/v1/models$\": models({ groq }),\n \"^/v1/chat/completions$\": completions({ groq })\n }\n});\n\n// src/adapters/client/openaiClientAdapter/models/get.ts\nvar get2 = ({\n openai\n}) => async (_url, _options) => {\n try {\n const data = await openai.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/openaiClientAdapter/models/index.ts\nvar models2 = ({\n openai\n}) => ({\n get: get2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar import_radash2 = require(\"radash\");\n\n// src/lib/models/isOModel.ts\nvar isOModel = ({ model }) => model.startsWith(\"o1\") || model.startsWith(\"o3\");\n\n// src/lib/messages/systemDeveloperMessages.ts\nvar systemDeveloperMessages = ({\n messages: messages4,\n model\n}) => {\n if (isOModel({ model })) {\n return messages4.map((message) => {\n if (message.role === \"system\") {\n return {\n ...message,\n // TODO: This should be 'developer' but we're using 'user' for now\n // role: 'developer',\n role: \"user\"\n };\n }\n return message;\n });\n }\n return messages4;\n};\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar omitKeys = ({\n model\n}) => {\n if (isOModel({ model })) {\n return [\"tools\"];\n }\n return [];\n};\nvar post2 = ({\n openai\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages4 = body.messages;\n const resultOptions = {\n ...(0, import_radash2.omit)(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages: messages4,\n model: body.model\n })\n };\n if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await openai.chat.completions.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/openaiClientAdapter/completions/index.ts\nvar completions2 = ({\n openai\n}) => ({\n post: post2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/index.ts\nvar openaiClientAdapter = ({\n openai\n}) => ({\n client: openai,\n requestHandlers: {\n \"^/v1/models$\": models2({ openai }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions2({ openai })\n }\n});\n\n// src/adapters/client/azureOpenaiClientAdapter/index.ts\nvar azureOpenaiClientAdapter = ({\n azureOpenai\n}) => ({\n type: \"AZURE_OPENAI\",\n client: azureOpenai,\n requestHandlers: {\n \"^/(?:v1|/?openai)/chat/completions$\": completions2({\n openai: azureOpenai\n })\n }\n});\n\n// src/adapters/client/mistralClientAdapter/models/get.ts\nvar get3 = ({\n mistral\n}) => async (_url, _options) => {\n try {\n const data = await mistral.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/mistralClientAdapter/models/index.ts\nvar models3 = ({\n mistral\n}) => ({\n get: get3({ mistral })\n});\n\n// src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts\nvar serializeDelta = ({\n delta: {\n toolCalls,\n ...rest\n }\n}) => ({\n ...rest,\n ...toolCalls ? {\n tool_calls: toolCalls\n } : {}\n});\nvar serializeChoice = ({\n choice: {\n finishReason,\n delta,\n ...rest\n }\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta })\n});\nvar serializeChunk = ({\n chunk\n}) => ({\n ...chunk.data,\n ...chunk.data.choices ? {\n choices: chunk.data.choices.map((choice) => serializeChoice({ choice }))\n } : {}\n});\n\n// src/adapters/client/mistralClientAdapter/completions/serializeBody.ts\nvar serializeMessage = ({\n message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n }\n}) => ({\n ...rest,\n ...tool_call_id ? {\n toolCallId: tool_call_id\n } : {},\n ...tool_calls ? {\n toolCalls: tool_calls\n } : {}\n});\nvar serializeBody = ({\n body\n}) => ({\n ...body,\n messages: body.messages.map((message) => serializeMessage({\n message\n }))\n});\n\n// src/adapters/client/mistralClientAdapter/completions/post.ts\nvar post3 = ({\n mistral\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const serializedBody = serializeBody({\n body\n });\n if (body.stream) {\n const response = await mistral.chat.stream(serializedBody);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n const serializedChunk = serializeChunk({\n chunk\n });\n controller.enqueue(`data: ${JSON.stringify(serializedChunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await mistral.chat.complete(serializedBody);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/mistralClientAdapter/completions/index.ts\nvar completions3 = ({\n mistral\n}) => ({\n post: post3({ mistral })\n});\n\n// src/adapters/client/mistralClientAdapter/index.ts\nvar mistralClientAdapter = ({\n mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n \"^/v1/models$\": models3({ mistral }),\n \"^/v1/chat/completions$\": completions3({ mistral })\n }\n});\n\n// src/adapters/client/perplexityClientAdapter/models/get.ts\nvar models4 = [\n \"sonar-reasoning-pro\",\n \"sonar-reasoning\",\n \"sonar-pro\",\n \"sonar\",\n \"r1-1776\",\n \"llama-3.1-sonar-small-128k-online\",\n \"llama-3.1-sonar-large-128k-online\",\n \"llama-3.1-sonar-huge-128k-online\"\n];\nvar get4 = ({\n perplexity\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models4.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/perplexityClientAdapter/models/index.ts\nvar models5 = ({\n perplexity\n}) => ({\n get: get4({ perplexity })\n});\n\n// src/lib/messages/alternatingMessages.ts\nvar agentSideRoles = [\"assistant\", \"system\"];\nvar alternatingMessages = ({\n messages: messages4\n}) => {\n const result = [];\n messages4.forEach((message, index) => {\n result.push(message);\n const nextMessage = messages4[index + 1];\n if (!nextMessage) return;\n if (message.role === \"user\" && nextMessage.role === \"user\") {\n result.push({\n role: \"assistant\",\n content: \"-\"\n });\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n result.push({\n role: \"user\",\n content: \"-\"\n });\n }\n });\n return result;\n};\n\n// src/adapters/client/perplexityClientAdapter/completions/post.ts\nvar post4 = ({\n perplexity\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages4 = alternatingMessages({\n messages: body.messages\n });\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages: messages4\n });\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await perplexity.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/perplexityClientAdapter/completions/index.ts\nvar completions4 = ({\n perplexity\n}) => ({\n post: post4({ perplexity })\n});\n\n// src/adapters/client/perplexityClientAdapter/index.ts\nvar perplexityClientAdapter = ({\n perplexity\n}) => ({\n client: perplexity,\n requestHandlers: {\n \"^/v1/models$\": models5({ perplexity }),\n \"^/v1/chat/completions$\": completions4({ perplexity })\n }\n});\n\n// src/adapters/client/anthropicClientAdapter/models/get.ts\nvar get5 = ({\n anthropic\n}) => async (_url, _options) => {\n try {\n const response = await anthropic.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n data: response.data.map((model) => ({\n id: model.id,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/models/index.ts\nvar models6 = ({\n anthropic\n}) => ({\n get: get5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar import_radash3 = require(\"radash\");\n\n// src/lib/messages/nonEmptyMessages.ts\nvar nonEmptyContent = ({\n message\n}) => {\n if (message.content == null) {\n return \"-\";\n }\n if (typeof message.content === \"string\") {\n if (!/\\S/.test(message.content)) {\n return \"-\";\n }\n }\n return message.content;\n};\nvar nonEmptyMessages = ({\n messages: messages4\n}) => {\n const result = [];\n messages4.forEach((message) => result.push({\n ...message,\n content: nonEmptyContent({ message })\n }));\n return result;\n};\n\n// src/lib/messages/firstUserMessages.ts\nvar firstUserMessages = ({\n messages: messages4\n}) => {\n const firstMessage = messages4[0];\n if (!firstMessage) return messages4;\n if (firstMessage.role !== \"user\") {\n return [\n {\n role: \"user\",\n content: \"-\"\n },\n ...messages4\n ];\n }\n return messages4;\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts\nvar serializeTools = ({\n tools\n}) => (tools ?? []).map((tool) => {\n if (tool.type === \"function\") {\n return {\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters ?? {\n type: \"object\"\n }\n };\n }\n return tool;\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeMessages/serializeMessage.ts\nvar serializeMessage2 = ({\n message\n}) => {\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: message.content\n };\n } else if (message.role === \"assistant\") {\n return {\n role: \"assistant\",\n content: [\n {\n type: \"text\",\n text: message.content\n },\n ...(message.tool_calls ?? []).map((toolCall) => ({\n type: \"tool_use\",\n id: toolCall.id,\n // @ts-expect-error todo\n name: toolCall.function.name,\n // @ts-expect-error todo\n input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {}\n }))\n ]\n };\n } else if (message.role === \"tool\") {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: message.tool_call_id,\n content: message.content\n }\n ]\n };\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeMessages/index.ts\nvar serializeMessages = ({\n messages: messages4\n}) => messages4.map((message) => serializeMessage2({\n message\n}));\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar post5 = ({\n anthropic\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages4 = body.messages;\n const [systemMessages, otherMessages] = (0, import_radash3.fork)(messages4, (message) => message.role === \"system\");\n const system = systemMessages.map((message) => message.content).join(\"\\n\");\n const chatMessages = nonEmptyMessages({\n messages: firstUserMessages({\n messages: alternatingMessages({\n messages: otherMessages\n })\n })\n });\n const resultOptions = {\n ...(0, import_radash3.omit)(body, [\"response_format\"]),\n stream: body.stream ? (0, import_radash3.isEmpty)(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools\n })\n };\n if (body.stream) {\n const response = await anthropic.messages.stream(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === \"content_block_delta\") {\n let delta;\n if (chunk.delta.type === \"input_json_delta\") {\n delta = {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json\n }\n }\n ]\n };\n } else if (\"text\" in chunk.delta) {\n delta = {\n content: chunk.delta.text\n };\n } else {\n delta = {\n content: \"\"\n };\n }\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n let delta;\n if (chunk.content_block.type === \"tool_use\") {\n delta = {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: \"function\",\n function: {\n name: chunk.content_block.name,\n arguments: \"\"\n }\n }\n ]\n };\n } else if (\"text\" in chunk.content_block) {\n delta = {\n content: chunk.content_block.text\n };\n } else {\n delta = {\n content: \"\"\n };\n }\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"message_start\") {\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: 0,\n delta: {\n content: \"\"\n }\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n }\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await anthropic.messages.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/index.ts\nvar completions5 = ({\n anthropic\n}) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({\n anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n \"^/v1/models$\": models6({ anthropic }),\n \"^/v1/chat/completions$\": completions5({ anthropic })\n }\n});\n\n// src/adapters/client/togetherClientAdapter/models/get.ts\nvar get6 = ({\n together\n}) => async (_url, _options) => {\n try {\n const data = await together.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n // @ts-ignore-next-line\n data: data.body\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/togetherClientAdapter/models/index.ts\nvar models7 = ({\n together\n}) => ({\n get: get6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/completions/post.ts\nvar post6 = ({\n together\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await together.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await together.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/togetherClientAdapter/completions/index.ts\nvar completions6 = ({\n together\n}) => ({\n post: post6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/index.ts\nvar togetherClientAdapter = ({\n together\n}) => ({\n client: together,\n requestHandlers: {\n \"^/v1/models$\": models7({ together }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions6({ together })\n }\n});\n\n// src/adapters/client/googleClientAdapter/models/get.ts\nvar models8 = [\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.5-pro-preview-03-25\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-lite\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-pro\"\n];\nvar get7 = ({\n google\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models8.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/googleClientAdapter/models/index.ts\nvar models9 = ({\n google\n}) => ({\n get: get7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/completions/post.ts\nvar import_cuid2 = require(\"@paralleldrive/cuid2\");\nvar post7 = ({\n google\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const resultOptions = {\n ...body,\n messages: nonEmptyMessages({\n messages: body.messages\n })\n };\n if (body.stream) {\n const response = await google.chat.completions.create(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n let resultChunk;\n if (chunk.choices) {\n const newChoices = chunk.choices.map((choice) => {\n if (choice.delta?.tool_calls) {\n return {\n ...choice,\n delta: {\n ...choice.delta,\n tool_calls: choice.delta.tool_calls.map((toolCall) => {\n if (toolCall.id === \"\") {\n return {\n ...toolCall,\n id: `call_${(0, import_cuid2.createId)()}`\n };\n }\n return toolCall;\n })\n }\n };\n } else {\n return choice;\n }\n });\n resultChunk = {\n ...chunk,\n choices: newChoices\n };\n } else {\n resultChunk = chunk;\n }\n controller.enqueue(`data: ${JSON.stringify(resultChunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await google.chat.completions.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/googleClientAdapter/completions/index.ts\nvar completions7 = ({\n google\n}) => ({\n post: post7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/index.ts\nvar googleClientAdapter = ({\n google\n}) => ({\n client: google,\n requestHandlers: {\n \"^/v1/models$\": models9({ google }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions7({ google })\n }\n});\n\n// src/adapters/client/humirisClientAdapter/models/get.ts\nvar models10 = [\n \"Humiris/humiris-moai\"\n];\nvar get8 = ({\n humiris\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models10.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/humirisClientAdapter/models/index.ts\nvar models11 = ({\n humiris\n}) => ({\n get: get8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/completions/post.ts\nvar post8 = ({\n humiris\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const data = await humiris.chat.completions.create({\n ...body,\n stream: false\n });\n const stream = new ReadableStream({\n async start(controller) {\n const chunk = {\n id: data.id,\n object: \"chat.completion.chunk\",\n created: data.created,\n model: data.created,\n choices: [\n {\n index: 0,\n delta: {\n role: data.choices[0].message.role,\n content: data.choices[0].message.content\n },\n logprobs: null,\n finish_reason: data.choices[0].finish_reason\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await humiris.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/humirisClientAdapter/completions/index.ts\nvar completions8 = ({\n humiris\n}) => ({\n post: post8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/index.ts\nvar humirisClientAdapter = ({\n humiris\n}) => ({\n client: humiris,\n requestHandlers: {\n \"^/v1/models$\": models11({ humiris }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions8({ humiris })\n }\n});\n\n// src/adapters/client/ollamaClientAdapter/models/get.ts\nvar get9 = ({\n ollama\n}) => async (_url, _options) => {\n try {\n const data = await ollama.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/models/index.ts\nvar models12 = ({\n ollama\n}) => ({\n get: get9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/completions/post.ts\nvar post9 = ({\n ollama\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await ollama.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await ollama.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/completions/index.ts\nvar completions9 = ({\n ollama\n}) => ({\n post: post9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/index.ts\nvar ollamaClientAdapter = ({\n ollama\n}) => ({\n client: ollama,\n requestHandlers: {\n \"^/v1/models$\": models12({ ollama }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions9({ ollama })\n }\n});\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar import_lodash = __toESM(require(\"lodash\"), 1);\nvar import_radash6 = require(\"radash\");\nvar import_dayjs = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar import_radash5 = require(\"radash\");\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\nvar import_radash4 = require(\"radash\");\nvar validToolCallContentTypes = [\n \"image\",\n \"text\"\n];\nvar serializeToolContent = ({\n toolCall\n}) => {\n if ((0, import_radash4.isArray)(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!(0, import_radash4.isObject)(toolPart)) return false;\n return validToolCallContentTypes.includes(toolPart.type);\n });\n if (isEveryToolPartValid) {\n return toolCall.function.output;\n }\n return JSON.stringify(toolCall.function.output);\n }\n return toolCall.function.output ?? \"\";\n};\nvar serializeToolCall = ({\n toolCall\n}) => ({\n tool_call_id: toolCall.id,\n role: \"tool\",\n name: toolCall.function.name,\n content: serializeToolContent({\n toolCall\n })\n});\nvar serializeMessageWithContent = ({\n message\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content\n }),\n ...message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}\n});\nvar serializeContent = ({\n content\n}) => content.map((content2) => content2.text.value).join(\"\\n\");\nvar serializeMessage3 = ({\n message\n}) => {\n const result = [serializeMessageWithContent({ message })];\n const run3 = message.run;\n if (!run3) return result;\n const messageToolCalls = message.metadata?.toolCalls || [];\n messageToolCalls.forEach((tc) => {\n const runStep = run3.runSteps.find((rs) => {\n if (rs.type !== \"tool_calls\") return false;\n const stepDetails2 = rs.step_details;\n if (!Array.isArray(stepDetails2.tool_calls)) return false;\n return stepDetails2.tool_calls.some((rsTc) => rsTc.type === \"function\" && rsTc.id === tc.id);\n });\n if (!runStep) return;\n const stepDetails = runStep.step_details;\n if (!Array.isArray(stepDetails.tool_calls)) return;\n const toolCall = stepDetails.tool_calls.find((rsTc) => rsTc.type === \"function\" && rsTc.id === tc.id);\n if (toolCall && toolCall.type === \"function\") {\n result.push(serializeToolCall({ toolCall }));\n }\n });\n return result;\n};\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar messages = async ({\n run: run3,\n getMessages: getMessages2\n}) => [\n ...run3.instructions ? [{\n role: \"system\",\n content: run3.instructions\n }] : [],\n ...(0, import_radash5.flat)((await getMessages2()).map((message) => serializeMessage3({ message })))\n];\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) return (0, import_radash6.omit)(delta, [\"index\"]);\n const result = import_lodash.default.cloneDeep(toolCall);\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? \"\"}${value}`;\n }\n return result;\n};\nvar toolCallsData = ({\n prevToolCalls,\n delta\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: (0, import_radash6.uid)(24),\n type: \"function\",\n ...(0, import_radash6.omit)(tc, [\"index\"])\n }));\n }\n const newToolCalls = import_lodash.default.cloneDeep(prevToolCalls);\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta\n });\n }\n return newToolCalls;\n};\nvar completionsRunAdapter = () => {\n return {\n handleRun: async ({\n client,\n run: run3,\n onEvent: onEvent2,\n getMessages: getMessages2\n }) => {\n if (run3.status !== \"queued\") return;\n onEvent2({\n event: \"thread.run.in_progress\",\n data: {\n ...run3,\n status: \"in_progress\"\n }\n });\n const opts = {\n messages: await messages({\n run: run3,\n getMessages: getMessages2\n }),\n model: run3.model,\n stream: true,\n response_format: run3.response_format,\n ...(0, import_radash6.isEmpty)(run3.tools) ? {} : { tools: run3.tools }\n };\n let providerResponse;\n try {\n providerResponse = await client.chat.completions.create(opts);\n } catch (e) {\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run3,\n failed_at: (0, import_dayjs.default)().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n let message = await onEvent2({\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: run3.id,\n created_at: (0, import_dayjs.default)().unix(),\n assistant_id: run3.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run3.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n onEvent2({\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: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix(),\n created_at: (0, import_dayjs.default)().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 let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls;\n for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? [];\n const choice = choices[0];\n if (!choice) continue;\n const delta = choice.delta;\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? \"\"}`;\n }\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\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: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: (0, import_dayjs.default)().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 onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run3.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: delta.tool_calls.map((tc) => ({\n id: (0, import_radash6.uid)(24),\n type: \"function\",\n ...tc\n }))\n }\n }\n }\n });\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\n }\n if (delta.content) {\n onEvent2({\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 });\n }\n }\n message = await onEvent2({\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 if ((0, import_radash6.isEmpty)(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run3,\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run3,\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 };\n};\n\n// src/lib/messages/messagesRegexp.ts\nvar messagesRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/messages$\";\n\n// src/lib/runs/runsRegexp.ts\nvar runsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs$\";\n\n// src/lib/runs/runRegexp.ts\nvar runRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)$\";\n\n// src/lib/runs/submitToolOutputsRegexp.ts\nvar submitToolOutputsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/submit_tool_outputs$\";\n\n// src/lib/steps/stepsRegexp.ts\nvar stepsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/steps$\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar import_dayjs3 = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nvar import_dayjs2 = __toESM(require(\"dayjs\"), 1);\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: (0, import_dayjs2.default)(thread.createdAt).unix(),\n metadata: thread.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar post10 = ({\n prisma\n}) => async (_urlString, options) => {\n if (!options.body) {\n throw new Error(\"No body provided\");\n }\n const body = JSON.parse(options.body);\n const messages4 = body.messages || [];\n const metadataRecord = body.metadata || {};\n const assistantId = typeof metadataRecord.assistantId === \"string\" ? metadataRecord.assistantId : void 0;\n if (!assistantId) {\n throw new Error(\"assistantId is required to create a thread\");\n }\n const initialCreatedAt = (0, import_dayjs3.default)().subtract(messages4.length, \"seconds\");\n const messageData = messages4.map((message, index) => ({\n role: message.role === \"user\" ? \"USER\" : \"ASSISTANT\",\n content: [\n {\n type: \"text\",\n text: {\n annotations: [],\n value: message.content\n }\n }\n ],\n attachments: message.attachments ?? [],\n metadata: message.metadata,\n createdAt: initialCreatedAt.add(index, \"seconds\").toDate()\n }));\n const threadData = {\n metadata: metadataRecord,\n assistant: {\n connect: {\n id: assistantId\n }\n },\n messages: {\n create: messageData\n }\n };\n const thread = await prisma.thread.create({\n data: threadData\n });\n return new Response(JSON.stringify(\n serializeThread({ thread })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/index.ts\nvar threads = ({\n prisma\n}) => ({\n post: post10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar import_radash8 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nvar import_dayjs4 = __toESM(require(\"dayjs\"), 1);\nvar import_radash7 = require(\"radash\");\nvar serializeMessage4 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: (0, import_dayjs4.default)(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? (0, import_dayjs4.default)(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? (0, import_dayjs4.default)(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails,\n role: message.role.toLowerCase(),\n content: message.content,\n assistant_id: message.assistantId,\n run_id: message.runId,\n attachments: message.attachments,\n status: message.status.toLowerCase(),\n metadata: (0, import_radash7.assign)(message.metadata ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {})\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({\n content\n}) => {\n if ((0, import_radash8.isArray)(content)) {\n return content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: {\n value: item.text ?? \"\",\n annotations: []\n }\n };\n }\n return item;\n });\n }\n return [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: []\n }\n }\n ];\n};\nvar post11 = ({\n prisma\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n if (!options.body) {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const { role, content, metadata } = body;\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === \"user\" ? \"USER\" : \"ASSISTANT\",\n metadata: metadata ?? {}\n }\n });\n return new Response(JSON.stringify(\n serializeMessage4({ message })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nvar import_radash9 = require(\"radash\");\nvar get10 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash9.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit);\n const messagesPlusOne = await prisma.message.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === \"asc\" ? \"asc\" : \"desc\" },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const messages4 = messagesPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: messages4.map((message) => serializeMessage4({ message })),\n has_more: messagesPlusOne.length > pageSize,\n last_id: (0, import_radash9.last)(messages4)?.id ?? null\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/index.ts\nvar messages2 = ({\n prisma\n}) => ({\n post: post11({ prisma }),\n get: get10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar import_radash10 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nvar import_dayjs5 = __toESM(require(\"dayjs\"), 1);\nvar serializeRun = ({\n run: run3\n}) => ({\n id: run3.id,\n object: \"thread.run\",\n created_at: (0, import_dayjs5.default)(run3.createdAt).unix(),\n thread_id: run3.threadId,\n assistant_id: run3.assistantId,\n status: run3.status.toLowerCase(),\n required_action: run3.requiredAction,\n last_error: run3.lastError,\n expires_at: (0, import_dayjs5.default)(run3.expiresAt).unix(),\n started_at: run3.startedAt ? (0, import_dayjs5.default)(run3.startedAt).unix() : null,\n cancelled_at: run3.cancelledAt ? (0, import_dayjs5.default)(run3.cancelledAt).unix() : null,\n failed_at: run3.failedAt ? (0, import_dayjs5.default)(run3.failedAt).unix() : null,\n completed_at: run3.completedAt ? (0, import_dayjs5.default)(run3.completedAt).unix() : null,\n model: run3.model,\n instructions: run3.instructions,\n tools: run3.tools,\n metadata: run3.metadata,\n usage: run3.usage,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: \"auto\",\n parallel_tool_calls: true\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/mapPrismaRun.ts\nvar mapPrismaRun = (run3) => ({\n id: run3.id,\n threadId: run3.threadId,\n assistantId: run3.assistantId,\n status: run3.status,\n requiredAction: run3.requiredAction,\n lastError: run3.lastError,\n expiresAt: run3.expiresAt,\n startedAt: run3.startedAt ?? null,\n cancelledAt: run3.cancelledAt ?? null,\n failedAt: run3.failedAt ?? null,\n completedAt: run3.completedAt ?? null,\n model: run3.model,\n instructions: run3.instructions,\n tools: run3.tools,\n metadata: run3.metadata,\n usage: run3.usage,\n truncationStrategy: run3.truncationStrategy,\n responseFormat: run3.responseFormat,\n createdAt: run3.createdAt,\n updatedAt: run3.updatedAt\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar get11 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash10.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\n const runsPlusOne = await prisma.run.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === \"asc\" ? \"asc\" : \"desc\" },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runs3 = runsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runs3.map((run3) => serializeRun({ run: mapPrismaRun(run3) })),\n has_more: runsPlusOne.length > pageSize,\n last_id: runs3.at(-1)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nvar import_dayjs7 = __toESM(require(\"dayjs\"), 1);\nvar import_radash11 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"IN_PROGRESS\" /* IN_PROGRESS */\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"FAILED\" /* FAILED */,\n failedAt: event.data.failed_at,\n ...event.data.last_error != null ? { lastError: event.data.last_error } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts\nvar threadRunCompleted = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n requiredAction: void 0\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts\nvar threadRunRequiresAction = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"REQUIRES_ACTION\" /* REQUIRES_ACTION */,\n ...event.data.required_action != null ? { requiredAction: event.data.required_action } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nvar import_dayjs6 = __toESM(require(\"dayjs\"), 1);\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs6.default)(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase(),\n status: runStep.status.toLowerCase(),\n // @ts-ignore-next-line\n step_details: runStep.stepDetails,\n last_error: runStep.lastError,\n expired_at: runStep.expiredAt ? (0, import_dayjs6.default)(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? (0, import_dayjs6.default)(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? (0, import_dayjs6.default)(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? (0, import_dayjs6.default)(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts\nvar type = (event) => {\n if (event.data.type === \"message_creation\") return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\") return \"TOOL_CALLS\" /* TOOL_CALLS */;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nvar status = (event) => {\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\") return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\") return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\") return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({\n prisma,\n event,\n controller\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 const serializedRunStep = serializeRunStep({ runStep });\n controller.enqueue({\n ...event,\n data: serializedRunStep\n });\n return serializedRunStep;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts\nvar threadRunStepDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\") return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content,\n role: event.data.role === \"assistant\" ? \"ASSISTANT\" /* ASSISTANT */ : \"USER\" /* USER */,\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status2(event)\n }\n });\n const serializedMessage = serializeMessage4({ message });\n controller.enqueue({\n ...event,\n data: serializedMessage\n });\n return serializedMessage;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts\nvar threadMessageDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts\nvar threadMessageCompleted = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n const toolCalls = event.data.tool_calls;\n if (toolCalls !== void 0) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: \"TOOL_CALLS\" /* TOOL_CALLS */\n },\n orderBy: {\n createdAt: \"desc\"\n }\n });\n if (!latestRunStep) {\n throw new Error(\"No run step found\");\n }\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id\n },\n data: {\n stepDetails: {\n type: \"tool_calls\",\n tool_calls: toolCalls\n }\n }\n });\n }\n return prisma.message.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n ...event.data.content ? { content: event.data.content } : {},\n ...toolCalls !== void 0 ? { toolCalls } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/index.ts\nvar 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\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/index.ts\nvar onEvent = ({\n prisma,\n controller\n}) => (event) => {\n const handler = handlers[event.event];\n if (!handler) {\n console.log(\"No handler for event\", event);\n return;\n }\n return handler({ prisma, controller, event });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/getMessages.ts\nvar getTake = ({\n run: run3\n}) => {\n if ([\"auto\", \"disabled\"].includes(run3.truncationStrategy.type)) {\n return null;\n }\n if (run3.truncationStrategy.type === \"last_messages\") {\n if (!run3.truncationStrategy.last_messages) {\n throw new Error(\"Truncation strategy last_messages is required\");\n }\n return -run3.truncationStrategy.last_messages;\n }\n throw new Error(`Unsupported truncation strategy type: ${run3.truncationStrategy.type}`);\n};\nvar getMessages = ({\n prisma,\n run: run3\n}) => async () => {\n const take = getTake({\n run: run3\n });\n const messages4 = await prisma.message.findMany({\n where: {\n threadId: run3.threadId\n },\n include: {\n run: {\n include: {\n runSteps: true\n }\n }\n },\n orderBy: {\n createdAt: \"asc\"\n },\n ...take ? { take } : {}\n });\n return messages4.map((message) => ({\n ...serializeMessage4({ message }),\n run: message.run ? {\n ...serializeRun({ run: mapPrismaRun(message.run) }),\n runSteps: message.run.runSteps.map((runStep) => serializeRunStep({ runStep }))\n } : null\n }));\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nvar post12 = ({\n prisma,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n if (!options.body) {\n throw new Error(\"No body provided\");\n }\n const body = JSON.parse(options.body);\n const { assistant_id, stream } = body;\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id\n }\n });\n if (!assistant) {\n throw new Error(\"Assistant not found\");\n }\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = (0, import_radash11.assign)({\n model: assistant.modelSlug,\n instructions: \"\",\n additional_instructions: null,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n }\n // tools: [],\n // metadata: {},\n }, body);\n const run3 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: (0, import_dayjs7.default)().add(1, \"hour\").unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId\n }\n },\n assistant: {\n connect: {\n id: assistant_id\n }\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format\n }\n });\n const data = serializeRun({ run: run3 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n run: data,\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({\n prisma,\n run: run3\n })\n });\n } catch (error) {\n console.error(error);\n onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n })({\n event: \"thread.run.failed\",\n data: {\n id: run3.id,\n failed_at: (0, import_dayjs7.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/index.ts\nvar runs = ({\n prisma,\n runAdapter\n}) => ({\n get: get11({ prisma }),\n post: post12({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get12 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const run3 = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId\n }\n });\n if (!run3) {\n return new Response(JSON.stringify({ error: \"Not Found\" }), {\n status: 404,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n return new Response(JSON.stringify(\n serializeRun({ run: mapPrismaRun(run3) })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n \"openai-poll-after-ms\": \"5000\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/index.ts\nvar run = ({\n prisma,\n runAdapter\n}) => ({\n get: get12({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nvar import_radash12 = require(\"radash\");\nvar get13 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash12.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\n const runStepsPlusOne = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runSteps = runStepsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n has_more: runStepsPlusOne.length > pageSize,\n last_id: runSteps.at(-1)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts\nvar steps = ({\n prisma\n}) => ({\n get: get13({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nvar import_dayjs8 = __toESM(require(\"dayjs\"), 1);\nvar updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {\n },\n tool_outputs\n}) => (\n // @ts-expect-error prisma transaction typing is broken\n prisma.$transaction(async (prisma2) => {\n const runSteps = await prisma2.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 for (const runStep of runSteps) {\n const completedRunStep = await prisma2.runStep.update({\n where: {\n id: runStep.id\n },\n data: {\n status: \"COMPLETED\",\n completedAt: (0, import_dayjs8.default)().unix(),\n stepDetails: {\n type: \"tool_calls\",\n // @ts-ignore-next-line\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 if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null });\n throw new Error(\"Tool output not found\");\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 onThreadRunStepCompleted({\n runStep: completedRunStep\n });\n }\n return prisma2.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n })\n);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar post13 = ({\n prisma,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp));\n const body = JSON.parse(options.body);\n const {\n tool_outputs,\n stream\n } = body;\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n const run3 = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs,\n onThreadRunStepCompleted: async ({ runStep }) => {\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeRunStep({ runStep })\n })}\n\n`);\n }\n });\n await runAdapter.handleRun({\n run: serializeRun({ run: run3 }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({ prisma, run: run3 })\n });\n controller.close();\n }\n });\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n const run3 = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs\n });\n await new Promise((resolve) => new ReadableStream({\n async start(controller) {\n await runAdapter.handleRun({\n run: serializeRun({ run: run3 }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({ prisma, run: run3 })\n });\n controller.close();\n resolve(void 0);\n }\n }));\n return new Response(JSON.stringify(\n run3\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/index.ts\nvar submitToolOutputs = ({\n prisma,\n runAdapter\n}) => ({\n post: post13({\n prisma,\n // @ts-ignore-next-line\n runAdapter\n })\n});\n\n// src/adapters/storage/prismaStorageAdapter/assistants/post.ts\nvar import_dayjs9 = __toESM(require(\"dayjs\"), 1);\nvar post14 = ({ prisma }) => async (_url, options) => {\n if (!options.body) {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const { model, instructions } = body;\n const assistant = await prisma.assistant.create({\n data: { modelSlug: model, instructions }\n });\n const data = {\n id: assistant.id,\n object: \"assistant\",\n created_at: (0, import_dayjs9.default)().unix(),\n name: null,\n description: null,\n model,\n instructions,\n tools: [],\n metadata: {}\n };\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/assistants/index.ts\nvar assistants = ({ prisma }) => ({\n post: post14({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/index.ts\nvar prismaStorageAdapter = ({\n prisma\n}) => ({ runAdapter }) => ({\n requestHandlers: {\n \"^/(?:v1/|openai/)?assistants$\": assistants({ prisma }),\n \"^/(?:v1|/?openai)/threads$\": threads({ prisma }),\n [messagesRegexp]: messages2({ prisma }),\n [runsRegexp]: runs({ prisma, runAdapter }),\n [runRegexp]: run({ prisma, runAdapter }),\n [stepsRegexp]: steps({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs({ prisma, runAdapter })\n }\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/serializeThread.ts\nvar serializeThread2 = ({\n conversation\n}) => ({\n id: conversation.id,\n object: \"thread\",\n created_at: conversation.created_at,\n metadata: conversation.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/post.ts\nvar post15 = ({\n client\n}) => async (_urlString, options) => {\n if (typeof options.body !== \"string\") {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const messages4 = body.messages || [];\n const metadata = body.metadata || {};\n const conversation = await client.conversations.create({\n metadata,\n items: messages4.map((message) => ({\n type: \"message\",\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [\n {\n type: message.role === \"user\" ? \"input_text\" : \"output_text\",\n text: message.content\n }\n ]\n }))\n });\n return new Response(JSON.stringify(\n serializeThread2({ conversation })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/index.ts\nvar threads2 = ({\n client\n}) => ({\n post: post15({ client })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts\nvar import_dayjs10 = __toESM(require(\"dayjs\"), 1);\nvar import_radash14 = require(\"radash\");\n\n// src/lib/items/serializeItemAsMessage.ts\nvar import_radash13 = require(\"radash\");\nvar serializeContent2 = ({\n item\n}) => {\n if (item.type === \"message\") {\n return item.content.map((contentBlock) => {\n if (contentBlock.type === \"input_text\") {\n return {\n type: \"text\",\n text: {\n value: contentBlock.text,\n annotations: []\n }\n };\n } else if (contentBlock.type === \"output_text\") {\n return {\n type: \"text\",\n text: {\n value: contentBlock.text,\n annotations: []\n }\n };\n } else if (contentBlock.type === \"input_image\") {\n return {\n type: \"image_file\",\n image_file: {\n file_id: contentBlock.file_id,\n detail: \"auto\"\n }\n };\n }\n return null;\n }).filter(Boolean);\n } else if (item.type === \"image_generation_call\") {\n if (!item.result) return [];\n return [{\n type: \"image_url\",\n image_url: {\n // @ts-expect-error bad openai types\n url: `data:image/${item.output_format};base64,${item.result}`,\n detail: \"auto\"\n }\n }];\n } else {\n return [];\n }\n};\nvar serializeAttachments = ({\n item\n}) => {\n if (item.type !== \"message\") return [];\n const inputFiles = item.content.filter((contentBlock) => contentBlock.type === \"input_file\" && contentBlock.file_id);\n return inputFiles.map((inputFile) => ({\n file_id: inputFile.file_id\n }));\n};\nvar serializeMetadata = ({\n item\n}) => {\n if (item.type === \"image_generation_call\") {\n return {\n item: JSON.stringify({\n ...item,\n result: \"truncated\"\n })\n };\n }\n return {\n item: JSON.stringify(item)\n };\n};\nvar serializeItemAsMessage = ({\n item,\n threadId,\n openaiAssistant,\n createdAt,\n runId = null,\n status: status3 = \"completed\"\n}) => ({\n id: item.id || (0, import_radash13.uid)(24),\n object: \"thread.message\",\n created_at: createdAt,\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: typeof item.role === \"string\" ? item.role : \"assistant\",\n content: serializeContent2({ item }),\n assistant_id: item.role === \"assistant\" ? openaiAssistant.id : null,\n run_id: runId,\n attachments: serializeAttachments({ item }),\n status: typeof item.status === \"string\" ? item.status : status3,\n metadata: serializeMetadata({ item })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts\nvar contentBlocksFromContent = ({\n content\n}) => {\n if ((0, import_radash14.isArray)(content)) {\n return content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"input_text\",\n text: item.text\n };\n }\n if (item.type === \"image_file\") {\n return {\n type: \"input_image\",\n file_id: item.image_file.file_id,\n detail: item.image_file.detail ?? \"auto\"\n };\n }\n if (item.type === \"image_url\") {\n return {\n type: \"input_image\",\n image_url: item.image_url.url,\n detail: item.image_url.detail ?? \"auto\"\n };\n }\n return {\n type: \"input_text\",\n text: \"\"\n };\n });\n }\n return [\n {\n type: \"input_text\",\n text: content ?? \"\"\n }\n ];\n};\nvar contentBlocksFromAttachments = ({\n attachments\n}) => attachments.map((attachment) => ({\n type: \"input_file\",\n file_id: attachment.file_id\n}));\nvar messageContentBlocks2 = ({\n content,\n attachments\n}) => [\n ...contentBlocksFromContent({ content }),\n ...contentBlocksFromAttachments({ attachments })\n];\nvar post16 = ({\n runAdapter,\n createResponseItems\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n if (typeof options.body !== \"string\") {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const { role, content, attachments = [] } = body;\n const item = {\n type: \"message\",\n role,\n content: messageContentBlocks2({\n content,\n attachments\n })\n };\n createResponseItems.push(item);\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } });\n return new Response(JSON.stringify(\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: (0, import_dayjs10.default)().unix()\n })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/get.ts\nvar import_radash15 = require(\"radash\");\n\n// src/lib/items/responseId.ts\nfunction responseId({\n conversation,\n itemId\n}) {\n if (!conversation.metadata) return null;\n const metadata = conversation.metadata;\n const keys = Object.keys(metadata).map((k) => {\n const m = /^responseItemsMap(\\d+)$/.exec(k);\n return m ? { key: k, idx: Number(m[1]) } : null;\n }).filter((x) => !!x).sort((a, b) => a.idx - b.idx);\n for (let i = keys.length - 1; i >= 0; i--) {\n const raw = metadata[keys[i].key];\n if (!raw || raw === \"[]\") continue;\n let arr = [];\n try {\n arr = JSON.parse(raw);\n if (!Array.isArray(arr)) continue;\n } catch {\n continue;\n }\n for (let j = arr.length - 1; j >= 0; j--) {\n const entry = arr[j];\n if (entry?.itemIds?.includes(itemId)) {\n return entry.responseId || null;\n }\n }\n }\n return null;\n}\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/get.ts\nvar get14 = ({\n client,\n runAdapter\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash15.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const conversation = await client.conversations.retrieve(threadId);\n const sortOrder = order === \"asc\" ? \"asc\" : \"desc\";\n const items = await client.conversations.items.list(threadId, {\n limit: parseInt(limit, 10),\n after,\n order: sortOrder\n });\n const itemsWithRunIds = mapItemsWithRunIds({ conversation, items: items.data });\n const responseMap = await fetchResponsesForItems({\n client,\n items: itemsWithRunIds\n });\n const timestampedItems = assignTimestamps({\n items: itemsWithRunIds,\n responseMap,\n sortOrder,\n conversationCreatedAt: conversation.created_at\n });\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } });\n return new Response(JSON.stringify({\n data: timestampedItems.map(({ item, runId, assignedTimestamp }) => serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: assignedTimestamp,\n runId\n })),\n has_more: items.has_more,\n last_id: items.last_id\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\nvar mapItemsWithRunIds = ({\n conversation,\n items\n}) => items.map((item) => ({\n item,\n runId: item.id ? responseId({\n conversation,\n itemId: item.id\n }) : null\n}));\nvar fetchResponsesForItems = async ({\n client,\n items\n}) => {\n const responseIds = Array.from(new Set(\n items.map(({ runId }) => runId).filter((id) => Boolean(id))\n ));\n const results = await Promise.allSettled(\n responseIds.map((id) => client.responses.retrieve(id))\n );\n const map = /* @__PURE__ */ new Map();\n results.forEach((result, index) => {\n if (result.status === \"fulfilled\") {\n map.set(responseIds[index], result.value);\n }\n });\n return map;\n};\nvar assignTimestamps = ({\n items,\n responseMap,\n sortOrder,\n conversationCreatedAt\n}) => {\n const itemsWithTimestamps = items.map((entry) => ({\n ...entry,\n timestamp: entry.runId ? responseMap.get(entry.runId)?.created_at ?? null : null,\n assignedTimestamp: 0\n }));\n const fallbackTimestampForIndex = (index) => sortOrder === \"asc\" ? conversationCreatedAt + index : conversationCreatedAt + (itemsWithTimestamps.length - index);\n const findNextKnownTimestamp = (startIndex) => {\n for (let i = startIndex; i < itemsWithTimestamps.length; i += 1) {\n const candidate = itemsWithTimestamps[i];\n if (candidate.timestamp != null) {\n return { index: i, timestamp: candidate.timestamp };\n }\n }\n return null;\n };\n if (sortOrder === \"asc\") {\n let lastAssigned = null;\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp;\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned + 1;\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1);\n if (nextKnown) {\n const gap = nextKnown.index - index;\n nextValue = nextKnown.timestamp - gap;\n } else {\n nextValue = fallbackTimestampForIndex(index);\n }\n }\n }\n if (lastAssigned != null && nextValue <= lastAssigned) {\n nextValue = lastAssigned + 1;\n }\n entry.assignedTimestamp = nextValue;\n lastAssigned = nextValue;\n });\n } else {\n let lastAssigned = null;\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp;\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned - 1;\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1);\n if (nextKnown) {\n const gap = nextKnown.index - index;\n nextValue = nextKnown.timestamp + gap;\n } else {\n nextValue = fallbackTimestampForIndex(index);\n }\n }\n }\n if (lastAssigned != null && nextValue >= lastAssigned) {\n nextValue = lastAssigned - 1;\n }\n entry.assignedTimestamp = nextValue;\n lastAssigned = nextValue;\n });\n }\n return itemsWithTimestamps;\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/index.ts\nvar messages3 = ({\n client,\n runAdapter,\n createResponseItems\n}) => ({\n post: post16({ runAdapter, createResponseItems }),\n get: get14({ client, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/get.ts\nvar get15 = () => async (urlString) => {\n return new Response(JSON.stringify({\n data: [],\n has_more: false,\n last_id: null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/post.ts\nvar import_radash16 = require(\"radash\");\nvar import_dayjs11 = __toESM(require(\"dayjs\"), 1);\nvar import_radash17 = require(\"radash\");\n\n// src/lib/responses/serializeResponseAsRun.ts\nvar serializeStatus = ({\n response\n}) => {\n if (response.error) return \"failed\";\n return response.status?.toLowerCase() ?? \"completed\";\n};\nvar serializeUsage = ({\n response\n}) => ({\n prompt_tokens: response.usage?.input_tokens ?? 0,\n completion_tokens: response.usage?.output_tokens ?? 0,\n total_tokens: response.usage?.total_tokens ?? 0\n});\nvar findPendingToolCalls = ({\n response\n}) => {\n const toolCalls = (response.output ?? []).filter(\n (item) => item.type === \"function_call\"\n );\n if (toolCalls.length === 0) return [];\n const completedCallIds = new Set(\n (response.output ?? []).filter(\n (item) => (\n // @ts-expect-error missing openai type\n item.type === \"function_call_output\"\n )\n ).map((item) => (\n // @ts-expect-error missing openai type\n item.call_id\n )).filter((id) => Boolean(id))\n );\n return toolCalls.filter((call) => !completedCallIds.has(call.call_id));\n};\nvar serializeToolCalls = ({\n toolCalls\n}) => toolCalls.map((toolCall) => ({\n id: toolCall.call_id,\n type: \"function\",\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments\n }\n}));\nvar serializeResponseAsRun = ({\n response,\n assistantId\n}) => {\n const pendingToolCalls = findPendingToolCalls({ response });\n const status3 = pendingToolCalls.length > 0 ? \"requires_action\" : serializeStatus({ response });\n return {\n id: response.id,\n object: \"thread.run\",\n created_at: response.created_at,\n thread_id: response.conversation.id,\n assistant_id: assistantId,\n status: status3,\n required_action: pendingToolCalls.length > 0 ? {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: serializeToolCalls({ toolCalls: pendingToolCalls })\n }\n } : null,\n last_error: response.error,\n expires_at: response.created_at,\n started_at: response.created_at,\n cancelled_at: null,\n failed_at: response.error ? response.created_at : null,\n completed_at: status3 === \"completed\" ? response.created_at : null,\n model: response.model,\n instructions: \"\",\n tools: [],\n metadata: response.metadata,\n usage: serializeUsage({ response }),\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: \"auto\",\n parallel_tool_calls: true\n };\n};\n\n// src/lib/responses/saveResponseItemsToConversationMetadata.ts\nvar BUCKET_PREFIX = \"responseItemsMap\";\nvar MAX_BUCKETS = 16;\nvar MAX_VALUE_LENGTH = 512;\nfunction parseBucket({ value }) {\n if (!value || value === \"[]\") return [];\n try {\n const arr = JSON.parse(value);\n return Array.isArray(arr) ? arr : [];\n } catch {\n return [];\n }\n}\nfunction serializeBucket({ entries }) {\n return JSON.stringify(entries);\n}\nfunction bucketKey({ index }) {\n return `${BUCKET_PREFIX}${index}`;\n}\nfunction listBucketIndices({ metadata }) {\n return Object.keys(metadata).map((k) => {\n const m = new RegExp(`^${BUCKET_PREFIX}(\\\\d+)$`).exec(k);\n return m ? Number(m[1]) : -1;\n }).filter((i) => i >= 0).sort((a, b) => a - b);\n}\nfunction parseAllPairs({ metadata }) {\n const indices = listBucketIndices({ metadata });\n const pairs = [];\n for (const idx of indices) {\n const key = bucketKey({ index: idx });\n const entries = parseBucket({ value: metadata[key] });\n for (const e of entries) {\n for (const iid of e.itemIds) {\n pairs.push({ responseId: e.responseId, itemId: iid });\n }\n }\n }\n return pairs;\n}\nfunction serializeNonBucketEntries({ entries }) {\n const result = {};\n for (const [key, value] of entries) {\n result[key] = value;\n }\n return result;\n}\nfunction packIntoBuckets({ pairs, slots }) {\n const buckets = [];\n let currentEntries = [];\n const flush = () => {\n if (currentEntries.length === 0) return true;\n const serialized = serializeBucket({ entries: currentEntries });\n if (serialized.length > MAX_VALUE_LENGTH) return false;\n if (buckets.length >= slots) return false;\n buckets.push(serialized);\n currentEntries = [];\n return true;\n };\n for (const { responseId: responseId2, itemId } of pairs) {\n const candidateEntries = currentEntries.map((entry) => ({\n responseId: entry.responseId,\n itemIds: [...entry.itemIds]\n }));\n const last3 = candidateEntries.at(-1);\n if (last3 && last3.responseId === responseId2) {\n last3.itemIds.push(itemId);\n } else {\n candidateEntries.push({ responseId: responseId2, itemIds: [itemId] });\n }\n const serialized = serializeBucket({ entries: candidateEntries });\n if (serialized.length <= MAX_VALUE_LENGTH) {\n currentEntries = candidateEntries;\n continue;\n }\n if (!flush()) return void 0;\n currentEntries = [{ responseId: responseId2, itemIds: [itemId] }];\n if (serializeBucket({ entries: currentEntries }).length > MAX_VALUE_LENGTH) {\n return void 0;\n }\n }\n if (!flush()) return void 0;\n return buckets;\n}\nfunction metadataEquals(a, b) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction appendItemIdsToConversationMetadata({\n metadata,\n responseId: responseId2,\n itemIds\n}) {\n const base = { ...metadata || {} };\n const nonBucketEntries = Object.entries(base).filter(([key]) => !key.startsWith(BUCKET_PREFIX));\n const availableSlots = Math.max(0, MAX_BUCKETS - nonBucketEntries.length);\n const preservedNonBucket = serializeNonBucketEntries({ entries: nonBucketEntries });\n if (availableSlots <= 0) {\n return { metadata: base, changed: false };\n }\n const existingPairs = parseAllPairs({ metadata: base });\n const incomingPairs = itemIds.map((id) => ({ responseId: responseId2, itemId: id }));\n const combinedPairs = existingPairs.concat(incomingPairs);\n let retainedOldestFirst = [];\n for (let idx = combinedPairs.length - 1; idx >= 0; idx -= 1) {\n const candidate = [combinedPairs[idx], ...retainedOldestFirst];\n const buckets2 = packIntoBuckets({ pairs: candidate, slots: availableSlots });\n if (buckets2) {\n retainedOldestFirst = candidate;\n }\n }\n const buckets = packIntoBuckets({ pairs: retainedOldestFirst, slots: availableSlots });\n if (!buckets) {\n const changed2 = !metadataEquals(base, preservedNonBucket);\n return { metadata: changed2 ? preservedNonBucket : base, changed: changed2 };\n }\n const rebuilt = { ...preservedNonBucket };\n buckets.forEach((value, index) => {\n if (value && value !== \"[]\") {\n rebuilt[bucketKey({ index })] = value;\n }\n });\n const changed = !metadataEquals(base, rebuilt);\n return { metadata: rebuilt, changed };\n}\nasync function saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: responseId2,\n itemIds\n}) {\n const conversation = await client.conversations.retrieve(threadId);\n const { metadata: updated, changed } = appendItemIdsToConversationMetadata({\n metadata: conversation.metadata,\n responseId: responseId2,\n itemIds\n });\n if (!changed) return;\n await client.conversations.update(threadId, { metadata: updated });\n}\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/post.ts\nvar serializeTools2 = ({\n tools\n}) => {\n if (!tools?.length) return {};\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...tool[tool.type] || {}\n }))\n };\n};\nvar truncation = ({\n truncation_strategy\n}) => {\n if (truncation_strategy.type === \"disabled\") {\n return \"disabled\";\n }\n return \"auto\";\n};\nvar defaultAssistant = {\n model: \"\",\n instructions: \"\",\n additional_instructions: null,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n }\n // tools: [],\n // metadata: {},\n};\nvar post17 = ({\n client,\n runAdapter,\n createResponseItems\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n if (typeof options.body !== \"string\") {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const {\n assistant_id,\n stream\n } = body;\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = (0, import_radash17.assign)({\n ...defaultAssistant,\n ...await runAdapter.getOpenaiAssistant()\n }, body);\n const response = await client.responses.create({\n conversation: threadId,\n instructions,\n model,\n metadata,\n stream,\n ...serializeTools2({ tools }),\n truncation: truncation({ truncation_strategy }),\n text: {\n format: response_format\n },\n input: createResponseItems\n });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => controller.enqueue(`data: ${JSON.stringify(event)}\n\n`)\n });\n } catch (error) {\n console.error(error);\n const event = {\n event: \"thread.run.failed\",\n data: {\n id: (0, import_radash16.uid)(24),\n failed_at: (0, import_dayjs11.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n };\n controller.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n const itemIds = (response.output ?? []).filter((o) => o.id).map((o) => o.id);\n if (itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: response.id,\n itemIds\n });\n }\n const data = serializeResponseAsRun({\n response,\n assistantId: assistant_id\n });\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/index.ts\nvar runs2 = ({\n client,\n runAdapter,\n createResponseItems\n}) => ({\n get: get15(),\n post: post17({ client, createResponseItems, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/run/get.ts\nvar get16 = ({\n client,\n runAdapter\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, _threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const response = await client.responses.retrieve(runId);\n const data = serializeResponseAsRun({\n response,\n assistantId: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id\n });\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n \"openai-poll-after-ms\": \"5000\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/run/index.ts\nvar run2 = ({\n client,\n runAdapter\n}) => ({\n get: get16({ client, runAdapter })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts\nvar import_radash21 = require(\"radash\");\n\n// src/lib/items/serializeItemAsMessageCreationRunStep.ts\nvar import_dayjs12 = __toESM(require(\"dayjs\"), 1);\nvar import_radash18 = require(\"radash\");\nfunction serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId = `run_${(0, import_radash18.uid)(24)}`,\n status: status3 = \"completed\",\n completedAt = (0, import_dayjs12.default)().unix()\n}) {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${(0, import_radash18.uid)(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs12.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null\n };\n if (item.type === \"message\") {\n return {\n ...base,\n type: \"message_creation\",\n step_details: {\n type: \"message_creation\",\n message_creation: {\n // If you also create a thread.message elsewhere, substitute that id here.\n message_id: itemId\n // <- always string\n }\n },\n // keep role if present (assistant/user/system), optional\n metadata: \"role\" in item ? { role: item.role } : {}\n };\n } else if (item.type === \"image_generation_call\") {\n return {\n ...base,\n type: \"message_creation\",\n step_details: {\n type: \"message_creation\",\n message_creation: { message_id: itemId }\n },\n metadata: {\n item: JSON.stringify({\n ...item,\n result: \"truncated\"\n })\n }\n };\n }\n return {\n ...base,\n type: \"message_creation\",\n step_details: {\n type: \"message_creation\",\n message_creation: { message_id: itemId }\n },\n metadata: {\n item: JSON.stringify(item)\n }\n };\n}\n\n// src/lib/items/serializeItemAsFunctionCallRunStep.ts\nvar import_dayjs13 = __toESM(require(\"dayjs\"), 1);\nvar import_radash19 = require(\"radash\");\nvar serializeFunctionCallOutput = ({\n functionCallOutput\n}) => {\n if (!functionCallOutput) return null;\n if (typeof functionCallOutput.output === \"string\") {\n return functionCallOutput.output;\n }\n return JSON.stringify(functionCallOutput.output);\n};\nvar serializeItemAsFunctionCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${(0, import_radash19.uid)(24)}`,\n status: status3 = \"completed\",\n completedAt = (0, import_dayjs13.default)().unix()\n}) => {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${(0, import_radash19.uid)(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs13.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null\n };\n const functionCallOutput = items.find((i) => i.type === \"function_call_output\" && i.call_id === item.call_id);\n const toolCall = {\n id: item.call_id,\n type: \"function\",\n function: {\n name: item.name,\n arguments: item.arguments,\n output: serializeFunctionCallOutput({ functionCallOutput })\n }\n };\n return {\n ...base,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsImageGenerationRunStep.ts\nvar import_dayjs14 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus2 = ({\n item\n}) => {\n if (item.result !== null) {\n return \"completed\";\n }\n if (item.status === \"generating\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeItemAsImageGenerationRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs14.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"image_generation\",\n arguments: \"{}\",\n output: JSON.stringify({\n status: item.status,\n // @ts-expect-error bad openai types\n background: item.background,\n // @ts-expect-error bad openai types\n output_format: item.output_format,\n // @ts-expect-error bad openai types\n quality: item.quality,\n result: item.result,\n // @ts-expect-error bad openai types\n size: item.size,\n // @ts-expect-error bad openai types\n revised_prompt: item.revised_prompt\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs14.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus2({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsWebSearchRunStep.ts\nvar import_dayjs15 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus3 = ({\n item\n}) => {\n if (item.status === \"searching\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeItemAsWebSearchRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs15.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"web_search\",\n arguments: JSON.stringify({\n // @ts-expect-error bad openai types\n action: item.action\n }),\n output: JSON.stringify({\n status: item.status\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs15.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus3({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsMcpListToolsRunStep.ts\nvar import_dayjs16 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus4 = ({\n item\n}) => {\n if (item.error) {\n return \"failed\";\n }\n return \"completed\";\n};\nvar serializeItemAsMcpListToolsRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs16.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"mcp_list_tools\",\n arguments: JSON.stringify({\n server_label: item.server_label\n }),\n output: JSON.stringify({\n tools: item.tools,\n ...item.error && { error: item.error }\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs16.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus4({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsMcpCallRunStep.ts\nvar import_dayjs17 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus5 = ({\n item\n}) => {\n if (item.error) {\n return \"failed\";\n }\n return \"completed\";\n};\nvar serializeItemAsMcpCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs17.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: item.name,\n arguments: item.arguments,\n // @ts-expect-error compat\n server_label: item.server_label,\n output: item.output ?? item.error ?? null\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs17.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus5({ item }),\n last_error: item.error ? { code: \"server_error\", message: item.error } : null,\n expired_at: null,\n cancelled_at: null,\n failed_at: item.error ? (0, import_dayjs17.default)().unix() : null,\n completed_at: item.error ? null : completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsCodeInterpreterCallRunStep.ts\nvar import_dayjs18 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus6 = ({\n item\n}) => {\n if (item.status === \"incomplete\") {\n return \"in_progress\";\n } else if (item.status === \"interpreting\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeOutput = ({\n output\n}) => {\n return {\n type: output.type,\n logs: output.logs\n };\n};\nvar serializeOutputs = ({\n item\n}) => {\n if (!item.outputs) return [];\n return item.outputs.filter((o) => o.type === \"logs\").map((output) => serializeOutput({ output }));\n};\nvar serializeItemAsCodeInterpreterCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs18.default)().unix()\n}) => {\n const toolCall = {\n id: `citc${item.id}`,\n type: \"code_interpreter\",\n code_interpreter: {\n input: item.code ?? \"\",\n outputs: serializeOutputs({ item })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs18.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus6({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {\n item: JSON.stringify(item)\n },\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsComputerCallRunStep.ts\nvar import_dayjs19 = __toESM(require(\"dayjs\"), 1);\nvar import_radash20 = require(\"radash\");\nvar serializeItemAsComputerCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${(0, import_radash20.uid)(24)}`,\n status: status3 = \"completed\",\n completedAt = (0, import_dayjs19.default)().unix()\n}) => {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${(0, import_radash20.uid)(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs19.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null\n };\n const computerCallOutput2 = items.find((i) => i.type === \"computer_call_output\" && i.call_id === item.call_id);\n const toolCall = {\n id: item.call_id,\n type: \"function\",\n function: {\n name: \"computer_call\",\n arguments: JSON.stringify({\n action: item.action,\n pending_safety_checks: item.pending_safety_checks\n }),\n output: computerCallOutput2 ? JSON.stringify(computerCallOutput2.output) : null\n }\n };\n return {\n ...base,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsReasoningRunStep.ts\nvar import_dayjs20 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus7 = ({\n item,\n completedAt\n}) => {\n if (!item.status) {\n if (completedAt) {\n return \"completed\";\n } else {\n return \"in_progress\";\n }\n }\n if (item.status === \"incomplete\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeItemAsReasoningRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs20.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"reasoning\",\n arguments: \"{}\",\n output: JSON.stringify({\n summary: item.summary,\n content: item.content,\n encrypted_content: item.encrypted_content\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs20.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus7({ item, completedAt }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts\nvar get17 = ({\n client,\n runAdapter\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const response = await client.responses.retrieve(runId);\n const latestToolCallItem = response.output.findLast((item) => item.type === \"function_call\");\n let functionCallOutputItems = [];\n let computerCallOutputItems = [];\n if (latestToolCallItem) {\n const items = await client.conversations.items.list(threadId, {\n after: latestToolCallItem.id,\n order: \"asc\",\n limit: 20\n });\n functionCallOutputItems = items.data.filter((item) => item.type === \"function_call_output\");\n computerCallOutputItems = items.data.filter((item) => item.type === \"computer_call_output\");\n }\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } });\n const data = response.output.flatMap((item) => {\n const step = serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId: response.id\n });\n if (item.type === \"function_call\") {\n return [\n serializeItemAsFunctionCallRunStep({\n item,\n items: functionCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"computer_call\") {\n return [\n serializeItemAsComputerCallRunStep({\n item,\n items: computerCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"reasoning\") {\n return [\n serializeItemAsReasoningRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"image_generation_call\") {\n return [\n step,\n serializeItemAsImageGenerationRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n })\n ];\n } else if (item.type === \"web_search_call\") {\n return [\n serializeItemAsWebSearchRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"mcp_list_tools\") {\n return [\n serializeItemAsMcpListToolsRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"mcp_call\") {\n return [\n serializeItemAsMcpCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"code_interpreter_call\") {\n return [\n serializeItemAsCodeInterpreterCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n }\n return [step];\n });\n return new Response(JSON.stringify({\n data,\n has_more: false,\n last_id: (0, import_radash21.last)(response.output)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/index.ts\nvar steps2 = ({\n client,\n runAdapter\n}) => ({\n get: get17({ client, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar serializeTools3 = ({\n tools\n}) => {\n if (!tools?.length) return {};\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...tool[tool.type] || {}\n }))\n };\n};\nvar computerCallOutput = ({\n toolOutput\n}) => {\n if (typeof toolOutput.output !== \"string\") return { isComputerCallOutput: false };\n let parsedOutput;\n try {\n parsedOutput = JSON.parse(toolOutput.output);\n } catch {\n return { isComputerCallOutput: false };\n }\n if (typeof parsedOutput !== \"object\" || parsedOutput === null) return { isComputerCallOutput: false };\n if (parsedOutput.type !== \"computer_screenshot\") return { isComputerCallOutput: false };\n return {\n isComputerCallOutput: true,\n parsedOutput\n };\n};\nvar getToolCallOutputItems = ({\n tool_outputs\n}) => {\n const functionCallOutputItems = [];\n const computerCallOutputItems = [];\n tool_outputs.forEach((toolOutput) => {\n const { isComputerCallOutput, parsedOutput } = computerCallOutput({ toolOutput });\n if (isComputerCallOutput) {\n computerCallOutputItems.push({\n type: \"computer_call_output\",\n call_id: toolOutput.tool_call_id,\n output: parsedOutput,\n // @ts-expect-error compat\n acknowledged_safety_checks: toolOutput.acknowledged_safety_checks ?? []\n });\n } else {\n functionCallOutputItems.push({\n type: \"function_call_output\",\n call_id: toolOutput.tool_call_id,\n output: toolOutput.output ?? \"\"\n });\n }\n });\n return {\n functionCallOutputItems,\n computerCallOutputItems\n };\n};\nvar truncation2 = ({\n openaiAssistant\n}) => {\n if (openaiAssistant.truncation_strategy?.type === \"disabled\") {\n return \"disabled\";\n }\n return \"auto\";\n};\nvar post18 = ({\n client,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp));\n const body = JSON.parse(options.body);\n const {\n tool_outputs,\n stream\n } = body;\n const toolCallOutputItems = getToolCallOutputItems({ tool_outputs });\n const input = [...toolCallOutputItems.functionCallOutputItems, ...toolCallOutputItems.computerCallOutputItems];\n const previousResponse = await client.responses.retrieve(runId);\n const openaiAssistant = await runAdapter.getOpenaiAssistant();\n const response = await client.responses.create({\n conversation: threadId,\n input,\n instructions: openaiAssistant.instructions,\n model: openaiAssistant.model,\n // metadata,\n stream,\n ...serializeTools3({ tools: openaiAssistant.tools }),\n truncation: truncation2({ openaiAssistant })\n // text: response_format,\n });\n const readableStream = new ReadableStream({\n async start(controller) {\n toolCallOutputItems.functionCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => i.type === \"function_call\" && i.call_id === item.call_id);\n if (!toolCallItem) {\n return;\n }\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeItemAsFunctionCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.functionCallOutputItems,\n threadId,\n openaiAssistant,\n runId\n })\n })}\n\n`);\n });\n toolCallOutputItems.computerCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => i.type === \"computer_call\" && i.call_id === item.call_id);\n if (!toolCallItem) {\n return;\n }\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeItemAsComputerCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.computerCallOutputItems,\n threadId,\n openaiAssistant,\n runId\n })\n })}\n\n`);\n });\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => controller.enqueue(`data: ${JSON.stringify(event)}\n\n`)\n });\n controller.close();\n }\n });\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/index.ts\nvar submitToolOutputs2 = ({\n client,\n runAdapter\n}) => ({\n post: post18({\n client,\n runAdapter\n })\n});\n\n// src/adapters/storage/responsesStorageAdapter/assistants/get.ts\nvar get18 = ({\n runAdapter\n}) => async (_urlString) => {\n return new Response(JSON.stringify({\n data: [await runAdapter.getOpenaiAssistant()],\n has_more: false,\n last_id: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/assistants/post.ts\nvar post19 = () => async () => new Response(\n JSON.stringify({\n error: {\n message: \"Assistant creation is not implemented for the Responses storage adapter.\",\n type: \"not_implemented\"\n }\n }),\n {\n status: 501,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }\n);\n\n// src/adapters/storage/responsesStorageAdapter/assistants/index.ts\nvar assistants2 = ({\n runAdapter\n}) => ({\n get: get18({ runAdapter }),\n post: post19()\n});\n\n// src/adapters/storage/responsesStorageAdapter/index.ts\nvar responsesStorageAdapter = () => {\n const createResponseItems = [];\n return ({ runAdapter, client }) => ({\n requestHandlers: {\n \"^/(?:v1|/?openai)/assistants$\": assistants2({ runAdapter }),\n \"^/(?:v1|/?openai)/threads$\": threads2({ client }),\n [messagesRegexp]: messages3({ client, runAdapter, createResponseItems }),\n [runsRegexp]: runs2({ client, runAdapter, createResponseItems }),\n [runRegexp]: run2({ client, runAdapter }),\n [stepsRegexp]: steps2({ client, runAdapter }),\n [submitToolOutputsRegexp]: submitToolOutputs2({ client, runAdapter })\n }\n });\n};\n\n// src/adapters/run/responsesRunAdapter/index.ts\nvar import_dayjs21 = __toESM(require(\"dayjs\"), 1);\nvar import_radash22 = require(\"radash\");\nvar serializeToolCalls2 = ({\n toolCalls\n}) => toolCalls.map((toolCall) => {\n if (toolCall.type === \"function_call\") {\n return {\n id: toolCall.call_id,\n type: \"function\",\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments\n }\n };\n } else if (toolCall.type === \"computer_call\") {\n return {\n id: toolCall.call_id,\n type: \"computer_call\",\n computer_call: {\n action: toolCall.action,\n pending_safety_checks: toolCall.pending_safety_checks\n }\n };\n }\n});\nvar responsesRunAdapter = ({\n getOpenaiAssistant: getDirectOpenaiAssistant,\n waitUntil = (p) => p.then(() => {\n })\n}) => {\n let cachedOpenaiAssistant = null;\n const getOpenaiAssistant = async ({ select: { id = false } = {} } = {}) => {\n const args = { select: { id } };\n if (args.select.id) {\n return {\n id: (await getDirectOpenaiAssistant({ select: { id: true } })).id\n };\n }\n if (cachedOpenaiAssistant) return cachedOpenaiAssistant;\n cachedOpenaiAssistant = await getDirectOpenaiAssistant();\n return cachedOpenaiAssistant;\n };\n const handleRun = async ({\n client,\n threadId,\n response,\n onEvent: onEvent2\n }) => {\n let responseCreatedResponse = null;\n const toolCalls = {};\n const mcpCalls = {};\n const codeInterpreterCalls = {};\n let itemIds = [];\n try {\n for await (const event of response) {\n switch (event.type) {\n case \"response.created\":\n responseCreatedResponse = event.response;\n await onEvent2({\n event: \"thread.run.created\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n break;\n case \"response.in_progress\":\n await onEvent2({\n event: \"thread.run.in_progress\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n break;\n case \"response.completed\": {\n itemIds = event.response.output.filter((o) => o.id).map((o) => o.id);\n const toolCalls2 = event.response.output.filter((o) => o.type === \"function_call\" || o.type === \"computer_call\");\n if (toolCalls2.length > 0) {\n await onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n }),\n ...{\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: [\n ...serializeToolCalls2({\n toolCalls: toolCalls2\n })\n ]\n }\n }\n }\n }\n });\n } else {\n await onEvent2({\n event: \"thread.run.completed\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n }\n break;\n }\n case \"response.failed\": {\n await onEvent2({\n event: \"thread.run.failed\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n break;\n }\n case \"response.output_text.delta\": {\n await onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: event.item_id,\n delta: {\n content: [{ type: \"text\", index: event.content_index, text: { value: event.delta } }]\n }\n }\n });\n break;\n }\n // case 'response.output_text.done': {\n // break\n // }\n //\n case \"response.output_item.added\": {\n if (event.item.type === \"message\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n } else if (event.item.type === \"function_call\") {\n toolCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"computer_call\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsComputerCallRunStep({\n item: event.item,\n items: [],\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"image_generation_call\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n } else if (event.item.type === \"reasoning\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"web_search_call\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"mcp_list_tools\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"mcp_call\") {\n mcpCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"code_interpreter_call\") {\n codeInterpreterCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n }\n if (event.item.id) itemIds.push(event.item.id);\n break;\n }\n case \"response.output_item.done\": {\n if (event.item.type === \"message\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"function_call\") {\n toolCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.run.step.in_progress\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"image_generation_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"reasoning\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"web_search_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"mcp_list_tools\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"mcp_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"code_interpreter_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n }\n break;\n }\n case \"response.function_call_arguments.delta\": {\n const toolCall = toolCalls[event.item_id];\n if (!toolCall) break;\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n id: event.item_id,\n object: \"thread.run.step.delta\",\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: [\n {\n id: toolCall.call_id,\n type: \"function\",\n index: event.output_index,\n function: {\n name: toolCall.name,\n arguments: event.delta,\n output: null\n }\n }\n ]\n }\n }\n }\n });\n break;\n }\n case \"response.mcp_call_arguments.delta\": {\n const mcpCall = mcpCalls[event.item_id];\n if (!mcpCall) break;\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n id: `fc${event.item_id}`,\n object: \"thread.run.step.delta\",\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: [\n {\n id: `ftc${mcpCall.id}`,\n type: \"function\",\n index: event.output_index,\n function: {\n name: mcpCall.name,\n arguments: event.delta,\n output: null\n }\n }\n ]\n }\n }\n }\n });\n break;\n }\n case \"response.image_generation_call.in_progress\":\n case \"response.image_generation_call.generating\":\n await onEvent2({\n event: \"thread.message.in_progress\",\n data: {\n id: event.item_id,\n object: \"thread.message\",\n created_at: (0, import_dayjs21.default)().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: \"assistant\",\n content: [],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse.id,\n attachments: [],\n status: \"in_progress\",\n metadata: {\n event: JSON.stringify(event)\n }\n }\n });\n break;\n case \"response.image_generation_call.partial_image\": {\n await onEvent2({\n event: \"thread.message.in_progress\",\n data: {\n id: event.item_id,\n object: \"thread.message\",\n created_at: (0, import_dayjs21.default)().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: \"assistant\",\n content: [{\n type: \"image_url\",\n image_url: {\n url: `data:image/png;base64,${event.partial_image_b64}`,\n // url: `data:image/png;base64,truncated`,\n detail: \"auto\"\n }\n }],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse.id,\n attachments: [],\n status: \"in_progress\",\n metadata: {\n event: JSON.stringify({\n ...event,\n partial_image_b64: \"truncated\"\n })\n }\n }\n });\n break;\n }\n //\n // case 'response.function_call_arguments.done': {\n // break\n // }\n default:\n break;\n }\n }\n } catch (e) {\n await onEvent2({\n event: \"thread.run.failed\",\n data: {\n id: responseCreatedResponse?.id || `run_${(0, import_radash22.uid)(18)}`,\n object: \"thread.run\",\n thread_id: threadId,\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n status: \"failed\",\n failed_at: (0, import_dayjs21.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: String(e?.message || e || \"Unknown error\")\n }\n }\n });\n } finally {\n waitUntil(new Promise(async (resolve) => {\n if (responseCreatedResponse?.id && itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: responseCreatedResponse.id,\n itemIds\n });\n }\n resolve(true);\n }));\n }\n };\n return {\n handleRun,\n getOpenaiAssistant\n };\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n anthropicClientAdapter,\n azureOpenaiClientAdapter,\n completionsRunAdapter,\n googleClientAdapter,\n groqClientAdapter,\n humirisClientAdapter,\n mistralClientAdapter,\n ollamaClientAdapter,\n openaiClientAdapter,\n perplexityClientAdapter,\n prismaStorageAdapter,\n responsesRunAdapter,\n responsesStorageAdapter,\n supercompat,\n togetherClientAdapter\n});\n","export { supercompat } from './supercompat'\nexport { groqClientAdapter } from './adapters/client/groqClientAdapter'\nexport { openaiClientAdapter } from './adapters/client/openaiClientAdapter'\nexport { azureOpenaiClientAdapter } from './adapters/client/azureOpenaiClientAdapter'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { anthropicClientAdapter } from './adapters/client/anthropicClientAdapter'\nexport { togetherClientAdapter } from './adapters/client/togetherClientAdapter'\nexport { googleClientAdapter } from './adapters/client/googleClientAdapter'\nexport { humirisClientAdapter } from './adapters/client/humirisClientAdapter'\nexport { ollamaClientAdapter } from './adapters/client/ollamaClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\nexport { responsesStorageAdapter } from './adapters/storage/responsesStorageAdapter'\nexport { responsesRunAdapter } from './adapters/run/responsesRunAdapter'\n","import OpenAI, { AzureOpenAI } from 'openai'\nimport { supercompatFetch, type Args } from './supercompatFetch'\nimport { endpointFromBaseUrl } from '@/lib/azureOpenai/endpointFromBaseUrl'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n if (client.type === 'AZURE_OPENAI') {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n }\n\n return new OpenAI({\n apiKey: 'SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY',\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n}\n","import { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\nimport { supercompat } from '@/supercompat'\n\nconst storageRequestHandlers = ({\n storage,\n runAdapter,\n client,\n}: {\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n client: any\n}) => {\n if (!storage) return {}\n if (!runAdapter) return {}\n\n const wrappedClient = supercompat({\n client,\n })\n\n const result = storage({\n runAdapter: {\n ...runAdapter,\n handleRun: partob(runAdapter.handleRun, { client: wrappedClient }),\n },\n client: wrappedClient,\n })\n return result.requestHandlers\n}\n\nexport const requestHandlers = ({\n client,\n storage,\n runAdapter,\n}: {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}) => (\n assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client,\n })\n )\n)\n","export const findRequestHandler = ({\n url,\n requestHandlers,\n}: {\n url: string\n requestHandlers: any\n}) => {\n const pathname = new URL(url).pathname\n\n for (const key in requestHandlers) {\n const regex = new RegExp(key)\n\n if (regex.test(pathname)) {\n return requestHandlers[key]\n }\n }\n}\n","export const originalFetch = async ({\n args,\n client,\n}: {\n args: any[]\n client: any\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args\n\n const clientHeaders = await client.client.buildHeaders({\n options: {},\n method: args[1].method.toLowerCase(),\n bodyHeaders: args[1].headers,\n retryCount: 0,\n })\n\n clientHeaders.set('Authorization', `Bearer ${client.client.apiKey}`)\n\n const newOptions = {\n ...options,\n headers: clientHeaders,\n }\n\n return client.client.fetch(url, newOptions)\n } else {\n // @ts-ignore-next-line\n return fetch(...args)\n }\n}\n","import { RunAdapter, StorageAdapterArgs } from '@/types'\nimport { requestHandlers as getRequestHandlers } from './requestHandlers'\nimport { findRequestHandler } from './findRequestHandler'\nimport { originalFetch } from './originalFetch'\n\nexport type Args = {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}\n\nexport const supercompatFetch = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n const requestHandlers = getRequestHandlers({\n client,\n storage,\n runAdapter,\n })\n\n return async (...args: any[]) => {\n const [url, options] = args\n\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\n })\n\n if (!pathHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n const method = options?.method ?? ''\n\n const requestHandler = pathHandler[method.toLowerCase()]\n\n if (!requestHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n return requestHandler(...args)\n }\n}\n","export const endpointFromBaseUrl = ({\n baseURL\n}: {\n baseURL: string\n}) => (\n baseURL.replace(/\\/+openai$/, '')\n)\n","import type Groq from 'groq-sdk'\n\nexport const get = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, _options: any) => {\n try {\n const data = await groq.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type Groq from 'groq-sdk'\nimport { get } from './get'\n\nexport const models = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n get: get({ groq }),\n})\n","import type Groq from 'groq-sdk'\n\nexport const post = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await groq.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await groq.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type Groq from 'groq-sdk'\nimport { post } from './post'\n\nexport const completions = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n post: post({ groq }),\n})\n","// import type Groq from 'groq-sdk'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const groqClientAdapter = ({\n groq,\n}: {\n // TODO\n groq: any\n}) => ({\n client: groq,\n requestHandlers: {\n '^/v1/models$': models({ groq }),\n '^/v1/chat/completions$': completions({ groq }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await openai.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n get: get({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { systemDeveloperMessages } from '@/lib/messages/systemDeveloperMessages'\nimport { isOModel } from '@/lib/models/isOModel'\n\nconst omitKeys = ({\n model,\n}: {\n model: string\n}) => {\n if (isOModel({ model })) {\n return ['tools']\n }\n\n return []\n}\n\nexport const post = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const messages = body.messages as OpenAI.ChatCompletionMessageParam[]\n\n const resultOptions = {\n ...omit(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages,\n model: body.model,\n }),\n } as OpenAI.Chat.ChatCompletionCreateParams\n\n if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await openai.chat.completions.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","export const isOModel = ({ model }: { model: string }) => (\n model.startsWith('o1') || model.startsWith('o3')\n)\n","import type OpenAI from 'openai'\nimport { isOModel } from '@/lib/models/isOModel'\n\nexport const systemDeveloperMessages = ({\n messages,\n model,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n model: string\n}): OpenAI.Chat.ChatCompletionMessageParam[] => {\n if (isOModel({ model })) {\n return messages.map((message) => {\n if (message.role === 'system') {\n return {\n ...message,\n // TODO: This should be 'developer' but we're using 'user' for now\n // role: 'developer',\n role: 'user',\n }\n }\n\n return message\n })\n }\n\n return messages\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const openaiClientAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n client: openai,\n requestHandlers: {\n '^/v1/models$': models({ openai }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ openai }),\n },\n})\n","import type { AzureOpenAI } from 'openai'\nimport { completions } from '@/adapters/client/openaiClientAdapter/completions'\n\nexport const azureOpenaiClientAdapter = ({\n azureOpenai,\n}: {\n azureOpenai: AzureOpenAI\n}) => ({\n type: 'AZURE_OPENAI',\n client: azureOpenai,\n requestHandlers: {\n '^/(?:v1|/?openai)/chat/completions$': completions({\n openai: azureOpenai,\n }),\n },\n})\n","import type { Mistral } from '@mistralai/mistralai'\n\nexport const get = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, _options: any) => {\n try {\n const data = await mistral.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { get } from './get'\n\nexport const models = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n get: get({ mistral }),\n})\n","const serializeDelta = ({\n delta: {\n toolCalls,\n ...rest\n },\n}: {\n delta: any\n}) => ({\n ...rest,\n ...(toolCalls ? {\n tool_calls: toolCalls,\n } : {}),\n})\n\nconst serializeChoice = ({\n choice: {\n finishReason,\n delta,\n ...rest\n },\n}: {\n choice: any\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta }),\n})\n\nexport const serializeChunk = ({\n chunk,\n}: {\n chunk: any\n}) => ({\n ...chunk.data,\n ...(chunk.data.choices ? {\n choices: chunk.data.choices.map((choice: any) => (\n serializeChoice({ choice })\n )),\n }: {}),\n})\n","import type OpenAI from 'openai'\n\nconst serializeMessage = ({\n message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n },\n}: {\n message: OpenAI.ChatCompletionMessageParam\n}) => ({\n ...rest,\n ...(tool_call_id ? {\n toolCallId: tool_call_id,\n } : {}),\n ...(tool_calls ? {\n toolCalls: tool_calls,\n } : {}),\n})\n\nexport const serializeBody = ({\n body,\n}: {\n body: any\n}) => ({\n ...body,\n messages: body.messages.map((message: OpenAI.ChatCompletionMessageParam) => (\n serializeMessage({\n message,\n })\n )),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { serializeChunk } from './serializeChunk'\nimport { serializeBody } from './serializeBody'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const serializedBody = serializeBody({\n body,\n })\n\n if (body.stream) {\n const response = await mistral.chat.stream(serializedBody)\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n const serializedChunk = serializeChunk({\n chunk,\n })\n\n controller.enqueue(`data: ${JSON.stringify(serializedChunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await mistral.chat.complete(serializedBody)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { post } from './post'\n\nexport const completions = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n post: post({ mistral }),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n '^/v1/models$': models({ mistral }),\n '^/v1/chat/completions$': completions({ mistral }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'sonar-reasoning-pro',\n 'sonar-reasoning',\n 'sonar-pro',\n 'sonar',\n 'r1-1776',\n 'llama-3.1-sonar-small-128k-online',\n 'llama-3.1-sonar-large-128k-online',\n 'llama-3.1-sonar-huge-128k-online',\n]\n\nexport const get = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n get: get({ perplexity }),\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const alternatingMessages = ({\n messages,\n}: {\n messages: OpenAI.ChatCompletionMessageParam[]\n}): OpenAI.ChatCompletionMessageParam[] => {\n const result: OpenAI.ChatCompletionMessageParam[] = []\n\n messages.forEach((message, index: number) => {\n result.push(message)\n\n const nextMessage = messages[index + 1]\n if (!nextMessage) return\n\n if (message.role === 'user' && nextMessage.role === 'user') {\n result.push({\n role: 'assistant',\n content: '-',\n } as OpenAI.ChatCompletionMessageParam)\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n result.push({\n role: 'user',\n content: '-',\n } as OpenAI.ChatCompletionMessageParam)\n }\n })\n\n return result\n}\n","import type OpenAI from 'openai'\nimport { alternatingMessages } from '@/lib/messages/alternatingMessages'\n\nexport const post = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n const messages = alternatingMessages({\n messages: body.messages,\n })\n\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages,\n })\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await perplexity.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n post: post({ perplexity }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n client: perplexity,\n requestHandlers: {\n '^/v1/models$': models({ perplexity }),\n '^/v1/chat/completions$': completions({ perplexity }),\n },\n})\n","import type Anthropic from '@anthropic-ai/sdk'\n\nexport const get = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => async (_url: string, _options: any) => {\n try {\n const response = await anthropic.models.list()\n\n return new Response(JSON.stringify({\n type: 'list',\n data: response.data.map((model) => ({\n id: model.id,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type Anthropic from '@anthropic-ai/sdk'\nimport { get } from './get'\n\nexport const models = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n get: get({ anthropic }),\n})\n","import type Anthropic from '@anthropic-ai/sdk'\nimport type OpenAI from 'openai'\nimport { uid, fork, omit, isEmpty } from 'radash'\nimport { nonEmptyMessages } from '@/lib/messages/nonEmptyMessages'\nimport { alternatingMessages } from '@/lib/messages/alternatingMessages'\nimport { firstUserMessages } from '@/lib/messages/firstUserMessages'\nimport { serializeTools } from './serializeTools'\nimport { serializeMessages } from './serializeMessages'\n\nexport const post = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n const messages = body.messages as OpenAI.ChatCompletionMessageParam[]\n const [systemMessages, otherMessages] = fork(messages, (message) => message.role === 'system')\n const system = systemMessages.map((message) => message.content).join('\\n')\n\n const chatMessages = nonEmptyMessages({\n messages: firstUserMessages({\n messages: alternatingMessages({\n messages: otherMessages,\n }),\n }),\n })\n\n const resultOptions = {\n ...omit(body, ['response_format']),\n stream: body.stream ? isEmpty(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages,\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools,\n }),\n }\n\n if (body.stream) {\n // @ts-ignore-next-line\n const response = await anthropic.messages.stream(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === 'content_block_delta') {\n let delta: { tool_calls?: any; content?: string | null }\n\n if (chunk.delta.type === 'input_json_delta') {\n delta = {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json,\n },\n },\n ],\n }\n } else if ('text' in chunk.delta) {\n delta = {\n content: chunk.delta.text,\n }\n } else {\n delta = {\n content: '',\n }\n }\n\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: chunk.index,\n delta,\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n } else if (chunk.type === 'content_block_start') {\n let delta: { content: string | null; tool_calls?: any }\n\n if (chunk.content_block.type === 'tool_use') {\n delta = {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: 'function',\n function: {\n name: chunk.content_block.name,\n arguments: '',\n },\n },\n ],\n }\n } else if ('text' in chunk.content_block) {\n delta = {\n content: chunk.content_block.text,\n }\n } else {\n delta = {\n content: '',\n }\n }\n\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: chunk.index,\n delta,\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n } else if (chunk.type === 'message_start') {\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: 0,\n delta: {\n content: '',\n },\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n }\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n // @ts-ignore-next-line\n const data = await anthropic.messages.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\n\nconst nonEmptyContent = ({\n message,\n}: {\n message: OpenAI.Chat.ChatCompletionMessageParam\n}): OpenAI.Chat.ChatCompletionMessageParam['content'] => {\n if (message.content == null) {\n return '-'\n }\n\n if (typeof message.content === 'string') {\n if (!/\\S/.test(message.content)) {\n return '-'\n }\n }\n\n return message.content as OpenAI.Chat.ChatCompletionMessageParam[\"content\"]\n}\n\ntype ExtendedRole = OpenAI.Chat.ChatCompletionMessageParam['role'] | 'developer'\n\ntype ExtendedMessageParam = Omit<OpenAI.Chat.ChatCompletionMessageParam, 'role'> & {\n role: ExtendedRole\n}\n\nexport const nonEmptyMessages = ({\n messages,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n}) => {\n const result = [] as ExtendedMessageParam[]\n\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam) => (\n result.push({\n ...message,\n content: nonEmptyContent({ message }),\n } as ExtendedMessageParam)\n ))\n\n return result as OpenAI.Chat.ChatCompletionMessageParam[]\n}\n","import type OpenAI from 'openai'\n\nexport const firstUserMessages = ({\n messages,\n}: {\n messages: OpenAI.ChatCompletionMessageParam[]\n}): OpenAI.ChatCompletionMessageParam[] => {\n const firstMessage = messages[0]\n if (!firstMessage) return messages\n\n if (firstMessage.role !== 'user') {\n return [\n {\n role: 'user',\n content: '-',\n } as OpenAI.ChatCompletionMessageParam,\n ...messages,\n ]\n }\n\n return messages\n}\n","import type OpenAI from 'openai'\n\nexport const serializeTools = ({\n tools,\n}: {\n tools: OpenAI.Beta.AssistantTool[] | undefined\n}) => (\n (tools ?? []).map((tool: OpenAI.Beta.AssistantTool) => {\n if (tool.type === 'function') {\n return {\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters ?? {\n type: 'object',\n },\n }\n }\n\n return tool\n })\n)\n","import type OpenAI from 'openai'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.ChatCompletionMessageParam\n}) => {\n if (message.role === 'user') {\n return {\n role: 'user',\n content: message.content,\n }\n } else if (message.role === 'assistant') {\n return {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: message.content,\n },\n ...(message.tool_calls ?? []).map((toolCall) => ({\n type: 'tool_use',\n id: toolCall.id,\n // @ts-expect-error todo\n name: toolCall.function.name,\n // @ts-expect-error todo\n input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {},\n })),\n ],\n }\n } else if (message.role === 'tool') {\n return {\n role: 'user',\n content: [\n {\n type: 'tool_result',\n tool_use_id: message.tool_call_id,\n content: message.content,\n },\n ],\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { serializeMessage } from './serializeMessage'\n\nexport const serializeMessages = ({\n messages,\n}: {\n messages: OpenAI.ChatCompletionMessageParam[]\n}) => (\n messages.map(message => (\n serializeMessage({\n message,\n })\n ))\n)\n","import type Anthropic from '@anthropic-ai/sdk'\nimport { post } from './post'\n\nexport const completions = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n post: post({ anthropic }),\n})\n","import type Anthropic from '@anthropic-ai/sdk'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const anthropicClientAdapter = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n '^/v1/models$': models({ anthropic }),\n '^/v1/chat/completions$': completions({ anthropic }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n together,\n}: {\n together: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await together.models.list()\n\n return new Response(JSON.stringify({\n type: 'list',\n // @ts-ignore-next-line\n data: data.body,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n together,\n}: {\n together: OpenAI\n}) => ({\n get: get({ together }),\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n together,\n}: {\n together: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await together.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await together.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n together,\n}: {\n together: OpenAI\n}) => ({\n post: post({ together }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const togetherClientAdapter = ({\n together,\n}: {\n together: OpenAI\n}) => ({\n client: together,\n requestHandlers: {\n '^/v1/models$': models({ together }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ together }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-pro-preview-03-25',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n]\n\nexport const get = ({\n google,\n}: {\n google: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n google,\n}: {\n google: OpenAI\n}) => ({\n get: get({ google }),\n})\n","import type OpenAI from 'openai'\nimport { createId } from '@paralleldrive/cuid2'\nimport { nonEmptyMessages } from '@/lib/messages/nonEmptyMessages'\n\nexport const post = ({\n google,\n}: {\n google: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n const resultOptions = {\n ...body,\n messages: nonEmptyMessages({\n messages: body.messages,\n }),\n }\n\n if (body.stream) {\n const response = await google.chat.completions.create(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n let resultChunk\n\n if (chunk.choices) {\n const newChoices = chunk.choices.map((choice: any) => {\n if (choice.delta?.tool_calls) {\n return {\n ...choice,\n delta: {\n ...choice.delta,\n tool_calls: choice.delta.tool_calls.map((toolCall: any) => {\n if (toolCall.id === '') {\n return {\n ...toolCall,\n id: `call_${createId()}`,\n }\n }\n\n return toolCall\n }),\n },\n }\n } else {\n return choice\n }\n })\n\n resultChunk = {\n ...chunk,\n choices: newChoices,\n }\n } else {\n resultChunk = chunk\n }\n\n controller.enqueue(`data: ${JSON.stringify(resultChunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await google.chat.completions.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n google,\n}: {\n google: OpenAI\n}) => ({\n post: post({ google }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const googleClientAdapter = ({\n google,\n}: {\n google: OpenAI\n}) => ({\n client: google,\n requestHandlers: {\n '^/v1/models$': models({ google }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ google }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'Humiris/humiris-moai',\n]\n\nexport const get = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => ({\n get: get({ humiris }),\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const data = await humiris.chat.completions.create({\n ...body,\n stream: false,\n })\n\n const stream = new ReadableStream({\n async start(controller) {\n const chunk = {\n id: data.id,\n object: 'chat.completion.chunk',\n created: data.created,\n model: data.created,\n choices: [\n {\n index: 0,\n delta: {\n role: data.choices[0].message.role,\n content: data.choices[0].message.content,\n },\n logprobs: null,\n finish_reason: data.choices[0].finish_reason,\n }\n ]\n }\n\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await humiris.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => ({\n post: post({ humiris }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const humirisClientAdapter = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => ({\n client: humiris,\n requestHandlers: {\n '^/v1/models$': models({ humiris }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ humiris }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await ollama.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => ({\n get: get({ ollama }),\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await ollama.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await ollama.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => ({\n post: post({ ollama }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const ollamaClientAdapter = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => ({\n client: ollama,\n requestHandlers: {\n '^/v1/models$': models({ ollama }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ ollama }),\n },\n})\n","import _ from 'lodash'\nimport { uid, omit, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport 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 = () => {\n return {\n handleRun: 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 response_format: run.response_format,\n ...(isEmpty(run.tools) ? {} : { tools: run.tools }),\n } as OpenAI.ChatCompletionCreateParamsStreaming\n\n let providerResponse\n\n try {\n providerResponse = await client.chat.completions.create(opts)\n } catch(e: any) {\n console.error(e)\n\n return onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: {\n code: 'server_error',\n message: `${e?.message ?? ''} ${e?.cause?.message ?? ''}`,\n },\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 attachments: [],\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 for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? []\n const choice = choices[0]\n if (!choice) continue\n\n const delta = choice.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 }\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'\nimport { isArray, isObject } from 'radash'\n\ntype ToolCall = OpenAI.Beta.Threads.Runs.Steps.ToolCall\n\nconst validToolCallContentTypes = [\n 'image',\n 'text',\n]\n\nconst serializeToolContent = ({\n toolCall,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\n}) => {\n if (isArray(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!isObject(toolPart)) return false\n\n return validToolCallContentTypes.includes((toolPart as any).type)\n })\n\n if (isEveryToolPartValid) {\n return toolCall.function.output\n }\n\n return JSON.stringify(toolCall.function.output)\n }\n\n return toolCall.function.output ?? ''\n}\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: serializeToolContent({\n toolCall,\n }),\n}) as OpenAI.ChatCompletionToolMessageParam\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}) as OpenAI.ChatCompletionMessageParam\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 })] as OpenAI.ChatCompletionMessageParam[]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = (message.metadata?.toolCalls || []) as OpenAI.Beta.Threads.Runs.Steps.ToolCall[]\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 const stepDetails = rs.step_details as { tool_calls?: ToolCall[] }\n if (!Array.isArray(stepDetails.tool_calls)) return false\n\n return stepDetails.tool_calls.some((rsTc: ToolCall) => rsTc.type === 'function' && rsTc.id === tc.id)\n })\n\n if (!runStep) return\n\n const stepDetails = runStep.step_details as { tool_calls?: ToolCall[] }\n if (!Array.isArray(stepDetails.tool_calls)) return\n\n const toolCall = stepDetails.tool_calls.find((rsTc: ToolCall) => rsTc.type === 'function' && rsTc.id === tc.id)\n\n if (toolCall && toolCall.type === 'function') {\n result.push(serializeToolCall({ toolCall }))\n }\n })\n\n return result\n}\n","export const messagesRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/messages$'\n","export const runsRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs$'\n","export const runRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)$'\n","export const submitToolOutputsRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/submit_tool_outputs$'\n","export const stepsRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/steps$'\n","import type OpenAI from 'openai'\nimport type { Prisma, PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { serializeThread } from './serializeThread'\n\ntype ThreadCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Thread>\n}\n\nexport const post = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (_urlString: string, options: RequestInit & { body?: string }): Promise<ThreadCreateResponse> => {\n if (!options.body) {\n throw new Error('No body provided')\n }\n\n const body = JSON.parse(options.body)\n\n const messages = (body.messages || []) as OpenAI.Beta.ThreadCreateParams.Message[]\n const metadataRecord = (body.metadata || {}) as Record<string, unknown>\n const assistantId = typeof metadataRecord.assistantId === 'string'\n ? metadataRecord.assistantId\n : undefined\n\n if (!assistantId) {\n throw new Error('assistantId is required to create a thread')\n }\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds')\n\n const messageData = messages.map((message, index) => ({\n role: message.role === 'user' ? 'USER' : 'ASSISTANT',\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ] as Prisma.InputJsonValue,\n attachments: (message.attachments ?? []) as Prisma.InputJsonValue[],\n metadata: message.metadata as Prisma.InputJsonValue | undefined,\n createdAt: initialCreatedAt.add(index, 'seconds').toDate(),\n })) satisfies Prisma.MessageCreateWithoutThreadInput[]\n\n const threadData = {\n metadata: metadataRecord as Prisma.InputJsonValue,\n assistant: {\n connect: {\n id: assistantId,\n },\n },\n messages: {\n create: messageData,\n },\n } satisfies Prisma.ThreadCreateInput\n\n const thread = await prisma.thread.create({\n data: threadData,\n })\n\n return new Response(JSON.stringify(\n serializeThread({ thread }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","// @ts-ignore-next-line\nimport 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 // TODO\n tool_resources: null,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const threads = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): { post: RequestHandler } => ({\n post: post({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport { isArray } from 'radash'\nimport type { Prisma, PrismaClient } from '@prisma/client'\nimport { serializeMessage } from './serializeMessage'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Messages.Message>\n}\n\nconst messageContentBlocks = ({\n content,\n}: {\n content: string | OpenAI.Beta.Threads.Messages.MessageContentPartParam[]\n}) => {\n if (isArray(content)) {\n return content.map((item) => {\n if (item.type === 'text') {\n return {\n type: 'text',\n text: {\n value: item.text ?? '',\n annotations: [],\n },\n }\n }\n\n return item\n })\n }\n\n return [\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\n },\n },\n ]\n}\n\nexport const post = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n if (!options.body) {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const { role, content, metadata } = body\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }) as Prisma.InputJsonValue,\n role: (role === 'user' ? 'USER' : 'ASSISTANT') as Prisma.MessageCreateWithoutThreadInput['role'],\n metadata: (metadata ?? {}) as Prisma.InputJsonValue,\n },\n })\n\n return new Response(JSON.stringify(\n serializeMessage({ message }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","// @ts-ignore-next-line\nimport 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 attachments: message.attachments as OpenAI.Beta.Threads.Messages.Message['attachments'],\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'\n// @ts-ignore-next-line\nimport type { PrismaClient, Message } from '@prisma/client'\nimport { assign, last } from 'radash'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeMessage } from './serializeMessage'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const pageSize = parseInt(limit)\n\n const messagesPlusOne = await prisma.message.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === 'asc' ? 'asc' : 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as Message[]\n\n const messages = messagesPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: messages.map((message: Message) => (\n serializeMessage({ message })\n )),\n has_more: messagesPlusOne.length > pageSize,\n last_id: last(messages)?.id ?? null,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\nimport { get } from './get'\nimport type { RequestHandler } from '@/types'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): { post: RequestHandler; get: RequestHandler } => ({\n post: post({ prisma }),\n get: get({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient, Run as PrismaRun } from '@prisma/client'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun } from './serializeRun'\nimport { mapPrismaRun } from './mapPrismaRun'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const pageSize = parseInt(limit, 10)\n\n const runsPlusOne = await prisma.run.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === 'asc' ? 'asc' : 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as PrismaRun[]\n\n const runs = runsPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: runs.map((run) => serializeRun({ run: mapPrismaRun(run) })),\n has_more: runsPlusOne.length > pageSize,\n last_id: runs.at(-1)?.id ?? null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type OpenAI from 'openai'\nimport type { Run } from '@/types/prisma'\nimport dayjs from 'dayjs'\n\nexport const serializeRun = ({\n run,\n}: {\n run: Run\n}): OpenAI.Beta.Threads.Run => ({\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 tools: run.tools as unknown as OpenAI.Beta.Threads.Run['tools'],\n metadata: run.metadata as unknown as OpenAI.Beta.Threads.Run['metadata'],\n usage: run.usage as OpenAI.Beta.Threads.Run['usage'],\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: 'auto',\n parallel_tool_calls: true,\n})\n","import type { Prisma, Run as PrismaRun, RunStep as PrismaRunStep } from '@prisma/client'\nimport {\n RunStatus,\n RunStepStatus,\n RunStepType,\n type Run,\n type RunStep,\n} from '@/types/prisma'\n\nexport const mapPrismaRun = (run: PrismaRun): Run => ({\n id: run.id,\n threadId: run.threadId,\n assistantId: run.assistantId,\n status: run.status as RunStatus,\n requiredAction: run.requiredAction as Prisma.JsonValue | null,\n lastError: run.lastError as Prisma.JsonValue | null,\n expiresAt: run.expiresAt,\n startedAt: run.startedAt ?? null,\n cancelledAt: run.cancelledAt ?? null,\n failedAt: run.failedAt ?? null,\n completedAt: run.completedAt ?? null,\n model: run.model,\n instructions: run.instructions,\n tools: run.tools as Prisma.JsonValue[],\n metadata: run.metadata as Prisma.JsonValue | null,\n usage: run.usage as Prisma.JsonValue | null,\n truncationStrategy: run.truncationStrategy as Prisma.JsonValue,\n responseFormat: run.responseFormat as Prisma.JsonValue,\n createdAt: run.createdAt,\n updatedAt: run.updatedAt,\n})\n\nexport const mapPrismaRunStep = (runStep: PrismaRunStep): RunStep => ({\n id: runStep.id,\n threadId: runStep.threadId,\n assistantId: runStep.assistantId,\n runId: runStep.runId,\n type: runStep.type as RunStepType,\n status: runStep.status as RunStepStatus,\n stepDetails: runStep.stepDetails as Prisma.JsonValue,\n lastError: runStep.lastError as Prisma.JsonValue | null,\n expiredAt: runStep.expiredAt ?? null,\n cancelledAt: runStep.cancelledAt ?? null,\n failedAt: runStep.failedAt ?? null,\n completedAt: runStep.completedAt ?? null,\n metadata: runStep.metadata as Prisma.JsonValue | null,\n usage: runStep.usage as Prisma.JsonValue | null,\n createdAt: runStep.createdAt,\n updatedAt: runStep.updatedAt,\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun } from './serializeRun'\nimport { RunAdapterPartobClient } from '@/types'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\nimport type { Run } from '@/types/prisma'\n\ntype RunCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Run>\n}\n\nexport const post = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<RunCreateResponse> => {\n const url = new URL(urlString)\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!\n\n if (!options.body) {\n throw new Error('No body provided')\n }\n\n const body = JSON.parse(options.body)\n const { assistant_id, stream } = body\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 response_format,\n truncation_strategy,\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n // tools: [],\n // metadata: {},\n }, body)\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format,\n },\n }) as Run\n\n const data = serializeRun({ run })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n run: data,\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n }),\n getMessages: getMessages({\n prisma,\n run,\n }),\n })\n } catch (error: any) {\n console.error(error)\n\n onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n })({\n event: 'thread.run.failed',\n data: {\n id: run.id,\n failed_at: dayjs().unix(),\n last_error: {\n code: 'server_error',\n message: `${error?.message ?? ''} ${error?.cause?.message ?? ''}`,\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed)\n }\n\n controller.close()\n },\n })\n\n if (stream) {\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\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 { Prisma, 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 as Prisma.RunUpdateInput['status'],\n failedAt: event.data.failed_at,\n ...(event.data.last_error != null\n ? { lastError: event.data.last_error as unknown as Prisma.InputJsonValue }\n : {}),\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 { RunStatus } from '@/types/prisma'\nimport type { Prisma, PrismaClient } from '@prisma/client'\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 as Prisma.RunUpdateInput['status'],\n ...(event.data.required_action != null\n ? { requiredAction: event.data.required_action as unknown as Prisma.InputJsonValue }\n : {}),\n },\n })\n}\n","import dayjs from 'dayjs'\n// @ts-ignore-next-line\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 { RunStepStatus, RunStepType } from '@/types/prisma'\nimport type { Prisma, 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}): Promise<OpenAI.Beta.Threads.Runs.RunStep> => {\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) as Prisma.RunStepCreateInput['type'],\n status: status(event) as Prisma.RunStepCreateInput['status'],\n stepDetails: event.data.step_details as unknown as Prisma.InputJsonValue,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated)\n\n return serializedRunStep as OpenAI.Beta.Threads.Runs.RunStep\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 { MessageRole, MessageStatus } from '@/types/prisma'\nimport type { Prisma, 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 Prisma.InputJsonValue,\n role: (event.data.role === 'assistant'\n ? MessageRole.ASSISTANT\n : MessageRole.USER) as Prisma.MessageCreateWithoutThreadInput['role'],\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event) as Prisma.MessageCreateWithoutThreadInput['status'],\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 { Prisma, 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 const toolCalls = (event.data as { tool_calls?: unknown }).tool_calls\n\n if (toolCalls !== undefined) {\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: toolCalls,\n } as Prisma.InputJsonValue,\n },\n })\n }\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED as Prisma.MessageUpdateInput['status'],\n ...(event.data.content\n ? { content: event.data.content as unknown as Prisma.InputJsonValue }\n : {}),\n ...(toolCalls !== undefined\n ? { toolCalls: toolCalls as Prisma.InputJsonValue }\n : {}),\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, Run as PrismaRun } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run } from '@/types/prisma'\nimport type { MessageWithRun } from '@/types'\nimport { mapPrismaRun } from './mapPrismaRun'\n\nconst getTake = ({\n run,\n}: {\n run: Run\n}) => {\n // @ts-ignore-next-line\n if (['auto', 'disabled'].includes(run.truncationStrategy.type)) {\n return null\n }\n\n // @ts-ignore-next-line\n if (run.truncationStrategy.type === 'last_messages') {\n // @ts-ignore-next-line\n if (!run.truncationStrategy.last_messages) {\n throw new Error('Truncation strategy last_messages is required')\n }\n\n // @ts-ignore-next-line\n return -run.truncationStrategy.last_messages\n }\n\n // @ts-ignore-next-line\n throw new Error(`Unsupported truncation strategy type: ${run.truncationStrategy.type}`)\n}\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: Run\n}) => async () => {\n const take = getTake({\n run,\n })\n\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 orderBy: {\n createdAt: 'asc',\n },\n ...(take ? { take } : {}),\n })\n\n return messages.map((message) => ({\n ...serializeMessage({ message }),\n run: message.run\n ? {\n ...serializeRun({ run: mapPrismaRun(message.run as PrismaRun) }),\n runSteps: message.run.runSteps.map((runStep) => (\n serializeRunStep({ runStep })\n )),\n }\n : null,\n })) as MessageWithRun[]\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RequestHandler, RunAdapterPartobClient } from '@/types'\nimport { get } from './get'\nimport { post } from './post'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}): { get: RequestHandler; post: RequestHandler } => ({\n get: get({ prisma }),\n post: post({ prisma, runAdapter }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { serializeRun } from '../runs/serializeRun'\nimport { mapPrismaRun } from '../runs/mapPrismaRun'\n\ntype GetResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Runs['retrieve']>>\n}\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string): Promise<GetResponse> => {\n const url = new URL(urlString)\n\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp))!\n\n const run = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId,\n },\n })\n\n if (!run) {\n return new Response(JSON.stringify({ error: 'Not Found' }), {\n status: 404,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n\n return new Response(JSON.stringify(\n serializeRun({ run: mapPrismaRun(run) })\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'openai-poll-after-ms': '5000',\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RequestHandler, RunAdapterPartobClient } from '@/types'\nimport { get } from './get'\n// import { post } from './post'\n\nexport const run = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}): { get: RequestHandler } => ({\n get: get({ prisma }),\n // post: post({ prisma, runAdapter }),\n})\n","import type { PrismaClient, RunStep } from '@prisma/client'\nimport { assign } from 'radash'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { serializeRunStep } from './serializeRunStep'\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string) => {\n const url = new URL(urlString)\n\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const pageSize = parseInt(limit, 10)\n\n const runStepsPlusOne = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order as 'asc' | 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as RunStep[]\n\n const runSteps = runStepsPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: runSteps.map((runStep: RunStep) => serializeRunStep({ runStep })),\n has_more: runStepsPlusOne.length > pageSize,\n last_id: runSteps.at(-1)?.id ?? null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { get } from './get'\nimport type { RequestHandler } from '@/types'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): { get: RequestHandler } => ({\n get: get({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type { Run } from '@/types/prisma'\n\nexport const updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {},\n tool_outputs,\n}: {\n prisma: PrismaClient\n runId: string\n threadId: string\n onThreadRunStepCompleted?: ({ runStep }: { runStep: any }) => void\n tool_outputs: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs']\n}) => (\n // @ts-expect-error prisma transaction typing is broken\n 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 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 // @ts-ignore-next-line\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n // @ts-ignore-next-line\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 onThreadRunStepCompleted({\n runStep: completedRunStep,\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n }) as Promise<Run>\n)\n","import type { PrismaClient } from '@prisma/client'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { RunAdapterPartobClient } from '@/types'\nimport { serializeRun } from '../../serializeRun'\nimport { onEvent } from '../../onEvent'\nimport { getMessages } from '../../getMessages'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\nimport { updateRun } from './updateRun'\n\nexport const post = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => async (urlString: string, options: any) => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp))!\n\n const body = JSON.parse(options.body)\n\n const {\n tool_outputs,\n stream,\n } = body\n\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n const run = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs,\n onThreadRunStepCompleted: async ({ runStep }) => {\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeRunStep({ runStep }),\n })}\\n\\n`)\n }\n })\n\n await runAdapter.handleRun({\n run: serializeRun({ run }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n }),\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n },\n })\n\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n const run = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs,\n })\n\n await new Promise((resolve) => (\n new ReadableStream({\n async start(controller) {\n await runAdapter.handleRun({\n run: serializeRun({ run }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n }),\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n resolve(void 0)\n },\n })\n ))\n\n return new Response(JSON.stringify(\n run\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RequestHandler, RunAdapterPartobClient } from '@/types'\nimport { post } from './post'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}): { post: RequestHandler } => ({\n post: post({\n prisma,\n // @ts-ignore-next-line\n runAdapter,\n }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const post = ({ prisma }: { prisma: PrismaClient }) =>\n async (_url: string, options: RequestInit & { body?: string }) => {\n if (!options.body) {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const { model, instructions } = body\n\n const assistant = await prisma.assistant.create({\n data: { modelSlug: model, instructions },\n })\n\n const data = {\n id: assistant.id,\n object: 'assistant',\n created_at: dayjs().unix(),\n name: null,\n description: null,\n model,\n instructions,\n tools: [],\n metadata: {},\n }\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const assistants = ({ prisma }: { prisma: PrismaClient }): { post: RequestHandler } => ({\n post: post({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } from '@/types'\nimport type { RequestHandler } from '@/types'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { threads } from './threads'\nimport { messages } from './threads/messages'\nimport { runs } from './threads/runs'\nimport { run } from './threads/run'\nimport { steps } from './threads/runs/steps'\nimport { submitToolOutputs } from './threads/runs/submitToolOutputs'\nimport { assistants } from './assistants'\n\ntype MethodHandlers = { get?: RequestHandler; post?: RequestHandler }\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): ((args: StorageAdapterArgs) => { requestHandlers: Record<string, MethodHandlers> }) =>\n({ runAdapter }: StorageAdapterArgs) => ({\n requestHandlers: {\n '^/(?:v1/|openai/)?assistants$': assistants({ prisma }),\n '^/(?:v1|/?openai)/threads$': threads({ prisma }),\n [messagesRegexp]: messages({ prisma }),\n [runsRegexp]: runs({ prisma, runAdapter }),\n [runRegexp]: run({ prisma, runAdapter }),\n [stepsRegexp]: steps({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs({ prisma, runAdapter }),\n },\n})\n","import type { OpenAI } from 'openai'\n\nexport const serializeThread = ({\n conversation,\n}: {\n conversation: OpenAI.Conversations.Conversation\n}) => ({\n id: conversation.id,\n object: 'thread' as 'thread',\n created_at: conversation.created_at,\n metadata: conversation.metadata,\n // TODO\n tool_resources: null,\n})\n","import type OpenAI from 'openai'\nimport { serializeThread } from './serializeThread'\n\ntype ThreadCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Thread>\n}\n\nexport const post = ({\n client,\n}: {\n client: OpenAI\n}) => async (_urlString: string, options: RequestInit & { body?: string }): Promise<ThreadCreateResponse> => {\n if (typeof options.body !== 'string') {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n\n const messages = body.messages || []\n const metadata = body.metadata || {}\n\n const conversation = await client.conversations.create({\n metadata,\n items: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message) => ({\n type: \"message\",\n role: message.role === 'user' ? 'user' : 'assistant',\n content: [\n {\n type: message.role === 'user' ? 'input_text' : 'output_text',\n text: message.content,\n },\n ],\n })),\n });\n\n return new Response(JSON.stringify(\n serializeThread({ conversation }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import type { OpenAI } from 'openai'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const threads = ({\n client,\n}: {\n client: OpenAI\n}): { post: RequestHandler } => ({\n post: post({ client }),\n})\n","import type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { isArray } from 'radash'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Messages.Message>\n}\n\nconst contentBlocksFromContent = ({\n content,\n}: {\n content: string | OpenAI.Beta.Threads.Messages.MessageContentPartParam[]\n}) => {\n if (isArray(content)) {\n return content.map((item) => {\n if (item.type === 'text') {\n return {\n type: 'input_text' as 'input_text',\n text: item.text,\n }\n }\n\n if (item.type === 'image_file') {\n return {\n type: 'input_image' as 'input_image',\n file_id: item.image_file.file_id,\n detail: item.image_file.detail ?? 'auto',\n }\n }\n\n if (item.type === 'image_url') {\n return {\n type: 'input_image' as 'input_image',\n image_url: item.image_url.url,\n detail: item.image_url.detail ?? 'auto',\n }\n }\n\n return {\n type: 'input_text' as 'input_text',\n text: '',\n }\n })\n }\n\n return [\n {\n type: 'input_text' as 'input_text',\n text: content ?? '',\n },\n ]\n}\n\nconst contentBlocksFromAttachments = ({\n attachments,\n}: {\n attachments: OpenAI.Beta.Threads.Messages.MessageCreateParams.Attachment[]\n}) => (\n attachments.map((attachment) => ({\n type: 'input_file' as const,\n file_id: attachment.file_id,\n }))\n)\n\nconst messageContentBlocks = ({\n content,\n attachments,\n}: {\n content: string | OpenAI.Beta.Threads.Messages.MessageContentPartParam[]\n attachments: OpenAI.Beta.Threads.Messages.MessageCreateParams.Attachment[]\n}) => ([\n ...contentBlocksFromContent({ content }),\n ...contentBlocksFromAttachments({ attachments }),\n])\nexport const post = ({\n runAdapter,\n createResponseItems,\n}: {\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n if (typeof options.body !== 'string') {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const { role, content, attachments = [] } = body\n\n const item: OpenAI.Responses.ResponseInputItem.Message = {\n type: \"message\" as const,\n role,\n content: messageContentBlocks({\n content,\n attachments,\n }),\n }\n\n createResponseItems.push(item)\n\n // const items = await openai.conversations.items.create(\n // threadId,\n // {\n // items: [\n // ],\n // }\n // );\n //\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } })\n\n return new Response(JSON.stringify(\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: dayjs().unix(),\n }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype ItemType = OpenAI.Conversations.ConversationItem | OpenAI.Responses.ResponseItem | OpenAI.Responses.ResponseInputItem.Message\n\nconst serializeContent = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.MessageContent[] => {\n if (item.type === 'message') {\n return item.content.map((contentBlock) => {\n if (contentBlock.type === 'input_text') {\n return {\n type: 'text' as const,\n text: {\n value: contentBlock.text,\n annotations: [],\n },\n }\n } else if (contentBlock.type === 'output_text') {\n return {\n type: 'text' as const,\n text: {\n value: contentBlock.text,\n annotations: [],\n },\n }\n } else if (contentBlock.type === 'input_image') {\n return {\n type: 'image_file' as const,\n image_file: {\n file_id: contentBlock.file_id,\n detail: 'auto',\n },\n }\n }\n\n return null\n }).filter(Boolean) as OpenAI.Beta.Threads.Messages.TextContentBlock[]\n } else if (item.type === 'image_generation_call') {\n if (!item.result) return []\n\n return [{\n type: 'image_url' as const,\n image_url: {\n // @ts-expect-error bad openai types\n url: `data:image/${item.output_format};base64,${item.result}`,\n detail: 'auto' as const,\n },\n }]\n } else {\n return []\n }\n}\n\nconst serializeAttachments = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.Message['attachments'] => {\n if (item.type !== 'message') return []\n\n const inputFiles = item.content.filter((contentBlock) => (\n contentBlock.type === 'input_file' && contentBlock.file_id\n )) as OpenAI.Responses.ResponseInputFile[]\n\n return inputFiles.map((inputFile: OpenAI.Responses.ResponseInputFile) => ({\n file_id: inputFile.file_id!,\n }))\n}\n\nconst serializeMetadata = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.Message['metadata'] => {\n if (item.type === 'image_generation_call') {\n return {\n item: JSON.stringify({\n ...item,\n result: 'truncated',\n }),\n }\n }\n\n return {\n item: JSON.stringify(item),\n }\n}\n // assign(message.metadata as Record<any, any> ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {}),\n\nexport const serializeItemAsMessage = ({\n item,\n threadId,\n openaiAssistant,\n createdAt,\n runId = null,\n status = 'completed',\n}: {\n item: ItemType\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n createdAt: number\n runId?: string | null\n status?: 'completed' | 'in_progress'\n}): OpenAI.Beta.Threads.Message => ({\n id: (item as any).id || uid(24),\n object: 'thread.message' as const,\n created_at: createdAt,\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: typeof (item as any).role === 'string' ? (item as any).role : 'assistant',\n content: serializeContent({ item }),\n assistant_id: (item as any).role === 'assistant' ? openaiAssistant.id : null,\n run_id: runId,\n attachments: serializeAttachments({ item }),\n status: typeof (item as any).status === 'string' ? (item as any).status : status,\n metadata: serializeMetadata({ item }),\n})\n","import type OpenAI from 'openai'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { assign } from 'radash'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\nimport { responseId } from '@/lib/items/responseId'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const conversation = await client.conversations.retrieve(threadId)\n const sortOrder = order === 'asc' ? 'asc' : 'desc'\n\n const items = await client.conversations.items.list(threadId, {\n limit: parseInt(limit, 10),\n after,\n order: sortOrder,\n })\n\n const itemsWithRunIds = mapItemsWithRunIds({ conversation, items: items.data })\n const responseMap = await fetchResponsesForItems({\n client,\n items: itemsWithRunIds,\n })\n\n const timestampedItems = assignTimestamps({\n items: itemsWithRunIds,\n responseMap,\n sortOrder,\n conversationCreatedAt: conversation.created_at,\n })\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } })\n\n return new Response(JSON.stringify({\n data: timestampedItems.map(({ item, runId, assignedTimestamp }) => (\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: assignedTimestamp,\n runId,\n })\n )),\n has_more: items.has_more,\n last_id: items.last_id,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n\ntype ItemWithRunId = {\n item: OpenAI.Conversations.ConversationItem\n runId: string | null\n}\n\ntype ItemWithAssignedTimestamp = ItemWithRunId & {\n timestamp: number | null\n assignedTimestamp: number\n}\n\nconst mapItemsWithRunIds = ({\n conversation,\n items,\n}: {\n conversation: OpenAI.Conversations.Conversation\n items: OpenAI.Conversations.ConversationItem[]\n}): ItemWithRunId[] => (\n items.map((item) => ({\n item,\n runId: item.id ? responseId({\n conversation,\n itemId: item.id,\n }) : null,\n }))\n)\n\nconst fetchResponsesForItems = async ({\n client,\n items,\n}: {\n client: OpenAI\n items: ItemWithRunId[]\n}): Promise<Map<string, OpenAI.Responses.Response>> => {\n const responseIds = Array.from(new Set(\n items\n .map(({ runId }) => runId)\n .filter((id): id is string => Boolean(id)),\n ))\n\n const results = await Promise.allSettled(\n responseIds.map((id) => client.responses.retrieve(id)),\n )\n\n const map = new Map<string, OpenAI.Responses.Response>()\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n map.set(responseIds[index], result.value)\n }\n })\n\n return map\n}\n\n// Ensure timestamps follow the requested order even when some items lack response metadata.\nconst assignTimestamps = ({\n items,\n responseMap,\n sortOrder,\n conversationCreatedAt,\n}: {\n items: ItemWithRunId[]\n responseMap: Map<string, OpenAI.Responses.Response>\n sortOrder: 'asc' | 'desc'\n conversationCreatedAt: number\n}): ItemWithAssignedTimestamp[] => {\n const itemsWithTimestamps = items.map((entry) => ({\n ...entry,\n timestamp: entry.runId ? responseMap.get(entry.runId)?.created_at ?? null : null,\n assignedTimestamp: 0,\n }))\n\n const fallbackTimestampForIndex = (index: number): number => (\n sortOrder === 'asc'\n ? conversationCreatedAt + index\n : conversationCreatedAt + (itemsWithTimestamps.length - index)\n )\n\n const findNextKnownTimestamp = (startIndex: number) => {\n for (let i = startIndex; i < itemsWithTimestamps.length; i += 1) {\n const candidate = itemsWithTimestamps[i]\n if (candidate.timestamp != null) {\n return { index: i, timestamp: candidate.timestamp }\n }\n }\n\n return null\n }\n\n if (sortOrder === 'asc') {\n let lastAssigned: number | null = null\n\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp\n\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned + 1\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1)\n if (nextKnown) {\n const gap = nextKnown.index - index\n nextValue = nextKnown.timestamp - gap\n } else {\n nextValue = fallbackTimestampForIndex(index)\n }\n }\n }\n\n if (lastAssigned != null && nextValue <= lastAssigned) {\n nextValue = lastAssigned + 1\n }\n\n entry.assignedTimestamp = nextValue\n lastAssigned = nextValue\n })\n } else {\n let lastAssigned: number | null = null\n\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp\n\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned - 1\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1)\n if (nextKnown) {\n const gap = nextKnown.index - index\n nextValue = nextKnown.timestamp + gap\n } else {\n nextValue = fallbackTimestampForIndex(index)\n }\n }\n }\n\n if (lastAssigned != null && nextValue >= lastAssigned) {\n nextValue = lastAssigned - 1\n }\n\n entry.assignedTimestamp = nextValue\n lastAssigned = nextValue\n })\n }\n\n return itemsWithTimestamps\n}\n","import type { OpenAI } from 'openai';\n\ntype ItemResponseEntry = { responseId: string; itemIds: string[] };\n\nexport function responseId({\n conversation,\n itemId,\n}: {\n conversation: OpenAI.Conversations.Conversation;\n itemId: string;\n}): string | null {\n if (!conversation.metadata) return null\n\n const metadata = conversation.metadata as Record<string, any>;\n\n const keys = Object.keys(metadata)\n .map(k => {\n const m = /^responseItemsMap(\\d+)$/.exec(k);\n return m ? { key: k, idx: Number(m[1]) } : null;\n })\n .filter((x): x is { key: string; idx: number } => !!x)\n .sort((a, b) => a.idx - b.idx);\n\n // scan newest → oldest (reverse order), and inside a bucket scan last entry → first\n for (let i = keys.length - 1; i >= 0; i--) {\n const raw = metadata[keys[i].key];\n if (!raw || raw === '[]') continue;\n\n let arr: ItemResponseEntry[] = [];\n try {\n arr = JSON.parse(raw) as ItemResponseEntry[];\n if (!Array.isArray(arr)) continue;\n } catch {\n continue; // skip bad/partial JSON\n }\n\n for (let j = arr.length - 1; j >= 0; j--) {\n const entry = arr[j];\n if (entry?.itemIds?.includes(itemId)) {\n return entry.responseId || null;\n }\n }\n }\n\n return null;\n}\n","import type { OpenAI } from 'openai'\nimport { post } from './post'\nimport { get } from './get'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const messages = ({\n client,\n runAdapter,\n createResponseItems,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}): { post: RequestHandler; get: RequestHandler } => ({\n post: post({ runAdapter, createResponseItems }),\n get: get({ client, runAdapter }),\n})\n","import type OpenAI from 'openai'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = () => async (urlString: string): Promise<MessageCreateResponse> => {\n return new Response(JSON.stringify({\n data: [],\n has_more: false,\n last_id: null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type OpenAI from 'openai'\nimport { uid } from 'radash'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\nimport { RunAdapterWithAssistant } from '@/types'\nimport { saveResponseItemsToConversationMetadata } from '@/lib/responses/saveResponseItemsToConversationMetadata'\n\ntype RunCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Run>\n}\n\nconst serializeTools = ({\n tools,\n}: {\n tools: OpenAI.Beta.Threads.Runs.RunCreateParams['tools']\n}) => {\n if (!tools?.length) return {}\n\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...(tool[tool.type] || {}),\n }))\n }\n}\n\nconst truncation = ({\n truncation_strategy,\n}: {\n truncation_strategy: OpenAI.Beta.Threads.Runs.RunCreateParams['truncation_strategy']\n}) => {\n // @ts-expect-error compat\n if (truncation_strategy.type === 'disabled') {\n return 'disabled'\n }\n\n return 'auto'\n}\n\nconst defaultAssistant = {\n model: '',\n instructions: '',\n additional_instructions: null,\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n // tools: [],\n // metadata: {},\n}\n\nexport const post = ({\n client,\n runAdapter,\n createResponseItems,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<RunCreateResponse> => {\n const url = new URL(urlString)\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!\n\n if (typeof options.body !== 'string') {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const {\n assistant_id,\n stream,\n } = body\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy,\n } = assign({\n ...defaultAssistant,\n ...(await runAdapter.getOpenaiAssistant()),\n }, body)\n\n const response = await client.responses.create({\n conversation: threadId,\n instructions,\n model,\n metadata,\n stream,\n ...serializeTools({ tools }),\n truncation: truncation({ truncation_strategy }),\n text: {\n format: response_format,\n },\n input: createResponseItems,\n })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => (\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n ),\n })\n } catch (error: any) {\n console.error(error)\n\n const event = {\n event: 'thread.run.failed',\n data: {\n id: uid(24),\n failed_at: dayjs().unix(),\n last_error: {\n code: 'server_error',\n message: `${error?.message ?? ''} ${error?.cause?.message ?? ''}`,\n },\n },\n }\n\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n if (stream) {\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n const itemIds = (response.output ?? [])\n .filter((o) => o.id)\n .map((o) => o.id!)\n\n if (itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: response.id,\n itemIds,\n })\n }\n\n const data = serializeResponseAsRun({\n response,\n assistantId: assistant_id,\n })\n\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\n// @ts-ignore-next-line\nimport type { Run } from '@prisma/client'\n\nconst serializeStatus = ({\n response,\n}: {\n response: OpenAI.Responses.Response\n}): OpenAI.Beta.Threads.Run['status'] => {\n if (response.error) return 'failed'\n\n return (response.status?.toLowerCase() as 'completed' | 'failed' | 'in_progress' | 'requires_action' | undefined) ?? 'completed'\n}\n\nconst serializeUsage = ({\n response,\n}: {\n response: OpenAI.Responses.Response\n}) => ({\n prompt_tokens: response.usage?.input_tokens ?? 0,\n completion_tokens: response.usage?.output_tokens ?? 0,\n total_tokens: response.usage?.total_tokens ?? 0,\n})\n\nconst findPendingToolCalls = ({\n response,\n}: {\n response: OpenAI.Responses.Response\n}): OpenAI.Responses.ResponseFunctionToolCall[] => {\n const toolCalls = (response.output ?? []).filter(\n (item): item is OpenAI.Responses.ResponseFunctionToolCall => item.type === 'function_call',\n )\n\n if (toolCalls.length === 0) return []\n\n const completedCallIds = new Set(\n (response.output ?? [])\n .filter(\n (item) =>\n // @ts-expect-error missing openai type\n item.type === 'function_call_output',\n )\n .map((item) => (\n // @ts-expect-error missing openai type\n item.call_id\n ))\n .filter((id): id is string => Boolean(id)),\n )\n\n return toolCalls.filter((call) => !completedCallIds.has(call.call_id))\n}\n\nconst serializeToolCalls = ({\n toolCalls,\n}: {\n toolCalls: OpenAI.Responses.ResponseFunctionToolCall[]\n}) =>\n toolCalls.map((toolCall) => ({\n id: toolCall.call_id,\n type: 'function' as const,\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments,\n },\n }))\n\nexport const serializeResponseAsRun = ({\n response,\n assistantId,\n}: {\n response: OpenAI.Responses.Response\n assistantId: string\n}): OpenAI.Beta.Threads.Run => {\n const pendingToolCalls = findPendingToolCalls({ response })\n const status = pendingToolCalls.length > 0 ? 'requires_action' : serializeStatus({ response })\n\n return {\n id: response.id,\n object: 'thread.run' as 'thread.run',\n created_at: response.created_at,\n thread_id: response.conversation!.id,\n assistant_id: assistantId,\n status,\n required_action:\n pendingToolCalls.length > 0\n ? {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: serializeToolCalls({ toolCalls: pendingToolCalls }),\n },\n }\n : null,\n last_error: response.error as OpenAI.Beta.Threads.Run['last_error'],\n expires_at: response.created_at,\n started_at: response.created_at,\n cancelled_at: null,\n failed_at: response.error ? response.created_at : null,\n completed_at: status === 'completed' ? response.created_at : null,\n model: response.model,\n instructions: '',\n tools: [] as OpenAI.Beta.Threads.Run['tools'],\n metadata: response.metadata,\n usage: serializeUsage({ response }),\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: 'auto',\n parallel_tool_calls: true,\n }\n}\n","import type OpenAI from 'openai'\n\n/* ======================= responseItemsMap helpers ======================= */\n\ntype ItemResponseEntry = { responseId: string; itemIds: string[] }\ntype ConversationMetadata = Record<string, string>\n\nconst BUCKET_PREFIX = 'responseItemsMap' // keys: responseItemsMap0..15\nconst MAX_BUCKETS = 16 // OpenAI metadata key limit\nconst MAX_VALUE_LENGTH = 512 // OpenAI metadata value limit\n\nfunction parseBucket({ value }: { value?: string }): ItemResponseEntry[] {\n if (!value || value === '[]') return []\n try {\n const arr = JSON.parse(value)\n return Array.isArray(arr) ? (arr as ItemResponseEntry[]) : []\n } catch {\n return []\n }\n}\n\nfunction serializeBucket({ entries }: { entries: ItemResponseEntry[] }): string {\n return JSON.stringify(entries)\n}\n\nfunction bucketKey({ index }: { index: number }): string {\n return `${BUCKET_PREFIX}${index}`\n}\n\nfunction listBucketIndices({ metadata }: { metadata: ConversationMetadata }): number[] {\n return Object.keys(metadata)\n .map((k) => {\n const m = new RegExp(`^${BUCKET_PREFIX}(\\\\d+)$`).exec(k)\n return m ? Number(m[1]) : -1\n })\n .filter((i) => i >= 0)\n .sort((a, b) => a - b)\n}\n\n// Flatten to FIFO (oldest → newest) list of pairs\ntype Pair = { responseId: string; itemId: string }\n\nfunction parseAllPairs({ metadata }: { metadata: ConversationMetadata }): Pair[] {\n const indices = listBucketIndices({ metadata })\n const pairs: Pair[] = []\n for (const idx of indices) {\n const key = bucketKey({ index: idx })\n const entries = parseBucket({ value: metadata[key] })\n for (const e of entries) {\n for (const iid of e.itemIds) {\n pairs.push({ responseId: e.responseId, itemId: iid })\n }\n }\n }\n return pairs\n}\n\nfunction serializeNonBucketEntries({ entries }: { entries: Array<[string, string]> }): ConversationMetadata {\n const result: ConversationMetadata = {}\n for (const [key, value] of entries) {\n result[key] = value\n }\n return result\n}\n\nfunction packIntoBuckets({ pairs, slots }: { pairs: Pair[]; slots: number }): string[] | undefined {\n const buckets: string[] = []\n let currentEntries: ItemResponseEntry[] = []\n\n const flush = () => {\n if (currentEntries.length === 0) return true\n const serialized = serializeBucket({ entries: currentEntries })\n if (serialized.length > MAX_VALUE_LENGTH) return false\n if (buckets.length >= slots) return false\n buckets.push(serialized)\n currentEntries = []\n return true\n }\n\n for (const { responseId, itemId } of pairs) {\n const candidateEntries = currentEntries.map((entry) => ({\n responseId: entry.responseId,\n itemIds: [...entry.itemIds],\n }))\n const last = candidateEntries.at(-1)\n if (last && last.responseId === responseId) {\n last.itemIds.push(itemId)\n } else {\n candidateEntries.push({ responseId, itemIds: [itemId] })\n }\n\n const serialized = serializeBucket({ entries: candidateEntries })\n if (serialized.length <= MAX_VALUE_LENGTH) {\n currentEntries = candidateEntries\n continue\n }\n\n if (!flush()) return undefined\n\n currentEntries = [{ responseId, itemIds: [itemId] }]\n if (serializeBucket({ entries: currentEntries }).length > MAX_VALUE_LENGTH) {\n return undefined\n }\n }\n\n if (!flush()) return undefined\n\n return buckets\n}\n\nfunction metadataEquals(a: ConversationMetadata, b: ConversationMetadata): boolean {\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (a[key] !== b[key]) return false\n }\n return true\n}\n\nexport function appendItemIdsToConversationMetadata({\n metadata,\n responseId,\n itemIds,\n}: {\n metadata?: ConversationMetadata\n responseId: string\n itemIds: string[]\n}): { metadata: ConversationMetadata; changed: boolean } {\n const base = { ...(metadata || {}) }\n const nonBucketEntries = Object.entries(base).filter(([key]) => !key.startsWith(BUCKET_PREFIX))\n const availableSlots = Math.max(0, MAX_BUCKETS - nonBucketEntries.length)\n const preservedNonBucket = serializeNonBucketEntries({ entries: nonBucketEntries })\n\n if (availableSlots <= 0) {\n return { metadata: base, changed: false }\n }\n\n const existingPairs = parseAllPairs({ metadata: base })\n const incomingPairs: Pair[] = itemIds.map((id) => ({ responseId, itemId: id }))\n const combinedPairs: Pair[] = existingPairs.concat(incomingPairs)\n\n let retainedOldestFirst: Pair[] = []\n\n for (let idx = combinedPairs.length - 1; idx >= 0; idx -= 1) {\n const candidate = [combinedPairs[idx], ...retainedOldestFirst]\n const buckets = packIntoBuckets({ pairs: candidate, slots: availableSlots })\n if (buckets) {\n retainedOldestFirst = candidate\n }\n }\n\n const buckets = packIntoBuckets({ pairs: retainedOldestFirst, slots: availableSlots })\n if (!buckets) {\n const changed = !metadataEquals(base, preservedNonBucket)\n return { metadata: changed ? preservedNonBucket : base, changed }\n }\n\n const rebuilt = { ...preservedNonBucket }\n buckets.forEach((value, index) => {\n if (value && value !== '[]') {\n rebuilt[bucketKey({ index })] = value\n }\n })\n\n const changed = !metadataEquals(base, rebuilt)\n return { metadata: rebuilt, changed }\n}\n\nexport async function saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId,\n itemIds,\n}: {\n client: OpenAI\n threadId: string\n responseId: string\n itemIds: string[]\n}) {\n const conversation = await client.conversations.retrieve(threadId)\n const { metadata: updated, changed } = appendItemIdsToConversationMetadata({\n metadata: conversation.metadata as Record<string, string> | undefined,\n responseId,\n itemIds,\n })\n if (!changed) return\n await client.conversations.update(threadId, { metadata: updated })\n}\n","import type { OpenAI } from 'openai'\nimport { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const runs = ({\n client,\n runAdapter,\n createResponseItems,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}): { get: RequestHandler; post: RequestHandler } => ({\n get: get(),\n post: post({ client, createResponseItems, runAdapter }),\n})\n","import type OpenAI from 'openai'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\n\ntype GetResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Runs['retrieve']>>\n}\n\nexport const get = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string): Promise<GetResponse> => {\n const url = new URL(urlString)\n\n const [, _threadId, runId] = url.pathname.match(new RegExp(runRegexp))!\n\n const response = await client.responses.retrieve(runId)\n\n const data = serializeResponseAsRun({\n response,\n assistantId: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id,\n })\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'openai-poll-after-ms': '5000',\n },\n })\n}\n","import type { OpenAI } from 'openai'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\nimport { get } from './get'\n// import { post } from './post'\n\nexport const run = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}): { get: RequestHandler } => ({\n get: get({ client, runAdapter }),\n // post: post({ prisma, runAdapter }),\n})\n","import type { OpenAI } from 'openai'\nimport { last } from 'radash'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { serializeItemAsMessageCreationRunStep } from '@/lib/items/serializeItemAsMessageCreationRunStep'\nimport { serializeItemAsFunctionCallRunStep } from '@/lib/items/serializeItemAsFunctionCallRunStep'\nimport { serializeItemAsImageGenerationRunStep } from '@/lib/items/serializeItemAsImageGenerationRunStep'\nimport { serializeItemAsWebSearchRunStep } from '@/lib/items/serializeItemAsWebSearchRunStep'\nimport { serializeItemAsMcpListToolsRunStep } from '@/lib/items/serializeItemAsMcpListToolsRunStep'\nimport { serializeItemAsMcpCallRunStep } from '@/lib/items/serializeItemAsMcpCallRunStep'\nimport { serializeItemAsCodeInterpreterCallRunStep } from '@/lib/items/serializeItemAsCodeInterpreterCallRunStep'\nimport { serializeItemAsComputerCallRunStep } from '@/lib/items/serializeItemAsComputerCallRunStep'\nimport { serializeItemAsReasoningRunStep } from '@/lib/items/serializeItemAsReasoningRunStep'\n\nexport const get = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string) => {\n const url = new URL(urlString)\n\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp))!\n\n // const {\n // limit,\n // order,\n // after,\n // } = assign({\n // limit: '20',\n // order: 'desc',\n // // after: null,\n // }, Object.fromEntries(url.searchParams))\n\n const response = await client.responses.retrieve(runId)\n\n const latestToolCallItem = response.output.findLast((item) => (\n item.type === 'function_call'\n // item.type === 'computer_call'\n ))\n\n let functionCallOutputItems: OpenAI.Responses.ResponseFunctionToolCallOutputItem[] = []\n let computerCallOutputItems: OpenAI.Responses.ResponseComputerToolCallOutputItem[] = []\n\n if (latestToolCallItem) {\n const items = await client.conversations.items.list(threadId, {\n after: latestToolCallItem.id,\n order: 'asc',\n limit: 20,\n })\n\n functionCallOutputItems = items.data.filter((item) => item.type === 'function_call_output') as OpenAI.Responses.ResponseFunctionToolCallOutputItem[]\n computerCallOutputItems = items.data.filter((item) => item.type === 'computer_call_output') as OpenAI.Responses.ResponseComputerToolCallOutputItem[]\n }\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } })\n\n const data = response.output.flatMap((item) => {\n const step = serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId: response.id,\n });\n\n if (item.type === 'function_call') {\n return [\n serializeItemAsFunctionCallRunStep({\n item,\n items: functionCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'computer_call') {\n return [\n serializeItemAsComputerCallRunStep({\n item,\n items: computerCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'reasoning') {\n return [\n serializeItemAsReasoningRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'image_generation_call') {\n return [\n step,\n serializeItemAsImageGenerationRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n ]\n } else if (item.type === 'web_search_call') {\n return [\n serializeItemAsWebSearchRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'mcp_list_tools') {\n return [\n serializeItemAsMcpListToolsRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'mcp_call') {\n return [\n serializeItemAsMcpCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'code_interpreter_call') {\n return [\n serializeItemAsCodeInterpreterCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n }\n\n return [step];\n })\n\n return new Response(JSON.stringify({\n data,\n has_more: false,\n last_id: last(response.output)?.id ?? null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype RunStep = OpenAI.Beta.Threads.Runs.RunStep\n\nexport function serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Conversations.ConversationItem | OpenAI.Responses.ResponseItem | OpenAI.Responses.ResponseFunctionToolCall\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n runId?: string\n status?: 'completed' | 'in_progress'\n completedAt?: number | null\n}): RunStep {\n // Normalize the item id to a definite string\n const itemId: string = typeof item.id === 'string' ? item.id : `item_${uid(18)}`\n\n const base: Omit<RunStep, 'type' | 'step_details'> = {\n id: itemId,\n object: 'thread.run.step',\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n }\n\n if (item.type === 'message') {\n return {\n ...base,\n type: 'message_creation',\n step_details: {\n type: 'message_creation',\n message_creation: {\n // If you also create a thread.message elsewhere, substitute that id here.\n message_id: itemId, // <- always string\n },\n },\n // keep role if present (assistant/user/system), optional\n metadata: 'role' in item ? { role: (item as any).role } : {},\n }\n } else if (item.type === 'image_generation_call') {\n return {\n ...base,\n type: 'message_creation',\n step_details: {\n type: 'message_creation',\n message_creation: { message_id: itemId },\n },\n metadata: {\n item: JSON.stringify({\n ...item,\n result: 'truncated',\n }),\n },\n }\n }\n\n return {\n ...base,\n type: 'message_creation',\n step_details: {\n type: 'message_creation',\n message_creation: { message_id: itemId },\n },\n metadata: {\n item: JSON.stringify(item),\n },\n }\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype RunStep = OpenAI.Beta.Threads.Runs.RunStep\ntype FunctionToolCall = OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\ntype ToolCallsStepDetails = OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails\n\nconst serializeFunctionCallOutput = ({\n functionCallOutput,\n}: {\n functionCallOutput: OpenAI.Responses.ResponseFunctionToolCallOutputItem | undefined\n}) => {\n if (!functionCallOutput) return null\n if (typeof functionCallOutput.output === 'string') {\n return functionCallOutput.output\n }\n\n return JSON.stringify(functionCallOutput.output)\n}\n\nexport const serializeItemAsFunctionCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseFunctionToolCall\n items: Omit<OpenAI.Responses.ResponseFunctionToolCallOutputItem, 'id'>[]\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n runId?: string\n status?: 'completed' | 'in_progress'\n completedAt?: number | null\n}): RunStep => {\n // Normalize the item id to a definite string\n const itemId: string = typeof item.id === 'string' ? item.id : `item_${uid(18)}`\n\n const base: Omit<RunStep, 'type' | 'step_details'> = {\n id: itemId,\n object: 'thread.run.step',\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n }\n\n const functionCallOutput = items.find((i) => (\n i.type === 'function_call_output' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseFunctionToolCallOutputItem | undefined\n\n const toolCall: FunctionToolCall = {\n id: item.call_id,\n type: 'function',\n function: {\n name: item.name,\n arguments: item.arguments,\n output: serializeFunctionCallOutput({ functionCallOutput }),\n },\n }\n\n return {\n ...base,\n type: 'tool_calls',\n step_details: {\n type: 'tool_calls',\n tool_calls: [toolCall],\n } satisfies ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseItem.ImageGenerationCall\n}) => {\n // OpenAI bug: status is 'generating' even when result is present\n if (item.result !== null) {\n return 'completed' as const\n }\n\n if (item.status === 'generating') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nexport const serializeItemAsImageGenerationRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseItem.ImageGenerationCall\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'image_generation',\n arguments: '{}',\n output: JSON.stringify({\n status: item.status,\n // @ts-expect-error bad openai types\n background: item.background,\n // @ts-expect-error bad openai types\n output_format: item.output_format,\n // @ts-expect-error bad openai types\n quality: item.quality,\n result: item.result,\n // @ts-expect-error bad openai types\n size: item.size,\n // @ts-expect-error bad openai types\n revised_prompt: item.revised_prompt,\n })\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseFunctionWebSearch\n}) => {\n if (item.status === 'searching') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nexport const serializeItemAsWebSearchRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseFunctionWebSearch\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'web_search',\n arguments: JSON.stringify({\n // @ts-expect-error bad openai types\n action: item.action,\n }),\n output: JSON.stringify({\n status: item.status,\n }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseItem.McpListTools\n}) => {\n if (item.error) {\n return 'failed' as const\n }\n\n return 'completed' as const\n}\n\nexport const serializeItemAsMcpListToolsRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseItem.McpListTools\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'mcp_list_tools',\n arguments: JSON.stringify({\n server_label: item.server_label,\n }),\n output: JSON.stringify({\n tools: item.tools,\n ...(item.error && { error: item.error }),\n }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseItem.McpCall\n}) => {\n if (item.error) {\n return 'failed' as const\n }\n\n return 'completed' as const\n}\n\nexport const serializeItemAsMcpCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseItem.McpCall\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: item.name,\n arguments: item.arguments,\n // @ts-expect-error compat\n server_label: item.server_label,\n output: item.output ?? item.error ?? null,\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: item.error ? { code: 'server_error' as const, message: item.error } : null,\n expired_at: null,\n cancelled_at: null,\n failed_at: item.error ? dayjs().unix() : null,\n completed_at: item.error ? null : completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseCodeInterpreterToolCall\n}) => {\n if (item.status === 'incomplete') {\n return 'in_progress' as const\n } else if (item.status === 'interpreting') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nconst serializeOutput = ({\n output,\n}: {\n output: OpenAI.Responses.ResponseCodeInterpreterToolCall.Logs\n // | OpenAI.Responses.ResponseCodeInterpreterToolCall.Image\n}) => {\n // if (output.type === 'logs') {\n return {\n type: output.type,\n logs: output.logs,\n }\n // }\n\n // if (output.type === 'image') {\n // return {\n // type: output.type,\n // image: {\n // url: output.url,\n // },\n // }\n // }\n}\n\nconst serializeOutputs = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseCodeInterpreterToolCall\n}) => {\n if (!item.outputs) return []\n\n return (item.outputs.filter(o => o.type === 'logs') as OpenAI.Responses.ResponseCodeInterpreterToolCall.Logs[])\n .map((output) => serializeOutput({ output }))\n}\n\nexport const serializeItemAsCodeInterpreterCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseCodeInterpreterToolCall\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.CodeInterpreterToolCall = {\n id: `citc${item.id}`,\n type: 'code_interpreter' as const,\n code_interpreter: {\n input: item.code ?? '',\n outputs: serializeOutputs({ item }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {\n item: JSON.stringify(item),\n },\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype RunStep = OpenAI.Beta.Threads.Runs.RunStep\ntype FunctionToolCall = OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\ntype ToolCallsStepDetails = OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails\n\nexport const serializeItemAsComputerCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseComputerToolCall\n items: Omit<OpenAI.Responses.ResponseComputerToolCallOutputItem, 'id'>[]\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n runId?: string\n status?: 'completed' | 'in_progress'\n completedAt?: number | null\n}): RunStep => {\n // Normalize the item id to a definite string\n const itemId: string = typeof item.id === 'string' ? item.id : `item_${uid(18)}`\n\n const base: Omit<RunStep, 'type' | 'step_details'> = {\n id: itemId,\n object: 'thread.run.step',\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n }\n\n const computerCallOutput = items.find((i) => (\n i.type === 'computer_call_output' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseComputerToolCallOutputItem | undefined\n\n const toolCall: FunctionToolCall = {\n id: item.call_id,\n type: 'function',\n function: {\n name: 'computer_call',\n arguments: JSON.stringify({\n action: item.action,\n pending_safety_checks: item.pending_safety_checks,\n }),\n output: computerCallOutput ? JSON.stringify(computerCallOutput.output) : null,\n },\n }\n\n return {\n ...base,\n type: 'tool_calls',\n step_details: {\n type: 'tool_calls',\n tool_calls: [toolCall],\n } satisfies ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n completedAt,\n}: {\n item: OpenAI.Responses.ResponseReasoningItem\n completedAt: number | null\n}) => {\n if (!item.status) {\n if (completedAt) {\n return 'completed' as const\n } else {\n return 'in_progress' as const\n }\n }\n\n if (item.status === 'incomplete') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nexport const serializeItemAsReasoningRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseReasoningItem\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'reasoning',\n arguments: '{}',\n output: JSON.stringify({\n summary: item.summary,\n content: item.content,\n encrypted_content: item.encrypted_content,\n }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item, completedAt }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport { get } from './get'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const steps = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}): { get: RequestHandler } => ({\n get: get({ client, runAdapter }),\n})\n","import type { OpenAI } from 'openai'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { serializeItemAsFunctionCallRunStep } from '@/lib/items/serializeItemAsFunctionCallRunStep'\nimport { serializeItemAsComputerCallRunStep } from '@/lib/items/serializeItemAsComputerCallRunStep'\n\nconst serializeTools = ({\n tools,\n}: {\n tools: OpenAI.Beta.Threads.Runs.RunCreateParams['tools']\n}) => {\n if (!tools?.length) return {}\n\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...(tool[tool.type] || {}),\n }))\n }\n}\n\nconst computerCallOutput = ({\n toolOutput,\n}: {\n toolOutput: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs'][number]\n}) => {\n if (typeof toolOutput.output !== 'string') return { isComputerCallOutput: false }\n\n let parsedOutput\n\n try {\n parsedOutput = JSON.parse(toolOutput.output)\n } catch {\n return { isComputerCallOutput: false }\n }\n\n if (typeof parsedOutput !== 'object' || parsedOutput === null) return { isComputerCallOutput: false }\n if (parsedOutput.type !== 'computer_screenshot') return { isComputerCallOutput: false }\n\n return {\n isComputerCallOutput: true,\n parsedOutput,\n }\n}\n\nconst getToolCallOutputItems = ({\n tool_outputs,\n}: {\n tool_outputs: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs']\n}) => {\n const functionCallOutputItems: Omit<OpenAI.Responses.ResponseFunctionToolCallOutputItem, 'id'>[] = []\n const computerCallOutputItems: Omit<OpenAI.Responses.ResponseComputerToolCallOutputItem, 'id'>[] = []\n\n tool_outputs.forEach((toolOutput) => {\n const { isComputerCallOutput, parsedOutput } = computerCallOutput({ toolOutput })\n\n if (isComputerCallOutput) {\n computerCallOutputItems.push({\n type: 'computer_call_output' as const,\n call_id: toolOutput.tool_call_id!,\n output: parsedOutput,\n // @ts-expect-error compat\n acknowledged_safety_checks: toolOutput.acknowledged_safety_checks ?? [],\n })\n } else {\n functionCallOutputItems.push({\n type: 'function_call_output' as const,\n call_id: toolOutput.tool_call_id!,\n output: toolOutput.output ?? '',\n })\n }\n })\n\n return {\n functionCallOutputItems,\n computerCallOutputItems,\n }\n}\n\nconst truncation = ({\n openaiAssistant,\n}: {\n openaiAssistant: any\n}) => {\n if (openaiAssistant.truncation_strategy?.type === 'disabled') {\n return 'disabled'\n }\n\n return 'auto'\n}\n\nexport const post = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string, options: any) => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp))!\n\n const body = JSON.parse(options.body)\n\n const {\n tool_outputs,\n stream,\n } = body\n\n const toolCallOutputItems = getToolCallOutputItems({ tool_outputs })\n const input = [...toolCallOutputItems.functionCallOutputItems, ...toolCallOutputItems.computerCallOutputItems]\n\n const previousResponse = await client.responses.retrieve(runId)\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant()\n\n const response = await client.responses.create({\n conversation: threadId,\n input,\n instructions: openaiAssistant.instructions,\n model: openaiAssistant.model,\n // metadata,\n stream,\n ...serializeTools({ tools: openaiAssistant.tools }),\n truncation: truncation({ openaiAssistant }),\n // text: response_format,\n })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n toolCallOutputItems.functionCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => (\n i.type === 'function_call' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseFunctionToolCall | undefined\n\n if (!toolCallItem) {\n return\n }\n\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeItemAsFunctionCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.functionCallOutputItems,\n threadId,\n openaiAssistant,\n runId,\n })\n })}\\n\\n`)\n })\n\n toolCallOutputItems.computerCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => (\n i.type === 'computer_call' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseComputerToolCall | undefined\n\n if (!toolCallItem) {\n return\n }\n\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeItemAsComputerCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.computerCallOutputItems,\n threadId,\n openaiAssistant,\n runId,\n })\n })}\\n\\n`)\n })\n\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => (\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n ),\n })\n\n controller.close()\n },\n })\n\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n}\n","import type { OpenAI } from 'openai'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\nimport { post } from './post'\n\nexport const submitToolOutputs = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}): { post: RequestHandler } => ({\n post: post({\n client,\n runAdapter,\n }),\n})\n","import type { RunAdapterWithAssistant } from '@/types'\nimport type { OpenAI } from 'openai'\n\ntype ListResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Assistants['list']>>\n}\n\nexport const get = ({\n runAdapter,\n}: {\n runAdapter: RunAdapterWithAssistant\n}) => async (_urlString: string): Promise<ListResponse> => {\n return new Response(JSON.stringify({\n data: [await runAdapter.getOpenaiAssistant()],\n has_more: false,\n last_id: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","export const post = () =>\n async () => (\n new Response(\n JSON.stringify({\n error: {\n message: 'Assistant creation is not implemented for the Responses storage adapter.',\n type: 'not_implemented',\n },\n }),\n {\n status: 501,\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n )\n )\n","import { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const assistants = ({\n runAdapter,\n}: {\n runAdapter: RunAdapterWithAssistant\n}): { get: RequestHandler, post: RequestHandler } => ({\n get: get({ runAdapter }),\n post: post(),\n})\n","import type { OpenAI } from 'openai'\nimport { StorageAdapterArgs, RunAdapterWithAssistant } from '@/types'\nimport type { RequestHandler } from '@/types'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { threads } from './threads'\nimport { messages } from './threads/messages'\nimport { runs } from './threads/runs'\nimport { run } from './threads/run'\nimport { steps } from './threads/runs/steps'\nimport { submitToolOutputs } from './threads/runs/submitToolOutputs'\nimport { assistants } from './assistants'\n\ntype MethodHandlers = { get?: RequestHandler; post?: RequestHandler }\n\ntype ResponsesStorageAdapterArgs = StorageAdapterArgs & {\n runAdapter: RunAdapterWithAssistant\n}\n\nexport const responsesStorageAdapter = (): ((args: ResponsesStorageAdapterArgs) => { requestHandlers: Record<string, MethodHandlers> }) => {\n const createResponseItems: OpenAI.Responses.ResponseInputItem[] = []\n\n return ({ runAdapter, client }: ResponsesStorageAdapterArgs) => ({\n requestHandlers: {\n '^/(?:v1|/?openai)/assistants$': assistants({ runAdapter }),\n '^/(?:v1|/?openai)/threads$': threads({ client }),\n [messagesRegexp]: messages({ client, runAdapter, createResponseItems }),\n [runsRegexp]: runs({ client, runAdapter, createResponseItems }),\n [runRegexp]: run({ client, runAdapter }),\n [stepsRegexp]: steps({ client, runAdapter }),\n [submitToolOutputsRegexp]: submitToolOutputs({ client, runAdapter }),\n },\n })\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\nimport { serializeItemAsMessageCreationRunStep } from '@/lib/items/serializeItemAsMessageCreationRunStep'\nimport { saveResponseItemsToConversationMetadata } from '@/lib/responses/saveResponseItemsToConversationMetadata'\nimport { serializeItemAsImageGenerationRunStep } from '@/lib/items/serializeItemAsImageGenerationRunStep'\nimport { serializeItemAsWebSearchRunStep } from '@/lib/items/serializeItemAsWebSearchRunStep'\nimport { serializeItemAsMcpListToolsRunStep } from '@/lib/items/serializeItemAsMcpListToolsRunStep'\nimport { serializeItemAsMcpCallRunStep } from '@/lib/items/serializeItemAsMcpCallRunStep'\nimport { serializeItemAsCodeInterpreterCallRunStep } from '@/lib/items/serializeItemAsCodeInterpreterCallRunStep'\nimport { serializeItemAsComputerCallRunStep } from '@/lib/items/serializeItemAsComputerCallRunStep'\nimport { serializeItemAsReasoningRunStep } from '@/lib/items/serializeItemAsReasoningRunStep'\n\ntype Args = {\n select?: {\n id?: boolean;\n };\n}\n\ntype NormalizedArgs = {\n select: {\n id: boolean;\n };\n};\n\nconst serializeToolCalls = ({\n toolCalls,\n}: {\n toolCalls: OpenAI.Responses.ResponseFunctionToolCall[] | OpenAI.Responses.ResponseComputerToolCall[]\n}) => (\n toolCalls.map((toolCall) => {\n if (toolCall.type === 'function_call') {\n return {\n id: toolCall.call_id,\n type: 'function' as const,\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments,\n },\n }\n } else if (toolCall.type === 'computer_call') {\n return {\n id: toolCall.call_id,\n type: 'computer_call' as const,\n computer_call: {\n action: toolCall.action,\n pending_safety_checks: toolCall.pending_safety_checks,\n },\n }\n }\n }) as OpenAI.Beta.Threads.Runs.RequiredActionFunctionToolCall[]\n)\n\nexport const responsesRunAdapter =\n ({\n getOpenaiAssistant: getDirectOpenaiAssistant,\n waitUntil = <T>(p: Promise<T>) => p.then(() => {})\n }: {\n getOpenaiAssistant: (args?: Args) => Promise<OpenAI.Beta.Assistants.Assistant> | OpenAI.Beta.Assistants.Assistant | Pick<OpenAI.Beta.Assistants.Assistant, 'id'> | Promise<Pick<OpenAI.Beta.Assistants.Assistant, 'id'>>\n waitUntil?: <T>(p: Promise<T>) => void | Promise<void>\n }) => {\n let cachedOpenaiAssistant: OpenAI.Beta.Assistants.Assistant | null = null\n\n const getOpenaiAssistant = async ({ select: { id = false } = {} }: Args = {}) => {\n const args: NormalizedArgs = { select: { id } }\n\n if (args.select.id) {\n return {\n id: (await getDirectOpenaiAssistant({ select: { id: true } })).id,\n }\n }\n\n if (cachedOpenaiAssistant) return cachedOpenaiAssistant\n\n cachedOpenaiAssistant = await getDirectOpenaiAssistant() as OpenAI.Beta.Assistants.Assistant\n return cachedOpenaiAssistant\n }\n\n const handleRun = async ({\n client,\n threadId,\n response,\n onEvent,\n }: {\n client: OpenAI\n threadId: string\n response: AsyncIterable<any>\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n }) => {\n let responseCreatedResponse: OpenAI.Responses.Response | null = null\n const toolCalls: Record<string, OpenAI.Responses.ResponseFunctionToolCall> = {}\n const mcpCalls: Record<string, OpenAI.Responses.ResponseItem.McpCall> = {}\n const codeInterpreterCalls: Record<string, OpenAI.Responses.ResponseCodeInterpreterToolCall> = {}\n\n let itemIds: string[] = []\n\n try {\n for await (const event of response as AsyncIterable<OpenAI.Responses.ResponseStreamEvent>) {\n switch (event.type) {\n case 'response.created':\n responseCreatedResponse = event.response\n\n await onEvent({\n event: 'thread.run.created',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n break\n\n case 'response.in_progress':\n await onEvent({\n event: 'thread.run.in_progress',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n break\n\n case 'response.completed': {\n itemIds = event.response.output.filter((o) => o.id).map((o) => o.id!)\n\n const toolCalls = event.response.output.filter((o) => o.type === 'function_call' || o.type === 'computer_call') as OpenAI.Responses.ResponseFunctionToolCall[] | OpenAI.Responses.ResponseComputerToolCall[]\n\n if (toolCalls.length > 0) {\n await onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n ...({\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: [\n ...serializeToolCalls({\n toolCalls,\n }),\n ],\n },\n },\n }),\n }\n })\n } else {\n await onEvent({\n event: 'thread.run.completed',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n }\n break\n }\n\n case 'response.failed': {\n await onEvent({\n event: 'thread.run.failed',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n break\n }\n\n case 'response.output_text.delta': {\n await onEvent({\n event: 'thread.message.delta',\n data: {\n id: event.item_id,\n delta: {\n content: [{ type: 'text', index: event.content_index, text: { value: event.delta } }],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n\n break\n }\n\n // case 'response.output_text.done': {\n // break\n // }\n //\n case 'response.output_item.added': {\n if (event.item.type === 'message') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n } else if (event.item.type === 'function_call') {\n toolCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'computer_call') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsComputerCallRunStep({\n item: event.item,\n items: [],\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'image_generation_call') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n } else if (event.item.type === 'reasoning') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'web_search_call') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'mcp_list_tools') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'mcp_call') {\n mcpCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'code_interpreter_call') {\n codeInterpreterCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n }\n\n if (event.item.id) itemIds.push(event.item.id)\n\n break\n }\n\n case 'response.output_item.done': {\n if (event.item.type === 'message') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'function_call') {\n toolCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.run.step.in_progress',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'image_generation_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'reasoning') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'web_search_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'mcp_list_tools') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'mcp_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'code_interpreter_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n }\n\n break\n }\n\n case 'response.function_call_arguments.delta': {\n const toolCall = toolCalls[event.item_id]\n if (!toolCall) break\n\n await onEvent({\n event: 'thread.run.step.delta',\n data: {\n id: event.item_id,\n object: 'thread.run.step.delta',\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: [\n {\n id: toolCall.call_id,\n type: 'function',\n index: event.output_index,\n function: {\n name: toolCall.name,\n arguments: event.delta,\n output: null,\n },\n },\n ],\n },\n },\n }\n })\n\n break\n }\n\n case 'response.mcp_call_arguments.delta': {\n const mcpCall = mcpCalls[event.item_id]\n if (!mcpCall) break\n\n await onEvent({\n event: 'thread.run.step.delta',\n data: {\n id: `fc${event.item_id}`,\n object: 'thread.run.step.delta',\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: [\n {\n id: `ftc${mcpCall.id}`,\n type: 'function',\n index: event.output_index,\n function: {\n name: mcpCall.name,\n arguments: event.delta,\n output: null,\n },\n },\n ],\n },\n },\n }\n })\n\n break\n }\n\n case 'response.image_generation_call.in_progress':\n case 'response.image_generation_call.generating':\n await onEvent({\n event: 'thread.message.in_progress',\n data: {\n id: event.item_id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: 'assistant' as 'assistant',\n content: [],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse!.id,\n attachments: [],\n status: 'in_progress' as 'in_progress',\n metadata: {\n event: JSON.stringify(event),\n },\n },\n })\n\n break\n\n case 'response.image_generation_call.partial_image': {\n await onEvent({\n event: 'thread.message.in_progress',\n data: {\n id: event.item_id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: 'assistant' as 'assistant',\n content: [{\n type: 'image_url' as 'image_url',\n image_url: {\n url: `data:image/png;base64,${event.partial_image_b64}`,\n // url: `data:image/png;base64,truncated`,\n detail: 'auto' as 'auto',\n },\n }],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse!.id,\n attachments: [],\n status: 'in_progress' as 'in_progress',\n metadata: {\n event: JSON.stringify({\n ...event,\n partial_image_b64: 'truncated',\n }),\n },\n },\n })\n\n break\n }\n\n //\n // case 'response.function_call_arguments.done': {\n // break\n // }\n\n default:\n break\n }\n }\n } catch (e: any) {\n await onEvent({\n event: 'thread.run.failed',\n data: {\n id: responseCreatedResponse?.id || `run_${uid(18)}`,\n object: 'thread.run',\n thread_id: threadId,\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n status: 'failed',\n failed_at: dayjs().unix(),\n last_error: {\n code: 'server_error',\n message: String(e?.message || e || 'Unknown error'),\n },\n } as any,\n })\n } finally {\n waitUntil(new Promise(async (resolve) => {\n if (responseCreatedResponse?.id && itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: responseCreatedResponse.id,\n itemIds,\n })\n }\n\n resolve(true)\n }))\n }\n }\n\n return {\n handleRun,\n getOpenaiAssistant,\n }\n }\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.cjs","../src/index.ts","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/models/get.ts","../src/adapters/client/groqClientAdapter/models/index.ts","../src/adapters/client/groqClientAdapter/completions/post.ts","../src/adapters/client/groqClientAdapter/completions/index.ts","../src/adapters/client/groqClientAdapter/index.ts","../src/adapters/client/openaiClientAdapter/models/get.ts","../src/adapters/client/openaiClientAdapter/models/index.ts","../src/adapters/client/openaiClientAdapter/completions/post.ts","../src/lib/models/isOModel.ts","../src/lib/messages/systemDeveloperMessages.ts","../src/adapters/client/openaiClientAdapter/completions/index.ts","../src/adapters/client/openaiClientAdapter/index.ts","../src/adapters/client/azureOpenaiClientAdapter/index.ts","../src/adapters/client/mistralClientAdapter/models/get.ts","../src/adapters/client/mistralClientAdapter/models/index.ts","../src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts","../src/adapters/client/mistralClientAdapter/completions/serializeBody.ts","../src/adapters/client/mistralClientAdapter/completions/post.ts","../src/adapters/client/mistralClientAdapter/completions/index.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/models/get.ts","../src/adapters/client/perplexityClientAdapter/models/index.ts","../src/lib/messages/alternatingMessages.ts","../src/adapters/client/perplexityClientAdapter/completions/post.ts","../src/adapters/client/perplexityClientAdapter/completions/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/client/anthropicClientAdapter/models/get.ts","../src/adapters/client/anthropicClientAdapter/models/index.ts","../src/adapters/client/anthropicClientAdapter/completions/post.ts","../src/lib/messages/nonEmptyMessages.ts","../src/lib/messages/firstUserMessages.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/serializeMessage.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/index.ts","../src/adapters/client/anthropicClientAdapter/completions/index.ts","../src/adapters/client/anthropicClientAdapter/index.ts","../src/adapters/client/togetherClientAdapter/models/get.ts","../src/adapters/client/togetherClientAdapter/models/index.ts","../src/adapters/client/togetherClientAdapter/completions/post.ts","../src/adapters/client/togetherClientAdapter/completions/index.ts","../src/adapters/client/togetherClientAdapter/index.ts","../src/adapters/client/googleClientAdapter/models/get.ts","../src/adapters/client/googleClientAdapter/models/index.ts","../src/adapters/client/googleClientAdapter/completions/post.ts","../src/adapters/client/googleClientAdapter/completions/index.ts","../src/adapters/client/googleClientAdapter/index.ts","../src/adapters/client/humirisClientAdapter/models/get.ts","../src/adapters/client/humirisClientAdapter/models/index.ts","../src/adapters/client/humirisClientAdapter/completions/post.ts","../src/adapters/client/humirisClientAdapter/completions/index.ts","../src/adapters/client/humirisClientAdapter/index.ts","../src/adapters/client/ollamaClientAdapter/models/get.ts","../src/adapters/client/ollamaClientAdapter/models/index.ts","../src/adapters/client/ollamaClientAdapter/completions/post.ts","../src/adapters/client/ollamaClientAdapter/completions/index.ts","../src/adapters/client/ollamaClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages/index.ts","../src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts","../src/lib/messages/messagesRegexp.ts","../src/lib/runs/runsRegexp.ts","../src/lib/runs/runRegexp.ts","../src/lib/runs/submitToolOutputsRegexp.ts","../src/lib/steps/stepsRegexp.ts","../src/adapters/storage/prismaStorageAdapter/threads/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/mapPrismaRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/getMessages.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/run/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/run/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/index.ts","../src/adapters/storage/prismaStorageAdapter/assistants/post.ts","../src/adapters/storage/prismaStorageAdapter/assistants/index.ts","../src/adapters/storage/prismaStorageAdapter/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/serializeThread.ts","../src/adapters/storage/responsesStorageAdapter/threads/post.ts","../src/adapters/storage/responsesStorageAdapter/threads/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts","../src/lib/items/serializeItemAsMessage.ts","../src/adapters/storage/responsesStorageAdapter/threads/messages/get.ts","../src/lib/items/responseId.ts","../src/adapters/storage/responsesStorageAdapter/threads/messages/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/get.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/post.ts","../src/lib/responses/serializeResponseAsRun.ts","../src/lib/responses/saveResponseItemsToConversationMetadata.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/run/get.ts","../src/adapters/storage/responsesStorageAdapter/threads/run/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts","../src/lib/items/serializeItemAsMessageCreationRunStep.ts","../src/lib/items/serializeItemAsFunctionCallRunStep.ts","../src/lib/items/serializeItemAsImageGenerationRunStep.ts","../src/lib/items/serializeItemAsWebSearchRunStep.ts","../src/lib/items/serializeItemAsMcpListToolsRunStep.ts","../src/lib/items/serializeItemAsMcpCallRunStep.ts","../src/lib/items/serializeItemAsCodeInterpreterCallRunStep.ts","../src/lib/items/serializeItemAsComputerCallRunStep.ts","../src/lib/items/serializeItemAsReasoningRunStep.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/steps/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/post/index.ts","../src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/index.ts","../src/adapters/storage/responsesStorageAdapter/assistants/get.ts","../src/adapters/storage/responsesStorageAdapter/assistants/post.ts","../src/adapters/storage/responsesStorageAdapter/assistants/index.ts","../src/adapters/storage/responsesStorageAdapter/index.ts","../src/adapters/run/responsesRunAdapter/index.ts"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","anthropicClientAdapter","azureOpenaiClientAdapter","completionsRunAdapter","googleClientAdapter","groqClientAdapter","humirisClientAdapter","mistralClientAdapter","ollamaClientAdapter","openaiClientAdapter","perplexityClientAdapter","prismaStorageAdapter","responsesRunAdapter","responsesStorageAdapter","supercompat","togetherClientAdapter","module","exports","import_openai","require","import_radash","storageRequestHandlers","storage","runAdapter","client","wrappedClient","result","handleRun","partob","requestHandlers","assign","findRequestHandler","url","pathname","URL","regex","RegExp","test","originalFetch","args","options","clientHeaders","newOptions","fetch","buildHeaders","method","toLowerCase","bodyHeaders","headers","retryCount","set","apiKey","supercompatFetch","pathHandler","requestHandler","endpointFromBaseUrl","baseURL","replace","type","AzureOpenAI","apiVersion","endpoint","OpenAI","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","ReadableStream","start","controller","chunk","enqueue","close","openai","isOModel","model","startsWith","systemDeveloperMessages","messages","map","message","role","omitKeys","resultOptions","import_radash2","omit","azureOpenai","mistral","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","serializeMessage","tool_call_id","toolCallId","serializeBody","serializedBody","serializedChunk","complete","perplexity","id","object","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","content","includes","anthropic","nonEmptyContent","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","function","description","input_schema","parameters","text","toolCall","input","arguments","tool_use_id","serializeMessages","systemMessages","otherMessages","system","chatMessages","import_radash3","fork","join","isEmpty","max_tokens","messageDelta","partial_json","uid","content_block","together","google","import_cuid2","resultChunk","newChoices","createId","humiris","created","logprobs","ollama","import_lodash","import_dayjs","validToolCallContentTypes","serializeToolContent","import_radash4","isArray","output","isEveryToolPartValid","every","toolPart","isObject","serializeToolCall","serializeMessageWithContent","serializeContent","metadata","run","messageToolCalls","tc","runStep","runSteps","find","rs","stepDetails","step_details","Array","some","rsTc","getMessages","instructions","import_radash5","flat","updatedToolCall","import_radash6","_","cloneDeep","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","response_format","console","failed_at","dayjs","unix","last_error","code","cause","completed_at","run_id","created_at","assistant_id","incomplete_at","incomplete_details","attachments","thread_id","annotations","expired_at","cancelled_at","usage","message_creation","message_id","required_action","submit_tool_outputs","messagesRegexp","runsRegexp","runRegexp","submitToolOutputsRegexp","stepsRegexp","serializeThread","thread","import_dayjs2","createdAt","tool_resources","prisma","_urlString","metadataRecord","assistantId","initialCreatedAt","messageData","threadData","Error","import_dayjs3","subtract","length","add","toDate","assistant","connect","threads","import_dayjs4","threadId","completedAt","incompleteAt","incompleteDetails","runId","import_radash7","messageContentBlocks","import_radash8","item","urlString","match","limit","order","after","pageSize","messagesPlusOne","import_radash9","fromEntries","searchParams","parseInt","findMany","where","take","orderBy","skip","cursor","slice","has_more","last_id","last","serializeRun","import_dayjs5","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","mapPrismaRun","truncationStrategy","responseFormat","updatedAt","runs","runsPlusOne","import_radash10","at","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","import_dayjs6","expiredAt","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","last_messages","include","readableStream","findUnique","import_radash11","modelSlug","additional_instructions","import_dayjs7","runStepsPlusOne","import_radash12","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","completedRunStep","import_dayjs8","toolOutput","dir","depth","Promise","resolve","submitToolOutputs","import_dayjs9","assistants","conversation","conversations","items","contentBlock","image_file","file_id","detail","filter","Boolean","image_url","output_format","serializeAttachments","inputFiles","inputFile","serializeMetadata","serializeItemAsMessage","openaiAssistant","import_radash13","contentBlocksFromContent","import_radash14","contentBlocksFromAttachments","attachment","createResponseItems","getOpenaiAssistant","select","import_dayjs10","responseId","itemId","keys","k","m","exec","idx","Number","x","sort","a","b","i","raw","arr","j","entry","itemIds","sortOrder","itemsWithRunIds","responseMap","timestampedItems","import_radash15","retrieve","mapItemsWithRunIds","fetchResponsesForItems","assignTimestamps","conversationCreatedAt","assignedTimestamp","responseIds","results","Set","allSettled","responses","Map","itemsWithTimestamps","timestamp","fallbackTimestampForIndex","findNextKnownTimestamp","startIndex","candidate","lastAssigned","nextValue","nextKnown","gap","serializeStatus","serializeUsage","prompt_tokens","input_tokens","completion_tokens","output_tokens","total_tokens","findPendingToolCalls","completedCallIds","call_id","has","serializeToolCalls","serializeResponseAsRun","pendingToolCalls","BUCKET_PREFIX","MAX_BUCKETS","MAX_VALUE_LENGTH","parseBucket","serializeBucket","bucketKey","listBucketIndices","parseAllPairs","indices","pairs","iid","serializeNonBucketEntries","packIntoBuckets","slots","buckets","currentEntries","flush","serialized","candidateEntries","metadataEquals","keysA","keysB","appendItemIdsToConversationMetadata","base","nonBucketEntries","availableSlots","Math","max","preservedNonBucket","changed","existingPairs","incomingPairs","combinedPairs","concat","retainedOldestFirst","rebuilt","saveResponseItemsToConversationMetadata","updated","truncation","defaultAssistant","import_radash17","format","import_radash16","import_dayjs11","o","_threadId","serializeItemAsMessageCreationRunStep","import_radash18","import_dayjs12","serializeFunctionCallOutput","functionCallOutput","serializeItemAsFunctionCallRunStep","import_radash19","import_dayjs13","serializeItemAsImageGenerationRunStep","import_dayjs14","background","quality","size","revised_prompt","serializeItemAsWebSearchRunStep","import_dayjs15","action","serializeItemAsMcpListToolsRunStep","import_dayjs16","server_label","serializeItemAsMcpCallRunStep","import_dayjs17","serializeOutput","logs","serializeOutputs","outputs","serializeItemAsCodeInterpreterCallRunStep","import_dayjs18","code_interpreter","serializeItemAsComputerCallRunStep","import_radash20","import_dayjs19","computerCallOutput","pending_safety_checks","serializeItemAsReasoningRunStep","import_dayjs20","summary","encrypted_content","latestToolCallItem","functionCallOutputItems","computerCallOutputItems","findLast","flatMap","step","import_radash21","isComputerCallOutput","parsedOutput","getToolCallOutputItems","acknowledged_safety_checks","toolCallOutputItems","previousResponse","toolCallItem","computer_call","getDirectOpenaiAssistant","waitUntil","p","then","cachedOpenaiAssistant","responseCreatedResponse","mcpCalls","codeInterpreterCalls","mcpCall","item_id","content_index","import_dayjs21","output_index","partial_image_b64","import_radash22","String"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n anthropicClientAdapter: () => anthropicClientAdapter,\n azureOpenaiClientAdapter: () => azureOpenaiClientAdapter,\n completionsRunAdapter: () => completionsRunAdapter,\n googleClientAdapter: () => googleClientAdapter,\n groqClientAdapter: () => groqClientAdapter,\n humirisClientAdapter: () => humirisClientAdapter,\n mistralClientAdapter: () => mistralClientAdapter,\n ollamaClientAdapter: () => ollamaClientAdapter,\n openaiClientAdapter: () => openaiClientAdapter,\n perplexityClientAdapter: () => perplexityClientAdapter,\n prismaStorageAdapter: () => prismaStorageAdapter,\n responsesRunAdapter: () => responsesRunAdapter,\n responsesStorageAdapter: () => responsesStorageAdapter,\n supercompat: () => supercompat,\n togetherClientAdapter: () => togetherClientAdapter\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/supercompat.ts\nvar import_openai = __toESM(require(\"openai\"), 1);\n\n// src/supercompatFetch/requestHandlers.ts\nvar import_radash = require(\"radash\");\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const wrappedClient = supercompat({\n client\n });\n const result = storage({\n runAdapter: {\n ...runAdapter,\n handleRun: (0, import_radash.partob)(runAdapter.handleRun, { client: wrappedClient })\n },\n client: wrappedClient\n });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => (0, import_radash.assign)(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client\n })\n);\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({\n url,\n requestHandlers: requestHandlers2\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers2) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers2[key];\n }\n }\n};\n\n// src/supercompatFetch/originalFetch.ts\nvar originalFetch = async ({\n args,\n client\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args;\n const clientHeaders = await client.client.buildHeaders({\n options: {},\n method: args[1].method.toLowerCase(),\n bodyHeaders: args[1].headers,\n retryCount: 0\n });\n clientHeaders.set(\"Authorization\", `Bearer ${client.client.apiKey}`);\n const newOptions = {\n ...options,\n headers: clientHeaders\n };\n return client.client.fetch(url, newOptions);\n } else {\n return fetch(...args);\n }\n};\n\n// src/supercompatFetch/index.ts\nvar supercompatFetch = ({\n client,\n storage,\n runAdapter\n}) => {\n const requestHandlers2 = requestHandlers({\n client,\n storage,\n runAdapter\n });\n return async (...args) => {\n const [url, options] = args;\n const pathHandler = findRequestHandler({\n url,\n requestHandlers: requestHandlers2\n });\n if (!pathHandler) {\n return originalFetch({\n client,\n args\n });\n }\n const method = options?.method ?? \"\";\n const requestHandler = pathHandler[method.toLowerCase()];\n if (!requestHandler) {\n return originalFetch({\n client,\n args\n });\n }\n return requestHandler(...args);\n };\n};\n\n// src/lib/azureOpenai/endpointFromBaseUrl.ts\nvar endpointFromBaseUrl = ({\n baseURL\n}) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({\n client,\n storage,\n runAdapter\n}) => {\n if (client.type === \"AZURE_OPENAI\") {\n return new import_openai.AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n }\n return new import_openai.default({\n apiKey: \"SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY\",\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n};\n\n// src/adapters/client/groqClientAdapter/models/get.ts\nvar get = ({\n groq\n}) => async (_url, _options) => {\n try {\n const data = await groq.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/groqClientAdapter/models/index.ts\nvar models = ({\n groq\n}) => ({\n get: get({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/completions/post.ts\nvar post = ({\n groq\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await groq.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await groq.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/groqClientAdapter/completions/index.ts\nvar completions = ({\n groq\n}) => ({\n post: post({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/index.ts\nvar groqClientAdapter = ({\n groq\n}) => ({\n client: groq,\n requestHandlers: {\n \"^/v1/models$\": models({ groq }),\n \"^/v1/chat/completions$\": completions({ groq })\n }\n});\n\n// src/adapters/client/openaiClientAdapter/models/get.ts\nvar get2 = ({\n openai\n}) => async (_url, _options) => {\n try {\n const data = await openai.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/openaiClientAdapter/models/index.ts\nvar models2 = ({\n openai\n}) => ({\n get: get2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar import_radash2 = require(\"radash\");\n\n// src/lib/models/isOModel.ts\nvar isOModel = ({ model }) => model.startsWith(\"o1\") || model.startsWith(\"o3\");\n\n// src/lib/messages/systemDeveloperMessages.ts\nvar systemDeveloperMessages = ({\n messages: messages4,\n model\n}) => {\n if (isOModel({ model })) {\n return messages4.map((message) => {\n if (message.role === \"system\") {\n return {\n ...message,\n // TODO: This should be 'developer' but we're using 'user' for now\n // role: 'developer',\n role: \"user\"\n };\n }\n return message;\n });\n }\n return messages4;\n};\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar omitKeys = ({\n model\n}) => {\n if (isOModel({ model })) {\n return [\"tools\"];\n }\n return [];\n};\nvar post2 = ({\n openai\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages4 = body.messages;\n const resultOptions = {\n ...(0, import_radash2.omit)(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages: messages4,\n model: body.model\n })\n };\n if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await openai.chat.completions.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/openaiClientAdapter/completions/index.ts\nvar completions2 = ({\n openai\n}) => ({\n post: post2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/index.ts\nvar openaiClientAdapter = ({\n openai\n}) => ({\n client: openai,\n requestHandlers: {\n \"^/v1/models$\": models2({ openai }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions2({ openai })\n }\n});\n\n// src/adapters/client/azureOpenaiClientAdapter/index.ts\nvar azureOpenaiClientAdapter = ({\n azureOpenai\n}) => ({\n type: \"AZURE_OPENAI\",\n client: azureOpenai,\n requestHandlers: {\n \"^/(?:v1|/?openai)/chat/completions$\": completions2({\n openai: azureOpenai\n })\n }\n});\n\n// src/adapters/client/mistralClientAdapter/models/get.ts\nvar get3 = ({\n mistral\n}) => async (_url, _options) => {\n try {\n const data = await mistral.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/mistralClientAdapter/models/index.ts\nvar models3 = ({\n mistral\n}) => ({\n get: get3({ mistral })\n});\n\n// src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts\nvar serializeDelta = ({\n delta: {\n toolCalls,\n ...rest\n }\n}) => ({\n ...rest,\n ...toolCalls ? {\n tool_calls: toolCalls\n } : {}\n});\nvar serializeChoice = ({\n choice: {\n finishReason,\n delta,\n ...rest\n }\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta })\n});\nvar serializeChunk = ({\n chunk\n}) => ({\n ...chunk.data,\n ...chunk.data.choices ? {\n choices: chunk.data.choices.map((choice) => serializeChoice({ choice }))\n } : {}\n});\n\n// src/adapters/client/mistralClientAdapter/completions/serializeBody.ts\nvar serializeMessage = ({\n message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n }\n}) => ({\n ...rest,\n ...tool_call_id ? {\n toolCallId: tool_call_id\n } : {},\n ...tool_calls ? {\n toolCalls: tool_calls\n } : {}\n});\nvar serializeBody = ({\n body\n}) => ({\n ...body,\n messages: body.messages.map((message) => serializeMessage({\n message\n }))\n});\n\n// src/adapters/client/mistralClientAdapter/completions/post.ts\nvar post3 = ({\n mistral\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const serializedBody = serializeBody({\n body\n });\n if (body.stream) {\n const response = await mistral.chat.stream(serializedBody);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n const serializedChunk = serializeChunk({\n chunk\n });\n controller.enqueue(`data: ${JSON.stringify(serializedChunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await mistral.chat.complete(serializedBody);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/mistralClientAdapter/completions/index.ts\nvar completions3 = ({\n mistral\n}) => ({\n post: post3({ mistral })\n});\n\n// src/adapters/client/mistralClientAdapter/index.ts\nvar mistralClientAdapter = ({\n mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n \"^/v1/models$\": models3({ mistral }),\n \"^/v1/chat/completions$\": completions3({ mistral })\n }\n});\n\n// src/adapters/client/perplexityClientAdapter/models/get.ts\nvar models4 = [\n \"sonar-reasoning-pro\",\n \"sonar-reasoning\",\n \"sonar-pro\",\n \"sonar\",\n \"r1-1776\",\n \"llama-3.1-sonar-small-128k-online\",\n \"llama-3.1-sonar-large-128k-online\",\n \"llama-3.1-sonar-huge-128k-online\"\n];\nvar get4 = ({\n perplexity\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models4.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/perplexityClientAdapter/models/index.ts\nvar models5 = ({\n perplexity\n}) => ({\n get: get4({ perplexity })\n});\n\n// src/lib/messages/alternatingMessages.ts\nvar agentSideRoles = [\"assistant\", \"system\"];\nvar alternatingMessages = ({\n messages: messages4\n}) => {\n const result = [];\n messages4.forEach((message, index) => {\n result.push(message);\n const nextMessage = messages4[index + 1];\n if (!nextMessage) return;\n if (message.role === \"user\" && nextMessage.role === \"user\") {\n result.push({\n role: \"assistant\",\n content: \"-\"\n });\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n result.push({\n role: \"user\",\n content: \"-\"\n });\n }\n });\n return result;\n};\n\n// src/adapters/client/perplexityClientAdapter/completions/post.ts\nvar post4 = ({\n perplexity\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages4 = alternatingMessages({\n messages: body.messages\n });\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages: messages4\n });\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await perplexity.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/perplexityClientAdapter/completions/index.ts\nvar completions4 = ({\n perplexity\n}) => ({\n post: post4({ perplexity })\n});\n\n// src/adapters/client/perplexityClientAdapter/index.ts\nvar perplexityClientAdapter = ({\n perplexity\n}) => ({\n client: perplexity,\n requestHandlers: {\n \"^/v1/models$\": models5({ perplexity }),\n \"^/v1/chat/completions$\": completions4({ perplexity })\n }\n});\n\n// src/adapters/client/anthropicClientAdapter/models/get.ts\nvar get5 = ({\n anthropic\n}) => async (_url, _options) => {\n try {\n const response = await anthropic.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n data: response.data.map((model) => ({\n id: model.id,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/models/index.ts\nvar models6 = ({\n anthropic\n}) => ({\n get: get5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar import_radash3 = require(\"radash\");\n\n// src/lib/messages/nonEmptyMessages.ts\nvar nonEmptyContent = ({\n message\n}) => {\n if (message.content == null) {\n return \"-\";\n }\n if (typeof message.content === \"string\") {\n if (!/\\S/.test(message.content)) {\n return \"-\";\n }\n }\n return message.content;\n};\nvar nonEmptyMessages = ({\n messages: messages4\n}) => {\n const result = [];\n messages4.forEach((message) => result.push({\n ...message,\n content: nonEmptyContent({ message })\n }));\n return result;\n};\n\n// src/lib/messages/firstUserMessages.ts\nvar firstUserMessages = ({\n messages: messages4\n}) => {\n const firstMessage = messages4[0];\n if (!firstMessage) return messages4;\n if (firstMessage.role !== \"user\") {\n return [\n {\n role: \"user\",\n content: \"-\"\n },\n ...messages4\n ];\n }\n return messages4;\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts\nvar serializeTools = ({\n tools\n}) => (tools ?? []).map((tool) => {\n if (tool.type === \"function\") {\n return {\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters ?? {\n type: \"object\"\n }\n };\n }\n return tool;\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeMessages/serializeMessage.ts\nvar serializeMessage2 = ({\n message\n}) => {\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: message.content\n };\n } else if (message.role === \"assistant\") {\n return {\n role: \"assistant\",\n content: [\n {\n type: \"text\",\n text: message.content\n },\n ...(message.tool_calls ?? []).map((toolCall) => ({\n type: \"tool_use\",\n id: toolCall.id,\n // @ts-expect-error todo\n name: toolCall.function.name,\n // @ts-expect-error todo\n input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {}\n }))\n ]\n };\n } else if (message.role === \"tool\") {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: message.tool_call_id,\n content: message.content\n }\n ]\n };\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeMessages/index.ts\nvar serializeMessages = ({\n messages: messages4\n}) => messages4.map((message) => serializeMessage2({\n message\n}));\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar post5 = ({\n anthropic\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages4 = body.messages;\n const [systemMessages, otherMessages] = (0, import_radash3.fork)(messages4, (message) => message.role === \"system\");\n const system = systemMessages.map((message) => message.content).join(\"\\n\");\n const chatMessages = nonEmptyMessages({\n messages: firstUserMessages({\n messages: alternatingMessages({\n messages: otherMessages\n })\n })\n });\n const resultOptions = {\n ...(0, import_radash3.omit)(body, [\"response_format\"]),\n stream: body.stream ? (0, import_radash3.isEmpty)(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools\n })\n };\n if (body.stream) {\n const response = await anthropic.messages.stream(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === \"content_block_delta\") {\n let delta;\n if (chunk.delta.type === \"input_json_delta\") {\n delta = {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json\n }\n }\n ]\n };\n } else if (\"text\" in chunk.delta) {\n delta = {\n content: chunk.delta.text\n };\n } else {\n delta = {\n content: \"\"\n };\n }\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n let delta;\n if (chunk.content_block.type === \"tool_use\") {\n delta = {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: \"function\",\n function: {\n name: chunk.content_block.name,\n arguments: \"\"\n }\n }\n ]\n };\n } else if (\"text\" in chunk.content_block) {\n delta = {\n content: chunk.content_block.text\n };\n } else {\n delta = {\n content: \"\"\n };\n }\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"message_start\") {\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: 0,\n delta: {\n content: \"\"\n }\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n }\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await anthropic.messages.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/index.ts\nvar completions5 = ({\n anthropic\n}) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({\n anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n \"^/v1/models$\": models6({ anthropic }),\n \"^/v1/chat/completions$\": completions5({ anthropic })\n }\n});\n\n// src/adapters/client/togetherClientAdapter/models/get.ts\nvar get6 = ({\n together\n}) => async (_url, _options) => {\n try {\n const data = await together.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n // @ts-ignore-next-line\n data: data.body\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/togetherClientAdapter/models/index.ts\nvar models7 = ({\n together\n}) => ({\n get: get6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/completions/post.ts\nvar post6 = ({\n together\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await together.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await together.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/togetherClientAdapter/completions/index.ts\nvar completions6 = ({\n together\n}) => ({\n post: post6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/index.ts\nvar togetherClientAdapter = ({\n together\n}) => ({\n client: together,\n requestHandlers: {\n \"^/v1/models$\": models7({ together }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions6({ together })\n }\n});\n\n// src/adapters/client/googleClientAdapter/models/get.ts\nvar models8 = [\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.5-pro-preview-03-25\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-lite\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-pro\"\n];\nvar get7 = ({\n google\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models8.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/googleClientAdapter/models/index.ts\nvar models9 = ({\n google\n}) => ({\n get: get7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/completions/post.ts\nvar import_cuid2 = require(\"@paralleldrive/cuid2\");\nvar post7 = ({\n google\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const resultOptions = {\n ...body,\n messages: nonEmptyMessages({\n messages: body.messages\n })\n };\n if (body.stream) {\n const response = await google.chat.completions.create(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n let resultChunk;\n if (chunk.choices) {\n const newChoices = chunk.choices.map((choice) => {\n if (choice.delta?.tool_calls) {\n return {\n ...choice,\n delta: {\n ...choice.delta,\n tool_calls: choice.delta.tool_calls.map((toolCall) => {\n if (toolCall.id === \"\") {\n return {\n ...toolCall,\n id: `call_${(0, import_cuid2.createId)()}`\n };\n }\n return toolCall;\n })\n }\n };\n } else {\n return choice;\n }\n });\n resultChunk = {\n ...chunk,\n choices: newChoices\n };\n } else {\n resultChunk = chunk;\n }\n controller.enqueue(`data: ${JSON.stringify(resultChunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await google.chat.completions.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/googleClientAdapter/completions/index.ts\nvar completions7 = ({\n google\n}) => ({\n post: post7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/index.ts\nvar googleClientAdapter = ({\n google\n}) => ({\n client: google,\n requestHandlers: {\n \"^/v1/models$\": models9({ google }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions7({ google })\n }\n});\n\n// src/adapters/client/humirisClientAdapter/models/get.ts\nvar models10 = [\n \"Humiris/humiris-moai\"\n];\nvar get8 = ({\n humiris\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models10.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/humirisClientAdapter/models/index.ts\nvar models11 = ({\n humiris\n}) => ({\n get: get8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/completions/post.ts\nvar post8 = ({\n humiris\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const data = await humiris.chat.completions.create({\n ...body,\n stream: false\n });\n const stream = new ReadableStream({\n async start(controller) {\n const chunk = {\n id: data.id,\n object: \"chat.completion.chunk\",\n created: data.created,\n model: data.created,\n choices: [\n {\n index: 0,\n delta: {\n role: data.choices[0].message.role,\n content: data.choices[0].message.content\n },\n logprobs: null,\n finish_reason: data.choices[0].finish_reason\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await humiris.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/humirisClientAdapter/completions/index.ts\nvar completions8 = ({\n humiris\n}) => ({\n post: post8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/index.ts\nvar humirisClientAdapter = ({\n humiris\n}) => ({\n client: humiris,\n requestHandlers: {\n \"^/v1/models$\": models11({ humiris }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions8({ humiris })\n }\n});\n\n// src/adapters/client/ollamaClientAdapter/models/get.ts\nvar get9 = ({\n ollama\n}) => async (_url, _options) => {\n try {\n const data = await ollama.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/models/index.ts\nvar models12 = ({\n ollama\n}) => ({\n get: get9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/completions/post.ts\nvar post9 = ({\n ollama\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await ollama.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await ollama.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/completions/index.ts\nvar completions9 = ({\n ollama\n}) => ({\n post: post9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/index.ts\nvar ollamaClientAdapter = ({\n ollama\n}) => ({\n client: ollama,\n requestHandlers: {\n \"^/v1/models$\": models12({ ollama }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions9({ ollama })\n }\n});\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar import_lodash = __toESM(require(\"lodash\"), 1);\nvar import_radash6 = require(\"radash\");\nvar import_dayjs = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar import_radash5 = require(\"radash\");\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\nvar import_radash4 = require(\"radash\");\nvar validToolCallContentTypes = [\n \"image\",\n \"text\"\n];\nvar serializeToolContent = ({\n toolCall\n}) => {\n if ((0, import_radash4.isArray)(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!(0, import_radash4.isObject)(toolPart)) return false;\n return validToolCallContentTypes.includes(toolPart.type);\n });\n if (isEveryToolPartValid) {\n return toolCall.function.output;\n }\n return JSON.stringify(toolCall.function.output);\n }\n return toolCall.function.output ?? \"\";\n};\nvar serializeToolCall = ({\n toolCall\n}) => ({\n tool_call_id: toolCall.id,\n role: \"tool\",\n name: toolCall.function.name,\n content: serializeToolContent({\n toolCall\n })\n});\nvar serializeMessageWithContent = ({\n message\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content\n }),\n ...message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}\n});\nvar serializeContent = ({\n content\n}) => content.map((content2) => content2.text.value).join(\"\\n\");\nvar serializeMessage3 = ({\n message\n}) => {\n const result = [serializeMessageWithContent({ message })];\n const run3 = message.run;\n if (!run3) return result;\n const messageToolCalls = message.metadata?.toolCalls || [];\n messageToolCalls.forEach((tc) => {\n const runStep = run3.runSteps.find((rs) => {\n if (rs.type !== \"tool_calls\") return false;\n const stepDetails2 = rs.step_details;\n if (!Array.isArray(stepDetails2.tool_calls)) return false;\n return stepDetails2.tool_calls.some((rsTc) => rsTc.type === \"function\" && rsTc.id === tc.id);\n });\n if (!runStep) return;\n const stepDetails = runStep.step_details;\n if (!Array.isArray(stepDetails.tool_calls)) return;\n const toolCall = stepDetails.tool_calls.find((rsTc) => rsTc.type === \"function\" && rsTc.id === tc.id);\n if (toolCall && toolCall.type === \"function\") {\n result.push(serializeToolCall({ toolCall }));\n }\n });\n return result;\n};\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar messages = async ({\n run: run3,\n getMessages: getMessages2\n}) => [\n ...run3.instructions ? [{\n role: \"system\",\n content: run3.instructions\n }] : [],\n ...(0, import_radash5.flat)((await getMessages2()).map((message) => serializeMessage3({ message })))\n];\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) return (0, import_radash6.omit)(delta, [\"index\"]);\n const result = import_lodash.default.cloneDeep(toolCall);\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? \"\"}${value}`;\n }\n return result;\n};\nvar toolCallsData = ({\n prevToolCalls,\n delta\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: (0, import_radash6.uid)(24),\n type: \"function\",\n ...(0, import_radash6.omit)(tc, [\"index\"])\n }));\n }\n const newToolCalls = import_lodash.default.cloneDeep(prevToolCalls);\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta\n });\n }\n return newToolCalls;\n};\nvar completionsRunAdapter = () => {\n return {\n handleRun: async ({\n client,\n run: run3,\n onEvent: onEvent2,\n getMessages: getMessages2\n }) => {\n if (run3.status !== \"queued\") return;\n onEvent2({\n event: \"thread.run.in_progress\",\n data: {\n ...run3,\n status: \"in_progress\"\n }\n });\n const opts = {\n messages: await messages({\n run: run3,\n getMessages: getMessages2\n }),\n model: run3.model,\n stream: true,\n response_format: run3.response_format,\n ...(0, import_radash6.isEmpty)(run3.tools) ? {} : { tools: run3.tools }\n };\n let providerResponse;\n try {\n providerResponse = await client.chat.completions.create(opts);\n } catch (e) {\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run3,\n failed_at: (0, import_dayjs.default)().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n let message = await onEvent2({\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: run3.id,\n created_at: (0, import_dayjs.default)().unix(),\n assistant_id: run3.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run3.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n onEvent2({\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: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix(),\n created_at: (0, import_dayjs.default)().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 let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls;\n for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? [];\n const choice = choices[0];\n if (!choice) continue;\n const delta = choice.delta;\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? \"\"}`;\n }\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\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: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: (0, import_dayjs.default)().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 onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run3.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: delta.tool_calls.map((tc) => ({\n id: (0, import_radash6.uid)(24),\n type: \"function\",\n ...tc\n }))\n }\n }\n }\n });\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\n }\n if (delta.content) {\n onEvent2({\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 });\n }\n }\n message = await onEvent2({\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 if ((0, import_radash6.isEmpty)(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run3,\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run3,\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 };\n};\n\n// src/lib/messages/messagesRegexp.ts\nvar messagesRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/messages$\";\n\n// src/lib/runs/runsRegexp.ts\nvar runsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs$\";\n\n// src/lib/runs/runRegexp.ts\nvar runRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)$\";\n\n// src/lib/runs/submitToolOutputsRegexp.ts\nvar submitToolOutputsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/submit_tool_outputs$\";\n\n// src/lib/steps/stepsRegexp.ts\nvar stepsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/steps$\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar import_dayjs3 = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nvar import_dayjs2 = __toESM(require(\"dayjs\"), 1);\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: (0, import_dayjs2.default)(thread.createdAt).unix(),\n metadata: thread.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar post10 = ({\n prisma\n}) => async (_urlString, options) => {\n if (!options.body) {\n throw new Error(\"No body provided\");\n }\n const body = JSON.parse(options.body);\n const messages4 = body.messages || [];\n const metadataRecord = body.metadata || {};\n const assistantId = typeof metadataRecord.assistantId === \"string\" ? metadataRecord.assistantId : void 0;\n if (!assistantId) {\n throw new Error(\"assistantId is required to create a thread\");\n }\n const initialCreatedAt = (0, import_dayjs3.default)().subtract(messages4.length, \"seconds\");\n const messageData = messages4.map((message, index) => ({\n role: message.role === \"user\" ? \"USER\" : \"ASSISTANT\",\n content: [\n {\n type: \"text\",\n text: {\n annotations: [],\n value: message.content\n }\n }\n ],\n attachments: message.attachments ?? [],\n metadata: message.metadata,\n createdAt: initialCreatedAt.add(index, \"seconds\").toDate()\n }));\n const threadData = {\n metadata: metadataRecord,\n assistant: {\n connect: {\n id: assistantId\n }\n },\n messages: {\n create: messageData\n }\n };\n const thread = await prisma.thread.create({\n data: threadData\n });\n return new Response(JSON.stringify(\n serializeThread({ thread })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/index.ts\nvar threads = ({\n prisma\n}) => ({\n post: post10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar import_radash8 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nvar import_dayjs4 = __toESM(require(\"dayjs\"), 1);\nvar import_radash7 = require(\"radash\");\nvar serializeMessage4 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: (0, import_dayjs4.default)(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? (0, import_dayjs4.default)(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? (0, import_dayjs4.default)(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails,\n role: message.role.toLowerCase(),\n content: message.content,\n assistant_id: message.assistantId,\n run_id: message.runId,\n attachments: message.attachments,\n status: message.status.toLowerCase(),\n metadata: (0, import_radash7.assign)(message.metadata ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {})\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({\n content\n}) => {\n if ((0, import_radash8.isArray)(content)) {\n return content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: {\n value: item.text ?? \"\",\n annotations: []\n }\n };\n }\n return item;\n });\n }\n return [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: []\n }\n }\n ];\n};\nvar post11 = ({\n prisma\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n if (!options.body) {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const { role, content, metadata } = body;\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === \"user\" ? \"USER\" : \"ASSISTANT\",\n metadata: metadata ?? {}\n }\n });\n return new Response(JSON.stringify(\n serializeMessage4({ message })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nvar import_radash9 = require(\"radash\");\nvar get10 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash9.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit);\n const messagesPlusOne = await prisma.message.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === \"asc\" ? \"asc\" : \"desc\" },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const messages4 = messagesPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: messages4.map((message) => serializeMessage4({ message })),\n has_more: messagesPlusOne.length > pageSize,\n last_id: (0, import_radash9.last)(messages4)?.id ?? null\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/index.ts\nvar messages2 = ({\n prisma\n}) => ({\n post: post11({ prisma }),\n get: get10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar import_radash10 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nvar import_dayjs5 = __toESM(require(\"dayjs\"), 1);\nvar serializeRun = ({\n run: run3\n}) => ({\n id: run3.id,\n object: \"thread.run\",\n created_at: (0, import_dayjs5.default)(run3.createdAt).unix(),\n thread_id: run3.threadId,\n assistant_id: run3.assistantId,\n status: run3.status.toLowerCase(),\n required_action: run3.requiredAction,\n last_error: run3.lastError,\n expires_at: (0, import_dayjs5.default)(run3.expiresAt).unix(),\n started_at: run3.startedAt ? (0, import_dayjs5.default)(run3.startedAt).unix() : null,\n cancelled_at: run3.cancelledAt ? (0, import_dayjs5.default)(run3.cancelledAt).unix() : null,\n failed_at: run3.failedAt ? (0, import_dayjs5.default)(run3.failedAt).unix() : null,\n completed_at: run3.completedAt ? (0, import_dayjs5.default)(run3.completedAt).unix() : null,\n model: run3.model,\n instructions: run3.instructions,\n tools: run3.tools,\n metadata: run3.metadata,\n usage: run3.usage,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: \"auto\",\n parallel_tool_calls: true\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/mapPrismaRun.ts\nvar mapPrismaRun = (run3) => ({\n id: run3.id,\n threadId: run3.threadId,\n assistantId: run3.assistantId,\n status: run3.status,\n requiredAction: run3.requiredAction,\n lastError: run3.lastError,\n expiresAt: run3.expiresAt,\n startedAt: run3.startedAt ?? null,\n cancelledAt: run3.cancelledAt ?? null,\n failedAt: run3.failedAt ?? null,\n completedAt: run3.completedAt ?? null,\n model: run3.model,\n instructions: run3.instructions,\n tools: run3.tools,\n metadata: run3.metadata,\n usage: run3.usage,\n truncationStrategy: run3.truncationStrategy,\n responseFormat: run3.responseFormat,\n createdAt: run3.createdAt,\n updatedAt: run3.updatedAt\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar get11 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash10.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\n const runsPlusOne = await prisma.run.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === \"asc\" ? \"asc\" : \"desc\" },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runs3 = runsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runs3.map((run3) => serializeRun({ run: mapPrismaRun(run3) })),\n has_more: runsPlusOne.length > pageSize,\n last_id: runs3.at(-1)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nvar import_dayjs7 = __toESM(require(\"dayjs\"), 1);\nvar import_radash11 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"IN_PROGRESS\" /* IN_PROGRESS */\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"FAILED\" /* FAILED */,\n failedAt: event.data.failed_at,\n ...event.data.last_error != null ? { lastError: event.data.last_error } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts\nvar threadRunCompleted = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n requiredAction: void 0\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts\nvar threadRunRequiresAction = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"REQUIRES_ACTION\" /* REQUIRES_ACTION */,\n ...event.data.required_action != null ? { requiredAction: event.data.required_action } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nvar import_dayjs6 = __toESM(require(\"dayjs\"), 1);\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs6.default)(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase(),\n status: runStep.status.toLowerCase(),\n // @ts-ignore-next-line\n step_details: runStep.stepDetails,\n last_error: runStep.lastError,\n expired_at: runStep.expiredAt ? (0, import_dayjs6.default)(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? (0, import_dayjs6.default)(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? (0, import_dayjs6.default)(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? (0, import_dayjs6.default)(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts\nvar type = (event) => {\n if (event.data.type === \"message_creation\") return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\") return \"TOOL_CALLS\" /* TOOL_CALLS */;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nvar status = (event) => {\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\") return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\") return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\") return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({\n prisma,\n event,\n controller\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 const serializedRunStep = serializeRunStep({ runStep });\n controller.enqueue({\n ...event,\n data: serializedRunStep\n });\n return serializedRunStep;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts\nvar threadRunStepDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\") return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content,\n role: event.data.role === \"assistant\" ? \"ASSISTANT\" /* ASSISTANT */ : \"USER\" /* USER */,\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status2(event)\n }\n });\n const serializedMessage = serializeMessage4({ message });\n controller.enqueue({\n ...event,\n data: serializedMessage\n });\n return serializedMessage;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts\nvar threadMessageDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts\nvar threadMessageCompleted = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n const toolCalls = event.data.tool_calls;\n if (toolCalls !== void 0) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: \"TOOL_CALLS\" /* TOOL_CALLS */\n },\n orderBy: {\n createdAt: \"desc\"\n }\n });\n if (!latestRunStep) {\n throw new Error(\"No run step found\");\n }\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id\n },\n data: {\n stepDetails: {\n type: \"tool_calls\",\n tool_calls: toolCalls\n }\n }\n });\n }\n return prisma.message.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n ...event.data.content ? { content: event.data.content } : {},\n ...toolCalls !== void 0 ? { toolCalls } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/index.ts\nvar 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\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/index.ts\nvar onEvent = ({\n prisma,\n controller\n}) => (event) => {\n const handler = handlers[event.event];\n if (!handler) {\n console.log(\"No handler for event\", event);\n return;\n }\n return handler({ prisma, controller, event });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/getMessages.ts\nvar getTake = ({\n run: run3\n}) => {\n if ([\"auto\", \"disabled\"].includes(run3.truncationStrategy.type)) {\n return null;\n }\n if (run3.truncationStrategy.type === \"last_messages\") {\n if (!run3.truncationStrategy.last_messages) {\n throw new Error(\"Truncation strategy last_messages is required\");\n }\n return -run3.truncationStrategy.last_messages;\n }\n throw new Error(`Unsupported truncation strategy type: ${run3.truncationStrategy.type}`);\n};\nvar getMessages = ({\n prisma,\n run: run3\n}) => async () => {\n const take = getTake({\n run: run3\n });\n const messages4 = await prisma.message.findMany({\n where: {\n threadId: run3.threadId\n },\n include: {\n run: {\n include: {\n runSteps: true\n }\n }\n },\n orderBy: {\n createdAt: \"asc\"\n },\n ...take ? { take } : {}\n });\n return messages4.map((message) => ({\n ...serializeMessage4({ message }),\n run: message.run ? {\n ...serializeRun({ run: mapPrismaRun(message.run) }),\n runSteps: message.run.runSteps.map((runStep) => serializeRunStep({ runStep }))\n } : null\n }));\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nvar post12 = ({\n prisma,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n if (!options.body) {\n throw new Error(\"No body provided\");\n }\n const body = JSON.parse(options.body);\n const { assistant_id, stream } = body;\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id\n }\n });\n if (!assistant) {\n throw new Error(\"Assistant not found\");\n }\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = (0, import_radash11.assign)({\n model: assistant.modelSlug,\n instructions: \"\",\n additional_instructions: null,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n }\n // tools: [],\n // metadata: {},\n }, body);\n const run3 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: (0, import_dayjs7.default)().add(1, \"hour\").unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId\n }\n },\n assistant: {\n connect: {\n id: assistant_id\n }\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format\n }\n });\n const data = serializeRun({ run: run3 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n run: data,\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({\n prisma,\n run: run3\n })\n });\n } catch (error) {\n console.error(error);\n onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n })({\n event: \"thread.run.failed\",\n data: {\n id: run3.id,\n failed_at: (0, import_dayjs7.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/index.ts\nvar runs = ({\n prisma,\n runAdapter\n}) => ({\n get: get11({ prisma }),\n post: post12({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get12 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const run3 = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId\n }\n });\n if (!run3) {\n return new Response(JSON.stringify({ error: \"Not Found\" }), {\n status: 404,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n return new Response(JSON.stringify(\n serializeRun({ run: mapPrismaRun(run3) })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n \"openai-poll-after-ms\": \"5000\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/index.ts\nvar run = ({\n prisma,\n runAdapter\n}) => ({\n get: get12({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nvar import_radash12 = require(\"radash\");\nvar get13 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash12.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\n const runStepsPlusOne = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runSteps = runStepsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n has_more: runStepsPlusOne.length > pageSize,\n last_id: runSteps.at(-1)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts\nvar steps = ({\n prisma\n}) => ({\n get: get13({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nvar import_dayjs8 = __toESM(require(\"dayjs\"), 1);\nvar updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {\n },\n tool_outputs\n}) => (\n // @ts-expect-error prisma transaction typing is broken\n prisma.$transaction(async (prisma2) => {\n const runSteps = await prisma2.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 for (const runStep of runSteps) {\n const completedRunStep = await prisma2.runStep.update({\n where: {\n id: runStep.id\n },\n data: {\n status: \"COMPLETED\",\n completedAt: (0, import_dayjs8.default)().unix(),\n stepDetails: {\n type: \"tool_calls\",\n // @ts-ignore-next-line\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 if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null });\n throw new Error(\"Tool output not found\");\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 onThreadRunStepCompleted({\n runStep: completedRunStep\n });\n }\n return prisma2.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n })\n);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar post13 = ({\n prisma,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp));\n const body = JSON.parse(options.body);\n const {\n tool_outputs,\n stream\n } = body;\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n const run3 = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs,\n onThreadRunStepCompleted: async ({ runStep }) => {\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeRunStep({ runStep })\n })}\n\n`);\n }\n });\n await runAdapter.handleRun({\n run: serializeRun({ run: run3 }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({ prisma, run: run3 })\n });\n controller.close();\n }\n });\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n const run3 = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs\n });\n await new Promise((resolve) => new ReadableStream({\n async start(controller) {\n await runAdapter.handleRun({\n run: serializeRun({ run: run3 }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({ prisma, run: run3 })\n });\n controller.close();\n resolve(void 0);\n }\n }));\n return new Response(JSON.stringify(\n run3\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/index.ts\nvar submitToolOutputs = ({\n prisma,\n runAdapter\n}) => ({\n post: post13({\n prisma,\n // @ts-ignore-next-line\n runAdapter\n })\n});\n\n// src/adapters/storage/prismaStorageAdapter/assistants/post.ts\nvar import_dayjs9 = __toESM(require(\"dayjs\"), 1);\nvar post14 = ({ prisma }) => async (_url, options) => {\n if (!options.body) {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const { model, instructions } = body;\n const assistant = await prisma.assistant.create({\n data: { modelSlug: model, instructions }\n });\n const data = {\n id: assistant.id,\n object: \"assistant\",\n created_at: (0, import_dayjs9.default)().unix(),\n name: null,\n description: null,\n model,\n instructions,\n tools: [],\n metadata: {}\n };\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/assistants/index.ts\nvar assistants = ({ prisma }) => ({\n post: post14({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/index.ts\nvar prismaStorageAdapter = ({\n prisma\n}) => ({ runAdapter }) => ({\n requestHandlers: {\n \"^/(?:v1/|openai/)?assistants$\": assistants({ prisma }),\n \"^/(?:v1|/?openai)/threads$\": threads({ prisma }),\n [messagesRegexp]: messages2({ prisma }),\n [runsRegexp]: runs({ prisma, runAdapter }),\n [runRegexp]: run({ prisma, runAdapter }),\n [stepsRegexp]: steps({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs({ prisma, runAdapter })\n }\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/serializeThread.ts\nvar serializeThread2 = ({\n conversation\n}) => ({\n id: conversation.id,\n object: \"thread\",\n created_at: conversation.created_at,\n metadata: conversation.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/post.ts\nvar post15 = ({\n client\n}) => async (_urlString, options) => {\n if (typeof options.body !== \"string\") {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const messages4 = body.messages || [];\n const metadata = body.metadata || {};\n const conversation = await client.conversations.create({\n metadata,\n items: messages4.map((message) => ({\n type: \"message\",\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [\n {\n type: message.role === \"user\" ? \"input_text\" : \"output_text\",\n text: message.content\n }\n ]\n }))\n });\n return new Response(JSON.stringify(\n serializeThread2({ conversation })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/index.ts\nvar threads2 = ({\n client\n}) => ({\n post: post15({ client })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts\nvar import_dayjs10 = __toESM(require(\"dayjs\"), 1);\nvar import_radash14 = require(\"radash\");\n\n// src/lib/items/serializeItemAsMessage.ts\nvar import_radash13 = require(\"radash\");\nvar serializeContent2 = ({\n item\n}) => {\n if (item.type === \"message\") {\n return item.content.map((contentBlock) => {\n if (contentBlock.type === \"input_text\") {\n return {\n type: \"text\",\n text: {\n value: contentBlock.text,\n annotations: []\n }\n };\n } else if (contentBlock.type === \"output_text\") {\n return {\n type: \"text\",\n text: {\n value: contentBlock.text,\n annotations: []\n }\n };\n } else if (contentBlock.type === \"input_image\") {\n return {\n type: \"image_file\",\n image_file: {\n file_id: contentBlock.file_id,\n detail: \"auto\"\n }\n };\n }\n return null;\n }).filter(Boolean);\n } else if (item.type === \"image_generation_call\") {\n if (!item.result) return [];\n return [{\n type: \"image_url\",\n image_url: {\n // @ts-expect-error bad openai types\n url: `data:image/${item.output_format};base64,${item.result}`,\n detail: \"auto\"\n }\n }];\n } else {\n return [];\n }\n};\nvar serializeAttachments = ({\n item\n}) => {\n if (item.type !== \"message\") return [];\n const inputFiles = item.content.filter((contentBlock) => contentBlock.type === \"input_file\" && contentBlock.file_id);\n return inputFiles.map((inputFile) => ({\n file_id: inputFile.file_id\n }));\n};\nvar serializeMetadata = ({\n item\n}) => {\n if (item.type === \"image_generation_call\") {\n return {\n item: JSON.stringify({\n ...item,\n result: \"truncated\"\n })\n };\n }\n return {\n item: JSON.stringify(item)\n };\n};\nvar serializeItemAsMessage = ({\n item,\n threadId,\n openaiAssistant,\n createdAt,\n runId = null,\n status: status3 = \"completed\"\n}) => ({\n id: item.id || (0, import_radash13.uid)(24),\n object: \"thread.message\",\n created_at: createdAt,\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: typeof item.role === \"string\" ? item.role : \"assistant\",\n content: serializeContent2({ item }),\n assistant_id: item.role === \"assistant\" ? openaiAssistant.id : null,\n run_id: runId,\n attachments: serializeAttachments({ item }),\n status: typeof item.status === \"string\" ? item.status : status3,\n metadata: serializeMetadata({ item })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts\nvar contentBlocksFromContent = ({\n content\n}) => {\n if ((0, import_radash14.isArray)(content)) {\n return content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"input_text\",\n text: item.text\n };\n }\n if (item.type === \"image_file\") {\n return {\n type: \"input_image\",\n file_id: item.image_file.file_id,\n detail: item.image_file.detail ?? \"auto\"\n };\n }\n if (item.type === \"image_url\") {\n return {\n type: \"input_image\",\n image_url: item.image_url.url,\n detail: item.image_url.detail ?? \"auto\"\n };\n }\n return {\n type: \"input_text\",\n text: \"\"\n };\n });\n }\n return [\n {\n type: \"input_text\",\n text: content ?? \"\"\n }\n ];\n};\nvar contentBlocksFromAttachments = ({\n attachments\n}) => attachments.map((attachment) => ({\n type: \"input_file\",\n file_id: attachment.file_id\n}));\nvar messageContentBlocks2 = ({\n content,\n attachments\n}) => [\n ...contentBlocksFromContent({ content }),\n ...contentBlocksFromAttachments({ attachments })\n];\nvar post16 = ({\n runAdapter,\n createResponseItems\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n if (typeof options.body !== \"string\") {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const { role, content, attachments = [] } = body;\n const item = {\n type: \"message\",\n role,\n content: messageContentBlocks2({\n content,\n attachments\n })\n };\n createResponseItems.push(item);\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } });\n return new Response(JSON.stringify(\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: (0, import_dayjs10.default)().unix()\n })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/get.ts\nvar import_radash15 = require(\"radash\");\n\n// src/lib/items/responseId.ts\nfunction responseId({\n conversation,\n itemId\n}) {\n if (!conversation.metadata) return null;\n const metadata = conversation.metadata;\n const keys = Object.keys(metadata).map((k) => {\n const m = /^responseItemsMap(\\d+)$/.exec(k);\n return m ? { key: k, idx: Number(m[1]) } : null;\n }).filter((x) => !!x).sort((a, b) => a.idx - b.idx);\n for (let i = keys.length - 1; i >= 0; i--) {\n const raw = metadata[keys[i].key];\n if (!raw || raw === \"[]\") continue;\n let arr = [];\n try {\n arr = JSON.parse(raw);\n if (!Array.isArray(arr)) continue;\n } catch {\n continue;\n }\n for (let j = arr.length - 1; j >= 0; j--) {\n const entry = arr[j];\n if (entry?.itemIds?.includes(itemId)) {\n return entry.responseId || null;\n }\n }\n }\n return null;\n}\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/get.ts\nvar get14 = ({\n client,\n runAdapter\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash15.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const conversation = await client.conversations.retrieve(threadId);\n const sortOrder = order === \"asc\" ? \"asc\" : \"desc\";\n const items = await client.conversations.items.list(threadId, {\n limit: parseInt(limit, 10),\n after,\n order: sortOrder\n });\n const itemsWithRunIds = mapItemsWithRunIds({ conversation, items: items.data });\n const responseMap = await fetchResponsesForItems({\n client,\n items: itemsWithRunIds\n });\n const timestampedItems = assignTimestamps({\n items: itemsWithRunIds,\n responseMap,\n sortOrder,\n conversationCreatedAt: conversation.created_at\n });\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } });\n return new Response(JSON.stringify({\n data: timestampedItems.map(({ item, runId, assignedTimestamp }) => serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: assignedTimestamp,\n runId\n })),\n has_more: items.has_more,\n last_id: items.last_id\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\nvar mapItemsWithRunIds = ({\n conversation,\n items\n}) => items.map((item) => ({\n item,\n runId: item.id ? responseId({\n conversation,\n itemId: item.id\n }) : null\n}));\nvar fetchResponsesForItems = async ({\n client,\n items\n}) => {\n const responseIds = Array.from(new Set(\n items.map(({ runId }) => runId).filter((id) => Boolean(id))\n ));\n const results = await Promise.allSettled(\n responseIds.map((id) => client.responses.retrieve(id))\n );\n const map = /* @__PURE__ */ new Map();\n results.forEach((result, index) => {\n if (result.status === \"fulfilled\") {\n map.set(responseIds[index], result.value);\n }\n });\n return map;\n};\nvar assignTimestamps = ({\n items,\n responseMap,\n sortOrder,\n conversationCreatedAt\n}) => {\n const itemsWithTimestamps = items.map((entry) => ({\n ...entry,\n timestamp: entry.runId ? responseMap.get(entry.runId)?.created_at ?? null : null,\n assignedTimestamp: 0\n }));\n const fallbackTimestampForIndex = (index) => sortOrder === \"asc\" ? conversationCreatedAt + index : conversationCreatedAt + (itemsWithTimestamps.length - index);\n const findNextKnownTimestamp = (startIndex) => {\n for (let i = startIndex; i < itemsWithTimestamps.length; i += 1) {\n const candidate = itemsWithTimestamps[i];\n if (candidate.timestamp != null) {\n return { index: i, timestamp: candidate.timestamp };\n }\n }\n return null;\n };\n if (sortOrder === \"asc\") {\n let lastAssigned = null;\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp;\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned + 1;\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1);\n if (nextKnown) {\n const gap = nextKnown.index - index;\n nextValue = nextKnown.timestamp - gap;\n } else {\n nextValue = fallbackTimestampForIndex(index);\n }\n }\n }\n if (lastAssigned != null && nextValue <= lastAssigned) {\n nextValue = lastAssigned + 1;\n }\n entry.assignedTimestamp = nextValue;\n lastAssigned = nextValue;\n });\n } else {\n let lastAssigned = null;\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp;\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned - 1;\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1);\n if (nextKnown) {\n const gap = nextKnown.index - index;\n nextValue = nextKnown.timestamp + gap;\n } else {\n nextValue = fallbackTimestampForIndex(index);\n }\n }\n }\n if (lastAssigned != null && nextValue >= lastAssigned) {\n nextValue = lastAssigned - 1;\n }\n entry.assignedTimestamp = nextValue;\n lastAssigned = nextValue;\n });\n }\n return itemsWithTimestamps;\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/index.ts\nvar messages3 = ({\n client,\n runAdapter,\n createResponseItems\n}) => ({\n post: post16({ runAdapter, createResponseItems }),\n get: get14({ client, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/get.ts\nvar get15 = () => async (urlString) => {\n return new Response(JSON.stringify({\n data: [],\n has_more: false,\n last_id: null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/post.ts\nvar import_radash16 = require(\"radash\");\nvar import_dayjs11 = __toESM(require(\"dayjs\"), 1);\nvar import_radash17 = require(\"radash\");\n\n// src/lib/responses/serializeResponseAsRun.ts\nvar serializeStatus = ({\n response\n}) => {\n if (response.error) return \"failed\";\n return response.status?.toLowerCase() ?? \"completed\";\n};\nvar serializeUsage = ({\n response\n}) => ({\n prompt_tokens: response.usage?.input_tokens ?? 0,\n completion_tokens: response.usage?.output_tokens ?? 0,\n total_tokens: response.usage?.total_tokens ?? 0\n});\nvar findPendingToolCalls = ({\n response\n}) => {\n const toolCalls = (response.output ?? []).filter(\n (item) => item.type === \"function_call\"\n );\n if (toolCalls.length === 0) return [];\n const completedCallIds = new Set(\n (response.output ?? []).filter(\n (item) => (\n // @ts-expect-error missing openai type\n item.type === \"function_call_output\"\n )\n ).map((item) => (\n // @ts-expect-error missing openai type\n item.call_id\n )).filter((id) => Boolean(id))\n );\n return toolCalls.filter((call) => !completedCallIds.has(call.call_id));\n};\nvar serializeToolCalls = ({\n toolCalls\n}) => toolCalls.map((toolCall) => ({\n id: toolCall.call_id,\n type: \"function\",\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments\n }\n}));\nvar serializeResponseAsRun = ({\n response,\n assistantId\n}) => {\n const pendingToolCalls = findPendingToolCalls({ response });\n const status3 = pendingToolCalls.length > 0 ? \"requires_action\" : serializeStatus({ response });\n return {\n id: response.id,\n object: \"thread.run\",\n created_at: response.created_at,\n thread_id: response.conversation.id,\n assistant_id: assistantId,\n status: status3,\n required_action: pendingToolCalls.length > 0 ? {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: serializeToolCalls({ toolCalls: pendingToolCalls })\n }\n } : null,\n last_error: response.error,\n expires_at: response.created_at,\n started_at: response.created_at,\n cancelled_at: null,\n failed_at: response.error ? response.created_at : null,\n completed_at: status3 === \"completed\" ? response.created_at : null,\n model: response.model,\n instructions: \"\",\n tools: [],\n metadata: response.metadata,\n usage: serializeUsage({ response }),\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: \"auto\",\n parallel_tool_calls: true\n };\n};\n\n// src/lib/responses/saveResponseItemsToConversationMetadata.ts\nvar BUCKET_PREFIX = \"responseItemsMap\";\nvar MAX_BUCKETS = 16;\nvar MAX_VALUE_LENGTH = 512;\nfunction parseBucket({ value }) {\n if (!value || value === \"[]\") return [];\n try {\n const arr = JSON.parse(value);\n return Array.isArray(arr) ? arr : [];\n } catch {\n return [];\n }\n}\nfunction serializeBucket({ entries }) {\n return JSON.stringify(entries);\n}\nfunction bucketKey({ index }) {\n return `${BUCKET_PREFIX}${index}`;\n}\nfunction listBucketIndices({ metadata }) {\n return Object.keys(metadata).map((k) => {\n const m = new RegExp(`^${BUCKET_PREFIX}(\\\\d+)$`).exec(k);\n return m ? Number(m[1]) : -1;\n }).filter((i) => i >= 0).sort((a, b) => a - b);\n}\nfunction parseAllPairs({ metadata }) {\n const indices = listBucketIndices({ metadata });\n const pairs = [];\n for (const idx of indices) {\n const key = bucketKey({ index: idx });\n const entries = parseBucket({ value: metadata[key] });\n for (const e of entries) {\n for (const iid of e.itemIds) {\n pairs.push({ responseId: e.responseId, itemId: iid });\n }\n }\n }\n return pairs;\n}\nfunction serializeNonBucketEntries({ entries }) {\n const result = {};\n for (const [key, value] of entries) {\n result[key] = value;\n }\n return result;\n}\nfunction packIntoBuckets({ pairs, slots }) {\n const buckets = [];\n let currentEntries = [];\n const flush = () => {\n if (currentEntries.length === 0) return true;\n const serialized = serializeBucket({ entries: currentEntries });\n if (serialized.length > MAX_VALUE_LENGTH) return false;\n if (buckets.length >= slots) return false;\n buckets.push(serialized);\n currentEntries = [];\n return true;\n };\n for (const { responseId: responseId2, itemId } of pairs) {\n const candidateEntries = currentEntries.map((entry) => ({\n responseId: entry.responseId,\n itemIds: [...entry.itemIds]\n }));\n const last3 = candidateEntries.at(-1);\n if (last3 && last3.responseId === responseId2) {\n last3.itemIds.push(itemId);\n } else {\n candidateEntries.push({ responseId: responseId2, itemIds: [itemId] });\n }\n const serialized = serializeBucket({ entries: candidateEntries });\n if (serialized.length <= MAX_VALUE_LENGTH) {\n currentEntries = candidateEntries;\n continue;\n }\n if (!flush()) return void 0;\n currentEntries = [{ responseId: responseId2, itemIds: [itemId] }];\n if (serializeBucket({ entries: currentEntries }).length > MAX_VALUE_LENGTH) {\n return void 0;\n }\n }\n if (!flush()) return void 0;\n return buckets;\n}\nfunction metadataEquals(a, b) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction appendItemIdsToConversationMetadata({\n metadata,\n responseId: responseId2,\n itemIds\n}) {\n const base = { ...metadata || {} };\n const nonBucketEntries = Object.entries(base).filter(([key]) => !key.startsWith(BUCKET_PREFIX));\n const availableSlots = Math.max(0, MAX_BUCKETS - nonBucketEntries.length);\n const preservedNonBucket = serializeNonBucketEntries({ entries: nonBucketEntries });\n if (availableSlots <= 0) {\n return { metadata: base, changed: false };\n }\n const existingPairs = parseAllPairs({ metadata: base });\n const incomingPairs = itemIds.map((id) => ({ responseId: responseId2, itemId: id }));\n const combinedPairs = existingPairs.concat(incomingPairs);\n let retainedOldestFirst = [];\n for (let idx = combinedPairs.length - 1; idx >= 0; idx -= 1) {\n const candidate = [combinedPairs[idx], ...retainedOldestFirst];\n const buckets2 = packIntoBuckets({ pairs: candidate, slots: availableSlots });\n if (buckets2) {\n retainedOldestFirst = candidate;\n }\n }\n const buckets = packIntoBuckets({ pairs: retainedOldestFirst, slots: availableSlots });\n if (!buckets) {\n const changed2 = !metadataEquals(base, preservedNonBucket);\n return { metadata: changed2 ? preservedNonBucket : base, changed: changed2 };\n }\n const rebuilt = { ...preservedNonBucket };\n buckets.forEach((value, index) => {\n if (value && value !== \"[]\") {\n rebuilt[bucketKey({ index })] = value;\n }\n });\n const changed = !metadataEquals(base, rebuilt);\n return { metadata: rebuilt, changed };\n}\nasync function saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: responseId2,\n itemIds\n}) {\n const conversation = await client.conversations.retrieve(threadId);\n const { metadata: updated, changed } = appendItemIdsToConversationMetadata({\n metadata: conversation.metadata,\n responseId: responseId2,\n itemIds\n });\n if (!changed) return;\n await client.conversations.update(threadId, { metadata: updated });\n}\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/post.ts\nvar serializeTools2 = ({\n tools\n}) => {\n if (!tools?.length) return {};\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...tool[tool.type] || {}\n }))\n };\n};\nvar truncation = ({\n truncation_strategy\n}) => {\n if (truncation_strategy.type === \"disabled\") {\n return \"disabled\";\n }\n return \"auto\";\n};\nvar defaultAssistant = {\n model: \"\",\n instructions: \"\",\n additional_instructions: null,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n }\n // tools: [],\n // metadata: {},\n};\nvar post17 = ({\n client,\n runAdapter,\n createResponseItems\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n if (typeof options.body !== \"string\") {\n throw new Error(\"Request body is required\");\n }\n const body = JSON.parse(options.body);\n const {\n assistant_id,\n stream\n } = body;\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = (0, import_radash17.assign)({\n ...defaultAssistant,\n ...await runAdapter.getOpenaiAssistant()\n }, body);\n const response = await client.responses.create({\n conversation: threadId,\n instructions,\n model,\n metadata,\n stream,\n ...serializeTools2({ tools }),\n truncation: truncation({ truncation_strategy }),\n text: {\n format: response_format\n },\n input: createResponseItems\n });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => controller.enqueue(`data: ${JSON.stringify(event)}\n\n`)\n });\n } catch (error) {\n console.error(error);\n const event = {\n event: \"thread.run.failed\",\n data: {\n id: (0, import_radash16.uid)(24),\n failed_at: (0, import_dayjs11.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n };\n controller.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n const itemIds = (response.output ?? []).filter((o) => o.id).map((o) => o.id);\n if (itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: response.id,\n itemIds\n });\n }\n const data = serializeResponseAsRun({\n response,\n assistantId: assistant_id\n });\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/index.ts\nvar runs2 = ({\n client,\n runAdapter,\n createResponseItems\n}) => ({\n get: get15(),\n post: post17({ client, createResponseItems, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/run/get.ts\nvar get16 = ({\n client,\n runAdapter\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, _threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const response = await client.responses.retrieve(runId);\n const data = serializeResponseAsRun({\n response,\n assistantId: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id\n });\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n \"openai-poll-after-ms\": \"5000\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/run/index.ts\nvar run2 = ({\n client,\n runAdapter\n}) => ({\n get: get16({ client, runAdapter })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts\nvar import_radash21 = require(\"radash\");\n\n// src/lib/items/serializeItemAsMessageCreationRunStep.ts\nvar import_dayjs12 = __toESM(require(\"dayjs\"), 1);\nvar import_radash18 = require(\"radash\");\nfunction serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId = `run_${(0, import_radash18.uid)(24)}`,\n status: status3 = \"completed\",\n completedAt = (0, import_dayjs12.default)().unix()\n}) {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${(0, import_radash18.uid)(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs12.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null\n };\n if (item.type === \"message\") {\n return {\n ...base,\n type: \"message_creation\",\n step_details: {\n type: \"message_creation\",\n message_creation: {\n // If you also create a thread.message elsewhere, substitute that id here.\n message_id: itemId\n // <- always string\n }\n },\n // keep role if present (assistant/user/system), optional\n metadata: \"role\" in item ? { role: item.role } : {}\n };\n } else if (item.type === \"image_generation_call\") {\n return {\n ...base,\n type: \"message_creation\",\n step_details: {\n type: \"message_creation\",\n message_creation: { message_id: itemId }\n },\n metadata: {\n item: JSON.stringify({\n ...item,\n result: \"truncated\"\n })\n }\n };\n }\n return {\n ...base,\n type: \"message_creation\",\n step_details: {\n type: \"message_creation\",\n message_creation: { message_id: itemId }\n },\n metadata: {\n item: JSON.stringify(item)\n }\n };\n}\n\n// src/lib/items/serializeItemAsFunctionCallRunStep.ts\nvar import_dayjs13 = __toESM(require(\"dayjs\"), 1);\nvar import_radash19 = require(\"radash\");\nvar serializeFunctionCallOutput = ({\n functionCallOutput\n}) => {\n if (!functionCallOutput) return null;\n if (typeof functionCallOutput.output === \"string\") {\n return functionCallOutput.output;\n }\n return JSON.stringify(functionCallOutput.output);\n};\nvar serializeItemAsFunctionCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${(0, import_radash19.uid)(24)}`,\n status: status3 = \"completed\",\n completedAt = (0, import_dayjs13.default)().unix()\n}) => {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${(0, import_radash19.uid)(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs13.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null\n };\n const functionCallOutput = items.find((i) => i.type === \"function_call_output\" && i.call_id === item.call_id);\n const toolCall = {\n id: item.call_id,\n type: \"function\",\n function: {\n name: item.name,\n arguments: item.arguments,\n output: serializeFunctionCallOutput({ functionCallOutput })\n }\n };\n return {\n ...base,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsImageGenerationRunStep.ts\nvar import_dayjs14 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus2 = ({\n item\n}) => {\n if (item.result !== null) {\n return \"completed\";\n }\n if (item.status === \"generating\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeItemAsImageGenerationRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs14.default)().unix(),\n status: status3 = serializeStatus2({ item })\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"image_generation\",\n arguments: \"{}\",\n output: JSON.stringify({\n status: item.status,\n // @ts-expect-error bad openai types\n background: item.background,\n // @ts-expect-error bad openai types\n output_format: item.output_format,\n // @ts-expect-error bad openai types\n quality: item.quality,\n result: item.result,\n // @ts-expect-error bad openai types\n size: item.size,\n // @ts-expect-error bad openai types\n revised_prompt: item.revised_prompt\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs14.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsWebSearchRunStep.ts\nvar import_dayjs15 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus3 = ({\n item\n}) => {\n if (item.status === \"searching\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeItemAsWebSearchRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs15.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"web_search\",\n arguments: JSON.stringify({\n // @ts-expect-error bad openai types\n action: item.action\n }),\n output: JSON.stringify({\n status: item.status\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs15.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus3({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsMcpListToolsRunStep.ts\nvar import_dayjs16 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus4 = ({\n item\n}) => {\n if (item.error) {\n return \"failed\";\n }\n return \"completed\";\n};\nvar serializeItemAsMcpListToolsRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs16.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"mcp_list_tools\",\n arguments: JSON.stringify({\n server_label: item.server_label\n }),\n output: JSON.stringify({\n tools: item.tools,\n ...item.error && { error: item.error }\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs16.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus4({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsMcpCallRunStep.ts\nvar import_dayjs17 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus5 = ({\n item\n}) => {\n if (item.error) {\n return \"failed\";\n }\n return \"completed\";\n};\nvar serializeItemAsMcpCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs17.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: item.name,\n arguments: item.arguments,\n // @ts-expect-error compat\n server_label: item.server_label,\n output: item.output ?? item.error ?? null\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs17.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus5({ item }),\n last_error: item.error ? { code: \"server_error\", message: item.error } : null,\n expired_at: null,\n cancelled_at: null,\n failed_at: item.error ? (0, import_dayjs17.default)().unix() : null,\n completed_at: item.error ? null : completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsCodeInterpreterCallRunStep.ts\nvar import_dayjs18 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus6 = ({\n item\n}) => {\n if (item.status === \"incomplete\") {\n return \"in_progress\";\n } else if (item.status === \"interpreting\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeOutput = ({\n output\n}) => {\n return {\n type: output.type,\n logs: output.logs\n };\n};\nvar serializeOutputs = ({\n item\n}) => {\n if (!item.outputs) return [];\n return item.outputs.filter((o) => o.type === \"logs\").map((output) => serializeOutput({ output }));\n};\nvar serializeItemAsCodeInterpreterCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs18.default)().unix()\n}) => {\n const toolCall = {\n id: `citc${item.id}`,\n type: \"code_interpreter\",\n code_interpreter: {\n input: item.code ?? \"\",\n outputs: serializeOutputs({ item })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs18.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus6({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {\n item: JSON.stringify(item)\n },\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsComputerCallRunStep.ts\nvar import_dayjs19 = __toESM(require(\"dayjs\"), 1);\nvar import_radash20 = require(\"radash\");\nvar serializeItemAsComputerCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${(0, import_radash20.uid)(24)}`,\n status: status3 = \"completed\",\n completedAt = (0, import_dayjs19.default)().unix()\n}) => {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${(0, import_radash20.uid)(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs19.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: status3,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null\n };\n const computerCallOutput2 = items.find((i) => i.type === \"computer_call_output\" && i.call_id === item.call_id);\n const toolCall = {\n id: item.call_id,\n type: \"function\",\n function: {\n name: \"computer_call\",\n arguments: JSON.stringify({\n action: item.action,\n pending_safety_checks: item.pending_safety_checks\n }),\n output: computerCallOutput2 ? JSON.stringify(computerCallOutput2.output) : null\n }\n };\n return {\n ...base,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/lib/items/serializeItemAsReasoningRunStep.ts\nvar import_dayjs20 = __toESM(require(\"dayjs\"), 1);\nvar serializeStatus7 = ({\n item,\n completedAt\n}) => {\n if (!item.status) {\n if (completedAt) {\n return \"completed\";\n } else {\n return \"in_progress\";\n }\n }\n if (item.status === \"incomplete\") {\n return \"in_progress\";\n }\n return item.status;\n};\nvar serializeItemAsReasoningRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = (0, import_dayjs20.default)().unix()\n}) => {\n const toolCall = {\n id: `ftc${item.id}`,\n type: \"function\",\n function: {\n name: \"reasoning\",\n arguments: \"{}\",\n output: JSON.stringify({\n summary: item.summary,\n content: item.content,\n encrypted_content: item.encrypted_content\n })\n }\n };\n return {\n id: `fc${item.id}`,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs20.default)().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus7({ item, completedAt }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: \"tool_calls\",\n step_details: {\n type: \"tool_calls\",\n tool_calls: [toolCall]\n }\n };\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts\nvar get17 = ({\n client,\n runAdapter\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const response = await client.responses.retrieve(runId);\n const latestToolCallItem = response.output.findLast((item) => item.type === \"function_call\");\n let functionCallOutputItems = [];\n let computerCallOutputItems = [];\n if (latestToolCallItem) {\n const items = await client.conversations.items.list(threadId, {\n after: latestToolCallItem.id,\n order: \"asc\",\n limit: 20\n });\n functionCallOutputItems = items.data.filter((item) => item.type === \"function_call_output\");\n computerCallOutputItems = items.data.filter((item) => item.type === \"computer_call_output\");\n }\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } });\n const data = response.output.flatMap((item) => {\n const step = serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId: response.id\n });\n if (item.type === \"function_call\") {\n return [\n serializeItemAsFunctionCallRunStep({\n item,\n items: functionCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"computer_call\") {\n return [\n serializeItemAsComputerCallRunStep({\n item,\n items: computerCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"reasoning\") {\n return [\n serializeItemAsReasoningRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"image_generation_call\") {\n return [\n step,\n serializeItemAsImageGenerationRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n })\n ];\n } else if (item.type === \"web_search_call\") {\n return [\n serializeItemAsWebSearchRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"mcp_list_tools\") {\n return [\n serializeItemAsMcpListToolsRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"mcp_call\") {\n return [\n serializeItemAsMcpCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n } else if (item.type === \"code_interpreter_call\") {\n return [\n serializeItemAsCodeInterpreterCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id\n }),\n step\n ];\n }\n return [step];\n });\n return new Response(JSON.stringify({\n data,\n has_more: false,\n last_id: (0, import_radash21.last)(response.output)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/index.ts\nvar steps2 = ({\n client,\n runAdapter\n}) => ({\n get: get17({ client, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar serializeTools3 = ({\n tools\n}) => {\n if (!tools?.length) return {};\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...tool[tool.type] || {}\n }))\n };\n};\nvar computerCallOutput = ({\n toolOutput\n}) => {\n if (typeof toolOutput.output !== \"string\") return { isComputerCallOutput: false };\n let parsedOutput;\n try {\n parsedOutput = JSON.parse(toolOutput.output);\n } catch {\n return { isComputerCallOutput: false };\n }\n if (typeof parsedOutput !== \"object\" || parsedOutput === null) return { isComputerCallOutput: false };\n if (parsedOutput.type !== \"computer_screenshot\") return { isComputerCallOutput: false };\n return {\n isComputerCallOutput: true,\n parsedOutput\n };\n};\nvar getToolCallOutputItems = ({\n tool_outputs\n}) => {\n const functionCallOutputItems = [];\n const computerCallOutputItems = [];\n tool_outputs.forEach((toolOutput) => {\n const { isComputerCallOutput, parsedOutput } = computerCallOutput({ toolOutput });\n if (isComputerCallOutput) {\n computerCallOutputItems.push({\n type: \"computer_call_output\",\n call_id: toolOutput.tool_call_id,\n output: parsedOutput,\n // @ts-expect-error compat\n acknowledged_safety_checks: toolOutput.acknowledged_safety_checks ?? []\n });\n } else {\n functionCallOutputItems.push({\n type: \"function_call_output\",\n call_id: toolOutput.tool_call_id,\n output: toolOutput.output ?? \"\"\n });\n }\n });\n return {\n functionCallOutputItems,\n computerCallOutputItems\n };\n};\nvar truncation2 = ({\n openaiAssistant\n}) => {\n if (openaiAssistant.truncation_strategy?.type === \"disabled\") {\n return \"disabled\";\n }\n return \"auto\";\n};\nvar post18 = ({\n client,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp));\n const body = JSON.parse(options.body);\n const {\n tool_outputs,\n stream\n } = body;\n const toolCallOutputItems = getToolCallOutputItems({ tool_outputs });\n const input = [...toolCallOutputItems.functionCallOutputItems, ...toolCallOutputItems.computerCallOutputItems];\n const previousResponse = await client.responses.retrieve(runId);\n const openaiAssistant = await runAdapter.getOpenaiAssistant();\n const response = await client.responses.create({\n conversation: threadId,\n input,\n instructions: openaiAssistant.instructions,\n model: openaiAssistant.model,\n // metadata,\n stream,\n ...serializeTools3({ tools: openaiAssistant.tools }),\n truncation: truncation2({ openaiAssistant })\n // text: response_format,\n });\n const readableStream = new ReadableStream({\n async start(controller) {\n toolCallOutputItems.functionCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => i.type === \"function_call\" && i.call_id === item.call_id);\n if (!toolCallItem) {\n return;\n }\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeItemAsFunctionCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.functionCallOutputItems,\n threadId,\n openaiAssistant,\n runId\n })\n })}\n\n`);\n });\n toolCallOutputItems.computerCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => i.type === \"computer_call\" && i.call_id === item.call_id);\n if (!toolCallItem) {\n return;\n }\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeItemAsComputerCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.computerCallOutputItems,\n threadId,\n openaiAssistant,\n runId\n })\n })}\n\n`);\n });\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => controller.enqueue(`data: ${JSON.stringify(event)}\n\n`)\n });\n controller.close();\n }\n });\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/submitToolOutputs/index.ts\nvar submitToolOutputs2 = ({\n client,\n runAdapter\n}) => ({\n post: post18({\n client,\n runAdapter\n })\n});\n\n// src/adapters/storage/responsesStorageAdapter/assistants/get.ts\nvar get18 = ({\n runAdapter\n}) => async (_urlString) => {\n return new Response(JSON.stringify({\n data: [await runAdapter.getOpenaiAssistant()],\n has_more: false,\n last_id: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/assistants/post.ts\nvar post19 = () => async () => new Response(\n JSON.stringify({\n error: {\n message: \"Assistant creation is not implemented for the Responses storage adapter.\",\n type: \"not_implemented\"\n }\n }),\n {\n status: 501,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }\n);\n\n// src/adapters/storage/responsesStorageAdapter/assistants/index.ts\nvar assistants2 = ({\n runAdapter\n}) => ({\n get: get18({ runAdapter }),\n post: post19()\n});\n\n// src/adapters/storage/responsesStorageAdapter/index.ts\nvar responsesStorageAdapter = () => {\n const createResponseItems = [];\n return ({ runAdapter, client }) => ({\n requestHandlers: {\n \"^/(?:v1|/?openai)/assistants$\": assistants2({ runAdapter }),\n \"^/(?:v1|/?openai)/threads$\": threads2({ client }),\n [messagesRegexp]: messages3({ client, runAdapter, createResponseItems }),\n [runsRegexp]: runs2({ client, runAdapter, createResponseItems }),\n [runRegexp]: run2({ client, runAdapter }),\n [stepsRegexp]: steps2({ client, runAdapter }),\n [submitToolOutputsRegexp]: submitToolOutputs2({ client, runAdapter })\n }\n });\n};\n\n// src/adapters/run/responsesRunAdapter/index.ts\nvar import_dayjs21 = __toESM(require(\"dayjs\"), 1);\nvar import_radash22 = require(\"radash\");\nvar serializeToolCalls2 = ({\n toolCalls\n}) => toolCalls.map((toolCall) => {\n if (toolCall.type === \"function_call\") {\n return {\n id: toolCall.call_id,\n type: \"function\",\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments\n }\n };\n } else if (toolCall.type === \"computer_call\") {\n return {\n id: toolCall.call_id,\n type: \"computer_call\",\n computer_call: {\n action: toolCall.action,\n pending_safety_checks: toolCall.pending_safety_checks\n }\n };\n }\n});\nvar responsesRunAdapter = ({\n getOpenaiAssistant: getDirectOpenaiAssistant,\n waitUntil = (p) => p.then(() => {\n })\n}) => {\n let cachedOpenaiAssistant = null;\n const getOpenaiAssistant = async ({ select: { id = false } = {} } = {}) => {\n const args = { select: { id } };\n if (args.select.id) {\n return {\n id: (await getDirectOpenaiAssistant({ select: { id: true } })).id\n };\n }\n if (cachedOpenaiAssistant) return cachedOpenaiAssistant;\n cachedOpenaiAssistant = await getDirectOpenaiAssistant();\n return cachedOpenaiAssistant;\n };\n const handleRun = async ({\n client,\n threadId,\n response,\n onEvent: onEvent2\n }) => {\n let responseCreatedResponse = null;\n const toolCalls = {};\n const mcpCalls = {};\n const codeInterpreterCalls = {};\n let itemIds = [];\n try {\n for await (const event of response) {\n switch (event.type) {\n case \"response.created\":\n responseCreatedResponse = event.response;\n await onEvent2({\n event: \"thread.run.created\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n break;\n case \"response.in_progress\":\n await onEvent2({\n event: \"thread.run.in_progress\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n break;\n case \"response.completed\": {\n itemIds = event.response.output.filter((o) => o.id).map((o) => o.id);\n const toolCalls2 = event.response.output.filter((o) => o.type === \"function_call\" || o.type === \"computer_call\");\n if (toolCalls2.length > 0) {\n await onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n }),\n ...{\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: [\n ...serializeToolCalls2({\n toolCalls: toolCalls2\n })\n ]\n }\n }\n }\n }\n });\n } else {\n await onEvent2({\n event: \"thread.run.completed\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n }\n break;\n }\n case \"response.failed\": {\n await onEvent2({\n event: \"thread.run.failed\",\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id\n })\n });\n break;\n }\n case \"response.output_text.delta\": {\n await onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: event.item_id,\n delta: {\n content: [{ type: \"text\", index: event.content_index, text: { value: event.delta } }]\n }\n }\n });\n break;\n }\n // case 'response.output_text.done': {\n // break\n // }\n //\n case \"response.output_item.added\": {\n if (event.item.type === \"message\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n } else if (event.item.type === \"function_call\") {\n toolCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"computer_call\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsComputerCallRunStep({\n item: event.item,\n items: [],\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"image_generation_call\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n } else if (event.item.type === \"reasoning\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"web_search_call\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"mcp_list_tools\") {\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"mcp_call\") {\n mcpCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n } else if (event.item.type === \"code_interpreter_call\") {\n codeInterpreterCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.run.step.created\",\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id,\n completedAt: null\n })\n });\n }\n if (event.item.id) itemIds.push(event.item.id);\n break;\n }\n case \"response.output_item.done\": {\n if (event.item.type === \"message\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"function_call\") {\n toolCalls[event.item.id] = event.item;\n await onEvent2({\n event: \"thread.run.step.in_progress\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"image_generation_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"reasoning\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"web_search_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"mcp_list_tools\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"mcp_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n } else if (event.item.type === \"code_interpreter_call\") {\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.run.step.completed\",\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse.id\n })\n });\n await onEvent2({\n event: \"thread.message.completed\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: (0, import_dayjs21.default)().unix(),\n runId: responseCreatedResponse.id\n })\n });\n }\n break;\n }\n case \"response.function_call_arguments.delta\": {\n const toolCall = toolCalls[event.item_id];\n if (!toolCall) break;\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n id: event.item_id,\n object: \"thread.run.step.delta\",\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: [\n {\n id: toolCall.call_id,\n type: \"function\",\n index: event.output_index,\n function: {\n name: toolCall.name,\n arguments: event.delta,\n output: null\n }\n }\n ]\n }\n }\n }\n });\n break;\n }\n case \"response.mcp_call_arguments.delta\": {\n const mcpCall = mcpCalls[event.item_id];\n if (!mcpCall) break;\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n id: `fc${event.item_id}`,\n object: \"thread.run.step.delta\",\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: [\n {\n id: `ftc${mcpCall.id}`,\n type: \"function\",\n index: event.output_index,\n function: {\n name: mcpCall.name,\n arguments: event.delta,\n output: null\n }\n }\n ]\n }\n }\n }\n });\n break;\n }\n case \"response.image_generation_call.in_progress\":\n case \"response.image_generation_call.generating\":\n await onEvent2({\n event: \"thread.message.in_progress\",\n data: {\n id: event.item_id,\n object: \"thread.message\",\n created_at: (0, import_dayjs21.default)().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: \"assistant\",\n content: [],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse.id,\n attachments: [],\n status: \"in_progress\",\n metadata: {\n event: JSON.stringify(event)\n }\n }\n });\n break;\n case \"response.image_generation_call.partial_image\": {\n await onEvent2({\n event: \"thread.message.in_progress\",\n data: {\n id: event.item_id,\n object: \"thread.message\",\n created_at: (0, import_dayjs21.default)().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: \"assistant\",\n content: [{\n type: \"image_url\",\n image_url: {\n url: `data:image/png;base64,${event.partial_image_b64}`,\n // url: `data:image/png;base64,truncated`,\n detail: \"auto\"\n }\n }],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse.id,\n attachments: [],\n status: \"in_progress\",\n metadata: {\n event: JSON.stringify({\n ...event,\n partial_image_b64: \"truncated\"\n })\n }\n }\n });\n break;\n }\n //\n // case 'response.function_call_arguments.done': {\n // break\n // }\n default:\n break;\n }\n }\n } catch (e) {\n await onEvent2({\n event: \"thread.run.failed\",\n data: {\n id: responseCreatedResponse?.id || `run_${(0, import_radash22.uid)(18)}`,\n object: \"thread.run\",\n thread_id: threadId,\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n status: \"failed\",\n failed_at: (0, import_dayjs21.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: String(e?.message || e || \"Unknown error\")\n }\n }\n });\n } finally {\n waitUntil(new Promise(async (resolve) => {\n if (responseCreatedResponse?.id && itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: responseCreatedResponse.id,\n itemIds\n });\n }\n resolve(true);\n }));\n }\n };\n return {\n handleRun,\n getOpenaiAssistant\n };\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n anthropicClientAdapter,\n azureOpenaiClientAdapter,\n completionsRunAdapter,\n googleClientAdapter,\n groqClientAdapter,\n humirisClientAdapter,\n mistralClientAdapter,\n ollamaClientAdapter,\n openaiClientAdapter,\n perplexityClientAdapter,\n prismaStorageAdapter,\n responsesRunAdapter,\n responsesStorageAdapter,\n supercompat,\n togetherClientAdapter\n});\n","export { supercompat } from './supercompat'\nexport { groqClientAdapter } from './adapters/client/groqClientAdapter'\nexport { openaiClientAdapter } from './adapters/client/openaiClientAdapter'\nexport { azureOpenaiClientAdapter } from './adapters/client/azureOpenaiClientAdapter'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { anthropicClientAdapter } from './adapters/client/anthropicClientAdapter'\nexport { togetherClientAdapter } from './adapters/client/togetherClientAdapter'\nexport { googleClientAdapter } from './adapters/client/googleClientAdapter'\nexport { humirisClientAdapter } from './adapters/client/humirisClientAdapter'\nexport { ollamaClientAdapter } from './adapters/client/ollamaClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\nexport { responsesStorageAdapter } from './adapters/storage/responsesStorageAdapter'\nexport { responsesRunAdapter } from './adapters/run/responsesRunAdapter'\n","import OpenAI, { AzureOpenAI } from 'openai'\nimport { supercompatFetch, type Args } from './supercompatFetch'\nimport { endpointFromBaseUrl } from '@/lib/azureOpenai/endpointFromBaseUrl'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n if (client.type === 'AZURE_OPENAI') {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n }\n\n return new OpenAI({\n apiKey: 'SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY',\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n}\n","import { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\nimport { supercompat } from '@/supercompat'\n\nconst storageRequestHandlers = ({\n storage,\n runAdapter,\n client,\n}: {\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n client: any\n}) => {\n if (!storage) return {}\n if (!runAdapter) return {}\n\n const wrappedClient = supercompat({\n client,\n })\n\n const result = storage({\n runAdapter: {\n ...runAdapter,\n handleRun: partob(runAdapter.handleRun, { client: wrappedClient }),\n },\n client: wrappedClient,\n })\n return result.requestHandlers\n}\n\nexport const requestHandlers = ({\n client,\n storage,\n runAdapter,\n}: {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}) => (\n assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client,\n })\n )\n)\n","export const findRequestHandler = ({\n url,\n requestHandlers,\n}: {\n url: string\n requestHandlers: any\n}) => {\n const pathname = new URL(url).pathname\n\n for (const key in requestHandlers) {\n const regex = new RegExp(key)\n\n if (regex.test(pathname)) {\n return requestHandlers[key]\n }\n }\n}\n","export const originalFetch = async ({\n args,\n client,\n}: {\n args: any[]\n client: any\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args\n\n const clientHeaders = await client.client.buildHeaders({\n options: {},\n method: args[1].method.toLowerCase(),\n bodyHeaders: args[1].headers,\n retryCount: 0,\n })\n\n clientHeaders.set('Authorization', `Bearer ${client.client.apiKey}`)\n\n const newOptions = {\n ...options,\n headers: clientHeaders,\n }\n\n return client.client.fetch(url, newOptions)\n } else {\n // @ts-ignore-next-line\n return fetch(...args)\n }\n}\n","import { RunAdapter, StorageAdapterArgs } from '@/types'\nimport { requestHandlers as getRequestHandlers } from './requestHandlers'\nimport { findRequestHandler } from './findRequestHandler'\nimport { originalFetch } from './originalFetch'\n\nexport type Args = {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}\n\nexport const supercompatFetch = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n const requestHandlers = getRequestHandlers({\n client,\n storage,\n runAdapter,\n })\n\n return async (...args: any[]) => {\n const [url, options] = args\n\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\n })\n\n if (!pathHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n const method = options?.method ?? ''\n\n const requestHandler = pathHandler[method.toLowerCase()]\n\n if (!requestHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n return requestHandler(...args)\n }\n}\n","export const endpointFromBaseUrl = ({\n baseURL\n}: {\n baseURL: string\n}) => (\n baseURL.replace(/\\/+openai$/, '')\n)\n","import type Groq from 'groq-sdk'\n\nexport const get = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, _options: any) => {\n try {\n const data = await groq.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type Groq from 'groq-sdk'\nimport { get } from './get'\n\nexport const models = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n get: get({ groq }),\n})\n","import type Groq from 'groq-sdk'\n\nexport const post = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await groq.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await groq.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type Groq from 'groq-sdk'\nimport { post } from './post'\n\nexport const completions = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n post: post({ groq }),\n})\n","// import type Groq from 'groq-sdk'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const groqClientAdapter = ({\n groq,\n}: {\n // TODO\n groq: any\n}) => ({\n client: groq,\n requestHandlers: {\n '^/v1/models$': models({ groq }),\n '^/v1/chat/completions$': completions({ groq }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await openai.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n get: get({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { systemDeveloperMessages } from '@/lib/messages/systemDeveloperMessages'\nimport { isOModel } from '@/lib/models/isOModel'\n\nconst omitKeys = ({\n model,\n}: {\n model: string\n}) => {\n if (isOModel({ model })) {\n return ['tools']\n }\n\n return []\n}\n\nexport const post = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const messages = body.messages as OpenAI.ChatCompletionMessageParam[]\n\n const resultOptions = {\n ...omit(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages,\n model: body.model,\n }),\n } as OpenAI.Chat.ChatCompletionCreateParams\n\n if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await openai.chat.completions.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","export const isOModel = ({ model }: { model: string }) => (\n model.startsWith('o1') || model.startsWith('o3')\n)\n","import type OpenAI from 'openai'\nimport { isOModel } from '@/lib/models/isOModel'\n\nexport const systemDeveloperMessages = ({\n messages,\n model,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n model: string\n}): OpenAI.Chat.ChatCompletionMessageParam[] => {\n if (isOModel({ model })) {\n return messages.map((message) => {\n if (message.role === 'system') {\n return {\n ...message,\n // TODO: This should be 'developer' but we're using 'user' for now\n // role: 'developer',\n role: 'user',\n }\n }\n\n return message\n })\n }\n\n return messages\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const openaiClientAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n client: openai,\n requestHandlers: {\n '^/v1/models$': models({ openai }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ openai }),\n },\n})\n","import type { AzureOpenAI } from 'openai'\nimport { completions } from '@/adapters/client/openaiClientAdapter/completions'\n\nexport const azureOpenaiClientAdapter = ({\n azureOpenai,\n}: {\n azureOpenai: AzureOpenAI\n}) => ({\n type: 'AZURE_OPENAI',\n client: azureOpenai,\n requestHandlers: {\n '^/(?:v1|/?openai)/chat/completions$': completions({\n openai: azureOpenai,\n }),\n },\n})\n","import type { Mistral } from '@mistralai/mistralai'\n\nexport const get = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, _options: any) => {\n try {\n const data = await mistral.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { get } from './get'\n\nexport const models = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n get: get({ mistral }),\n})\n","const serializeDelta = ({\n delta: {\n toolCalls,\n ...rest\n },\n}: {\n delta: any\n}) => ({\n ...rest,\n ...(toolCalls ? {\n tool_calls: toolCalls,\n } : {}),\n})\n\nconst serializeChoice = ({\n choice: {\n finishReason,\n delta,\n ...rest\n },\n}: {\n choice: any\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta }),\n})\n\nexport const serializeChunk = ({\n chunk,\n}: {\n chunk: any\n}) => ({\n ...chunk.data,\n ...(chunk.data.choices ? {\n choices: chunk.data.choices.map((choice: any) => (\n serializeChoice({ choice })\n )),\n }: {}),\n})\n","import type OpenAI from 'openai'\n\nconst serializeMessage = ({\n message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n },\n}: {\n message: OpenAI.ChatCompletionMessageParam\n}) => ({\n ...rest,\n ...(tool_call_id ? {\n toolCallId: tool_call_id,\n } : {}),\n ...(tool_calls ? {\n toolCalls: tool_calls,\n } : {}),\n})\n\nexport const serializeBody = ({\n body,\n}: {\n body: any\n}) => ({\n ...body,\n messages: body.messages.map((message: OpenAI.ChatCompletionMessageParam) => (\n serializeMessage({\n message,\n })\n )),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { serializeChunk } from './serializeChunk'\nimport { serializeBody } from './serializeBody'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const serializedBody = serializeBody({\n body,\n })\n\n if (body.stream) {\n const response = await mistral.chat.stream(serializedBody)\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n const serializedChunk = serializeChunk({\n chunk,\n })\n\n controller.enqueue(`data: ${JSON.stringify(serializedChunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await mistral.chat.complete(serializedBody)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { post } from './post'\n\nexport const completions = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n post: post({ mistral }),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n '^/v1/models$': models({ mistral }),\n '^/v1/chat/completions$': completions({ mistral }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'sonar-reasoning-pro',\n 'sonar-reasoning',\n 'sonar-pro',\n 'sonar',\n 'r1-1776',\n 'llama-3.1-sonar-small-128k-online',\n 'llama-3.1-sonar-large-128k-online',\n 'llama-3.1-sonar-huge-128k-online',\n]\n\nexport const get = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n get: get({ perplexity }),\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const alternatingMessages = ({\n messages,\n}: {\n messages: OpenAI.ChatCompletionMessageParam[]\n}): OpenAI.ChatCompletionMessageParam[] => {\n const result: OpenAI.ChatCompletionMessageParam[] = []\n\n messages.forEach((message, index: number) => {\n result.push(message)\n\n const nextMessage = messages[index + 1]\n if (!nextMessage) return\n\n if (message.role === 'user' && nextMessage.role === 'user') {\n result.push({\n role: 'assistant',\n content: '-',\n } as OpenAI.ChatCompletionMessageParam)\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n result.push({\n role: 'user',\n content: '-',\n } as OpenAI.ChatCompletionMessageParam)\n }\n })\n\n return result\n}\n","import type OpenAI from 'openai'\nimport { alternatingMessages } from '@/lib/messages/alternatingMessages'\n\nexport const post = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n const messages = alternatingMessages({\n messages: body.messages,\n })\n\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages,\n })\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await perplexity.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n post: post({ perplexity }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n client: perplexity,\n requestHandlers: {\n '^/v1/models$': models({ perplexity }),\n '^/v1/chat/completions$': completions({ perplexity }),\n },\n})\n","import type Anthropic from '@anthropic-ai/sdk'\n\nexport const get = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => async (_url: string, _options: any) => {\n try {\n const response = await anthropic.models.list()\n\n return new Response(JSON.stringify({\n type: 'list',\n data: response.data.map((model) => ({\n id: model.id,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type Anthropic from '@anthropic-ai/sdk'\nimport { get } from './get'\n\nexport const models = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n get: get({ anthropic }),\n})\n","import type Anthropic from '@anthropic-ai/sdk'\nimport type OpenAI from 'openai'\nimport { uid, fork, omit, isEmpty } from 'radash'\nimport { nonEmptyMessages } from '@/lib/messages/nonEmptyMessages'\nimport { alternatingMessages } from '@/lib/messages/alternatingMessages'\nimport { firstUserMessages } from '@/lib/messages/firstUserMessages'\nimport { serializeTools } from './serializeTools'\nimport { serializeMessages } from './serializeMessages'\n\nexport const post = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n const messages = body.messages as OpenAI.ChatCompletionMessageParam[]\n const [systemMessages, otherMessages] = fork(messages, (message) => message.role === 'system')\n const system = systemMessages.map((message) => message.content).join('\\n')\n\n const chatMessages = nonEmptyMessages({\n messages: firstUserMessages({\n messages: alternatingMessages({\n messages: otherMessages,\n }),\n }),\n })\n\n const resultOptions = {\n ...omit(body, ['response_format']),\n stream: body.stream ? isEmpty(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages,\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools,\n }),\n }\n\n if (body.stream) {\n // @ts-ignore-next-line\n const response = await anthropic.messages.stream(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === 'content_block_delta') {\n let delta: { tool_calls?: any; content?: string | null }\n\n if (chunk.delta.type === 'input_json_delta') {\n delta = {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json,\n },\n },\n ],\n }\n } else if ('text' in chunk.delta) {\n delta = {\n content: chunk.delta.text,\n }\n } else {\n delta = {\n content: '',\n }\n }\n\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: chunk.index,\n delta,\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n } else if (chunk.type === 'content_block_start') {\n let delta: { content: string | null; tool_calls?: any }\n\n if (chunk.content_block.type === 'tool_use') {\n delta = {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: 'function',\n function: {\n name: chunk.content_block.name,\n arguments: '',\n },\n },\n ],\n }\n } else if ('text' in chunk.content_block) {\n delta = {\n content: chunk.content_block.text,\n }\n } else {\n delta = {\n content: '',\n }\n }\n\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: chunk.index,\n delta,\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n } else if (chunk.type === 'message_start') {\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: 0,\n delta: {\n content: '',\n },\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n }\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n // @ts-ignore-next-line\n const data = await anthropic.messages.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\n\nconst nonEmptyContent = ({\n message,\n}: {\n message: OpenAI.Chat.ChatCompletionMessageParam\n}): OpenAI.Chat.ChatCompletionMessageParam['content'] => {\n if (message.content == null) {\n return '-'\n }\n\n if (typeof message.content === 'string') {\n if (!/\\S/.test(message.content)) {\n return '-'\n }\n }\n\n return message.content as OpenAI.Chat.ChatCompletionMessageParam[\"content\"]\n}\n\ntype ExtendedRole = OpenAI.Chat.ChatCompletionMessageParam['role'] | 'developer'\n\ntype ExtendedMessageParam = Omit<OpenAI.Chat.ChatCompletionMessageParam, 'role'> & {\n role: ExtendedRole\n}\n\nexport const nonEmptyMessages = ({\n messages,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n}) => {\n const result = [] as ExtendedMessageParam[]\n\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam) => (\n result.push({\n ...message,\n content: nonEmptyContent({ message }),\n } as ExtendedMessageParam)\n ))\n\n return result as OpenAI.Chat.ChatCompletionMessageParam[]\n}\n","import type OpenAI from 'openai'\n\nexport const firstUserMessages = ({\n messages,\n}: {\n messages: OpenAI.ChatCompletionMessageParam[]\n}): OpenAI.ChatCompletionMessageParam[] => {\n const firstMessage = messages[0]\n if (!firstMessage) return messages\n\n if (firstMessage.role !== 'user') {\n return [\n {\n role: 'user',\n content: '-',\n } as OpenAI.ChatCompletionMessageParam,\n ...messages,\n ]\n }\n\n return messages\n}\n","import type OpenAI from 'openai'\n\nexport const serializeTools = ({\n tools,\n}: {\n tools: OpenAI.Beta.AssistantTool[] | undefined\n}) => (\n (tools ?? []).map((tool: OpenAI.Beta.AssistantTool) => {\n if (tool.type === 'function') {\n return {\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters ?? {\n type: 'object',\n },\n }\n }\n\n return tool\n })\n)\n","import type OpenAI from 'openai'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.ChatCompletionMessageParam\n}) => {\n if (message.role === 'user') {\n return {\n role: 'user',\n content: message.content,\n }\n } else if (message.role === 'assistant') {\n return {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: message.content,\n },\n ...(message.tool_calls ?? []).map((toolCall) => ({\n type: 'tool_use',\n id: toolCall.id,\n // @ts-expect-error todo\n name: toolCall.function.name,\n // @ts-expect-error todo\n input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {},\n })),\n ],\n }\n } else if (message.role === 'tool') {\n return {\n role: 'user',\n content: [\n {\n type: 'tool_result',\n tool_use_id: message.tool_call_id,\n content: message.content,\n },\n ],\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { serializeMessage } from './serializeMessage'\n\nexport const serializeMessages = ({\n messages,\n}: {\n messages: OpenAI.ChatCompletionMessageParam[]\n}) => (\n messages.map(message => (\n serializeMessage({\n message,\n })\n ))\n)\n","import type Anthropic from '@anthropic-ai/sdk'\nimport { post } from './post'\n\nexport const completions = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n post: post({ anthropic }),\n})\n","import type Anthropic from '@anthropic-ai/sdk'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const anthropicClientAdapter = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n '^/v1/models$': models({ anthropic }),\n '^/v1/chat/completions$': completions({ anthropic }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n together,\n}: {\n together: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await together.models.list()\n\n return new Response(JSON.stringify({\n type: 'list',\n // @ts-ignore-next-line\n data: data.body,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n together,\n}: {\n together: OpenAI\n}) => ({\n get: get({ together }),\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n together,\n}: {\n together: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await together.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await together.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n together,\n}: {\n together: OpenAI\n}) => ({\n post: post({ together }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const togetherClientAdapter = ({\n together,\n}: {\n together: OpenAI\n}) => ({\n client: together,\n requestHandlers: {\n '^/v1/models$': models({ together }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ together }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'gemini-2.5-flash-preview-04-17',\n 'gemini-2.5-pro-preview-03-25',\n 'gemini-2.0-flash',\n 'gemini-2.0-flash-lite',\n 'gemini-1.5-flash',\n 'gemini-1.5-flash-8b',\n 'gemini-1.5-pro',\n]\n\nexport const get = ({\n google,\n}: {\n google: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n google,\n}: {\n google: OpenAI\n}) => ({\n get: get({ google }),\n})\n","import type OpenAI from 'openai'\nimport { createId } from '@paralleldrive/cuid2'\nimport { nonEmptyMessages } from '@/lib/messages/nonEmptyMessages'\n\nexport const post = ({\n google,\n}: {\n google: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n const resultOptions = {\n ...body,\n messages: nonEmptyMessages({\n messages: body.messages,\n }),\n }\n\n if (body.stream) {\n const response = await google.chat.completions.create(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n let resultChunk\n\n if (chunk.choices) {\n const newChoices = chunk.choices.map((choice: any) => {\n if (choice.delta?.tool_calls) {\n return {\n ...choice,\n delta: {\n ...choice.delta,\n tool_calls: choice.delta.tool_calls.map((toolCall: any) => {\n if (toolCall.id === '') {\n return {\n ...toolCall,\n id: `call_${createId()}`,\n }\n }\n\n return toolCall\n }),\n },\n }\n } else {\n return choice\n }\n })\n\n resultChunk = {\n ...chunk,\n choices: newChoices,\n }\n } else {\n resultChunk = chunk\n }\n\n controller.enqueue(`data: ${JSON.stringify(resultChunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await google.chat.completions.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n google,\n}: {\n google: OpenAI\n}) => ({\n post: post({ google }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const googleClientAdapter = ({\n google,\n}: {\n google: OpenAI\n}) => ({\n client: google,\n requestHandlers: {\n '^/v1/models$': models({ google }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ google }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'Humiris/humiris-moai',\n]\n\nexport const get = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => ({\n get: get({ humiris }),\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const data = await humiris.chat.completions.create({\n ...body,\n stream: false,\n })\n\n const stream = new ReadableStream({\n async start(controller) {\n const chunk = {\n id: data.id,\n object: 'chat.completion.chunk',\n created: data.created,\n model: data.created,\n choices: [\n {\n index: 0,\n delta: {\n role: data.choices[0].message.role,\n content: data.choices[0].message.content,\n },\n logprobs: null,\n finish_reason: data.choices[0].finish_reason,\n }\n ]\n }\n\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await humiris.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => ({\n post: post({ humiris }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const humirisClientAdapter = ({\n humiris,\n}: {\n humiris: OpenAI\n}) => ({\n client: humiris,\n requestHandlers: {\n '^/v1/models$': models({ humiris }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ humiris }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await ollama.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => ({\n get: get({ ollama }),\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await ollama.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await ollama.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => ({\n post: post({ ollama }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const ollamaClientAdapter = ({\n ollama,\n}: {\n ollama: OpenAI\n}) => ({\n client: ollama,\n requestHandlers: {\n '^/v1/models$': models({ ollama }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ ollama }),\n },\n})\n","import _ from 'lodash'\nimport { uid, omit, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport 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 = () => {\n return {\n handleRun: 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 response_format: run.response_format,\n ...(isEmpty(run.tools) ? {} : { tools: run.tools }),\n } as OpenAI.ChatCompletionCreateParamsStreaming\n\n let providerResponse\n\n try {\n providerResponse = await client.chat.completions.create(opts)\n } catch(e: any) {\n console.error(e)\n\n return onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: {\n code: 'server_error',\n message: `${e?.message ?? ''} ${e?.cause?.message ?? ''}`,\n },\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 attachments: [],\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 for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? []\n const choice = choices[0]\n if (!choice) continue\n\n const delta = choice.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 }\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'\nimport { isArray, isObject } from 'radash'\n\ntype ToolCall = OpenAI.Beta.Threads.Runs.Steps.ToolCall\n\nconst validToolCallContentTypes = [\n 'image',\n 'text',\n]\n\nconst serializeToolContent = ({\n toolCall,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\n}) => {\n if (isArray(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!isObject(toolPart)) return false\n\n return validToolCallContentTypes.includes((toolPart as any).type)\n })\n\n if (isEveryToolPartValid) {\n return toolCall.function.output\n }\n\n return JSON.stringify(toolCall.function.output)\n }\n\n return toolCall.function.output ?? ''\n}\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: serializeToolContent({\n toolCall,\n }),\n}) as OpenAI.ChatCompletionToolMessageParam\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}) as OpenAI.ChatCompletionMessageParam\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 })] as OpenAI.ChatCompletionMessageParam[]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = (message.metadata?.toolCalls || []) as OpenAI.Beta.Threads.Runs.Steps.ToolCall[]\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 const stepDetails = rs.step_details as { tool_calls?: ToolCall[] }\n if (!Array.isArray(stepDetails.tool_calls)) return false\n\n return stepDetails.tool_calls.some((rsTc: ToolCall) => rsTc.type === 'function' && rsTc.id === tc.id)\n })\n\n if (!runStep) return\n\n const stepDetails = runStep.step_details as { tool_calls?: ToolCall[] }\n if (!Array.isArray(stepDetails.tool_calls)) return\n\n const toolCall = stepDetails.tool_calls.find((rsTc: ToolCall) => rsTc.type === 'function' && rsTc.id === tc.id)\n\n if (toolCall && toolCall.type === 'function') {\n result.push(serializeToolCall({ toolCall }))\n }\n })\n\n return result\n}\n","export const messagesRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/messages$'\n","export const runsRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs$'\n","export const runRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)$'\n","export const submitToolOutputsRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/submit_tool_outputs$'\n","export const stepsRegexp = '^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/steps$'\n","import type OpenAI from 'openai'\nimport type { Prisma, PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { serializeThread } from './serializeThread'\n\ntype ThreadCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Thread>\n}\n\nexport const post = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (_urlString: string, options: RequestInit & { body?: string }): Promise<ThreadCreateResponse> => {\n if (!options.body) {\n throw new Error('No body provided')\n }\n\n const body = JSON.parse(options.body)\n\n const messages = (body.messages || []) as OpenAI.Beta.ThreadCreateParams.Message[]\n const metadataRecord = (body.metadata || {}) as Record<string, unknown>\n const assistantId = typeof metadataRecord.assistantId === 'string'\n ? metadataRecord.assistantId\n : undefined\n\n if (!assistantId) {\n throw new Error('assistantId is required to create a thread')\n }\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds')\n\n const messageData = messages.map((message, index) => ({\n role: message.role === 'user' ? 'USER' : 'ASSISTANT',\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ] as Prisma.InputJsonValue,\n attachments: (message.attachments ?? []) as Prisma.InputJsonValue[],\n metadata: message.metadata as Prisma.InputJsonValue | undefined,\n createdAt: initialCreatedAt.add(index, 'seconds').toDate(),\n })) satisfies Prisma.MessageCreateWithoutThreadInput[]\n\n const threadData = {\n metadata: metadataRecord as Prisma.InputJsonValue,\n assistant: {\n connect: {\n id: assistantId,\n },\n },\n messages: {\n create: messageData,\n },\n } satisfies Prisma.ThreadCreateInput\n\n const thread = await prisma.thread.create({\n data: threadData,\n })\n\n return new Response(JSON.stringify(\n serializeThread({ thread }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","// @ts-ignore-next-line\nimport 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 // TODO\n tool_resources: null,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const threads = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): { post: RequestHandler } => ({\n post: post({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport { isArray } from 'radash'\nimport type { Prisma, PrismaClient } from '@prisma/client'\nimport { serializeMessage } from './serializeMessage'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Messages.Message>\n}\n\nconst messageContentBlocks = ({\n content,\n}: {\n content: string | OpenAI.Beta.Threads.Messages.MessageContentPartParam[]\n}) => {\n if (isArray(content)) {\n return content.map((item) => {\n if (item.type === 'text') {\n return {\n type: 'text',\n text: {\n value: item.text ?? '',\n annotations: [],\n },\n }\n }\n\n return item\n })\n }\n\n return [\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\n },\n },\n ]\n}\n\nexport const post = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n if (!options.body) {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const { role, content, metadata } = body\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }) as Prisma.InputJsonValue,\n role: (role === 'user' ? 'USER' : 'ASSISTANT') as Prisma.MessageCreateWithoutThreadInput['role'],\n metadata: (metadata ?? {}) as Prisma.InputJsonValue,\n },\n })\n\n return new Response(JSON.stringify(\n serializeMessage({ message }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","// @ts-ignore-next-line\nimport 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 attachments: message.attachments as OpenAI.Beta.Threads.Messages.Message['attachments'],\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'\n// @ts-ignore-next-line\nimport type { PrismaClient, Message } from '@prisma/client'\nimport { assign, last } from 'radash'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeMessage } from './serializeMessage'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const pageSize = parseInt(limit)\n\n const messagesPlusOne = await prisma.message.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === 'asc' ? 'asc' : 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as Message[]\n\n const messages = messagesPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: messages.map((message: Message) => (\n serializeMessage({ message })\n )),\n has_more: messagesPlusOne.length > pageSize,\n last_id: last(messages)?.id ?? null,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\nimport { get } from './get'\nimport type { RequestHandler } from '@/types'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): { post: RequestHandler; get: RequestHandler } => ({\n post: post({ prisma }),\n get: get({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient, Run as PrismaRun } from '@prisma/client'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun } from './serializeRun'\nimport { mapPrismaRun } from './mapPrismaRun'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const pageSize = parseInt(limit, 10)\n\n const runsPlusOne = await prisma.run.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order === 'asc' ? 'asc' : 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as PrismaRun[]\n\n const runs = runsPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: runs.map((run) => serializeRun({ run: mapPrismaRun(run) })),\n has_more: runsPlusOne.length > pageSize,\n last_id: runs.at(-1)?.id ?? null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type OpenAI from 'openai'\nimport type { Run } from '@/types/prisma'\nimport dayjs from 'dayjs'\n\nexport const serializeRun = ({\n run,\n}: {\n run: Run\n}): OpenAI.Beta.Threads.Run => ({\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 tools: run.tools as unknown as OpenAI.Beta.Threads.Run['tools'],\n metadata: run.metadata as unknown as OpenAI.Beta.Threads.Run['metadata'],\n usage: run.usage as OpenAI.Beta.Threads.Run['usage'],\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: 'auto',\n parallel_tool_calls: true,\n})\n","import type { Prisma, Run as PrismaRun, RunStep as PrismaRunStep } from '@prisma/client'\nimport {\n RunStatus,\n RunStepStatus,\n RunStepType,\n type Run,\n type RunStep,\n} from '@/types/prisma'\n\nexport const mapPrismaRun = (run: PrismaRun): Run => ({\n id: run.id,\n threadId: run.threadId,\n assistantId: run.assistantId,\n status: run.status as RunStatus,\n requiredAction: run.requiredAction as Prisma.JsonValue | null,\n lastError: run.lastError as Prisma.JsonValue | null,\n expiresAt: run.expiresAt,\n startedAt: run.startedAt ?? null,\n cancelledAt: run.cancelledAt ?? null,\n failedAt: run.failedAt ?? null,\n completedAt: run.completedAt ?? null,\n model: run.model,\n instructions: run.instructions,\n tools: run.tools as Prisma.JsonValue[],\n metadata: run.metadata as Prisma.JsonValue | null,\n usage: run.usage as Prisma.JsonValue | null,\n truncationStrategy: run.truncationStrategy as Prisma.JsonValue,\n responseFormat: run.responseFormat as Prisma.JsonValue,\n createdAt: run.createdAt,\n updatedAt: run.updatedAt,\n})\n\nexport const mapPrismaRunStep = (runStep: PrismaRunStep): RunStep => ({\n id: runStep.id,\n threadId: runStep.threadId,\n assistantId: runStep.assistantId,\n runId: runStep.runId,\n type: runStep.type as RunStepType,\n status: runStep.status as RunStepStatus,\n stepDetails: runStep.stepDetails as Prisma.JsonValue,\n lastError: runStep.lastError as Prisma.JsonValue | null,\n expiredAt: runStep.expiredAt ?? null,\n cancelledAt: runStep.cancelledAt ?? null,\n failedAt: runStep.failedAt ?? null,\n completedAt: runStep.completedAt ?? null,\n metadata: runStep.metadata as Prisma.JsonValue | null,\n usage: runStep.usage as Prisma.JsonValue | null,\n createdAt: runStep.createdAt,\n updatedAt: runStep.updatedAt,\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun } from './serializeRun'\nimport { RunAdapterPartobClient } from '@/types'\nimport { onEvent } from './onEvent'\nimport { getMessages } from './getMessages'\nimport type { Run } from '@/types/prisma'\n\ntype RunCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Run>\n}\n\nexport const post = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<RunCreateResponse> => {\n const url = new URL(urlString)\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!\n\n if (!options.body) {\n throw new Error('No body provided')\n }\n\n const body = JSON.parse(options.body)\n const { assistant_id, stream } = body\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 response_format,\n truncation_strategy,\n } = assign({\n model: assistant.modelSlug,\n instructions: '',\n additional_instructions: null,\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n // tools: [],\n // metadata: {},\n }, body)\n\n const run = await prisma.run.create({\n data: {\n status: 'QUEUED',\n expiresAt: dayjs().add(1, 'hour').unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId,\n },\n },\n assistant: {\n connect: {\n id: assistant_id,\n },\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format,\n },\n }) as Run\n\n const data = serializeRun({ run })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n run: data,\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n }),\n getMessages: getMessages({\n prisma,\n run,\n }),\n })\n } catch (error: any) {\n console.error(error)\n\n onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n })({\n event: 'thread.run.failed',\n data: {\n id: run.id,\n failed_at: dayjs().unix(),\n last_error: {\n code: 'server_error',\n message: `${error?.message ?? ''} ${error?.cause?.message ?? ''}`,\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed)\n }\n\n controller.close()\n },\n })\n\n if (stream) {\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\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 { Prisma, 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 as Prisma.RunUpdateInput['status'],\n failedAt: event.data.failed_at,\n ...(event.data.last_error != null\n ? { lastError: event.data.last_error as unknown as Prisma.InputJsonValue }\n : {}),\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 { RunStatus } from '@/types/prisma'\nimport type { Prisma, PrismaClient } from '@prisma/client'\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 as Prisma.RunUpdateInput['status'],\n ...(event.data.required_action != null\n ? { requiredAction: event.data.required_action as unknown as Prisma.InputJsonValue }\n : {}),\n },\n })\n}\n","import dayjs from 'dayjs'\n// @ts-ignore-next-line\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 { RunStepStatus, RunStepType } from '@/types/prisma'\nimport type { Prisma, 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}): Promise<OpenAI.Beta.Threads.Runs.RunStep> => {\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) as Prisma.RunStepCreateInput['type'],\n status: status(event) as Prisma.RunStepCreateInput['status'],\n stepDetails: event.data.step_details as unknown as Prisma.InputJsonValue,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n } as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated)\n\n return serializedRunStep as OpenAI.Beta.Threads.Runs.RunStep\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 { MessageRole, MessageStatus } from '@/types/prisma'\nimport type { Prisma, 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 Prisma.InputJsonValue,\n role: (event.data.role === 'assistant'\n ? MessageRole.ASSISTANT\n : MessageRole.USER) as Prisma.MessageCreateWithoutThreadInput['role'],\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event) as Prisma.MessageCreateWithoutThreadInput['status'],\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 { Prisma, 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 const toolCalls = (event.data as { tool_calls?: unknown }).tool_calls\n\n if (toolCalls !== undefined) {\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: toolCalls,\n } as Prisma.InputJsonValue,\n },\n })\n }\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED as Prisma.MessageUpdateInput['status'],\n ...(event.data.content\n ? { content: event.data.content as unknown as Prisma.InputJsonValue }\n : {}),\n ...(toolCalls !== undefined\n ? { toolCalls: toolCalls as Prisma.InputJsonValue }\n : {}),\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, Run as PrismaRun } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run } from '@/types/prisma'\nimport type { MessageWithRun } from '@/types'\nimport { mapPrismaRun } from './mapPrismaRun'\n\nconst getTake = ({\n run,\n}: {\n run: Run\n}) => {\n // @ts-ignore-next-line\n if (['auto', 'disabled'].includes(run.truncationStrategy.type)) {\n return null\n }\n\n // @ts-ignore-next-line\n if (run.truncationStrategy.type === 'last_messages') {\n // @ts-ignore-next-line\n if (!run.truncationStrategy.last_messages) {\n throw new Error('Truncation strategy last_messages is required')\n }\n\n // @ts-ignore-next-line\n return -run.truncationStrategy.last_messages\n }\n\n // @ts-ignore-next-line\n throw new Error(`Unsupported truncation strategy type: ${run.truncationStrategy.type}`)\n}\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: Run\n}) => async () => {\n const take = getTake({\n run,\n })\n\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 orderBy: {\n createdAt: 'asc',\n },\n ...(take ? { take } : {}),\n })\n\n return messages.map((message) => ({\n ...serializeMessage({ message }),\n run: message.run\n ? {\n ...serializeRun({ run: mapPrismaRun(message.run as PrismaRun) }),\n runSteps: message.run.runSteps.map((runStep) => (\n serializeRunStep({ runStep })\n )),\n }\n : null,\n })) as MessageWithRun[]\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RequestHandler, RunAdapterPartobClient } from '@/types'\nimport { get } from './get'\nimport { post } from './post'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}): { get: RequestHandler; post: RequestHandler } => ({\n get: get({ prisma }),\n post: post({ prisma, runAdapter }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { serializeRun } from '../runs/serializeRun'\nimport { mapPrismaRun } from '../runs/mapPrismaRun'\n\ntype GetResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Runs['retrieve']>>\n}\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string): Promise<GetResponse> => {\n const url = new URL(urlString)\n\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp))!\n\n const run = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId,\n },\n })\n\n if (!run) {\n return new Response(JSON.stringify({ error: 'Not Found' }), {\n status: 404,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n\n return new Response(JSON.stringify(\n serializeRun({ run: mapPrismaRun(run) })\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'openai-poll-after-ms': '5000',\n },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RequestHandler, RunAdapterPartobClient } from '@/types'\nimport { get } from './get'\n// import { post } from './post'\n\nexport const run = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}): { get: RequestHandler } => ({\n get: get({ prisma }),\n // post: post({ prisma, runAdapter }),\n})\n","import type { PrismaClient, RunStep } from '@prisma/client'\nimport { assign } from 'radash'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { serializeRunStep } from './serializeRunStep'\n\nexport const get = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (urlString: string) => {\n const url = new URL(urlString)\n\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const pageSize = parseInt(limit, 10)\n\n const runStepsPlusOne = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order as 'asc' | 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as RunStep[]\n\n const runSteps = runStepsPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: runSteps.map((runStep: RunStep) => serializeRunStep({ runStep })),\n has_more: runStepsPlusOne.length > pageSize,\n last_id: runSteps.at(-1)?.id ?? null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { get } from './get'\nimport type { RequestHandler } from '@/types'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): { get: RequestHandler } => ({\n get: get({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\nimport type { Run } from '@/types/prisma'\n\nexport const updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {},\n tool_outputs,\n}: {\n prisma: PrismaClient\n runId: string\n threadId: string\n onThreadRunStepCompleted?: ({ runStep }: { runStep: any }) => void\n tool_outputs: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs']\n}) => (\n // @ts-expect-error prisma transaction typing is broken\n 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 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 // @ts-ignore-next-line\n tool_calls: runStep.stepDetails!.tool_calls.map((toolCall) => {\n // @ts-ignore-next-line\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 onThreadRunStepCompleted({\n runStep: completedRunStep,\n })\n }\n\n return prisma.run.update({\n where: {\n id: runId,\n },\n data: {\n status: 'QUEUED',\n },\n })\n }) as Promise<Run>\n)\n","import type { PrismaClient } from '@prisma/client'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { RunAdapterPartobClient } from '@/types'\nimport { serializeRun } from '../../serializeRun'\nimport { onEvent } from '../../onEvent'\nimport { getMessages } from '../../getMessages'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\nimport { updateRun } from './updateRun'\n\nexport const post = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => async (urlString: string, options: any) => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp))!\n\n const body = JSON.parse(options.body)\n\n const {\n tool_outputs,\n stream,\n } = body\n\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n const run = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs,\n onThreadRunStepCompleted: async ({ runStep }) => {\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeRunStep({ runStep }),\n })}\\n\\n`)\n }\n })\n\n await runAdapter.handleRun({\n run: serializeRun({ run }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n }),\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n },\n })\n\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n const run = await updateRun({\n prisma,\n runId,\n threadId,\n tool_outputs,\n })\n\n await new Promise((resolve) => (\n new ReadableStream({\n async start(controller) {\n await runAdapter.handleRun({\n run: serializeRun({ run }),\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data) => {\n controller.enqueue(`data: ${JSON.stringify(data)}\\n\\n`)\n },\n },\n prisma,\n }),\n getMessages: getMessages({ prisma, run }),\n })\n\n controller.close()\n resolve(void 0)\n },\n })\n ))\n\n return new Response(JSON.stringify(\n run\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RequestHandler, RunAdapterPartobClient } from '@/types'\nimport { post } from './post'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}): { post: RequestHandler } => ({\n post: post({\n prisma,\n // @ts-ignore-next-line\n runAdapter,\n }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\n\nexport const post = ({ prisma }: { prisma: PrismaClient }) =>\n async (_url: string, options: RequestInit & { body?: string }) => {\n if (!options.body) {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const { model, instructions } = body\n\n const assistant = await prisma.assistant.create({\n data: { modelSlug: model, instructions },\n })\n\n const data = {\n id: assistant.id,\n object: 'assistant',\n created_at: dayjs().unix(),\n name: null,\n description: null,\n model,\n instructions,\n tools: [],\n metadata: {},\n }\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const assistants = ({ prisma }: { prisma: PrismaClient }): { post: RequestHandler } => ({\n post: post({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } from '@/types'\nimport type { RequestHandler } from '@/types'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { threads } from './threads'\nimport { messages } from './threads/messages'\nimport { runs } from './threads/runs'\nimport { run } from './threads/run'\nimport { steps } from './threads/runs/steps'\nimport { submitToolOutputs } from './threads/runs/submitToolOutputs'\nimport { assistants } from './assistants'\n\ntype MethodHandlers = { get?: RequestHandler; post?: RequestHandler }\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}): ((args: StorageAdapterArgs) => { requestHandlers: Record<string, MethodHandlers> }) =>\n({ runAdapter }: StorageAdapterArgs) => ({\n requestHandlers: {\n '^/(?:v1/|openai/)?assistants$': assistants({ prisma }),\n '^/(?:v1|/?openai)/threads$': threads({ prisma }),\n [messagesRegexp]: messages({ prisma }),\n [runsRegexp]: runs({ prisma, runAdapter }),\n [runRegexp]: run({ prisma, runAdapter }),\n [stepsRegexp]: steps({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs({ prisma, runAdapter }),\n },\n})\n","import type { OpenAI } from 'openai'\n\nexport const serializeThread = ({\n conversation,\n}: {\n conversation: OpenAI.Conversations.Conversation\n}) => ({\n id: conversation.id,\n object: 'thread' as 'thread',\n created_at: conversation.created_at,\n metadata: conversation.metadata,\n // TODO\n tool_resources: null,\n})\n","import type OpenAI from 'openai'\nimport { serializeThread } from './serializeThread'\n\ntype ThreadCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Thread>\n}\n\nexport const post = ({\n client,\n}: {\n client: OpenAI\n}) => async (_urlString: string, options: RequestInit & { body?: string }): Promise<ThreadCreateResponse> => {\n if (typeof options.body !== 'string') {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n\n const messages = body.messages || []\n const metadata = body.metadata || {}\n\n const conversation = await client.conversations.create({\n metadata,\n items: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message) => ({\n type: \"message\",\n role: message.role === 'user' ? 'user' : 'assistant',\n content: [\n {\n type: message.role === 'user' ? 'input_text' : 'output_text',\n text: message.content,\n },\n ],\n })),\n });\n\n return new Response(JSON.stringify(\n serializeThread({ conversation }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import type { OpenAI } from 'openai'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const threads = ({\n client,\n}: {\n client: OpenAI\n}): { post: RequestHandler } => ({\n post: post({ client }),\n})\n","import type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { isArray } from 'radash'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Messages.Message>\n}\n\nconst contentBlocksFromContent = ({\n content,\n}: {\n content: string | OpenAI.Beta.Threads.Messages.MessageContentPartParam[]\n}) => {\n if (isArray(content)) {\n return content.map((item) => {\n if (item.type === 'text') {\n return {\n type: 'input_text' as 'input_text',\n text: item.text,\n }\n }\n\n if (item.type === 'image_file') {\n return {\n type: 'input_image' as 'input_image',\n file_id: item.image_file.file_id,\n detail: item.image_file.detail ?? 'auto',\n }\n }\n\n if (item.type === 'image_url') {\n return {\n type: 'input_image' as 'input_image',\n image_url: item.image_url.url,\n detail: item.image_url.detail ?? 'auto',\n }\n }\n\n return {\n type: 'input_text' as 'input_text',\n text: '',\n }\n })\n }\n\n return [\n {\n type: 'input_text' as 'input_text',\n text: content ?? '',\n },\n ]\n}\n\nconst contentBlocksFromAttachments = ({\n attachments,\n}: {\n attachments: OpenAI.Beta.Threads.Messages.MessageCreateParams.Attachment[]\n}) => (\n attachments.map((attachment) => ({\n type: 'input_file' as const,\n file_id: attachment.file_id,\n }))\n)\n\nconst messageContentBlocks = ({\n content,\n attachments,\n}: {\n content: string | OpenAI.Beta.Threads.Messages.MessageContentPartParam[]\n attachments: OpenAI.Beta.Threads.Messages.MessageCreateParams.Attachment[]\n}) => ([\n ...contentBlocksFromContent({ content }),\n ...contentBlocksFromAttachments({ attachments }),\n])\nexport const post = ({\n runAdapter,\n createResponseItems,\n}: {\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n if (typeof options.body !== 'string') {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const { role, content, attachments = [] } = body\n\n const item: OpenAI.Responses.ResponseInputItem.Message = {\n type: \"message\" as const,\n role,\n content: messageContentBlocks({\n content,\n attachments,\n }),\n }\n\n createResponseItems.push(item)\n\n // const items = await openai.conversations.items.create(\n // threadId,\n // {\n // items: [\n // ],\n // }\n // );\n //\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } })\n\n return new Response(JSON.stringify(\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: dayjs().unix(),\n }),\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype ItemType = OpenAI.Conversations.ConversationItem | OpenAI.Responses.ResponseItem | OpenAI.Responses.ResponseInputItem.Message\n\nconst serializeContent = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.MessageContent[] => {\n if (item.type === 'message') {\n return item.content.map((contentBlock) => {\n if (contentBlock.type === 'input_text') {\n return {\n type: 'text' as const,\n text: {\n value: contentBlock.text,\n annotations: [],\n },\n }\n } else if (contentBlock.type === 'output_text') {\n return {\n type: 'text' as const,\n text: {\n value: contentBlock.text,\n annotations: [],\n },\n }\n } else if (contentBlock.type === 'input_image') {\n return {\n type: 'image_file' as const,\n image_file: {\n file_id: contentBlock.file_id,\n detail: 'auto',\n },\n }\n }\n\n return null\n }).filter(Boolean) as OpenAI.Beta.Threads.Messages.TextContentBlock[]\n } else if (item.type === 'image_generation_call') {\n if (!item.result) return []\n\n return [{\n type: 'image_url' as const,\n image_url: {\n // @ts-expect-error bad openai types\n url: `data:image/${item.output_format};base64,${item.result}`,\n detail: 'auto' as const,\n },\n }]\n } else {\n return []\n }\n}\n\nconst serializeAttachments = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.Message['attachments'] => {\n if (item.type !== 'message') return []\n\n const inputFiles = item.content.filter((contentBlock) => (\n contentBlock.type === 'input_file' && contentBlock.file_id\n )) as OpenAI.Responses.ResponseInputFile[]\n\n return inputFiles.map((inputFile: OpenAI.Responses.ResponseInputFile) => ({\n file_id: inputFile.file_id!,\n }))\n}\n\nconst serializeMetadata = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.Message['metadata'] => {\n if (item.type === 'image_generation_call') {\n return {\n item: JSON.stringify({\n ...item,\n result: 'truncated',\n }),\n }\n }\n\n return {\n item: JSON.stringify(item),\n }\n}\n // assign(message.metadata as Record<any, any> ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {}),\n\nexport const serializeItemAsMessage = ({\n item,\n threadId,\n openaiAssistant,\n createdAt,\n runId = null,\n status = 'completed',\n}: {\n item: ItemType\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n createdAt: number\n runId?: string | null\n status?: 'completed' | 'in_progress'\n}): OpenAI.Beta.Threads.Message => ({\n id: (item as any).id || uid(24),\n object: 'thread.message' as const,\n created_at: createdAt,\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: typeof (item as any).role === 'string' ? (item as any).role : 'assistant',\n content: serializeContent({ item }),\n assistant_id: (item as any).role === 'assistant' ? openaiAssistant.id : null,\n run_id: runId,\n attachments: serializeAttachments({ item }),\n status: typeof (item as any).status === 'string' ? (item as any).status : status,\n metadata: serializeMetadata({ item }),\n})\n","import type OpenAI from 'openai'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { assign } from 'radash'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\nimport { responseId } from '@/lib/items/responseId'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString)\n\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n\n const {\n limit,\n order,\n after,\n } = assign({\n limit: '20',\n order: 'desc',\n // after: null,\n }, Object.fromEntries(url.searchParams))\n\n const conversation = await client.conversations.retrieve(threadId)\n const sortOrder = order === 'asc' ? 'asc' : 'desc'\n\n const items = await client.conversations.items.list(threadId, {\n limit: parseInt(limit, 10),\n after,\n order: sortOrder,\n })\n\n const itemsWithRunIds = mapItemsWithRunIds({ conversation, items: items.data })\n const responseMap = await fetchResponsesForItems({\n client,\n items: itemsWithRunIds,\n })\n\n const timestampedItems = assignTimestamps({\n items: itemsWithRunIds,\n responseMap,\n sortOrder,\n conversationCreatedAt: conversation.created_at,\n })\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } })\n\n return new Response(JSON.stringify({\n data: timestampedItems.map(({ item, runId, assignedTimestamp }) => (\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: assignedTimestamp,\n runId,\n })\n )),\n has_more: items.has_more,\n last_id: items.last_id,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n\ntype ItemWithRunId = {\n item: OpenAI.Conversations.ConversationItem\n runId: string | null\n}\n\ntype ItemWithAssignedTimestamp = ItemWithRunId & {\n timestamp: number | null\n assignedTimestamp: number\n}\n\nconst mapItemsWithRunIds = ({\n conversation,\n items,\n}: {\n conversation: OpenAI.Conversations.Conversation\n items: OpenAI.Conversations.ConversationItem[]\n}): ItemWithRunId[] => (\n items.map((item) => ({\n item,\n runId: item.id ? responseId({\n conversation,\n itemId: item.id,\n }) : null,\n }))\n)\n\nconst fetchResponsesForItems = async ({\n client,\n items,\n}: {\n client: OpenAI\n items: ItemWithRunId[]\n}): Promise<Map<string, OpenAI.Responses.Response>> => {\n const responseIds = Array.from(new Set(\n items\n .map(({ runId }) => runId)\n .filter((id): id is string => Boolean(id)),\n ))\n\n const results = await Promise.allSettled(\n responseIds.map((id) => client.responses.retrieve(id)),\n )\n\n const map = new Map<string, OpenAI.Responses.Response>()\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n map.set(responseIds[index], result.value)\n }\n })\n\n return map\n}\n\n// Ensure timestamps follow the requested order even when some items lack response metadata.\nconst assignTimestamps = ({\n items,\n responseMap,\n sortOrder,\n conversationCreatedAt,\n}: {\n items: ItemWithRunId[]\n responseMap: Map<string, OpenAI.Responses.Response>\n sortOrder: 'asc' | 'desc'\n conversationCreatedAt: number\n}): ItemWithAssignedTimestamp[] => {\n const itemsWithTimestamps = items.map((entry) => ({\n ...entry,\n timestamp: entry.runId ? responseMap.get(entry.runId)?.created_at ?? null : null,\n assignedTimestamp: 0,\n }))\n\n const fallbackTimestampForIndex = (index: number): number => (\n sortOrder === 'asc'\n ? conversationCreatedAt + index\n : conversationCreatedAt + (itemsWithTimestamps.length - index)\n )\n\n const findNextKnownTimestamp = (startIndex: number) => {\n for (let i = startIndex; i < itemsWithTimestamps.length; i += 1) {\n const candidate = itemsWithTimestamps[i]\n if (candidate.timestamp != null) {\n return { index: i, timestamp: candidate.timestamp }\n }\n }\n\n return null\n }\n\n if (sortOrder === 'asc') {\n let lastAssigned: number | null = null\n\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp\n\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned + 1\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1)\n if (nextKnown) {\n const gap = nextKnown.index - index\n nextValue = nextKnown.timestamp - gap\n } else {\n nextValue = fallbackTimestampForIndex(index)\n }\n }\n }\n\n if (lastAssigned != null && nextValue <= lastAssigned) {\n nextValue = lastAssigned + 1\n }\n\n entry.assignedTimestamp = nextValue\n lastAssigned = nextValue\n })\n } else {\n let lastAssigned: number | null = null\n\n itemsWithTimestamps.forEach((entry, index) => {\n let nextValue = entry.timestamp\n\n if (nextValue == null) {\n if (lastAssigned != null) {\n nextValue = lastAssigned - 1\n } else {\n const nextKnown = findNextKnownTimestamp(index + 1)\n if (nextKnown) {\n const gap = nextKnown.index - index\n nextValue = nextKnown.timestamp + gap\n } else {\n nextValue = fallbackTimestampForIndex(index)\n }\n }\n }\n\n if (lastAssigned != null && nextValue >= lastAssigned) {\n nextValue = lastAssigned - 1\n }\n\n entry.assignedTimestamp = nextValue\n lastAssigned = nextValue\n })\n }\n\n return itemsWithTimestamps\n}\n","import type { OpenAI } from 'openai';\n\ntype ItemResponseEntry = { responseId: string; itemIds: string[] };\n\nexport function responseId({\n conversation,\n itemId,\n}: {\n conversation: OpenAI.Conversations.Conversation;\n itemId: string;\n}): string | null {\n if (!conversation.metadata) return null\n\n const metadata = conversation.metadata as Record<string, any>;\n\n const keys = Object.keys(metadata)\n .map(k => {\n const m = /^responseItemsMap(\\d+)$/.exec(k);\n return m ? { key: k, idx: Number(m[1]) } : null;\n })\n .filter((x): x is { key: string; idx: number } => !!x)\n .sort((a, b) => a.idx - b.idx);\n\n // scan newest → oldest (reverse order), and inside a bucket scan last entry → first\n for (let i = keys.length - 1; i >= 0; i--) {\n const raw = metadata[keys[i].key];\n if (!raw || raw === '[]') continue;\n\n let arr: ItemResponseEntry[] = [];\n try {\n arr = JSON.parse(raw) as ItemResponseEntry[];\n if (!Array.isArray(arr)) continue;\n } catch {\n continue; // skip bad/partial JSON\n }\n\n for (let j = arr.length - 1; j >= 0; j--) {\n const entry = arr[j];\n if (entry?.itemIds?.includes(itemId)) {\n return entry.responseId || null;\n }\n }\n }\n\n return null;\n}\n","import type { OpenAI } from 'openai'\nimport { post } from './post'\nimport { get } from './get'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const messages = ({\n client,\n runAdapter,\n createResponseItems,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}): { post: RequestHandler; get: RequestHandler } => ({\n post: post({ runAdapter, createResponseItems }),\n get: get({ client, runAdapter }),\n})\n","import type OpenAI from 'openai'\n\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\n}\n\nexport const get = () => async (urlString: string): Promise<MessageCreateResponse> => {\n return new Response(JSON.stringify({\n data: [],\n has_more: false,\n last_id: null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type OpenAI from 'openai'\nimport { uid } from 'radash'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\nimport { RunAdapterWithAssistant } from '@/types'\nimport { saveResponseItemsToConversationMetadata } from '@/lib/responses/saveResponseItemsToConversationMetadata'\n\ntype RunCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Run>\n}\n\nconst serializeTools = ({\n tools,\n}: {\n tools: OpenAI.Beta.Threads.Runs.RunCreateParams['tools']\n}) => {\n if (!tools?.length) return {}\n\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...(tool[tool.type] || {}),\n }))\n }\n}\n\nconst truncation = ({\n truncation_strategy,\n}: {\n truncation_strategy: OpenAI.Beta.Threads.Runs.RunCreateParams['truncation_strategy']\n}) => {\n // @ts-expect-error compat\n if (truncation_strategy.type === 'disabled') {\n return 'disabled'\n }\n\n return 'auto'\n}\n\nconst defaultAssistant = {\n model: '',\n instructions: '',\n additional_instructions: null,\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n // tools: [],\n // metadata: {},\n}\n\nexport const post = ({\n client,\n runAdapter,\n createResponseItems,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}) => async (urlString: string, options: RequestInit & { body?: string }): Promise<RunCreateResponse> => {\n const url = new URL(urlString)\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!\n\n if (typeof options.body !== 'string') {\n throw new Error('Request body is required')\n }\n\n const body = JSON.parse(options.body)\n const {\n assistant_id,\n stream,\n } = body\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy,\n } = assign({\n ...defaultAssistant,\n ...(await runAdapter.getOpenaiAssistant()),\n }, body)\n\n const response = await client.responses.create({\n conversation: threadId,\n instructions,\n model,\n metadata,\n stream,\n ...serializeTools({ tools }),\n truncation: truncation({ truncation_strategy }),\n text: {\n format: response_format,\n },\n input: createResponseItems,\n })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => (\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n ),\n })\n } catch (error: any) {\n console.error(error)\n\n const event = {\n event: 'thread.run.failed',\n data: {\n id: uid(24),\n failed_at: dayjs().unix(),\n last_error: {\n code: 'server_error',\n message: `${error?.message ?? ''} ${error?.cause?.message ?? ''}`,\n },\n },\n }\n\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n if (stream) {\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n const itemIds = (response.output ?? [])\n .filter((o) => o.id)\n .map((o) => o.id!)\n\n if (itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: response.id,\n itemIds,\n })\n }\n\n const data = serializeResponseAsRun({\n response,\n assistantId: assistant_id,\n })\n\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\n// @ts-ignore-next-line\nimport type { Run } from '@prisma/client'\n\nconst serializeStatus = ({\n response,\n}: {\n response: OpenAI.Responses.Response\n}): OpenAI.Beta.Threads.Run['status'] => {\n if (response.error) return 'failed'\n\n return (response.status?.toLowerCase() as 'completed' | 'failed' | 'in_progress' | 'requires_action' | undefined) ?? 'completed'\n}\n\nconst serializeUsage = ({\n response,\n}: {\n response: OpenAI.Responses.Response\n}) => ({\n prompt_tokens: response.usage?.input_tokens ?? 0,\n completion_tokens: response.usage?.output_tokens ?? 0,\n total_tokens: response.usage?.total_tokens ?? 0,\n})\n\nconst findPendingToolCalls = ({\n response,\n}: {\n response: OpenAI.Responses.Response\n}): OpenAI.Responses.ResponseFunctionToolCall[] => {\n const toolCalls = (response.output ?? []).filter(\n (item): item is OpenAI.Responses.ResponseFunctionToolCall => item.type === 'function_call',\n )\n\n if (toolCalls.length === 0) return []\n\n const completedCallIds = new Set(\n (response.output ?? [])\n .filter(\n (item) =>\n // @ts-expect-error missing openai type\n item.type === 'function_call_output',\n )\n .map((item) => (\n // @ts-expect-error missing openai type\n item.call_id\n ))\n .filter((id): id is string => Boolean(id)),\n )\n\n return toolCalls.filter((call) => !completedCallIds.has(call.call_id))\n}\n\nconst serializeToolCalls = ({\n toolCalls,\n}: {\n toolCalls: OpenAI.Responses.ResponseFunctionToolCall[]\n}) =>\n toolCalls.map((toolCall) => ({\n id: toolCall.call_id,\n type: 'function' as const,\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments,\n },\n }))\n\nexport const serializeResponseAsRun = ({\n response,\n assistantId,\n}: {\n response: OpenAI.Responses.Response\n assistantId: string\n}): OpenAI.Beta.Threads.Run => {\n const pendingToolCalls = findPendingToolCalls({ response })\n const status = pendingToolCalls.length > 0 ? 'requires_action' : serializeStatus({ response })\n\n return {\n id: response.id,\n object: 'thread.run' as 'thread.run',\n created_at: response.created_at,\n thread_id: response.conversation!.id,\n assistant_id: assistantId,\n status,\n required_action:\n pendingToolCalls.length > 0\n ? {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: serializeToolCalls({ toolCalls: pendingToolCalls }),\n },\n }\n : null,\n last_error: response.error as OpenAI.Beta.Threads.Run['last_error'],\n expires_at: response.created_at,\n started_at: response.created_at,\n cancelled_at: null,\n failed_at: response.error ? response.created_at : null,\n completed_at: status === 'completed' ? response.created_at : null,\n model: response.model,\n instructions: '',\n tools: [] as OpenAI.Beta.Threads.Run['tools'],\n metadata: response.metadata,\n usage: serializeUsage({ response }),\n truncation_strategy: {\n type: 'auto',\n },\n response_format: {\n type: 'text',\n },\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: 'auto',\n parallel_tool_calls: true,\n }\n}\n","import type OpenAI from 'openai'\n\n/* ======================= responseItemsMap helpers ======================= */\n\ntype ItemResponseEntry = { responseId: string; itemIds: string[] }\ntype ConversationMetadata = Record<string, string>\n\nconst BUCKET_PREFIX = 'responseItemsMap' // keys: responseItemsMap0..15\nconst MAX_BUCKETS = 16 // OpenAI metadata key limit\nconst MAX_VALUE_LENGTH = 512 // OpenAI metadata value limit\n\nfunction parseBucket({ value }: { value?: string }): ItemResponseEntry[] {\n if (!value || value === '[]') return []\n try {\n const arr = JSON.parse(value)\n return Array.isArray(arr) ? (arr as ItemResponseEntry[]) : []\n } catch {\n return []\n }\n}\n\nfunction serializeBucket({ entries }: { entries: ItemResponseEntry[] }): string {\n return JSON.stringify(entries)\n}\n\nfunction bucketKey({ index }: { index: number }): string {\n return `${BUCKET_PREFIX}${index}`\n}\n\nfunction listBucketIndices({ metadata }: { metadata: ConversationMetadata }): number[] {\n return Object.keys(metadata)\n .map((k) => {\n const m = new RegExp(`^${BUCKET_PREFIX}(\\\\d+)$`).exec(k)\n return m ? Number(m[1]) : -1\n })\n .filter((i) => i >= 0)\n .sort((a, b) => a - b)\n}\n\n// Flatten to FIFO (oldest → newest) list of pairs\ntype Pair = { responseId: string; itemId: string }\n\nfunction parseAllPairs({ metadata }: { metadata: ConversationMetadata }): Pair[] {\n const indices = listBucketIndices({ metadata })\n const pairs: Pair[] = []\n for (const idx of indices) {\n const key = bucketKey({ index: idx })\n const entries = parseBucket({ value: metadata[key] })\n for (const e of entries) {\n for (const iid of e.itemIds) {\n pairs.push({ responseId: e.responseId, itemId: iid })\n }\n }\n }\n return pairs\n}\n\nfunction serializeNonBucketEntries({ entries }: { entries: Array<[string, string]> }): ConversationMetadata {\n const result: ConversationMetadata = {}\n for (const [key, value] of entries) {\n result[key] = value\n }\n return result\n}\n\nfunction packIntoBuckets({ pairs, slots }: { pairs: Pair[]; slots: number }): string[] | undefined {\n const buckets: string[] = []\n let currentEntries: ItemResponseEntry[] = []\n\n const flush = () => {\n if (currentEntries.length === 0) return true\n const serialized = serializeBucket({ entries: currentEntries })\n if (serialized.length > MAX_VALUE_LENGTH) return false\n if (buckets.length >= slots) return false\n buckets.push(serialized)\n currentEntries = []\n return true\n }\n\n for (const { responseId, itemId } of pairs) {\n const candidateEntries = currentEntries.map((entry) => ({\n responseId: entry.responseId,\n itemIds: [...entry.itemIds],\n }))\n const last = candidateEntries.at(-1)\n if (last && last.responseId === responseId) {\n last.itemIds.push(itemId)\n } else {\n candidateEntries.push({ responseId, itemIds: [itemId] })\n }\n\n const serialized = serializeBucket({ entries: candidateEntries })\n if (serialized.length <= MAX_VALUE_LENGTH) {\n currentEntries = candidateEntries\n continue\n }\n\n if (!flush()) return undefined\n\n currentEntries = [{ responseId, itemIds: [itemId] }]\n if (serializeBucket({ entries: currentEntries }).length > MAX_VALUE_LENGTH) {\n return undefined\n }\n }\n\n if (!flush()) return undefined\n\n return buckets\n}\n\nfunction metadataEquals(a: ConversationMetadata, b: ConversationMetadata): boolean {\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (a[key] !== b[key]) return false\n }\n return true\n}\n\nexport function appendItemIdsToConversationMetadata({\n metadata,\n responseId,\n itemIds,\n}: {\n metadata?: ConversationMetadata\n responseId: string\n itemIds: string[]\n}): { metadata: ConversationMetadata; changed: boolean } {\n const base = { ...(metadata || {}) }\n const nonBucketEntries = Object.entries(base).filter(([key]) => !key.startsWith(BUCKET_PREFIX))\n const availableSlots = Math.max(0, MAX_BUCKETS - nonBucketEntries.length)\n const preservedNonBucket = serializeNonBucketEntries({ entries: nonBucketEntries })\n\n if (availableSlots <= 0) {\n return { metadata: base, changed: false }\n }\n\n const existingPairs = parseAllPairs({ metadata: base })\n const incomingPairs: Pair[] = itemIds.map((id) => ({ responseId, itemId: id }))\n const combinedPairs: Pair[] = existingPairs.concat(incomingPairs)\n\n let retainedOldestFirst: Pair[] = []\n\n for (let idx = combinedPairs.length - 1; idx >= 0; idx -= 1) {\n const candidate = [combinedPairs[idx], ...retainedOldestFirst]\n const buckets = packIntoBuckets({ pairs: candidate, slots: availableSlots })\n if (buckets) {\n retainedOldestFirst = candidate\n }\n }\n\n const buckets = packIntoBuckets({ pairs: retainedOldestFirst, slots: availableSlots })\n if (!buckets) {\n const changed = !metadataEquals(base, preservedNonBucket)\n return { metadata: changed ? preservedNonBucket : base, changed }\n }\n\n const rebuilt = { ...preservedNonBucket }\n buckets.forEach((value, index) => {\n if (value && value !== '[]') {\n rebuilt[bucketKey({ index })] = value\n }\n })\n\n const changed = !metadataEquals(base, rebuilt)\n return { metadata: rebuilt, changed }\n}\n\nexport async function saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId,\n itemIds,\n}: {\n client: OpenAI\n threadId: string\n responseId: string\n itemIds: string[]\n}) {\n const conversation = await client.conversations.retrieve(threadId)\n const { metadata: updated, changed } = appendItemIdsToConversationMetadata({\n metadata: conversation.metadata as Record<string, string> | undefined,\n responseId,\n itemIds,\n })\n if (!changed) return\n await client.conversations.update(threadId, { metadata: updated })\n}\n","import type { OpenAI } from 'openai'\nimport { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const runs = ({\n client,\n runAdapter,\n createResponseItems,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n createResponseItems: OpenAI.Responses.ResponseInputItem[]\n}): { get: RequestHandler; post: RequestHandler } => ({\n get: get(),\n post: post({ client, createResponseItems, runAdapter }),\n})\n","import type OpenAI from 'openai'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\n\ntype GetResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Runs['retrieve']>>\n}\n\nexport const get = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string): Promise<GetResponse> => {\n const url = new URL(urlString)\n\n const [, _threadId, runId] = url.pathname.match(new RegExp(runRegexp))!\n\n const response = await client.responses.retrieve(runId)\n\n const data = serializeResponseAsRun({\n response,\n assistantId: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id,\n })\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'openai-poll-after-ms': '5000',\n },\n })\n}\n","import type { OpenAI } from 'openai'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\nimport { get } from './get'\n// import { post } from './post'\n\nexport const run = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}): { get: RequestHandler } => ({\n get: get({ client, runAdapter }),\n // post: post({ prisma, runAdapter }),\n})\n","import type { OpenAI } from 'openai'\nimport { last } from 'radash'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { serializeItemAsMessageCreationRunStep } from '@/lib/items/serializeItemAsMessageCreationRunStep'\nimport { serializeItemAsFunctionCallRunStep } from '@/lib/items/serializeItemAsFunctionCallRunStep'\nimport { serializeItemAsImageGenerationRunStep } from '@/lib/items/serializeItemAsImageGenerationRunStep'\nimport { serializeItemAsWebSearchRunStep } from '@/lib/items/serializeItemAsWebSearchRunStep'\nimport { serializeItemAsMcpListToolsRunStep } from '@/lib/items/serializeItemAsMcpListToolsRunStep'\nimport { serializeItemAsMcpCallRunStep } from '@/lib/items/serializeItemAsMcpCallRunStep'\nimport { serializeItemAsCodeInterpreterCallRunStep } from '@/lib/items/serializeItemAsCodeInterpreterCallRunStep'\nimport { serializeItemAsComputerCallRunStep } from '@/lib/items/serializeItemAsComputerCallRunStep'\nimport { serializeItemAsReasoningRunStep } from '@/lib/items/serializeItemAsReasoningRunStep'\n\nexport const get = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string) => {\n const url = new URL(urlString)\n\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp))!\n\n // const {\n // limit,\n // order,\n // after,\n // } = assign({\n // limit: '20',\n // order: 'desc',\n // // after: null,\n // }, Object.fromEntries(url.searchParams))\n\n const response = await client.responses.retrieve(runId)\n\n const latestToolCallItem = response.output.findLast((item) => (\n item.type === 'function_call'\n // item.type === 'computer_call'\n ))\n\n let functionCallOutputItems: OpenAI.Responses.ResponseFunctionToolCallOutputItem[] = []\n let computerCallOutputItems: OpenAI.Responses.ResponseComputerToolCallOutputItem[] = []\n\n if (latestToolCallItem) {\n const items = await client.conversations.items.list(threadId, {\n after: latestToolCallItem.id,\n order: 'asc',\n limit: 20,\n })\n\n functionCallOutputItems = items.data.filter((item) => item.type === 'function_call_output') as OpenAI.Responses.ResponseFunctionToolCallOutputItem[]\n computerCallOutputItems = items.data.filter((item) => item.type === 'computer_call_output') as OpenAI.Responses.ResponseComputerToolCallOutputItem[]\n }\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant({ select: { id: true } })\n\n const data = response.output.flatMap((item) => {\n const step = serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId: response.id,\n });\n\n if (item.type === 'function_call') {\n return [\n serializeItemAsFunctionCallRunStep({\n item,\n items: functionCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'computer_call') {\n return [\n serializeItemAsComputerCallRunStep({\n item,\n items: computerCallOutputItems,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'reasoning') {\n return [\n serializeItemAsReasoningRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'image_generation_call') {\n return [\n step,\n serializeItemAsImageGenerationRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n ]\n } else if (item.type === 'web_search_call') {\n return [\n serializeItemAsWebSearchRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'mcp_list_tools') {\n return [\n serializeItemAsMcpListToolsRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'mcp_call') {\n return [\n serializeItemAsMcpCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n } else if (item.type === 'code_interpreter_call') {\n return [\n serializeItemAsCodeInterpreterCallRunStep({\n item,\n openaiAssistant,\n threadId,\n runId: response.id,\n }),\n step,\n ]\n }\n\n return [step];\n })\n\n return new Response(JSON.stringify({\n data,\n has_more: false,\n last_id: last(response.output)?.id ?? null,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype RunStep = OpenAI.Beta.Threads.Runs.RunStep\n\nexport function serializeItemAsMessageCreationRunStep({\n item,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Conversations.ConversationItem | OpenAI.Responses.ResponseItem | OpenAI.Responses.ResponseFunctionToolCall\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n runId?: string\n status?: 'completed' | 'in_progress'\n completedAt?: number | null\n}): RunStep {\n // Normalize the item id to a definite string\n const itemId: string = typeof item.id === 'string' ? item.id : `item_${uid(18)}`\n\n const base: Omit<RunStep, 'type' | 'step_details'> = {\n id: itemId,\n object: 'thread.run.step',\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n }\n\n if (item.type === 'message') {\n return {\n ...base,\n type: 'message_creation',\n step_details: {\n type: 'message_creation',\n message_creation: {\n // If you also create a thread.message elsewhere, substitute that id here.\n message_id: itemId, // <- always string\n },\n },\n // keep role if present (assistant/user/system), optional\n metadata: 'role' in item ? { role: (item as any).role } : {},\n }\n } else if (item.type === 'image_generation_call') {\n return {\n ...base,\n type: 'message_creation',\n step_details: {\n type: 'message_creation',\n message_creation: { message_id: itemId },\n },\n metadata: {\n item: JSON.stringify({\n ...item,\n result: 'truncated',\n }),\n },\n }\n }\n\n return {\n ...base,\n type: 'message_creation',\n step_details: {\n type: 'message_creation',\n message_creation: { message_id: itemId },\n },\n metadata: {\n item: JSON.stringify(item),\n },\n }\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype RunStep = OpenAI.Beta.Threads.Runs.RunStep\ntype FunctionToolCall = OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\ntype ToolCallsStepDetails = OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails\n\nconst serializeFunctionCallOutput = ({\n functionCallOutput,\n}: {\n functionCallOutput: OpenAI.Responses.ResponseFunctionToolCallOutputItem | undefined\n}) => {\n if (!functionCallOutput) return null\n if (typeof functionCallOutput.output === 'string') {\n return functionCallOutput.output\n }\n\n return JSON.stringify(functionCallOutput.output)\n}\n\nexport const serializeItemAsFunctionCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseFunctionToolCall\n items: Omit<OpenAI.Responses.ResponseFunctionToolCallOutputItem, 'id'>[]\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n runId?: string\n status?: 'completed' | 'in_progress'\n completedAt?: number | null\n}): RunStep => {\n // Normalize the item id to a definite string\n const itemId: string = typeof item.id === 'string' ? item.id : `item_${uid(18)}`\n\n const base: Omit<RunStep, 'type' | 'step_details'> = {\n id: itemId,\n object: 'thread.run.step',\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n }\n\n const functionCallOutput = items.find((i) => (\n i.type === 'function_call_output' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseFunctionToolCallOutputItem | undefined\n\n const toolCall: FunctionToolCall = {\n id: item.call_id,\n type: 'function',\n function: {\n name: item.name,\n arguments: item.arguments,\n output: serializeFunctionCallOutput({ functionCallOutput }),\n },\n }\n\n return {\n ...base,\n type: 'tool_calls',\n step_details: {\n type: 'tool_calls',\n tool_calls: [toolCall],\n } satisfies ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseItem.ImageGenerationCall\n}) => {\n // OpenAI bug: status is 'generating' even when result is present\n if (item.result !== null) {\n return 'completed' as const\n }\n\n if (item.status === 'generating') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nexport const serializeItemAsImageGenerationRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n status = serializeStatus({ item }),\n}: {\n item: OpenAI.Responses.ResponseItem.ImageGenerationCall\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n status?: 'completed' | 'in_progress' | 'failed'\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'image_generation',\n arguments: '{}',\n output: JSON.stringify({\n status: item.status,\n // @ts-expect-error bad openai types\n background: item.background,\n // @ts-expect-error bad openai types\n output_format: item.output_format,\n // @ts-expect-error bad openai types\n quality: item.quality,\n result: item.result,\n // @ts-expect-error bad openai types\n size: item.size,\n // @ts-expect-error bad openai types\n revised_prompt: item.revised_prompt,\n })\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseFunctionWebSearch\n}) => {\n if (item.status === 'searching') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nexport const serializeItemAsWebSearchRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseFunctionWebSearch\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'web_search',\n arguments: JSON.stringify({\n // @ts-expect-error bad openai types\n action: item.action,\n }),\n output: JSON.stringify({\n status: item.status,\n }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseItem.McpListTools\n}) => {\n if (item.error) {\n return 'failed' as const\n }\n\n return 'completed' as const\n}\n\nexport const serializeItemAsMcpListToolsRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseItem.McpListTools\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'mcp_list_tools',\n arguments: JSON.stringify({\n server_label: item.server_label,\n }),\n output: JSON.stringify({\n tools: item.tools,\n ...(item.error && { error: item.error }),\n }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseItem.McpCall\n}) => {\n if (item.error) {\n return 'failed' as const\n }\n\n return 'completed' as const\n}\n\nexport const serializeItemAsMcpCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseItem.McpCall\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: item.name,\n arguments: item.arguments,\n // @ts-expect-error compat\n server_label: item.server_label,\n output: item.output ?? item.error ?? null,\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: item.error ? { code: 'server_error' as const, message: item.error } : null,\n expired_at: null,\n cancelled_at: null,\n failed_at: item.error ? dayjs().unix() : null,\n completed_at: item.error ? null : completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseCodeInterpreterToolCall\n}) => {\n if (item.status === 'incomplete') {\n return 'in_progress' as const\n } else if (item.status === 'interpreting') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nconst serializeOutput = ({\n output,\n}: {\n output: OpenAI.Responses.ResponseCodeInterpreterToolCall.Logs\n // | OpenAI.Responses.ResponseCodeInterpreterToolCall.Image\n}) => {\n // if (output.type === 'logs') {\n return {\n type: output.type,\n logs: output.logs,\n }\n // }\n\n // if (output.type === 'image') {\n // return {\n // type: output.type,\n // image: {\n // url: output.url,\n // },\n // }\n // }\n}\n\nconst serializeOutputs = ({\n item,\n}: {\n item: OpenAI.Responses.ResponseCodeInterpreterToolCall\n}) => {\n if (!item.outputs) return []\n\n return (item.outputs.filter(o => o.type === 'logs') as OpenAI.Responses.ResponseCodeInterpreterToolCall.Logs[])\n .map((output) => serializeOutput({ output }))\n}\n\nexport const serializeItemAsCodeInterpreterCallRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseCodeInterpreterToolCall\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.CodeInterpreterToolCall = {\n id: `citc${item.id}`,\n type: 'code_interpreter' as const,\n code_interpreter: {\n input: item.code ?? '',\n outputs: serializeOutputs({ item }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {\n item: JSON.stringify(item),\n },\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype RunStep = OpenAI.Beta.Threads.Runs.RunStep\ntype FunctionToolCall = OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\ntype ToolCallsStepDetails = OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails\n\nexport const serializeItemAsComputerCallRunStep = ({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseComputerToolCall\n items: Omit<OpenAI.Responses.ResponseComputerToolCallOutputItem, 'id'>[]\n threadId: string\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n runId?: string\n status?: 'completed' | 'in_progress'\n completedAt?: number | null\n}): RunStep => {\n // Normalize the item id to a definite string\n const itemId: string = typeof item.id === 'string' ? item.id : `item_${uid(18)}`\n\n const base: Omit<RunStep, 'type' | 'step_details'> = {\n id: itemId,\n object: 'thread.run.step',\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status,\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n }\n\n const computerCallOutput = items.find((i) => (\n i.type === 'computer_call_output' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseComputerToolCallOutputItem | undefined\n\n const toolCall: FunctionToolCall = {\n id: item.call_id,\n type: 'function',\n function: {\n name: 'computer_call',\n arguments: JSON.stringify({\n action: item.action,\n pending_safety_checks: item.pending_safety_checks,\n }),\n output: computerCallOutput ? JSON.stringify(computerCallOutput.output) : null,\n },\n }\n\n return {\n ...base,\n type: 'tool_calls',\n step_details: {\n type: 'tool_calls',\n tool_calls: [toolCall],\n } satisfies ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport dayjs from 'dayjs'\n\nconst serializeStatus = ({\n item,\n completedAt,\n}: {\n item: OpenAI.Responses.ResponseReasoningItem\n completedAt: number | null\n}) => {\n if (!item.status) {\n if (completedAt) {\n return 'completed' as const\n } else {\n return 'in_progress' as const\n }\n }\n\n if (item.status === 'incomplete') {\n return 'in_progress' as const\n }\n\n return item.status\n}\n\nexport const serializeItemAsReasoningRunStep = ({\n item,\n openaiAssistant,\n threadId,\n runId,\n completedAt = dayjs().unix(),\n}: {\n item: OpenAI.Responses.ResponseReasoningItem\n openaiAssistant: Pick<OpenAI.Beta.Assistants.Assistant, 'id'>\n threadId: string\n runId: string\n completedAt?: number | null\n}) => {\n const toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall = {\n id: `ftc${item.id}`,\n type: 'function' as const,\n function: {\n name: 'reasoning',\n arguments: '{}',\n output: JSON.stringify({\n summary: item.summary,\n content: item.content,\n encrypted_content: item.encrypted_content,\n }),\n },\n }\n\n return {\n id: `fc${item.id}`,\n object: 'thread.run.step' as const,\n created_at: dayjs().unix(),\n assistant_id: openaiAssistant.id,\n thread_id: threadId,\n run_id: runId,\n status: serializeStatus({ item, completedAt }),\n last_error: null,\n expired_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: completedAt,\n metadata: {},\n usage: null,\n type: 'tool_calls' as const,\n step_details: {\n type: 'tool_calls' as const,\n tool_calls: [toolCall],\n } satisfies OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails,\n }\n}\n","import type { OpenAI } from 'openai'\nimport { get } from './get'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const steps = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}): { get: RequestHandler } => ({\n get: get({ client, runAdapter }),\n})\n","import type { OpenAI } from 'openai'\nimport type { RunAdapterWithAssistant } from '@/types'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { serializeItemAsFunctionCallRunStep } from '@/lib/items/serializeItemAsFunctionCallRunStep'\nimport { serializeItemAsComputerCallRunStep } from '@/lib/items/serializeItemAsComputerCallRunStep'\n\nconst serializeTools = ({\n tools,\n}: {\n tools: OpenAI.Beta.Threads.Runs.RunCreateParams['tools']\n}) => {\n if (!tools?.length) return {}\n\n return {\n tools: tools.map((tool) => ({\n type: tool.type,\n // @ts-ignore-next-line\n ...(tool[tool.type] || {}),\n }))\n }\n}\n\nconst computerCallOutput = ({\n toolOutput,\n}: {\n toolOutput: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs'][number]\n}) => {\n if (typeof toolOutput.output !== 'string') return { isComputerCallOutput: false }\n\n let parsedOutput\n\n try {\n parsedOutput = JSON.parse(toolOutput.output)\n } catch {\n return { isComputerCallOutput: false }\n }\n\n if (typeof parsedOutput !== 'object' || parsedOutput === null) return { isComputerCallOutput: false }\n if (parsedOutput.type !== 'computer_screenshot') return { isComputerCallOutput: false }\n\n return {\n isComputerCallOutput: true,\n parsedOutput,\n }\n}\n\nconst getToolCallOutputItems = ({\n tool_outputs,\n}: {\n tool_outputs: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs']\n}) => {\n const functionCallOutputItems: Omit<OpenAI.Responses.ResponseFunctionToolCallOutputItem, 'id'>[] = []\n const computerCallOutputItems: Omit<OpenAI.Responses.ResponseComputerToolCallOutputItem, 'id'>[] = []\n\n tool_outputs.forEach((toolOutput) => {\n const { isComputerCallOutput, parsedOutput } = computerCallOutput({ toolOutput })\n\n if (isComputerCallOutput) {\n computerCallOutputItems.push({\n type: 'computer_call_output' as const,\n call_id: toolOutput.tool_call_id!,\n output: parsedOutput,\n // @ts-expect-error compat\n acknowledged_safety_checks: toolOutput.acknowledged_safety_checks ?? [],\n })\n } else {\n functionCallOutputItems.push({\n type: 'function_call_output' as const,\n call_id: toolOutput.tool_call_id!,\n output: toolOutput.output ?? '',\n })\n }\n })\n\n return {\n functionCallOutputItems,\n computerCallOutputItems,\n }\n}\n\nconst truncation = ({\n openaiAssistant,\n}: {\n openaiAssistant: any\n}) => {\n if (openaiAssistant.truncation_strategy?.type === 'disabled') {\n return 'disabled'\n }\n\n return 'auto'\n}\n\nexport const post = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}) => async (urlString: string, options: any) => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(new RegExp(submitToolOutputsRegexp))!\n\n const body = JSON.parse(options.body)\n\n const {\n tool_outputs,\n stream,\n } = body\n\n const toolCallOutputItems = getToolCallOutputItems({ tool_outputs })\n const input = [...toolCallOutputItems.functionCallOutputItems, ...toolCallOutputItems.computerCallOutputItems]\n\n const previousResponse = await client.responses.retrieve(runId)\n\n const openaiAssistant = await runAdapter.getOpenaiAssistant()\n\n const response = await client.responses.create({\n conversation: threadId,\n input,\n instructions: openaiAssistant.instructions,\n model: openaiAssistant.model,\n // metadata,\n stream,\n ...serializeTools({ tools: openaiAssistant.tools }),\n truncation: truncation({ openaiAssistant }),\n // text: response_format,\n })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n toolCallOutputItems.functionCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => (\n i.type === 'function_call' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseFunctionToolCall | undefined\n\n if (!toolCallItem) {\n return\n }\n\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeItemAsFunctionCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.functionCallOutputItems,\n threadId,\n openaiAssistant,\n runId,\n })\n })}\\n\\n`)\n })\n\n toolCallOutputItems.computerCallOutputItems.forEach((item) => {\n const toolCallItem = previousResponse.output.find((i) => (\n i.type === 'computer_call' &&\n i.call_id === item.call_id\n )) as OpenAI.Responses.ResponseComputerToolCall | undefined\n\n if (!toolCallItem) {\n return\n }\n\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeItemAsComputerCallRunStep({\n item: toolCallItem,\n items: toolCallOutputItems.computerCallOutputItems,\n threadId,\n openaiAssistant,\n runId,\n })\n })}\\n\\n`)\n })\n\n await runAdapter.handleRun({\n threadId,\n response,\n onEvent: async (event) => (\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n ),\n })\n\n controller.close()\n },\n })\n\n return new Response(readableStream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n}\n","import type { OpenAI } from 'openai'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\nimport { post } from './post'\n\nexport const submitToolOutputs = ({\n client,\n runAdapter,\n}: {\n client: OpenAI\n runAdapter: RunAdapterWithAssistant\n}): { post: RequestHandler } => ({\n post: post({\n client,\n runAdapter,\n }),\n})\n","import type { RunAdapterWithAssistant } from '@/types'\nimport type { OpenAI } from 'openai'\n\ntype ListResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Assistants['list']>>\n}\n\nexport const get = ({\n runAdapter,\n}: {\n runAdapter: RunAdapterWithAssistant\n}) => async (_urlString: string): Promise<ListResponse> => {\n return new Response(JSON.stringify({\n data: [await runAdapter.getOpenaiAssistant()],\n has_more: false,\n last_id: (await runAdapter.getOpenaiAssistant({ select: { id: true } })).id,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","export const post = () =>\n async () => (\n new Response(\n JSON.stringify({\n error: {\n message: 'Assistant creation is not implemented for the Responses storage adapter.',\n type: 'not_implemented',\n },\n }),\n {\n status: 501,\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n )\n )\n","import { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler, RunAdapterWithAssistant } from '@/types'\n\nexport const assistants = ({\n runAdapter,\n}: {\n runAdapter: RunAdapterWithAssistant\n}): { get: RequestHandler, post: RequestHandler } => ({\n get: get({ runAdapter }),\n post: post(),\n})\n","import type { OpenAI } from 'openai'\nimport { StorageAdapterArgs, RunAdapterWithAssistant } from '@/types'\nimport type { RequestHandler } from '@/types'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { runRegexp } from '@/lib/runs/runRegexp'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { threads } from './threads'\nimport { messages } from './threads/messages'\nimport { runs } from './threads/runs'\nimport { run } from './threads/run'\nimport { steps } from './threads/runs/steps'\nimport { submitToolOutputs } from './threads/runs/submitToolOutputs'\nimport { assistants } from './assistants'\n\ntype MethodHandlers = { get?: RequestHandler; post?: RequestHandler }\n\ntype ResponsesStorageAdapterArgs = StorageAdapterArgs & {\n runAdapter: RunAdapterWithAssistant\n}\n\nexport const responsesStorageAdapter = (): ((args: ResponsesStorageAdapterArgs) => { requestHandlers: Record<string, MethodHandlers> }) => {\n const createResponseItems: OpenAI.Responses.ResponseInputItem[] = []\n\n return ({ runAdapter, client }: ResponsesStorageAdapterArgs) => ({\n requestHandlers: {\n '^/(?:v1|/?openai)/assistants$': assistants({ runAdapter }),\n '^/(?:v1|/?openai)/threads$': threads({ client }),\n [messagesRegexp]: messages({ client, runAdapter, createResponseItems }),\n [runsRegexp]: runs({ client, runAdapter, createResponseItems }),\n [runRegexp]: run({ client, runAdapter }),\n [stepsRegexp]: steps({ client, runAdapter }),\n [submitToolOutputsRegexp]: submitToolOutputs({ client, runAdapter }),\n },\n })\n}\n","import dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\nimport { serializeItemAsMessageCreationRunStep } from '@/lib/items/serializeItemAsMessageCreationRunStep'\nimport { saveResponseItemsToConversationMetadata } from '@/lib/responses/saveResponseItemsToConversationMetadata'\nimport { serializeItemAsImageGenerationRunStep } from '@/lib/items/serializeItemAsImageGenerationRunStep'\nimport { serializeItemAsWebSearchRunStep } from '@/lib/items/serializeItemAsWebSearchRunStep'\nimport { serializeItemAsMcpListToolsRunStep } from '@/lib/items/serializeItemAsMcpListToolsRunStep'\nimport { serializeItemAsMcpCallRunStep } from '@/lib/items/serializeItemAsMcpCallRunStep'\nimport { serializeItemAsCodeInterpreterCallRunStep } from '@/lib/items/serializeItemAsCodeInterpreterCallRunStep'\nimport { serializeItemAsComputerCallRunStep } from '@/lib/items/serializeItemAsComputerCallRunStep'\nimport { serializeItemAsReasoningRunStep } from '@/lib/items/serializeItemAsReasoningRunStep'\n\ntype Args = {\n select?: {\n id?: boolean;\n };\n}\n\ntype NormalizedArgs = {\n select: {\n id: boolean;\n };\n};\n\nconst serializeToolCalls = ({\n toolCalls,\n}: {\n toolCalls: OpenAI.Responses.ResponseFunctionToolCall[] | OpenAI.Responses.ResponseComputerToolCall[]\n}) => (\n toolCalls.map((toolCall) => {\n if (toolCall.type === 'function_call') {\n return {\n id: toolCall.call_id,\n type: 'function' as const,\n function: {\n name: toolCall.name,\n arguments: toolCall.arguments,\n },\n }\n } else if (toolCall.type === 'computer_call') {\n return {\n id: toolCall.call_id,\n type: 'computer_call' as const,\n computer_call: {\n action: toolCall.action,\n pending_safety_checks: toolCall.pending_safety_checks,\n },\n }\n }\n }) as OpenAI.Beta.Threads.Runs.RequiredActionFunctionToolCall[]\n)\n\nexport const responsesRunAdapter =\n ({\n getOpenaiAssistant: getDirectOpenaiAssistant,\n waitUntil = <T>(p: Promise<T>) => p.then(() => {})\n }: {\n getOpenaiAssistant: (args?: Args) => Promise<OpenAI.Beta.Assistants.Assistant> | OpenAI.Beta.Assistants.Assistant | Pick<OpenAI.Beta.Assistants.Assistant, 'id'> | Promise<Pick<OpenAI.Beta.Assistants.Assistant, 'id'>>\n waitUntil?: <T>(p: Promise<T>) => void | Promise<void>\n }) => {\n let cachedOpenaiAssistant: OpenAI.Beta.Assistants.Assistant | null = null\n\n const getOpenaiAssistant = async ({ select: { id = false } = {} }: Args = {}) => {\n const args: NormalizedArgs = { select: { id } }\n\n if (args.select.id) {\n return {\n id: (await getDirectOpenaiAssistant({ select: { id: true } })).id,\n }\n }\n\n if (cachedOpenaiAssistant) return cachedOpenaiAssistant\n\n cachedOpenaiAssistant = await getDirectOpenaiAssistant() as OpenAI.Beta.Assistants.Assistant\n return cachedOpenaiAssistant\n }\n\n const handleRun = async ({\n client,\n threadId,\n response,\n onEvent,\n }: {\n client: OpenAI\n threadId: string\n response: AsyncIterable<any>\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n }) => {\n let responseCreatedResponse: OpenAI.Responses.Response | null = null\n const toolCalls: Record<string, OpenAI.Responses.ResponseFunctionToolCall> = {}\n const mcpCalls: Record<string, OpenAI.Responses.ResponseItem.McpCall> = {}\n const codeInterpreterCalls: Record<string, OpenAI.Responses.ResponseCodeInterpreterToolCall> = {}\n\n let itemIds: string[] = []\n\n try {\n for await (const event of response as AsyncIterable<OpenAI.Responses.ResponseStreamEvent>) {\n switch (event.type) {\n case 'response.created':\n responseCreatedResponse = event.response\n\n await onEvent({\n event: 'thread.run.created',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n break\n\n case 'response.in_progress':\n await onEvent({\n event: 'thread.run.in_progress',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n break\n\n case 'response.completed': {\n itemIds = event.response.output.filter((o) => o.id).map((o) => o.id!)\n\n const toolCalls = event.response.output.filter((o) => o.type === 'function_call' || o.type === 'computer_call') as OpenAI.Responses.ResponseFunctionToolCall[] | OpenAI.Responses.ResponseComputerToolCall[]\n\n if (toolCalls.length > 0) {\n await onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n ...({\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: [\n ...serializeToolCalls({\n toolCalls,\n }),\n ],\n },\n },\n }),\n }\n })\n } else {\n await onEvent({\n event: 'thread.run.completed',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n }\n break\n }\n\n case 'response.failed': {\n await onEvent({\n event: 'thread.run.failed',\n data: serializeResponseAsRun({\n response: event.response,\n assistantId: (await getOpenaiAssistant({ select: { id: true } })).id,\n }),\n })\n break\n }\n\n case 'response.output_text.delta': {\n await onEvent({\n event: 'thread.message.delta',\n data: {\n id: event.item_id,\n delta: {\n content: [{ type: 'text', index: event.content_index, text: { value: event.delta } }],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n\n break\n }\n\n // case 'response.output_text.done': {\n // break\n // }\n //\n case 'response.output_item.added': {\n if (event.item.type === 'message') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n } else if (event.item.type === 'function_call') {\n toolCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'computer_call') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsComputerCallRunStep({\n item: event.item,\n items: [],\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'image_generation_call') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n } else if (event.item.type === 'reasoning') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'web_search_call') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'mcp_list_tools') {\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'mcp_call') {\n mcpCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n } else if (event.item.type === 'code_interpreter_call') {\n codeInterpreterCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.created',\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n completedAt: null,\n })\n })\n }\n\n if (event.item.id) itemIds.push(event.item.id)\n\n break\n }\n\n case 'response.output_item.done': {\n if (event.item.type === 'message') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'function_call') {\n toolCalls[event.item.id!] = event.item\n\n await onEvent({\n event: 'thread.run.step.in_progress',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'image_generation_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsImageGenerationRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'reasoning') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsReasoningRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'web_search_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsWebSearchRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'mcp_list_tools') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMcpListToolsRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'mcp_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMcpCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n } else if (event.item.type === 'code_interpreter_call') {\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsCodeInterpreterCallRunStep({\n item: event.item,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n threadId,\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.run.step.completed',\n data: serializeItemAsMessageCreationRunStep({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n runId: responseCreatedResponse!.id,\n })\n })\n\n await onEvent({\n event: 'thread.message.completed',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant: await getOpenaiAssistant({ select: { id: true } }),\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n })\n })\n }\n\n break\n }\n\n case 'response.function_call_arguments.delta': {\n const toolCall = toolCalls[event.item_id]\n if (!toolCall) break\n\n await onEvent({\n event: 'thread.run.step.delta',\n data: {\n id: event.item_id,\n object: 'thread.run.step.delta',\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: [\n {\n id: toolCall.call_id,\n type: 'function',\n index: event.output_index,\n function: {\n name: toolCall.name,\n arguments: event.delta,\n output: null,\n },\n },\n ],\n },\n },\n }\n })\n\n break\n }\n\n case 'response.mcp_call_arguments.delta': {\n const mcpCall = mcpCalls[event.item_id]\n if (!mcpCall) break\n\n await onEvent({\n event: 'thread.run.step.delta',\n data: {\n id: `fc${event.item_id}`,\n object: 'thread.run.step.delta',\n delta: {\n step_details: {\n type: 'tool_calls',\n tool_calls: [\n {\n id: `ftc${mcpCall.id}`,\n type: 'function',\n index: event.output_index,\n function: {\n name: mcpCall.name,\n arguments: event.delta,\n output: null,\n },\n },\n ],\n },\n },\n }\n })\n\n break\n }\n\n case 'response.image_generation_call.in_progress':\n case 'response.image_generation_call.generating':\n await onEvent({\n event: 'thread.message.in_progress',\n data: {\n id: event.item_id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: 'assistant' as 'assistant',\n content: [],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse!.id,\n attachments: [],\n status: 'in_progress' as 'in_progress',\n metadata: {\n event: JSON.stringify(event),\n },\n },\n })\n\n break\n\n case 'response.image_generation_call.partial_image': {\n await onEvent({\n event: 'thread.message.in_progress',\n data: {\n id: event.item_id,\n object: 'thread.message' as 'thread.message',\n created_at: dayjs().unix(),\n thread_id: threadId,\n completed_at: null,\n incomplete_at: null,\n incomplete_details: null,\n role: 'assistant' as 'assistant',\n content: [{\n type: 'image_url' as 'image_url',\n image_url: {\n url: `data:image/png;base64,${event.partial_image_b64}`,\n // url: `data:image/png;base64,truncated`,\n detail: 'auto' as 'auto',\n },\n }],\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n run_id: responseCreatedResponse!.id,\n attachments: [],\n status: 'in_progress' as 'in_progress',\n metadata: {\n event: JSON.stringify({\n ...event,\n partial_image_b64: 'truncated',\n }),\n },\n },\n })\n\n break\n }\n\n //\n // case 'response.function_call_arguments.done': {\n // break\n // }\n\n default:\n break\n }\n }\n } catch (e: any) {\n await onEvent({\n event: 'thread.run.failed',\n data: {\n id: responseCreatedResponse?.id || `run_${uid(18)}`,\n object: 'thread.run',\n thread_id: threadId,\n assistant_id: (await getOpenaiAssistant({ select: { id: true } })).id,\n status: 'failed',\n failed_at: dayjs().unix(),\n last_error: {\n code: 'server_error',\n message: String(e?.message || e || 'Unknown error'),\n },\n } as any,\n })\n } finally {\n waitUntil(new Promise(async (resolve) => {\n if (responseCreatedResponse?.id && itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n client,\n threadId,\n responseId: responseCreatedResponse.id,\n itemIds,\n })\n }\n\n resolve(true)\n }))\n }\n }\n\n return {\n handleRun,\n getOpenaiAssistant,\n }\n }\n"]}
|