From a1b70dffeff97a1af4cd5890c7d602b99e021807 Mon Sep 17 00:00:00 2001 From: Yidi Sprei Date: Fri, 21 Feb 2025 17:09:25 -0500 Subject: [PATCH 1/2] feat(api_client): allow extra fields in API models Added Config class with 'extra' attribute set to 'allow' in InfuzuLatency, InfuzuModelParams, ChatCompletionsRequestContentPart, and ChatCompletionsRequestMessage models. This enables flexibility by permitting additional, unspecified fields in these API models, facilitating easier integration and extension without strict schema constraints. --- src/infuzu/api_client.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/infuzu/api_client.py b/src/infuzu/api_client.py index b03daa5..25f9518 100644 --- a/src/infuzu/api_client.py +++ b/src/infuzu/api_client.py @@ -10,6 +10,9 @@ class ModelWeights(BaseModel): start_latency: Optional[float] = None end_latency: Optional[float] = None + class Config: + extra: str = "allow" + class InfuzuModelParams(BaseModel): llms: Optional[List[str]] = None @@ -19,6 +22,9 @@ class InfuzuModelParams(BaseModel): max_input_cost: Optional[float] = None max_output_cost: Optional[float] = None + class Config: + extra: str = "allow" + class ChatCompletionsRequestContentPart(BaseModel): type: str @@ -26,6 +32,9 @@ class ChatCompletionsRequestContentPart(BaseModel): image_url: Optional[str] = None input_audio: Optional[str] = None + class Config: + extra: str = "allow" + @validator("text", always=True) def check_content_fields(cls, value, values): if "type" in values: @@ -42,6 +51,9 @@ class ChatCompletionsHandlerRequestMessage(BaseModel): role: str name: Optional[str] = None + class Config: + extra: str = "allow" + @validator('role') def role_must_be_valid(cls, v): if v not in ('system', 'user', 'assistant'): From b7a6c66c7b99b84795fb1aaaa77745cc1a6f2623 Mon Sep 17 00:00:00 2001 From: Yidi Sprei Date: Fri, 21 Feb 2025 17:24:08 -0500 Subject: [PATCH 2/2] feat(error-handling): implement custom error handling for API requests Introduced a custom exception `InfuzuAPIError` to replace generic error handling in the `api_client`. This enhances clarity and provides a consistent error interface, making it easier to manage errors across the application. --- src/infuzu/api_client.py | 10 ++-------- src/infuzu/errors.py | 6 ++++++ 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 src/infuzu/errors.py diff --git a/src/infuzu/api_client.py b/src/infuzu/api_client.py index 25f9518..65561b0 100644 --- a/src/infuzu/api_client.py +++ b/src/infuzu/api_client.py @@ -2,6 +2,7 @@ import os from typing import (Optional, Dict, Union, List) from pydantic import (BaseModel, validator) +from .errors import InfuzuAPIError class ModelWeights(BaseModel): @@ -123,11 +124,4 @@ def create_chat_completion( return response.json() except httpx.HTTPStatusError as e: - print(f"HTTP Error: {e}") - raise - except httpx.RequestError as e: - print(f"Request Error: {e}") - raise - except Exception as e: - print(f"An unexpected error occurred: {e}") - raise + raise InfuzuAPIError(e) diff --git a/src/infuzu/errors.py b/src/infuzu/errors.py new file mode 100644 index 0000000..7490470 --- /dev/null +++ b/src/infuzu/errors.py @@ -0,0 +1,6 @@ +import httpx + + +class InfuzuAPIError(Exception): + def __init__(self, base_error: httpx.HTTPError) -> None: + super().__init__(f"HTTP Error: {str(base_error)}")