Skip to content

Commit 35bd2d3

Browse files
Follow python idiomatic standards better
1 parent 78a49e7 commit 35bd2d3

File tree

3 files changed

+11
-57
lines changed

3 files changed

+11
-57
lines changed

src/cohere/core/http_sse/_api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff 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

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,15 @@
1+
from dataclasses import dataclass
12
import json
23
from typing import Any, Optional
34

45

6+
@dataclass
57
class 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)})"

src/cohere/v2/raw_client.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# This file was auto-generated by Fern from our API Definition.
22

33
import contextlib
4+
from dataclasses import asdict
45
import json
56
import typing
67
from 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:

0 commit comments

Comments
 (0)