arize-phoenix 11.21.0__py3-none-any.whl → 11.22.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-11.21.0.dist-info → arize_phoenix-11.22.0.dist-info}/METADATA +6 -3
- {arize_phoenix-11.21.0.dist-info → arize_phoenix-11.22.0.dist-info}/RECORD +20 -20
- phoenix/db/models.py +9 -2
- phoenix/server/api/queries.py +46 -34
- phoenix/server/cost_tracking/model_cost_manifest.json +3 -3
- phoenix/server/static/.vite/manifest.json +43 -43
- phoenix/server/static/assets/{components-BNcxEjYs.js → components-BpxtWe3X.js} +182 -180
- phoenix/server/static/assets/{index-CKIBKnVD.js → index-Bsnzoh7f.js} +22 -12
- phoenix/server/static/assets/{pages-3RoC-adr.js → pages-BLzMd6Fl.js} +443 -435
- phoenix/server/static/assets/{vendor-BbqekBfb.js → vendor-D9AxkwFX.js} +1 -1
- phoenix/server/static/assets/{vendor-arizeai-CEwHhYfL.js → vendor-arizeai-BSWqLnk0.js} +1 -1
- phoenix/server/static/assets/{vendor-codemirror-CHApHLLJ.js → vendor-codemirror-DQOFTPza.js} +3 -3
- phoenix/server/static/assets/{vendor-recharts-Bqf7C6Cm.js → vendor-recharts-BcJHP7DH.js} +1 -1
- phoenix/server/static/assets/{vendor-shiki-BQ88Q1b1.js → vendor-shiki-DTHqzvBl.js} +1 -1
- phoenix/server/templates/index.html +1 -1
- phoenix/version.py +1 -1
- {arize_phoenix-11.21.0.dist-info → arize_phoenix-11.22.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-11.21.0.dist-info → arize_phoenix-11.22.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-11.21.0.dist-info → arize_phoenix-11.22.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-11.21.0.dist-info → arize_phoenix-11.22.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 11.
|
|
3
|
+
Version: 11.22.0
|
|
4
4
|
Summary: AI Observability and Evaluation
|
|
5
5
|
Project-URL: Documentation, https://arize.com/docs/phoenix/
|
|
6
6
|
Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
|
|
@@ -38,6 +38,7 @@ Requires-Dist: opentelemetry-exporter-otlp
|
|
|
38
38
|
Requires-Dist: opentelemetry-proto>=1.12.0
|
|
39
39
|
Requires-Dist: opentelemetry-sdk
|
|
40
40
|
Requires-Dist: opentelemetry-semantic-conventions
|
|
41
|
+
Requires-Dist: orjson
|
|
41
42
|
Requires-Dist: pandas>=1.0
|
|
42
43
|
Requires-Dist: prometheus-client
|
|
43
44
|
Requires-Dist: protobuf>=4.25.8
|
|
@@ -167,7 +168,7 @@ Description-Content-Type: text/markdown
|
|
|
167
168
|
<a target="_blank" href="https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp">
|
|
168
169
|
<img src="https://badge.mcpx.dev?status=on" title="MCP Enabled"/>
|
|
169
170
|
</a>
|
|
170
|
-
<a href="
|
|
171
|
+
<a href="cursor://anysphere.cursor-deeplink/mcp/install?name=phoenix&config=eyJjb21tYW5kIjoibnB4IC15IEBhcml6ZWFpL3Bob2VuaXgtbWNwQGxhdGVzdCAtLWJhc2VVcmwgaHR0cHM6Ly9teS1waG9lbml4LmNvbSAtLWFwaUtleSB5b3VyLWFwaS1rZXkifQ%3D%3D"><img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Add Arize Phoenix MCP server to Cursor" height=20 /></a>
|
|
171
172
|
</p>
|
|
172
173
|
|
|
173
174
|
Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
|
|
@@ -254,14 +255,16 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
254
255
|
| Integration | Package | Version Badge |
|
|
255
256
|
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
256
257
|
| [LangChain4j](https://github.com/Arize-ai/openinference/tree/main/java/instrumentation/openinference-instrumentation-langchain4j) | `openinference-instrumentation-langchain4j` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-langchain4j) |
|
|
258
|
+
| [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
|
|
257
259
|
|
|
258
260
|
### Platforms
|
|
259
261
|
|
|
260
262
|
| Platform | Description | Docs |
|
|
261
263
|
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
264
|
+
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
|
|
262
265
|
| [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
|
|
266
|
+
| [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
|
|
263
267
|
| [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
|
|
264
|
-
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
|
|
265
268
|
| [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
|
|
266
269
|
|
|
267
270
|
## Community
|
|
@@ -6,7 +6,7 @@ phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
|
|
|
6
6
|
phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
7
7
|
phoenix/services.py,sha256=ngkyKGVatX3cO2WJdo2hKdaVKP-xJCMvqthvga6kJss,5196
|
|
8
8
|
phoenix/settings.py,sha256=2kHfT3BNOVd4dAO1bq-syEQbHSG8oX2-7NhOwK2QREk,896
|
|
9
|
-
phoenix/version.py,sha256=
|
|
9
|
+
phoenix/version.py,sha256=Cc-A-8nyQYw0qQS2BVj0clf1uJ2Ig5KOVr65YywGwBk,24
|
|
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
|
|
@@ -22,7 +22,7 @@ phoenix/db/enums.py,sha256=w3O5YuJEEzVTwVDZb8b2UUFhU8yK_GosF081VVrrno0,188
|
|
|
22
22
|
phoenix/db/facilitator.py,sha256=UIC-l14p3R8GFVWPmz04NY-CDm_zAynXCAuIYpj_W_g,20254
|
|
23
23
|
phoenix/db/helpers.py,sha256=jqX13kO4qdGozDRdw6nME4BloPtzEQd0fweQpGHbj3I,15078
|
|
24
24
|
phoenix/db/migrate.py,sha256=oUrXH8yEbcpL4eh09aSCuUiSrhFli0eT5D_j4ZmYChY,2797
|
|
25
|
-
phoenix/db/models.py,sha256=
|
|
25
|
+
phoenix/db/models.py,sha256=5MHQA6oHD3O7YJyb3XryROn8VMfZh5zurYuPT1KqCrA,62045
|
|
26
26
|
phoenix/db/pg_config.py,sha256=h6mB7qF7t4Zk6VGvAiyefHGVu74o-yJynaWzeE39k9Y,6001
|
|
27
27
|
phoenix/db/insertion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
phoenix/db/insertion/constants.py,sha256=8wifm7X-1XvroZ__R2Gc96NsgLhTDn0zXl4lehlXtcA,70
|
|
@@ -112,7 +112,7 @@ phoenix/server/api/auth.py,sha256=AyYhnZIbY9ALVjg2K6aC2UXSa3Pva5GVDBXyaZ3nD3o,27
|
|
|
112
112
|
phoenix/server/api/context.py,sha256=mqsq_8Ru50e-PxKWNTzh9zptb1PFjYFUf58uW59UYL0,8996
|
|
113
113
|
phoenix/server/api/exceptions.py,sha256=E2W0x63CBzc0CoQPptrLr9nZxPF9zIP8MCJ3RuJMddw,1322
|
|
114
114
|
phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
|
|
115
|
-
phoenix/server/api/queries.py,sha256=
|
|
115
|
+
phoenix/server/api/queries.py,sha256=rHV8gBqCwNjuDCtfKTfBcJB-eWxbJFivZzFV3mId1HY,67524
|
|
116
116
|
phoenix/server/api/schema.py,sha256=fcs36xQwFF_Qe41_5cWR8wYpDvOrnbcyTeo5WNMbDsA,1702
|
|
117
117
|
phoenix/server/api/subscriptions.py,sha256=U7JZl-FGfsaIhRkIFdeSQLqR7xCS7CY1h-21BOAcaqY,25439
|
|
118
118
|
phoenix/server/api/utils.py,sha256=quCBRcusc6PUq9tJq7M8PgwFZp7nXgVAxtbw8feribY,833
|
|
@@ -362,7 +362,7 @@ phoenix/server/cost_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
362
362
|
phoenix/server/cost_tracking/cost_details_calculator.py,sha256=Tt0YcuLhgPuXKWJemWVmYQfG0xQUvH4VziIj6KcDnoA,8945
|
|
363
363
|
phoenix/server/cost_tracking/cost_model_lookup.py,sha256=jhtVdnQBzrTUHeOGPWgOebk-Io5hpJ1vAgWOu8ojeJ4,6801
|
|
364
364
|
phoenix/server/cost_tracking/helpers.py,sha256=Pk6ECjnYreTxrldtRwxnwFcxIPVsvDq_yAwDA_spkOc,2122
|
|
365
|
-
phoenix/server/cost_tracking/model_cost_manifest.json,sha256=
|
|
365
|
+
phoenix/server/cost_tracking/model_cost_manifest.json,sha256=kE8VrBbvdqDy1ijk8KWWs_76U-L_vcRUT5hVT418evY,63488
|
|
366
366
|
phoenix/server/cost_tracking/regex_specificity.py,sha256=9kqWuQ68C-hlwW25hr7BhFlRt5y2Nnpy0Ax3n9UN6Xk,11622
|
|
367
367
|
phoenix/server/cost_tracking/token_cost_calculator.py,sha256=2JEZnvusx2-xbhp8krp9EarjWuyGH2KO4e-ZwJX-K0s,1598
|
|
368
368
|
phoenix/server/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -391,19 +391,19 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
|
|
|
391
391
|
phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
|
|
392
392
|
phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
|
|
393
393
|
phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
|
|
394
|
-
phoenix/server/static/.vite/manifest.json,sha256=
|
|
395
|
-
phoenix/server/static/assets/components-
|
|
396
|
-
phoenix/server/static/assets/index-
|
|
397
|
-
phoenix/server/static/assets/pages-
|
|
398
|
-
phoenix/server/static/assets/vendor-BbqekBfb.js,sha256=8xINQdH4ikfrf8nr8mlO0B9YrKJ2FPecrA9qu5kPILo,2588857
|
|
394
|
+
phoenix/server/static/.vite/manifest.json,sha256=L9WBJyT2l2gR-LG3CyeiExo2Rup5jwoiQX8PIgFZNyU,2328
|
|
395
|
+
phoenix/server/static/assets/components-BpxtWe3X.js,sha256=KA4pvxdJLW1iYrdDdI58NVk6BTkX1TTQCBXmACsUsBQ,658851
|
|
396
|
+
phoenix/server/static/assets/index-Bsnzoh7f.js,sha256=3NN-kPtjv1osA0b7UBWCuFtzT4zTCLdj9JsmpjOPH4A,63323
|
|
397
|
+
phoenix/server/static/assets/pages-BLzMd6Fl.js,sha256=1bgG6yEdrcRROQgNBlNaWJobDvapV675AGUuuXWAOOM,1225308
|
|
399
398
|
phoenix/server/static/assets/vendor-CqDb5u4o.css,sha256=zIyFiNJKxMaQk8AvtLgt1rR01oO10d1MFndSDKH9Clw,5517
|
|
400
|
-
phoenix/server/static/assets/vendor-
|
|
401
|
-
phoenix/server/static/assets/vendor-
|
|
402
|
-
phoenix/server/static/assets/vendor-
|
|
403
|
-
phoenix/server/static/assets/vendor-
|
|
399
|
+
phoenix/server/static/assets/vendor-D9AxkwFX.js,sha256=SuOEpE881hapHLT3Kz8kbY-x5364JUvccjPQEOUh6Vs,2588857
|
|
400
|
+
phoenix/server/static/assets/vendor-arizeai-BSWqLnk0.js,sha256=fbqahxqa0MRvPZMsiNti_6JuV7M8xhfMhF15HJra40A,121514
|
|
401
|
+
phoenix/server/static/assets/vendor-codemirror-DQOFTPza.js,sha256=IVQ83VKGbEPr6DRuXLH68WUZcss7fenyrxqpXUTkZOg,402623
|
|
402
|
+
phoenix/server/static/assets/vendor-recharts-BcJHP7DH.js,sha256=QJKmp5Lt1HRuPntAW_fGqMQiOU5ppTb5q1fkn0Qt8fw,231651
|
|
403
|
+
phoenix/server/static/assets/vendor-shiki-DTHqzvBl.js,sha256=pcfuXAtd0wyejOEhnTkSh01OyITMTSGI2UniPUMN5RE,305160
|
|
404
404
|
phoenix/server/static/assets/vendor-three-BLWp5bic.js,sha256=vfSCVXS20jA0Ceo_O0mDxYBcROinWMdPE6RR4JXmtec,620972
|
|
405
405
|
phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
406
|
-
phoenix/server/templates/index.html,sha256=
|
|
406
|
+
phoenix/server/templates/index.html,sha256=QAYh0TG5mg-GvDQUR09aD9ebl9Sfq0fYAcfIa5G7J6E,7148
|
|
407
407
|
phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
408
408
|
phoenix/session/client.py,sha256=Bl0Ov1tPrKX2-wBr7Kr49hQHgdBtyVfdhlMKcd5tURM,35583
|
|
409
409
|
phoenix/session/data_extractor.py,sha256=Y0RzYFaNy9fQj8PEIeQ76TBZ90_E1FW7bXu3K5x0EZY,2782
|
|
@@ -441,9 +441,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
|
|
|
441
441
|
phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
|
|
442
442
|
phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
443
443
|
phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
|
|
444
|
-
arize_phoenix-11.
|
|
445
|
-
arize_phoenix-11.
|
|
446
|
-
arize_phoenix-11.
|
|
447
|
-
arize_phoenix-11.
|
|
448
|
-
arize_phoenix-11.
|
|
449
|
-
arize_phoenix-11.
|
|
444
|
+
arize_phoenix-11.22.0.dist-info/METADATA,sha256=tGoY8S9yx3ezaQ7noUKioqq9B_nGHiEzpmvy-RiUdc4,31634
|
|
445
|
+
arize_phoenix-11.22.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
446
|
+
arize_phoenix-11.22.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
|
|
447
|
+
arize_phoenix-11.22.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
448
|
+
arize_phoenix-11.22.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
449
|
+
arize_phoenix-11.22.0.dist-info/RECORD,,
|
phoenix/db/models.py
CHANGED
|
@@ -2,6 +2,7 @@ import re
|
|
|
2
2
|
from datetime import datetime, timezone
|
|
3
3
|
from typing import Any, Iterable, Literal, Optional, Sequence, TypedDict, cast
|
|
4
4
|
|
|
5
|
+
import orjson
|
|
5
6
|
import sqlalchemy as sa
|
|
6
7
|
import sqlalchemy.sql as sql
|
|
7
8
|
from openinference.semconv.trace import RerankerAttributes, SpanAttributes
|
|
@@ -187,7 +188,10 @@ class JsonDict(TypeDecorator[dict[str, Any]]):
|
|
|
187
188
|
impl = JSON_
|
|
188
189
|
|
|
189
190
|
def process_bind_param(self, value: Optional[dict[str, Any]], _: Dialect) -> dict[str, Any]:
|
|
190
|
-
return value if isinstance(value, dict) else {}
|
|
191
|
+
return orjson.loads(orjson.dumps(value)) if isinstance(value, dict) else {}
|
|
192
|
+
|
|
193
|
+
def process_result_value(self, value: Optional[Any], _: Dialect) -> Optional[dict[str, Any]]:
|
|
194
|
+
return orjson.loads(orjson.dumps(value)) if isinstance(value, dict) and value else value
|
|
191
195
|
|
|
192
196
|
|
|
193
197
|
class JsonList(TypeDecorator[list[Any]]):
|
|
@@ -196,7 +200,10 @@ class JsonList(TypeDecorator[list[Any]]):
|
|
|
196
200
|
impl = JSON_
|
|
197
201
|
|
|
198
202
|
def process_bind_param(self, value: Optional[list[Any]], _: Dialect) -> list[Any]:
|
|
199
|
-
return value if isinstance(value, list) else []
|
|
203
|
+
return orjson.loads(orjson.dumps(value)) if isinstance(value, list) else []
|
|
204
|
+
|
|
205
|
+
def process_result_value(self, value: Optional[Any], _: Dialect) -> Optional[list[Any]]:
|
|
206
|
+
return orjson.loads(orjson.dumps(value)) if isinstance(value, list) and value else value
|
|
200
207
|
|
|
201
208
|
|
|
202
209
|
class UtcTimeStamp(TypeDecorator[datetime]):
|
phoenix/server/api/queries.py
CHANGED
|
@@ -7,8 +7,8 @@ from typing import cast as type_cast
|
|
|
7
7
|
import numpy as np
|
|
8
8
|
import numpy.typing as npt
|
|
9
9
|
import strawberry
|
|
10
|
-
from sqlalchemy import ColumnElement, String, and_, case, cast,
|
|
11
|
-
from sqlalchemy.orm import aliased, joinedload
|
|
10
|
+
from sqlalchemy import ColumnElement, String, and_, case, cast, func, select, text
|
|
11
|
+
from sqlalchemy.orm import aliased, joinedload, load_only
|
|
12
12
|
from starlette.authentication import UnauthenticatedUser
|
|
13
13
|
from strawberry import ID, UNSET
|
|
14
14
|
from strawberry.relay import Connection, GlobalID, Node
|
|
@@ -375,41 +375,52 @@ class Query:
|
|
|
375
375
|
raise BadRequest("Compare experiment IDs cannot contain the base experiment ID")
|
|
376
376
|
if len(set(compare_experiment_ids)) < len(compare_experiment_ids):
|
|
377
377
|
raise BadRequest("Compare experiment IDs must be unique")
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
378
|
+
|
|
379
|
+
try:
|
|
380
|
+
base_experiment_rowid = from_global_id_with_expected_type(
|
|
381
|
+
base_experiment_id, models.Experiment.__name__
|
|
382
|
+
)
|
|
383
|
+
except ValueError:
|
|
384
|
+
raise BadRequest(f"Invalid base experiment ID: {base_experiment_id}")
|
|
385
|
+
|
|
386
|
+
compare_experiment_rowids = []
|
|
387
|
+
for compare_experiment_id in compare_experiment_ids:
|
|
388
|
+
try:
|
|
389
|
+
compare_experiment_rowids.append(
|
|
390
|
+
from_global_id_with_expected_type(
|
|
391
|
+
compare_experiment_id, models.Experiment.__name__
|
|
392
|
+
)
|
|
393
|
+
)
|
|
394
|
+
except ValueError:
|
|
395
|
+
raise BadRequest(f"Invalid compare experiment ID: {compare_experiment_id}")
|
|
396
|
+
|
|
397
|
+
experiment_rowids = [base_experiment_rowid, *compare_experiment_rowids]
|
|
398
|
+
|
|
382
399
|
cursor = Cursor.from_string(after) if after else None
|
|
383
400
|
page_size = first or 50
|
|
384
401
|
|
|
385
402
|
async with info.context.db() as session:
|
|
386
|
-
|
|
387
|
-
await session.
|
|
403
|
+
experiments = (
|
|
404
|
+
await session.scalars(
|
|
388
405
|
select(
|
|
389
|
-
func.count(distinct(models.DatasetVersion.dataset_id)),
|
|
390
|
-
func.max(models.DatasetVersion.dataset_id),
|
|
391
|
-
func.max(models.DatasetVersion.id),
|
|
392
|
-
func.count(models.Experiment.id),
|
|
393
|
-
)
|
|
394
|
-
.select_from(models.DatasetVersion)
|
|
395
|
-
.join(
|
|
396
406
|
models.Experiment,
|
|
397
|
-
models.Experiment.dataset_version_id == models.DatasetVersion.id,
|
|
398
407
|
)
|
|
399
|
-
.where(
|
|
400
|
-
|
|
408
|
+
.where(models.Experiment.id.in_(experiment_rowids))
|
|
409
|
+
.options(
|
|
410
|
+
load_only(
|
|
411
|
+
models.Experiment.dataset_id, models.Experiment.dataset_version_id
|
|
412
|
+
)
|
|
401
413
|
)
|
|
402
414
|
)
|
|
403
|
-
).
|
|
404
|
-
if
|
|
405
|
-
raise NotFound("No experiments could be found for input IDs.")
|
|
406
|
-
|
|
407
|
-
num_datasets, dataset_id, version_id, num_resolved_experiment_ids = validation_result
|
|
408
|
-
if num_datasets != 1:
|
|
409
|
-
raise BadRequest("Experiments must belong to the same dataset.")
|
|
410
|
-
if num_resolved_experiment_ids != len(experiment_ids):
|
|
415
|
+
).all()
|
|
416
|
+
if not experiments or len(experiments) < len(experiment_rowids):
|
|
411
417
|
raise NotFound("Unable to resolve one or more experiment IDs.")
|
|
412
|
-
|
|
418
|
+
num_datasets = len(set(experiment.dataset_id for experiment in experiments))
|
|
419
|
+
if num_datasets > 1:
|
|
420
|
+
raise BadRequest("Experiments must belong to the same dataset.")
|
|
421
|
+
base_experiment = next(
|
|
422
|
+
experiment for experiment in experiments if experiment.id == base_experiment_rowid
|
|
423
|
+
)
|
|
413
424
|
revision_ids = (
|
|
414
425
|
select(func.max(models.DatasetExampleRevision.id))
|
|
415
426
|
.join(
|
|
@@ -418,8 +429,9 @@ class Query:
|
|
|
418
429
|
)
|
|
419
430
|
.where(
|
|
420
431
|
and_(
|
|
421
|
-
models.DatasetExampleRevision.dataset_version_id
|
|
422
|
-
|
|
432
|
+
models.DatasetExampleRevision.dataset_version_id
|
|
433
|
+
<= base_experiment.dataset_version_id,
|
|
434
|
+
models.DatasetExample.dataset_id == base_experiment.dataset_id,
|
|
423
435
|
)
|
|
424
436
|
)
|
|
425
437
|
.group_by(models.DatasetExampleRevision.dataset_example_id)
|
|
@@ -447,7 +459,7 @@ class Query:
|
|
|
447
459
|
examples_query = update_examples_query_with_filter_condition(
|
|
448
460
|
query=examples_query,
|
|
449
461
|
filter_condition=filter_condition,
|
|
450
|
-
experiment_ids=
|
|
462
|
+
experiment_ids=experiment_rowids,
|
|
451
463
|
)
|
|
452
464
|
|
|
453
465
|
examples = (await session.scalars(examples_query)).all()
|
|
@@ -466,7 +478,7 @@ class Query:
|
|
|
466
478
|
models.ExperimentRun.dataset_example_id.in_(
|
|
467
479
|
example.id for example in examples
|
|
468
480
|
),
|
|
469
|
-
models.ExperimentRun.experiment_id.in_(
|
|
481
|
+
models.ExperimentRun.experiment_id.in_(experiment_rowids),
|
|
470
482
|
)
|
|
471
483
|
)
|
|
472
484
|
.options(joinedload(models.ExperimentRun.trace).load_only(models.Trace.trace_id))
|
|
@@ -479,7 +491,7 @@ class Query:
|
|
|
479
491
|
cursors_and_nodes = []
|
|
480
492
|
for example in examples:
|
|
481
493
|
run_comparison_items = []
|
|
482
|
-
for experiment_id in
|
|
494
|
+
for experiment_id in experiment_rowids:
|
|
483
495
|
run_comparison_items.append(
|
|
484
496
|
RunComparisonItem(
|
|
485
497
|
experiment_id=GlobalID(Experiment.__name__, str(experiment_id)),
|
|
@@ -496,7 +508,7 @@ class Query:
|
|
|
496
508
|
example=DatasetExample(
|
|
497
509
|
id_attr=example.id,
|
|
498
510
|
created_at=example.created_at,
|
|
499
|
-
version_id=
|
|
511
|
+
version_id=base_experiment.dataset_version_id,
|
|
500
512
|
),
|
|
501
513
|
run_comparison_items=run_comparison_items,
|
|
502
514
|
)
|
|
@@ -1491,7 +1503,7 @@ class Query:
|
|
|
1491
1503
|
return None
|
|
1492
1504
|
|
|
1493
1505
|
@strawberry.field
|
|
1494
|
-
async def
|
|
1506
|
+
async def get_project_session_by_id(
|
|
1495
1507
|
self,
|
|
1496
1508
|
info: Info[Context, None],
|
|
1497
1509
|
session_id: str,
|
|
@@ -2182,17 +2182,17 @@
|
|
|
2182
2182
|
"source": "litellm",
|
|
2183
2183
|
"token_prices": [
|
|
2184
2184
|
{
|
|
2185
|
-
"base_rate":
|
|
2185
|
+
"base_rate": 1.25e-6,
|
|
2186
2186
|
"is_prompt": true,
|
|
2187
2187
|
"token_type": "input"
|
|
2188
2188
|
},
|
|
2189
2189
|
{
|
|
2190
|
-
"base_rate": 0.
|
|
2190
|
+
"base_rate": 0.00001,
|
|
2191
2191
|
"is_prompt": false,
|
|
2192
2192
|
"token_type": "output"
|
|
2193
2193
|
},
|
|
2194
2194
|
{
|
|
2195
|
-
"base_rate": 1.25e-
|
|
2195
|
+
"base_rate": 1.25e-7,
|
|
2196
2196
|
"is_prompt": true,
|
|
2197
2197
|
"token_type": "cache_read"
|
|
2198
2198
|
}
|
|
@@ -1,28 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-BpxtWe3X.js": {
|
|
3
|
+
"file": "assets/components-BpxtWe3X.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
|
-
"_vendor-
|
|
7
|
-
"_pages-
|
|
8
|
-
"_vendor-arizeai-
|
|
9
|
-
"_vendor-codemirror-
|
|
6
|
+
"_vendor-D9AxkwFX.js",
|
|
7
|
+
"_pages-BLzMd6Fl.js",
|
|
8
|
+
"_vendor-arizeai-BSWqLnk0.js",
|
|
9
|
+
"_vendor-codemirror-DQOFTPza.js",
|
|
10
10
|
"_vendor-three-BLWp5bic.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-BLzMd6Fl.js": {
|
|
14
|
+
"file": "assets/pages-BLzMd6Fl.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
|
-
"_vendor-
|
|
18
|
-
"_vendor-arizeai-
|
|
19
|
-
"_components-
|
|
20
|
-
"_vendor-codemirror-
|
|
21
|
-
"_vendor-recharts-
|
|
17
|
+
"_vendor-D9AxkwFX.js",
|
|
18
|
+
"_vendor-arizeai-BSWqLnk0.js",
|
|
19
|
+
"_components-BpxtWe3X.js",
|
|
20
|
+
"_vendor-codemirror-DQOFTPza.js",
|
|
21
|
+
"_vendor-recharts-BcJHP7DH.js"
|
|
22
22
|
]
|
|
23
23
|
},
|
|
24
|
-
"_vendor-
|
|
25
|
-
"file": "assets/vendor-
|
|
24
|
+
"_vendor-CqDb5u4o.css": {
|
|
25
|
+
"file": "assets/vendor-CqDb5u4o.css",
|
|
26
|
+
"src": "_vendor-CqDb5u4o.css"
|
|
27
|
+
},
|
|
28
|
+
"_vendor-D9AxkwFX.js": {
|
|
29
|
+
"file": "assets/vendor-D9AxkwFX.js",
|
|
26
30
|
"name": "vendor",
|
|
27
31
|
"imports": [
|
|
28
32
|
"_vendor-three-BLWp5bic.js"
|
|
@@ -31,43 +35,39 @@
|
|
|
31
35
|
"assets/vendor-CqDb5u4o.css"
|
|
32
36
|
]
|
|
33
37
|
},
|
|
34
|
-
"_vendor-
|
|
35
|
-
"file": "assets/vendor-
|
|
36
|
-
"src": "_vendor-CqDb5u4o.css"
|
|
37
|
-
},
|
|
38
|
-
"_vendor-arizeai-CEwHhYfL.js": {
|
|
39
|
-
"file": "assets/vendor-arizeai-CEwHhYfL.js",
|
|
38
|
+
"_vendor-arizeai-BSWqLnk0.js": {
|
|
39
|
+
"file": "assets/vendor-arizeai-BSWqLnk0.js",
|
|
40
40
|
"name": "vendor-arizeai",
|
|
41
41
|
"imports": [
|
|
42
|
-
"_vendor-
|
|
42
|
+
"_vendor-D9AxkwFX.js"
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
|
-
"_vendor-codemirror-
|
|
46
|
-
"file": "assets/vendor-codemirror-
|
|
45
|
+
"_vendor-codemirror-DQOFTPza.js": {
|
|
46
|
+
"file": "assets/vendor-codemirror-DQOFTPza.js",
|
|
47
47
|
"name": "vendor-codemirror",
|
|
48
48
|
"imports": [
|
|
49
|
-
"_vendor-
|
|
50
|
-
"_vendor-shiki-
|
|
49
|
+
"_vendor-D9AxkwFX.js",
|
|
50
|
+
"_vendor-shiki-DTHqzvBl.js"
|
|
51
51
|
],
|
|
52
52
|
"dynamicImports": [
|
|
53
|
-
"_vendor-shiki-
|
|
54
|
-
"_vendor-shiki-
|
|
55
|
-
"_vendor-shiki-
|
|
53
|
+
"_vendor-shiki-DTHqzvBl.js",
|
|
54
|
+
"_vendor-shiki-DTHqzvBl.js",
|
|
55
|
+
"_vendor-shiki-DTHqzvBl.js"
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
|
-
"_vendor-recharts-
|
|
59
|
-
"file": "assets/vendor-recharts-
|
|
58
|
+
"_vendor-recharts-BcJHP7DH.js": {
|
|
59
|
+
"file": "assets/vendor-recharts-BcJHP7DH.js",
|
|
60
60
|
"name": "vendor-recharts",
|
|
61
61
|
"imports": [
|
|
62
|
-
"_vendor-
|
|
62
|
+
"_vendor-D9AxkwFX.js"
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
|
-
"_vendor-shiki-
|
|
66
|
-
"file": "assets/vendor-shiki-
|
|
65
|
+
"_vendor-shiki-DTHqzvBl.js": {
|
|
66
|
+
"file": "assets/vendor-shiki-DTHqzvBl.js",
|
|
67
67
|
"name": "vendor-shiki",
|
|
68
68
|
"isDynamicEntry": true,
|
|
69
69
|
"imports": [
|
|
70
|
-
"_vendor-
|
|
70
|
+
"_vendor-D9AxkwFX.js"
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
73
|
"_vendor-three-BLWp5bic.js": {
|
|
@@ -75,19 +75,19 @@
|
|
|
75
75
|
"name": "vendor-three"
|
|
76
76
|
},
|
|
77
77
|
"index.tsx": {
|
|
78
|
-
"file": "assets/index-
|
|
78
|
+
"file": "assets/index-Bsnzoh7f.js",
|
|
79
79
|
"name": "index",
|
|
80
80
|
"src": "index.tsx",
|
|
81
81
|
"isEntry": true,
|
|
82
82
|
"imports": [
|
|
83
|
-
"_vendor-
|
|
84
|
-
"_vendor-arizeai-
|
|
85
|
-
"_pages-
|
|
86
|
-
"_components-
|
|
83
|
+
"_vendor-D9AxkwFX.js",
|
|
84
|
+
"_vendor-arizeai-BSWqLnk0.js",
|
|
85
|
+
"_pages-BLzMd6Fl.js",
|
|
86
|
+
"_components-BpxtWe3X.js",
|
|
87
87
|
"_vendor-three-BLWp5bic.js",
|
|
88
|
-
"_vendor-codemirror-
|
|
89
|
-
"_vendor-shiki-
|
|
90
|
-
"_vendor-recharts-
|
|
88
|
+
"_vendor-codemirror-DQOFTPza.js",
|
|
89
|
+
"_vendor-shiki-DTHqzvBl.js",
|
|
90
|
+
"_vendor-recharts-BcJHP7DH.js"
|
|
91
91
|
]
|
|
92
92
|
}
|
|
93
93
|
}
|