supercompat 2.7.1 → 2.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +4 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1385,13 +1385,12 @@ var serializeMessage = function(param) {
|
|
|
1385
1385
|
text: message.content
|
|
1386
1386
|
}
|
|
1387
1387
|
].concat(_to_consumable_array(((_message_tool_calls = message.tool_calls) !== null && _message_tool_calls !== void 0 ? _message_tool_calls : []).map(function(toolCall) {
|
|
1388
|
-
return
|
|
1388
|
+
return {
|
|
1389
1389
|
type: "tool_use",
|
|
1390
1390
|
id: toolCall.id,
|
|
1391
|
-
name: toolCall.function.name
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
} : {});
|
|
1391
|
+
name: toolCall.function.name,
|
|
1392
|
+
input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {}
|
|
1393
|
+
};
|
|
1395
1394
|
})))
|
|
1396
1395
|
};
|
|
1397
1396
|
} else if (message.role === "tool") {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/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/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":["requestHandlers","OpenAI","post","completions","messages","import_radash","content","serializeMessage","run","getMessages","_","onEvent","dayjs","import_dayjs","get","runs","status","data","prisma"],"mappings":"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","sourcesContent":["export { supercompat } from './supercompat'\nexport { groqClientAdapter } from './adapters/client/groqClientAdapter'\nexport { openaiClientAdapter } from './adapters/client/openaiClientAdapter'\nexport { azureOpenaiClientAdapter } from './adapters/client/azureOpenaiClientAdapter'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { anthropicClientAdapter } from './adapters/client/anthropicClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\n","import OpenAI, { AzureOpenAI } from 'openai'\nimport { supercompatFetch, type Args } from './supercompatFetch'\nimport { endpointFromBaseUrl } from '@/lib/azureOpenai/endpointFromBaseUrl'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n if (client.type === 'AZURE_OPENAI') {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n }\n\n return new OpenAI({\n apiKey: 'SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY',\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n}\n","import { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nconst storageRequestHandlers = ({\n storage,\n runAdapter,\n client,\n}: {\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n client: any\n}) => {\n if (!storage) return {}\n if (!runAdapter) return {}\n\n const result = storage({ runAdapter: partob(runAdapter, { client }) })\n return result.requestHandlers\n}\n\nexport const requestHandlers = ({\n client,\n storage,\n runAdapter,\n}: {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}) => (\n assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client,\n })\n )\n)\n","export const findRequestHandler = ({\n url,\n requestHandlers,\n}: {\n url: string\n requestHandlers: any\n}) => {\n const pathname = new URL(url).pathname\n\n for (const key in requestHandlers) {\n const regex = new RegExp(key)\n\n if (regex.test(pathname)) {\n return requestHandlers[key]\n }\n }\n}\n","export const originalFetch = ({\n args,\n client,\n}: {\n args: any[]\n client: any\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args\n\n const headers = {\n ...options.headers,\n authorization: client.client.defaultHeaders().Authorization,\n }\n\n return client.client.fetch(url, {\n ...options,\n headers,\n })\n } else {\n // @ts-ignore-next-line\n return fetch(...args)\n }\n}\n","import { RunAdapter, StorageAdapterArgs } from '@/types'\nimport { requestHandlers as getRequestHandlers } from './requestHandlers'\nimport { findRequestHandler } from './findRequestHandler'\nimport { originalFetch } from './originalFetch'\n\nexport type Args = {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}\n\nexport const supercompatFetch = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n const requestHandlers = getRequestHandlers({\n client,\n storage,\n runAdapter,\n })\n\n return async (...args: any[]) => {\n const [url, options] = args\n\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\n })\n\n if (!pathHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n const 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","import type Mistral from '@mistralai/mistralai'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await mistral.chatStream(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 mistral.chat(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 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 ...(toolCall.function.arguments ? { input: 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 choice = chunk.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":["../src/index.ts","../src/supercompat.ts","../src/supercompatFetch/requestHandlers.ts","../src/supercompatFetch/findRequestHandler.ts","../src/supercompatFetch/originalFetch.ts","../src/supercompatFetch/index.ts","../src/lib/azureOpenai/endpointFromBaseUrl.ts","../src/adapters/client/groqClientAdapter/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/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":["requestHandlers","OpenAI","post","completions","messages","import_radash","content","serializeMessage","run","getMessages","_","onEvent","dayjs","import_dayjs","get","runs","status","data","prisma"],"mappings":"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","sourcesContent":["export { supercompat } from './supercompat'\nexport { groqClientAdapter } from './adapters/client/groqClientAdapter'\nexport { openaiClientAdapter } from './adapters/client/openaiClientAdapter'\nexport { azureOpenaiClientAdapter } from './adapters/client/azureOpenaiClientAdapter'\nexport { mistralClientAdapter } from './adapters/client/mistralClientAdapter'\nexport { perplexityClientAdapter } from './adapters/client/perplexityClientAdapter'\nexport { anthropicClientAdapter } from './adapters/client/anthropicClientAdapter'\nexport { completionsRunAdapter } from './adapters/run/completionsRunAdapter'\nexport { prismaStorageAdapter } from './adapters/storage/prismaStorageAdapter'\n","import OpenAI, { AzureOpenAI } from 'openai'\nimport { supercompatFetch, type Args } from './supercompatFetch'\nimport { endpointFromBaseUrl } from '@/lib/azureOpenai/endpointFromBaseUrl'\n\nexport const supercompat = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n if (client.type === 'AZURE_OPENAI') {\n return new AzureOpenAI({\n apiKey: client.client.apiKey,\n apiVersion: client.client.apiVersion,\n endpoint: endpointFromBaseUrl({ baseURL: client.client.baseURL }),\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n }\n\n return new OpenAI({\n apiKey: 'SUPERCOMPAT_PLACEHOLDER_OPENAI_KEY',\n fetch: supercompatFetch({\n client,\n storage,\n runAdapter,\n }),\n })\n}\n","import { assign, partob } from 'radash'\nimport { RunAdapter, StorageAdapterArgs } from '@/types'\n\nconst storageRequestHandlers = ({\n storage,\n runAdapter,\n client,\n}: {\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n client: any\n}) => {\n if (!storage) return {}\n if (!runAdapter) return {}\n\n const result = storage({ runAdapter: partob(runAdapter, { client }) })\n return result.requestHandlers\n}\n\nexport const requestHandlers = ({\n client,\n storage,\n runAdapter,\n}: {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}) => (\n assign(\n client.requestHandlers,\n storageRequestHandlers({\n storage,\n runAdapter,\n client,\n })\n )\n)\n","export const findRequestHandler = ({\n url,\n requestHandlers,\n}: {\n url: string\n requestHandlers: any\n}) => {\n const pathname = new URL(url).pathname\n\n for (const key in requestHandlers) {\n const regex = new RegExp(key)\n\n if (regex.test(pathname)) {\n return requestHandlers[key]\n }\n }\n}\n","export const originalFetch = ({\n args,\n client,\n}: {\n args: any[]\n client: any\n}) => {\n if (client.client?.fetch) {\n const [url, options] = args\n\n const headers = {\n ...options.headers,\n authorization: client.client.defaultHeaders().Authorization,\n }\n\n return client.client.fetch(url, {\n ...options,\n headers,\n })\n } else {\n // @ts-ignore-next-line\n return fetch(...args)\n }\n}\n","import { RunAdapter, StorageAdapterArgs } from '@/types'\nimport { requestHandlers as getRequestHandlers } from './requestHandlers'\nimport { findRequestHandler } from './findRequestHandler'\nimport { originalFetch } from './originalFetch'\n\nexport type Args = {\n client: any\n storage?: (arg0: StorageAdapterArgs) => any\n runAdapter?: RunAdapter\n}\n\nexport const supercompatFetch = ({\n client,\n storage,\n runAdapter,\n}: Args) => {\n const requestHandlers = getRequestHandlers({\n client,\n storage,\n runAdapter,\n })\n\n return async (...args: any[]) => {\n const [url, options] = args\n\n const pathHandler = findRequestHandler({\n url,\n requestHandlers,\n })\n\n if (!pathHandler) {\n return originalFetch({\n client,\n args,\n })\n }\n\n const 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","import type Mistral from '@mistralai/mistralai'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await mistral.chatStream(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 mistral.chat(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 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 choice = chunk.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"]}
|
package/dist/index.js
CHANGED
|
@@ -1294,13 +1294,12 @@ var serializeMessage = function(param) {
|
|
|
1294
1294
|
text: message.content
|
|
1295
1295
|
}
|
|
1296
1296
|
].concat(_to_consumable_array(((_message_tool_calls = message.tool_calls) !== null && _message_tool_calls !== void 0 ? _message_tool_calls : []).map(function(toolCall) {
|
|
1297
|
-
return
|
|
1297
|
+
return {
|
|
1298
1298
|
type: "tool_use",
|
|
1299
1299
|
id: toolCall.id,
|
|
1300
|
-
name: toolCall.function.name
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
} : {});
|
|
1300
|
+
name: toolCall.function.name,
|
|
1301
|
+
input: toolCall.function.arguments ? JSON.parse(toolCall.function.arguments) : {}
|
|
1302
|
+
};
|
|
1304
1303
|
})))
|
|
1305
1304
|
};
|
|
1306
1305
|
} else if (message.role === "tool") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/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":["requestHandlers","post","completions","messages","isEmpty","uid","omit","content","serializeMessage","run","getMessages","onEvent","dayjs","assign","last","get","runs","status","data","prisma"],"mappings":"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","sourcesContent":["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","import type Mistral from '@mistralai/mistralai'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await mistral.chatStream(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 mistral.chat(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 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 ...(toolCall.function.arguments ? { input: 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 choice = chunk.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":["../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/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":["requestHandlers","post","completions","messages","isEmpty","uid","omit","content","serializeMessage","run","getMessages","onEvent","dayjs","assign","last","get","runs","status","data","prisma"],"mappings":"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","sourcesContent":["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","import type Mistral from '@mistralai/mistralai'\n\nexport const post = ({\n mistral,\n}: {\n mistral: Mistral\n}) => async (_url: string, options: any) => {\n const body = JSON.parse(options.body)\n\n if (body.stream) {\n const response = await mistral.chatStream(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 mistral.chat(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 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 choice = chunk.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"]}
|