arize 8.0.0a14__tar.gz → 8.0.0a16__tar.gz

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.
Files changed (150) hide show
  1. {arize-8.0.0a14 → arize-8.0.0a16}/PKG-INFO +3 -1
  2. {arize-8.0.0a14 → arize-8.0.0a16}/pyproject.toml +10 -1
  3. {arize-8.0.0a14/src/arize/datasets → arize-8.0.0a16/src/arize}/__init__.py +19 -0
  4. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_flight/client.py +163 -43
  5. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_flight/types.py +1 -0
  6. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/__init__.py +5 -1
  7. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/api/datasets_api.py +6 -6
  8. arize-8.0.0a16/src/arize/_generated/api_client/api/experiments_api.py +1468 -0
  9. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/api_client.py +1 -1
  10. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/configuration.py +1 -1
  11. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/exceptions.py +1 -1
  12. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/__init__.py +3 -1
  13. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/dataset.py +2 -2
  14. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/dataset_version.py +1 -1
  15. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/datasets_create_request.py +3 -3
  16. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/datasets_list200_response.py +1 -1
  17. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/datasets_list_examples200_response.py +1 -1
  18. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/error.py +1 -1
  19. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/experiment.py +6 -6
  20. arize-8.0.0a16/src/arize/_generated/api_client/models/experiments_create_request.py +98 -0
  21. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/models/experiments_list200_response.py +1 -1
  22. arize-8.0.0a16/src/arize/_generated/api_client/models/experiments_runs_list200_response.py +92 -0
  23. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/rest.py +1 -1
  24. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_dataset.py +2 -1
  25. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_dataset_version.py +1 -1
  26. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_datasets_api.py +1 -1
  27. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_datasets_create_request.py +2 -1
  28. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_datasets_list200_response.py +1 -1
  29. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_datasets_list_examples200_response.py +1 -1
  30. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_error.py +1 -1
  31. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_experiment.py +6 -1
  32. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_experiments_api.py +23 -2
  33. arize-8.0.0a16/src/arize/_generated/api_client/test/test_experiments_create_request.py +61 -0
  34. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/test_experiments_list200_response.py +1 -1
  35. arize-8.0.0a16/src/arize/_generated/api_client/test/test_experiments_runs_list200_response.py +56 -0
  36. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client_README.md +13 -8
  37. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/client.py +19 -2
  38. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/config.py +50 -3
  39. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/constants/config.py +8 -2
  40. arize-8.0.0a16/src/arize/constants/openinference.py +14 -0
  41. arize-8.0.0a16/src/arize/constants/pyarrow.py +1 -0
  42. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/datasets/client.py +106 -19
  43. arize-8.0.0a16/src/arize/datasets/errors.py +61 -0
  44. arize-8.0.0a16/src/arize/datasets/validation.py +46 -0
  45. arize-8.0.0a16/src/arize/experiments/client.py +465 -0
  46. arize-8.0.0a16/src/arize/experiments/evaluators/base.py +255 -0
  47. arize-8.0.0a16/src/arize/experiments/evaluators/exceptions.py +10 -0
  48. arize-8.0.0a16/src/arize/experiments/evaluators/executors.py +502 -0
  49. arize-8.0.0a16/src/arize/experiments/evaluators/rate_limiters.py +277 -0
  50. arize-8.0.0a16/src/arize/experiments/evaluators/types.py +122 -0
  51. arize-8.0.0a16/src/arize/experiments/evaluators/utils.py +198 -0
  52. arize-8.0.0a16/src/arize/experiments/functions.py +920 -0
  53. arize-8.0.0a16/src/arize/experiments/tracing.py +276 -0
  54. arize-8.0.0a16/src/arize/experiments/types.py +394 -0
  55. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/client.py +4 -1
  56. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/client.py +16 -20
  57. arize-8.0.0a16/src/arize/spans/validation/spans/__init__.py +0 -0
  58. arize-8.0.0a16/src/arize/utils/__init__.py +0 -0
  59. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/utils/arrow.py +4 -3
  60. arize-8.0.0a16/src/arize/utils/openinference_conversion.py +56 -0
  61. arize-8.0.0a16/src/arize/utils/proto.py +13 -0
  62. arize-8.0.0a16/src/arize/utils/size.py +22 -0
  63. arize-8.0.0a16/src/arize/version.py +1 -0
  64. arize-8.0.0a14/src/arize/__init__.py +0 -20
  65. arize-8.0.0a14/src/arize/_generated/api_client/api/experiments_api.py +0 -605
  66. arize-8.0.0a14/src/arize/experiments/client.py +0 -10
  67. arize-8.0.0a14/src/arize/version.py +0 -1
  68. {arize-8.0.0a14 → arize-8.0.0a16}/.gitignore +0 -0
  69. {arize-8.0.0a14 → arize-8.0.0a16}/LICENSE.md +0 -0
  70. {arize-8.0.0a14 → arize-8.0.0a16}/README.md +0 -0
  71. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_exporter/__init__.py +0 -0
  72. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_exporter/client.py +0 -0
  73. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_exporter/parsers/__init__.py +0 -0
  74. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_exporter/parsers/tracing_data_parser.py +0 -0
  75. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_exporter/validation.py +0 -0
  76. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_flight/__init__.py +0 -0
  77. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/__init__.py +0 -0
  78. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/api/__init__.py +0 -0
  79. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/api_response.py +0 -0
  80. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/api_client/test/__init__.py +0 -0
  81. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/protocol/__init__.py +0 -0
  82. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/protocol/flight/__init__.py +0 -0
  83. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/protocol/flight/export_pb2.py +0 -0
  84. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/protocol/flight/ingest_pb2.py +0 -0
  85. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/protocol/rec/__init__.py +0 -0
  86. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_generated/protocol/rec/public_pb2.py +0 -0
  87. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/_lazy.py +0 -0
  88. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/constants/__init__.py +0 -0
  89. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/constants/ml.py +0 -0
  90. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/constants/model_mapping.json +0 -0
  91. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/constants/spans.py +0 -0
  92. {arize-8.0.0a14/src/arize/exceptions → arize-8.0.0a16/src/arize/datasets}/__init__.py +0 -0
  93. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/__init__.py +0 -0
  94. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/auto_generator.py +0 -0
  95. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/base_generators.py +0 -0
  96. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/constants.py +0 -0
  97. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/cv_generators.py +0 -0
  98. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/errors.py +0 -0
  99. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/nlp_generators.py +0 -0
  100. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/tabular_generators.py +0 -0
  101. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/embeddings/usecases.py +0 -0
  102. {arize-8.0.0a14/src/arize/experiments → arize-8.0.0a16/src/arize/exceptions}/__init__.py +0 -0
  103. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/auth.py +0 -0
  104. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/base.py +0 -0
  105. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/models.py +0 -0
  106. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/parameters.py +0 -0
  107. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/spaces.py +0 -0
  108. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/types.py +0 -0
  109. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/exceptions/values.py +0 -0
  110. {arize-8.0.0a14/src/arize/models → arize-8.0.0a16/src/arize/experiments}/__init__.py +0 -0
  111. {arize-8.0.0a14/src/arize/models/batch_validation → arize-8.0.0a16/src/arize/experiments/evaluators}/__init__.py +0 -0
  112. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/logging.py +0 -0
  113. {arize-8.0.0a14/src/arize/models/surrogate_explainer → arize-8.0.0a16/src/arize/models}/__init__.py +0 -0
  114. {arize-8.0.0a14/src/arize/spans → arize-8.0.0a16/src/arize/models/batch_validation}/__init__.py +0 -0
  115. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/batch_validation/errors.py +0 -0
  116. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/batch_validation/validator.py +0 -0
  117. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/bounded_executor.py +0 -0
  118. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/casting.py +0 -0
  119. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/proto.py +0 -0
  120. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/stream_validation.py +0 -0
  121. {arize-8.0.0a14/src/arize/spans/validation → arize-8.0.0a16/src/arize/models/surrogate_explainer}/__init__.py +0 -0
  122. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/models/surrogate_explainer/mimic.py +0 -0
  123. {arize-8.0.0a14/src/arize/spans/validation/annotations → arize-8.0.0a16/src/arize/spans}/__init__.py +0 -0
  124. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/columns.py +0 -0
  125. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/conversion.py +0 -0
  126. {arize-8.0.0a14/src/arize/spans/validation/common → arize-8.0.0a16/src/arize/spans/validation}/__init__.py +0 -0
  127. {arize-8.0.0a14/src/arize/spans/validation/evals → arize-8.0.0a16/src/arize/spans/validation/annotations}/__init__.py +0 -0
  128. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/annotations/annotations_validation.py +0 -0
  129. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/annotations/dataframe_form_validation.py +0 -0
  130. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/annotations/value_validation.py +0 -0
  131. {arize-8.0.0a14/src/arize/spans/validation/spans → arize-8.0.0a16/src/arize/spans/validation/common}/__init__.py +0 -0
  132. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/common/argument_validation.py +0 -0
  133. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/common/dataframe_form_validation.py +0 -0
  134. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/common/errors.py +0 -0
  135. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/common/value_validation.py +0 -0
  136. {arize-8.0.0a14/src/arize/utils → arize-8.0.0a16/src/arize/spans/validation/evals}/__init__.py +0 -0
  137. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/evals/dataframe_form_validation.py +0 -0
  138. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/evals/evals_validation.py +0 -0
  139. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/evals/value_validation.py +0 -0
  140. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/metadata/__init__.py +0 -0
  141. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/metadata/argument_validation.py +0 -0
  142. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/metadata/dataframe_form_validation.py +0 -0
  143. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/metadata/value_validation.py +0 -0
  144. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/spans/dataframe_form_validation.py +0 -0
  145. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/spans/spans_validation.py +0 -0
  146. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/spans/validation/spans/value_validation.py +0 -0
  147. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/types.py +0 -0
  148. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/utils/dataframe.py +0 -0
  149. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/utils/online_tasks/__init__.py +0 -0
  150. {arize-8.0.0a14 → arize-8.0.0a16}/src/arize/utils/online_tasks/dataframe_preprocessor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize
