arize-phoenix 7.9.0__py3-none-any.whl → 7.9.2__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-7.9.0.dist-info → arize_phoenix-7.9.2.dist-info}/METADATA +2 -2
- {arize_phoenix-7.9.0.dist-info → arize_phoenix-7.9.2.dist-info}/RECORD +22 -22
- phoenix/config.py +7 -4
- phoenix/experiments/functions.py +7 -2
- phoenix/server/api/input_types/Granularity.py +3 -3
- phoenix/server/api/input_types/TimeRange.py +8 -5
- phoenix/server/api/types/Dimension.py +15 -10
- phoenix/server/api/types/EmbeddingDimension.py +17 -12
- phoenix/server/api/types/Model.py +4 -4
- phoenix/server/api/types/TimeSeries.py +12 -10
- phoenix/server/static/.vite/manifest.json +9 -9
- phoenix/server/static/assets/{components-Dn-PoB4S.js → components-CN9dra1h.js} +1 -1
- phoenix/server/static/assets/{index-Cky21rQb.js → index-DcnHbEy5.js} +1 -1
- phoenix/server/static/assets/{pages-DRhPpbPi.js → pages-nMcybglv.js} +2 -2
- phoenix/trace/trace_dataset.py +12 -1
- phoenix/utilities/client.py +11 -11
- phoenix/utilities/re.py +4 -1
- phoenix/version.py +1 -1
- {arize_phoenix-7.9.0.dist-info → arize_phoenix-7.9.2.dist-info}/WHEEL +0 -0
- {arize_phoenix-7.9.0.dist-info → arize_phoenix-7.9.2.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-7.9.0.dist-info → arize_phoenix-7.9.2.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-7.9.0.dist-info → arize_phoenix-7.9.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 7.9.
|
|
3
|
+
Version: 7.9.2
|
|
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
|
|
@@ -160,7 +160,7 @@ Phoenix is an open-source AI observability platform designed for experimentation
|
|
|
160
160
|
- [**_Evaluation_**](https://docs.arize.com/phoenix/evaluation/llm-evals) - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
|
|
161
161
|
- [**_Datasets_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets) - Create versioned datasets of examples for experimentation, evaluation, and fine-tuning.
|
|
162
162
|
- [**_Experiments_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets#experiments) - Track and evaluate changes to prompts, LLMs, and retrieval.
|
|
163
|
-
- [**_Playground_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts)-
|
|
163
|
+
- [**_Playground_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts)- Optimize prompts, compare models, adjust parameters, and replay traced LLM calls.
|
|
164
164
|
|
|
165
165
|
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
|
|
166
166
|
|
|
@@ -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=9cda9bRDiN3pwf7D8_erOmfbiW4Vs1jsR5Dy1ugsRV8,26466
|
|
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=YAajXSw_z4MQ6lsIV5ezONibvVOHVg-oyNvDopkF0UU,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
|
|
@@ -43,7 +43,7 @@ phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py,sha
|
|
|
43
43
|
phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py,sha256=fkpmh5PgMZJiZpvLbZIaqlI2cucVpVbbNYpQ-Tznil8,5180
|
|
44
44
|
phoenix/db/migrations/versions/cf03bd6bae1d_init.py,sha256=lorqWUcujC0fsYIOriGZlZw2LKjS3nF34KHxi1fp_Z8,8646
|
|
45
45
|
phoenix/experiments/__init__.py,sha256=6JGwgUd7xCbGpuHqYZlsmErmYvVgv7N_j43bn3dUqsk,123
|
|
46
|
-
phoenix/experiments/functions.py,sha256=
|
|
46
|
+
phoenix/experiments/functions.py,sha256=QOwYNMO1qxG2bah4ZjJKMk7agFkZRWGvwyazLcwRCys,32573
|
|
47
47
|
phoenix/experiments/tracing.py,sha256=seNh9rBH-rtQe8_FPI_VJj1rbo3ADcP6wDvERkMoxNc,2858
|
|
48
48
|
phoenix/experiments/types.py,sha256=Vcks1zXuqrdu4Dy1TaNVcPHktgQY7WYin9yqaP2vrek,23390
|
|
49
49
|
phoenix/experiments/utils.py,sha256=MZ1-OnTcavk_KUtbfGqt55Fk9TGtJpYG_K71WsN-zDk,785
|
|
@@ -159,7 +159,7 @@ phoenix/server/api/input_types/DeleteExperimentsInput.py,sha256=4d9N0vSLYbuysAam
|
|
|
159
159
|
phoenix/server/api/input_types/DimensionFilter.py,sha256=eBYcn7ECSJQlEePvbStqkHBRicbIL4vEAzFJwX7bacQ,3137
|
|
160
160
|
phoenix/server/api/input_types/DimensionInput.py,sha256=Vfx5FmiMKey4-EHDQsQRPzSAMRJMN5oVMLDUl4NKAa8,164
|
|
161
161
|
phoenix/server/api/input_types/GenerativeModelInput.py,sha256=h_9dNkz-LBgOLKQ5_ijch4UNGiDb4x5CCC96WyverSg,551
|
|
162
|
-
phoenix/server/api/input_types/Granularity.py,sha256=
|
|
162
|
+
phoenix/server/api/input_types/Granularity.py,sha256=dbBlD_GsIBa8_xrx4JlLuR59bQ0NRB5H-cv1zvcb-cw,2299
|
|
163
163
|
phoenix/server/api/input_types/InvocationParameters.py,sha256=I_FvPvY2sXxNd-kFSB96-1DOW7lo-VbqVWzppU_5hy8,5196
|
|
164
164
|
phoenix/server/api/input_types/PatchAnnotationInput.py,sha256=NWhkcbcGNPwfOYsN3wm5YFNNrSc5T-8Y5my74RK99HE,520
|
|
165
165
|
phoenix/server/api/input_types/PatchDatasetExamplesInput.py,sha256=_uMqkAInhLDvzUSASl6HgLNulTsekMcYzyd5J6LF90I,884
|
|
@@ -169,7 +169,7 @@ phoenix/server/api/input_types/ProjectSessionSort.py,sha256=qFgLmKYeyFpx7An9ZNdD
|
|
|
169
169
|
phoenix/server/api/input_types/SpanAnnotationSort.py,sha256=T5pAGzmh4MiJp9JMAzNDByFVTczfw02FH4WFWwFezyI,361
|
|
170
170
|
phoenix/server/api/input_types/SpanSort.py,sha256=Dhvl8BIoV52yHoqntfOax_gUc15uH8ITI_00Ha7PvYc,5959
|
|
171
171
|
phoenix/server/api/input_types/TemplateOptions.py,sha256=BrKozr604QwthBdKhlsHbxJc5oZ7eHnwviVubW2i0jA,220
|
|
172
|
-
phoenix/server/api/input_types/TimeRange.py,sha256=
|
|
172
|
+
phoenix/server/api/input_types/TimeRange.py,sha256=gWr55NPaB4gy-Ta4amMAjBqz7YANO2rF00Y6c802d5U,656
|
|
173
173
|
phoenix/server/api/input_types/TraceAnnotationSort.py,sha256=BzwiUnMh2VsgQYnhDlbJ6ljHugqIS4YDUlYzvq_tl3o,365
|
|
174
174
|
phoenix/server/api/input_types/UserRoleInput.py,sha256=xxhFe0ITZOgRVEJbVem_W6F1Ip_H6xDENdQqMMx-kKE,129
|
|
175
175
|
phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -216,14 +216,14 @@ phoenix/server/api/types/DatasetExample.py,sha256=5f7DO6jRec1G5jaJW5FrykFU9R07jD
|
|
|
216
216
|
phoenix/server/api/types/DatasetExampleRevision.py,sha256=c-jWR6dTguEZTm54IMlFr0Ic84I3nefyDnZb7nF5hnI,874
|
|
217
217
|
phoenix/server/api/types/DatasetValues.py,sha256=7VbCOLlzOXpZN80-zYF2UGuafRcPsZF-8WQNc0YsKFc,1119
|
|
218
218
|
phoenix/server/api/types/DatasetVersion.py,sha256=NnDriqQUE20N_Jhyu3-IxHWJQE9wmdHEJIQAKyTVJpo,302
|
|
219
|
-
phoenix/server/api/types/Dimension.py,sha256=
|
|
219
|
+
phoenix/server/api/types/Dimension.py,sha256=VjW6kOMhFslGSSHlsylpF1hYY3wuhopC2LM2eOcIhRI,10665
|
|
220
220
|
phoenix/server/api/types/DimensionDataType.py,sha256=o0QQRpUzgXbhd10drR2LthxrjB8klQcELrIvsbp4l_g,441
|
|
221
221
|
phoenix/server/api/types/DimensionShape.py,sha256=LNsRt3Uyx1OmwMa5EXk1JGRXPLVV2EEgYXz-6wnLJn4,562
|
|
222
222
|
phoenix/server/api/types/DimensionType.py,sha256=JLikZUBVqbHlUWcYYd8d60gB1_hmAcuFuZZsjCXpIwc,801
|
|
223
223
|
phoenix/server/api/types/DimensionWithValue.py,sha256=4_koirnDrZBBdFkIWka2f-OeqZ6IzQXwqz3ccjdgHrc,484
|
|
224
224
|
phoenix/server/api/types/DocumentEvaluationSummary.py,sha256=dx4Btlfw9_XsfmibjfWvMOvUfrvr9oGJq8jYmIL2o-Q,3494
|
|
225
225
|
phoenix/server/api/types/DocumentRetrievalMetrics.py,sha256=amkpC3H5IU5-9GvO0telpbq00m6lIcv_2v446OpwFwc,1822
|
|
226
|
-
phoenix/server/api/types/EmbeddingDimension.py,sha256=
|
|
226
|
+
phoenix/server/api/types/EmbeddingDimension.py,sha256=AYvpZ1nWINAgN4BAZsA_xI_2TNFK6h5jmqzvkPs651M,19428
|
|
227
227
|
phoenix/server/api/types/EmbeddingMetadata.py,sha256=fJvNNYCbkf3SJalArLy9rcBq9Uj1SNac60zjqe1PFnM,461
|
|
228
228
|
phoenix/server/api/types/Evaluation.py,sha256=rLJptUSRUPPx9sdUyc4UPWxzkr9gcKtkpAS5Zi_EyFQ,2406
|
|
229
229
|
phoenix/server/api/types/EvaluationSummary.py,sha256=vILYejnfPvMwWEXOwhQZsANvYe3AdO2OkMR2rcgp1H4,1512
|
|
@@ -243,7 +243,7 @@ phoenix/server/api/types/Inferences.py,sha256=wv88PjcK-KwnzmTdukiAX9EV2KX4GqsKXV
|
|
|
243
243
|
phoenix/server/api/types/InferencesRole.py,sha256=mLfeHpyhGUVX1-tWzT9IwC_cD18BZrD3RA4YsHYuSpA,595
|
|
244
244
|
phoenix/server/api/types/LabelFraction.py,sha256=zsDxdFALrNiGA1eNykeP8o65gbA0HOhRp54MPH_iRAM,93
|
|
245
245
|
phoenix/server/api/types/MimeType.py,sha256=Zpi6zCalkSFgsvhzvOs-O1gYA04usAi9H__QZUmFlO0,365
|
|
246
|
-
phoenix/server/api/types/Model.py,sha256=
|
|
246
|
+
phoenix/server/api/types/Model.py,sha256=8UIFqMe1q-2ufBNg-gxHusV8wM1h-KbfLUeJjyVcMvQ,8081
|
|
247
247
|
phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
|
|
248
248
|
phoenix/server/api/types/PerformanceMetric.py,sha256=KFkmJDqP43eDUtARQOUqR7NYcxvL6Vh2uisHWU6H3ko,387
|
|
249
249
|
phoenix/server/api/types/Project.py,sha256=xbV15SOHcPQeE1TMSWFpXk7ZQkfxCD4ZjFS4C83K4tU,18852
|
|
@@ -258,7 +258,7 @@ phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-
|
|
|
258
258
|
phoenix/server/api/types/SpanIOValue.py,sha256=u_g9QrX-E3fwneoucire73KY5gf3fE4V9IBN3qx2cvU,445
|
|
259
259
|
phoenix/server/api/types/SystemApiKey.py,sha256=2ym8EgsTBIvxx1l9xZ-2YMovz58ZwYb_MaHBTJ9NH2E,166
|
|
260
260
|
phoenix/server/api/types/TemplateLanguage.py,sha256=6j_0uwO_GZIeCpR7sTOnxySXudT7qBSC6LFsjzbvW1o,160
|
|
261
|
-
phoenix/server/api/types/TimeSeries.py,sha256=
|
|
261
|
+
phoenix/server/api/types/TimeSeries.py,sha256=nuuZtfHmOhTjeB8_SvZ5PUQexAkTcPScwYeFC5RUlRU,5491
|
|
262
262
|
phoenix/server/api/types/TokenUsage.py,sha256=g-PjAGVigpchQgkXAuC5sc53fn2YwAgfeXkGmFPi_TE,201
|
|
263
263
|
phoenix/server/api/types/Trace.py,sha256=Nwof2FlcZtCFnKTS5UqvNZBlY-VcN5QMK7Zm9xEQUrU,5597
|
|
264
264
|
phoenix/server/api/types/TraceAnnotation.py,sha256=OW6A2zr1gomOuG0XQe55dk15XXX2DSM0DzatRbHWH5A,1256
|
|
@@ -287,10 +287,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
|
|
|
287
287
|
phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
|
|
288
288
|
phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
|
|
289
289
|
phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
|
|
290
|
-
phoenix/server/static/.vite/manifest.json,sha256=
|
|
291
|
-
phoenix/server/static/assets/components-
|
|
292
|
-
phoenix/server/static/assets/index-
|
|
293
|
-
phoenix/server/static/assets/pages-
|
|
290
|
+
phoenix/server/static/.vite/manifest.json,sha256=VBEhec2sIILozJ577fkMAeHAtsO5Uyp_Aiv06RopPso,2163
|
|
291
|
+
phoenix/server/static/assets/components-CN9dra1h.js,sha256=MEQ7hAxk7BTbYMSLnbwQ67BnBFqZW79yHJQLPJAO3Uc,390205
|
|
292
|
+
phoenix/server/static/assets/index-DcnHbEy5.js,sha256=O6Z5cf7vTw3Nj2SNxsl_QWXYYwSj2k3uV6Sk_V4ipUE,8711
|
|
293
|
+
phoenix/server/static/assets/pages-nMcybglv.js,sha256=suAAMt5HEOeCllO8MYDnfspDLJHvONvz-FPgOF7Lz4c,680658
|
|
294
294
|
phoenix/server/static/assets/vendor-DvC8cT4X.js,sha256=-EzJrg6BeYa58JPfaZC6KS5gvkJ8gC1n-Sb7lP-pOkw,2159677
|
|
295
295
|
phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
|
|
296
296
|
phoenix/server/static/assets/vendor-arizeai-Do1793cv.js,sha256=IFADVVEZ8VY9o4iqYighRedZTXSyi1uZMTFFsBeIYis,305184
|
|
@@ -317,7 +317,7 @@ phoenix/trace/schemas.py,sha256=Su6e567Bei9oo6PsWO2srTcPAj9C2bMgbGtx64Sgqeg,6332
|
|
|
317
317
|
phoenix/trace/span_evaluations.py,sha256=x3nye9r2SQk1mrR3N05YbuWsgUKpMWwTRBtJTDBSj3Y,13156
|
|
318
318
|
phoenix/trace/span_json_decoder.py,sha256=J1_oDViuUoC4vxPg61U4EOZC1uEMcCzoj-kVjOFEE8k,3224
|
|
319
319
|
phoenix/trace/span_json_encoder.py,sha256=Wa7RvQTZSsFG4pdKSSFSO_4q4DjAOQuG8wLNJvYzsfM,2004
|
|
320
|
-
phoenix/trace/trace_dataset.py,sha256=
|
|
320
|
+
phoenix/trace/trace_dataset.py,sha256=jOlAD8_QqbI3hwqya72hrd3zo-pg7ok1I1a4psoHqbA,14936
|
|
321
321
|
phoenix/trace/utils.py,sha256=nlOmbF4n57s6qwZsMoeyEdfPHl6KE0fZM8V9aHaIR-I,1681
|
|
322
322
|
phoenix/trace/dsl/README.md,sha256=ihmP9zGUC5V-TDbzKla76LuyDqPDQIBUH2BORwxNI68,2902
|
|
323
323
|
phoenix/trace/dsl/__init__.py,sha256=WIQIjJg362XD3s50OsPJJ0xbDsGp41bSv7vDllLrPuA,144
|
|
@@ -328,18 +328,18 @@ phoenix/trace/v1/__init__.py,sha256=-IbAD0ruESMjvQLvGAg9CTfjBUATFDx1OXseDPis6-0,
|
|
|
328
328
|
phoenix/trace/v1/evaluation_pb2.py,sha256=8sXvv2BW_vqD30MOMbmkeE2zpmm7ncik21kl3e-HzeQ,2254
|
|
329
329
|
phoenix/trace/v1/evaluation_pb2.pyi,sha256=cCbbx06gwQmaH14s3J1X25TtaARh-k1abbxQdQCXGm8,4500
|
|
330
330
|
phoenix/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
331
|
-
phoenix/utilities/client.py,sha256=
|
|
331
|
+
phoenix/utilities/client.py,sha256=o2Rb80zkesH0Vsf6AhgyROWN-tIDia4bJPOzosj4cfU,5478
|
|
332
332
|
phoenix/utilities/deprecation.py,sha256=LL1LWfVqnYulceMQw2CggoIv8Uogrj7fAD_85devnoo,1067
|
|
333
333
|
phoenix/utilities/error_handling.py,sha256=5_ggfwmd0xZPoI3qi1fwm0x1F0i7g5j-gr0ny1TFzPU,1967
|
|
334
334
|
phoenix/utilities/json.py,sha256=UE8WHZU060NY_8ZKJ97gmtEC2mp60d8tJFXyRqIz51Y,3743
|
|
335
335
|
phoenix/utilities/logging.py,sha256=NKvX43jWITgSTtHGCi6l5xp8jTjtQ8FQ_irEi9ybOxg,502
|
|
336
336
|
phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,445
|
|
337
|
-
phoenix/utilities/re.py,sha256=
|
|
337
|
+
phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
|
|
338
338
|
phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
339
339
|
phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
|
|
340
|
-
arize_phoenix-7.9.
|
|
341
|
-
arize_phoenix-7.9.
|
|
342
|
-
arize_phoenix-7.9.
|
|
343
|
-
arize_phoenix-7.9.
|
|
344
|
-
arize_phoenix-7.9.
|
|
345
|
-
arize_phoenix-7.9.
|
|
340
|
+
arize_phoenix-7.9.2.dist-info/METADATA,sha256=pmHTChiqJow1I5CL_2SRV4cA01dN4IKEgATilBJiGbU,23522
|
|
341
|
+
arize_phoenix-7.9.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
342
|
+
arize_phoenix-7.9.2.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
|
|
343
|
+
arize_phoenix-7.9.2.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
344
|
+
arize_phoenix-7.9.2.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
345
|
+
arize_phoenix-7.9.2.dist-info/RECORD,,
|
phoenix/config.py
CHANGED
|
@@ -625,10 +625,13 @@ def get_env_enable_prometheus() -> bool:
|
|
|
625
625
|
)
|
|
626
626
|
|
|
627
627
|
|
|
628
|
-
def get_env_client_headers() ->
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
628
|
+
def get_env_client_headers() -> dict[str, str]:
|
|
629
|
+
headers = parse_env_headers(os.getenv(ENV_PHOENIX_CLIENT_HEADERS))
|
|
630
|
+
if (api_key := get_env_phoenix_api_key()) and "authorization" not in [
|
|
631
|
+
k.lower() for k in headers
|
|
632
|
+
]:
|
|
633
|
+
headers["Authorization"] = f"Bearer {api_key}"
|
|
634
|
+
return headers
|
|
632
635
|
|
|
633
636
|
|
|
634
637
|
def get_base_url() -> str:
|
phoenix/experiments/functions.py
CHANGED
|
@@ -30,7 +30,7 @@ from opentelemetry.sdk.trace.export import SimpleSpanProcessor
|
|
|
30
30
|
from opentelemetry.trace import Status, StatusCode, Tracer
|
|
31
31
|
from typing_extensions import TypeAlias
|
|
32
32
|
|
|
33
|
-
from phoenix.config import get_base_url
|
|
33
|
+
from phoenix.config import get_base_url, get_env_client_headers
|
|
34
34
|
from phoenix.evals.executors import get_executor_on_sync_context
|
|
35
35
|
from phoenix.evals.models.rate_limiters import RateLimiter
|
|
36
36
|
from phoenix.evals.utils import get_tqdm_progress_bar_formatter
|
|
@@ -671,7 +671,12 @@ def _get_tracer(project_name: Optional[str] = None) -> tuple[Tracer, Resource]:
|
|
|
671
671
|
resource = Resource({ResourceAttributes.PROJECT_NAME: project_name} if project_name else {})
|
|
672
672
|
tracer_provider = trace_sdk.TracerProvider(resource=resource)
|
|
673
673
|
span_processor = (
|
|
674
|
-
SimpleSpanProcessor(
|
|
674
|
+
SimpleSpanProcessor(
|
|
675
|
+
OTLPSpanExporter(
|
|
676
|
+
endpoint=urljoin(f"{get_base_url()}", "v1/traces"),
|
|
677
|
+
headers=get_env_client_headers(),
|
|
678
|
+
)
|
|
679
|
+
)
|
|
675
680
|
if project_name
|
|
676
681
|
else _NoOpProcessor()
|
|
677
682
|
)
|
|
@@ -4,7 +4,7 @@ from itertools import accumulate, repeat, takewhile
|
|
|
4
4
|
|
|
5
5
|
import strawberry
|
|
6
6
|
|
|
7
|
-
from phoenix.
|
|
7
|
+
from phoenix.core import model_schema
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
@strawberry.input(
|
|
@@ -38,7 +38,7 @@ class Granularity:
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def to_timestamps(
|
|
41
|
-
time_range: TimeRange,
|
|
41
|
+
time_range: model_schema.TimeRange,
|
|
42
42
|
granularity: Granularity,
|
|
43
43
|
) -> Iterator[datetime]:
|
|
44
44
|
if not granularity.sampling_interval_minutes:
|
|
@@ -51,6 +51,6 @@ def to_timestamps(
|
|
|
51
51
|
minutes=granularity.sampling_interval_minutes,
|
|
52
52
|
)
|
|
53
53
|
),
|
|
54
|
-
initial=time_range.
|
|
54
|
+
initial=time_range.stop,
|
|
55
55
|
),
|
|
56
56
|
)
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
from datetime import datetime, timezone
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
import strawberry
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
@strawberry.input
|
|
7
8
|
class TimeRange:
|
|
8
|
-
start: datetime = strawberry.field(
|
|
9
|
+
start: Optional[datetime] = strawberry.field(
|
|
9
10
|
description="The start of the time range",
|
|
10
11
|
)
|
|
11
|
-
end: datetime = strawberry.field(
|
|
12
|
+
end: Optional[datetime] = strawberry.field(
|
|
12
13
|
description="The end of the time range. Right exclusive.",
|
|
13
14
|
)
|
|
14
15
|
|
|
15
16
|
def __post_init__(self) -> None:
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
if self.start:
|
|
18
|
+
self.start = self.start.astimezone(timezone.utc)
|
|
19
|
+
if self.end:
|
|
20
|
+
self.end = self.end.astimezone(timezone.utc)
|
|
18
21
|
|
|
19
22
|
def is_valid(self) -> bool:
|
|
20
|
-
return self.start < self.end
|
|
23
|
+
return not self.start or not self.end or self.start < self.end
|
|
@@ -9,6 +9,7 @@ from strawberry.types import Info
|
|
|
9
9
|
from typing_extensions import Annotated
|
|
10
10
|
|
|
11
11
|
import phoenix.core.model_schema as ms
|
|
12
|
+
from phoenix.core import model_schema
|
|
12
13
|
from phoenix.core.model_schema import CONTINUOUS, PRIMARY, REFERENCE, ScalarDimension
|
|
13
14
|
from phoenix.metrics import binning
|
|
14
15
|
from phoenix.metrics.metrics import Count
|
|
@@ -71,14 +72,14 @@ class Dimension(Node):
|
|
|
71
72
|
if model[REFERENCE].empty:
|
|
72
73
|
return None
|
|
73
74
|
inferences = model[PRIMARY]
|
|
74
|
-
|
|
75
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
75
76
|
inferences,
|
|
76
77
|
time_range,
|
|
77
78
|
)
|
|
78
79
|
data = get_drift_timeseries_data(
|
|
79
80
|
self.dimension,
|
|
80
81
|
metric,
|
|
81
|
-
|
|
82
|
+
resolved_time_range,
|
|
82
83
|
granularity,
|
|
83
84
|
pd.DataFrame(
|
|
84
85
|
{self.dimension.name: self.dimension[REFERENCE]},
|
|
@@ -103,14 +104,14 @@ class Dimension(Node):
|
|
|
103
104
|
if not isinstance(inferences_role, InferencesRole):
|
|
104
105
|
inferences_role = InferencesRole.primary
|
|
105
106
|
inferences = info.context.model[inferences_role.value]
|
|
106
|
-
|
|
107
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
107
108
|
inferences,
|
|
108
109
|
time_range,
|
|
109
110
|
)
|
|
110
111
|
data = get_data_quality_timeseries_data(
|
|
111
112
|
self.dimension,
|
|
112
113
|
metric,
|
|
113
|
-
|
|
114
|
+
resolved_time_range,
|
|
114
115
|
granularity,
|
|
115
116
|
inferences_role,
|
|
116
117
|
)
|
|
@@ -150,7 +151,7 @@ class Dimension(Node):
|
|
|
150
151
|
if not isinstance(inferences_role, InferencesRole):
|
|
151
152
|
inferences_role = InferencesRole.primary
|
|
152
153
|
inferences = info.context.model[inferences_role.value]
|
|
153
|
-
|
|
154
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
154
155
|
inferences,
|
|
155
156
|
time_range,
|
|
156
157
|
granularity,
|
|
@@ -159,7 +160,7 @@ class Dimension(Node):
|
|
|
159
160
|
data=get_data_quality_timeseries_data(
|
|
160
161
|
self.dimension,
|
|
161
162
|
metric,
|
|
162
|
-
|
|
163
|
+
resolved_time_range,
|
|
163
164
|
granularity,
|
|
164
165
|
inferences_role,
|
|
165
166
|
)
|
|
@@ -184,7 +185,7 @@ class Dimension(Node):
|
|
|
184
185
|
if model[REFERENCE].empty:
|
|
185
186
|
return DriftTimeSeries(data=[])
|
|
186
187
|
inferences = model[PRIMARY]
|
|
187
|
-
|
|
188
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
188
189
|
inferences,
|
|
189
190
|
time_range,
|
|
190
191
|
granularity,
|
|
@@ -193,7 +194,7 @@ class Dimension(Node):
|
|
|
193
194
|
data=get_drift_timeseries_data(
|
|
194
195
|
self.dimension,
|
|
195
196
|
metric,
|
|
196
|
-
|
|
197
|
+
resolved_time_range,
|
|
197
198
|
granularity,
|
|
198
199
|
pd.DataFrame(
|
|
199
200
|
{self.dimension.name: self.dimension[REFERENCE]},
|
|
@@ -229,10 +230,14 @@ class Dimension(Node):
|
|
|
229
230
|
if (df := model[role]).empty:
|
|
230
231
|
continue
|
|
231
232
|
if time_range:
|
|
233
|
+
resolved_time_range = model_schema.TimeRange(
|
|
234
|
+
start=time_range.start or df.time_range.start,
|
|
235
|
+
stop=time_range.end or df.time_range.stop,
|
|
236
|
+
)
|
|
232
237
|
start, stop = row_interval_from_sorted_time_index(
|
|
233
238
|
df.index,
|
|
234
|
-
|
|
235
|
-
|
|
239
|
+
resolved_time_range.start,
|
|
240
|
+
resolved_time_range.stop,
|
|
236
241
|
)
|
|
237
242
|
df = df.iloc[start:stop]
|
|
238
243
|
summaries[role] = binning_method.segmented_summary(
|
|
@@ -15,6 +15,7 @@ from strawberry.types import Info
|
|
|
15
15
|
from typing_extensions import Annotated
|
|
16
16
|
|
|
17
17
|
import phoenix.core.model_schema as ms
|
|
18
|
+
from phoenix.core import model_schema
|
|
18
19
|
from phoenix.core.model_schema import (
|
|
19
20
|
ACTUAL_LABEL,
|
|
20
21
|
ACTUAL_SCORE,
|
|
@@ -93,14 +94,14 @@ class EmbeddingDimension(Node):
|
|
|
93
94
|
if model[REFERENCE].empty:
|
|
94
95
|
return None
|
|
95
96
|
dataset = model[PRIMARY]
|
|
96
|
-
|
|
97
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
97
98
|
dataset,
|
|
98
99
|
time_range,
|
|
99
100
|
)
|
|
100
101
|
data = get_drift_timeseries_data(
|
|
101
102
|
self.dimension,
|
|
102
103
|
metric,
|
|
103
|
-
|
|
104
|
+
resolved_time_range,
|
|
104
105
|
granularity,
|
|
105
106
|
pd.DataFrame(
|
|
106
107
|
{self.dimension.name: self.dimension[REFERENCE]},
|
|
@@ -127,14 +128,14 @@ class EmbeddingDimension(Node):
|
|
|
127
128
|
return None
|
|
128
129
|
model = info.context.model
|
|
129
130
|
dataset = model[PRIMARY]
|
|
130
|
-
|
|
131
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
131
132
|
dataset,
|
|
132
133
|
time_range,
|
|
133
134
|
)
|
|
134
135
|
data = get_drift_timeseries_data(
|
|
135
136
|
self.dimension,
|
|
136
137
|
metric,
|
|
137
|
-
|
|
138
|
+
resolved_time_range,
|
|
138
139
|
granularity,
|
|
139
140
|
pd.DataFrame(
|
|
140
141
|
{self.dimension.name: self.dimension(corpus[PRIMARY])},
|
|
@@ -167,7 +168,7 @@ class EmbeddingDimension(Node):
|
|
|
167
168
|
if not isinstance(inferences_role, InferencesRole):
|
|
168
169
|
inferences_role = InferencesRole.primary
|
|
169
170
|
dataset = info.context.model[inferences_role.value]
|
|
170
|
-
|
|
171
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
171
172
|
dataset,
|
|
172
173
|
time_range,
|
|
173
174
|
granularity,
|
|
@@ -176,7 +177,7 @@ class EmbeddingDimension(Node):
|
|
|
176
177
|
data=get_data_quality_timeseries_data(
|
|
177
178
|
self.dimension,
|
|
178
179
|
metric,
|
|
179
|
-
|
|
180
|
+
resolved_time_range,
|
|
180
181
|
granularity,
|
|
181
182
|
inferences_role,
|
|
182
183
|
)
|
|
@@ -203,7 +204,7 @@ class EmbeddingDimension(Node):
|
|
|
203
204
|
if model[REFERENCE].empty:
|
|
204
205
|
return DriftTimeSeries(data=[])
|
|
205
206
|
dataset = model[PRIMARY]
|
|
206
|
-
|
|
207
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
207
208
|
dataset,
|
|
208
209
|
time_range,
|
|
209
210
|
granularity,
|
|
@@ -212,7 +213,7 @@ class EmbeddingDimension(Node):
|
|
|
212
213
|
data=get_drift_timeseries_data(
|
|
213
214
|
self.dimension,
|
|
214
215
|
metric,
|
|
215
|
-
|
|
216
|
+
resolved_time_range,
|
|
216
217
|
granularity,
|
|
217
218
|
pd.DataFrame(
|
|
218
219
|
{self.dimension.name: self.dimension[REFERENCE]},
|
|
@@ -242,7 +243,7 @@ class EmbeddingDimension(Node):
|
|
|
242
243
|
return DriftTimeSeries(data=[])
|
|
243
244
|
model = info.context.model
|
|
244
245
|
dataset = model[PRIMARY]
|
|
245
|
-
|
|
246
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
246
247
|
dataset,
|
|
247
248
|
time_range,
|
|
248
249
|
granularity,
|
|
@@ -251,7 +252,7 @@ class EmbeddingDimension(Node):
|
|
|
251
252
|
data=get_drift_timeseries_data(
|
|
252
253
|
self.dimension,
|
|
253
254
|
metric,
|
|
254
|
-
|
|
255
|
+
resolved_time_range,
|
|
255
256
|
granularity,
|
|
256
257
|
pd.DataFrame(
|
|
257
258
|
{self.dimension.name: self.dimension(corpus[PRIMARY])},
|
|
@@ -320,10 +321,14 @@ class EmbeddingDimension(Node):
|
|
|
320
321
|
inferences_id = inferences.role
|
|
321
322
|
row_id_start, row_id_stop = 0, len(inferences)
|
|
322
323
|
if inferences_id is PRIMARY:
|
|
324
|
+
resolved_time_range = model_schema.TimeRange(
|
|
325
|
+
start=time_range.start or inferences.time_range.start,
|
|
326
|
+
stop=time_range.end or inferences.time_range.stop,
|
|
327
|
+
)
|
|
323
328
|
row_id_start, row_id_stop = row_interval_from_sorted_time_index(
|
|
324
329
|
time_index=cast(pd.DatetimeIndex, inferences.index),
|
|
325
|
-
time_start=
|
|
326
|
-
time_stop=
|
|
330
|
+
time_start=resolved_time_range.start,
|
|
331
|
+
time_stop=resolved_time_range.stop,
|
|
327
332
|
)
|
|
328
333
|
vector_column = self.dimension[inferences_id]
|
|
329
334
|
samples_collected = 0
|
|
@@ -167,7 +167,7 @@ class Model:
|
|
|
167
167
|
inferences_role = InferencesRole.primary
|
|
168
168
|
model = info.context.model
|
|
169
169
|
inferences = model[inferences_role.value]
|
|
170
|
-
|
|
170
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
171
171
|
inferences,
|
|
172
172
|
time_range,
|
|
173
173
|
)
|
|
@@ -175,7 +175,7 @@ class Model:
|
|
|
175
175
|
data = get_timeseries_data(
|
|
176
176
|
inferences,
|
|
177
177
|
metric_instance,
|
|
178
|
-
|
|
178
|
+
resolved_time_range,
|
|
179
179
|
granularity,
|
|
180
180
|
)
|
|
181
181
|
return data[0].value if len(data) else None
|
|
@@ -205,7 +205,7 @@ class Model:
|
|
|
205
205
|
inferences_role = InferencesRole.primary
|
|
206
206
|
model = info.context.model
|
|
207
207
|
inferences = model[inferences_role.value]
|
|
208
|
-
|
|
208
|
+
resolved_time_range, granularity = ensure_timeseries_parameters(
|
|
209
209
|
inferences,
|
|
210
210
|
time_range,
|
|
211
211
|
granularity,
|
|
@@ -215,7 +215,7 @@ class Model:
|
|
|
215
215
|
data=get_timeseries_data(
|
|
216
216
|
inferences,
|
|
217
217
|
metric_instance,
|
|
218
|
-
|
|
218
|
+
resolved_time_range,
|
|
219
219
|
granularity,
|
|
220
220
|
)
|
|
221
221
|
)
|
|
@@ -8,6 +8,7 @@ import pandas as pd
|
|
|
8
8
|
import strawberry
|
|
9
9
|
from strawberry import UNSET
|
|
10
10
|
|
|
11
|
+
from phoenix.core import model_schema
|
|
11
12
|
from phoenix.core.model_schema import CONTINUOUS, PRIMARY, REFERENCE, Column, Dimension, Inferences
|
|
12
13
|
from phoenix.metrics import Metric, binning
|
|
13
14
|
from phoenix.metrics.mixins import UnaryOperator
|
|
@@ -69,13 +70,13 @@ class TimeSeries:
|
|
|
69
70
|
def get_timeseries_data(
|
|
70
71
|
df: pd.DataFrame,
|
|
71
72
|
metric: Metric,
|
|
72
|
-
time_range: TimeRange,
|
|
73
|
+
time_range: model_schema.TimeRange,
|
|
73
74
|
granularity: Granularity,
|
|
74
75
|
) -> list[TimeSeriesDataPoint]:
|
|
75
76
|
return df.pipe(
|
|
76
77
|
timeseries(
|
|
77
78
|
start_time=time_range.start,
|
|
78
|
-
end_time=time_range.
|
|
79
|
+
end_time=time_range.stop,
|
|
79
80
|
evaluation_window=timedelta(
|
|
80
81
|
minutes=granularity.evaluation_window_minutes,
|
|
81
82
|
),
|
|
@@ -99,7 +100,7 @@ class DataQualityTimeSeries(TimeSeries):
|
|
|
99
100
|
def get_data_quality_timeseries_data(
|
|
100
101
|
dimension: Dimension,
|
|
101
102
|
metric: DataQualityMetric,
|
|
102
|
-
time_range: TimeRange,
|
|
103
|
+
time_range: model_schema.TimeRange,
|
|
103
104
|
granularity: Granularity,
|
|
104
105
|
inferences_role: InferencesRole,
|
|
105
106
|
) -> list[TimeSeriesDataPoint]:
|
|
@@ -129,7 +130,7 @@ class DriftTimeSeries(TimeSeries):
|
|
|
129
130
|
def get_drift_timeseries_data(
|
|
130
131
|
dimension: Dimension,
|
|
131
132
|
metric: Union[ScalarDriftMetric, VectorDriftMetric],
|
|
132
|
-
time_range: TimeRange,
|
|
133
|
+
time_range: model_schema.TimeRange,
|
|
133
134
|
granularity: Granularity,
|
|
134
135
|
reference_data: pd.DataFrame,
|
|
135
136
|
) -> list[TimeSeriesDataPoint]:
|
|
@@ -165,14 +166,15 @@ class PerformanceTimeSeries(TimeSeries):
|
|
|
165
166
|
|
|
166
167
|
def ensure_timeseries_parameters(
|
|
167
168
|
inferences: Inferences,
|
|
168
|
-
|
|
169
|
+
time_range_input: Optional[TimeRange] = UNSET,
|
|
169
170
|
granularity: Optional[Granularity] = UNSET,
|
|
170
|
-
) -> tuple[TimeRange, Granularity]:
|
|
171
|
-
|
|
172
|
-
start
|
|
173
|
-
|
|
171
|
+
) -> tuple[model_schema.TimeRange, Granularity]:
|
|
172
|
+
time_range = model_schema.TimeRange(
|
|
173
|
+
start=(time_range_input and time_range_input.start) or inferences.time_range.start,
|
|
174
|
+
stop=(time_range_input and time_range_input.end) or inferences.time_range.stop,
|
|
175
|
+
)
|
|
174
176
|
if not isinstance(granularity, Granularity):
|
|
175
|
-
total_minutes = int((time_range.
|
|
177
|
+
total_minutes = int((time_range.stop - time_range.start).total_seconds()) // 60
|
|
176
178
|
granularity = Granularity(
|
|
177
179
|
evaluation_window_minutes=total_minutes,
|
|
178
180
|
sampling_interval_minutes=total_minutes,
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-CN9dra1h.js": {
|
|
3
|
+
"file": "assets/components-CN9dra1h.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
6
|
"_vendor-DvC8cT4X.js",
|
|
7
|
-
"_pages-
|
|
7
|
+
"_pages-nMcybglv.js",
|
|
8
8
|
"_vendor-arizeai-Do1793cv.js",
|
|
9
9
|
"_vendor-codemirror-BzwZPyJM.js",
|
|
10
10
|
"_vendor-three-DwGkEfCM.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-nMcybglv.js": {
|
|
14
|
+
"file": "assets/pages-nMcybglv.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
17
|
"_vendor-DvC8cT4X.js",
|
|
18
18
|
"_vendor-arizeai-Do1793cv.js",
|
|
19
|
-
"_components-
|
|
19
|
+
"_components-CN9dra1h.js",
|
|
20
20
|
"_vendor-codemirror-BzwZPyJM.js",
|
|
21
21
|
"_vendor-recharts-_Jb7JjhG.js"
|
|
22
22
|
]
|
|
@@ -69,15 +69,15 @@
|
|
|
69
69
|
"name": "vendor-three"
|
|
70
70
|
},
|
|
71
71
|
"index.tsx": {
|
|
72
|
-
"file": "assets/index-
|
|
72
|
+
"file": "assets/index-DcnHbEy5.js",
|
|
73
73
|
"name": "index",
|
|
74
74
|
"src": "index.tsx",
|
|
75
75
|
"isEntry": true,
|
|
76
76
|
"imports": [
|
|
77
77
|
"_vendor-DvC8cT4X.js",
|
|
78
78
|
"_vendor-arizeai-Do1793cv.js",
|
|
79
|
-
"_pages-
|
|
80
|
-
"_components-
|
|
79
|
+
"_pages-nMcybglv.js",
|
|
80
|
+
"_components-CN9dra1h.js",
|
|
81
81
|
"_vendor-three-DwGkEfCM.js",
|
|
82
82
|
"_vendor-codemirror-BzwZPyJM.js",
|
|
83
83
|
"_vendor-shiki-Cl9QBraO.js",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as p,R as G,j as e,n as Wn,a as we,e as Xe,s as T1,b as e1,c as ke,d as N1,f as Da,g as ge,h as Pa,i as Oa,k as R1,l,m as _a,o as Se,C as t1,p as Be,q as $e,t as N,u as Fa,v as Na,L as Un,w as jn,x as Qn,y as oe,z as w,A as u1,B as qn,D as m,E as Xn,F as Yn,G as Ze,$ as Ra,H as Ha,I as Ka,J as Z1,K as Jn,M as a1,N as i1,O as et,P as r1,Q as Ba,S as $a,T as Za,U,V as Ga,W as Wa,X as Ua,Y as nt,Z as ja,_ as Qa,a0 as tt,a1 as qa,a2 as V,a3 as at,a4 as Te,a5 as m1,a6 as Ee,a7 as F,a8 as Xa,a9 as Ya,aa as Ja,ab as ei,ac as hn,ad as ni,ae as ti,af as ai,ag as gn,ah as ii,ai as ri,aj as oi,ak as I1,al as G1,am as li,an as si,ao as ci,ap as di,aq as ui,ar as mi,as as pi,at as hi,au as gi,av as fi,aw as Ci,ax as bi,ay as Li,az as vi,aA as yi,aB as wi,aC as ki}from"./vendor-DvC8cT4X.js";import{m as Si,T as xi,a as fn,u as Mi}from"./pages-
|
|
1
|
+
import{r as p,R as G,j as e,n as Wn,a as we,e as Xe,s as T1,b as e1,c as ke,d as N1,f as Da,g as ge,h as Pa,i as Oa,k as R1,l,m as _a,o as Se,C as t1,p as Be,q as $e,t as N,u as Fa,v as Na,L as Un,w as jn,x as Qn,y as oe,z as w,A as u1,B as qn,D as m,E as Xn,F as Yn,G as Ze,$ as Ra,H as Ha,I as Ka,J as Z1,K as Jn,M as a1,N as i1,O as et,P as r1,Q as Ba,S as $a,T as Za,U,V as Ga,W as Wa,X as Ua,Y as nt,Z as ja,_ as Qa,a0 as tt,a1 as qa,a2 as V,a3 as at,a4 as Te,a5 as m1,a6 as Ee,a7 as F,a8 as Xa,a9 as Ya,aa as Ja,ab as ei,ac as hn,ad as ni,ae as ti,af as ai,ag as gn,ah as ii,ai as ri,aj as oi,ak as I1,al as G1,am as li,an as si,ao as ci,ap as di,aq as ui,ar as mi,as as pi,at as hi,au as gi,av as fi,aw as Ci,ax as bi,ay as Li,az as vi,aA as yi,aB as wi,aC as ki}from"./vendor-DvC8cT4X.js";import{m as Si,T as xi,a as fn,u as Mi}from"./pages-nMcybglv.js";import{u as Ti,_ as it,a as te,T as j,b as Ii,c as Ai,R as J,d as Ge,e as ne,f as zi,E as rt,g as B,h as W1,i as Ve,j as ot,k as ve,D as p1,l as o1,I as U1,m as j1,n as lt,P as Q1,C as h1,o as g1,A as We,L as Ce,p as Ei,q as ye,F as st,r as Vi,s as Di,t as Pi,v as ce,w as de,x as Oi,y as _i,z as Cn,B as Fi}from"./vendor-arizeai-Do1793cv.js";import{L as ct,a as dt,l as H1,j as ut,h as Ni,b as Ri,c as Hi,d as Ki,e as Bi,f as $i,s as Zi,R as Ue,g as mt,n as je,i as pt,E as q1,p as Gi,k as Wi}from"./vendor-codemirror-BzwZPyJM.js";import{V as Ui}from"./vendor-three-DwGkEfCM.js";const ht=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},i={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},r={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},o=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],s=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:o,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:o,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,t,a,i,r],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:s,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,t,i,r],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:s},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
|
|
2
2
|
$clusters: [ClusterInput!]!
|
|
3
3
|
$fetchDataQualityMetric: Boolean!
|
|
4
4
|
$dataQualityMetricColumnName: String
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as c,j as e,dL as v,l as n,U as F,R as w,D as E,bq as L,dM as S,dN as R,dO as a,dP as k,t as I,dQ as A}from"./vendor-DvC8cT4X.js";import{k as C,Q as _,D as j,Y as z}from"./vendor-arizeai-Do1793cv.js";import{E as O,L as T,R as D,r as N,b as G,F as M,A as U,c as q,d as B,P as J,h as K,M as Q,e as m,D as V,f as W,g as H,i as Y,j as $,k as X,l as Z,p as ee,n as h,o as ae,S as re,s as te,q as oe,t as g,v as ne,w as u,x as b,y as se,z as le,B as ie,C as de,G as ce,H as x,I as pe,J as me,K as he,N as ge,O as ue,Q as be,U as xe,V as fe}from"./pages-
|
|
1
|
+
import{r as c,j as e,dL as v,l as n,U as F,R as w,D as E,bq as L,dM as S,dN as R,dO as a,dP as k,t as I,dQ as A}from"./vendor-DvC8cT4X.js";import{k as C,Q as _,D as j,Y as z}from"./vendor-arizeai-Do1793cv.js";import{E as O,L as T,R as D,r as N,b as G,F as M,A as U,c as q,d as B,P as J,h as K,M as Q,e as m,D as V,f as W,g as H,i as Y,j as $,k as X,l as Z,p as ee,n as h,o as ae,S as re,s as te,q as oe,t as g,v as ne,w as u,x as b,y as se,z as le,B as ie,C as de,G as ce,H as x,I as pe,J as me,K as he,N as ge,O as ue,Q as be,U as xe,V as fe}from"./pages-nMcybglv.js";import{V as Pe,d2 as ye,at as ve,ab as Fe,d3 as we,d4 as Ee}from"./components-CN9dra1h.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-codemirror-BzwZPyJM.js";import"./vendor-shiki-Cl9QBraO.js";import"./vendor-recharts-_Jb7JjhG.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))d(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&d(l)}).observe(document,{childList:!0,subtree:!0});function i(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function d(t){if(t.ep)return;t.ep=!0;const o=i(t);fetch(t.href,o)}})();const f="arize-phoenix-feature-flags",p={__RESET__:!1};function Le(){const r=localStorage.getItem(f);if(!r)return p;try{const s=JSON.parse(r);return Object.assign({},p,s)}catch{return p}}const P=c.createContext(null);function Se(){const r=w.useContext(P);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function Re(r){const[s,i]=c.useState(Le()),d=t=>{localStorage.setItem(f,JSON.stringify(t)),i(t)};return e(P.Provider,{value:{featureFlags:s,setFeatureFlags:d},children:e(ke,{children:r.children})})}function ke(r){const{children:s}=r,{featureFlags:i,setFeatureFlags:d}=Se(),[t,o]=c.useState(!1);return v("ctrl+shift+f",()=>o(!0)),n(F,{children:[s,e(j,{type:"modal",isDismissable:!0,onDismiss:()=>o(!1),children:t&&e(C,{title:"Feature Flags",children:e(Pe,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(l=>e(_,{isSelected:i[l],onChange:y=>d({...i,[l]:y}),children:l},l))})})})]})}function Ie(){return e(L,{styles:E`
|
|
2
2
|
body {
|
|
3
3
|
background-color: var(--ac-global-color-grey-75);
|
|
4
4
|
color: var(--ac-global-text-color-900);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{z as R,aD as de,aE as Le,aF as _e,aG as Oa,A as _d,r as u,j as e,R as ve,n as Ea,D as v,l as s,aH as je,a0 as Y,U as B,t as L,a6 as Be,a7 as G,a8 as Ke,a9 as Te,ac as W,aI as he,aJ as mn,aK as gn,aL as Oe,aM as Ed,aN as Et,aO as Dn,aP as Ga,a2 as ie,aQ as Va,ab as Gn,g as Xl,aR as wd,a4 as zt,G as Rd,aS as Md,aT as bt,aU as St,aV as ka,aW as da,aX as Yl,o as Xa,aY as Ad,ay as Nd,az as zd,aZ as Vd,p as ei,q as $d,a_ as Od,ah as Qd,a$ as jd,b0 as fl,b1 as qd,b2 as Ud,b3 as Bd,b4 as Hd,b5 as Gd,b6 as Wd,b7 as Jd,b8 as Zd,b9 as Xd}from"./vendor-DvC8cT4X.js";import{A as ce,C as j,h as Vt,k as J,D as ee,B as $t,y as qe,z as ne,G as Yd,s as Ya,p as et,P as Wn,j as Jn,q as nt,v as Zn,w as ca,H as Xe,L as Qa,J as ni,K as ec,M as ai,N as nc,O as ac,Q as ua,e as we,f as Xn,T as ue,S as Ot,i as Re,g as ae,E as at,a as De,U as Qt,V as jt,c as Pn,o as hl,W as tc,n as lc,I as ic,m as kl,l as rc,u as sc,X as oc,r as dc,R as xa,d as ti}from"./vendor-arizeai-Do1793cv.js";import{s as qt,a as me,l as cc,j as li,b as Ae,i as ii,c as ri,d as Tn,e as si,f as uc,g as Da,D as mc,h as ja,k as gc,T as On,m as pc,n as bl,o as yc,p as fc,q as Sl,r as hc,t as kc,N as bc,u as Sc,L as ye,v as Ce,w as wa,B as vc,_ as k,x as Cn,I as D,C as Cc,G as oi,y as Ut,P as ma,z as tt,S as Fc,A as Kc,E as Tc,F as xc,H as Ic,J as Dc,K as Pc,M as Lc,O as un,Q as N,R as He,U as di,V as C,W as ze,X as Bt,Y as Yn,Z as Me,$ as F,a0 as pe,a1 as Fe,a2 as ga,a3 as pn,a4 as kn,a5 as lt,a6 as xe,a7 as re,a8 as Ze,a9 as Ln,aa as se,ab as Ne,ac as ci,ad as We,ae as ui,af as Ye,ag as _n,ah as Ht,ai as an,aj as bn,ak as Gt,al as mi,am as gi,an as yn,ao as ke,ap as be,aq as Se,ar as vl,as as Cl,at as Sn,au as _c,av as Ec,aw as U,ax as pi,ay as Wt,az as it,aA as pa,aB as yi,aC as ya,aD as fa,aE as fi,aF as vn,aG as Ee,aH as rt,aI as En,aJ as hi,aK as Jt,aL as tn,aM as ki,aN as wc,aO as Rc,aP as Mc,aQ as Ac,aR as Nc,aS as ln,aT as rn,aU as zc,aV as Ge,aW as Vc,aX as $c,aY as bi,aZ as Oc,a_ as Qc,a$ as Fl,b0 as jc,b1 as qc,b2 as Uc,b3 as Bc,b4 as Hc,b5 as Gc,b6 as Si,b7 as Wc,b8 as Jc,b9 as Zc,ba as Xc,bb as Yc,bc as qn,bd as Zt,be as vi,bf as ra,bg as wt,bh as $n,bi as Kn,bj as eu,bk as nu,bl as Ci,bm as st,bn as Fi,bo as sn,bp as au,bq as tu,br as Pa,bs as Pe,bt as qa,bu as Ki,bv as lu,bw as $e,bx as Xt,by as iu,bz as ru,bA as su,bB as ou,bC as Yt,bD as Ue,bE as en,bF as ha,bG as du,bH as ot,bI as Ti,bJ as xi,bK as vt,bL as cu,bM as dt,bN as ct,bO as Je,bP as Ve,bQ as uu,bR as el,bS as Ii,bT as Di,bU as Pi,bV as mu,bW as on,bX as Li,bY as xn,bZ as gu,b_ as Kl,b$ as _i,c0 as pu,c1 as yu,c2 as fu,c3 as hu,c4 as Ei,c5 as dn,c6 as ku,c7 as sa,c8 as Rt,c9 as bu,ca as wi,cb as Ri,cc as Su,cd as vu,ce as Cu,cf as ut,cg as Mi,ch as Ra,ci as Tl,cj as Ai,ck as nl,cl as Fu,cm as Ku,cn as al,co as Ni,cp as zi,cq as Tu,cr as Mt,cs as Vi,ct as xu,cu as Iu,cv as $a,cw as Du,cx as Pu,cy as $i,cz as Oi,cA as Lu,cB as _u,cC as Eu,cD as wu,cE as Qi,cF as tl,cG as ji,cH as Ru,cI as Mu,cJ as At,cK as Au,cL as Nu,cM as zu,cN as Vu,cO as $u,cP as Ou,cQ as qi,cR as Qu,cS as ju,cT as qu,cU as Uu,cV as Bu,cW as Hu,cX as Gu,cY as Wu,cZ as Ju,c_ as Zu,c$ as Xu,d0 as xl,d1 as Il}from"./components-Dn-PoB4S.js";import{p as Ma,R as wn,n as Rn,i as Yu,E as Ui,m as Bi,o as Hi,g as em}from"./vendor-codemirror-BzwZPyJM.js";import{R as Mn,C as Aa,X as An,Y as nn,a as Nn,T as zn,B as oa,A as La,b as Gi,c as ll,L as Wi,d as nm,P as am,e as tm,f as lm}from"./vendor-recharts-_Jb7JjhG.js";const im=4,rm={user:["user","human"],ai:["assistant","bot","ai"],system:["system"],tool:["tool"]},sm="Unable to parse span input messages, expected messages which include a role and content.",om="Unable to parse span output messages, expected messages which include a role and content.",dm="Unable to parse span output expected output.value to be present.",cm="Unable to parse span attributes, attributes must be valid JSON.",um="Unable to parse model config, expected llm.model_name to be present.",mm="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",gm="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",pm="Unable to parse tools, expected tools to be an array of valid tools.",ym="Unable to parse prompt template variables, expected prompt template variables to be a valid JSON object string.",Dl={AZURE_OPENAI:[],ANTHROPIC:["claude"],OPENAI:["gpt","o1"],GEMINI:["gemini"]},Ia="TOOL_CHOICE",Ua="tool_choice",Un="RESPONSE_FORMAT",Qn="response_format",fm=[Ia,Un],il=qt()(R.union([R.literal("auto"),R.literal("none"),R.literal("required"),R.object({type:R.literal("function"),function:R.object({name:R.string()})})])),rl=R.object({type:R.union([R.literal("auto"),R.literal("any"),R.literal("tool")]),disable_parallel_tool_use:R.boolean().optional(),name:R.string().optional()}),hm=rl.transform(n=>{switch(n.type){case"any":case"auto":return"auto";case"tool":return n.name?{type:"function",function:{name:n.name}}:"auto";default:return"auto"}}),km=il.transform(n=>typeof n=="string"?{type:"auto"}:{type:"tool",name:n.function.name});R.union([il,rl]);const bm=n=>{const{success:a,data:t}=il.safeParse(n);if(a)return{provider:"OPENAI",toolChoice:t};const{success:l,data:i}=rl.safeParse(n);return l?{provider:"ANTHROPIC",toolChoice:i}:{provider:null,toolChoice:null}},Sm=n=>{const{provider:a,toolChoice:t}=bm(n);if(a==null||t==null)throw new Error("Could not detect provider of tool choice");switch(a){case"AZURE_OPENAI":case"OPENAI":return t;case"ANTHROPIC":return hm.parse(t);default:me()}},vm=({toolChoice:n,targetProvider:a})=>{switch(a){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return km.parse(n);case"GEMINI":return n;default:me()}},Cm=({toolChoice:n,targetProvider:a})=>{try{const t=Sm(n);return vm({toolChoice:t,targetProvider:a})}catch{return null}},Fm=R.object({tool_call:R.object({id:R.string().optional(),function:R.object({name:R.string(),arguments:R.string()}).partial()}).partial()}).partial(),Ji=R.object({[de.message]:R.object({[Le.role]:R.string(),[Le.content]:R.union([R.string(),R.array(R.record(R.string(),R.unknown()))]).default(""),[Le.tool_calls]:R.array(Fm).optional(),[Le.tool_call_id]:R.string().optional()})}),Km=R.object({[de.llm]:R.object({[_e.input_messages]:R.array(Ji)})}),Tm=R.object({[de.llm]:R.object({[_e.output_messages]:R.array(Ji)})}),xm=R.object({[de.output]:R.object({value:R.string()})}),Zi=qt()(R.enum(["user","ai","system","tool"])),Im=qt()(R.object({id:R.number(),role:Zi,content:R.string().optional(),toolCallId:R.string().optional(),toolCalls:R.array(cc).optional()})),Dm=R.array(Im),sl=R.lazy(()=>R.record(li)),Pm=sl,Xi=R.string().transform((n,a)=>{const{json:t}=Ae(n);if(!ii(t))return a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER;const{success:l,data:i}=Pm.safeParse(t);return l?i:(a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER)}).default("{}"),Lm=R.object({[de.llm]:R.object({[_e.provider]:R.string().optional(),[_e.model_name]:R.string()})}),Yi=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi})}),_m=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi.pipe(R.object({response_format:sl.optional()}))})}),Em=R.string().transform((n,a)=>{const{json:t}=Ae(n);return t==null||!ii(t)?(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid JSON object"}),R.NEVER):t}).transform((n,a)=>{const{data:t,success:l}=ri.safeParse(n);return l?t:(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid tool schema"}),R.NEVER)}),wm=R.object({[de.llm]:R.object({[_e.tools]:R.array(R.object({[de.tool]:R.object({[Oa.json_schema]:Em})}).optional()).optional()}).optional()}).optional(),Rm=R.lazy(()=>R.object({type:R.literal("json_schema"),json_schema:R.object({name:R.string().describe("The name of the schema"),schema:li.describe("The schema itself in JSON format"),strict:R.literal(!0).describe("The schema must be strict")})})),Mm=_d(Rm,{removeAdditionalStrategy:"passthrough"}),Am=R.string().transform((n,a)=>{const{json:t}=Ae(n);return Tn(t)?Object.entries(t).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:c}=si(o);c!=null&&(i[r]=c)}return i},{}):(a.addIssue({code:R.ZodIssueCode.custom,message:"The prompt template variables must be a valid JSON object"}),R.NEVER)}),Nm=R.object({[de.llm]:R.object({[_e.prompt_template]:R.object({variables:Am}).optional()}).optional()}).optional();function er(n){return Zi.safeParse(n).success}function Wa(n){if(er(n))return n;for(const[a,t]of Object.entries(rm))if(t.includes(n))return a;return gc}function zm({toolCalls:n,provider:a}){if(n!=null)return n.map(({tool_call:t})=>{var i,r,o,c;if(t==null)return null;let l={};if(((i=t.function)==null?void 0:i.arguments)!=null){const{json:d}=Ae(t.function.arguments);Tn(d)&&(l=d)}switch(a){case"OPENAI":case"AZURE_OPENAI":return{id:t.id??"",function:{name:((r=t.function)==null?void 0:r.name)??"",arguments:l}};case"ANTHROPIC":return{id:t.id??"",type:"tool_use",name:((o=t.function)==null?void 0:o.name)??"",input:l};case"GEMINI":return{id:t.id??"",function:{name:((c=t.function)==null?void 0:c.name)??"",arguments:l}};default:me()}}).filter(t=>t!=null)}function nr({messages:n,provider:a}){return n.map(({message:t})=>({id:Da(),role:t.tool_call_id!=null?Wa("tool"):Wa(t.role),content:typeof t.content=="string"?t.content:void 0,toolCalls:zm({provider:a,toolCalls:t.tool_calls}),toolCallId:t.tool_call_id}))}function Vm({provider:n,parsedAttributes:a}){var l;const t=Km.safeParse(a);if(!t.success)return{messageParsingErrors:[sm],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=Yi.safeParse(a);if(i){const o=t.data.llm.input_messages,c=(l=r.llm.invocation_parameters)==null?void 0:l.system;typeof c=="string"&&c&&(!o||o[0].message.role!=="system")&&t.data.llm.input_messages.unshift({message:{role:"system",content:c}})}}return{messageParsingErrors:[],messages:nr({provider:n,messages:t.data.llm.input_messages})}}function $m({provider:n,parsedAttributes:a}){const t=[],l=Tm.safeParse(a);if(l.success)return{output:nr({provider:n,messages:l.data.llm.output_messages}),outputParsingErrors:t};t.push(om);const i=xm.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:t}:(t.push(dm),{output:void 0,outputParsingErrors:t})}function Om(n){if(n==null)return null;switch(n.toLowerCase()){case"openai":return"OPENAI";case"anthropic":return"ANTHROPIC";case"google":return"GEMINI";case"azure":return"AZURE_OPENAI";default:return null}}function Qm(n){for(const a of Object.keys(Dl))if(Dl[a].some(l=>n.includes(l)))return a;return mc}function jm(n){const{success:a,data:t}=Lm.safeParse(n);if(a){const l=Om(t.llm.provider)||Qm(t.llm.model_name);return{modelConfig:{modelName:t.llm.model_name,provider:l,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[um]}}function qm(n,a=[]){const{success:t,data:l}=Yi.safeParse(n),i=[];return t||i.push(mm),{invocationParameters:Ym((l==null?void 0:l.llm.invocation_parameters)??{},a),parsingErrors:i}}function Um(n){const{success:a,data:t}=_m.safeParse(n);return a?{responseFormat:t.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[gm]}}function Bm(n){var a;return(((a=n==null?void 0:n.llm)==null?void 0:a.tools)??[]).map(t=>(t==null?void 0:t.tool)==null?null:{id:ja(),definition:t.tool.json_schema}).filter(t=>t!=null)}function Hm(n){var l;const{data:a,success:t}=wm.safeParse(n);return t?((l=a==null?void 0:a.llm)==null?void 0:l.tools)==null?{tools:null,parsingErrors:[]}:{tools:Bm(a),parsingErrors:[]}:{tools:null,parsingErrors:[pm]}}function Gm(n){var l;const{success:a,data:t}=Nm.safeParse(n);return a?((l=t==null?void 0:t.llm)==null?void 0:l.prompt_template)==null?{variables:null,parsingErrors:[]}:{variables:t.llm.prompt_template.variables,parsingErrors:[]}:{variables:null,parsingErrors:[ym]}}function Wm(n){const a=uc(),{json:t,parseError:l}=Ae(n.attributes);if(l)return{playgroundInstance:{...a,spanId:(n==null?void 0:n.id)??null},parsingErrors:[cm]};const i=n.invocationParameters,r=jm(t);let{modelConfig:o}=r;const{parsingErrors:c}=r,{messages:d,messageParsingErrors:m}=Vm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{output:f,outputParsingErrors:g}=$m({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{invocationParameters:y,parsingErrors:p}=qm(t,i),{variables:h,parsingErrors:b}=Gm(t),{parsingErrors:K}=Um(t);o=o!=null?{...o,invocationParameters:K.length>0?y.filter(P=>P.invocationName!==Qn&&P.canonicalName!==Un):y}:null;const{tools:T,parsingErrors:I}=Hm(t);return{playgroundInstance:{...a,model:o??a.model,template:d!=null?{__type:"chat",messages:d}:a.template,output:f,spanId:n.id,tools:T??a.tools},playgroundInput:h!=null?{variablesValueCache:h}:void 0,parsingErrors:[...m,...g,...c,...I,...p,...K,...b]}}const Jm=n=>Dm.safeParse(n).success,ar=({instance:n,templateLanguage:a})=>{if(a==On.NONE)return[];const t=new Set,l=n.template.__type,i=pc(a);switch(l){case"chat":{n.template.messages.forEach(r=>{(r.content==null?[]:i.extractVariables(r.content)).forEach(c=>{t.add(c)})});break}case"text_completion":{i.extractVariables(n.template.prompt).forEach(o=>{t.add(o)});break}default:me()}return Array.from(t)},Zm=({instances:n,templateLanguage:a})=>a==On.NONE?[]:Array.from(new Set(n.flatMap(t=>ar({instance:t,templateLanguage:a})))),tr=({instances:n,templateLanguage:a,input:t})=>{if(a==On.NONE)return{variablesMap:{},variableKeys:[]};const l=Zm({instances:n,templateLanguage:a}),i=t.variablesValueCache??{};return{variablesMap:l.reduce((o,c)=>(o[c]=i[c]||"",o),{}),variableKeys:l}};function Bn(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const Xm=(n,a)=>n.filter(t=>a.some(l=>Bn(l,t))).map(t=>{var l;return{...t,invocationName:((l=a.find(i=>Bn(i,t)))==null?void 0:l.invocationName)??t.invocationName}}),mt=n=>n.replace(/_([a-z])/g,(a,t)=>t.toUpperCase()),Ym=(n,a)=>Object.entries(n).map(([t,l])=>{const i=a.find(r=>r.canonicalName&&r.canonicalName.toLowerCase()===t.toLowerCase()||r.invocationName&&r.invocationName.toLowerCase()===t.toLowerCase());return i==null||i.invocationInputField==null||i.invocationName==null?null:{canonicalName:i.canonicalName,invocationName:i.invocationName,[mt(i.invocationInputField)]:l}}).filter(t=>t!=null),Ba=n=>{const{provider:a,validatedToolDefinition:t}=fc(n.definition);switch(a){case"OPENAI":case"AZURE_OPENAI":return t.function.name;case"ANTHROPIC":return t.name;case"UNKNOWN":return null;default:me()}},Pl=({provider:n,toolNumber:a})=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return{id:ja(),definition:Sl(a)};case"ANTHROPIC":return{id:ja(),definition:hc(a)};case"GEMINI":return{id:ja(),definition:Sl(a)};default:me()}},eg=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return bl();case"ANTHROPIC":return yc();case"GEMINI":return bl();default:me()}};function ng(n){return{content:n.content,role:ag(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function ag(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:me()}}const lr=({playgroundStore:n,instanceId:a,credentials:t})=>{const{instances:l}=n.getState(),i=l.find(m=>m.id===a);if(!i)throw new Error(`No instance found for id ${a}`);if(i.template.__type!=="chat")throw new Error("We only support chat templates for now");const r=i.model.supportedInvocationParameters;let o=[...i.model.invocationParameters];const c=Cm({toolChoice:i.toolChoice,targetProvider:i.model.provider});i.tools.length>0?(o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o.push({canonicalName:Ia,invocationName:Ua,valueJson:c})):o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o=r.length?Xm(o,r):o;const d=i.model.provider==="AZURE_OPENAI"?{endpoint:i.model.endpoint,apiVersion:i.model.apiVersion}:{};return{messages:i.template.messages.map(ng),model:{providerKey:i.model.provider,name:i.model.modelName||"",...d},invocationParameters:o,tools:i.tools.length?i.tools.map(m=>m.definition):void 0,apiKey:t[i.model.provider]||null}},tg=({playgroundStore:n,instanceId:a,credentials:t})=>{const l=lr({playgroundStore:n,instanceId:a,credentials:t}),{instances:i,templateLanguage:r,input:o}=n.getState(),{variablesMap:c}=tr({instances:i,input:o,templateLanguage:r});return{...l,template:{variables:c,language:r}}},Ll=({playgroundStore:n,instanceId:a,credentials:t,datasetId:l})=>({...lr({playgroundStore:n,instanceId:a,credentials:t}),templateLanguage:n.getState().templateLanguage,datasetId:l});function ir(n){return n==null||n===""?"{}":typeof n=="string"?n:JSON.stringify(n,null,2)}function rr(n,a){return a.filter(t=>t.required).every(t=>n.some(l=>Bn(l,t)))}const lg=n=>{for(const[a,t]of Object.entries(n))if(a.endsWith("DefaultValue")&&t!=null)return n[a]};function A1(n,a){const t=new Map(n.map(l=>[l.canonicalName||l.invocationName,l]));return a.forEach(l=>{var d;const i=l.canonicalName||l.invocationName,r=lg(l),o=mt(l.invocationInputField||"");if(!l.invocationName||!l.invocationInputField||!i||r==null||((d=t.get(i))==null?void 0:d[o])!=null)return;const c={canonicalName:l.canonicalName,invocationName:l.invocationName,[o]:r};t.set(i,c)}),Array.from(t.values())}const sr=u.createContext(null);function N1({children:n,...a}){const[t]=u.useState(()=>kc(a));return e(sr.Provider,{value:t,children:n})}function Ja(n,a){const t=ve.useContext(sr);if(!t)throw new Error("Missing CredentialsContext.Provider in the tree");return Ea(t,n,a)}const or=u.createContext(null);function ig(){const n=u.useContext(or);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function z1(n){return e(or.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}const rg=v`
|
|
1
|
+
import{z as R,aD as de,aE as Le,aF as _e,aG as Oa,A as _d,r as u,j as e,R as ve,n as Ea,D as v,l as s,aH as je,a0 as Y,U as B,t as L,a6 as Be,a7 as G,a8 as Ke,a9 as Te,ac as W,aI as he,aJ as mn,aK as gn,aL as Oe,aM as Ed,aN as Et,aO as Dn,aP as Ga,a2 as ie,aQ as Va,ab as Gn,g as Xl,aR as wd,a4 as zt,G as Rd,aS as Md,aT as bt,aU as St,aV as ka,aW as da,aX as Yl,o as Xa,aY as Ad,ay as Nd,az as zd,aZ as Vd,p as ei,q as $d,a_ as Od,ah as Qd,a$ as jd,b0 as fl,b1 as qd,b2 as Ud,b3 as Bd,b4 as Hd,b5 as Gd,b6 as Wd,b7 as Jd,b8 as Zd,b9 as Xd}from"./vendor-DvC8cT4X.js";import{A as ce,C as j,h as Vt,k as J,D as ee,B as $t,y as qe,z as ne,G as Yd,s as Ya,p as et,P as Wn,j as Jn,q as nt,v as Zn,w as ca,H as Xe,L as Qa,J as ni,K as ec,M as ai,N as nc,O as ac,Q as ua,e as we,f as Xn,T as ue,S as Ot,i as Re,g as ae,E as at,a as De,U as Qt,V as jt,c as Pn,o as hl,W as tc,n as lc,I as ic,m as kl,l as rc,u as sc,X as oc,r as dc,R as xa,d as ti}from"./vendor-arizeai-Do1793cv.js";import{s as qt,a as me,l as cc,j as li,b as Ae,i as ii,c as ri,d as Tn,e as si,f as uc,g as Da,D as mc,h as ja,k as gc,T as On,m as pc,n as bl,o as yc,p as fc,q as Sl,r as hc,t as kc,N as bc,u as Sc,L as ye,v as Ce,w as wa,B as vc,_ as k,x as Cn,I as D,C as Cc,G as oi,y as Ut,P as ma,z as tt,S as Fc,A as Kc,E as Tc,F as xc,H as Ic,J as Dc,K as Pc,M as Lc,O as un,Q as N,R as He,U as di,V as C,W as ze,X as Bt,Y as Yn,Z as Me,$ as F,a0 as pe,a1 as Fe,a2 as ga,a3 as pn,a4 as kn,a5 as lt,a6 as xe,a7 as re,a8 as Ze,a9 as Ln,aa as se,ab as Ne,ac as ci,ad as We,ae as ui,af as Ye,ag as _n,ah as Ht,ai as an,aj as bn,ak as Gt,al as mi,am as gi,an as yn,ao as ke,ap as be,aq as Se,ar as vl,as as Cl,at as Sn,au as _c,av as Ec,aw as U,ax as pi,ay as Wt,az as it,aA as pa,aB as yi,aC as ya,aD as fa,aE as fi,aF as vn,aG as Ee,aH as rt,aI as En,aJ as hi,aK as Jt,aL as tn,aM as ki,aN as wc,aO as Rc,aP as Mc,aQ as Ac,aR as Nc,aS as ln,aT as rn,aU as zc,aV as Ge,aW as Vc,aX as $c,aY as bi,aZ as Oc,a_ as Qc,a$ as Fl,b0 as jc,b1 as qc,b2 as Uc,b3 as Bc,b4 as Hc,b5 as Gc,b6 as Si,b7 as Wc,b8 as Jc,b9 as Zc,ba as Xc,bb as Yc,bc as qn,bd as Zt,be as vi,bf as ra,bg as wt,bh as $n,bi as Kn,bj as eu,bk as nu,bl as Ci,bm as st,bn as Fi,bo as sn,bp as au,bq as tu,br as Pa,bs as Pe,bt as qa,bu as Ki,bv as lu,bw as $e,bx as Xt,by as iu,bz as ru,bA as su,bB as ou,bC as Yt,bD as Ue,bE as en,bF as ha,bG as du,bH as ot,bI as Ti,bJ as xi,bK as vt,bL as cu,bM as dt,bN as ct,bO as Je,bP as Ve,bQ as uu,bR as el,bS as Ii,bT as Di,bU as Pi,bV as mu,bW as on,bX as Li,bY as xn,bZ as gu,b_ as Kl,b$ as _i,c0 as pu,c1 as yu,c2 as fu,c3 as hu,c4 as Ei,c5 as dn,c6 as ku,c7 as sa,c8 as Rt,c9 as bu,ca as wi,cb as Ri,cc as Su,cd as vu,ce as Cu,cf as ut,cg as Mi,ch as Ra,ci as Tl,cj as Ai,ck as nl,cl as Fu,cm as Ku,cn as al,co as Ni,cp as zi,cq as Tu,cr as Mt,cs as Vi,ct as xu,cu as Iu,cv as $a,cw as Du,cx as Pu,cy as $i,cz as Oi,cA as Lu,cB as _u,cC as Eu,cD as wu,cE as Qi,cF as tl,cG as ji,cH as Ru,cI as Mu,cJ as At,cK as Au,cL as Nu,cM as zu,cN as Vu,cO as $u,cP as Ou,cQ as qi,cR as Qu,cS as ju,cT as qu,cU as Uu,cV as Bu,cW as Hu,cX as Gu,cY as Wu,cZ as Ju,c_ as Zu,c$ as Xu,d0 as xl,d1 as Il}from"./components-CN9dra1h.js";import{p as Ma,R as wn,n as Rn,i as Yu,E as Ui,m as Bi,o as Hi,g as em}from"./vendor-codemirror-BzwZPyJM.js";import{R as Mn,C as Aa,X as An,Y as nn,a as Nn,T as zn,B as oa,A as La,b as Gi,c as ll,L as Wi,d as nm,P as am,e as tm,f as lm}from"./vendor-recharts-_Jb7JjhG.js";const im=4,rm={user:["user","human"],ai:["assistant","bot","ai"],system:["system"],tool:["tool"]},sm="Unable to parse span input messages, expected messages which include a role and content.",om="Unable to parse span output messages, expected messages which include a role and content.",dm="Unable to parse span output expected output.value to be present.",cm="Unable to parse span attributes, attributes must be valid JSON.",um="Unable to parse model config, expected llm.model_name to be present.",mm="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",gm="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",pm="Unable to parse tools, expected tools to be an array of valid tools.",ym="Unable to parse prompt template variables, expected prompt template variables to be a valid JSON object string.",Dl={AZURE_OPENAI:[],ANTHROPIC:["claude"],OPENAI:["gpt","o1"],GEMINI:["gemini"]},Ia="TOOL_CHOICE",Ua="tool_choice",Un="RESPONSE_FORMAT",Qn="response_format",fm=[Ia,Un],il=qt()(R.union([R.literal("auto"),R.literal("none"),R.literal("required"),R.object({type:R.literal("function"),function:R.object({name:R.string()})})])),rl=R.object({type:R.union([R.literal("auto"),R.literal("any"),R.literal("tool")]),disable_parallel_tool_use:R.boolean().optional(),name:R.string().optional()}),hm=rl.transform(n=>{switch(n.type){case"any":case"auto":return"auto";case"tool":return n.name?{type:"function",function:{name:n.name}}:"auto";default:return"auto"}}),km=il.transform(n=>typeof n=="string"?{type:"auto"}:{type:"tool",name:n.function.name});R.union([il,rl]);const bm=n=>{const{success:a,data:t}=il.safeParse(n);if(a)return{provider:"OPENAI",toolChoice:t};const{success:l,data:i}=rl.safeParse(n);return l?{provider:"ANTHROPIC",toolChoice:i}:{provider:null,toolChoice:null}},Sm=n=>{const{provider:a,toolChoice:t}=bm(n);if(a==null||t==null)throw new Error("Could not detect provider of tool choice");switch(a){case"AZURE_OPENAI":case"OPENAI":return t;case"ANTHROPIC":return hm.parse(t);default:me()}},vm=({toolChoice:n,targetProvider:a})=>{switch(a){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return km.parse(n);case"GEMINI":return n;default:me()}},Cm=({toolChoice:n,targetProvider:a})=>{try{const t=Sm(n);return vm({toolChoice:t,targetProvider:a})}catch{return null}},Fm=R.object({tool_call:R.object({id:R.string().optional(),function:R.object({name:R.string(),arguments:R.string()}).partial()}).partial()}).partial(),Ji=R.object({[de.message]:R.object({[Le.role]:R.string(),[Le.content]:R.union([R.string(),R.array(R.record(R.string(),R.unknown()))]).default(""),[Le.tool_calls]:R.array(Fm).optional(),[Le.tool_call_id]:R.string().optional()})}),Km=R.object({[de.llm]:R.object({[_e.input_messages]:R.array(Ji)})}),Tm=R.object({[de.llm]:R.object({[_e.output_messages]:R.array(Ji)})}),xm=R.object({[de.output]:R.object({value:R.string()})}),Zi=qt()(R.enum(["user","ai","system","tool"])),Im=qt()(R.object({id:R.number(),role:Zi,content:R.string().optional(),toolCallId:R.string().optional(),toolCalls:R.array(cc).optional()})),Dm=R.array(Im),sl=R.lazy(()=>R.record(li)),Pm=sl,Xi=R.string().transform((n,a)=>{const{json:t}=Ae(n);if(!ii(t))return a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER;const{success:l,data:i}=Pm.safeParse(t);return l?i:(a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER)}).default("{}"),Lm=R.object({[de.llm]:R.object({[_e.provider]:R.string().optional(),[_e.model_name]:R.string()})}),Yi=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi})}),_m=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi.pipe(R.object({response_format:sl.optional()}))})}),Em=R.string().transform((n,a)=>{const{json:t}=Ae(n);return t==null||!ii(t)?(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid JSON object"}),R.NEVER):t}).transform((n,a)=>{const{data:t,success:l}=ri.safeParse(n);return l?t:(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid tool schema"}),R.NEVER)}),wm=R.object({[de.llm]:R.object({[_e.tools]:R.array(R.object({[de.tool]:R.object({[Oa.json_schema]:Em})}).optional()).optional()}).optional()}).optional(),Rm=R.lazy(()=>R.object({type:R.literal("json_schema"),json_schema:R.object({name:R.string().describe("The name of the schema"),schema:li.describe("The schema itself in JSON format"),strict:R.literal(!0).describe("The schema must be strict")})})),Mm=_d(Rm,{removeAdditionalStrategy:"passthrough"}),Am=R.string().transform((n,a)=>{const{json:t}=Ae(n);return Tn(t)?Object.entries(t).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:c}=si(o);c!=null&&(i[r]=c)}return i},{}):(a.addIssue({code:R.ZodIssueCode.custom,message:"The prompt template variables must be a valid JSON object"}),R.NEVER)}),Nm=R.object({[de.llm]:R.object({[_e.prompt_template]:R.object({variables:Am}).optional()}).optional()}).optional();function er(n){return Zi.safeParse(n).success}function Wa(n){if(er(n))return n;for(const[a,t]of Object.entries(rm))if(t.includes(n))return a;return gc}function zm({toolCalls:n,provider:a}){if(n!=null)return n.map(({tool_call:t})=>{var i,r,o,c;if(t==null)return null;let l={};if(((i=t.function)==null?void 0:i.arguments)!=null){const{json:d}=Ae(t.function.arguments);Tn(d)&&(l=d)}switch(a){case"OPENAI":case"AZURE_OPENAI":return{id:t.id??"",function:{name:((r=t.function)==null?void 0:r.name)??"",arguments:l}};case"ANTHROPIC":return{id:t.id??"",type:"tool_use",name:((o=t.function)==null?void 0:o.name)??"",input:l};case"GEMINI":return{id:t.id??"",function:{name:((c=t.function)==null?void 0:c.name)??"",arguments:l}};default:me()}}).filter(t=>t!=null)}function nr({messages:n,provider:a}){return n.map(({message:t})=>({id:Da(),role:t.tool_call_id!=null?Wa("tool"):Wa(t.role),content:typeof t.content=="string"?t.content:void 0,toolCalls:zm({provider:a,toolCalls:t.tool_calls}),toolCallId:t.tool_call_id}))}function Vm({provider:n,parsedAttributes:a}){var l;const t=Km.safeParse(a);if(!t.success)return{messageParsingErrors:[sm],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=Yi.safeParse(a);if(i){const o=t.data.llm.input_messages,c=(l=r.llm.invocation_parameters)==null?void 0:l.system;typeof c=="string"&&c&&(!o||o[0].message.role!=="system")&&t.data.llm.input_messages.unshift({message:{role:"system",content:c}})}}return{messageParsingErrors:[],messages:nr({provider:n,messages:t.data.llm.input_messages})}}function $m({provider:n,parsedAttributes:a}){const t=[],l=Tm.safeParse(a);if(l.success)return{output:nr({provider:n,messages:l.data.llm.output_messages}),outputParsingErrors:t};t.push(om);const i=xm.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:t}:(t.push(dm),{output:void 0,outputParsingErrors:t})}function Om(n){if(n==null)return null;switch(n.toLowerCase()){case"openai":return"OPENAI";case"anthropic":return"ANTHROPIC";case"google":return"GEMINI";case"azure":return"AZURE_OPENAI";default:return null}}function Qm(n){for(const a of Object.keys(Dl))if(Dl[a].some(l=>n.includes(l)))return a;return mc}function jm(n){const{success:a,data:t}=Lm.safeParse(n);if(a){const l=Om(t.llm.provider)||Qm(t.llm.model_name);return{modelConfig:{modelName:t.llm.model_name,provider:l,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[um]}}function qm(n,a=[]){const{success:t,data:l}=Yi.safeParse(n),i=[];return t||i.push(mm),{invocationParameters:Ym((l==null?void 0:l.llm.invocation_parameters)??{},a),parsingErrors:i}}function Um(n){const{success:a,data:t}=_m.safeParse(n);return a?{responseFormat:t.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[gm]}}function Bm(n){var a;return(((a=n==null?void 0:n.llm)==null?void 0:a.tools)??[]).map(t=>(t==null?void 0:t.tool)==null?null:{id:ja(),definition:t.tool.json_schema}).filter(t=>t!=null)}function Hm(n){var l;const{data:a,success:t}=wm.safeParse(n);return t?((l=a==null?void 0:a.llm)==null?void 0:l.tools)==null?{tools:null,parsingErrors:[]}:{tools:Bm(a),parsingErrors:[]}:{tools:null,parsingErrors:[pm]}}function Gm(n){var l;const{success:a,data:t}=Nm.safeParse(n);return a?((l=t==null?void 0:t.llm)==null?void 0:l.prompt_template)==null?{variables:null,parsingErrors:[]}:{variables:t.llm.prompt_template.variables,parsingErrors:[]}:{variables:null,parsingErrors:[ym]}}function Wm(n){const a=uc(),{json:t,parseError:l}=Ae(n.attributes);if(l)return{playgroundInstance:{...a,spanId:(n==null?void 0:n.id)??null},parsingErrors:[cm]};const i=n.invocationParameters,r=jm(t);let{modelConfig:o}=r;const{parsingErrors:c}=r,{messages:d,messageParsingErrors:m}=Vm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{output:f,outputParsingErrors:g}=$m({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{invocationParameters:y,parsingErrors:p}=qm(t,i),{variables:h,parsingErrors:b}=Gm(t),{parsingErrors:K}=Um(t);o=o!=null?{...o,invocationParameters:K.length>0?y.filter(P=>P.invocationName!==Qn&&P.canonicalName!==Un):y}:null;const{tools:T,parsingErrors:I}=Hm(t);return{playgroundInstance:{...a,model:o??a.model,template:d!=null?{__type:"chat",messages:d}:a.template,output:f,spanId:n.id,tools:T??a.tools},playgroundInput:h!=null?{variablesValueCache:h}:void 0,parsingErrors:[...m,...g,...c,...I,...p,...K,...b]}}const Jm=n=>Dm.safeParse(n).success,ar=({instance:n,templateLanguage:a})=>{if(a==On.NONE)return[];const t=new Set,l=n.template.__type,i=pc(a);switch(l){case"chat":{n.template.messages.forEach(r=>{(r.content==null?[]:i.extractVariables(r.content)).forEach(c=>{t.add(c)})});break}case"text_completion":{i.extractVariables(n.template.prompt).forEach(o=>{t.add(o)});break}default:me()}return Array.from(t)},Zm=({instances:n,templateLanguage:a})=>a==On.NONE?[]:Array.from(new Set(n.flatMap(t=>ar({instance:t,templateLanguage:a})))),tr=({instances:n,templateLanguage:a,input:t})=>{if(a==On.NONE)return{variablesMap:{},variableKeys:[]};const l=Zm({instances:n,templateLanguage:a}),i=t.variablesValueCache??{};return{variablesMap:l.reduce((o,c)=>(o[c]=i[c]||"",o),{}),variableKeys:l}};function Bn(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const Xm=(n,a)=>n.filter(t=>a.some(l=>Bn(l,t))).map(t=>{var l;return{...t,invocationName:((l=a.find(i=>Bn(i,t)))==null?void 0:l.invocationName)??t.invocationName}}),mt=n=>n.replace(/_([a-z])/g,(a,t)=>t.toUpperCase()),Ym=(n,a)=>Object.entries(n).map(([t,l])=>{const i=a.find(r=>r.canonicalName&&r.canonicalName.toLowerCase()===t.toLowerCase()||r.invocationName&&r.invocationName.toLowerCase()===t.toLowerCase());return i==null||i.invocationInputField==null||i.invocationName==null?null:{canonicalName:i.canonicalName,invocationName:i.invocationName,[mt(i.invocationInputField)]:l}}).filter(t=>t!=null),Ba=n=>{const{provider:a,validatedToolDefinition:t}=fc(n.definition);switch(a){case"OPENAI":case"AZURE_OPENAI":return t.function.name;case"ANTHROPIC":return t.name;case"UNKNOWN":return null;default:me()}},Pl=({provider:n,toolNumber:a})=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return{id:ja(),definition:Sl(a)};case"ANTHROPIC":return{id:ja(),definition:hc(a)};case"GEMINI":return{id:ja(),definition:Sl(a)};default:me()}},eg=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return bl();case"ANTHROPIC":return yc();case"GEMINI":return bl();default:me()}};function ng(n){return{content:n.content,role:ag(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function ag(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:me()}}const lr=({playgroundStore:n,instanceId:a,credentials:t})=>{const{instances:l}=n.getState(),i=l.find(m=>m.id===a);if(!i)throw new Error(`No instance found for id ${a}`);if(i.template.__type!=="chat")throw new Error("We only support chat templates for now");const r=i.model.supportedInvocationParameters;let o=[...i.model.invocationParameters];const c=Cm({toolChoice:i.toolChoice,targetProvider:i.model.provider});i.tools.length>0?(o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o.push({canonicalName:Ia,invocationName:Ua,valueJson:c})):o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o=r.length?Xm(o,r):o;const d=i.model.provider==="AZURE_OPENAI"?{endpoint:i.model.endpoint,apiVersion:i.model.apiVersion}:{};return{messages:i.template.messages.map(ng),model:{providerKey:i.model.provider,name:i.model.modelName||"",...d},invocationParameters:o,tools:i.tools.length?i.tools.map(m=>m.definition):void 0,apiKey:t[i.model.provider]||null}},tg=({playgroundStore:n,instanceId:a,credentials:t})=>{const l=lr({playgroundStore:n,instanceId:a,credentials:t}),{instances:i,templateLanguage:r,input:o}=n.getState(),{variablesMap:c}=tr({instances:i,input:o,templateLanguage:r});return{...l,template:{variables:c,language:r}}},Ll=({playgroundStore:n,instanceId:a,credentials:t,datasetId:l})=>({...lr({playgroundStore:n,instanceId:a,credentials:t}),templateLanguage:n.getState().templateLanguage,datasetId:l});function ir(n){return n==null||n===""?"{}":typeof n=="string"?n:JSON.stringify(n,null,2)}function rr(n,a){return a.filter(t=>t.required).every(t=>n.some(l=>Bn(l,t)))}const lg=n=>{for(const[a,t]of Object.entries(n))if(a.endsWith("DefaultValue")&&t!=null)return n[a]};function A1(n,a){const t=new Map(n.map(l=>[l.canonicalName||l.invocationName,l]));return a.forEach(l=>{var d;const i=l.canonicalName||l.invocationName,r=lg(l),o=mt(l.invocationInputField||"");if(!l.invocationName||!l.invocationInputField||!i||r==null||((d=t.get(i))==null?void 0:d[o])!=null)return;const c={canonicalName:l.canonicalName,invocationName:l.invocationName,[o]:r};t.set(i,c)}),Array.from(t.values())}const sr=u.createContext(null);function N1({children:n,...a}){const[t]=u.useState(()=>kc(a));return e(sr.Provider,{value:t,children:n})}function Ja(n,a){const t=ve.useContext(sr);if(!t)throw new Error("Missing CredentialsContext.Provider in the tree");return Ea(t,n,a)}const or=u.createContext(null);function ig(){const n=u.useContext(or);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function z1(n){return e(or.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}const rg=v`
|
|
2
2
|
display: flex;
|
|
3
3
|
direction: row;
|
|
4
4
|
height: 100vh;
|
|
@@ -3336,7 +3336,7 @@ fragment ExperimentsTableFragment_2HEEH6 on Dataset {
|
|
|
3336
3336
|
align-items: center;
|
|
3337
3337
|
color: var(--ac-global-color-primary);
|
|
3338
3338
|
gap: var(--ac-global-dimension-size-50);
|
|
3339
|
-
`;function yh(n){const{datasetId:a,experimentIds:t,displayFullText:l}=n,[i,r]=u.useState(""),o=L.useLazyLoadQuery(Io,{experimentIds:t,datasetId:a,filterCondition:i}),c=u.useMemo(()=>{var I,P;return((P=(I=o.dataset)==null?void 0:I.experiments)==null?void 0:P.edges.reduce((w,S)=>{var x,_;return w[S.experiment.id]={...S.experiment,projectId:((_=(x=S.experiment)==null?void 0:x.project)==null?void 0:_.id)||null},w},{}))||{}},[o]),d=u.useMemo(()=>o.comparisons.map(I=>{const P=I.runComparisonItems.reduce((w,S)=>(w[S.experimentId]=S,w),{});return{...I,id:I.example.id,input:I.example.revision.input,referenceOutput:I.example.revision.referenceOutput,runComparisonMap:P}}),[o]),[m,f]=u.useState(null),g=u.useMemo(()=>[{header:"input",accessorKey:"input",minWidth:500,cell:({row:I})=>e(Tl,{controls:s(ue,{children:[e(N,{size:"S","aria-label":"View example details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(u.Suspense,{children:e(ol,{exampleId:I.original.example.id,onDismiss:()=>{f(null)}})}))})}}),e(De,{children:"View Example"})]}),children:e(ul,{children:e(Ra,{json:I.original.input,disableTitle:!0,space:l?2:0})})})},{header:"reference output",accessorKey:"referenceOutput",minWidth:500,cell:l?bh:sa}],[l]),y=u.useMemo(()=>t.map(I=>({header:()=>{var _,E,O,z;const P=(_=c[I])==null?void 0:_.name,w=(E=c[I])==null?void 0:E.metadata,S=(O=c[I])==null?void 0:O.projectId,x=((z=c[I])==null?void 0:z.sequenceNumber)||0;return s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",justifyContent:"space-between",children:[s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",children:[e(ut,{sequenceNumber:x}),e(F,{children:P})]}),e(Mi,{experimentId:I,metadata:w,isQuiet:!0,projectId:S})]})},accessorKey:I,minSize:500,cell:({row:P})=>{var H,Z;const w=P.original.runComparisonMap[I],S=(w==null?void 0:w.runs.length)||0;if(S===0)return e(jl,{});if(S>1)return e(F,{color:"warning",children:`${S} runs`});const x=w==null?void 0:w.runs[0];let _=null;const E=(H=x==null?void 0:x.trace)==null?void 0:H.traceId,O=(Z=x==null?void 0:x.trace)==null?void 0:Z.projectId;return E&&O&&(_=s(ue,{children:[e(N,{variant:"default",className:"trace-button",size:"S","aria-label":"View run trace",icon:e(D,{svg:e(lt,{})}),onPress:()=>{u.startTransition(()=>{f(e(Mo,{traceId:E,projectId:O,title:"Experiment Run Trace"}))})}}),e(De,{children:"View Trace"})]})),x?e(Tl,{controls:s(B,{children:[s(ue,{children:[e(N,{variant:"default",className:"expand-button",size:"S","aria-label":"View example run details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(Sh,{selectedExample:P.original,datasetId:a,experimentInfoById:c}))})}}),e(De,{children:"View run details"})]}),_]}),children:e(kh,{...x,displayFullText:l,setDialog:f})}):e(jl,{})}})),[t,c,a,l]),p=u.useMemo(()=>[...g,...y
|
|
3339
|
+
`;function yh(n){const{datasetId:a,experimentIds:t,displayFullText:l}=n,[i,r]=u.useState(""),o=L.useLazyLoadQuery(Io,{experimentIds:t,datasetId:a,filterCondition:i}),c=u.useMemo(()=>{var I,P;return((P=(I=o.dataset)==null?void 0:I.experiments)==null?void 0:P.edges.reduce((w,S)=>{var x,_;return w[S.experiment.id]={...S.experiment,projectId:((_=(x=S.experiment)==null?void 0:x.project)==null?void 0:_.id)||null},w},{}))||{}},[o]),d=u.useMemo(()=>o.comparisons.map(I=>{const P=I.runComparisonItems.reduce((w,S)=>(w[S.experimentId]=S,w),{});return{...I,id:I.example.id,input:I.example.revision.input,referenceOutput:I.example.revision.referenceOutput,runComparisonMap:P}}),[o]),[m,f]=u.useState(null),g=u.useMemo(()=>[{header:"input",accessorKey:"input",minWidth:500,cell:({row:I})=>e(Tl,{controls:s(ue,{children:[e(N,{size:"S","aria-label":"View example details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(u.Suspense,{children:e(ol,{exampleId:I.original.example.id,onDismiss:()=>{f(null)}})}))})}}),e(De,{children:"View Example"})]}),children:e(ul,{children:e(Ra,{json:I.original.input,disableTitle:!0,space:l?2:0})})})},{header:"reference output",accessorKey:"referenceOutput",minWidth:500,cell:l?bh:sa}],[l]),y=u.useMemo(()=>t.map(I=>({header:()=>{var _,E,O,z;const P=(_=c[I])==null?void 0:_.name,w=(E=c[I])==null?void 0:E.metadata,S=(O=c[I])==null?void 0:O.projectId,x=((z=c[I])==null?void 0:z.sequenceNumber)||0;return s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",justifyContent:"space-between",children:[s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",children:[e(ut,{sequenceNumber:x}),e(F,{children:P})]}),e(Mi,{experimentId:I,metadata:w,isQuiet:!0,projectId:S})]})},accessorKey:I,minSize:500,cell:({row:P})=>{var H,Z;const w=P.original.runComparisonMap[I],S=(w==null?void 0:w.runs.length)||0;if(S===0)return e(jl,{});if(S>1)return e(F,{color:"warning",children:`${S} runs`});const x=w==null?void 0:w.runs[0];let _=null;const E=(H=x==null?void 0:x.trace)==null?void 0:H.traceId,O=(Z=x==null?void 0:x.trace)==null?void 0:Z.projectId;return E&&O&&(_=s(ue,{children:[e(N,{variant:"default",className:"trace-button",size:"S","aria-label":"View run trace",icon:e(D,{svg:e(lt,{})}),onPress:()=>{u.startTransition(()=>{f(e(Mo,{traceId:E,projectId:O,title:"Experiment Run Trace"}))})}}),e(De,{children:"View Trace"})]})),x?e(Tl,{controls:s(B,{children:[s(ue,{children:[e(N,{variant:"default",className:"expand-button",size:"S","aria-label":"View example run details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(Sh,{selectedExample:P.original,datasetId:a,experimentInfoById:c}))})}}),e(De,{children:"View run details"})]}),_]}),children:e(kh,{...x,displayFullText:l,setDialog:f})}):e(jl,{})}})),[t,c,a,l]),p=u.useMemo(()=>[...g,...y],[g,y]),h=Ke({columns:p,data:d,getCoreRowModel:Te(),columnResizeMode:"onChange"}),b=ve.useMemo(()=>{const I=h.getFlatHeaders(),P={};for(let w=0;w<I.length;w++){const S=I[w];P[`--header-${S.id}-size`]=S.getSize(),P[`--col-${S.column.id}-size`]=S.column.getSize()}return P},[h.getState().columnSizingInfo,h.getState().columnSizing]),T=h.getRowModel().rows.length===0;return s(k,{direction:"column",height:"100%",children:[e(C,{paddingTop:"size-100",paddingBottom:"size-100",paddingStart:"size-200",paddingEnd:"size-200",borderBottomColor:"grey-300",borderBottomWidth:"thin",flex:"none",children:e(uh,{onValidCondition:r})}),s("div",{css:gh,children:[s("table",{css:v(tn,Ai),style:{...b,width:h.getTotalSize(),minWidth:"100%"},children:[e("thead",{children:h.getHeaderGroups().map(I=>e("tr",{children:I.headers.map(P=>s("th",{style:{width:`calc(var(--header-${P==null?void 0:P.id}-size) * 1px)`},children:[e("div",{children:W(P.column.columnDef.header,P.getContext())}),e("div",{onMouseDown:P.getResizeHandler(),onTouchStart:P.getResizeHandler(),className:`resizer ${P.column.getIsResizing()?"isResizing":""}`})]},P.id))},I.id))}),T?e(sn,{}):h.getState().columnSizingInfo.isResizingColumn?e(fh,{table:h}):e(Eo,{table:h})]}),e(ee,{isDismissable:!0,type:"slideOver",onDismiss:()=>{f(null)},children:m})]})]})}function Eo({table:n}){return e("tbody",{children:n.getRowModel().rows.map(a=>e("tr",{children:a.getVisibleCells().map(t=>e("td",{style:{width:`calc(var(--col-${t.column.id}-size) * 1px)`,wordBreak:"break-all"},children:W(t.column.columnDef.cell,t.getContext())},t.id))},a.id))})}const fh=ve.memo(Eo,(n,a)=>n.table.options.data===a.table.options.data);function hh(n){const{datasetId:a,exampleId:t}=n,l=Y();return e("div",{onClick:i=>{i.preventDefault(),i.stopPropagation()},children:e(Jn,{buttonSize:"compact",align:"end",onAction:i=>{switch(i){case"gotoExample":return l(`/datasets/${a}/examples/${t}`);default:me()}},children:e(ie,{children:s(k,{direction:"row",gap:"size-75",justifyContent:"start",alignItems:"center",children:[e(D,{svg:e(Ku,{})}),e(F,{children:"Go to example"})]})},"gotoExample")})})}function kh(n){const{output:a,error:t,startTime:l,endTime:i,annotations:r,displayFullText:o,setDialog:c}=n;if(t)return e(wo,{error:t});const d=r!=null&&r.edges.length?r.edges.map(m=>m.annotation):[];return s(k,{direction:"column",gap:"size-100",height:"100%",justifyContent:"space-between",children:[e(ul,{children:e(Ra,{json:a,disableTitle:!0,space:o?2:0})}),s("ul",{css:v`
|
|
3340
3340
|
display: flex;
|
|
3341
3341
|
flex-direction: row;
|
|
3342
3342
|
gap: var(--ac-global-dimension-static-size-100);
|
phoenix/trace/trace_dataset.py
CHANGED
|
@@ -196,6 +196,17 @@ class TraceDataset:
|
|
|
196
196
|
end_time: Optional[datetime] = cast(datetime, row.get("end_time"))
|
|
197
197
|
if end_time is pd.NaT:
|
|
198
198
|
end_time = None
|
|
199
|
+
events = cast(Any, row.get("events"))
|
|
200
|
+
if isinstance(events, np.ndarray):
|
|
201
|
+
events = events.tolist()
|
|
202
|
+
elif isinstance(events, str):
|
|
203
|
+
events = json.loads(events)
|
|
204
|
+
assert isinstance(events, list)
|
|
205
|
+
elif isinstance(events, Iterable):
|
|
206
|
+
events = list(events)
|
|
207
|
+
elif pd.isna(events):
|
|
208
|
+
events = []
|
|
209
|
+
assert isinstance(events, list)
|
|
199
210
|
yield json_to_span(
|
|
200
211
|
{
|
|
201
212
|
"name": row["name"],
|
|
@@ -207,7 +218,7 @@ class TraceDataset:
|
|
|
207
218
|
"status_code": row["status_code"],
|
|
208
219
|
"status_message": row.get("status_message") or "",
|
|
209
220
|
"attributes": attributes,
|
|
210
|
-
"events":
|
|
221
|
+
"events": events,
|
|
211
222
|
"conversation": row.get("conversation"),
|
|
212
223
|
}
|
|
213
224
|
)
|
phoenix/utilities/client.py
CHANGED
|
@@ -3,7 +3,7 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from phoenix.config import get_env_client_headers
|
|
6
|
+
from phoenix.config import get_env_client_headers
|
|
7
7
|
|
|
8
8
|
PHOENIX_SERVER_VERSION_HEADER = "x-phoenix-server-version"
|
|
9
9
|
|
|
@@ -18,11 +18,11 @@ class VersionedClient(httpx.Client):
|
|
|
18
18
|
|
|
19
19
|
super().__init__(*args, **kwargs)
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if
|
|
25
|
-
self.headers[
|
|
21
|
+
# Preserve headers set via instantiation, since
|
|
22
|
+
# they were explicitly entered by the user.
|
|
23
|
+
for k, v in get_env_client_headers().items():
|
|
24
|
+
if k not in self.headers:
|
|
25
|
+
self.headers[k] = v
|
|
26
26
|
|
|
27
27
|
self._client_phoenix_version = phoenix_version
|
|
28
28
|
self._warned_on_minor_version_mismatch = False
|
|
@@ -82,11 +82,11 @@ class VersionedAsyncClient(httpx.AsyncClient):
|
|
|
82
82
|
|
|
83
83
|
super().__init__(*args, **kwargs)
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if
|
|
89
|
-
self.headers[
|
|
85
|
+
# Preserve headers set via instantiation, since
|
|
86
|
+
# they were explicitly entered by the user.
|
|
87
|
+
for k, v in get_env_client_headers().items():
|
|
88
|
+
if k not in self.headers:
|
|
89
|
+
self.headers[k] = v
|
|
90
90
|
|
|
91
91
|
self._client_phoenix_version = phoenix_version
|
|
92
92
|
self._warned_on_minor_version_mismatch = False
|
phoenix/utilities/re.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from re import compile, split
|
|
3
|
+
from typing import Optional
|
|
3
4
|
from urllib.parse import unquote
|
|
4
5
|
|
|
5
6
|
logger = logging.getLogger(__name__)
|
|
@@ -18,7 +19,7 @@ _HEADER_PATTERN = compile(_KEY_VALUE_FORMAT)
|
|
|
18
19
|
_DELIMITER_PATTERN = compile(r"[ \t]*,[ \t]*")
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
def parse_env_headers(s: str) -> dict[str, str]:
|
|
22
|
+
def parse_env_headers(s: Optional[str]) -> dict[str, str]:
|
|
22
23
|
"""
|
|
23
24
|
Parse ``s``, which is a ``str`` instance containing HTTP headers encoded
|
|
24
25
|
for use in ENV variables per the W3C Baggage HTTP header format at
|
|
@@ -28,6 +29,8 @@ def parse_env_headers(s: str) -> dict[str, str]:
|
|
|
28
29
|
src: https://github.com/open-telemetry/opentelemetry-python/blob/2d5cd58f33bd8a16f45f30be620a96699bc14297/opentelemetry-api/src/opentelemetry/util/re.py#L52
|
|
29
30
|
"""
|
|
30
31
|
headers: dict[str, str] = {}
|
|
32
|
+
if not s:
|
|
33
|
+
return headers
|
|
31
34
|
headers_list: list[str] = split(_DELIMITER_PATTERN, s)
|
|
32
35
|
for header in headers_list:
|
|
33
36
|
if not header: # empty string
|
phoenix/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "7.9.
|
|
1
|
+
__version__ = "7.9.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|