From 03033a2206833a5fc1e3c084abdc7737971888fe Mon Sep 17 00:00:00 2001 From: Michael Jin Date: Tue, 30 Jan 2024 13:47:10 -0800 Subject: [PATCH] Add a skip test with oai chat completions endpoint mocked out. --- poetry.lock | 16 +++++++++++++++- pyproject.toml | 1 + tests/test_requests.py | 27 ++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0ab087a8..dbc8fd05 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2013,6 +2013,20 @@ six = "*" fixture = ["fixtures"] test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] +[[package]] +name = "respx" +version = "0.20.2" +description = "A utility for mocking out the Python HTTPX and HTTP Core libraries." +optional = false +python-versions = ">=3.7" +files = [ + {file = "respx-0.20.2-py2.py3-none-any.whl", hash = "sha256:ab8e1cf6da28a5b2dd883ea617f8130f77f676736e6e9e4a25817ad116a172c9"}, + {file = "respx-0.20.2.tar.gz", hash = "sha256:07cf4108b1c88b82010f67d3c831dae33a375c7b436e54d87737c7f9f99be643"}, +] + +[package.dependencies] +httpx = ">=0.21.0" + [[package]] name = "rich" version = "13.7.0" @@ -2810,4 +2824,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "d520ccbdcd4787fb6916d96bbdc161c0cb3d29f22121ace7278d2546cf2270a0" +content-hash = "5ccfe5bb68ef4370ad374eb4887c1bbc2547e2033214306741a4e97662ee22d4" diff --git a/pyproject.toml b/pyproject.toml index 1f8fd77d..9983cdd9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ backoff = "^2.2.1" anthropic = "^0.3.11" mosaicml-cli = "^0.5.30" together = "^0.2.7" +respx = "^0.20.2" [tool.ruff] # Never enforce `E501` (line length violations). diff --git a/tests/test_requests.py b/tests/test_requests.py index b0b898f9..a8c76277 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1,9 +1,11 @@ import asyncio +import os +import httpx import pytest import requests_mock -from log10.load import log_sync, log_async +from log10.load import log_sync, log_async, OpenAI from log10.llm import LLM, Log10Config @@ -49,3 +51,26 @@ def fake_logging(): llm.log_end(completion_id=completion_id, response=mock_resp, duration=5) await asyncio.gather(*[loop.run_in_executor(None, fake_logging) for _ in range(simultaneous_calls)]) + + +@pytest.mark.skip(reason="This is a very simple load test and doesn't need to be run as part of the test suite.") +@pytest.mark.asyncio +async def test_log_async_httpx_multiple_calls(respx_mock): + simultaneous_calls = 100 + + mock_resp = { + "role": "user", + "content": "Say this is a test", + } + + + client = OpenAI() + + respx_mock.post("https://api.openai.com/v1/chat/completions").mock(return_value=httpx.Response(200, json=mock_resp)) + + def better_logging(): + completion = client.chat.completions.create(model="gpt-3.5-turbo", messages=[ + {"role": "user", "content": "Say pong"}]) + + loop = asyncio.get_event_loop() + await asyncio.gather(*[loop.run_in_executor(None, better_logging) for _ in range(simultaneous_calls)])