File tree Expand file tree Collapse file tree 3 files changed +11
-57
lines changed
Expand file tree Collapse file tree 3 files changed +11
-57
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,8 @@ def iter_sse(self) -> Iterator[ServerSentEvent]:
4040 line , buffer = buffer .split ('\n ' , 1 )
4141 line = line .rstrip ('\r ' )
4242 sse = decoder .decode (line )
43+ # when we reach a "\n\n" => line = ''
44+ # => decoder will attempt to return an SSE Event
4345 if sse is not None :
4446 yield sse
4547
Original file line number Diff line number Diff line change 1+ from dataclasses import dataclass
12import json
23from typing import Any , Optional
34
45
6+ @dataclass
57class ServerSentEvent :
6- def __init__ (
7- self ,
8- event : Optional [str ] = None ,
9- data : Optional [str ] = None ,
10- id : Optional [str ] = None ,
11- retry : Optional [int ] = None ,
12- ) -> None :
13- if not event :
14- event = "message"
15-
16- if data is None :
17- data = ""
18-
19- if id is None :
20- id = ""
21-
22- self ._event = event
23- self ._data = data
24- self ._id = id
25- self ._retry = retry
26-
27- @property
28- def event (self ) -> str :
29- return self ._event
30-
31- @property
32- def data (self ) -> str :
33- return self ._data
34-
35- @property
36- def id (self ) -> str :
37- return self ._id
38-
39- @property
40- def retry (self ) -> Optional [int ]:
41- return self ._retry
8+ event : str = "message"
9+ data : str = ""
10+ id : str = ""
11+ retry : Optional [int ] = None
4212
4313 def json (self ) -> Any :
14+ """Parse the data field as JSON."""
4415 return json .loads (self .data )
45-
46- def __repr__ (self ) -> str :
47- pieces = [f"event={ self .event !r} " ]
48- if self .data != "" :
49- pieces .append (f"data={ self .data !r} " )
50- if self .id != "" :
51- pieces .append (f"id={ self .id !r} " )
52- if self .retry is not None :
53- pieces .append (f"retry={ self .retry !r} " )
54- return f"ServerSentEvent({ ', ' .join (pieces )} )"
Original file line number Diff line number Diff line change 11# This file was auto-generated by Fern from our API Definition.
22
33import contextlib
4+ from dataclasses import asdict
45import json
56import typing
67from json .decoder import JSONDecodeError
@@ -227,21 +228,11 @@ def _iter():
227228 _event_source = EventSource (_response )
228229 for _sse in _event_source .iter_sse ():
229230 try :
230- # Skip empty events
231- if not _sse .data or _sse .data .strip () == "" :
232- continue
233-
234- # Handle [DONE] token from OpenAI-style APIs
235- if _sse .data .strip () == '[DONE]' :
236- continue
237-
238- parsed_data = json .loads (_sse .data )
239-
240231 yield typing .cast (
241232 V2ChatStreamResponse ,
242233 construct_type (
243234 type_ = V2ChatStreamResponse , # type: ignore
244- object_ = parsed_data ,
235+ object_ = _sse . json () ,
245236 ),
246237 )
247238 except json .JSONDecodeError as e :
You can’t perform that action at this time.
0 commit comments