char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Aleksander Grygierui: Linting & Formatting scripts (#26819)92d1bb0c9

char/aliceai-t5-moe
2.4 KiB84 linesraw
1import { parseSseJsonStream } from '$lib/utils/sse';
2import { describe, expect, it } from 'vitest';
3
4function makeSseResponse(events: string[]): Response {
5	const body = events.join('\n\n') + '\n\n';
6
7	return new Response(body, {
8		headers: { 'content-type': 'text/event-stream' },
9		status: 200
10	});
11}
12
13describe('parseSseJsonStream', () => {
14	it('yields parsed data for each record', async () => {
15		const response = makeSseResponse(['data: {"chunk": "a"}', 'data: {"chunk": "b"}']);
16		const collected: unknown[] = [];
17
18		for await (const ev of parseSseJsonStream(response)) {
19			collected.push(ev.data);
20		}
21		expect(collected).toEqual([{ chunk: 'a' }, { chunk: 'b' }]);
22	});
23
24	it('stops on [DONE] sentinel', async () => {
25		const response = makeSseResponse([
26			'data: {"chunk": "a"}',
27			'data: [DONE]',
28			'data: {"chunk": "after-done"}'
29		]);
30		const collected: unknown[] = [];
31
32		for await (const ev of parseSseJsonStream(response)) {
33			collected.push(ev.data);
34		}
35		expect(collected).toEqual([{ chunk: 'a' }]);
36	});
37
38	it('skips malformed JSON records', async () => {
39		const response = makeSseResponse([
40			'data: {"chunk": "ok"}',
41			'data: {not-json}',
42			'data: {"chunk": "also-ok"}'
43		]);
44		const collected: unknown[] = [];
45
46		for await (const ev of parseSseJsonStream(response)) {
47			collected.push(ev.data);
48		}
49		expect(collected).toEqual([{ chunk: 'ok' }, { chunk: 'also-ok' }]);
50	});
51
52	it('handles records split across multiple chunks (partial last line)', async () => {
53		const full = 'data: {"chunk": "x"}\n\ndata: {"chunk": "y"}\n\n';
54		const stream = new ReadableStream<Uint8Array>({
55			start(controller) {
56				const enc = new TextEncoder();
57
58				controller.enqueue(enc.encode(full.slice(0, full.length / 2)));
59				controller.enqueue(enc.encode(full.slice(full.length / 2)));
60				controller.close();
61			}
62		});
63		const response = new Response(stream, {
64			headers: { 'content-type': 'text/event-stream' },
65			status: 200
66		});
67		const collected: unknown[] = [];
68
69		for await (const ev of parseSseJsonStream(response)) {
70			collected.push(ev.data);
71		}
72		expect(collected).toEqual([{ chunk: 'x' }, { chunk: 'y' }]);
73	});
74
75	it('returns immediately if response has no body', async () => {
76		const response = new Response(null, { status: 200 });
77		const collected: unknown[] = [];
78
79		for await (const ev of parseSseJsonStream(response)) {
80			collected.push(ev.data);
81		}
82		expect(collected).toEqual([]);
83	});
84});