arize-phoenix 3.25.0__py3-none-any.whl → 4.0.1__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 (113) hide show
  1. {arize_phoenix-3.25.0.dist-info → arize_phoenix-4.0.1.dist-info}/METADATA +26 -4
  2. {arize_phoenix-3.25.0.dist-info → arize_phoenix-4.0.1.dist-info}/RECORD +80 -75
  3. phoenix/__init__.py +9 -5
  4. phoenix/config.py +109 -53
  5. phoenix/datetime_utils.py +18 -1
  6. phoenix/db/README.md +25 -0
  7. phoenix/db/__init__.py +4 -0
  8. phoenix/db/alembic.ini +119 -0
  9. phoenix/db/bulk_inserter.py +206 -0
  10. phoenix/db/engines.py +152 -0
  11. phoenix/db/helpers.py +47 -0
  12. phoenix/db/insertion/evaluation.py +209 -0
  13. phoenix/db/insertion/helpers.py +51 -0
  14. phoenix/db/insertion/span.py +142 -0
  15. phoenix/db/migrate.py +71 -0
  16. phoenix/db/migrations/env.py +121 -0
  17. phoenix/db/migrations/script.py.mako +26 -0
  18. phoenix/db/migrations/versions/cf03bd6bae1d_init.py +280 -0
  19. phoenix/db/models.py +371 -0
  20. phoenix/exceptions.py +5 -1
  21. phoenix/server/api/context.py +40 -3
  22. phoenix/server/api/dataloaders/__init__.py +97 -0
  23. phoenix/server/api/dataloaders/cache/__init__.py +3 -0
  24. phoenix/server/api/dataloaders/cache/two_tier_cache.py +67 -0
  25. phoenix/server/api/dataloaders/document_evaluation_summaries.py +152 -0
  26. phoenix/server/api/dataloaders/document_evaluations.py +37 -0
  27. phoenix/server/api/dataloaders/document_retrieval_metrics.py +98 -0
  28. phoenix/server/api/dataloaders/evaluation_summaries.py +151 -0
  29. phoenix/server/api/dataloaders/latency_ms_quantile.py +198 -0
  30. phoenix/server/api/dataloaders/min_start_or_max_end_times.py +93 -0
  31. phoenix/server/api/dataloaders/record_counts.py +125 -0
  32. phoenix/server/api/dataloaders/span_descendants.py +64 -0
  33. phoenix/server/api/dataloaders/span_evaluations.py +37 -0
  34. phoenix/server/api/dataloaders/token_counts.py +138 -0
  35. phoenix/server/api/dataloaders/trace_evaluations.py +37 -0
  36. phoenix/server/api/input_types/SpanSort.py +138 -68
  37. phoenix/server/api/routers/v1/__init__.py +11 -0
  38. phoenix/server/api/routers/v1/evaluations.py +275 -0
  39. phoenix/server/api/routers/v1/spans.py +126 -0
  40. phoenix/server/api/routers/v1/traces.py +82 -0
  41. phoenix/server/api/schema.py +112 -48
  42. phoenix/server/api/types/DocumentEvaluationSummary.py +1 -1
  43. phoenix/server/api/types/Evaluation.py +29 -12
  44. phoenix/server/api/types/EvaluationSummary.py +29 -44
  45. phoenix/server/api/types/MimeType.py +2 -2
  46. phoenix/server/api/types/Model.py +9 -9
  47. phoenix/server/api/types/Project.py +240 -171
  48. phoenix/server/api/types/Span.py +87 -131
  49. phoenix/server/api/types/Trace.py +29 -20
  50. phoenix/server/api/types/pagination.py +151 -10
  51. phoenix/server/app.py +263 -35
  52. phoenix/server/grpc_server.py +93 -0
  53. phoenix/server/main.py +75 -60
  54. phoenix/server/openapi/docs.py +218 -0
  55. phoenix/server/prometheus.py +23 -7
  56. phoenix/server/static/index.js +662 -643
  57. phoenix/server/telemetry.py +68 -0
  58. phoenix/services.py +4 -0
  59. phoenix/session/client.py +34 -30
  60. phoenix/session/data_extractor.py +8 -3
  61. phoenix/session/session.py +176 -155
  62. phoenix/settings.py +13 -0
  63. phoenix/trace/attributes.py +349 -0
  64. phoenix/trace/dsl/README.md +116 -0
  65. phoenix/trace/dsl/filter.py +660 -192
  66. phoenix/trace/dsl/helpers.py +24 -5
  67. phoenix/trace/dsl/query.py +562 -185
  68. phoenix/trace/fixtures.py +69 -7
  69. phoenix/trace/otel.py +44 -200
  70. phoenix/trace/schemas.py +14 -8
  71. phoenix/trace/span_evaluations.py +5 -2
  72. phoenix/utilities/__init__.py +0 -26
  73. phoenix/utilities/span_store.py +0 -23
  74. phoenix/version.py +1 -1
  75. phoenix/core/project.py +0 -773
  76. phoenix/core/traces.py +0 -96
  77. phoenix/datasets/dataset.py +0 -214
  78. phoenix/datasets/fixtures.py +0 -24
  79. phoenix/datasets/schema.py +0 -31
  80. phoenix/experimental/evals/__init__.py +0 -73
  81. phoenix/experimental/evals/evaluators.py +0 -413
  82. phoenix/experimental/evals/functions/__init__.py +0 -4
  83. phoenix/experimental/evals/functions/classify.py +0 -453
  84. phoenix/experimental/evals/functions/executor.py +0 -353
  85. phoenix/experimental/evals/functions/generate.py +0 -138
  86. phoenix/experimental/evals/functions/processing.py +0 -76
  87. phoenix/experimental/evals/models/__init__.py +0 -14
  88. phoenix/experimental/evals/models/anthropic.py +0 -175
  89. phoenix/experimental/evals/models/base.py +0 -170
  90. phoenix/experimental/evals/models/bedrock.py +0 -221
  91. phoenix/experimental/evals/models/litellm.py +0 -134
  92. phoenix/experimental/evals/models/openai.py +0 -453
  93. phoenix/experimental/evals/models/rate_limiters.py +0 -246
  94. phoenix/experimental/evals/models/vertex.py +0 -173
  95. phoenix/experimental/evals/models/vertexai.py +0 -186
  96. phoenix/experimental/evals/retrievals.py +0 -96
  97. phoenix/experimental/evals/templates/__init__.py +0 -50
  98. phoenix/experimental/evals/templates/default_templates.py +0 -472
  99. phoenix/experimental/evals/templates/template.py +0 -195
  100. phoenix/experimental/evals/utils/__init__.py +0 -172
  101. phoenix/experimental/evals/utils/threads.py +0 -27
  102. phoenix/server/api/routers/evaluation_handler.py +0 -110
  103. phoenix/server/api/routers/span_handler.py +0 -70
  104. phoenix/server/api/routers/trace_handler.py +0 -60
  105. phoenix/storage/span_store/__init__.py +0 -23
  106. phoenix/storage/span_store/text_file.py +0 -85
  107. phoenix/trace/dsl/missing.py +0 -60
  108. {arize_phoenix-3.25.0.dist-info → arize_phoenix-4.0.1.dist-info}/WHEEL +0 -0
  109. {arize_phoenix-3.25.0.dist-info → arize_phoenix-4.0.1.dist-info}/licenses/IP_NOTICE +0 -0
  110. {arize_phoenix-3.25.0.dist-info → arize_phoenix-4.0.1.dist-info}/licenses/LICENSE +0 -0
  111. /phoenix/{datasets → db/insertion}/__init__.py +0 -0
  112. /phoenix/{experimental → db/migrations}/__init__.py +0 -0
  113. /phoenix/{storage → server/openapi}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arize-phoenix
