Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/integrations/fastapi_monitoring/fastapi/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Response,
FileResponse
)
from evidently._pydantic_compat import BaseModel
from pydantic import BaseModel
import pandas as pd

from config.config import DATA_COLUMNS
Expand Down
89 changes: 0 additions & 89 deletions src/evidently/_pydantic_compat.py

This file was deleted.

39 changes: 15 additions & 24 deletions src/evidently/base_metric.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@

import pandas as pd
import typing_inspect
from pydantic import Field
from pydantic import PrivateAttr
from pydantic._internal._model_construction import ModelMetaclass

from evidently._pydantic_compat import Field
from evidently._pydantic_compat import ModelMetaclass
from evidently._pydantic_compat import PrivateAttr
from evidently.core import BaseResult
from evidently.core import ColumnType
from evidently.core import IncludeTags
Expand Down Expand Up @@ -50,16 +50,14 @@ def fields(cls) -> FieldPath:


class MetricResult(PolymorphicModel, BaseResult, metaclass=WithFieldsPathMetaclass): # type: ignore[misc] # pydantic Config
class Config:
type_alias = "evidently:metric_result:MetricResult"
field_tags = {"type": {IncludeTags.TypeField}}
is_base_type = True
alias_required = True
__type_alias__: ClassVar = "evidently:metric_result:MetricResult"
__field_tags__: ClassVar = {"type": {IncludeTags.TypeField}}
__is_base_type__: ClassVar = True
__alias_required__: ClassVar = True


class ErrorResult(BaseResult):
class Config:
underscore_attrs_are_private = True
__underscore_attrs_are_private__: ClassVar = True

_exception: Optional[BaseException] = None # todo: fix serialization of exceptions

Expand All @@ -82,8 +80,7 @@ class DatasetType(Enum):

@autoregister
class ColumnName(EnumValueMixin, EvidentlyBaseModel):
class Config:
type_alias = "evidently:base:ColumnName"
__type_alias__: ClassVar = "evidently:base:ColumnName"

name: str
display_name: DisplayName
Expand Down Expand Up @@ -232,15 +229,13 @@ def result_type(cls) -> Type[MetricResult]:


class BasePreset(EvidentlyBaseModel):
class Config:
type_alias = "evidently:base:BasePreset"
transitive_aliases = True
is_base_type = True
__type_alias__: ClassVar = "evidently:base:BasePreset"
__transitive_aliases__: ClassVar = True
__is_base_type__: ClassVar = True


class Metric(WithTestAndMetricDependencies, Generic[TResult], metaclass=WithResultFieldPathMetaclass):
class Config:
is_base_type = True
__is_base_type__: ClassVar = True

_context: Optional["Context"] = None

Expand Down Expand Up @@ -330,12 +325,8 @@ def get_options_fingerprint(self) -> FingerprintPart:


class ColumnMetricResult(MetricResult):
class Config:
type_alias = "evidently:metric_result:ColumnMetricResult"
field_tags = {
"column_name": {IncludeTags.Parameter},
"column_type": {IncludeTags.Parameter},
}
__type_alias__: ClassVar = "evidently:metric_result:ColumnMetricResult"
__field_tags__: ClassVar = {"column_name": {IncludeTags.Parameter}, "column_type": {IncludeTags.Parameter}}

