supercompat 3.1.0-beta.4 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.js","../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/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/run/responsesRunAdapter/index.ts","../src/adapters/storage/responsesStorageAdapter/routes/threads.ts","../src/adapters/storage/responsesStorageAdapter/routes/messages.ts","../src/adapters/storage/responsesStorageAdapter/routes/runs.ts","../src/adapters/storage/responsesStorageAdapter/routes/run.ts","../src/adapters/storage/responsesStorageAdapter/routes/steps.ts","../src/adapters/storage/responsesStorageAdapter/routes/submitToolOutputs.ts","../src/adapters/storage/responsesStorageAdapter/helpers/serializeThreadMessage.ts","../src/adapters/storage/responsesStorageAdapter/helpers/onEventBridgeInMemory.ts","../src/adapters/storage/responsesStorageAdapter/index.ts"],"names":["OpenAI","AzureOpenAI","assign","partob","storageRequestHandlers","storage","runAdapter","client","result","requestHandlers","findRequestHandler","url","pathname","URL","key","regex","RegExp","test","originalFetch","args","fetch","options","h","Headers","headers","auth","get","includes","set","apiKey","supercompatFetch","pathHandler","method","requestHandler","toLowerCase","endpointFromBaseUrl","baseURL","replace","supercompat","type","apiVersion","endpoint","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","create","ReadableStream","start","controller","chunk","enqueue","close","groqClientAdapter","openai","omit","isOModel","model","startsWith","systemDeveloperMessages","messages","map","message","role","omitKeys","resultOptions","openaiClientAdapter","azureOpenaiClientAdapter","azureOpenai","mistral","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","serializeMessage","tool_call_id","toolCallId","serializeBody","serializedBody","serializedChunk","complete","mistralClientAdapter","perplexity","id","object","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","content","perplexityClientAdapter","anthropic","uid","fork","isEmpty","nonEmptyContent","nonEmptyMessages","hasContent","next","firstUserMessages","firstMessage","serializeTools","tools","tool","name","function","description","input_schema","parameters","text","toolCall","input","arguments","custom","filter","Boolean","tool_use_id","serializeMessages","systemMessages","otherMessages","system","chatMessages","join","max_tokens","temperature","top_p","messageDelta","partial_json","content_block","anthropicClientAdapter","together","togetherClientAdapter","google","createId","resultChunk","newChoices","googleClientAdapter","humiris","created","logprobs","humirisClientAdapter","ollama","ollamaClientAdapter","_","dayjs","flat","isArray","isObject","validToolCallContentTypes","serializeToolContent","output","isEveryToolPartValid","every","toolPart","serializeToolCall","serializeMessageWithContent","serializeContent","metadata","value","run","messageToolCalls","Array","tc","runStep","runSteps","find","rs","stepDetails","step_details","some","rsTc","getMessages","instructions","updatedToolCall","cloneDeep","Object","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","completionsRunAdapter","clientAdapter","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","response_format","console","failed_at","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","createdAt","tool_resources","prisma","urlString","initialCreatedAt","threadData","subtract","length","format","add","toDate","assistantId","assistant","connect","threads","threadId","completedAt","incompleteAt","incompleteDetails","runId","messageContentBlocks","item","match","last","limit","order","after","pageSize","messagesPlusOne","fromEntries","searchParams","parseInt","findMany","where","take","orderBy","skip","cursor","slice","has_more","last_id","serializeRun","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","runs","runsPlusOne","at","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","expiredAt","Error","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","truncationStrategy","last_messages","include","readableStream","findUnique","modelSlug","additional_instructions","responseFormat","runStepsPlusOne","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","tx","completedRunStep","toolOutput","dir","depth","Promise","resolve","submitToolOutputs","assistants","prismaStorageAdapter","responsesRunAdapter","getAssistant","getConversationId","setConversationId","inputItems","previousResponseId","setLastResponseId","conversationId","conv","mapTools","textBuffer","toolCallByItemId","toolCallDone","latestUserText","page","txt","hasToolOutputs","includeTools","singleTool","responseId","attemptedPrevFallback","prevIdRetries","currentBody","err","retryBody","conversations","flatMap","t","fn","strict","props","keys","properties","required","hasAllRequired","k","hasAdditional","additionalProperties","Map","Set","items","c","String","it","previous_response_id","conversation","responses","evt","call_id","entry","item_id","call","resp","out","maxAttempts","attempt","isLocked","from","values","trim","param","r","setTimeout","createThreadsHandlers","Math","floor","Date","now","createMessagesHandlers","ensureConversation","serializeThreadMessage","setLastUserText","combined","m","convId","contentItems","msg","i","createRunsHandlers","onEventBridge","runLastResponseId","getLastUserText","startRun","readable","hasTool","seedText","respId","catch","s","res","createRunHandlers","runCompletedAfterTool","runToolSubmitted","toolStepNow","stepsNow","hasToolNow","calls","sawOutput","sawAssistant","random","toString","createStepsHandlers","createSubmitToolOutputsHandlers","existingRun","resumed","convId2","onEventBridgeInMemory","prev","step","assigned","payload","idx","existing","merged","prevCalls","addCalls","findIndex","responsesStorageAdapter","threadLastUserText","a","beta","retrieve","threadsHandler","messagesHandler","runsHandler","runHandler","stepsHandler","submitToolOutputsHandler"],"mappings":"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","sourcesContent":["// src/supercompat.ts\nimport OpenAI, { AzureOpenAI } from \"openai\";\n\n// src/supercompatFetch/requestHandlers.ts\nimport { assign, partob } from \"radash\";\nvar storageRequestHandlers = ({ storage, runAdapter, client }) => {\n if (!storage)\n return {};\n if (!runAdapter)\n return {};\n const result = storage({ runAdapter: partob(runAdapter, { client }) });\n return result.requestHandlers;\n};\nvar requestHandlers = ({ client, storage, runAdapter }) => assign(client.requestHandlers, storageRequestHandlers({\n storage,\n runAdapter,\n client\n}));\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({ url, requestHandlers: requestHandlers2 }) => {\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 = ({ args, client }) => {\n if (client.client?.fetch) {\n const [url, options] = args;\n const h = new Headers(options?.headers);\n const auth = h.get(\"Authorization\");\n if (!auth || auth.includes(\"SUPERCOMPAT_PLACEHOLDER\")) {\n h.set(\"Authorization\", `Bearer ${client.client.apiKey}`);\n }\n return client.client.fetch(url, { ...options, headers: h });\n } else {\n return fetch(...args);\n }\n};\n\n// src/supercompatFetch/index.ts\nvar supercompatFetch = ({ client, storage, runAdapter }) => {\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 = ({ baseURL }) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({ client, storage, runAdapter }) => {\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 return new OpenAI({\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 = ({ groq }) => 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 = ({ groq }) => ({\n get: get({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/completions/post.ts\nvar post = ({ groq }) => 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 = ({ groq }) => ({\n post: post({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/index.ts\nvar groqClientAdapter = ({ groq }) => ({\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 = ({ openai }) => 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 = ({ openai }) => ({\n get: get2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nimport { omit } from \"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 = ({ messages: messages3, model }) => {\n if (isOModel({ model })) {\n return messages3.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 messages3;\n};\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar omitKeys = ({ model }) => {\n if (isOModel({ model })) {\n return [\"tools\"];\n }\n return [];\n};\nvar post2 = ({ openai }) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages3 = body.messages;\n const resultOptions = {\n ...omit(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages: messages3,\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 = ({ openai }) => ({\n post: post2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/index.ts\nvar openaiClientAdapter = ({ openai }) => ({\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 = ({ azureOpenai }) => ({\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 = ({ mistral }) => 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 = ({ mistral }) => ({\n get: get3({ mistral })\n});\n\n// src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts\nvar serializeDelta = ({ delta: { toolCalls, ...rest } }) => ({\n ...rest,\n ...toolCalls ? {\n tool_calls: toolCalls\n } : {}\n});\nvar serializeChoice = ({ choice: { finishReason, delta, ...rest } }) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta })\n});\nvar serializeChunk = ({ chunk }) => ({\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 = ({ message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n} }) => ({\n ...rest,\n ...tool_call_id ? {\n toolCallId: tool_call_id\n } : {},\n ...tool_calls ? {\n toolCalls: tool_calls\n } : {}\n});\nvar serializeBody = ({ body }) => ({\n ...body,\n messages: body.messages.map((message) => serializeMessage({\n message\n }))\n});\n\n// src/adapters/client/mistralClientAdapter/completions/post.ts\nvar post3 = ({ mistral }) => 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 = ({ mistral }) => ({\n post: post3({ mistral })\n});\n\n// src/adapters/client/mistralClientAdapter/index.ts\nvar mistralClientAdapter = ({ mistral }) => ({\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 = ({ perplexity }) => 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 = ({ perplexity }) => ({\n get: get4({ perplexity })\n});\n\n// src/lib/messages/alternatingMessages.ts\nvar agentSideRoles = [\"assistant\", \"system\"];\nvar alternatingMessages = ({ messages: messages3 }) => {\n const result = [];\n messages3.forEach((message, index) => {\n result.push(message);\n const nextMessage = messages3[index + 1];\n if (!nextMessage)\n 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 = ({ perplexity }) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages3 = alternatingMessages({\n messages: body.messages\n });\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages: messages3\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 = ({ perplexity }) => ({\n post: post4({ perplexity })\n});\n\n// src/adapters/client/perplexityClientAdapter/index.ts\nvar perplexityClientAdapter = ({ perplexity }) => ({\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 = ({ anthropic }) => 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 = ({ anthropic }) => ({\n get: get5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nimport { uid, fork, isEmpty } from \"radash\";\n\n// src/lib/messages/nonEmptyMessages.ts\nvar nonEmptyContent = ({ message }) => {\n if (typeof message.content === \"string\") {\n if (!/\\S/.test(message.content)) {\n return \"-\";\n }\n }\n return message.content;\n};\nvar nonEmptyMessages = ({ messages: messages3 }) => {\n const result = [];\n messages3.forEach((message) => {\n const hasContent = \"content\" in message;\n const next = hasContent ? {\n ...message,\n content: nonEmptyContent({ message })\n } : message;\n result.push(next);\n });\n return result;\n};\n\n// src/lib/messages/firstUserMessages.ts\nvar firstUserMessages = ({ messages: messages3 }) => {\n const firstMessage = messages3[0];\n if (!firstMessage)\n return messages3;\n if (firstMessage.role !== \"user\") {\n return [\n {\n role: \"user\",\n content: \"-\"\n },\n ...messages3\n ];\n }\n return messages3;\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts\nvar serializeTools = ({ tools }) => (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 = ({ message }) => {\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 if (toolCall.type === \"function\") {\n return {\n type: \"tool_use\",\n id: toolCall.id,\n name: toolCall.function.name,\n input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {}\n };\n }\n if (toolCall.type === \"custom\") {\n let input = {};\n try {\n input = toolCall.custom.input ? JSON.parse(toolCall.custom.input) : {};\n } catch {\n input = toolCall.custom.input ?? {};\n }\n return {\n type: \"tool_use\",\n id: toolCall.id,\n name: toolCall.custom.name,\n input\n };\n }\n return null;\n }).filter(Boolean)\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 = ({ messages: messages3 }) => messages3.map((message) => serializeMessage2({\n message\n}));\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar post5 = ({ anthropic }) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const messages3 = body.messages;\n const [systemMessages, otherMessages] = fork(messages3, (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 model: body.model,\n stream: body.stream ? isEmpty(body.tools) : false,\n system,\n messages: serializeMessages({ messages: chatMessages }),\n max_tokens: 4096,\n tools: serializeTools({ tools: body.tools }),\n temperature: body.temperature,\n top_p: body.top_p\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 const delta = chunk.delta.type === \"input_json_delta\" ? {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json\n }\n }\n ]\n } : {\n content: chunk.delta.text\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 controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n const delta = chunk.content_block.type === \"tool_use\" ? {\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 content: chunk.content_block.text\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 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 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 = ({ anthropic }) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({ anthropic }) => ({\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 = ({ together }) => 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 = ({ together }) => ({\n get: get6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/completions/post.ts\nvar post6 = ({ together }) => 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 = ({ together }) => ({\n post: post6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/index.ts\nvar togetherClientAdapter = ({ together }) => ({\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 = ({ google }) => 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 = ({ google }) => ({\n get: get7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/completions/post.ts\nimport { createId } from \"@paralleldrive/cuid2\";\nvar post7 = ({ google }) => 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_${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 = ({ google }) => ({\n post: post7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/index.ts\nvar googleClientAdapter = ({ google }) => ({\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 = ({ humiris }) => 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 = ({ humiris }) => ({\n get: get8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/completions/post.ts\nvar post8 = ({ humiris }) => 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 = ({ humiris }) => ({\n post: post8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/index.ts\nvar humirisClientAdapter = ({ humiris }) => ({\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 = ({ ollama }) => 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 = ({ ollama }) => ({\n get: get9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/completions/post.ts\nvar post9 = ({ ollama }) => 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 = ({ ollama }) => ({\n post: post9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/index.ts\nvar ollamaClientAdapter = ({ ollama }) => ({\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\nimport _ from \"lodash\";\nimport { uid as uid2, omit as omit3, isEmpty as isEmpty2 } from \"radash\";\nimport dayjs from \"dayjs\";\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nimport { flat } from \"radash\";\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\nimport { isArray, isObject } from \"radash\";\nvar validToolCallContentTypes = [\n \"image\",\n \"text\"\n];\nvar serializeToolContent = ({ toolCall }) => {\n if (isArray(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!isObject(toolPart))\n 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 = ({ toolCall }) => ({\n tool_call_id: toolCall.id,\n role: \"tool\",\n content: serializeToolContent({\n toolCall\n })\n});\nvar serializeMessageWithContent = ({ message }) => ({\n role: message.role,\n content: serializeContent({\n content: message.content\n }),\n ...message.role === \"assistant\" && message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}\n});\nvar serializeContent = ({ content }) => content.map((content2) => content2.text.value).join(\"\\n\");\nvar serializeMessage3 = ({ message }) => {\n const result = [\n serializeMessageWithContent({ message })\n ];\n const run2 = message.run;\n if (!run2)\n return result;\n const messageToolCalls = Array.isArray(message?.metadata?.toolCalls) ? message.metadata.toolCalls : [];\n messageToolCalls.forEach((tc) => {\n const runStep = run2.runSteps.find((rs) => {\n if (rs.type !== \"tool_calls\")\n return false;\n const stepDetails2 = rs.step_details;\n return stepDetails2.tool_calls.some((rsTc) => {\n if (rsTc.type !== \"function\")\n return false;\n return rsTc.id === tc.id;\n });\n });\n if (!runStep)\n return;\n const stepDetails = runStep.step_details;\n const toolCall = stepDetails.tool_calls.find((rsTc) => {\n if (rsTc.type !== \"function\")\n return false;\n return rsTc.id === tc.id;\n });\n result.push(serializeToolCall({ toolCall }));\n });\n return result;\n};\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar messages = async ({ run: run2, getMessages: getMessages2 }) => [\n ...run2.instructions ? [{\n role: \"system\",\n content: run2.instructions\n }] : [],\n ...flat((await getMessages2()).map((message) => serializeMessage3({ message })))\n];\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar updatedToolCall = ({ toolCall, delta }) => {\n if (!toolCall)\n return omit3(delta, [\"index\"]);\n const result = _.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 = ({ prevToolCalls, delta }) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: uid2(24),\n type: \"function\",\n ...omit3(tc, [\"index\"])\n }));\n }\n const newToolCalls = _.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 = () => async ({ client: clientAdapter, run: run2, onEvent: onEvent2, getMessages: getMessages2 }) => {\n if (run2.status !== \"queued\")\n return;\n const client = supercompat({\n client: clientAdapter\n });\n onEvent2({\n event: \"thread.run.in_progress\",\n data: {\n ...run2,\n status: \"in_progress\"\n }\n });\n const opts = {\n messages: await messages({\n run: run2,\n getMessages: getMessages2\n }),\n model: run2.model,\n stream: true,\n response_format: run2.response_format,\n ...isEmpty2(run2.tools) ? {} : { tools: run2.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 ...run2,\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 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: run2.id,\n created_at: dayjs().unix(),\n assistant_id: run2.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run2.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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.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 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)\n 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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.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 onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: delta.tool_calls.map((tc) => ({\n id: uid2(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 (isEmpty2(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run2,\n status: \"completed\",\n completed_at: dayjs().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run2,\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// 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\nimport dayjs3 from \"dayjs\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nimport dayjs2 from \"dayjs\";\nvar serializeThread = ({ thread }) => ({\n id: thread.id,\n object: \"thread\",\n created_at: dayjs2(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 = ({ prisma }) => async (urlString, options) => {\n const body = JSON.parse(options.body || \"{}\");\n const messages3 = body.messages || [];\n const metadata = body.metadata || {};\n const initialCreatedAt = dayjs3().subtract(messages3.length, \"seconds\").format();\n const threadData = {\n metadata: metadata || {},\n messages: {\n create: messages3.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: dayjs3(initialCreatedAt).add(index, \"seconds\").toDate()\n }))\n }\n };\n if (metadata.assistantId) {\n threadData.assistant = { connect: { id: metadata.assistantId } };\n }\n const thread = await prisma.thread.create({ data: threadData });\n return new Response(JSON.stringify(serializeThread({ thread })), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/index.ts\nvar threads = ({ prisma }) => ({\n post: post10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nimport { isArray as isArray2 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nimport dayjs4 from \"dayjs\";\nimport { assign as assign2 } from \"radash\";\nvar serializeMessage4 = ({ message }) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: dayjs4(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs4(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs4(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: assign2(message.metadata ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {})\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({ content }) => {\n if (isArray2(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 = ({ prisma }) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\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(serializeMessage4({ message })), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nimport { assign as assign3, last } from \"radash\";\nvar get10 = ({ prisma }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const { limit, order, after } = assign3({\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 },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const messages3 = messagesPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: messages3.map((message) => serializeMessage4({ message })),\n has_more: messagesPlusOne.length > pageSize,\n last_id: last(messages3)?.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 = ({ prisma }) => ({\n post: post11({ prisma }),\n get: get10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nimport { assign as assign4 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nimport dayjs5 from \"dayjs\";\nvar serializeRun = ({ run: run2 }) => ({\n id: run2.id,\n object: \"thread.run\",\n created_at: dayjs5(run2.createdAt).unix(),\n thread_id: run2.threadId,\n assistant_id: run2.assistantId,\n status: run2.status.toLowerCase(),\n required_action: run2.requiredAction,\n last_error: run2.lastError,\n expires_at: dayjs5(run2.expiresAt).unix(),\n started_at: run2.startedAt ? dayjs5(run2.startedAt).unix() : null,\n cancelled_at: run2.cancelledAt ? dayjs5(run2.cancelledAt).unix() : null,\n failed_at: run2.failedAt ? dayjs5(run2.failedAt).unix() : null,\n completed_at: run2.completedAt ? dayjs5(run2.completedAt).unix() : null,\n model: run2.model,\n instructions: run2.instructions,\n tools: run2.tools,\n metadata: run2.metadata,\n usage: run2.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/get.ts\nvar get11 = ({ prisma }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const { limit, order, after } = assign4({\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 },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runs2 = runsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runs2.map((run2) => serializeRun({ run: run2 })),\n has_more: runsPlusOne.length > pageSize,\n last_id: runs2.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\nimport dayjs7 from \"dayjs\";\nimport { assign as assign5 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({ prisma, event, controller }) => {\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 = ({ prisma, event, controller }) => {\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 lastError: event.data.last_error\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts\nvar threadRunCompleted = ({ prisma, event, controller }) => {\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 = ({ prisma, event, controller }) => {\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 requiredAction: event.data.required_action\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nimport dayjs6 from \"dayjs\";\nvar serializeRunStep = ({ runStep }) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: dayjs6(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 ? dayjs6(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs6(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs6(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs6(runStep.completedAt).unix() : null,\n // metadata type from Prisma is JsonValue, cast to OpenAI Metadata\n // @ts-ignore-next-line\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\")\n return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\")\n 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\")\n return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\")\n return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\")\n return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\")\n return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\")\n return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({ prisma, event, controller }) => {\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 = ({ event, controller }) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\")\n return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\")\n return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\")\n return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({ prisma, event, controller }) => {\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\" : \"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 = ({ event, controller }) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts\nvar threadMessageCompleted = async ({ prisma, event, controller }) => {\n controller.enqueue(event);\n if (event.data.tool_calls) {\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: { type: \"tool_calls\", tool_calls: event.data.tool_calls }\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 ...event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}\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 = ({ prisma, controller }) => (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 = ({ run: run2 }) => {\n if (run2.truncationStrategy.type === \"auto\") {\n return null;\n }\n if (run2.truncationStrategy.type === \"last_messages\") {\n if (!run2.truncationStrategy.last_messages) {\n throw new Error(\"Truncation strategy last_messages is required\");\n }\n return -run2.truncationStrategy.last_messages;\n }\n throw new Error(`Unsupported truncation strategy type: ${run2.truncationStrategy.type}`);\n};\nvar getMessages = ({ prisma, run: run2 }) => async () => {\n const take = getTake({\n run: run2\n });\n const messages3 = await prisma.message.findMany({\n where: {\n threadId: run2.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 messages3.map((message) => ({\n ...serializeMessage4({ message }),\n run: message.run ? {\n ...serializeRun({ run: 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 = ({ prisma, runAdapter }) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\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 } = assign5({\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 run2 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: dayjs7().add(1, \"hour\").unix(),\n model,\n instructions,\n tools: tools || [],\n metadata: 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: run2 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter({\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: run2\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: run2.id,\n failed_at: dayjs7().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(data), {\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 = ({ prisma, runAdapter }) => ({\n get: get11({ prisma }),\n post: post12({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get12 = ({ prisma }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const run2 = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId\n }\n });\n if (!run2) {\n return new Response(JSON.stringify({ error: \"run not found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n return new Response(JSON.stringify(serializeRun({ run: run2 })), {\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 = ({ prisma }) => ({\n get: get12({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nimport { assign as assign6 } from \"radash\";\nvar get13 = ({ prisma }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const { limit, order, after } = assign6({\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 = ({ prisma }) => ({\n get: get13({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nimport dayjs8 from \"dayjs\";\nvar updateRun = async ({ prisma, runId, threadId, onThreadRunStepCompleted = () => {\n}, tool_outputs }) => prisma.$transaction(async (tx) => {\n const runSteps = await tx.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 tx.runStep.update({\n where: {\n id: runStep.id\n },\n data: {\n status: \"COMPLETED\",\n completedAt: dayjs8().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 tx.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar post13 = ({ prisma, runAdapter }) => 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 { tool_outputs, stream } = body;\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n const run2 = 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({\n run: serializeRun({ run: run2 }),\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: run2 })\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 run2 = 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({\n run: serializeRun({ run: run2 }),\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: run2 })\n });\n controller.close();\n resolve(void 0);\n }\n }));\n return new Response(JSON.stringify(run2), {\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 = ({ prisma, runAdapter }) => ({\n post: post13({\n prisma,\n // @ts-ignore-next-line\n runAdapter\n })\n});\n\n// src/adapters/storage/prismaStorageAdapter/assistants/post.ts\nimport dayjs9 from \"dayjs\";\nvar post14 = ({ prisma }) => async (_url, options) => {\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: dayjs9().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 = ({ prisma }) => ({ 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 }),\n [stepsRegexp]: steps({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs({ prisma, runAdapter })\n }\n});\n\n// src/adapters/run/responsesRunAdapter/index.ts\nimport dayjs10 from \"dayjs\";\nvar responsesRunAdapter = () => async ({ client, run: run2, onEvent: onEvent2, getAssistant, getConversationId, setConversationId, inputItems, previousResponseId, setLastResponseId }) => {\n if (run2.status !== \"queued\")\n return;\n await onEvent2({\n event: \"thread.run.in_progress\",\n data: { ...run2, status: \"in_progress\" }\n });\n let conversationId = await getConversationId();\n if (!previousResponseId) {\n if (!conversationId) {\n const conv = await client.conversations.create({ metadata: { thread_id: run2.thread_id } });\n conversationId = conv.id;\n await setConversationId(conversationId);\n }\n }\n const { model, instructions } = await getAssistant(run2.assistant_id);\n const mapTools = (run2.tools || []).flatMap((t) => {\n if (t.type !== \"function\")\n return [];\n const fn = t.function;\n let parameters = fn.parameters ?? null;\n let strict = void 0;\n try {\n if (parameters && typeof parameters === \"object\" && parameters.type === \"object\") {\n const props = Object.keys(parameters.properties ?? {});\n const required = Array.isArray(parameters.required) ? parameters.required : [];\n const hasAllRequired = props.every((k) => required.includes(k));\n const hasAdditional = parameters.additionalProperties !== false;\n if (!hasAdditional) {\n strict = hasAllRequired;\n } else {\n parameters = { ...parameters, additionalProperties: false };\n strict = hasAllRequired;\n }\n }\n } catch {\n }\n return [{\n type: \"function\",\n name: fn.name,\n description: fn.description ?? void 0,\n parameters,\n // Encourage tool use by defaulting to strict\n strict: strict ?? true\n }];\n });\n let message = null;\n let toolCallsRunStep = null;\n let textBuffer = \"\";\n const toolCallByItemId = /* @__PURE__ */ new Map();\n const toolCallDone = /* @__PURE__ */ new Set();\n try {\n let latestUserText = \"\";\n if (!previousResponseId && conversationId) {\n try {\n const page = await client.conversations.items.list(conversationId, { order: \"desc\" });\n for await (const item of page) {\n if (item.type === \"message\" && item.role === \"user\") {\n const content = item.content ?? [];\n const txt = content.find((c) => c.type === \"input_text\")?.text ?? content.find((c) => c.type === \"text\")?.text ?? \"\";\n latestUserText = String(txt ?? \"\");\n break;\n }\n }\n } catch {\n }\n }\n const hasToolOutputs = Array.isArray(inputItems) && inputItems.some((it) => it?.type === \"function_call_output\");\n const includeTools = mapTools.length > 0 && !hasToolOutputs;\n const singleTool = includeTools && mapTools.length === 1 ? mapTools[0] : null;\n const body = {\n model,\n input: inputItems && inputItems.length > 0 ? inputItems : latestUserText ?? \"\",\n ...instructions || run2.instructions ? { instructions: run2.instructions || instructions || \"\" } : {},\n ...includeTools ? { tools: mapTools, parallel_tool_calls: true, tool_choice: \"required\" } : {},\n ...singleTool ? { tool_choice: { type: \"function\", name: singleTool.name } } : {}\n };\n if (previousResponseId) {\n body.previous_response_id = previousResponseId;\n } else if (conversationId) {\n body.conversation = { id: conversationId };\n }\n let responseId = null;\n let attemptedPrevFallback = false;\n let prevIdRetries = 0;\n let currentBody = body;\n while (true) {\n let stream;\n try {\n stream = await client.responses.stream(currentBody);\n for await (const evt of stream) {\n switch (evt.type) {\n case \"response.created\": {\n responseId = evt.response?.id ?? responseId;\n if (responseId && setLastResponseId)\n await setLastResponseId(responseId);\n break;\n }\n case \"response.in_progress\": {\n await onEvent2({ event: \"thread.run.in_progress\", data: { ...run2, status: \"in_progress\" } });\n break;\n }\n case \"response.output_item.added\": {\n const item = evt.item;\n if (item.type === \"message\" && item.role === \"assistant\") {\n if (!message) {\n 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: run2.id,\n created_at: dayjs10().unix(),\n assistant_id: run2.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run2.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n 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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: dayjs10().unix(),\n created_at: dayjs10().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: { message_id: message.id }\n }\n }\n });\n }\n }\n if (item.type === \"function_call\" || item.type === \"tool_call\" || item.type === \"custom_tool_call\") {\n const call_id = item.call_id ?? item.id;\n const entry = { call_id, name: item.name, arguments: item.arguments ?? item.input ?? \"\" };\n if (item.id)\n toolCallByItemId.set(item.id, entry);\n if (call_id)\n toolCallByItemId.set(call_id, entry);\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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: dayjs10().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: { type: \"tool_calls\", tool_calls: [] }\n }\n });\n }\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: [\n {\n id: call_id,\n type: \"function\",\n function: { name: item.name, arguments: item.arguments ?? \"\" }\n }\n ]\n }\n }\n }\n });\n const toolCalls = Array.from(toolCallByItemId.values());\n await onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run2,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments }\n }))\n }\n }\n }\n });\n }\n break;\n }\n case \"response.output_item.done\": {\n const item = evt.item;\n if (item?.type === \"function_call\" || item?.type === \"custom_tool_call\") {\n const call_id = item.call_id ?? item.id;\n const entry = { call_id, name: item.name, arguments: item.arguments ?? item.input ?? \"\" };\n if (item.id)\n toolCallByItemId.set(item.id, entry);\n if (call_id)\n toolCallByItemId.set(call_id, entry);\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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: dayjs10().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: { type: \"tool_calls\", tool_calls: [] }\n }\n });\n }\n const toolCalls = Array.from(toolCallByItemId.values());\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep?.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments }\n }))\n }\n }\n }\n });\n return await onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run2,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments }\n }))\n }\n }\n }\n });\n }\n break;\n }\n case \"response.output_text.delta\": {\n const delta = evt.delta;\n textBuffer += delta;\n if (!message) {\n 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: run2.id,\n created_at: dayjs10().unix(),\n assistant_id: run2.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run2.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n 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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: dayjs10().unix(),\n created_at: dayjs10().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: { message_id: message.id }\n }\n }\n });\n }\n await onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: message.id,\n delta: {\n content: [\n { type: \"text\", index: 0, text: { value: delta } }\n ]\n }\n }\n });\n break;\n }\n case \"response.function_call_arguments.delta\":\n case \"response.custom_tool_call_input.delta\": {\n const { item_id, delta } = evt;\n const call = toolCallByItemId.get(item_id);\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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: dayjs10().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: { type: \"tool_calls\", tool_calls: [] }\n }\n });\n }\n if (call) {\n call.arguments += delta;\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep?.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: [\n {\n id: call.call_id,\n type: \"function\",\n function: { name: call.name, arguments: delta }\n }\n ]\n }\n }\n }\n });\n }\n break;\n }\n case \"response.function_call_arguments.done\":\n case \"response.custom_tool_call_input.done\": {\n const { item_id } = evt;\n if (item_id)\n toolCallDone.add(item_id);\n break;\n }\n case \"response.completed\": {\n responseId = evt.response?.id ?? responseId;\n if (responseId && setLastResponseId)\n await setLastResponseId(responseId);\n const resp = evt.response;\n if (resp?.output?.length) {\n for (const out of resp.output) {\n if (out.type === \"message\") {\n const txt = out.content?.find?.((c) => c.type === \"output_text\")?.text ?? \"\";\n if (txt && !textBuffer)\n textBuffer = txt;\n } else if (out.type === \"function_call\" || out.type === \"tool_call\" || out.type === \"custom_tool_call\") {\n const call_id = out.call_id ?? out.id;\n const call = { call_id, name: out.name, arguments: out.arguments ?? out.input ?? \"\" };\n if (out.id)\n toolCallByItemId.set(out.id, call);\n if (call_id)\n toolCallByItemId.set(call_id, call);\n }\n }\n }\n if (!message && textBuffer) {\n 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: run2.id,\n created_at: dayjs10().unix(),\n assistant_id: run2.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run2.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n }\n if (message) {\n await onEvent2({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [{ text: { value: textBuffer, annotations: [] }, type: \"text\" }],\n tool_calls: void 0\n }\n });\n }\n if (previousResponseId && (conversationId ?? null) && typeof textBuffer === \"string\" && textBuffer.trim().length > 0) {\n const maxAttempts = 5;\n let attempt = 0;\n while (true) {\n try {\n console.log(\"[responsesRunAdapter] insert assistant -> conversation\", { conversationId, textBuffer });\n await client.conversations.items.create(conversationId, {\n items: [\n {\n type: \"message\",\n role: \"assistant\",\n content: [\n { type: \"output_text\", text: textBuffer }\n ]\n }\n ]\n });\n break;\n } catch (err) {\n const code = err?.code || err?.error?.code;\n const isLocked = code === \"conversation_locked\" || /conversation/i.test(err?.error?.param ?? \"\");\n attempt += 1;\n if (!isLocked || attempt >= maxAttempts)\n throw err;\n await new Promise((r) => setTimeout(r, 200 * attempt));\n }\n }\n }\n const toolCalls = Array.from(toolCallByItemId.values());\n if (toolCalls.length) {\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: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: dayjs10().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: { type: \"tool_calls\", tool_calls: [] }\n }\n });\n }\n await onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep?.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments }\n }))\n }\n }\n }\n });\n return await onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run2,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments }\n }))\n }\n }\n }\n });\n } else {\n return await onEvent2({\n event: \"thread.run.completed\",\n data: { ...run2, status: \"completed\", completed_at: dayjs10().unix() }\n });\n }\n }\n case \"response.failed\":\n case \"error\": {\n return await onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run2,\n failed_at: dayjs10().unix(),\n status: \"failed\",\n last_error: { code: \"server_error\", message: \"response failed\" }\n }\n });\n }\n }\n }\n break;\n } catch (err) {\n const code = err?.code || err?.error?.code;\n if (previousResponseId && hasToolOutputs && code === \"previous_response_not_found\" && prevIdRetries < 5) {\n prevIdRetries += 1;\n await new Promise((r) => setTimeout(r, 150));\n currentBody = body;\n continue;\n }\n if (!hasToolOutputs && !attemptedPrevFallback && previousResponseId) {\n attemptedPrevFallback = true;\n const retryBody = { ...body };\n delete retryBody.previous_response_id;\n if (conversationId)\n retryBody.conversation = { id: conversationId };\n currentBody = retryBody;\n continue;\n }\n throw err;\n }\n break;\n }\n } catch (e) {\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run2,\n failed_at: dayjs10().unix(),\n status: \"failed\",\n last_error: { code: \"server_error\", message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}` }\n }\n });\n }\n};\n\n// src/adapters/storage/responsesStorageAdapter/routes/threads.ts\nimport { uid as uid3 } from \"radash\";\nvar createThreadsHandlers = () => {\n const post15 = async (_url, options) => {\n const body = options.body ? JSON.parse(options.body) : {};\n const metadata = body.metadata ?? {};\n const id = `thread_${uid3(24)}`;\n return new Response(JSON.stringify({ id, object: \"thread\", created_at: Math.floor(Date.now() / 1e3), metadata }), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n };\n return { post: post15 };\n};\n\n// src/adapters/storage/responsesStorageAdapter/routes/messages.ts\nvar createMessagesHandlers = ({ openai, ensureConversation, getConversationId, serializeThreadMessage: serializeThreadMessage2, setLastUserText }) => {\n const get14 = async (url) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/messages$/);\n const threadId = m[1];\n const combined = [];\n const convId = await getConversationId(threadId);\n if (convId) {\n try {\n const list = await openai.conversations.items.list(convId, { order: \"asc\" });\n for await (const it of list) {\n if (it.type === \"message\") {\n combined.push(serializeThreadMessage2({ item: it, threadId }));\n }\n }\n } catch (err) {\n return new Response(JSON.stringify({ error: { message: err?.message ?? \"failed to list messages\" } }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n }\n return new Response(JSON.stringify({ data: combined, has_more: false, last_id: combined.at(-1)?.id ?? null }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n };\n const post15 = async (url, options) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/messages$/);\n const threadId = m[1];\n const body = JSON.parse(options.body);\n const convId = await ensureConversation(threadId);\n const contentItems = Array.isArray(body.content) ? body.content.map((c) => c.type === \"text\" ? { type: \"input_text\", text: c.text } : c) : [{ type: \"input_text\", text: String(body.content ?? \"\") }];\n const txt = String(contentItems.find((c) => c?.type === \"input_text\")?.text ?? \"\" ?? \"\");\n if (txt)\n setLastUserText(threadId, txt);\n let created;\n try {\n created = await openai.conversations.items.create(convId, {\n items: [{ type: \"message\", role: body.role ?? \"user\", content: contentItems }]\n });\n } catch (err) {\n return new Response(JSON.stringify({ error: { message: err?.message ?? \"failed to create message\" } }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n const item = created?.data?.find?.((i) => i.type === \"message\") ?? { type: \"message\", role: body.role ?? \"user\", content: contentItems };\n const msg = serializeThreadMessage2({ item, threadId });\n return new Response(JSON.stringify(msg), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n };\n return { get: get14, post: post15 };\n};\n\n// src/adapters/storage/responsesStorageAdapter/routes/runs.ts\nimport { uid as uid4 } from \"radash\";\nimport dayjs11 from \"dayjs\";\nvar createRunsHandlers = ({ openai, runAdapter, getAssistant, getConversationId, setConversationId, ensureConversation, onEventBridge, runs: runs2, runSteps, runLastResponseId, getLastUserText }) => {\n const post15 = async (url, options) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs$/);\n const threadId = m[1];\n const body = JSON.parse(options.body);\n const assistantId = body.assistant_id;\n const stream = !!body.stream;\n const { model, instructions } = await getAssistant(assistantId);\n const runId = `run_${uid4(24)}`;\n const run2 = {\n id: runId,\n object: \"thread.run\",\n created_at: Math.floor(Date.now() / 1e3),\n thread_id: threadId,\n assistant_id: assistantId,\n status: \"queued\",\n required_action: null,\n last_error: null,\n expires_at: Math.floor(dayjs11().add(1, \"hour\").unix()),\n started_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: null,\n model,\n instructions: body.instructions ?? instructions ?? \"\",\n tools: body.tools ?? [],\n metadata: body.metadata ?? {},\n usage: null,\n truncation_strategy: { type: \"auto\" },\n response_format: { type: \"text\" },\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 runs2.set(runId, run2);\n runSteps.set(runId, []);\n const startRun = async (controller) => {\n const seedText = getLastUserText(threadId);\n await runAdapter({\n client: openai,\n run: run2,\n onEvent: onEventBridge({ controller }),\n getAssistant,\n getConversationId: async () => await getConversationId(threadId),\n setConversationId: async (convId) => await setConversationId(threadId, convId),\n ...seedText ? { inputItems: seedText } : {},\n setLastResponseId: async (respId) => {\n runLastResponseId.set(run2.id, respId);\n }\n });\n };\n if (stream) {\n const readable = new ReadableStream({\n async start(controller) {\n try {\n await startRun(controller);\n } finally {\n controller.close();\n }\n }\n });\n return new Response(readable, { headers: { \"Content-Type\": \"text/event-stream\" } });\n } else {\n void startRun().catch(() => {\n });\n const start = Date.now();\n while (Date.now() - start < 1500) {\n const r = runs2.get(runId);\n const steps2 = runSteps.get(runId) ?? [];\n const hasTool = steps2.some((s) => s.step_details?.type === \"tool_calls\" && s.step_details.tool_calls?.length);\n if (r?.status === \"requires_action\" || r?.status === \"completed\" || r?.status === \"failed\" || hasTool)\n break;\n await new Promise((res) => setTimeout(res, 40));\n }\n return new Response(JSON.stringify(run2), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\", \"openai-poll-after-ms\": \"500\" }\n });\n }\n };\n return { post: post15 };\n};\n\n// src/adapters/storage/responsesStorageAdapter/routes/run.ts\nvar createRunHandlers = ({ openai, runs: runs2, runSteps, getConversationId, runCompletedAfterTool, runToolSubmitted }) => {\n const get14 = async (url) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs\\/([^/]+)$/);\n const threadId = m[1];\n const runId = m[2];\n let run2 = runs2.get(runId);\n if (!run2) {\n return new Response(JSON.stringify({ id: runId, object: \"thread.run\", status: \"queued\" }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\", \"openai-poll-after-ms\": \"500\" }\n });\n }\n if (run2.status !== \"requires_action\" && run2.status !== \"completed\") {\n const start = Date.now();\n if (run2.status === \"in_progress\") {\n while (Date.now() - start < 2500) {\n const stepsNow2 = runSteps.get(runId) ?? [];\n const hasToolNow = stepsNow2.some((s) => s.step_details?.type === \"tool_calls\" && s.step_details.tool_calls?.length);\n if (hasToolNow)\n break;\n await new Promise((res) => setTimeout(res, 40));\n }\n }\n const stepsNow = runSteps.get(runId) ?? [];\n const toolStepNow = stepsNow.find((s) => s.step_details?.type === \"tool_calls\");\n if (toolStepNow?.step_details?.tool_calls?.length) {\n const tool_calls = toolStepNow.step_details.tool_calls.map((tc) => ({\n id: tc.id ?? tc.call_id ?? Math.random().toString(36).slice(2),\n type: \"function\",\n function: { name: tc.function?.name ?? tc.name, arguments: tc.function?.arguments ?? tc.arguments ?? \"\" }\n }));\n run2 = { ...run2, status: \"requires_action\", required_action: { type: \"submit_tool_outputs\", submit_tool_outputs: { tool_calls } } };\n runs2.set(runId, run2);\n }\n if (run2.status !== \"requires_action\") {\n try {\n const convId = await getConversationId(threadId);\n if (convId) {\n const page = await openai.conversations.items.list(convId, { order: \"desc\" });\n const calls = [];\n for await (const it of page) {\n if (it.type === \"function_call\") {\n calls.push({\n id: it.call_id,\n type: \"function\",\n function: { name: it.name, arguments: it.arguments ?? \"\" }\n });\n }\n }\n if (calls.length) {\n run2 = { ...run2, status: \"requires_action\", required_action: { type: \"submit_tool_outputs\", submit_tool_outputs: { tool_calls: calls } } };\n runs2.set(runId, run2);\n }\n }\n } catch {\n }\n }\n }\n if (runCompletedAfterTool.get(runId)) {\n run2 = { ...run2, status: \"completed\", completed_at: Math.floor(Date.now() / 1e3) };\n runs2.set(runId, run2);\n }\n if (run2.status === \"requires_action\") {\n try {\n const convId = await getConversationId(threadId);\n if (convId) {\n const list = await openai.conversations.items.list(convId, { order: \"desc\" });\n let sawOutput = false;\n let sawAssistant = false;\n for await (const it of list) {\n const t = it.type;\n if (t === \"message\" && it.role === \"assistant\") {\n const text = it.content?.find?.((c) => c.type === \"output_text\")?.text;\n if (typeof text === \"string\" && text.length > 0) {\n sawAssistant = true;\n break;\n }\n }\n if (t === \"function_call_output\")\n sawOutput = true;\n }\n if (sawAssistant || sawOutput) {\n run2 = { ...run2, status: \"completed\", completed_at: Math.floor(Date.now() / 1e3) };\n runs2.set(runId, run2);\n }\n }\n } catch {\n }\n }\n if (run2.status === \"requires_action\" && runToolSubmitted.get(runId)) {\n run2 = { ...run2, status: \"completed\", completed_at: Math.floor(Date.now() / 1e3) };\n runs2.set(runId, run2);\n }\n return new Response(JSON.stringify(run2), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\", \"openai-poll-after-ms\": \"500\" }\n });\n };\n return { get: get14 };\n};\n\n// src/adapters/storage/responsesStorageAdapter/routes/steps.ts\nvar createStepsHandlers = ({ runSteps }) => {\n const get14 = async (url) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs\\/([^/]+)\\/steps$/);\n const runId = m[2];\n const steps2 = runSteps.get(runId) ?? [];\n return new Response(JSON.stringify({ data: steps2, has_more: false, last_id: steps2.at(-1)?.id ?? null }), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n };\n return { get: get14 };\n};\n\n// src/adapters/storage/responsesStorageAdapter/routes/submitToolOutputs.ts\nvar createSubmitToolOutputsHandlers = ({ openai, runAdapter, runs: runs2, onEventBridge, getConversationId, ensureConversation, setConversationId, getAssistant, runLastResponseId, runCompletedAfterTool, runToolSubmitted }) => {\n const post15 = async (url, options) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs\\/([^/]+)\\/submit_tool_outputs$/);\n const threadId = m[1];\n const runId = m[2];\n const body = JSON.parse(options.body);\n const { tool_outputs, stream } = body;\n const convId = await ensureConversation(threadId);\n const existingRun = runs2.get(runId);\n if (!existingRun)\n return new Response(JSON.stringify({ error: \"run not found\" }), { status: 404 });\n const startRun = async (controller) => {\n const resumed = { ...existingRun, status: \"queued\", required_action: null };\n runs2.set(runId, resumed);\n runToolSubmitted.set(runId, true);\n await runAdapter({\n client: openai,\n run: resumed,\n onEvent: onEventBridge({ controller }),\n getAssistant,\n getConversationId: async () => await getConversationId(threadId),\n setConversationId: async (convId2) => await setConversationId(threadId, convId2),\n inputItems: tool_outputs.map((t) => ({ type: \"function_call_output\", call_id: t.tool_call_id, output: String(t.output ?? \"\") })),\n previousResponseId: runLastResponseId.get(runId) ?? null,\n setLastResponseId: async (respId) => {\n runLastResponseId.set(runId, respId);\n }\n });\n const r = runs2.get(runId);\n if (r && r.status !== \"completed\") {\n runs2.set(runId, { ...r, status: \"completed\", completed_at: Math.floor(Date.now() / 1e3) });\n }\n runCompletedAfterTool.set(runId, true);\n };\n if (stream) {\n const readable = new ReadableStream({\n async start(controller) {\n try {\n await startRun(controller);\n } finally {\n controller.close();\n }\n }\n });\n return new Response(readable, { headers: { \"Content-Type\": \"text/event-stream\" } });\n } else {\n await startRun().catch(() => {\n });\n return new Response(JSON.stringify(existingRun), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n }\n };\n return { post: post15 };\n};\n\n// src/adapters/storage/responsesStorageAdapter/helpers/serializeThreadMessage.ts\nvar serializeThreadMessage = ({ item, threadId, assistantId }) => ({\n id: item.id ?? `msg_${Math.random().toString(36).slice(2)}`,\n object: \"thread.message\",\n created_at: Math.floor(Date.now() / 1e3),\n thread_id: threadId,\n completed_at: Math.floor(Date.now() / 1e3),\n incomplete_at: null,\n incomplete_details: null,\n role: item.role ?? \"assistant\",\n content: [\n {\n type: \"text\",\n text: {\n value: item.content?.find?.((c) => c.type === \"input_text\")?.text ?? item.content?.find?.((c) => c.type === \"output_text\")?.text ?? item.content?.find?.((c) => c.type === \"text\")?.text ?? item.text ?? \"\",\n annotations: []\n }\n }\n ],\n assistant_id: assistantId ?? null,\n run_id: null,\n attachments: [],\n status: \"completed\",\n metadata: {}\n});\n\n// src/adapters/storage/responsesStorageAdapter/helpers/onEventBridgeInMemory.ts\nimport { uid as uid5 } from \"radash\";\nvar onEventBridgeInMemory = ({ controller, runs: runs2, runSteps, runCompletedAfterTool, getConversationId, openai, ensureConversation }) => async (event) => {\n if (event.event === \"thread.run.in_progress\") {\n const run2 = event.data;\n const prev = runs2.get(run2.id);\n runs2.set(run2.id, { ...prev ?? run2, status: \"in_progress\" });\n }\n if (event.event === \"thread.run.requires_action\") {\n const run2 = event.data;\n const prev = runs2.get(run2.id);\n runs2.set(run2.id, { ...prev ?? run2, status: \"requires_action\", required_action: run2.required_action });\n }\n if (event.event === \"thread.run.completed\") {\n const run2 = event.data;\n const prev = runs2.get(run2.id);\n runs2.set(run2.id, { ...prev ?? run2, status: \"completed\", completed_at: run2.completed_at ?? Math.floor(Date.now() / 1e3) });\n runCompletedAfterTool?.set(run2.id, true);\n }\n if (event.event === \"thread.run.failed\") {\n const run2 = event.data;\n const prev = runs2.get(run2.id);\n runs2.set(run2.id, { ...prev ?? run2, status: \"failed\", failed_at: run2.failed_at ?? Math.floor(Date.now() / 1e3) });\n }\n if (event.event === \"thread.run.step.created\") {\n const step = event.data;\n const list = runSteps.get(step.run_id) ?? [];\n const assigned = {\n ...step,\n id: step.id === \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\" ? `step_${uid5(24)}` : step.id\n };\n runSteps.set(step.run_id, [...list, assigned]);\n try {\n console.log(\"[bridge] step.created\", { runId: step.run_id, type: step?.step_details?.type });\n } catch {\n }\n const payload = { ...event, data: assigned };\n controller?.enqueue(`data: ${JSON.stringify(payload)}\n\n`);\n return assigned;\n }\n if (event.event === \"thread.run.step.delta\") {\n const delta = event.data;\n const list = runSteps.get(delta.run_id) ?? [];\n const idx = list.findIndex((s) => s.id === delta.id);\n if (idx >= 0) {\n const existing = list[idx];\n const merged = { ...existing };\n if (delta.delta?.step_details?.type === \"tool_calls\") {\n const prevCalls = existing.step_details?.tool_calls ?? [];\n const addCalls = delta.delta.step_details.tool_calls ?? [];\n merged.step_details = { type: \"tool_calls\", tool_calls: [...prevCalls, ...addCalls] };\n }\n list[idx] = merged;\n runSteps.set(delta.run_id, list);\n }\n try {\n console.log(\"[bridge] step.delta\", { runId: delta.run_id, id: delta.id, type: delta.delta?.step_details?.type });\n } catch {\n }\n controller?.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n return;\n }\n if (event.event === \"thread.message.created\") {\n const msg = event.data;\n const assigned = {\n ...msg,\n id: msg.id === \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\" ? `msg_${uid5(24)}` : msg.id\n };\n const payload = { ...event, data: assigned };\n controller?.enqueue(`data: ${JSON.stringify(payload)}\n\n`);\n return assigned;\n }\n if (event.event === \"thread.message.delta\") {\n controller?.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n return;\n }\n if (event.event === \"thread.message.completed\") {\n controller?.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n try {\n const threadId = event.data?.thread_id;\n const txt = event.data?.content?.[0]?.text?.value ?? \"\";\n if (openai && typeof threadId === \"string\" && txt && txt.trim().length > 0) {\n let convId = await getConversationId(threadId);\n if (!convId && ensureConversation)\n convId = await ensureConversation(threadId);\n if (convId) {\n const maxAttempts = 5;\n let attempt = 0;\n while (true) {\n try {\n console.log(\"[onEventBridgeInMemory] mirror assistant -> conversation\", { threadId, convId, txt });\n await openai.conversations.items.create(convId, {\n items: [\n { type: \"message\", role: \"assistant\", content: [{ type: \"output_text\", text: txt }] }\n ]\n });\n break;\n } catch (err) {\n const code = err?.code || err?.error?.code;\n const isLocked = code === \"conversation_locked\" || /conversation/i.test(err?.error?.param ?? \"\");\n attempt += 1;\n if (!isLocked || attempt >= maxAttempts)\n break;\n await new Promise((r) => setTimeout(r, 200 * attempt));\n }\n }\n }\n }\n } catch {\n }\n return;\n }\n controller?.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n return event.data;\n};\n\n// src/adapters/storage/responsesStorageAdapter/index.ts\nvar responsesStorageAdapter = ({ openai, getConversationId, setConversationId }) => ({ runAdapter }) => {\n const threadLastUserText = /* @__PURE__ */ new Map();\n const ensureConversation = async (threadId) => {\n let convId = await getConversationId(threadId);\n if (!convId) {\n const conv = await openai.conversations.create({ metadata: { thread_id: threadId } });\n convId = conv.id;\n await setConversationId(threadId, convId);\n }\n return convId;\n };\n const getAssistant = async (assistantId) => {\n const a = await openai.beta.assistants.retrieve(assistantId);\n return { model: a.model, instructions: a.instructions ?? \"\" };\n };\n const runs2 = /* @__PURE__ */ new Map();\n const runSteps = /* @__PURE__ */ new Map();\n const runLastResponseId = /* @__PURE__ */ new Map();\n const runCompletedAfterTool = /* @__PURE__ */ new Map();\n const runToolSubmitted = /* @__PURE__ */ new Map();\n const threadsHandler = createThreadsHandlers();\n const messagesHandler = createMessagesHandlers({\n openai,\n ensureConversation,\n getConversationId,\n serializeThreadMessage,\n setLastUserText: (threadId, text) => {\n if (typeof text === \"string\")\n threadLastUserText.set(threadId, text);\n }\n });\n const runsHandler = createRunsHandlers({\n openai,\n runAdapter,\n getAssistant,\n getConversationId,\n setConversationId,\n ensureConversation,\n onEventBridge: ({ controller }) => onEventBridgeInMemory({ controller, runs: runs2, runSteps, runCompletedAfterTool, getConversationId, openai, ensureConversation }),\n runs: runs2,\n runSteps,\n runLastResponseId,\n getLastUserText: (threadId) => threadLastUserText.get(threadId) ?? \"\"\n });\n const runHandler = createRunHandlers({ openai, runs: runs2, runSteps, getConversationId, runCompletedAfterTool, runToolSubmitted });\n const stepsHandler = createStepsHandlers({ runSteps });\n const submitToolOutputsHandler = createSubmitToolOutputsHandlers({\n openai,\n runAdapter,\n runs: runs2,\n onEventBridge: ({ controller }) => onEventBridgeInMemory({ controller, runs: runs2, runSteps, runCompletedAfterTool, getConversationId, openai, ensureConversation }),\n getConversationId,\n ensureConversation,\n setConversationId,\n getAssistant,\n runLastResponseId,\n runCompletedAfterTool,\n runToolSubmitted\n });\n return {\n requestHandlers: {\n \"^/(?:v1|/?openai)/threads$\": threadsHandler,\n [messagesRegexp]: messagesHandler,\n [runsRegexp]: runsHandler,\n [runRegexp]: runHandler,\n [stepsRegexp]: stepsHandler,\n [submitToolOutputsRegexp]: submitToolOutputsHandler\n }\n };\n};\nexport {\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","import OpenAI, { AzureOpenAI } from 'openai';\nimport { supercompatFetch, type Args } from './supercompatFetch';\nimport { endpointFromBaseUrl } from './lib/azureOpenai/endpointFromBaseUrl';\nexport const supercompat = ({ client, storage, runAdapter, }: 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 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\";\nconst storageRequestHandlers = ({ storage, runAdapter, client, }: {\n storage?: (arg0: StorageAdapterArgs) => any;\n runAdapter?: RunAdapter;\n client: any;\n}) => {\n if (!storage)\n return {};\n if (!runAdapter)\n return {};\n const result = storage({ runAdapter: partob(runAdapter, { client }) });\n return result.requestHandlers;\n};\nexport const requestHandlers = ({ client, storage, runAdapter, }: {\n client: any;\n storage?: (arg0: StorageAdapterArgs) => any;\n runAdapter?: RunAdapter;\n}) => (assign(client.requestHandlers, storageRequestHandlers({\n storage,\n runAdapter,\n client,\n})));\n","export const findRequestHandler = ({ url, requestHandlers, }: {\n url: string;\n requestHandlers: any;\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers[key];\n }\n }\n};\n","export const originalFetch = ({ args, client, }: {\n args: any[];\n client: any;\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args;\n const h = new Headers(options?.headers as any);\n const auth = h.get(\"Authorization\");\n if (!auth || auth.includes(\"SUPERCOMPAT_PLACEHOLDER\")) {\n h.set(\"Authorization\", `Bearer ${client.client.apiKey}`);\n }\n return client.client.fetch(url, { ...options, headers: h });\n }\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';\nexport type Args = {\n client: any;\n storage?: (arg0: StorageAdapterArgs) => any;\n runAdapter?: RunAdapter;\n};\nexport const supercompatFetch = ({ client, storage, runAdapter, }: Args) => {\n const requestHandlers = getRequestHandlers({\n client,\n storage,\n runAdapter,\n });\n return async (...args: any[]) => {\n const [url, options] = args;\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\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","export const endpointFromBaseUrl = ({ baseURL }: {\n baseURL: string;\n}) => (baseURL.replace(/\\/+openai$/, \"\"));\n","import type Groq from 'groq-sdk';\nexport const get = ({ groq, }: {\n groq: Groq;\n}) => async (_url: string, _options: any) => {\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 }\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';\nexport const models = ({ groq, }: {\n groq: Groq;\n}) => ({\n get: get({ groq }),\n});\n","import type Groq from 'groq-sdk';\nexport const post = ({ groq, }: {\n groq: Groq;\n}) => async (_url: string, options: any) => {\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 // @ts-ignore-next-line\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 }\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 }\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';\nexport const completions = ({ groq, }: {\n groq: Groq;\n}) => ({\n post: post({ groq }),\n});\n","// import type Groq from 'groq-sdk'\nimport { models } from './models';\nimport { completions } from './completions';\nexport const groqClientAdapter = ({ groq, }: {\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';\nexport const get = ({ openai, }: {\n openai: OpenAI;\n}) => async (_url: string, _options: any) => {\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 }\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';\nexport const models = ({ openai, }: {\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\";\nconst omitKeys = ({ model, }: {\n model: string;\n}) => {\n if (isOModel({ model })) {\n return [\"tools\"];\n }\n return [];\n};\nexport const post = ({ openai, }: {\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 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 if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions);\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 controller.close();\n },\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n },\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 }\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 }: {\n model: string;\n}) => (model.startsWith(\"o1\") || model.startsWith(\"o3\"));\n","import type OpenAI from 'openai';\nimport { isOModel } from \"../models/isOModel\";\nexport const systemDeveloperMessages = ({ messages, model, }: {\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 return message;\n });\n }\n return messages;\n};\n","import type OpenAI from 'openai';\nimport { post } from './post';\nexport const completions = ({ openai, }: {\n openai: OpenAI;\n}) => ({\n post: post({ openai }),\n});\n","import type OpenAI from 'openai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const openaiClientAdapter = ({ openai, }: {\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 \"../openaiClientAdapter/completions\";\nexport const azureOpenaiClientAdapter = ({ azureOpenai, }: {\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';\nexport const get = ({ mistral, }: {\n mistral: Mistral;\n}) => async (_url: string, _options: any) => {\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 }\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';\nexport const models = ({ mistral, }: {\n mistral: Mistral;\n}) => ({\n get: get({ mistral }),\n});\n","const serializeDelta = ({ delta: { toolCalls, ...rest }, }: {\n delta: any;\n}) => ({\n ...rest,\n ...(toolCalls ? {\n tool_calls: toolCalls,\n } : {}),\n});\nconst serializeChoice = ({ choice: { finishReason, delta, ...rest }, }: {\n choice: any;\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta }),\n});\nexport const serializeChunk = ({ chunk, }: {\n chunk: any;\n}) => ({\n ...chunk.data,\n ...(chunk.data.choices ? {\n choices: chunk.data.choices.map((choice: any) => (serializeChoice({ choice }))),\n } : {}),\n});\n","import type OpenAI from 'openai';\nconst serializeMessage = ({ message: { \n// @ts-ignore-next-line\ntool_calls, \n// @ts-ignore-next-line\ntool_call_id, ...rest }, }: {\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});\nexport const serializeBody = ({ body, }: {\n body: any;\n}) => ({\n ...body,\n messages: body.messages.map((message: OpenAI.ChatCompletionMessageParam) => (serializeMessage({\n message,\n }))),\n});\n","import type { Mistral } from '@mistralai/mistralai';\nimport { serializeChunk } from './serializeChunk';\nimport { serializeBody } from './serializeBody';\nexport const post = ({ mistral, }: {\n mistral: Mistral;\n}) => async (_url: string, options: any) => {\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 }\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 }\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';\nexport const completions = ({ mistral, }: {\n mistral: Mistral;\n}) => ({\n post: post({ mistral }),\n});\n","import type { Mistral } from '@mistralai/mistralai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const mistralClientAdapter = ({ mistral, }: {\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';\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];\nexport const get = ({ perplexity, }: {\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 }\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';\nexport const models = ({ perplexity, }: {\n perplexity: OpenAI;\n}) => ({\n get: get({ perplexity }),\n});\n","import type OpenAI from 'openai';\nconst agentSideRoles = [\"assistant\", \"system\"];\nexport const alternatingMessages = ({ messages, }: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n}) => {\n const result = [] as OpenAI.Chat.ChatCompletionMessageParam[];\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam, index: number) => {\n result.push(message);\n const nextMessage = messages[index + 1];\n if (!nextMessage)\n return;\n if (message.role === \"user\" && nextMessage.role === \"user\") {\n result.push({\n role: \"assistant\",\n content: \"-\",\n });\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","import type OpenAI from 'openai';\nimport { alternatingMessages } from \"../../../../lib/messages/alternatingMessages\";\nexport const post = ({ perplexity, }: {\n perplexity: OpenAI;\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body);\n const messages = alternatingMessages({\n messages: body.messages,\n });\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages,\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 controller.close();\n },\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n },\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 }\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';\nexport const completions = ({ perplexity, }: {\n perplexity: OpenAI;\n}) => ({\n post: post({ perplexity }),\n});\n","import type OpenAI from 'openai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const perplexityClientAdapter = ({ perplexity, }: {\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';\nexport const get = ({ anthropic, }: {\n anthropic: Anthropic;\n}) => async (_url: string, _options: any) => {\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 }\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';\nexport const models = ({ anthropic, }: {\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';\nexport const post = ({ anthropic, }: {\n anthropic: Anthropic;\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body);\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 const chatMessages = nonEmptyMessages({\n messages: firstUserMessages({\n messages: alternatingMessages({\n messages: otherMessages,\n }),\n }),\n });\n const resultOptions: any = {\n model: body.model,\n stream: body.stream ? isEmpty(body.tools) : false,\n system,\n messages: serializeMessages({ messages: chatMessages }),\n max_tokens: 4096,\n tools: serializeTools({ tools: body.tools }),\n temperature: body.temperature,\n top_p: body.top_p,\n };\n if (body.stream) {\n // @ts-ignore-next-line\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 const delta = chunk.delta.type === \"input_json_delta\" ? {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json,\n },\n },\n ]\n } : {\n content: (chunk.delta as any).text,\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 controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`);\n }\n else if (chunk.type === \"content_block_start\") {\n const delta = chunk.content_block.type === \"tool_use\" ? {\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 content: (chunk.content_block as any).text,\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 controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\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 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 }\n else {\n try {\n // @ts-ignore-next-line\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 }\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';\nconst nonEmptyContent = ({ message, }: {\n message: OpenAI.Chat.ChatCompletionMessageParam;\n}): OpenAI.Chat.ChatCompletionMessageParam[\"content\"] => {\n if (typeof message.content === \"string\") {\n if (!/\\S/.test(message.content)) {\n return \"-\";\n }\n }\n return message.content as OpenAI.Chat.ChatCompletionMessageParam[\"content\"];\n};\nexport const nonEmptyMessages = ({ messages, }: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n}) => {\n const result: OpenAI.Chat.ChatCompletionMessageParam[] = [];\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam) => {\n const hasContent = \"content\" in (message as any);\n const next = hasContent\n ? ({\n ...message,\n content: nonEmptyContent({ message }),\n } as any)\n : (message as any);\n result.push(next);\n });\n return result;\n};\n","import type OpenAI from 'openai';\nexport const firstUserMessages = ({ messages, }: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n}): OpenAI.Chat.ChatCompletionMessageParam[] => {\n const firstMessage = messages[0];\n if (!firstMessage)\n return messages;\n if (firstMessage.role !== \"user\") {\n return [\n {\n role: \"user\",\n content: \"-\",\n },\n ...messages,\n ];\n }\n return messages;\n};\n","import type OpenAI from 'openai';\nexport const serializeTools = ({ tools, }: {\n tools: OpenAI.Beta.AssistantTool[] | undefined;\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 return tool;\n}));\n","import type OpenAI from 'openai';\nexport const serializeMessage = ({ message, }: {\n message: OpenAI.ChatCompletionMessageParam;\n}) => {\n if (message.role === \"user\") {\n return {\n role: \"user\",\n content: message.content,\n };\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 ?? [])\n .map((toolCall) => {\n if (toolCall.type === \"function\") {\n return {\n type: \"tool_use\",\n id: toolCall.id,\n name: toolCall.function.name,\n input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {},\n };\n }\n if (toolCall.type === \"custom\") {\n let input: any = {};\n try {\n input = toolCall.custom.input ? JSON.parse(toolCall.custom.input) : {};\n }\n catch {\n input = toolCall.custom.input ?? {};\n }\n return {\n type: \"tool_use\",\n id: toolCall.id,\n name: toolCall.custom.name,\n input,\n };\n }\n return null;\n })\n .filter(Boolean) as any[]),\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';\nexport const serializeMessages = ({ messages, }: {\n messages: OpenAI.ChatCompletionMessageParam[];\n}) => (messages.map(message => (serializeMessage({\n message,\n}))));\n","import type Anthropic from '@anthropic-ai/sdk';\nimport { post } from './post';\nexport const completions = ({ anthropic, }: {\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';\nexport const anthropicClientAdapter = ({ anthropic, }: {\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';\nexport const get = ({ together, }: {\n together: OpenAI;\n}) => async (_url: string, _options: any) => {\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 }\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';\nexport const models = ({ together, }: {\n together: OpenAI;\n}) => ({\n get: get({ together }),\n});\n","import type OpenAI from 'openai';\nexport const post = ({ together, }: {\n together: OpenAI;\n}) => async (_url: string, options: any) => {\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 // @ts-ignore-next-line\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 }\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 }\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';\nexport const completions = ({ together, }: {\n together: OpenAI;\n}) => ({\n post: post({ together }),\n});\n","import type OpenAI from 'openai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const togetherClientAdapter = ({ together, }: {\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';\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];\nexport const get = ({ google, }: {\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 }\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';\nexport const models = ({ google, }: {\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\";\nexport const post = ({ google, }: {\n google: OpenAI;\n}) => async (_url: string, options: any) => {\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 // @ts-ignore-next-line\n for await (const chunk of response) {\n let resultChunk;\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 return toolCall;\n }),\n },\n };\n }\n else {\n return choice;\n }\n });\n resultChunk = {\n ...chunk,\n choices: newChoices,\n };\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 }\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 }\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';\nexport const completions = ({ google, }: {\n google: OpenAI;\n}) => ({\n post: post({ google }),\n});\n","import type OpenAI from 'openai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const googleClientAdapter = ({ google, }: {\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';\nconst models = [\n \"Humiris/humiris-moai\",\n];\nexport const get = ({ humiris, }: {\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 }\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';\nexport const models = ({ humiris, }: {\n humiris: OpenAI;\n}) => ({\n get: get({ humiris }),\n});\n","import type OpenAI from 'openai';\nexport const post = ({ humiris, }: {\n humiris: OpenAI;\n}) => async (_url: string, options: any) => {\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 }\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 }\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';\nexport const completions = ({ humiris, }: {\n humiris: OpenAI;\n}) => ({\n post: post({ humiris }),\n});\n","import type OpenAI from 'openai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const humirisClientAdapter = ({ humiris, }: {\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';\nexport const get = ({ ollama, }: {\n ollama: OpenAI;\n}) => async (_url: string, _options: any) => {\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 }\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';\nexport const models = ({ ollama, }: {\n ollama: OpenAI;\n}) => ({\n get: get({ ollama }),\n});\n","import type OpenAI from 'openai';\nexport const post = ({ ollama, }: {\n ollama: OpenAI;\n}) => async (_url: string, options: any) => {\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 // @ts-ignore-next-line\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 }\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 }\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';\nexport const completions = ({ ollama, }: {\n ollama: OpenAI;\n}) => ({\n post: post({ ollama }),\n});\n","import type OpenAI from 'openai';\nimport { models } from './models';\nimport { completions } from './completions';\nexport const ollamaClientAdapter = ({ ollama, }: {\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';\nimport { supercompat } from \"../../../supercompat\";\nconst updatedToolCall = ({ toolCall, delta, }: {\n toolCall: any;\n delta: any;\n}) => {\n if (!toolCall)\n return omit(delta, [\"index\"]);\n // if (delta.type !== 'function') return toolCall\n const result = _.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};\nconst toolCallsData = ({ prevToolCalls, delta, }: {\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 const newToolCalls = _.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};\nexport const completionsRunAdapter = () => async ({ client: clientAdapter, run, onEvent, getMessages, }: {\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\")\n return;\n const client = supercompat({\n client: clientAdapter,\n });\n onEvent({\n event: \"thread.run.in_progress\",\n data: {\n ...run,\n status: \"in_progress\",\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 let providerResponse;\n try {\n providerResponse = await client.chat.completions.create(opts);\n }\n catch (e: any) {\n console.error(e);\n return onEvent({\n event: \"thread.run.failed\",\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`,\n },\n },\n });\n }\n let message = await onEvent({\n event: \"thread.message.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.message\",\n completed_at: null,\n run_id: run.id,\n created_at: dayjs().unix(),\n assistant_id: run.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\",\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 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)\n 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 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 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 currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\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 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 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 return onEvent({\n event: \"thread.run.requires_action\",\n data: {\n ...run,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: message.toolCalls,\n },\n },\n },\n });\n};\n","import type OpenAI from 'openai';\nimport { flat } from 'radash';\nimport { MessageWithRun } from \"../../../../types\";\nimport { serializeMessage } from './serializeMessage';\nexport const messages = async ({ run, getMessages, }: {\n run: OpenAI.Beta.Threads.Run;\n getMessages: () => Promise<MessageWithRun[]>;\n}) => ([\n ...(run.instructions ? [{\n role: \"system\",\n content: run.instructions,\n }] : []),\n ...flat((await getMessages()).map((message: MessageWithRun) => serializeMessage({ message }))),\n]);\n","import type OpenAI from 'openai';\nimport { MessageWithRun } from \"../../../../types\";\nimport { isArray, isObject } from 'radash';\nconst validToolCallContentTypes = [\n \"image\",\n \"text\",\n];\nconst serializeToolContent = ({ toolCall, }: {\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))\n return false;\n return validToolCallContentTypes.includes((toolPart as any).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};\nconst serializeToolCall = ({ toolCall, }: {\n toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall;\n}): OpenAI.ChatCompletionMessageParam => ({\n tool_call_id: toolCall.id,\n role: \"tool\" as \"tool\",\n content: serializeToolContent({\n toolCall,\n }),\n});\nconst serializeMessageWithContent = ({ message, }: {\n message: MessageWithRun;\n}): OpenAI.ChatCompletionMessageParam => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...((message.role === \"assistant\" && (message as any)?.metadata?.toolCalls)\n ? { tool_calls: (message as any).metadata.toolCalls }\n : {}),\n});\nconst serializeContent = ({ content, }: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[];\n}) => content.map((content) => content.text.value).join(\"\\n\");\nexport const serializeMessage = ({ message }: {\n message: MessageWithRun;\n}) => {\n const result: OpenAI.ChatCompletionMessageParam[] = [\n serializeMessageWithContent({ message }) as OpenAI.ChatCompletionMessageParam,\n ];\n const run = message.run;\n if (!run)\n return result;\n const messageToolCalls: any[] = Array.isArray((message as any)?.metadata?.toolCalls)\n ? ((message as any).metadata.toolCalls as any[])\n : [];\n messageToolCalls.forEach((tc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n const runStep = run.runSteps.find((rs) => {\n if (rs.type !== \"tool_calls\")\n return false;\n const stepDetails = rs.step_details as any;\n return stepDetails.tool_calls.some((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== \"function\")\n return false;\n return rsTc.id === tc.id;\n });\n });\n if (!runStep)\n return;\n const stepDetails = runStep.step_details as any;\n const toolCall = stepDetails.tool_calls.find((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== \"function\")\n return false;\n return rsTc.id === tc.id;\n });\n result.push(serializeToolCall({ toolCall }));\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';\ntype ThreadCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Thread>;\n};\nexport const post = ({ prisma, }: {\n prisma: PrismaClient;\n}) => async (urlString: string, options: RequestInit & {\n body?: string;\n}): Promise<ThreadCreateResponse> => {\n const body = JSON.parse(options.body || \"{}\");\n const messages = body.messages || [];\n const metadata = body.metadata || {};\n const initialCreatedAt = dayjs().subtract(messages.length, \"seconds\").format();\n const threadData: any = {\n metadata: (metadata || {}) as unknown as Prisma.InputJsonValue,\n messages: {\n create: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message, index: number) => ({\n role: message.role === \"user\" ? \"USER\" : \"ASSISTANT\",\n content: ([\n {\n type: \"text\",\n text: {\n annotations: [],\n value: message.content as any,\n },\n },\n ] as unknown) as Prisma.InputJsonValue,\n attachments: (message.attachments || []) as any,\n metadata: (message.metadata || {}) as unknown as Prisma.InputJsonValue,\n createdAt: dayjs(initialCreatedAt).add(index, \"seconds\").toDate(),\n })),\n },\n };\n if (metadata.assistantId) {\n threadData.assistant = { connect: { id: metadata.assistantId } };\n }\n const thread = await prisma.thread.create({ data: threadData });\n return new Response(JSON.stringify(serializeThread({ thread })), {\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';\nexport const serializeThread = ({ thread, }: {\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\";\nexport const threads = ({ prisma, }: {\n prisma: PrismaClient;\n}): {\n post: RequestHandler;\n} => ({\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\";\ntype MessageCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Messages.Message>;\n};\nconst messageContentBlocks = ({ content, }: {\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 return item;\n });\n }\n return [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: [],\n },\n },\n ];\n};\nexport const post = ({ prisma, }: {\n prisma: PrismaClient;\n}) => async (urlString: string, options: RequestInit & {\n body?: string;\n}): Promise<MessageCreateResponse> => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!;\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 }) as unknown as Prisma.InputJsonValue,\n role: role === \"user\" ? \"USER\" : \"ASSISTANT\",\n metadata: (metadata || {}) as unknown as Prisma.InputJsonValue,\n },\n });\n return new Response(JSON.stringify(serializeMessage({ message })), {\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';\nexport const serializeMessage = ({ message, }: {\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 as any).attachments as any,\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';\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages[\"create\"]>>;\n};\nexport const get = ({ prisma, }: {\n prisma: PrismaClient;\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!;\n const { limit, order, after, } = 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 as any },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as Message[];\n const messages = messagesPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: messages.map((message: Message) => (serializeMessage({ message }))),\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\";\nexport const messages = ({ prisma, }: {\n prisma: PrismaClient;\n}): {\n post: RequestHandler;\n get: RequestHandler;\n} => ({\n post: post({ prisma }),\n get: get({ prisma }),\n});\n","import type OpenAI from 'openai';\n// @ts-ignore-next-line\nimport type { PrismaClient, Run } from '@prisma/client';\nimport { assign, last } from 'radash';\nimport { runsRegexp } from \"../../../../../lib/runs/runsRegexp\";\nimport { serializeRun } from './serializeRun';\ntype MessageCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Messages[\"create\"]>>;\n};\nexport const get = ({ prisma, }: {\n prisma: PrismaClient;\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!;\n const { limit, order, after, } = 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 as any },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as Run[];\n const runs = runsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runs.map((run: Run) => serializeRun({ 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';\n// @ts-ignore-next-line\nimport type { Run } from '@prisma/client';\nimport dayjs from 'dayjs';\nexport const serializeRun = ({ run, }: {\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 any,\n metadata: (run.metadata as unknown) as any,\n usage: (run.usage as unknown) as any,\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 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';\ntype RunCreateResponse = Response & {\n json: () => Promise<OpenAI.Beta.Threads.Run>;\n};\nexport const post = ({ prisma, runAdapter, }: {\n prisma: PrismaClient;\n runAdapter: RunAdapterPartobClient;\n}) => async (urlString: string, options: RequestInit & {\n body?: string;\n}): Promise<RunCreateResponse> => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp))!;\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 { model, instructions, \n // additional_instructions,\n tools, metadata, response_format, truncation_strategy, } = 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 run = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: dayjs().add(1, \"hour\").unix(),\n model,\n instructions,\n tools: (tools || []) as any,\n metadata: (metadata || {}) as any,\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 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await (runAdapter as any)({\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 }\n catch (error: any) {\n console.error(error);\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 controller.close();\n },\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n },\n });\n }\n else {\n return new Response(JSON.stringify(data), {\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';\nexport const threadRunInProgress = ({ prisma, event, controller, }: {\n prisma: PrismaClient;\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunInProgress>;\n}) => {\n controller.enqueue(event);\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';\nexport const threadRunFailed = ({ prisma, event, controller, }: {\n prisma: PrismaClient;\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed>;\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.FAILED,\n failedAt: event.data.failed_at,\n lastError: (event.data.last_error as unknown) as Prisma.NullableJsonNullValueInput,\n },\n });\n};\n","import type OpenAI from 'openai';\nimport { RunStatus } from \"../../../../../../../types/prisma\";\nimport type { PrismaClient } from '@prisma/client';\nexport const threadRunCompleted = ({ prisma, event, controller, }: {\n prisma: PrismaClient;\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted>;\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n });\n};\n","import type OpenAI from 'openai';\nimport type { Prisma, PrismaClient } from '@prisma/client';\nimport { RunStatus } from \"../../../../../../../types/prisma\";\nexport const threadRunRequiresAction = ({ prisma, event, controller, }: {\n prisma: PrismaClient;\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction>;\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.REQUIRES_ACTION,\n requiredAction: (event.data.required_action as unknown) as Prisma.NullableJsonNullValueInput,\n },\n });\n};\n","import dayjs from 'dayjs';\n// @ts-ignore-next-line\nimport type { RunStep } from '@prisma/client';\nimport type OpenAI from 'openai';\nexport const serializeRunStep = ({ runStep, }: {\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 type from Prisma is JsonValue, cast to OpenAI Metadata\n // @ts-ignore-next-line\n metadata: (runStep.metadata as unknown) as OpenAI.Beta.Threads.Runs.RunStep[\"metadata\"],\n usage: runStep.usage as OpenAI.Beta.Threads.Runs.RunStep[\"usage\"],\n});\n","import type OpenAI from 'openai';\nimport { RunStepType, RunStepStatus } from \"../../../../../../../types/prisma\";\nimport type { Prisma, PrismaClient } from '@prisma/client';\nimport { serializeRunStep } from '../../steps/serializeRunStep';\nconst type = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.type === \"message_creation\")\n return RunStepType.MESSAGE_CREATION;\n if (event.data.type === \"tool_calls\")\n return RunStepType.TOOL_CALLS;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.status === \"in_progress\")\n return RunStepStatus.IN_PROGRESS;\n if (event.data.status === \"cancelled\")\n return RunStepStatus.CANCELLED;\n if (event.data.status === \"completed\")\n return RunStepStatus.COMPLETED;\n if (event.data.status === \"failed\")\n return RunStepStatus.FAILED;\n if (event.data.status === \"expired\")\n return RunStepStatus.EXPIRED;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nexport const threadRunStepCreated = async ({ prisma, event, controller, }: {\n prisma: PrismaClient;\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated>;\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: (event.data.step_details as unknown) as Prisma.InputJsonValue,\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","import type OpenAI from 'openai';\nexport const threadRunStepDelta = ({ event, controller, }: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta>;\n}) => (controller.enqueue(event));\n","import type OpenAI from 'openai';\nimport { MessageStatus } from \"../../../../../../../types/prisma\";\nimport type { Prisma, PrismaClient } from '@prisma/client';\nimport { serializeMessage } from '../../../messages/serializeMessage';\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated) => {\n if (event.data.status === \"completed\")\n return MessageStatus.COMPLETED;\n if (event.data.status === \"in_progress\")\n return MessageStatus.IN_PROGRESS;\n if (event.data.status === \"incomplete\")\n return MessageStatus.INCOMPLETE;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nexport const threadMessageCreated = async ({ prisma, event, controller, }: {\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\" ? \"ASSISTANT\" : \"USER\",\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event),\n },\n });\n const serializedMessage = serializeMessage({ message });\n controller.enqueue({\n ...event,\n data: serializedMessage,\n });\n return serializedMessage;\n};\n","import type OpenAI from 'openai';\nexport const threadMessageDelta = ({ event, controller, }: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta>;\n}) => (controller.enqueue(event));\n","import type OpenAI from 'openai';\nimport { MessageStatus, RunStepType } from \"../../../../../../../types/prisma\";\nimport type { Prisma, PrismaClient } from '@prisma/client';\nexport const threadMessageCompleted = async ({ prisma, event, controller, }: {\n prisma: PrismaClient;\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted;\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>;\n}) => {\n controller.enqueue(event);\n if ((event.data as any).tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: RunStepType.TOOL_CALLS,\n },\n orderBy: {\n createdAt: \"desc\",\n },\n });\n 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: ({ type: \"tool_calls\", tool_calls: (event.data as any).tool_calls } as unknown) 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,\n ...((event.data as any).content ? { content: (event.data as any).content as unknown as Prisma.InputJsonValue } : {}),\n ...((event.data as any).tool_calls ? { toolCalls: ((event.data as any).tool_calls as unknown) as Prisma.InputJsonValue } : {}),\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';\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';\nexport const onEvent = ({ prisma, controller, }: {\n prisma: PrismaClient;\n controller: ReadableStreamDefaultController;\n}) => (event: OpenAI.Beta.AssistantStreamEvent) => {\n // @ts-ignore-next-line\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","import type { PrismaClient } from '@prisma/client';\nimport { serializeMessage } from '../messages/serializeMessage';\nimport { serializeRunStep } from './steps/serializeRunStep';\nimport { serializeRun } from './serializeRun';\nimport type { RunStep } from \"../../../../../types/prisma\";\nconst getTake = ({ run }: {\n run: {\n truncationStrategy: any;\n };\n}) => {\n // @ts-ignore-next-line\n if (run.truncationStrategy.type === \"auto\") {\n return null;\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 // @ts-ignore-next-line\n return -run.truncationStrategy.last_messages;\n }\n // @ts-ignore-next-line\n throw new Error(`Unsupported truncation strategy type: ${run.truncationStrategy.type}`);\n};\nexport const getMessages = ({ prisma, run }: {\n prisma: PrismaClient;\n run: {\n threadId: string;\n truncationStrategy: any;\n };\n}) => async () => {\n const take = getTake({\n run,\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 return (messages as any[]).map((message: any) => ({\n ...serializeMessage({ message }),\n run: message.run\n ? ({\n ...serializeRun({ run: message.run }),\n runSteps: (message.run.runSteps as any[]).map((runStep: any) => serializeRunStep({ runStep })),\n })\n : null,\n }));\n};\n","import type { PrismaClient } from '@prisma/client';\nimport type { RunAdapterPartobClient } from \"../../../../../types\";\nimport { get } from './get';\nimport { post } from './post';\nimport type { RequestHandler } from \"../../../../../types\";\nexport const runs = ({ prisma, runAdapter, }: {\n prisma: PrismaClient;\n runAdapter: RunAdapterPartobClient;\n}): {\n get: RequestHandler;\n post: RequestHandler;\n} => ({\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';\ntype GetResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Runs[\"retrieve\"]>>;\n};\nexport const get = ({ prisma, }: {\n prisma: PrismaClient;\n}) => async (urlString: string): Promise<GetResponse> => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp))!;\n const run = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId,\n },\n });\n if (!run) {\n return new Response(JSON.stringify({ error: \"run not found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }) as GetResponse;\n }\n return new Response(JSON.stringify(serializeRun({ run })), {\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 { get } from './get';\n// import { post } from './post'\nimport type { RequestHandler } from \"../../../../../types\";\nexport const run = ({ prisma, }: {\n prisma: PrismaClient;\n}): {\n get: RequestHandler;\n} => ({\n get: get({ prisma }),\n // post: post({ prisma, runAdapter }),\n});\n","// @ts-ignore-next-line\nimport type { PrismaClient, RunStep } from '@prisma/client';\nimport { assign, last } from 'radash';\nimport { stepsRegexp } from \"../../../../../../lib/steps/stepsRegexp\";\nimport { serializeRunStep } from './serializeRunStep';\nexport const get = ({ prisma, }: {\n prisma: PrismaClient;\n}) => async (urlString: string) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp))!;\n const { limit, order, after, } = 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 as any },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as RunStep[];\n const runSteps = runStepsPlusOne.slice(0, pageSize);\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\";\nexport const steps = ({ prisma, }: {\n prisma: PrismaClient;\n}): {\n get: RequestHandler;\n} => ({\n get: get({ prisma }),\n});\n","import { PrismaClient } from '@prisma/client';\nimport dayjs from 'dayjs';\nexport const updateRun = async ({ prisma, runId, threadId, onThreadRunStepCompleted = () => { }, tool_outputs, }: {\n prisma: PrismaClient;\n runId: string;\n threadId: string;\n onThreadRunStepCompleted?: ({ runStep }: {\n runStep: any;\n }) => void;\n tool_outputs: any;\n}) => (prisma.$transaction(async (tx) => {\n const runSteps = await tx.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 tx.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 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 tx.run.update({\n where: {\n id: runId,\n },\n data: {\n status: \"QUEUED\",\n },\n });\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';\nexport const post = ({ prisma, runAdapter, }: {\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 const body = JSON.parse(options.body);\n const { tool_outputs, stream, } = body;\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 await (runAdapter as any)({\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 controller.close();\n },\n });\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n },\n });\n }\n else {\n const run = 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 as any)({\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 controller.close();\n resolve(void 0);\n },\n })));\n return new Response(JSON.stringify(run), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n};\n","import type { PrismaClient } from '@prisma/client';\nimport type { RunAdapter } from \"../../../../../../types\";\nimport { post } from './post';\nimport type { RequestHandler } from \"../../../../../../types\";\nexport const submitToolOutputs = ({ prisma, runAdapter, }: {\n prisma: PrismaClient;\n runAdapter: RunAdapter;\n}): {\n post: RequestHandler;\n} => ({\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';\nexport const post = ({ prisma }: {\n prisma: PrismaClient;\n}) => async (_url: string, options: RequestInit & {\n body?: string;\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: dayjs().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","import type { PrismaClient } from '@prisma/client';\nimport { post } from './post';\nimport type { RequestHandler } from \"../../../../types\";\nexport const assistants = ({ prisma }: {\n prisma: PrismaClient;\n}): {\n post: RequestHandler;\n} => ({\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';\ntype MethodHandlers = {\n get?: RequestHandler;\n post?: RequestHandler;\n};\nexport const prismaStorageAdapter = ({ prisma, }: {\n prisma: PrismaClient;\n}): ((args: StorageAdapterArgs) => {\n 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 }),\n [stepsRegexp]: steps({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs({ prisma, runAdapter }),\n },\n});\n","import dayjs from 'dayjs';\nimport OpenAI from 'openai';\nimport { uid } from 'radash';\nexport const responsesRunAdapter = () => async ({ client, run, onEvent, getAssistant, getConversationId, setConversationId, inputItems, previousResponseId, setLastResponseId, }: {\n client: OpenAI;\n run: OpenAI.Beta.Threads.Run;\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>;\n getAssistant: (assistantId: string) => Promise<{\n model: string;\n instructions?: string | null;\n }>;\n getConversationId: () => Promise<string | null>;\n setConversationId: (conversationId: string) => Promise<void>;\n inputItems?: OpenAI.Responses.ResponseInput;\n previousResponseId?: string | null;\n setLastResponseId?: (responseId: string) => Promise<void> | void;\n}) => {\n if (run.status !== \"queued\")\n return;\n await onEvent({\n event: \"thread.run.in_progress\",\n data: { ...run, status: \"in_progress\" },\n });\n // Ensure conversation exists\n let conversationId = await getConversationId();\n if (!previousResponseId) {\n if (!conversationId) {\n const conv = await client.conversations.create({ metadata: { thread_id: run.thread_id } });\n conversationId = conv.id;\n await setConversationId(conversationId);\n }\n }\n const { model, instructions } = await getAssistant(run.assistant_id);\n const mapTools = (run.tools || []).flatMap((t: any) => {\n if (t.type !== \"function\")\n return [];\n const fn = t.function;\n let parameters = fn.parameters ?? null;\n let strict: boolean | undefined = undefined;\n try {\n if (parameters && typeof parameters === \"object\" && (parameters as any).type === \"object\") {\n const props = Object.keys(((parameters as any).properties ?? {}) as any);\n const required = Array.isArray((parameters as any).required) ? (parameters as any).required as string[] : [];\n const hasAllRequired = props.every((k) => required.includes(k));\n const hasAdditional = (parameters as any).additionalProperties !== false;\n if (!hasAdditional) {\n strict = hasAllRequired;\n }\n else {\n // If additionalProperties not set, default to false for stricter mode\n parameters = { ...(parameters as any), additionalProperties: false };\n strict = hasAllRequired;\n }\n }\n }\n catch { }\n return [{\n type: \"function\",\n name: fn.name,\n description: fn.description ?? undefined,\n parameters,\n // Encourage tool use by defaulting to strict\n strict: strict ?? true,\n }];\n }) as OpenAI.Responses.FunctionTool[];\n // Track state\n let message: any | null = null;\n let toolCallsRunStep: any | null = null;\n let textBuffer = \"\";\n const toolCallByItemId = new Map<string, {\n call_id: string;\n name: string;\n arguments: string;\n }>();\n const toolCallDone = new Set<string>();\n try {\n // Try to seed input with the latest user message from the conversation\n let latestUserText = \"\";\n if (!previousResponseId && conversationId) {\n try {\n const page = await client.conversations.items.list(conversationId, { order: \"desc\" });\n for await (const item of page) {\n if ((item as any).type === \"message\" && (item as any).role === \"user\") {\n const content: any[] = (item as any).content ?? [];\n const txt = (content.find((c: any) => c.type === \"input_text\")?.text ?? content.find((c: any) => c.type === \"text\")?.text ?? \"\") as string;\n latestUserText = String(txt ?? \"\");\n break;\n }\n }\n }\n catch { }\n }\n const hasToolOutputs = Array.isArray(inputItems) && (inputItems as any[]).some((it: any) => it?.type === \"function_call_output\");\n const includeTools = mapTools.length > 0 && !hasToolOutputs;\n const singleTool = includeTools && mapTools.length === 1 ? mapTools[0] : null;\n const body: any = {\n model,\n input: (inputItems && (inputItems as any[]).length > 0) ? (inputItems as any) : (latestUserText ?? \"\"),\n ...(instructions || run.instructions ? { instructions: (run.instructions || instructions || \"\") as any } : {}),\n ...(includeTools ? { tools: mapTools, parallel_tool_calls: true, tool_choice: \"required\" as const } : {}),\n ...(singleTool ? { tool_choice: { type: \"function\", name: singleTool.name } } : {}),\n };\n if (previousResponseId) {\n body.previous_response_id = previousResponseId;\n }\n else if (conversationId) {\n body.conversation = { id: conversationId };\n }\n // Stream with guarded fallback logic:\n // - If resuming with tool outputs, prefer retrying previous_response_id a few times\n // instead of falling back to conversation (to preserve call_id linkage).\n // - Otherwise, fall back once to conversation addressing.\n let responseId: string | null = null;\n let attemptedPrevFallback = false;\n let prevIdRetries = 0;\n let currentBody: any = body;\n while (true) {\n let stream: any;\n try {\n stream = await client.responses.stream(currentBody as any);\n for await (const evt of stream) {\n switch (evt.type) {\n case \"response.created\": {\n responseId = (evt as any).response?.id ?? responseId;\n if (responseId && setLastResponseId)\n await setLastResponseId(responseId);\n break;\n }\n case \"response.in_progress\": {\n await onEvent({ event: \"thread.run.in_progress\", data: { ...run, status: \"in_progress\" } });\n break;\n }\n case \"response.output_item.added\": {\n const item: any = (evt as any).item;\n if (item.type === \"message\" && item.role === \"assistant\") {\n if (!message) {\n 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 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: \"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: { message_id: message.id },\n },\n },\n });\n }\n }\n if (item.type === \"function_call\" || item.type === \"tool_call\" || item.type === \"custom_tool_call\") {\n const call_id = item.call_id ?? item.id;\n const entry = { call_id, name: item.name, arguments: (item.arguments ?? item.input ?? \"\") };\n if (item.id)\n toolCallByItemId.set(item.id, entry);\n if (call_id)\n toolCallByItemId.set(call_id, entry);\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: { type: \"tool_calls\", tool_calls: [] },\n },\n });\n }\n await 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: [\n {\n id: call_id,\n type: \"function\",\n function: { name: item.name, arguments: item.arguments ?? \"\" },\n },\n ],\n },\n },\n },\n } as any);\n // Emit requires_action early to satisfy immediate retrieve and streaming expectations\n const toolCalls = Array.from(toolCallByItemId.values());\n await 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: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n })),\n },\n },\n },\n });\n }\n break;\n }\n case \"response.output_item.done\": {\n const item: any = (evt as any).item;\n if (item?.type === \"function_call\" || item?.type === \"custom_tool_call\") {\n const call_id = item.call_id ?? item.id;\n const entry = { call_id, name: item.name, arguments: (item.arguments ?? item.input ?? \"\") };\n if (item.id)\n toolCallByItemId.set(item.id, entry);\n if (call_id)\n toolCallByItemId.set(call_id, entry);\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: { type: \"tool_calls\", tool_calls: [] },\n },\n });\n }\n const toolCalls = Array.from(toolCallByItemId.values());\n await 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: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n })),\n },\n },\n },\n } as any);\n return await 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: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n })),\n },\n },\n },\n });\n }\n break;\n }\n case \"response.output_text.delta\": {\n const delta = (evt as any).delta;\n textBuffer += delta;\n if (!message) {\n // Lazily create message if not yet emitted\n 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 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: \"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: { message_id: message.id },\n },\n },\n });\n }\n await onEvent({\n event: \"thread.message.delta\",\n data: {\n id: message.id,\n delta: {\n content: [\n { type: \"text\", index: 0, text: { value: delta } },\n ],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta);\n break;\n }\n case \"response.function_call_arguments.delta\":\n case \"response.custom_tool_call_input.delta\": {\n const { item_id, delta } = evt as any;\n const call = toolCallByItemId.get(item_id);\n // Ensure the tool-calls step exists even if argument deltas arrive first\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: { type: \"tool_calls\", tool_calls: [] },\n },\n });\n }\n if (call) {\n call.arguments += delta;\n await 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: [\n {\n id: call.call_id,\n type: \"function\",\n function: { name: call.name, arguments: delta },\n },\n ],\n },\n },\n },\n } as any);\n }\n break;\n }\n case \"response.function_call_arguments.done\":\n case \"response.custom_tool_call_input.done\": {\n const { item_id } = evt as any;\n if (item_id)\n toolCallDone.add(item_id);\n break;\n }\n case \"response.completed\": {\n responseId = (evt as any).response?.id ?? responseId;\n if (responseId && setLastResponseId)\n await setLastResponseId(responseId);\n // Fallback: extract final response snapshot text and tool calls\n const resp: any = (evt as any).response;\n if (resp?.output?.length) {\n for (const out of resp.output) {\n if (out.type === \"message\") {\n const txt = (out.content?.find?.((c: any) => c.type === \"output_text\")?.text ?? \"\") as string;\n if (txt && !textBuffer)\n textBuffer = txt;\n }\n else if (out.type === \"function_call\" || out.type === \"tool_call\" || out.type === \"custom_tool_call\") {\n const call_id = out.call_id ?? out.id;\n const call = { call_id, name: out.name, arguments: (out.arguments ?? out.input ?? \"\") };\n if (out.id)\n toolCallByItemId.set(out.id, call);\n if (call_id)\n toolCallByItemId.set(call_id, call);\n }\n }\n }\n // Ensure message exists if we have text\n if (!message && textBuffer) {\n 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 if (message) {\n await onEvent({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [{ text: { value: textBuffer, annotations: [] }, type: \"text\" }],\n tool_calls: undefined,\n },\n });\n }\n // Ensure the assistant message exists in the conversation for immediate reads\n // Only attempt this when resuming via tool outputs (previousResponseId is set).\n // For initial runs, the server updates the conversation itself; writing here can\n // race and trigger \"conversation_locked\" errors.\n if (previousResponseId && (conversationId ?? null) && typeof textBuffer === \"string\" && textBuffer.trim().length > 0) {\n // Retry insertion to avoid transient conversation locks\n const maxAttempts = 5;\n let attempt = 0;\n while (true) {\n try {\n console.log(\"[responsesRunAdapter] insert assistant -> conversation\", { conversationId, textBuffer });\n await client.conversations.items.create(conversationId!, {\n items: [\n {\n type: \"message\",\n role: \"assistant\",\n content: [\n { type: \"output_text\", text: textBuffer },\n ],\n } as any,\n ],\n });\n break;\n }\n catch (err: any) {\n const code = err?.code || err?.error?.code;\n const isLocked = code === \"conversation_locked\" || /conversation/i.test(err?.error?.param ?? \"\");\n attempt += 1;\n if (!isLocked || attempt >= maxAttempts)\n throw err;\n await new Promise((r) => setTimeout(r, 200 * attempt));\n }\n }\n }\n const toolCalls = Array.from(toolCallByItemId.values());\n if (toolCalls.length) {\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: { type: \"tool_calls\", tool_calls: [] },\n },\n });\n }\n await 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: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n })),\n },\n },\n },\n } as any);\n return await 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: toolCalls.map((tc) => ({\n id: tc.call_id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n })),\n },\n },\n },\n });\n }\n else {\n return await onEvent({\n event: \"thread.run.completed\",\n data: { ...run, status: \"completed\", completed_at: dayjs().unix() },\n });\n }\n }\n case \"response.failed\":\n case \"error\": {\n return await onEvent({\n event: \"thread.run.failed\",\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: \"failed\",\n last_error: { code: \"server_error\", message: \"response failed\" },\n },\n });\n }\n }\n // Completed processing without stream error; exit outer loop\n }\n break;\n }\n catch (err: any) {\n const code = err?.code || err?.error?.code;\n // If we have tool outputs, retry a few times with the previous_response_id\n if (previousResponseId && hasToolOutputs && code === \"previous_response_not_found\" && prevIdRetries < 5) {\n prevIdRetries += 1;\n await new Promise((r) => setTimeout(r, 150));\n currentBody = body;\n continue;\n }\n // Otherwise (no tool outputs), fall back once to conversation addressing\n if (!hasToolOutputs && !attemptedPrevFallback && previousResponseId) {\n attemptedPrevFallback = true;\n const retryBody: any = { ...body };\n delete retryBody.previous_response_id;\n if (conversationId)\n retryBody.conversation = { id: conversationId };\n currentBody = retryBody;\n continue;\n }\n throw err;\n }\n // If we reached here without continue/throw, break outer while\n break;\n }\n }\n catch (e: any) {\n console.error(e);\n return onEvent({\n event: \"thread.run.failed\",\n data: {\n ...run,\n failed_at: dayjs().unix(),\n status: \"failed\",\n last_error: { code: \"server_error\", message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}` },\n },\n });\n }\n};\n","import { uid } from 'radash';\nimport type { RequestHandler } from \"../../../../types\";\nexport const createThreadsHandlers = (): {\n post: RequestHandler;\n} => {\n const post: RequestHandler = async (_url, options) => {\n const body = options.body ? JSON.parse(options.body) : {};\n const metadata = body.metadata ?? {};\n const id = `thread_${uid(24)}`;\n return new Response(JSON.stringify({ id, object: \"thread\", created_at: Math.floor(Date.now() / 1000), metadata }), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n };\n return { post };\n};\n","import type OpenAI from 'openai';\nimport type { RequestHandler } from \"../../../../types\";\nexport const createMessagesHandlers = ({ openai, ensureConversation, getConversationId, serializeThreadMessage, setLastUserText, }: {\n openai: OpenAI;\n ensureConversation: (threadId: string) => Promise<string>;\n getConversationId: (threadId: string) => Promise<string | null>;\n serializeThreadMessage: ({ item, threadId }: {\n item: any;\n threadId: string;\n }) => any;\n setLastUserText: (threadId: string, text: string) => void;\n}): {\n get: RequestHandler;\n post: RequestHandler;\n} => {\n const get: RequestHandler = async (url) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/messages$/)!;\n const threadId = m[1];\n const combined: any[] = [];\n const convId = await getConversationId(threadId);\n if (convId) {\n try {\n const list = await openai.conversations.items.list(convId, { order: \"asc\" });\n for await (const it of list) {\n if ((it as any).type === \"message\") {\n combined.push(serializeThreadMessage({ item: it, threadId }));\n }\n }\n }\n catch (err: any) {\n return new Response(JSON.stringify({ error: { message: err?.message ?? \"failed to list messages\" } }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n }\n return new Response(JSON.stringify({ data: combined, has_more: false, last_id: combined.at(-1)?.id ?? null }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n };\n const post: RequestHandler = async (url, options) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/messages$/)!;\n const threadId = m[1];\n const body = JSON.parse(options.body!);\n const convId = await ensureConversation(threadId);\n const contentItems = Array.isArray(body.content)\n ? body.content.map((c: any) => (c.type === \"text\" ? { type: \"input_text\", text: c.text } : c))\n : [{ type: \"input_text\", text: String(body.content ?? \"\") }];\n const txt = String((contentItems.find((c: any) => c?.type === \"input_text\")?.text ?? \"\") ?? \"\");\n if (txt)\n setLastUserText(threadId, txt);\n let created: any;\n try {\n created = await openai.conversations.items.create(convId, {\n items: [{ type: \"message\", role: body.role ?? \"user\", content: contentItems } as any],\n });\n }\n catch (err: any) {\n return new Response(JSON.stringify({ error: { message: err?.message ?? \"failed to create message\" } }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n const item = created?.data?.find?.((i: any) => i.type === \"message\") ?? { type: \"message\", role: body.role ?? \"user\", content: contentItems };\n const msg = serializeThreadMessage({ item, threadId });\n return new Response(JSON.stringify(msg), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n };\n return { get, post };\n};\n","import type OpenAI from 'openai';\nimport type { RequestHandler, RunAdapter } from \"../../../../types\";\nimport { uid } from 'radash';\nimport dayjs from 'dayjs';\nexport const createRunsHandlers = ({ openai, runAdapter, getAssistant, getConversationId, setConversationId, ensureConversation, onEventBridge, runs, runSteps, runLastResponseId, getLastUserText, }: {\n openai: OpenAI;\n runAdapter: RunAdapter;\n getAssistant: (assistantId: string) => Promise<{\n model: string;\n instructions: string;\n }>;\n getConversationId: (threadId: string) => Promise<string | null>;\n setConversationId: (threadId: string, convId: string) => Promise<void>;\n ensureConversation: (threadId: string) => Promise<string>;\n onEventBridge: (args: {\n controller?: ReadableStreamDefaultController;\n }) => (e: OpenAI.Beta.AssistantStreamEvent) => Promise<any>;\n runs: Map<string, OpenAI.Beta.Threads.Run>;\n runSteps: Map<string, OpenAI.Beta.Threads.Runs.RunStep[]>;\n runLastResponseId: Map<string, string>;\n getLastUserText: (threadId: string) => string;\n}): {\n post: RequestHandler;\n} => {\n const post: RequestHandler = async (url, options) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs$/)!;\n const threadId = m[1];\n const body = JSON.parse(options.body!);\n const assistantId = body.assistant_id;\n const stream = !!body.stream;\n const { model, instructions } = await getAssistant(assistantId);\n const runId = `run_${uid(24)}`;\n const run: OpenAI.Beta.Threads.Run = {\n id: runId,\n object: \"thread.run\",\n created_at: Math.floor(Date.now() / 1000),\n thread_id: threadId,\n assistant_id: assistantId,\n status: \"queued\",\n required_action: null,\n last_error: null,\n expires_at: Math.floor(dayjs().add(1, \"hour\").unix()),\n started_at: null,\n cancelled_at: null,\n failed_at: null,\n completed_at: null,\n model,\n instructions: body.instructions ?? instructions ?? \"\",\n tools: body.tools ?? [],\n metadata: body.metadata ?? {},\n usage: null,\n truncation_strategy: { type: \"auto\" },\n response_format: { type: \"text\" },\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 runs.set(runId, run);\n runSteps.set(runId, []);\n const startRun = async (controller?: ReadableStreamDefaultController) => {\n const seedText = getLastUserText(threadId);\n await runAdapter({\n client: openai,\n run,\n onEvent: onEventBridge({ controller }),\n getAssistant,\n getConversationId: async () => await getConversationId(threadId),\n setConversationId: async (convId: string) => await setConversationId(threadId, convId),\n ...(seedText ? { inputItems: seedText as any } : {}),\n setLastResponseId: async (respId: string) => { runLastResponseId.set(run.id, respId); },\n });\n };\n if (stream) {\n const readable = new ReadableStream({\n async start(controller) {\n try {\n await startRun(controller);\n }\n finally {\n controller.close();\n }\n },\n });\n return new Response(readable, { headers: { \"Content-Type\": \"text/event-stream\" } });\n }\n else {\n void startRun().catch(() => { });\n const start = Date.now();\n while (Date.now() - start < 1500) {\n const r = runs.get(runId);\n const steps = runSteps.get(runId) ?? [];\n const hasTool = steps.some((s: any) => s.step_details?.type === \"tool_calls\" && s.step_details.tool_calls?.length);\n if (r?.status === \"requires_action\" || r?.status === \"completed\" || r?.status === \"failed\" || hasTool)\n break;\n await new Promise((res) => setTimeout(res, 40));\n }\n return new Response(JSON.stringify(run), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\", \"openai-poll-after-ms\": \"500\" },\n });\n }\n };\n return { post };\n};\n","import type OpenAI from 'openai';\nimport type { RequestHandler } from \"../../../../types\";\nexport const createRunHandlers = ({ openai, runs, runSteps, getConversationId, runCompletedAfterTool, runToolSubmitted, }: {\n openai: OpenAI;\n runs: Map<string, OpenAI.Beta.Threads.Run>;\n runSteps: Map<string, OpenAI.Beta.Threads.Runs.RunStep[]>;\n getConversationId: (threadId: string) => Promise<string | null>;\n runCompletedAfterTool: Map<string, boolean>;\n runToolSubmitted: Map<string, boolean>;\n}): {\n get: RequestHandler;\n} => {\n const get: RequestHandler = async (url) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs\\/([^/]+)$/)!;\n const threadId = m[1];\n const runId = m[2];\n let run = runs.get(runId);\n if (!run) {\n return new Response(JSON.stringify({ id: runId, object: \"thread.run\", status: \"queued\" }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\", \"openai-poll-after-ms\": \"500\" },\n });\n }\n if (run.status !== \"requires_action\" && run.status !== \"completed\") {\n const start = Date.now();\n if (run.status === \"in_progress\") {\n while (Date.now() - start < 2500) {\n const stepsNow = runSteps.get(runId) ?? [];\n const hasToolNow = stepsNow.some((s: any) => s.step_details?.type === \"tool_calls\" && s.step_details.tool_calls?.length);\n if (hasToolNow)\n break;\n await new Promise((res) => setTimeout(res, 40));\n }\n }\n const stepsNow = runSteps.get(runId) ?? [];\n const toolStepNow = stepsNow.find((s: any) => s.step_details?.type === \"tool_calls\") as any;\n if (toolStepNow?.step_details?.tool_calls?.length) {\n const tool_calls = toolStepNow.step_details.tool_calls.map((tc: any) => ({\n id: tc.id ?? tc.call_id ?? Math.random().toString(36).slice(2),\n type: \"function\",\n function: { name: tc.function?.name ?? tc.name, arguments: tc.function?.arguments ?? tc.arguments ?? \"\" },\n }));\n run = { ...run, status: \"requires_action\", required_action: { type: \"submit_tool_outputs\", submit_tool_outputs: { tool_calls } } };\n runs.set(runId, run);\n }\n // Fallback: if no steps yet, peek conversation for function_call items\n if (run.status !== \"requires_action\") {\n try {\n const convId = await getConversationId(threadId);\n if (convId) {\n const page = await openai.conversations.items.list(convId, { order: \"desc\" });\n const calls: any[] = [];\n for await (const it of page) {\n if ((it as any).type === \"function_call\") {\n calls.push({\n id: (it as any).call_id,\n type: \"function\",\n function: { name: (it as any).name, arguments: (it as any).arguments ?? \"\" },\n });\n }\n }\n if (calls.length) {\n run = { ...run, status: \"requires_action\", required_action: { type: \"submit_tool_outputs\", submit_tool_outputs: { tool_calls: calls } } };\n runs.set(runId, run);\n }\n }\n }\n catch { }\n }\n }\n // If we recorded completion after tool outputs, mark completed\n if (runCompletedAfterTool.get(runId)) {\n run = { ...run, status: \"completed\", completed_at: Math.floor(Date.now() / 1000) };\n runs.set(runId, run);\n }\n if (run.status === \"requires_action\") {\n try {\n const convId = await getConversationId(threadId);\n if (convId) {\n const list = await openai.conversations.items.list(convId, { order: \"desc\" });\n let sawOutput = false;\n let sawAssistant = false;\n for await (const it of list) {\n const t = (it as any).type;\n if (t === \"message\" && (it as any).role === \"assistant\") {\n const text = (it as any).content?.find?.((c: any) => c.type === \"output_text\")?.text;\n if (typeof text === \"string\" && text.length > 0) {\n sawAssistant = true;\n break;\n }\n }\n if (t === \"function_call_output\")\n sawOutput = true;\n }\n if (sawAssistant || sawOutput) {\n run = { ...run, status: \"completed\", completed_at: Math.floor(Date.now() / 1000) };\n runs.set(runId, run);\n }\n }\n }\n catch { }\n }\n // Final safeguard: if tool outputs submitted, prefer completed\n if (run.status === \"requires_action\" && runToolSubmitted.get(runId)) {\n run = { ...run, status: \"completed\", completed_at: Math.floor(Date.now() / 1000) };\n runs.set(runId, run);\n }\n return new Response(JSON.stringify(run), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\", \"openai-poll-after-ms\": \"500\" },\n });\n };\n return { get };\n};\n","import type OpenAI from 'openai';\nimport type { RequestHandler } from \"../../../../types\";\nexport const createStepsHandlers = ({ runSteps, }: {\n runSteps: Map<string, OpenAI.Beta.Threads.Runs.RunStep[]>;\n}): {\n get: RequestHandler;\n} => {\n const get: RequestHandler = async (url) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs\\/([^/]+)\\/steps$/)!;\n const runId = m[2];\n const steps = runSteps.get(runId) ?? [];\n return new Response(JSON.stringify({ data: steps, has_more: false, last_id: steps.at(-1)?.id ?? null }), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n };\n return { get };\n};\n","import type OpenAI from 'openai';\nimport type { RequestHandler, RunAdapter } from \"../../../../types\";\nexport const createSubmitToolOutputsHandlers = ({ openai, runAdapter, runs, onEventBridge, getConversationId, ensureConversation, setConversationId, getAssistant, runLastResponseId, runCompletedAfterTool, runToolSubmitted, }: {\n openai: OpenAI;\n runAdapter: RunAdapter;\n runs: Map<string, OpenAI.Beta.Threads.Run>;\n onEventBridge: (args: {\n controller?: ReadableStreamDefaultController;\n }) => (e: OpenAI.Beta.AssistantStreamEvent) => Promise<any>;\n getConversationId: (threadId: string) => Promise<string | null>;\n ensureConversation: (threadId: string) => Promise<string>;\n setConversationId: (threadId: string, convId: string) => Promise<void>;\n getAssistant: (assistantId: string) => Promise<{\n model: string;\n instructions: string;\n }>;\n runLastResponseId: Map<string, string>;\n runCompletedAfterTool: Map<string, boolean>;\n runToolSubmitted: Map<string, boolean>;\n}): {\n post: RequestHandler;\n} => {\n const post: RequestHandler = async (url, options) => {\n const pathname = new URL(url).pathname;\n const m = pathname.match(/^\\/(?:v1|\\/?openai)\\/threads\\/([^/]+)\\/runs\\/([^/]+)\\/submit_tool_outputs$/)!;\n const threadId = m[1];\n const runId = m[2];\n const body = JSON.parse(options.body!);\n const { tool_outputs, stream } = body;\n const convId = await ensureConversation(threadId);\n const existingRun = runs.get(runId);\n if (!existingRun)\n return new Response(JSON.stringify({ error: \"run not found\" }), { status: 404 });\n const startRun = async (controller?: ReadableStreamDefaultController) => {\n const resumed: OpenAI.Beta.Threads.Run = { ...existingRun, status: \"queued\", required_action: null } as OpenAI.Beta.Threads.Run;\n runs.set(runId, resumed);\n runToolSubmitted.set(runId, true);\n // Do not pre-insert outputs into Conversations; pass via Responses input\n await runAdapter({\n client: openai,\n run: resumed,\n onEvent: onEventBridge({ controller }),\n getAssistant,\n getConversationId: async () => await getConversationId(threadId),\n setConversationId: async (convId2: string) => await setConversationId(threadId, convId2),\n inputItems: tool_outputs.map((t: any) => ({ type: \"function_call_output\", call_id: t.tool_call_id, output: String(t.output ?? \"\") })) as any,\n previousResponseId: runLastResponseId.get(runId) ?? null,\n setLastResponseId: async (respId: string) => { runLastResponseId.set(runId, respId); },\n });\n const r = runs.get(runId);\n if (r && r.status !== \"completed\") {\n runs.set(runId, { ...r, status: \"completed\", completed_at: Math.floor(Date.now() / 1000) });\n }\n runCompletedAfterTool.set(runId, true);\n };\n if (stream) {\n const readable = new ReadableStream({\n async start(controller) { try {\n await startRun(controller);\n }\n finally {\n controller.close();\n } },\n });\n return new Response(readable, { headers: { \"Content-Type\": \"text/event-stream\" } });\n }\n else {\n await startRun().catch(() => { });\n return new Response(JSON.stringify(existingRun), { status: 200, headers: { \"Content-Type\": \"application/json\" } });\n }\n };\n return { post };\n};\n","import OpenAI from 'openai';\nexport const serializeThreadMessage = ({ item, threadId, assistantId, }: {\n item: any;\n threadId: string;\n assistantId?: string | null;\n}): OpenAI.Beta.Threads.Messages.Message => ({\n id: item.id ?? `msg_${Math.random().toString(36).slice(2)}`,\n object: \"thread.message\",\n created_at: Math.floor(Date.now() / 1000),\n thread_id: threadId,\n completed_at: Math.floor(Date.now() / 1000),\n incomplete_at: null,\n incomplete_details: null as any,\n role: (item.role ?? \"assistant\") as any,\n content: [\n {\n type: \"text\",\n text: {\n value: (item.content?.find?.((c: any) => c.type === \"input_text\")?.text ??\n item.content?.find?.((c: any) => c.type === \"output_text\")?.text ??\n item.content?.find?.((c: any) => c.type === \"text\")?.text ??\n item.text ??\n \"\") as string,\n annotations: [],\n },\n },\n ] as any,\n assistant_id: assistantId ?? null,\n run_id: null,\n attachments: [],\n status: \"completed\",\n metadata: {},\n});\n","import OpenAI from 'openai';\nimport { uid } from 'radash';\nexport const onEventBridgeInMemory = ({ controller, runs, runSteps, runCompletedAfterTool, getConversationId, openai, ensureConversation, }: {\n controller?: ReadableStreamDefaultController;\n runs: Map<string, OpenAI.Beta.Threads.Run>;\n runSteps: Map<string, OpenAI.Beta.Threads.Runs.RunStep[]>;\n runCompletedAfterTool?: Map<string, boolean>;\n getConversationId: (threadId: string) => Promise<string | null>;\n openai?: OpenAI;\n ensureConversation?: (threadId: string) => Promise<string>;\n}) => async (event: OpenAI.Beta.AssistantStreamEvent) => {\n if (event.event === \"thread.run.in_progress\") {\n const run = event.data;\n const prev = runs.get(run.id);\n runs.set(run.id, { ...(prev ?? run), status: \"in_progress\" });\n }\n if (event.event === \"thread.run.requires_action\") {\n const run = event.data;\n const prev = runs.get(run.id);\n runs.set(run.id, { ...(prev ?? run), status: \"requires_action\", required_action: run.required_action });\n }\n if (event.event === \"thread.run.completed\") {\n const run = event.data;\n const prev = runs.get(run.id);\n runs.set(run.id, { ...(prev ?? run), status: \"completed\", completed_at: run.completed_at ?? Math.floor(Date.now() / 1000) });\n runCompletedAfterTool?.set(run.id, true);\n }\n if (event.event === \"thread.run.failed\") {\n const run = event.data as any;\n const prev = runs.get(run.id);\n runs.set(run.id, { ...(prev ?? (run as any)), status: \"failed\", failed_at: run.failed_at ?? Math.floor(Date.now() / 1000) } as any);\n }\n if (event.event === \"thread.run.step.created\") {\n const step = event.data as OpenAI.Beta.Threads.Runs.RunStep;\n const list = runSteps.get(step.run_id) ?? [];\n const assigned = {\n ...step,\n id: step.id === \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\" ? `step_${uid(24)}` : step.id,\n };\n runSteps.set(step.run_id, [...list, assigned]);\n try {\n console.log(\"[bridge] step.created\", { runId: step.run_id, type: (step as any)?.step_details?.type });\n }\n catch { }\n const payload = { ...event, data: assigned };\n controller?.enqueue(`data: ${JSON.stringify(payload)}\\n\\n`);\n return assigned;\n }\n if (event.event === \"thread.run.step.delta\") {\n const delta: any = event.data;\n const list = runSteps.get(delta.run_id) ?? [];\n const idx = list.findIndex((s) => s.id === delta.id);\n if (idx >= 0) {\n const existing = list[idx];\n const merged: any = { ...existing };\n if (delta.delta?.step_details?.type === \"tool_calls\") {\n const prevCalls = ((existing as any).step_details?.tool_calls ?? []) as any[];\n const addCalls = delta.delta.step_details.tool_calls ?? [];\n merged.step_details = { type: \"tool_calls\", tool_calls: [...prevCalls, ...addCalls] };\n }\n list[idx] = merged;\n runSteps.set(delta.run_id, list);\n }\n try {\n console.log(\"[bridge] step.delta\", { runId: delta.run_id, id: delta.id, type: delta.delta?.step_details?.type });\n }\n catch { }\n controller?.enqueue(`data: ${JSON.stringify(event)}\\n\\n`);\n return;\n }\n if (event.event === \"thread.message.created\") {\n const msg = event.data as any;\n const assigned = {\n ...msg,\n id: msg.id === \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\" ? `msg_${uid(24)}` : msg.id,\n };\n const payload = { ...event, data: assigned };\n controller?.enqueue(`data: ${JSON.stringify(payload)}\\n\\n`);\n return assigned;\n }\n if (event.event === \"thread.message.delta\") {\n controller?.enqueue(`data: ${JSON.stringify(event)}\\n\\n`);\n return;\n }\n if (event.event === \"thread.message.completed\") {\n controller?.enqueue(`data: ${JSON.stringify(event)}\\n\\n`);\n try {\n const threadId = (event.data as any)?.thread_id;\n const txt = ((event.data as any)?.content?.[0]?.text?.value ?? \"\") as string;\n if (openai && typeof threadId === \"string\" && txt && txt.trim().length > 0) {\n let convId = await getConversationId(threadId);\n if (!convId && ensureConversation)\n convId = await ensureConversation(threadId);\n if (convId) {\n const maxAttempts = 5;\n let attempt = 0;\n while (true) {\n try {\n console.log(\"[onEventBridgeInMemory] mirror assistant -> conversation\", { threadId, convId, txt });\n await openai.conversations.items.create(convId!, {\n items: [\n { type: \"message\", role: \"assistant\", content: [{ type: \"output_text\", text: txt }] } as any,\n ],\n });\n break;\n }\n catch (err: any) {\n const code = err?.code || err?.error?.code;\n const isLocked = code === \"conversation_locked\" || /conversation/i.test(err?.error?.param ?? \"\");\n attempt += 1;\n if (!isLocked || attempt >= maxAttempts)\n break;\n await new Promise((r) => setTimeout(r, 200 * attempt));\n }\n }\n }\n }\n }\n catch { }\n return;\n }\n controller?.enqueue(`data: ${JSON.stringify(event)}\\n\\n`);\n return (event as any).data;\n};\n","import OpenAI from 'openai';\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 { createThreadsHandlers } from './routes/threads';\nimport { createMessagesHandlers } from './routes/messages';\nimport { createRunsHandlers } from './routes/runs';\nimport { createRunHandlers } from './routes/run';\nimport { createStepsHandlers } from './routes/steps';\nimport { createSubmitToolOutputsHandlers } from './routes/submitToolOutputs';\nimport { serializeThreadMessage } from './helpers/serializeThreadMessage';\nimport { onEventBridgeInMemory } from './helpers/onEventBridgeInMemory';\ntype MethodHandlers = {\n get?: RequestHandler;\n post?: RequestHandler;\n};\nexport const responsesStorageAdapter = ({ openai, getConversationId, setConversationId, }: {\n openai: OpenAI;\n getConversationId: (threadId: string) => Promise<string | null>;\n setConversationId: (threadId: string, conversationId: string) => Promise<void>;\n}) => ({ runAdapter }: StorageAdapterArgs) => {\n // Track last user text per thread to seed Responses input without delays\n const threadLastUserText = new Map<string, string>();\n const ensureConversation = async (threadId: string) => {\n let convId = await getConversationId(threadId);\n if (!convId) {\n const conv = await openai.conversations.create({ metadata: { thread_id: threadId } });\n convId = conv.id;\n await setConversationId(threadId, convId);\n }\n return convId;\n };\n // Assistant loader\n const getAssistant = async (assistantId: string) => {\n const a = await openai.beta.assistants.retrieve(assistantId);\n return { model: a.model, instructions: (a.instructions ?? \"\") as string };\n };\n // In-memory state for runs and steps\n const runs = new Map<string, OpenAI.Beta.Threads.Run>();\n const runSteps = new Map<string, OpenAI.Beta.Threads.Runs.RunStep[]>();\n const runLastResponseId = new Map<string, string>();\n const runCompletedAfterTool = new Map<string, boolean>();\n const runToolSubmitted = new Map<string, boolean>();\n // Handlers\n const threadsHandler = createThreadsHandlers();\n const messagesHandler = createMessagesHandlers({\n openai,\n ensureConversation,\n getConversationId,\n serializeThreadMessage,\n setLastUserText: (threadId: string, text: string) => {\n if (typeof text === \"string\")\n threadLastUserText.set(threadId, text);\n },\n });\n const runsHandler = createRunsHandlers({\n openai,\n runAdapter,\n getAssistant,\n getConversationId,\n setConversationId,\n ensureConversation,\n onEventBridge: ({ controller }) => onEventBridgeInMemory({ controller, runs, runSteps, runCompletedAfterTool, getConversationId, openai, ensureConversation }),\n runs,\n runSteps,\n runLastResponseId,\n getLastUserText: (threadId: string) => threadLastUserText.get(threadId) ?? \"\",\n });\n const runHandler = createRunHandlers({ openai, runs, runSteps, getConversationId, runCompletedAfterTool, runToolSubmitted });\n const stepsHandler = createStepsHandlers({ runSteps });\n const submitToolOutputsHandler = createSubmitToolOutputsHandlers({\n openai,\n runAdapter,\n runs,\n onEventBridge: ({ controller }) => onEventBridgeInMemory({ controller, runs, runSteps, runCompletedAfterTool, getConversationId, openai, ensureConversation }),\n getConversationId,\n ensureConversation,\n setConversationId,\n getAssistant,\n runLastResponseId,\n runCompletedAfterTool,\n runToolSubmitted,\n });\n return {\n requestHandlers: {\n \"^/(?:v1|/?openai)/threads$\": threadsHandler,\n [messagesRegexp]: messagesHandler,\n [runsRegexp]: runsHandler,\n [runRegexp]: runHandler,\n [stepsRegexp]: stepsHandler,\n [submitToolOutputsRegexp]: submitToolOutputsHandler,\n },\n };\n};\n"]}
1
+ {"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.js","../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/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","../../../node_modules/p-map/index.js","../src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts","../src/lib/items/serializeItemAsRunStep.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":["OpenAI","AzureOpenAI","assign","partob","storageRequestHandlers","storage","runAdapter","client","result","requestHandlers","findRequestHandler","url","pathname","URL","key","regex","RegExp","test","originalFetch","args","options","clientHeaders","newOptions","fetch","buildHeaders","method","toLowerCase","bodyHeaders","headers","retryCount","set","apiKey","supercompatFetch","pathHandler","requestHandler","endpointFromBaseUrl","baseURL","replace","supercompat","type","apiVersion","endpoint","get","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","create","ReadableStream","start","controller","chunk","enqueue","close","groqClientAdapter","openai","omit","isOModel","model","startsWith","systemDeveloperMessages","messages","map","message","role","omitKeys","resultOptions","openaiClientAdapter","azureOpenaiClientAdapter","azureOpenai","mistral","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","serializeMessage","tool_call_id","toolCallId","serializeBody","serializedBody","serializedChunk","complete","mistralClientAdapter","perplexity","id","object","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","content","includes","perplexityClientAdapter","anthropic","uid","fork","isEmpty","nonEmptyContent","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","name","function","description","input_schema","parameters","text","toolCall","input","arguments","tool_use_id","serializeMessages","systemMessages","otherMessages","system","chatMessages","join","max_tokens","messageDelta","partial_json","content_block","anthropicClientAdapter","together","togetherClientAdapter","google","createId","resultChunk","newChoices","googleClientAdapter","humiris","created","logprobs","humirisClientAdapter","ollama","ollamaClientAdapter","_","dayjs","flat","isArray","isObject","validToolCallContentTypes","serializeToolContent","output","isEveryToolPartValid","every","toolPart","serializeToolCall","serializeMessageWithContent","serializeContent","metadata","value","run","messageToolCalls","tc","runStep","runSteps","find","rs","step_details","some","rsTc","getMessages","instructions","updatedToolCall","cloneDeep","Object","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","completionsRunAdapter","clientAdapter","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","response_format","console","failed_at","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","createdAt","tool_resources","prisma","urlString","initialCreatedAt","subtract","length","format","assistantId","assistant","connect","add","toDate","threads","threadId","completedAt","incompleteAt","incompleteDetails","runId","messageContentBlocks","item","match","last","limit","order","after","pageSize","messagesPlusOne","fromEntries","searchParams","parseInt","findMany","where","take","orderBy","skip","cursor","slice","has_more","last_id","serializeRun","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","runs","runsPlusOne","at","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","stepDetails","expiredAt","Error","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","truncationStrategy","last_messages","include","readableStream","findUnique","modelSlug","additional_instructions","responseFormat","runStepsPlusOne","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","completedRunStep","toolOutput","dir","depth","Promise","resolve","submitToolOutputs","assistants","prismaStorageAdapter","conversation","conversations","items","contentBlock","filter","Boolean","serializeAttachments","serializeMetadata","serializeItemAsMessage","openaiAssistant","file_id","image_file","detail","image_url","createResponseItems","responseId","itemId","keys","k","m","exec","idx","Number","x","sort","a","b","i","raw","arr","Array","j","entry","itemIds","sortOrder","itemsWithRunIds","responseMap","timestampedItems","retrieve","mapItemsWithRunIds","fetchResponsesForItems","assignTimestamps","conversationCreatedAt","assignedTimestamp","responseIds","results","from","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","call","has","serializeToolCalls","serializeResponseAsRun","pendingToolCalls","BUCKET_PREFIX","MAX_BUCKETS","MAX_VALUE_LENGTH","parseBucket","serializeBucket","bucketKey","listBucketIndices","parseAllPairs","indices","pairs","iid","tryPackPairs","baseMetadata","newBuckets","currentEntries","flush","next","success","newMetadata","v","val","appendItemIdsToConversationMetadata","base","existing","nextPairs","concat","working","saveResponseItemsToConversationMetadata","updated","defaultAssistant","truncation","o","_threadId","pMap","iterable","mapper","concurrency","stopOnError","signal","POSITIVE_INFINITY","resolve_","reject_","Symbol","iterator","asyncIterator","TypeError","isSafeInteger","errors","skippedIndexesMap","isRejected","isResolved","isIterableDone","resolvingCount","currentIndex","signalListener","reject","reason","cleanup","removeEventListener","aborted","addEventListener","once","nextItem","pureResult","done","AggregateError","size","pMapSkip","element","serializeItemAsRunStep","functionCallOutput","functionCalls","functionCallOutputsResponses","functionCallOutputs","nonFcItems","functionCall","flatMap","step","synthCreation","getFunctionCallOutputItems","functionCallOutputItems","previousResponse","functionCallItem","_openaiAssistant","responsesStorageAdapter","responsesRunAdapter","responseCreatedResponse","item_id","output_index","String"],"mappings":"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","sourcesContent":["// src/supercompat.ts\nimport OpenAI, { AzureOpenAI } from \"openai\";\n\n// src/supercompatFetch/requestHandlers.ts\nimport { assign, partob } from \"radash\";\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const result = storage({ runAdapter: partob(runAdapter, { client }) });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => 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 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 OpenAI({\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\nimport { omit } from \"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 ...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\nimport { uid, fork, omit as omit2, isEmpty } from \"radash\";\n\n// src/lib/messages/nonEmptyMessages.ts\nvar nonEmptyContent = ({\n message\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 name: toolCall.function.name,\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] = 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 ...omit2(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 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 const delta = chunk.delta.type === \"input_json_delta\" ? {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json\n }\n }\n ]\n } : {\n content: chunk.delta.text\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 controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n const delta = chunk.content_block.type === \"tool_use\" ? {\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 content: chunk.content_block.text\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 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 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\nimport { createId } from \"@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_${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\nimport _ from \"lodash\";\nimport { uid as uid2, omit as omit3, isEmpty as isEmpty2 } from \"radash\";\nimport dayjs from \"dayjs\";\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nimport { flat } from \"radash\";\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\nimport { isArray, isObject } from \"radash\";\nvar validToolCallContentTypes = [\n \"image\",\n \"text\"\n];\nvar serializeToolContent = ({\n toolCall\n}) => {\n if (isArray(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!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 return rs.step_details.tool_calls.some((rsTc) => {\n if (rsTc.type !== \"function\") return false;\n return rsTc.id === tc.id;\n });\n });\n if (!runStep) return;\n const toolCall = runStep.step_details.tool_calls.find((rsTc) => {\n if (rsTc.type !== \"function\") return false;\n return rsTc.id === tc.id;\n });\n result.push(serializeToolCall({ toolCall }));\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 ...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 omit3(delta, [\"index\"]);\n const result = _.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: uid2(24),\n type: \"function\",\n ...omit3(tc, [\"index\"])\n }));\n }\n const newToolCalls = _.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 = () => async ({\n client: clientAdapter,\n run: run3,\n onEvent: onEvent2,\n getMessages: getMessages2\n}) => {\n if (run3.status !== \"queued\") return;\n const client = supercompat({\n client: clientAdapter\n });\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 ...isEmpty2(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: 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 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: dayjs().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: 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 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: 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 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: uid2(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 (isEmpty2(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run3,\n status: \"completed\",\n completed_at: dayjs().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// 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\nimport dayjs3 from \"dayjs\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nimport dayjs2 from \"dayjs\";\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: dayjs2(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 const body = JSON.parse(options.body);\n const messages4 = body.messages || [];\n const metadata = body.metadata || {};\n const initialCreatedAt = dayjs3().subtract(messages4.length, \"seconds\").format();\n const thread = await prisma.thread.create({\n data: {\n metadata,\n ...metadata.assistantId ? {\n assistant: {\n connect: {\n id: metadata.assistantId\n }\n }\n } : {},\n messages: {\n create: 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: dayjs3(initialCreatedAt).add(index, \"seconds\").toDate()\n }))\n }\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\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\nimport { isArray as isArray2 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nimport dayjs4 from \"dayjs\";\nimport { assign as assign2 } from \"radash\";\nvar serializeMessage4 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: dayjs4(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs4(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs4(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: assign2(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 (isArray2(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 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\nimport { assign as assign3, last } from \"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 } = assign3({\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 },\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: 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\nimport { assign as assign4 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nimport dayjs5 from \"dayjs\";\nvar serializeRun = ({\n run: run3\n}) => ({\n id: run3.id,\n object: \"thread.run\",\n created_at: dayjs5(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: dayjs5(run3.expiresAt).unix(),\n started_at: run3.startedAt ? dayjs5(run3.startedAt).unix() : null,\n cancelled_at: run3.cancelledAt ? dayjs5(run3.cancelledAt).unix() : null,\n failed_at: run3.failedAt ? dayjs5(run3.failedAt).unix() : null,\n completed_at: run3.completedAt ? dayjs5(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/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 } = assign4({\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 },\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: 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\nimport dayjs7 from \"dayjs\";\nimport { assign as assign5 } from \"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 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 requiredAction: event.data.required_action\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nimport dayjs6 from \"dayjs\";\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: dayjs6(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 ? dayjs6(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs6(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs6(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs6(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\" : \"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 if (event.data.tool_calls) {\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: event.data.tool_calls\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 ...event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}\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 (run3.truncationStrategy.type === \"auto\") {\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: 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 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 } = assign5({\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: dayjs7().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({\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: dayjs7().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 return new Response(JSON.stringify(\n serializeRun({ run: 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\nimport { assign as assign6 } from \"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 } = assign6({\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\nimport dayjs8 from \"dayjs\";\nvar updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {\n },\n tool_outputs\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: dayjs8().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// 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({\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({\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\nimport dayjs9 from \"dayjs\";\nvar post14 = ({ prisma }) => async (_url, options) => {\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: dayjs9().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 openai\n}) => async (urlString, options) => {\n const body = JSON.parse(options.body);\n const messages4 = body.messages || [];\n const metadata = body.metadata || {};\n const conversation = await openai.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 openai\n}) => ({\n post: post15({ openai })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/messages/post.ts\nimport dayjs10 from \"dayjs\";\nimport { isArray as isArray3 } from \"radash\";\n\n// src/lib/items/serializeItemAsMessage.ts\nimport { uid as uid3 } from \"radash\";\nvar serializeContent2 = ({\n item\n}) => {\n if (item.type !== \"message\") return [];\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 }\n return null;\n }).filter(Boolean);\n};\nvar serializeAttachments = ({\n item\n}) => [];\nvar serializeMetadata = ({\n item\n}) => ({\n item: JSON.stringify(item)\n});\nvar serializeItemAsMessage = ({\n item,\n threadId,\n openaiAssistant,\n createdAt,\n runId = null,\n status: status3 = \"completed\"\n}) => ({\n id: item.id || uid3(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\nimport { uid as uid4 } from \"radash\";\nvar messageContentBlocks2 = ({\n content\n}) => {\n if (isArray3(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 post16 = ({\n openai,\n openaiAssistant,\n createResponseItems\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const body = JSON.parse(options.body);\n const { role, content, metadata } = body;\n const item = {\n id: `msg_${uid4(24)}`,\n status: \"in_progress\",\n type: \"message\",\n role,\n content: messageContentBlocks2({\n content\n })\n };\n createResponseItems.push(item);\n return new Response(JSON.stringify(\n serializeItemAsMessage({\n item,\n threadId,\n openaiAssistant,\n createdAt: dayjs10().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\nimport { assign as assign7 } from \"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 openai,\n openaiAssistant\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 } = assign7({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const conversation = await openai.conversations.retrieve(threadId);\n const sortOrder = order === \"asc\" ? \"asc\" : \"desc\";\n const items = await openai.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 openai,\n items: itemsWithRunIds\n });\n const timestampedItems = assignTimestamps({\n items: itemsWithRunIds,\n responseMap,\n sortOrder,\n conversationCreatedAt: conversation.created_at\n });\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 openai,\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) => openai.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 openai,\n openaiAssistant,\n createResponseItems\n}) => ({\n post: post16({ openai, openaiAssistant, createResponseItems }),\n get: get14({ openai, openaiAssistant })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/get.ts\nimport { assign as assign8 } from \"radash\";\nvar get15 = ({\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 } = assign8({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\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\nimport { uid as uid5 } from \"radash\";\nimport dayjs11 from \"dayjs\";\nimport { assign as assign9 } from \"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) => item.type === \"function_call_output\"\n ).map((item) => item.call_id).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 tryPackPairs({\n baseMetadata,\n pairs\n}) {\n const newBuckets = [];\n let currentEntries = [];\n const flush = () => {\n newBuckets.push(serializeBucket({ entries: currentEntries }));\n currentEntries = [];\n };\n for (const { responseId: responseId2, itemId } of pairs) {\n const next = currentEntries.map((e) => ({ responseId: e.responseId, itemIds: [...e.itemIds] }));\n const last6 = next[next.length - 1];\n if (last6 && last6.responseId === responseId2) {\n last6.itemIds.push(itemId);\n } else {\n next.push({ responseId: responseId2, itemIds: [itemId] });\n }\n const candidate = serializeBucket({ entries: next });\n if (candidate.length <= MAX_VALUE_LENGTH) {\n currentEntries = next;\n continue;\n }\n flush();\n if (newBuckets.length >= MAX_BUCKETS) {\n return { success: false, newMetadata: baseMetadata };\n }\n currentEntries = [{ responseId: responseId2, itemIds: [itemId] }];\n }\n if (currentEntries.length > 0) flush();\n const result = {};\n for (const [k, v] of Object.entries(baseMetadata)) {\n if (!k.startsWith(BUCKET_PREFIX)) result[k] = v;\n }\n newBuckets.forEach((val, i) => {\n if (val && val !== \"[]\") result[bucketKey({ index: i })] = val;\n });\n return { success: true, newMetadata: result };\n}\nfunction appendItemIdsToConversationMetadata({\n metadata,\n responseId: responseId2,\n itemIds\n}) {\n const base = { ...metadata || {} };\n const existing = parseAllPairs({ metadata: base });\n const nextPairs = existing.concat(itemIds.map((id) => ({ responseId: responseId2, itemId: id })));\n let working = nextPairs;\n while (true) {\n const { success, newMetadata } = tryPackPairs({ baseMetadata: base, pairs: working });\n if (success) return newMetadata;\n if (working.length === 0) {\n throw new Error(\"responseItemsMap: cannot pack even a single item into 16 buckets\");\n }\n working = working.slice(1);\n }\n}\nasync function saveResponseItemsToConversationMetadata({\n openai,\n threadId,\n responseId: responseId2,\n itemIds\n}) {\n const conversation = await openai.conversations.retrieve(threadId);\n const updated = appendItemIdsToConversationMetadata({\n metadata: conversation.metadata,\n responseId: responseId2,\n itemIds\n });\n await openai.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 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 openai,\n openaiAssistant,\n runAdapter,\n createResponseItems\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\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 } = assign9({\n ...defaultAssistant,\n ...openaiAssistant\n }, body);\n const response = await openai.responses.create({\n conversation: threadId,\n instructions,\n model,\n metadata,\n stream,\n ...serializeTools2({ tools }),\n truncation: truncation_strategy.type,\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({\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: uid5(24),\n failed_at: dayjs11().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 openai,\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 openai,\n openaiAssistant,\n runAdapter,\n createResponseItems\n}) => ({\n get: get15({ openai }),\n post: post17({ openai, openaiAssistant, createResponseItems, runAdapter })\n});\n\n// src/adapters/storage/responsesStorageAdapter/threads/run/get.ts\nvar get16 = ({\n openai,\n openaiAssistant\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, _threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const response = await openai.responses.retrieve(runId);\n const data = serializeResponseAsRun({\n response,\n assistantId: openaiAssistant.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 openai,\n openaiAssistant,\n runAdapter\n}) => ({\n get: get16({ openai, openaiAssistant })\n // post: post({ prisma, runAdapter }),\n});\n\n// ../../node_modules/p-map/index.js\nasync function pMap(iterable, mapper, {\n concurrency = Number.POSITIVE_INFINITY,\n stopOnError = true,\n signal\n} = {}) {\n return new Promise((resolve_, reject_) => {\n if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {\n throw new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n }\n if (typeof mapper !== \"function\") {\n throw new TypeError(\"Mapper function is required\");\n }\n if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {\n throw new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n }\n const result = [];\n const errors = [];\n const skippedIndexesMap = /* @__PURE__ */ new Map();\n let isRejected = false;\n let isResolved = false;\n let isIterableDone = false;\n let resolvingCount = 0;\n let currentIndex = 0;\n const iterator = iterable[Symbol.iterator] === void 0 ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n const signalListener = () => {\n reject(signal.reason);\n };\n const cleanup = () => {\n signal?.removeEventListener(\"abort\", signalListener);\n };\n const resolve = (value) => {\n resolve_(value);\n cleanup();\n };\n const reject = (reason) => {\n isRejected = true;\n isResolved = true;\n reject_(reason);\n cleanup();\n };\n if (signal) {\n if (signal.aborted) {\n reject(signal.reason);\n }\n signal.addEventListener(\"abort\", signalListener, { once: true });\n }\n const next = async () => {\n if (isResolved) {\n return;\n }\n const nextItem = await iterator.next();\n const index = currentIndex;\n currentIndex++;\n if (nextItem.done) {\n isIterableDone = true;\n if (resolvingCount === 0 && !isResolved) {\n if (!stopOnError && errors.length > 0) {\n reject(new AggregateError(errors));\n return;\n }\n isResolved = true;\n if (skippedIndexesMap.size === 0) {\n resolve(result);\n return;\n }\n const pureResult = [];\n for (const [index2, value] of result.entries()) {\n if (skippedIndexesMap.get(index2) === pMapSkip) {\n continue;\n }\n pureResult.push(value);\n }\n resolve(pureResult);\n }\n return;\n }\n resolvingCount++;\n (async () => {\n try {\n const element = await nextItem.value;\n if (isResolved) {\n return;\n }\n const value = await mapper(element, index);\n if (value === pMapSkip) {\n skippedIndexesMap.set(index, value);\n }\n result[index] = value;\n resolvingCount--;\n await next();\n } catch (error) {\n if (stopOnError) {\n reject(error);\n } else {\n errors.push(error);\n resolvingCount--;\n try {\n await next();\n } catch (error2) {\n reject(error2);\n }\n }\n }\n })();\n };\n (async () => {\n for (let index = 0; index < concurrency; index++) {\n try {\n await next();\n } catch (error) {\n reject(error);\n break;\n }\n if (isIterableDone || isRejected) {\n break;\n }\n }\n })();\n });\n}\nvar pMapSkip = Symbol(\"skip\");\n\n// src/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts\nimport { last as last5 } from \"radash\";\n\n// src/lib/items/serializeItemAsRunStep.ts\nimport dayjs12 from \"dayjs\";\nimport { uid as uid6 } from \"radash\";\nfunction serializeItemAsRunStep({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${uid6(24)}`,\n status: status3 = \"completed\",\n completedAt = dayjs12().unix()\n}) {\n const itemId = typeof item.id === \"string\" ? item.id : `item_${uid6(18)}`;\n const base = {\n id: itemId,\n object: \"thread.run.step\",\n created_at: dayjs12().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 }\n if (item.type === \"function_call\") {\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: functionCallOutput ? functionCallOutput.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 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/adapters/storage/responsesStorageAdapter/threads/runs/steps/get.ts\nvar get17 = ({\n openai,\n openaiAssistant\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const response = await openai.responses.retrieve(runId);\n const functionCalls = response.output.filter((item) => item.type === \"function_call\");\n const functionCallOutputsResponses = await pMap(functionCalls, async (functionCall) => {\n const items = await openai.conversations.items.list(threadId, {\n after: functionCall.id,\n order: \"asc\"\n });\n return items.data.find((item) => item.type === \"function_call_output\" && item.call_id === functionCall.call_id);\n });\n const functionCallOutputs = functionCallOutputsResponses.filter(Boolean);\n const nonFcItems = response.output.filter((item) => item.type !== \"function_call\");\n const data = response.output.flatMap((item) => {\n const step = serializeItemAsRunStep({\n item,\n items: functionCallOutputs,\n threadId,\n openaiAssistant,\n runId: response.id\n });\n if (item.type === \"function_call\") {\n const synthCreation = {\n id: `mc${item.id}`,\n run_id: response.id,\n status: \"completed\",\n completed_at: step.created_at,\n step_details: {\n type: \"message_creation\",\n message_creation: { message_id: item.id }\n }\n };\n return [synthCreation, step];\n }\n return [step];\n });\n return new Response(JSON.stringify({\n data,\n has_more: false,\n last_id: last5(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 openai,\n openaiAssistant\n}) => ({\n get: get17({ openai, openaiAssistant })\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 getFunctionCallOutputItems = ({\n tool_outputs\n}) => tool_outputs.map((toolOutput) => ({\n type: \"function_call_output\",\n call_id: toolOutput.tool_call_id,\n output: toolOutput.output\n}));\nvar post18 = ({\n openai,\n openaiAssistant,\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 functionCallOutputItems = getFunctionCallOutputItems({ tool_outputs });\n const previousResponse = await openai.responses.retrieve(runId);\n const response = await openai.responses.create({\n conversation: threadId,\n input: functionCallOutputItems,\n instructions: openaiAssistant.instructions,\n model: openaiAssistant.model,\n // metadata,\n stream,\n ...serializeTools3({ tools: openaiAssistant.tools })\n // truncation: truncation_strategy.type,\n // text: response_format,\n });\n const readableStream = new ReadableStream({\n async start(controller) {\n functionCallOutputItems.forEach((item) => {\n const functionCallItem = previousResponse.output.find((i) => i.type === \"function_call\" && i.call_id === item.call_id);\n if (!functionCallItem) {\n return;\n }\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.step.completed\",\n data: serializeItemAsRunStep({\n item: functionCallItem,\n items: functionCallOutputItems,\n threadId,\n openaiAssistant,\n runId\n })\n })}\n\n`);\n });\n await runAdapter({\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 openai,\n openaiAssistant,\n runAdapter\n}) => ({\n post: post18({\n openai,\n openaiAssistant,\n // @ts-ignore-next-line\n runAdapter\n })\n});\n\n// src/adapters/storage/responsesStorageAdapter/assistants/get.ts\nvar get18 = ({\n openaiAssistant\n}) => async (urlString) => {\n return new Response(JSON.stringify({\n data: [openaiAssistant],\n has_more: false,\n last_id: openaiAssistant.id\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/responsesStorageAdapter/assistants/post.ts\nvar post19 = ({\n openaiAssistant: _openaiAssistant\n}) => 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 openai,\n openaiAssistant\n}) => ({\n get: get18({ openaiAssistant }),\n post: post19({ openaiAssistant })\n});\n\n// src/adapters/storage/responsesStorageAdapter/index.ts\nvar responsesStorageAdapter = ({\n openai,\n openaiAssistant\n}) => {\n const createResponseItems = [];\n return ({ runAdapter }) => ({\n requestHandlers: {\n \"^/(?:v1|/?openai)/assistants$\": assistants2({ openai, openaiAssistant }),\n \"^/(?:v1|/?openai)/threads$\": threads2({ openai }),\n [messagesRegexp]: messages3({ openai, openaiAssistant, createResponseItems }),\n [runsRegexp]: runs2({ openai, openaiAssistant, runAdapter, createResponseItems }),\n [runRegexp]: run2({ openai, openaiAssistant, runAdapter }),\n [stepsRegexp]: steps2({ openai, openaiAssistant }),\n [submitToolOutputsRegexp]: submitToolOutputs2({ openai, openaiAssistant, runAdapter })\n }\n });\n};\n\n// src/adapters/run/responsesRunAdapter/index.ts\nimport dayjs13 from \"dayjs\";\nimport { uid as uid7 } from \"radash\";\nvar serializeToolCalls2 = ({\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 responsesRunAdapter = ({\n openai,\n openaiAssistant\n}) => async ({\n threadId,\n response,\n onEvent: onEvent2\n}) => {\n let responseCreatedResponse = null;\n const toolCalls = {};\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: openaiAssistant.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: openaiAssistant.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\");\n if (toolCalls2.length > 0) {\n await onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...serializeResponseAsRun({\n response: event.response,\n assistantId: openaiAssistant.id\n }),\n ...{\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: serializeToolCalls2({\n toolCalls: toolCalls2\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: openaiAssistant.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: openaiAssistant.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.output_index - 1, 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.run.step.created\",\n data: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\n runId: responseCreatedResponse.id,\n status: \"in_progress\",\n completedAt: null\n })\n });\n await onEvent2({\n event: \"thread.message.created\",\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant,\n createdAt: dayjs13().unix(),\n runId: responseCreatedResponse.id,\n status: \"in_progress\"\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: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\n runId: responseCreatedResponse.id\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: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\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,\n createdAt: dayjs13().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: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\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 //\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_${uid7(18)}`,\n object: \"thread.run\",\n thread_id: threadId,\n assistant_id: openaiAssistant.id,\n status: \"failed\",\n failed_at: dayjs13().unix(),\n last_error: {\n code: \"server_error\",\n message: String(e?.message || e || \"Unknown error\")\n }\n }\n });\n } finally {\n if (responseCreatedResponse?.id && itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n openai,\n threadId,\n responseId: responseCreatedResponse.id,\n itemIds\n });\n }\n }\n};\nexport {\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","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'\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 result = storage({ runAdapter: partob(runAdapter, { client }) })\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\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.Chat.ChatCompletionMessageParam[]\n}) => {\n const result = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam, 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 })\n } else if (agentSideRoles.includes(message.role) && agentSideRoles.includes(nextMessage.role)) {\n result.push({\n role: 'user',\n content: '-',\n })\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 const delta = chunk.delta.type === 'input_json_delta' ? {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json,\n },\n },\n ]\n } : {\n content: chunk.delta.text,\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 const delta = chunk.content_block.type === 'tool_use' ? {\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 content: chunk.content_block.text,\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 (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 })\n ))\n\n return result\n}\n","import type OpenAI from 'openai'\n\nexport const firstUserMessages = ({\n messages,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n}): OpenAI.Chat.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 },\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 name: toolCall.function.name,\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'\nimport { supercompat } from '@/supercompat'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: any\n delta: any\n}) => {\n if (!toolCall) return omit(delta, ['index'])\n\n // if (delta.type !== 'function') return toolCall\n\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n}\n\nconst toolCallsData = ({\n prevToolCalls,\n delta,\n}: {\n prevToolCalls: any\n delta: any\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc: any) => ({\n id: uid(24),\n type: 'function',\n ...omit(tc, ['index']),\n }))\n }\n\n const newToolCalls = _.cloneDeep(prevToolCalls)\n\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta,\n })\n }\n\n return newToolCalls\n}\n\nexport const completionsRunAdapter = () => async ({\n client: clientAdapter,\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 const client = supercompat({\n client: clientAdapter,\n })\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","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\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})\n\nconst serializeMessageWithContent = ({\n message,\n}: {\n message: MessageWithRun\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...(message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}),\n})\n\nconst serializeContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}) => content.map((content) => content.text.value).join('\\n')\n\nexport const serializeMessage = ({\n message\n}: {\n message: MessageWithRun\n}) => {\n const result = [serializeMessageWithContent({ message })]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = message.metadata?.toolCalls || []\n\n messageToolCalls.forEach((tc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n const runStep = run.runSteps.find((rs) => {\n if (rs.type !== 'tool_calls') return false\n\n return rs.step_details.tool_calls.some((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n })\n\n if (!runStep) return\n\n const toolCall = runStep.step_details.tool_calls.find((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n\n result.push(serializeToolCall({ toolCall }))\n })\n\n return result\n}\n","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 { 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 const body = JSON.parse(options.body)\n\n const messages = body.messages || []\n const metadata = body.metadata || {}\n\n const initialCreatedAt = dayjs().subtract(messages.length, 'seconds').format()\n\n const thread = await prisma.thread.create({\n data: {\n metadata,\n ...(metadata.assistantId ? ({\n assistant: {\n connect: {\n id: metadata.assistantId,\n },\n },\n }) : {}),\n messages: {\n create: messages.map((message: OpenAI.Beta.ThreadCreateParams.Message, index: number) => ({\n role: message.role === 'user' ? 'USER' : 'ASSISTANT',\n content: [{\n type: 'text',\n text: {\n annotations: [],\n value: message.content,\n },\n },\n ],\n attachments: message.attachments,\n metadata: message.metadata,\n createdAt: dayjs(initialCreatedAt).add(index, 'seconds').toDate(),\n })),\n },\n },\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 { 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 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 }),\n role: role === 'user' ? 'USER' : 'ASSISTANT',\n metadata: metadata || {},\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,\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 },\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'\n// @ts-ignore-next-line\nimport type { PrismaClient, Run } from '@prisma/client'\nimport { assign, last } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun } from './serializeRun'\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 },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n }) as Run[]\n\n const runs = runsPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: runs.map((run: Run) => serializeRun({ 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'\n// @ts-ignore-next-line\nimport type { Run } from '@prisma/client'\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 OpenAI.Beta.Threads.Run['tools'],\n metadata: 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 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'\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 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 })\n\n const data = serializeRun({ run })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter({\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 { PrismaClient } from '@prisma/client'\n\nexport const threadRunFailed = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunFailed>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.FAILED,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunCompleted = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunCompleted>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n })\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { RunStatus } from '@/types/prisma'\n\nexport const threadRunRequiresAction = ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunRequiresAction>\n}) => {\n controller.enqueue(event)\n\n return prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.REQUIRES_ACTION,\n requiredAction: event.data.required_action,\n },\n })\n}\n","import dayjs from 'dayjs'\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 { RunStepType, RunStepStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\n\nconst type = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.type === 'message_creation') return RunStepType.MESSAGE_CREATION\n if (event.data.type === 'tool_calls') return RunStepType.TOOL_CALLS\n\n throw new Error(`Unknown type: ${event.data.type}`)\n}\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated) => {\n if (event.data.status === 'in_progress') return RunStepStatus.IN_PROGRESS\n if (event.data.status === 'cancelled') return RunStepStatus.CANCELLED\n if (event.data.status === 'completed') return RunStepStatus.COMPLETED\n if (event.data.status === 'failed') return RunStepStatus.FAILED\n if (event.data.status === 'expired') return RunStepStatus.EXPIRED\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadRunStepCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepCreated>\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep,\n })\n\n return serializedRunStep\n}\n","import type OpenAI from 'openai'\n\nexport const threadRunStepDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../../../messages/serializeMessage'\n\nconst status = (event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated) => {\n if (event.data.status === 'completed') return MessageStatus.COMPLETED\n if (event.data.status === 'in_progress') return MessageStatus.IN_PROGRESS\n if (event.data.status === 'incomplete') return MessageStatus.INCOMPLETE\n\n throw new Error(`Unknown status: ${event.data.status}`)\n}\n\nexport const threadMessageCreated = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCreated>\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n role: event.data.role === 'assistant' ? 'ASSISTANT' : 'USER',\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status(event),\n },\n })\n\n const serializedMessage = serializeMessage({ message })\n\n controller.enqueue({\n ...event,\n data: serializedMessage,\n })\n\n return serializedMessage\n}\n","import type OpenAI from 'openai'\n\nexport const threadMessageDelta = ({\n event,\n controller,\n}: {\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta>\n}) => (\n controller.enqueue(event)\n)\n","import type OpenAI from 'openai'\nimport { MessageStatus, RunStepType } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadMessageCompleted = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>\n}) => {\n controller.enqueue(event)\n\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: RunStepType.TOOL_CALLS,\n },\n orderBy: {\n createdAt: 'desc',\n },\n })\n\n if (!latestRunStep) {\n throw new Error('No run step found')\n }\n\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id,\n },\n data: {\n stepDetails: {\n type: 'tool_calls',\n tool_calls: event.data.tool_calls,\n },\n },\n })\n }\n\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED,\n ...(event.data.content ? { content: event.data.content } : {}),\n ...(event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}),\n },\n })\n}\n","import { threadRunInProgress } from './threadRunInProgress'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunCompleted } from './threadRunCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\n\nexport const handlers = {\n 'thread.run.in_progress': threadRunInProgress,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.completed': threadRunCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n}\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { handlers } from './handlers'\n\nexport const onEvent = ({\n prisma,\n controller,\n}: {\n prisma: PrismaClient\n controller: ReadableStreamDefaultController\n}) => (event: OpenAI.Beta.AssistantStreamEvent) => {\n // @ts-ignore-next-line\n const handler = handlers[event.event]\n\n if (!handler) {\n console.log('No handler for event', event)\n return\n }\n\n return handler({ prisma, controller, event })\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { serializeMessage } from '../messages/serializeMessage'\nimport { serializeRunStep } from './steps/serializeRunStep'\nimport { serializeRun } from './serializeRun'\nimport type { Run, MessageWithRun, RunStep } from '@/types/prisma'\n\nconst getTake = ({\n run,\n}: {\n run: Run\n}) => {\n // @ts-ignore-next-line\n if (run.truncationStrategy.type === 'auto') {\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: MessageWithRun) => ({\n ...serializeMessage({ message }),\n run: message.run ? ({\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n }) : null,\n }))\n}\n","import type { PrismaClient } from '@prisma/client'\nimport type { RunAdapter } from '@/types'\nimport { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\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'\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 return new Response(JSON.stringify(\n serializeRun({ 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 { RunAdapter } from '@/types'\nimport { get } from './get'\n// import { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const run = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}): { get: RequestHandler } => ({\n get: get({ prisma }),\n // post: post({ prisma, runAdapter }),\n})\n","// @ts-ignore-next-line\nimport type { PrismaClient, RunStep } from '@prisma/client'\nimport { assign, last } 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 },\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 { PrismaClient } from '@prisma/client'\nimport dayjs from 'dayjs'\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: any\n}) => (\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 })\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({\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({\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 { RunAdapter } from '@/types'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\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 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 openai,\n}: {\n openai: OpenAI\n}) => async (urlString: string, options: RequestInit & { body: string }): Promise<ThreadCreateResponse> => {\n const body = JSON.parse(options.body)\n\n const messages = body.messages || []\n const metadata = body.metadata || {}\n\n const conversation = await openai.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 openai,\n}: {\n openai: OpenAI\n}): { post: RequestHandler } => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { isArray } from 'radash'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeItemAsMessage } from '@/lib/items/serializeItemAsMessage'\nimport { uid } from 'radash'\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: '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\nexport const post = ({\n openai,\n openaiAssistant,\n createResponseItems,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n createResponseItems: OpenAI.Responses.ResponseItem[]\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 const body = JSON.parse(options.body)\n const { role, content, metadata } = body\n\n const item = {\n id: `msg_${uid(24)}`,\n status: 'in_progress' as const,\n type: \"message\" as const,\n role,\n content: messageContentBlocks({\n content,\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 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 dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport type OpenAI from 'openai'\n\ntype ItemType = OpenAI.Conversations.ConversationItem | OpenAI.Responses.ResponseItem\n\nconst serializeContent = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.TextContentBlock[] => {\n if (item.type !== 'message') return []\n\n return item.content.map((contentBlock) => {\n if (contentBlock.type === 'input_text') {\n return {\n type: 'text' as 'text',\n text: {\n value: contentBlock.text,\n annotations: [],\n },\n }\n } else if (contentBlock.type === 'output_text') {\n return {\n type: 'text' as 'text',\n text: {\n value: contentBlock.text,\n annotations: [],\n },\n }\n }\n\n return null\n }).filter(Boolean) as OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}\n\nconst serializeAttachments = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.Message['attachments'] => (\n []\n)\n\nconst serializeMetadata = ({\n item,\n}: {\n item: ItemType\n}): OpenAI.Beta.Threads.Messages.Message['metadata'] => (\n {\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: OpenAI.Beta.Assistants.Assistant\n createdAt: number\n runId?: string | null\n status?: 'completed' | 'in_progress'\n}): OpenAI.Beta.Threads.Message => ({\n id: item.id || uid(24),\n object: 'thread.message' as '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 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 { assign } from 'radash'\nimport dayjs from 'dayjs'\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 openai,\n openaiAssistant,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\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 openai.conversations.retrieve(threadId)\n const sortOrder = order === 'asc' ? 'asc' : 'desc'\n\n const items = await openai.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 openai,\n items: itemsWithRunIds,\n })\n\n const timestampedItems = assignTimestamps({\n items: itemsWithRunIds,\n responseMap,\n sortOrder,\n conversationCreatedAt: conversation.created_at,\n })\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 openai,\n items,\n}: {\n openai: 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) => openai.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 } from '@/types'\n\nexport const messages = ({\n openai,\n openaiAssistant,\n createResponseItems,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n createResponseItems: OpenAI.Responses.ResponseItem[]\n}): { post: RequestHandler; get: RequestHandler } => ({\n post: post({ openai, openaiAssistant, createResponseItems }),\n get: get({ openai, openaiAssistant }),\n})\n","import type OpenAI from 'openai'\n// @ts-ignore-next-line\nimport type { PrismaClient, Run } from '@prisma/client'\nimport { assign, last } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun } from './serializeRun'\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 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 // const runsPlusOne = await prisma.run.findMany({\n // where: { threadId },\n // take: pageSize + 1,\n // orderBy: { createdAt: order },\n // ...(after && {\n // skip: 1,\n // cursor: { id: after },\n // }),\n // }) as Run[]\n //\n // const runs = runsPlusOne.slice(0, pageSize)\n //\n // return new Response(JSON.stringify({\n // data: runs.map((run: Run) => serializeRun({ 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 { uid } from 'radash'\nimport dayjs from 'dayjs'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeResponseAsRun } from '@/lib/responses/serializeResponseAsRun'\nimport { RunAdapterPartobClient } 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 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 openai,\n openaiAssistant,\n runAdapter,\n createResponseItems,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n runAdapter: RunAdapterPartobClient\n createResponseItems: OpenAI.Responses.ResponseItem[]\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 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 ...openaiAssistant,\n }, body)\n\n\n const response = await openai.responses.create({\n conversation: threadId,\n instructions,\n model,\n metadata,\n stream,\n ...serializeTools({ tools }),\n truncation: truncation_strategy.type,\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({\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 openai,\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'\nimport dayjs from 'dayjs'\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): item is OpenAI.Responses.ResponseFunctionToolCallOutputItem =>\n item.type === 'function_call_output',\n )\n .map((item) => item.call_id)\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 // total metadata key slots we’ll use\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\nfunction parseAllPairs({ metadata }: { metadata: ConversationMetadata }): Array<{ responseId: string; itemId: string }> {\n const indices = listBucketIndices({ metadata })\n const pairs: Array<{ responseId: string; itemId: string }> = []\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\n// Pack pairs into up to 16 buckets of <=512 chars each\nfunction tryPackPairs({\n baseMetadata,\n pairs,\n}: {\n baseMetadata: ConversationMetadata\n pairs: Array<{ responseId: string; itemId: string }>\n}): { success: boolean; newMetadata: ConversationMetadata } {\n const newBuckets: string[] = []\n let currentEntries: ItemResponseEntry[] = []\n\n const flush = () => {\n newBuckets.push(serializeBucket({ entries: currentEntries }))\n currentEntries = []\n }\n\n for (const { responseId, itemId } of pairs) {\n const next = currentEntries.map((e) => ({ responseId: e.responseId, itemIds: [...e.itemIds] }))\n const last = next[next.length - 1]\n if (last && last.responseId === responseId) {\n last.itemIds.push(itemId)\n } else {\n next.push({ responseId, itemIds: [itemId] })\n }\n\n const candidate = serializeBucket({ entries: next })\n if (candidate.length <= MAX_VALUE_LENGTH) {\n currentEntries = next\n continue\n }\n\n flush()\n if (newBuckets.length >= MAX_BUCKETS) {\n return { success: false, newMetadata: baseMetadata }\n }\n currentEntries = [{ responseId, itemIds: [itemId] }]\n }\n\n if (currentEntries.length > 0) flush()\n\n const result: ConversationMetadata = {}\n for (const [k, v] of Object.entries(baseMetadata)) {\n if (!k.startsWith(BUCKET_PREFIX)) result[k] = v\n }\n newBuckets.forEach((val, i) => {\n if (val && val !== '[]') result[bucketKey({ index: i })] = val\n })\n return { success: true, newMetadata: result }\n}\n\nexport function appendItemIdsToConversationMetadata({\n metadata,\n responseId,\n itemIds,\n}: {\n metadata?: ConversationMetadata\n responseId: string\n itemIds: string[]\n}): ConversationMetadata {\n const base = { ...(metadata || {}) }\n const existing = parseAllPairs({ metadata: base })\n const nextPairs = existing.concat(itemIds.map((id) => ({ responseId, itemId: id })))\n\n let working = nextPairs\n while (true) {\n const { success, newMetadata } = tryPackPairs({ baseMetadata: base, pairs: working })\n if (success) return newMetadata\n if (working.length === 0) {\n throw new Error('responseItemsMap: cannot pack even a single item into 16 buckets')\n }\n working = working.slice(1)\n }\n}\n\nexport async function saveResponseItemsToConversationMetadata({\n openai,\n threadId,\n responseId,\n itemIds,\n}: {\n openai: OpenAI\n threadId: string\n responseId: string\n itemIds: string[]\n}) {\n const conversation = await openai.conversations.retrieve(threadId)\n const updated = appendItemIdsToConversationMetadata({\n metadata: conversation.metadata as Record<string, string> | undefined,\n responseId,\n itemIds,\n })\n await openai.conversations.update(threadId, { metadata: updated })\n}\n","import type { OpenAI } from 'openai'\nimport type { RunAdapter } from '@/types'\nimport { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const runs = ({\n openai,\n openaiAssistant,\n runAdapter,\n createResponseItems,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n runAdapter: RunAdapter\n createResponseItems: OpenAI.Responses.ResponseItem[]\n}): { get: RequestHandler; post: RequestHandler } => ({\n get: get({ openai }),\n post: post({ openai, openaiAssistant, createResponseItems, runAdapter }),\n})\n","import type OpenAI from 'openai'\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 openai,\n openaiAssistant,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\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 openai.responses.retrieve(runId)\n\n const data = serializeResponseAsRun({\n response,\n assistantId: openaiAssistant.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 { RunAdapter } from '@/types'\nimport { get } from './get'\n// import { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const run = ({\n openai,\n openaiAssistant,\n runAdapter,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n runAdapter: RunAdapter\n}): { get: RequestHandler } => ({\n get: get({ openai, openaiAssistant }),\n // post: post({ prisma, runAdapter }),\n})\n","export default async function pMap(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tstopOnError = true,\n\t\tsignal,\n\t} = {},\n) {\n\treturn new Promise((resolve_, reject_) => {\n\t\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t\t}\n\n\t\tif (typeof mapper !== 'function') {\n\t\t\tthrow new TypeError('Mapper function is required');\n\t\t}\n\n\t\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t\t}\n\n\t\tconst result = [];\n\t\tconst errors = [];\n\t\tconst skippedIndexesMap = new Map();\n\t\tlet isRejected = false;\n\t\tlet isResolved = false;\n\t\tlet isIterableDone = false;\n\t\tlet resolvingCount = 0;\n\t\tlet currentIndex = 0;\n\t\tconst iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n\t\tconst signalListener = () => {\n\t\t\treject(signal.reason);\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener('abort', signalListener);\n\t\t};\n\n\t\tconst resolve = value => {\n\t\t\tresolve_(value);\n\t\t\tcleanup();\n\t\t};\n\n\t\tconst reject = reason => {\n\t\t\tisRejected = true;\n\t\t\tisResolved = true;\n\t\t\treject_(reason);\n\t\t\tcleanup();\n\t\t};\n\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(signal.reason);\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', signalListener, {once: true});\n\t\t}\n\n\t\tconst next = async () => {\n\t\t\tif (isResolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextItem = await iterator.next();\n\n\t\t\tconst index = currentIndex;\n\t\t\tcurrentIndex++;\n\n\t\t\t// Note: `iterator.next()` can be called many times in parallel.\n\t\t\t// This can cause multiple calls to this `next()` function to\n\t\t\t// receive a `nextItem` with `done === true`.\n\t\t\t// The shutdown logic that rejects/resolves must be protected\n\t\t\t// so it runs only one time as the `skippedIndex` logic is\n\t\t\t// non-idempotent.\n\t\t\tif (nextItem.done) {\n\t\t\t\tisIterableDone = true;\n\n\t\t\t\tif (resolvingCount === 0 && !isResolved) {\n\t\t\t\t\tif (!stopOnError && errors.length > 0) {\n\t\t\t\t\t\treject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tisResolved = true;\n\n\t\t\t\t\tif (skippedIndexesMap.size === 0) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pureResult = [];\n\n\t\t\t\t\t// Support multiple `pMapSkip`'s.\n\t\t\t\t\tfor (const [index, value] of result.entries()) {\n\t\t\t\t\t\tif (skippedIndexesMap.get(index) === pMapSkip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpureResult.push(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(pureResult);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolvingCount++;\n\n\t\t\t// Intentionally detached\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst element = await nextItem.value;\n\n\t\t\t\t\tif (isResolved) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = await mapper(element, index);\n\n\t\t\t\t\t// Use Map to stage the index of the element.\n\t\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\t\tskippedIndexesMap.set(index, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index] = value;\n\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (stopOnError) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors.push(error);\n\t\t\t\t\t\tresolvingCount--;\n\n\t\t\t\t\t\t// In that case we can't really continue regardless of `stopOnError` state\n\t\t\t\t\t\t// since an iterable is likely to continue throwing after it throws once.\n\t\t\t\t\t\t// If we continue calling `next()` indefinitely we will likely end up\n\t\t\t\t\t\t// in an infinite loop of failed iteration.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait next();\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\n\t\t// Create the concurrent runners in a detached (non-awaited)\n\t\t// promise. We need this so we can await the `next()` calls\n\t\t// to stop creating runners before hitting the concurrency limit\n\t\t// if the iterable has already been marked as done.\n\t\t// NOTE: We *must* do this for async iterators otherwise we'll spin up\n\t\t// infinite `next()` calls by default and never start the event loop.\n\t\t(async () => {\n\t\t\tfor (let index = 0; index < concurrency; index++) {\n\t\t\t\ttry {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (isIterableDone || isRejected) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t});\n}\n\nexport function pMapIterable(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tbackpressure = concurrency,\n\t} = {},\n) {\n\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t}\n\n\tif (typeof mapper !== 'function') {\n\t\tthrow new TypeError('Mapper function is required');\n\t}\n\n\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t}\n\n\tif (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`backpressure\\` to be an integer from \\`concurrency\\` (${concurrency}) and up or \\`Infinity\\`, got \\`${backpressure}\\` (${typeof backpressure})`);\n\t}\n\n\treturn {\n\t\tasync * [Symbol.asyncIterator]() {\n\t\t\tconst iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n\t\t\tconst promises = [];\n\t\t\tlet runningMappersCount = 0;\n\t\t\tlet isDone = false;\n\t\t\tlet index = 0;\n\n\t\t\tfunction trySpawn() {\n\t\t\t\tif (isDone || !(runningMappersCount < concurrency && promises.length < backpressure)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst promise = (async () => {\n\t\t\t\t\tconst {done, value} = await iterator.next();\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\treturn {done: true};\n\t\t\t\t\t}\n\n\t\t\t\t\trunningMappersCount++;\n\n\t\t\t\t\t// Spawn if still below concurrency and backpressure limit\n\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst returnValue = await mapper(await value, index++);\n\n\t\t\t\t\t\trunningMappersCount--;\n\n\t\t\t\t\t\tif (returnValue === pMapSkip) {\n\t\t\t\t\t\t\tconst index = promises.indexOf(promise);\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tpromises.splice(index, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Spawn if still below backpressure limit and just dropped below concurrency limit\n\t\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\t\treturn {done: false, value: returnValue};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tisDone = true;\n\t\t\t\t\t\treturn {error};\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\tpromises.push(promise);\n\t\t\t}\n\n\t\t\ttrySpawn();\n\n\t\t\twhile (promises.length > 0) {\n\t\t\t\tconst {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop\n\n\t\t\t\tpromises.shift();\n\n\t\t\t\tif (error) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (done) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Spawn if just dropped below backpressure limit and below the concurrency limit\n\t\t\t\ttrySpawn();\n\n\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield value;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport const pMapSkip = Symbol('skip');\n","import type { OpenAI } from 'openai'\nimport pMap from 'p-map'\nimport { last } from 'radash'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { serializeItemAsRunStep } from '@/lib/items/serializeItemAsRunStep'\nimport dayjs from 'dayjs'\n\nexport const get = ({\n openai,\n openaiAssistant,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\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 openai.responses.retrieve(runId)\n\n const functionCalls = response.output.filter((item) => (\n item.type === 'function_call'\n ))\n\n const functionCallOutputsResponses = await pMap(functionCalls, async (functionCall) => {\n const items = await openai.conversations.items.list(threadId, {\n after: functionCall.id,\n order: 'asc',\n })\n\n return items.data.find((item) => (\n item.type === 'function_call_output' && item.call_id === (functionCall as OpenAI.Responses.ResponseFunctionToolCall).call_id\n ))\n })\n\n const functionCallOutputs = functionCallOutputsResponses.filter(Boolean) as OpenAI.Conversations.ConversationItem[]\n const nonFcItems = response.output.filter((item) => (\n item.type !== 'function_call'\n ))\n\n const data = response.output.flatMap((item) => {\n const step = serializeItemAsRunStep({\n item,\n items: functionCallOutputs,\n threadId,\n openaiAssistant,\n runId: response.id,\n });\n\n if (item.type === 'function_call') {\n const synthCreation = {\n id: `mc${item.id}`,\n run_id: response.id,\n status: 'completed',\n completed_at: step.created_at,\n step_details: {\n type: 'message_creation',\n message_creation: { message_id: item.id },\n },\n };\n return [synthCreation, step];\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\ntype FunctionToolCall = OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\ntype ToolCallsStepDetails = OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails\n\ntype ItemType = OpenAI.Conversations.ConversationItem | OpenAI.Responses.ResponseItem | OpenAI.Responses.ResponseFunctionToolCall\n\nexport function serializeItemAsRunStep({\n item,\n items,\n threadId,\n openaiAssistant,\n runId = `run_${uid(24)}`,\n status = 'completed',\n completedAt = dayjs().unix(),\n}: {\n item: ItemType\n items: Omit<ItemType, 'id'>[]\n threadId: string\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\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 }\n\n if (item.type === 'function_call') {\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 // if (functionCallOutput) {\n const toolCall: FunctionToolCall = {\n id: item.call_id,\n type: 'function',\n function: {\n name: item.name,\n arguments: item.arguments,\n output: functionCallOutput ? functionCallOutput.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 }\n\n // Fallback: treat unknown items as message_creation\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 type { OpenAI } from 'openai'\nimport { get } from './get'\nimport type { RequestHandler } from '@/types'\n\nexport const steps = ({\n openai,\n openaiAssistant,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n}): { get: RequestHandler } => ({\n get: get({ openai, openaiAssistant }),\n})\n","import type { OpenAI } from 'openai'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { RunAdapterPartobClient } from '@/types'\nimport { serializeItemAsRunStep } from '@/lib/items/serializeItemAsRunStep'\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 getFunctionCallOutputItems = ({\n tool_outputs,\n}: {\n tool_outputs: OpenAI.Beta.Threads.RunSubmitToolOutputsParams['tool_outputs']\n}) => (\n tool_outputs.map((toolOutput) => ({\n type: 'function_call_output' as const,\n call_id: toolOutput.tool_call_id,\n output: toolOutput.output,\n }))\n)\n\nexport const post = ({\n openai,\n openaiAssistant,\n runAdapter,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\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 const functionCallOutputItems = getFunctionCallOutputItems({ tool_outputs })\n\n const previousResponse = await openai.responses.retrieve(runId)\n\n const response = await openai.responses.create({\n conversation: threadId,\n input: functionCallOutputItems,\n instructions: openaiAssistant.instructions,\n model: openaiAssistant.model,\n // metadata,\n stream,\n ...serializeTools({ tools: openaiAssistant.tools }),\n // truncation: truncation_strategy.type,\n // text: response_format,\n })\n\n const readableStream = new ReadableStream({\n async start(controller) {\n functionCallOutputItems.forEach((item) => {\n const functionCallItem = previousResponse.output.find((i) => (\n i.type === 'function_call' && i.call_id === item.call_id\n ))\n\n if (!functionCallItem) {\n return\n }\n\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.step.completed',\n data: serializeItemAsRunStep({\n item: functionCallItem,\n items: functionCallOutputItems,\n threadId,\n openaiAssistant,\n runId,\n })\n })}\\n\\n`)\n\n })\n\n await runAdapter({\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 { RunAdapter } from '@/types'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const submitToolOutputs = ({\n openai,\n openaiAssistant,\n runAdapter,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n runAdapter: RunAdapter\n}): { post: RequestHandler } => ({\n post: post({\n openai,\n openaiAssistant,\n // @ts-ignore-next-line\n runAdapter,\n }),\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 = ({\n openaiAssistant,\n}: {\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n}) => async (urlString: string): Promise<MessageCreateResponse> => {\n return new Response(JSON.stringify({\n data: [openaiAssistant],\n has_more: false,\n last_id: openaiAssistant.id,\n }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import type { OpenAI } from 'openai'\n\nexport const post = ({\n openaiAssistant: _openaiAssistant,\n}: {\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n}) =>\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 type { OpenAI } from 'openai'\nimport { get } from './get'\nimport { post } from './post'\nimport type { RequestHandler } from '@/types'\n\nexport const assistants = ({\n openai,\n openaiAssistant,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n}): { post: RequestHandler } => ({\n get: get({ openaiAssistant }),\n post: post({ openaiAssistant }),\n})\n","import type { OpenAI } from 'openai'\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 responsesStorageAdapter = ({\n openai,\n openaiAssistant,\n}: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n}): ((args: StorageAdapterArgs) => { requestHandlers: Record<string, MethodHandlers> }) => {\n const createResponseItems: OpenAI.Responses.ResponseItem[] = []\n\n return ({ runAdapter }: StorageAdapterArgs) => ({\n requestHandlers: {\n '^/(?:v1|/?openai)/assistants$': assistants({ openai, openaiAssistant }),\n '^/(?:v1|/?openai)/threads$': threads({ openai }),\n [messagesRegexp]: messages({ openai, openaiAssistant, createResponseItems }),\n [runsRegexp]: runs({ openai, openaiAssistant, runAdapter, createResponseItems }),\n [runRegexp]: run({ openai, openaiAssistant, runAdapter }),\n [stepsRegexp]: steps({ openai, openaiAssistant }),\n [submitToolOutputsRegexp]: submitToolOutputs({ openai, openaiAssistant, 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 { serializeItemAsRunStep } from '@/lib/items/serializeItemAsRunStep'\nimport { saveResponseItemsToConversationMetadata } from '@/lib/responses/saveResponseItemsToConversationMetadata'\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)\n\nexport const responsesRunAdapter =\n ({\n openai,\n openaiAssistant,\n }: {\n openai: OpenAI\n openaiAssistant: OpenAI.Beta.Assistants.Assistant\n }) =>\n async ({\n threadId,\n response,\n onEvent,\n }: {\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\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: openaiAssistant.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: openaiAssistant.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') as OpenAI.Responses.ResponseFunctionToolCall[]\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: openaiAssistant.id,\n }),\n ...({\n status: 'requires_action',\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: serializeToolCalls({\n toolCalls,\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: openaiAssistant.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: openaiAssistant.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.output_index - 1, 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.run.step.created',\n data: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\n completedAt: null,\n })\n })\n\n await onEvent({\n event: 'thread.message.created',\n data: serializeItemAsMessage({\n item: event.item,\n threadId,\n openaiAssistant,\n createdAt: dayjs().unix(),\n runId: responseCreatedResponse!.id,\n status: 'in_progress',\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: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\n runId: responseCreatedResponse!.id,\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: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\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,\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: serializeItemAsRunStep({\n item: event.item,\n items: [],\n threadId,\n openaiAssistant,\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.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: openaiAssistant.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 // One final metadata write using the best-known list (final if completed, partial otherwise)\n if (responseCreatedResponse?.id && itemIds.length > 0) {\n await saveResponseItemsToConversationMetadata({\n openai,\n threadId,\n responseId: responseCreatedResponse.id,\n itemIds,\n })\n }\n }\n }\n"]}