3
- Version: 3.25.0
3
+ Version: 4.0.1
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -17,6 +17,11 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Requires-Python: <3.13,>=3.8
20
+ Requires-Dist: aioitertools
21
+ Requires-Dist: aiosqlite
22
+ Requires-Dist: alembic<2,>=1.3.0
23
+ Requires-Dist: cachetools
24
+ Requires-Dist: grpcio
20
25
  Requires-Dist: hdbscan>=0.8.33
21
26
  Requires-Dist: jinja2
22
27
  Requires-Dist: numpy
@@ -28,6 +33,7 @@ Requires-Dist: openinference-semantic-conventions>=0.1.5
28
33
  Requires-Dist: opentelemetry-exporter-otlp
29
34
  Requires-Dist: opentelemetry-proto>=1.12.0
30
35
  Requires-Dist: opentelemetry-sdk
36
+ Requires-Dist: opentelemetry-semantic-conventions
31
37
  Requires-Dist: pandas
32
38
  Requires-Dist: protobuf<6.0,>=3.20
33
39
  Requires-Dist: psutil
@@ -35,9 +41,10 @@ Requires-Dist: pyarrow
35
41
  Requires-Dist: requests
36
42
  Requires-Dist: scikit-learn
37
43
  Requires-Dist: scipy
38
- Requires-Dist: sortedcontainers
44
+ Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
45
+ Requires-Dist: sqlean-py>=3.45.1
39
46
  Requires-Dist: starlette
40
- Requires-Dist: strawberry-graphql==0.208.2
47
+ Requires-Dist: strawberry-graphql==0.227.2
41
48
  Requires-Dist: tqdm
42
49
  Requires-Dist: typing-extensions>=4.5; python_version < '3.12'
43
50
  Requires-Dist: typing-extensions>=4.6; python_version >= '3.12'
@@ -45,10 +52,21 @@ Requires-Dist: umap-learn
45
52
  Requires-Dist: uvicorn
46
53
  Requires-Dist: wrapt
47
54
  Provides-Extra: container
55
+ Requires-Dist: opentelemetry-exporter-otlp; extra == 'container'
56
+ Requires-Dist: opentelemetry-instrumentation-grpc; extra == 'container'
57
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy; extra == 'container'
58
+ Requires-Dist: opentelemetry-instrumentation-starlette; extra == 'container'
59
+ Requires-Dist: opentelemetry-proto>=1.12.0; extra == 'container'
60
+ Requires-Dist: opentelemetry-sdk; extra == 'container'
61
+ Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
48
62
  Requires-Dist: prometheus-client; extra == 'container'
63
+ Requires-Dist: py-grpc-prometheus; extra == 'container'
64
+ Requires-Dist: strawberry-graphql[opentelemetry]==0.227.2; extra == 'container'
65
+ Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'container'
49
66
  Provides-Extra: dev
50
67
  Requires-Dist: anthropic; extra == 'dev'
51
68
  Requires-Dist: arize[autoembeddings,llm-evaluation]; extra == 'dev'
69
+ Requires-Dist: asyncpg; extra == 'dev'
52
70
  Requires-Dist: gcsfs; extra == 'dev'
53
71
  Requires-Dist: google-cloud-aiplatform>=1.3; extra == 'dev'
54
72
  Requires-Dist: hatch; extra == 'dev'
@@ -60,12 +78,14 @@ Requires-Dist: nbqa; extra == 'dev'
60
78
  Requires-Dist: pandas-stubs<=2.0.2.230605; extra == 'dev'
61
79
  Requires-Dist: pre-commit; extra == 'dev'
62
80
  Requires-Dist: prometheus-client; extra == 'dev'
81
+ Requires-Dist: psycopg[binary]; extra == 'dev'
63
82
  Requires-Dist: pytest-asyncio; extra == 'dev'
64
83
  Requires-Dist: pytest-cov; extra == 'dev'
65
84
  Requires-Dist: pytest-lazy-fixture; extra == 'dev'
85
+ Requires-Dist: pytest-postgresql; extra == 'dev'
66
86
  Requires-Dist: pytest==7.4.4; extra == 'dev'
67
87
  Requires-Dist: ruff==0.3.0; extra == 'dev'
68
- Requires-Dist: strawberry-graphql[debug-server]==0.208.2; extra == 'dev'
88
+ Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.227.2; extra == 'dev'
69
89
  Provides-Extra: evals
70
90
  Requires-Dist: arize-phoenix-evals>=0.3.0; extra == 'evals'
71
91
  Provides-Extra: experimental
@@ -74,6 +94,8 @@ Provides-Extra: llama-index
74
94
  Requires-Dist: llama-index-callbacks-arize-phoenix>=0.1.2; extra == 'llama-index'
75
95
  Requires-Dist: llama-index==0.10.3; extra == 'llama-index'
76
96
  Requires-Dist: openinference-instrumentation-llama-index>=1.2.0; extra == 'llama-index'
97
+ Provides-Extra: pg
98
+ Requires-Dist: asyncpg; extra == 'pg'
77
99
  Description-Content-Type: text/markdown
78
100
 
79
101
  <p align="center">
@@ -1,44 +1,32 @@
1
- phoenix/__init__.py,sha256=xFnfyTc75889OPnKh25CghdBH5_5UpLDet2BAyJulLc,2453
2
- phoenix/config.py,sha256=iGZeRwpvQG-JOzlfv642f98rCAHQ1SpGiEvgJsxg-1g,4682
3
- phoenix/datetime_utils.py,sha256=D955QLrkgrrSdUM6NyqbCeAu2SMsjhR5rHVQEsVUdng,2773
4
- phoenix/exceptions.py,sha256=X5k9ipUDfwSCwZB-H5zFJLas86Gf9tAx0W4l5TZxp5k,108
1
+ phoenix/__init__.py,sha256=NyJ6xQhGeEdbHVA72gbQlGo3WElzQxmpQBSME-CZNZI,2389
2
+ phoenix/config.py,sha256=DhA70BHG0dKTNGKtONdrLxBpMduqQms4QjPNkANa3VE,6879
3
+ phoenix/datetime_utils.py,sha256=oqkxJ5I7ggrCKYTEi8q-akC501calylD26NVOPQQcHw,3305
4
+ phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
5
5
  phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
6
- phoenix/services.py,sha256=f6AeyKTuOpy9RCcTCjVH3gx5nYZhbTMFOuv1WSUOB5o,4992
7
- phoenix/version.py,sha256=fa1uJvJFE0w6w_83FQL8pHM7OJEb3zIyNRQRKOVTXes,23
6
+ phoenix/services.py,sha256=haZUWKuxfI5lm0o61HgW_4B6RTBg9CUbXC8y92ZMsw4,5121
7
+ phoenix/settings.py,sha256=cO-qgis_S27nHirTobYI9hHPfZH18R--WMmxNdsVUwc,273
8
+ phoenix/version.py,sha256=v4mcX8QEz7plObRyvTdDblE04TUjya-nJkDSAikxv9Y,22
8
9
  phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
10
  phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
10
11
  phoenix/core/model.py,sha256=SBO8BZg_CeQuH5LrSgzlQfqMModzirkQePdhnbLw7dE,4756
11
12
  phoenix/core/model_schema.py,sha256=lQaTvKS34yurHOJ53YD020uURLfgG3dqKC1NLQftOjA,50222
12
13
  phoenix/core/model_schema_adapter.py,sha256=aFvNtpI01sdaLoKvEvcsx51vP5_6anP0_g9idcJNaCI,8287
