arize-phoenix 4.14.1__py3-none-any.whl → 4.16.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 (85) hide show
  1. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.16.0.dist-info}/METADATA +5 -3
  2. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.16.0.dist-info}/RECORD +81 -71
  3. phoenix/db/bulk_inserter.py +131 -5
  4. phoenix/db/engines.py +2 -1
  5. phoenix/db/helpers.py +23 -1
  6. phoenix/db/insertion/constants.py +2 -0
  7. phoenix/db/insertion/document_annotation.py +157 -0
  8. phoenix/db/insertion/helpers.py +13 -0
  9. phoenix/db/insertion/span_annotation.py +144 -0
  10. phoenix/db/insertion/trace_annotation.py +144 -0
  11. phoenix/db/insertion/types.py +261 -0
  12. phoenix/experiments/functions.py +3 -2
  13. phoenix/experiments/types.py +3 -3
  14. phoenix/server/api/context.py +7 -9
  15. phoenix/server/api/dataloaders/__init__.py +2 -0
  16. phoenix/server/api/dataloaders/average_experiment_run_latency.py +3 -3
  17. phoenix/server/api/dataloaders/dataset_example_revisions.py +2 -4
  18. phoenix/server/api/dataloaders/dataset_example_spans.py +2 -4
  19. phoenix/server/api/dataloaders/document_evaluation_summaries.py +2 -4
  20. phoenix/server/api/dataloaders/document_evaluations.py +2 -4
  21. phoenix/server/api/dataloaders/document_retrieval_metrics.py +2 -4
  22. phoenix/server/api/dataloaders/evaluation_summaries.py +2 -4
  23. phoenix/server/api/dataloaders/experiment_annotation_summaries.py +2 -4
  24. phoenix/server/api/dataloaders/experiment_error_rates.py +2 -4
  25. phoenix/server/api/dataloaders/experiment_run_counts.py +2 -4
  26. phoenix/server/api/dataloaders/experiment_sequence_number.py +2 -4
  27. phoenix/server/api/dataloaders/latency_ms_quantile.py +2 -3
  28. phoenix/server/api/dataloaders/min_start_or_max_end_times.py +2 -4
  29. phoenix/server/api/dataloaders/project_by_name.py +3 -3
  30. phoenix/server/api/dataloaders/record_counts.py +2 -4
  31. phoenix/server/api/dataloaders/span_annotations.py +2 -4
  32. phoenix/server/api/dataloaders/span_dataset_examples.py +36 -0
  33. phoenix/server/api/dataloaders/span_descendants.py +2 -4
  34. phoenix/server/api/dataloaders/span_evaluations.py +2 -4
  35. phoenix/server/api/dataloaders/span_projects.py +3 -3
  36. phoenix/server/api/dataloaders/token_counts.py +2 -4
  37. phoenix/server/api/dataloaders/trace_evaluations.py +2 -4
  38. phoenix/server/api/dataloaders/trace_row_ids.py +2 -4
  39. phoenix/server/api/input_types/SpanAnnotationSort.py +17 -0
  40. phoenix/server/api/input_types/TraceAnnotationSort.py +17 -0
  41. phoenix/server/api/mutations/span_annotations_mutations.py +8 -3
  42. phoenix/server/api/mutations/trace_annotations_mutations.py +8 -3
  43. phoenix/server/api/openapi/main.py +18 -2
  44. phoenix/server/api/openapi/schema.py +12 -12
  45. phoenix/server/api/routers/v1/__init__.py +36 -83
  46. phoenix/server/api/routers/v1/datasets.py +515 -509
  47. phoenix/server/api/routers/v1/evaluations.py +164 -73
  48. phoenix/server/api/routers/v1/experiment_evaluations.py +68 -91
  49. phoenix/server/api/routers/v1/experiment_runs.py +98 -155
  50. phoenix/server/api/routers/v1/experiments.py +132 -181
  51. phoenix/server/api/routers/v1/pydantic_compat.py +78 -0
  52. phoenix/server/api/routers/v1/spans.py +164 -203
  53. phoenix/server/api/routers/v1/traces.py +134 -159
  54. phoenix/server/api/routers/v1/utils.py +95 -0
  55. phoenix/server/api/types/Span.py +27 -3
  56. phoenix/server/api/types/Trace.py +21 -4
  57. phoenix/server/api/utils.py +4 -4
  58. phoenix/server/app.py +172 -192
  59. phoenix/server/grpc_server.py +2 -2
  60. phoenix/server/main.py +5 -9
  61. phoenix/server/static/.vite/manifest.json +31 -31
  62. phoenix/server/static/assets/components-Ci5kMOk5.js +1175 -0
  63. phoenix/server/static/assets/{index-CQgXRwU0.js → index-BQG5WVX7.js} +2 -2
  64. phoenix/server/static/assets/{pages-hdjlFZhO.js → pages-BrevprVW.js} +451 -275
  65. phoenix/server/static/assets/{vendor-DPvSDRn3.js → vendor-CP0b0YG0.js} +2 -2
  66. phoenix/server/static/assets/{vendor-arizeai-CkvPT67c.js → vendor-arizeai-DTbiPGp6.js} +27 -27
  67. phoenix/server/static/assets/vendor-codemirror-DtdPDzrv.js +15 -0
  68. phoenix/server/static/assets/{vendor-recharts-5jlNaZuF.js → vendor-recharts-A0DA1O99.js} +1 -1
  69. phoenix/server/thread_server.py +2 -2
  70. phoenix/server/types.py +18 -0
  71. phoenix/session/client.py +5 -3
  72. phoenix/session/session.py +2 -2
  73. phoenix/trace/dsl/filter.py +2 -6
  74. phoenix/trace/fixtures.py +17 -23
  75. phoenix/trace/utils.py +23 -0
  76. phoenix/utilities/client.py +116 -0
  77. phoenix/utilities/project.py +1 -1
  78. phoenix/version.py +1 -1
  79. phoenix/server/api/routers/v1/dataset_examples.py +0 -178
  80. phoenix/server/openapi/docs.py +0 -221
  81. phoenix/server/static/assets/components-DeS0YEmv.js +0 -1142
  82. phoenix/server/static/assets/vendor-codemirror-Cqwpwlua.js +0 -12
  83. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.16.0.dist-info}/WHEEL +0 -0
  84. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.16.0.dist-info}/licenses/IP_NOTICE +0 -0
  85. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.16.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,89 +1,42 @@
