arize-phoenix 0.0.32__py3-none-any.whl → 0.0.33__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 (71) hide show
  1. {arize_phoenix-0.0.32.dist-info → arize_phoenix-0.0.33.dist-info}/METADATA +11 -5
  2. {arize_phoenix-0.0.32.dist-info → arize_phoenix-0.0.33.dist-info}/RECORD +69 -40
  3. phoenix/__init__.py +3 -1
  4. phoenix/config.py +23 -1
  5. phoenix/core/model_schema.py +14 -37
  6. phoenix/core/model_schema_adapter.py +0 -1
  7. phoenix/core/traces.py +285 -0
  8. phoenix/datasets/dataset.py +14 -21
  9. phoenix/datasets/errors.py +4 -1
  10. phoenix/datasets/schema.py +1 -1
  11. phoenix/datetime_utils.py +87 -0
  12. phoenix/experimental/callbacks/__init__.py +0 -0
  13. phoenix/experimental/callbacks/langchain_tracer.py +228 -0
  14. phoenix/experimental/callbacks/llama_index_trace_callback_handler.py +364 -0
  15. phoenix/experimental/evals/__init__.py +33 -0
  16. phoenix/experimental/evals/functions/__init__.py +4 -0
  17. phoenix/experimental/evals/functions/binary.py +156 -0
  18. phoenix/experimental/evals/functions/common.py +31 -0
  19. phoenix/experimental/evals/functions/generate.py +50 -0
  20. phoenix/experimental/evals/models/__init__.py +4 -0
  21. phoenix/experimental/evals/models/base.py +130 -0
  22. phoenix/experimental/evals/models/openai.py +128 -0
  23. phoenix/experimental/evals/retrievals.py +2 -2
  24. phoenix/experimental/evals/templates/__init__.py +24 -0
  25. phoenix/experimental/evals/templates/default_templates.py +126 -0
  26. phoenix/experimental/evals/templates/template.py +107 -0
  27. phoenix/experimental/evals/utils/__init__.py +0 -0
  28. phoenix/experimental/evals/utils/downloads.py +33 -0
  29. phoenix/experimental/evals/utils/threads.py +27 -0
  30. phoenix/experimental/evals/utils/types.py +9 -0
  31. phoenix/experimental/evals/utils.py +33 -0
  32. phoenix/metrics/binning.py +0 -1
  33. phoenix/metrics/timeseries.py +2 -3
  34. phoenix/server/api/context.py +2 -0
  35. phoenix/server/api/input_types/SpanSort.py +60 -0
  36. phoenix/server/api/schema.py +85 -4
  37. phoenix/server/api/types/DataQualityMetric.py +10 -1
  38. phoenix/server/api/types/Dataset.py +2 -4
  39. phoenix/server/api/types/DatasetInfo.py +10 -0
  40. phoenix/server/api/types/ExportEventsMutation.py +4 -1
  41. phoenix/server/api/types/Functionality.py +15 -0
  42. phoenix/server/api/types/MimeType.py +16 -0
  43. phoenix/server/api/types/Model.py +3 -5
  44. phoenix/server/api/types/SortDir.py +13 -0
  45. phoenix/server/api/types/Span.py +229 -0
  46. phoenix/server/api/types/TimeSeries.py +9 -2
  47. phoenix/server/api/types/pagination.py +2 -0
  48. phoenix/server/app.py +24 -4
  49. phoenix/server/main.py +60 -24
  50. phoenix/server/span_handler.py +39 -0
  51. phoenix/server/static/index.js +956 -479
  52. phoenix/server/thread_server.py +10 -2
  53. phoenix/services.py +39 -16
  54. phoenix/session/session.py +99 -27
  55. phoenix/trace/exporter.py +71 -0
  56. phoenix/trace/filter.py +181 -0
  57. phoenix/trace/fixtures.py +23 -8
  58. phoenix/trace/schemas.py +59 -6
  59. phoenix/trace/semantic_conventions.py +141 -1
  60. phoenix/trace/span_json_decoder.py +60 -6
  61. phoenix/trace/span_json_encoder.py +1 -9
  62. phoenix/trace/trace_dataset.py +100 -8
  63. phoenix/trace/tracer.py +26 -3
  64. phoenix/trace/v1/__init__.py +522 -0
  65. phoenix/trace/v1/trace_pb2.py +52 -0
  66. phoenix/trace/v1/trace_pb2.pyi +351 -0
  67. phoenix/core/dimension_data_type.py +0 -6
  68. phoenix/core/dimension_type.py +0 -9
  69. {arize_phoenix-0.0.32.dist-info → arize_phoenix-0.0.33.dist-info}/WHEEL +0 -0
  70. {arize_phoenix-0.0.32.dist-info → arize_phoenix-0.0.33.dist-info}/licenses/IP_NOTICE +0 -0
  71. {arize_phoenix-0.0.32.dist-info → arize_phoenix-0.0.33.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arize-phoenix
3
- Version: 0.0.32
3
+ Version: 0.0.33
4
4
  Summary: ML Observability in your notebook
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -19,13 +19,14 @@ Requires-Python: <3.12,>=3.8
19
19
  Requires-Dist: hdbscan<1.0.0,>=0.8.33
20
20
  Requires-Dist: numpy
21
21
  Requires-Dist: pandas
22
- Requires-Dist: portpicker
22
+ Requires-Dist: protobuf<5.0,>=3.20
23
23
  Requires-Dist: psutil
24
24
  Requires-Dist: pyarrow
25
25
  Requires-Dist: scikit-learn<1.3.0
26
26
  Requires-Dist: scipy
27
+ Requires-Dist: sortedcontainers
27
28
  Requires-Dist: starlette
28
- Requires-Dist: strawberry-graphql==0.178.0
29
+ Requires-Dist: strawberry-graphql==0.205.0
29
30
  Requires-Dist: typing-extensions
30
31
  Requires-Dist: umap-learn
31
32
  Requires-Dist: uvicorn
@@ -33,15 +34,20 @@ Requires-Dist: wrapt
33
34
  Provides-Extra: dev
34
35
  Requires-Dist: arize[autoembeddings,llm-evaluation]; extra == 'dev'
35
36
  Requires-Dist: black[jupyter]; extra == 'dev'
37
+ Requires-Dist: gcsfs; extra == 'dev'
36
38
  Requires-Dist: hatch; extra == 'dev'
37
39
  Requires-Dist: jupyter; extra == 'dev'
38
- Requires-Dist: pandas-stubs; extra == 'dev'
40
+ Requires-Dist: nbqa; extra == 'dev'
41
+ Requires-Dist: pandas-stubs<=2.0.2.230605; extra == 'dev'
39
42
  Requires-Dist: pre-commit; extra == 'dev'
40
43
  Requires-Dist: pytest; extra == 'dev'
41
44
  Requires-Dist: pytest-cov; extra == 'dev'
42
45
  Requires-Dist: pytest-lazy-fixture; extra == 'dev'
43
- Requires-Dist: strawberry-graphql[debug-server]==0.178.0; extra == 'dev'
46
+ Requires-Dist: ruff==0.0.289; extra == 'dev'
47
+ Requires-Dist: strawberry-graphql[debug-server]==0.205.0; extra == 'dev'
44
48
  Provides-Extra: experimental
49
+ Requires-Dist: langchain>=0.0.257; extra == 'experimental'
50
+ Requires-Dist: llama-index>=0.8.25; extra == 'experimental'
45
51
  Requires-Dist: openai; extra == 'experimental'
46
52
  Requires-Dist: tenacity; extra == 'experimental'
47
53
  Description-Content-Type: text/markdown
@@ -1,44 +1,62 @@
1
- phoenix/__init__.py,sha256=YyVQxdGxlVlPWjxg83Tf5HK-csWPWQYv-YzbYgD6V5E,1189
2
- phoenix/config.py,sha256=tjNn9oqDxQmeO85sCchLlTsDiRJ6AoK0CTt_Uc_hrKM,1442
1
+ phoenix/__init__.py,sha256=zUwXcP6p18s4YBqta8v7omq4jZe86C2v_qTu5XhXXNk,1255
2
+ phoenix/config.py,sha256=TdMKmU7V490I38x_hvB1s14Y8pV3ldLSpJTKq6crzBY,1952
3
+ phoenix/datetime_utils.py,sha256=D955QLrkgrrSdUM6NyqbCeAu2SMsjhR5rHVQEsVUdng,2773
3
4
  phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
4
- phoenix/services.py,sha256=BlQF7lTQwhXUHBZBjZOoTnDM2Qni_hziUXsfp1Hux4Q,3978
5
+ phoenix/services.py,sha256=9PqrHXmpYryGtbxjrSsdnL_UESLOc0PvKxH4MThkJRQ,4748
5
6
  phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- phoenix/core/dimension_data_type.py,sha256=FEBp4p06LlFpAXq-ftxDAFymBtU_pYTFmJjFc6P3BPk,111
7
- phoenix/core/dimension_type.py,sha256=EKFmPzuGr1cn7t4vD-XDk9s836j6U3iRbSu3Z2sO8sM,171
8
7
  phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
9
8
  phoenix/core/model.py,sha256=vQ6RxpUPlncezJvur5u6xBN0Lkrk2gW0cTyb-qqaSqA,4713
10
- phoenix/core/model_schema.py,sha256=H8EHEsrGdsieD0grSYejunv3vqlzwM-OIxXx6DDGibA,50994
11
- phoenix/core/model_schema_adapter.py,sha256=GzJetQALsDUWJuFzLOEBSEC8M0JI0_F7i6CODYK2elI,8292
12
- phoenix/core/traces.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ phoenix/core/model_schema.py,sha256=rR9VdhL_oXxbprDTPQJBXs5hw5sMPQmzx__m6Kwsxug,50394
10
+ phoenix/core/model_schema_adapter.py,sha256=3GkyzqUST4fYi-Bgs8qAam5hwMCdQRZTDLjZ9Bnzdm4,8268
11
+ phoenix/core/traces.py,sha256=MOww47QmWgmwLPi7dAOLfnJhodO1nsxcPqtkw6o5l90,11322
13
12
  phoenix/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- phoenix/datasets/dataset.py,sha256=sH4yLFhJjEJrWCd8LjmCoa3FdfcIXAeDpnXUcUzS7dc,30996
15
- phoenix/datasets/errors.py,sha256=-Iyk8rsvP_KX-P4gOqjm26slkDq1-9CohK07_LkrYCI,8117
13
+ phoenix/datasets/dataset.py,sha256=scKVZ7zc6Dpc_ntt-pWhzY-KWqOJEwKePuyNnKSVTGE,30515
14
+ phoenix/datasets/errors.py,sha256=cGp9vxnw4SewFoWBV3ZGMkhE0Kh73lPIv3Ppz_H_RoA,8261
16
15
  phoenix/datasets/fixtures.py,sha256=0_PacL3dw49zulKpFpPdhvxJxeGmHTguqIyf2VXkBkk,19158
17
- phoenix/datasets/schema.py,sha256=HlM0f-pLFul2sYyHZM-Av8OFxLFkn57dkK_BWbMzyJY,6668
16
+ phoenix/datasets/schema.py,sha256=bF1d2Md6NyqQZuC4Ym5A52f2_IcazkyxGFZ11HPqSg0,6668
18
17
  phoenix/datasets/validation.py,sha256=dZ9lCFUV0EY7HCkQkQBrs-GLAEIZdpOqUxwD5l4dp88,8294
19
18
  phoenix/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- phoenix/experimental/evals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- phoenix/experimental/evals/retrievals.py,sha256=3PBv2yFIcxdn_y-L6We554TsozqCDjTVBE8017RB2mY,3793
19
+ phoenix/experimental/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ phoenix/experimental/callbacks/langchain_tracer.py,sha256=nOsOGqHkEfsjsy4gWVv4g0VZmOW3oA6zltTK7ck942U,7987
21
+ phoenix/experimental/callbacks/llama_index_trace_callback_handler.py,sha256=KFFs3hhz1izwjQ2KeZimYeU5OYEVFhHpc32xOhzS7yc,13885
22
+ phoenix/experimental/evals/__init__.py,sha256=Wt_d0i5MLErpmeufxpovON6sb2EqkxMwzLs8N1sTfEo,1054
23
+ phoenix/experimental/evals/retrievals.py,sha256=B5M2OUXDNpRa6n-QSVXDiRmmJp8YODTff1XPMBTprp4,3822
24
+ phoenix/experimental/evals/utils.py,sha256=ivrYuX5Xotjh12BWOpYk9O7TgOt8uGDfdnRpYfrybmQ,1102
25
+ phoenix/experimental/evals/functions/__init__.py,sha256=v12PUUlxc6JhD87yuc4mMmSK5-dTZIAxnCP_pbf2e4k,160
26
+ phoenix/experimental/evals/functions/binary.py,sha256=2Roec42nIR5jgkg5SRIfckMKU6RFzq_tAuixkbF3NLk,6146
27
+ phoenix/experimental/evals/functions/common.py,sha256=kQfNAAfbvCC_RP6OIGJ4I-qBedExFJphPz78keR0cMY,1355
28
+ phoenix/experimental/evals/functions/generate.py,sha256=M8snjrDYl27TNpGGSBYSrThz0sWwo5SBP0H9p4-YqZU,1825
29
+ phoenix/experimental/evals/models/__init__.py,sha256=_ySum_DgU0xkCKjV1fajX4vN-PcVnCTPmgpQk3zWgjA,108
30
+ phoenix/experimental/evals/models/base.py,sha256=B_lgtcU3ssTBTfEaWQmmGlf57oA_wlbFMOxsK92Ms68,4802
31
+ phoenix/experimental/evals/models/openai.py,sha256=axnIKjEsPL90lDcNsDb6CiqgLvYycwUdfX4_lmCs8Cc,4825
32
+ phoenix/experimental/evals/templates/__init__.py,sha256=n7QNVJx-G6UzLVgHsnTH0Y1HmRByY2M8WY_5Cv8jYsI,763
33
+ phoenix/experimental/evals/templates/default_templates.py,sha256=1fc8t4sbe6FQwjztS8dWIi8beNHyctSkTq-s00l7k20,5939
34
+ phoenix/experimental/evals/templates/template.py,sha256=WVIxr0yCXxI9qXx_lccelNqjENv6Jfes-mX5elCwfps,4127
35
+ phoenix/experimental/evals/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ phoenix/experimental/evals/utils/downloads.py,sha256=ivrYuX5Xotjh12BWOpYk9O7TgOt8uGDfdnRpYfrybmQ,1102
37
+ phoenix/experimental/evals/utils/threads.py,sha256=ksI-egarPnlxit0qKKjtjZ2L82qGLxqxZ6s92O0eBA4,1005
38
+ phoenix/experimental/evals/utils/types.py,sha256=IhQOMNy0Ac_J2NNOdXRDKY_aCvoO-5AfsffsOi0KExI,226
22
39
  phoenix/metrics/README.md,sha256=5gekqTU-5gGdMwvcfNp2Wlu8p1ul9kGY_jq0XXQusoI,1964
23
40
  phoenix/metrics/__init__.py,sha256=sLp7td1GIt_0Z8dPUyP4L0-_4x9c871yAaGX30oMsvg,2433
24
- phoenix/metrics/binning.py,sha256=CXPPcAkRmmR__IG36a6UGs5RBtgXXPuWQbafPtuG1ww,12787
41
+ phoenix/metrics/binning.py,sha256=MWI0jle3qj2Rk2wFu0vN27TKvbyX2Q0ZpXiil8iNOko,12763
25
42
  phoenix/metrics/metrics.py,sha256=7SfkDmSnpzGATtBXlYHb42r-2BfV8ELMcMgjdw3c8yA,7907
26
43
  phoenix/metrics/mixins.py,sha256=O-U7q3VCTlULkAcdsLf_r68phvoTE_va4UFnez9i4h8,7439
27
- phoenix/metrics/timeseries.py,sha256=ixlRWeq_8cfpgzNLo2Wl4YPfbjLpOHrffhhzXahXwKM,6273
44
+ phoenix/metrics/timeseries.py,sha256=Cib3E0njJzi0vZpmyADvbakFQA98rIkfDaYAOmsmBz8,6277
28
45
  phoenix/metrics/wrappers.py,sha256=fCWIcIp30-YZmlzL4hpv2u07QRfCNn4WtI0mcQN0db8,8582
29
46
  phoenix/pointcloud/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
30
47
  phoenix/pointcloud/clustering.py,sha256=IzcG67kJ2hPP7pcqVmKPSL_6gKRonKdOT3bCtbTOqnk,820
31
48
  phoenix/pointcloud/pointcloud.py,sha256=ms-h1FLC0xXb3sk256zpSuZQDE2hdOAJzRNBklP0tDg,2161
32
49
  phoenix/pointcloud/projectors.py,sha256=zO_RrtDYSv2rqVOfIP2_9Cv11Dc8EmcZR94xhFcBYPU,1057
33
50
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- phoenix/server/app.py,sha256=-DxrlrCQzSz0aCgyfWyAmEQURn2nkdRRZa7gnSFZUGE,4173
35
- phoenix/server/main.py,sha256=pULSzrh9nTT3d3vRaSuLXaGTPEiFj7ALdN8W94X4Pgc,3388
36
- phoenix/server/thread_server.py,sha256=-URpEE4TZCtmUMRGOw6fAiChINGrYeDNbo_rL0xHUpM,1189
51
+ phoenix/server/app.py,sha256=0rpBL64rkYstKtVnJpIHV-4iiZC0KIlE4J-Ya8eueKw,4800
52
+ phoenix/server/main.py,sha256=5-E9WS-hR-CVZ7Bq6q4VOBiactrqat9EtjzdToWOEcs,4932
53
+ phoenix/server/span_handler.py,sha256=uXpDC7tAM8L-LvaPkN1Ds6Zgi-CN7QTxEuN4aeUto5Y,1272
54
+ phoenix/server/thread_server.py,sha256=6ECYMjSpenCN6eAjM6CR9B1Qcn3667F28HDfw_kBMmc,1398
37
55
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- phoenix/server/api/context.py,sha256=Ue-MeS6rI4dLSra1I7BQw1OsIDFSAlinwENPBi2bcOw,437
56
+ phoenix/server/api/context.py,sha256=wjCzq4QlszKG1iN-xgu5rRLYPqdvTFqX02aFYPipNoQ,512
39
57
  phoenix/server/api/helpers.py,sha256=_V1eVkchZmTkhOfRC4QqR1sUB2xtIxdsMJkDouZq_IE,251
40
58
  phoenix/server/api/interceptor.py,sha256=do_J4HjPPQ_C7bMmqe1YpTmt_hoxcwC2I8P3n5sZBo4,1302
41
- phoenix/server/api/schema.py,sha256=Q-pjSOx6RHVQKiOLm4HSOLgGcOUk5E3NKXsLQfFoDCk,6288
59
+ phoenix/server/api/schema.py,sha256=AGC2TDnaMluOigpQDHubpD4SaP8m_iTTGVW3R_OJh8I,9290
42
60
  phoenix/server/api/input_types/ClusterInput.py,sha256=EL4ftvZxQ8mVdruUPcdhMhByORmSmM8S-X6RPqU6GX0,179
43
61
  phoenix/server/api/input_types/Coordinates.py,sha256=meTwbIjwTfqx5DGD2DBlH9wQzdQVNM5a8x9dp1FfIgA,173
44
62
  phoenix/server/api/input_types/DataQualityMetricInput.py,sha256=LazvmQCCM5m9SDZTpyxQXO1rYF4cmsc3lsR2S9S65X4,1292
@@ -46,11 +64,13 @@ phoenix/server/api/input_types/DimensionFilter.py,sha256=vcXgglSnZcB5pGh-6oEtRmG
46
64
  phoenix/server/api/input_types/DimensionInput.py,sha256=Vfx5FmiMKey4-EHDQsQRPzSAMRJMN5oVMLDUl4NKAa8,164
47
65
  phoenix/server/api/input_types/Granularity.py,sha256=6SVfZ5yTZYq1PI6vdpjfkBUc4YilLSkF-k6okuSNbbQ,2301
48
66
  phoenix/server/api/input_types/PerformanceMetricInput.py,sha256=fElsLTSEYYgGFGMYTEGcYid39tXUKFdV_JkdHavMcbA,591
67
+ phoenix/server/api/input_types/SpanSort.py,sha256=YVymSc6iEVWj9E5jUgnugJDcz65XKFkYPxZMBY7zcLo,1760
49
68
  phoenix/server/api/input_types/TimeRange.py,sha256=yzx-gxj8mDeGLft1FzU_x1MVEgIG5Pt6-f8PUVDgipQ,522
50
69
  phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
70
  phoenix/server/api/types/Cluster.py,sha256=R08ZKrLl1KK8colxHU57N5XIOTMUwg5ZI50ofPoxxSM,5618
52
- phoenix/server/api/types/DataQualityMetric.py,sha256=zRKsNvHBu-NdcsunuLhqFpZhi6ks-HMqA1PJD27jTak,590
53
- phoenix/server/api/types/Dataset.py,sha256=IVAvD1_R_1oFkcN8xf9rBYx9IiXqcyikA0lDKSVDIlE,3256
71
+ phoenix/server/api/types/DataQualityMetric.py,sha256=6Ca8VeC578YoxDCynRTevMLt8s56PcDOGCGYt_ndtF0,627
72
+ phoenix/server/api/types/Dataset.py,sha256=sqfsJm10SSjXqTAfP8uoQV737hldU6Hj0lrH3KZFiSM,3102
73
+ phoenix/server/api/types/DatasetInfo.py,sha256=S8mkmt85GUJoNQOhFuNWboQcpdV7gdwVCcXcJbEKTgw,346
54
74
  phoenix/server/api/types/DatasetRole.py,sha256=UA8ecelVWfa9BVi--4A9fGhKFQ-jAaNHm7H5BpmZBPw,564
55
75
  phoenix/server/api/types/DatasetValues.py,sha256=7VbCOLlzOXpZN80-zYF2UGuafRcPsZF-8WQNc0YsKFc,1119
56
76
  phoenix/server/api/types/Dimension.py,sha256=IAS7Q7TkpbGqr1Vie4gJyi9SrYMK2L5mZwjYvpDQnQU,10198
@@ -62,21 +82,25 @@ phoenix/server/api/types/EmbeddingDimension.py,sha256=GHGpx4D9TSpcdaQ7FMmKMtCu2M
62
82
  phoenix/server/api/types/EmbeddingMetadata.py,sha256=fJvNNYCbkf3SJalArLy9rcBq9Uj1SNac60zjqe1PFnM,461
63
83
  phoenix/server/api/types/Event.py,sha256=5ohMNtXxE7Oy4xrDIl6ngFxT44chv0XnRUV1NNt_-9Y,3900
64
84
  phoenix/server/api/types/EventMetadata.py,sha256=-J0tYF9eZTHwCjwxQHY7Gckr2_MNW5OoWT1mydweZNM,635
65
- phoenix/server/api/types/ExportEventsMutation.py,sha256=PYqazKSx-S3uMLLXVlBmGSOxUhDb990dzZ4xNrRRiCw,3812
85
+ phoenix/server/api/types/ExportEventsMutation.py,sha256=Ez6xy1Mbnp832EHp32th3uAAIruRjFruC5fnyTHl9fc,3825
66
86
  phoenix/server/api/types/ExportedFile.py,sha256=e3GTn7B5LgsTbqiwjhMCQH7VsiqXitrBO4aCMS1lHsg,163
67
- phoenix/server/api/types/Model.py,sha256=FYsvsvhGFYYst36HDIuZ3sJFFnkBtfBhLWK5dhYXFjs,7923
87
+ phoenix/server/api/types/Functionality.py,sha256=tzV9xdhB8zqfsjWxP66NDC7EZsplYkYO7jRbLWJIeeg,382
88
+ phoenix/server/api/types/MimeType.py,sha256=eQzVj_KYb4Vm29u8T1tfogwWbEt_ZXjlicezCRcBK04,368
89
+ phoenix/server/api/types/Model.py,sha256=IFhO2nouLQoMPNhl8vnm7nEXXSpr14CL3ihw8RnVWNY,7826
68
90
  phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
69
91
  phoenix/server/api/types/PerformanceMetric.py,sha256=W92B7OghEOgzFvmY0LCqpgavHaQggTGshdgfD0yqHX4,350
70
92
  phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
71
93
  phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSFw-AO1rWw,285
72
94
  phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
73
95
  phoenix/server/api/types/Segments.py,sha256=eUoisp10Y1dCFCSphOjNA52g2Ja2chrvc_q1yMm-b2k,2903
74
- phoenix/server/api/types/TimeSeries.py,sha256=-PvhwIA03rJpqUlYS-v6G_O2Ls3gRKW3JmjAMkK5bYk,5184
96
+ phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
97
+ phoenix/server/api/types/Span.py,sha256=CLJ9Lq1KWzWgn8lNYgPgyXGf2QIC0czWhKpPTYlOyGI,6837
98
+ phoenix/server/api/types/TimeSeries.py,sha256=vywepSxkzTrNsjc4FAwpv12Pv1Wtm_9_9mgRZzDAadU,5229
75
99
  phoenix/server/api/types/UMAPPoints.py,sha256=8l9RJXi308qty4MdHb2pBbiU6ZuLbrRRxXNbPhXoxKI,1639
76
100
  phoenix/server/api/types/VectorDriftMetricEnum.py,sha256=etiJM5ZjQuD-oE7sY-FbdIKY050jk3IU49IMwmfJbEc,188
77
101
  phoenix/server/api/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
102
  phoenix/server/api/types/node.py,sha256=gwqe10DcAXpqHZMKmea8_tUzLVUEi2dBbZZjDBvPMHA,3820
79
- phoenix/server/api/types/pagination.py,sha256=1Gi7eNvH73AmMwXvrC_iP8pfliZHgb6L8Gmly0_FJSc,5278
103
+ phoenix/server/api/types/pagination.py,sha256=2jcUp-SExHmf9FKP30zVJi5KET7G_Asdra6N1iQGeKE,5336
80
104
  phoenix/server/static/apple-touch-icon-114x114.png,sha256=xtFVXAYQnJkpUApg2D1hltSTuyO4Is4sD4A0ZkikiVU,9486
81
105
  phoenix/server/static/apple-touch-icon-120x120.png,sha256=iqZVAk634BbjJMozA8aHYyw15JjhIlIrG41FA2DFFaE,9957
82
106
  phoenix/server/static/apple-touch-icon-144x144.png,sha256=VgARtkHKoU8zikb3_G83h_cb02kpPcoJqO78yRh1AfU,10047
@@ -88,21 +112,26 @@ phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZV
88
112
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
89
113
  phoenix/server/static/index.css,sha256=KKGpx4iwF91VGRm0YN-4cn8oC-oIqC6HecoPf0x3ZM8,1885
90
114
  phoenix/server/static/index.html,sha256=xPZZH-y4dWlbDutPEV1k0rhmWJtIV-Db9aYP-dEc7wM,703
91
- phoenix/server/static/index.js,sha256=SJnIFu7ufB_k38YBCI7D1btTSq4mmE7WkUf1iOBxiGw,2573278
115
+ phoenix/server/static/index.js,sha256=PsbeVGu5Am_bfMpnKX5tyweJUlxA-RW2Z-tc6YmP6Zg,3005318
92
116
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
93
117
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- phoenix/session/session.py,sha256=WwGH7qStR4kAhmrRsw35BwXvCQDnEWpGm0crjyrWTvs,9519
118
+ phoenix/session/session.py,sha256=9C_dQMfX12YlSv3ffSjZSEbF4MgyQHO_2jS87Xw_Ekc,12365
95
119
  phoenix/trace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
- phoenix/trace/fixtures.py,sha256=PY1nrtSXuMtl-c2_QbMDqCK73v4Q7Gw9UwpYNS8g4ZI,1768
97
- phoenix/trace/schemas.py,sha256=ZVKET7CQxXAPBJ752Ouwu7rgju6MZMgxdenEN0d53XI,3755
98
- phoenix/trace/semantic_conventions.py,sha256=4YbuZnDACifLWDzyj7-RC73LfbnPy2oNd3-iYx9w4Ss,855
99
- phoenix/trace/span_json_decoder.py,sha256=Hi3I6tQHWOmXps5pJl_8w4fTjC3350Flv811RBig4vQ,1632
100
- phoenix/trace/span_json_encoder.py,sha256=2bnfy0T_fUgCwtYIE3XavsC7K8t17FicbvPrb_GWq0c,2026
101
- phoenix/trace/trace_dataset.py,sha256=0oIxW8lBYdhlfp8WpdaHkfP6QJBjYqXEHRvN8X4GvmM,1072
102
- phoenix/trace/tracer.py,sha256=aOtgBhx1_qppZhm2uVou5Jrxj97qZu233-WkkFa7Xio,2765
120
+ phoenix/trace/exporter.py,sha256=Q1Gxw6vDW1quuv2qeHWvzCsfxoO9s-iFsWlZYXOON8s,2007
121
+ phoenix/trace/filter.py,sha256=-UqIr9DT9IQLNGBWCvNe8nAlK8KGHgoj8wUWEWmOzZA,6313
122
+ phoenix/trace/fixtures.py,sha256=f4vlcqFhDqn2ThOjUDlyEwHXvzvq-iJR6eai9a0JT18,2291
123
+ phoenix/trace/schemas.py,sha256=XDtwisCiQvcAZbi81HBaWxaJXXQ97r6b2y7H4nvpktc,5183
124
+ phoenix/trace/semantic_conventions.py,sha256=0raCkxfbkg-gDP41ylA4PSX3EclgxsBQkhf43aHlOzE,4591
125
+ phoenix/trace/span_json_decoder.py,sha256=W04tjYvncgJH_G1uzYHGRldMdiyis9tk1OQs0NM_Boc,3522
126
+ phoenix/trace/span_json_encoder.py,sha256=C5y7rkyOcV08oJC5t8TZqVxsKCZMJKad7bBQzAgLoDs,1763
127
+ phoenix/trace/trace_dataset.py,sha256=eX0loyddIhXJ4pvUb1PSXiod6aBt8_d9OgzXmYm2aT0,4593
128
+ phoenix/trace/tracer.py,sha256=R2bY3gAP2VaimCtKSrPLcvgsYZ9p76j1LzKukMTJijk,3524
103
129
  phoenix/trace/utils.py,sha256=N4HVyPAtxWsmzzmsfJFcpsqgGPgP1VZhJHthp0kj4Gc,453
104
- arize_phoenix-0.0.32.dist-info/METADATA,sha256=YahHU30EkHjBYQOM0Er83R2aTrTM6Ci3NgVf82xzW9Q,10974
105
- arize_phoenix-0.0.32.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
106
- arize_phoenix-0.0.32.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
107
- arize_phoenix-0.0.32.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
108
- arize_phoenix-0.0.32.dist-info/RECORD,,
130
+ phoenix/trace/v1/__init__.py,sha256=FYL2u6f5prFtbQohQf_x-yR0hVflm7OAunO1fvo2KXg,17032
131
+ phoenix/trace/v1/trace_pb2.py,sha256=DPDwoF4HOa3T2R-Qi7c2uXkbypOXcrOkCysMB-yrKXw,5580
132
+ phoenix/trace/v1/trace_pb2.pyi,sha256=2JpgiYz3s8HrxnVIi5Brk7c3RJB4LqDGzwRYonhliRA,16258
133
+ arize_phoenix-0.0.33.dist-info/METADATA,sha256=afyi_V-bdeyVy4nBHDpWl-Slr6mCeCZkoJYzRHK9ACk,11266
134
+ arize_phoenix-0.0.33.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
135
+ arize_phoenix-0.0.33.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
136
+ arize_phoenix-0.0.33.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
137
+ arize_phoenix-0.0.33.dist-info/RECORD,,
phoenix/__init__.py CHANGED
@@ -3,8 +3,9 @@ from .datasets.fixtures import ExampleDatasets, load_example
3
3
  from .datasets.schema import EmbeddingColumnNames, RetrievalEmbeddingColumnNames, Schema
4
4
  from .session.session import Session, active_session, close_app, launch_app
5
5
  from .trace.fixtures import load_example_traces
6
+ from .trace.trace_dataset import TraceDataset
6
7
 
7
- __version__ = "0.0.32"
8
+ __version__ = "0.0.33"
8
9
 
9
10
  # module level doc-string
10
11
  __doc__ = """
@@ -34,4 +35,5 @@ __all__ = [
34
35
  "launch_app",
35
36
  "Session",
36
37
  "load_example_traces",
38
+ "TraceDataset",
37
39
  ]
phoenix/config.py CHANGED
@@ -1,6 +1,7 @@
1
+ import os
1
2
  import tempfile
2
3
  from pathlib import Path
3
- from typing import List
4
+ from typing import List, Optional
4
5
 
5
6
 
6
7
  def _get_temp_path() -> Path:
@@ -18,6 +19,13 @@ def get_pids_path() -> Path:
18
19
  return path
19
20
 
20
21
 
22
+ def get_running_pid() -> Optional[int]:
23
+ for file in get_pids_path().iterdir():
24
+ if file.name.isnumeric():
25
+ return int(file.name)
26
+ return None
27
+
28
+
21
29
  for path in (
22
30
  ROOT_DIR := Path.home().resolve() / ".phoenix",
23
31
  EXPORT_DIR := ROOT_DIR / "exports",
@@ -28,6 +36,8 @@ for path in (
28
36
  PHOENIX_DIR = Path(__file__).resolve().parent
29
37
  # Server config
30
38
  SERVER_DIR = PHOENIX_DIR / "server"
39
+ # The host the server will run on after launch_app is called
40
+ HOST = "127.0.0.1"
31
41
  # The port the server will run on after launch_app is called
32
42
  PORT = 6060
33
43
  # The prefix of datasets that are auto-assigned a name
@@ -49,3 +59,15 @@ def get_exported_files(directory: Path) -> List[Path]:
49
59
  List of paths of the exported files.
50
60
  """
51
61
  return list(directory.glob("*.parquet"))
62
+
63
+
64
+ def get_env_port() -> int:
65
+ return (
66
+ int(port)
67
+ if isinstance(port := os.getenv("PHOENIX_PORT"), str) and port.isnumeric()
68
+ else PORT
69
+ )
70
+
71
+
72
+ def get_env_host() -> str:
73
+ return os.getenv("PHOENIX_HOST") or HOST
@@ -49,6 +49,7 @@ from typing_extensions import TypeAlias, TypeGuard
49
49
  from wrapt import ObjectProxy
50
50
 
51
51
  from phoenix.config import GENERATED_DATASET_NAME_PREFIX
52
+ from phoenix.datetime_utils import floor_to_minute
52
53
 
53
54
 
54
55
  class DimensionRole(IntEnum):
@@ -328,10 +329,7 @@ class Column:
328
329
  except KeyError:
329
330
  # It's important to glue the index to the default series,
330
331
  # so it would look like the series came from the dataframe.
331
- return self._default(len(data)).set_axis(
332
- data.index,
333
- copy=False,
334
- )
332
+ return self._default(len(data)).set_axis(data.index)
335
333
  if isinstance(data, pd.Series):
336
334
  try:
337
335
  return data.at[self.name]
@@ -657,8 +655,8 @@ class Events(ModelData):
657
655
  # open and one minute is the smallest interval allowed.
658
656
  stop_time = end_time + timedelta(minutes=1)
659
657
  # Round down to the nearest minute.
660
- start = _floor_to_minute(start_time)
661
- stop = _floor_to_minute(stop_time)
658
+ start = floor_to_minute(start_time)
659
+ stop = floor_to_minute(stop_time)
662
660
  return TimeRange(start, stop)
663
661
 
664
662
  def __iter__(self) -> Iterator[Event]:
@@ -721,6 +719,10 @@ class Dataset(Events):
721
719
  def role(self) -> DatasetRole:
722
720
  return self._self_role
723
721
 
722
+ @property
723
+ def is_empty(self) -> bool:
724
+ return len(self) == 0
725
+
724
726
  @cached_property
725
727
  def primary_key(self) -> pd.Index:
726
728
  return pd.Index(self[PREDICTION_ID])
@@ -736,10 +738,7 @@ class Dataset(Events):
736
738
  def __getitem__(self, key: Any) -> Any:
737
739
  if isinstance(key, list):
738
740
  return Events(
739
- self.iloc[key].set_axis(
740
- key,
741
- copy=False,
742
- ),
741
+ self.iloc[key].set_axis(key),
743
742
  role=self._self_role,
744
743
  _model=self._self_model,
745
744
  )
@@ -913,6 +912,11 @@ class Model:
913
912
  df, name=dataset.name, role=dataset_role
914
913
  )