13
- phoenix/core/project.py,sha256=_amEd22IW-tErTt_dY-TCs94vv5Sg2oVPsIzbAIe37s,31346
14
- phoenix/core/traces.py,sha256=qAlsDmQJhS9Pkl1IFm-jne-8xS7MEqtw5Q1Ohv9TT2w,3432
15
- phoenix/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- phoenix/datasets/dataset.py,sha256=zEmSM9qOKUczn5qZjUY7JidCPudl-Eo7InJ115Igi24,9590
17
- phoenix/datasets/fixtures.py,sha256=aDcmKFSNKMg-KLegZlec8y7rma3nVlwrTwMnEMdt0d4,652
18
- phoenix/datasets/schema.py,sha256=GfqolST11gDdkH2mBZS0KpTAdgMRbArJyEGXavjg46g,864
19
- phoenix/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- phoenix/experimental/evals/__init__.py,sha256=RMoMyl5E_LiWuZtZhCe2V7nJO-SNXvB9sPmkjAXA5Bg,2112
21
- phoenix/experimental/evals/evaluators.py,sha256=r7fXrS-l4gn58SUhLAZSfY3P8lxysouSVJwHddrZJ_Q,15956
22
- phoenix/experimental/evals/retrievals.py,sha256=o3fqrsYbYZjyGj_jWkN_9VQVyXjLkDKDw5Ws7l8bwdI,3828
23
- phoenix/experimental/evals/functions/__init__.py,sha256=NNd0-_cmIopdV7vm3rspjfgM726qoQJ4DPq_vqbnaxQ,180
24
- phoenix/experimental/evals/functions/classify.py,sha256=ucaH8_-fLB-0EsPQfT_Vv-YDNtoM-OoHNqrwnKz9oGw,19108
25
- phoenix/experimental/evals/functions/executor.py,sha256=vPvvR7XTqPqWBqnA_ht2oOESKVJHcqIjOtSA09LLFrE,13398
26
- phoenix/experimental/evals/functions/generate.py,sha256=8LnnPAjBM9yxitdkaGZ67OabuDTOWBF3fvinJ_uCFRg,5584
27
- phoenix/experimental/evals/functions/processing.py,sha256=xyFHYVmYq2lphdMvUaW_dRFi15NuqtAdAVg1G1dQb38,2960
28
- phoenix/experimental/evals/models/__init__.py,sha256=j1N7DhiOPbcaemtVBONcQ0miNnGQwEXz4u3P3Vwe6-4,320
29
- phoenix/experimental/evals/models/anthropic.py,sha256=BZmLvepkSMj_opCWsZoL34a3yAwRdl7qbJB86DFR84E,6688
30
- phoenix/experimental/evals/models/base.py,sha256=qOX36f4H1PA7YW3fckUsoh4apSz3bzURVtqlXw6Xcqo,6274
31
- phoenix/experimental/evals/models/bedrock.py,sha256=nVOXRZr-iDwHEINozpO2bqZR2KEeDHNyj6jgQPONQYs,8565
32
- phoenix/experimental/evals/models/litellm.py,sha256=YHZvwBHo4Y0_b589gjtwPN8N7sYgyIm9Hy5nnBiUtzA,4788
33
- phoenix/experimental/evals/models/openai.py,sha256=UOM0GZLZ_kVWHvP1Z3mttt6DPnn876GmvK5GYtFTztQ,18164
34
- phoenix/experimental/evals/models/rate_limiters.py,sha256=L8xf7mc2d6axmWNjg2wwWIHWeTZ-tiI8m1GoBNFfJd0,10156
35
- phoenix/experimental/evals/models/vertex.py,sha256=3kj0tdwyCcgs39x1XnMgFoSbZwXvvBAPL7AwHYe-qIE,6236
36
- phoenix/experimental/evals/models/vertexai.py,sha256=nFN5isv1GPNsvUA4OxSnQd1hTMi-3BcxfDz1y7QcoA0,6189
37
- phoenix/experimental/evals/templates/__init__.py,sha256=GSJSoWJ4jwyoUANniidmWMUtXQhNQYbTJbfFqCvuYuo,1470
38
- phoenix/experimental/evals/templates/default_templates.py,sha256=dVKmoLwqgAyGcRuezz9WKnXSHhw7-qk1R8j6wSmqh0s,20722
39
- phoenix/experimental/evals/templates/template.py,sha256=ImFSaTPo9oalPNwq7cNdOCndrvuwLuIyIFKsgDVcoJE,6715
40
- phoenix/experimental/evals/utils/__init__.py,sha256=FE1tbb022t3pwn0CrprR7QXcIsgpsdsotV7-iB3khsI,5601
41
- phoenix/experimental/evals/utils/threads.py,sha256=ksI-egarPnlxit0qKKjtjZ2L82qGLxqxZ6s92O0eBA4,1005
14
+ phoenix/db/README.md,sha256=yM2HQcKBkhnAfbRMmMN5CyTIJs8Vj1Iiw4AENz2Ldz8,592
15
+ phoenix/db/__init__.py,sha256=pDjEFXukHmJBM-1D8RjmXkvLsz85YWNxMQczt81ec3A,118
16
+ phoenix/db/alembic.ini,sha256=p8DjVqGUs_tTx8oU56JP7qj-rMUebNFizItUSv_hPhs,3763
17
+ phoenix/db/bulk_inserter.py,sha256=ad8-a_V0zSQjk2z7ZGnp8YO0B2cm6pLpHXI08IPPYEE,9655
18
+ phoenix/db/engines.py,sha256=vLWaZlToMtDI7rJDxSidYkfOoojamxaZxaz8ND3zTus,4770
19
+ phoenix/db/helpers.py,sha256=L2_jP1iIWpUREhKLYYb4_vf_6v_BiU1E73Z2PczGm6s,1589
20
+ phoenix/db/migrate.py,sha256=Rd7rnmYLFlSGO3R3rSzXCCvDkYkhxguqDbQNhI6rm5o,2251
21
+ phoenix/db/models.py,sha256=Atd61_8I2uiP6tUPW3As4X3UKU2edbS-W4LGGzkJ9KM,12125
22
+ phoenix/db/insertion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ phoenix/db/insertion/evaluation.py,sha256=nvKXGWv0XD23G3ISw2u9_SqbwtGaB0Vd63wL59nPlCA,7189
24
+ phoenix/db/insertion/helpers.py,sha256=2oBbzwx_Q0JJ9WlvbGl_a8hWySHyGhzbMNv-SHtcM-4,2022
25
+ phoenix/db/insertion/span.py,sha256=DNBjSrx5g2W5KuTB1dkHwtkb0SFnMIxN1jB-BAdGKFY,5634
26
+ phoenix/db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ phoenix/db/migrations/env.py,sha256=QbzB5zrRs6XQQmrYeUpuzeilcMlM-MsbaAgHHYcIHTI,3626
28
+ phoenix/db/migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
29
+ phoenix/db/migrations/versions/cf03bd6bae1d_init.py,sha256=I0st_gylN4giqNNw9AXUf37Zs6dF692ReW7cTfufgdU,8662
42
30
  phoenix/inferences/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
31
  phoenix/inferences/errors.py,sha256=cGp9vxnw4SewFoWBV3ZGMkhE0Kh73lPIv3Ppz_H_RoA,8261
44
32
  phoenix/inferences/fixtures.py,sha256=bEfvBixW56jje2Mrt4TH88V3N6K84XJX1HNFBZTh8PQ,20711
@@ -59,15 +47,31 @@ phoenix/pointcloud/pointcloud.py,sha256=4zAIkKs2xOUbchpj4XDAV-iPMXrfAJ15TG6rlIYG
59
47
  phoenix/pointcloud/projectors.py,sha256=zO_RrtDYSv2rqVOfIP2_9Cv11Dc8EmcZR94xhFcBYPU,1057
60
48
  phoenix/pointcloud/umap_parameters.py,sha256=lJsEOrbSuSiqI7g4Yt6xj7kgYxEqoep4ZHWLr6VWBqw,1760
