(params: {
body: ChatCompletionRequestBody
originalModel: string
fetch: typeof globalThis.fetch
})
| 108 | } |
| 109 | |
| 110 | function createOpenCodeZenRequest(params: { |
| 111 | body: ChatCompletionRequestBody |
| 112 | originalModel: string |
| 113 | fetch: typeof globalThis.fetch |
| 114 | }) { |
| 115 | const { body, originalModel, fetch } = params |
| 116 | const opencodeBody: Record<string, unknown> = { |
| 117 | ...body, |
| 118 | messages: normalizeOpenCodeZenMessages(body.messages ?? []), |
| 119 | tools: body.tools?.map(normalizeOpenCodeZenTool), |
| 120 | model: getOpenCodeZenModelId(originalModel), |
| 121 | } |
| 122 | |
| 123 | delete opencodeBody.provider |
| 124 | delete opencodeBody.transforms |
| 125 | delete opencodeBody.codebuff_metadata |
| 126 | delete opencodeBody.usage |
| 127 | |
| 128 | if (opencodeBody.stream) { |
| 129 | opencodeBody.stream_options = { include_usage: true } |
| 130 | } |
| 131 | |
| 132 | return fetch(`${OPENCODE_ZEN_BASE_URL}/chat/completions`, { |
| 133 | method: 'POST', |
| 134 | headers: { |
| 135 | Authorization: `Bearer ${getOpenCodeZenApiKey()}`, |
| 136 | 'Content-Type': 'application/json', |
| 137 | }, |
| 138 | body: JSON.stringify(opencodeBody), |
| 139 | // @ts-expect-error - dispatcher is a valid undici option not in fetch types |
| 140 | dispatcher: opencodeZenAgent, |
| 141 | }) |
| 142 | } |
| 143 | |
| 144 | function normalizeOpenCodeZenMessages( |
| 145 | messages: ChatCompletionRequestBody['messages'], |
no test coverage detected