1
- from typing import Any, Awaitable, Callable, Mapping, Tuple
2
-
3
- import wrapt
4
- from starlette import routing
5
- from starlette.requests import Request
6
- from starlette.responses import Response
1
+ from fastapi import APIRouter, Depends, HTTPException, Request
7
2
  from starlette.status import HTTP_403_FORBIDDEN
8
3
 
9
- from . import (
10
- datasets,
11
- evaluations,
12
- experiment_evaluations,
13
- experiment_runs,
14
- experiments,
15
- spans,
16
- traces,
17
- )
18
- from .dataset_examples import list_dataset_examples
19
-
4
+ from .datasets import router as datasets_router
5
+ from .evaluations import router as evaluations_router
6
+ from .experiment_evaluations import router as experiment_evaluations_router
7
+ from .experiment_runs import router as experiment_runs_router
8
+ from .experiments import router as experiments_router
9
+ from .spans import router as spans_router
10
+ from .traces import router as traces_router
11
+ from .utils import add_errors_to_responses
20
12
 
21
- @wrapt.decorator # type: ignore
22
- async def forbid_if_readonly(
23
- wrapped: Callable[[Request], Awaitable[Response]],
24
- _: Any,
25
- args: Tuple[Request],
26
- kwargs: Mapping[str, Any],
27
- ) -> Response:
28
- request, *_ = args
29
- if request.app.state.read_only:
30
- return Response(status_code=HTTP_403_FORBIDDEN)
31
- return await wrapped(*args, **kwargs)
13
+ REST_API_VERSION = "1.0"
32
14
 
