From 444d680cbb3745adbc27788213ae3312567136a8 Mon Sep 17 00:00:00 2001 From: Stainless Bot <107565488+stainless-bot@users.noreply.github.com> Date: Thu, 18 Apr 2024 17:28:03 -0400 Subject: [PATCH] feat(api): add request id property to response classes (#1341) --- examples/demo.py | 15 +++++++++++++++ src/openai/_legacy_response.py | 4 ++++ src/openai/_response.py | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/examples/demo.py b/examples/demo.py index 37830e3e97..ac1710f3e0 100755 --- a/examples/demo.py +++ b/examples/demo.py @@ -36,3 +36,18 @@ print(chunk.choices[0].delta.content, end="") print() + +# Response headers: +print("----- custom response headers test -----") +response = client.chat.completions.with_raw_response.create( + model="gpt-4", + messages=[ + { + "role": "user", + "content": "Say this is a test", + } + ], +) +completion = response.parse() +print(response.request_id) +print(completion.choices[0].message.content) diff --git a/src/openai/_legacy_response.py b/src/openai/_legacy_response.py index 4585cd7423..1de906b167 100644 --- a/src/openai/_legacy_response.py +++ b/src/openai/_legacy_response.py @@ -71,6 +71,10 @@ def __init__( self._options = options self.http_response = raw + @property + def request_id(self) -> str | None: + return self.http_response.headers.get("x-request-id") # type: ignore[no-any-return] + @overload def parse(self, *, to: type[_T]) -> _T: ... diff --git a/src/openai/_response.py b/src/openai/_response.py index 47f484ef7a..4ba2ae681c 100644 --- a/src/openai/_response.py +++ b/src/openai/_response.py @@ -258,6 +258,10 @@ def _parse(self, *, to: type[_T] | None = None) -> R | _T: class APIResponse(BaseAPIResponse[R]): + @property + def request_id(self) -> str | None: + return self.http_response.headers.get("x-request-id") # type: ignore[no-any-return] + @overload def parse(self, *, to: type[_T]) -> _T: ... @@ -362,6 +366,10 @@ def iter_lines(self) -> Iterator[str]: class AsyncAPIResponse(BaseAPIResponse[R]): + @property + def request_id(self) -> str | None: + return self.http_response.headers.get("x-request-id") # type: ignore[no-any-return] + @overload async def parse(self, *, to: type[_T]) -> _T: ...