From 68b0e6545666630857a089afa7e64365208ff849 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Wed, 31 Jul 2024 15:19:29 +0530 Subject: [PATCH 1/2] feat: strict_open_ai_compliance header + allow extra for chatCompletion response --- portkey_ai/api_resources/base_client.py | 6 +++++ portkey_ai/api_resources/client.py | 8 +++++++ .../api_resources/types/chat_complete_type.py | 24 +++++++++---------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/portkey_ai/api_resources/base_client.py b/portkey_ai/api_resources/base_client.py index f8210087..e650d29c 100644 --- a/portkey_ai/api_resources/base_client.py +++ b/portkey_ai/api_resources/base_client.py @@ -74,6 +74,7 @@ def __init__( azure_api_version: Optional[str] = None, http_client: Optional[httpx.Client] = None, request_timeout: Optional[int] = None, + strict_open_ai_compliance: Optional[bool] = None, **kwargs, ) -> None: self.api_key = api_key or default_api_key() @@ -101,6 +102,7 @@ def __init__( self.azure_api_version = azure_api_version self.cache_namespace = cache_namespace self.request_timeout = request_timeout + self.strict_open_ai_compliance = strict_open_ai_compliance self.kwargs = kwargs self.custom_headers = createHeaders( @@ -128,6 +130,7 @@ def __init__( azure_api_version=azure_api_version, cache_namespace=cache_namespace, request_timeout=request_timeout, + strict_open_ai_compliance=strict_open_ai_compliance, **kwargs, ) @@ -548,6 +551,7 @@ def __init__( azure_api_version: Optional[str] = None, http_client: Optional[httpx.AsyncClient] = None, request_timeout: Optional[int] = None, + strict_open_ai_compliance: Optional[bool] = None, **kwargs, ) -> None: self.api_key = api_key or default_api_key() @@ -575,6 +579,7 @@ def __init__( self.azure_api_version = azure_api_version self.cache_namespace = cache_namespace self.request_timeout = request_timeout + self.strict_open_ai_compliance = strict_open_ai_compliance self.kwargs = kwargs self.custom_headers = createHeaders( @@ -602,6 +607,7 @@ def __init__( azure_api_version=azure_api_version, cache_namespace=cache_namespace, request_timeout=request_timeout, + strict_open_ai_compliance=strict_open_ai_compliance, **kwargs, ) diff --git a/portkey_ai/api_resources/client.py b/portkey_ai/api_resources/client.py index e591523a..a290b40c 100644 --- a/portkey_ai/api_resources/client.py +++ b/portkey_ai/api_resources/client.py @@ -66,6 +66,7 @@ def __init__( azure_api_version: Optional[str] = None, http_client: Optional[httpx.Client] = None, request_timeout: Optional[int] = None, + strict_open_ai_compliance: Optional[bool] = None, **kwargs, ) -> None: super().__init__( @@ -95,6 +96,7 @@ def __init__( cache_namespace=cache_namespace, http_client=http_client, request_timeout=request_timeout, + strict_open_ai_compliance=strict_open_ai_compliance, **kwargs, ) @@ -150,6 +152,7 @@ def copy( azure_api_version: Optional[str] = None, http_client: Optional[httpx.Client] = None, request_timeout: Optional[int] = None, + strict_open_ai_compliance: Optional[bool] = None, **kwargs, ) -> Portkey: return self.__class__( @@ -179,6 +182,7 @@ def copy( cache_namespace=cache_namespace or self.cache_namespace, http_client=http_client or self._client, request_timeout=request_timeout or self.request_timeout, + strict_open_ai_compliance=strict_open_ai_compliance or self.strict_open_ai_compliance, **self.kwargs, **kwargs, ) @@ -243,6 +247,7 @@ def __init__( azure_api_version: Optional[str] = None, http_client: Optional[httpx.AsyncClient] = None, request_timeout: Optional[int] = None, + strict_open_ai_compliance: Optional[bool] = None, **kwargs, ) -> None: super().__init__( @@ -272,6 +277,7 @@ def __init__( cache_namespace=cache_namespace, http_client=http_client, request_timeout=request_timeout, + strict_open_ai_compliance=strict_open_ai_compliance, **kwargs, ) @@ -327,6 +333,7 @@ def copy( azure_api_version: Optional[str] = None, http_client: Optional[httpx.AsyncClient] = None, request_timeout: Optional[int] = None, + strict_open_ai_compliance: Optional[bool] = None, **kwargs, ) -> AsyncPortkey: return self.__class__( @@ -356,6 +363,7 @@ def copy( cache_namespace=cache_namespace or self.cache_namespace, http_client=http_client or self._client, request_timeout=request_timeout or self.request_timeout, + strict_open_ai_compliance=strict_open_ai_compliance or self.strict_open_ai_compliance, **self.kwargs, **kwargs, ) diff --git a/portkey_ai/api_resources/types/chat_complete_type.py b/portkey_ai/api_resources/types/chat_complete_type.py index 7b87b1fb..e2dcbef6 100644 --- a/portkey_ai/api_resources/types/chat_complete_type.py +++ b/portkey_ai/api_resources/types/chat_complete_type.py @@ -28,19 +28,19 @@ class Usage(BaseModel, extra="allow"): total_tokens: Optional[int] = None -class DeltaToolCallFunction(BaseModel): +class DeltaToolCallFunction(BaseModel, extra="allow"): arguments: Optional[str] = None name: Optional[str] = None -class DeltaToolCall(BaseModel): +class DeltaToolCall(BaseModel, extra="allow"): index: Optional[int] id: Optional[str] = None function: Optional[DeltaToolCallFunction] = None type: Optional[str] = None -class Delta(BaseModel): +class Delta(BaseModel, extra="allow"): role: Optional[str] = None content: Optional[str] = "" tool_calls: Optional[List[DeltaToolCall]] = None @@ -61,49 +61,49 @@ def __getitem__(self, key): return getattr(self, key, None) -class FunctionCall(BaseModel): +class FunctionCall(BaseModel, extra="allow"): arguments: Optional[str] name: Optional[str] -class ChatCompletionMessageToolCall(BaseModel): +class ChatCompletionMessageToolCall(BaseModel, extra="allow"): id: Optional[str] function: Optional[FunctionCall] type: Optional[str] -class ChatCompletionMessage(BaseModel): +class ChatCompletionMessage(BaseModel, extra="allow"): content: Optional[Union[str, Iterable[Any]]] = None role: Optional[str] function_call: Optional[FunctionCall] = None tool_calls: Optional[List[ChatCompletionMessageToolCall]] = None -class TopLogprob(BaseModel): +class TopLogprob(BaseModel, extra="allow"): token: Optional[str] bytes: Optional[List[int]] = None logprob: Optional[float] -class ChatCompletionTokenLogprob(BaseModel): +class ChatCompletionTokenLogprob(BaseModel, extra="allow"): token: Optional[str] bytes: Optional[List[int]] = None logprob: Optional[float] top_logprobs: Optional[List[TopLogprob]] -class ChoiceLogprobs(BaseModel): +class ChoiceLogprobs(BaseModel, extra="allow"): content: Optional[List[ChatCompletionTokenLogprob]] = None -class Choice(BaseModel): +class Choice(BaseModel, extra = "allow"): finish_reason: Optional[str] index: Optional[int] logprobs: Optional[ChoiceLogprobs] = None message: Optional[ChatCompletionMessage] -class ChatCompletions(BaseModel): +class ChatCompletions(BaseModel, extra = "allow"): id: Optional[str] choices: Optional[List[Choice]] created: Optional[int] @@ -127,7 +127,7 @@ def get_headers(self) -> Optional[Dict[str, str]]: return parse_headers(self._headers) -class ChatCompletionChunk(BaseModel): +class ChatCompletionChunk(BaseModel, extra="allow"): id: Optional[str] = None object: Optional[str] = None created: Optional[int] = None From 4bf1949ea054f1d5db06df0f49a48f3da38da7db Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Wed, 31 Jul 2024 15:33:29 +0530 Subject: [PATCH 2/2] fix: linting issues --- portkey_ai/api_resources/client.py | 6 ++++-- portkey_ai/api_resources/types/chat_complete_type.py | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/portkey_ai/api_resources/client.py b/portkey_ai/api_resources/client.py index a290b40c..09621faa 100644 --- a/portkey_ai/api_resources/client.py +++ b/portkey_ai/api_resources/client.py @@ -182,7 +182,8 @@ def copy( cache_namespace=cache_namespace or self.cache_namespace, http_client=http_client or self._client, request_timeout=request_timeout or self.request_timeout, - strict_open_ai_compliance=strict_open_ai_compliance or self.strict_open_ai_compliance, + strict_open_ai_compliance=strict_open_ai_compliance + or self.strict_open_ai_compliance, **self.kwargs, **kwargs, ) @@ -363,7 +364,8 @@ def copy( cache_namespace=cache_namespace or self.cache_namespace, http_client=http_client or self._client, request_timeout=request_timeout or self.request_timeout, - strict_open_ai_compliance=strict_open_ai_compliance or self.strict_open_ai_compliance, + strict_open_ai_compliance=strict_open_ai_compliance + or self.strict_open_ai_compliance, **self.kwargs, **kwargs, ) diff --git a/portkey_ai/api_resources/types/chat_complete_type.py b/portkey_ai/api_resources/types/chat_complete_type.py index e2dcbef6..0291bfb9 100644 --- a/portkey_ai/api_resources/types/chat_complete_type.py +++ b/portkey_ai/api_resources/types/chat_complete_type.py @@ -96,14 +96,14 @@ class ChoiceLogprobs(BaseModel, extra="allow"): content: Optional[List[ChatCompletionTokenLogprob]] = None -class Choice(BaseModel, extra = "allow"): +class Choice(BaseModel, extra="allow"): finish_reason: Optional[str] index: Optional[int] logprobs: Optional[ChoiceLogprobs] = None message: Optional[ChatCompletionMessage] -class ChatCompletions(BaseModel, extra = "allow"): +class ChatCompletions(BaseModel, extra="allow"): id: Optional[str] choices: Optional[List[Choice]] created: Optional[int]