61
49
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- phoenix/server/app.py,sha256=eUw5tygCYmsQ5TAJTM_ZwRKkxDD3-bMJSH-H9YpF0eA,7246
63
- phoenix/server/main.py,sha256=JoVQo4i2lcEQrXs59f5RiSI7csn-mQCs9JaqI7YTWVw,9798
64
- phoenix/server/prometheus.py,sha256=YQXwXZt3kxXN5JqGKDMH_jI9r4IL23xn6c8Bdrvg15A,2368
50
+ phoenix/server/app.py,sha256=29S6klPWr27nfifyr63MpZ3mbq8pu-jwiqT_fTNqbS4,16247
51
+ phoenix/server/grpc_server.py,sha256=faktLxEtWGlCB1bPR4QwwTsRoQloahKMx0hAWqRGI5s,3379
52
+ phoenix/server/main.py,sha256=DXvoSIgnmh6CF6-eYKGf1cSOoZaoABiQfOiRSXK-KP0,10638
53
+ phoenix/server/prometheus.py,sha256=j9DHB2fERuq_ZKmwVaqR-9wx5WcPPuU1Cm5Bhg5241Y,2996
54
+ phoenix/server/telemetry.py,sha256=T_2OKrxNViAeaANlNspEekg_Y5uZIFWvKAnpz8Aoqvk,2762
65
55
  phoenix/server/thread_server.py,sha256=dP6cm6Cf08jNhDA1TRlVZpziu1YgtPDmaeIJMm725eI,2154
66
56
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- phoenix/server/api/context.py,sha256=wjCzq4QlszKG1iN-xgu5rRLYPqdvTFqX02aFYPipNoQ,512
57
+ phoenix/server/api/context.py,sha256=ePwyJSxQh-IEO23KSy_fDwZnEA0NEG-XnFFScfrtn2c,1913
68
58
  phoenix/server/api/helpers.py,sha256=_V1eVkchZmTkhOfRC4QqR1sUB2xtIxdsMJkDouZq_IE,251
69
59
  phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
70
- phoenix/server/api/schema.py,sha256=7MhwpIFY4KOJezVLbzLi2ALUv_1KkLKsB09cefD106Q,8758
60
+ phoenix/server/api/schema.py,sha256=qB9zSXHdjI6kJ-Nhy53bntwUleXmg5CkFSROMDuld9E,11605
61
+ phoenix/server/api/dataloaders/__init__.py,sha256=nVAvmau7LniwcIvr4TTWWwt2ZeHP-AXXwo8tF83GZMQ,3810
62
+ phoenix/server/api/dataloaders/document_evaluation_summaries.py,sha256=dgAAlD0n8X6oAPLaD-czoefNkDqP338MouWsKaW8bOY,5684
63
+ phoenix/server/api/dataloaders/document_evaluations.py,sha256=V-y8eyAA0sZpQTjHvmydbRENbkL_MmPJ8VMBFwLI7RM,1364
64
+ phoenix/server/api/dataloaders/document_retrieval_metrics.py,sha256=8tZYMNLZ7zxUmyTHHZRUTZTumvw6lK2tYOpFbATIPdI,4270
65
+ phoenix/server/api/dataloaders/evaluation_summaries.py,sha256=z9aal3IQL_t30aNqpAS7x4tjq0xNkuEG8dWW-bhqZmo,5724
66
+ phoenix/server/api/dataloaders/latency_ms_quantile.py,sha256=pEc7QjB2iiNOQm_Fmo99F5O_DKOJWgGmcnT0OADJzYE,7423
67
+ phoenix/server/api/dataloaders/min_start_or_max_end_times.py,sha256=IoFX5PtSpvQdMk_7-oB8TpIse3Q4PMxep4qKggkHpzo,2902
68
+ phoenix/server/api/dataloaders/record_counts.py,sha256=mp3KlhwFw-Iy7o6bFxtJKC6B5kGinPIh5PxxNkrxf8o,4283
69
+ phoenix/server/api/dataloaders/span_descendants.py,sha256=oxan-AjoHfEt9y2cBk-P6kSKCOOlkvSzpXrrXwGvq6s,2153
70
+ phoenix/server/api/dataloaders/span_evaluations.py,sha256=quXGyj_OYvHrcWfzXlYIv7C1OCZiL1K7cWU-YEAlsNA,1316
71
+ phoenix/server/api/dataloaders/token_counts.py,sha256=1t3jAyrxRCce6XLcn_9ymiQtVBh7r5x0A01yE6Ren4s,5015
72
+ phoenix/server/api/dataloaders/trace_evaluations.py,sha256=kmo2llOAXQ7iPtCLSFr8g_I7KHH6hwarASiPNWq2ZEg,1330
73
+ phoenix/server/api/dataloaders/cache/__init__.py,sha256=SYoOM9n8FJaMdQarma5d1blu-jIg2GB8Shqg5ezSzZ8,106
74
+ phoenix/server/api/dataloaders/cache/two_tier_cache.py,sha256=I38L1RsOis98OQftE7n1Q9QBZfFJO6OW_qIINkuJllo,2295
71
75
  phoenix/server/api/input_types/ClusterInput.py,sha256=EL4ftvZxQ8mVdruUPcdhMhByORmSmM8S-X6RPqU6GX0,179
72
76
  phoenix/server/api/input_types/Coordinates.py,sha256=meTwbIjwTfqx5DGD2DBlH9wQzdQVNM5a8x9dp1FfIgA,173
73
77
  phoenix/server/api/input_types/DataQualityMetricInput.py,sha256=LazvmQCCM5m9SDZTpyxQXO1rYF4cmsc3lsR2S9S65X4,1292
@@ -75,14 +79,15 @@ phoenix/server/api/input_types/DimensionFilter.py,sha256=vcXgglSnZcB5pGh-6oEtRmG
75
79
  phoenix/server/api/input_types/DimensionInput.py,sha256=Vfx5FmiMKey4-EHDQsQRPzSAMRJMN5oVMLDUl4NKAa8,164
76
80
  phoenix/server/api/input_types/Granularity.py,sha256=6SVfZ5yTZYq1PI6vdpjfkBUc4YilLSkF-k6okuSNbbQ,2301
77
81
  phoenix/server/api/input_types/PerformanceMetricInput.py,sha256=fElsLTSEYYgGFGMYTEGcYid39tXUKFdV_JkdHavMcbA,591
78
- phoenix/server/api/input_types/SpanSort.py,sha256=3ken7KaDUwoZfhaSiP9QRhkNPgGrCYy-SnSLZRX8zkk,3485
82
+ phoenix/server/api/input_types/SpanSort.py,sha256=BqV0DjI4m3RKFbzsHN47XNhJfFmErFIYg64c8EJAVMo,6312
79
83
  phoenix/server/api/input_types/TimeRange.py,sha256=yzx-gxj8mDeGLft1FzU_x1MVEgIG5Pt6-f8PUVDgipQ,522
80
84
  phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
85
  phoenix/server/api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- phoenix/server/api/routers/evaluation_handler.py,sha256=U7poPu9ezEEL5KEWXM-SX9LdvADpZiay1p6h4VAs08A,4058
83
- phoenix/server/api/routers/span_handler.py,sha256=IM4eiQ7GMU7JVyf0oMbrzEcItVudLy_CeYaWcwHOby4,2387
84
- phoenix/server/api/routers/trace_handler.py,sha256=2AQkYrio9r3DCmLMOL2vq3oB5ncnCm8XwEMLLUu4Eko,2433
85
86
  phoenix/server/api/routers/utils.py,sha256=M41BoH-fl37izhRuN2aX7lWm7jOC20A_3uClv9TVUUY,583
