supercompat 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/domas/Developer/supercorp/supercompat/packages/supercompat/dist/index.js","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/completions/post.ts","../src/adapters/client/groqClientAdapter/completions/index.ts","../src/adapters/client/groqClientAdapter/index.ts","../src/adapters/client/openaiClientAdapter/completions/post.ts","../src/adapters/client/openaiClientAdapter/completions/index.ts","../src/adapters/client/openaiClientAdapter/index.ts","../src/adapters/client/azureOpenaiClientAdapter/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/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/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/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/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/post.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":["OpenAI","AzureOpenAI","assign","partob","storageRequestHandlers","storage","runAdapter","client","result","requestHandlers","findRequestHandler","url","pathname","URL","key","regex","RegExp","test","originalFetch","args","fetch","options","headers","authorization","defaultHeaders","Authorization","supercompatFetch","pathHandler","requestHandler","method","endpointFromBaseUrl","baseURL","replace","supercompat","type","apiKey","apiVersion","endpoint","post","groq","_url","body","response","stream","data","error","JSON","parse","chat","completions","create","ReadableStream","start","controller","chunk","enqueue","stringify","close","Response","status","groqClientAdapter","openai","openaiClientAdapter","azureOpenaiClientAdapter","azureOpenai","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","map","serializeMessage","message","tool_call_id","toolCallId","serializeBody","messages","mistral","serializedBody","serializedChunk","complete","mistralClientAdapter","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","role","content","includes","perplexity","perplexityClientAdapter","uid","fork","omit","isEmpty","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","name","function","description","input_schema","parameters","text","toolCall","id","input","arguments","tool_use_id","serializeMessages","anthropic","systemMessages","otherMessages","system","chatMessages","resultOptions","join","max_tokens","messageDelta","partial_json","object","content_block","anthropicClientAdapter","_","dayjs","flat","serializeToolCall","output","serializeMessageWithContent","serializeContent","metadata","value","run","messageToolCalls","tc","runStep","runSteps","find","rs","step_details","some","rsTc","getMessages","instructions","updatedToolCall","cloneDeep","Object","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","completionsRunAdapter","clientAdapter","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","model","response_format","console","failed_at","unix","last_error","code","cause","completed_at","run_id","created_at","assistant_id","incomplete_at","incomplete_details","attachments","thread_id","annotations","expired_at","cancelled_at","usage","message_creation","message_id","required_action","submit_tool_outputs","messagesRegexp","runsRegexp","runRegexp","submitToolOutputsRegexp","stepsRegexp","serializeThread","thread","createdAt","tool_resources","prisma","initialCreatedAt","subtract","length","format","assistantId","assistant","connect","add","toDate","threads","threadId","completedAt","incompleteAt","incompleteDetails","toLowerCase","runId","messageContentBlocks","urlString","match","last","get","limit","order","after","fromEntries","searchParams","findMany","where","take","parseInt","orderBy","skip","cursor","hasNextPage","last_id","serializeRun","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","runs","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","stepDetails","expiredAt","Error","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","truncationStrategy","last_messages","include","readableStream","findUnique","modelSlug","additional_instructions","responseFormat","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","completedRunStep","toolOutput","dir","depth","Promise","resolve","submitToolOutputs","prismaStorageAdapter"],"mappings":"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","sourcesContent":["// src/supercompat.ts\nimport OpenAI, { AzureOpenAI } from \"openai\";\n\n// src/supercompatFetch/requestHandlers.ts\nimport { assign, partob } from \"radash\";\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const result = storage({ runAdapter: partob(runAdapter, { client }) });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client\n })\n);\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({\n url,\n requestHandlers: requestHandlers2\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers2) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers2[key];\n }\n }\n};\n\n// src/supercompatFetch/originalFetch.ts\nvar originalFetch = ({\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 requestHandler = pathHandler[options?.method];\n if (!requestHandler) {\n return originalFetch({\n client,\n args\n });\n }\n return requestHandler(...args);\n };\n};\n\n// src/lib/azureOpenai/endpointFromBaseUrl.ts\nvar endpointFromBaseUrl = ({\n baseURL\n}) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({\n client,\n storage,\n runAdapter\n}) => {\n if (client.type === \"AZURE_OPENAI\") {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n }\n return new OpenAI({\n apiKey: \"SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY\",\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n};\n\n// src/adapters/client/groqClientAdapter/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/chat/completions$\": completions({ groq })\n }\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar post2 = ({\n openai\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await openai.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 openai.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/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|/?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/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/chat/completions$\": completions3({ mistral })\n }\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/chat/completions$\": completions4({ perplexity })\n }\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nimport { uid, fork, omit, isEmpty as isEmpty2 } from \"radash\";\n\n// src/lib/messages/nonEmptyMessages.ts\nimport { isEmpty } from \"radash\";\nvar nonEmptyMessages = ({\n messages: messages3\n}) => {\n const result = [];\n messages3.forEach((message) => result.push({\n ...message,\n content: isEmpty(message.content) ? \"-\" : message.content\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] = 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 ...omit(body, [\"response_format\"]),\n stream: body.stream ? isEmpty2(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools\n })\n };\n if (body.stream) {\n const response = await anthropic.messages.stream(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === \"content_block_delta\") {\n const delta = chunk.delta.type === \"input_json_delta\" ? {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json\n }\n }\n ]\n } : {\n content: chunk.delta.text\n };\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n const delta = chunk.content_block.type === \"tool_use\" ? {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: \"function\",\n function: {\n name: chunk.content_block.name,\n arguments: \"\"\n }\n }\n ]\n } : {\n content: chunk.content_block.text\n };\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"message_start\") {\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: 0,\n delta: {\n content: \"\"\n }\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n }\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await anthropic.messages.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/index.ts\nvar completions5 = ({\n anthropic\n}) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({\n anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n \"^/v1/chat/completions$\": completions5({ anthropic })\n }\n});\n\n// src/adapters/run/completionsRunAdapter/index.ts\nimport _ from \"lodash\";\nimport { uid as uid2, omit as omit2, isEmpty as isEmpty3 } from \"radash\";\nimport dayjs from \"dayjs\";\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nimport { flat } from \"radash\";\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\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 ...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 omit2(delta, [\"index\"]);\n const result = _.cloneDeep(toolCall);\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? \"\"}${value}`;\n }\n return result;\n};\nvar toolCallsData = ({\n prevToolCalls,\n delta\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: uid2(24),\n type: \"function\",\n ...omit2(tc, [\"index\"])\n }));\n }\n const newToolCalls = _.cloneDeep(prevToolCalls);\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta\n });\n }\n return newToolCalls;\n};\nvar completionsRunAdapter = () => async ({\n client: clientAdapter,\n run: 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 ...isEmpty3(run2.tools) ? {} : { tools: run2.tools }\n };\n let providerResponse;\n try {\n providerResponse = await client.chat.completions.create(opts);\n } catch (e) {\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run2,\n failed_at: dayjs().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n let message = await onEvent2({\n event: \"thread.message.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.message\",\n completed_at: null,\n run_id: run2.id,\n created_at: dayjs().unix(),\n assistant_id: run2.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run2.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: dayjs().unix(),\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"message_creation\",\n message_creation: {\n message_id: message.id\n }\n }\n }\n });\n let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls;\n for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? [];\n const choice = choices[0];\n if (!choice) continue;\n const delta = choice.delta;\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? \"\"}`;\n }\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"tool_calls\",\n tool_calls: []\n }\n }\n });\n }\n onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: delta.tool_calls.map((tc) => ({\n id: uid2(24),\n type: \"function\",\n ...tc\n }))\n }\n }\n }\n });\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\n }\n if (delta.content) {\n onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: \"text\",\n index: 0,\n text: {\n value: delta.content\n }\n }\n ]\n }\n }\n });\n }\n }\n message = await onEvent2({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [{ text: { value: currentContent, annotations: [] }, type: \"text\" }],\n tool_calls: currentToolCalls\n }\n });\n if (isEmpty3(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run2,\n status: \"completed\",\n completed_at: dayjs().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run2,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: message.toolCalls\n }\n }\n }\n });\n};\n\n// src/lib/messages/messagesRegexp.ts\nvar messagesRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/messages$\";\n\n// src/lib/runs/runsRegexp.ts\nvar runsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs$\";\n\n// src/lib/runs/runRegexp.ts\nvar runRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)$\";\n\n// src/lib/runs/submitToolOutputsRegexp.ts\nvar submitToolOutputsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/submit_tool_outputs$\";\n\n// src/lib/steps/stepsRegexp.ts\nvar stepsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/steps$\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nimport dayjs3 from \"dayjs\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nimport dayjs2 from \"dayjs\";\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: dayjs2(thread.createdAt).unix(),\n metadata: thread.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar post6 = ({\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 = dayjs3().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: dayjs3(initialCreatedAt).add(index, \"seconds\").toDate()\n }))\n }\n }\n });\n return new Response(JSON.stringify(\n serializeThread({ thread })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/index.ts\nvar threads = ({\n prisma\n}) => ({\n post: post6({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nimport dayjs4 from \"dayjs\";\nimport { assign as assign2 } from \"radash\";\nvar serializeMessage4 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: dayjs4(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs4(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs4(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails,\n role: message.role.toLowerCase(),\n content: message.content,\n assistant_id: message.assistantId,\n run_id: message.runId,\n attachments: message.attachments,\n status: message.status.toLowerCase(),\n metadata: assign2(message.metadata ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {})\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({\n content\n}) => [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: []\n }\n }\n];\nvar post7 = ({\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 } = body;\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === \"user\" ? \"USER\" : \"ASSISTANT\"\n }\n });\n return new Response(JSON.stringify(\n serializeMessage4({ message })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nimport { assign as assign3, last } from \"radash\";\nvar get = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = assign3({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const messages3 = await prisma.message.findMany({\n where: {\n threadId\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order\n },\n ...after ? {\n skip: 1,\n cursor: {\n id: after\n }\n } : {}\n });\n return new Response(JSON.stringify({\n data: messages3.map((message) => serializeMessage4({ message })),\n hasNextPage: () => messages3.length === parseInt(limit),\n body: {\n last_id: last(messages3)?.id ?? null\n }\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: post7({ prisma }),\n get: get({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nimport { assign as assign4, last as last2 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nimport dayjs5 from \"dayjs\";\nvar serializeRun = ({\n run: run2\n}) => ({\n id: run2.id,\n object: \"thread.run\",\n created_at: dayjs5(run2.createdAt).unix(),\n thread_id: run2.threadId,\n assistant_id: run2.assistantId,\n status: run2.status.toLowerCase(),\n required_action: run2.requiredAction,\n last_error: run2.lastError,\n expires_at: dayjs5(run2.expiresAt).unix(),\n started_at: run2.startedAt ? dayjs5(run2.startedAt).unix() : null,\n cancelled_at: run2.cancelledAt ? dayjs5(run2.cancelledAt).unix() : null,\n failed_at: run2.failedAt ? dayjs5(run2.failedAt).unix() : null,\n completed_at: run2.completedAt ? dayjs5(run2.completedAt).unix() : null,\n model: run2.model,\n instructions: run2.instructions,\n tools: run2.tools,\n metadata: run2.metadata,\n usage: run2.usage,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: \"auto\",\n parallel_tool_calls: true\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar get2 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const {\n limit,\n order,\n after\n } = assign4({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const runs2 = await prisma.run.findMany({\n where: {\n threadId\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order\n },\n ...after ? {\n skip: 1,\n cursor: {\n id: after\n }\n } : {}\n });\n return new Response(JSON.stringify({\n data: runs2.map((run2) => serializeRun({ run: run2 })),\n hasNextPage: () => runs2.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last2(runs2)?.id ?? null\n }\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nimport dayjs7 from \"dayjs\";\nimport { assign as assign5 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"IN_PROGRESS\" /* IN_PROGRESS */\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"FAILED\" /* FAILED */,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts\nvar threadRunCompleted = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n requiredAction: void 0\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts\nvar threadRunRequiresAction = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"REQUIRES_ACTION\" /* REQUIRES_ACTION */,\n requiredAction: event.data.required_action\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nimport dayjs6 from \"dayjs\";\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: dayjs6(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase(),\n status: runStep.status.toLowerCase(),\n // @ts-ignore-next-line\n step_details: runStep.stepDetails,\n last_error: runStep.lastError,\n expired_at: runStep.expiredAt ? dayjs6(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs6(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs6(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs6(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts\nvar type = (event) => {\n if (event.data.type === \"message_creation\") return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\") return \"TOOL_CALLS\" /* TOOL_CALLS */;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nvar status = (event) => {\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\") return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\") return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\") return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at\n }\n });\n const serializedRunStep = serializeRunStep({ runStep });\n controller.enqueue({\n ...event,\n data: serializedRunStep\n });\n return serializedRunStep;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts\nvar threadRunStepDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\") return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content,\n role: event.data.role === \"assistant\" ? \"ASSISTANT\" : \"USER\",\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status2(event)\n }\n });\n const serializedMessage = serializeMessage4({ message });\n controller.enqueue({\n ...event,\n data: serializedMessage\n });\n return serializedMessage;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts\nvar threadMessageDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts\nvar threadMessageCompleted = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: \"TOOL_CALLS\" /* TOOL_CALLS */\n },\n orderBy: {\n createdAt: \"desc\"\n }\n });\n if (!latestRunStep) {\n throw new Error(\"No run step found\");\n }\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id\n },\n data: {\n stepDetails: {\n type: \"tool_calls\",\n tool_calls: event.data.tool_calls\n }\n }\n });\n }\n return prisma.message.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n ...event.data.content ? { content: event.data.content } : {},\n ...event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/index.ts\nvar handlers = {\n \"thread.run.in_progress\": threadRunInProgress,\n \"thread.run.failed\": threadRunFailed,\n \"thread.run.completed\": threadRunCompleted,\n \"thread.run.requires_action\": threadRunRequiresAction,\n \"thread.run.step.created\": threadRunStepCreated,\n \"thread.run.step.delta\": threadRunStepDelta,\n \"thread.message.created\": threadMessageCreated,\n \"thread.message.delta\": threadMessageDelta,\n \"thread.message.completed\": threadMessageCompleted\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/index.ts\nvar onEvent = ({\n prisma,\n controller\n}) => (event) => {\n const handler = handlers[event.event];\n if (!handler) {\n console.log(\"No handler for event\", event);\n return;\n }\n return handler({ prisma, controller, event });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/getMessages.ts\nvar getTake = ({\n run: 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 post8 = ({\n prisma,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const body = JSON.parse(options.body);\n const { assistant_id, stream } = body;\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id\n }\n });\n if (!assistant) {\n throw new Error(\"Assistant not found\");\n }\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = assign5({\n model: assistant.modelSlug,\n instructions: \"\",\n additional_instructions: null,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n }\n // tools: [],\n // metadata: {},\n }, body);\n const run2 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: dayjs7().add(1, \"hour\").unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId\n }\n },\n assistant: {\n connect: {\n id: assistant_id\n }\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format\n }\n });\n const data = serializeRun({ run: run2 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter({\n run: data,\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({\n prisma,\n run: run2\n })\n });\n } catch (error) {\n console.error(error);\n onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n })({\n event: \"thread.run.failed\",\n data: {\n id: run2.id,\n failed_at: dayjs7().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n return new Response(JSON.stringify(\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: get2({ prisma }),\n post: post8({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get3 = ({\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: get3({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nimport { assign as assign6, last as last3 } from \"radash\";\nvar get4 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, , runId] = url.pathname.match(new RegExp(stepsRegexp));\n const {\n limit,\n order,\n after\n } = assign6({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order\n },\n ...after ? {\n skip: 1,\n cursor: {\n id: after\n }\n } : {}\n });\n return new Response(JSON.stringify({\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n hasNextPage: () => runSteps.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last3(runSteps)?.id ?? null\n }\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts\nvar steps = ({\n prisma\n}) => ({\n get: get4({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nimport dayjs8 from \"dayjs\";\nvar updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {\n },\n tool_outputs\n}) => prisma.$transaction(async (prisma2) => {\n const runSteps = await prisma2.runStep.findMany({\n where: {\n threadId,\n runId,\n type: \"TOOL_CALLS\",\n status: \"IN_PROGRESS\"\n },\n orderBy: {\n createdAt: \"asc\"\n }\n });\n for (const runStep of runSteps) {\n const completedRunStep = await prisma2.runStep.update({\n where: {\n id: runStep.id\n },\n data: {\n status: \"COMPLETED\",\n completedAt: dayjs8().unix(),\n stepDetails: {\n type: \"tool_calls\",\n // @ts-ignore-next-line\n tool_calls: runStep.stepDetails.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0];\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null });\n throw new Error(\"Tool output not found\");\n }\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output\n }\n };\n })\n }\n }\n });\n onThreadRunStepCompleted({\n runStep: completedRunStep\n });\n }\n return prisma2.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar post9 = ({\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: post9({\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});\nexport {\n anthropicClientAdapter,\n azureOpenaiClientAdapter,\n completionsRunAdapter,\n groqClientAdapter,\n mistralClientAdapter,\n openaiClientAdapter,\n perplexityClientAdapter,\n prismaStorageAdapter,\n supercompat\n};\n","import OpenAI, { AzureOpenAI } from 'openai'\nimport { supercompatFetch, type Args } from './supercompatFetch'\nimport { endpointFromBaseUrl } from '@/lib/azureOpenai/endpointFromBaseUrl'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n if (client.type === 'AZURE_OPENAI') {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n }\n\n return new OpenAI({\n apiKey: 'SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY',\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n}\n","import { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nconst storageRequestHandlers = ({\n storage,\n runAdapter,\n client,\n}: {\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n client: any\n}) => {\n if (!storage) return {}\n if (!runAdapter) return {}\n\n const result = storage({ runAdapter: partob(runAdapter, { client }) })\n return result.requestHandlers\n}\n\nexport const requestHandlers = ({\n client,\n storage,\n runAdapter,\n}: {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}) => (\n assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client,\n })\n )\n)\n","export const findRequestHandler = ({\n url,\n requestHandlers,\n}: {\n url: string\n requestHandlers: any\n}) => {\n const pathname = new URL(url).pathname\n\n for (const key in requestHandlers) {\n const regex = new RegExp(key)\n\n if (regex.test(pathname)) {\n return requestHandlers[key]\n }\n }\n}\n","export const originalFetch = ({\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 requestHandler = pathHandler[options?.method]\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 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 { completions } from './completions'\n\nexport const groqClientAdapter = ({\n groq,\n}: {\n // TODO\n groq: any\n}) => ({\n client: groq,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ groq }),\n },\n})\n","import type OpenAI from 'openai'\n\nexport const post = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await openai.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 openai.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 openai,\n}: {\n openai: OpenAI\n}) => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { completions } from './completions'\n\nexport const openaiClientAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n client: openai,\n requestHandlers: {\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","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 { completions } from './completions'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ mistral }),\n },\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 { completions } from './completions'\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n client: perplexity,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ perplexity }),\n },\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'\nimport { isEmpty } from 'radash'\n\nexport const nonEmptyMessages = ({\n messages,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n}) => {\n const result = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam) => (\n result.push({\n ...message,\n content: isEmpty(message.content) ? '-' : message.content as string,\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 { completions } from './completions'\n\nexport const anthropicClientAdapter = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ anthropic }),\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","// @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'\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\n}) => ([\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\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 } = body\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === 'user' ? 'USER' : 'ASSISTANT',\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 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 messages = await prisma.message.findMany({\n where: {\n threadId,\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order,\n },\n ...(after ? {\n skip: 1,\n cursor: {\n id: after,\n },\n }: {}),\n }) as Message[]\n\n return new Response(JSON.stringify({\n data: messages.map((message: Message) => (\n serializeMessage({ message })\n )),\n hasNextPage: () => messages.length === parseInt(limit),\n body: {\n last_id: last(messages)?.id ?? null,\n },\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 runs = await prisma.run.findMany({\n where: {\n threadId,\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order,\n },\n ...(after ? {\n skip: 1,\n cursor: {\n id: after,\n },\n }: {}),\n })\n\n return new Response(JSON.stringify({\n data: runs.map((run: Run) => (\n serializeRun({ run })\n )),\n hasNextPage: () => runs.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last(runs)?.id ?? null,\n },\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import type OpenAI from 'openai'\n// @ts-ignore-next-line\nimport type { Run } from '@prisma/client'\nimport dayjs from 'dayjs'\n\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 runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order,\n },\n ...(after ? {\n skip: 1,\n cursor: {\n id: after,\n },\n }: {}),\n })\n\n return new Response(JSON.stringify({\n data: runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n hasNextPage: () => runSteps.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last(runSteps)?.id ?? null,\n },\n }), {\n status: 200,\n headers: {\n '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 } 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.js","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/models/get.ts","../src/adapters/client/groqClientAdapter/models/index.ts","../src/adapters/client/groqClientAdapter/completions/post.ts","../src/adapters/client/groqClientAdapter/completions/index.ts","../src/adapters/client/groqClientAdapter/index.ts","../src/adapters/client/openaiClientAdapter/completions/post.ts","../src/adapters/client/openaiClientAdapter/completions/index.ts","../src/adapters/client/openaiClientAdapter/index.ts","../src/adapters/client/azureOpenaiClientAdapter/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/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/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/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/serializeMessage.ts","../src/adapters/storage/prismaStorageAdapter/threads/messages/post.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":["OpenAI","AzureOpenAI","assign","partob","storageRequestHandlers","storage","runAdapter","client","result","requestHandlers","findRequestHandler","url","pathname","URL","key","regex","RegExp","test","originalFetch","args","fetch","options","headers","authorization","defaultHeaders","Authorization","supercompatFetch","pathHandler","requestHandler","method","endpointFromBaseUrl","baseURL","replace","supercompat","type","apiKey","apiVersion","endpoint","get","groq","_url","_options","data","error","models","list","Response","JSON","stringify","status","post","body","response","stream","parse","chat","completions","create","ReadableStream","start","controller","chunk","enqueue","close","groqClientAdapter","openai","console","dir","depth","openaiClientAdapter","azureOpenaiClientAdapter","azureOpenai","serializeDelta","delta","toolCalls","rest","tool_calls","serializeChoice","choice","finishReason","finish_reason","serializeChunk","choices","map","serializeMessage","message","tool_call_id","toolCallId","serializeBody","messages","mistral","serializedBody","serializedChunk","complete","mistralClientAdapter","agentSideRoles","alternatingMessages","forEach","index","push","nextMessage","role","content","includes","perplexity","perplexityClientAdapter","uid","fork","omit","isEmpty","nonEmptyMessages","firstUserMessages","firstMessage","serializeTools","tools","tool","name","function","description","input_schema","parameters","text","toolCall","id","input","arguments","tool_use_id","serializeMessages","anthropic","systemMessages","otherMessages","system","chatMessages","resultOptions","join","max_tokens","messageDelta","partial_json","object","content_block","anthropicClientAdapter","_","dayjs","flat","serializeToolCall","output","serializeMessageWithContent","serializeContent","metadata","value","run","messageToolCalls","tc","runStep","runSteps","find","rs","step_details","some","rsTc","getMessages","instructions","updatedToolCall","cloneDeep","Object","entries","toolCallsData","prevToolCalls","newToolCalls","runStepDelta","completionsRunAdapter","clientAdapter","onEvent","opts","providerResponse","e","toolCallsRunStep","currentContent","currentToolCalls","event","model","response_format","failed_at","unix","last_error","code","cause","completed_at","run_id","created_at","assistant_id","incomplete_at","incomplete_details","attachments","thread_id","annotations","expired_at","cancelled_at","usage","message_creation","message_id","required_action","submit_tool_outputs","messagesRegexp","runsRegexp","runRegexp","submitToolOutputsRegexp","stepsRegexp","serializeThread","thread","createdAt","tool_resources","prisma","initialCreatedAt","subtract","length","format","assistantId","assistant","connect","add","toDate","threads","threadId","completedAt","incompleteAt","incompleteDetails","toLowerCase","runId","messageContentBlocks","urlString","match","last","limit","order","after","fromEntries","searchParams","findMany","where","take","parseInt","orderBy","skip","cursor","hasNextPage","last_id","serializeRun","requiredAction","lastError","expires_at","expiresAt","started_at","startedAt","cancelledAt","failedAt","truncation_strategy","max_completion_tokens","max_prompt_tokens","tool_choice","parallel_tool_calls","runs","threadRunInProgress","update","threadRunFailed","threadRunCompleted","threadRunRequiresAction","serializeRunStep","stepDetails","expiredAt","Error","threadRunStepCreated","serializedRunStep","threadRunStepDelta","threadMessageCreated","serializedMessage","threadMessageDelta","threadMessageCompleted","latestRunStep","findFirst","handlers","handler","log","getTake","truncationStrategy","last_messages","include","readableStream","findUnique","modelSlug","additional_instructions","responseFormat","steps","updateRun","onThreadRunStepCompleted","tool_outputs","$transaction","completedRunStep","toolOutput","Promise","resolve","submitToolOutputs","prismaStorageAdapter"],"mappings":"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","sourcesContent":["// src/supercompat.ts\nimport OpenAI, { AzureOpenAI } from \"openai\";\n\n// src/supercompatFetch/requestHandlers.ts\nimport { assign, partob } from \"radash\";\nvar storageRequestHandlers = ({\n storage,\n runAdapter,\n client\n}) => {\n if (!storage) return {};\n if (!runAdapter) return {};\n const result = storage({ runAdapter: partob(runAdapter, { client }) });\n return result.requestHandlers;\n};\nvar requestHandlers = ({\n client,\n storage,\n runAdapter\n}) => assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client\n })\n);\n\n// src/supercompatFetch/findRequestHandler.ts\nvar findRequestHandler = ({\n url,\n requestHandlers: requestHandlers2\n}) => {\n const pathname = new URL(url).pathname;\n for (const key in requestHandlers2) {\n const regex = new RegExp(key);\n if (regex.test(pathname)) {\n return requestHandlers2[key];\n }\n }\n};\n\n// src/supercompatFetch/originalFetch.ts\nvar originalFetch = ({\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 requestHandler = pathHandler[options?.method];\n if (!requestHandler) {\n return originalFetch({\n client,\n args\n });\n }\n return requestHandler(...args);\n };\n};\n\n// src/lib/azureOpenai/endpointFromBaseUrl.ts\nvar endpointFromBaseUrl = ({\n baseURL\n}) => baseURL.replace(/\\/+openai$/, \"\");\n\n// src/supercompat.ts\nvar supercompat = ({\n client,\n storage,\n runAdapter\n}) => {\n if (client.type === \"AZURE_OPENAI\") {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n }\n return new OpenAI({\n apiKey: \"SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY\",\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter\n })\n });\n};\n\n// src/adapters/client/groqClientAdapter/models/get.ts\nvar get = ({\n groq\n}) => async (_url, _options) => {\n try {\n const data = await groq.models.list();\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n};\n\n// src/adapters/client/groqClientAdapter/models/index.ts\nvar models = ({\n groq\n}) => ({\n get: get({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/completions/post.ts\nvar post = ({\n groq\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await groq.chat.completions.create(body);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await groq.chat.completions.create(body);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/groqClientAdapter/completions/index.ts\nvar completions = ({\n groq\n}) => ({\n post: post({ groq })\n});\n\n// src/adapters/client/groqClientAdapter/index.ts\nvar groqClientAdapter = ({\n groq\n}) => ({\n client: groq,\n requestHandlers: {\n \"^/v1/models$\": models({ groq }),\n \"^/v1/chat/completions$\": completions({ groq })\n }\n});\n\n// src/adapters/client/openaiClientAdapter/completions/post.ts\nvar post2 = ({\n openai\n}) => async (_url, options) => {\n const body = JSON.parse(options.body);\n if (body.stream) {\n const response = await openai.chat.completions.create(body);\n console.dir({ response }, { depth: null });\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(body);\n console.dir({ data }, { depth: null });\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|/?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/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/chat/completions$\": completions3({ mistral })\n }\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/chat/completions$\": completions4({ perplexity })\n }\n});\n\n// src/adapters/client/anthropicClientAdapter/completions/post.ts\nimport { uid, fork, omit, isEmpty as isEmpty2 } from \"radash\";\n\n// src/lib/messages/nonEmptyMessages.ts\nimport { isEmpty } from \"radash\";\nvar nonEmptyMessages = ({\n messages: messages3\n}) => {\n const result = [];\n messages3.forEach((message) => result.push({\n ...message,\n content: isEmpty(message.content) ? \"-\" : message.content\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] = 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 ...omit(body, [\"response_format\"]),\n stream: body.stream ? isEmpty2(body.tools) : false,\n system,\n messages: serializeMessages({\n messages: chatMessages\n }),\n max_tokens: 4096,\n tools: serializeTools({\n tools: body.tools\n })\n };\n if (body.stream) {\n const response = await anthropic.messages.stream(resultOptions);\n const stream = new ReadableStream({\n async start(controller) {\n for await (const chunk of response) {\n if (chunk.type === \"content_block_delta\") {\n const delta = chunk.delta.type === \"input_json_delta\" ? {\n tool_calls: [\n {\n index: 0,\n function: {\n arguments: chunk.delta.partial_json\n }\n }\n ]\n } : {\n content: chunk.delta.text\n };\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"content_block_start\") {\n const delta = chunk.content_block.type === \"tool_use\" ? {\n content: null,\n tool_calls: [\n {\n index: 0,\n id: chunk.content_block.id,\n type: \"function\",\n function: {\n name: chunk.content_block.name,\n arguments: \"\"\n }\n }\n ]\n } : {\n content: chunk.content_block.text\n };\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: chunk.index,\n delta\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n } else if (chunk.type === \"message_start\") {\n const messageDelta = {\n id: `chatcmpl-${uid(29)}`,\n object: \"chat.completion.chunk\",\n choices: [\n {\n index: 0,\n delta: {\n content: \"\"\n }\n }\n ]\n };\n controller.enqueue(`data: ${JSON.stringify(messageDelta)}\n\n`);\n }\n }\n controller.close();\n }\n });\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n try {\n const data = await anthropic.messages.create(resultOptions);\n return new Response(JSON.stringify({\n data\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error\n }), {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n }\n};\n\n// src/adapters/client/anthropicClientAdapter/completions/index.ts\nvar completions5 = ({\n anthropic\n}) => ({\n post: post5({ anthropic })\n});\n\n// src/adapters/client/anthropicClientAdapter/index.ts\nvar anthropicClientAdapter = ({\n anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n \"^/v1/chat/completions$\": completions5({ anthropic })\n }\n});\n\n// src/adapters/run/completionsRunAdapter/index.ts\nimport _ from \"lodash\";\nimport { uid as uid2, omit as omit2, isEmpty as isEmpty3 } from \"radash\";\nimport dayjs from \"dayjs\";\n\n// src/adapters/run/completionsRunAdapter/messages/index.ts\nimport { flat } from \"radash\";\n\n// src/adapters/run/completionsRunAdapter/messages/serializeMessage.ts\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 ...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 omit2(delta, [\"index\"]);\n const result = _.cloneDeep(toolCall);\n for (const [key, value] of Object.entries(delta.function)) {\n result.function[key] = `${result.function[key] ?? \"\"}${value}`;\n }\n return result;\n};\nvar toolCallsData = ({\n prevToolCalls,\n delta\n}) => {\n if (!prevToolCalls) {\n return delta.tool_calls.map((tc) => ({\n id: uid2(24),\n type: \"function\",\n ...omit2(tc, [\"index\"])\n }));\n }\n const newToolCalls = _.cloneDeep(prevToolCalls);\n for (const runStepDelta of delta.tool_calls) {\n newToolCalls[runStepDelta.index] = updatedToolCall({\n toolCall: newToolCalls[runStepDelta.index],\n delta: runStepDelta\n });\n }\n return newToolCalls;\n};\nvar completionsRunAdapter = () => async ({\n client: clientAdapter,\n run: 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 ...isEmpty3(run2.tools) ? {} : { tools: run2.tools }\n };\n let providerResponse;\n try {\n providerResponse = await client.chat.completions.create(opts);\n } catch (e) {\n console.error(e);\n return onEvent2({\n event: \"thread.run.failed\",\n data: {\n ...run2,\n failed_at: dayjs().unix(),\n status: \"in_progress\",\n last_error: {\n code: \"server_error\",\n message: `${e?.message ?? \"\"} ${e?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n let message = await onEvent2({\n event: \"thread.message.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.message\",\n completed_at: null,\n run_id: run2.id,\n created_at: dayjs().unix(),\n assistant_id: run2.assistant_id,\n incomplete_at: null,\n incomplete_details: null,\n metadata: {},\n attachments: [],\n thread_id: run2.thread_id,\n content: [{ text: { value: \"\", annotations: [] }, type: \"text\" }],\n role: \"assistant\",\n status: \"in_progress\"\n }\n });\n onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"message_creation\",\n status: \"completed\",\n completed_at: dayjs().unix(),\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"message_creation\",\n message_creation: {\n message_id: message.id\n }\n }\n }\n });\n let toolCallsRunStep;\n let currentContent = \"\";\n let currentToolCalls;\n for await (const chunk of providerResponse) {\n const choices = chunk.choices ?? [];\n const choice = choices[0];\n if (!choice) continue;\n const delta = choice.delta;\n if (delta.content) {\n currentContent = `${currentContent}${delta.content ?? \"\"}`;\n }\n if (delta.tool_calls) {\n if (!toolCallsRunStep) {\n toolCallsRunStep = await onEvent2({\n event: \"thread.run.step.created\",\n data: {\n id: \"THERE_IS_A_BUG_IN_SUPERCOMPAT_IF_YOU_SEE_THIS_ID\",\n object: \"thread.run.step\",\n run_id: run2.id,\n assistant_id: run2.assistant_id,\n thread_id: run2.thread_id,\n type: \"tool_calls\",\n status: \"in_progress\",\n completed_at: null,\n created_at: dayjs().unix(),\n expired_at: null,\n last_error: null,\n metadata: {},\n failed_at: null,\n cancelled_at: null,\n usage: null,\n step_details: {\n type: \"tool_calls\",\n tool_calls: []\n }\n }\n });\n }\n onEvent2({\n event: \"thread.run.step.delta\",\n data: {\n object: \"thread.run.step.delta\",\n run_id: run2.id,\n id: toolCallsRunStep.id,\n delta: {\n step_details: {\n type: \"tool_calls\",\n tool_calls: delta.tool_calls.map((tc) => ({\n id: uid2(24),\n type: \"function\",\n ...tc\n }))\n }\n }\n }\n });\n currentToolCalls = toolCallsData({ prevToolCalls: currentToolCalls, delta });\n }\n if (delta.content) {\n onEvent2({\n event: \"thread.message.delta\",\n data: {\n id: message.id,\n delta: {\n content: [\n {\n type: \"text\",\n index: 0,\n text: {\n value: delta.content\n }\n }\n ]\n }\n }\n });\n }\n }\n message = await onEvent2({\n event: \"thread.message.completed\",\n data: {\n ...message,\n status: \"completed\",\n content: [{ text: { value: currentContent, annotations: [] }, type: \"text\" }],\n tool_calls: currentToolCalls\n }\n });\n if (isEmpty3(message.toolCalls)) {\n return onEvent2({\n event: \"thread.run.completed\",\n data: {\n ...run2,\n status: \"completed\",\n completed_at: dayjs().unix()\n }\n });\n }\n return onEvent2({\n event: \"thread.run.requires_action\",\n data: {\n ...run2,\n status: \"requires_action\",\n required_action: {\n type: \"submit_tool_outputs\",\n submit_tool_outputs: {\n tool_calls: message.toolCalls\n }\n }\n }\n });\n};\n\n// src/lib/messages/messagesRegexp.ts\nvar messagesRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/messages$\";\n\n// src/lib/runs/runsRegexp.ts\nvar runsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs$\";\n\n// src/lib/runs/runRegexp.ts\nvar runRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)$\";\n\n// src/lib/runs/submitToolOutputsRegexp.ts\nvar submitToolOutputsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/submit_tool_outputs$\";\n\n// src/lib/steps/stepsRegexp.ts\nvar stepsRegexp = \"^/(?:v1|/?openai)/threads/([^/]+)/runs/([^/]+)/steps$\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nimport dayjs3 from \"dayjs\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/serializeThread.ts\nimport dayjs2 from \"dayjs\";\nvar serializeThread = ({\n thread\n}) => ({\n id: thread.id,\n object: \"thread\",\n created_at: dayjs2(thread.createdAt).unix(),\n metadata: thread.metadata,\n // TODO\n tool_resources: null\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/post.ts\nvar post6 = ({\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 = dayjs3().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: dayjs3(initialCreatedAt).add(index, \"seconds\").toDate()\n }))\n }\n }\n });\n return new Response(JSON.stringify(\n serializeThread({ thread })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/index.ts\nvar threads = ({\n prisma\n}) => ({\n post: post6({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/serializeMessage.ts\nimport dayjs4 from \"dayjs\";\nimport { assign as assign2 } from \"radash\";\nvar serializeMessage4 = ({\n message\n}) => ({\n id: message.id,\n object: \"thread.message\",\n created_at: dayjs4(message.createdAt).unix(),\n thread_id: message.threadId,\n completed_at: message.completedAt ? dayjs4(message.completedAt).unix() : null,\n incomplete_at: message.incompleteAt ? dayjs4(message.incompleteAt).unix() : null,\n incomplete_details: message.incompleteDetails,\n role: message.role.toLowerCase(),\n content: message.content,\n assistant_id: message.assistantId,\n run_id: message.runId,\n attachments: message.attachments,\n status: message.status.toLowerCase(),\n metadata: assign2(message.metadata ?? {}, message.toolCalls ? { toolCalls: message.toolCalls } : {})\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/post.ts\nvar messageContentBlocks = ({\n content\n}) => [\n {\n type: \"text\",\n text: {\n value: content ?? \"\",\n annotations: []\n }\n }\n];\nvar post7 = ({\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 } = body;\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === \"user\" ? \"USER\" : \"ASSISTANT\"\n }\n });\n return new Response(JSON.stringify(\n serializeMessage4({ message })\n ), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/messages/get.ts\nimport { assign as assign3, last } from \"radash\";\nvar get2 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(messagesRegexp));\n const {\n limit,\n order,\n after\n } = assign3({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const messages3 = await prisma.message.findMany({\n where: {\n threadId\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order\n },\n ...after ? {\n skip: 1,\n cursor: {\n id: after\n }\n } : {}\n });\n return new Response(JSON.stringify({\n data: messages3.map((message) => serializeMessage4({ message })),\n hasNextPage: () => messages3.length === parseInt(limit),\n body: {\n last_id: last(messages3)?.id ?? null\n }\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: post7({ prisma }),\n get: get2({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nimport { assign as assign4, last as last2 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/serializeRun.ts\nimport dayjs5 from \"dayjs\";\nvar serializeRun = ({\n run: run2\n}) => ({\n id: run2.id,\n object: \"thread.run\",\n created_at: dayjs5(run2.createdAt).unix(),\n thread_id: run2.threadId,\n assistant_id: run2.assistantId,\n status: run2.status.toLowerCase(),\n required_action: run2.requiredAction,\n last_error: run2.lastError,\n expires_at: dayjs5(run2.expiresAt).unix(),\n started_at: run2.startedAt ? dayjs5(run2.startedAt).unix() : null,\n cancelled_at: run2.cancelledAt ? dayjs5(run2.cancelledAt).unix() : null,\n failed_at: run2.failedAt ? dayjs5(run2.failedAt).unix() : null,\n completed_at: run2.completedAt ? dayjs5(run2.completedAt).unix() : null,\n model: run2.model,\n instructions: run2.instructions,\n tools: run2.tools,\n metadata: run2.metadata,\n usage: run2.usage,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n },\n // TODO\n incomplete_details: null,\n max_completion_tokens: null,\n max_prompt_tokens: null,\n tool_choice: \"auto\",\n parallel_tool_calls: true\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/get.ts\nvar get3 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const {\n limit,\n order,\n after\n } = assign4({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const runs2 = await prisma.run.findMany({\n where: {\n threadId\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order\n },\n ...after ? {\n skip: 1,\n cursor: {\n id: after\n }\n } : {}\n });\n return new Response(JSON.stringify({\n data: runs2.map((run2) => serializeRun({ run: run2 })),\n hasNextPage: () => runs2.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last2(runs2)?.id ?? null\n }\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/post.ts\nimport dayjs7 from \"dayjs\";\nimport { assign as assign5 } from \"radash\";\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunInProgress.ts\nvar threadRunInProgress = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"IN_PROGRESS\" /* IN_PROGRESS */\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"FAILED\" /* FAILED */,\n failedAt: event.data.failed_at,\n lastError: event.data.last_error\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunCompleted.ts\nvar threadRunCompleted = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n requiredAction: void 0\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunRequiresAction.ts\nvar threadRunRequiresAction = ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n return prisma.run.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"REQUIRES_ACTION\" /* REQUIRES_ACTION */,\n requiredAction: event.data.required_action\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/serializeRunStep.ts\nimport dayjs6 from \"dayjs\";\nvar serializeRunStep = ({\n runStep\n}) => ({\n id: runStep.id,\n object: \"thread.run.step\",\n created_at: dayjs6(runStep.createdAt).unix(),\n assistant_id: runStep.assistantId,\n thread_id: runStep.threadId,\n run_id: runStep.runId,\n type: runStep.type.toLowerCase(),\n status: runStep.status.toLowerCase(),\n // @ts-ignore-next-line\n step_details: runStep.stepDetails,\n last_error: runStep.lastError,\n expired_at: runStep.expiredAt ? dayjs6(runStep.expiredAt).unix() : null,\n cancelled_at: runStep.cancelledAt ? dayjs6(runStep.cancelledAt).unix() : null,\n failed_at: runStep.failedAt ? dayjs6(runStep.failedAt).unix() : null,\n completed_at: runStep.completedAt ? dayjs6(runStep.completedAt).unix() : null,\n metadata: runStep.metadata,\n usage: runStep.usage\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepCreated.ts\nvar type = (event) => {\n if (event.data.type === \"message_creation\") return \"MESSAGE_CREATION\" /* MESSAGE_CREATION */;\n if (event.data.type === \"tool_calls\") return \"TOOL_CALLS\" /* TOOL_CALLS */;\n throw new Error(`Unknown type: ${event.data.type}`);\n};\nvar status = (event) => {\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"cancelled\") return \"CANCELLED\" /* CANCELLED */;\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"failed\") return \"FAILED\" /* FAILED */;\n if (event.data.status === \"expired\") return \"EXPIRED\" /* EXPIRED */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadRunStepCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const runStep = await prisma.runStep.create({\n data: {\n runId: event.data.run_id,\n assistantId: event.data.assistant_id,\n threadId: event.data.thread_id,\n type: type(event),\n status: status(event),\n stepDetails: event.data.step_details,\n completedAt: event.data.completed_at\n }\n });\n const serializedRunStep = serializeRunStep({ runStep });\n controller.enqueue({\n ...event,\n data: serializedRunStep\n });\n return serializedRunStep;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadRunStepDelta.ts\nvar threadRunStepDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCreated.ts\nvar status2 = (event) => {\n if (event.data.status === \"completed\") return \"COMPLETED\" /* COMPLETED */;\n if (event.data.status === \"in_progress\") return \"IN_PROGRESS\" /* IN_PROGRESS */;\n if (event.data.status === \"incomplete\") return \"INCOMPLETE\" /* INCOMPLETE */;\n throw new Error(`Unknown status: ${event.data.status}`);\n};\nvar threadMessageCreated = async ({\n prisma,\n event,\n controller\n}) => {\n const message = await prisma.message.create({\n data: {\n threadId: event.data.thread_id,\n content: event.data.content,\n role: event.data.role === \"assistant\" ? \"ASSISTANT\" : \"USER\",\n assistantId: event.data.assistant_id,\n runId: event.data.run_id,\n status: status2(event)\n }\n });\n const serializedMessage = serializeMessage4({ message });\n controller.enqueue({\n ...event,\n data: serializedMessage\n });\n return serializedMessage;\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageDelta.ts\nvar threadMessageDelta = ({\n event,\n controller\n}) => controller.enqueue(event);\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/threadMessageCompleted.ts\nvar threadMessageCompleted = async ({\n prisma,\n event,\n controller\n}) => {\n controller.enqueue(event);\n if (event.data.tool_calls) {\n const latestRunStep = await prisma.runStep.findFirst({\n where: {\n threadId: event.data.thread_id,\n type: \"TOOL_CALLS\" /* TOOL_CALLS */\n },\n orderBy: {\n createdAt: \"desc\"\n }\n });\n if (!latestRunStep) {\n throw new Error(\"No run step found\");\n }\n await prisma.runStep.update({\n where: {\n id: latestRunStep.id\n },\n data: {\n stepDetails: {\n type: \"tool_calls\",\n tool_calls: event.data.tool_calls\n }\n }\n });\n }\n return prisma.message.update({\n where: {\n id: event.data.id\n },\n data: {\n status: \"COMPLETED\" /* COMPLETED */,\n ...event.data.content ? { content: event.data.content } : {},\n ...event.data.tool_calls ? { toolCalls: event.data.tool_calls } : {}\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/handlers/index.ts\nvar handlers = {\n \"thread.run.in_progress\": threadRunInProgress,\n \"thread.run.failed\": threadRunFailed,\n \"thread.run.completed\": threadRunCompleted,\n \"thread.run.requires_action\": threadRunRequiresAction,\n \"thread.run.step.created\": threadRunStepCreated,\n \"thread.run.step.delta\": threadRunStepDelta,\n \"thread.message.created\": threadMessageCreated,\n \"thread.message.delta\": threadMessageDelta,\n \"thread.message.completed\": threadMessageCompleted\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/onEvent/index.ts\nvar onEvent = ({\n prisma,\n controller\n}) => (event) => {\n const handler = handlers[event.event];\n if (!handler) {\n console.log(\"No handler for event\", event);\n return;\n }\n return handler({ prisma, controller, event });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/getMessages.ts\nvar getTake = ({\n run: 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 post8 = ({\n prisma,\n runAdapter\n}) => async (urlString, options) => {\n const url = new URL(urlString);\n const [, threadId] = url.pathname.match(new RegExp(runsRegexp));\n const body = JSON.parse(options.body);\n const { assistant_id, stream } = body;\n const assistant = await prisma.assistant.findUnique({\n where: {\n id: assistant_id\n }\n });\n if (!assistant) {\n throw new Error(\"Assistant not found\");\n }\n const {\n model,\n instructions,\n // additional_instructions,\n tools,\n metadata,\n response_format,\n truncation_strategy\n } = assign5({\n model: assistant.modelSlug,\n instructions: \"\",\n additional_instructions: null,\n truncation_strategy: {\n type: \"auto\"\n },\n response_format: {\n type: \"text\"\n }\n // tools: [],\n // metadata: {},\n }, body);\n const run2 = await prisma.run.create({\n data: {\n status: \"QUEUED\",\n expiresAt: dayjs7().add(1, \"hour\").unix(),\n model,\n instructions,\n tools,\n metadata,\n thread: {\n connect: {\n id: threadId\n }\n },\n assistant: {\n connect: {\n id: assistant_id\n }\n },\n truncationStrategy: truncation_strategy,\n responseFormat: response_format\n }\n });\n const data = serializeRun({ run: run2 });\n const readableStream = new ReadableStream({\n async start(controller) {\n try {\n await runAdapter({\n run: data,\n onEvent: onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n }),\n getMessages: getMessages({\n prisma,\n run: run2\n })\n });\n } catch (error) {\n console.error(error);\n onEvent({\n controller: {\n ...controller,\n enqueue: (data2) => {\n controller.enqueue(`data: ${JSON.stringify(data2)}\n\n`);\n }\n },\n prisma\n })({\n event: \"thread.run.failed\",\n data: {\n id: run2.id,\n failed_at: dayjs7().unix(),\n last_error: {\n code: \"server_error\",\n message: `${error?.message ?? \"\"} ${error?.cause?.message ?? \"\"}`\n }\n }\n });\n }\n controller.close();\n }\n });\n if (stream) {\n return new Response(readableStream, {\n headers: {\n \"Content-Type\": \"text/event-stream\"\n }\n });\n } else {\n return new Response(JSON.stringify(\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: get3({ prisma }),\n post: post8({ prisma, runAdapter })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/run/get.ts\nvar get4 = ({\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: get4({ prisma })\n // post: post({ prisma, runAdapter }),\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/get.ts\nimport { assign as assign6, last as last3 } from \"radash\";\nvar get5 = ({\n prisma\n}) => async (urlString) => {\n const url = new URL(urlString);\n const [, threadId, , runId] = url.pathname.match(new RegExp(stepsRegexp));\n const {\n limit,\n order,\n after\n } = assign6({\n limit: \"20\",\n order: \"desc\"\n // after: null,\n }, Object.fromEntries(url.searchParams));\n const runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order\n },\n ...after ? {\n skip: 1,\n cursor: {\n id: after\n }\n } : {}\n });\n return new Response(JSON.stringify({\n data: runSteps.map((runStep) => serializeRunStep({ runStep })),\n hasNextPage: () => runSteps.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last3(runSteps)?.id ?? null\n }\n }), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n};\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/steps/index.ts\nvar steps = ({\n prisma\n}) => ({\n get: get5({ prisma })\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/updateRun.ts\nimport dayjs8 from \"dayjs\";\nvar updateRun = async ({\n prisma,\n runId,\n threadId,\n onThreadRunStepCompleted = () => {\n },\n tool_outputs\n}) => prisma.$transaction(async (prisma2) => {\n const runSteps = await prisma2.runStep.findMany({\n where: {\n threadId,\n runId,\n type: \"TOOL_CALLS\",\n status: \"IN_PROGRESS\"\n },\n orderBy: {\n createdAt: \"asc\"\n }\n });\n for (const runStep of runSteps) {\n const completedRunStep = await prisma2.runStep.update({\n where: {\n id: runStep.id\n },\n data: {\n status: \"COMPLETED\",\n completedAt: dayjs8().unix(),\n stepDetails: {\n type: \"tool_calls\",\n // @ts-ignore-next-line\n tool_calls: runStep.stepDetails.tool_calls.map((toolCall) => {\n const toolOutput = tool_outputs.find((output) => output.tool_call_id === toolCall.id) || tool_outputs[0];\n if (!toolOutput) {\n console.dir({ toolOutput, runStep, tool_outputs, runSteps }, { depth: null });\n throw new Error(\"Tool output not found\");\n }\n return {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n ...toolCall.function,\n output: toolOutput.output\n }\n };\n })\n }\n }\n });\n onThreadRunStepCompleted({\n runStep: completedRunStep\n });\n }\n return prisma2.run.update({\n where: {\n id: runId\n },\n data: {\n status: \"QUEUED\"\n }\n });\n});\n\n// src/adapters/storage/prismaStorageAdapter/threads/runs/submitToolOutputs/post/index.ts\nvar post9 = ({\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: post9({\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});\nexport {\n anthropicClientAdapter,\n azureOpenaiClientAdapter,\n completionsRunAdapter,\n groqClientAdapter,\n mistralClientAdapter,\n openaiClientAdapter,\n perplexityClientAdapter,\n prismaStorageAdapter,\n supercompat\n};\n","import OpenAI, { AzureOpenAI } from 'openai'\nimport { supercompatFetch, type Args } from './supercompatFetch'\nimport { endpointFromBaseUrl } from '@/lib/azureOpenai/endpointFromBaseUrl'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n if (client.type === 'AZURE_OPENAI') {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n }\n\n return new OpenAI({\n apiKey: 'SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY',\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n}\n","import { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nconst storageRequestHandlers = ({\n storage,\n runAdapter,\n client,\n}: {\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n client: any\n}) => {\n if (!storage) return {}\n if (!runAdapter) return {}\n\n const result = storage({ runAdapter: partob(runAdapter, { client }) })\n return result.requestHandlers\n}\n\nexport const requestHandlers = ({\n client,\n storage,\n runAdapter,\n}: {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}) => (\n assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client,\n })\n )\n)\n","export const findRequestHandler = ({\n url,\n requestHandlers,\n}: {\n url: string\n requestHandlers: any\n}) => {\n const pathname = new URL(url).pathname\n\n for (const key in requestHandlers) {\n const regex = new RegExp(key)\n\n if (regex.test(pathname)) {\n return requestHandlers[key]\n }\n }\n}\n","export const originalFetch = ({\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 requestHandler = pathHandler[options?.method]\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 post = ({\n openai,\n}: {\n openai: OpenAI\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await openai.chat.completions.create(body)\n console.dir({ response }, { depth: null })\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(body)\n console.dir({ data }, { depth: null })\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 openai,\n}: {\n openai: OpenAI\n}) => ({\n post: post({ openai }),\n})\n","import type OpenAI from 'openai'\nimport { completions } from './completions'\n\nexport const openaiClientAdapter = ({\n openai,\n}: {\n openai: OpenAI\n}) => ({\n client: openai,\n requestHandlers: {\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","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 { completions } from './completions'\n\nexport const mistralClientAdapter = ({\n mistral,\n}: {\n mistral: Mistral\n}) => ({\n client: mistral,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ mistral }),\n },\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 { completions } from './completions'\n\nexport const perplexityClientAdapter = ({\n perplexity,\n}: {\n perplexity: OpenAI\n}) => ({\n client: perplexity,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ perplexity }),\n },\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'\nimport { isEmpty } from 'radash'\n\nexport const nonEmptyMessages = ({\n messages,\n}: {\n messages: OpenAI.Chat.ChatCompletionMessageParam[]\n}) => {\n const result = [] as OpenAI.Chat.ChatCompletionMessageParam[]\n\n messages.forEach((message: OpenAI.Chat.ChatCompletionMessageParam) => (\n result.push({\n ...message,\n content: isEmpty(message.content) ? '-' : message.content as string,\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 { completions } from './completions'\n\nexport const anthropicClientAdapter = ({\n anthropic,\n}: {\n anthropic: Anthropic\n}) => ({\n client: anthropic,\n requestHandlers: {\n '^/v1/chat/completions$': completions({ anthropic }),\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","// @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'\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\n}) => ([\n {\n type: 'text',\n text: {\n value: content ?? '',\n annotations: [],\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 } = body\n\n const message = await prisma.message.create({\n data: {\n threadId,\n content: messageContentBlocks({ content }),\n role: role === 'user' ? 'USER' : 'ASSISTANT',\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 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 messages = await prisma.message.findMany({\n where: {\n threadId,\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order,\n },\n ...(after ? {\n skip: 1,\n cursor: {\n id: after,\n },\n }: {}),\n }) as Message[]\n\n return new Response(JSON.stringify({\n data: messages.map((message: Message) => (\n serializeMessage({ message })\n )),\n hasNextPage: () => messages.length === parseInt(limit),\n body: {\n last_id: last(messages)?.id ?? null,\n },\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 runs = await prisma.run.findMany({\n where: {\n threadId,\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order,\n },\n ...(after ? {\n skip: 1,\n cursor: {\n id: after,\n },\n }: {}),\n })\n\n return new Response(JSON.stringify({\n data: runs.map((run: Run) => (\n serializeRun({ run })\n )),\n hasNextPage: () => runs.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last(runs)?.id ?? null,\n },\n }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n","import type OpenAI from 'openai'\n// @ts-ignore-next-line\nimport type { Run } from '@prisma/client'\nimport dayjs from 'dayjs'\n\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 runSteps = await prisma.runStep.findMany({\n where: {\n threadId,\n runId,\n },\n take: parseInt(limit),\n orderBy: {\n createdAt: order,\n },\n ...(after ? {\n skip: 1,\n cursor: {\n id: after,\n },\n }: {}),\n })\n\n return new Response(JSON.stringify({\n data: runSteps.map((runStep: RunStep) => (\n serializeRunStep({ runStep })\n )),\n hasNextPage: () => runSteps.length === parseInt(limit),\n body: {\n // @ts-ignore-next-line\n last_id: last(runSteps)?.id ?? null,\n },\n }), {\n status: 200,\n headers: {\n '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 } 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"]}