# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
from Tea.model import TeaModel
from typing import List, Dict, Any


class EvaluationConfigAnswer(TeaModel):
    def __init__(
        self,
        json_path_in_span: str = None,
        json_path_in_span_value: str = None,
        span_name: str = None,
    ):
        self.json_path_in_span = json_path_in_span
        self.json_path_in_span_value = json_path_in_span_value
        self.span_name = span_name

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.json_path_in_span is not None:
            result['JsonPathInSpan'] = self.json_path_in_span
        if self.json_path_in_span_value is not None:
            result['JsonPathInSpanValue'] = self.json_path_in_span_value
        if self.span_name is not None:
            result['SpanName'] = self.span_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('JsonPathInSpan') is not None:
            self.json_path_in_span = m.get('JsonPathInSpan')
        if m.get('JsonPathInSpanValue') is not None:
            self.json_path_in_span_value = m.get('JsonPathInSpanValue')
        if m.get('SpanName') is not None:
            self.span_name = m.get('SpanName')
        return self


class EvaluationConfigContext(TeaModel):
    def __init__(
        self,
        json_path_in_span: str = None,
        json_path_in_span_value: str = None,
        span_name: str = None,
    ):
        self.json_path_in_span = json_path_in_span
        self.json_path_in_span_value = json_path_in_span_value
        self.span_name = span_name

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.json_path_in_span is not None:
            result['JsonPathInSpan'] = self.json_path_in_span
        if self.json_path_in_span_value is not None:
            result['JsonPathInSpanValue'] = self.json_path_in_span_value
        if self.span_name is not None:
            result['SpanName'] = self.span_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('JsonPathInSpan') is not None:
            self.json_path_in_span = m.get('JsonPathInSpan')
        if m.get('JsonPathInSpanValue') is not None:
            self.json_path_in_span_value = m.get('JsonPathInSpanValue')
        if m.get('SpanName') is not None:
            self.span_name = m.get('SpanName')
        return self


class EvaluationConfigQuery(TeaModel):
    def __init__(
        self,
        json_path_in_span: str = None,
        json_path_in_span_value: str = None,
        span_name: str = None,
    ):
        self.json_path_in_span = json_path_in_span
        self.json_path_in_span_value = json_path_in_span_value
        self.span_name = span_name

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.json_path_in_span is not None:
            result['JsonPathInSpan'] = self.json_path_in_span
        if self.json_path_in_span_value is not None:
            result['JsonPathInSpanValue'] = self.json_path_in_span_value
        if self.span_name is not None:
            result['SpanName'] = self.span_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('JsonPathInSpan') is not None:
            self.json_path_in_span = m.get('JsonPathInSpan')
        if m.get('JsonPathInSpanValue') is not None:
            self.json_path_in_span_value = m.get('JsonPathInSpanValue')
        if m.get('SpanName') is not None:
            self.span_name = m.get('SpanName')
        return self


class EvaluationConfig(TeaModel):
    def __init__(
        self,
        answer: EvaluationConfigAnswer = None,
        context: EvaluationConfigContext = None,
        query: EvaluationConfigQuery = None,
    ):
        self.answer = answer
        self.context = context
        self.query = query

    def validate(self):
        if self.answer:
            self.answer.validate()
        if self.context:
            self.context.validate()
        if self.query:
            self.query.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.answer is not None:
            result['Answer'] = self.answer.to_map()
        if self.context is not None:
            result['Context'] = self.context.to_map()
        if self.query is not None:
            result['Query'] = self.query.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Answer') is not None:
            temp_model = EvaluationConfigAnswer()
            self.answer = temp_model.from_map(m['Answer'])
        if m.get('Context') is not None:
            temp_model = EvaluationConfigContext()
            self.context = temp_model.from_map(m['Context'])
        if m.get('Query') is not None:
            temp_model = EvaluationConfigQuery()
            self.query = temp_model.from_map(m['Query'])
        return self


class ModelConfig(TeaModel):
    def __init__(
        self,
        api_key: str = None,
        endpoint: str = None,
        is_self_host: bool = None,
        name: str = None,
        temperature: float = None,
        top_p: float = None,
        use_function_call: bool = None,
    ):
        self.api_key = api_key
        self.endpoint = endpoint
        self.is_self_host = is_self_host
        self.name = name
        self.temperature = temperature
        self.top_p = top_p
        self.use_function_call = use_function_call

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.api_key is not None:
            result['ApiKey'] = self.api_key
        if self.endpoint is not None:
            result['Endpoint'] = self.endpoint
        if self.is_self_host is not None:
            result['IsSelfHost'] = self.is_self_host
        if self.name is not None:
            result['Name'] = self.name
        if self.temperature is not None:
            result['Temperature'] = self.temperature
        if self.top_p is not None:
            result['TopP'] = self.top_p
        if self.use_function_call is not None:
            result['UseFunctionCall'] = self.use_function_call
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('ApiKey') is not None:
            self.api_key = m.get('ApiKey')
        if m.get('Endpoint') is not None:
            self.endpoint = m.get('Endpoint')
        if m.get('IsSelfHost') is not None:
            self.is_self_host = m.get('IsSelfHost')
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Temperature') is not None:
            self.temperature = m.get('Temperature')
        if m.get('TopP') is not None:
            self.top_p = m.get('TopP')
        if m.get('UseFunctionCall') is not None:
            self.use_function_call = m.get('UseFunctionCall')
        return self