87
+ phoenix/server/api/routers/v1/__init__.py,sha256=uYzxJaI3XH6LNi9QaxoysvH9WDcTxcvP9GFghGa550I,447
88
+ phoenix/server/api/routers/v1/evaluations.py,sha256=DXAGpRvZicgROavqCogqEzoSi1V-__lYtre_KU1rCWc,9207
89
+ phoenix/server/api/routers/v1/spans.py,sha256=u2yDMxQF1Ou2A50dkNHYZfer939xsn2QJMAM8S8ICwY,3933
90
+ phoenix/server/api/routers/v1/traces.py,sha256=rrE4QMSAda1yw0s50YV1tW7GaM3phplY_tO8xd23HCY,2889
86
91
  phoenix/server/api/types/Cluster.py,sha256=R08ZKrLl1KK8colxHU57N5XIOTMUwg5ZI50ofPoxxSM,5618
87
92
  phoenix/server/api/types/DataQualityMetric.py,sha256=zRKsNvHBu-NdcsunuLhqFpZhi6ks-HMqA1PJD27jTak,590
88
93
  phoenix/server/api/types/Dataset.py,sha256=nQVtXltVfoKeccAQ5IHD_k1t5mCe8eIjD0nG-LZlhTk,3341
@@ -93,36 +98,38 @@ phoenix/server/api/types/DimensionDataType.py,sha256=o0QQRpUzgXbhd10drR2LthxrjB8
93
98
  phoenix/server/api/types/DimensionShape.py,sha256=LNsRt3Uyx1OmwMa5EXk1JGRXPLVV2EEgYXz-6wnLJn4,562
94
99
  phoenix/server/api/types/DimensionType.py,sha256=JLikZUBVqbHlUWcYYd8d60gB1_hmAcuFuZZsjCXpIwc,801
95
100
  phoenix/server/api/types/DimensionWithValue.py,sha256=4_koirnDrZBBdFkIWka2f-OeqZ6IzQXwqz3ccjdgHrc,484
96
- phoenix/server/api/types/DocumentEvaluationSummary.py,sha256=yT8Q4cgeEP9NI6ik-UiuqUlp0va-z6YKqDLByVMcQBw,3475
101
+ phoenix/server/api/types/DocumentEvaluationSummary.py,sha256=EpgKn0uiH2Vbpyltc1MeoWOZjzbRuHkPCZ2Zkoqfni8,3480
97
102
  phoenix/server/api/types/DocumentRetrievalMetrics.py,sha256=amkpC3H5IU5-9GvO0telpbq00m6lIcv_2v446OpwFwc,1822
98
103
  phoenix/server/api/types/EmbeddingDimension.py,sha256=GHGpx4D9TSpcdaQ7FMmKMtCu2MVIv-yTRQq9mQfe5_o,18678
99
104
  phoenix/server/api/types/EmbeddingMetadata.py,sha256=fJvNNYCbkf3SJalArLy9rcBq9Uj1SNac60zjqe1PFnM,461
100
- phoenix/server/api/types/Evaluation.py,sha256=rv9oI2BNiFmEt3hZ5ntu1tF9oEBhF3zyPE0H4M59y5Q,3381
101
- phoenix/server/api/types/EvaluationSummary.py,sha256=rhx9qalWzBPhCYS4V6Dn9h-YEgIP3HknJjza-F9cIYY,2097
105
+ phoenix/server/api/types/Evaluation.py,sha256=pSoaJH8-WzPvmZKn5fButzkXSN3Rvuq9GJ7g9H1aaaU,3997
106
+ phoenix/server/api/types/EvaluationSummary.py,sha256=EFucuzAhcxR9sdEn6WNAtmAGJk-QR_3j3y7Mn2A9_bU,1528
102
107
  phoenix/server/api/types/Event.py,sha256=5ohMNtXxE7Oy4xrDIl6ngFxT44chv0XnRUV1NNt_-9Y,3900
103
108
  phoenix/server/api/types/EventMetadata.py,sha256=-J0tYF9eZTHwCjwxQHY7Gckr2_MNW5OoWT1mydweZNM,635
104
109
  phoenix/server/api/types/ExportEventsMutation.py,sha256=PYqazKSx-S3uMLLXVlBmGSOxUhDb990dzZ4xNrRRiCw,3812
105
110
  phoenix/server/api/types/ExportedFile.py,sha256=e3GTn7B5LgsTbqiwjhMCQH7VsiqXitrBO4aCMS1lHsg,163
106
111
  phoenix/server/api/types/Functionality.py,sha256=tzV9xdhB8zqfsjWxP66NDC7EZsplYkYO7jRbLWJIeeg,382
107
- phoenix/server/api/types/MimeType.py,sha256=VIUQBqveSctiRFStJjDUdZ85TeKhwNNEosMCu5DqSGM,353
108
- phoenix/server/api/types/Model.py,sha256=IFhO2nouLQoMPNhl8vnm7nEXXSpr14CL3ihw8RnVWNY,7826
112
+ phoenix/server/api/types/MimeType.py,sha256=Zpi6zCalkSFgsvhzvOs-O1gYA04usAi9H__QZUmFlO0,365
113
+ phoenix/server/api/types/Model.py,sha256=Jo0skz14xGKd-cy6YyxWOvNE0cXHRelSecmLUOgqizk,7880
109
114
  phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
110
115
  phoenix/server/api/types/PerformanceMetric.py,sha256=W92B7OghEOgzFvmY0LCqpgavHaQggTGshdgfD0yqHX4,350
111
- phoenix/server/api/types/Project.py,sha256=ck6YNPZxbPjyEaYAfII78xd3IxdICTi0oNiiWbEIM3w,9849
116
+ phoenix/server/api/types/Project.py,sha256=M5qv27Nx0fypogumDd__wjO5L7j_glcNubIN5hpN3ms,12848
112
117
  phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
113
118
  phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSFw-AO1rWw,285
114
119
  phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
115
120
  phoenix/server/api/types/Segments.py,sha256=B6UUWjalZONjWjl_l61A6USPSu15ICXRgzZ4m3vA1yw,2921
116
121
  phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
117
- phoenix/server/api/types/Span.py,sha256=mzqxbh-R6C_ax8jAL6IIjJytRtivo7XnkFTPxJISMzw,12252
122
+ phoenix/server/api/types/Span.py,sha256=ln3X1qZdM4ZxMgStsYFvI8vlCmjU-VUV4mD4WqU63zI,10898
118
123
  phoenix/server/api/types/TimeSeries.py,sha256=QbLfxHnwYsMsirpq4tx9us6ha7YtAVzK4m8mAL3fMt0,5200
119
- phoenix/server/api/types/Trace.py,sha256=UrIbDAQmp78mXr8LvIg4S03JB_4cCMn-TskQJVYfm24,1558
124
+ phoenix/server/api/types/Trace.py,sha256=VXr5iX5QeeeypDOY8-D19vm3bYTm-9tBZWomp2XEUnc,2007
120
125
  phoenix/server/api/types/UMAPPoints.py,sha256=8l9RJXi308qty4MdHb2pBbiU6ZuLbrRRxXNbPhXoxKI,1639
121
126
  phoenix/server/api/types/ValidationResult.py,sha256=pHwdYk4J7SJ5xhlWWHg_6qWkfk4rjOx-bSkGHvkDE3Q,142
122
127
  phoenix/server/api/types/VectorDriftMetricEnum.py,sha256=etiJM5ZjQuD-oE7sY-FbdIKY050jk3IU49IMwmfJbEc,188
123
128
  phoenix/server/api/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
129
  phoenix/server/api/types/node.py,sha256=C3xB1zNXBEz1Nrb6KUp89QMX1vnVeuR1WJCjH-R5vsM,4330
125
- phoenix/server/api/types/pagination.py,sha256=2jcUp-SExHmf9FKP30zVJi5KET7G_Asdra6N1iQGeKE,5336
130
+ phoenix/server/api/types/pagination.py,sha256=Ewc13FFbxzVJxMYFxDISpCsRXJFrOG5QYsXb4UaW2WM,10052
131
+ phoenix/server/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
+ phoenix/server/openapi/docs.py,sha256=N7d4IHnhZ2Uvwgogo3Rjx-e_kX2NoenXPWkNjf1R22E,6913
126
133
  phoenix/server/static/apple-touch-icon-114x114.png,sha256=xtFVXAYQnJkpUApg2D1hltSTuyO4Is4sD4A0ZkikiVU,9486
127
134
  phoenix/server/static/apple-touch-icon-120x120.png,sha256=iqZVAk634BbjJMozA8aHYyw15JjhIlIrG41FA2DFFaE,9957
128
135
  phoenix/server/static/apple-touch-icon-144x144.png,sha256=VgARtkHKoU8zikb3_G83h_cb02kpPcoJqO78yRh1AfU,10047
@@ -133,36 +140,34 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
133
140
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
134
141
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
135
142
  phoenix/server/static/index.css,sha256=KKGpx4iwF91VGRm0YN-4cn8oC-oIqC6HecoPf0x3ZM8,1885
136
- phoenix/server/static/index.js,sha256=lf5vUlxD39ZuIlOtV8FW-la039JywwIKvmwv6ikZU54,3338031
143
+ phoenix/server/static/index.js,sha256=98KNN0-Bl39Zt4Ih459TfVmAHN6tQ-N9cKZ-0tDNf-8,3350371
137
144
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
138
145
  phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
146
  phoenix/server/templates/index.html,sha256=lO2wGA5XsftPg03rw_VcyaYf_4vegtlWbIT5ms4fA_c,1982
140
147
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- phoenix/session/client.py,sha256=zaAH7lTlRoWAgwoiCoL8giwG44FliDnEhaflHY5LoUM,10127
142
- phoenix/session/data_extractor.py,sha256=0Kf-2mKY_YbYoD2fZkAYpKdFgsXrC3OKQ5d2iZsGgAI,1947
148
+ phoenix/session/client.py,sha256=gQhnqPTGwzzeVBgduvHSQJPWb4bW1OBKZ1JQ2APEEhU,10097
149
+ phoenix/session/data_extractor.py,sha256=dwhiDu-ISaXr8UI9I-CszZhB5BlUNmdDopjFZvMIXMw,2101
143
150
  phoenix/session/evaluation.py,sha256=mR5HeBDmoS9oCb-X-2lpLCyMRoOgBufofbsjyEqCpMg,5390
144
- phoenix/session/session.py,sha256=P75qklh2HMgCCNiBghN3gjwRJiLIWzg1OshGt-fnzdM,24983
145
- phoenix/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
- phoenix/storage/span_store/__init__.py,sha256=ib-1BWPX4zMfIxS_qC-intyZciGMBJkAOcpb06d3jgQ,586
147
- phoenix/storage/span_store/text_file.py,sha256=Fzpl_UDVN6_Qa8kpjhDkjdO7xb_I3g-UuTseenkV42c,2853
151
+ phoenix/session/session.py,sha256=-OuqBRMT1tcat7qmy3g2mkDxK6krbtyH2mHpLskZ62k,26103
148
152
  phoenix/trace/__init__.py,sha256=ujk_uYjM8gmm-YqnyXxF-kekfwid0bcaPMTtNNcaw6U,407
153
+ phoenix/trace/attributes.py,sha256=8wZznsBbu-e9AAUh2C3yCTDQu-SIiNTn-v0UsWzq_GA,12364
149
154
  phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
150
155
  phoenix/trace/evaluation_conventions.py,sha256=t8jydM3U0-T5YpiQKRJ3tWdWGlHtzKyttYdw-ddvPOk,1048
151
156
  phoenix/trace/exporter.py,sha256=vh2RO1CpP143HxIX94KV0qks8p1x66RE3Tgf8kcBCCg,4519
152
- phoenix/trace/fixtures.py,sha256=HOjuYOB_xtR7JUeLz7WpEroiGj4E5_SxVLSjBYUy8RQ,7055
153
- phoenix/trace/otel.py,sha256=d8i8VPCJfkmT4f_o40kSNWFE94YddUPif0iQEjTQUCo,15368
157
+ phoenix/trace/fixtures.py,sha256=kupizPlPLoQyCxZfrIU7ZC87dYiL8uEhZEmdia__5qQ,9644
158
+ phoenix/trace/otel.py,sha256=WA720jvRadiZBAKjsYoPyXzypHwbyEK2OZRVUwtbjB8,9976
154
159
  phoenix/trace/projects.py,sha256=2BwlNjFE-uwpqYtCu5YyBiYZk9wRPpM13vh3-Cv7GkA,2157
155
- phoenix/trace/schemas.py,sha256=6PVPnQIIDsWijwCwU19TGKG3xhFCYFY9K_5IqR5dWF4,5904
156
- phoenix/trace/span_evaluations.py,sha256=T67grfU71iANMM0g6dp2OQ_ZjtkON2viZz95_U9FLQA,12954
160
+ phoenix/trace/schemas.py,sha256=JiFKhGD2JF6Eai7UOhPF5urcuKGkpMLHc3Vltbe1msk,5967
161
+ phoenix/trace/span_evaluations.py,sha256=7DI1EFfpZoOH8iIUYNzL9P6U9j0Hc2Z3u2SD0h1SF_Q,13101
157
162
  phoenix/trace/span_json_decoder.py,sha256=IAFakPRqSMYxTPKYFMiXYxm7U-FipdN8_xbvapDS0Qc,3131
158
163
  phoenix/trace/span_json_encoder.py,sha256=tzSCIQJbeFBm33K68G8A5M12n_86tCDyuU0WAobxEz4,2010
159
164
  phoenix/trace/trace_dataset.py,sha256=RpHIfZLbMmULOIb-fKXJkQLhIdC0sJlAOTjlyJppMYA,13776
160
165
  phoenix/trace/utils.py,sha256=7LurVGXn245cjj4MJsc7v6jq4DSJkpK6YGBfIaSywuw,1307
166
+ phoenix/trace/dsl/README.md,sha256=ihmP9zGUC5V-TDbzKla76LuyDqPDQIBUH2BORwxNI68,2902
161
167
  phoenix/trace/dsl/__init__.py,sha256=WIQIjJg362XD3s50OsPJJ0xbDsGp41bSv7vDllLrPuA,144
162
- phoenix/trace/dsl/filter.py,sha256=paLpcSMnHdgCfcvcroaqOoCe2retAZ5ocp_5cNTnv9s,14167
163
- phoenix/trace/dsl/helpers.py,sha256=urPNmk_D2ZpoKxYWS5DQsQt0nb38O0CoG3wNjOit-yM,2610
164
- phoenix/trace/dsl/missing.py,sha256=BWPOHr2_tBkPDgVeq8GVXXVbNbJiBelu4NtwHBg6mTE,1435
165
- phoenix/trace/dsl/query.py,sha256=M-ihu9n9JrW-pn1iUW2WRTO1FqQ6Cce_BGjazK8ddKM,14788
168
+ phoenix/trace/dsl/filter.py,sha256=w4jHpzykdcpuk-3Z7diI6hXQjBKIuJ7vuS-bDIC_7Ck,31900
169
+ phoenix/trace/dsl/helpers.py,sha256=vth40yFbNTAIbzOiZQJ79kjcZf_Zhqj4juU7kh6e3kA,3197
170
+ phoenix/trace/dsl/query.py,sha256=W0t-tiXh2WIVb96lzFAGQOQ-U46uKux78d4KL3rW-PE,30316
166
171
  phoenix/trace/langchain/__init__.py,sha256=F37GfD1pd5Kuw7R7iRUM1zXXpO8xEcycNZh5dwqBXNk,109
