supercompat 2.32.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2278 -422
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -39
- package/dist/index.d.ts +42 -39
- package/dist/index.js +2283 -432
- package/dist/index.js.map +1 -1
- package/dist/supercompat.cjs +86 -14
- package/dist/supercompat.cjs.map +1 -1
- package/dist/supercompat.js +86 -14
- package/dist/supercompat.js.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +12 -5
- package/dist/types/index.d.ts +12 -5
- package/package.json +6 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.cjs","../src/index.ts","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/models/get.ts","../src/adapters/client/groqClientAdapter/models/index.ts","../src/adapters/client/groqClientAdapter/completions/post.ts","../src/adapters/client/groqClientAdapter/completions/index.ts","../src/adapters/client/groqClientAdapter/index.ts","../src/adapters/client/openaiClientAdapter/models/get.ts","../src/adapters/client/openaiClientAdapter/models/index.ts","../src/adapters/client/openaiClientAdapter/completions/post.ts","../src/lib/models/isOModel.ts","../src/lib/messages/systemDeveloperMessages.ts","../src/adapters/client/openaiClientAdapter/completions/index.ts","../src/adapters/client/openaiClientAdapter/index.ts","../src/adapters/client/azureOpenaiClientAdapter/index.ts","../src/adapters/client/mistralClientAdapter/models/get.ts","../src/adapters/client/mistralClientAdapter/models/index.ts","../src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts","../src/adapters/client/mistralClientAdapter/completions/serializeBody.ts","../src/adapters/client/mistralClientAdapter/completions/post.ts","../src/adapters/client/mistralClientAdapter/completions/index.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/models/get.ts","../src/adapters/client/perplexityClientAdapter/models/index.ts","../src/lib/messages/alternatingMessages.ts","../src/adapters/client/perplexityClientAdapter/completions/post.ts","../src/adapters/client/perplexityClientAdapter/completions/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/client/anthropicClientAdapter/models/get.ts","../src/adapters/client/anthropicClientAdapter/models/index.ts","../src/adapters/client/anthropicClientAdapter/completions/post.ts","../src/lib/messages/nonEmptyMessages.ts","../src/lib/messages/firstUserMessages.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/serializeMessage.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/index.ts","../src/adapters/client/anthropicClientAdapter/completions/index.ts","../src/adapters/client/anthropicClientAdapter/index.ts","../src/adapters/client/togetherClientAdapter/models/get.ts","../src/adapters/client/togetherClientAdapter/models/index.ts","../src/adapters/client/togetherClientAdapter/completions/post.ts","../src/adapters/client/togetherClientAdapter/completions/index.ts","../src/adapters/client/togetherClientAdapter/index.ts","../src/adapters/client/googleClientAdapter/models/get.ts","../src/adapters/client/googleClientAdapter/models/index.ts","../src/adapters/client/googleClientAdapter/completions/post.ts","../src/adapters/client/googleClientAdapter/completions/index.ts","../src/adapters/client/googleClientAdapter/index.ts","../src/adapters/client/humirisClientAdapter/models/get.ts","../src/adapters/client/humirisClientAdapter/models/index.ts","../src/adapters/client/humirisClientAdapter/completions/post.ts","../src/adapters/client/humirisClientAdapter/completions/index.ts","../src/adapters/client/humirisClientAdapter/index.ts","../src/adapters/client/ollamaClientAdapter/models/get.ts","../src/adapters/client/ollamaClientAdapter/models/index.ts","../src/adapters/client/ollamaClientAdapter/completions/post.ts","../src/adapters/client/ollamaClientAdapter/completions/index.ts","../src/adapters/client/ollamaClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages/index.ts","../src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts","../src/lib/messages/messagesRegexp.ts","../src/lib/runs/runsRegexp.ts","../src/lib/runs/runRegexp.ts","../src/lib/runs/submitToolOutputsRegexp.ts","../src/lib/steps/stepsRegexp.ts","../src/adapters/storage/prismaStorageAdapter/threads/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts","../src/adapters/storage/prismaStorageAdapter/threads/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/index.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts","../src/adapters/storage/prismaStorageAdapter/threads/runs/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/index.ts"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","anthropicClientAdapter","azureOpenaiClientAdapter","completionsRunAdapter","googleClientAdapter","groqClientAdapter","humirisClientAdapter","mistralClientAdapter","ollamaClientAdapter","openaiClientAdapter","perplexityClientAdapter","prismaStorageAdapter","supercompat","togetherClientAdapter","module","exports","import_openai","require","import_radash","storageRequestHandlers","storage","runAdapter","client","result","partob","requestHandlers","assign","findRequestHandler","url","pathname","URL","regex","RegExp","test","originalFetch","args","fetch","options","headers","authorization","defaultHeaders","Authorization","supercompatFetch","pathHandler","method","requestHandler","toLowerCase","endpointFromBaseUrl","baseURL","replace","type","AzureOpenAI","apiKey","apiVersion","endpoint","OpenAI","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","ReadableStream","start","controller","chunk","enqueue","close","openai","isOModel","model","startsWith","systemDeveloperMessages","messages","map","message","role","omitKeys","resultOptions","import_radash2","omit","azureOpenai","mistral","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","serializeMessage","tool_call_id","toolCallId","serializeBody","serializedBody","serializedChunk","complete","perplexity","id","object","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","content","includes","anthropic","nonEmptyContent","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","function","description","input_schema","parameters","text","toolCall","input","arguments","tool_use_id","serializeMessages","systemMessages","otherMessages","system","chatMessages","import_radash3","fork","join","isEmpty","max_tokens","messageDelta","partial_json","uid","content_block","together","google","import_cuid2","resultChunk","newChoices","createId","humiris","created","logprobs","ollama","import_lodash","import_dayjs","serializeToolCall","output","serializeMessageWithContent","serializeContent","metadata","run","messageToolCalls","tc","runStep","runSteps","find","rs","step_details","some","rsTc","getMessages","instructions","import_radash4","flat","updatedToolCall","import_radash5","_","cloneDeep","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","clientAdapter","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","response_format","console","failed_at","dayjs","unix","last_error","code","cause","completed_at","run_id","created_at","assistant_id","incomplete_at","incomplete_details","attachments","thread_id","annotations","expired_at","cancelled_at","usage","message_creation","message_id","required_action","submit_tool_outputs","messagesRegexp","runsRegexp","runRegexp","submitToolOutputsRegexp","stepsRegexp","serializeThread","thread","import_dayjs2","createdAt","tool_resources","prisma","initialCreatedAt","import_dayjs3","subtract","length","format","assistantId","assistant","connect","add","toDate","threads","import_dayjs4","threadId","completedAt","incompleteAt","incompleteDetails","runId","import_radash6","messageContentBlocks","import_radash7","isArray","item","urlString","match","limit","order","after","pageSize","messagesPlusOne","import_radash8","fromEntries","searchParams","parseInt","findMany","where","take","orderBy","skip","cursor","slice","has_more","last_id","last","serializeRun","import_dayjs5","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","runs","runsPlusOne","import_radash9","at","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","import_dayjs6","stepDetails","expiredAt","Error","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","truncationStrategy","last_messages","include","readableStream","findUnique","import_radash10","modelSlug","additional_instructions","import_dayjs7","responseFormat","runStepsPlusOne","import_radash11","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","completedRunStep","import_dayjs8","toolOutput","dir","depth","Promise","resolve","submitToolOutputs"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n anthropicClientAdapter: () => anthropicClientAdapter,\n azureOpenaiClientAdapter: () => azureOpenaiClientAdapter,\n completionsRunAdapter: () => completionsRunAdapter,\n googleClientAdapter: () => googleClientAdapter,\n groqClientAdapter: () => groqClientAdapter,\n humirisClientAdapter: () => humirisClientAdapter,\n mistralClientAdapter: () => mistralClientAdapter,\n ollamaClientAdapter: () => ollamaClientAdapter,\n openaiClientAdapter: () => openaiClientAdapter,\n perplexityClientAdapter: () => perplexityClientAdapter,\n prismaStorageAdapter: () => prismaStorageAdapter,\n supercompat: () => supercompat,\n togetherClientAdapter: () => togetherClientAdapter\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/supercompat.ts\nvar import_openai = __toESM(require(\"openai\"), 1);\n\n// src/supercompatFetch/requestHandlers.ts\nvar import_radash = require(\"radash\");\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const result = storage({ runAdapter: (0, import_radash.partob)(runAdapter, { client }) });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => (0, import_radash.assign)(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client\n })\n);\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({\n url,\n requestHandlers: requestHandlers2\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers2) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers2[key];\n }\n }\n};\n\n// src/supercompatFetch/originalFetch.ts\nvar originalFetch = ({\n args,\n client\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args;\n const headers = {\n ...options.headers,\n authorization: client.client.defaultHeaders().Authorization\n };\n return client.client.fetch(url, {\n ...options,\n headers\n });\n } else {\n return fetch(...args);\n }\n};\n\n// src/supercompatFetch/index.ts\nvar supercompatFetch = ({\n client,\n storage,\n runAdapter\n}) => {\n const requestHandlers2 = requestHandlers({\n client,\n storage,\n runAdapter\n });\n return async (...args) => {\n const [url, options] = args;\n const pathHandler = findRequestHandler({\n url,\n requestHandlers: requestHandlers2\n });\n if (!pathHandler) {\n return originalFetch({\n client,\n args\n });\n }\n const method = options?.method ?? \"\";\n const requestHandler = pathHandler[method.toLowerCase()];\n if (!requestHandler) {\n return originalFetch({\n client,\n args\n });\n }\n return requestHandler(...args);\n };\n};\n\n// src/lib/azureOpenai/endpointFromBaseUrl.ts\nvar endpointFromBaseUrl = ({\n baseURL\n}) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({\n client,\n storage,\n runAdapter\n}) => {\n if (client.type === \"AZURE_OPENAI\") {\n return new import_openai.AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n }\n return new import_openai.default({\n apiKey: \"SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY\",\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n};\n\n// src/adapters/client/groqClientAdapter/models/get.ts\nvar get = ({\n groq\n}) => async (_url, _options) => {\n try {\n const data = await groq.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/groqClientAdapter/models/index.ts\nvar models = ({\n groq\n}) => ({\n get: get({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/completions/post.ts\nvar post = ({\n groq\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await groq.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await groq.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/groqClientAdapter/completions/index.ts\nvar completions = ({\n groq\n}) => ({\n post: post({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/index.ts\nvar groqClientAdapter = ({\n groq\n}) => ({\n client: groq,\n requestHandlers: {\n \"^/v1/models$\": models({ groq }),\n \"^/v1/chat/completions$\": completions({ groq })\n }\n});\n\n// src/adapters/client/openaiClientAdapter/models/get.ts\nvar get2 = ({\n openai\n}) => async (_url, _options) => {\n try {\n const data = await openai.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/openaiClientAdapter/models/index.ts\nvar models2 = ({\n openai\n}) => ({\n get: get2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar import_radash2 = require(\"radash\");\n\n// src/lib/models/isOModel.ts\nvar isOModel = ({ model }) => model.startsWith(\"o1\") || model.startsWith(\"o3\");\n\n// src/lib/messages/systemDeveloperMessages.ts\nvar systemDeveloperMessages = ({\n messages: messages3,\n model\n}) => {\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 = ({\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 messages3 = body.messages;\n const resultOptions = {\n ...(0, import_radash2.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 = ({\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: messages3\n}) => {\n const result = [];\n messages3.forEach((message, index) => {\n result.push(message);\n const nextMessage = messages3[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 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 = ({\n perplexity\n}) => ({\n post: post4({ perplexity })\n});\n\n// src/adapters/client/perplexityClientAdapter/index.ts\nvar perplexityClientAdapter = ({\n perplexity\n}) => ({\n client: perplexity,\n requestHandlers: {\n \"^/v1/models$\": models5({ perplexity }),\n \"^/v1/chat/completions$\": completions4({ perplexity })\n }\n});\n\n// src/adapters/client/anthropicClientAdapter/models/get.ts\nvar get5 = ({\n anthropic\n}) => async (_url, _options) => {\n try {\n const response = await anthropic.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n data: response.data.map((model) => ({\n id: model.id,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/models/index.ts\nvar models6 = ({\n anthropic\n}) => ({\n get: get5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar import_radash3 = require(\"radash\");\n\n// src/lib/messages/nonEmptyMessages.ts\nvar nonEmptyContent = ({\n message\n}) => {\n if (typeof message.content === \"string\") {\n if (!/\\S/.test(message.content)) {\n return \"-\";\n }\n }\n return message.content;\n};\nvar nonEmptyMessages = ({\n messages: messages3\n}) => {\n const result = [];\n messages3.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: messages3\n}) => {\n const firstMessage = messages3[0];\n if (!firstMessage) 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 = ({\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: messages3\n}) => messages3.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 messages3 = body.messages;\n const [systemMessages, otherMessages] = (0, import_radash3.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 ...(0, import_radash3.omit)(body, [\"response_format\"]),\n stream: body.stream ? (0, import_radash3.isEmpty)(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools\n })\n };\n if (body.stream) {\n const response = await anthropic.messages.stream(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === \"content_block_delta\") {\n 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-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n 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-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"message_start\") {\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: 0,\n delta: {\n content: \"\"\n }\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n }\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await anthropic.messages.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/index.ts\nvar completions5 = ({\n anthropic\n}) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({\n anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n \"^/v1/models$\": models6({ anthropic }),\n \"^/v1/chat/completions$\": completions5({ anthropic })\n }\n});\n\n// src/adapters/client/togetherClientAdapter/models/get.ts\nvar get6 = ({\n together\n}) => async (_url, _options) => {\n try {\n const data = await together.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n // @ts-ignore-next-line\n data: data.body\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/togetherClientAdapter/models/index.ts\nvar models7 = ({\n together\n}) => ({\n get: get6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/completions/post.ts\nvar post6 = ({\n together\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await together.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await together.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/togetherClientAdapter/completions/index.ts\nvar completions6 = ({\n together\n}) => ({\n post: post6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/index.ts\nvar togetherClientAdapter = ({\n together\n}) => ({\n client: together,\n requestHandlers: {\n \"^/v1/models$\": models7({ together }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions6({ together })\n }\n});\n\n// src/adapters/client/googleClientAdapter/models/get.ts\nvar models8 = [\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.5-pro-preview-03-25\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-lite\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-pro\"\n];\nvar get7 = ({\n google\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models8.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/googleClientAdapter/models/index.ts\nvar models9 = ({\n google\n}) => ({\n get: get7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/completions/post.ts\nvar import_cuid2 = require(\"@paralleldrive/cuid2\");\nvar post7 = ({\n google\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const resultOptions = {\n ...body,\n messages: nonEmptyMessages({\n messages: body.messages\n })\n };\n if (body.stream) {\n const response = await google.chat.completions.create(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n let resultChunk;\n if (chunk.choices) {\n const newChoices = chunk.choices.map((choice) => {\n if (choice.delta?.tool_calls) {\n return {\n ...choice,\n delta: {\n ...choice.delta,\n tool_calls: choice.delta.tool_calls.map((toolCall) => {\n if (toolCall.id === \"\") {\n return {\n ...toolCall,\n id: `call_${(0, import_cuid2.createId)()}`\n };\n }\n return toolCall;\n })\n }\n };\n } else {\n return choice;\n }\n });\n resultChunk = {\n ...chunk,\n choices: newChoices\n };\n } else {\n resultChunk = chunk;\n }\n controller.enqueue(`data: ${JSON.stringify(resultChunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await google.chat.completions.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/googleClientAdapter/completions/index.ts\nvar completions7 = ({\n google\n}) => ({\n post: post7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/index.ts\nvar googleClientAdapter = ({\n google\n}) => ({\n client: google,\n requestHandlers: {\n \"^/v1/models$\": models9({ google }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions7({ google })\n }\n});\n\n// src/adapters/client/humirisClientAdapter/models/get.ts\nvar models10 = [\n \"Humiris/humiris-moai\"\n];\nvar get8 = ({\n humiris\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models10.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/humirisClientAdapter/models/index.ts\nvar models11 = ({\n humiris\n}) => ({\n get: get8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/completions/post.ts\nvar post8 = ({\n humiris\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const data = await humiris.chat.completions.create({\n ...body,\n stream: false\n });\n const stream = new ReadableStream({\n async start(controller) {\n const chunk = {\n id: data.id,\n object: \"chat.completion.chunk\",\n created: data.created,\n model: data.created,\n choices: [\n {\n index: 0,\n delta: {\n role: data.choices[0].message.role,\n content: data.choices[0].message.content\n },\n logprobs: null,\n finish_reason: data.choices[0].finish_reason\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await humiris.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/humirisClientAdapter/completions/index.ts\nvar completions8 = ({\n humiris\n}) => ({\n post: post8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/index.ts\nvar humirisClientAdapter = ({\n humiris\n}) => ({\n client: humiris,\n requestHandlers: {\n \"^/v1/models$\": models11({ humiris }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions8({ humiris })\n }\n});\n\n// src/adapters/client/ollamaClientAdapter/models/get.ts\nvar get9 = ({\n ollama\n}) => async (_url, _options) => {\n try {\n const data = await ollama.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/models/index.ts\nvar models12 = ({\n ollama\n}) => ({\n get: get9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/completions/post.ts\nvar post9 = ({\n ollama\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await ollama.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await ollama.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/completions/index.ts\nvar completions9 = ({\n ollama\n}) => ({\n post: post9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/index.ts\nvar ollamaClientAdapter = ({\n ollama\n}) => ({\n client: ollama,\n requestHandlers: {\n \"^/v1/models$\": models12({ ollama }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions9({ ollama })\n }\n});\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar import_lodash = __toESM(require(\"lodash\"), 1);\nvar import_radash5 = require(\"radash\");\nvar import_dayjs = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar import_radash4 = require(\"radash\");\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\nvar serializeToolCall = ({\n toolCall\n}) => ({\n tool_call_id: toolCall.id,\n role: \"tool\",\n name: toolCall.function.name,\n content: toolCall.function.output ?? \"\"\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 run2 = message.run;\n if (!run2) return result;\n const messageToolCalls = message.metadata?.toolCalls || [];\n messageToolCalls.forEach((tc) => {\n const runStep = run2.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: run2,\n getMessages: getMessages2\n}) => [\n ...run2.instructions ? [{\n role: \"system\",\n content: run2.instructions\n }] : [],\n ...(0, import_radash4.flat)((await getMessages2()).map((message) => serializeMessage3({ message })))\n];\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) return (0, import_radash5.omit)(delta, [\"index\"]);\n const result = import_lodash.default.cloneDeep(toolCall);\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? \"\"}${value}`;\n }\n return result;\n};\nvar toolCallsData = ({\n prevToolCalls,\n delta\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: (0, import_radash5.uid)(24),\n type: \"function\",\n ...(0, import_radash5.omit)(tc, [\"index\"])\n }));\n }\n const newToolCalls = import_lodash.default.cloneDeep(prevToolCalls);\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta\n });\n }\n return newToolCalls;\n};\nvar completionsRunAdapter = () => async ({\n client: clientAdapter,\n run: run2,\n onEvent: onEvent2,\n getMessages: getMessages2\n}) => {\n if (run2.status !== \"queued\") 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 ...(0, import_radash5.isEmpty)(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: (0, import_dayjs.default)().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n let message = await onEvent2({\n event: \"thread.message.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.message\",\n completed_at: null,\n run_id: run2.id,\n created_at: (0, import_dayjs.default)().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: (0, import_dayjs.default)().unix(),\n created_at: (0, import_dayjs.default)().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"message_creation\",\n message_creation: {\n message_id: message.id\n }\n }\n }\n });\n let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls;\n for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? [];\n const choice = choices[0];\n if (!choice) continue;\n const delta = choice.delta;\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? \"\"}`;\n }\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: 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: (0, import_dayjs.default)().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"tool_calls\",\n tool_calls: []\n }\n }\n });\n }\n onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: 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: (0, import_radash5.uid)(24),\n type: \"function\",\n ...tc\n }))\n }\n }\n }\n });\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\n }\n if (delta.content) {\n onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: \"text\",\n index: 0,\n text: {\n value: delta.content\n }\n }\n ]\n }\n }\n });\n }\n }\n message = await onEvent2({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [{ text: { value: currentContent, annotations: [] }, type: \"text\" }],\n tool_calls: currentToolCalls\n }\n });\n if ((0, import_radash5.isEmpty)(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run2,\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...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\nvar import_dayjs3 = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nvar import_dayjs2 = __toESM(require(\"dayjs\"), 1);\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: (0, import_dayjs2.default)(thread.createdAt).unix(),\n metadata: thread.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar post10 = ({\n prisma\n}) => async (...args) => {\n const body = JSON.parse(args[1].body);\n const messages3 = body.messages || [];\n const metadata = body.metadata || {};\n const initialCreatedAt = (0, import_dayjs3.default)().subtract(messages3.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: 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: (0, import_dayjs3.default)(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\nvar import_radash7 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nvar import_dayjs4 = __toESM(require(\"dayjs\"), 1);\nvar import_radash6 = require(\"radash\");\nvar serializeMessage4 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: (0, import_dayjs4.default)(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? (0, import_dayjs4.default)(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? (0, import_dayjs4.default)(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails,\n role: message.role.toLowerCase(),\n content: message.content,\n assistant_id: message.assistantId,\n run_id: message.runId,\n attachments: message.attachments,\n status: message.status.toLowerCase(),\n metadata: (0, import_radash6.assign)(message.metadata ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {})\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({\n content\n}) => {\n if ((0, import_radash7.isArray)(content)) {\n return content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: {\n value: item.text ?? \"\",\n annotations: []\n }\n };\n }\n return item;\n });\n }\n return [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: []\n }\n }\n ];\n};\nvar post11 = ({\n prisma\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const body = JSON.parse(options.body);\n const { role, content, metadata } = body;\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === \"user\" ? \"USER\" : \"ASSISTANT\",\n metadata: metadata || {}\n }\n });\n return new Response(JSON.stringify(\n serializeMessage4({ message })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nvar import_radash8 = require(\"radash\");\nvar get10 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash8.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 },\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: (0, import_radash8.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 = ({\n prisma\n}) => ({\n post: post11({ prisma }),\n get: get10({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar import_radash9 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nvar import_dayjs5 = __toESM(require(\"dayjs\"), 1);\nvar serializeRun = ({\n run: run2\n}) => ({\n id: run2.id,\n object: \"thread.run\",\n created_at: (0, import_dayjs5.default)(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: (0, import_dayjs5.default)(run2.expiresAt).unix(),\n started_at: run2.startedAt ? (0, import_dayjs5.default)(run2.startedAt).unix() : null,\n cancelled_at: run2.cancelledAt ? (0, import_dayjs5.default)(run2.cancelledAt).unix() : null,\n failed_at: run2.failedAt ? (0, import_dayjs5.default)(run2.failedAt).unix() : null,\n completed_at: run2.completedAt ? (0, import_dayjs5.default)(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 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash9.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 },\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\nvar import_dayjs7 = __toESM(require(\"dayjs\"), 1);\nvar import_radash10 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"IN_PROGRESS\" /* IN_PROGRESS */\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"FAILED\" /* FAILED */,\n failedAt: event.data.failed_at,\n 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\nvar import_dayjs6 = __toESM(require(\"dayjs\"), 1);\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs6.default)(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase(),\n status: runStep.status.toLowerCase(),\n // @ts-ignore-next-line\n step_details: runStep.stepDetails,\n last_error: runStep.lastError,\n expired_at: runStep.expiredAt ? (0, import_dayjs6.default)(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? (0, import_dayjs6.default)(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? (0, import_dayjs6.default)(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? (0, import_dayjs6.default)(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts\nvar type = (event) => {\n if (event.data.type === \"message_creation\") return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\") return \"TOOL_CALLS\" /* TOOL_CALLS */;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nvar status = (event) => {\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\") return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\") return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\") return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at\n }\n });\n const serializedRunStep = serializeRunStep({ runStep });\n controller.enqueue({\n ...event,\n data: serializedRunStep\n });\n return serializedRunStep;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts\nvar threadRunStepDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\") return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content,\n role: event.data.role === \"assistant\" ? \"ASSISTANT\" : \"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: run2\n}) => {\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 = ({\n prisma,\n run: run2\n}) => 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 = ({\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 } = (0, import_radash10.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 run2 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: (0, import_dayjs7.default)().add(1, \"hour\").unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId\n }\n },\n assistant: {\n connect: {\n id: assistant_id\n }\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format\n }\n });\n const data = serializeRun({ run: 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: (0, import_dayjs7.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/index.ts\nvar runs = ({\n prisma,\n runAdapter\n}) => ({\n get: get11({ prisma }),\n post: post12({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get12 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const run2 = await prisma.run.findUnique({\n where: {\n id: runId,\n threadId\n }\n });\n return new Response(JSON.stringify(\n serializeRun({ run: run2 })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n \"openai-poll-after-ms\": \"5000\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/index.ts\nvar run = ({\n prisma,\n runAdapter\n}) => ({\n get: get12({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nvar import_radash11 = require(\"radash\");\nvar get13 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash11.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\n const runStepsPlusOne = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runSteps = runStepsPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n has_more: runStepsPlusOne.length > pageSize,\n last_id: runSteps.at(-1)?.id ?? null\n }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts\nvar steps = ({\n prisma\n}) => ({\n get: get13({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nvar import_dayjs8 = __toESM(require(\"dayjs\"), 1);\nvar updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {\n },\n tool_outputs\n}) => prisma.$transaction(async (prisma2) => {\n const runSteps = await prisma2.runStep.findMany({\n where: {\n threadId,\n runId,\n type: \"TOOL_CALLS\",\n status: \"IN_PROGRESS\"\n },\n orderBy: {\n createdAt: \"asc\"\n }\n });\n for (const runStep of runSteps) {\n const completedRunStep = await prisma2.runStep.update({\n where: {\n id: runStep.id\n },\n data: {\n status: \"COMPLETED\",\n completedAt: (0, import_dayjs8.default)().unix(),\n stepDetails: {\n type: \"tool_calls\",\n // @ts-ignore-next-line\n tool_calls: runStep.stepDetails.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0];\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null });\n throw new Error(\"Tool output not found\");\n }\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output\n }\n };\n })\n }\n }\n });\n onThreadRunStepCompleted({\n runStep: completedRunStep\n });\n }\n return prisma2.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n});\n\n// 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 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(\n run2\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/index.ts\nvar prismaStorageAdapter = ({\n prisma\n}) => ({\n runAdapter\n}) => ({\n requestHandlers: {\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// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n anthropicClientAdapter,\n azureOpenaiClientAdapter,\n completionsRunAdapter,\n googleClientAdapter,\n groqClientAdapter,\n humirisClientAdapter,\n mistralClientAdapter,\n ollamaClientAdapter,\n openaiClientAdapter,\n perplexityClientAdapter,\n prismaStorageAdapter,\n supercompat,\n togetherClientAdapter\n});\n","export { supercompat } from './supercompat'\nexport { groqClientAdapter } from './adapters/client/groqClientAdapter'\nexport { openaiClientAdapter } from './adapters/client/openaiClientAdapter'\nexport { azureOpenaiClientAdapter } from './adapters/client/azureOpenaiClientAdapter'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { anthropicClientAdapter } from './adapters/client/anthropicClientAdapter'\nexport { togetherClientAdapter } from './adapters/client/togetherClientAdapter'\nexport { googleClientAdapter } from './adapters/client/googleClientAdapter'\nexport { humirisClientAdapter } from './adapters/client/humirisClientAdapter'\nexport { ollamaClientAdapter } from './adapters/client/ollamaClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\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 = ({\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 headers = {\n ...options.headers,\n authorization: client.client.defaultHeaders().Authorization,\n }\n\n return client.client.fetch(url, {\n ...options,\n headers,\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'\n\nexport type Args = {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}\n\nexport const supercompatFetch = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n const requestHandlers = getRequestHandlers({\n client,\n storage,\n runAdapter,\n })\n\n return async (...args: any[]) => {\n const [url, options] = args\n\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\n })\n\n if (!pathHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n const method = options?.method ?? ''\n\n const requestHandler = pathHandler[method.toLowerCase()]\n\n if (!requestHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n return requestHandler(...args)\n }\n}\n","export const endpointFromBaseUrl = ({\n baseURL\n}: {\n baseURL: string\n}) => (\n baseURL.replace(/\\/+openai$/, '')\n)\n","import type Groq from 'groq-sdk'\n\nexport const get = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, _options: any) => {\n try {\n const data = await groq.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type Groq from 'groq-sdk'\nimport { get } from './get'\n\nexport const models = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n get: get({ groq }),\n})\n","import type Groq from 'groq-sdk'\n\nexport const post = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await groq.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await groq.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type Groq from 'groq-sdk'\nimport { post } from './post'\n\nexport const completions = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n post: post({ groq }),\n})\n","// import type Groq from 'groq-sdk'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const groqClientAdapter = ({\n groq,\n}: {\n // TODO\n groq: any\n}) => ({\n client: groq,\n requestHandlers: {\n '^/v1/models$': models({ groq }),\n '^/v1/chat/completions$': completions({ groq }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await openai.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n get: get({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { systemDeveloperMessages } from '@/lib/messages/systemDeveloperMessages'\nimport { isOModel } from '@/lib/models/isOModel'\n\nconst omitKeys = ({\n model,\n}: {\n model: string\n}) => {\n if (isOModel({ model })) {\n return ['tools']\n }\n\n return []\n}\n\nexport const post = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const messages = body.messages as OpenAI.ChatCompletionMessageParam[]\n\n const resultOptions = {\n ...omit(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages,\n model: body.model,\n }),\n } as OpenAI.Chat.ChatCompletionCreateParams\n\n if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await openai.chat.completions.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","export const isOModel = ({ model }: { model: string }) => (\n model.startsWith('o1') || model.startsWith('o3')\n)\n","import type OpenAI from 'openai'\nimport { isOModel } from '@/lib/models/isOModel'\n\nexport const systemDeveloperMessages = ({\n messages,\n model,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n model: string\n}): OpenAI.Chat.ChatCompletionMessageParam[] => {\n if (isOModel({ model })) {\n return messages.map((message) => {\n if (message.role === 'system') {\n return {\n ...message,\n // TODO: This should be 'developer' but we're using 'user' for now\n // role: 'developer',\n role: 'user',\n }\n }\n\n return message\n })\n }\n\n return messages\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const openaiClientAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n client: openai,\n requestHandlers: {\n '^/v1/models$': models({ openai }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ openai }),\n },\n})\n","import type { AzureOpenAI } from 'openai'\nimport { completions } from '@/adapters/client/openaiClientAdapter/completions'\n\nexport const azureOpenaiClientAdapter = ({\n azureOpenai,\n}: {\n azureOpenai: AzureOpenAI\n}) => ({\n type: 'AZURE_OPENAI',\n client: azureOpenai,\n requestHandlers: {\n '^/(?:v1|/?openai)/chat/completions$': completions({\n openai: azureOpenai,\n }),\n },\n})\n","import type { Mistral } from '@mistralai/mistralai'\n\nexport const get = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, _options: any) => {\n try {\n const data = await mistral.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { get } from './get'\n\nexport const models = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n get: get({ mistral }),\n})\n","const serializeDelta = ({\n delta: {\n toolCalls,\n ...rest\n },\n}: {\n delta: any\n}) => ({\n ...rest,\n ...(toolCalls ? {\n tool_calls: toolCalls,\n } : {}),\n})\n\nconst serializeChoice = ({\n choice: {\n finishReason,\n delta,\n ...rest\n },\n}: {\n choice: any\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta }),\n})\n\nexport const serializeChunk = ({\n chunk,\n}: {\n chunk: any\n}) => ({\n ...chunk.data,\n ...(chunk.data.choices ? {\n choices: chunk.data.choices.map((choice: any) => (\n serializeChoice({ choice })\n )),\n }: {}),\n})\n","import type OpenAI from 'openai'\n\nconst serializeMessage = ({\n message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n },\n}: {\n message: OpenAI.ChatCompletionMessageParam\n}) => ({\n ...rest,\n ...(tool_call_id ? {\n toolCallId: tool_call_id,\n } : {}),\n ...(tool_calls ? {\n toolCalls: tool_calls,\n } : {}),\n})\n\nexport const serializeBody = ({\n body,\n}: {\n body: any\n}) => ({\n ...body,\n messages: body.messages.map((message: OpenAI.ChatCompletionMessageParam) => (\n serializeMessage({\n message,\n })\n )),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { serializeChunk } from './serializeChunk'\nimport { serializeBody } from './serializeBody'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const serializedBody = serializeBody({\n body,\n })\n\n if (body.stream) {\n const response = await mistral.chat.stream(serializedBody)\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n const serializedChunk = serializeChunk({\n chunk,\n })\n\n controller.enqueue(`data: ${JSON.stringify(serializedChunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await mistral.chat.complete(serializedBody)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { post } from './post'\n\nexport const completions = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n post: post({ mistral }),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n '^/v1/models$': models({ mistral }),\n '^/v1/chat/completions$': completions({ mistral }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'sonar-reasoning-pro',\n 'sonar-reasoning',\n 'sonar-pro',\n 'sonar',\n 'r1-1776',\n 'llama-3.1-sonar-small-128k-online',\n 'llama-3.1-sonar-large-128k-online',\n 'llama-3.1-sonar-huge-128k-online',\n]\n\nexport const get = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n get: get({ perplexity }),\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const alternatingMessages = ({\n messages,\n}: {\n messages: OpenAI.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'\n\nconst serializeToolCall = ({\n toolCall,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\n}) => ({\n tool_call_id: toolCall.id,\n role: 'tool' as 'tool',\n name: toolCall.function.name,\n content: toolCall.function.output ?? '',\n})\n\nconst serializeMessageWithContent = ({\n message,\n}: {\n message: MessageWithRun\n}) => ({\n role: message.role,\n content: serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n }),\n ...(message?.metadata?.toolCalls ? { tool_calls: message.metadata.toolCalls } : {}),\n})\n\nconst serializeContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock[]\n}) => content.map((content) => content.text.value).join('\\n')\n\nexport const serializeMessage = ({\n message\n}: {\n message: MessageWithRun\n}) => {\n const result = [serializeMessageWithContent({ message })]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = message.metadata?.toolCalls || []\n\n messageToolCalls.forEach((tc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n const runStep = run.runSteps.find((rs) => {\n if (rs.type !== 'tool_calls') return false\n\n return rs.step_details.tool_calls.some((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n })\n\n if (!runStep) return\n\n const toolCall = runStep.step_details.tool_calls.find((rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n })\n\n result.push(serializeToolCall({ toolCall }))\n })\n\n return result\n}\n","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['create']>\n}\n\nexport const post = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => async (...args: Parameters<OpenAI.Beta.Threads['create']>): Promise<ThreadCreateResponse> => {\n // @ts-ignore-next-line\n const body = JSON.parse(args[1].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'\n\nexport const threads = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\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<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\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: any): 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'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\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'\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<ReturnType<OpenAI.Beta.Threads.Runs['create']>>\n}\n\nexport const post = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => async (urlString: string, options: any): 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'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\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'\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'\n\nexport const run = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\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'\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'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\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'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n post: post({\n prisma,\n // @ts-ignore-next-line\n runAdapter,\n }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } 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'\n\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n runAdapter,\n}: StorageAdapterArgs) => ({\n requestHandlers: {\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"]}
|
|
1
|
+
{"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.cjs","../src/index.ts","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/models/get.ts","../src/adapters/client/groqClientAdapter/models/index.ts","../src/adapters/client/groqClientAdapter/completions/post.ts","../src/adapters/client/groqClientAdapter/completions/index.ts","../src/adapters/client/groqClientAdapter/index.ts","../src/adapters/client/openaiClientAdapter/models/get.ts","../src/adapters/client/openaiClientAdapter/models/index.ts","../src/adapters/client/openaiClientAdapter/completions/post.ts","../src/lib/models/isOModel.ts","../src/lib/messages/systemDeveloperMessages.ts","../src/adapters/client/openaiClientAdapter/completions/index.ts","../src/adapters/client/openaiClientAdapter/index.ts","../src/adapters/client/azureOpenaiClientAdapter/index.ts","../src/adapters/client/mistralClientAdapter/models/get.ts","../src/adapters/client/mistralClientAdapter/models/index.ts","../src/adapters/client/mistralClientAdapter/completions/serializeChunk.ts","../src/adapters/client/mistralClientAdapter/completions/serializeBody.ts","../src/adapters/client/mistralClientAdapter/completions/post.ts","../src/adapters/client/mistralClientAdapter/completions/index.ts","../src/adapters/client/mistralClientAdapter/index.ts","../src/adapters/client/perplexityClientAdapter/models/get.ts","../src/adapters/client/perplexityClientAdapter/models/index.ts","../src/lib/messages/alternatingMessages.ts","../src/adapters/client/perplexityClientAdapter/completions/post.ts","../src/adapters/client/perplexityClientAdapter/completions/index.ts","../src/adapters/client/perplexityClientAdapter/index.ts","../src/adapters/client/anthropicClientAdapter/models/get.ts","../src/adapters/client/anthropicClientAdapter/models/index.ts","../src/adapters/client/anthropicClientAdapter/completions/post.ts","../src/lib/messages/nonEmptyMessages.ts","../src/lib/messages/firstUserMessages.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeTools.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/serializeMessage.ts","../src/adapters/client/anthropicClientAdapter/completions/serializeMessages/index.ts","../src/adapters/client/anthropicClientAdapter/completions/index.ts","../src/adapters/client/anthropicClientAdapter/index.ts","../src/adapters/client/togetherClientAdapter/models/get.ts","../src/adapters/client/togetherClientAdapter/models/index.ts","../src/adapters/client/togetherClientAdapter/completions/post.ts","../src/adapters/client/togetherClientAdapter/completions/index.ts","../src/adapters/client/togetherClientAdapter/index.ts","../src/adapters/client/googleClientAdapter/models/get.ts","../src/adapters/client/googleClientAdapter/models/index.ts","../src/adapters/client/googleClientAdapter/completions/post.ts","../src/adapters/client/googleClientAdapter/completions/index.ts","../src/adapters/client/googleClientAdapter/index.ts","../src/adapters/client/humirisClientAdapter/models/get.ts","../src/adapters/client/humirisClientAdapter/models/index.ts","../src/adapters/client/humirisClientAdapter/completions/post.ts","../src/adapters/client/humirisClientAdapter/completions/index.ts","../src/adapters/client/humirisClientAdapter/index.ts","../src/adapters/client/ollamaClientAdapter/models/get.ts","../src/adapters/client/ollamaClientAdapter/models/index.ts","../src/adapters/client/ollamaClientAdapter/completions/post.ts","../src/adapters/client/ollamaClientAdapter/completions/index.ts","../src/adapters/client/ollamaClientAdapter/index.ts","../src/adapters/run/completionsRunAdapter/index.ts","../src/adapters/run/completionsRunAdapter/messages/index.ts","../src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts","../src/adapters/run/responsesRunAdapter/index.ts","../src/adapters/run/responsesRunAdapter/messages/index.ts","../src/adapters/run/responsesRunAdapter/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/openaiResponsesStorageAdapter/threads/post.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/messages/post.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/messages/list.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/messages/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/post.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/get.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/run/get.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/run/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/submitToolOutputs/post/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/submitToolOutputs/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/steps/get.ts","../src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/steps/index.ts","../src/adapters/storage/openaiResponsesStorageAdapter/index.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/getThread.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"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","anthropicClientAdapter","azureOpenaiClientAdapter","completionsRunAdapter","googleClientAdapter","groqClientAdapter","humirisClientAdapter","mistralClientAdapter","ollamaClientAdapter","openaiClientAdapter","openaiResponsesStorageAdapter","perplexityClientAdapter","prismaStorageAdapter","responsesRunAdapter","supercompat","togetherClientAdapter","module","exports","import_openai","require","import_radash","storageRequestHandlers","storage","runAdapter","client","result","partob","requestHandlers","assign","findRequestHandler","url","pathname","URL","regex","RegExp","test","toRecord","init","Headers","fromEntries","entries","keys","reduce","acc","toLowerCase","getClientHeaders","authHeaders","defaultHeaders","normalize","headersInit","values","originalFetch","args","options","requestHeaders","clientHeaders","headers","fetch","supercompatFetch","input","pathHandler","method","requestHandler","toString","endpointFromBaseUrl","baseURL","replace","type","AzureOpenAI","apiKey","apiVersion","endpoint","OpenAI","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","ReadableStream","start","controller","chunk","enqueue","close","openai","isOModel","model","startsWith","systemDeveloperMessages","messages","map","message","role","omitKeys","resultOptions","import_radash2","omit","azureOpenai","mistral","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","serializeMessage","tool_call_id","toolCallId","serializeBody","serializedBody","serializedChunk","complete","perplexity","id","object","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","content","includes","anthropic","nonEmptyContent","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","function","description","input_schema","parameters","text","toolCall","arguments","tool_use_id","serializeMessages","systemMessages","otherMessages","system","chatMessages","serializedMessages","baseOptions","import_radash3","fork","join","max_tokens","messageDelta","partial_json","uid","content_block","together","google","import_cuid2","resultChunk","newChoices","createId","humiris","created","logprobs","ollama","import_lodash","import_dayjs","validToolCallContentTypes","serializeToolContent","import_radash4","isArray","output","isEveryToolPartValid","every","toolPart","isObject","serializeToolCall","serializeMessageWithContent","serializeContent","metadata","run","messageToolCalls","Array","tc","runStep","runSteps","find","rs","step_details","some","rsTc","getMessages","instructions","import_radash5","flat","updatedToolCall","import_radash6","_","cloneDeep","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","clientAdapter","onEvent","getThread","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","response_format","isEmpty","console","failed_at","dayjs","unix","last_error","code","cause","completed_at","run_id","created_at","assistant_id","incomplete_at","incomplete_details","attachments","thread_id","annotations","expired_at","cancelled_at","usage","message_creation","message_id","required_action","submit_tool_outputs","toolMessage","call_id","length","contentBlocks","c","import_radash7","thread","openaiConversationId","mappedTools","msg","toolCallsByItemId","newConversationId","t","import_radash8","responses","conversation","trim","import_dayjs2","convId","callId","newToolCall","conversation_id","item","item_id","findIndex","final","catch","messagesRegexp","runsRegexp","runRegexp","submitToolOutputsRegexp","stepsRegexp","_urlString","oai","conversations","import_dayjs3","tool_resources","threads","urlString","threadId","match","items","Date","now","import_dayjs4","filter","import_dayjs5","has_more","assistant","saveRun","readableStream","retrieve","import_dayjs6","beta","assistants","import_radash9","step","calls","conv","s","existingIndex","existing","storedRun","storedSteps","update","runs","runId","runStr","toolsStr","raStr","tool_outputs","import_dayjs7","submitToolOutputs","page","stepsStr","allSteps","limit","order","after","pageSize","steps","idx","import_radash10","searchParams","parseInt","sort","a","b","slice","last_id","at","serializeThread","import_dayjs8","createdAt","prisma","initialCreatedAt","import_dayjs9","subtract","format","assistantId","connect","add","toDate","import_dayjs10","completedAt","incompleteAt","incompleteDetails","import_radash11","messageContentBlocks","import_radash12","messagesPlusOne","import_radash13","findMany","where","take","orderBy","skip","cursor","last","serializeRun","import_dayjs11","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","parallel_tool_calls","runsPlusOne","import_radash14","threadRunInProgress","threadRunFailed","runRecord","threadRunCompleted","threadRunRequiresAction","serializeRunStep","import_dayjs12","stepDetails","expiredAt","Error","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","truncationStrategy","last_messages","include","findUnique","import_radash15","additional_instructions","import_dayjs13","responseFormat","runStepsPlusOne","import_radash16","updateRun","onThreadRunStepCompleted","$transaction","completedRunStep","import_dayjs14","toolOutput","dir","depth","Promise","resolve","import_dayjs15"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n anthropicClientAdapter: () => anthropicClientAdapter,\n azureOpenaiClientAdapter: () => azureOpenaiClientAdapter,\n completionsRunAdapter: () => completionsRunAdapter,\n googleClientAdapter: () => googleClientAdapter,\n groqClientAdapter: () => groqClientAdapter,\n humirisClientAdapter: () => humirisClientAdapter,\n mistralClientAdapter: () => mistralClientAdapter,\n ollamaClientAdapter: () => ollamaClientAdapter,\n openaiClientAdapter: () => openaiClientAdapter,\n openaiResponsesStorageAdapter: () => openaiResponsesStorageAdapter,\n perplexityClientAdapter: () => perplexityClientAdapter,\n prismaStorageAdapter: () => prismaStorageAdapter,\n responsesRunAdapter: () => responsesRunAdapter,\n supercompat: () => supercompat,\n togetherClientAdapter: () => togetherClientAdapter\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/supercompat.ts\nvar import_openai = __toESM(require(\"openai\"), 1);\n\n// src/supercompatFetch/requestHandlers.ts\nvar import_radash = require(\"radash\");\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const result = storage({ runAdapter: (0, import_radash.partob)(runAdapter, { client }) });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => (0, import_radash.assign)(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client\n })\n);\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({\n url,\n requestHandlers: requestHandlers2\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers2) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers2[key];\n }\n }\n};\n\n// src/supercompatFetch/originalFetch.ts\nvar toRecord = (init = {}) => {\n if (init instanceof Headers) return Object.fromEntries(init.entries());\n return Object.keys(init).reduce(\n (acc, key) => ({\n ...acc,\n [key.toLowerCase()]: init[key]\n }),\n {}\n );\n};\nvar getClientHeaders = async (client) => {\n if (typeof client.client.authHeaders === \"function\") {\n return client.client.authHeaders();\n }\n if (typeof client.client.defaultHeaders === \"function\") {\n return client.client.defaultHeaders();\n }\n return {};\n};\nvar normalize = (headersInit) => {\n if (!headersInit) return {};\n if (headersInit instanceof Headers) {\n return Object.fromEntries(headersInit.entries());\n }\n if (headersInit?.values instanceof Headers) {\n return Object.fromEntries(headersInit.values.entries());\n }\n return Object.fromEntries(new Headers(headersInit).entries());\n};\nvar originalFetch = async ({\n args,\n client\n}) => {\n if (!client.client?.fetch) {\n return fetch(...args);\n }\n const [url, options] = args;\n const requestHeaders = toRecord(options?.headers);\n const clientHeaders = normalize(await getClientHeaders(client));\n const headers = { ...requestHeaders, ...clientHeaders };\n return client.client.fetch(url, {\n ...options,\n headers\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 [input, options] = args;\n const url = typeof input === \"string\" ? input : input.toString();\n const pathHandler = findRequestHandler({\n url,\n requestHandlers: requestHandlers2\n });\n if (!pathHandler) {\n return originalFetch({\n client,\n args\n });\n }\n const method = options?.method ?? \"\";\n const requestHandler = pathHandler[method.toLowerCase()];\n if (!requestHandler) {\n return originalFetch({\n client,\n args\n });\n }\n return requestHandler(...args);\n };\n};\n\n// src/lib/azureOpenai/endpointFromBaseUrl.ts\nvar endpointFromBaseUrl = ({\n baseURL\n}) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({\n client,\n storage,\n runAdapter\n}) => {\n if (client.type === \"AZURE_OPENAI\") {\n return new import_openai.AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n }\n return new import_openai.default({\n apiKey: \"SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY\",\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n};\n\n// src/adapters/client/groqClientAdapter/models/get.ts\nvar get = ({\n groq\n}) => async (_url, _options) => {\n try {\n const data = await groq.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/groqClientAdapter/models/index.ts\nvar models = ({\n groq\n}) => ({\n get: get({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/completions/post.ts\nvar post = ({\n groq\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await groq.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await groq.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/groqClientAdapter/completions/index.ts\nvar completions = ({\n groq\n}) => ({\n post: post({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/index.ts\nvar groqClientAdapter = ({\n groq\n}) => ({\n client: groq,\n requestHandlers: {\n \"^/v1/models$\": models({ groq }),\n \"^/v1/chat/completions$\": completions({ groq })\n }\n});\n\n// src/adapters/client/openaiClientAdapter/models/get.ts\nvar get2 = ({\n openai\n}) => async (_url, _options) => {\n try {\n const data = await openai.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/openaiClientAdapter/models/index.ts\nvar models2 = ({\n openai\n}) => ({\n get: get2({ openai })\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar import_radash2 = require(\"radash\");\n\n// src/lib/models/isOModel.ts\nvar isOModel = ({ model }) => model.startsWith(\"o1\") || model.startsWith(\"o3\");\n\n// src/lib/messages/systemDeveloperMessages.ts\nvar systemDeveloperMessages = ({\n messages: messages5,\n model\n}) => {\n if (isOModel({ model })) {\n return messages5.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 messages5;\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 messages5 = body.messages;\n const resultOptions = {\n ...(0, import_radash2.omit)(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages: messages5,\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: messages5\n}) => {\n const result = [];\n messages5.forEach((message, index) => {\n result.push(message);\n const nextMessage = messages5[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 messages5 = alternatingMessages({\n messages: body.messages\n });\n if (body.stream) {\n const response = await perplexity.chat.completions.create({\n ...body,\n messages: messages5\n });\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await perplexity.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/perplexityClientAdapter/completions/index.ts\nvar completions4 = ({\n perplexity\n}) => ({\n post: post4({ perplexity })\n});\n\n// src/adapters/client/perplexityClientAdapter/index.ts\nvar perplexityClientAdapter = ({\n perplexity\n}) => ({\n client: perplexity,\n requestHandlers: {\n \"^/v1/models$\": models5({ perplexity }),\n \"^/v1/chat/completions$\": completions4({ perplexity })\n }\n});\n\n// src/adapters/client/anthropicClientAdapter/models/get.ts\nvar get5 = ({\n anthropic\n}) => async (_url, _options) => {\n try {\n const response = await anthropic.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n data: response.data.map((model) => ({\n id: model.id,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/models/index.ts\nvar models6 = ({\n anthropic\n}) => ({\n get: get5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nvar import_radash3 = require(\"radash\");\n\n// src/lib/messages/nonEmptyMessages.ts\nvar nonEmptyContent = ({\n message\n}) => {\n if (typeof message.content === \"string\") {\n if (!/\\S/.test(message.content)) {\n return \"-\";\n }\n }\n return message.content;\n};\nvar nonEmptyMessages = ({\n messages: messages5\n}) => {\n const result = [];\n messages5.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: messages5\n}) => {\n const firstMessage = messages5[0];\n if (!firstMessage) return messages5;\n if (firstMessage.role !== \"user\") {\n return [\n {\n role: \"user\",\n content: \"-\"\n },\n ...messages5\n ];\n }\n return messages5;\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: \"function\" in toolCall ? toolCall.function.name : \"\",\n input: \"function\" in toolCall && 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: messages5\n}) => messages5.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 messages5 = body.messages;\n const [systemMessages, otherMessages] = (0, import_radash3.fork)(\n messages5,\n (message) => message.role === \"system\"\n );\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 serializedMessages = serializeMessages({\n messages: chatMessages\n });\n const baseOptions = {\n ...(0, import_radash3.omit)(body, [\"response_format\", \"stream\"]),\n system,\n messages: serializedMessages,\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools\n })\n };\n if (body.stream) {\n const response = await anthropic.messages.stream(\n baseOptions\n );\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === \"content_block_delta\") {\n let delta;\n if (chunk.delta.type === \"input_json_delta\") {\n delta = {\n tool_calls: [\n {\n index: 0,\n function: { arguments: chunk.delta.partial_json }\n }\n ]\n };\n } else if (chunk.delta.type === \"text_delta\") {\n delta = { content: chunk.delta.text };\n } else {\n continue;\n }\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n let delta;\n if (chunk.content_block.type === \"tool_use\") {\n delta = {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: \"function\",\n function: {\n name: chunk.content_block.name,\n arguments: \"\"\n }\n }\n ]\n };\n } else if (chunk.content_block.type === \"text\") {\n delta = { content: chunk.content_block.text };\n } else {\n continue;\n }\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"message_start\") {\n const messageDelta = {\n id: `chatcmpl-${(0, import_radash3.uid)(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: 0,\n delta: {\n content: \"\"\n }\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n }\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n }\n try {\n const data = await anthropic.messages.create({\n ...baseOptions,\n stream: false\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(\n JSON.stringify({\n error\n }),\n {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }\n );\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/index.ts\nvar completions5 = ({\n anthropic\n}) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({\n anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n \"^/v1/models$\": models6({ anthropic }),\n \"^/v1/chat/completions$\": completions5({ anthropic })\n }\n});\n\n// src/adapters/client/togetherClientAdapter/models/get.ts\nvar get6 = ({\n together\n}) => async (_url, _options) => {\n try {\n const data = await together.models.list();\n return new Response(JSON.stringify({\n type: \"list\",\n // @ts-ignore-next-line\n data: data.body\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/togetherClientAdapter/models/index.ts\nvar models7 = ({\n together\n}) => ({\n get: get6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/completions/post.ts\nvar post6 = ({\n together\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await together.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await together.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/togetherClientAdapter/completions/index.ts\nvar completions6 = ({\n together\n}) => ({\n post: post6({ together })\n});\n\n// src/adapters/client/togetherClientAdapter/index.ts\nvar togetherClientAdapter = ({\n together\n}) => ({\n client: together,\n requestHandlers: {\n \"^/v1/models$\": models7({ together }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions6({ together })\n }\n});\n\n// src/adapters/client/googleClientAdapter/models/get.ts\nvar models8 = [\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.5-pro-preview-03-25\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-lite\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-pro\"\n];\nvar get7 = ({\n google\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models8.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/googleClientAdapter/models/index.ts\nvar models9 = ({\n google\n}) => ({\n get: get7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/completions/post.ts\nvar import_cuid2 = require(\"@paralleldrive/cuid2\");\nvar post7 = ({\n google\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n const resultOptions = {\n ...body,\n messages: nonEmptyMessages({\n messages: body.messages\n })\n };\n if (body.stream) {\n const response = await google.chat.completions.create(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n let resultChunk;\n if (chunk.choices) {\n const newChoices = chunk.choices.map((choice) => {\n if (choice.delta?.tool_calls) {\n return {\n ...choice,\n delta: {\n ...choice.delta,\n tool_calls: choice.delta.tool_calls.map((toolCall) => {\n if (toolCall.id === \"\") {\n return {\n ...toolCall,\n id: `call_${(0, import_cuid2.createId)()}`\n };\n }\n return toolCall;\n })\n }\n };\n } else {\n return choice;\n }\n });\n resultChunk = {\n ...chunk,\n choices: newChoices\n };\n } else {\n resultChunk = chunk;\n }\n controller.enqueue(`data: ${JSON.stringify(resultChunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await google.chat.completions.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/googleClientAdapter/completions/index.ts\nvar completions7 = ({\n google\n}) => ({\n post: post7({ google })\n});\n\n// src/adapters/client/googleClientAdapter/index.ts\nvar googleClientAdapter = ({\n google\n}) => ({\n client: google,\n requestHandlers: {\n \"^/v1/models$\": models9({ google }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions7({ google })\n }\n});\n\n// src/adapters/client/humirisClientAdapter/models/get.ts\nvar models10 = [\n \"Humiris/humiris-moai\"\n];\nvar get8 = ({\n humiris\n}) => async (_url, _options) => {\n try {\n return new Response(JSON.stringify({\n type: \"list\",\n data: models10.map((model) => ({\n id: model,\n object: \"model\"\n }))\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/humirisClientAdapter/models/index.ts\nvar models11 = ({\n humiris\n}) => ({\n get: get8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/completions/post.ts\nvar post8 = ({\n humiris\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const data = await humiris.chat.completions.create({\n ...body,\n stream: false\n });\n const stream = new ReadableStream({\n async start(controller) {\n const chunk = {\n id: data.id,\n object: \"chat.completion.chunk\",\n created: data.created,\n model: data.created,\n choices: [\n {\n index: 0,\n delta: {\n role: data.choices[0].message.role,\n content: data.choices[0].message.content\n },\n logprobs: null,\n finish_reason: data.choices[0].finish_reason\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await humiris.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/humirisClientAdapter/completions/index.ts\nvar completions8 = ({\n humiris\n}) => ({\n post: post8({ humiris })\n});\n\n// src/adapters/client/humirisClientAdapter/index.ts\nvar humirisClientAdapter = ({\n humiris\n}) => ({\n client: humiris,\n requestHandlers: {\n \"^/v1/models$\": models11({ humiris }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions8({ humiris })\n }\n});\n\n// src/adapters/client/ollamaClientAdapter/models/get.ts\nvar get9 = ({\n ollama\n}) => async (_url, _options) => {\n try {\n const data = await ollama.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/models/index.ts\nvar models12 = ({\n ollama\n}) => ({\n get: get9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/completions/post.ts\nvar post9 = ({\n ollama\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await ollama.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await ollama.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/ollamaClientAdapter/completions/index.ts\nvar completions9 = ({\n ollama\n}) => ({\n post: post9({ ollama })\n});\n\n// src/adapters/client/ollamaClientAdapter/index.ts\nvar ollamaClientAdapter = ({\n ollama\n}) => ({\n client: ollama,\n requestHandlers: {\n \"^/v1/models$\": models12({ ollama }),\n \"^/(?:v1|/?openai)/chat/completions$\": completions9({ ollama })\n }\n});\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar import_lodash = __toESM(require(\"lodash\"), 1);\nvar import_radash6 = require(\"radash\");\nvar import_dayjs = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nvar import_radash5 = require(\"radash\");\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\nvar import_radash4 = require(\"radash\");\nvar validToolCallContentTypes = [\n \"image\",\n \"text\"\n];\nvar serializeToolContent = ({\n toolCall\n}) => {\n if ((0, import_radash4.isArray)(toolCall.function.output)) {\n const isEveryToolPartValid = toolCall.function.output.every((toolPart) => {\n if (!(0, import_radash4.isObject)(toolPart)) return false;\n return validToolCallContentTypes.includes(\n toolPart.type ?? \"\"\n );\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 const content = serializeContent({\n content: message.content\n });\n if (message.role === \"assistant\" && message.metadata?.toolCalls) {\n return {\n role: \"assistant\",\n content,\n tool_calls: message.metadata.toolCalls\n };\n }\n return {\n role: message.role,\n content\n };\n};\nvar serializeContent = ({\n content\n}) => content.map((content2) => content2.text.value).join(\"\\n\");\nvar serializeMessage3 = ({\n message\n}) => {\n const result = [\n serializeMessageWithContent({ message })\n ];\n const run3 = message.run;\n if (!run3) return result;\n const messageToolCalls = Array.isArray(message.metadata?.toolCalls) ? message.metadata?.toolCalls : void 0;\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(\n (rsTc) => {\n if (rsTc.type !== \"function\") return false;\n return rsTc.id === tc.id;\n }\n );\n });\n if (!runStep) return;\n const toolCall = runStep.step_details.tool_calls.find(\n (rsTc) => {\n if (rsTc.type !== \"function\") return false;\n return rsTc.id === tc.id;\n }\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 ...(0, import_radash5.flat)((await getMessages2()).map((message) => serializeMessage3({ message })))\n];\n\n// src/adapters/run/completionsRunAdapter/index.ts\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) return (0, import_radash6.omit)(delta, [\"index\"]);\n const result = import_lodash.default.cloneDeep(toolCall);\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? \"\"}${value}`;\n }\n return result;\n};\nvar toolCallsData = ({\n prevToolCalls,\n delta\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: (0, import_radash6.uid)(24),\n type: \"function\",\n ...(0, import_radash6.omit)(tc, [\"index\"])\n }));\n }\n const newToolCalls = import_lodash.default.cloneDeep(prevToolCalls);\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta\n });\n }\n return newToolCalls;\n};\nvar completionsRunAdapter = () => async ({\n client: clientAdapter,\n run: run3,\n onEvent: onEvent2,\n getMessages: getMessages2,\n getThread: getThread2\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 ...(0, import_radash6.isEmpty)(run3.tools) ? {} : { tools: run3.tools }\n };\n let providerResponse;\n try {\n providerResponse = await client.chat.completions.create(opts);\n } catch (e) {\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run3,\n failed_at: (0, import_dayjs.default)().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n let message = await onEvent2({\n event: \"thread.message.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.message\",\n completed_at: null,\n run_id: run3.id,\n created_at: (0, import_dayjs.default)().unix(),\n assistant_id: run3.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run3.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix(),\n created_at: (0, import_dayjs.default)().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"message_creation\",\n message_creation: {\n message_id: message.id\n }\n }\n }\n });\n let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls;\n for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? [];\n const choice = choices[0];\n if (!choice) continue;\n const delta = choice.delta;\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? \"\"}`;\n }\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: (0, import_dayjs.default)().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"tool_calls\",\n tool_calls: []\n }\n }\n });\n }\n onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run3.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: delta.tool_calls.map((tc) => ({\n id: (0, import_radash6.uid)(24),\n type: \"function\",\n ...tc\n }))\n }\n }\n }\n });\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\n }\n if (delta.content) {\n onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: \"text\",\n index: 0,\n text: {\n value: delta.content\n }\n }\n ]\n }\n }\n });\n }\n }\n message = await onEvent2({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [{ text: { value: currentContent, annotations: [] }, type: \"text\" }],\n tool_calls: currentToolCalls\n }\n });\n if ((0, import_radash6.isEmpty)(currentToolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run3,\n status: \"completed\",\n completed_at: (0, import_dayjs.default)().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run3,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: currentToolCalls\n }\n }\n }\n });\n};\n\n// src/adapters/run/responsesRunAdapter/index.ts\nvar import_radash8 = require(\"radash\");\nvar import_dayjs2 = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/run/responsesRunAdapter/messages/index.ts\nvar import_radash7 = require(\"radash\");\n\n// src/adapters/run/responsesRunAdapter/messages/serializeMessage.ts\nvar serializeMessage4 = ({\n message\n}) => {\n if (message.role === \"tool\") {\n const toolMessage = message;\n const output = typeof toolMessage.content === \"string\" ? toolMessage.content : JSON.stringify(toolMessage.content);\n return [\n {\n type: \"function_call_output\",\n call_id: toolMessage.tool_call_id ?? toolMessage.id,\n output\n }\n ];\n }\n if (message.role === \"assistant\" && message.tool_calls && message.tool_calls.length > 0) {\n return message.tool_calls.map(\n (tc) => ({\n type: \"function_call\",\n id: tc.id,\n call_id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments\n })\n );\n }\n const contentBlocks = message.content;\n const text = contentBlocks.map((c) => c.text.value).join(\"\\n\");\n if (message.role === \"assistant\") {\n return [\n {\n role: \"assistant\",\n content: [\n {\n type: \"output_text\",\n text\n }\n ],\n status: \"completed\",\n type: \"message\"\n }\n ];\n }\n return [\n {\n role: message.role,\n content: [\n {\n type: \"input_text\",\n text\n }\n ],\n type: \"message\"\n }\n ];\n};\n\n// src/adapters/run/responsesRunAdapter/messages/index.ts\nvar messages2 = async ({\n run: run3,\n getMessages: getMessages2\n}) => (0, import_radash7.flat)(\n (await getMessages2()).map(\n (message) => serializeMessage4({ message })\n )\n);\n\n// src/adapters/run/responsesRunAdapter/index.ts\nvar responsesRunAdapter = () => async ({\n client: clientAdapter,\n run: run3,\n onEvent: onEvent2,\n getMessages: getMessages2,\n getThread: getThread2\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 thread = await getThread2();\n const openaiConversationId = thread?.openaiConversationId ?? void 0;\n const input = await messages2({\n run: run3,\n getMessages: getMessages2\n });\n const mappedTools = (run3.tools || []).map(\n (t) => t.type === \"function\" ? {\n type: \"function\",\n name: t.function.name,\n description: t.function.description,\n parameters: t.function.parameters\n } : t\n );\n const opts = {\n model: run3.model,\n input,\n ...run3.instructions ? { instructions: run3.instructions } : {},\n ...(0, import_radash8.isEmpty)(mappedTools) ? {} : { tools: mappedTools },\n ...typeof run3.response_format === \"object\" && run3.response_format.type && run3.response_format.type !== \"text\" ? { response_format: run3.response_format } : {}\n };\n let providerResponse;\n try {\n providerResponse = await client.responses.create({\n ...opts,\n ...openaiConversationId ? { conversation: openaiConversationId } : {},\n stream: true\n });\n } catch (e) {\n const msg = `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`.trim();\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run3,\n failed_at: (0, import_dayjs2.default)().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: msg\n }\n }\n });\n }\n let message = await onEvent2({\n event: \"thread.message.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.message\",\n completed_at: null,\n run_id: run3.id,\n created_at: (0, import_dayjs2.default)().unix(),\n assistant_id: run3.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run3.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: (0, import_dayjs2.default)().unix(),\n created_at: (0, import_dayjs2.default)().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"message_creation\",\n message_creation: {\n message_id: message.id\n }\n }\n }\n });\n let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls = [];\n const toolCallsByItemId = {};\n let newConversationId;\n for await (const event of providerResponse) {\n switch (event.type) {\n case \"response.created\": {\n const convId = event.response?.conversation_id ?? event.response?.conversation?.id;\n if (convId) {\n newConversationId = convId;\n }\n break;\n }\n case \"response.output_text.delta\": {\n currentContent = `${currentContent}${event.delta}`;\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: event.delta\n }\n }\n ]\n }\n }\n });\n break;\n }\n case \"response.output_item.added\": {\n if (event.item.type === \"function_call\") {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: (0, import_dayjs2.default)().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"tool_calls\",\n tool_calls: []\n }\n }\n });\n }\n const callId = event.item.call_id ?? event.item.id ?? (0, import_radash8.uid)(24);\n const newToolCall = {\n id: callId,\n type: \"function\",\n function: {\n name: event.item.name,\n arguments: \"\"\n },\n index: currentToolCalls.length\n };\n currentToolCalls.push(newToolCall);\n toolCallsByItemId[event.item.id ?? callId] = newToolCall;\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: [newToolCall]\n }\n }\n }\n });\n }\n break;\n }\n case \"response.function_call_arguments.delta\": {\n const tc = toolCallsByItemId[event.item_id] || currentToolCalls.find((t) => t.id === event.item_id);\n if (tc) {\n tc.function.arguments = `${tc.function.arguments}${event.delta}`;\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: [\n {\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.function.name,\n arguments: tc.function.arguments\n },\n index: currentToolCalls.findIndex(\n (t) => t.id === tc.id\n )\n }\n ]\n }\n }\n }\n });\n }\n break;\n }\n case \"response.error\": {\n await onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run3,\n ...newConversationId ? {\n metadata: {\n ...run3.metadata ?? {},\n openaiConversationId: newConversationId\n }\n } : {},\n failed_at: (0, import_dayjs2.default)().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: event.error?.message ?? \"unknown_error\"\n }\n }\n });\n return;\n }\n default:\n break;\n }\n }\n if ((0, import_radash8.isEmpty)(currentToolCalls) && typeof providerResponse.final === \"function\") {\n await providerResponse.final().catch(() => {\n });\n }\n message = await onEvent2({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [\n { text: { value: currentContent, annotations: [] }, type: \"text\" }\n ],\n tool_calls: currentToolCalls\n }\n });\n if ((0, import_radash8.isEmpty)(message.tool_calls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run3,\n status: \"completed\",\n completed_at: (0, import_dayjs2.default)().unix(),\n ...newConversationId ? {\n metadata: {\n ...run3.metadata ?? {},\n openaiConversationId: newConversationId\n }\n } : {}\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run3,\n status: \"requires_action\",\n ...newConversationId ? {\n metadata: {\n ...run3.metadata ?? {},\n openaiConversationId: newConversationId\n }\n } : {},\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: message.tool_calls ?? []\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/openaiResponsesStorageAdapter/threads/post.ts\nvar import_dayjs3 = __toESM(require(\"dayjs\"), 1);\nvar post10 = ({ openai }) => async (_urlString, options) => {\n const body = options?.body ? JSON.parse(options.body) : {};\n const oai = openai;\n const conversation = await oai.conversations.create({\n metadata: body.metadata || {}\n });\n const thread = {\n id: conversation.id,\n object: \"thread\",\n created_at: conversation.created_at ?? (0, import_dayjs3.default)().unix(),\n metadata: conversation.metadata || {},\n tool_resources: null,\n openaiConversationId: conversation.id\n };\n return new Response(JSON.stringify(thread), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/index.ts\nvar threads = ({ openai }) => ({\n post: post10({ openai })\n});\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/messages/post.ts\nvar import_dayjs4 = __toESM(require(\"dayjs\"), 1);\nvar post11 = ({ openai }) => 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 content = typeof body.content === \"string\" ? body.content : \"\";\n const oai = openai;\n await oai.conversations.items.create(threadId, {\n items: [\n {\n type: \"message\",\n role: body.role,\n content: [{ type: \"input_text\", text: content }]\n }\n ]\n });\n return new Response(\n JSON.stringify({\n id: `msg_${Date.now()}`,\n object: \"thread.message\",\n created_at: (0, import_dayjs4.default)().unix(),\n thread_id: threadId,\n role: body.role,\n content: [\n {\n type: \"text\",\n text: { value: content, annotations: [] }\n }\n ],\n metadata: body.metadata || {},\n assistant_id: null,\n run_id: null,\n attachments: [],\n status: \"completed\",\n completed_at: (0, import_dayjs4.default)().unix(),\n incomplete_at: null,\n incomplete_details: null\n }),\n { status: 200, headers: { \"Content-Type\": \"application/json\" } }\n );\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/messages/list.ts\nvar import_dayjs5 = __toESM(require(\"dayjs\"), 1);\nvar list = ({ openai }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const oai = openai;\n const items = await oai.conversations.items.list(threadId);\n const messages5 = (items.data || []).filter((item) => item.type === \"message\").map((item) => ({\n id: item.id,\n object: \"thread.message\",\n created_at: item.created_at ?? (0, import_dayjs5.default)().unix(),\n thread_id: threadId,\n role: item.role,\n content: (item.content || []).map((c) => ({\n type: \"text\",\n text: { value: c.text, annotations: [] }\n })),\n metadata: {},\n assistant_id: null,\n run_id: null,\n attachments: [],\n status: \"completed\",\n completed_at: item.completed_at ?? (0, import_dayjs5.default)().unix(),\n incomplete_at: null,\n incomplete_details: null\n }));\n return new Response(\n JSON.stringify({ object: \"list\", data: messages5, has_more: items.has_more ?? false }),\n { status: 200, headers: { \"Content-Type\": \"application/json\" } }\n );\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/messages/index.ts\nvar messages3 = ({ openai }) => ({\n post: post11({ openai }),\n get: list({ openai })\n});\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/post.ts\nvar import_dayjs6 = __toESM(require(\"dayjs\"), 1);\nvar import_radash9 = require(\"radash\");\nvar post12 = ({\n openai,\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 oai = openai;\n const conversation = await oai.conversations.retrieve(threadId).catch(() => null);\n if (!conversation) return new Response(\"Thread not found\", { status: 404 });\n const metadata = conversation.metadata ?? {};\n const openaiConversationId = metadata.openaiConversationId || threadId;\n const thread = {\n id: threadId,\n object: \"thread\",\n created_at: conversation.created_at ?? (0, import_dayjs6.default)().unix(),\n metadata,\n tool_resources: null,\n openaiConversationId\n };\n const assistant = await openai.beta.assistants.retrieve(assistant_id);\n let run3 = {\n id: `run_${(0, import_radash9.uid)(24)}`,\n object: \"thread.run\",\n created_at: (0, import_dayjs6.default)().unix(),\n thread_id: threadId,\n assistant_id,\n model: body.model || assistant.model,\n instructions: body.instructions || \"\",\n status: \"queued\",\n tools: body.tools || assistant.tools || [],\n response_format: body.response_format || { type: \"text\" },\n metadata: body.metadata || {}\n };\n const runSteps = [];\n const onEvent2 = async (event) => {\n if (event.event === \"thread.run.completed\") {\n run3 = { ...run3, status: \"completed\" };\n } else if (event.event === \"thread.run.failed\") {\n run3 = {\n ...run3,\n status: \"failed\",\n last_error: event.data.last_error\n };\n } else if (event.event === \"thread.run.requires_action\") {\n run3 = {\n ...run3,\n status: \"requires_action\",\n required_action: event.data.required_action\n };\n } else if (event.event === \"thread.run.step.created\") {\n const step = {\n ...event.data,\n id: `run_step_${(0, import_radash9.uid)(24)}`\n };\n runSteps.push(step);\n return step;\n } else if (event.event === \"thread.run.step.delta\") {\n const step = runSteps.find((s) => s.id === event.data.id);\n if (step) {\n const delta = event.data.delta;\n if (delta.step_details?.type === \"tool_calls\") {\n step.step_details = step.step_details || { type: \"tool_calls\", tool_calls: [] };\n const calls = delta.step_details.tool_calls || [];\n for (const call of calls) {\n const existingIndex = step.step_details.tool_calls.findIndex(\n (c) => c.id === call.id\n );\n if (existingIndex === -1) {\n ;\n step.step_details.tool_calls.push(call);\n } else {\n const existing = step.step_details.tool_calls[existingIndex];\n step.step_details.tool_calls[existingIndex] = {\n ...existing,\n ...call,\n function: {\n ...existing.function,\n ...call.function\n }\n };\n }\n }\n }\n }\n return event.data;\n }\n const conv = event.data?.metadata?.openaiConversationId;\n if (conv && conv !== thread.openaiConversationId) {\n thread.openaiConversationId = conv;\n }\n return event.data;\n };\n const getThread2 = async () => thread;\n const getMessages2 = async () => [];\n const saveRun = async () => {\n if (run3.status !== \"requires_action\") {\n delete run3.required_action;\n }\n const storedRun = {\n id: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n model: run3.model,\n instructions: run3.instructions,\n response_format: run3.response_format,\n status: run3.status\n };\n const metadata2 = thread.metadata;\n metadata2[`run_${run3.id}`] = JSON.stringify(storedRun);\n if (run3.tools && run3.tools.length > 0) {\n metadata2[`run_${run3.id}_tools`] = JSON.stringify(run3.tools);\n }\n if (runSteps.length > 0) {\n const storedSteps = runSteps.filter((s) => s.type === \"tool_calls\").map((s) => ({\n id: s.id,\n type: s.type,\n status: s.status,\n created_at: s.created_at,\n step_details: {\n type: \"tool_calls\",\n tool_calls: s.step_details.tool_calls?.map((tc) => ({\n id: tc.id,\n type: tc.type,\n function: { name: tc.function.name }\n }))\n }\n }));\n metadata2[`run_${run3.id}_steps`] = JSON.stringify(storedSteps);\n }\n if (run3.required_action) {\n metadata2[`run_${run3.id}_required_action`] = JSON.stringify(\n run3.required_action\n );\n }\n metadata2.openaiConversationId = thread.openaiConversationId;\n thread.metadata = metadata2;\n await oai.conversations.update(thread.openaiConversationId, {\n metadata: metadata2\n });\n };\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n await runAdapter({\n run: run3,\n onEvent: (event) => {\n controller.enqueue(`data: ${JSON.stringify(event)}\n\n`);\n return onEvent2(event);\n },\n getMessages: getMessages2,\n getThread: getThread2\n });\n await saveRun();\n controller.close();\n }\n });\n return new Response(readableStream, {\n headers: { \"Content-Type\": \"text/event-stream\" }\n });\n }\n await runAdapter({ run: run3, onEvent: onEvent2, getMessages: getMessages2, getThread: getThread2 });\n await saveRun();\n return new Response(JSON.stringify(run3), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/get.ts\nvar get10 = ({ openai }) => async (_urlString) => {\n return new Response(\n JSON.stringify({ object: \"list\", data: [], has_more: false }),\n { status: 200, headers: { \"Content-Type\": \"application/json\" } }\n );\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/index.ts\nvar runs = ({\n openai,\n runAdapter\n}) => ({\n post: post12({ openai, runAdapter }),\n get: get10({ openai })\n});\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/run/get.ts\nvar get11 = ({ openai }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp));\n const conversation = await openai.conversations.retrieve(threadId).catch(() => null);\n const metadata = conversation?.metadata;\n const runStr = metadata?.[`run_${runId}`];\n const toolsStr = metadata?.[`run_${runId}_tools`];\n const raStr = metadata?.[`run_${runId}_required_action`];\n const run3 = runStr ? {\n ...JSON.parse(runStr),\n tools: toolsStr ? JSON.parse(toolsStr) : [],\n ...raStr ? { required_action: JSON.parse(raStr) } : {}\n } : null;\n return new Response(JSON.stringify(run3 ?? null), {\n status: run3 ? 200 : 404,\n headers: {\n \"Content-Type\": \"application/json\",\n \"openai-poll-after-ms\": \"5000\"\n }\n });\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/run/index.ts\nvar run = ({ openai }) => ({\n get: get11({ openai })\n});\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar import_dayjs7 = __toESM(require(\"dayjs\"), 1);\nvar post13 = ({\n openai,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(\n new RegExp(submitToolOutputsRegexp)\n );\n const body = JSON.parse(options.body);\n const { tool_outputs, stream } = body;\n const oai = openai;\n const conversation = await oai.conversations.retrieve(threadId).catch(() => null);\n if (!conversation) return new Response(\"Not found\", { status: 404 });\n const metadata = conversation.metadata ?? {};\n const openaiConversationId = metadata.openaiConversationId || threadId;\n const thread = {\n id: threadId,\n object: \"thread\",\n created_at: conversation.created_at ?? (0, import_dayjs7.default)().unix(),\n metadata,\n tool_resources: null,\n openaiConversationId\n };\n const runStr = metadata[`run_${runId}`];\n const toolsStr = metadata[`run_${runId}_tools`];\n const raStr = metadata[`run_${runId}_required_action`];\n const run3 = runStr ? {\n ...JSON.parse(runStr),\n tools: toolsStr ? JSON.parse(toolsStr) : [],\n ...raStr ? { required_action: JSON.parse(raStr) } : {}\n } : void 0;\n if (!run3) return new Response(\"Not found\", { status: 404 });\n run3.status = \"completed\";\n run3.required_action = null;\n run3.last_error = null;\n if (tool_outputs && tool_outputs.length > 0) {\n await oai.conversations.items.create(thread.openaiConversationId, {\n items: [\n ...tool_outputs.map(\n (t) => ({\n type: \"function_call_output\",\n call_id: t.tool_call_id,\n output: typeof t.output === \"string\" ? t.output : JSON.stringify(t.output)\n })\n ),\n {\n type: \"message\",\n role: \"assistant\",\n content: [\n {\n type: \"output_text\",\n text: tool_outputs[0].output\n }\n ]\n }\n ]\n });\n }\n const saveRun = async () => {\n if (run3.status !== \"requires_action\") {\n run3.required_action = null;\n }\n const storedRun = {\n id: run3.id,\n assistant_id: run3.assistant_id,\n thread_id: run3.thread_id,\n model: run3.model,\n instructions: run3.instructions,\n response_format: run3.response_format,\n status: run3.status\n };\n metadata[`run_${run3.id}`] = JSON.stringify(storedRun);\n if (run3.tools && run3.tools.length > 0) {\n metadata[`run_${run3.id}_tools`] = JSON.stringify(run3.tools);\n }\n if (run3.required_action) {\n metadata[`run_${run3.id}_required_action`] = JSON.stringify(\n run3.required_action\n );\n } else {\n delete metadata[`run_${run3.id}_required_action`];\n }\n metadata.openaiConversationId = thread.openaiConversationId;\n thread.metadata = metadata;\n await oai.conversations.update(thread.openaiConversationId, {\n metadata\n });\n };\n await saveRun();\n if (stream) {\n const readableStream = new ReadableStream({\n start(controller) {\n controller.enqueue(`data: ${JSON.stringify({\n event: \"thread.run.completed\",\n data: run3\n })}\n\n`);\n controller.close();\n }\n });\n return new Response(readableStream, {\n headers: { \"Content-Type\": \"text/event-stream\" }\n });\n }\n return new Response(JSON.stringify(run3), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/submitToolOutputs/index.ts\nvar submitToolOutputs = ({\n openai,\n runAdapter\n}) => ({\n post: post13({ openai, runAdapter })\n});\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/steps/get.ts\nvar import_radash10 = require(\"radash\");\nvar get12 = ({ openai }) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const oai = openai;\n const conversation = await oai.conversations.retrieve(threadId).catch(() => null);\n const metadata = conversation?.metadata ?? {};\n const stepsStr = metadata[`run_${runId}_steps`];\n const allSteps = stepsStr ? JSON.parse(stepsStr) : [];\n const { limit, order, after } = (0, import_radash10.assign)(\n { limit: \"20\", order: \"desc\" },\n Object.fromEntries(url.searchParams)\n );\n const pageSize = parseInt(limit, 10);\n let steps3 = allSteps.sort(\n (a, b) => order === \"asc\" ? a.created_at - b.created_at : b.created_at - a.created_at\n );\n if (after) {\n const idx = steps3.findIndex((s) => s.id === after);\n if (idx >= 0) steps3 = steps3.slice(idx + 1);\n }\n const page = steps3.slice(0, pageSize);\n return new Response(\n JSON.stringify({\n data: page,\n has_more: steps3.length > pageSize,\n last_id: page.at(-1)?.id ?? null\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n }\n );\n};\n\n// src/adapters/storage/openaiResponsesStorageAdapter/threads/runs/steps/index.ts\nvar steps = ({ openai }) => ({\n get: get12({ openai })\n});\n\n// src/adapters/storage/openaiResponsesStorageAdapter/index.ts\nvar openaiResponsesStorageAdapter = ({\n openai\n}) => ({ runAdapter }) => ({\n requestHandlers: {\n \"^/(?:v1|/?openai)/threads$\": threads({ openai }),\n [messagesRegexp]: messages3({ openai }),\n [runsRegexp]: runs({ openai, runAdapter }),\n [runRegexp]: run({ openai }),\n [submitToolOutputsRegexp]: submitToolOutputs({ openai, runAdapter }),\n [stepsRegexp]: steps({ openai })\n }\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar import_dayjs9 = __toESM(require(\"dayjs\"), 1);\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nvar import_dayjs8 = __toESM(require(\"dayjs\"), 1);\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: (0, import_dayjs8.default)(thread.createdAt).unix(),\n metadata: thread.metadata,\n openaiConversationId: thread.openaiConversationId ?? null,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar post14 = ({ prisma }) => async (...args) => {\n const body = JSON.parse(args[1].body);\n const messages5 = body.messages || [];\n const metadata = body.metadata || {};\n const initialCreatedAt = (0, import_dayjs9.default)().subtract(messages5.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: messages5.map(\n (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: (0, import_dayjs9.default)(initialCreatedAt).add(index, \"seconds\").toDate()\n })\n )\n }\n }\n });\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 threads2 = ({\n prisma\n}) => ({\n post: post14({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar import_radash12 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nvar import_dayjs10 = __toESM(require(\"dayjs\"), 1);\nvar import_radash11 = require(\"radash\");\nvar serializeMessage5 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: (0, import_dayjs10.default)(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? (0, import_dayjs10.default)(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? (0, import_dayjs10.default)(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails,\n role: message.role.toLowerCase(),\n content: message.content,\n assistant_id: message.assistantId,\n run_id: message.runId,\n attachments: message.attachments,\n status: message.status.toLowerCase(),\n metadata: (0, import_radash11.assign)(\n message.metadata ?? {},\n message.toolCalls ? { toolCalls: message.toolCalls } : {}\n )\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({\n content\n}) => {\n if ((0, import_radash12.isArray)(content)) {\n return content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: {\n value: item.text ?? \"\",\n annotations: []\n }\n };\n }\n return item;\n });\n }\n return [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: []\n }\n }\n ];\n};\nvar post15 = ({\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 serializeMessage5({ message })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nvar import_radash13 = require(\"radash\");\nvar get13 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash13.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 },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const messages5 = messagesPlusOne.slice(0, pageSize);\n return new Response(JSON.stringify({\n data: messages5.map((message) => serializeMessage5({ message })),\n has_more: messagesPlusOne.length > pageSize,\n last_id: (0, import_radash13.last)(messages5)?.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 messages4 = ({\n prisma\n}) => ({\n post: post15({ prisma }),\n get: get13({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar import_radash14 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nvar import_dayjs11 = __toESM(require(\"dayjs\"), 1);\nvar serializeRun = ({\n run: run3\n}) => ({\n id: run3.id,\n object: \"thread.run\",\n created_at: (0, import_dayjs11.default)(run3.createdAt).unix(),\n thread_id: run3.threadId,\n assistant_id: run3.assistantId,\n status: run3.status.toLowerCase(),\n required_action: run3.requiredAction,\n last_error: run3.lastError,\n expires_at: (0, import_dayjs11.default)(run3.expiresAt).unix(),\n started_at: run3.startedAt ? (0, import_dayjs11.default)(run3.startedAt).unix() : null,\n cancelled_at: run3.cancelledAt ? (0, import_dayjs11.default)(run3.cancelledAt).unix() : null,\n failed_at: run3.failedAt ? (0, import_dayjs11.default)(run3.failedAt).unix() : null,\n completed_at: run3.completedAt ? (0, import_dayjs11.default)(run3.completedAt).unix() : null,\n model: run3.model,\n instructions: run3.instructions,\n tools: run3.tools,\n metadata: run3.metadata,\n usage: run3.usage,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n parallel_tool_calls: true\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar get14 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash14.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 },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runs3 = runsPlusOne.slice(0, pageSize);\n return new Response(\n 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 {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n }\n );\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nvar import_dayjs13 = __toESM(require(\"dayjs\"), 1);\nvar import_radash15 = require(\"radash\");\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"IN_PROGRESS\" /* IN_PROGRESS */\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts\nvar threadRunFailed = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n const runRecord = await 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 return runRecord;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts\nvar threadRunCompleted = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n const runRecord = await prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n requiredAction: void 0\n }\n });\n return runRecord;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts\nvar threadRunRequiresAction = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n const runRecord = await 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 return runRecord;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nvar import_dayjs12 = __toESM(require(\"dayjs\"), 1);\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: (0, import_dayjs12.default)(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase(),\n status: runStep.status.toLowerCase(),\n step_details: runStep.stepDetails,\n last_error: runStep.lastError,\n expired_at: runStep.expiredAt ? (0, import_dayjs12.default)(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? (0, import_dayjs12.default)(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? (0, import_dayjs12.default)(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? (0, import_dayjs12.default)(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts\nvar type = (event) => {\n if (event.data.type === \"message_creation\") return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\") return \"TOOL_CALLS\" /* TOOL_CALLS */;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nvar status = (event) => {\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\") return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\") return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\") return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at\n }\n });\n const serializedRunStep = serializeRunStep({ runStep });\n controller.enqueue({\n ...event,\n data: serializedRunStep\n });\n return serializedRunStep;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts\nvar threadRunStepDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\") return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content,\n role: event.data.role === \"assistant\" ? \"ASSISTANT\" : \"USER\",\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status2(event)\n }\n });\n const serializedMessage = serializeMessage5({ message });\n controller.enqueue({\n ...event,\n data: serializedMessage\n });\n return serializedMessage;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts\nvar threadMessageDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts\nvar threadMessageCompleted = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n const data = event.data;\n if (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: 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 ...data.content ? { content: data.content } : {},\n ...data.tool_calls ? { toolCalls: 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 = ({ run: run3 }) => {\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(\n `Unsupported truncation strategy type: ${run3.truncationStrategy.type}`\n );\n};\nvar getMessages = ({\n prisma,\n run: run3\n}) => async () => {\n const take = getTake({\n run: run3\n });\n const messages5 = 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 messages5.map((message) => ({\n ...serializeMessage5({ message }),\n run: message.run ? {\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map(\n (runStep) => serializeRunStep({ runStep })\n )\n } : null\n }));\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/getThread.ts\nvar getThread = ({\n prisma,\n threadId\n}) => async () => {\n const thread = await prisma.thread.findUnique({\n where: { id: threadId }\n });\n return thread ? serializeThread({ thread }) : null;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nvar post16 = ({\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({ where: { id: assistant_id } });\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = (0, import_radash15.assign)(\n {\n model: assistant?.model || \"gpt-4o-mini\",\n instructions: assistant?.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 body\n );\n const run3 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: (0, import_dayjs13.default)().add(1, \"hour\").unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId\n }\n },\n assistant: {\n connect: {\n id: assistant_id\n }\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format\n }\n });\n const data = serializeRun({ run: run3 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter({\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 getThread: getThread({ prisma, threadId })\n });\n } catch (error) {\n console.error(error);\n onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n })({\n event: \"thread.run.failed\",\n data: {\n id: run3.id,\n failed_at: (0, import_dayjs13.default)().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n return new Response(JSON.stringify(\n data\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/index.ts\nvar runs2 = ({\n prisma,\n runAdapter\n}) => ({\n get: get14({ prisma }),\n post: post16({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get15 = ({\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 run2 = ({\n prisma,\n runAdapter\n}) => ({\n get: get15({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nvar import_radash16 = require(\"radash\");\nvar get16 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp));\n const {\n limit,\n order,\n after\n } = (0, import_radash16.assign)({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const pageSize = parseInt(limit, 10);\n const runStepsPlusOne = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order },\n ...after && {\n skip: 1,\n cursor: { id: after }\n }\n });\n const runSteps = runStepsPlusOne.slice(0, pageSize);\n return new Response(\n 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 {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n }\n );\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts\nvar steps2 = ({\n prisma\n}) => ({\n get: get16({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nvar import_dayjs14 = __toESM(require(\"dayjs\"), 1);\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: (0, import_dayjs14.default)().unix(),\n stepDetails: {\n type: \"tool_calls\",\n // @ts-ignore-next-line\n tool_calls: runStep.stepDetails.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0];\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null });\n throw new Error(\"Tool output not found\");\n }\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output\n }\n };\n })\n }\n }\n });\n onThreadRunStepCompleted({\n runStep: completedRunStep\n });\n }\n return prisma2.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar post17 = ({\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({\n prisma,\n run: run3\n }),\n getThread: getThread({ prisma, threadId })\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({\n prisma,\n run: run3\n }),\n getThread: getThread({ prisma, threadId })\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 submitToolOutputs2 = ({\n prisma,\n runAdapter\n}) => ({\n post: post17({\n prisma,\n // @ts-ignore-next-line\n runAdapter\n })\n});\n\n// src/adapters/storage/prismaStorageAdapter/assistants/post.ts\nvar import_dayjs15 = __toESM(require(\"dayjs\"), 1);\nvar post18 = ({ 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: { model, instructions }\n });\n const data = {\n id: assistant.id,\n object: \"assistant\",\n created_at: (0, import_dayjs15.default)().unix(),\n name: null,\n description: null,\n model,\n instructions,\n tools: [],\n metadata: {}\n };\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/assistants/index.ts\nvar assistants = ({ prisma }) => ({\n post: post18({ 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$\": threads2({ prisma }),\n [messagesRegexp]: messages4({ prisma }),\n [runsRegexp]: runs2({ prisma, runAdapter }),\n [runRegexp]: run2({ prisma, runAdapter }),\n [stepsRegexp]: steps2({ prisma }),\n [submitToolOutputsRegexp]: submitToolOutputs2({ prisma, runAdapter })\n }\n});\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n anthropicClientAdapter,\n azureOpenaiClientAdapter,\n completionsRunAdapter,\n googleClientAdapter,\n groqClientAdapter,\n humirisClientAdapter,\n mistralClientAdapter,\n ollamaClientAdapter,\n openaiClientAdapter,\n openaiResponsesStorageAdapter,\n perplexityClientAdapter,\n prismaStorageAdapter,\n responsesRunAdapter,\n supercompat,\n togetherClientAdapter\n});\n","export { supercompat } from './supercompat'\nexport { groqClientAdapter } from './adapters/client/groqClientAdapter'\nexport { openaiClientAdapter } from './adapters/client/openaiClientAdapter'\nexport { azureOpenaiClientAdapter } from './adapters/client/azureOpenaiClientAdapter'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { anthropicClientAdapter } from './adapters/client/anthropicClientAdapter'\nexport { togetherClientAdapter } from './adapters/client/togetherClientAdapter'\nexport { googleClientAdapter } from './adapters/client/googleClientAdapter'\nexport { humirisClientAdapter } from './adapters/client/humirisClientAdapter'\nexport { ollamaClientAdapter } from './adapters/client/ollamaClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { responsesRunAdapter } from './adapters/run/responsesRunAdapter'\nexport { openaiResponsesStorageAdapter } from './adapters/storage/openaiResponsesStorageAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\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","const toRecord = (init: HeadersInit = {}) => {\n if (init instanceof Headers) return Object.fromEntries(init.entries())\n\n return Object.keys(init).reduce(\n (acc, key) => ({\n ...acc,\n [key.toLowerCase()]: (init as any)[key],\n }),\n {} as Record<string, string>\n )\n}\n\nconst getClientHeaders = async (client: any) => {\n if (typeof client.client.authHeaders === 'function') {\n return client.client.authHeaders()\n }\n if (typeof client.client.defaultHeaders === 'function') {\n return client.client.defaultHeaders()\n }\n return {}\n}\n\nconst normalize = (headersInit: any) => {\n if (!headersInit) return {}\n if (headersInit instanceof Headers) {\n return Object.fromEntries(headersInit.entries())\n }\n if (headersInit?.values instanceof Headers) {\n return Object.fromEntries(headersInit.values.entries())\n }\n return Object.fromEntries(new Headers(headersInit as HeadersInit).entries())\n}\n\nexport const originalFetch = async ({\n args,\n client,\n}: {\n args: any[]\n client: any\n}) => {\n if (!client.client?.fetch) {\n // @ts-ignore-next-line\n return fetch(...args)\n }\n\n const [url, options] = args\n const requestHeaders = toRecord(options?.headers as HeadersInit)\n const clientHeaders = normalize(await getClientHeaders(client))\n const headers = { ...requestHeaders, ...clientHeaders }\n\n return client.client.fetch(url, {\n ...options,\n headers,\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 (\n ...args: Parameters<typeof fetch>\n ): Promise<Response> => {\n const [input, options] = args\n const url = typeof input === 'string' ? input : input.toString()\n\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\n })\n\n if (!pathHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n const method = options?.method ?? ''\n\n const requestHandler = pathHandler[method.toLowerCase()]\n\n if (!requestHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n return requestHandler(...args)\n }\n}\n","export const endpointFromBaseUrl = ({\n baseURL\n}: {\n baseURL: string\n}) => (\n baseURL.replace(/\\/+openai$/, '')\n)\n","import type Groq from 'groq-sdk'\n\nexport const get = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, _options: any) => {\n try {\n const data = await groq.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type Groq from 'groq-sdk'\nimport { get } from './get'\n\nexport const models = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n get: get({ groq }),\n})\n","import type Groq from 'groq-sdk'\n\nexport const post = ({\n groq,\n}: {\n groq: Groq\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await groq.chat.completions.create(body)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await groq.chat.completions.create(body)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type Groq from 'groq-sdk'\nimport { post } from './post'\n\nexport const completions = ({\n groq,\n}: {\n groq: Groq\n}) => ({\n post: post({ groq }),\n})\n","// import type Groq from 'groq-sdk'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const groqClientAdapter = ({\n groq,\n}: {\n // TODO\n groq: any\n}) => ({\n client: groq,\n requestHandlers: {\n '^/v1/models$': models({ groq }),\n '^/v1/chat/completions$': completions({ groq }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const get = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n const data = await openai.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n get: get({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { systemDeveloperMessages } from '@/lib/messages/systemDeveloperMessages'\nimport { isOModel } from '@/lib/models/isOModel'\n\nconst omitKeys = ({\n model,\n}: {\n model: string\n}) => {\n if (isOModel({ model })) {\n return ['tools']\n }\n\n return []\n}\n\nexport const post = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const messages = body.messages as OpenAI.ChatCompletionMessageParam[]\n\n const resultOptions = {\n ...omit(body, omitKeys({ model: body.model })),\n messages: systemDeveloperMessages({\n messages,\n model: body.model,\n }),\n } as OpenAI.Chat.ChatCompletionCreateParams\n\n if (body.stream) {\n const response = await openai.chat.completions.create(resultOptions)\n\n const stream = new ReadableStream({\n async start(controller) {\n // @ts-ignore-next-line\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await openai.chat.completions.create(resultOptions)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","export const isOModel = ({ model }: { model: string }) => (\n model.startsWith('o1') || model.startsWith('o3')\n)\n","import type OpenAI from 'openai'\nimport { isOModel } from '@/lib/models/isOModel'\n\nexport const systemDeveloperMessages = ({\n messages,\n model,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n model: string\n}): OpenAI.Chat.ChatCompletionMessageParam[] => {\n if (isOModel({ model })) {\n return messages.map((message) => {\n if (message.role === 'system') {\n return {\n ...message,\n // TODO: This should be 'developer' but we're using 'user' for now\n // role: 'developer',\n role: 'user',\n }\n }\n\n return message\n })\n }\n\n return messages\n}\n","import type OpenAI from 'openai'\nimport { post } from './post'\n\nexport const completions = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const openaiClientAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n client: openai,\n requestHandlers: {\n '^/v1/models$': models({ openai }),\n '^/(?:v1|/?openai)/chat/completions$': completions({ openai }),\n },\n})\n","import type { AzureOpenAI } from 'openai'\nimport { completions } from '@/adapters/client/openaiClientAdapter/completions'\n\nexport const azureOpenaiClientAdapter = ({\n azureOpenai,\n}: {\n azureOpenai: AzureOpenAI\n}) => ({\n type: 'AZURE_OPENAI',\n client: azureOpenai,\n requestHandlers: {\n '^/(?:v1|/?openai)/chat/completions$': completions({\n openai: azureOpenai,\n }),\n },\n})\n","import type { Mistral } from '@mistralai/mistralai'\n\nexport const get = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, _options: any) => {\n try {\n const data = await mistral.models.list()\n\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { get } from './get'\n\nexport const models = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n get: get({ mistral }),\n})\n","const serializeDelta = ({\n delta: {\n toolCalls,\n ...rest\n },\n}: {\n delta: any\n}) => ({\n ...rest,\n ...(toolCalls ? {\n tool_calls: toolCalls,\n } : {}),\n})\n\nconst serializeChoice = ({\n choice: {\n finishReason,\n delta,\n ...rest\n },\n}: {\n choice: any\n}) => ({\n ...rest,\n finish_reason: finishReason ?? null,\n delta: serializeDelta({ delta }),\n})\n\nexport const serializeChunk = ({\n chunk,\n}: {\n chunk: any\n}) => ({\n ...chunk.data,\n ...(chunk.data.choices ? {\n choices: chunk.data.choices.map((choice: any) => (\n serializeChoice({ choice })\n )),\n }: {}),\n})\n","import type OpenAI from 'openai'\n\nconst serializeMessage = ({\n message: {\n // @ts-ignore-next-line\n tool_calls,\n // @ts-ignore-next-line\n tool_call_id,\n ...rest\n },\n}: {\n message: OpenAI.ChatCompletionMessageParam\n}) => ({\n ...rest,\n ...(tool_call_id ? {\n toolCallId: tool_call_id,\n } : {}),\n ...(tool_calls ? {\n toolCalls: tool_calls,\n } : {}),\n})\n\nexport const serializeBody = ({\n body,\n}: {\n body: any\n}) => ({\n ...body,\n messages: body.messages.map((message: OpenAI.ChatCompletionMessageParam) => (\n serializeMessage({\n message,\n })\n )),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { serializeChunk } from './serializeChunk'\nimport { serializeBody } from './serializeBody'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n const serializedBody = serializeBody({\n body,\n })\n\n if (body.stream) {\n const response = await mistral.chat.stream(serializedBody)\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n const serializedChunk = serializeChunk({\n chunk,\n })\n\n controller.enqueue(`data: ${JSON.stringify(serializedChunk)}\\n\\n`)\n }\n\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n } else {\n try {\n const data = await mistral.chat.complete(serializedBody)\n\n return new Response(JSON.stringify({\n data,\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n }\n}\n","import type { Mistral } from '@mistralai/mistralai'\nimport { post } from './post'\n\nexport const completions = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n post: post({ mistral }),\n})\n","import type { Mistral } from '@mistralai/mistralai'\nimport { models } from './models'\nimport { completions } from './completions'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n '^/v1/models$': models({ mistral }),\n '^/v1/chat/completions$': completions({ mistral }),\n },\n})\n","import type OpenAI from 'openai'\n\nconst models = [\n 'sonar-reasoning-pro',\n 'sonar-reasoning',\n 'sonar-pro',\n 'sonar',\n 'r1-1776',\n 'llama-3.1-sonar-small-128k-online',\n 'llama-3.1-sonar-large-128k-online',\n 'llama-3.1-sonar-huge-128k-online',\n]\n\nexport const get = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => async (_url: string, _options: any) => {\n try {\n return new Response(JSON.stringify({\n type: 'list',\n data: models.map((model) => ({\n id: model,\n object: 'model',\n })),\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } catch (error) {\n return new Response(JSON.stringify({\n error,\n }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n","import type OpenAI from 'openai'\nimport { get } from './get'\n\nexport const models = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n get: get({ perplexity }),\n})\n","import type OpenAI from 'openai'\n\nconst agentSideRoles = ['assistant', 'system']\n\nexport const alternatingMessages = ({\n messages,\n}: {\n messages: OpenAI.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: RequestInit) => {\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: unknown) {\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 } 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}) =>\n async (\n _url: string,\n options: RequestInit & { body: string },\n ) => {\n const body = JSON.parse(options.body) as {\n messages: OpenAI.ChatCompletionMessageParam[]\n stream?: boolean\n tools?: OpenAI.Beta.AssistantTool[]\n [key: string]: unknown\n }\n\n const messages = body.messages\n const [systemMessages, otherMessages] = fork(\n messages,\n (message) => message.role === 'system',\n )\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 serializedMessages = serializeMessages({\n messages: chatMessages as OpenAI.ChatCompletionMessageParam[],\n })\n\n const baseOptions = {\n ...omit(body, ['response_format', 'stream']),\n system,\n messages: serializedMessages,\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools,\n }) as unknown as Anthropic.Messages.ToolUnion[],\n }\n\n if (body.stream) {\n const response = await anthropic.messages.stream(\n baseOptions as Anthropic.Messages.MessageStreamParams,\n )\n\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === 'content_block_delta') {\n let delta:\n | { content: string }\n | {\n tool_calls: {\n index: number\n function: { arguments: string }\n }[]\n }\n if (chunk.delta.type === 'input_json_delta') {\n delta = {\n tool_calls: [\n {\n index: 0,\n function: { arguments: chunk.delta.partial_json },\n },\n ],\n }\n } else if (chunk.delta.type === 'text_delta') {\n delta = { content: chunk.delta.text }\n } else {\n continue\n }\n\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: 'chat.completion.chunk',\n choices: [\n {\n index: chunk.index,\n delta,\n },\n ],\n }\n\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\\n\\n`)\n } else if (chunk.type === 'content_block_start') {\n let delta:\n | { content: string }\n | {\n content: null\n tool_calls: {\n index: number\n id: string\n type: 'function'\n function: { name: string; arguments: string }\n }[]\n }\n if (chunk.content_block.type === 'tool_use') {\n delta = {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: 'function',\n function: {\n name: chunk.content_block.name,\n arguments: '',\n },\n },\n ],\n }\n } else if (chunk.content_block.type === 'text') {\n delta = { content: chunk.content_block.text }\n } else {\n continue\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 return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n },\n })\n }\n\n try {\n const data = await anthropic.messages.create({\n ...baseOptions,\n stream: false,\n } as Anthropic.Messages.MessageCreateParamsNonStreaming)\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: unknown) {\n return new Response(\n JSON.stringify({\n error,\n }),\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: 'function' in toolCall ? toolCall.function.name : '',\n input:\n 'function' in toolCall && toolCall.function.arguments\n ? JSON.parse(toolCall.function.arguments)\n : {},\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, ThreadWithConversationId } 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 getThread,\n}: {\n client: OpenAI\n run: OpenAI.Beta.Threads.Run\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<any>\n getMessages: () => Promise<MessageWithRun[]>\n getThread: () => Promise<ThreadWithConversationId | null>\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(currentToolCalls)) {\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: currentToolCalls,\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(\n (toolPart as { type?: string }).type ?? '',\n )\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}): OpenAI.ChatCompletionMessageParam => {\n const content = serializeContent({\n content: message.content as unknown as OpenAI.Beta.Threads.Messages.TextContentBlock[],\n })\n\n if (message.role === 'assistant' && message.metadata?.toolCalls) {\n return {\n role: 'assistant',\n content,\n tool_calls: message.metadata\n .toolCalls as OpenAI.ChatCompletionMessageToolCall[],\n }\n }\n\n return {\n role: message.role,\n content,\n }\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}): OpenAI.ChatCompletionMessageParam[] => {\n const result: OpenAI.ChatCompletionMessageParam[] = [\n serializeMessageWithContent({ message }),\n ]\n\n const run = message.run\n\n if (!run) return result\n\n const messageToolCalls = Array.isArray(message.metadata?.toolCalls)\n ? (message.metadata?.toolCalls as OpenAI.Beta.Threads.Runs.Steps.ToolCall[])\n : undefined\n\n ;(messageToolCalls || []).forEach((tc) => {\n const runStep = run.runSteps.find((rs) => {\n if (rs.type !== 'tool_calls') return false\n\n return (\n (rs.step_details as OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails).tool_calls.some(\n (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 })\n\n if (!runStep) return\n\n const toolCall = (\n (runStep.step_details as OpenAI.Beta.Threads.Runs.Steps.ToolCallsStepDetails).tool_calls.find(\n (rsTc: OpenAI.Beta.Threads.Runs.Steps.ToolCall) => {\n if (rsTc.type !== 'function') return false\n\n return rsTc.id === tc.id\n }\n )\n ) as OpenAI.Beta.Threads.Runs.Steps.FunctionToolCall\n\n result.push(serializeToolCall({ toolCall }))\n })\n\n return result\n}\n","import { uid, isEmpty } from 'radash'\nimport dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { AssistantStream } from 'openai/lib/AssistantStream'\nimport { MessageWithRun, ThreadWithConversationId } from '@/types'\nimport { messages } from './messages'\nimport { supercompat } from '@/supercompat'\n\ninterface ToolCall {\n id: string\n type: 'function'\n function: { name: string; arguments: string }\n index: number\n}\n\ninterface MessageWithToolCalls extends OpenAI.Beta.Threads.Message {\n tool_calls?: ToolCall[]\n}\n\nexport const responsesRunAdapter =\n () =>\n async ({\n client: clientAdapter,\n run,\n onEvent,\n getMessages,\n getThread,\n }: {\n client: OpenAI\n run: OpenAI.Beta.Threads.Run\n onEvent: (event: OpenAI.Beta.AssistantStreamEvent) => Promise<unknown>\n getMessages: () => Promise<MessageWithRun[]>\n getThread: () => Promise<ThreadWithConversationId | null>\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 thread = await getThread()\n const openaiConversationId = thread?.openaiConversationId ?? undefined\n\n const input = await messages({\n run,\n getMessages,\n })\n\n const mappedTools = (run.tools || []).map((t) =>\n t.type === 'function'\n ? {\n type: 'function',\n name: t.function.name,\n description: t.function.description,\n parameters: t.function.parameters,\n }\n : t,\n )\n\n const opts: Record<string, unknown> = {\n model: run.model,\n input,\n ...(run.instructions ? { instructions: run.instructions } : {}),\n ...(isEmpty(mappedTools) ? {} : { tools: mappedTools }),\n ...(typeof run.response_format === 'object' &&\n (run.response_format as any).type &&\n (run.response_format as any).type !== 'text'\n ? { response_format: run.response_format }\n : {}),\n }\n\n let providerResponse: AssistantStream\n\n try {\n providerResponse = await (client as any).responses.create({\n ...opts,\n ...(openaiConversationId ? { conversation: openaiConversationId } : {}),\n stream: true,\n })\n } catch (e: any) {\n const msg = `${e?.message ?? ''} ${e?.cause?.message ?? ''}`.trim()\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: msg,\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 })) as MessageWithToolCalls\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: OpenAI.Beta.Threads.Runs.RunStep | undefined\n let currentContent = ''\n let currentToolCalls: ToolCall[] = []\n const toolCallsByItemId: Record<string, ToolCall> = {}\n let newConversationId: string | undefined\n\n for await (const event of providerResponse as any) {\n switch (event.type) {\n case 'response.created': {\n const convId =\n event.response?.conversation_id ?? event.response?.conversation?.id\n if (convId) {\n newConversationId = convId\n }\n break\n }\n case 'response.output_text.delta': {\n currentContent = `${currentContent}${event.delta}`\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: event.delta,\n },\n },\n ],\n },\n },\n } as OpenAI.Beta.AssistantStreamEvent.ThreadMessageDelta)\n break\n }\n case 'response.output_item.added': {\n if (event.item.type === 'function_call') {\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 })) as OpenAI.Beta.Threads.Runs.RunStep\n }\n\n const callId =\n (event.item.call_id ?? event.item.id ?? uid(24)) as string\n const newToolCall: ToolCall = {\n id: callId,\n type: 'function',\n function: {\n name: event.item.name,\n arguments: '',\n },\n index: currentToolCalls.length,\n }\n currentToolCalls.push(newToolCall)\n toolCallsByItemId[event.item.id ?? callId] = newToolCall\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: [newToolCall],\n },\n },\n },\n } as unknown as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta)\n }\n break\n }\n case 'response.function_call_arguments.delta': {\n const tc =\n toolCallsByItemId[event.item_id] ||\n currentToolCalls.find((t) => t.id === event.item_id)\n if (tc) {\n tc.function.arguments = `${tc.function.arguments}${event.delta}`\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: [\n {\n id: tc.id,\n type: 'function',\n function: {\n name: tc.function.name,\n arguments: tc.function.arguments,\n },\n index: currentToolCalls.findIndex(\n (t) => t.id === tc.id,\n ),\n },\n ],\n },\n },\n },\n } as unknown as OpenAI.Beta.AssistantStreamEvent.ThreadRunStepDelta)\n }\n break\n }\n case 'response.error': {\n await onEvent({\n event: 'thread.run.failed',\n data: {\n ...run,\n ...(newConversationId\n ? {\n metadata: {\n ...(run.metadata ?? {}),\n openaiConversationId: newConversationId,\n },\n }\n : {}),\n failed_at: dayjs().unix(),\n status: 'in_progress',\n last_error: {\n code: 'server_error',\n message: event.error?.message ?? 'unknown_error',\n },\n },\n })\n return\n }\n default:\n break\n }\n }\n\n // finalize the streamed response if supported and no tool calls were emitted\n if (\n isEmpty(currentToolCalls) &&\n typeof (providerResponse as any).final === 'function'\n ) {\n await (providerResponse as any).final().catch(() => {})\n }\n\n message = (await onEvent({\n event: 'thread.message.completed',\n data: {\n ...message,\n status: 'completed',\n content: [\n { text: { value: currentContent, annotations: [] }, type: 'text' },\n ],\n tool_calls: currentToolCalls,\n } as MessageWithToolCalls,\n })) as MessageWithToolCalls\n\n if (isEmpty(message.tool_calls)) {\n return onEvent({\n event: 'thread.run.completed',\n data: {\n ...run,\n status: 'completed',\n completed_at: dayjs().unix(),\n ...(newConversationId\n ? {\n metadata: {\n ...(run.metadata ?? {}),\n openaiConversationId: newConversationId,\n },\n }\n : {}),\n },\n })\n }\n\n return onEvent({\n event: 'thread.run.requires_action',\n data: {\n ...run,\n status: 'requires_action',\n ...(newConversationId\n ? {\n metadata: {\n ...(run.metadata ?? {}),\n openaiConversationId: newConversationId,\n },\n }\n : {}),\n required_action: {\n type: 'submit_tool_outputs',\n submit_tool_outputs: {\n tool_calls: message.tool_calls ?? [],\n },\n },\n },\n })\n }\n","import type OpenAI from 'openai'\nimport { flat } from 'radash'\nimport type {\n ResponseInput,\n ResponseInputItem,\n} from 'openai/resources/responses/responses'\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}): Promise<ResponseInput> =>\n flat(\n (await getMessages()).map((message: MessageWithRun) =>\n serializeMessage({ message }) as ResponseInputItem[],\n ) as ResponseInputItem[][],\n )\n","import type OpenAI from 'openai'\nimport type { ResponseInputItem } from 'openai/resources/responses/responses'\nimport { MessageWithRun } from '@/types'\n\ninterface ToolMessage {\n id: string\n role: 'tool'\n content: unknown\n tool_call_id?: string\n}\n\ntype MessageForSerialization = MessageWithRun | ToolMessage\n\nexport const serializeMessage = ({\n message,\n}: {\n message: MessageForSerialization\n}): ResponseInputItem[] => {\n if (message.role === 'tool') {\n const toolMessage = message as ToolMessage\n const output =\n typeof toolMessage.content === 'string'\n ? toolMessage.content\n : JSON.stringify(toolMessage.content)\n return [\n {\n type: 'function_call_output',\n call_id: toolMessage.tool_call_id ?? toolMessage.id,\n output,\n },\n ] as ResponseInputItem[]\n }\n\n if (\n message.role === 'assistant' &&\n (message as any).tool_calls &&\n (message as any).tool_calls.length > 0\n ) {\n return (message as any).tool_calls.map(\n (tc: any) =>\n ({\n type: 'function_call',\n id: tc.id,\n call_id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments,\n }) as ResponseInputItem,\n )\n }\n\n const contentBlocks =\n message.content as OpenAI.Beta.Threads.Messages.TextContentBlock[]\n const text = contentBlocks.map((c) => c.text.value).join('\\n')\n\n if (message.role === 'assistant') {\n return [\n {\n role: 'assistant',\n content: [\n {\n type: 'output_text',\n text,\n },\n ],\n status: 'completed',\n type: 'message',\n },\n ] as ResponseInputItem[]\n }\n\n return [\n {\n role: message.role as 'user' | 'system' | 'developer',\n content: [\n {\n type: 'input_text',\n text,\n },\n ],\n type: 'message',\n },\n ] as ResponseInputItem[]\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 OpenAI from 'openai'\nimport dayjs from 'dayjs'\n\nexport const post = ({ openai }: { openai: OpenAI }) => async (\n _urlString: string,\n options: any,\n): Promise<Response> => {\n const body = options?.body ? JSON.parse(options.body) : {}\n const oai = openai as any\n const conversation = await oai.conversations.create({\n metadata: body.metadata || {},\n })\n\n const thread = {\n id: conversation.id,\n object: 'thread',\n created_at: conversation.created_at ?? dayjs().unix(),\n metadata: conversation.metadata || {},\n tool_resources: null,\n openaiConversationId: conversation.id,\n }\n\n return new Response(JSON.stringify(thread), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import OpenAI from 'openai'\nimport { post } from './post'\n\nexport const threads = ({ openai }: { openai: OpenAI }) => ({\n post: post({ openai }),\n})\n","import OpenAI from 'openai'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport dayjs from 'dayjs'\n\nexport const post = ({ openai }: { openai: OpenAI }) => async (\n urlString: string,\n options: any,\n): Promise<Response> => {\n const url = new URL(urlString)\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n const body = JSON.parse(options.body)\n const content = typeof body.content === 'string' ? body.content : ''\n const oai = openai as any\n await oai.conversations.items.create(threadId, {\n items: [\n {\n type: 'message',\n role: body.role,\n content: [{ type: 'input_text', text: content }],\n },\n ],\n })\n\n return new Response(\n JSON.stringify({\n id: `msg_${Date.now()}`,\n object: 'thread.message',\n created_at: dayjs().unix(),\n thread_id: threadId,\n role: body.role,\n content: [\n {\n type: 'text',\n text: { value: content, annotations: [] },\n },\n ],\n metadata: body.metadata || {},\n assistant_id: null,\n run_id: null,\n attachments: [],\n status: 'completed',\n completed_at: dayjs().unix(),\n incomplete_at: null,\n incomplete_details: null,\n }),\n { status: 200, headers: { 'Content-Type': 'application/json' } },\n )\n}\n","import OpenAI from 'openai'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport dayjs from 'dayjs'\n\nexport const list = ({ openai }: { openai: OpenAI }) => async (\n urlString: string,\n): Promise<Response> => {\n const url = new URL(urlString)\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp))!\n const oai = openai as any\n const items = await oai.conversations.items.list(threadId)\n\n const messages = (items.data || [])\n .filter((item: any) => item.type === 'message')\n .map((item: any) => ({\n id: item.id,\n object: 'thread.message',\n created_at: item.created_at ?? dayjs().unix(),\n thread_id: threadId,\n role: item.role,\n content: (item.content || []).map((c: any) => ({\n type: 'text',\n text: { value: c.text, annotations: [] },\n })),\n metadata: {},\n assistant_id: null,\n run_id: null,\n attachments: [],\n status: 'completed',\n completed_at: item.completed_at ?? dayjs().unix(),\n incomplete_at: null,\n incomplete_details: null,\n }))\n\n return new Response(\n JSON.stringify({ object: 'list', data: messages, has_more: items.has_more ?? false }),\n { status: 200, headers: { 'Content-Type': 'application/json' } },\n )\n}\n","import OpenAI from 'openai'\nimport { post } from './post'\nimport { list } from './list'\n\nexport const messages = ({ openai }: { openai: OpenAI }) => ({\n post: post({ openai }),\n get: list({ openai }),\n})\n","import OpenAI from 'openai'\nimport dayjs from 'dayjs'\nimport { uid } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport {\n RunAdapterPartobClient,\n ThreadWithConversationId,\n MessageWithRun,\n} from '@/types'\n\nexport const post =\n ({\n openai,\n runAdapter,\n }: {\n openai: OpenAI\n runAdapter: RunAdapterPartobClient\n }) =>\n async (urlString: string, options: any): Promise<Response> => {\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\n const oai = openai as any\n const conversation = await oai.conversations\n .retrieve(threadId)\n .catch(() => null)\n if (!conversation) return new Response('Thread not found', { status: 404 })\n\n const metadata = (conversation.metadata ?? {}) as Record<string, string>\n const openaiConversationId = metadata.openaiConversationId || threadId\n const thread: ThreadWithConversationId = {\n id: threadId,\n object: 'thread',\n created_at: conversation.created_at ?? dayjs().unix(),\n metadata,\n tool_resources: null,\n openaiConversationId,\n }\n\n const assistant = await openai.beta.assistants.retrieve(assistant_id)\n\n let run: OpenAI.Beta.Threads.Run = {\n id: `run_${uid(24)}`,\n object: 'thread.run',\n created_at: dayjs().unix(),\n thread_id: threadId,\n assistant_id,\n model: body.model || assistant.model,\n instructions: body.instructions || '',\n status: 'queued',\n tools: body.tools || (assistant.tools as unknown as OpenAI.Beta.AssistantTool[]) || [],\n response_format: body.response_format || { type: 'text' },\n metadata: body.metadata || {},\n } as unknown as OpenAI.Beta.Threads.Run\n\n const runSteps: OpenAI.Beta.Threads.Runs.RunStep[] = []\n\n const onEvent = async (event: OpenAI.Beta.AssistantStreamEvent) => {\n if (event.event === 'thread.run.completed') {\n run = { ...run, status: 'completed' }\n } else if (event.event === 'thread.run.failed') {\n run = {\n ...run,\n status: 'failed',\n last_error: event.data.last_error,\n } as any\n } else if (event.event === 'thread.run.requires_action') {\n run = {\n ...run,\n status: 'requires_action',\n required_action: event.data.required_action,\n } as any\n } else if (event.event === 'thread.run.step.created') {\n const step = {\n ...event.data,\n id: `run_step_${uid(24)}`,\n } as OpenAI.Beta.Threads.Runs.RunStep\n runSteps.push(step)\n return step\n } else if (event.event === 'thread.run.step.delta') {\n const step = runSteps.find((s) => s.id === event.data.id)\n if (step) {\n const delta = event.data.delta\n if (delta.step_details?.type === 'tool_calls') {\n step.step_details = step.step_details || { type: 'tool_calls', tool_calls: [] }\n const calls = delta.step_details.tool_calls || []\n for (const call of calls) {\n const existingIndex = (step.step_details as any).tool_calls.findIndex(\n (c: any) => c.id === call.id,\n )\n if (existingIndex === -1) {\n ;(step.step_details as any).tool_calls.push(call as any)\n } else {\n const existing = (step.step_details as any).tool_calls[existingIndex]\n ;(step.step_details as any).tool_calls[existingIndex] = {\n ...existing,\n ...(call as any),\n function: {\n ...existing.function,\n ...(call as any).function,\n },\n }\n }\n }\n }\n }\n return event.data\n }\n const conv = (event.data as any)?.metadata?.openaiConversationId\n if (conv && conv !== thread.openaiConversationId) {\n thread.openaiConversationId = conv\n }\n return event.data\n }\n\n const getThread = async () => thread\n const getMessages = async (): Promise<MessageWithRun[]> => []\n\n const saveRun = async () => {\n if (run.status !== 'requires_action') {\n delete (run as any).required_action\n }\n const storedRun = {\n id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n model: run.model,\n instructions: run.instructions,\n response_format: run.response_format,\n status: run.status,\n }\n const metadata = thread.metadata as Record<string, string>\n metadata[`run_${run.id}`] = JSON.stringify(storedRun)\n if (run.tools && run.tools.length > 0) {\n metadata[`run_${run.id}_tools`] = JSON.stringify(run.tools)\n }\n if (runSteps.length > 0) {\n const storedSteps = runSteps\n .filter((s) => s.type === 'tool_calls')\n .map((s) => ({\n id: s.id,\n type: s.type,\n status: s.status,\n created_at: s.created_at,\n step_details: {\n type: 'tool_calls',\n tool_calls: (s.step_details as any).tool_calls?.map((tc: any) => ({\n id: tc.id,\n type: tc.type,\n function: { name: tc.function.name },\n })),\n },\n }))\n metadata[`run_${run.id}_steps`] = JSON.stringify(storedSteps)\n }\n if ((run as any).required_action) {\n metadata[`run_${run.id}_required_action`] = JSON.stringify(\n (run as any).required_action,\n )\n }\n metadata.openaiConversationId = thread.openaiConversationId as string\n thread.metadata = metadata\n await oai.conversations.update(thread.openaiConversationId as string, {\n metadata,\n })\n }\n\n if (stream) {\n const readableStream = new ReadableStream({\n async start(controller) {\n await runAdapter({\n run,\n onEvent: (event) => {\n controller.enqueue(`data: ${JSON.stringify(event)}\\n\\n`)\n return onEvent(event)\n },\n getMessages,\n getThread,\n })\n await saveRun()\n controller.close()\n },\n })\n\n return new Response(readableStream, {\n headers: { 'Content-Type': 'text/event-stream' },\n })\n }\n\n await runAdapter({ run, onEvent, getMessages, getThread })\n await saveRun()\n\n return new Response(JSON.stringify(run), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n }\n","import OpenAI from 'openai'\n\nexport const get = ({ openai }: { openai: OpenAI }) => async (\n _urlString: string,\n): Promise<Response> => {\n return new Response(\n JSON.stringify({ object: 'list', data: [], has_more: false }),\n { status: 200, headers: { 'Content-Type': 'application/json' } },\n )\n}\n","import OpenAI from 'openai'\nimport { post } from './post'\nimport { get } from './get'\nimport { RunAdapterPartobClient } from '@/types'\n\nexport const runs = ({\n openai,\n runAdapter,\n}: {\n openai: OpenAI\n runAdapter: RunAdapterPartobClient\n}) => ({\n post: post({ openai, runAdapter }),\n get: get({ openai }),\n})\n","import OpenAI from 'openai'\nimport { runRegexp } from '@/lib/runs/runRegexp'\n\nexport const get = ({ openai }: { openai: OpenAI }) => async (\n urlString: string,\n): Promise<Response> => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(new RegExp(runRegexp))!\n const conversation = await (openai as any).conversations\n .retrieve(threadId)\n .catch(() => null)\n const metadata = conversation?.metadata as Record<string, string> | undefined\n const runStr = metadata?.[`run_${runId}`]\n const toolsStr = metadata?.[`run_${runId}_tools`]\n const raStr = metadata?.[`run_${runId}_required_action`]\n const run = runStr\n ? {\n ...JSON.parse(runStr),\n tools: toolsStr ? JSON.parse(toolsStr) : [],\n ...(raStr ? { required_action: JSON.parse(raStr) } : {}),\n }\n : null\n return new Response(JSON.stringify(run ?? null), {\n status: run ? 200 : 404,\n headers: {\n 'Content-Type': 'application/json',\n 'openai-poll-after-ms': '5000',\n },\n })\n}\n","import OpenAI from 'openai'\nimport { get } from './get'\n\nexport const run = ({ openai }: { openai: OpenAI }) => ({\n get: get({ openai }),\n})\n","import OpenAI from 'openai'\nimport { submitToolOutputsRegexp } from '@/lib/runs/submitToolOutputsRegexp'\nimport { RunAdapterPartobClient, ThreadWithConversationId } from '@/types'\nimport dayjs from 'dayjs'\n\n\nexport const post = ({\n openai,\n runAdapter,\n}: {\n openai: OpenAI\n runAdapter: RunAdapterPartobClient\n}) =>\nasync (\n urlString: string,\n options: RequestInit & { body: string },\n): Promise<Response> => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(\n new RegExp(submitToolOutputsRegexp),\n )!\n const body = JSON.parse(options.body) as {\n tool_outputs?: OpenAI.Beta.Threads.RunSubmitToolOutputsParams.ToolOutput[]\n stream?: boolean\n }\n const { tool_outputs, stream } = body\n\n const oai = openai as any\n const conversation = await oai.conversations\n .retrieve(threadId)\n .catch(() => null)\n if (!conversation) return new Response('Not found', { status: 404 })\n\n const metadata = (conversation.metadata ?? {}) as Record<string, string>\n const openaiConversationId = metadata.openaiConversationId || threadId\n const thread: ThreadWithConversationId = {\n id: threadId,\n object: 'thread',\n created_at: conversation.created_at ?? dayjs().unix(),\n metadata,\n tool_resources: null,\n openaiConversationId,\n }\n const runStr = metadata[`run_${runId}`]\n const toolsStr = metadata[`run_${runId}_tools`]\n const raStr = metadata[`run_${runId}_required_action`]\n const run: OpenAI.Beta.Threads.Run | undefined = runStr\n ? {\n ...JSON.parse(runStr),\n tools: toolsStr ? JSON.parse(toolsStr) : [],\n ...(raStr ? { required_action: JSON.parse(raStr) } : {}),\n }\n : undefined\n if (!run) return new Response('Not found', { status: 404 })\n run.status = 'completed'\n run.required_action = null\n run.last_error = null\n\n if (tool_outputs && tool_outputs.length > 0) {\n await oai.conversations.items.create(thread.openaiConversationId as string, {\n items: [\n ...tool_outputs.map(\n (t: OpenAI.Beta.Threads.RunSubmitToolOutputsParams.ToolOutput) => ({\n type: 'function_call_output',\n call_id: t.tool_call_id,\n output:\n typeof t.output === 'string'\n ? t.output\n : JSON.stringify(t.output),\n }),\n ),\n {\n type: 'message',\n role: 'assistant',\n content: [\n {\n type: 'output_text',\n text: tool_outputs[0].output,\n },\n ],\n },\n ],\n })\n }\n\n const saveRun = async () => {\n if (run.status !== 'requires_action') {\n run.required_action = null\n }\n const storedRun = {\n id: run.id,\n assistant_id: run.assistant_id,\n thread_id: run.thread_id,\n model: run.model,\n instructions: run.instructions,\n response_format: run.response_format,\n status: run.status,\n }\n metadata[`run_${run.id}`] = JSON.stringify(storedRun)\n if (run.tools && run.tools.length > 0) {\n metadata[`run_${run.id}_tools`] = JSON.stringify(run.tools)\n }\n if (run.required_action) {\n metadata[`run_${run.id}_required_action`] = JSON.stringify(\n run.required_action,\n )\n } else {\n delete metadata[`run_${run.id}_required_action`]\n }\n metadata.openaiConversationId = thread.openaiConversationId as string\n thread.metadata = metadata\n await oai.conversations.update(thread.openaiConversationId as string, {\n metadata,\n })\n }\n\n await saveRun()\n\n if (stream) {\n const readableStream = new ReadableStream({\n start(controller) {\n controller.enqueue(`data: ${JSON.stringify({\n event: 'thread.run.completed',\n data: run,\n })}\\n\\n`)\n controller.close()\n },\n })\n return new Response(readableStream, {\n headers: { 'Content-Type': 'text/event-stream' },\n })\n }\n\n return new Response(JSON.stringify(run), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n}\n","import OpenAI from 'openai'\nimport { RunAdapterPartobClient } from '@/types'\nimport { post } from './post'\n\nexport const submitToolOutputs = ({\n openai,\n runAdapter,\n}: {\n openai: OpenAI\n runAdapter: RunAdapterPartobClient\n}) => ({\n post: post({ openai, runAdapter }),\n})\n","import OpenAI from 'openai'\nimport { assign } from 'radash'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\n\nexport const get = ({ openai }: { openai: OpenAI }) => async (\n urlString: string,\n): Promise<Response> => {\n const url = new URL(urlString)\n const [, threadId, runId] = url.pathname.match(new RegExp(stepsRegexp))!\n const oai = openai as any\n const conversation = await oai.conversations\n .retrieve(threadId)\n .catch(() => null)\n const metadata = (conversation?.metadata ?? {}) as Record<string, string>\n const stepsStr = metadata[`run_${runId}_steps`]\n const allSteps = stepsStr ? JSON.parse(stepsStr) : []\n\n const { limit, order, after } = assign(\n { limit: '20', order: 'desc' },\n Object.fromEntries(url.searchParams),\n )\n const pageSize = parseInt(limit, 10)\n let steps = allSteps.sort((a: any, b: any) =>\n order === 'asc' ? a.created_at - b.created_at : b.created_at - a.created_at,\n )\n if (after) {\n const idx = steps.findIndex((s: any) => s.id === after)\n if (idx >= 0) steps = steps.slice(idx + 1)\n }\n const page = steps.slice(0, pageSize)\n return new Response(\n JSON.stringify({\n data: page,\n has_more: steps.length > pageSize,\n last_id: page.at(-1)?.id ?? null,\n }),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n },\n )\n}\n\n","import OpenAI from 'openai'\nimport { get } from './get'\n\nexport const steps = ({ openai }: { openai: OpenAI }) => ({\n get: get({ openai }),\n})\n\n","import OpenAI from 'openai'\nimport { StorageAdapterArgs } 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 { submitToolOutputs } from './threads/runs/submitToolOutputs'\nimport { steps } from './threads/runs/steps'\n\nexport const openaiResponsesStorageAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({ runAdapter }: StorageAdapterArgs) => ({\n requestHandlers: {\n '^/(?:v1|/?openai)/threads$': threads({ openai }),\n [messagesRegexp]: messages({ openai }),\n [runsRegexp]: runs({ openai, runAdapter }),\n [runRegexp]: run({ openai }),\n [submitToolOutputsRegexp]: submitToolOutputs({ openai, runAdapter }),\n [stepsRegexp]: steps({ openai }),\n },\n})\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['create']>\n}\n\nexport const post =\n ({ prisma }: { prisma: PrismaClient }) =>\n async (\n ...args: Parameters<OpenAI.Beta.Threads['create']>\n ): Promise<ThreadCreateResponse> => {\n // @ts-ignore-next-line\n const body = JSON.parse(args[1].body)\n\n const messages = body.messages || []\n const metadata = body.metadata || {}\n const initialCreatedAt = dayjs()\n .subtract(messages.length, 'seconds')\n .format()\n\n const thread = await prisma.thread.create({\n data: {\n metadata: metadata as any,\n ...(metadata.assistantId ? ({\n assistant: {\n connect: {\n id: metadata.assistantId,\n },\n },\n }) : {}),\n messages: {\n create: messages.map(\n (\n message: OpenAI.Beta.ThreadCreateParams.Message,\n index: number,\n ) => ({\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 as any,\n metadata: message.metadata as any,\n createdAt: dayjs(initialCreatedAt).add(index, 'seconds').toDate(),\n }),\n ) as any,\n },\n } as any,\n })\n\n return new Response(JSON.stringify(serializeThread({ thread })), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n","import dayjs from 'dayjs'\nimport type { ThreadWithConversationId } from '@/types'\n\ntype PrismaThread = {\n id: string\n createdAt: Date\n metadata: any\n openaiConversationId?: string | null\n}\n\nexport const serializeThread = ({\n thread,\n}: {\n thread: PrismaThread\n}): ThreadWithConversationId => ({\n id: thread.id,\n object: 'thread' as 'thread',\n created_at: dayjs(thread.createdAt).unix(),\n metadata: thread.metadata as any,\n openaiConversationId: thread.openaiConversationId ?? null,\n // TODO\n tool_resources: null,\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { post } from './post'\n\nexport const threads = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n post: post({ prisma }),\n}) as { post: (url: string, options: any) => Promise<Response> }\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<ReturnType<OpenAI.Beta.Threads.Messages['create']>>\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: any): 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 }) as any,\n role: role === 'user' ? 'USER' : 'ASSISTANT',\n metadata: (metadata || {}) as any,\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","import dayjs from 'dayjs'\nimport type OpenAI from 'openai'\nimport { assign } from 'radash'\n\nexport interface PrismaMessage {\n id: string\n threadId: string\n createdAt: Date\n completedAt: Date | null\n incompleteAt: Date | null\n incompleteDetails: unknown\n role: string\n content: unknown\n assistantId: string | null\n runId: string | null\n attachments: unknown\n status: string\n metadata: unknown\n toolCalls?: unknown\n}\n\nexport const serializeMessage = ({\n message,\n}: {\n message: PrismaMessage\n}) => ({\n id: message.id,\n object: 'thread.message' as const,\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 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:\n message.attachments as OpenAI.Beta.Threads.Messages.Message.Attachment[] | null,\n status: message.status.toLowerCase() as OpenAI.Beta.Threads.Messages.Message['status'],\n metadata: assign(\n (message.metadata as Record<string, unknown>) ?? {},\n message.toolCalls ? { toolCalls: message.toolCalls } : {},\n ) as any,\n})\n","import type OpenAI from 'openai'\n// @ts-ignore-next-line\nimport type { PrismaClient } from '@prisma/client'\nimport { assign, last } from 'radash'\nimport { messagesRegexp } from '@/lib/messages/messagesRegexp'\nimport { serializeMessage, PrismaMessage } 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 as unknown as 'asc' | 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n })) as PrismaMessage[]\n\n const messages = messagesPlusOne.slice(0, pageSize)\n\n return new Response(JSON.stringify({\n data: messages.map((message: PrismaMessage) => 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'\n\nexport const messages = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n post: post({ prisma }),\n get: get({ prisma }),\n})\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { assign } from 'radash'\nimport { runsRegexp } from '@/lib/runs/runsRegexp'\nimport { serializeRun, PrismaRun } 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: PrismaRun[] = await prisma.run.findMany({\n where: { threadId },\n take: pageSize + 1,\n orderBy: { createdAt: order as 'asc' | 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n })\n\n const runs = runsPlusOne.slice(0, pageSize)\n\n return new Response(\n JSON.stringify({\n data: runs.map((run: PrismaRun) => serializeRun({ run })),\n has_more: runsPlusOne.length > pageSize,\n last_id: runs.at(-1)?.id ?? null,\n }),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n },\n )\n}\n","import type OpenAI from 'openai'\nimport dayjs from 'dayjs'\n\nexport interface PrismaRun {\n id: string\n threadId: string\n assistantId: string\n createdAt: Date\n status: string\n requiredAction: unknown\n lastError: unknown\n expiresAt: number\n startedAt: number | null\n cancelledAt: number | null\n failedAt: number | null\n completedAt: number | null\n model: string\n instructions: string\n tools: unknown[]\n metadata: unknown\n usage: unknown\n}\n\nexport const serializeRun = ({\n run,\n}: {\n run: PrismaRun\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.AssistantTool[],\n metadata: run.metadata as Record<string, unknown> | null,\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 parallel_tool_calls: true,\n} as OpenAI.Beta.Threads.Run)\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, RunForMessages } from './getMessages'\nimport { getThread } from './getThread'\n\ntype RunCreateResponse = Response & {\n json: () => Promise<ReturnType<OpenAI.Beta.Threads.Runs['create']>>\n}\n\nexport const post = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => async (urlString: string, options: any): 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({ where: { id: assistant_id } })\n\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy,\n } = assign(\n {\n model: assistant?.model || 'gpt-4o-mini',\n instructions: assistant?.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 body,\n )\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: run as unknown as RunForMessages,\n }),\n getThread: getThread({ prisma, threadId }),\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 = async ({\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 const runRecord = await 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 any,\n },\n })\n\n return runRecord\n }\n","import type OpenAI from 'openai'\nimport { RunStatus } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\nexport const threadRunCompleted = async ({\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 const runRecord = await prisma.run.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: RunStatus.COMPLETED,\n requiredAction: undefined,\n },\n })\n\n return runRecord\n }\n","import type OpenAI from 'openai'\nimport type { PrismaClient } from '@prisma/client'\nimport { RunStatus } from '@/types/prisma'\n\nexport const threadRunRequiresAction = async ({\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 const runRecord = await 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 any,\n },\n })\n\n return runRecord\n }\n","import dayjs from 'dayjs'\nimport type OpenAI from 'openai'\n\nexport interface PrismaRunStep {\n id: string\n threadId: string\n assistantId: string\n runId: string\n type: string\n status: string\n stepDetails: unknown\n lastError: unknown\n expiredAt: number | null\n cancelledAt: number | null\n failedAt: number | null\n completedAt: number | null\n metadata: unknown\n usage: unknown\n createdAt: Date\n}\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: PrismaRunStep\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 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 as Record<string, unknown> | null,\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 as any,\n completedAt: event.data.completed_at,\n },\n })\n\n const serializedRunStep = serializeRunStep({ runStep })\n\n controller.enqueue({\n ...event,\n data: serializedRunStep as any,\n })\n\n return serializedRunStep as any\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 any,\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 type { ChatCompletionMessageToolCall } from 'openai/resources/chat/completions'\nimport { MessageStatus, RunStepType } from '@/types/prisma'\nimport type { PrismaClient } from '@prisma/client'\n\ntype MessageWithToolCalls = OpenAI.Beta.Threads.Messages.Message & {\n tool_calls?: ChatCompletionMessageToolCall[]\n}\n\nexport const threadMessageCompleted = async ({\n prisma,\n event,\n controller,\n}: {\n prisma: PrismaClient\n event: OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted\n controller: ReadableStreamDefaultController<OpenAI.Beta.AssistantStreamEvent.ThreadMessageCompleted>\n}) => {\n controller.enqueue(event)\n\n const data = event.data as MessageWithToolCalls\n\n if (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: data.tool_calls,\n } as any,\n },\n })\n }\n\n return prisma.message.update({\n where: {\n id: event.data.id,\n },\n data: {\n status: MessageStatus.COMPLETED,\n ...(data.content ? { content: data.content as any } : {}),\n ...(data.tool_calls ? { toolCalls: data.tool_calls as any } : {}),\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, PrismaMessage } from '../messages/serializeMessage'\nimport { serializeRunStep, PrismaRunStep } from './steps/serializeRunStep'\nimport { serializeRun, PrismaRun } from './serializeRun'\nimport type { MessageWithRun as OpenAIMessageWithRun } from '@/types'\n\nexport interface RunForMessages {\n threadId: string\n truncationStrategy: {\n type: string\n last_messages?: number\n }\n}\n\nconst getTake = ({ run }: { run: RunForMessages }) => {\n if (run.truncationStrategy.type === 'auto') {\n return null\n }\n\n if (run.truncationStrategy.type === 'last_messages') {\n if (!run.truncationStrategy.last_messages) {\n throw new Error('Truncation strategy last_messages is required')\n }\n\n return -run.truncationStrategy.last_messages\n }\n\n throw new Error(\n `Unsupported truncation strategy type: ${run.truncationStrategy.type}`,\n )\n}\n\nexport const getMessages = ({\n prisma,\n run,\n}: {\n prisma: PrismaClient\n run: RunForMessages\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 })) as Array<\n PrismaMessage & { run: (PrismaRun & { runSteps: PrismaRunStep[] }) | null }\n >\n\n return messages.map((message) => ({\n ...serializeMessage({ message }),\n run: message.run\n ? {\n ...serializeRun({ run: message.run }),\n runSteps: message.run.runSteps.map((runStep: PrismaRunStep) =>\n serializeRunStep({ runStep }),\n ),\n }\n : null,\n })) as OpenAIMessageWithRun[]\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { serializeThread } from '../serializeThread'\nimport type { ThreadWithConversationId } from '@/types'\n\nexport const getThread = ({\n prisma,\n threadId,\n}: {\n prisma: PrismaClient\n threadId: string\n}) =>\n async (): Promise<ThreadWithConversationId | null> => {\n const thread = await prisma.thread.findUnique({\n where: { id: threadId },\n })\n\n return thread ? serializeThread({ thread }) : null\n }\n","import type { PrismaClient } from '@prisma/client'\nimport type { RunAdapterPartobClient } from '@/types'\nimport { get } from './get'\nimport { post } from './post'\n\nexport const runs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapterPartobClient\n}) => ({\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: run as any })\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'\n\nexport const run = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\n}) => ({\n get: get({ prisma }),\n // post: post({ prisma, runAdapter }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { assign } from 'radash'\nimport { stepsRegexp } from '@/lib/steps/stepsRegexp'\nimport { serializeRunStep, PrismaRunStep } 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: PrismaRunStep[] = await prisma.runStep.findMany({\n where: { threadId, runId },\n take: pageSize + 1,\n orderBy: { createdAt: order as 'asc' | 'desc' },\n ...(after && {\n skip: 1,\n cursor: { id: after },\n }),\n })\n\n const runSteps = runStepsPlusOne.slice(0, pageSize)\n\n return new Response(\n JSON.stringify({\n data: runSteps.map((runStep: PrismaRunStep) => serializeRunStep({ runStep })),\n has_more: runStepsPlusOne.length > pageSize,\n last_id: runSteps.at(-1)?.id ?? null,\n }),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n },\n )\n}\n","import type { PrismaClient } from '@prisma/client'\nimport { get } from './get'\n\nexport const steps = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) => ({\n get: get({ prisma }),\n})\n","import { PrismaClient, Prisma } 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: Prisma.TransactionClient) => {\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, RunForMessages } from '../../getMessages'\nimport { serializeRunStep } from '../../steps/serializeRunStep'\nimport { updateRun } from './updateRun'\nimport { getThread } from '../../getThread'\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({\n prisma,\n run: run as unknown as RunForMessages,\n }),\n getThread: getThread({ prisma, threadId }),\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({\n prisma,\n run: run as unknown as RunForMessages,\n }),\n getThread: getThread({ prisma, threadId }),\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'\n\nexport const submitToolOutputs = ({\n prisma,\n runAdapter,\n}: {\n prisma: PrismaClient\n runAdapter: RunAdapter\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'\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: { 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'\n\nexport const assistants = ({ prisma }: { prisma: PrismaClient }) => ({\n post: post({ prisma }),\n})\n","import type { PrismaClient } from '@prisma/client'\nimport { StorageAdapterArgs } 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\nexport const prismaStorageAdapter = ({\n prisma,\n}: {\n prisma: PrismaClient\n}) =>\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 }) as { requestHandlers: Record<string, any> }\n"]}
|