class CreateOnlineEvalTaskRequestBodyFilters(TeaModel):
    def __init__(
        self,
        key: str = None,
        operator: str = None,
        value: str = None,
    ):
        self.key = key
        self.operator = operator
        self.value = value

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.operator is not None:
            result['Operator'] = self.operator
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Operator') is not None:
            self.operator = m.get('Operator')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class CreateOnlineEvalTaskRequestBody(TeaModel):
    def __init__(
        self,
        app_name: str = None,
        description: str = None,
        end_time: str = None,
        evaluation_config: EvaluationConfig = None,
        filters: List[CreateOnlineEvalTaskRequestBodyFilters] = None,
        model_config: ModelConfig = None,
        sampling_frequency_minutes: int = None,
        sampling_ratio: int = None,
        start_time: str = None,
        task_name: str = None,
    ):
        self.app_name = app_name
        self.description = description
        self.end_time = end_time
        self.evaluation_config = evaluation_config
        self.filters = filters
        self.model_config = model_config
        self.sampling_frequency_minutes = sampling_frequency_minutes
        self.sampling_ratio = sampling_ratio
        self.start_time = start_time
        self.task_name = task_name

    def validate(self):
        if self.evaluation_config:
            self.evaluation_config.validate()
        if self.filters:
            for k in self.filters:
                if k:
                    k.validate()
        if self.model_config:
            self.model_config.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.app_name is not None:
            result['AppName'] = self.app_name
        if self.description is not None:
            result['Description'] = self.description
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.evaluation_config is not None:
            result['EvaluationConfig'] = self.evaluation_config.to_map()
        result['Filters'] = []
        if self.filters is not None:
            for k in self.filters:
                result['Filters'].append(k.to_map() if k else None)
        if self.model_config is not None:
            result['ModelConfig'] = self.model_config.to_map()
        if self.sampling_frequency_minutes is not None:
            result['SamplingFrequencyMinutes'] = self.sampling_frequency_minutes
        if self.sampling_ratio is not None:
            result['SamplingRatio'] = self.sampling_ratio
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        if self.task_name is not None:
            result['TaskName'] = self.task_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('AppName') is not None:
            self.app_name = m.get('AppName')
        if m.get('Description') is not None:
            self.description = m.get('Description')
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('EvaluationConfig') is not None:
            temp_model = EvaluationConfig()
            self.evaluation_config = temp_model.from_map(m['EvaluationConfig'])
        self.filters = []
        if m.get('Filters') is not None:
            for k in m.get('Filters'):
                temp_model = CreateOnlineEvalTaskRequestBodyFilters()
                self.filters.append(temp_model.from_map(k))
        if m.get('ModelConfig') is not None:
            temp_model = ModelConfig()
            self.model_config = temp_model.from_map(m['ModelConfig'])
        if m.get('SamplingFrequencyMinutes') is not None:
            self.sampling_frequency_minutes = m.get('SamplingFrequencyMinutes')
        if m.get('SamplingRatio') is not None:
            self.sampling_ratio = m.get('SamplingRatio')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        if m.get('TaskName') is not None:
            self.task_name = m.get('TaskName')
        return self


class CreateOnlineEvalTaskRequest(TeaModel):
    def __init__(
        self,
        body: CreateOnlineEvalTaskRequestBody = None,
    ):
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('body') is not None:
            temp_model = CreateOnlineEvalTaskRequestBody()
            self.body = temp_model.from_map(m['body'])
        return self


class CreateOnlineEvalTaskShrinkRequest(TeaModel):
    def __init__(
        self,
        body_shrink: str = None,
    ):
        self.body_shrink = body_shrink

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.body_shrink is not None:
            result['body'] = self.body_shrink
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('body') is not None:
            self.body_shrink = m.get('body')
        return self


class CreateOnlineEvalTaskResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
        task_id: str = None,
    ):
        self.code = code
        self.message = message
        # Id of the request
        self.request_id = request_id
        self.task_id = task_id

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.task_id is not None:
            result['TaskId'] = self.task_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('TaskId') is not None:
            self.task_id = m.get('TaskId')
        return self


class CreateOnlineEvalTaskResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: CreateOnlineEvalTaskResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = CreateOnlineEvalTaskResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class CreateServiceIdentityRoleResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
        role_details: str = None,
        role_name: str = None,
    ):
        # The error code returned if the request fails.
        self.code = code
        # The error message returned if the request fails.
        self.message = message
        # Id of the request
        self.request_id = request_id
        # The role details.
        self.role_details = role_details
        # The name of the service-linked role. Default value: AliyunServiceRoleForPaiLLMTrace.
        self.role_name = role_name

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.role_details is not None:
            result['RoleDetails'] = self.role_details
        if self.role_name is not None:
            result['RoleName'] = self.role_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('RoleDetails') is not None:
            self.role_details = m.get('RoleDetails')
        if m.get('RoleName') is not None:
            self.role_name = m.get('RoleName')
        return self


class CreateServiceIdentityRoleResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: CreateServiceIdentityRoleResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = CreateServiceIdentityRoleResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DeleteOnlineEvalTaskResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
    ):
        self.code = code
        self.message = message
        # Id of the request
        self.request_id = request_id

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DeleteOnlineEvalTaskResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: DeleteOnlineEvalTaskResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DeleteOnlineEvalTaskResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class EvaluateTraceRequest(TeaModel):
    def __init__(
        self,
        app_name: str = None,
        evaluation_config: EvaluationConfig = None,
        evaluation_id: str = None,
        max_time: str = None,
        min_time: str = None,
        model_config: ModelConfig = None,
    ):
        self.app_name = app_name
        # This parameter is required.
        self.evaluation_config = evaluation_config
        self.evaluation_id = evaluation_id
        self.max_time = max_time
        self.min_time = min_time
        self.model_config = model_config

    def validate(self):
        if self.evaluation_config:
            self.evaluation_config.validate()
        if self.model_config:
            self.model_config.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.app_name is not None:
            result['AppName'] = self.app_name
        if self.evaluation_config is not None:
            result['EvaluationConfig'] = self.evaluation_config.to_map()
        if self.evaluation_id is not None:
            result['EvaluationId'] = self.evaluation_id
        if self.max_time is not None:
            result['MaxTime'] = self.max_time
        if self.min_time is not None:
            result['MinTime'] = self.min_time
        if self.model_config is not None:
            result['ModelConfig'] = self.model_config.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('AppName') is not None:
            self.app_name = m.get('AppName')
        if m.get('EvaluationConfig') is not None:
            temp_model = EvaluationConfig()
            self.evaluation_config = temp_model.from_map(m['EvaluationConfig'])
        if m.get('EvaluationId') is not None:
            self.evaluation_id = m.get('EvaluationId')
        if m.get('MaxTime') is not None:
            self.max_time = m.get('MaxTime')
        if m.get('MinTime') is not None:
            self.min_time = m.get('MinTime')
        if m.get('ModelConfig') is not None:
            temp_model = ModelConfig()
            self.model_config = temp_model.from_map(m['ModelConfig'])
        return self


class EvaluateTraceResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        evaluation_id: str = None,
        message: str = None,
        request_id: str = None,
    ):
        self.code = code
        self.evaluation_id = evaluation_id
        self.message = message
        # Id of the request
        self.request_id = request_id

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.evaluation_id is not None:
            result['EvaluationId'] = self.evaluation_id
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('EvaluationId') is not None:
            self.evaluation_id = m.get('EvaluationId')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class EvaluateTraceResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: EvaluateTraceResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = EvaluateTraceResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class GetEvaluationTemplatesResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        evaluation_templates: List[Any] = None,
        message: str = None,
        request_id: str = None,
    ):
        self.code = code
        self.evaluation_templates = evaluation_templates
        self.message = message
        # Id of the request
        self.request_id = request_id

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.evaluation_templates is not None:
            result['EvaluationTemplates'] = self.evaluation_templates
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('EvaluationTemplates') is not None:
            self.evaluation_templates = m.get('EvaluationTemplates')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class GetEvaluationTemplatesResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: GetEvaluationTemplatesResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = GetEvaluationTemplatesResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class GetOnlineEvalTaskResponseBodyTaskFilters(TeaModel):
    def __init__(
        self,
        key: str = None,
        operator: str = None,
        value: str = None,
    ):
        self.key = key
        self.operator = operator
        self.value = value

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.operator is not None:
            result['Operator'] = self.operator
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Operator') is not None:
            self.operator = m.get('Operator')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class GetOnlineEvalTaskResponseBodyTask(TeaModel):
    def __init__(
        self,
        aliyun_uid: str = None,
        app_name: str = None,
        description: str = None,
        eval_results: str = None,
        evaluation_config: EvaluationConfig = None,
        filters: List[GetOnlineEvalTaskResponseBodyTaskFilters] = None,
        gmt_create_time: str = None,
        gmt_end_time: str = None,
        gmt_last_sampling_window_end_time: str = None,
        gmt_last_sampling_window_start_time: str = None,
        gmt_start_time: str = None,
        id: str = None,
        model_config: ModelConfig = None,
        name: str = None,
        record_count: int = None,
        sampling_frequency_minutes: int = None,
        sampling_ratio: int = None,
        status: str = None,
        user_id: str = None,
    ):
        self.aliyun_uid = aliyun_uid
        self.app_name = app_name
        self.description = description
        self.eval_results = eval_results
        self.evaluation_config = evaluation_config
        self.filters = filters
        self.gmt_create_time = gmt_create_time
        self.gmt_end_time = gmt_end_time
        self.gmt_last_sampling_window_end_time = gmt_last_sampling_window_end_time
        self.gmt_last_sampling_window_start_time = gmt_last_sampling_window_start_time
        self.gmt_start_time = gmt_start_time
        self.id = id
        self.model_config = model_config
        self.name = name
        self.record_count = record_count
        self.sampling_frequency_minutes = sampling_frequency_minutes
        self.sampling_ratio = sampling_ratio
        self.status = status
        self.user_id = user_id

    def validate(self):
        if self.evaluation_config:
            self.evaluation_config.validate()
        if self.filters:
            for k in self.filters:
                if k:
                    k.validate()
        if self.model_config:
            self.model_config.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.aliyun_uid is not None:
            result['AliyunUid'] = self.aliyun_uid
        if self.app_name is not None:
            result['AppName'] = self.app_name
        if self.description is not None:
            result['Description'] = self.description
        if self.eval_results is not None:
            result['EvalResults'] = self.eval_results
        if self.evaluation_config is not None:
            result['EvaluationConfig'] = self.evaluation_config.to_map()
        result['Filters'] = []
        if self.filters is not None:
            for k in self.filters:
                result['Filters'].append(k.to_map() if k else None)
        if self.gmt_create_time is not None:
            result['GmtCreateTime'] = self.gmt_create_time
        if self.gmt_end_time is not None:
            result['GmtEndTime'] = self.gmt_end_time
        if self.gmt_last_sampling_window_end_time is not None:
            result['GmtLastSamplingWindowEndTime'] = self.gmt_last_sampling_window_end_time
        if self.gmt_last_sampling_window_start_time is not None:
            result['GmtLastSamplingWindowStartTime'] = self.gmt_last_sampling_window_start_time
        if self.gmt_start_time is not None:
            result['GmtStartTime'] = self.gmt_start_time
        if self.id is not None:
            result['Id'] = self.id
        if self.model_config is not None:
            result['ModelConfig'] = self.model_config.to_map()
        if self.name is not None:
            result['Name'] = self.name
        if self.record_count is not None:
            result['RecordCount'] = self.record_count
        if self.sampling_frequency_minutes is not None:
            result['SamplingFrequencyMinutes'] = self.sampling_frequency_minutes
        if self.sampling_ratio is not None:
            result['SamplingRatio'] = self.sampling_ratio
        if self.status is not None:
            result['Status'] = self.status
        if self.user_id is not None:
            result['UserId'] = self.user_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('AliyunUid') is not None:
            self.aliyun_uid = m.get('AliyunUid')
        if m.get('AppName') is not None:
            self.app_name = m.get('AppName')
        if m.get('Description') is not None:
            self.description = m.get('Description')
        if m.get('EvalResults') is not None:
            self.eval_results = m.get('EvalResults')
        if m.get('EvaluationConfig') is not None:
            temp_model = EvaluationConfig()
            self.evaluation_config = temp_model.from_map(m['EvaluationConfig'])
        self.filters = []
        if m.get('Filters') is not None:
            for k in m.get('Filters'):
                temp_model = GetOnlineEvalTaskResponseBodyTaskFilters()
                self.filters.append(temp_model.from_map(k))
        if m.get('GmtCreateTime') is not None:
            self.gmt_create_time = m.get('GmtCreateTime')
        if m.get('GmtEndTime') is not None:
            self.gmt_end_time = m.get('GmtEndTime')
        if m.get('GmtLastSamplingWindowEndTime') is not None:
            self.gmt_last_sampling_window_end_time = m.get('GmtLastSamplingWindowEndTime')
        if m.get('GmtLastSamplingWindowStartTime') is not None:
            self.gmt_last_sampling_window_start_time = m.get('GmtLastSamplingWindowStartTime')
        if m.get('GmtStartTime') is not None:
            self.gmt_start_time = m.get('GmtStartTime')
        if m.get('Id') is not None:
            self.id = m.get('Id')
        if m.get('ModelConfig') is not None:
            temp_model = ModelConfig()
            self.model_config = temp_model.from_map(m['ModelConfig'])
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('RecordCount') is not None:
            self.record_count = m.get('RecordCount')
        if m.get('SamplingFrequencyMinutes') is not None:
            self.sampling_frequency_minutes = m.get('SamplingFrequencyMinutes')
        if m.get('SamplingRatio') is not None:
            self.sampling_ratio = m.get('SamplingRatio')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        if m.get('UserId') is not None:
            self.user_id = m.get('UserId')
        return self


class GetOnlineEvalTaskResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
        task: GetOnlineEvalTaskResponseBodyTask = None,
    ):
        self.code = code
        self.message = message
        # POP request id
        self.request_id = request_id
        self.task = task

    def validate(self):
        if self.task:
            self.task.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.task is not None:
            result['Task'] = self.task.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Task') is not None:
            temp_model = GetOnlineEvalTaskResponseBodyTask()
            self.task = temp_model.from_map(m['Task'])
        return self


class GetOnlineEvalTaskResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: GetOnlineEvalTaskResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = GetOnlineEvalTaskResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class GetServiceIdentityRoleResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
        role_detail: str = None,
        role_name: str = None,
    ):
        # The internal error code. This parameter is returned only when an error occurs.
        self.code = code
        # The error message. This parameter is returned only when an error occurs.
        self.message = message
        # Id of the request
        self.request_id = request_id
        # The role details.
        self.role_detail = role_detail
        # The name of the service-linked role. Default value: AliyunServiceRoleForPaiLLMTrace.
        self.role_name = role_name

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.role_detail is not None:
            result['RoleDetail'] = self.role_detail
        if self.role_name is not None:
            result['RoleName'] = self.role_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('RoleDetail') is not None:
            self.role_detail = m.get('RoleDetail')
        if m.get('RoleName') is not None:
            self.role_name = m.get('RoleName')
        return self


class GetServiceIdentityRoleResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: GetServiceIdentityRoleResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = GetServiceIdentityRoleResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class GetXtraceTokenResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        grpc_endpoint: str = None,
        grpc_internal_endpoint: str = None,
        http_endpoint: str = None,
        http_internal_endpoint: str = None,
        message: str = None,
        request_id: str = None,
        token: str = None,
    ):
        # The internal error code. This parameter is returned only when an error occurs.
        self.code = code
        # The gRPC endpoint used for uploading ARM traces.
        self.grpc_endpoint = grpc_endpoint
        # The internal gRPC endpoint used for uploading ARMS traces used by Alibaba Cloud.
        self.grpc_internal_endpoint = grpc_internal_endpoint
        # The endpoint used for uploading ARMS traces.
        self.http_endpoint = http_endpoint
        # The internal endpoint used for uploading ARMS traces used by Alibaba Cloud.
        self.http_internal_endpoint = http_internal_endpoint
        # The error message. This parameter is returned only when an error occurs.
        self.message = message
        # Id of the request
        self.request_id = request_id
        # The token used for uploading ARMS traces.
        self.token = token

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.grpc_endpoint is not None:
            result['GrpcEndpoint'] = self.grpc_endpoint
        if self.grpc_internal_endpoint is not None:
            result['GrpcInternalEndpoint'] = self.grpc_internal_endpoint
        if self.http_endpoint is not None:
            result['HttpEndpoint'] = self.http_endpoint
        if self.http_internal_endpoint is not None:
            result['HttpInternalEndpoint'] = self.http_internal_endpoint
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.token is not None:
            result['Token'] = self.token
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('GrpcEndpoint') is not None:
            self.grpc_endpoint = m.get('GrpcEndpoint')
        if m.get('GrpcInternalEndpoint') is not None:
            self.grpc_internal_endpoint = m.get('GrpcInternalEndpoint')
        if m.get('HttpEndpoint') is not None:
            self.http_endpoint = m.get('HttpEndpoint')
        if m.get('HttpInternalEndpoint') is not None:
            self.http_internal_endpoint = m.get('HttpInternalEndpoint')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Token') is not None:
            self.token = m.get('Token')
        return self


class GetXtraceTokenResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: GetXtraceTokenResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = GetXtraceTokenResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ListOnlineEvalTaskResultsRequest(TeaModel):
    def __init__(
        self,
        evaluation_id: str = None,
        most_recent_results_only: bool = None,
        page_number: int = None,
        page_size: int = None,
        trace_ids: List[str] = None,
    ):
        self.evaluation_id = evaluation_id
        self.most_recent_results_only = most_recent_results_only
        self.page_number = page_number
        self.page_size = page_size
        self.trace_ids = trace_ids

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.evaluation_id is not None:
            result['EvaluationId'] = self.evaluation_id
        if self.most_recent_results_only is not None:
            result['MostRecentResultsOnly'] = self.most_recent_results_only
        if self.page_number is not None:
            result['PageNumber'] = self.page_number
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.trace_ids is not None:
            result['TraceIds'] = self.trace_ids
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('EvaluationId') is not None:
            self.evaluation_id = m.get('EvaluationId')
        if m.get('MostRecentResultsOnly') is not None:
            self.most_recent_results_only = m.get('MostRecentResultsOnly')
        if m.get('PageNumber') is not None:
            self.page_number = m.get('PageNumber')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('TraceIds') is not None:
            self.trace_ids = m.get('TraceIds')
        return self


class ListOnlineEvalTaskResultsShrinkRequest(TeaModel):
    def __init__(
        self,
        evaluation_id: str = None,
        most_recent_results_only: bool = None,
        page_number: int = None,
        page_size: int = None,
        trace_ids_shrink: str = None,
    ):
        self.evaluation_id = evaluation_id
        self.most_recent_results_only = most_recent_results_only
        self.page_number = page_number
        self.page_size = page_size
        self.trace_ids_shrink = trace_ids_shrink

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.evaluation_id is not None:
            result['EvaluationId'] = self.evaluation_id
        if self.most_recent_results_only is not None:
            result['MostRecentResultsOnly'] = self.most_recent_results_only
        if self.page_number is not None:
            result['PageNumber'] = self.page_number
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.trace_ids_shrink is not None:
            result['TraceIds'] = self.trace_ids_shrink
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('EvaluationId') is not None:
            self.evaluation_id = m.get('EvaluationId')
        if m.get('MostRecentResultsOnly') is not None:
            self.most_recent_results_only = m.get('MostRecentResultsOnly')
        if m.get('PageNumber') is not None:
            self.page_number = m.get('PageNumber')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('TraceIds') is not None:
            self.trace_ids_shrink = m.get('TraceIds')
        return self


class ListOnlineEvalTaskResultsResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        evaluation_results: List[str] = None,
        message: str = None,
        request_id: str = None,
        total_count: int = None,
    ):
        self.code = code
        self.evaluation_results = evaluation_results
        self.message = message
        # Id of the request
        self.request_id = request_id
        self.total_count = total_count

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.evaluation_results is not None:
            result['EvaluationResults'] = self.evaluation_results
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total_count is not None:
            result['TotalCount'] = self.total_count
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('EvaluationResults') is not None:
            self.evaluation_results = m.get('EvaluationResults')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('TotalCount') is not None:
            self.total_count = m.get('TotalCount')
        return self


class ListOnlineEvalTaskResultsResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: ListOnlineEvalTaskResultsResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ListOnlineEvalTaskResultsResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ListOnlineEvalTasksRequest(TeaModel):
    def __init__(
        self,
        keyword: str = None,
        max_time: str = None,
        min_time: str = None,
        page_number: int = None,
        page_size: int = None,
    ):
        self.keyword = keyword
        self.max_time = max_time
        self.min_time = min_time
        self.page_number = page_number
        self.page_size = page_size

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.keyword is not None:
            result['Keyword'] = self.keyword
        if self.max_time is not None:
            result['MaxTime'] = self.max_time
        if self.min_time is not None:
            result['MinTime'] = self.min_time
        if self.page_number is not None:
            result['PageNumber'] = self.page_number
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Keyword') is not None:
            self.keyword = m.get('Keyword')
        if m.get('MaxTime') is not None:
            self.max_time = m.get('MaxTime')
        if m.get('MinTime') is not None:
            self.min_time = m.get('MinTime')
        if m.get('PageNumber') is not None:
            self.page_number = m.get('PageNumber')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        return self


