arize-phoenix 3.16.1__py3-none-any.whl → 7.7.0__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.

Potentially problematic release.


This version of arize-phoenix might be problematic. Click here for more details.

Files changed (338) hide show
  1. arize_phoenix-7.7.0.dist-info/METADATA +261 -0
  2. arize_phoenix-7.7.0.dist-info/RECORD +345 -0
  3. {arize_phoenix-3.16.1.dist-info → arize_phoenix-7.7.0.dist-info}/WHEEL +1 -1
  4. arize_phoenix-7.7.0.dist-info/entry_points.txt +3 -0
  5. phoenix/__init__.py +86 -14
  6. phoenix/auth.py +309 -0
  7. phoenix/config.py +675 -45
  8. phoenix/core/model.py +32 -30
  9. phoenix/core/model_schema.py +102 -109
  10. phoenix/core/model_schema_adapter.py +48 -45
  11. phoenix/datetime_utils.py +24 -3
  12. phoenix/db/README.md +54 -0
  13. phoenix/db/__init__.py +4 -0
  14. phoenix/db/alembic.ini +85 -0
  15. phoenix/db/bulk_inserter.py +294 -0
  16. phoenix/db/engines.py +208 -0
  17. phoenix/db/enums.py +20 -0
  18. phoenix/db/facilitator.py +113 -0
  19. phoenix/db/helpers.py +159 -0
  20. phoenix/db/insertion/constants.py +2 -0
  21. phoenix/db/insertion/dataset.py +227 -0
  22. phoenix/db/insertion/document_annotation.py +171 -0
  23. phoenix/db/insertion/evaluation.py +191 -0
  24. phoenix/db/insertion/helpers.py +98 -0
  25. phoenix/db/insertion/span.py +193 -0
  26. phoenix/db/insertion/span_annotation.py +158 -0
  27. phoenix/db/insertion/trace_annotation.py +158 -0
  28. phoenix/db/insertion/types.py +256 -0
  29. phoenix/db/migrate.py +86 -0
  30. phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +199 -0
  31. phoenix/db/migrations/env.py +114 -0
  32. phoenix/db/migrations/script.py.mako +26 -0
  33. phoenix/db/migrations/versions/10460e46d750_datasets.py +317 -0
  34. phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +126 -0
  35. phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +66 -0
  36. phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +157 -0
  37. phoenix/db/migrations/versions/cf03bd6bae1d_init.py +280 -0
  38. phoenix/db/models.py +807 -0
  39. phoenix/exceptions.py +5 -1
  40. phoenix/experiments/__init__.py +6 -0
  41. phoenix/experiments/evaluators/__init__.py +29 -0
  42. phoenix/experiments/evaluators/base.py +158 -0
  43. phoenix/experiments/evaluators/code_evaluators.py +184 -0
  44. phoenix/experiments/evaluators/llm_evaluators.py +473 -0
  45. phoenix/experiments/evaluators/utils.py +236 -0
  46. phoenix/experiments/functions.py +772 -0
  47. phoenix/experiments/tracing.py +86 -0
  48. phoenix/experiments/types.py +726 -0
  49. phoenix/experiments/utils.py +25 -0
  50. phoenix/inferences/__init__.py +0 -0
  51. phoenix/{datasets → inferences}/errors.py +6 -5
  52. phoenix/{datasets → inferences}/fixtures.py +49 -42
  53. phoenix/{datasets/dataset.py → inferences/inferences.py} +121 -105
  54. phoenix/{datasets → inferences}/schema.py +11 -11
  55. phoenix/{datasets → inferences}/validation.py +13 -14
  56. phoenix/logging/__init__.py +3 -0
  57. phoenix/logging/_config.py +90 -0
  58. phoenix/logging/_filter.py +6 -0
  59. phoenix/logging/_formatter.py +69 -0
  60. phoenix/metrics/__init__.py +5 -4
  61. phoenix/metrics/binning.py +4 -3
  62. phoenix/metrics/metrics.py +2 -1
  63. phoenix/metrics/mixins.py +7 -6
  64. phoenix/metrics/retrieval_metrics.py +2 -1
  65. phoenix/metrics/timeseries.py +5 -4
  66. phoenix/metrics/wrappers.py +9 -3
  67. phoenix/pointcloud/clustering.py +5 -5
  68. phoenix/pointcloud/pointcloud.py +7 -5
  69. phoenix/pointcloud/projectors.py +5 -6
  70. phoenix/pointcloud/umap_parameters.py +53 -52
  71. phoenix/server/api/README.md +28 -0
  72. phoenix/server/api/auth.py +44 -0
  73. phoenix/server/api/context.py +152 -9
  74. phoenix/server/api/dataloaders/__init__.py +91 -0
  75. phoenix/server/api/dataloaders/annotation_summaries.py +139 -0
  76. phoenix/server/api/dataloaders/average_experiment_run_latency.py +54 -0
  77. phoenix/server/api/dataloaders/cache/__init__.py +3 -0
  78. phoenix/server/api/dataloaders/cache/two_tier_cache.py +68 -0
  79. phoenix/server/api/dataloaders/dataset_example_revisions.py +131 -0
  80. phoenix/server/api/dataloaders/dataset_example_spans.py +38 -0
  81. phoenix/server/api/dataloaders/document_evaluation_summaries.py +144 -0
  82. phoenix/server/api/dataloaders/document_evaluations.py +31 -0
  83. phoenix/server/api/dataloaders/document_retrieval_metrics.py +89 -0
  84. phoenix/server/api/dataloaders/experiment_annotation_summaries.py +79 -0
  85. phoenix/server/api/dataloaders/experiment_error_rates.py +58 -0
  86. phoenix/server/api/dataloaders/experiment_run_annotations.py +36 -0
  87. phoenix/server/api/dataloaders/experiment_run_counts.py +49 -0
  88. phoenix/server/api/dataloaders/experiment_sequence_number.py +44 -0
  89. phoenix/server/api/dataloaders/latency_ms_quantile.py +188 -0
  90. phoenix/server/api/dataloaders/min_start_or_max_end_times.py +85 -0
  91. phoenix/server/api/dataloaders/project_by_name.py +31 -0
  92. phoenix/server/api/dataloaders/record_counts.py +116 -0
  93. phoenix/server/api/dataloaders/session_io.py +79 -0
  94. phoenix/server/api/dataloaders/session_num_traces.py +30 -0
  95. phoenix/server/api/dataloaders/session_num_traces_with_error.py +32 -0
  96. phoenix/server/api/dataloaders/session_token_usages.py +41 -0
  97. phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +55 -0
  98. phoenix/server/api/dataloaders/span_annotations.py +26 -0
  99. phoenix/server/api/dataloaders/span_dataset_examples.py +31 -0
  100. phoenix/server/api/dataloaders/span_descendants.py +57 -0
  101. phoenix/server/api/dataloaders/span_projects.py +33 -0
  102. phoenix/server/api/dataloaders/token_counts.py +124 -0
  103. phoenix/server/api/dataloaders/trace_by_trace_ids.py +25 -0
  104. phoenix/server/api/dataloaders/trace_root_spans.py +32 -0
  105. phoenix/server/api/dataloaders/user_roles.py +30 -0
  106. phoenix/server/api/dataloaders/users.py +33 -0
  107. phoenix/server/api/exceptions.py +48 -0
  108. phoenix/server/api/helpers/__init__.py +12 -0
  109. phoenix/server/api/helpers/dataset_helpers.py +217 -0
  110. phoenix/server/api/helpers/experiment_run_filters.py +763 -0
  111. phoenix/server/api/helpers/playground_clients.py +948 -0
  112. phoenix/server/api/helpers/playground_registry.py +70 -0
  113. phoenix/server/api/helpers/playground_spans.py +455 -0
  114. phoenix/server/api/input_types/AddExamplesToDatasetInput.py +16 -0
  115. phoenix/server/api/input_types/AddSpansToDatasetInput.py +14 -0
  116. phoenix/server/api/input_types/ChatCompletionInput.py +38 -0
  117. phoenix/server/api/input_types/ChatCompletionMessageInput.py +24 -0
  118. phoenix/server/api/input_types/ClearProjectInput.py +15 -0
  119. phoenix/server/api/input_types/ClusterInput.py +2 -2
  120. phoenix/server/api/input_types/CreateDatasetInput.py +12 -0
  121. phoenix/server/api/input_types/CreateSpanAnnotationInput.py +18 -0
  122. phoenix/server/api/input_types/CreateTraceAnnotationInput.py +18 -0
  123. phoenix/server/api/input_types/DataQualityMetricInput.py +5 -2
  124. phoenix/server/api/input_types/DatasetExampleInput.py +14 -0
  125. phoenix/server/api/input_types/DatasetSort.py +17 -0
  126. phoenix/server/api/input_types/DatasetVersionSort.py +16 -0
  127. phoenix/server/api/input_types/DeleteAnnotationsInput.py +7 -0
  128. phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +13 -0
  129. phoenix/server/api/input_types/DeleteDatasetInput.py +7 -0
  130. phoenix/server/api/input_types/DeleteExperimentsInput.py +7 -0
  131. phoenix/server/api/input_types/DimensionFilter.py +4 -4
  132. phoenix/server/api/input_types/GenerativeModelInput.py +17 -0
  133. phoenix/server/api/input_types/Granularity.py +1 -1
  134. phoenix/server/api/input_types/InvocationParameters.py +162 -0
  135. phoenix/server/api/input_types/PatchAnnotationInput.py +19 -0
  136. phoenix/server/api/input_types/PatchDatasetExamplesInput.py +35 -0
  137. phoenix/server/api/input_types/PatchDatasetInput.py +14 -0
  138. phoenix/server/api/input_types/PerformanceMetricInput.py +5 -2
  139. phoenix/server/api/input_types/ProjectSessionSort.py +29 -0
  140. phoenix/server/api/input_types/SpanAnnotationSort.py +17 -0
  141. phoenix/server/api/input_types/SpanSort.py +134 -69
  142. phoenix/server/api/input_types/TemplateOptions.py +10 -0
  143. phoenix/server/api/input_types/TraceAnnotationSort.py +17 -0
  144. phoenix/server/api/input_types/UserRoleInput.py +9 -0
  145. phoenix/server/api/mutations/__init__.py +28 -0
  146. phoenix/server/api/mutations/api_key_mutations.py +167 -0
  147. phoenix/server/api/mutations/chat_mutations.py +593 -0
  148. phoenix/server/api/mutations/dataset_mutations.py +591 -0
  149. phoenix/server/api/mutations/experiment_mutations.py +75 -0
  150. phoenix/server/api/{types/ExportEventsMutation.py → mutations/export_events_mutations.py} +21 -18
  151. phoenix/server/api/mutations/project_mutations.py +57 -0
  152. phoenix/server/api/mutations/span_annotations_mutations.py +128 -0
  153. phoenix/server/api/mutations/trace_annotations_mutations.py +127 -0
  154. phoenix/server/api/mutations/user_mutations.py +329 -0
  155. phoenix/server/api/openapi/__init__.py +0 -0
  156. phoenix/server/api/openapi/main.py +17 -0
  157. phoenix/server/api/openapi/schema.py +16 -0
  158. phoenix/server/api/queries.py +738 -0
  159. phoenix/server/api/routers/__init__.py +11 -0
  160. phoenix/server/api/routers/auth.py +284 -0
  161. phoenix/server/api/routers/embeddings.py +26 -0
  162. phoenix/server/api/routers/oauth2.py +488 -0
  163. phoenix/server/api/routers/v1/__init__.py +64 -0
  164. phoenix/server/api/routers/v1/datasets.py +1017 -0
  165. phoenix/server/api/routers/v1/evaluations.py +362 -0
  166. phoenix/server/api/routers/v1/experiment_evaluations.py +115 -0
  167. phoenix/server/api/routers/v1/experiment_runs.py +167 -0
  168. phoenix/server/api/routers/v1/experiments.py +308 -0
  169. phoenix/server/api/routers/v1/pydantic_compat.py +78 -0
  170. phoenix/server/api/routers/v1/spans.py +267 -0
  171. phoenix/server/api/routers/v1/traces.py +208 -0
  172. phoenix/server/api/routers/v1/utils.py +95 -0
  173. phoenix/server/api/schema.py +44 -241
  174. phoenix/server/api/subscriptions.py +597 -0
  175. phoenix/server/api/types/Annotation.py +21 -0
  176. phoenix/server/api/types/AnnotationSummary.py +55 -0
  177. phoenix/server/api/types/AnnotatorKind.py +16 -0
  178. phoenix/server/api/types/ApiKey.py +27 -0
  179. phoenix/server/api/types/AuthMethod.py +9 -0
  180. phoenix/server/api/types/ChatCompletionMessageRole.py +11 -0
  181. phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +46 -0
  182. phoenix/server/api/types/Cluster.py +25 -24
  183. phoenix/server/api/types/CreateDatasetPayload.py +8 -0
  184. phoenix/server/api/types/DataQualityMetric.py +31 -13
  185. phoenix/server/api/types/Dataset.py +288 -63
  186. phoenix/server/api/types/DatasetExample.py +85 -0
  187. phoenix/server/api/types/DatasetExampleRevision.py +34 -0
  188. phoenix/server/api/types/DatasetVersion.py +14 -0
  189. phoenix/server/api/types/Dimension.py +32 -31
  190. phoenix/server/api/types/DocumentEvaluationSummary.py +9 -8
  191. phoenix/server/api/types/EmbeddingDimension.py +56 -49
  192. phoenix/server/api/types/Evaluation.py +25 -31
  193. phoenix/server/api/types/EvaluationSummary.py +30 -50
  194. phoenix/server/api/types/Event.py +20 -20
  195. phoenix/server/api/types/ExampleRevisionInterface.py +14 -0
  196. phoenix/server/api/types/Experiment.py +152 -0
  197. phoenix/server/api/types/ExperimentAnnotationSummary.py +13 -0
  198. phoenix/server/api/types/ExperimentComparison.py +17 -0
  199. phoenix/server/api/types/ExperimentRun.py +119 -0
  200. phoenix/server/api/types/ExperimentRunAnnotation.py +56 -0
  201. phoenix/server/api/types/GenerativeModel.py +9 -0
  202. phoenix/server/api/types/GenerativeProvider.py +85 -0
  203. phoenix/server/api/types/Inferences.py +80 -0
  204. phoenix/server/api/types/InferencesRole.py +23 -0
  205. phoenix/server/api/types/LabelFraction.py +7 -0
  206. phoenix/server/api/types/MimeType.py +2 -2
  207. phoenix/server/api/types/Model.py +54 -54
  208. phoenix/server/api/types/PerformanceMetric.py +8 -5
  209. phoenix/server/api/types/Project.py +407 -142
  210. phoenix/server/api/types/ProjectSession.py +139 -0
  211. phoenix/server/api/types/Segments.py +4 -4
  212. phoenix/server/api/types/Span.py +221 -176
  213. phoenix/server/api/types/SpanAnnotation.py +43 -0
  214. phoenix/server/api/types/SpanIOValue.py +15 -0
  215. phoenix/server/api/types/SystemApiKey.py +9 -0
  216. phoenix/server/api/types/TemplateLanguage.py +10 -0
  217. phoenix/server/api/types/TimeSeries.py +19 -15
  218. phoenix/server/api/types/TokenUsage.py +11 -0
  219. phoenix/server/api/types/Trace.py +154 -0
  220. phoenix/server/api/types/TraceAnnotation.py +45 -0
  221. phoenix/server/api/types/UMAPPoints.py +7 -7
  222. phoenix/server/api/types/User.py +60 -0
  223. phoenix/server/api/types/UserApiKey.py +45 -0
  224. phoenix/server/api/types/UserRole.py +15 -0
  225. phoenix/server/api/types/node.py +4 -112
  226. phoenix/server/api/types/pagination.py +156 -57
  227. phoenix/server/api/utils.py +34 -0
  228. phoenix/server/app.py +864 -115
  229. phoenix/server/bearer_auth.py +163 -0
  230. phoenix/server/dml_event.py +136 -0
  231. phoenix/server/dml_event_handler.py +256 -0
  232. phoenix/server/email/__init__.py +0 -0
  233. phoenix/server/email/sender.py +97 -0
  234. phoenix/server/email/templates/__init__.py +0 -0
  235. phoenix/server/email/templates/password_reset.html +19 -0
  236. phoenix/server/email/types.py +11 -0
  237. phoenix/server/grpc_server.py +102 -0
  238. phoenix/server/jwt_store.py +505 -0
  239. phoenix/server/main.py +305 -116
  240. phoenix/server/oauth2.py +52 -0
  241. phoenix/server/openapi/__init__.py +0 -0
  242. phoenix/server/prometheus.py +111 -0
  243. phoenix/server/rate_limiters.py +188 -0
  244. phoenix/server/static/.vite/manifest.json +87 -0
  245. phoenix/server/static/assets/components-Cy9nwIvF.js +2125 -0
  246. phoenix/server/static/assets/index-BKvHIxkk.js +113 -0
  247. phoenix/server/static/assets/pages-CUi2xCVQ.js +4449 -0
  248. phoenix/server/static/assets/vendor-DvC8cT4X.js +894 -0
  249. phoenix/server/static/assets/vendor-DxkFTwjz.css +1 -0
  250. phoenix/server/static/assets/vendor-arizeai-Do1793cv.js +662 -0
  251. phoenix/server/static/assets/vendor-codemirror-BzwZPyJM.js +24 -0
  252. phoenix/server/static/assets/vendor-recharts-_Jb7JjhG.js +59 -0
  253. phoenix/server/static/assets/vendor-shiki-Cl9QBraO.js +5 -0
  254. phoenix/server/static/assets/vendor-three-DwGkEfCM.js +2998 -0
  255. phoenix/server/telemetry.py +68 -0
  256. phoenix/server/templates/index.html +82 -23
  257. phoenix/server/thread_server.py +3 -3
  258. phoenix/server/types.py +275 -0
  259. phoenix/services.py +27 -18
  260. phoenix/session/client.py +743 -68
  261. phoenix/session/data_extractor.py +31 -7
  262. phoenix/session/evaluation.py +3 -9
  263. phoenix/session/session.py +263 -219
  264. phoenix/settings.py +22 -0
  265. phoenix/trace/__init__.py +2 -22
  266. phoenix/trace/attributes.py +338 -0
  267. phoenix/trace/dsl/README.md +116 -0
  268. phoenix/trace/dsl/filter.py +663 -213
  269. phoenix/trace/dsl/helpers.py +73 -21
  270. phoenix/trace/dsl/query.py +574 -201
  271. phoenix/trace/exporter.py +24 -19
  272. phoenix/trace/fixtures.py +368 -32
  273. phoenix/trace/otel.py +71 -219
  274. phoenix/trace/projects.py +3 -2
  275. phoenix/trace/schemas.py +33 -11
  276. phoenix/trace/span_evaluations.py +21 -16
  277. phoenix/trace/span_json_decoder.py +6 -4
  278. phoenix/trace/span_json_encoder.py +2 -2
  279. phoenix/trace/trace_dataset.py +47 -32
  280. phoenix/trace/utils.py +21 -4
  281. phoenix/utilities/__init__.py +0 -26
  282. phoenix/utilities/client.py +132 -0
  283. phoenix/utilities/deprecation.py +31 -0
  284. phoenix/utilities/error_handling.py +3 -2
  285. phoenix/utilities/json.py +109 -0
  286. phoenix/utilities/logging.py +8 -0
  287. phoenix/utilities/project.py +2 -2
  288. phoenix/utilities/re.py +49 -0
  289. phoenix/utilities/span_store.py +0 -23
  290. phoenix/utilities/template_formatters.py +99 -0
  291. phoenix/version.py +1 -1
  292. arize_phoenix-3.16.1.dist-info/METADATA +0 -495
  293. arize_phoenix-3.16.1.dist-info/RECORD +0 -178
  294. phoenix/core/project.py +0 -619
  295. phoenix/core/traces.py +0 -96
  296. phoenix/experimental/evals/__init__.py +0 -73
  297. phoenix/experimental/evals/evaluators.py +0 -413
  298. phoenix/experimental/evals/functions/__init__.py +0 -4
  299. phoenix/experimental/evals/functions/classify.py +0 -453
  300. phoenix/experimental/evals/functions/executor.py +0 -353
  301. phoenix/experimental/evals/functions/generate.py +0 -138
  302. phoenix/experimental/evals/functions/processing.py +0 -76
  303. phoenix/experimental/evals/models/__init__.py +0 -14
  304. phoenix/experimental/evals/models/anthropic.py +0 -175
  305. phoenix/experimental/evals/models/base.py +0 -170
  306. phoenix/experimental/evals/models/bedrock.py +0 -221
  307. phoenix/experimental/evals/models/litellm.py +0 -134
  308. phoenix/experimental/evals/models/openai.py +0 -448
  309. phoenix/experimental/evals/models/rate_limiters.py +0 -246
  310. phoenix/experimental/evals/models/vertex.py +0 -173
  311. phoenix/experimental/evals/models/vertexai.py +0 -186
  312. phoenix/experimental/evals/retrievals.py +0 -96
  313. phoenix/experimental/evals/templates/__init__.py +0 -50
  314. phoenix/experimental/evals/templates/default_templates.py +0 -472
  315. phoenix/experimental/evals/templates/template.py +0 -195
  316. phoenix/experimental/evals/utils/__init__.py +0 -172
  317. phoenix/experimental/evals/utils/threads.py +0 -27
  318. phoenix/server/api/helpers.py +0 -11
  319. phoenix/server/api/routers/evaluation_handler.py +0 -109
  320. phoenix/server/api/routers/span_handler.py +0 -70
  321. phoenix/server/api/routers/trace_handler.py +0 -60
  322. phoenix/server/api/types/DatasetRole.py +0 -23
  323. phoenix/server/static/index.css +0 -6
  324. phoenix/server/static/index.js +0 -7447
  325. phoenix/storage/span_store/__init__.py +0 -23
  326. phoenix/storage/span_store/text_file.py +0 -85
  327. phoenix/trace/dsl/missing.py +0 -60
  328. phoenix/trace/langchain/__init__.py +0 -3
  329. phoenix/trace/langchain/instrumentor.py +0 -35
  330. phoenix/trace/llama_index/__init__.py +0 -3
  331. phoenix/trace/llama_index/callback.py +0 -102
  332. phoenix/trace/openai/__init__.py +0 -3
  333. phoenix/trace/openai/instrumentor.py +0 -30
  334. {arize_phoenix-3.16.1.dist-info → arize_phoenix-7.7.0.dist-info}/licenses/IP_NOTICE +0 -0
  335. {arize_phoenix-3.16.1.dist-info → arize_phoenix-7.7.0.dist-info}/licenses/LICENSE +0 -0
  336. /phoenix/{datasets → db/insertion}/__init__.py +0 -0
  337. /phoenix/{experimental → db/migrations}/__init__.py +0 -0
  338. /phoenix/{storage → db/migrations/data_migration_scripts}/__init__.py +0 -0