915
914
 
915
+ @cached_property
916
+ def is_empty(self) -> bool:
917
+ """Returns True if the model has no data."""
918
+ return not any(map(len, self._datasets.values()))
919
+
916
920
  def export_rows_as_parquet_file(
917
921
  self,
918
922
  row_numbers: Mapping[DatasetRole, Iterable[int]],
@@ -1390,7 +1394,6 @@ def _coerce_str_column_names(
1390
1394
  df.set_axis(
1391
1395
  df.columns.astype(str),
1392
1396
  axis=1,
1393
- copy=False,
1394
1397
  )
1395
1398
  for df in dataframes
1396
1399
  )
@@ -1432,32 +1435,6 @@ def _title_case_no_underscore(name: str) -> str:
1432
1435
  return _id_pat.sub("ID", name.replace("_", " ").title())
1433
1436
 
1434
1437
 
1435
- MINUTE_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:00%z"
1436
-
1437
-
1438
- def _floor_to_minute(dt: datetime) -> datetime:
1439
- """Floor datetime to the minute by taking a round-trip through string
1440
- format because there isn't always an available function to strip the
1441
- nanoseconds if present."""
1442
- try:
1443
- dt_as_string = dt.astimezone(
1444
- timezone.utc,
1445
- ).strftime(
1446
- MINUTE_DATETIME_FORMAT,
1447
- )
1448
- except ValueError:
1449
- # NOTE: as of Python 3.8.16, pandas 1.5.3:
1450
- # >>> isinstance(pd.NaT, datetime.datetime)
1451
- # True
1452
- return cast(datetime, pd.NaT)
1453
- return datetime.strptime(
1454
- dt_as_string,
1455
- MINUTE_DATETIME_FORMAT,
1456
- ).astimezone(
1457
- timezone.utc,
1458
- )
1459
-
1460
-
1461
1438
  def _jsonify(obj: Any) -> Any:
1462
1439
  if getattr(obj, "__dataclass_fields__", None):
1463
1440
  return {
@@ -43,7 +43,6 @@ def create_model_from_datasets(*datasets: Optional[Dataset]) -> Model:
43
43
  df = df.set_axis(
44
44
  map(str, df.columns),
45
45
  axis=1,
46
- copy=False,
47
46
  )
48
47
  named_dataframes.append((dataset.name, df))
49
48
  dataset_schema = dataset.schema if dataset.schema is not None else DatasetSchema()