3
- Version: 8.0.0a14
3
+ Version: 8.0.0a16
4
4
  Summary: A helper library to interact with Arize AI APIs
5
5
  Project-URL: Homepage, https://arize.com
6
6
  Project-URL: Documentation, https://docs.arize.com/arize
@@ -35,7 +35,9 @@ Requires-Dist: tokenizers<1,>=0.13; extra == 'auto-embeddings'
35
35
  Requires-Dist: torch<3,>=1.13; extra == 'auto-embeddings'
36
36
  Requires-Dist: transformers<5,>=4.25; extra == 'auto-embeddings'
37
37
  Provides-Extra: datasets-experiments
38
+ Requires-Dist: numpy>=2.0.0; extra == 'datasets-experiments'
38
39
  Requires-Dist: pydantic; extra == 'datasets-experiments'
40
+ Requires-Dist: wrapt<2.0.0,>=1.0.0; extra == 'datasets-experiments'
39
41
  Provides-Extra: dev
40
42
  Requires-Dist: pytest==8.4.2; extra == 'dev'
41
43
  Requires-Dist: ruff==0.13.2; extra == 'dev'
@@ -38,7 +38,7 @@ dependencies = [
38
38
  "lazy-imports",
39
39
  # "requests_futures==1.0.0",
40
40
  # "googleapis_common_protos>=1.51.0,<2",
41
- # "protobuf>=4.21.0,<6",
41
+ # "protobuf>=4.21.0,<7",
42
42
  # "pyarrow>=0.15.0",
43
43
  # "tqdm>=4.60.0,<5",
44
44
  # "pydantic>=2.0.0,<3",
@@ -72,6 +72,15 @@ ml-batch = [
72
72
  ]
73
73
  datasets-experiments = [
74
74
  "pydantic",
75
+ "numpy>=2.0.0",
76
+ "wrapt>=1.0.0,<2.0.0",
77
+ # "openinference-semantic-conventions>=0.1.21, <1",
78
+ # "opentelemetry-exporter-otlp-proto-common>=1.38.0",
79
+ # "opentelemetry-exporter-otlp-proto-grpc>=1.38.0",
80
+ # "opentelemetry-sdk>=1.38.0",
81
+ #
82
+ # "opentelemetry-api>=1.38.0",
83
+ # "opentelemetry-proto>=1.38.0",
75
84
  ]
76
85
  mimic-explainer = [
77
86
  "interpret-community[mimic]>=0.22.0,<1",
@@ -1,6 +1,24 @@
1
+ import logging
1
2
  from collections.abc import Mapping
2
3
 
3
4
  from arize._generated.api_client import models
5
+ from arize.client import ArizeClient
6
+ from arize.config import SDKConfiguration
7
+
8
+ # Attach a NullHandler by default in the top-level package
9
+ # so that if no configuration is installed, nothing explodes.
10
+ logging.getLogger("arize").addHandler(logging.NullHandler())
11
+
12
+ # Opt-in env-based logging
13
+ try:
14
+ from .logging import auto_configure_from_env
15
+
16
+ auto_configure_from_env()
17
+ except Exception:
18
+ # Never let logging config crash imports
19
+ pass
20
+
21
+ __all__ = ["ArizeClient", "SDKConfiguration"]
4
22
 
5
23
 
6
24
  def make_to_df(field_name: str):
@@ -68,3 +86,4 @@ def make_to_df(field_name: str):
68
86
 
69
87
  models.DatasetsList200Response.to_df = make_to_df("datasets") # type: ignore[attr-defined]
70
88
  models.DatasetsListExamples200Response.to_df = make_to_df("examples") # type: ignore[attr-defined]
89
+ models.ExperimentsList200Response.to_df = make_to_df("experiments") # type: ignore[attr-defined]
@@ -4,7 +4,8 @@ from __future__ import annotations
4
4
  import base64
5
5
  import logging
6
6
  from dataclasses import dataclass, field
7
- from typing import TYPE_CHECKING, Any, Dict, List, Tuple
7
+ from enum import Enum
8
+ from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Tuple
8
9
 
9
10
  from google.protobuf import json_format
10
11
  from pyarrow import flight
@@ -12,12 +13,15 @@ from pyarrow import flight
12
13
  from arize._flight.types import FlightRequestType
13
14
  from arize._generated.protocol.flight import ingest_pb2 as flight_ing_pb2
14
15
  from arize._generated.protocol.flight.ingest_pb2 import (
16
+ PostExperimentDataResponse,
15
17
  WriteSpanAnnotationResponse,
16
18
  WriteSpanAttributesMetadataResponse,
17
19
  WriteSpanEvaluationResponse,
18
20
  )
19
21
  from arize.config import get_python_version
20
22
  from arize.logging import log_a_list
23
+ from arize.utils.openinference_conversion import convert_json_str_to_dict
24
+ from arize.utils.proto import get_pb_schema_tracing
21
25
  from arize.version import __version__
22
26
 
23
27
  if TYPE_CHECKING:
@@ -26,21 +30,31 @@ if TYPE_CHECKING:
26
30
 
27
31
  BytesPair = Tuple[bytes, bytes]
28
32
  Headers = List[BytesPair]
29
- WriteSpanResponse = (
33
+ FlightPostArrowFileResponse = (
30
34
  WriteSpanEvaluationResponse
31
35
  | WriteSpanAnnotationResponse
32
36
  | WriteSpanAttributesMetadataResponse
37
+ | PostExperimentDataResponse
33
38
  )
34
39
 
35
40
  logger = logging.getLogger(__name__)
36
41
 
37
42
 
43
+ class FlightActionKey(Enum):
44
+ CREATE_EXPERIMENT_DB_ENTRY = "create_experiment_db_entry"
45
+ # GET_DATASET_VERSION = "get_dataset_version"
46
+ # LIST_DATASETS = "list_datasets"
47
+ # DELETE_DATASET = "delete_dataset"
48
+ # DELETE_EXPERIMENT = "delete_experiment"
49
+
50
+
38
51
  @dataclass(frozen=True)
39
52
  class ArizeFlightClient:
40
53
  api_key: str = field(repr=False)
41
54
  host: str
42
55
  port: int
43
56
  scheme: str
57
+ max_chunksize: int
44
58
  request_verify: bool
45
59
 
46
60
  # internal cache for the underlying FlightClient
@@ -107,17 +121,19 @@ class ArizeFlightClient:
107
121
  kwargs.setdefault("options", self.call_options)
108
122
  return client.get_flight_info(*args, **kwargs)
109
123
 
110
- def do_get(self, *args: Any, **kwargs: Any):
124
+ def do_get(self, *args: Any, **kwargs: Any) -> flight.FlightStreamReader:
111
125
  client = self._ensure_client()
112
126
  kwargs.setdefault("options", self.call_options)
113
127
  return client.do_get(*args, **kwargs)
114
128
 
115
- def do_put(self, *args: Any, **kwargs: Any):
129
+ def do_put(
130
+ self, *args: Any, **kwargs: Any
131
+ ) -> [flight.FlightStreamWriter, flight.FlightMetadataReader]:
116
132
  client = self._ensure_client()
117
133
  kwargs.setdefault("options", self.call_options)
118
134
  return client.do_put(*args, **kwargs)
119
135
 
120
- def do_action(self, *args: Any, **kwargs: Any):
136
+ def do_action(self, *args: Any, **kwargs: Any) -> Iterable[flight.Result]:
121
137
  client = self._ensure_client()
122
138
  kwargs.setdefault("options", self.call_options)
123
139
  return client.do_action(*args, **kwargs)
@@ -127,20 +143,30 @@ class ArizeFlightClient:
127
143
  def log_arrow_table(
128
144
  self,
129
145
  space_id: str,
130
- project_name: str,
131
146
  request_type: FlightRequestType,
132
147
  pa_table: pa.Table,
133
- ) -> WriteSpanResponse:
134
- proto_schema = get_pb_schema_tracing(project_name=project_name)
135
- base64_schema = base64.b64encode(proto_schema.SerializeToString())
136
- pa_schema = append_to_pyarrow_metadata(
137
- pa_table.schema, {"arize-schema": base64_schema}
138
- )
148
+ project_name: str | None = None,
149
+ dataset_id: str | None = None,
150
+ experiment_name: str | None = None,
151
+ ) -> FlightPostArrowFileResponse:
152
+ pa_schema = pa_table.schema
153
+ if request_type in (
154
+ FlightRequestType.EVALUATION,
155
+ FlightRequestType.ANNOTATION,
156
+ FlightRequestType.METADATA,
157
+ ):
158
+ proto_schema = get_pb_schema_tracing(project_name=project_name)
159
+ base64_schema = base64.b64encode(proto_schema.SerializeToString())
160
+ pa_schema = append_to_pyarrow_metadata(
161
+ pa_table.schema, {"arize-schema": base64_schema}
162
+ )
139
163
 
140
164
  doput_request = _get_pb_flight_doput_request(
141
165
  space_id=space_id,
142
- model_id=project_name,
143
166
  request_type=request_type,
167
+ model_id=project_name,
168
+ dataset_id=dataset_id,
169
+ experiment_name=experiment_name,
144
170
  )
145
171
 
146
172
  descriptor = flight.FlightDescriptor.for_command(
@@ -152,7 +178,7 @@ class ArizeFlightClient:
152
178
  )
153
179
  with flight_writer:
154
180
  # write table as stream to flight server
155
- flight_writer.write_table(pa_table)
181
+ flight_writer.write_table(pa_table, self.max_chunksize)
156
182
  # indicate that client has flushed all contents to stream
157
183
  flight_writer.done_writing()
158
184
  # read response from flight server
@@ -171,15 +197,19 @@ class ArizeFlightClient:
171
197
  case FlightRequestType.METADATA:
172
198
  res = WriteSpanAttributesMetadataResponse()
173
199
  res.ParseFromString(flight_response.to_pybytes())
200
+ case FlightRequestType.LOG_EXPERIMENT_DATA:
201
+ res = PostExperimentDataResponse()
202
+ res.ParseFromString(flight_response.to_pybytes())
174
203
  case _:
175
204
  raise ValueError(
176
205
  f"Unsupported request_type: {request_type}"
177
206
  )
178
-
179
207
  return res
180
208
  except Exception as e:
181
209
  logger.exception(f"Error logging arrow table to Arize: {e}")
182
- raise RuntimeError(f"Error logging arrow table to Arize: {e}") from e
210
+ raise RuntimeError(
211
+ f"Error logging arrow table to Arize: {e}"
212
+ ) from e
183
213
 
184
214
  # ---------- dataset methods ----------
185
215
 
@@ -205,7 +235,7 @@ class ArizeFlightClient:
205
235
  )
206
236
  with flight_writer:
207
237
  # write table as stream to flight server
208
- flight_writer.write_table(pa_table)
238
+ flight_writer.write_table(pa_table, self.max_chunksize)
209
239
  # indicate that client has flushed all contents to stream
210
240
  flight_writer.done_writing()
211
241
  # read response from flight server
@@ -221,7 +251,72 @@ class ArizeFlightClient:
221
251
  return res
222
252
  except Exception as e:
223
253
  logger.exception(f"Error logging arrow table to Arize: {e}")
224
- raise RuntimeError(f"Error logging arrow table to Arize: {e}") from e
254
+ raise RuntimeError(
255
+ f"Error logging arrow table to Arize: {e}"
256
+ ) from e
257
+
258
+ def get_dataset_examples(
259
+ self,
260
+ space_id: str,
261
+ dataset_id: str,
262
+ dataset_version_id: str | None = None,
263
+ ):
264
+ # TODO(Kiko): Space ID should not be needed,
265
+ # should work on server tech debt to remove this
266
+ doget_request = flight_ing_pb2.DoGetRequest(
267
+ get_dataset=flight_ing_pb2.GetDatasetRequest(
268
+ space_id=space_id,
269
+ dataset_id=dataset_id,
270
+ dataset_version=dataset_version_id,
271
+ )
272
+ )
273
+ descriptor = flight.Ticket(
274
+ json_format.MessageToJson(doget_request).encode("utf-8")
275
+ )
276
+ try:
277
+ reader = self.do_get(descriptor, options=self.call_options)
278
+ # read all data into pandas dataframe
279
+ df = reader.read_all().to_pandas()
280
+ df = convert_json_str_to_dict(df)
281
+ return df
282
+ except Exception as e:
283
+ logger.exception(f"Failed to get dataset id={dataset_id}")
284
+ raise RuntimeError(f"Failed to get dataset id={dataset_id}") from e
285
+
286
+ def init_experiment(
287
+ self,
288
+ space_id: str,
289
+ dataset_id: str,
290
+ experiment_name: str,
291
+ ) -> Tuple[str, str] | None:
292
+ request = flight_ing_pb2.DoActionRequest(
293
+ create_experiment_db_entry=flight_ing_pb2.CreateExperimentDBEntryRequest(
294
+ space_id=space_id,
295
+ dataset_id=dataset_id,
296
+ experiment_name=experiment_name,
297
+ )
298
+ )
299
+ action = flight.Action(
300
+ FlightActionKey.CREATE_EXPERIMENT_DB_ENTRY,
301
+ json_format.MessageToJson(request).encode("utf-8"),
302
+ )
303
+ try:
304
+ response = self.do_action(action, options=self.call_options)
305
+ except Exception as e:
306
+ logger.exception(f"Failed to init experiment {experiment_name}")
307
+ raise RuntimeError(
308
+ f"Failed to init experiment {experiment_name}"
309
+ ) from e
310
+
311
+ res = next(response, None)
312
+ if res is None:
313
+ return None
314
+ resp_pb = flight_ing_pb2.CreateExperimentDBEntryResponse()
315
+ resp_pb.ParseFromString(res.body.to_pybytes())
316
+ return (
317
+ resp_pb.experiment_id,
318
+ resp_pb.trace_model_name,
319
+ )
225
320
 
226
321
 
227
322
  def append_to_pyarrow_metadata(
@@ -246,34 +341,59 @@ def append_to_pyarrow_metadata(
246
341
 
247
342
 
248
343
  def _get_pb_flight_doput_request(
249
- space_id,
250
- model_id: str,
344
+ space_id: str,
251
345
  request_type: FlightRequestType,
346
+ model_id: str | None = None,
347
+ dataset_id: str | None = None,
348
+ experiment_name: str | None = None,
252
349
  ) -> flight_ing_pb2.DoPutRequest:
253
350
  """Return a DoPutRequest for the given request_type."""
254
- common_args: dict[str, str] = {
255
- "space_id": space_id,
256
- "external_model_id": model_id,
257
- }
258
-
259
- match request_type:
260
- case FlightRequestType.EVALUATION:
261
- return flight_ing_pb2.DoPutRequest(
262
- write_span_evaluation_request=flight_ing_pb2.WriteSpanEvaluationRequest(
263
- **common_args
351
+
352
+ common_args = {"space_id": space_id}
353
+
354
+ if model_id:
355
+ common_args["external_model_id"] = model_id
356
+ if dataset_id:
357
+ common_args["dataset_id"] = dataset_id
358
+ if experiment_name:
359
+ common_args["experiment_name"] = experiment_name
360
+
361
+ if model_id:
362
+ # model-based request types
363
+ match request_type:
364
+ case FlightRequestType.LOG_EXPERIMENT_DATA:
365
+ return flight_ing_pb2.DoPutRequest(
366
+ write_span_evaluation_request=flight_ing_pb2.WriteSpanEvaluationRequest(
367
+ **common_args
368
+ )
264
369
  )
265
- )
266
- case FlightRequestType.ANNOTATION:
267
- return flight_ing_pb2.DoPutRequest(
268
- write_span_annotation_request=flight_ing_pb2.WriteSpanAnnotationRequest(
269
- **common_args
370
+ case FlightRequestType.ANNOTATION:
371
+ return flight_ing_pb2.DoPutRequest(
372
+ write_span_annotation_request=flight_ing_pb2.WriteSpanAnnotationRequest(
373
+ **common_args
374
+ )
270
375
  )
271
- )
272
- case FlightRequestType.METADATA:
273
- return flight_ing_pb2.DoPutRequest(
274
- write_span_attributes_metadata_request=flight_ing_pb2.WriteSpanAttributesMetadataRequest(
275
- **common_args
376
+ case FlightRequestType.METADATA:
377
+ return flight_ing_pb2.DoPutRequest(
378
+ write_span_attributes_metadata_request=flight_ing_pb2.WriteSpanAttributesMetadataRequest(
379
+ **common_args
380
+ )
276
381
  )
277
- )
278
- case _:
279
- raise ValueError(f"Unsupported request_type: {request_type}")
382
+ case _:
383
+ raise ValueError(f"Unsupported request_type: {request_type}")
384
+
385
+ if dataset_id and experiment_name:
386
+ # dataset-based request types
387
+ match request_type:
388
+ case FlightRequestType.LOG_EXPERIMENT_DATA:
389
+ return flight_ing_pb2.DoPutRequest(
390
+ post_experiment_data=flight_ing_pb2.PostExperimentDataRequest(
391
+ **common_args
392
+ )
393
+ )
394
+ case _:
395
+ raise ValueError(f"Unsupported request_type: {request_type}")
396
+
397
+ raise ValueError(
398
+ f"Unsupported combination: {request_type=} with provided arguments."
399
+ )
@@ -5,3 +5,4 @@ class FlightRequestType(str, Enum):
5
5
  EVALUATION = "evaluation"
6
6
  ANNOTATION = "annotation"
7
7
  METADATA = "metadata"
8
+ LOG_EXPERIMENT_DATA = "log_experiment_data"
@@ -5,7 +5,7 @@
5
5
  """
6
6
  Arize REST API
7
7
 
8
- API specification for the backend data server. The API is hosted globally at https://app.arize.com/api/v1 or in your own environment. You can access the OpenAPI spec for this API at https://app.arize.com/api/v1/spec.yaml
8
+ API specification for the backend data server. The API is hosted globally at https://api.arize.com/v2 or in your own environment. You can access the OpenAPI spec for this API at https://api.arize.com/v2/spec.yaml
9
9
 
10
10
  The version of the OpenAPI document: 0.0.1
11
11
  Generated by OpenAPI Generator (https://openapi-generator.tech)
@@ -36,7 +36,9 @@ __all__ = [
36
36
  "DatasetsListExamples200Response",
37
37
  "Error",
38
38
  "Experiment",
39
+ "ExperimentsCreateRequest",
39
40
  "ExperimentsList200Response",
41
+ "ExperimentsRunsList200Response",
40
42
  ]
41
43
 
42
44
  # import apis into sdk package
@@ -62,5 +64,7 @@ from arize._generated.api_client.models.datasets_list200_response import Dataset
62
64
  from arize._generated.api_client.models.datasets_list_examples200_response import DatasetsListExamples200Response as DatasetsListExamples200Response
63
65
  from arize._generated.api_client.models.error import Error as Error
64
66
  from arize._generated.api_client.models.experiment import Experiment as Experiment
67
+ from arize._generated.api_client.models.experiments_create_request import ExperimentsCreateRequest as ExperimentsCreateRequest
65
68
  from arize._generated.api_client.models.experiments_list200_response import ExperimentsList200Response as ExperimentsList200Response
69
+ from arize._generated.api_client.models.experiments_runs_list200_response import ExperimentsRunsList200Response as ExperimentsRunsList200Response
66
70
 
@@ -3,7 +3,7 @@
3
3
  """
4
4
  Arize REST API
5
5
 
6
- API specification for the backend data server. The API is hosted globally at https://app.arize.com/api/v1 or in your own environment. You can access the OpenAPI spec for this API at https://app.arize.com/api/v1/spec.yaml
6
+ API specification for the backend data server. The API is hosted globally at https://api.arize.com/v2 or in your own environment. You can access the OpenAPI spec for this API at https://api.arize.com/v2/spec.yaml
7
7
 
8
8
  The version of the OpenAPI document: 0.0.1
9
9
  Generated by OpenAPI Generator (https://openapi-generator.tech)
@@ -309,7 +309,7 @@ class DatasetsApi:
309
309
 
310
310
  return self.api_client.param_serialize(
311
311
  method='POST',
312
- resource_path='/api/v1/datasets',
312
+ resource_path='/v2/datasets',
313
313
  path_params=_path_params,
314
314
  query_params=_query_params,
315
315
  header_params=_header_params,
@@ -585,7 +585,7 @@ class DatasetsApi:
585
585
 
586
586
  return self.api_client.param_serialize(
587
587
  method='DELETE',
588
- resource_path='/api/v1/datasets/{datasetId}',
588
+ resource_path='/v2/datasets/{datasetId}',
589
589
  path_params=_path_params,
590
590
  query_params=_query_params,
591
591
  header_params=_header_params,
@@ -878,7 +878,7 @@ class DatasetsApi:
878
878
 
879
879
  return self.api_client.param_serialize(
880
880
  method='GET',
881
- resource_path='/api/v1/datasets/{datasetId}',
881
+ resource_path='/v2/datasets/{datasetId}',
882
882
  path_params=_path_params,
883
883
  query_params=_query_params,
884
884
  header_params=_header_params,
@@ -1170,7 +1170,7 @@ class DatasetsApi:
1170
1170
 
1171
1171
  return self.api_client.param_serialize(
1172
1172
  method='GET',
1173
- resource_path='/api/v1/datasets',
1173
+ resource_path='/v2/datasets',
1174
1174
  path_params=_path_params,
1175
1175
  query_params=_query_params,
1176
1176
  header_params=_header_params,
@@ -1480,7 +1480,7 @@ class DatasetsApi:
1480
1480
 
1481
1481
  return self.api_client.param_serialize(
1482
1482
  method='GET',
1483
- resource_path='/api/v1/datasets/{datasetId}/examples',
1483
+ resource_path='/v2/datasets/{datasetId}/examples',
1484
1484
  path_params=_path_params,
1485
1485
  query_params=_query_params,
1486
1486
  header_params=_header_params,