Spaces:
Runtime error
Runtime error
File size: 1,780 Bytes
cd8bd0a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /**
* Open Code handler.
*
* Host: `opencode.ai` (Zen endpoint family).
* Format: OpenAI-compatible Chat Completions — `body.model` is rewritten to
* the mapped target and the request is forwarded to the OmniRoute router.
*/
import type { IncomingMessage, ServerResponse } from "node:http";
import type { AgentId } from "../types";
import { MitmHandlerBase } from "./base";
export class OpenCodeHandler extends MitmHandlerBase {
readonly agentId: AgentId = "open-code";
async intercept(
req: IncomingMessage,
res: ServerResponse,
body: Buffer,
mappedModel: string,
): Promise<void> {
const startedAt = this.now();
const intercepted = await this.hookBufferStart(req, body, mappedModel);
try {
const payload = JSON.parse(body.toString());
payload.model = mappedModel;
const upstreamStart = this.now();
const upstream = await this.fetchRouter(payload, "/v1/chat/completions", req.headers);
if (!upstream.ok) {
const errText = await upstream.text().catch(() => "");
throw new Error(`OmniRoute ${upstream.status}: ${errText}`);
}
let collected = "";
await this.pipeSSE(upstream, res, (chunk) => {
collected += chunk.toString();
});
const total = this.now() - startedAt;
this.hookBufferUpdate(intercepted, {
status: upstream.status,
responseHeaders: Object.fromEntries(upstream.headers.entries()),
responseBody: collected,
responseSize: Buffer.byteLength(collected),
proxyLatencyMs: upstreamStart - startedAt,
upstreamLatencyMs: total - (upstreamStart - startedAt),
});
} catch (err) {
await this.hookBufferError(intercepted, err);
await this.writeError(res, err);
}
}
}
|