33
15
 
34
- class Route(routing.Route):
35
- def __init__(self, path: str, endpoint: Callable[..., Any], **kwargs: Any) -> None:
36
- super().__init__(path, forbid_if_readonly(endpoint), **kwargs)
37
-
38
-
39
- V1_ROUTES = [
40
- Route("/v1/evaluations", evaluations.post_evaluations, methods=["POST"]),
41
- Route("/v1/evaluations", evaluations.get_evaluations, methods=["GET"]),
42
- Route("/v1/traces", traces.post_traces, methods=["POST"]),
43
- Route("/v1/trace_annotations", traces.annotate_traces, methods=["POST"]),
44
- Route("/v1/spans", spans.query_spans_handler, methods=["POST"]),
45
- Route("/v1/spans", spans.get_spans_handler, methods=["GET"]),
46
- Route("/v1/span_annotations", spans.annotate_spans, methods=["POST"]),
47
- Route("/v1/datasets/upload", datasets.post_datasets_upload, methods=["POST"]),
48
- Route("/v1/datasets", datasets.list_datasets, methods=["GET"]),
49
- Route("/v1/datasets/{id:str}", datasets.delete_dataset_by_id, methods=["DELETE"]),
50
- Route("/v1/datasets/{id:str}", datasets.get_dataset_by_id, methods=["GET"]),
51
- Route("/v1/datasets/{id:str}/csv", datasets.get_dataset_csv, methods=["GET"]),
52
- Route(
53
- "/v1/datasets/{id:str}/jsonl/openai_ft",
54
- datasets.get_dataset_jsonl_openai_ft,
55
- methods=["GET"],
56
- ),
57
- Route(
58
- "/v1/datasets/{id:str}/jsonl/openai_evals",
59
- datasets.get_dataset_jsonl_openai_evals,
60
- methods=["GET"],
61
- ),
62
- Route("/v1/datasets/{id:str}/examples", list_dataset_examples, methods=["GET"]),
63
- Route("/v1/datasets/{id:str}/versions", datasets.get_dataset_versions, methods=["GET"]),
64
- Route(
65
- "/v1/datasets/{dataset_id:str}/experiments",
66
- experiments.create_experiment,
67
- methods=["POST"],
68
- ),
69
- Route(
70
- "/v1/experiments/{experiment_id:str}",
71
- experiments.read_experiment,
72
- methods=["GET"],
73
- ),
74
- Route(
75
- "/v1/experiments/{experiment_id:str}/runs",
76
- experiment_runs.create_experiment_run,
77
- methods=["POST"],
78
- ),
79
- Route(
80
- "/v1/experiments/{experiment_id:str}/runs",
81
- experiment_runs.list_experiment_runs,
82
- methods=["GET"],
83
- ),
84
- Route(
85
- "/v1/experiment_evaluations",
86
- experiment_evaluations.upsert_experiment_evaluation,
87
- methods=["POST"],
16
+ async def prevent_access_in_read_only_mode(request: Request) -> None:
17
+ """
18
+ Prevents access to the REST API in read-only mode.
19
+ """
20
+ if request.app.state.read_only:
21
+ raise HTTPException(
22
+ detail="The Phoenix REST API is disabled in read-only mode.",
23
+ status_code=HTTP_403_FORBIDDEN,
24
+ )
25
+
26
+
27
+ router = APIRouter(
28
+ prefix="/v1",
29
+ dependencies=[Depends(prevent_access_in_read_only_mode)],
30
+ responses=add_errors_to_responses(
31
+ [
32
+ HTTP_403_FORBIDDEN # adds a 403 response to each route in the generated OpenAPI schema
33
+ ]
88
34
  ),
89
- ]
35
+ )
36
+ router.include_router(datasets_router)
37
+ router.include_router(experiments_router)
38
+ router.include_router(experiment_runs_router)
39
+ router.include_router(experiment_evaluations_router)
40
+ router.include_router(traces_router)
41
+ router.include_router(spans_router)
42
+ router.include_router(evaluations_router)