mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-11 17:52:31 +03:00
fix(logging): cover opt-in diagnostics
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
This commit is contained in:
committed by
Diego Rodrigues de Sa e Souza
parent
9f4186a2b2
commit
0bb3bc093c
@@ -84,6 +84,7 @@ export async function POST(request) {
|
||||
// OpenAI/Anthropic reject `text/plain` or missing Content-Type at the edge; matching
|
||||
// that behavior prevents a text/plain body from silently reaching provider lookup.
|
||||
const contentType = request.headers.get("content-type") ?? "";
|
||||
const requestContentLengthHeader = request.headers.get("content-length");
|
||||
if (!contentType.toLowerCase().split(";")[0].trim().startsWith("application/json")) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
@@ -114,8 +115,8 @@ export async function POST(request) {
|
||||
// Logs only when Content-Length is present so debug noise stays low for
|
||||
// typical chat payloads. Opt-in via OMNIROUTE_LOG_REQUEST_SHAPE=1.
|
||||
if (process.env.OMNIROUTE_LOG_REQUEST_SHAPE === "1") {
|
||||
const ct = request.headers.get("content-type") ?? "";
|
||||
const cl = request.headers.get("content-length");
|
||||
const ct = contentType;
|
||||
const cl = requestContentLengthHeader;
|
||||
if (cl && Number(cl) > 256 * 1024) {
|
||||
console.error(`[CHAT-ROUTE] large body content-type="${ct}" content-length=${cl}`);
|
||||
}
|
||||
|
||||
75
tests/unit/logging-opt-in-defaults.test.ts
Normal file
75
tests/unit/logging-opt-in-defaults.test.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import { POST } from "../../src/app/api/v1/chat/completions/route.ts";
|
||||
import { getCallLogPipelineCaptureStreamChunks } from "../../src/lib/logEnv.ts";
|
||||
|
||||
const originalConsoleError = console.error;
|
||||
const originalCaptureChunks = process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS;
|
||||
const originalRequestShape = process.env.OMNIROUTE_LOG_REQUEST_SHAPE;
|
||||
|
||||
test.afterEach(() => {
|
||||
console.error = originalConsoleError;
|
||||
|
||||
if (originalCaptureChunks === undefined) {
|
||||
delete process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS;
|
||||
} else {
|
||||
process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS = originalCaptureChunks;
|
||||
}
|
||||
|
||||
if (originalRequestShape === undefined) {
|
||||
delete process.env.OMNIROUTE_LOG_REQUEST_SHAPE;
|
||||
} else {
|
||||
process.env.OMNIROUTE_LOG_REQUEST_SHAPE = originalRequestShape;
|
||||
}
|
||||
});
|
||||
|
||||
test("stream-chunk pipeline capture is disabled by default and supports explicit opt-in", () => {
|
||||
delete process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS;
|
||||
assert.equal(getCallLogPipelineCaptureStreamChunks(), false);
|
||||
|
||||
process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS = "true";
|
||||
assert.equal(getCallLogPipelineCaptureStreamChunks(), true);
|
||||
|
||||
process.env.CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS = "false";
|
||||
assert.equal(getCallLogPipelineCaptureStreamChunks(), false);
|
||||
});
|
||||
|
||||
async function requestShapeMarkers(value: string | undefined): Promise<string[]> {
|
||||
if (value === undefined) {
|
||||
delete process.env.OMNIROUTE_LOG_REQUEST_SHAPE;
|
||||
} else {
|
||||
process.env.OMNIROUTE_LOG_REQUEST_SHAPE = value;
|
||||
}
|
||||
|
||||
const markers: string[] = [];
|
||||
console.error = (...args: unknown[]) => {
|
||||
const message = args.map(String).join(" ");
|
||||
if (message.includes("[CHAT-ROUTE] large body")) markers.push(message);
|
||||
};
|
||||
|
||||
const body = JSON.stringify({
|
||||
messages: [{ role: "user", content: "x".repeat(300 * 1024) }],
|
||||
});
|
||||
const response = await POST(
|
||||
new Request("http://localhost/v1/chat/completions", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"content-length": String(Buffer.byteLength(body)),
|
||||
"content-type": "application/json",
|
||||
},
|
||||
body,
|
||||
})
|
||||
);
|
||||
await response.text();
|
||||
return markers;
|
||||
}
|
||||
|
||||
test("large-request shape logging requires the exact opt-in value 1", async () => {
|
||||
assert.deepEqual(await requestShapeMarkers(undefined), []);
|
||||
assert.deepEqual(await requestShapeMarkers("true"), []);
|
||||
|
||||
const enabledMarkers = await requestShapeMarkers("1");
|
||||
assert.equal(enabledMarkers.length, 1);
|
||||
assert.match(enabledMarkers[0], /content-length=3072\d\d/);
|
||||
});
|
||||
Reference in New Issue
Block a user