@@ -0,0 +1,18 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry.relay import GlobalID
5
+ from strawberry.scalars import JSON
6
+
7
+ from phoenix.server.api.types.AnnotatorKind import AnnotatorKind
8
+
9
+
10
+ @strawberry.input
11
+ class CreateTraceAnnotationInput:
12
+ trace_id: GlobalID
13
+ name: str
14
+ annotator_kind: AnnotatorKind
15
+ label: Optional[str] = None
16
+ score: Optional[float] = None
17
+ explanation: Optional[str] = None
18
+ metadata: JSON = strawberry.field(default_factory=dict)
@@ -8,7 +8,10 @@ from typing_extensions import Annotated
8
8
  from phoenix.core.model_schema import Column
9
9
  from phoenix.metrics import Metric
10
10
  from phoenix.metrics.mixins import UnaryOperator
11
- from phoenix.server.api.types.DataQualityMetric import DataQualityMetric
11
+ from phoenix.server.api.types.DataQualityMetric import (
12
+ DATA_QUALITY_METRIC_FACTORIES,
13
+ DataQualityMetric,
14
+ )
12
15
 
13
16
 
14
17
  @strawberry.input
@@ -26,7 +29,7 @@ class DataQualityMetricInput:
26
29
  metric_instance: strawberry.Private[Metric] = field(init=False)
