From ba8a236b5dfa6b469193aa6bd811a6fbad2b5d71 Mon Sep 17 00:00:00 2001 From: kunwar-vp <213688385+kunwar-vp@users.noreply.github.com> Date: Fri, 24 Jul 2026 09:45:37 +0000 Subject: [PATCH] chore(spec): regenerate _generated/ from upstream openapi.yaml --- src/graphn/_generated/client.py | 8 +- src/graphn/_generated/models/__init__.py | 8 +- .../_generated/models/architecture_info.py | 3 +- .../models/chat_completion_request.py | 3 +- ...chat_completion_request_response_format.py | 3 +- ...t_completion_request_tool_choice_type_1.py | 3 +- .../chat_completion_request_tools_item.py | 3 +- .../models/chat_completion_response.py | 3 +- .../chat_completion_response_choices_item.py | 3 +- .../models/chat_completion_response_usage.py | 3 +- src/graphn/_generated/models/chat_message.py | 3 +- .../models/chat_message_tool_calls_item.py | 3 +- src/graphn/_generated/models/custom_model.py | 8 +- .../_generated/models/custom_model_access.py | 3 +- .../_generated/models/custom_model_create.py | 3 +- .../_generated/models/custom_model_list.py | 3 +- .../_generated/models/custom_model_update.py | 3 +- .../discover_imported_models_request.py | 3 +- .../discover_imported_models_response.py | 3 +- .../models/discovered_imported_model.py | 3 +- src/graphn/_generated/models/error.py | 3 +- .../_generated/models/gpu_hours_response.py | 3 +- .../_generated/models/inference_error.py | 3 +- .../models/inference_error_error.py | 3 +- .../models/list_tts_voices_response_200.py | 3 +- src/graphn/_generated/models/model.py | 3 +- src/graphn/_generated/models/model_list.py | 3 +- src/graphn/_generated/models/secret.py | 8 +- src/graphn/_generated/models/secret_create.py | 3 +- src/graphn/_generated/models/secret_list.py | 3 +- src/graphn/_generated/models/secret_update.py | 3 +- .../models/supported_architectures.py | 3 +- .../models/test_connection_request.py | 3 +- .../models/test_connection_response.py | 3 +- .../models/test_connection_response_usage.py | 3 +- src/graphn/_generated/models/tts_request.py | 3 +- .../models/validate_model_request.py | 139 +++++++++++++++++- .../validate_model_request_weight_source.py | 9 ++ .../models/validate_model_response.py | 3 +- 39 files changed, 229 insertions(+), 50 deletions(-) create mode 100644 src/graphn/_generated/models/validate_model_request_weight_source.py diff --git a/src/graphn/_generated/client.py b/src/graphn/_generated/client.py index 0ab1589..a5f74f6 100644 --- a/src/graphn/_generated/client.py +++ b/src/graphn/_generated/client.py @@ -100,7 +100,7 @@ def __enter__(self) -> "Client": self.get_httpx_client().__enter__() return self - def __exit__(self, *args: Any, **kwargs: Any) -> None: + def __exit__(self, *args: object, **kwargs: Any) -> None: """Exit a context manager for internal httpx.Client (see httpx docs)""" self.get_httpx_client().__exit__(*args, **kwargs) @@ -131,7 +131,7 @@ async def __aenter__(self) -> "Client": await self.get_async_httpx_client().__aenter__() return self - async def __aexit__(self, *args: Any, **kwargs: Any) -> None: + async def __aexit__(self, *args: object, **kwargs: Any) -> None: """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" await self.get_async_httpx_client().__aexit__(*args, **kwargs) @@ -241,7 +241,7 @@ def __enter__(self) -> "AuthenticatedClient": self.get_httpx_client().__enter__() return self - def __exit__(self, *args: Any, **kwargs: Any) -> None: + def __exit__(self, *args: object, **kwargs: Any) -> None: """Exit a context manager for internal httpx.Client (see httpx docs)""" self.get_httpx_client().__exit__(*args, **kwargs) @@ -277,6 +277,6 @@ async def __aenter__(self) -> "AuthenticatedClient": await self.get_async_httpx_client().__aenter__() return self - async def __aexit__(self, *args: Any, **kwargs: Any) -> None: + async def __aexit__(self, *args: object, **kwargs: Any) -> None: """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" await self.get_async_httpx_client().__aexit__(*args, **kwargs) diff --git a/src/graphn/_generated/models/__init__.py b/src/graphn/_generated/models/__init__.py index 8bdfe18..ab4ac69 100644 --- a/src/graphn/_generated/models/__init__.py +++ b/src/graphn/_generated/models/__init__.py @@ -49,6 +49,7 @@ from .tts_request_response_format import TTSRequestResponseFormat from .validate_model_request import ValidateModelRequest from .validate_model_request_quantization import ValidateModelRequestQuantization +from .validate_model_request_weight_source import ValidateModelRequestWeightSource from .validate_model_response import ValidateModelResponse from .validate_model_response_artifact_type import ValidateModelResponseArtifactType from .weight_source import WeightSource @@ -76,9 +77,9 @@ "CustomModelQuantization", "CustomModelStatus", "CustomModelUpdate", - "DiscoveredImportedModel", "DiscoverImportedModelsRequest", "DiscoverImportedModelsResponse", + "DiscoveredImportedModel", "Error", "GpuHoursResponse", "InferenceError", @@ -94,13 +95,14 @@ "SecretList", "SecretUpdate", "SupportedArchitectures", + "TTSRequest", + "TTSRequestResponseFormat", "TestConnectionRequest", "TestConnectionResponse", "TestConnectionResponseUsage", - "TTSRequest", - "TTSRequestResponseFormat", "ValidateModelRequest", "ValidateModelRequestQuantization", + "ValidateModelRequestWeightSource", "ValidateModelResponse", "ValidateModelResponseArtifactType", "WeightSource", diff --git a/src/graphn/_generated/models/architecture_info.py b/src/graphn/_generated/models/architecture_info.py index 168c72d..25f7128 100644 --- a/src/graphn/_generated/models/architecture_info.py +++ b/src/graphn/_generated/models/architecture_info.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar, cast from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="ArchitectureInfo") @@ -39,7 +40,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name") diff --git a/src/graphn/_generated/models/chat_completion_request.py b/src/graphn/_generated/models/chat_completion_request.py index dfe5339..22ff744 100644 --- a/src/graphn/_generated/models/chat_completion_request.py +++ b/src/graphn/_generated/models/chat_completion_request.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -157,7 +158,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.chat_completion_request_response_format import ( ChatCompletionRequestResponseFormat, ) diff --git a/src/graphn/_generated/models/chat_completion_request_response_format.py b/src/graphn/_generated/models/chat_completion_request_response_format.py index c1157b0..410722a 100644 --- a/src/graphn/_generated/models/chat_completion_request_response_format.py +++ b/src/graphn/_generated/models/chat_completion_request_response_format.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self T = TypeVar("T", bound="ChatCompletionRequestResponseFormat") @@ -23,7 +24,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) chat_completion_request_response_format = cls() diff --git a/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py b/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py index 5e7bdd9..c18fd49 100644 --- a/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py +++ b/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self T = TypeVar("T", bound="ChatCompletionRequestToolChoiceType1") @@ -23,7 +24,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) chat_completion_request_tool_choice_type_1 = cls() diff --git a/src/graphn/_generated/models/chat_completion_request_tools_item.py b/src/graphn/_generated/models/chat_completion_request_tools_item.py index 91b8acc..45d7211 100644 --- a/src/graphn/_generated/models/chat_completion_request_tools_item.py +++ b/src/graphn/_generated/models/chat_completion_request_tools_item.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self T = TypeVar("T", bound="ChatCompletionRequestToolsItem") @@ -23,7 +24,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) chat_completion_request_tools_item = cls() diff --git a/src/graphn/_generated/models/chat_completion_response.py b/src/graphn/_generated/models/chat_completion_response.py index 19fb631..ae53044 100644 --- a/src/graphn/_generated/models/chat_completion_response.py +++ b/src/graphn/_generated/models/chat_completion_response.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..models.chat_completion_response_object import ChatCompletionResponseObject from ..types import UNSET, Unset @@ -76,7 +77,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.chat_completion_response_choices_item import ( ChatCompletionResponseChoicesItem, ) diff --git a/src/graphn/_generated/models/chat_completion_response_choices_item.py b/src/graphn/_generated/models/chat_completion_response_choices_item.py index e4135ff..c015fb6 100644 --- a/src/graphn/_generated/models/chat_completion_response_choices_item.py +++ b/src/graphn/_generated/models/chat_completion_response_choices_item.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -57,7 +58,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.chat_message import ChatMessage d = dict(src_dict) diff --git a/src/graphn/_generated/models/chat_completion_response_usage.py b/src/graphn/_generated/models/chat_completion_response_usage.py index 83dc19e..a9e24e0 100644 --- a/src/graphn/_generated/models/chat_completion_response_usage.py +++ b/src/graphn/_generated/models/chat_completion_response_usage.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -45,7 +46,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) prompt_tokens = d.pop("prompt_tokens", UNSET) diff --git a/src/graphn/_generated/models/chat_message.py b/src/graphn/_generated/models/chat_message.py index 318050c..d1d4829 100644 --- a/src/graphn/_generated/models/chat_message.py +++ b/src/graphn/_generated/models/chat_message.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..models.chat_message_role import ChatMessageRole from ..types import UNSET, Unset @@ -67,7 +68,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.chat_message_tool_calls_item import ChatMessageToolCallsItem d = dict(src_dict) diff --git a/src/graphn/_generated/models/chat_message_tool_calls_item.py b/src/graphn/_generated/models/chat_message_tool_calls_item.py index 3c65b1d..55417dc 100644 --- a/src/graphn/_generated/models/chat_message_tool_calls_item.py +++ b/src/graphn/_generated/models/chat_message_tool_calls_item.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self T = TypeVar("T", bound="ChatMessageToolCallsItem") @@ -23,7 +24,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) chat_message_tool_calls_item = cls() diff --git a/src/graphn/_generated/models/custom_model.py b/src/graphn/_generated/models/custom_model.py index b39c286..9dfcb9d 100644 --- a/src/graphn/_generated/models/custom_model.py +++ b/src/graphn/_generated/models/custom_model.py @@ -6,7 +6,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -from dateutil.parser import isoparse +from typing_extensions import Self from ..models.capability import Capability from ..models.custom_model_artifact_type import CustomModelArtifactType @@ -288,7 +288,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) id = d.pop("id") @@ -317,9 +317,9 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: cooldown_seconds = d.pop("cooldown_seconds") - created_at = isoparse(d.pop("created_at")) + created_at = datetime.datetime.fromisoformat(d.pop("created_at")) - updated_at = isoparse(d.pop("updated_at")) + updated_at = datetime.datetime.fromisoformat(d.pop("updated_at")) display_name = d.pop("display_name", UNSET) diff --git a/src/graphn/_generated/models/custom_model_access.py b/src/graphn/_generated/models/custom_model_access.py index e31fe84..cdd8efe 100644 --- a/src/graphn/_generated/models/custom_model_access.py +++ b/src/graphn/_generated/models/custom_model_access.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="CustomModelAccess") @@ -31,7 +32,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) allowed = d.pop("allowed") diff --git a/src/graphn/_generated/models/custom_model_create.py b/src/graphn/_generated/models/custom_model_create.py index 49f1ac9..6445de4 100644 --- a/src/graphn/_generated/models/custom_model_create.py +++ b/src/graphn/_generated/models/custom_model_create.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..models.capability import Capability from ..models.custom_model_create_quantization import CustomModelCreateQuantization @@ -176,7 +177,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name") diff --git a/src/graphn/_generated/models/custom_model_list.py b/src/graphn/_generated/models/custom_model_list.py index ad84d42..df1821d 100644 --- a/src/graphn/_generated/models/custom_model_list.py +++ b/src/graphn/_generated/models/custom_model_list.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -53,7 +54,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.custom_model import CustomModel d = dict(src_dict) diff --git a/src/graphn/_generated/models/custom_model_update.py b/src/graphn/_generated/models/custom_model_update.py index da74ce8..c8ccf80 100644 --- a/src/graphn/_generated/models/custom_model_update.py +++ b/src/graphn/_generated/models/custom_model_update.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..types import UNSET, Unset @@ -63,7 +64,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name", UNSET) diff --git a/src/graphn/_generated/models/discover_imported_models_request.py b/src/graphn/_generated/models/discover_imported_models_request.py index 20d01be..f53d521 100644 --- a/src/graphn/_generated/models/discover_imported_models_request.py +++ b/src/graphn/_generated/models/discover_imported_models_request.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="DiscoverImportedModelsRequest") @@ -36,7 +37,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) endpoint = d.pop("endpoint") diff --git a/src/graphn/_generated/models/discover_imported_models_response.py b/src/graphn/_generated/models/discover_imported_models_response.py index 5c2daa6..b1397b5 100644 --- a/src/graphn/_generated/models/discover_imported_models_response.py +++ b/src/graphn/_generated/models/discover_imported_models_response.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self if TYPE_CHECKING: from ..models.discovered_imported_model import DiscoveredImportedModel @@ -38,7 +39,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.discovered_imported_model import DiscoveredImportedModel d = dict(src_dict) diff --git a/src/graphn/_generated/models/discovered_imported_model.py b/src/graphn/_generated/models/discovered_imported_model.py index 78f4d76..b1254f7 100644 --- a/src/graphn/_generated/models/discovered_imported_model.py +++ b/src/graphn/_generated/models/discovered_imported_model.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="DiscoveredImportedModel") @@ -36,7 +37,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) id = d.pop("id") diff --git a/src/graphn/_generated/models/error.py b/src/graphn/_generated/models/error.py index 95d144a..3c08f2f 100644 --- a/src/graphn/_generated/models/error.py +++ b/src/graphn/_generated/models/error.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="Error") @@ -36,7 +37,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) code = d.pop("code") diff --git a/src/graphn/_generated/models/gpu_hours_response.py b/src/graphn/_generated/models/gpu_hours_response.py index 59c2d28..b743bca 100644 --- a/src/graphn/_generated/models/gpu_hours_response.py +++ b/src/graphn/_generated/models/gpu_hours_response.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="GpuHoursResponse") @@ -31,7 +32,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) gpu_hours = d.pop("gpu_hours") diff --git a/src/graphn/_generated/models/inference_error.py b/src/graphn/_generated/models/inference_error.py index 95fc28d..6a2929f 100644 --- a/src/graphn/_generated/models/inference_error.py +++ b/src/graphn/_generated/models/inference_error.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -42,7 +43,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.inference_error_error import InferenceErrorError d = dict(src_dict) diff --git a/src/graphn/_generated/models/inference_error_error.py b/src/graphn/_generated/models/inference_error_error.py index 8af8d3d..d3ca67e 100644 --- a/src/graphn/_generated/models/inference_error_error.py +++ b/src/graphn/_generated/models/inference_error_error.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -59,7 +60,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) message = d.pop("message", UNSET) diff --git a/src/graphn/_generated/models/list_tts_voices_response_200.py b/src/graphn/_generated/models/list_tts_voices_response_200.py index 11845e1..15dba86 100644 --- a/src/graphn/_generated/models/list_tts_voices_response_200.py +++ b/src/graphn/_generated/models/list_tts_voices_response_200.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self T = TypeVar("T", bound="ListTtsVoicesResponse200") @@ -23,7 +24,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) list_tts_voices_response_200 = cls() diff --git a/src/graphn/_generated/models/model.py b/src/graphn/_generated/models/model.py index ebcdfc3..ae91848 100644 --- a/src/graphn/_generated/models/model.py +++ b/src/graphn/_generated/models/model.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..models.model_object import ModelObject from ..models.model_owned_by import ModelOwnedBy @@ -49,7 +50,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) id = d.pop("id") diff --git a/src/graphn/_generated/models/model_list.py b/src/graphn/_generated/models/model_list.py index 7f5e8d3..4b6c6a7 100644 --- a/src/graphn/_generated/models/model_list.py +++ b/src/graphn/_generated/models/model_list.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..models.model_list_object import ModelListObject @@ -45,7 +46,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.model import Model d = dict(src_dict) diff --git a/src/graphn/_generated/models/secret.py b/src/graphn/_generated/models/secret.py index d99b233..b0d52a0 100644 --- a/src/graphn/_generated/models/secret.py +++ b/src/graphn/_generated/models/secret.py @@ -6,7 +6,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -from dateutil.parser import isoparse +from typing_extensions import Self from ..types import UNSET, Unset @@ -77,7 +77,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) id = d.pop("id") @@ -87,9 +87,9 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: value_preview = d.pop("value_preview") - created_at = isoparse(d.pop("created_at")) + created_at = datetime.datetime.fromisoformat(d.pop("created_at")) - updated_at = isoparse(d.pop("updated_at")) + updated_at = datetime.datetime.fromisoformat(d.pop("updated_at")) provider_id = d.pop("provider_id", UNSET) diff --git a/src/graphn/_generated/models/secret_create.py b/src/graphn/_generated/models/secret_create.py index 10c74c7..127ec99 100644 --- a/src/graphn/_generated/models/secret_create.py +++ b/src/graphn/_generated/models/secret_create.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..types import UNSET, Unset @@ -50,7 +51,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name") diff --git a/src/graphn/_generated/models/secret_list.py b/src/graphn/_generated/models/secret_list.py index 7844362..e045791 100644 --- a/src/graphn/_generated/models/secret_list.py +++ b/src/graphn/_generated/models/secret_list.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..types import UNSET, Unset @@ -53,7 +54,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.secret import Secret d = dict(src_dict) diff --git a/src/graphn/_generated/models/secret_update.py b/src/graphn/_generated/models/secret_update.py index 1fbd232..31ae389 100644 --- a/src/graphn/_generated/models/secret_update.py +++ b/src/graphn/_generated/models/secret_update.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self T = TypeVar("T", bound="SecretUpdate") @@ -31,7 +32,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) value = d.pop("value") diff --git a/src/graphn/_generated/models/supported_architectures.py b/src/graphn/_generated/models/supported_architectures.py index 6133402..45e23c9 100644 --- a/src/graphn/_generated/models/supported_architectures.py +++ b/src/graphn/_generated/models/supported_architectures.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self if TYPE_CHECKING: from ..models.architecture_info import ArchitectureInfo @@ -39,7 +40,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.architecture_info import ArchitectureInfo d = dict(src_dict) diff --git a/src/graphn/_generated/models/test_connection_request.py b/src/graphn/_generated/models/test_connection_request.py index 7305b71..83b4409 100644 --- a/src/graphn/_generated/models/test_connection_request.py +++ b/src/graphn/_generated/models/test_connection_request.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..types import UNSET, Unset @@ -51,7 +52,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) endpoint = d.pop("endpoint") diff --git a/src/graphn/_generated/models/test_connection_response.py b/src/graphn/_generated/models/test_connection_response.py index a9ec22d..b547880 100644 --- a/src/graphn/_generated/models/test_connection_response.py +++ b/src/graphn/_generated/models/test_connection_response.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..types import UNSET, Unset @@ -50,7 +51,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.test_connection_response_usage import TestConnectionResponseUsage d = dict(src_dict) diff --git a/src/graphn/_generated/models/test_connection_response_usage.py b/src/graphn/_generated/models/test_connection_response_usage.py index 1617fc7..8dadbda 100644 --- a/src/graphn/_generated/models/test_connection_response_usage.py +++ b/src/graphn/_generated/models/test_connection_response_usage.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self T = TypeVar("T", bound="TestConnectionResponseUsage") @@ -23,7 +24,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) test_connection_response_usage = cls() diff --git a/src/graphn/_generated/models/tts_request.py b/src/graphn/_generated/models/tts_request.py index 1bcc984..a529339 100644 --- a/src/graphn/_generated/models/tts_request.py +++ b/src/graphn/_generated/models/tts_request.py @@ -4,6 +4,7 @@ from typing import Any, TypeVar from attrs import define as _attrs_define +from typing_extensions import Self from ..models.tts_request_response_format import TTSRequestResponseFormat from ..types import UNSET, Unset @@ -100,7 +101,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) model = d.pop("model") diff --git a/src/graphn/_generated/models/validate_model_request.py b/src/graphn/_generated/models/validate_model_request.py index 197b62f..b6feb9d 100644 --- a/src/graphn/_generated/models/validate_model_request.py +++ b/src/graphn/_generated/models/validate_model_request.py @@ -4,10 +4,14 @@ from typing import Any, TypeVar, cast from attrs import define as _attrs_define +from typing_extensions import Self from ..models.validate_model_request_quantization import ( ValidateModelRequestQuantization, ) +from ..models.validate_model_request_weight_source import ( + ValidateModelRequestWeightSource, +) from ..types import UNSET, Unset T = TypeVar("T", bound="ValidateModelRequest") @@ -17,7 +21,34 @@ class ValidateModelRequest: """ Attributes: - huggingface_model_id (str): + huggingface_model_id (str): Required when `weight_source` is `huggingface`. Carried + through on the `s3_assume_role` path as the canonical + model identifier (used for naming + LoRA classification + hints), but architecture detection comes from `config.json` + in the customer's bucket, not the HF Hub. + weight_source (ValidateModelRequestWeightSource | Unset): Which validation path to run. `huggingface` (default) + queries + the HuggingFace Hub API. `s3_assume_role` chains the same + two-hop AssumeRole the smart-loader uses (bootstrap user + → platform role → customer role with ExternalId) and + probes `config.json` directly, so an unsupported + architecture surfaces before AF provisions a download Job. + `s3_presigned` is intentionally not accepted: presigned + URLs deliver a single archive object and architecture + detection requires the full extract. + Default: ValidateModelRequestWeightSource.HUGGINGFACE. + s3_url (None | str | Unset): S3 prefix (must end with `/`). Required when + `weight_source` is `s3_assume_role`. Points at the + directory containing `config.json` + safetensors in + HuggingFace layout; the smart-loader uses `aws s3 sync` + on this path so a single archive object is rejected at + the API boundary. + s3_role_arn (None | str | Unset): Customer IAM role ARN. Required when `weight_source` is + `s3_assume_role`. Role name must start with `graphn-byom-` + (the platform IAM is scoped to that prefix as + defense-in-depth). + s3_external_id (None | str | Unset): ExternalId from the customer's IAM trust policy. Required + when `weight_source` is `s3_assume_role`. hf_token_secret_id (None | str | Unset): ID of a workspace secret holding a HuggingFace token. quantization (ValidateModelRequestQuantization | Unset): gpu_memory_utilization (float | Unset): Default: 0.9. @@ -26,17 +57,57 @@ class ValidateModelRequest: from this hint instead of waiting for a HuggingFace head-bytes probe; useful for very large models where the probe would otherwise stall the validate response. + base_model_id (None | str | Unset): LoRA base override / hint, mirroring + `CustomModelCreate.base_model_id`. When the validator + detects a LoRA adapter and this field is set, the + override **wins** over + `adapter_config.json::base_model_name_or_path` -- so the + allowlist check and the base-model sizing probe both run + against the override. Useful for adapters whose adapter + config records a local filesystem path + (e.g. `C:/users/.../base`) that isn't a valid HF id. + Silently ignored when the validator resolves the repo as + a full model (`artifact_type=base`). """ huggingface_model_id: str + weight_source: ValidateModelRequestWeightSource | Unset = ( + ValidateModelRequestWeightSource.HUGGINGFACE + ) + s3_url: None | str | Unset = UNSET + s3_role_arn: None | str | Unset = UNSET + s3_external_id: None | str | Unset = UNSET hf_token_secret_id: None | str | Unset = UNSET quantization: ValidateModelRequestQuantization | Unset = UNSET gpu_memory_utilization: float | Unset = 0.9 model_size_gb: int | None | Unset = UNSET + base_model_id: None | str | Unset = UNSET def to_dict(self) -> dict[str, Any]: huggingface_model_id = self.huggingface_model_id + weight_source: str | Unset = UNSET + if not isinstance(self.weight_source, Unset): + weight_source = self.weight_source.value + + s3_url: None | str | Unset + if isinstance(self.s3_url, Unset): + s3_url = UNSET + else: + s3_url = self.s3_url + + s3_role_arn: None | str | Unset + if isinstance(self.s3_role_arn, Unset): + s3_role_arn = UNSET + else: + s3_role_arn = self.s3_role_arn + + s3_external_id: None | str | Unset + if isinstance(self.s3_external_id, Unset): + s3_external_id = UNSET + else: + s3_external_id = self.s3_external_id + hf_token_secret_id: None | str | Unset if isinstance(self.hf_token_secret_id, Unset): hf_token_secret_id = UNSET @@ -55,6 +126,12 @@ def to_dict(self) -> dict[str, Any]: else: model_size_gb = self.model_size_gb + base_model_id: None | str | Unset + if isinstance(self.base_model_id, Unset): + base_model_id = UNSET + else: + base_model_id = self.base_model_id + field_dict: dict[str, Any] = {} field_dict.update( @@ -62,6 +139,14 @@ def to_dict(self) -> dict[str, Any]: "huggingface_model_id": huggingface_model_id, } ) + if weight_source is not UNSET: + field_dict["weight_source"] = weight_source + if s3_url is not UNSET: + field_dict["s3_url"] = s3_url + if s3_role_arn is not UNSET: + field_dict["s3_role_arn"] = s3_role_arn + if s3_external_id is not UNSET: + field_dict["s3_external_id"] = s3_external_id if hf_token_secret_id is not UNSET: field_dict["hf_token_secret_id"] = hf_token_secret_id if quantization is not UNSET: @@ -70,14 +155,50 @@ def to_dict(self) -> dict[str, Any]: field_dict["gpu_memory_utilization"] = gpu_memory_utilization if model_size_gb is not UNSET: field_dict["model_size_gb"] = model_size_gb + if base_model_id is not UNSET: + field_dict["base_model_id"] = base_model_id return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) huggingface_model_id = d.pop("huggingface_model_id") + _weight_source = d.pop("weight_source", UNSET) + weight_source: ValidateModelRequestWeightSource | Unset + if isinstance(_weight_source, Unset): + weight_source = UNSET + else: + weight_source = ValidateModelRequestWeightSource(_weight_source) + + def _parse_s3_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + s3_url = _parse_s3_url(d.pop("s3_url", UNSET)) + + def _parse_s3_role_arn(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + s3_role_arn = _parse_s3_role_arn(d.pop("s3_role_arn", UNSET)) + + def _parse_s3_external_id(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + s3_external_id = _parse_s3_external_id(d.pop("s3_external_id", UNSET)) + def _parse_hf_token_secret_id(data: object) -> None | str | Unset: if data is None: return data @@ -107,12 +228,26 @@ def _parse_model_size_gb(data: object) -> int | None | Unset: model_size_gb = _parse_model_size_gb(d.pop("model_size_gb", UNSET)) + def _parse_base_model_id(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + base_model_id = _parse_base_model_id(d.pop("base_model_id", UNSET)) + validate_model_request = cls( huggingface_model_id=huggingface_model_id, + weight_source=weight_source, + s3_url=s3_url, + s3_role_arn=s3_role_arn, + s3_external_id=s3_external_id, hf_token_secret_id=hf_token_secret_id, quantization=quantization, gpu_memory_utilization=gpu_memory_utilization, model_size_gb=model_size_gb, + base_model_id=base_model_id, ) return validate_model_request diff --git a/src/graphn/_generated/models/validate_model_request_weight_source.py b/src/graphn/_generated/models/validate_model_request_weight_source.py new file mode 100644 index 0000000..8b29625 --- /dev/null +++ b/src/graphn/_generated/models/validate_model_request_weight_source.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class ValidateModelRequestWeightSource(str, Enum): + HUGGINGFACE = "huggingface" + S3_ASSUME_ROLE = "s3_assume_role" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/validate_model_response.py b/src/graphn/_generated/models/validate_model_response.py index b2519ba..9eb28d1 100644 --- a/src/graphn/_generated/models/validate_model_response.py +++ b/src/graphn/_generated/models/validate_model_response.py @@ -5,6 +5,7 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field +from typing_extensions import Self from ..models.validate_model_response_artifact_type import ( ValidateModelResponseArtifactType, @@ -137,7 +138,7 @@ def to_dict(self) -> dict[str, Any]: return field_dict @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) valid = d.pop("valid")