Skip to content

Commit 2035793

Browse files
committed
test: add compression response field tests
- Add test for response with compression field - Add test for response without compression field - Update _handle_non_streaming_response to parse compression data
1 parent 25911b7 commit 2035793

2 files changed

Lines changed: 103 additions & 1 deletion

File tree

edgee/__init__.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,15 @@ def _handle_non_streaming_response(self, request: Request) -> SendResponse:
276276
total_tokens=data["usage"]["total_tokens"],
277277
)
278278

279-
return SendResponse(choices=choices, usage=usage)
279+
compression = None
280+
if "compression" in data:
281+
compression = Compression(
282+
input_tokens=data["compression"]["input_tokens"],
283+
saved_tokens=data["compression"]["saved_tokens"],
284+
rate=data["compression"]["rate"],
285+
)
286+
287+
return SendResponse(choices=choices, usage=usage, compression=compression)
280288

281289
def _handle_streaming_response(self, request: Request):
282290
"""Handle streaming response, yielding StreamChunk objects."""

tests/test_edgee.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,3 +306,97 @@ def test_config_base_url_overrides_env(self, mock_urlopen):
306306

307307
call_args = mock_urlopen.call_args[0][0]
308308
assert call_args.full_url == f"{config_base_url}/v1/chat/completions"
309+
310+
@patch("edgee.urlopen")
311+
def test_send_with_compression_response(self, mock_urlopen):
312+
"""Should handle response with compression field"""
313+
mock_response_data = {
314+
"choices": [
315+
{
316+
"index": 0,
317+
"message": {"role": "assistant", "content": "Response"},
318+
"finish_reason": "stop",
319+
}
320+
],
321+
"usage": {"prompt_tokens": 100, "completion_tokens": 50, "total_tokens": 150},
322+
"compression": {
323+
"input_tokens": 100,
324+
"saved_tokens": 42,
325+
"rate": 0.6102003642987249,
326+
},
327+
}
328+
mock_urlopen.return_value = self._mock_response(mock_response_data)
329+
330+
client = Edgee("test-api-key")
331+
result = client.send(model="gpt-4", input="Test")
332+
333+
assert result.compression is not None
334+
assert result.compression.input_tokens == 100
335+
assert result.compression.saved_tokens == 42
336+
assert result.compression.rate == 0.6102003642987249
337+
338+
@patch("edgee.urlopen")
339+
def test_send_without_compression_response(self, mock_urlopen):
340+
"""Should handle response without compression field"""
341+
mock_response_data = {
342+
"choices": [
343+
{
344+
"index": 0,
345+
"message": {"role": "assistant", "content": "Response"},
346+
"finish_reason": "stop",
347+
}
348+
],
349+
}
350+
mock_urlopen.return_value = self._mock_response(mock_response_data)
351+
352+
client = Edgee("test-api-key")
353+
result = client.send(model="gpt-4", input="Test")
354+
355+
assert result.compression is None
356+
357+
@patch("edgee.urlopen")
358+
def test_send_with_compression_response(self, mock_urlopen):
359+
"""Should handle response with compression field"""
360+
mock_response_data = {
361+
"choices": [
362+
{
363+
"index": 0,
364+
"message": {"role": "assistant", "content": "Response"},
365+
"finish_reason": "stop",
366+
}
367+
],
368+
"usage": {"prompt_tokens": 100, "completion_tokens": 50, "total_tokens": 150},
369+
"compression": {
370+
"input_tokens": 100,
371+
"saved_tokens": 42,
372+
"rate": 0.6102003642987249,
373+
},
374+
}
375+
mock_urlopen.return_value = self._mock_response(mock_response_data)
376+
377+
client = Edgee("test-api-key")
378+
result = client.send(model="gpt-4", input="Test")
379+
380+
assert result.compression is not None
381+
assert result.compression.input_tokens == 100
382+
assert result.compression.saved_tokens == 42
383+
assert result.compression.rate == 0.6102003642987249
384+
385+
@patch("edgee.urlopen")
386+
def test_send_without_compression_response(self, mock_urlopen):
387+
"""Should handle response without compression field"""
388+
mock_response_data = {
389+
"choices": [
390+
{
391+
"index": 0,
392+
"message": {"role": "assistant", "content": "Response"},
393+
"finish_reason": "stop",
394+
}
395+
],
396+
}
397+
mock_urlopen.return_value = self._mock_response(mock_response_data)
398+
399+
client = Edgee("test-api-key")
400+
result = client.send(model="gpt-4", input="Test")
401+
402+
assert result.compression is None

0 commit comments

Comments
 (0)