Merge remote-tracking branch 'origin/master' into gitea/feature/end
Resolved conflicts taking origin/master (v0.5.55) as canonical, with local features re-applied: - runtime log level (LOG_LEVEL env + dashboard Settings → Logging, applied immediately and persisted across restarts) - free/noAuth provider enable/disable toggle via providerStrategies.enabled - parallel model testing (Test All Models / Test Selected Keys)
This commit is contained in:
@@ -401,7 +401,7 @@ describe("wrapQoderSSE", () => {
|
||||
it("forwards an OpenAI envelope chunk and emits [DONE] in flush", async () => {
|
||||
const inner = JSON.stringify({ choices: [{ delta: { content: "hi" } }] });
|
||||
const upstream = `data: ${JSON.stringify({ statusCodeValue: 200, body: inner })}\n\n`;
|
||||
const wrapped = wrapQoderSSE(makeResponse([upstream]), "qoder/auto");
|
||||
const wrapped = await wrapQoderSSE(makeResponse([upstream]), "qoder/auto");
|
||||
const out = await drain(wrapped);
|
||||
expect(out).toContain(`data: ${inner}\n\n`);
|
||||
expect(out).toContain("data: [DONE]\n\n");
|
||||
@@ -413,7 +413,7 @@ describe("wrapQoderSSE", () => {
|
||||
const inner = JSON.stringify({ choices: [{ delta: { content: "tail" } }], finish_reason: "stop" });
|
||||
// Note: NO trailing \n on the final line.
|
||||
const upstream = `data: ${JSON.stringify({ statusCodeValue: 200, body: inner })}`;
|
||||
const wrapped = wrapQoderSSE(makeResponse([upstream]), "qoder/auto");
|
||||
const wrapped = await wrapQoderSSE(makeResponse([upstream]), "qoder/auto");
|
||||
const out = await drain(wrapped);
|
||||
expect(out).toContain(`data: ${inner}\n\n`);
|
||||
});
|
||||
@@ -426,7 +426,7 @@ describe("wrapQoderSSE", () => {
|
||||
const errorEnv = JSON.stringify({ statusCodeValue: 500, body: "boom" });
|
||||
const validInner = JSON.stringify({ choices: [{ delta: { content: "leak" } }] });
|
||||
const validEnv = JSON.stringify({ statusCodeValue: 200, body: validInner });
|
||||
const wrapped = wrapQoderSSE(
|
||||
const wrapped = await wrapQoderSSE(
|
||||
makeResponse([`data: ${errorEnv}\n\ndata: ${validEnv}\n\n`]),
|
||||
"qoder/auto",
|
||||
);
|
||||
@@ -443,7 +443,7 @@ describe("wrapQoderSSE", () => {
|
||||
it("strips embedded newlines from inner body before forwarding", async () => {
|
||||
const innerWithNewlines = '{"choices":[{"delta":{"content":"a\nb"}}]}';
|
||||
const env = JSON.stringify({ statusCodeValue: 200, body: innerWithNewlines });
|
||||
const wrapped = wrapQoderSSE(makeResponse([`data: ${env}\n\n`]), "qoder/auto");
|
||||
const wrapped = await wrapQoderSSE(makeResponse([`data: ${env}\n\n`]), "qoder/auto");
|
||||
const out = await drain(wrapped);
|
||||
// The forwarded data: line should be a single event terminated by \n\n
|
||||
// and contain no internal \n other than the trailing pair.
|
||||
@@ -455,15 +455,15 @@ describe("wrapQoderSSE", () => {
|
||||
|
||||
it("upstream error envelope produces an error chunk + [DONE]", async () => {
|
||||
const env = JSON.stringify({ statusCodeValue: 503, body: "service unavailable" });
|
||||
const wrapped = wrapQoderSSE(makeResponse([`data: ${env}\n\n`]), "qoder/lite");
|
||||
const wrapped = await wrapQoderSSE(makeResponse([`data: ${env}\n\n`]), "qoder/lite");
|
||||
const out = await drain(wrapped);
|
||||
expect(out).toContain("[qoder error 503");
|
||||
expect(out).toContain("data: [DONE]\n\n");
|
||||
});
|
||||
|
||||
it("non-ok responses are returned unchanged (no transform)", () => {
|
||||
it("non-ok responses are returned unchanged (no transform)", async () => {
|
||||
const r = new Response("not ok", { status: 500 });
|
||||
const wrapped = wrapQoderSSE(r, "qoder/auto");
|
||||
const wrapped = await wrapQoderSSE(r, "qoder/auto");
|
||||
expect(wrapped).toBe(r);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user