MCPcopy Create free account
hub / github.com/CommandCodeAI/BaseAI / iterator

Method iterator

packages/baseai/src/dev/utils/stream/stream.ts:25–92  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

23 let consumed = false;
24
25 async function* iterator(): AsyncIterator<Item, any, undefined> {
26 if (consumed) {
27 throw new Error(
28 'Cannot iterate over a consumed stream, use `.tee()` to split the stream.'
29 );
30 }
31 consumed = true;
32 let done = false;
33 try {
34 for await (const sse of _iterSSEMessages(
35 response,
36 controller
37 )) {
38 if (done) continue;
39
40 if (sse.data.startsWith('[DONE]')) {
41 done = true;
42 continue;
43 }
44
45 if (sse.event === null) {
46 let data;
47
48 try {
49 data = JSON.parse(sse.data);
50 } catch (e) {
51 console.error(
52 `Could not parse message into JSON:`,
53 sse.data
54 );
55 console.error(`From chunk:`, sse.raw);
56 throw e;
57 }
58
59 if (data && data.error) {
60 throw new Error(data.error);
61 }
62
63 yield data;
64 } else {
65 let data;
66 try {
67 data = JSON.parse(sse.data);
68 } catch (e) {
69 console.error(
70 `Could not parse message into JSON:`,
71 sse.data
72 );
73 console.error(`From chunk:`, sse.raw);
74 throw e;
75 }
76 // TODO: Is this where the error should be thrown?
77 if (sse.event == 'error') {
78 throw new Error(data.error);
79 }
80 yield { event: sse.event, data: data } as any;
81 }
82 }

Callers 2

teeMethod · 0.95

Calls 1

_iterSSEMessagesFunction · 0.70

Tested by

no test coverage detected