27
30
 
28
31
  def __post_init__(self) -> None:
29
- metric_instance = self.metric.value()
32
+ metric_instance = DATA_QUALITY_METRIC_FACTORIES[self.metric]()
30
33
  if isinstance(metric_instance, UnaryOperator):
31
34
  if not isinstance(self.column_name, str):
32
35
  raise ValueError(f"column name must not be null for {self.metric.name}")
@@ -0,0 +1,14 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry import UNSET
5
+ from strawberry.relay import GlobalID
6
+ from strawberry.scalars import JSON
7
+
8
+
9
+ @strawberry.input
10
+ class DatasetExampleInput:
11
+ input: JSON
12
+ output: JSON
13
+ metadata: JSON
14
+ span_id: Optional[GlobalID] = UNSET
@@ -0,0 +1,17 @@
1
+ from enum import Enum
2
+
3
+ import strawberry
4
+
5
+ from phoenix.server.api.types.SortDir import SortDir
6
+
7
+
8
+ @strawberry.enum
9
+ class DatasetColumn(Enum):
10
+ createdAt = "created_at"
11
+ name = "name"
12
+
13
+
14
+ @strawberry.input(description="The sort key and direction for dataset connections")
15
+ class DatasetSort:
16
+ col: DatasetColumn
17
+ dir: SortDir
@@ -0,0 +1,16 @@
1
+ from enum import Enum
2
+
3
+ import strawberry
4
+
5
+ from phoenix.server.api.types.SortDir import SortDir
6
+
7
+
8
+ @strawberry.enum
9
+ class DatasetVersionColumn(Enum):
10
+ createdAt = "created_at"
11
+
12
+
13
+ @strawberry.input(description="The sort key and direction for dataset version connections")
14
+ class DatasetVersionSort:
15
+ col: DatasetVersionColumn
16
+ dir: SortDir
@@ -0,0 +1,7 @@
1
+ import strawberry
2
+ from strawberry.relay import GlobalID
3
+
4
+
5
+ @strawberry.input
6
+ class DeleteAnnotationsInput:
7
+ annotation_ids: list[GlobalID]
@@ -0,0 +1,13 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry import UNSET
5
+ from strawberry.relay import GlobalID
6
+ from strawberry.scalars import JSON
7
+
8
+
9
+ @strawberry.input
10
+ class DeleteDatasetExamplesInput:
11
+ example_ids: list[GlobalID]
12
+ dataset_version_description: Optional[str] = UNSET
13
+ dataset_version_metadata: Optional[JSON] = UNSET
@@ -0,0 +1,7 @@
1
+ import strawberry
2
+ from strawberry.relay import GlobalID
3
+
4
+
5
+ @strawberry.input
6
+ class DeleteDatasetInput:
7
+ dataset_id: GlobalID
@@ -0,0 +1,7 @@
1
+ import strawberry
2
+ from strawberry.relay import GlobalID
3
+
4
+
5
+ @strawberry.input
6
+ class DeleteExperimentsInput:
7
+ experiment_ids: list[GlobalID]
@@ -1,4 +1,4 @@
1
- from typing import List, Optional
1
+ from typing import Optional
2
2
 
