# coding: utf-8

"""
    Cloudera AI Inference

    CML Serving :: Install and manage CML Serving workloads.

    The version of the OpenAPI document: v1alpha1
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501


from __future__ import annotations
import pprint
import re  # noqa: F401
import json

from pydantic import BaseModel, ConfigDict, StrictBool, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self

class ServingVLLMEngineArgs(BaseModel):
    """
    Arguments passed to the vllm engine for transformer models.
    """ # noqa: E501
    dtype: Optional[StrictStr] = None
    enable_prefix_caching: Optional[StrictBool] = None
    gpu_memory_utilization: Optional[Union[StrictFloat, StrictInt]] = None
    load_format: Optional[StrictStr] = None
    max_model_length: Optional[StrictInt] = None
    max_num_batched_tokens: Optional[StrictInt] = None
    max_num_seqs: Optional[StrictInt] = None
    quantization: Optional[StrictStr] = None
    enforce_eager: Optional[StrictBool] = None
    trust_remote_code: Optional[StrictBool] = None
    kv_cache_dtype: Optional[StrictStr] = None
    block_size: Optional[StrictInt] = None
    cpu_offload_gb: Optional[StrictInt] = None
    __properties: ClassVar[List[str]] = ["dtype", "enable_prefix_caching", "gpu_memory_utilization", "load_format", "max_model_length", "max_num_batched_tokens", "max_num_seqs", "quantization", "enforce_eager", "trust_remote_code", "kv_cache_dtype", "block_size", "cpu_offload_gb"]

    model_config = ConfigDict(
        populate_by_name=True,
        validate_assignment=True,
        protected_namespaces=(),
    )


    def to_str(self) -> str:
        """Returns the string representation of the model using alias"""
        return pprint.pformat(self.model_dump(by_alias=True))

    def to_json(self) -> str:
        """Returns the JSON representation of the model using alias"""
        # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
        return json.dumps(self.to_dict())

    @classmethod
    def from_json(cls, json_str: str) -> Optional[Self]:
        """Create an instance of ServingVLLMEngineArgs from a JSON string"""
        return cls.from_dict(json.loads(json_str))

    def to_dict(self) -> Dict[str, Any]:
        """Return the dictionary representation of the model using alias.

        This has the following differences from calling pydantic's
        `self.model_dump(by_alias=True)`:

        * `None` is only added to the output dict for nullable fields that
          were set at model initialization. Other fields with value `None`
          are ignored.
        """
        excluded_fields: Set[str] = set([
        ])

        _dict = self.model_dump(
            by_alias=True,
            exclude=excluded_fields,
            exclude_none=True,
        )
        return _dict

    @classmethod
    def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
        """Create an instance of ServingVLLMEngineArgs from a dict"""
        if obj is None:
            return None

        if not isinstance(obj, dict):
            return cls.model_validate(obj)

        _obj = cls.model_validate({
            "dtype": obj.get("dtype"),
            "enable_prefix_caching": obj.get("enable_prefix_caching"),
            "gpu_memory_utilization": obj.get("gpu_memory_utilization"),
            "load_format": obj.get("load_format"),
            "max_model_length": obj.get("max_model_length"),
            "max_num_batched_tokens": obj.get("max_num_batched_tokens"),
            "max_num_seqs": obj.get("max_num_seqs"),
            "quantization": obj.get("quantization"),
            "enforce_eager": obj.get("enforce_eager"),
            "trust_remote_code": obj.get("trust_remote_code"),
            "kv_cache_dtype": obj.get("kv_cache_dtype"),
            "block_size": obj.get("block_size"),
            "cpu_offload_gb": obj.get("cpu_offload_gb")
        })
        return _obj