167
172
  phoenix/trace/langchain/instrumentor.py,sha256=isW3KRRP55t3JeaipAJ_aS7N_3HtwScPCO67ymSLr0Y,1372
168
173
  phoenix/trace/llama_index/__init__.py,sha256=4fpR5702Qh2t5TaXIx584EkA-BveCPftXPOKvI0Oi3I,105
@@ -172,14 +177,14 @@ phoenix/trace/openai/instrumentor.py,sha256=sb3434Npe86VHsT_jyDHlfpXWZYER9H1k_IQ
172
177
  phoenix/trace/v1/__init__.py,sha256=-IbAD0ruESMjvQLvGAg9CTfjBUATFDx1OXseDPis6-0,88
173
178
  phoenix/trace/v1/evaluation_pb2.py,sha256=8sXvv2BW_vqD30MOMbmkeE2zpmm7ncik21kl3e-HzeQ,2254
174
179
  phoenix/trace/v1/evaluation_pb2.pyi,sha256=cCbbx06gwQmaH14s3J1X25TtaARh-k1abbxQdQCXGm8,4500
175
- phoenix/utilities/__init__.py,sha256=8w1Ivw0KO9YKWrhcdnO73cSVqP9VHAp0pSfsi_oDiuQ,672
180
+ phoenix/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
181
  phoenix/utilities/deprecation.py,sha256=cFuTVvjSYyRlrdxdJewjJVieIEHPk30BukSRGRydQ3k,1046
177
182
  phoenix/utilities/error_handling.py,sha256=7b5rpGFj9EWZ8yrZK1IHvxB89suWk3lggDayUQcvZds,1946
178
183
  phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,222
179
184
  phoenix/utilities/project.py,sha256=qWsvKnG1oKhOFUowXf9qiOL2ia7jaFe_ijFFHEt8GJo,431
180
- phoenix/utilities/span_store.py,sha256=puxYoYH_GmSeCWuGEoviD6QnrAZUgyRNO2BXG_au8_w,998
181
- arize_phoenix-3.25.0.dist-info/METADATA,sha256=I8-4iw9EkZYmXTqJbR5T7Mcg3fwqeZrd8ViNPIuGw8g,29330
182
- arize_phoenix-3.25.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
183
- arize_phoenix-3.25.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
184
- arize_phoenix-3.25.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
185
- arize_phoenix-3.25.0.dist-info/RECORD,,
185
+ phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
+ arize_phoenix-4.0.1.dist-info/METADATA,sha256=9zMW_kCjqpQuYBy192t-6OqiE61ZJ3rQ9a0bxwLkwH8,30464
187
+ arize_phoenix-4.0.1.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
188
+ arize_phoenix-4.0.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
189
+ arize_phoenix-4.0.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
190
+ arize_phoenix-4.0.1.dist-info/RECORD,,
phoenix/__init__.py CHANGED
@@ -4,14 +4,19 @@ from importlib.machinery import ModuleSpec
4
4
  from types import ModuleType
5
5
  from typing import Any, Optional
6
6
 
7
- from .datasets.dataset import Dataset
8
- from .datasets.fixtures import ExampleDatasets
9
7
  from .inferences.fixtures import ExampleInferences, load_example
10
8
  from .inferences.inferences import Inferences
11
9
  from .inferences.schema import EmbeddingColumnNames, RetrievalEmbeddingColumnNames, Schema
12
10
  from .session.client import Client
13
11
  from .session.evaluation import log_evaluations
14
- from .session.session import NotebookEnvironment, Session, active_session, close_app, launch_app
12
+ from .session.session import (
13
+ NotebookEnvironment,
14
+ Session,
15
+ active_session,
16
+ close_app,
17
+ delete_all,
18
+ launch_app,
19
+ )
15
20
  from .trace.fixtures import load_example_traces
16
21
  from .trace.trace_dataset import TraceDataset
17
22
  from .version import __version__
@@ -34,8 +39,6 @@ Here are just a few of the things that phoenix does well:
34
39
 