3
3
  import strawberry
4
4
  from strawberry import UNSET
@@ -52,9 +52,9 @@ class DimensionFilter:
52
52
 
53
53
  """
54
54
 
55
- types: Optional[List[DimensionType]] = UNSET
56
- shapes: Optional[List[DimensionShape]] = UNSET
57
- data_types: Optional[List[DimensionDataType]] = UNSET
55
+ types: Optional[list[DimensionType]] = UNSET
56
+ shapes: Optional[list[DimensionShape]] = UNSET
57
+ data_types: Optional[list[DimensionDataType]] = UNSET
58
58
 
59
59
  def __post_init__(self) -> None:
60
60
  self.types = ensure_list(self.types)
@@ -0,0 +1,17 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry import UNSET
5
+
6
+ from phoenix.server.api.types.GenerativeProvider import GenerativeProviderKey
7
+
8
+
9
+ @strawberry.input
10
+ class GenerativeModelInput:
11
+ provider_key: GenerativeProviderKey
12
+ name: str
13
+ """ The name of the model. Or the Deployment Name for Azure OpenAI models. """
14
+ endpoint: Optional[str] = UNSET
15
+ """ The endpoint to use for the model. Only required for Azure OpenAI models. """
16
+ api_version: Optional[str] = UNSET
17
+ """ The API version to use for the model. """
@@ -1,6 +1,6 @@
1
+ from collections.abc import Iterator
1
2
  from datetime import datetime, timedelta
2
3
  from itertools import accumulate, repeat, takewhile
3
- from typing import Iterator
4
4
 
5
5
  import strawberry
6
6
 
@@ -0,0 +1,162 @@
1
+ from enum import Enum
2
+ from typing import Annotated, Any, Mapping, Optional, Union
3
+
4
+ import strawberry
5
+ from strawberry import UNSET
6
+ from strawberry.scalars import JSON
7
+
8
+
9
+ @strawberry.enum
10
+ class CanonicalParameterName(str, Enum):
11
+ TEMPERATURE = "temperature"
12
+ MAX_COMPLETION_TOKENS = "max_completion_tokens"
13
+ STOP_SEQUENCES = "stop_sequences"
14
+ TOP_P = "top_p"
15
+ RANDOM_SEED = "random_seed"
16
+ TOOL_CHOICE = "tool_choice"
17
+ RESPONSE_FORMAT = "response_format"
18
+
19
+
20
+ @strawberry.enum
21
+ class InvocationInputField(str, Enum):
22
+ value_int = "value_int"
23
+ value_float = "value_float"
24
+ value_bool = "value_bool"
25
+ value_string = "value_string"
26
+ value_json = "value_json"
27
+ value_string_list = "value_string_list"
28
+ value_boolean = "value_boolean"
29
+
30
+
31
+ @strawberry.input
32
+ class InvocationParameterInput:
33
+ invocation_name: str
34
+ canonical_name: Optional[CanonicalParameterName] = None
35
+ value_int: Optional[int] = UNSET
36
+ value_float: Optional[float] = UNSET
37
+ value_bool: Optional[bool] = UNSET
38
+ value_string: Optional[str] = UNSET
39
+ value_json: Optional[JSON] = UNSET
40
+ value_string_list: Optional[list[str]] = UNSET
41
+ value_boolean: Optional[bool] = UNSET
42
+
43
+
44
+ @strawberry.interface
45
+ class InvocationParameterBase:
46
+ invocation_name: str
47
+ canonical_name: Optional[CanonicalParameterName] = None
48
+ label: str
49
+ required: bool = False
50
+
51
+
52
+ @strawberry.type
53
+ class IntInvocationParameter(InvocationParameterBase):
54
+ invocation_input_field: InvocationInputField = InvocationInputField.value_int
55
+ default_value: Optional[int] = None
56
+
57
+
58
+ @strawberry.type
59
+ class FloatInvocationParameter(InvocationParameterBase):
60
+ invocation_input_field: InvocationInputField = InvocationInputField.value_float
61
+ default_value: Optional[float] = None
62
+
63
+
64
+ @strawberry.type
65
+ class BoundedFloatInvocationParameter(InvocationParameterBase):
66
+ invocation_input_field: InvocationInputField = InvocationInputField.value_float
67
+ default_value: Optional[float] = None
68
+ min_value: float
69
+ max_value: float
70
+
71
+
72
+ @strawberry.type
73
+ class StringInvocationParameter(InvocationParameterBase):
74
+ invocation_input_field: InvocationInputField = InvocationInputField.value_string
75
+ default_value: Optional[str] = None
76
+
77
+
78
+ @strawberry.type
79
+ class JSONInvocationParameter(InvocationParameterBase):
80
+ invocation_input_field: InvocationInputField = InvocationInputField.value_json
81
+ default_value: Optional[JSON] = None
82
+
83
+
84
+ @strawberry.type
85
+ class StringListInvocationParameter(InvocationParameterBase):
86
+ invocation_input_field: InvocationInputField = InvocationInputField.value_string_list
87
+ default_value: Optional[list[str]] = None
88
+
89
+
90
+ @strawberry.type
91
+ class BooleanInvocationParameter(InvocationParameterBase):
92
+ invocation_input_field: InvocationInputField = InvocationInputField.value_bool
93
+ default_value: Optional[bool] = None
94
+
95
+
96
+ def extract_parameter(
97
+ param_def: InvocationParameterBase, param_input: InvocationParameterInput
98
+ ) -> Any:
99
+ if isinstance(param_def, IntInvocationParameter):
100
+ return (
101
+ param_input.value_int if param_input.value_int is not UNSET else param_def.default_value
102
+ )
103
+ elif isinstance(param_def, FloatInvocationParameter):
104
+ return (
105
+ param_input.value_float
106
+ if param_input.value_float is not UNSET
107
+ else param_def.default_value
108
+ )
109
+ elif isinstance(param_def, BoundedFloatInvocationParameter):
110
+ return (
111
+ param_input.value_float
112
+ if param_input.value_float is not UNSET
113
+ else param_def.default_value
114
+ )
115
+ elif isinstance(param_def, StringInvocationParameter):
116
+ return (
117
+ param_input.value_string
118
+ if param_input.value_string is not UNSET
119
+ else param_def.default_value
120
+ )
121
+ elif isinstance(param_def, JSONInvocationParameter):
122
+ return (
123
+ param_input.value_json
124
+ if param_input.value_json is not UNSET
125
+ else param_def.default_value
126
+ )
127
+ elif isinstance(param_def, StringListInvocationParameter):
128
+ return (
129
+ param_input.value_string_list
130
+ if param_input.value_string_list is not UNSET
131
+ else param_def.default_value
132
+ )
133
+ elif isinstance(param_def, BooleanInvocationParameter):
134
+ return (
135
+ param_input.value_bool
136
+ if param_input.value_bool is not UNSET
137
+ else param_def.default_value
138
+ )
139
+
140
+
141
+ def validate_invocation_parameters(
142
+ parameters: list["InvocationParameter"],
143
+ input: Mapping[str, Any],
144
+ ) -> None:
145
+ for param_def in parameters:
146
+ if param_def.required and param_def.invocation_name not in input:
147
+ raise ValueError(f"Required parameter {param_def.invocation_name} not provided")
148
+
149
+
150
+ # Create the union for output types
151
+ InvocationParameter = Annotated[
152
+ Union[
153
+ IntInvocationParameter,
154
+ FloatInvocationParameter,
155
+ BoundedFloatInvocationParameter,
156
+ StringInvocationParameter,
157
+ JSONInvocationParameter,
158
+ StringListInvocationParameter,
159
+ BooleanInvocationParameter,
160
+ ],
161
+ strawberry.union("InvocationParameter"),
162
+ ]
@@ -0,0 +1,19 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry import UNSET
5
+ from strawberry.relay import GlobalID
6
+ from strawberry.scalars import JSON
7
+
8
+ from phoenix.server.api.types.AnnotatorKind import AnnotatorKind
9
+
10
+
11
+ @strawberry.input
12
+ class PatchAnnotationInput:
13
+ annotation_id: GlobalID
14
+ name: Optional[str] = UNSET
15
+ annotator_kind: Optional[AnnotatorKind] = UNSET
16
+ label: Optional[str] = UNSET
17
+ score: Optional[float] = UNSET
18
+ explanation: Optional[str] = UNSET
19
+ metadata: Optional[JSON] = UNSET
@@ -0,0 +1,35 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry import UNSET
5
+ from strawberry.relay import GlobalID
6
+ from strawberry.scalars import JSON
7
+
8
+
9
+ @strawberry.input
10
+ class DatasetExamplePatch:
11
+ """
12
+ Contains the information needed to apply a patch revision to a dataset example.
13
+ """
14
+
15
+ example_id: GlobalID
16
+ input: Optional[JSON] = UNSET
17
+ output: Optional[JSON] = UNSET
18
+ metadata: Optional[JSON] = UNSET
19
+
20
+ def is_empty(self) -> bool:
21
+ """
22
+ Non-empty patches have at least one field set.
23
+ """
24
+ return all(field is UNSET for field in (self.input, self.output, self.metadata))
25
+
26
+
27
+ @strawberry.input
28
+ class PatchDatasetExamplesInput:
29
+ """
30
+ Input type to the patchDatasetExamples mutation.
31
+ """
32
+
33
+ patches: list[DatasetExamplePatch]
34
+ version_description: Optional[str] = UNSET
35
+ version_metadata: Optional[JSON] = UNSET
@@ -0,0 +1,14 @@
1
+ from typing import Optional
2
+
3
+ import strawberry
4
+ from strawberry import UNSET
5
+ from strawberry.relay import GlobalID
6
+ from strawberry.scalars import JSON
7
+
8
+
9
+ @strawberry.input
10
+ class PatchDatasetInput:
11
+ dataset_id: GlobalID
12
+ name: Optional[str] = UNSET
13
+ description: Optional[str] = UNSET
14
+ metadata: Optional[JSON] = UNSET
@@ -3,7 +3,10 @@ import strawberry
3
3
  from phoenix.core.model_schema import ACTUAL_LABEL, PREDICTION_LABEL, Column, Model
4
4
  from phoenix.metrics import Metric
5
5
  from phoenix.metrics.mixins import EvaluationMetric
6
- from phoenix.server.api.types.PerformanceMetric import PerformanceMetric
6
+ from phoenix.server.api.types.PerformanceMetric import (
7
+ PERFORMANCE_METRIC_FUNCTIONS,
8
+ PerformanceMetric,
9
+ )
7
10
 
8
11
 
9
12
  @strawberry.input
@@ -14,5 +17,5 @@ class PerformanceMetricInput:
14
17
  return EvaluationMetric(
15
18
  actual=Column(model[ACTUAL_LABEL].name),
16
19
  predicted=Column(model[PREDICTION_LABEL].name),
17
- eval=self.metric.value,
20
+ eval=PERFORMANCE_METRIC_FUNCTIONS[self.metric],
18
21
  )
@@ -0,0 +1,29 @@
1
+ from enum import Enum, auto
2
+
3
+ import strawberry
4
+ from typing_extensions import assert_never
5
+
6
+ from phoenix.server.api.types.pagination import CursorSortColumnDataType
7
+ from phoenix.server.api.types.SortDir import SortDir
8
+
9
+
10
+ @strawberry.enum
11
+ class ProjectSessionColumn(Enum):
12
+ startTime = auto()
13
+ endTime = auto()
14
+ tokenCountTotal = auto()
15
+ numTraces = auto()
16
+
17
+ @property
18
+ def data_type(self) -> CursorSortColumnDataType:
19
+ if self is ProjectSessionColumn.tokenCountTotal or self is ProjectSessionColumn.numTraces:
20
+ return CursorSortColumnDataType.INT
21
+ if self is ProjectSessionColumn.startTime or self is ProjectSessionColumn.endTime:
22
+ return CursorSortColumnDataType.DATETIME
23
+ assert_never(self)
24
+
25
+
26
+ @strawberry.input(description="The sort key and direction for ProjectSession connections.")
27
+ class ProjectSessionSort:
28
+ col: ProjectSessionColumn
29
+ dir: SortDir
@@ -0,0 +1,17 @@
1
+ from enum import Enum
2
+
3
+ import strawberry
4
+
5
+ from phoenix.server.api.types.SortDir import SortDir
6
+
7
+
8
+ @strawberry.enum
9
+ class SpanAnnotationColumn(Enum):
10
+ createdAt = "created_at"
11
+ name = "name"
12
+
13
+
14
+ @strawberry.input(description="The sort key and direction for SpanAnnotation connections")
15
+ class SpanAnnotationSort:
16
+ col: SpanAnnotationColumn
17
+ dir: SortDir