arize-phoenix 8.2.1__py3-none-any.whl → 8.3.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.
- {arize_phoenix-8.2.1.dist-info → arize_phoenix-8.3.0.dist-info}/METADATA +3 -3
- {arize_phoenix-8.2.1.dist-info → arize_phoenix-8.3.0.dist-info}/RECORD +27 -27
- phoenix/config.py +32 -5
- phoenix/db/models.py +1 -25
- phoenix/server/api/context.py +4 -2
- phoenix/server/api/dataloaders/__init__.py +2 -2
- phoenix/server/api/dataloaders/{span_fields.py → table_fields.py} +21 -19
- phoenix/server/api/helpers/playground_clients.py +4 -0
- phoenix/server/api/helpers/prompts/models.py +1 -0
- phoenix/server/api/queries.py +8 -17
- phoenix/server/api/types/Experiment.py +2 -4
- phoenix/server/api/types/ExperimentRun.py +2 -2
- phoenix/server/api/types/ExperimentRunAnnotation.py +2 -2
- phoenix/server/api/types/Project.py +67 -38
- phoenix/server/api/types/ProjectSession.py +2 -2
- phoenix/server/api/types/Span.py +39 -4
- phoenix/server/api/types/Trace.py +98 -30
- phoenix/server/app.py +4 -2
- phoenix/server/static/.vite/manifest.json +9 -9
- phoenix/server/static/assets/{components-CgcYOKnv.js → components-T5K9z49d.js} +4 -3
- phoenix/server/static/assets/{index-B_Nkd6Rh.js → index-DvHwFF8e.js} +2 -2
- phoenix/server/static/assets/{pages-Cz-JsoAE.js → pages-CY3ZXSHj.js} +375 -356
- phoenix/version.py +1 -1
- {arize_phoenix-8.2.1.dist-info → arize_phoenix-8.3.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-8.2.1.dist-info → arize_phoenix-8.3.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-8.2.1.dist-info → arize_phoenix-8.3.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-8.2.1.dist-info → arize_phoenix-8.3.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.3.0
|
|
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
|
|
@@ -55,7 +55,7 @@ Requires-Dist: uvicorn
|
|
|
55
55
|
Requires-Dist: websockets
|
|
56
56
|
Requires-Dist: wrapt>=1.17.2
|
|
57
57
|
Provides-Extra: container
|
|
58
|
-
Requires-Dist: anthropic>=0.
|
|
58
|
+
Requires-Dist: anthropic>=0.47.0; extra == 'container'
|
|
59
59
|
Requires-Dist: fast-hdbscan>=0.2.0; extra == 'container'
|
|
60
60
|
Requires-Dist: google-generativeai; extra == 'container'
|
|
61
61
|
Requires-Dist: numba>=0.60.0; extra == 'container'
|
|
@@ -73,7 +73,7 @@ Requires-Dist: strawberry-graphql[opentelemetry]==0.253.1; extra == 'container'
|
|
|
73
73
|
Requires-Dist: umap-learn; extra == 'container'
|
|
74
74
|
Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'container'
|
|
75
75
|
Provides-Extra: dev
|
|
76
|
-
Requires-Dist: anthropic; extra == 'dev'
|
|
76
|
+
Requires-Dist: anthropic>=0.47.0; extra == 'dev'
|
|
77
77
|
Requires-Dist: arize[autoembeddings,llm-evaluation]; extra == 'dev'
|
|
78
78
|
Requires-Dist: asgi-lifespan; extra == 'dev'
|
|
79
79
|
Requires-Dist: asyncpg; extra == 'dev'
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
phoenix/__init__.py,sha256=X3eUEwd2rG8KKWWYVNNDJoqo08ihfjgHhlP29dcdNJE,5481
|
|
2
2
|
phoenix/auth.py,sha256=VVMHrWN31tln3Zo4z6ofecrV4daiqJjLd8r85mqlxek,10939
|
|
3
|
-
phoenix/config.py,sha256=
|
|
3
|
+
phoenix/config.py,sha256=V5DtJ5JZOqFr7CdXdYo_fPEDHVvxyY856xftHl3g9NY,29007
|
|
4
4
|
phoenix/datetime_utils.py,sha256=iJzNG6YJ6V7_u8B2iA7P2Z26FyxYbOPtx0dhJ7kNDHA,3398
|
|
5
5
|
phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
|
|
6
6
|
phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
7
7
|
phoenix/services.py,sha256=kpW1WL0kiB8XJsO6XycvZVJ-lBkNoenhQ7atCvBoSe8,5365
|
|
8
8
|
phoenix/settings.py,sha256=ht-0oN-sMV6SPXrk7Tu1EZlngpAYkGNLYPhO8DyrdQI,661
|
|
9
|
-
phoenix/version.py,sha256=
|
|
9
|
+
phoenix/version.py,sha256=hiR7PouSkHWKTT2q2JFrz5vsu1x5YsLxuo4hVevNMUU,22
|
|
10
10
|
phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
|
|
12
12
|
phoenix/core/model.py,sha256=qBFraOtmwCCnWJltKNP18DDG0mULXigytlFsa6YOz6k,4837
|
|
@@ -21,7 +21,7 @@ phoenix/db/enums.py,sha256=tt7iovXLhVTLZ3_LbHNGgcI44SnNjXfkKtLAZG57T54,428
|
|
|
21
21
|
phoenix/db/facilitator.py,sha256=sAYqzBXYSVBKPTQVYrd7ZmtqMAr1zP9dVJwjfNGW7hc,4207
|
|
22
22
|
phoenix/db/helpers.py,sha256=daKbpY2QhTPo9a_T1xNHKI4WzWHkMmmrGIws7Hw-RZ4,4884
|
|
23
23
|
phoenix/db/migrate.py,sha256=oUrXH8yEbcpL4eh09aSCuUiSrhFli0eT5D_j4ZmYChY,2797
|
|
24
|
-
phoenix/db/models.py,sha256=
|
|
24
|
+
phoenix/db/models.py,sha256=JxZkG4qLW7O2A9cHFVbw5y09y_QtJT7GoUxazcmeQlk,42601
|
|
25
25
|
phoenix/db/insertion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
26
|
phoenix/db/insertion/constants.py,sha256=8wifm7X-1XvroZ__R2Gc96NsgLhTDn0zXl4lehlXtcA,70
|
|
27
27
|
phoenix/db/insertion/dataset.py,sha256=I9OC1ouVx7m6BH_c8hvcxW1dWGRAtpvXee29yBTuFkg,7136
|
|
@@ -80,7 +80,7 @@ phoenix/pointcloud/pointcloud.py,sha256=SN_1wXZcwKrtSnHGZLDZGx71orqE1WyVF7E-D58d
|
|
|
80
80
|
phoenix/pointcloud/projectors.py,sha256=TQgwc9cJDjJkin1WZyZzgl3HsYrLLiyWD7Czy4jNW3U,1088
|
|
81
81
|
phoenix/pointcloud/umap_parameters.py,sha256=db_WEPoamuWtopZx7tQfAXPnoE0MS8FkAV0_ThjEx_Q,1735
|
|
82
82
|
phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
-
phoenix/server/app.py,sha256=
|
|
83
|
+
phoenix/server/app.py,sha256=qYSU_1kA8vE1_NjfADYO35M71-CzmoxTmR9zRi7EaRo,39200
|
|
84
84
|
phoenix/server/bearer_auth.py,sha256=0UudvkAS_dxna5JEJJhGUYwB6Ny-e22ssX5Mm79QwCk,5907
|
|
85
85
|
phoenix/server/dml_event.py,sha256=MjJmVEKytq75chBOSyvYDusUnEbg1pHpIjR3pZkUaJA,2838
|
|
86
86
|
phoenix/server/dml_event_handler.py,sha256=EZLXmCvx4pJrCkz29gxwKwmvmUkTtPCHw6klR-XM8qE,8258
|
|
@@ -96,14 +96,14 @@ phoenix/server/types.py,sha256=gJJPBcDRkQ9VHZIt_aLqG_OBbGt1oWp4e3W3Jp61oKs,7409
|
|
|
96
96
|
phoenix/server/api/README.md,sha256=Pyq1PLPgTzXAswrfIhGXrjI3Skq8it2jTVnanT6Ba4Q,1162
|
|
97
97
|
phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
98
|
phoenix/server/api/auth.py,sha256=nywpmfMI1trZTbZRD3oBj4kFjzg_vnxDljcM431T1eY,1246
|
|
99
|
-
phoenix/server/api/context.py,sha256=
|
|
99
|
+
phoenix/server/api/context.py,sha256=ZdhMuj7QSKDBt8Nd8BnndNSIunLuekttP50a3NIm3BA,6301
|
|
100
100
|
phoenix/server/api/exceptions.py,sha256=TA0JuY2YRnj35qGuMSQ8d0ToHum9gWm9W--3fSKHrX0,1171
|
|
101
101
|
phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
|
|
102
|
-
phoenix/server/api/queries.py,sha256=
|
|
102
|
+
phoenix/server/api/queries.py,sha256=DvWj6xbpEOE5yX_zYwvq3OIicRXQEwnI2h0uDctMmTs,31891
|
|
103
103
|
phoenix/server/api/schema.py,sha256=fcs36xQwFF_Qe41_5cWR8wYpDvOrnbcyTeo5WNMbDsA,1702
|
|
104
104
|
phoenix/server/api/subscriptions.py,sha256=DSIgQF6lQqkbc7D0AaI5R4g3hIHbU04H5Y2UIpwmpy0,22989
|
|
105
105
|
phoenix/server/api/utils.py,sha256=quCBRcusc6PUq9tJq7M8PgwFZp7nXgVAxtbw8feribY,833
|
|
106
|
-
phoenix/server/api/dataloaders/__init__.py,sha256=
|
|
106
|
+
phoenix/server/api/dataloaders/__init__.py,sha256=L-VTXrf_loh2klLixKDT80wRrJIUox8bMV7bpt2p_Uo,4182
|
|
107
107
|
phoenix/server/api/dataloaders/annotation_summaries.py,sha256=2sHmIDX7n8tuPeBTs9bMKtlMKWn_Ph9awTZqmwn2Owc,5505
|
|
108
108
|
phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=GLFoFAbztOH-0FVzzZ77mATIO63UcjB50j3qXiNi-tE,1811
|
|
109
109
|
phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=xF7M2dg3UmjhdCrscnztCIBBI0cg3RF48IIqvilpc18,4623
|
|
@@ -130,8 +130,8 @@ phoenix/server/api/dataloaders/span_annotations.py,sha256=y5TvxnljS2P3hm_NiQd24q
|
|
|
130
130
|
phoenix/server/api/dataloaders/span_by_id.py,sha256=gaqsMqMjJfzgsAuC--lZoRvgHk_1o78_0HnpXejg9Bc,1001
|
|
131
131
|
phoenix/server/api/dataloaders/span_dataset_examples.py,sha256=rpBStVP7ZMIH11Cpq4-zCJ4amNC5ZzX72NYv4vAQTdc,1255
|
|
132
132
|
phoenix/server/api/dataloaders/span_descendants.py,sha256=lEUpPkQtM5twbBrwzBbrJN7wZpG0K2rdL7hG2PAs5pk,2308
|
|
133
|
-
phoenix/server/api/dataloaders/span_fields.py,sha256=HNggF00gbajMEUh5pwIpUPGENytRSVL304Lp4p9L7yk,2965
|
|
134
133
|
phoenix/server/api/dataloaders/span_projects.py,sha256=JTfuKn2BBn72QdAP53ZGP2OUCgZJ7AzlzQAx8WivBog,1234
|
|
134
|
+
phoenix/server/api/dataloaders/table_fields.py,sha256=C3ywv87XphMEvqsQGl33H4iOiXbvqWqvaM4Snps4Sv0,3068
|
|
135
135
|
phoenix/server/api/dataloaders/token_counts.py,sha256=Sr_sBfLgsKYCIjgzTFV-fuat7s7DATM2u6ZftLaOnoQ,4629
|
|
136
136
|
phoenix/server/api/dataloaders/trace_by_trace_ids.py,sha256=xqYJOjCgXlTzour4vY72kO-2gJFgWMjD3759o78cq44,874
|
|
137
137
|
phoenix/server/api/dataloaders/trace_root_spans.py,sha256=0Y2ImTPmDHpz_quRMIjuxED2M0dAm2M0StZUmSTiTiw,1000
|
|
@@ -142,11 +142,11 @@ phoenix/server/api/dataloaders/cache/two_tier_cache.py,sha256=cmo8FUT3E91R139IEz
|
|
|
142
142
|
phoenix/server/api/helpers/__init__.py,sha256=m2-xaSPqUiSs91k62JaRDjFNfl-1byxBfY-m_Vxw16U,272
|
|
143
143
|
phoenix/server/api/helpers/dataset_helpers.py,sha256=DoMBTg-qXTnC_K4Evx1WKpCCYgRbITpVqyY-8efJRf0,8984
|
|
144
144
|
phoenix/server/api/helpers/experiment_run_filters.py,sha256=DOnVwrmn39eAkk2mwuZP8kIcAnR5jrOgllEwWSjsw94,29893
|
|
145
|
-
phoenix/server/api/helpers/playground_clients.py,sha256=
|
|
145
|
+
phoenix/server/api/helpers/playground_clients.py,sha256=VG2vEHi4ysPHH4ycNhB8VzNH7BS4uvIe57ZTR3MWuR4,40061
|
|
146
146
|
phoenix/server/api/helpers/playground_registry.py,sha256=CPLMziFB2wmr-dfbx7VbzO2f8YIG_k5RftzvGXYGQ1w,2570
|
|
147
147
|
phoenix/server/api/helpers/playground_spans.py,sha256=PjGNDc7cpqn5lmRM6TO_J1eVRGlgsNdQ8IT--5JVz0o,16881
|
|
148
148
|
phoenix/server/api/helpers/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
149
|
-
phoenix/server/api/helpers/prompts/models.py,sha256=
|
|
149
|
+
phoenix/server/api/helpers/prompts/models.py,sha256=10dIZlDy1a3sKmFk--Af5jk-8ATBqbNPXlOZYSIDwGk,18734
|
|
150
150
|
phoenix/server/api/helpers/prompts/conversions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
151
151
|
phoenix/server/api/helpers/prompts/conversions/anthropic.py,sha256=uGTPzlw_9RaRPUsAIHyiRgD0NpDoajQzf7Am8nlJ4Cg,3279
|
|
152
152
|
phoenix/server/api/helpers/prompts/conversions/openai.py,sha256=a43WAftFn_me6ePHDufqvlg-4Z2C31owUSsqYC0YUP8,2589
|
|
@@ -247,11 +247,11 @@ phoenix/server/api/types/EvaluationSummary.py,sha256=vILYejnfPvMwWEXOwhQZsANvYe3
|
|
|
247
247
|
phoenix/server/api/types/Event.py,sha256=iYt_Jx1Roioo0vZ0iPeJTHcTu6NSm4ilVMJ-IMUHAKk,3970
|
|
248
248
|
phoenix/server/api/types/EventMetadata.py,sha256=-J0tYF9eZTHwCjwxQHY7Gckr2_MNW5OoWT1mydweZNM,635
|
|
249
249
|
phoenix/server/api/types/ExampleRevisionInterface.py,sha256=gV3Gt9-3Oi5wjaVtepC6nOt3FzTzZFD1KebNnqiw56E,294
|
|
250
|
-
phoenix/server/api/types/Experiment.py,sha256=
|
|
250
|
+
phoenix/server/api/types/Experiment.py,sha256=r_D7lDJ9nEthuyZdZ7HafxsODlcLNcXtCNaL70HRpjc,5349
|
|
251
251
|
phoenix/server/api/types/ExperimentAnnotationSummary.py,sha256=Uk3JtxIrsMoZT5tqc4nJdUOM3XegVzjUyoV3pkjNotE,256
|
|
252
252
|
phoenix/server/api/types/ExperimentComparison.py,sha256=cFQZy5rj_klzTV-3jnxIlkrCHXkW8gYnp5uSR1UWCzg,416
|
|
253
|
-
phoenix/server/api/types/ExperimentRun.py,sha256=
|
|
254
|
-
phoenix/server/api/types/ExperimentRunAnnotation.py,sha256=
|
|
253
|
+
phoenix/server/api/types/ExperimentRun.py,sha256=DMqxXEDFP4evEzCCnJ7JZHdv9z-nrcDxl0uKQOL6_ps,4179
|
|
254
|
+
phoenix/server/api/types/ExperimentRunAnnotation.py,sha256=YGw5zIbjRXUK3zH475DnEeg4SDNGOmdxtuUVkzGw1E8,1734
|
|
255
255
|
phoenix/server/api/types/ExportedFile.py,sha256=e3GTn7B5LgsTbqiwjhMCQH7VsiqXitrBO4aCMS1lHsg,163
|
|
256
256
|
phoenix/server/api/types/Functionality.py,sha256=tzV9xdhB8zqfsjWxP66NDC7EZsplYkYO7jRbLWJIeeg,382
|
|
257
257
|
phoenix/server/api/types/GenerativeModel.py,sha256=P7eBUMXbeqaLwSSGBKdZy3a5gOLd9I0fuP8o1st6H08,193
|
|
@@ -264,8 +264,8 @@ phoenix/server/api/types/MimeType.py,sha256=Zpi6zCalkSFgsvhzvOs-O1gYA04usAi9H__Q
|
|
|
264
264
|
phoenix/server/api/types/Model.py,sha256=8UIFqMe1q-2ufBNg-gxHusV8wM1h-KbfLUeJjyVcMvQ,8081
|
|
265
265
|
phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
|
|
266
266
|
phoenix/server/api/types/PerformanceMetric.py,sha256=KFkmJDqP43eDUtARQOUqR7NYcxvL6Vh2uisHWU6H3ko,387
|
|
267
|
-
phoenix/server/api/types/Project.py,sha256=
|
|
268
|
-
phoenix/server/api/types/ProjectSession.py,sha256=
|
|
267
|
+
phoenix/server/api/types/Project.py,sha256=qETsEdX0NR-qmRBrjfaFAoYOdOVUzk1oZ1nWoc1hwK0,19950
|
|
268
|
+
phoenix/server/api/types/ProjectSession.py,sha256=fyfVtpUpFOTnBx8DFnH3dr7WXAssN0ooAgrQSSi7kEI,4677
|
|
269
269
|
phoenix/server/api/types/Prompt.py,sha256=ccP4eq1e38xbF0afclGWLOuDpBVpNbJ3AOSRClF8yFQ,4955
|
|
270
270
|
phoenix/server/api/types/PromptLabel.py,sha256=g3IDSPYRZwb0qpMAk93R6J96jgYULUYGOciTnpeh3sI,1321
|
|
271
271
|
phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
|
|
@@ -277,14 +277,14 @@ phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSF
|
|
|
277
277
|
phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
|
|
278
278
|
phoenix/server/api/types/Segments.py,sha256=vT2v0efoa5cuBKxLtxTnsUP5YJJCZfTloM71Spu0tMI,2915
|
|
279
279
|
phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
|
|
280
|
-
phoenix/server/api/types/Span.py,sha256=
|
|
280
|
+
phoenix/server/api/types/Span.py,sha256=lXxvp_c9P6Ot3iKnr33Ch_glEn5yXh4qNG2ovB7bxFM,24112
|
|
281
281
|
phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-pQMx21CpUuNGY,1168
|
|
282
282
|
phoenix/server/api/types/SpanIOValue.py,sha256=c5TWdZZN3v0gHI5xWeY7gjD-sE9ugWlGGAio-gDS-Uo,1653
|
|
283
283
|
phoenix/server/api/types/SystemApiKey.py,sha256=2ym8EgsTBIvxx1l9xZ-2YMovz58ZwYb_MaHBTJ9NH2E,166
|
|
284
284
|
phoenix/server/api/types/TimeSeries.py,sha256=nuuZtfHmOhTjeB8_SvZ5PUQexAkTcPScwYeFC5RUlRU,5491
|
|
285
285
|
phoenix/server/api/types/TokenUsage.py,sha256=g-PjAGVigpchQgkXAuC5sc53fn2YwAgfeXkGmFPi_TE,201
|
|
286
286
|
phoenix/server/api/types/ToolDefinition.py,sha256=T6UH2vcbuPBDy7jKYOqMth2NdqxMPgDBf11Tpbt5Yb8,187
|
|
287
|
-
phoenix/server/api/types/Trace.py,sha256=
|
|
287
|
+
phoenix/server/api/types/Trace.py,sha256=kH0Tv3m8chVbxMiQ27_W5v8gz6RsvGvl2qS9eoELXlw,7992
|
|
288
288
|
phoenix/server/api/types/TraceAnnotation.py,sha256=OW6A2zr1gomOuG0XQe55dk15XXX2DSM0DzatRbHWH5A,1256
|
|
289
289
|
phoenix/server/api/types/UMAPPoints.py,sha256=49sWnxjcAJKRzqUY71Fa0tOPti5XjIIFT5cSg6oNu_U,1650
|
|
290
290
|
phoenix/server/api/types/User.py,sha256=iTVUrI8U6-asOhBt1bOZNtoRAaRNC4WHgR1Uv2rHnWQ,1975
|
|
@@ -311,10 +311,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
|
|
|
311
311
|
phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
|
|
312
312
|
phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
|
|
313
313
|
phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
|
|
314
|
-
phoenix/server/static/.vite/manifest.json,sha256=
|
|
315
|
-
phoenix/server/static/assets/components-
|
|
316
|
-
phoenix/server/static/assets/index-
|
|
317
|
-
phoenix/server/static/assets/pages-
|
|
314
|
+
phoenix/server/static/.vite/manifest.json,sha256=gLp2U44u4hOPLF2QtY0f1NAv2iBDdiCQUMrTo4Y_k8k,2165
|
|
315
|
+
phoenix/server/static/assets/components-T5K9z49d.js,sha256=QrGTa7_27jTP0_2xAR7Mv9Ags8nvdEuWGH9WeUmG1iY,420526
|
|
316
|
+
phoenix/server/static/assets/index-DvHwFF8e.js,sha256=feyHQ14eei_xu4EeBpawOncl4aloxknZL3GVJMHdxkg,58955
|
|
317
|
+
phoenix/server/static/assets/pages-CY3ZXSHj.js,sha256=2DIfOTzkx_tAjtisqbemS-JYw0SnKJD4MqHZpRjFGhU,822632
|
|
318
318
|
phoenix/server/static/assets/vendor-Cg6lcjUC.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
|
|
319
319
|
phoenix/server/static/assets/vendor-Cqfydjep.js,sha256=3sepoB8zViIDMxKuc4lpMVfCmATxlvc9vCEPI2B2uVQ,2235092
|
|
320
320
|
phoenix/server/static/assets/vendor-arizeai-WnerlUPN.js,sha256=MahCU9MTwcGSh9tsu-gsF-SWqCISSFIYq9ZnMoKLPkA,202331
|
|
@@ -361,9 +361,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
|
|
|
361
361
|
phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
|
|
362
362
|
phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
363
363
|
phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
|
|
364
|
-
arize_phoenix-8.
|
|
365
|
-
arize_phoenix-8.
|
|
366
|
-
arize_phoenix-8.
|
|
367
|
-
arize_phoenix-8.
|
|
368
|
-
arize_phoenix-8.
|
|
369
|
-
arize_phoenix-8.
|
|
364
|
+
arize_phoenix-8.3.0.dist-info/METADATA,sha256=Zs8uZJku1gMbtL3XbMU8ggOLLNVzvkGNzj2nrUvqIcU,23433
|
|
365
|
+
arize_phoenix-8.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
366
|
+
arize_phoenix-8.3.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
|
|
367
|
+
arize_phoenix-8.3.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
368
|
+
arize_phoenix-8.3.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
369
|
+
arize_phoenix-8.3.0.dist-info/RECORD,,
|
phoenix/config.py
CHANGED
|
@@ -54,6 +54,33 @@ Phoenix supports two types of database URLs:
|
|
|
54
54
|
Note that if you plan on using SQLite, it's advised to to use a persistent volume
|
|
55
55
|
and simply point the PHOENIX_WORKING_DIR to that volume.
|
|
56
56
|
"""
|
|
57
|
+
ENV_PHOENIX_POSTGRES_HOST = "PHOENIX_POSTGRES_HOST"
|
|
58
|
+
"""
|
|
59
|
+
As an alternative to setting PHOENIX_SQL_DATABASE_URL, you can set the following
|
|
60
|
+
environment variables to connect to a PostgreSQL database:
|
|
61
|
+
- PHOENIX_POSTGRES_HOST
|
|
62
|
+
- PHOENIX_POSTGRES_PORT
|
|
63
|
+
- PHOENIX_POSTGRES_USER
|
|
64
|
+
- PHOENIX_POSTGRES_PASSWORD
|
|
65
|
+
- PHOENIX_POSTGRES_DB
|
|
66
|
+
"""
|
|
67
|
+
ENV_PHOENIX_POSTGRES_PORT = "PHOENIX_POSTGRES_PORT"
|
|
68
|
+
"""
|
|
69
|
+
Used with PHOENIX_POSTGRES_HOST to specify the port to use for the PostgreSQL database.
|
|
70
|
+
"""
|
|
71
|
+
ENV_PHOENIX_POSTGRES_USER = "PHOENIX_POSTGRES_USER"
|
|
72
|
+
"""
|
|
73
|
+
Used with PHOENIX_POSTGRES_HOST to specify the user to use for the PostgreSQL database (required).
|
|
74
|
+
"""
|
|
75
|
+
ENV_PHOENIX_POSTGRES_PASSWORD = "PHOENIX_POSTGRES_PASSWORD"
|
|
76
|
+
"""
|
|
77
|
+
Used with PHOENIX_POSTGRES_HOST to specify the password to use for the PostgreSQL database
|
|
78
|
+
(required).
|
|
79
|
+
"""
|
|
80
|
+
ENV_PHOENIX_POSTGRES_DB = "PHOENIX_POSTGRES_DB"
|
|
81
|
+
"""
|
|
82
|
+
Used with PHOENIX_POSTGRES_HOST to specify the database to use for the PostgreSQL database.
|
|
83
|
+
"""
|
|
57
84
|
ENV_PHOENIX_SQL_DATABASE_SCHEMA = "PHOENIX_SQL_DATABASE_SCHEMA"
|
|
58
85
|
"""
|
|
59
86
|
The schema to use for the PostgresSQL database. (This is ignored for SQLite.)
|
|
@@ -635,11 +662,11 @@ def get_env_database_connection_str() -> str:
|
|
|
635
662
|
|
|
636
663
|
|
|
637
664
|
def get_env_postgres_connection_str() -> Optional[str]:
|
|
638
|
-
pg_user = os.getenv(
|
|
639
|
-
pg_password = os.getenv(
|
|
640
|
-
pg_host = os.getenv(
|
|
641
|
-
pg_port = os.getenv(
|
|
642
|
-
pg_db = os.getenv(
|
|
665
|
+
pg_user = os.getenv(ENV_PHOENIX_POSTGRES_USER)
|
|
666
|
+
pg_password = os.getenv(ENV_PHOENIX_POSTGRES_PASSWORD)
|
|
667
|
+
pg_host = os.getenv(ENV_PHOENIX_POSTGRES_HOST)
|
|
668
|
+
pg_port = os.getenv(ENV_PHOENIX_POSTGRES_PORT)
|
|
669
|
+
pg_db = os.getenv(ENV_PHOENIX_POSTGRES_DB)
|
|
643
670
|
|
|
644
671
|
if pg_host and ":" in pg_host:
|
|
645
672
|
pg_host, parsed_port = pg_host.split(":")
|
phoenix/db/models.py
CHANGED
|
@@ -271,6 +271,7 @@ class ExperimentRunOutput(TypedDict, total=False):
|
|
|
271
271
|
|
|
272
272
|
|
|
273
273
|
class Base(DeclarativeBase):
|
|
274
|
+
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
274
275
|
# Enforce best practices for naming constraints
|
|
275
276
|
# https://alembic.sqlalchemy.org/en/latest/naming.html#integration-of-naming-conventions-into-operations-autogenerate
|
|
276
277
|
metadata = MetaData(
|
|
@@ -292,7 +293,6 @@ class Base(DeclarativeBase):
|
|
|
292
293
|
|
|
293
294
|
class Project(Base):
|
|
294
295
|
__tablename__ = "projects"
|
|
295
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
296
296
|
name: Mapped[str]
|
|
297
297
|
description: Mapped[Optional[str]]
|
|
298
298
|
gradient_start_color: Mapped[str] = mapped_column(
|
|
@@ -325,7 +325,6 @@ class Project(Base):
|
|
|
325
325
|
|
|
326
326
|
class ProjectSession(Base):
|
|
327
327
|
__tablename__ = "project_sessions"
|
|
328
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
329
328
|
session_id: Mapped[str] = mapped_column(String, nullable=False, unique=True)
|
|
330
329
|
project_id: Mapped[int] = mapped_column(
|
|
331
330
|
ForeignKey("projects.id", ondelete="CASCADE"),
|
|
@@ -343,7 +342,6 @@ class ProjectSession(Base):
|
|
|
343
342
|
|
|
344
343
|
class Trace(Base):
|
|
345
344
|
__tablename__ = "traces"
|
|
346
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
347
345
|
project_rowid: Mapped[int] = mapped_column(
|
|
348
346
|
ForeignKey("projects.id", ondelete="CASCADE"),
|
|
349
347
|
nullable=False,
|
|
@@ -393,7 +391,6 @@ class Trace(Base):
|
|
|
393
391
|
|
|
394
392
|
class Span(Base):
|
|
395
393
|
__tablename__ = "spans"
|
|
396
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
397
394
|
trace_rowid: Mapped[int] = mapped_column(
|
|
398
395
|
ForeignKey("traces.id", ondelete="CASCADE"),
|
|
399
396
|
index=True,
|
|
@@ -660,7 +657,6 @@ async def init_models(engine: AsyncEngine) -> None:
|
|
|
660
657
|
|
|
661
658
|
class SpanAnnotation(Base):
|
|
662
659
|
__tablename__ = "span_annotations"
|
|
663
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
664
660
|
span_rowid: Mapped[int] = mapped_column(
|
|
665
661
|
ForeignKey("spans.id", ondelete="CASCADE"),
|
|
666
662
|
index=True,
|
|
@@ -687,7 +683,6 @@ class SpanAnnotation(Base):
|
|
|
687
683
|
|
|
688
684
|
class TraceAnnotation(Base):
|
|
689
685
|
__tablename__ = "trace_annotations"
|
|
690
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
691
686
|
trace_rowid: Mapped[int] = mapped_column(
|
|
692
687
|
ForeignKey("traces.id", ondelete="CASCADE"),
|
|
693
688
|
index=True,
|
|
@@ -714,7 +709,6 @@ class TraceAnnotation(Base):
|
|
|
714
709
|
|
|
715
710
|
class DocumentAnnotation(Base):
|
|
716
711
|
__tablename__ = "document_annotations"
|
|
717
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
718
712
|
span_rowid: Mapped[int] = mapped_column(
|
|
719
713
|
ForeignKey("spans.id", ondelete="CASCADE"),
|
|
720
714
|
index=True,
|
|
@@ -745,7 +739,6 @@ class DocumentAnnotation(Base):
|
|
|
745
739
|
|
|
746
740
|
class Dataset(Base):
|
|
747
741
|
__tablename__ = "datasets"
|
|
748
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
749
742
|
name: Mapped[str] = mapped_column(unique=True)
|
|
750
743
|
description: Mapped[Optional[str]]
|
|
751
744
|
metadata_: Mapped[dict[str, Any]] = mapped_column("metadata")
|
|
@@ -805,7 +798,6 @@ class Dataset(Base):
|
|
|
805
798
|
|
|
806
799
|
class DatasetVersion(Base):
|
|
807
800
|
__tablename__ = "dataset_versions"
|
|
808
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
809
801
|
dataset_id: Mapped[int] = mapped_column(
|
|
810
802
|
ForeignKey("datasets.id", ondelete="CASCADE"),
|
|
811
803
|
index=True,
|
|
@@ -817,7 +809,6 @@ class DatasetVersion(Base):
|
|
|
817
809
|
|
|
818
810
|
class DatasetExample(Base):
|
|
819
811
|
__tablename__ = "dataset_examples"
|
|
820
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
821
812
|
dataset_id: Mapped[int] = mapped_column(
|
|
822
813
|
ForeignKey("datasets.id", ondelete="CASCADE"),
|
|
823
814
|
index=True,
|
|
@@ -834,7 +825,6 @@ class DatasetExample(Base):
|
|
|
834
825
|
|
|
835
826
|
class DatasetExampleRevision(Base):
|
|
836
827
|
__tablename__ = "dataset_example_revisions"
|
|
837
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
838
828
|
dataset_example_id: Mapped[int] = mapped_column(
|
|
839
829
|
ForeignKey("dataset_examples.id", ondelete="CASCADE"),
|
|
840
830
|
index=True,
|
|
@@ -863,7 +853,6 @@ class DatasetExampleRevision(Base):
|
|
|
863
853
|
|
|
864
854
|
class Experiment(Base):
|
|
865
855
|
__tablename__ = "experiments"
|
|
866
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
867
856
|
dataset_id: Mapped[int] = mapped_column(
|
|
868
857
|
ForeignKey("datasets.id", ondelete="CASCADE"),
|
|
869
858
|
index=True,
|
|
@@ -885,7 +874,6 @@ class Experiment(Base):
|
|
|
885
874
|
|
|
886
875
|
class ExperimentRun(Base):
|
|
887
876
|
__tablename__ = "experiment_runs"
|
|
888
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
889
877
|
experiment_id: Mapped[int] = mapped_column(
|
|
890
878
|
ForeignKey("experiments.id", ondelete="CASCADE"),
|
|
891
879
|
index=True,
|
|
@@ -928,7 +916,6 @@ class ExperimentRun(Base):
|
|
|
928
916
|
|
|
929
917
|
class ExperimentRunAnnotation(Base):
|
|
930
918
|
__tablename__ = "experiment_run_annotations"
|
|
931
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
932
919
|
experiment_run_id: Mapped[int] = mapped_column(
|
|
933
920
|
ForeignKey("experiment_runs.id", ondelete="CASCADE"),
|
|
934
921
|
index=True,
|
|
@@ -956,14 +943,12 @@ class ExperimentRunAnnotation(Base):
|
|
|
956
943
|
|
|
957
944
|
class UserRole(Base):
|
|
958
945
|
__tablename__ = "user_roles"
|
|
959
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
960
946
|
name: Mapped[str] = mapped_column(unique=True, index=True)
|
|
961
947
|
users: Mapped[list["User"]] = relationship("User", back_populates="role")
|
|
962
948
|
|
|
963
949
|
|
|
964
950
|
class User(Base):
|
|
965
951
|
__tablename__ = "users"
|
|
966
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
967
952
|
user_role_id: Mapped[int] = mapped_column(
|
|
968
953
|
ForeignKey("user_roles.id", ondelete="CASCADE"),
|
|
969
954
|
index=True,
|
|
@@ -1038,7 +1023,6 @@ class User(Base):
|
|
|
1038
1023
|
|
|
1039
1024
|
class PasswordResetToken(Base):
|
|
1040
1025
|
__tablename__ = "password_reset_tokens"
|
|
1041
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1042
1026
|
user_id: Mapped[int] = mapped_column(
|
|
1043
1027
|
ForeignKey("users.id", ondelete="CASCADE"),
|
|
1044
1028
|
unique=True,
|
|
@@ -1052,7 +1036,6 @@ class PasswordResetToken(Base):
|
|
|
1052
1036
|
|
|
1053
1037
|
class RefreshToken(Base):
|
|
1054
1038
|
__tablename__ = "refresh_tokens"
|
|
1055
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1056
1039
|
user_id: Mapped[int] = mapped_column(
|
|
1057
1040
|
ForeignKey("users.id", ondelete="CASCADE"),
|
|
1058
1041
|
index=True,
|
|
@@ -1065,7 +1048,6 @@ class RefreshToken(Base):
|
|
|
1065
1048
|
|
|
1066
1049
|
class AccessToken(Base):
|
|
1067
1050
|
__tablename__ = "access_tokens"
|
|
1068
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1069
1051
|
user_id: Mapped[int] = mapped_column(
|
|
1070
1052
|
ForeignKey("users.id", ondelete="CASCADE"),
|
|
1071
1053
|
index=True,
|
|
@@ -1083,7 +1065,6 @@ class AccessToken(Base):
|
|
|
1083
1065
|
|
|
1084
1066
|
class ApiKey(Base):
|
|
1085
1067
|
__tablename__ = "api_keys"
|
|
1086
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1087
1068
|
user_id: Mapped[int] = mapped_column(
|
|
1088
1069
|
ForeignKey("users.id", ondelete="CASCADE"),
|
|
1089
1070
|
index=True,
|
|
@@ -1099,7 +1080,6 @@ class ApiKey(Base):
|
|
|
1099
1080
|
class PromptLabel(Base):
|
|
1100
1081
|
__tablename__ = "prompt_labels"
|
|
1101
1082
|
|
|
1102
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1103
1083
|
name: Mapped[str] = mapped_column(String, unique=True, index=True, nullable=False)
|
|
1104
1084
|
description: Mapped[Optional[str]]
|
|
1105
1085
|
color: Mapped[str] = mapped_column(String, nullable=True)
|
|
@@ -1115,7 +1095,6 @@ class PromptLabel(Base):
|
|
|
1115
1095
|
class Prompt(Base):
|
|
1116
1096
|
__tablename__ = "prompts"
|
|
1117
1097
|
|
|
1118
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1119
1098
|
source_prompt_id: Mapped[Optional[int]] = mapped_column(
|
|
1120
1099
|
ForeignKey("prompts.id", ondelete="SET NULL"),
|
|
1121
1100
|
index=True,
|
|
@@ -1154,7 +1133,6 @@ class Prompt(Base):
|
|
|
1154
1133
|
class PromptPromptLabel(Base):
|
|
1155
1134
|
__tablename__ = "prompts_prompt_labels"
|
|
1156
1135
|
|
|
1157
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1158
1136
|
prompt_label_id: Mapped[int] = mapped_column(
|
|
1159
1137
|
ForeignKey("prompt_labels.id", ondelete="CASCADE"),
|
|
1160
1138
|
index=True,
|
|
@@ -1177,7 +1155,6 @@ class PromptPromptLabel(Base):
|
|
|
1177
1155
|
class PromptVersion(Base):
|
|
1178
1156
|
__tablename__ = "prompt_versions"
|
|
1179
1157
|
|
|
1180
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1181
1158
|
prompt_id: Mapped[int] = mapped_column(
|
|
1182
1159
|
ForeignKey("prompts.id", ondelete="CASCADE"),
|
|
1183
1160
|
index=True,
|
|
@@ -1227,7 +1204,6 @@ class PromptVersion(Base):
|
|
|
1227
1204
|
class PromptVersionTag(Base):
|
|
1228
1205
|
__tablename__ = "prompt_version_tags"
|
|
1229
1206
|
|
|
1230
|
-
id: Mapped[int] = mapped_column(primary_key=True)
|
|
1231
1207
|
name: Mapped[Identifier] = mapped_column(_Identifier, nullable=False)
|
|
1232
1208
|
description: Mapped[Optional[str]] = mapped_column(String, nullable=True)
|
|
1233
1209
|
prompt_id: Mapped[int] = mapped_column(
|
phoenix/server/api/context.py
CHANGED
|
@@ -41,8 +41,8 @@ from phoenix.server.api.dataloaders import (
|
|
|
41
41
|
SpanByIdDataLoader,
|
|
42
42
|
SpanDatasetExamplesDataLoader,
|
|
43
43
|
SpanDescendantsDataLoader,
|
|
44
|
-
SpanFieldsDataLoader,
|
|
45
44
|
SpanProjectsDataLoader,
|
|
45
|
+
TableFieldsDataLoader,
|
|
46
46
|
TokenCountDataLoader,
|
|
47
47
|
TraceByTraceIdsDataLoader,
|
|
48
48
|
TraceRootSpansDataLoader,
|
|
@@ -76,6 +76,7 @@ class DataLoaders:
|
|
|
76
76
|
experiment_sequence_number: ExperimentSequenceNumberDataLoader
|
|
77
77
|
latency_ms_quantile: LatencyMsQuantileDataLoader
|
|
78
78
|
min_start_or_max_end_times: MinStartOrMaxEndTimeDataLoader
|
|
79
|
+
project_fields: TableFieldsDataLoader
|
|
79
80
|
prompt_version_sequence_number: PromptVersionSequenceNumberDataLoader
|
|
80
81
|
record_counts: RecordCountDataLoader
|
|
81
82
|
session_first_inputs: SessionIODataLoader
|
|
@@ -88,10 +89,11 @@ class DataLoaders:
|
|
|
88
89
|
span_by_id: SpanByIdDataLoader
|
|
89
90
|
span_dataset_examples: SpanDatasetExamplesDataLoader
|
|
90
91
|
span_descendants: SpanDescendantsDataLoader
|
|
91
|
-
span_fields:
|
|
92
|
+
span_fields: TableFieldsDataLoader
|
|
92
93
|
span_projects: SpanProjectsDataLoader
|
|
93
94
|
token_counts: TokenCountDataLoader
|
|
94
95
|
trace_by_trace_ids: TraceByTraceIdsDataLoader
|
|
96
|
+
trace_fields: TableFieldsDataLoader
|
|
95
97
|
trace_root_spans: TraceRootSpansDataLoader
|
|
96
98
|
project_by_name: ProjectByNameDataLoader
|
|
97
99
|
users: UsersDataLoader
|
|
@@ -29,8 +29,8 @@ from .span_annotations import SpanAnnotationsDataLoader
|
|
|
29
29
|
from .span_by_id import SpanByIdDataLoader
|
|
30
30
|
from .span_dataset_examples import SpanDatasetExamplesDataLoader
|
|
31
31
|
from .span_descendants import SpanDescendantsDataLoader
|
|
32
|
-
from .span_fields import SpanFieldsDataLoader
|
|
33
32
|
from .span_projects import SpanProjectsDataLoader
|
|
33
|
+
from .table_fields import TableFieldsDataLoader
|
|
34
34
|
from .token_counts import TokenCountCache, TokenCountDataLoader
|
|
35
35
|
from .trace_by_trace_ids import TraceByTraceIdsDataLoader
|
|
36
36
|
from .trace_root_spans import TraceRootSpansDataLoader
|
|
@@ -60,11 +60,11 @@ __all__ = [
|
|
|
60
60
|
"SessionNumTracesWithErrorDataLoader",
|
|
61
61
|
"SessionTokenUsagesDataLoader",
|
|
62
62
|
"SessionTraceLatencyMsQuantileDataLoader",
|
|
63
|
-
"SpanFieldsDataLoader",
|
|
64
63
|
"SpanByIdDataLoader",
|
|
65
64
|
"SpanDatasetExamplesDataLoader",
|
|
66
65
|
"SpanDescendantsDataLoader",
|
|
67
66
|
"SpanProjectsDataLoader",
|
|
67
|
+
"TableFieldsDataLoader",
|
|
68
68
|
"TokenCountDataLoader",
|
|
69
69
|
"TraceByTraceIdsDataLoader",
|
|
70
70
|
"TraceRootSpansDataLoader",
|
|
@@ -8,35 +8,36 @@ from typing_extensions import TypeAlias
|
|
|
8
8
|
from phoenix.db import models
|
|
9
9
|
from phoenix.server.types import DbSessionFactory
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
RowId: TypeAlias = int
|
|
12
12
|
|
|
13
|
-
Key: TypeAlias = tuple[
|
|
13
|
+
Key: TypeAlias = tuple[RowId, QueryableAttribute[Any]]
|
|
14
14
|
Result: TypeAlias = Any
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
_ResultColumnPosition: TypeAlias = int
|
|
18
17
|
_AttrStrIdentifier: TypeAlias = str
|
|
19
18
|
|
|
20
19
|
|
|
21
|
-
class
|
|
22
|
-
def __init__(self, db: DbSessionFactory) -> None:
|
|
20
|
+
class TableFieldsDataLoader(DataLoader[Key, Result]):
|
|
21
|
+
def __init__(self, db: DbSessionFactory, table: type[models.Base]) -> None:
|
|
23
22
|
super().__init__(load_fn=self._load_fn)
|
|
24
23
|
self._db = db
|
|
24
|
+
self._table = table
|
|
25
25
|
|
|
26
26
|
async def _load_fn(self, keys: Iterable[Key]) -> list[Union[Result, ValueError]]:
|
|
27
|
-
result: dict[tuple[
|
|
28
|
-
stmt, attr_strs = _get_stmt(keys)
|
|
27
|
+
result: dict[tuple[RowId, _AttrStrIdentifier], Result] = {}
|
|
28
|
+
stmt, attr_strs = _get_stmt(keys, self._table)
|
|
29
29
|
async with self._db() as session:
|
|
30
30
|
data = await session.stream(stmt)
|
|
31
31
|
async for row in data:
|
|
32
|
-
|
|
32
|
+
rowid: RowId = row[0] # models.Span's primary key
|
|
33
33
|
for i, value in enumerate(row[1:]):
|
|
34
|
-
result[
|
|
35
|
-
return [result.get((
|
|
34
|
+
result[rowid, attr_strs[i]] = value
|
|
35
|
+
return [result.get((rowid, str(attr))) for rowid, attr in keys]
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
def _get_stmt(
|
|
39
|
-
keys: Iterable[
|
|
39
|
+
keys: Iterable[tuple[RowId, QueryableAttribute[Any]]],
|
|
40
|
+
table: type[models.Base],
|
|
40
41
|
) -> tuple[
|
|
41
42
|
Select[Any],
|
|
42
43
|
dict[_ResultColumnPosition, _AttrStrIdentifier],
|
|
@@ -52,7 +53,8 @@ def _get_stmt(
|
|
|
52
53
|
|
|
53
54
|
Args:
|
|
54
55
|
keys (list[Key]): A list of tuples, where each tuple contains an integer ID, i.e. the
|
|
55
|
-
primary key of
|
|
56
|
+
primary key of table, and a QueryableAttribute.
|
|
57
|
+
table (models.Base): The table to query.
|
|
56
58
|
|
|
57
59
|
Returns:
|
|
58
60
|
tuple: A tuple containing:
|
|
@@ -61,16 +63,16 @@ def _get_stmt(
|
|
|
61
63
|
at the second column (because the first column is the span's primary key)--in the
|
|
62
64
|
result to the attribute's string identifier.
|
|
63
65
|
"""
|
|
64
|
-
|
|
66
|
+
rowids: set[RowId] = set()
|
|
65
67
|
attrs: dict[_AttrStrIdentifier, QueryableAttribute[Any]] = {}
|
|
66
68
|
joins = set()
|
|
67
|
-
for
|
|
68
|
-
|
|
69
|
+
for rowid, attr in keys:
|
|
70
|
+
rowids.add(rowid)
|
|
69
71
|
attrs[str(attr)] = attr
|
|
70
|
-
if (entity := attr.parent.entity) is not
|
|
72
|
+
if (entity := attr.parent.entity) is not table:
|
|
71
73
|
joins.add(entity)
|
|
72
|
-
stmt = select(
|
|
73
|
-
for
|
|
74
|
-
stmt = stmt.join(
|
|
74
|
+
stmt = select(table.id).where(table.id.in_(rowids))
|
|
75
|
+
for other_table in joins:
|
|
76
|
+
stmt = stmt.join(other_table)
|
|
75
77
|
identifiers, columns = zip(*attrs.items())
|
|
76
78
|
return stmt.add_columns(*columns), dict(enumerate(identifiers))
|
|
@@ -806,6 +806,10 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
806
806
|
raise NotImplementedError
|
|
807
807
|
elif isinstance(event, anthropic_streaming._types.CitationEvent):
|
|
808
808
|
raise NotImplementedError
|
|
809
|
+
elif isinstance(event, anthropic_streaming._types.ThinkingEvent):
|
|
810
|
+
raise NotImplementedError
|
|
811
|
+
elif isinstance(event, anthropic_streaming._types.SignatureEvent):
|
|
812
|
+
raise NotImplementedError
|
|
809
813
|
else:
|
|
810
814
|
assert_never(event)
|
|
811
815
|
|
|
@@ -348,6 +348,7 @@ class AnthropicToolDefinition(PromptModel):
|
|
|
348
348
|
class PromptOpenAIInvocationParametersContent(PromptModel):
|
|
349
349
|
temperature: float = UNDEFINED
|
|
350
350
|
max_tokens: int = UNDEFINED
|
|
351
|
+
max_completion_tokens: int = UNDEFINED
|
|
351
352
|
frequency_penalty: float = UNDEFINED
|
|
352
353
|
presence_penalty: float = UNDEFINED
|
|
353
354
|
top_p: float = UNDEFINED
|
phoenix/server/api/queries.py
CHANGED
|
@@ -66,7 +66,7 @@ from phoenix.server.api.types.PromptVersion import PromptVersion, to_gql_prompt_
|
|
|
66
66
|
from phoenix.server.api.types.SortDir import SortDir
|
|
67
67
|
from phoenix.server.api.types.Span import Span
|
|
68
68
|
from phoenix.server.api.types.SystemApiKey import SystemApiKey
|
|
69
|
-
from phoenix.server.api.types.Trace import
|
|
69
|
+
from phoenix.server.api.types.Trace import Trace
|
|
70
70
|
from phoenix.server.api.types.User import User, to_gql_user
|
|
71
71
|
from phoenix.server.api.types.UserApiKey import UserApiKey, to_gql_api_key
|
|
72
72
|
from phoenix.server.api.types.UserRole import UserRole
|
|
@@ -236,10 +236,8 @@ class Query:
|
|
|
236
236
|
projects = await session.stream_scalars(stmt)
|
|
237
237
|
data = [
|
|
238
238
|
Project(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
gradient_start_color=project.gradient_start_color,
|
|
242
|
-
gradient_end_color=project.gradient_end_color,
|
|
239
|
+
project_rowid=project.id,
|
|
240
|
+
db_project=project,
|
|
243
241
|
)
|
|
244
242
|
async for project in projects
|
|
245
243
|
]
|
|
@@ -448,21 +446,14 @@ class Query:
|
|
|
448
446
|
embedding_dimension = info.context.model.embedding_dimensions[node_id]
|
|
449
447
|
return to_gql_embedding_dimension(node_id, embedding_dimension)
|
|
450
448
|
elif type_name == "Project":
|
|
451
|
-
project_stmt = select(
|
|
452
|
-
models.Project.id,
|
|
453
|
-
models.Project.name,
|
|
454
|
-
models.Project.gradient_start_color,
|
|
455
|
-
models.Project.gradient_end_color,
|
|
456
|
-
).where(models.Project.id == node_id)
|
|
449
|
+
project_stmt = select(models.Project).filter_by(id=node_id)
|
|
457
450
|
async with info.context.db() as session:
|
|
458
|
-
project =
|
|
451
|
+
project = await session.scalar(project_stmt)
|
|
459
452
|
if project is None:
|
|
460
453
|
raise NotFound(f"Unknown project: {id}")
|
|
461
454
|
return Project(
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
gradient_start_color=project.gradient_start_color,
|
|
465
|
-
gradient_end_color=project.gradient_end_color,
|
|
455
|
+
project_rowid=project.id,
|
|
456
|
+
db_project=project,
|
|
466
457
|
)
|
|
467
458
|
elif type_name == "Trace":
|
|
468
459
|
trace_stmt = select(models.Trace).filter_by(id=node_id)
|
|
@@ -470,7 +461,7 @@ class Query:
|
|
|
470
461
|
trace = await session.scalar(trace_stmt)
|
|
471
462
|
if trace is None:
|
|
472
463
|
raise NotFound(f"Unknown trace: {id}")
|
|
473
|
-
return
|
|
464
|
+
return Trace(trace_rowid=trace.id, db_trace=trace)
|
|
474
465
|
elif type_name == Span.__name__:
|
|
475
466
|
span_stmt = (
|
|
476
467
|
select(models.Span)
|