35
40
  __all__ = [
36
41
  "__version__",
37
- "Dataset",
38
- "ExampleDatasets",
39
42
  "Inferences",
40
43
  "EmbeddingColumnNames",
41
44
  "RetrievalEmbeddingColumnNames",
@@ -45,6 +48,7 @@ __all__ = [
45
48
  "active_session",
46
49
  "close_app",
47
50
  "launch_app",
51
+ "delete_all",
48
52
  "Session",
49
53
  "load_example_traces",
50
54
  "TraceDataset",
phoenix/config.py CHANGED
@@ -1,11 +1,14 @@
1
1
  import os
2
2
  import tempfile
3
- from enum import Enum
3
+ from logging import getLogger
4
4
  from pathlib import Path
5
5
  from typing import List, Optional
6
6
 
7
+ logger = getLogger(__name__)
8
+
7
9
  # Phoenix environment variables
8
10
  ENV_PHOENIX_PORT = "PHOENIX_PORT"
11
+ ENV_PHOENIX_GRPC_PORT = "PHOENIX_GRPC_PORT"
9
12
  ENV_PHOENIX_HOST = "PHOENIX_HOST"
10
13
  ENV_NOTEBOOK_ENV = "PHOENIX_NOTEBOOK_ENV"
11
14
  ENV_PHOENIX_COLLECTOR_ENDPOINT = "PHOENIX_COLLECTOR_ENDPOINT"
@@ -22,11 +25,37 @@ ENV_PHOENIX_PROJECT_NAME = "PHOENIX_PROJECT_NAME"
22
25
  """
23
26
  The project name to use when logging traces and evals. defaults to 'default'.
24
27
  """
25
- ENV_SPAN_STORAGE_TYPE = "__DANGEROUS__PHOENIX_SPAN_STORAGE_TYPE"
28
+ ENV_PHOENIX_SQL_DATABASE_URL = "PHOENIX_SQL_DATABASE_URL"
26
29
  """
27
- **EXPERIMENTAL**
28
- The type of span storage to use.
30
+ The SQL database URL to use when logging traces and evals.
31
+ By default, Phoenix uses an SQLite database and stores it in the working directory.
32
+
33
+ Phoenix supports two types of database URLs:
34
+ - SQLite: 'sqlite:///path/to/database.db'
35
+ - PostgreSQL: 'postgresql://@host/dbname?user=user&password=password' or 'postgresql://user:password@host/dbname'
36
+
37
+ Note that if you plan on using SQLite, it's advised to to use a persistent volume
38
+ and simply point the PHOENIX_WORKING_DIR to that volume.
39
+ """
40
+
41
+ ENV_PHOENIX_ENABLE_PROMETHEUS = "PHOENIX_ENABLE_PROMETHEUS"
29
42
  """
43
+ Whether to enable Prometheus. Defaults to false.
44
+ """
45
+
46
+ # Phoenix server OpenTelemetry instrumentation environment variables
47
+ ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT = (
48
+ "PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT"
49
+ )
50
+ ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_GRPC_ENDPOINT = (
51
+ "PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_GRPC_ENDPOINT"
52
+ )
53
+
54
+
55
+ def server_instrumentation_is_enabled() -> bool:
56
+ return bool(
57
+ os.getenv(ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT)
58
+ ) or bool(os.getenv(ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_GRPC_ENDPOINT))
30
59
 
31
60
 
32
61
  def _get_temp_path() -> Path:
@@ -62,41 +91,53 @@ def get_working_dir() -> Path:
62
91
  return Path.home().resolve() / ".phoenix"
63
92
 
64
93
 
65
- def get_storage_dir() -> Path:
66
- """
67
- Get the directory for storing traces.
68
- """
69
- return get_working_dir() / "storage"
70
-
71
-
72
94
  PHOENIX_DIR = Path(__file__).resolve().parent
73
95
  # Server config
74
96
  SERVER_DIR = PHOENIX_DIR / "server"
75
- # The host the server will run on after launch_app is called
76
97
  HOST = "0.0.0.0"
77
- # The port the server will run on after launch_app is called
98
+ """The host the server will run on after launch_app is called."""
78
99
  PORT = 6006
79
- # The prefix of datasets that are auto-assigned a name
100
+ """The port the server will run on after launch_app is called."""
101
+ GRPC_PORT = 4317
102
+ """The port the gRPC server will run on after launch_app is called.
103
+ The default network port for OTLP/gRPC is 4317.
104
+ See https://opentelemetry.io/docs/specs/otlp/#otlpgrpc-default-port"""
80
105
  GENERATED_DATASET_NAME_PREFIX = "phoenix_dataset_"
81
- # The work directory for saving, loading, and exporting datasets
106
+ """The prefix of datasets that are auto-assigned a name."""
82
107
  WORKING_DIR = get_working_dir()
108
+ """The work directory for saving, loading, and exporting datasets."""
83
109
 
84
- try:
85
- for path in (
86
- ROOT_DIR := WORKING_DIR,
87
- EXPORT_DIR := ROOT_DIR / "exports",
88
- DATASET_DIR := ROOT_DIR / "datasets",
89
- TRACE_DATASET_DIR := ROOT_DIR / "trace_datasets",
90
- ):
91
- path.mkdir(parents=True, exist_ok=True)
92
- except Exception as e:
93
- print(
94
- f"⚠️ Failed to initialize the working directory at {WORKING_DIR} due to an error: {str(e)}"
95
- )
96
- print("⚠️ While phoenix will still run, you will not be able to save, load, or export data")
97
- print(
98
- f"ℹ️ To change, set the `{ENV_PHOENIX_WORKING_DIR}` environment variable before importing phoenix." # noqa: E501
99
- )
110
+ ROOT_DIR = WORKING_DIR
111
+ EXPORT_DIR = ROOT_DIR / "exports"
112
+ DATASET_DIR = ROOT_DIR / "datasets"
113
+ TRACE_DATASET_DIR = ROOT_DIR / "trace_datasets"
114
+
115
+
116
+ def ensure_working_dir() -> None:
117
+ """
118
+ Ensure the working directory exists. This is needed because the working directory
119
+ must exist before certain operations can be performed.
120
+ """
121
+ logger.info(f"📋 Ensuring phoenix working directory: {WORKING_DIR}")
122
+ try:
123
+ for path in (
124
+ ROOT_DIR,
125
+ EXPORT_DIR,
126
+ DATASET_DIR,
127
+ TRACE_DATASET_DIR,
128
+ ):
129
+ path.mkdir(parents=True, exist_ok=True)
130
+ except Exception as e:
131
+ print(
132
+ "💥 Failed to initialize the working directory at "
133
+ + f"{WORKING_DIR} due to an error: {str(e)}."
134
+ + "Phoenix requires a working directory to persist data"
135
+ )
136
+ raise
137
+
138
+
139
+ # Invoke ensure_working_dir() to ensure the working directory exists
140
+ ensure_working_dir()
100
141
 
101
142
 
102
143
  def get_exported_files(directory: Path) -> List[Path]:
@@ -117,10 +158,24 @@ def get_exported_files(directory: Path) -> List[Path]:
117
158
 
118
159
 
119
160
  def get_env_port() -> int:
120
- return (
121
- int(port)
122
- if isinstance(port := os.getenv(ENV_PHOENIX_PORT), str) and port.isnumeric()
123
- else PORT
161
+ if not (port := os.getenv(ENV_PHOENIX_PORT)):
162
+ return PORT
163
+ if port.isnumeric():
164
+ return int(port)
165
+ raise ValueError(
166
+ f"Invalid value for environment variable {ENV_PHOENIX_PORT}: "
167
+ f"{port}. Value must be an integer."
168
+ )
169
+
170
+
171
+ def get_env_grpc_port() -> int:
172
+ if not (port := os.getenv(ENV_PHOENIX_GRPC_PORT)):
173
+ return GRPC_PORT
174
+ if port.isnumeric():
175
+ return int(port)
176
+ raise ValueError(
177
+ f"Invalid value for environment variable {ENV_PHOENIX_GRPC_PORT}: "
178
+ f"{port}. Value must be an integer."
124
179
  )
125
180
 
126
181
 
@@ -136,24 +191,25 @@ def get_env_project_name() -> str:
136
191
  return os.getenv(ENV_PHOENIX_PROJECT_NAME) or DEFAULT_PROJECT_NAME
137
192
 
138
193
 
139
- def get_env_span_storage_type() -> Optional["SpanStorageType"]:
140
- """
141
- Get the type of span storage to use.
142
- """
143
- if not (env_type_str := os.getenv(ENV_SPAN_STORAGE_TYPE)):
144
- return None
145
- try:
146
- return SpanStorageType(env_type_str.lower())
147
- except ValueError:
148
- raise ValueError(
149
- f"⚠️ Invalid span storage type value `{env_type_str}` defined by the "
150
- f"environment variable `{ENV_SPAN_STORAGE_TYPE}`. Valid values are: "
151
- f"{', '.join(t.value for t in SpanStorageType)}."
152
- )
153
-
154
-
155
- class SpanStorageType(Enum):
156
- TEXT_FILES = "text-files"
194
+ def get_env_database_connection_str() -> str:
195
+ env_url = os.getenv(ENV_PHOENIX_SQL_DATABASE_URL)
196
+ if env_url is None:
197
+ working_dir = get_working_dir()
198
+ return f"sqlite:///{working_dir}/phoenix.db"
199
+ return env_url
200
+
201
+
202
+ def get_env_enable_prometheus() -> bool:
203
+ if (enable_promotheus := os.getenv(ENV_PHOENIX_ENABLE_PROMETHEUS)) is None or (
204
+ enable_promotheus_lower := enable_promotheus.lower()
205
+ ) == "false":
206
+ return False
207
+ if enable_promotheus_lower == "true":
208
+ return True
209
+ raise ValueError(
210
+ f"Invalid value for environment variable {ENV_PHOENIX_ENABLE_PROMETHEUS}: "
211
+ f"{enable_promotheus}. Value values are 'TRUE' and 'FALSE' (case-insensitive)."
212
+ )
157
213
 
158
214
 
159
215
  DEFAULT_PROJECT_NAME = "default"
phoenix/datetime_utils.py CHANGED
@@ -1,4 +1,4 @@
1
- from datetime import datetime, timedelta, timezone
1
+ from datetime import datetime, timedelta, timezone, tzinfo
2
2
  from typing import Any, Optional, Tuple, cast
3
3
 
4
4
  import pandas as pd
@@ -11,6 +11,23 @@ from pandas.core.dtypes.common import (
11
11
  is_object_dtype,
12
12
  )
13
13
 
14
+ _LOCAL_TIMEZONE = datetime.now(timezone.utc).astimezone().tzinfo
15
+
16
+
17
+ def normalize_datetime(
18
+ dt: Optional[datetime],
19
+ tz: Optional[tzinfo] = None,
20
+ ) -> Optional[datetime]:
21
+ """
22
+ If the input datetime is timezone-naive, it is localized as local timezone
23
+ unless tzinfo is specified.
24
+ """
25
+ if not isinstance(dt, datetime):
26
+ return None
27
+ if dt.tzinfo is None or dt.tzinfo.utcoffset(dt) is None:
28
+ dt = dt.replace(tzinfo=tz if tz else _LOCAL_TIMEZONE)
29
+ return dt.astimezone(timezone.utc)
30
+
14
31
 
15
32
  def normalize_timestamps(
16
33
  timestamps: "pd.Series[Any]",