Skip to content

Commit d05765e

Browse files
committed
feat: update Portkey wrappers for OpenAI SDK v2.16.0 compatibility
- Add compact() method to Responses and AsyncResponses - Add CompactedResponse type - Add memory_limit parameter to containers.create - Add prompt_cache_retention parameter to chat completions - Add input_tokens resource to AsyncResponses
1 parent 443c852 commit d05765e

3 files changed

Lines changed: 89 additions & 1 deletion

File tree

portkey_ai/api_resources/apis/containers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def create(
2828
name: str,
2929
expires_after: Union[container_create_params.ExpiresAfter, Omit] = omit,
3030
file_ids: Union[List[str], Omit] = omit,
31+
memory_limit: Union[Literal["1g", "4g", "16g", "64g"], Omit] = omit,
3132
**kwargs,
3233
) -> ContainerCreateResponse:
3334
extra_headers = kwargs.pop("extra_headers", None)
@@ -38,6 +39,7 @@ def create(
3839
name=name,
3940
expires_after=expires_after,
4041
file_ids=file_ids,
42+
memory_limit=memory_limit,
4143
extra_headers=extra_headers,
4244
extra_query=extra_query,
4345
extra_body=extra_body,
@@ -286,6 +288,7 @@ async def create(
286288
name: str,
287289
expires_after: Union[container_create_params.ExpiresAfter, Omit] = omit,
288290
file_ids: Union[List[str], Omit] = omit,
291+
memory_limit: Union[Literal["1g", "4g", "16g", "64g"], Omit] = omit,
289292
**kwargs,
290293
) -> ContainerCreateResponse:
291294
extra_headers = kwargs.pop("extra_headers", None)
@@ -296,6 +299,7 @@ async def create(
296299
name=name,
297300
expires_after=expires_after,
298301
file_ids=file_ids,
302+
memory_limit=memory_limit,
299303
extra_headers=extra_headers,
300304
extra_query=extra_query,
301305
extra_body=extra_body,

portkey_ai/api_resources/apis/responses.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@
3636
from portkey_ai._vendor.openai.types.shared_params.reasoning import Reasoning
3737
from portkey_ai.api_resources.apis.api_resource import APIResource, AsyncAPIResource
3838
from portkey_ai.api_resources.client import AsyncPortkey, Portkey
39-
from portkey_ai.api_resources.types.response_type import Response as ResponseType
39+
from portkey_ai.api_resources.types.response_type import (
40+
Response as ResponseType,
41+
CompactedResponse,
42+
)
4043
from portkey_ai.api_resources.types.responses_input_items_type import InputItemList
4144
from portkey_ai.api_resources.types.responses_input_tokens_type import (
4245
InputTokenCountResponse,
@@ -354,6 +357,35 @@ def cancel(
354357
timeout=timeout,
355358
)
356359

360+
def compact(
361+
self,
362+
*,
363+
model: Union[str, Omit] = omit,
364+
input: Union[str, Iterable[ResponseInputItemParam], None, Omit] = omit,
365+
instructions: Union[Optional[str], Omit] = omit,
366+
previous_response_id: Union[Optional[str], Omit] = omit,
367+
**kwargs,
368+
) -> CompactedResponse:
369+
import json
370+
371+
extra_headers = kwargs.pop("extra_headers", None)
372+
extra_query = kwargs.pop("extra_query", None)
373+
extra_body = kwargs.pop("extra_body", None)
374+
timeout = kwargs.pop("timeout", None)
375+
response = self.openai_client.with_raw_response.responses.compact(
376+
model=model, # type: ignore[arg-type]
377+
input=input,
378+
instructions=instructions,
379+
previous_response_id=previous_response_id,
380+
extra_headers=extra_headers,
381+
extra_query=extra_query,
382+
extra_body={**(extra_body or {}), **kwargs},
383+
timeout=timeout,
384+
)
385+
data = CompactedResponse(**json.loads(response.text))
386+
data._headers = response.headers
387+
return data
388+
357389

358390
class InputItems(APIResource):
359391
def __init__(self, client: Portkey) -> None:
@@ -444,6 +476,7 @@ def __init__(self, client: AsyncPortkey) -> None:
444476
super().__init__(client)
445477
self.openai_client = client.openai_client
446478
self.input_items = AsyncInputItems(client)
479+
self.input_tokens = AsyncInputTokens(client)
447480

448481
@overload
449482
async def create(
@@ -746,6 +779,35 @@ async def cancel(
746779
timeout=timeout,
747780
)
748781

782+
async def compact(
783+
self,
784+
*,
785+
model: Union[str, Omit] = omit,
786+
input: Union[str, Iterable[ResponseInputItemParam], None, Omit] = omit,
787+
instructions: Union[Optional[str], Omit] = omit,
788+
previous_response_id: Union[Optional[str], Omit] = omit,
789+
**kwargs,
790+
) -> CompactedResponse:
791+
import json
792+
793+
extra_headers = kwargs.pop("extra_headers", None)
794+
extra_query = kwargs.pop("extra_query", None)
795+
extra_body = kwargs.pop("extra_body", None)
796+
timeout = kwargs.pop("timeout", None)
797+
response = await self.openai_client.with_raw_response.responses.compact(
798+
model=model, # type: ignore[arg-type]
799+
input=input,
800+
instructions=instructions,
801+
previous_response_id=previous_response_id,
802+
extra_headers=extra_headers,
803+
extra_query=extra_query,
804+
extra_body={**(extra_body or {}), **kwargs},
805+
timeout=timeout,
806+
)
807+
data = CompactedResponse(**json.loads(response.text))
808+
data._headers = response.headers
809+
return data
810+
749811

750812
class AsyncInputItems(AsyncAPIResource):
751813
def __init__(self, client: AsyncPortkey) -> None:

portkey_ai/api_resources/types/response_type.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,28 @@
1818
from portkey_ai.api_resources.types.utils import parse_headers
1919

2020

21+
class CompactedResponse(BaseModel, extra="allow"):
22+
id: str
23+
"""The unique identifier for the compacted response."""
24+
25+
created_at: int
26+
"""Unix timestamp (in seconds) when the compacted conversation was created."""
27+
28+
object: Literal["response.compaction"]
29+
"""The object type. Always `response.compaction`."""
30+
31+
output: List[ResponseOutputItem]
32+
"""The compacted list of output items."""
33+
34+
usage: ResponseUsage
35+
"""Token accounting for the compaction pass."""
36+
37+
_headers: Optional[httpx.Headers] = PrivateAttr()
38+
39+
def get_headers(self) -> Optional[Dict[str, str]]:
40+
return parse_headers(self._headers)
41+
42+
2143
class ResponseError(BaseModel, extra="allow"):
2244
code: Literal[
2345
"server_error",

0 commit comments

Comments
 (0)