class ListOnlineEvalTasksResponseBodyTasksFilters(TeaModel):
    def __init__(
        self,
        key: str = None,
        operator: str = None,
        value: str = None,
    ):
        self.key = key
        self.operator = operator
        self.value = value

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.operator is not None:
            result['Operator'] = self.operator
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Operator') is not None:
            self.operator = m.get('Operator')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class ListOnlineEvalTasksResponseBodyTasks(TeaModel):
    def __init__(
        self,
        aliyun_uid: str = None,
        app_name: str = None,
        description: str = None,
        evaluation_config: EvaluationConfig = None,
        filters: List[ListOnlineEvalTasksResponseBodyTasksFilters] = None,
        gmt_create_time: str = None,
        gmt_end_time: str = None,
        gmt_start_time: str = None,
        id: str = None,
        model_config: ModelConfig = None,
        name: str = None,
        sampling_frequency_minutes: int = None,
        sampling_ratio: int = None,
        status: str = None,
        user_id: str = None,
    ):
        self.aliyun_uid = aliyun_uid
        self.app_name = app_name
        self.description = description
        self.evaluation_config = evaluation_config
        self.filters = filters
        self.gmt_create_time = gmt_create_time
        self.gmt_end_time = gmt_end_time
        self.gmt_start_time = gmt_start_time
        self.id = id
        self.model_config = model_config
        self.name = name
        self.sampling_frequency_minutes = sampling_frequency_minutes
        self.sampling_ratio = sampling_ratio
        self.status = status
        self.user_id = user_id

    def validate(self):
        if self.evaluation_config:
            self.evaluation_config.validate()
        if self.filters:
            for k in self.filters:
                if k:
                    k.validate()
        if self.model_config:
            self.model_config.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.aliyun_uid is not None:
            result['AliyunUid'] = self.aliyun_uid
        if self.app_name is not None:
            result['AppName'] = self.app_name
        if self.description is not None:
            result['Description'] = self.description
        if self.evaluation_config is not None:
            result['EvaluationConfig'] = self.evaluation_config.to_map()
        result['Filters'] = []
        if self.filters is not None:
            for k in self.filters:
                result['Filters'].append(k.to_map() if k else None)
        if self.gmt_create_time is not None:
            result['GmtCreateTime'] = self.gmt_create_time
        if self.gmt_end_time is not None:
            result['GmtEndTime'] = self.gmt_end_time
        if self.gmt_start_time is not None:
            result['GmtStartTime'] = self.gmt_start_time
        if self.id is not None:
            result['Id'] = self.id
        if self.model_config is not None:
            result['ModelConfig'] = self.model_config.to_map()
        if self.name is not None:
            result['Name'] = self.name
        if self.sampling_frequency_minutes is not None:
            result['SamplingFrequencyMinutes'] = self.sampling_frequency_minutes
        if self.sampling_ratio is not None:
            result['SamplingRatio'] = self.sampling_ratio
        if self.status is not None:
            result['Status'] = self.status
        if self.user_id is not None:
            result['UserId'] = self.user_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('AliyunUid') is not None:
            self.aliyun_uid = m.get('AliyunUid')
        if m.get('AppName') is not None:
            self.app_name = m.get('AppName')
        if m.get('Description') is not None:
            self.description = m.get('Description')
        if m.get('EvaluationConfig') is not None:
            temp_model = EvaluationConfig()
            self.evaluation_config = temp_model.from_map(m['EvaluationConfig'])
        self.filters = []
        if m.get('Filters') is not None:
            for k in m.get('Filters'):
                temp_model = ListOnlineEvalTasksResponseBodyTasksFilters()
                self.filters.append(temp_model.from_map(k))
        if m.get('GmtCreateTime') is not None:
            self.gmt_create_time = m.get('GmtCreateTime')
        if m.get('GmtEndTime') is not None:
            self.gmt_end_time = m.get('GmtEndTime')
        if m.get('GmtStartTime') is not None:
            self.gmt_start_time = m.get('GmtStartTime')
        if m.get('Id') is not None:
            self.id = m.get('Id')
        if m.get('ModelConfig') is not None:
            temp_model = ModelConfig()
            self.model_config = temp_model.from_map(m['ModelConfig'])
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('SamplingFrequencyMinutes') is not None:
            self.sampling_frequency_minutes = m.get('SamplingFrequencyMinutes')
        if m.get('SamplingRatio') is not None:
            self.sampling_ratio = m.get('SamplingRatio')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        if m.get('UserId') is not None:
            self.user_id = m.get('UserId')
        return self


class ListOnlineEvalTasksResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
        tasks: List[ListOnlineEvalTasksResponseBodyTasks] = None,
        total_count: int = None,
    ):
        self.code = code
        self.message = message
        # Id of the request
        self.request_id = request_id
        self.tasks = tasks
        self.total_count = total_count

    def validate(self):
        if self.tasks:
            for k in self.tasks:
                if k:
                    k.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        result['Tasks'] = []
        if self.tasks is not None:
            for k in self.tasks:
                result['Tasks'].append(k.to_map() if k else None)
        if self.total_count is not None:
            result['TotalCount'] = self.total_count
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        self.tasks = []
        if m.get('Tasks') is not None:
            for k in m.get('Tasks'):
                temp_model = ListOnlineEvalTasksResponseBodyTasks()
                self.tasks.append(temp_model.from_map(k))
        if m.get('TotalCount') is not None:
            self.total_count = m.get('TotalCount')
        return self


class ListOnlineEvalTasksResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: ListOnlineEvalTasksResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ListOnlineEvalTasksResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ListTracesDatasRequestFilters(TeaModel):
    def __init__(
        self,
        key: str = None,
        operator: str = None,
        value: str = None,
    ):
        self.key = key
        self.operator = operator
        self.value = value

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.operator is not None:
            result['Operator'] = self.operator
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Operator') is not None:
            self.operator = m.get('Operator')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class ListTracesDatasRequest(TeaModel):
    def __init__(
        self,
        end_user_id: str = None,
        filters: List[ListTracesDatasRequestFilters] = None,
        has_events: bool = None,
        has_status_message: bool = None,
        llm_app_name: str = None,
        max_time: str = None,
        min_time: str = None,
        opentelemetry_compatible: bool = None,
        owner_id: str = None,
        owner_sub_id: str = None,
        page_number: int = None,
        page_size: int = None,
        sort_by: str = None,
        sort_order: str = None,
        span_ids: List[str] = None,
        trace_ids: List[str] = None,
        trace_reduce_method: str = None,
    ):
        self.end_user_id = end_user_id
        self.filters = filters
        self.has_events = has_events
        self.has_status_message = has_status_message
        self.llm_app_name = llm_app_name
        self.max_time = max_time
        # This parameter is required.
        self.min_time = min_time
        self.opentelemetry_compatible = opentelemetry_compatible
        self.owner_id = owner_id
        self.owner_sub_id = owner_sub_id
        self.page_number = page_number
        self.page_size = page_size
        self.sort_by = sort_by
        self.sort_order = sort_order
        self.span_ids = span_ids
        self.trace_ids = trace_ids
        self.trace_reduce_method = trace_reduce_method

    def validate(self):
        if self.filters:
            for k in self.filters:
                if k:
                    k.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_user_id is not None:
            result['EndUserId'] = self.end_user_id
        result['Filters'] = []
        if self.filters is not None:
            for k in self.filters:
                result['Filters'].append(k.to_map() if k else None)
        if self.has_events is not None:
            result['HasEvents'] = self.has_events
        if self.has_status_message is not None:
            result['HasStatusMessage'] = self.has_status_message
        if self.llm_app_name is not None:
            result['LlmAppName'] = self.llm_app_name
        if self.max_time is not None:
            result['MaxTime'] = self.max_time
        if self.min_time is not None:
            result['MinTime'] = self.min_time
        if self.opentelemetry_compatible is not None:
            result['OpentelemetryCompatible'] = self.opentelemetry_compatible
        if self.owner_id is not None:
            result['OwnerId'] = self.owner_id
        if self.owner_sub_id is not None:
            result['OwnerSubId'] = self.owner_sub_id
        if self.page_number is not None:
            result['PageNumber'] = self.page_number
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.sort_by is not None:
            result['SortBy'] = self.sort_by
        if self.sort_order is not None:
            result['SortOrder'] = self.sort_order
        if self.span_ids is not None:
            result['SpanIds'] = self.span_ids
        if self.trace_ids is not None:
            result['TraceIds'] = self.trace_ids
        if self.trace_reduce_method is not None:
            result['TraceReduceMethod'] = self.trace_reduce_method
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('EndUserId') is not None:
            self.end_user_id = m.get('EndUserId')
        self.filters = []
        if m.get('Filters') is not None:
            for k in m.get('Filters'):
                temp_model = ListTracesDatasRequestFilters()
                self.filters.append(temp_model.from_map(k))
        if m.get('HasEvents') is not None:
            self.has_events = m.get('HasEvents')
        if m.get('HasStatusMessage') is not None:
            self.has_status_message = m.get('HasStatusMessage')
        if m.get('LlmAppName') is not None:
            self.llm_app_name = m.get('LlmAppName')
        if m.get('MaxTime') is not None:
            self.max_time = m.get('MaxTime')
        if m.get('MinTime') is not None:
            self.min_time = m.get('MinTime')
        if m.get('OpentelemetryCompatible') is not None:
            self.opentelemetry_compatible = m.get('OpentelemetryCompatible')
        if m.get('OwnerId') is not None:
            self.owner_id = m.get('OwnerId')
        if m.get('OwnerSubId') is not None:
            self.owner_sub_id = m.get('OwnerSubId')
        if m.get('PageNumber') is not None:
            self.page_number = m.get('PageNumber')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('SortBy') is not None:
            self.sort_by = m.get('SortBy')
        if m.get('SortOrder') is not None:
            self.sort_order = m.get('SortOrder')
        if m.get('SpanIds') is not None:
            self.span_ids = m.get('SpanIds')
        if m.get('TraceIds') is not None:
            self.trace_ids = m.get('TraceIds')
        if m.get('TraceReduceMethod') is not None:
            self.trace_reduce_method = m.get('TraceReduceMethod')
        return self


class ListTracesDatasShrinkRequest(TeaModel):
    def __init__(
        self,
        end_user_id: str = None,
        filters_shrink: str = None,
        has_events: bool = None,
        has_status_message: bool = None,
        llm_app_name: str = None,
        max_time: str = None,
        min_time: str = None,
        opentelemetry_compatible: bool = None,
        owner_id: str = None,
        owner_sub_id: str = None,
        page_number: int = None,
        page_size: int = None,
        sort_by: str = None,
        sort_order: str = None,
        span_ids_shrink: str = None,
        trace_ids_shrink: str = None,
        trace_reduce_method: str = None,
    ):
        self.end_user_id = end_user_id
        self.filters_shrink = filters_shrink
        self.has_events = has_events
        self.has_status_message = has_status_message
        self.llm_app_name = llm_app_name
        self.max_time = max_time
        # This parameter is required.
        self.min_time = min_time
        self.opentelemetry_compatible = opentelemetry_compatible
        self.owner_id = owner_id
        self.owner_sub_id = owner_sub_id
        self.page_number = page_number
        self.page_size = page_size
        self.sort_by = sort_by
        self.sort_order = sort_order
        self.span_ids_shrink = span_ids_shrink
        self.trace_ids_shrink = trace_ids_shrink
        self.trace_reduce_method = trace_reduce_method

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_user_id is not None:
            result['EndUserId'] = self.end_user_id
        if self.filters_shrink is not None:
            result['Filters'] = self.filters_shrink
        if self.has_events is not None:
            result['HasEvents'] = self.has_events
        if self.has_status_message is not None:
            result['HasStatusMessage'] = self.has_status_message
        if self.llm_app_name is not None:
            result['LlmAppName'] = self.llm_app_name
        if self.max_time is not None:
            result['MaxTime'] = self.max_time
        if self.min_time is not None:
            result['MinTime'] = self.min_time
        if self.opentelemetry_compatible is not None:
            result['OpentelemetryCompatible'] = self.opentelemetry_compatible
        if self.owner_id is not None:
            result['OwnerId'] = self.owner_id
        if self.owner_sub_id is not None:
            result['OwnerSubId'] = self.owner_sub_id
        if self.page_number is not None:
            result['PageNumber'] = self.page_number
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.sort_by is not None:
            result['SortBy'] = self.sort_by
        if self.sort_order is not None:
            result['SortOrder'] = self.sort_order
        if self.span_ids_shrink is not None:
            result['SpanIds'] = self.span_ids_shrink
        if self.trace_ids_shrink is not None:
            result['TraceIds'] = self.trace_ids_shrink
        if self.trace_reduce_method is not None:
            result['TraceReduceMethod'] = self.trace_reduce_method
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('EndUserId') is not None:
            self.end_user_id = m.get('EndUserId')
        if m.get('Filters') is not None:
            self.filters_shrink = m.get('Filters')
        if m.get('HasEvents') is not None:
            self.has_events = m.get('HasEvents')
        if m.get('HasStatusMessage') is not None:
            self.has_status_message = m.get('HasStatusMessage')
        if m.get('LlmAppName') is not None:
            self.llm_app_name = m.get('LlmAppName')
        if m.get('MaxTime') is not None:
            self.max_time = m.get('MaxTime')
        if m.get('MinTime') is not None:
            self.min_time = m.get('MinTime')
        if m.get('OpentelemetryCompatible') is not None:
            self.opentelemetry_compatible = m.get('OpentelemetryCompatible')
        if m.get('OwnerId') is not None:
            self.owner_id = m.get('OwnerId')
        if m.get('OwnerSubId') is not None:
            self.owner_sub_id = m.get('OwnerSubId')
        if m.get('PageNumber') is not None:
            self.page_number = m.get('PageNumber')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('SortBy') is not None:
            self.sort_by = m.get('SortBy')
        if m.get('SortOrder') is not None:
            self.sort_order = m.get('SortOrder')
        if m.get('SpanIds') is not None:
            self.span_ids_shrink = m.get('SpanIds')
        if m.get('TraceIds') is not None:
            self.trace_ids_shrink = m.get('TraceIds')
        if m.get('TraceReduceMethod') is not None:
            self.trace_reduce_method = m.get('TraceReduceMethod')
        return self


class ListTracesDatasResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
        total_count: int = None,
        traces: List[Any] = None,
    ):
        self.code = code
        self.message = message
        # POP request id
        self.request_id = request_id
        self.total_count = total_count
        self.traces = traces

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total_count is not None:
            result['TotalCount'] = self.total_count
        if self.traces is not None:
            result['Traces'] = self.traces
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('TotalCount') is not None:
            self.total_count = m.get('TotalCount')
        if m.get('Traces') is not None:
            self.traces = m.get('Traces')
        return self


class ListTracesDatasResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: ListTracesDatasResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ListTracesDatasResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class StopOnlineEvalTaskResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
    ):
        self.code = code
        self.message = message
        # Id of the POP request
        self.request_id = request_id

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class StopOnlineEvalTaskResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: StopOnlineEvalTaskResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = StopOnlineEvalTaskResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class UpdateOnlineEvalTaskRequestFilters(TeaModel):
    def __init__(
        self,
        key: str = None,
        operator: str = None,
        value: str = None,
    ):
        self.key = key
        self.operator = operator
        self.value = value

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.operator is not None:
            result['Operator'] = self.operator
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Operator') is not None:
            self.operator = m.get('Operator')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class UpdateOnlineEvalTaskRequest(TeaModel):
    def __init__(
        self,
        app_name: str = None,
        description: str = None,
        end_time: str = None,
        evaluation_config: EvaluationConfig = None,
        filters: List[UpdateOnlineEvalTaskRequestFilters] = None,
        model_config: ModelConfig = None,
        sampling_frequency_minutes: int = None,
        sampling_ratio: int = None,
        start_time: str = None,
        task_name: str = None,
    ):
        self.app_name = app_name
        self.description = description
        self.end_time = end_time
        self.evaluation_config = evaluation_config
        self.filters = filters
        self.model_config = model_config
        self.sampling_frequency_minutes = sampling_frequency_minutes
        self.sampling_ratio = sampling_ratio
        self.start_time = start_time
        self.task_name = task_name

    def validate(self):
        if self.evaluation_config:
            self.evaluation_config.validate()
        if self.filters:
            for k in self.filters:
                if k:
                    k.validate()
        if self.model_config:
            self.model_config.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.app_name is not None:
            result['AppName'] = self.app_name
        if self.description is not None:
            result['Description'] = self.description
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.evaluation_config is not None:
            result['EvaluationConfig'] = self.evaluation_config.to_map()
        result['Filters'] = []
        if self.filters is not None:
            for k in self.filters:
                result['Filters'].append(k.to_map() if k else None)
        if self.model_config is not None:
            result['ModelConfig'] = self.model_config.to_map()
        if self.sampling_frequency_minutes is not None:
            result['SamplingFrequencyMinutes'] = self.sampling_frequency_minutes
        if self.sampling_ratio is not None:
            result['SamplingRatio'] = self.sampling_ratio
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        if self.task_name is not None:
            result['TaskName'] = self.task_name
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('AppName') is not None:
            self.app_name = m.get('AppName')
        if m.get('Description') is not None:
            self.description = m.get('Description')
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('EvaluationConfig') is not None:
            temp_model = EvaluationConfig()
            self.evaluation_config = temp_model.from_map(m['EvaluationConfig'])
        self.filters = []
        if m.get('Filters') is not None:
            for k in m.get('Filters'):
                temp_model = UpdateOnlineEvalTaskRequestFilters()
                self.filters.append(temp_model.from_map(k))
        if m.get('ModelConfig') is not None:
            temp_model = ModelConfig()
            self.model_config = temp_model.from_map(m['ModelConfig'])
        if m.get('SamplingFrequencyMinutes') is not None:
            self.sampling_frequency_minutes = m.get('SamplingFrequencyMinutes')
        if m.get('SamplingRatio') is not None:
            self.sampling_ratio = m.get('SamplingRatio')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        if m.get('TaskName') is not None:
            self.task_name = m.get('TaskName')
        return self


class UpdateOnlineEvalTaskResponseBody(TeaModel):
    def __init__(
        self,
        code: str = None,
        message: str = None,
        request_id: str = None,
    ):
        self.code = code
        self.message = message
        # Id of the POP request
        self.request_id = request_id

    def validate(self):
        pass

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        if self.message is not None:
            result['Message'] = self.message
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        if m.get('Message') is not None:
            self.message = m.get('Message')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class UpdateOnlineEvalTaskResponse(TeaModel):
    def __init__(
        self,
        headers: Dict[str, str] = None,
        status_code: int = None,
        body: UpdateOnlineEvalTaskResponseBody = None,
    ):
        self.headers = headers
        self.status_code = status_code
        self.body = body

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super().to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m: dict = None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = UpdateOnlineEvalTaskResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