column_name: str
# todo: use enum
Expand Down
42 changes: 19 additions & 23 deletions src/evidently/calculations/data_drift.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Methods and types for data drift calculations."""

from dataclasses import dataclass
from typing import ClassVar
from typing import Dict
from typing import List
from typing import Optional
Expand Down Expand Up @@ -34,17 +35,15 @@


class DriftStatsField(MetricResult):
class Config:
type_alias = "evidently:metric_result:DriftStatsField"
dict_exclude_fields = {"characteristic_examples", "characteristic_words", "correlations"}
# todo: after tests PR
field_tags = {
"characteristic_examples": {IncludeTags.Render},
"characteristic_words": {IncludeTags.Render},
"correlations": {IncludeTags.Render},
"small_distribution": {IncludeTags.Extra},
}
pd_include = False
__type_alias__: ClassVar = "evidently:metric_result:DriftStatsField"
__dict_exclude_fields__: ClassVar = {"characteristic_examples", "characteristic_words", "correlations"}
__field_tags__: ClassVar = {
"characteristic_examples": {IncludeTags.Render},
"characteristic_words": {IncludeTags.Render},
"correlations": {IncludeTags.Render},
"small_distribution": {IncludeTags.Extra},
}
__pd_include__: ClassVar = False

distribution: Optional[Distribution]
characteristic_examples: Optional[Examples]
Expand All @@ -54,16 +53,14 @@ class Config:


class ColumnDataDriftMetrics(ColumnMetricResult):
class Config:
# todo: change to field_tags: render
type_alias = "evidently:metric_result:ColumnDataDriftMetrics"
dict_exclude_fields = {"scatter"}
pd_exclude_fields = {"scatter"}
field_tags = {
"stattest_name": {IncludeTags.Parameter},
"current": {IncludeTags.Current},
"reference": {IncludeTags.Reference},
}
__type_alias__: ClassVar = "evidently:metric_result:ColumnDataDriftMetrics"
__dict_exclude_fields__: ClassVar = {"scatter"}
__pd_exclude_fields__: ClassVar = {"scatter"}
__field_tags__: ClassVar = {
"stattest_name": {IncludeTags.Parameter},
"current": {IncludeTags.Current},
"reference": {IncludeTags.Reference},
}

stattest_name: str
stattest_threshold: Optional[float]
Expand All @@ -87,8 +84,7 @@ class DatasetDrift:


class DatasetDriftMetrics(MetricResult):
class Config:
type_alias = "evidently:metric_result:DatasetDriftMetrics"
__type_alias__: ClassVar = "evidently:metric_result:DatasetDriftMetrics"

number_of_columns: int
number_of_drifted_columns: int
Expand Down
2 changes: 1 addition & 1 deletion src/evidently/collector/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
from litestar.types import Receive
from litestar.types import Scope
from litestar.types import Send
from pydantic import SecretStr
from typing_extensions import Annotated

from evidently._pydantic_compat import SecretStr
from evidently.collector.config import CONFIG_PATH
from evidently.collector.config import CollectorConfig
from evidently.collector.config import CollectorServiceConfig
Expand Down
22 changes: 9 additions & 13 deletions src/evidently/collector/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@
import time
import warnings
from typing import Any
from typing import ClassVar
from typing import Dict
from typing import List
from typing import Optional
from typing import Union

import pandas as pd
from pydantic import BaseModel
from pydantic import Field
from pydantic import parse_obj_as

from evidently._pydantic_compat import BaseModel
from evidently._pydantic_compat import Field
from evidently._pydantic_compat import parse_obj_as
from evidently.base_metric import Metric
from evidently.collector.storage import CollectorStorage
from evidently.collector.storage import InMemoryStorage
Expand Down Expand Up @@ -43,8 +44,7 @@ def save(self, path: str):


class CollectorTrigger(PolymorphicModel):
class Config:
is_base_type = True
__is_base_type__: ClassVar = True

@abc.abstractmethod
def is_ready(self, config: "CollectorConfig", storage: "CollectorStorage") -> bool:
Expand All @@ -53,8 +53,7 @@ def is_ready(self, config: "CollectorConfig", storage: "CollectorStorage") -> bo

@autoregister
class IntervalTrigger(CollectorTrigger):
class Config:
type_alias = "evidently:collector_trigger:IntervalTrigger"
__type_alias__: ClassVar = "evidently:collector_trigger:IntervalTrigger"

interval: float = Field(gt=0)
last_triggered: float = 0
Expand All @@ -69,8 +68,7 @@ def is_ready(self, config: "CollectorConfig", storage: "CollectorStorage") -> bo

@autoregister
class RowsCountTrigger(CollectorTrigger):
class Config:
type_alias = "evidently:collector_trigger:RowsCountTrigger"
__type_alias__: ClassVar = "evidently:collector_trigger:RowsCountTrigger"

rows_count: int = Field(default=1, gt=0)

Expand All @@ -81,8 +79,7 @@ def is_ready(self, config: "CollectorConfig", storage: "CollectorStorage") -> bo

@autoregister
class RowsCountOrIntervalTrigger(CollectorTrigger):
class Config:
type_alias = "evidently:collector_trigger:RowsCountOrIntervalTrigger"
__type_alias__: ClassVar = "evidently:collector_trigger:RowsCountOrIntervalTrigger"

rows_count_trigger: RowsCountTrigger
interval_trigger: IntervalTrigger
Expand Down Expand Up @@ -135,8 +132,7 @@ def to_report_base(self) -> Union[TestSuite, Report]:


class CollectorConfig(Config):
class Config:
underscore_attrs_are_private = True
__underscore_attrs_are_private__: ClassVar = True

id: str = ""
trigger: CollectorTrigger
Expand Down
11 changes: 5 additions & 6 deletions src/evidently/collector/storage.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import abc
from asyncio import Lock
from typing import Any
from typing import ClassVar
from typing import Dict
from typing import List
from typing import Sequence

import pandas as pd
from pydantic import BaseModel

from evidently._pydantic_compat import BaseModel
from evidently.pydantic_utils import PolymorphicModel
from evidently.pydantic_utils import autoregister
from evidently.suite.base_suite import ReportBase
Expand Down Expand Up @@ -42,9 +43,8 @@ def __exit__(self, exc_type, exc_val, exc_tb):


class CollectorStorage(PolymorphicModel):
class Config:
underscore_attrs_are_private = True
is_base_type = True
__underscore_attrs_are_private__: ClassVar = True
__is_base_type__: ClassVar = True

_locks: Dict[str, Lock] = {}

Expand Down Expand Up @@ -89,8 +89,7 @@ def take_reports(self, id: str) -> Sequence[ReportPopper]:

@autoregister
class InMemoryStorage(CollectorStorage):
class Config:
type_alias = "evidently:collector_storage:InMemoryStorage"
__type_alias__: ClassVar = "evidently:collector_storage:InMemoryStorage"

max_log_events: int = 10

Expand Down
Loading