arize 8.0.0a22__py3-none-any.whl → 8.0.0a23__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arize/__init__.py +17 -9
- arize/_exporter/client.py +55 -36
- arize/_exporter/parsers/tracing_data_parser.py +41 -30
- arize/_exporter/validation.py +3 -3
- arize/_flight/client.py +207 -76
- arize/_generated/api_client/__init__.py +30 -6
- arize/_generated/api_client/api/__init__.py +1 -0
- arize/_generated/api_client/api/datasets_api.py +864 -190
- arize/_generated/api_client/api/experiments_api.py +167 -131
- arize/_generated/api_client/api/projects_api.py +1197 -0
- arize/_generated/api_client/api_client.py +2 -2
- arize/_generated/api_client/configuration.py +42 -34
- arize/_generated/api_client/exceptions.py +2 -2
- arize/_generated/api_client/models/__init__.py +15 -4
- arize/_generated/api_client/models/dataset.py +10 -10
- arize/_generated/api_client/models/dataset_example.py +111 -0
- arize/_generated/api_client/models/dataset_example_update.py +100 -0
- arize/_generated/api_client/models/dataset_version.py +13 -13
- arize/_generated/api_client/models/datasets_create_request.py +16 -8
- arize/_generated/api_client/models/datasets_examples_insert_request.py +100 -0
- arize/_generated/api_client/models/datasets_examples_list200_response.py +106 -0
- arize/_generated/api_client/models/datasets_examples_update_request.py +102 -0
- arize/_generated/api_client/models/datasets_list200_response.py +10 -4
- arize/_generated/api_client/models/experiment.py +14 -16
- arize/_generated/api_client/models/experiment_run.py +108 -0
- arize/_generated/api_client/models/experiment_run_create.py +102 -0
- arize/_generated/api_client/models/experiments_create_request.py +16 -10
- arize/_generated/api_client/models/experiments_list200_response.py +10 -4
- arize/_generated/api_client/models/experiments_runs_list200_response.py +19 -5
- arize/_generated/api_client/models/{error.py → pagination_metadata.py} +13 -11
- arize/_generated/api_client/models/primitive_value.py +172 -0
- arize/_generated/api_client/models/problem.py +100 -0
- arize/_generated/api_client/models/project.py +99 -0
- arize/_generated/api_client/models/{datasets_list_examples200_response.py → projects_create_request.py} +13 -11
- arize/_generated/api_client/models/projects_list200_response.py +106 -0
- arize/_generated/api_client/rest.py +2 -2
- arize/_generated/api_client/test/test_dataset.py +4 -2
- arize/_generated/api_client/test/test_dataset_example.py +56 -0
- arize/_generated/api_client/test/test_dataset_example_update.py +52 -0
- arize/_generated/api_client/test/test_dataset_version.py +7 -2
- arize/_generated/api_client/test/test_datasets_api.py +27 -13
- arize/_generated/api_client/test/test_datasets_create_request.py +8 -4
- arize/_generated/api_client/test/{test_datasets_list_examples200_response.py → test_datasets_examples_insert_request.py} +19 -15
- arize/_generated/api_client/test/test_datasets_examples_list200_response.py +66 -0
- arize/_generated/api_client/test/test_datasets_examples_update_request.py +61 -0
- arize/_generated/api_client/test/test_datasets_list200_response.py +9 -3
- arize/_generated/api_client/test/test_experiment.py +2 -4
- arize/_generated/api_client/test/test_experiment_run.py +56 -0
- arize/_generated/api_client/test/test_experiment_run_create.py +54 -0
- arize/_generated/api_client/test/test_experiments_api.py +6 -6
- arize/_generated/api_client/test/test_experiments_create_request.py +9 -6
- arize/_generated/api_client/test/test_experiments_list200_response.py +9 -5
- arize/_generated/api_client/test/test_experiments_runs_list200_response.py +15 -5
- arize/_generated/api_client/test/test_pagination_metadata.py +53 -0
- arize/_generated/api_client/test/{test_error.py → test_primitive_value.py} +13 -14
- arize/_generated/api_client/test/test_problem.py +57 -0
- arize/_generated/api_client/test/test_project.py +58 -0
- arize/_generated/api_client/test/test_projects_api.py +59 -0
- arize/_generated/api_client/test/test_projects_create_request.py +54 -0
- arize/_generated/api_client/test/test_projects_list200_response.py +70 -0
- arize/_generated/api_client_README.md +43 -29
- arize/_generated/protocol/flight/flight_pb2.py +400 -0
- arize/_lazy.py +27 -19
- arize/client.py +268 -55
- arize/config.py +365 -116
- arize/constants/__init__.py +1 -0
- arize/constants/config.py +11 -4
- arize/constants/ml.py +6 -4
- arize/constants/openinference.py +2 -0
- arize/constants/pyarrow.py +2 -0
- arize/constants/spans.py +3 -1
- arize/datasets/__init__.py +1 -0
- arize/datasets/client.py +299 -84
- arize/datasets/errors.py +32 -2
- arize/datasets/validation.py +18 -8
- arize/embeddings/__init__.py +2 -0
- arize/embeddings/auto_generator.py +23 -19
- arize/embeddings/base_generators.py +89 -36
- arize/embeddings/constants.py +2 -0
- arize/embeddings/cv_generators.py +26 -4
- arize/embeddings/errors.py +27 -5
- arize/embeddings/nlp_generators.py +31 -12
- arize/embeddings/tabular_generators.py +32 -20
- arize/embeddings/usecases.py +12 -2
- arize/exceptions/__init__.py +1 -0
- arize/exceptions/auth.py +11 -1
- arize/exceptions/base.py +29 -4
- arize/exceptions/models.py +21 -2
- arize/exceptions/parameters.py +31 -0
- arize/exceptions/spaces.py +12 -1
- arize/exceptions/types.py +86 -7
- arize/exceptions/values.py +220 -20
- arize/experiments/__init__.py +1 -0
- arize/experiments/client.py +389 -285
- arize/experiments/evaluators/__init__.py +1 -0
- arize/experiments/evaluators/base.py +74 -41
- arize/experiments/evaluators/exceptions.py +6 -3
- arize/experiments/evaluators/executors.py +121 -73
- arize/experiments/evaluators/rate_limiters.py +106 -57
- arize/experiments/evaluators/types.py +34 -7
- arize/experiments/evaluators/utils.py +65 -27
- arize/experiments/functions.py +103 -101
- arize/experiments/tracing.py +52 -44
- arize/experiments/types.py +56 -31
- arize/logging.py +54 -22
- arize/models/__init__.py +1 -0
- arize/models/batch_validation/__init__.py +1 -0
- arize/models/batch_validation/errors.py +543 -65
- arize/models/batch_validation/validator.py +339 -300
- arize/models/bounded_executor.py +20 -7
- arize/models/casting.py +75 -29
- arize/models/client.py +326 -107
- arize/models/proto.py +95 -40
- arize/models/stream_validation.py +42 -14
- arize/models/surrogate_explainer/__init__.py +1 -0
- arize/models/surrogate_explainer/mimic.py +24 -13
- arize/pre_releases.py +43 -0
- arize/projects/__init__.py +1 -0
- arize/projects/client.py +129 -0
- arize/regions.py +40 -0
- arize/spans/__init__.py +1 -0
- arize/spans/client.py +130 -106
- arize/spans/columns.py +13 -0
- arize/spans/conversion.py +54 -38
- arize/spans/validation/__init__.py +1 -0
- arize/spans/validation/annotations/__init__.py +1 -0
- arize/spans/validation/annotations/annotations_validation.py +6 -4
- arize/spans/validation/annotations/dataframe_form_validation.py +13 -11
- arize/spans/validation/annotations/value_validation.py +35 -11
- arize/spans/validation/common/__init__.py +1 -0
- arize/spans/validation/common/argument_validation.py +33 -8
- arize/spans/validation/common/dataframe_form_validation.py +35 -9
- arize/spans/validation/common/errors.py +211 -11
- arize/spans/validation/common/value_validation.py +80 -13
- arize/spans/validation/evals/__init__.py +1 -0
- arize/spans/validation/evals/dataframe_form_validation.py +28 -8
- arize/spans/validation/evals/evals_validation.py +34 -4
- arize/spans/validation/evals/value_validation.py +26 -3
- arize/spans/validation/metadata/__init__.py +1 -1
- arize/spans/validation/metadata/argument_validation.py +14 -5
- arize/spans/validation/metadata/dataframe_form_validation.py +26 -10
- arize/spans/validation/metadata/value_validation.py +24 -10
- arize/spans/validation/spans/__init__.py +1 -0
- arize/spans/validation/spans/dataframe_form_validation.py +34 -13
- arize/spans/validation/spans/spans_validation.py +35 -4
- arize/spans/validation/spans/value_validation.py +76 -7
- arize/types.py +293 -157
- arize/utils/__init__.py +1 -0
- arize/utils/arrow.py +31 -15
- arize/utils/cache.py +34 -6
- arize/utils/dataframe.py +19 -2
- arize/utils/online_tasks/__init__.py +2 -0
- arize/utils/online_tasks/dataframe_preprocessor.py +53 -41
- arize/utils/openinference_conversion.py +44 -5
- arize/utils/proto.py +10 -0
- arize/utils/size.py +5 -3
- arize/version.py +3 -1
- {arize-8.0.0a22.dist-info → arize-8.0.0a23.dist-info}/METADATA +4 -3
- arize-8.0.0a23.dist-info/RECORD +174 -0
- {arize-8.0.0a22.dist-info → arize-8.0.0a23.dist-info}/WHEEL +1 -1
- arize-8.0.0a23.dist-info/licenses/LICENSE +176 -0
- arize-8.0.0a23.dist-info/licenses/NOTICE +13 -0
- arize/_generated/protocol/flight/export_pb2.py +0 -61
- arize/_generated/protocol/flight/ingest_pb2.py +0 -365
- arize-8.0.0a22.dist-info/RECORD +0 -146
- arize-8.0.0a22.dist-info/licenses/LICENSE.md +0 -12
arize/_lazy.py
CHANGED
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
import sys
|
|
6
6
|
import threading
|
|
7
7
|
from importlib import import_module
|
|
8
|
-
from typing import TYPE_CHECKING,
|
|
8
|
+
from typing import TYPE_CHECKING, ClassVar
|
|
9
9
|
|
|
10
10
|
if TYPE_CHECKING:
|
|
11
11
|
from arize.config import SDKConfiguration
|
|
@@ -14,15 +14,15 @@ logger = logging.getLogger(__name__)
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class LazySubclientsMixin:
|
|
17
|
-
_SUBCLIENTS:
|
|
18
|
-
_EXTRAS:
|
|
17
|
+
_SUBCLIENTS: ClassVar[dict[str, tuple[str, str]]] = {}
|
|
18
|
+
_EXTRAS: ClassVar[dict[str, tuple[str | None, tuple[str, ...]]]] = {}
|
|
19
19
|
|
|
20
|
-
def __init__(self, sdk_config: SDKConfiguration):
|
|
20
|
+
def __init__(self, sdk_config: SDKConfiguration) -> None:
|
|
21
21
|
self.sdk_config = sdk_config
|
|
22
|
-
self._lazy_cache:
|
|
22
|
+
self._lazy_cache: dict[str, object] = {}
|
|
23
23
|
self._lazy_lock = threading.Lock()
|
|
24
24
|
|
|
25
|
-
def __getattr__(self, name: str) ->
|
|
25
|
+
def __getattr__(self, name: str) -> object:
|
|
26
26
|
subs = self._SUBCLIENTS
|
|
27
27
|
if name not in subs:
|
|
28
28
|
raise AttributeError(
|
|
@@ -50,26 +50,31 @@ class LazySubclientsMixin:
|
|
|
50
50
|
self._lazy_cache[name] = instance
|
|
51
51
|
return instance
|
|
52
52
|
|
|
53
|
-
def __dir__(self):
|
|
53
|
+
def __dir__(self) -> list[str]:
|
|
54
54
|
return sorted({*super().__dir__(), *self._SUBCLIENTS.keys()})
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
class OptionalDependencyError(ImportError): ...
|
|
58
58
|
|
|
59
59
|
|
|
60
|
+
def _can_import(module_name: str) -> bool:
|
|
61
|
+
"""Check if a module can be imported without raising an exception."""
|
|
62
|
+
try:
|
|
63
|
+
import_module(module_name)
|
|
64
|
+
except Exception:
|
|
65
|
+
return False
|
|
66
|
+
else:
|
|
67
|
+
return True
|
|
68
|
+
|
|
69
|
+
|
|
60
70
|
def require(
|
|
61
71
|
extra_key: str | None,
|
|
62
|
-
required:
|
|
63
|
-
pkgname="arize",
|
|
64
|
-
):
|
|
72
|
+
required: tuple[str, ...],
|
|
73
|
+
pkgname: str = "arize",
|
|
74
|
+
) -> None:
|
|
65
75
|
if not required:
|
|
66
76
|
return
|
|
67
|
-
missing = []
|
|
68
|
-
for p in required:
|
|
69
|
-
try:
|
|
70
|
-
import_module(p)
|
|
71
|
-
except Exception:
|
|
72
|
-
missing.append(p)
|
|
77
|
+
missing = [p for p in required if not _can_import(p)]
|
|
73
78
|
if missing:
|
|
74
79
|
raise OptionalDependencyError(
|
|
75
80
|
f"Missing optional dependencies: {', '.join(missing)}. "
|
|
@@ -77,11 +82,14 @@ def require(
|
|
|
77
82
|
)
|
|
78
83
|
|
|
79
84
|
|
|
80
|
-
def _dynamic_import(modname: str, retries: int = 2):
|
|
81
|
-
|
|
85
|
+
def _dynamic_import(modname: str, retries: int = 2) -> object:
|
|
86
|
+
def _attempt_import(remaining_attempts: int) -> object:
|
|
82
87
|
try:
|
|
83
88
|
return import_module(modname)
|
|
84
89
|
except (ModuleNotFoundError, ImportError, KeyError):
|
|
85
90
|
sys.modules.pop(modname, None)
|
|
86
|
-
if
|
|
91
|
+
if remaining_attempts <= 1:
|
|
87
92
|
raise
|
|
93
|
+
return _attempt_import(remaining_attempts - 1)
|
|
94
|
+
|
|
95
|
+
return _attempt_import(retries) if retries > 0 else None
|
arize/client.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
"""Main Arize SDK client for interacting with Arize AI platform services."""
|
|
2
|
+
|
|
1
3
|
from __future__ import annotations
|
|
2
4
|
|
|
3
5
|
import logging
|
|
4
6
|
import shutil
|
|
5
7
|
from pathlib import Path
|
|
6
|
-
from typing import TYPE_CHECKING
|
|
8
|
+
from typing import TYPE_CHECKING, ClassVar
|
|
7
9
|
|
|
8
10
|
from arize._lazy import LazySubclientsMixin
|
|
9
11
|
from arize.config import SDKConfiguration
|
|
@@ -12,55 +14,166 @@ if TYPE_CHECKING:
|
|
|
12
14
|
from arize.datasets.client import DatasetsClient
|
|
13
15
|
from arize.experiments.client import ExperimentsClient
|
|
14
16
|
from arize.models.client import MLModelsClient
|
|
17
|
+
from arize.projects.client import ProjectsClient
|
|
18
|
+
from arize.regions import Region
|
|
15
19
|
from arize.spans.client import SpansClient
|
|
16
20
|
|
|
17
21
|
logger = logging.getLogger(__name__)
|
|
18
22
|
|
|
19
23
|
|
|
24
|
+
# TODO(Kiko): Enforce type checking, remove all type ignores
|
|
25
|
+
|
|
26
|
+
# TODO(Kiko): Go over docstrings
|
|
27
|
+
# TODO(Kiko): Missing parameter descriptions in some docstrings
|
|
28
|
+
# TODO(Kiko): Missing return descriptions in some docstrings
|
|
29
|
+
|
|
30
|
+
# TODO(Kiko): Go over headers on each logging call
|
|
31
|
+
|
|
32
|
+
# TODO(Kiko): Need to implement 'Update existing examples in a dataset'
|
|
33
|
+
|
|
20
34
|
# TODO(Kiko): why logs don't show on scripts, only on jupyter notebooks
|
|
21
35
|
# TODO(Kiko): test caching in colab environment
|
|
22
|
-
# TODO(Kiko): models need to follow resource first pattern
|
|
23
|
-
# - models.DatasetsList200Response
|
|
24
|
-
# - models.DatasetsListExamples200Response
|
|
25
|
-
# - models.ExperimentsList200Response
|
|
26
|
-
# - models.ExperimentsRunsList200Response
|
|
27
36
|
# TODO(Kiko): Protobuf versioning is too old
|
|
28
|
-
# TODO(Kiko): It does not make any sense to require space ID in run_experiment, dataset ID should suffice
|
|
29
|
-
# TODO(Kiko): Should probably wrap every single method of gen clients so that we can add nice docstrings
|
|
30
|
-
# TODO(Kiko): Add flight max_chunksize opt to write_table. In config?
|
|
31
|
-
# TODO(Kiko): experimental/datasets must be adapted into the datasets subclient
|
|
32
|
-
# TODO(Kiko): experimental/prompt hub is missing
|
|
33
|
-
# TODO(Kiko): exporter/utils/schema_parser is missing
|
|
34
37
|
# TODO(Kiko): Go through main APIs and add CtxAdapter where missing
|
|
35
38
|
# TODO(Kiko): Search and handle other TODOs
|
|
36
39
|
# TODO(Kiko): Go over **every file** and do not import anything at runtime, use `if TYPE_CHECKING`
|
|
37
40
|
# with `from __future__ import annotations` (must include for Python < 3.11)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
# TODO(Kiko): Make sure the client has same options as SDKConfiguration
|
|
41
|
+
|
|
42
|
+
|
|
41
43
|
class ArizeClient(LazySubclientsMixin):
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
44
|
+
"""Root client for the Arize SDK.
|
|
45
|
+
|
|
46
|
+
The ArizeClient provides access to all Arize platform services including datasets,
|
|
47
|
+
experiments, models, projects, and spans. It uses SDKConfiguration internally to
|
|
48
|
+
manage configuration settings.
|
|
49
|
+
|
|
50
|
+
Configuration Precedence
|
|
51
|
+
------------------------
|
|
52
|
+
All parameters are optional (except api_key which must be provided via argument
|
|
53
|
+
or environment variable). For each parameter, values are resolved in this order:
|
|
54
|
+
1. Explicit value passed to constructor (highest priority)
|
|
55
|
+
2. Environment variable value (see SDKConfiguration for variable names)
|
|
56
|
+
3. Built-in default value (lowest priority)
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
api_key : str
|
|
61
|
+
Arize API key for authentication. Required - must be provided via this parameter
|
|
62
|
+
or the ARIZE_API_KEY environment variable.
|
|
63
|
+
Environment variable: ARIZE_API_KEY
|
|
64
|
+
Default: None (raises MissingAPIKeyError if not provided)
|
|
65
|
+
|
|
66
|
+
region : Region, optional
|
|
67
|
+
Arize region (e.g., Region.US_CENTRAL, Region.EU_WEST). When specified,
|
|
68
|
+
overrides individual host/port settings with region-specific endpoints.
|
|
69
|
+
Environment variable: ARIZE_REGION
|
|
70
|
+
Default: Region.UNSPECIFIED
|
|
71
|
+
|
|
72
|
+
api_host : str, optional
|
|
73
|
+
Custom API endpoint host override.
|
|
74
|
+
Environment variable: ARIZE_API_HOST
|
|
75
|
+
Default: "api.arize.com"
|
|
76
|
+
|
|
77
|
+
api_scheme : str, optional
|
|
78
|
+
API endpoint scheme (http/https).
|
|
79
|
+
Environment variable: ARIZE_API_SCHEME
|
|
80
|
+
Default: "https"
|
|
81
|
+
|
|
82
|
+
otlp_host : str, optional
|
|
83
|
+
OTLP (OpenTelemetry Protocol) endpoint host override.
|
|
84
|
+
Environment variable: ARIZE_OTLP_HOST
|
|
85
|
+
Default: "otlp.arize.com"
|
|
86
|
+
|
|
87
|
+
otlp_scheme : str, optional
|
|
88
|
+
OTLP endpoint scheme (http/https).
|
|
89
|
+
Environment variable: ARIZE_OTLP_SCHEME
|
|
90
|
+
Default: "https"
|
|
91
|
+
|
|
92
|
+
flight_host : str, optional
|
|
93
|
+
Apache Arrow Flight endpoint host override.
|
|
94
|
+
Environment variable: ARIZE_FLIGHT_HOST
|
|
95
|
+
Default: "flight.arize.com"
|
|
96
|
+
|
|
97
|
+
flight_port : int, optional
|
|
98
|
+
Apache Arrow Flight endpoint port (1-65535).
|
|
99
|
+
Environment variable: ARIZE_FLIGHT_PORT
|
|
100
|
+
Default: 443
|
|
101
|
+
|
|
102
|
+
flight_scheme : str, optional
|
|
103
|
+
Apache Arrow Flight endpoint scheme.
|
|
104
|
+
Environment variable: ARIZE_FLIGHT_SCHEME
|
|
105
|
+
Default: "grpc+tls"
|
|
106
|
+
|
|
107
|
+
pyarrow_max_chunksize : int, optional
|
|
108
|
+
Maximum chunk size for PyArrow operations (1 to MAX_CHUNKSIZE).
|
|
109
|
+
Environment variable: ARIZE_MAX_CHUNKSIZE
|
|
110
|
+
Default: 10_000
|
|
111
|
+
|
|
112
|
+
request_verify : bool, optional
|
|
113
|
+
Whether to verify SSL certificates for HTTP requests.
|
|
114
|
+
Environment variable: ARIZE_REQUEST_VERIFY
|
|
115
|
+
Default: True
|
|
116
|
+
|
|
117
|
+
stream_max_workers : int, optional
|
|
118
|
+
Maximum number of worker threads for streaming operations (minimum: 1).
|
|
119
|
+
Environment variable: ARIZE_STREAM_MAX_WORKERS
|
|
120
|
+
Default: 8
|
|
121
|
+
|
|
122
|
+
stream_max_queue_bound : int, optional
|
|
123
|
+
Maximum queue size for streaming operations (minimum: 1).
|
|
124
|
+
Environment variable: ARIZE_STREAM_MAX_QUEUE_BOUND
|
|
125
|
+
Default: 5000
|
|
126
|
+
|
|
127
|
+
max_http_payload_size_mb : float, optional
|
|
128
|
+
Maximum HTTP payload size in megabytes (minimum: 1).
|
|
129
|
+
Environment variable: ARIZE_MAX_HTTP_PAYLOAD_SIZE_MB
|
|
130
|
+
Default: 100
|
|
131
|
+
|
|
132
|
+
arize_directory : str, optional
|
|
133
|
+
Directory for Arize SDK files (cache, logs, etc.).
|
|
134
|
+
Environment variable: ARIZE_DIRECTORY
|
|
135
|
+
Default: "~/.arize"
|
|
136
|
+
|
|
137
|
+
enable_caching : bool, optional
|
|
138
|
+
Whether to enable local caching.
|
|
139
|
+
Environment variable: ARIZE_ENABLE_CACHING
|
|
140
|
+
Default: True
|
|
141
|
+
|
|
142
|
+
single_host : str, optional
|
|
143
|
+
Single host to use for all endpoints. Overrides individual host settings.
|
|
144
|
+
Environment variable: ARIZE_SINGLE_HOST
|
|
145
|
+
Default: None (not set)
|
|
146
|
+
|
|
147
|
+
single_port : int, optional
|
|
148
|
+
Single port to use for all endpoints. Overrides individual port settings (0-65535).
|
|
149
|
+
Environment variable: ARIZE_SINGLE_PORT
|
|
150
|
+
Default: 0 (not set)
|
|
151
|
+
|
|
152
|
+
Examples:
|
|
153
|
+
--------
|
|
154
|
+
Initialize with API key only (other settings use defaults):
|
|
155
|
+
|
|
156
|
+
>>> client = ArizeClient(api_key="your-api-key")
|
|
157
|
+
|
|
158
|
+
Initialize with custom endpoints:
|
|
159
|
+
|
|
160
|
+
>>> client = ArizeClient(
|
|
161
|
+
... api_key="your-api-key",
|
|
162
|
+
... api_host="custom.api.com",
|
|
163
|
+
... flight_port=8443,
|
|
164
|
+
... )
|
|
165
|
+
|
|
166
|
+
Initialize with region (overrides host/port settings):
|
|
167
|
+
|
|
168
|
+
>>> from arize.regions import Region
|
|
169
|
+
>>> client = ArizeClient(api_key="your-api-key", region=Region.EU_WEST)
|
|
170
|
+
|
|
171
|
+
See Also:
|
|
172
|
+
--------
|
|
173
|
+
SDKConfiguration : Internal configuration class with detailed parameter documentation
|
|
61
174
|
"""
|
|
62
175
|
|
|
63
|
-
_SUBCLIENTS = {
|
|
176
|
+
_SUBCLIENTS: ClassVar[dict[str, tuple[str, str]]] = {
|
|
64
177
|
"datasets": (
|
|
65
178
|
"arize.datasets.client",
|
|
66
179
|
"DatasetsClient",
|
|
@@ -69,16 +182,20 @@ class ArizeClient(LazySubclientsMixin):
|
|
|
69
182
|
"arize.experiments.client",
|
|
70
183
|
"ExperimentsClient",
|
|
71
184
|
),
|
|
72
|
-
"
|
|
73
|
-
"arize.
|
|
74
|
-
"
|
|
185
|
+
"projects": (
|
|
186
|
+
"arize.projects.client",
|
|
187
|
+
"ProjectsClient",
|
|
75
188
|
),
|
|
76
189
|
"models": (
|
|
77
190
|
"arize.models.client",
|
|
78
191
|
"MLModelsClient",
|
|
79
192
|
),
|
|
193
|
+
"spans": (
|
|
194
|
+
"arize.spans.client",
|
|
195
|
+
"SpansClient",
|
|
196
|
+
),
|
|
80
197
|
}
|
|
81
|
-
_EXTRAS = {
|
|
198
|
+
_EXTRAS: ClassVar[dict[str, tuple[str | None, tuple[str, ...]]]] = {
|
|
82
199
|
# Gate only the generated-backed ones
|
|
83
200
|
"datasets": (
|
|
84
201
|
"datasets-experiments",
|
|
@@ -121,24 +238,75 @@ class ArizeClient(LazySubclientsMixin):
|
|
|
121
238
|
self,
|
|
122
239
|
*,
|
|
123
240
|
api_key: str | None = None,
|
|
241
|
+
region: Region | None = None,
|
|
124
242
|
api_host: str | None = None,
|
|
125
243
|
api_scheme: str | None = None,
|
|
126
244
|
otlp_host: str | None = None,
|
|
127
245
|
otlp_scheme: str | None = None,
|
|
128
|
-
|
|
129
|
-
|
|
246
|
+
flight_host: str | None = None,
|
|
247
|
+
flight_port: int | None = None,
|
|
130
248
|
flight_scheme: str | None = None,
|
|
131
249
|
pyarrow_max_chunksize: int | None = None,
|
|
132
250
|
request_verify: bool | None = None,
|
|
133
251
|
stream_max_workers: int | None = None,
|
|
134
252
|
stream_max_queue_bound: int | None = None,
|
|
135
253
|
max_http_payload_size_mb: float | None = None,
|
|
136
|
-
|
|
254
|
+
arize_directory: str | None = None,
|
|
137
255
|
enable_caching: bool | None = None,
|
|
138
|
-
|
|
256
|
+
single_host: str | None = None,
|
|
257
|
+
single_port: int | None = None,
|
|
258
|
+
) -> None:
|
|
259
|
+
"""Initialize the Arize client with configuration parameters.
|
|
260
|
+
|
|
261
|
+
All parameters are optional and follow the precedence order documented in the
|
|
262
|
+
class docstring: explicit argument > environment variable > default value.
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
api_key: Arize API key for authentication. Required - must be provided here
|
|
266
|
+
or via ARIZE_API_KEY environment variable. Raises MissingAPIKeyError if not set.
|
|
267
|
+
region: Arize region (e.g., Region.US_CENTRAL, Region.EU_WEST). When specified,
|
|
268
|
+
overrides individual host/port settings. ENV: ARIZE_REGION. Default: Region.UNSPECIFIED.
|
|
269
|
+
api_host: Custom API endpoint host. ENV: ARIZE_API_HOST. Default: "api.arize.com".
|
|
270
|
+
api_scheme: API endpoint scheme (http/https). ENV: ARIZE_API_SCHEME. Default: "https".
|
|
271
|
+
otlp_host: OTLP endpoint host. ENV: ARIZE_OTLP_HOST. Default: "otlp.arize.com".
|
|
272
|
+
otlp_scheme: OTLP endpoint scheme (http/https). ENV: ARIZE_OTLP_SCHEME. Default: "https".
|
|
273
|
+
flight_host: Apache Arrow Flight endpoint host. ENV: ARIZE_FLIGHT_HOST.
|
|
274
|
+
Default: "flight.arize.com".
|
|
275
|
+
flight_port: Apache Arrow Flight endpoint port (1-65535). ENV: ARIZE_FLIGHT_PORT.
|
|
276
|
+
Default: 443.
|
|
277
|
+
flight_scheme: Apache Arrow Flight endpoint scheme. ENV: ARIZE_FLIGHT_SCHEME.
|
|
278
|
+
Default: "grpc+tls".
|
|
279
|
+
pyarrow_max_chunksize: Maximum PyArrow chunk size (1 to MAX_CHUNKSIZE).
|
|
280
|
+
ENV: ARIZE_MAX_CHUNKSIZE. Default: 10_000.
|
|
281
|
+
request_verify: Whether to verify SSL certificates. ENV: ARIZE_REQUEST_VERIFY.
|
|
282
|
+
Default: True.
|
|
283
|
+
stream_max_workers: Maximum worker threads for streaming (minimum: 1).
|
|
284
|
+
ENV: ARIZE_STREAM_MAX_WORKERS. Default: 8.
|
|
285
|
+
stream_max_queue_bound: Maximum queue size for streaming (minimum: 1).
|
|
286
|
+
ENV: ARIZE_STREAM_MAX_QUEUE_BOUND. Default: 5000.
|
|
287
|
+
max_http_payload_size_mb: Maximum HTTP payload size in MB (minimum: 1).
|
|
288
|
+
ENV: ARIZE_MAX_HTTP_PAYLOAD_SIZE_MB. Default: 100.
|
|
289
|
+
arize_directory: Directory for SDK files (cache, logs, etc.).
|
|
290
|
+
ENV: ARIZE_DIRECTORY. Default: "~/.arize".
|
|
291
|
+
enable_caching: Whether to enable local caching. ENV: ARIZE_ENABLE_CACHING.
|
|
292
|
+
Default: True.
|
|
293
|
+
single_host: Single host for all endpoints (overrides individual hosts).
|
|
294
|
+
ENV: ARIZE_SINGLE_HOST. Default: None.
|
|
295
|
+
single_port: Single port for all endpoints (overrides individual ports).
|
|
296
|
+
ENV: ARIZE_SINGLE_PORT. Default: 0 (not set).
|
|
297
|
+
|
|
298
|
+
Raises:
|
|
299
|
+
MissingAPIKeyError: If api_key is not provided via argument or environment variable.
|
|
300
|
+
|
|
301
|
+
Notes:
|
|
302
|
+
Values provided here override environment variables, which in turn override
|
|
303
|
+
default values. See SDKConfiguration for detailed parameter documentation.
|
|
304
|
+
"""
|
|
139
305
|
cfg_kwargs: dict = {}
|
|
140
306
|
if api_key is not None:
|
|
141
307
|
cfg_kwargs["api_key"] = api_key
|
|
308
|
+
if region is not None:
|
|
309
|
+
cfg_kwargs["region"] = region
|
|
142
310
|
if api_host is not None:
|
|
143
311
|
cfg_kwargs["api_host"] = api_host
|
|
144
312
|
if api_scheme is not None:
|
|
@@ -147,10 +315,10 @@ class ArizeClient(LazySubclientsMixin):
|
|
|
147
315
|
cfg_kwargs["otlp_host"] = otlp_host
|
|
148
316
|
if otlp_scheme is not None:
|
|
149
317
|
cfg_kwargs["otlp_scheme"] = otlp_scheme
|
|
150
|
-
if
|
|
151
|
-
cfg_kwargs["
|
|
152
|
-
if
|
|
153
|
-
cfg_kwargs["
|
|
318
|
+
if flight_host is not None:
|
|
319
|
+
cfg_kwargs["flight_host"] = flight_host
|
|
320
|
+
if flight_port is not None:
|
|
321
|
+
cfg_kwargs["flight_port"] = flight_port
|
|
154
322
|
if flight_scheme is not None:
|
|
155
323
|
cfg_kwargs["flight_scheme"] = flight_scheme
|
|
156
324
|
if pyarrow_max_chunksize is not None:
|
|
@@ -163,33 +331,63 @@ class ArizeClient(LazySubclientsMixin):
|
|
|
163
331
|
cfg_kwargs["stream_max_queue_bound"] = stream_max_queue_bound
|
|
164
332
|
if max_http_payload_size_mb is not None:
|
|
165
333
|
cfg_kwargs["max_http_payload_size_mb"] = max_http_payload_size_mb
|
|
166
|
-
if
|
|
167
|
-
cfg_kwargs["
|
|
334
|
+
if arize_directory is not None:
|
|
335
|
+
cfg_kwargs["arize_directory"] = arize_directory
|
|
168
336
|
if enable_caching is not None:
|
|
169
337
|
cfg_kwargs["enable_caching"] = enable_caching
|
|
338
|
+
if single_host is not None:
|
|
339
|
+
cfg_kwargs["single_host"] = single_host
|
|
340
|
+
if single_port is not None:
|
|
341
|
+
cfg_kwargs["single_port"] = single_port
|
|
170
342
|
|
|
171
343
|
# Only the explicitly provided fields are passed; the rest use
|
|
172
|
-
# SDKConfiguration
|
|
344
|
+
# SDKConfiguration's default factories / defaults.
|
|
173
345
|
super().__init__(SDKConfiguration(**cfg_kwargs))
|
|
174
346
|
|
|
175
347
|
# typed properties for IDE completion
|
|
176
348
|
@property
|
|
177
349
|
def datasets(self) -> DatasetsClient:
|
|
350
|
+
"""Access the datasets client for dataset operations (lazy-loaded)."""
|
|
178
351
|
return self.__getattr__("datasets")
|
|
179
352
|
|
|
180
353
|
@property
|
|
181
354
|
def experiments(self) -> ExperimentsClient:
|
|
355
|
+
"""Access the experiments client for experiment operations (lazy-loaded)."""
|
|
182
356
|
return self.__getattr__("experiments")
|
|
183
357
|
|
|
184
|
-
@property
|
|
185
|
-
def spans(self) -> SpansClient:
|
|
186
|
-
return self.__getattr__("spans")
|
|
187
|
-
|
|
188
358
|
@property
|
|
189
359
|
def models(self) -> MLModelsClient:
|
|
360
|
+
"""Access the models client for ML model operations (lazy-loaded)."""
|
|
190
361
|
return self.__getattr__("models")
|
|
191
362
|
|
|
363
|
+
@property
|
|
364
|
+
def projects(self) -> ProjectsClient:
|
|
365
|
+
"""Access the projects client for project operations (lazy-loaded)."""
|
|
366
|
+
return self.__getattr__("projects")
|
|
367
|
+
|
|
368
|
+
@property
|
|
369
|
+
def spans(self) -> SpansClient:
|
|
370
|
+
"""Access the spans client for tracing and span operations (lazy-loaded)."""
|
|
371
|
+
return self.__getattr__("spans")
|
|
372
|
+
|
|
192
373
|
def __repr__(self) -> str:
|
|
374
|
+
"""Return a string representation of the Arize client configuration."""
|
|
375
|
+
# The repr looks like:
|
|
376
|
+
# ArizeClient(
|
|
377
|
+
# sdk_config=SDKConfiguration(
|
|
378
|
+
# api_key='cacaca***',
|
|
379
|
+
# api_host='api.arize.com',
|
|
380
|
+
# ...
|
|
381
|
+
# arize_directory='~/.arize',
|
|
382
|
+
# enable_caching=True,
|
|
383
|
+
# )
|
|
384
|
+
# subclients={
|
|
385
|
+
# 'datasets': lazy,
|
|
386
|
+
# 'experiments': lazy,
|
|
387
|
+
# 'spans': lazy,
|
|
388
|
+
# 'models': lazy,
|
|
389
|
+
# }
|
|
390
|
+
# )
|
|
193
391
|
lines = [f"{self.__class__.__name__}("]
|
|
194
392
|
# Indent the SDKConfiguration repr
|
|
195
393
|
cfg_repr = repr(self.sdk_config).splitlines()
|
|
@@ -205,7 +403,22 @@ class ArizeClient(LazySubclientsMixin):
|
|
|
205
403
|
return "\n".join(lines)
|
|
206
404
|
|
|
207
405
|
def clear_cache(self) -> None:
|
|
208
|
-
|
|
406
|
+
"""Clear the local cache directory.
|
|
407
|
+
|
|
408
|
+
Removes all cached data from the SDK's cache directory. This can be useful
|
|
409
|
+
when troubleshooting caching issues or freeing up disk space. The cache
|
|
410
|
+
directory is automatically recreated on subsequent operations that require
|
|
411
|
+
caching.
|
|
412
|
+
|
|
413
|
+
Raises:
|
|
414
|
+
NotADirectoryError: If the cache path exists but is not a directory.
|
|
415
|
+
|
|
416
|
+
Notes:
|
|
417
|
+
- This operation permanently deletes all cached data
|
|
418
|
+
- If the cache directory doesn't exist, a warning is logged but no error is raised
|
|
419
|
+
- The cache directory location is configured via sdk_config.cache_dir
|
|
420
|
+
"""
|
|
421
|
+
p = Path(self.sdk_config.cache_dir).expanduser().resolve()
|
|
209
422
|
|
|
210
423
|
if not p.exists():
|
|
211
424
|
logger.warning(
|