arize-phoenix 11.10.0__py3-none-any.whl → 11.11.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (24) hide show
  1. {arize_phoenix-11.10.0.dist-info → arize_phoenix-11.11.0.dist-info}/METADATA +1 -1
  2. {arize_phoenix-11.10.0.dist-info → arize_phoenix-11.11.0.dist-info}/RECORD +22 -21
  3. phoenix/server/api/helpers/playground_clients.py +146 -63
  4. phoenix/server/api/helpers/playground_registry.py +2 -2
  5. phoenix/server/api/input_types/PromptFilter.py +14 -0
  6. phoenix/server/api/queries.py +14 -3
  7. phoenix/server/api/types/GenerativeModel.py +48 -3
  8. phoenix/server/api/types/Project.py +125 -0
  9. phoenix/server/static/.vite/manifest.json +44 -44
  10. phoenix/server/static/assets/{components-XAeml0-1.js → components-B7lK-RgC.js} +396 -314
  11. phoenix/server/static/assets/{index-D7EtHUpz.js → index-CpePoyTU.js} +11 -2
  12. phoenix/server/static/assets/{pages-CPfaxiKa.js → pages-CnVg_GUi.js} +518 -482
  13. phoenix/server/static/assets/{vendor-arizeai-4fVwwnrI.js → vendor-arizeai-CXCKGfvH.js} +3 -3
  14. phoenix/server/static/assets/vendor-codemirror-DWr46-WB.js +27 -0
  15. phoenix/server/static/assets/{vendor-recharts-w6bSawXG.js → vendor-recharts-0Yf6lanX.js} +1 -1
  16. phoenix/server/static/assets/{vendor-shiki-CplrhwOk.js → vendor-shiki-Caei6iKO.js} +1 -1
  17. phoenix/server/static/assets/vendor-uWG2jYEi.js +936 -0
  18. phoenix/version.py +1 -1
  19. phoenix/server/static/assets/vendor-DhvamIr8.js +0 -939
  20. phoenix/server/static/assets/vendor-codemirror-DRfFHb57.js +0 -33
  21. {arize_phoenix-11.10.0.dist-info → arize_phoenix-11.11.0.dist-info}/WHEEL +0 -0
  22. {arize_phoenix-11.10.0.dist-info → arize_phoenix-11.11.0.dist-info}/entry_points.txt +0 -0
  23. {arize_phoenix-11.10.0.dist-info → arize_phoenix-11.11.0.dist-info}/licenses/IP_NOTICE +0 -0
  24. {arize_phoenix-11.10.0.dist-info → arize_phoenix-11.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -33,6 +33,7 @@ from phoenix.server.api.types.AnnotationConfig import AnnotationConfig, to_gql_a
33
33
  from phoenix.server.api.types.AnnotationSummary import AnnotationSummary
34
34
  from phoenix.server.api.types.CostBreakdown import CostBreakdown
35
35
  from phoenix.server.api.types.DocumentEvaluationSummary import DocumentEvaluationSummary
36
+ from phoenix.server.api.types.GenerativeModel import GenerativeModel, to_gql_generative_model
36
37
  from phoenix.server.api.types.pagination import (
37
38
  ConnectionArgs,
38
39
  Cursor,
@@ -1326,6 +1327,130 @@ class Project(Node):
1326
1327
  names=sorted(list(unique_names)),
1327
1328
  )
1328
1329
 
1330
+ @strawberry.field
1331
+ async def top_models_by_cost(
1332
+ self,
1333
+ info: Info[Context, None],
1334
+ time_range: TimeRange,
1335
+ ) -> list[GenerativeModel]:
1336
+ if time_range.start is None:
1337
+ raise BadRequest("Start time is required")
1338
+
1339
+ async with info.context.db() as session:
1340
+ stmt = (
1341
+ select(
1342
+ models.GenerativeModel,
1343
+ func.sum(models.SpanCost.total_tokens).label("total_tokens"),
1344
+ func.sum(models.SpanCost.prompt_tokens).label("prompt_tokens"),
1345
+ func.sum(models.SpanCost.completion_tokens).label("completion_tokens"),
1346
+ func.sum(models.SpanCost.total_cost).label("total_cost"),
1347
+ func.sum(models.SpanCost.prompt_cost).label("prompt_cost"),
1348
+ func.sum(models.SpanCost.completion_cost).label("completion_cost"),
1349
+ )
1350
+ .join(
1351
+ models.SpanCost,
1352
+ models.SpanCost.model_id == models.GenerativeModel.id,
1353
+ )
1354
+ .join(
1355
+ models.Trace,
1356
+ models.SpanCost.trace_rowid == models.Trace.id,
1357
+ )
1358
+ .where(models.Trace.project_rowid == self.project_rowid)
1359
+ .where(models.SpanCost.model_id.isnot(None))
1360
+ .where(models.SpanCost.span_start_time >= time_range.start)
1361
+ .group_by(models.SpanCost.model_id)
1362
+ .order_by(func.sum(models.SpanCost.total_cost).desc())
1363
+ )
1364
+ if time_range.end:
1365
+ stmt = stmt.where(models.SpanCost.span_start_time < time_range.end)
1366
+ results: list[GenerativeModel] = []
1367
+ async for (
1368
+ model,
1369
+ total_tokens,
1370
+ prompt_tokens,
1371
+ completion_tokens,
1372
+ total_cost,
1373
+ prompt_cost,
1374
+ completion_cost,
1375
+ ) in await session.stream(stmt):
1376
+ cost_summary = SpanCostSummary(
1377
+ prompt=CostBreakdown(tokens=prompt_tokens, cost=prompt_cost),
1378
+ completion=CostBreakdown(tokens=completion_tokens, cost=completion_cost),
1379
+ total=CostBreakdown(tokens=total_tokens, cost=total_cost),
1380
+ )
1381
+ cache_time_range = TimeRange(
1382
+ start=time_range.start,
1383
+ end=time_range.end,
1384
+ )
1385
+ gql_model = to_gql_generative_model(model)
1386
+ gql_model.add_cached_cost_summary(
1387
+ self.project_rowid, cache_time_range, cost_summary
1388
+ )
1389
+ results.append(gql_model)
1390
+ return results
1391
+
1392
+ @strawberry.field
1393
+ async def top_models_by_token_count(
1394
+ self,
1395
+ info: Info[Context, None],
1396
+ time_range: TimeRange,
1397
+ ) -> list[GenerativeModel]:
1398
+ if time_range.start is None:
1399
+ raise BadRequest("Start time is required")
1400
+
1401
+ async with info.context.db() as session:
1402
+ stmt = (
1403
+ select(
1404
+ models.GenerativeModel,
1405
+ func.sum(models.SpanCost.total_tokens).label("total_tokens"),
1406
+ func.sum(models.SpanCost.prompt_tokens).label("prompt_tokens"),
1407
+ func.sum(models.SpanCost.completion_tokens).label("completion_tokens"),
1408
+ func.sum(models.SpanCost.total_cost).label("total_cost"),
1409
+ func.sum(models.SpanCost.prompt_cost).label("prompt_cost"),
1410
+ func.sum(models.SpanCost.completion_cost).label("completion_cost"),
1411
+ )
1412
+ .join(
1413
+ models.SpanCost,
1414
+ models.SpanCost.model_id == models.GenerativeModel.id,
1415
+ )
1416
+ .join(
1417
+ models.Trace,
1418
+ models.SpanCost.trace_rowid == models.Trace.id,
1419
+ )
1420
+ .where(models.Trace.project_rowid == self.project_rowid)
1421
+ .where(models.SpanCost.model_id.isnot(None))
1422
+ .where(models.SpanCost.span_start_time >= time_range.start)
1423
+ .group_by(models.SpanCost.model_id)
1424
+ .order_by(func.sum(models.SpanCost.total_tokens).desc())
1425
+ )
1426
+ if time_range.end:
1427
+ stmt = stmt.where(models.SpanCost.span_start_time < time_range.end)
1428
+ results: list[GenerativeModel] = []
1429
+ async for (
1430
+ model,
1431
+ total_tokens,
1432
+ prompt_tokens,
1433
+ completion_tokens,
1434
+ total_cost,
1435
+ prompt_cost,
1436
+ completion_cost,
1437
+ ) in await session.stream(stmt):
1438
+ cost_summary = SpanCostSummary(
1439
+ prompt=CostBreakdown(tokens=prompt_tokens, cost=prompt_cost),
1440
+ completion=CostBreakdown(tokens=completion_tokens, cost=completion_cost),
1441
+ total=CostBreakdown(tokens=total_tokens, cost=total_cost),
1442
+ )
1443
+ cache_time_range = TimeRange(
1444
+ start=time_range.start,
1445
+ end=time_range.end,
1446
+ )
1447
+ gql_model = to_gql_generative_model(model)
1448
+ gql_model.add_cached_cost_summary(
1449
+ self.project_rowid, cache_time_range, cost_summary
1450
+ )
1451
+ results.append(gql_model)
1452
+ return results
1453
+
1329
1454
 
1330
1455
  @strawberry.type
1331
1456
  class SpanCountTimeSeriesDataPoint:
@@ -1,87 +1,87 @@
1
1
  {
2
- "_components-XAeml0-1.js": {
3
- "file": "assets/components-XAeml0-1.js",
2
+ "_components-B7lK-RgC.js": {
3
+ "file": "assets/components-B7lK-RgC.js",
4
4
  "name": "components",
5
5
  "imports": [
6
- "_vendor-DhvamIr8.js",
7
- "_pages-CPfaxiKa.js",
8
- "_vendor-arizeai-4fVwwnrI.js",
9
- "_vendor-codemirror-DRfFHb57.js",
6
+ "_vendor-uWG2jYEi.js",
7
+ "_pages-CnVg_GUi.js",
8
+ "_vendor-arizeai-CXCKGfvH.js",
9
+ "_vendor-codemirror-DWr46-WB.js",
10
10
  "_vendor-three-C5WAXd5r.js"
11
11
  ]
12
12
  },
13
- "_pages-CPfaxiKa.js": {
14
- "file": "assets/pages-CPfaxiKa.js",
13
+ "_pages-CnVg_GUi.js": {
14
+ "file": "assets/pages-CnVg_GUi.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
- "_vendor-DhvamIr8.js",
18
- "_vendor-arizeai-4fVwwnrI.js",
19
- "_components-XAeml0-1.js",
20
- "_vendor-codemirror-DRfFHb57.js",
21
- "_vendor-recharts-w6bSawXG.js"
17
+ "_vendor-uWG2jYEi.js",
18
+ "_vendor-arizeai-CXCKGfvH.js",
19
+ "_components-B7lK-RgC.js",
20
+ "_vendor-codemirror-DWr46-WB.js",
21
+ "_vendor-recharts-0Yf6lanX.js"
22
22
  ]
23
23
  },
24
24
  "_vendor-CqDb5u4o.css": {
25
25
  "file": "assets/vendor-CqDb5u4o.css",
26
26
  "src": "_vendor-CqDb5u4o.css"
27
27
  },
28
- "_vendor-DhvamIr8.js": {
29
- "file": "assets/vendor-DhvamIr8.js",
30
- "name": "vendor",
31
- "imports": [
32
- "_vendor-three-C5WAXd5r.js"
33
- ],
34
- "css": [
35
- "assets/vendor-CqDb5u4o.css"
36
- ]
37
- },
38
- "_vendor-arizeai-4fVwwnrI.js": {
39
- "file": "assets/vendor-arizeai-4fVwwnrI.js",
28
+ "_vendor-arizeai-CXCKGfvH.js": {
29
+ "file": "assets/vendor-arizeai-CXCKGfvH.js",
40
30
  "name": "vendor-arizeai",
41
31
  "imports": [
42
- "_vendor-DhvamIr8.js"
32
+ "_vendor-uWG2jYEi.js"
43
33
  ]
44
34
  },
45
- "_vendor-codemirror-DRfFHb57.js": {
46
- "file": "assets/vendor-codemirror-DRfFHb57.js",
35
+ "_vendor-codemirror-DWr46-WB.js": {
36
+ "file": "assets/vendor-codemirror-DWr46-WB.js",
47
37
  "name": "vendor-codemirror",
48
38
  "imports": [
49
- "_vendor-DhvamIr8.js",
50
- "_vendor-shiki-CplrhwOk.js"
39
+ "_vendor-uWG2jYEi.js",
40
+ "_vendor-shiki-Caei6iKO.js"
51
41
  ]
52
42
  },
53
- "_vendor-recharts-w6bSawXG.js": {
54
- "file": "assets/vendor-recharts-w6bSawXG.js",
43
+ "_vendor-recharts-0Yf6lanX.js": {
44
+ "file": "assets/vendor-recharts-0Yf6lanX.js",
55
45
  "name": "vendor-recharts",
56
46
  "imports": [
57
- "_vendor-DhvamIr8.js"
47
+ "_vendor-uWG2jYEi.js"
58
48
  ]
59
49
  },
60
- "_vendor-shiki-CplrhwOk.js": {
61
- "file": "assets/vendor-shiki-CplrhwOk.js",
50
+ "_vendor-shiki-Caei6iKO.js": {
51
+ "file": "assets/vendor-shiki-Caei6iKO.js",
62
52
  "name": "vendor-shiki",
63
53
  "imports": [
64
- "_vendor-DhvamIr8.js"
54
+ "_vendor-uWG2jYEi.js"
65
55
  ]
66
56
  },
67
57
  "_vendor-three-C5WAXd5r.js": {
68
58
  "file": "assets/vendor-three-C5WAXd5r.js",
69
59
  "name": "vendor-three"
70
60
  },
61
+ "_vendor-uWG2jYEi.js": {
62
+ "file": "assets/vendor-uWG2jYEi.js",
63
+ "name": "vendor",
64
+ "imports": [
65
+ "_vendor-three-C5WAXd5r.js"
66
+ ],
67
+ "css": [
68
+ "assets/vendor-CqDb5u4o.css"
69
+ ]
70
+ },
71
71
  "index.tsx": {
72
- "file": "assets/index-D7EtHUpz.js",
72
+ "file": "assets/index-CpePoyTU.js",
73
73
  "name": "index",
74
74
  "src": "index.tsx",
75
75
  "isEntry": true,
76
76
  "imports": [
77
- "_vendor-DhvamIr8.js",
78
- "_vendor-arizeai-4fVwwnrI.js",
79
- "_pages-CPfaxiKa.js",
80
- "_components-XAeml0-1.js",
77
+ "_vendor-uWG2jYEi.js",
78
+ "_vendor-arizeai-CXCKGfvH.js",
79
+ "_pages-CnVg_GUi.js",
80
+ "_components-B7lK-RgC.js",
81
81
  "_vendor-three-C5WAXd5r.js",
82
- "_vendor-codemirror-DRfFHb57.js",
83
- "_vendor-shiki-CplrhwOk.js",
84
- "_vendor-recharts-w6bSawXG.js"
82
+ "_vendor-codemirror-DWr46-WB.js",
83
+ "_vendor-shiki-Caei6iKO.js",
84
+ "_vendor-recharts-0Yf6lanX.js"
85
85
  ]
86
86
  }
87
87
  }