# coding: utf-8

"""
    Arthur GenAI Engine

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

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

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

import warnings
from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated

from pydantic import Field, StrictBool, StrictInt, StrictStr
from typing import List, Optional
from typing_extensions import Annotated
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.base_completion_request import BaseCompletionRequest
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put import BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.create_eval_request import CreateEvalRequest
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.llm_eval import LLMEval
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.llm_eval_run_response import LLMEvalRunResponse
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.llm_evals_version_list_response import LLMEvalsVersionListResponse
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.llm_get_all_metadata_list_response import LLMGetAllMetadataListResponse
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.models.pagination_sort_method import PaginationSortMethod

from arthur_observability_sdk._generated.arthur_observability_sdk._generated.api_client import ApiClient, RequestSerialized
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.api_response import ApiResponse
from arthur_observability_sdk._generated.arthur_observability_sdk._generated.rest import RESTResponseType


class LLMEvalsApi:
    """NOTE: This class is auto generated by OpenAPI Generator
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    def __init__(self, api_client=None) -> None:
        if api_client is None:
            api_client = ApiClient.get_default()
        self.api_client = api_client


    @validate_call
    def add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMEval:
        """Add a tag to an llm eval version

        Add a tag to an llm eval version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: (required)
        :type body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put=body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMEval]:
        """Add a tag to an llm eval version

        Add a tag to an llm eval version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: (required)
        :type body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put=body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Add a tag to an llm eval version

        Add a tag to an llm eval version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: (required)
        :type body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put: BodyAddTagToLlmEvalVersionApiV1TasksTaskIdLlmEvalsEvalNameVersionsEvalVersionTagsPut
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put=body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put_serialize(
        self,
        eval_name,
        eval_version,
        task_id,
        body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if eval_version is not None:
            _path_params['eval_version'] = eval_version
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put is not None:
            _body_params = body_add_tag_to_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_put


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'application/json'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='PUT',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions/{eval_version}/tags',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to delete.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> None:
        """Delete an llm eval

        Deletes an entire llm eval

        :param eval_name: The name of the llm eval to delete. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete_serialize(
            eval_name=eval_name,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to delete.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[None]:
        """Delete an llm eval

        Deletes an entire llm eval

        :param eval_name: The name of the llm eval to delete. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete_serialize(
            eval_name=eval_name,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to delete.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Delete an llm eval

        Deletes an entire llm eval

        :param eval_name: The name of the llm eval to delete. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete_serialize(
            eval_name=eval_name,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _delete_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_delete_serialize(
        self,
        eval_name,
        task_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='DELETE',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        tag: Annotated[StrictStr, Field(description="The tag to remove from the llm eval version.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> None:
        """Remove a tag from an llm eval version

        Remove a tag from an llm eval version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param tag: The tag to remove from the llm eval version. (required)
        :type tag: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            tag=tag,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        tag: Annotated[StrictStr, Field(description="The tag to remove from the llm eval version.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[None]:
        """Remove a tag from an llm eval version

        Remove a tag from an llm eval version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param tag: The tag to remove from the llm eval version. (required)
        :type tag: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            tag=tag,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        tag: Annotated[StrictStr, Field(description="The tag to remove from the llm eval version.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Remove a tag from an llm eval version

        Remove a tag from an llm eval version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param tag: The tag to remove from the llm eval version. (required)
        :type tag: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            tag=tag,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _delete_tag_from_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_tags_tag_delete_serialize(
        self,
        eval_name,
        eval_version,
        tag,
        task_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if eval_version is not None:
            _path_params['eval_version'] = eval_version
        if tag is not None:
            _path_params['tag'] = tag
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='DELETE',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions/{eval_version}/tags/{tag}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        task_id: StrictStr,
        sort: Annotated[Optional[PaginationSortMethod], Field(description="Sort the results (asc/desc)")] = None,
        page_size: Annotated[Optional[StrictInt], Field(description="Page size. Default is 10. Must be greater than 0 and less than 5000.")] = None,
        page: Annotated[Optional[StrictInt], Field(description="Page number")] = None,
        model_provider: Annotated[Optional[StrictStr], Field(description="Filter by model provider (e.g., 'openai', 'anthropic', 'azure').")] = None,
        model_name: Annotated[Optional[StrictStr], Field(description="Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').")] = None,
        created_after: Annotated[Optional[StrictStr], Field(description="Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        created_before: Annotated[Optional[StrictStr], Field(description="Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        exclude_deleted: Annotated[Optional[StrictBool], Field(description="Whether to exclude deleted prompt versions from the results. Default is False.")] = None,
        min_version: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Minimum version number to filter on (inclusive).")] = None,
        max_version: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Maximum version number to filter on (inclusive).")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMEvalsVersionListResponse:
        """List all versions of an llm eval

        List all versions of an llm eval with optional filtering.

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param sort: Sort the results (asc/desc)
        :type sort: PaginationSortMethod
        :param page_size: Page size. Default is 10. Must be greater than 0 and less than 5000.
        :type page_size: int
        :param page: Page number
        :type page: int
        :param model_provider: Filter by model provider (e.g., 'openai', 'anthropic', 'azure').
        :type model_provider: str
        :param model_name: Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').
        :type model_name: str
        :param created_after: Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_after: str
        :param created_before: Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_before: str
        :param exclude_deleted: Whether to exclude deleted prompt versions from the results. Default is False.
        :type exclude_deleted: bool
        :param min_version: Minimum version number to filter on (inclusive).
        :type min_version: int
        :param max_version: Maximum version number to filter on (inclusive).
        :type max_version: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get_serialize(
            eval_name=eval_name,
            task_id=task_id,
            sort=sort,
            page_size=page_size,
            page=page,
            model_provider=model_provider,
            model_name=model_name,
            created_after=created_after,
            created_before=created_before,
            exclude_deleted=exclude_deleted,
            min_version=min_version,
            max_version=max_version,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEvalsVersionListResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        task_id: StrictStr,
        sort: Annotated[Optional[PaginationSortMethod], Field(description="Sort the results (asc/desc)")] = None,
        page_size: Annotated[Optional[StrictInt], Field(description="Page size. Default is 10. Must be greater than 0 and less than 5000.")] = None,
        page: Annotated[Optional[StrictInt], Field(description="Page number")] = None,
        model_provider: Annotated[Optional[StrictStr], Field(description="Filter by model provider (e.g., 'openai', 'anthropic', 'azure').")] = None,
        model_name: Annotated[Optional[StrictStr], Field(description="Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').")] = None,
        created_after: Annotated[Optional[StrictStr], Field(description="Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        created_before: Annotated[Optional[StrictStr], Field(description="Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        exclude_deleted: Annotated[Optional[StrictBool], Field(description="Whether to exclude deleted prompt versions from the results. Default is False.")] = None,
        min_version: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Minimum version number to filter on (inclusive).")] = None,
        max_version: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Maximum version number to filter on (inclusive).")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMEvalsVersionListResponse]:
        """List all versions of an llm eval

        List all versions of an llm eval with optional filtering.

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param sort: Sort the results (asc/desc)
        :type sort: PaginationSortMethod
        :param page_size: Page size. Default is 10. Must be greater than 0 and less than 5000.
        :type page_size: int
        :param page: Page number
        :type page: int
        :param model_provider: Filter by model provider (e.g., 'openai', 'anthropic', 'azure').
        :type model_provider: str
        :param model_name: Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').
        :type model_name: str
        :param created_after: Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_after: str
        :param created_before: Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_before: str
        :param exclude_deleted: Whether to exclude deleted prompt versions from the results. Default is False.
        :type exclude_deleted: bool
        :param min_version: Minimum version number to filter on (inclusive).
        :type min_version: int
        :param max_version: Maximum version number to filter on (inclusive).
        :type max_version: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get_serialize(
            eval_name=eval_name,
            task_id=task_id,
            sort=sort,
            page_size=page_size,
            page=page,
            model_provider=model_provider,
            model_name=model_name,
            created_after=created_after,
            created_before=created_before,
            exclude_deleted=exclude_deleted,
            min_version=min_version,
            max_version=max_version,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEvalsVersionListResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        task_id: StrictStr,
        sort: Annotated[Optional[PaginationSortMethod], Field(description="Sort the results (asc/desc)")] = None,
        page_size: Annotated[Optional[StrictInt], Field(description="Page size. Default is 10. Must be greater than 0 and less than 5000.")] = None,
        page: Annotated[Optional[StrictInt], Field(description="Page number")] = None,
        model_provider: Annotated[Optional[StrictStr], Field(description="Filter by model provider (e.g., 'openai', 'anthropic', 'azure').")] = None,
        model_name: Annotated[Optional[StrictStr], Field(description="Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').")] = None,
        created_after: Annotated[Optional[StrictStr], Field(description="Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        created_before: Annotated[Optional[StrictStr], Field(description="Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        exclude_deleted: Annotated[Optional[StrictBool], Field(description="Whether to exclude deleted prompt versions from the results. Default is False.")] = None,
        min_version: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Minimum version number to filter on (inclusive).")] = None,
        max_version: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Maximum version number to filter on (inclusive).")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """List all versions of an llm eval

        List all versions of an llm eval with optional filtering.

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param sort: Sort the results (asc/desc)
        :type sort: PaginationSortMethod
        :param page_size: Page size. Default is 10. Must be greater than 0 and less than 5000.
        :type page_size: int
        :param page: Page number
        :type page: int
        :param model_provider: Filter by model provider (e.g., 'openai', 'anthropic', 'azure').
        :type model_provider: str
        :param model_name: Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').
        :type model_name: str
        :param created_after: Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_after: str
        :param created_before: Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_before: str
        :param exclude_deleted: Whether to exclude deleted prompt versions from the results. Default is False.
        :type exclude_deleted: bool
        :param min_version: Minimum version number to filter on (inclusive).
        :type min_version: int
        :param max_version: Maximum version number to filter on (inclusive).
        :type max_version: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get_serialize(
            eval_name=eval_name,
            task_id=task_id,
            sort=sort,
            page_size=page_size,
            page=page,
            model_provider=model_provider,
            model_name=model_name,
            created_after=created_after,
            created_before=created_before,
            exclude_deleted=exclude_deleted,
            min_version=min_version,
            max_version=max_version,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEvalsVersionListResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_all_llm_eval_versions_api_v1_tasks_task_id_llm_evals_eval_name_versions_get_serialize(
        self,
        eval_name,
        task_id,
        sort,
        page_size,
        page,
        model_provider,
        model_name,
        created_after,
        created_before,
        exclude_deleted,
        min_version,
        max_version,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        if sort is not None:
            
            _query_params.append(('sort', sort.value))
            
        if page_size is not None:
            
            _query_params.append(('page_size', page_size))
            
        if page is not None:
            
            _query_params.append(('page', page))
            
        if model_provider is not None:
            
            _query_params.append(('model_provider', model_provider))
            
        if model_name is not None:
            
            _query_params.append(('model_name', model_name))
            
        if created_after is not None:
            
            _query_params.append(('created_after', created_after))
            
        if created_before is not None:
            
            _query_params.append(('created_before', created_before))
            
        if exclude_deleted is not None:
            
            _query_params.append(('exclude_deleted', exclude_deleted))
            
        if min_version is not None:
            
            _query_params.append(('min_version', min_version))
            
        if max_version is not None:
            
            _query_params.append(('max_version', max_version))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get(
        self,
        task_id: StrictStr,
        sort: Annotated[Optional[PaginationSortMethod], Field(description="Sort the results (asc/desc)")] = None,
        page_size: Annotated[Optional[StrictInt], Field(description="Page size. Default is 10. Must be greater than 0 and less than 5000.")] = None,
        page: Annotated[Optional[StrictInt], Field(description="Page number")] = None,
        llm_asset_names: Annotated[Optional[List[StrictStr]], Field(description="LLM asset names to filter on using partial matching. If provided, llm assets matching any of these name patterns will be returned")] = None,
        model_provider: Annotated[Optional[StrictStr], Field(description="Filter by model provider (e.g., 'openai', 'anthropic', 'azure').")] = None,
        model_name: Annotated[Optional[StrictStr], Field(description="Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').")] = None,
        created_after: Annotated[Optional[StrictStr], Field(description="Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        created_before: Annotated[Optional[StrictStr], Field(description="Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMGetAllMetadataListResponse:
        """Get all llm evals

        Get all llm evals for a given task with optional filtering.

        :param task_id: (required)
        :type task_id: str
        :param sort: Sort the results (asc/desc)
        :type sort: PaginationSortMethod
        :param page_size: Page size. Default is 10. Must be greater than 0 and less than 5000.
        :type page_size: int
        :param page: Page number
        :type page: int
        :param llm_asset_names: LLM asset names to filter on using partial matching. If provided, llm assets matching any of these name patterns will be returned
        :type llm_asset_names: List[str]
        :param model_provider: Filter by model provider (e.g., 'openai', 'anthropic', 'azure').
        :type model_provider: str
        :param model_name: Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').
        :type model_name: str
        :param created_after: Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_after: str
        :param created_before: Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_before: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get_serialize(
            task_id=task_id,
            sort=sort,
            page_size=page_size,
            page=page,
            llm_asset_names=llm_asset_names,
            model_provider=model_provider,
            model_name=model_name,
            created_after=created_after,
            created_before=created_before,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMGetAllMetadataListResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get_with_http_info(
        self,
        task_id: StrictStr,
        sort: Annotated[Optional[PaginationSortMethod], Field(description="Sort the results (asc/desc)")] = None,
        page_size: Annotated[Optional[StrictInt], Field(description="Page size. Default is 10. Must be greater than 0 and less than 5000.")] = None,
        page: Annotated[Optional[StrictInt], Field(description="Page number")] = None,
        llm_asset_names: Annotated[Optional[List[StrictStr]], Field(description="LLM asset names to filter on using partial matching. If provided, llm assets matching any of these name patterns will be returned")] = None,
        model_provider: Annotated[Optional[StrictStr], Field(description="Filter by model provider (e.g., 'openai', 'anthropic', 'azure').")] = None,
        model_name: Annotated[Optional[StrictStr], Field(description="Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').")] = None,
        created_after: Annotated[Optional[StrictStr], Field(description="Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        created_before: Annotated[Optional[StrictStr], Field(description="Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMGetAllMetadataListResponse]:
        """Get all llm evals

        Get all llm evals for a given task with optional filtering.

        :param task_id: (required)
        :type task_id: str
        :param sort: Sort the results (asc/desc)
        :type sort: PaginationSortMethod
        :param page_size: Page size. Default is 10. Must be greater than 0 and less than 5000.
        :type page_size: int
        :param page: Page number
        :type page: int
        :param llm_asset_names: LLM asset names to filter on using partial matching. If provided, llm assets matching any of these name patterns will be returned
        :type llm_asset_names: List[str]
        :param model_provider: Filter by model provider (e.g., 'openai', 'anthropic', 'azure').
        :type model_provider: str
        :param model_name: Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').
        :type model_name: str
        :param created_after: Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_after: str
        :param created_before: Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_before: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get_serialize(
            task_id=task_id,
            sort=sort,
            page_size=page_size,
            page=page,
            llm_asset_names=llm_asset_names,
            model_provider=model_provider,
            model_name=model_name,
            created_after=created_after,
            created_before=created_before,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMGetAllMetadataListResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get_without_preload_content(
        self,
        task_id: StrictStr,
        sort: Annotated[Optional[PaginationSortMethod], Field(description="Sort the results (asc/desc)")] = None,
        page_size: Annotated[Optional[StrictInt], Field(description="Page size. Default is 10. Must be greater than 0 and less than 5000.")] = None,
        page: Annotated[Optional[StrictInt], Field(description="Page number")] = None,
        llm_asset_names: Annotated[Optional[List[StrictStr]], Field(description="LLM asset names to filter on using partial matching. If provided, llm assets matching any of these name patterns will be returned")] = None,
        model_provider: Annotated[Optional[StrictStr], Field(description="Filter by model provider (e.g., 'openai', 'anthropic', 'azure').")] = None,
        model_name: Annotated[Optional[StrictStr], Field(description="Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').")] = None,
        created_after: Annotated[Optional[StrictStr], Field(description="Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        created_before: Annotated[Optional[StrictStr], Field(description="Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Get all llm evals

        Get all llm evals for a given task with optional filtering.

        :param task_id: (required)
        :type task_id: str
        :param sort: Sort the results (asc/desc)
        :type sort: PaginationSortMethod
        :param page_size: Page size. Default is 10. Must be greater than 0 and less than 5000.
        :type page_size: int
        :param page: Page number
        :type page: int
        :param llm_asset_names: LLM asset names to filter on using partial matching. If provided, llm assets matching any of these name patterns will be returned
        :type llm_asset_names: List[str]
        :param model_provider: Filter by model provider (e.g., 'openai', 'anthropic', 'azure').
        :type model_provider: str
        :param model_name: Filter by model name (e.g., 'gpt-4', 'claude-3-5-sonnet').
        :type model_name: str
        :param created_after: Inclusive start date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_after: str
        :param created_before: Exclusive end date for prompt creation in ISO8601 string format. Use local time (not UTC).
        :type created_before: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get_serialize(
            task_id=task_id,
            sort=sort,
            page_size=page_size,
            page=page,
            llm_asset_names=llm_asset_names,
            model_provider=model_provider,
            model_name=model_name,
            created_after=created_after,
            created_before=created_before,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMGetAllMetadataListResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_all_llm_evals_api_v1_tasks_task_id_llm_evals_get_serialize(
        self,
        task_id,
        sort,
        page_size,
        page,
        llm_asset_names,
        model_provider,
        model_name,
        created_after,
        created_before,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
            'llm_asset_names': 'multi',
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        if sort is not None:
            
            _query_params.append(('sort', sort.value))
            
        if page_size is not None:
            
            _query_params.append(('page_size', page_size))
            
        if page is not None:
            
            _query_params.append(('page', page))
            
        if llm_asset_names is not None:
            
            _query_params.append(('llm_asset_names', llm_asset_names))
            
        if model_provider is not None:
            
            _query_params.append(('model_provider', model_provider))
            
        if model_name is not None:
            
            _query_params.append(('model_name', model_name))
            
        if created_after is not None:
            
            _query_params.append(('created_after', created_after))
            
        if created_before is not None:
            
            _query_params.append(('created_before', created_before))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v1/tasks/{task_id}/llm_evals',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMEval:
        """Get an llm eval

        Get an llm eval by name and version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMEval]:
        """Get an llm eval

        Get an llm eval by name and version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Get an llm eval

        Get an llm eval by name and version

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to retrieve. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_get_serialize(
        self,
        eval_name,
        eval_version,
        task_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if eval_version is not None:
            _path_params['eval_version'] = eval_version
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions/{eval_version}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        tag: Annotated[StrictStr, Field(description="The tag of the llm eval to retrieve.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMEval:
        """Get an llm eval by name and tag

        Get an llm eval by name and tag

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param tag: The tag of the llm eval to retrieve. (required)
        :type tag: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get_serialize(
            eval_name=eval_name,
            tag=tag,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        tag: Annotated[StrictStr, Field(description="The tag of the llm eval to retrieve.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMEval]:
        """Get an llm eval by name and tag

        Get an llm eval by name and tag

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param tag: The tag of the llm eval to retrieve. (required)
        :type tag: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get_serialize(
            eval_name=eval_name,
            tag=tag,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to retrieve.")],
        tag: Annotated[StrictStr, Field(description="The tag of the llm eval to retrieve.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Get an llm eval by name and tag

        Get an llm eval by name and tag

        :param eval_name: The name of the llm eval to retrieve. (required)
        :type eval_name: str
        :param tag: The tag of the llm eval to retrieve. (required)
        :type tag: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get_serialize(
            eval_name=eval_name,
            tag=tag,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_llm_eval_by_tag_api_v1_tasks_task_id_llm_evals_eval_name_versions_tags_tag_get_serialize(
        self,
        eval_name,
        tag,
        task_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if tag is not None:
            _path_params['tag'] = tag
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions/tags/{tag}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to run.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to run. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        base_completion_request: BaseCompletionRequest,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMEvalRunResponse:
        """Run a saved llm eval

        Run a saved llm eval

        :param eval_name: The name of the llm eval to run. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to run. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param base_completion_request: (required)
        :type base_completion_request: BaseCompletionRequest
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            base_completion_request=base_completion_request,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEvalRunResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to run.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to run. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        base_completion_request: BaseCompletionRequest,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMEvalRunResponse]:
        """Run a saved llm eval

        Run a saved llm eval

        :param eval_name: The name of the llm eval to run. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to run. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param base_completion_request: (required)
        :type base_completion_request: BaseCompletionRequest
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            base_completion_request=base_completion_request,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEvalRunResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to run.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to run. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        base_completion_request: BaseCompletionRequest,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Run a saved llm eval

        Run a saved llm eval

        :param eval_name: The name of the llm eval to run. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to run. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param base_completion_request: (required)
        :type base_completion_request: BaseCompletionRequest
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            base_completion_request=base_completion_request,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEvalRunResponse",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _run_saved_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_completions_post_serialize(
        self,
        eval_name,
        eval_version,
        task_id,
        base_completion_request,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if eval_version is not None:
            _path_params['eval_version'] = eval_version
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if base_completion_request is not None:
            _body_params = base_completion_request


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'application/json'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions/{eval_version}/completions',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to save.")],
        task_id: StrictStr,
        create_eval_request: CreateEvalRequest,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> LLMEval:
        """Save an llm eval

        Save an llm eval to the database

        :param eval_name: The name of the llm eval to save. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param create_eval_request: (required)
        :type create_eval_request: CreateEvalRequest
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post_serialize(
            eval_name=eval_name,
            task_id=task_id,
            create_eval_request=create_eval_request,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to save.")],
        task_id: StrictStr,
        create_eval_request: CreateEvalRequest,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[LLMEval]:
        """Save an llm eval

        Save an llm eval to the database

        :param eval_name: The name of the llm eval to save. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param create_eval_request: (required)
        :type create_eval_request: CreateEvalRequest
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post_serialize(
            eval_name=eval_name,
            task_id=task_id,
            create_eval_request=create_eval_request,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to save.")],
        task_id: StrictStr,
        create_eval_request: CreateEvalRequest,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Save an llm eval

        Save an llm eval to the database

        :param eval_name: The name of the llm eval to save. (required)
        :type eval_name: str
        :param task_id: (required)
        :type task_id: str
        :param create_eval_request: (required)
        :type create_eval_request: CreateEvalRequest
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post_serialize(
            eval_name=eval_name,
            task_id=task_id,
            create_eval_request=create_eval_request,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "LLMEval",
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _save_llm_eval_api_v1_tasks_task_id_llm_evals_eval_name_post_serialize(
        self,
        eval_name,
        task_id,
        create_eval_request,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if create_eval_request is not None:
            _body_params = create_eval_request


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'application/json'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to delete.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to delete. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> None:
        """Delete an llm eval version

        Deletes a specific version of an llm eval

        :param eval_name: The name of the llm eval to delete. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to delete. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete_with_http_info(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to delete.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to delete. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[None]:
        """Delete an llm eval version

        Deletes a specific version of an llm eval

        :param eval_name: The name of the llm eval to delete. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to delete. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete_without_preload_content(
        self,
        eval_name: Annotated[StrictStr, Field(description="The name of the llm eval to delete.")],
        eval_version: Annotated[StrictStr, Field(description="The version of the llm eval to delete. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag.")],
        task_id: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Delete an llm eval version

        Deletes a specific version of an llm eval

        :param eval_name: The name of the llm eval to delete. (required)
        :type eval_name: str
        :param eval_version: The version of the llm eval to delete. Can be 'latest', a version number (e.g. '1', '2', etc.), an ISO datetime string (e.g. '2025-01-01T00:00:00'), or a tag. (required)
        :type eval_version: str
        :param task_id: (required)
        :type task_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete_serialize(
            eval_name=eval_name,
            eval_version=eval_version,
            task_id=task_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '422': "HTTPValidationError",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _soft_delete_llm_eval_version_api_v1_tasks_task_id_llm_evals_eval_name_versions_eval_version_delete_serialize(
        self,
        eval_name,
        eval_version,
        task_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if eval_name is not None:
            _path_params['eval_name'] = eval_name
        if eval_version is not None:
            _path_params['eval_version'] = eval_version
        if task_id is not None:
            _path_params['task_id'] = task_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'API Key'
        ]

        return self.api_client.param_serialize(
            method='DELETE',
            resource_path='/api/v1/tasks/{task_id}/llm_evals/{eval_name}/versions/{eval_version}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )


